MCRC=A54ECE33 MVersion=1.1.8 ; Default transition animation used for Fade_In DefaultAnimateFadeIn(direction,time){ Global Fade_hwnd1,Fade_hdc1,fadeLyr1CanvasX,fadeLyr1CanvasY,fadeLyr1CanvasW,fadeLyr1CanvasH Global Fade_hwnd2,Fade_hdc2,fadeLyr2CanvasX,fadeLyr2CanvasY,fadeLyr2CanvasW,fadeLyr2CanvasH Global Fade_hwnd3Static,Fade_hdc3Static,fadeLyr3StaticCanvasX,fadeLyr3StaticCanvasY,fadeLyr3StaticCanvasW,fadeLyr3StaticCanvasH Global Fade_hwnd3,Fade_hdc3,fadeLyr3CanvasX,fadeLyr3CanvasY,fadeLyr3CanvasW,fadeLyr3CanvasH Global Fade_hwnd4,Fade_hdc4,fadeLyr4CanvasX,fadeLyr4CanvasY,fadeLyr4CanvasW,fadeLyr4CanvasH,FadeLayer4AnimFilesAr Global Fade_hwnd5,Fade_hdc5,fadeLyr5CanvasX,fadeLyr5CanvasY,fadeLyr5CanvasW,fadeLyr5CanvasH Global Fade_hwnd6,Fade_hdc6,fadeLyr6CanvasX,fadeLyr6CanvasY,fadeLyr6CanvasW,fadeLyr6CanvasH Global Fade_hwnd7,Fade_hdc7,fadeLyr7CanvasX,fadeLyr7CanvasY,fadeLyr7CanvasW,fadeLyr7CanvasH Log("DefaultAnimateFadeIn - Started, direction is: " . direction) startTime := A_TickCount If direction = in Log("DefaultAnimateFadeIn - Drawing First FadeIn Image.", 1) Loop{ t := ((TimeElapsed := A_TickCount-startTime) < time) ? (If direction="in" ? 255*(timeElapsed/time) : 255*(1-(timeElapsed/time))) : (If direction="in" ? 255 : 0) if fadeLyr1CanvasW Alt_UpdateLayeredWindow(Fade_hwnd1, Fade_hdc1, fadeLyr1CanvasX, fadeLyr1CanvasY, fadeLyr1CanvasW, fadeLyr1CanvasH, t) ; to fade in, set transparency to 0 at first if fadeLyr2CanvasW Alt_UpdateLayeredWindow(Fade_hwnd2,Fade_hdc2,fadeLyr2CanvasX,fadeLyr2CanvasY,fadeLyr2CanvasW,fadeLyr2CanvasH, t) If direction = out { if fadeLyr3StaticCanvasW Alt_UpdateLayeredWindow(Fade_hwnd3Static, Fade_hdc3Static,fadeLyr3StaticCanvasX,fadeLyr3StaticCanvasY, fadeLyr3StaticCanvasW, fadeLyr3StaticCanvasH, t) if fadeLyr3CanvasW Alt_UpdateLayeredWindow(Fade_hwnd3, Fade_hdc3,fadeLyr3CanvasX,fadeLyr3CanvasY, fadeLyr3CanvasW, fadeLyr3CanvasH, t) if fadeLyr5CanvasW Alt_UpdateLayeredWindow(Fade_hwnd5, Fade_hdc5,fadeLyr5CanvasX,fadeLyr5CanvasY, fadeLyr5CanvasW, fadeLyr5CanvasH, t) if fadeLyr6CanvasW Alt_UpdateLayeredWindow(Fade_hwnd6, Fade_hdc6,fadeLyr6CanvasX,fadeLyr6CanvasY, fadeLyr6CanvasW, fadeLyr6CanvasH, t) if fadeLyr7CanvasW Alt_UpdateLayeredWindow(Fade_hwnd7, Fade_hdc7,fadeLyr7CanvasX,fadeLyr7CanvasY, fadeLyr7CanvasW, fadeLyr7CanvasH, t) If FadeLayer4AnimFilesAr.MaxIndex() > 0 { SetTimer, FadeLayer4Anim, Off Alt_UpdateLayeredWindow(Fade_hwnd4, Fade_hdc4,fadeLyr4CanvasX,fadeLyr4CanvasY, fadeLyr4CanvasW, fadeLyr4CanvasH, t) } } If (direction = "in" && t >= 255) or (direction = "out" && t <= 0) Break } Log("DefaultAnimateFadeIn - Ended") } ; Default transition animation used for Fade_Out DefaultAnimateFadeOut(direction,time){ Global FadeOut_hwnd1,FadeOut_hdc1,fadeOutLyr1CanvasX,fadeOutLyr1CanvasY,fadeOutLyr1CanvasW,fadeOutLyr1CanvasH Global fadeOutExtraScreen,FadeOutExtraScreen_ID,RLMediaPath,SystemName,dbName Log("DefaultAnimateFadeOut - Started, direction is: " . direction) If fadeOutExtraScreen = true { Log("DefaultAnimateFadeOut - Destroying FadeOutBlackScreen",4) AnimateWindow(FadeOutExtraScreen_ID, "out", "fade", 100) ; animate FadeOutBlackScreen out quickly Gui, FadeOutExtraScreen:Destroy ; destroy the temporary FadeOutBlackScreen } startTime := A_TickCount Loop{ t := ((TimeElapsed := A_TickCount-startTime) < time) ? (If direction="in" ? 255*(timeElapsed/time) : 255*(1-(timeElapsed/time))) : (If direction="in" ? 255 : 0) Alt_UpdateLayeredWindow(FadeOut_hwnd1, FadeOut_hdc1, fadeOutLyr1CanvasX,fadeOutLyr1CanvasY,fadeOutLyr1CanvasW,fadeOutLyr1CanvasH, t) ; to fade in, set transparency to 0 at first If (direction = "in" && t >= 255) or (direction = "out" && t <= 0) { If (direction = "in") { ; play exit sound Log("DefaultAnimateFadeOut - Searching for an exit sound",4) If FileExist(RLMediaPath . "\Fade\" . SystemName . "\" . dbName . "\exit.mp3") exitSound := RLMediaPath . "\Fade\" . SystemName . "\" . dbName . "\exit.mp3" Else If FileExist(RLMediaPath . "\Fade\" . SystemName . "\_Default\exit.mp3") exitSound := RLMediaPath . "\Fade\" . SystemName . "\_Default\exit.mp3" Else If FileExist(RLMediaPath . "\Fade\_Default\exit.mp3") exitSound := RLMediaPath . "\Fade\_Default\exit.mp3" If exitSound { Log("DefaultAnimateFadeOut - Playing " . exitSound) SoundPlay, %exitSound%, 1 ; wait till sound is done playing } } Break } } Log("DefaultAnimateFadeOut - Ended") } ; Legacy fadein animation for use when gdi does not work with an emulator. Jpgs are not supported and will not show on this legacy gui LegacyFadeInTransition(direction,time){ Global Fade_hwnd1,Fade_hdc1,Fade_G1,fadeLyr1CanvasX,fadeLyr1CanvasY,fadeLyr1CanvasW,fadeLyr1CanvasH Global Fade_hwnd2,Fade_hdc2,fadeLyr2CanvasX,fadeLyr2CanvasY,fadeLyr2CanvasW,fadeLyr2CanvasH Global Fade_hwnd3Static,Fade_hdc3Static,fadeLyr3StaticCanvasX,fadeLyr3StaticCanvasY,fadeLyr3StaticCanvasW,fadeLyr3StaticCanvasH Global Fade_hwnd3,Fade_hdc3,fadeLyr3CanvasX,fadeLyr3CanvasY,fadeLyr3CanvasW,fadeLyr3CanvasH Global Fade_hwnd4,Fade_hdc4,fadeLyr4CanvasX,fadeLyr4CanvasY,fadeLyr4CanvasW,fadeLyr4CanvasH Global Fade_hwnd5,Fade_hdc5,fadeLyr5CanvasX,fadeLyr5CanvasY,fadeLyr5CanvasW,fadeLyr5CanvasH Global Fade_hwnd6,Fade_hdc6,fadeLyr6CanvasX,fadeLyr6CanvasY,fadeLyr6CanvasW,fadeLyr6CanvasH Global Fade_hwnd7,Fade_hdc7,fadeLyr7CanvasX,fadeLyr7CanvasY,fadeLyr7CanvasW,fadeLyr7CanvasH Global fadeLyr1PicW,fadeLyr1PicH,fadeInLyr1File,fadeLyr1Color,fadeLyr1AlignImage Global baseScreenWidth,baseScreenHeight Log("LegacyFadeInTransition - Started, direction is: " . direction) StringTrimLeft,fadeLyr1ColorNoAlpha,fadeLyr1Color,2 ; for legacy gui, we need to trim the alpha from the color as it's not supported If direction = in { Log("LegacyFadeInTransition - Drawing First FadeIn Image.", 1) Gui, Fade_GUI1:Color, %fadeLyr1ColorNoAlpha% GetBGPicPosition(fadeLyr1PicXNew,fadeLyr1PicYNew,fadeLyr1PicWNew,fadeLyr1PicHNew,fadeLyr1PicW,fadeLyr1PicH,fadeLyr1AlignImage) ; get the background pic's new position and size If (fadeLyr1AlignImage = "Stretch and Lose Aspect") Gui, Fade_GUI1:Add, Picture,w%baseScreenWidth% h%baseScreenHeight% x0 y0, %fadeInLyr1File% Else If (fadeLyr1AlignImage = "Stretch and Keep Aspect" Or fadeLyr1AlignImage = "Center Width" Or fadeLyr1AlignImage = "Center Height" Or fadeLyr1AlignImage = "Align to Bottom Left" Or fadeLyr1AlignImage = "Align to Bottom Right") Gui, Fade_GUI1:Add, Picture,w%fadeLyr1PicWNew% h%fadeLyr1PicHNew% x%fadeLyr1PicXNew% y%fadeLyr1PicYNew%, %fadeInLyr1File% Else If (fadeLyr1AlignImage = "Center") ; original image size and aspect Gui, Fade_GUI1:Add, Picture,w%fadeLyr1PicW% h%fadeLyr1PicH% x%fadeLyr1PicXNew% y%fadeLyr1PicYNew%, %fadeInLyr1File% Else If (fadeLyr1AlignImage = "Align to Top Right") ; place the pic so the top right corner matches the screen's top right corner Gui, Fade_GUI1:Add, Picture,w%fadeLyr1PicWNew% h%fadeLyr1PicHNew% x%fadeLyr1PicXNew% y0, %fadeInLyr1File% Else ; place the pic so the top left corner matches the screen's top left corner, also the default Gui, Fade_GUI1:Add, Picture,w%fadeLyr1PicWNew% h%fadeLyr1PicHNew% x0 y0, %fadeInLyr1File% Gui, Fade_GUI1:Show, x0 y0 h%baseScreenHeight% w%baseScreenWidth% Hide } If direction = out { SetTimer, FadeLayer4Anim, Off Gdip_GraphicsClear(Fade_G2) Gdip_GraphicsClear(Fade_G3Static) Gdip_GraphicsClear(Fade_G3) Gdip_GraphicsClear(Fade_G4) Gdip_GraphicsClear(Fade_G5) Gdip_GraphicsClear(Fade_G6) Gdip_GraphicsClear(Fade_G7) Alt_UpdateLayeredWindow(Fade_hwnd2, Fade_hdc2, fadeLyr2CanvasX, fadeLyr2CanvasY, fadeLyr2CanvasW, fadeLyr2CanvasH) Alt_UpdateLayeredWindow(Fade_hwnd3Static, Fade_hdc3Static,fadeLyr3StaticCanvasX,fadeLyr3StaticCanvasY, fadeLyr3StaticCanvasW, fadeLyr3StaticCanvasH) Alt_UpdateLayeredWindow(Fade_hwnd3, Fade_hdc3, fadeLyr3CanvasX, fadeLyr3CanvasY, fadeLyr3CanvasW, fadeLyr3CanvasH) Alt_UpdateLayeredWindow(Fade_hwnd4, Fade_hdc4, fadeLyr4CanvasX, fadeLyr4CanvasY, fadeLyr4CanvasW, fadeLyr4CanvasH) Alt_UpdateLayeredWindow(Fade_hwnd5, Fade_hdc5, fadeLyr5CanvasX, fadeLyr5CanvasY, fadeLyr5CanvasW, fadeLyr5CanvasH) Alt_UpdateLayeredWindow(Fade_hwnd6, Fade_hdc6, fadeLyr6CanvasX, fadeLyr6CanvasY, fadeLyr6CanvasW, fadeLyr6CanvasH) Alt_UpdateLayeredWindow(Fade_hwnd7, Fade_hdc7, fadeLyr7CanvasX, fadeLyr7CanvasY, fadeLyr7CanvasW, fadeLyr7CanvasH) } AnimateWindow(Fade_hwnd1, direction, "fade", time) ; animate in fadeLayer1 If direction = in Alt_UpdateLayeredWindow(Fade_hwnd2, Fade_hdc2, fadeLyr2CanvasX, fadeLyr2CanvasY, fadeLyr2CanvasW, fadeLyr2CanvasH) ; AnimateWindow(1_ID, direction, "slide bt", time) ; slide Log("LegacyFadeInTransition - Ended") } ; Legacy fadeout animation for use when gdi does not work with an emulator. Jpgs are not supported and will not show on this legacy gui LegacyFadeOutTransition(direction,time){ Global FadeOut_hwnd1, FadeOut_hdc1, fadeOutLyr1CanvasX,fadeOutLyr1CanvasY,fadeOutLyr1CanvasW,fadeOutLyr1CanvasH Global fadeOutExtraScreen,FadeOutExtraScreen_ID Global lyr1OutPicW,lyr1OutPicH,lyr1OutFile,fadeLyr1Color,fadeLyr1AlignImage Global baseScreenWidth,baseScreenHeight ;,fadeOutBlackScreenEnabled,FadeOutBlackScreen_ID Log("LegacyFadeOutTransition - Started, direction is: " . direction) StringTrimLeft,fadeLyr1ColorNoAlpha,fadeLyr1Color,2 ; for legacy gui, we need to trim the alpha from the color as it's not supported If direction = in { Gui, FadeOut_GUI1:Color, %fadeLyr1ColorNoAlpha% GetBGPicPosition(fadeLyr1OutPicXNew,fadeLyr1OutPicYNew,fadeLyr1OutPicWNew,fadeLyr1OutPicHNew,lyr1OutPicW,lyr1OutPicH,fadeLyr1AlignImage) ; get the background pic's new position and size If (fadeLyr1AlignImage = "Stretch and Lose Aspect") Gui, FadeOut_GUI1:Add, Picture,w%baseScreenWidth% h%baseScreenHeight% x0 y0, %lyr1OutFile% Else If (fadeLyr1AlignImage = "Stretch and Keep Aspect" Or fadeLyr1AlignImage = "Center Width" Or fadeLyr1AlignImage = "Center Height" Or fadeLyr1AlignImage = "Align to Bottom Left" Or fadeLyr1AlignImage = "Align to Bottom Right") Gui, FadeOut_GUI1:Add, Picture,w%fadeLyr1OutPicWNew% h%fadeLyr1OutPicHNew% x%fadeLyr1OutPicXNew% y%fadeLyr1OutPicYNew%, %lyr1OutFile% Else If (fadeLyr1AlignImage = "Center") ; original image size and aspect Gui, FadeOut_GUI1:Add, Picture,w%lyr1OutPicW% h%lyr1OutPicH% x%fadeLyr1OutPicXNew% y%fadeLyr1OutPicYNew%, %lyr1OutFile% Else If (fadeLyr1AlignImage = "Align to Top Right") ; place the pic so the top right corner matches the screen's top right corner Gui, FadeOut_GUI1:Add, Picture,w%fadeLyr1OutPicWNew% h%fadeLyr1OutPicHNew% x%fadeLyr1OutPicXNew% y0, %lyr1OutFile% Else ; place the pic so the top left corner matches the screen's top left corner, also the default Gui, FadeOut_GUI1:Add, Picture,w%fadeLyr1OutPicWNew% h%fadeLyr1OutPicHNew% x0 y0, %lyr1OutFile% Gui, FadeOut_GUI1:Show, x0 y0 h%baseScreenHeight% w%baseScreenWidth% Hide } If fadeOutExtraScreen = true { Log("LegacyFadeOutTransition - Destroying FadeOutBlackScreen",4) AnimateWindow(FadeOutExtraScreen_ID, "out", "fade", 100) ; animate FadeOutBlackScreen out quickly Gui, FadeOutExtraScreen:Destroy ; destroy the temporary FadeOutBlackScreen } AnimateWindow(FadeOut_hwnd1, direction, "fade", time) ; animate in fadeLayer1 ; AnimateWindow(out1_ID, direction, "slide bt", time) ; slide Log("LegacyFadeOutTransition - Ended") } ; Bleasby's DefaultFadeAnimation included in RocketLauncher - you can use it on both layer 3 animation and layer 3 7z animation DefaultFadeAnimation: ;SetTimer, DetectFadeError, Off Log("DefaultFadeAnimation - Started") ;====== Begin of menu code fadeInActive=1 ; As long as user did not press a key to exit fade, this var will be filled and fade will do its full animation ;====== Loading info about layer 3 image if fadeLyr3StaticPrefix fadeInLyr3StaticFile := GetFadePicFile(fadeLyr3StaticPrefix) If FileExist(fadeInLyr3StaticFile) ; If a layer 3 static image exists, let's get its dimensions { fadeLyr3StaticPic := Gdip_CreateBitmapFromFile(fadeInLyr3StaticFile) Gdip_GetImageDimensions(fadeLyr3StaticPic, fadeLyr3StaticPicW, fadeLyr3StaticPicH) ; find Width and Height If (fadeLyr3StaticPos = "Stretch and Lose Aspect"){ fadeLyr3StaticPicW := baseScreenWidth fadeLyr3StaticPicH := baseScreenHeight fadeLyr3StaticPicPadX := 0 , fadeLyr3StaticPicPadY := 0 } else if (fadeLyr3StaticPos = "Stretch and Keep Aspect"){ widthMaxPercent := ( baseScreenWidth / fadeLyr3StaticPicW ) ; get the percentage needed to maximumise the image so it reaches the screen's width heightMaxPercent := ( baseScreenHeight / fadeLyr3StaticPicH ) percentToEnlarge := If (widthMaxPercent < heightMaxPercent) ? widthMaxPercent : heightMaxPercent ; this basicallys says if the width's max reaches the screen's width first, use the width's percentage instead of the height's fadeLyr3StaticPicW := Round(fadeLyr3StaticPicW * percentToEnlarge) fadeLyr3StaticPicH := Round(fadeLyr3StaticPicH * percentToEnlarge) fadeLyr3StaticPicPadX := 0 , fadeLyr3StaticPicPadY := 0 } else { if (!(fadeLyr3StaticW)) and (!(fadeLyr3StaticH)){ fadeLyr3StaticPicW := Round(fadeLyr3StaticPicW * fadeXScale * fadeLyr3StaticAdjust) fadeLyr3StaticPicH := Round(fadeLyr3StaticPicH * fadeYScale * fadeLyr3StaticAdjust) } else if (fadeLyr3StaticW) and (!(fadeLyr3StaticH)){ fadeLyr3StaticPicH := Round( fadeLyr3StaticPicH * (fadeLyr3StaticPicW / Round(fadeLyr3StaticPicW * fadeLyr3StaticAdjust)) ) fadeLyr3StaticPicW := Round(fadeLyr3StaticW * fadeLyr3StaticAdjust) } else if (!(fadeLyr3StaticW)) and (fadeLyr3StaticH){ fadeLyr3StaticPicW := Round( fadeLyr3StaticPicW * (fadeLyr3StaticPicH / Round(fadeLyr3StaticH * fadeLyr3StaticAdjust)) ) fadeLyr3StaticPicH := Round(fadeLyr3StaticH * fadeLyr3StaticAdjust) } else { fadeLyr3StaticPicW := Round(fadeLyr3StaticW * fadeLyr3StaticAdjust) fadeLyr3StaticPicH := Round(fadeLyr3StaticH * fadeLyr3StaticAdjust) } } GetFadePicPosition(fadeLyr3StaticPicX,fadeLyr3StaticPicY,fadeLyr3StaticX,fadeLyr3StaticY,fadeLyr3StaticPicW,fadeLyr3StaticPicH,fadeLyr3StaticPos) ; figure out what quadrant the layer 3 Static image is in, so we know to apply a + or - pad value so the user does not have to If fadeLyr3StaticPos in No Alignment,Center,Top Left Corner fadeLyr3StaticPicPadX:=fadeLyr3StaticPicPad, fadeLyr3StaticPicPadY:=fadeLyr3StaticPicPad Else If fadeLyr3StaticPos = Top Center fadeLyr3StaticPicPadX:=0, fadeLyr3StaticPicPadY:=fadeLyr3StaticPicPad Else If fadeLyr3StaticPos = Left Center fadeLyr3StaticPicPadX:=fadeLyr3StaticPicPad, fadeLyr3StaticPicPadY:=0 Else If fadeLyr3StaticPos = Top Right Corner fadeLyr3StaticPicPadX:=fadeLyr3StaticPicPad*-1, fadeLyr3StaticPicPadY:=fadeLyr3StaticPicPad Else If fadeLyr3StaticPos = Right Center fadeLyr3StaticPicPadX:=fadeLyr3StaticPicPad*-1, fadeLyr3StaticPicPadY:=0 Else If fadeLyr3StaticPos = Bottom Left Corner fadeLyr3StaticPicPadX:=fadeLyr3StaticPicPad, fadeLyr3StaticPicPadY:=fadeLyr3StaticPicPad*-1 Else If fadeLyr3StaticPos = Bottom Center fadeLyr3StaticPicPadX:=0, fadeLyr3StaticPicPadY:=fadeLyr3StaticPicPad*-1 Else If fadeLyr3StaticPos = Bottom Right Corner fadeLyr3StaticPicPadX:=fadeLyr3StaticPicPad*-1, fadeLyr3StaticPicPadY:=fadeLyr3StaticPicPad*-1 fadeLyr3StaticCanvasX := fadeLyr3StaticPicX + fadeLyr3StaticPicPadX , fadeLyr3StaticCanvasY := fadeLyr3StaticPicY + fadeLyr3StaticPicPadY fadeLyr3StaticCanvasW := fadeLyr3StaticPicW, fadeLyr3StaticCanvasH := fadeLyr3StaticPicH pGraphUpd(Fade_G3Static,fadeLyr3StaticCanvasW,fadeLyr3StaticCanvasH) Gdip_Alt_DrawImage(Fade_G3Static, fadeLyr3StaticPic, 0, 0, fadeLyr3StaticPicW, fadeLyr3StaticPicH) } ;====== Loading info about layer 3 image fadeInLyr3File := GetFadePicFile("Layer 3") If FileExist(fadeInLyr3File) { fadeLyr3Pic := Gdip_CreateBitmapFromFile(fadeInLyr3File) Gdip_GetImageDimensions(fadeLyr3Pic, fadeLyr3PicOrigW, fadeLyr3PicOrigH) if (!(fadeLyr3W)) and (!(fadeLyr3H)){ fadeLyr3PicW := Round(fadeLyr3PicOrigW * fadeXScale * fadeLyr3Adjust) fadeLyr3PicH := Round(fadeLyr3PicOrigH * fadeYScale * fadeLyr3Adjust) } else if (fadeLyr3W) and (!(fadeLyr3H)){ fadeLyr3PicH := Round( fadeLyr3PicH * (fadeLyr3PicW / Round(fadeLyr3PicW * fadeLyr3Adjust)) ) fadeLyr3PicW := Round(fadeLyr3W * fadeLyr3Adjust) } else if (!(fadeLyr3W)) and (fadeLyr3H){ fadeLyr3PicW := Round( fadeLyr3PicW * (fadeLyr3PicH / Round(fadeLyr3H * fadeLyr3Adjust)) ) fadeLyr3PicH := Round(fadeLyr3H * fadeLyr3Adjust) } else { fadeLyr3PicW := Round(fadeLyr3W * fadeLyr3Adjust) fadeLyr3PicH := Round(fadeLyr3H * fadeLyr3Adjust) } GetFadePicPosition(fadeLyr3PicX,fadeLyr3PicY,fadeLyr3X,fadeLyr3Y,fadeLyr3PicW,fadeLyr3PicH,fadeLyr3Pos) If fadeLyr3Pos in No Alignment,Center,Top Left Corner fadeLyr3PicPadX:=fadeLyr3PicPad, fadeLyr3PicPadY:=fadeLyr3PicPad Else If fadeLyr3Pos = Top Center fadeLyr3PicPadX:=0, fadeLyr3PicPadY:=fadeLyr3PicPad Else If fadeLyr3Pos = Left Center fadeLyr3PicPadX:=fadeLyr3PicPad, fadeLyr3PicPadY:=0 Else If fadeLyr3Pos = Top Right Corner fadeLyr3PicPadX:=fadeLyr3PicPad*-1, fadeLyr3PicPadY:=fadeLyr3PicPad Else If fadeLyr3Pos = Right Center fadeLyr3PicPadX:=fadeLyr3PicPad*-1, fadeLyr3PicPadY:=0 Else If fadeLyr3Pos = Bottom Left Corner fadeLyr3PicPadX:=fadeLyr3PicPad, fadeLyr3PicPadY:=fadeLyr3PicPad*-1 Else If fadeLyr3Pos = Bottom Center fadeLyr3PicPadX:=0, fadeLyr3PicPadY:=fadeLyr3PicPad*-1 Else If fadeLyr3Pos = Bottom Right Corner fadeLyr3PicPadX:=fadeLyr3PicPad*-1, fadeLyr3PicPadY:=fadeLyr3PicPad*-1 fadeLyr3PicX := fadeLyr3PicX+fadeLyr3PicPadX fadeLyr3PicY := fadeLyr3PicY+fadeLyr3PicPadY } ;====== Loading Gif Files GifAnimation := GetFadeGifFile("Anim") If GifAnimation { AnimatedGifControl_GetImageDimensions(GifAnimation, GifWidth, GifHeight) if (!(fadeLyr4W)) and (!(fadeLyr4H)){ fadeLyr4PicW := Round(GifWidth * fadeXScale * fadeLyr4Adjust) fadeLyr4PicH := Round(GifHeight * fadeYScale * fadeLyr4Adjust) } else if (fadeLyr4W) and (!(fadeLyr4H)){ fadeLyr4PicH := Round( GifHeight * (GifWidth / Round(GifWidth * fadeLyr4Adjust)) ) fadeLyr4PicW := Round(fadeLyr4W * fadeLyr4Adjust) } else if (!(fadeLyr4W)) and (fadeLyr4H){ fadeLyr4PicW := Round( GifWidth * (GifHeight / Round(fadeLyr4H * fadeLyr4Adjust)) ) fadeLyr4PicH := Round(fadeLyr4H * fadeLyr4Adjust) } else { fadeLyr4PicW := Round(fadeLyr4W * fadeLyr4Adjust) fadeLyr4PicH := Round(fadeLyr4H * fadeLyr4Adjust) } If (fadeLyr4Pos = "Above Layer 3 - Left") { fadeLyr4PicX := fadeLyr3PicX fadeLyr4PicY := fadeLyr3PicY-fadeLyr4PicH } Else If (fadeLyr4Pos = "Above Layer 3 - Center") { fadeLyr4PicX := fadeLyr3PicX+fadeLyr3PicW/2 fadeLyr4PicY := fadeLyr3PicY-fadeLyr4PicH } Else If (fadeLyr4Pos = "Above Layer 3 - Right") { fadeLyr4PicX := fadeLyr3PicX+fadeLyr3PicW-fadeLyr4PicX fadeLyr4PicY := fadeLyr3PicY-fadeLyr4PicH } Else { GetFadePicPosition(fadeLyr4PicX,fadeLyr4PicY,fadeLyr4X,fadeLyr4Y,fadeLyr4PicW,fadeLyr4PicH,fadeLyr4Pos) } fadeTranspGifColor := % "0x" . fadeTranspGifColor Gui, Fade_GifAnim_GUI: +OwnerFade_GUI3 -Caption +LastFound +ToolWindow +AlwaysOnTop GifAnim_GUI_ID := WinExist() Gui, Fade_GifAnim_GUI: Color, %fadeTranspGifColor% WinSet, TransColor, %fadeTranspGifColor% , ahk_id %GifAnim_GUI_ID% hAniGif1 := AniGif_CreateControl(GifAnim_GUI_ID, 0, 0, fadeLyr4PicW,fadeLyr4PicH, "center") } ;====== Loading Layer 4 Animation Files If !GifAnimation { FadeLayer4AnimFilesAr := GetFadeAnimFiles("Layer",4) If FadeLayer4AnimFilesAr.MaxIndex() > 0 { For index, value in FadeLayer4AnimFilesAr { FadeLayer4Anim%a_index%Pic := Gdip_CreateBitmapFromFile(value) FadeLayer4AnimTotal := a_index } Gdip_GetImageDimensions(FadeLayer4Anim1Pic, fadeLyr4PicW, fadeLyr4PicH) if (!(fadeLyr4W)) and (!(fadeLyr4H)){ fadeLyr4PicW := Round(fadeLyr4PicW * fadeLyr4Adjust) fadeLyr4PicH := Round(fadeLyr4PicH * fadeLyr4Adjust) } else if (fadeLyr4W) and (!(fadeLyr4H)){ fadeLyr4PicH := Round( fadeLyr4PicH * (fadeLyr4PicW / Round(fadeLyr4PicW * fadeLyr4Adjust)) ) fadeLyr4PicW := Round(fadeLyr4W * fadeLyr4Adjust) } else if (!(fadeLyr4W)) and (fadeLyr4H){ fadeLyr4PicW := Round( fadeLyr4PicW * (fadeLyr4PicH / Round(fadeLyr4H * fadeLyr4Adjust)) ) fadeLyr4PicH := Round(fadeLyr4H * fadeLyr4Adjust) } else { fadeLyr4PicW := Round(fadeLyr4W * fadeLyr4Adjust) fadeLyr4PicH := Round(fadeLyr4H * fadeLyr4Adjust) } If (fadeLyr4Pos = "Above Layer 3 - Left") { fadeLyr4PicX := fadeLyr3PicX fadeLyr4PicY := fadeLyr3PicY-fadeLyr4PicH } Else If (fadeLyr4Pos = "Above Layer 3 - Center") { fadeLyr4PicX := fadeLyr3PicX+fadeLyr3PicW/2 fadeLyr4PicY := fadeLyr3PicY-fadeLyr4PicH } Else If (fadeLyr4Pos = "Above Layer 3 - Right") { fadeLyr4PicX := fadeLyr3PicX+fadeLyr3PicW-fadeLyr4PicX fadeLyr4PicY := fadeLyr3PicY-fadeLyr4PicH } Else { GetFadePicPosition(fadeLyr4PicX,fadeLyr4PicY,fadeLyr4X,fadeLyr4Y,fadeLyr4PicW,fadeLyr4PicH,fadeLyr4Pos) } } } ;Layer 4 padding If fadeLyr4PicX < baseScreenWidth//2 fadeLyr4PicX := fadeLyr4PicX+fadeLyr4PicPad Else fadeLyr4PicX := fadeLyr4PicX-fadeLyr4PicPad If fadeLyr4PicY < baseScreenHeight//2 fadeLyr4PicX := fadeLyr4PicX+fadeLyr4PicPad Else fadeLyr4PicX := fadeLyr4PicX-fadeLyr4PicPad ;====== Loading Bar options If ((fadeLyr3Type = "bar") or (fadeLyr3Type = "ImageAndBar")) and ((fadeBar="true") or ( (fadeBar="7zOnly") and ((found7z="true") and (7zEnabled = "true") and !7zTempRomExists and use7zAnimation)) ) { ;Creating Progress Bar Brushes fadeBrushWindow1 := Gdip_CreateLineBrushFromRect(0, 0, fadeBarWindowW, fadeBarWindowH, 0xff555555, 0xff050505) fadeBrushWindow2 := Gdip_BrushCreateHatch(0xff000000, 0x00000000, fadeBarWindowHatchStyle) fadeBrushBarBack := Gdip_BrushCreateSolid("0x" . fadeBarBackColor) fadeBrushBar := Gdip_BrushCreateHatch(0x00000000, "0x" . fadeBarColor, fadeBarHatchStyle) if (fadeBarWindow="Image") { fadeLyr3ProgressBarFile := GetFadePicFile("Progress Bar") fadeLyr3ProgressBar := Gdip_CreateBitmapFromFile(fadeLyr3ProgressBarFile) Gdip_GetImageDimensions(fadeLyr3ProgressBar, fadeBarImageW, fadeBarImageH) if (!(fadeBarWindowW)) and (!(fadeBarWindowH)){ fadeBarWindowW := fadeBarImageW fadeBarWindowH := fadeBarImageH } else if (fadeBarWindowW) and (!(fadeBarWindowH)){ fadeBarWindowW := Round(fadeBarImageW*fadeXScale) fadeBarWindowH := Round(fadeBarImageH*fadeXScale) } else if (!(fadeBarWindowW)) and (fadeBarWindowH){ fadeBarWindowW := Round(fadeBarImageW*fadeYScale) fadeBarWindowH := Round(fadeBarImageH*fadeYScale) } else { fadeBarWindowW := Round(fadeBarImageW*fadeXScale) fadeBarWindowH := Round(fadeBarImageH*fadeYScale) } } fadeBarW := fadeBarWindowW-2*fadeBarWindowM ; controls the bar's width, calculated from the bar window width and margin ;Progress Bar fadeBarX := fadeBarWindowM ; Relative to window update area yBar := (fadeBarWindowH-fadeBarH)//2 ; Relative to window update area ; Percentage Text Gdip_FontFamilyCreate(fadeFont) ; Creating font family ;Acquiring text font size Loop, parse, fadeText1Options, %A_Space% { If (InStr(A_LoopField, "s")=1) stringtrimleft, fadeText1Height, A_LoopField, 1 } Loop, parse, fadeText2Options, %A_Space% { If (InStr(A_LoopField, "s")=1) stringtrimleft, fadeText2Height, A_LoopField, 1 } If !fadeText1X fadeText1X := fadeBarX ; text1 X is set in relation to the bar X If not set by the user If !fadeText1Y fadeText1Y := round((fadeBarWindowH-fadeBarH)//2-1.5*fadeText1Height) ; text1 Y calculation If not set by the user If !fadeText2X fadeText2X := fadeBarWindowW-fadeBarWindowM ; text2 X calculation If not set by the user If !fadeText2Y fadeText2Y := round((fadeBarWindowH+fadeBarH)//2+0.5*fadeText2Height) ; text2 Y calculation If not set by the user ; Window Update Area If (fadeLyr3Type = "bar") { xTopLeft := If fadeBarWindowX ? fadeBarWindowX : (baseScreenWidth-fadeBarWindowW)//2 ; calculates where the X of the topleft corner of the bar window needs to be yTopLeft := If fadeBarWindowY ? fadeBarWindowY : (baseScreenHeight-fadeBarWindowH)//2 ; calculates where the Y of the topleft corner of the bar window needs to be } Else { xTopLeft := If fadeBarWindowX ? fadeBarWindowX : (baseScreenWidth-fadeBarWindowW)//2+fadeBarXOffset ; calculates where the X of the topleft corner of the bar window needs to be yTopLeft := If fadeBarWindowY ? fadeBarWindowY : (baseScreenHeight-fadeBarWindowH)//2+fadeBarYOffset ; calculates where the Y of the topleft corner of the bar window needs to be } } Else { xTopLeft := fadeLyr3PicX yTopLeft := fadeLyr3PicY } ;====== Loading extraction time text info If !fadeExtractionTimeTextX fadeExtractionTimeTextX := fadeBarWindowM ; text X calculation If not set by the user If !fadeExtractionTimeTextY fadeExtractionTimeTextY := round((fadeBarWindowH+fadeBarH)//2+0.5*fadeText2Height) ; text Y calculation If not set by the user ;====== Redefining Layer 3 to cover image plus bar size ; Defining Layer 3 update area If ((fadeLyr3Type = "bar") and ((fadeBar="true") or ( (fadeBar="7zOnly") and ((found7z="true") and (7zEnabled = "true") and !7zTempRomExists and use7zAnimation)) )){ fadeLyr3CanvasX := xTopLeft fadeLyr3CanvasY := yTopLeft fadeLyr3CanvasW := fadeBarWindowW fadeLyr3CanvasH := fadeBarWindowH } Else If ((fadeLyr3Type = "ImageAndBar") and ((fadeBar="true") or ( (fadeBar="7zOnly") and ((found7z="true") and (7zEnabled = "true") and !7zTempRomExists and use7zAnimation)) )){ fadeLyr3CanvasX := fadeLyr3PicX < xTopLeft ? fadeLyr3PicX : xTopLeft fadeLyr3CanvasY := fadeLyr3PicY < yTopLeft ? fadeLyr3PicY : yTopLeft fadeLyr3CanvasW := fadeLyr3PicX+fadeLyr3PicW-fadeLyr3CanvasX > xTopLeft+fadeBarWindowW-fadeLyr3CanvasX ? fadeLyr3PicX+fadeLyr3PicW-fadeLyr3CanvasX : xTopLeft+fadeBarWindowW-fadeLyr3CanvasX fadeLyr3CanvasH := fadeLyr3PicY+fadeLyr3PicH-fadeLyr3CanvasY > yTopLeft+fadeBarWindowH-fadeLyr3CanvasY ? fadeLyr3PicY+fadeLyr3PicH-fadeLyr3CanvasY : yTopLeft+fadeBarWindowH-fadeLyr3CanvasY } Else { ;(fadeLyr3Type = "image") fadeLyr3CanvasX := fadeLyr3PicX fadeLyr3CanvasY := fadeLyr3PicY fadeLyr3CanvasW := fadeLyr3PicW fadeLyr3CanvasH := fadeLyr3PicH } ;====== Rom Info Text romInfoText := [] ; 1,1 - romInfoText ; 1,2 romInfoTextContent ; 1,3 - romInfoTextFormatedContent ; 1,4 - romInfoTextOptions ; 1,5 - romInfoBitmap ; 1,6 - romInfoBitmapX ; 1,7 - romInfoBitmapY ; 1,8 - romInfoBitmapW ; 1,9 - romInfoBitmapH clearGameName := gameInfo["Name"].Value stringSplit, clearGameName, clearGameName, ( clearGameName := clearGameName1 Displacement := 0 Loop, parse, fadeRomInfoOrder,|, { romInfoText[A_Index,1] := A_LoopField If (romInfoText[A_Index,1] = "Description") { descriptionTextIndex := A_Index romInfoText[A_Index,2] := gameInfo["Name"].Value If (fadeRomInfoDescription="filtered text") { romInfoText[A_Index,3] := clearGameName } else if (fadeRomInfoDescription="text") { romInfoText[A_Index,3] := romInfoText[A_Index,2] } else if (fadeRomInfoDescription="filtered text with label") { romInfoText[A_Index,3] := "Game: " . clearGameName } else if (fadeRomInfoDescription="text with label") { romInfoText[A_Index,3] := "Game: " . romInfoText[A_Index,2] } } Else If (romInfoText[A_Index,1] = "SystemName") { romInfoText[A_Index,2] := systemName If (fadeRomInfoSystemName="text with label") { romInfoText[A_Index,3] := "System: " . romInfoText[A_Index,2] } Else romInfoText[A_Index,3] := romInfoText[A_Index,2] } Else If (romInfoText[A_Index,1] = "Year") { yearTextIndex := A_Index romInfoText[A_Index,2] := gameInfo["Year"].Value If (fadeRomInfoYear="text with label") { romInfoText[A_Index,3] := "Year: " . romInfoText[A_Index,2] } Else romInfoText[A_Index,3] := romInfoText[A_Index,2] } Else If (romInfoText[A_Index,1] = "Manufacturer") { manufacturerTextIndex := A_Index romInfoText[A_Index,2] := gameInfo["Manufacturer"].Value If (fadeRomInfoManufacturer="text with label") { romInfoText[A_Index,3] := "Manufacturer: " . romInfoText[A_Index,2] } Else romInfoText[A_Index,3] := romInfoText[A_Index,2] } Else If (romInfoText[A_Index,1] = "Genre") { romInfoText[A_Index,2] := gameInfo["Genre"].Value If (fadeRomInfoGenre="text with label") { romInfoText[A_Index,3] := "Genre: " . romInfoText[A_Index,2] } Else romInfoText[A_Index,3] := romInfoText[A_Index,2] } Else If (romInfoText[A_Index,1] = "Rating") { romInfoText[A_Index,2] := gameInfo["Rating"].Value If (fadeRomInfoRating="text with label") { romInfoText[A_Index,3] := "Rating: " . romInfoText[A_Index,2] } Else romInfoText[A_Index,3] := romInfoText[A_Index,2] } } ; Resizing text if does not fit the defined width Loop, 6 { currentRomInfoTextIndex := A_Index currentRomInfoTextType := "fadeRomInfo" . romInfoText[currentRomInfoTextIndex,1] if !((%currentRomInfoTextType%="Image")or(%currentRomInfoTextType%="Disabled")){ RegExMatch(fadeRomInfoText%currentRomInfoTextIndex%Options, "i)W([\-\d\.]+)(p*)", Width) if Width { RegExMatch(fadeRomInfoText%currentRomInfoTextIndex%Options, "i)S([\-\d\.]+)(p*)", Size) StringReplace, textOptions, fadeRomInfoText%currentRomInfoTextIndex%Options, %Width%, Width := SubStr(Width, 2), FontSize := SubStr(Size, 2) textLength := MeasureText(romInfoText[currentRomInfoTextIndex,3],textOptions,fadeFont) if (textLength>Width) { loop, { StringReplace, textOptions, textOptions, % "S" . FontSize, % "S" . FontSize-5 FontSize := FontSize - 5 textLength := MeasureText(romInfoText[currentRomInfoTextIndex,3],textOptions,fadeFont) if (textLength Size ? maxromInfoTextSize : Size } } If (fadeRomInfoTextPlacement="corners"){ romInfoText[1,4] := "x" . fadeRomInfoTextMargin . " y" . fadeRomInfoTextMargin . " Left " . romInfoText[1,4] romInfoText[1,6] := fadeRomInfoTextMargin romInfoText[1,7] := fadeRomInfoTextMargin romInfoText[2,4] := "x" . baseScreenWidth-fadeRomInfoTextMargin . " y" . fadeRomInfoTextMargin . " Right " . romInfoText[2,4] romInfoText[2,6] := baseScreenWidth-fadeRomInfoTextMargin-romInfoText[2,8] romInfoText[2,7] := fadeRomInfoTextMargin romInfoText[3,4] := "x" . fadeRomInfoTextMargin . " y" . baseScreenHeight-maxromInfoTextSize-fadeRomInfoTextMargin . " Left " . romInfoText[3,4] romInfoText[3,6] := fadeRomInfoTextMargin romInfoText[3,7] := baseScreenHeight-fadeRomInfoTextMargin-romInfoText[3,9] romInfoText[4,4] := "x" . baseScreenWidth-fadeRomInfoTextMargin . " y" . baseScreenHeight-maxromInfoTextSize-fadeRomInfoTextMargin . " Right " . romInfoText[4,4] romInfoText[4,6] := baseScreenWidth-fadeRomInfoTextMargin-romInfoText[4,8] romInfoText[4,7] := baseScreenHeight-fadeRomInfoTextMargin-romInfoText[4,9] romInfoText[5,4] := "x" . baseScreenWidth//2 . " y" . fadeRomInfoTextMargin . " Center " . romInfoText[5,4] romInfoText[5,6] := (baseScreenWidth-romInfoText[5,8])//2 romInfoText[5,7] := fadeRomInfoTextMargin romInfoText[6,4] := "x" . baseScreenWidth//2 . " y" . baseScreenHeight-maxromInfoTextSize-fadeRomInfoTextMargin . " Center " . romInfoText[6,4] romInfoText[6,6] := (baseScreenWidth-romInfoText[6,8])//2 romInfoText[6,7] := baseScreenHeight-fadeRomInfoTextMargin-romInfoText[6,9] } Else { Loop, 6 { currentRomInfoTextType := "fadeRomInfo" . romInfoText[A_Index,1] If ((fadeRomInfoTextPlacement="bottomRight") or (fadeRomInfoTextPlacement="bottomLeft")) { If ((%currentRomInfoTextType%="Text") or (%currentRomInfoTextType%="filtered text") or (%currentRomInfoTextType%="filtered text with label") or (%currentRomInfoTextType%="text with label")) Displacement := Displacement + (maxromInfoTextSize+10) Else If (%currentRomInfoTextType%="Image") Displacement := Displacement + ( romInfoText[A_Index,9] +10) } If (fadeRomInfoTextPlacement="topRight") { romInfoText[A_Index,4] := "x" . baseScreenWidth-fadeRomInfoTextMargin . " y" . Displacement+fadeRomInfoTextMargin . " Right " . romInfoText[A_Index,4] romInfoText[A_Index,6] := baseScreenWidth-fadeRomInfoTextMargin-romInfoText[A_Index,8] romInfoText[A_Index,7] := Displacement+fadeRomInfoTextMargin } Else If (fadeRomInfoTextPlacement="topLeft") { romInfoText[A_Index,4] := "x" . fadeRomInfoTextMargin . " y" . Displacement+fadeRomInfoTextMargin . " Left " . romInfoText[A_Index,4] romInfoText[A_Index,6] := fadeRomInfoTextMargin romInfoText[A_Index,7] := Displacement+fadeRomInfoTextMargin } Else If (fadeRomInfoTextPlacement="bottomRight") { romInfoText[A_Index,4] := "x" . baseScreenWidth-fadeRomInfoTextMargin . " y" . baseScreenHeight-Displacement-fadeRomInfoTextMargin . " Right " . romInfoText[A_Index,4] romInfoText[A_Index,6] := baseScreenWidth-fadeRomInfoTextMargin-romInfoText[A_Index,8] romInfoText[A_Index,7] := baseScreenHeight-fadeRomInfoTextMargin-Displacement } Else If (fadeRomInfoTextPlacement="bottomLeft") { romInfoText[A_Index,4] := "x" . fadeRomInfoTextMargin . " y" . baseScreenHeight-Displacement-fadeRomInfoTextMargin . " Left " . romInfoText[A_Index,4] romInfoText[A_Index,6] := fadeRomInfoTextMargin romInfoText[A_Index,7] := baseScreenHeight-fadeRomInfoTextMargin-Displacement } If ((fadeRomInfoTextPlacement="topRight") or (fadeRomInfoTextPlacement="topLeft")) { If ((%currentRomInfoTextType%="Text") or (%currentRomInfoTextType%="filtered text") or (%currentRomInfoTextType%="filtered text with label") or (%currentRomInfoTextType%="text with label")) Displacement := Displacement + (maxromInfoTextSize+10) Else If (%currentRomInfoTextType%="Image") Displacement := Displacement + ( romInfoText[A_Index,9] +10) } } } } ;====== Statistics Info Text If !( (fadeRomInfoTextPlacement=fadestatsInfoTextPlacement) and ((fadeRomInfoTextPlacement="topRight") or (fadeRomInfoTextPlacement="topLeft") or (fadeRomInfoTextPlacement="bottomRight") or (fadeRomInfoTextPlacement="bottomLeft")) ) Displacement := 0 If (statisticsEnabled = "true"){ If ((fadeStats_Number_of_Times_Played<>disabled) or (fadeStats_Last_Time_Played<>disabled) or (fadeStats_Average_Time_Played<>disabled) or (fadeStats_Total_Time_Played<>disabled) or (fadeStats_System_Total_Played_Time<>disabled) or (fadeStats_Total_Global_Played_Time<>disabled) ){ ;Load statistics If (!romTable && mgCandidate) romTable := CreateRomTable(dbName) Totaldiscsofcurrentgame:=romTable.MaxIndex() If (Totaldiscsofcurrentgame>1) DescriptionNameWithoutDisc := romTable[1,4] Else DescriptionNameWithoutDisc := gameInfo["Name"].Value stringsplit, DescriptionNameSplit, DescriptionNameWithoutDisc, "(", ;Only game description name ClearDescriptionName := RegexReplace( DescriptionNameSplit1, "^\s+|\s+$" ) ; Statistics cleared game name IniRead, Number_of_Times_Played, % RLDataPath . "\Statistics\" . systemName . ".ini", % dbName, Number_of_Times_Played, 0 IniRead, Last_Time_Played, % RLDataPath . "\Statistics\" . systemName . ".ini", % dbName, Last_Time_Played, 0 IniRead, Average_Time_Played, % RLDataPath . "\Statistics\" . systemName . ".ini", % dbName, Average_Time_Played, 0 IniRead, Total_Time_Played, % RLDataPath . "\Statistics\" . systemName . ".ini", % dbName, Total_Time_Played, 0 IniRead, System_Total_Played_Time, % RLDataPath . "\Statistics\" . systemName . ".ini", General, System_Total_Played_Time, 0 IniRead, Total_Global_Played_Time, % RLDataPath . "\Statistics\Global Statistics.ini", General, Total_Global_Played_Time, 0 ;Formating stats If(Number_of_Times_Played=0) Number_of_Times_Played := "Never" Else If (Number_of_Times_Played=1) Number_of_Times_Played := Number_of_Times_Played . " time" Else Number_of_Times_Played := Number_of_Times_Played . " times" If(Last_Time_Played=0) Last_Time_Played := "Never" If (Average_Time_Played>0) Average_Time_Played := GetTimeString(Average_Time_Played) . " per session" Total_Time_Played := GetTimeString(Total_Time_Played) System_Total_Played_Time := GetTimeString(System_Total_Played_Time) Total_Global_Played_Time := GetTimeString(Total_Global_Played_Time) statsInfoText := [] Loop, parse, fadeStatsInfoOrder,|, { statsInfoText[A_Index,1] := A_LoopField If (statsInfoText[A_Index,1] = "Number_of_Times_Played") { statsInfoText[A_Index,2] := Number_of_Times_Played If (fadeStats_Number_of_Times_Played="text with label") { statsInfoText[A_Index,3] := "Times Played: " . statsInfoText[A_Index,2] } Else statsInfoText[A_Index,3] := statsInfoText[A_Index,2] } Else If (statsInfoText[A_Index,1] = "Last_Time_Played") { statsInfoText[A_Index,2] := Last_Time_Played If (fadeStats_Last_Time_Played="text with label") { statsInfoText[A_Index,3] := "Last Time Played: " . statsInfoText[A_Index,2] } Else statsInfoText[A_Index,3] := statsInfoText[A_Index,2] } Else If (statsInfoText[A_Index,1] = "Average_Time_Played") { statsInfoText[A_Index,2] := Average_Time_Played If (fadeStats_Average_Time_Played="text with label") { statsInfoText[A_Index,3] := "Average Time Played: " . statsInfoText[A_Index,2] } Else statsInfoText[A_Index,3] := statsInfoText[A_Index,2] } Else If (statsInfoText[A_Index,1] = "Total_Time_Played") { statsInfoText[A_Index,2] := Total_Time_Played If (fadeStats_Total_Time_Played="text with label") { statsInfoText[A_Index,3] := "Total Time Played: " . statsInfoText[A_Index,2] } Else statsInfoText[A_Index,3] := statsInfoText[A_Index,2] } Else If (statsInfoText[A_Index,1] = "System_Total_Played_Time") { statsInfoText[A_Index,2] := System_Total_Played_Time If (fadeStats_System_Total_Played_Time="text with label") { statsInfoText[A_Index,3] := "System Total Played Time: " . statsInfoText[A_Index,2] } Else statsInfoText[A_Index,3] := statsInfoText[A_Index,2] } Else If (statsInfoText[A_Index,1] = "Total_Global_Played_Time") { statsInfoText[A_Index,2] := Total_Global_Played_Time If (fadeStats_Total_Global_Played_Time="text with label") { statsInfoText[A_Index,3] := "Total Global Played Time: " . statsInfoText[A_Index,2] } Else statsInfoText[A_Index,3] := statsInfoText[A_Index,2] } } If (fadeStatsInfoTextPlacement="User Defined"){ Loop, 6 { currentStatsInfoTextType := "fadeStats_" . statsInfoText[A_Index,1] If ((%currentStatsInfoTextType%="Text") or (%currentStatsInfoTextType%="text with label")) statsInfoText[A_Index,4] := fadeStatsInfoText%A_Index%Options } } Else { Loop, 6 { currentStatsInfoTextType := "fadeStats_" . statsInfoText[A_Index,1] If ((%currentStatsInfoTextType%="Text") or (%currentStatsInfoTextType%="text with label")) { ;parsing text options to remove x, y, W, H statsInfoText[A_Index,4] := RegExReplace(fadeStatsInfoText%A_Index%Options, "i)X([\-\d\.]+)(p*)", " ") ; Removing x statsInfoText[A_Index,4] := RegExReplace(statsInfoText[A_Index,4], "i)Y([\-\d\.]+)(p*)", " ") ; Removing y statsInfoText[A_Index,4] := RegExReplace(statsInfoText[A_Index,4], "i)W([\-\d\.]+)(p*)", " ") ; Removing w statsInfoText[A_Index,4] := RegExReplace(statsInfoText[A_Index,4], "i)H([\-\d\.]+)(p*)", " ") ; Removing h statsInfoText[A_Index,4] := RegExReplace(statsInfoText[A_Index,4], "i)Top|Up|Bottom|Down|vCentre|vCenter", " ") ; Removing Align FoundPos := RegExMatch(statsInfoText[A_Index,4], "i)S(\d+)(p*)", Size) ; Acquiring stats info font size StringTrimLeft, Size , Size,1 maxStatsInfoTextSize := maxStatsInfoTextSize > Size ? maxStatsInfoTextSize : Size } } If (fadestatsInfoTextPlacement="corners"){ statsInfoText[1,4] := "x" . fadeStatsInfoTextMargin . " y" . fadeStatsInfoTextMargin . " Left " . statsInfoText[1,4] statsInfoText[2,4] := "x" . baseScreenWidth-fadeStatsInfoTextMargin . " y" . fadeStatsInfoTextMargin . " Right " . statsInfoText[2,4] statsInfoText[3,4] := "x" . fadeStatsInfoTextMargin . " y" . baseScreenHeight-maxstatsInfoTextSize-fadeStatsInfoTextMargin . " Left " . statsInfoText[3,4] statsInfoText[4,4] := "x" . baseScreenWidth-fadeStatsInfoTextMargin . " y" . baseScreenHeight-maxstatsInfoTextSize-fadeStatsInfoTextMargin . " Right " . statsInfoText[4,4] statsInfoText[5,4] := "x" . baseScreenWidth//2 . " y" . fadeStatsInfoTextMargin . " Center " . statsInfoText[5,4] statsInfoText[6,4] := "x" . baseScreenWidth//2 . " y" . baseScreenHeight-maxstatsInfoTextSize-fadeStatsInfoTextMargin . " Center " . statsInfoText[6,4] } Else { Loop, 6 { If ((fadestatsInfoTextPlacement="bottomRight") or (fadestatsInfoTextPlacement="bottomLeft")) { if statsInfoText[A_Index,2] Displacement := Displacement + (maxstatsInfoTextSize+10) else if (A_Index=1) Displacement := (maxstatsInfoTextSize+10) } If (fadestatsInfoTextPlacement="topRight") statsInfoText[A_Index,4] := "x" . baseScreenWidth-fadeStatsInfoTextMargin . " y" . Displacement+fadeStatsInfoTextMargin . " Right " . statsInfoText[A_Index,4] Else If (fadestatsInfoTextPlacement="topLeft") statsInfoText[A_Index,4] := "x" . fadeStatsInfoTextMargin . " y" . Displacement+fadeStatsInfoTextMargin . " Left " . statsInfoText[A_Index,4] Else If (fadestatsInfoTextPlacement="bottomRight") statsInfoText[A_Index,4] := "x" . baseScreenWidth-fadeStatsInfoTextMargin . " y" . baseScreenHeight-Displacement-fadeStatsInfoTextMargin . " Right " . statsInfoText[A_Index,4] Else If (fadestatsInfoTextPlacement="bottomLeft") statsInfoText[A_Index,4] := "x" . fadeStatsInfoTextMargin . " y" . baseScreenHeight-Displacement-fadeStatsInfoTextMargin . " Left " . statsInfoText[A_Index,4] If ((fadestatsInfoTextPlacement="topRight") or (fadestatsInfoTextPlacement="topLeft")) { if statsInfoText[A_Index,2] Displacement := Displacement + (maxstatsInfoTextSize+10) } } } } } } ;====== Defining Drawing areas pGraphUpd(Fade_G3,fadeLyr3CanvasW,fadeLyr3CanvasH) fadeLyr4CanvasX := round(fadeLyr4PicX) , fadeLyr4CanvasY := round(fadeLyr4PicY) fadeLyr4CanvasW := round(fadeLyr4PicW), fadeLyr4CanvasH := round(fadeLyr4PicH) pGraphUpd(Fade_G4,fadeLyr4CanvasW,fadeLyr4CanvasH) fadeLyr5CanvasX := 0 , fadeLyr5CanvasY := 0 fadeLyr5CanvasW := baseScreenWidth, fadeLyr5CanvasH := baseScreenHeight pGraphUpd(Fade_G5,fadeLyr5CanvasW,fadeLyr5CanvasH) ;====== Drawing Layer 3 Static Alt_UpdateLayeredWindow(Fade_hwnd3Static, Fade_hdc3Static,fadeLyr3StaticCanvasX,fadeLyr3StaticCanvasY, fadeLyr3StaticCanvasW, fadeLyr3StaticCanvasH) ;====== Drawing text info Loop, 6 { currentRomInfoTextType := "fadeRomInfo" . romInfoText[A_Index,1] If ((%currentRomInfoTextType%="Text") or (%currentRomInfoTextType%="filtered text") or (%currentRomInfoTextType%="filtered text with label") or (%currentRomInfoTextType%="text with label")) { If romInfoText[A_Index,2] Gdip_Alt_TextToGraphics(Fade_G5, romInfoText[A_Index,3], romInfoText[A_Index,4], fadeFont, 0, 0) } Else If (%currentRomInfoTextType%="Image") { If romInfoText[A_Index,2] Gdip_Alt_DrawImage(Fade_G5, romInfoText[A_Index,5], romInfoText[A_Index,6], romInfoText[A_Index,7], romInfoText[A_Index,8], romInfoText[A_Index,9]) } } ; Drawing Statistics text info If (statisticsEnabled = "true"){ Loop, 6 { currentStatsInfoTextType := "fadeStats_" . statsInfoText[A_Index,1] If ((%currentStatsInfoTextType%="Text") or (%currentStatsInfoTextType%="text with label")) If statsInfoText[A_Index,2] Gdip_Alt_TextToGraphics(Fade_G5, statsInfoText[A_Index,3], statsInfoText[A_Index,4], fadeFont, 0, 0) } } Alt_UpdateLayeredWindow(Fade_hwnd5, Fade_hdc5,fadeLyr5CanvasX,fadeLyr5CanvasY, fadeLyr5CanvasW, fadeLyr5CanvasH) ;====== drawing animated gif If GifAnimation SetTimer, FadeLayer4Anim, -1 Else If (FadeLayer4AnimFilesAr.MaxIndex() > 0) SetTimer, FadeLayer4Anim, %fadeLyr4FPS% ;====== Defining Progress Bar Update for non 7z timeToMax := fadeLyr3Speed / fadeLyr3Repeat ; calculate how long layer 3 needs to take to show 100% of the image ; update fadeInExitDelay value to assure that the fadeLyr3 animation finishes before exiting fade If (((fadeLyr3Type = "Image") or (fadeLyr3Type = "ImageAndBar")) and (fadeInLyr3File) and (fadeLyr3Repeat)) if (fadeLyr3Speed>fadeInDelay+fadeInExitDelay) fadeInExitDelay := fadeInExitDelay + fadeLyr3Speed-(fadeInDelay+fadeInExitDelay) ;Defining Progress Bar Update Time If ((fadeLyr3Type = "bar") or (fadeLyr3Type = "ImageAndBar")) and (fadeBar="true") progressBarTimeToMax := if (fadeBarNon7zProgressTime) ? fadeBarNon7zProgressTime : (fadeInDelay+fadeInExitDelay) ;======checking for extraction and loading sound If ((found7z="true" and 7zEnabled = "true" and !7zTempRomExists and use7zAnimation) or (rlMode="fade7z")) and (7zSounds = "true") { If not (fadeLyr3Type = image and fadeLyr3ImgFollow7zProgress = false) { If FileExist( RLMediaPath . "\Fade\" . SystemName . "\" . dbName . "\7z extracting.mp3") extractionSound := RLMediaPath . "\Fade\" . SystemName . "\" . dbName . "\7z extracting.mp3" Else If FileExist( RLMediaPath . "\Fade\" . SystemName . "\_Default\7z extracting.mp3") extractionSound := RLMediaPath . "\Fade\" . SystemName . "\_Default\7z extracting.mp3" Else If FileExist( RLMediaPath . "\Fade\_Default\7z extracting.mp3") extractionSound := RLMediaPath . "\Fade\_Default\7z extracting.mp3" If extractionSound { Log("DefaultFadeAnimation - Playing " . extractionSound) SoundPlay, %extractionSound% } } } else { If FileExist( RLMediaPath . "\Fade\" . SystemName . "\" . dbName . "\loading.mp3") loadingSound := RLMediaPath . "\Fade\" . SystemName . "\" . dbName . "\loading.mp3" Else If FileExist( RLMediaPath . "\Fade\" . SystemName . "\_Default\loading.mp3") loadingSound := RLMediaPath . "\Fade\" . SystemName . "\_Default\loading.mp3" Else If FileExist( RLMediaPath . "\Fade\_Default\loading.mp3") loadingSound := RLMediaPath . "\Fade\_Default\loading.mp3" If loadingSound { Log("DefaultFadeAnimation - Playing " . loadingSound) SoundPlay, %loadingSound% } } ;==== Create timer to update layer 3 SetTimer, _DefaultFadeAnimationLoop, 50 startTime := A_TickCount layer3startTime := A_TickCount If fadeInActive GoSub, FadeInDelay ; This must always be at the end of all animation functions. It's a simple timer that will force the GUI to stay up the defined amount of delay If the animation was shorter then said delay. Log("DefaultFadeAnimation - Ended") Return _DefaultFadeAnimationLoop: if (!fadeInActive or fadeInExitComplete) { Log("DefaultFadeAnimationLoop - " . (If fadeInExitComplete ? "FadeInExit completed" : "FadeIn is no longer active") . ", stopping DefaultFadeAnimationLoop",4) SetTimer, _DefaultFadeAnimationLoop, Off if !(DefaultFadeFinishedTimerStarted){ SetTimer, _DefaultFadeFinished, 500 DefaultFadeFinishedTimerStarted:=true } } if (romExPercentage = 100) { If ((7zSounds = "true") and !(7zSoundChecked)){ 7zSoundChecked := true ; stopping extraction sound and checking for complete sound If ((extractionSound) or (loadingSound)) SoundPlay, blank.mp3 ; playing non existent file to stop extraction sound. If FileExist( RLMediaPath . "\Fade\" . SystemName . "\" . dbName . "\7z complete.mp3") completeSound := RLMediaPath . "\Fade\" . SystemName . "\" . dbName . "\7z complete.mp3" Else If FileExist( RLMediaPath . "\Fade\" . SystemName . "\_Default\7z complete.mp3") completeSound := RLMediaPath . "\Fade\" . SystemName . "\_Default\7z complete.mp3" Else If FileExist( RLMediaPath . "\Fade\_Default\7z complete.mp3") completeSound := RLMediaPath . "\Fade\_Default\7z complete.mp3" If (completeSound) { Log("DefaultFadeAnimationLoop - Playing 7z fade complete sound: " . completeSound) SoundPlay, %completeSound% } } } if AnimationLoopFinished { Log("DefaultFadeAnimationLoop - AnimationLoop has finished",4) SetTimer, _DefaultFadeAnimationLoop, Off if !(DefaultFadeFinishedTimerStarted){ SetTimer, _DefaultFadeFinished, 500 DefaultFadeFinishedTimerStarted:=true } Alt_UpdateLayeredWindow(Fade_hwnd3, Fade_hdc3,fadeLyr3CanvasX,fadeLyr3CanvasY, fadeLyr3CanvasW, fadeLyr3CanvasH) Log("DefaultFadeAnimationLoop - Ended",4) } ;====== Begin of animation Loop Gdip_GraphicsClear(Fade_G3) ;====== Updating 7z extraction info if !(romExPercentage = 100) { If (((found7z="true") and (7zEnabled = "true") and !(7zTempRomExists) and (use7zAnimation)) and !(rlMode="fade7z")) { If not (fadeLyr3Type = image and fadeLyr3ImgFollow7zProgress = false) { romExPercentageAndFile := RLObject.getExtractionSize(7zRomPath, 0) ; Get the current file being extracted and size of the 7z Extract Path - (Extraction Size\Progress (0=Accurate Method, 1=Fast Detection Method)) If (!(7zTimerRunning) and !(7zTimerStarted)) { ; if the fade animation did not start the timer, let's start it here 7zTimerRunning := 1 7zTimedOut := ; reset counter 7zTimerStarted := true SetTimer, 7zTimeout, 250 ; poll 7z.exe every 250ms to see if it's still running Log("DefaultFadeAnimationLoop - Starting 7zTimeout Timer",4) } Loop, Parse, romExPercentageAndFile, | ; StringSplit oddly doesn't work for some unknown reason, must resort to a parsing Loop instead { If A_Index = 1 { romExCurSize := A_LoopField ; Store bytes extracted romExPercentage := ( A_LoopField >= romExSize ) ? 100 : (A_LoopField / romExSize) * 100 ; Calculate percentage extracted } Else If A_Index = 2 romExFile := A_LoopField } layer3Percentage := romExPercentage } } else { ; to be used for drawing the progress bar on non 7z fade or in rlMode "fade" timeElapsed := A_TickCount - startTime layer3TimeElapsed := A_TickCount - layer3startTime romExPercentage := (timeElapsed < progressBarTimeToMax) ? Round((timeElapsed / progressBarTimeToMax)*100) : 100 if !fadeLyr3Drawn layer3Percentage := (layer3TimeElapsed < timeToMax) ? Round((layer3TimeElapsed / timeToMax)*100) : 100 } } ;====== Drawing layer 3 image If (fadeLyr3Type = "Image") or (fadeLyr3Type = "ImageAndBar") { IfExist, % fadeInLyr3File { If fadeLyr3Repeat != 0 ; Only Loop animation If user does not want a static image { if fadeLyr3BackImageTransparency Gdip_Alt_DrawImage(Fade_G3, fadeLyr3Pic, fadeLyr3PicX-fadeLyr3CanvasX, fadeLyr3PicY-fadeLyr3CanvasY, fadeLyr3PicW, fadeLyr3PicH, , , , , fadeLyr3BackImageTransparency/100) ; draw layer 3 image with transparency If (found7z="true") and (7zEnabled = "true") and (fadeLyr3ImgFollow7zProgress="true") and !7zTempRomExists and use7zAnimation { Gdip_Alt_DrawImage(Fade_G3, fadeLyr3Pic, fadeLyr3PicX-fadeLyr3CanvasX, fadeLyr3PicY-fadeLyr3CanvasY, round(fadeLyr3PicW*layer3Percentage/100), fadeLyr3PicH, 0, 0, Round(fadeLyr3PicOrigW*layer3Percentage/100), fadeLyr3PicOrigH) ; draw layer 3 image onto screen on layer 3 and adjust the size If set If (layer3Percentage >= 100 && 7zTimedOut >= 500){ If 7zEnded fadeLyr3Drawn := true 7zEnded=1 ; Often on small archives, 7z.exe ends so fast, it doesn't give us the chance to show 100% completion. By looping a 2nd time after 7z.exe is closed, the 2nd Loop after 7zEnded, sets the percentage to 100%. } } Else { If (t1 < 100 and fadeLyr3DrawnTimes=fadeLyr3Repeat) { fadeLyr3Drawn := true Gdip_Alt_DrawImage(Fade_G3, fadeLyr3Pic, fadeLyr3PicX-fadeLyr3CanvasX, fadeLyr3PicY-fadeLyr3CanvasY, fadeLyr3PicW, fadeLyr3PicH) ; draw layer 3 image onto screen on layer 3 and adjust the size If set } } } } Else If !fadeLyr3Drawn { ; If fadeLyr3Repeat is set to 0 (a static image), just show it, rather then animate Gdip_Alt_DrawImage(Fade_G3, fadeLyr3Pic, fadeLyr3PicX-fadeLyr3CanvasX, fadeLyr3PicY-fadeLyr3CanvasY, fadeLyr3PicW, fadeLyr3PicH) ; draw layer 3 image onto screen on layer 3 and adjust the size If set fadeLyr3Drawn := true } } Else { fadeLyr3Drawn := true } } Else { fadeLyr3Drawn := true } ;====== Drawing Bar If ((fadeLyr3Type = "bar") or (fadeLyr3Type = "ImageAndBar")) and ((fadeBar="true") or ( (fadeBar="7zOnly") and ((found7z="true") and (7zEnabled = "true") and !7zTempRomExists and use7zAnimation)) ) { ; Bar Window if (fadeBarWindow="Image") { Gdip_Alt_DrawImage(Fade_G3, fadeLyr3ProgressBar, xTopLeft-fadeLyr3CanvasX, yTopLeft-fadeLyr3CanvasY, fadeBarWindowW, fadeBarWindowH) } else if (fadeBarWindow="GDI") { Gdip_Alt_FillRoundedRectangle(Fade_G3, fadeBrushWindow1, xTopLeft-fadeLyr3CanvasX, yTopLeft-fadeLyr3CanvasY, fadeBarWindowW, fadeBarWindowH, fadeBarWindowR) Gdip_Alt_FillRoundedRectangle(Fade_G3, fadeBrushWindow2, xTopLeft-fadeLyr3CanvasX, yTopLeft-fadeLyr3CanvasY, fadeBarWindowW, fadeBarWindowH, fadeBarWindowR) } ; Bar Background If (fadeBarBack = "true") Gdip_Alt_FillRoundedRectangle(Fade_G3, fadeBrushBarBack, xTopLeft+fadeBarX-fadeLyr3CanvasX, yTopLeft+yBar-fadeLyr3CanvasY, fadeBarW, fadeBarH, fadeBarR) ; Progress Bar percentage := romExPercentage If percentage > 100 percentage := 100 If(fadeBarW*percentage/100<3*fadeBarR) ; avoiding glitch in rounded rectangle drawing when they are too small currentRBar := fadeBarR * ((fadeBarW*percentage/100)/(3*fadeBarR)) Else currentRBar := fadeBarR If (fadeBarPercentageText = "true") Gdip_Alt_TextToGraphics(Fade_G3, round(percentage) . "%", "x" round(xTopLeft+fadeText1X+fadeBarW*percentage/100)-fadeLyr3CanvasX " y" yTopLeft+fadeText1Y-fadeLyr3CanvasY . " " . fadeText1Options, fadeFont, 0, 0) If percentage < 100 { If (fadeBarInfoText = "true") { if (found7z="true") and (7zEnabled = "true") and !7zTempRomExists and use7zAnimation Gdip_Alt_TextToGraphics(Fade_G3, fadeText1, "x" xTopLeft+fadeText2X-fadeLyr3CanvasX " y" yTopLeft+fadeText2Y-fadeLyr3CanvasY . " " . fadeText1Options, fadeFont, 0, 0) else Gdip_Alt_TextToGraphics(Fade_G3, fadeText3, "x" xTopLeft+fadeText2X-fadeLyr3CanvasX " y" yTopLeft+fadeText2Y-fadeLyr3CanvasY . " " . fadeText1Options, fadeFont, 0, 0) } If !(fadeExtractionTime="Disabled") { extractionElapsedTime := (A_TickCount - startTime)//1000 if ((fadeExtractionTime="Remaining Time") or (fadeExtractionTime="Labeled Remaining Time")){ if (timerUpdate + 250 < A_TickCount) { timerUpdate := A_TickCount tempExtractionRemainingTime := extractionElapsedTime *(100 / percentage - 1) extractionRemainingTime := ((tempExtractionRemainingTime - extractionRemainingTime) > 0 and (tempExtractionRemainingTime - extractionRemainingTime) < 6) ? extractionRemainingTime : tempExtractionRemainingTime extractionTimeText := (fadeExtractionTime="Labeled Remaining Time") ? "Remaining Time: " . GetTimeString(round(extractionRemainingTime)) : GetTimeString(round(extractionRemainingTime)) if (stabilityThreshold<4) { diff := (prevExtractionRemainingTime - extractionRemainingTime) if (diff > 0) stabilityThreshold++ else if (diff < 0) stabilityThreshold:=0 extractionTimeText := "Calculating..." } prevExtractionRemainingTime := extractionRemainingTime } } else extractionTimeText := (fadeExtractionTime="Labeled Elapsed Time") ? "Elapsed Time: " . GetTimeString(extractionElapsedTime) : GetTimeString(extractionElapsedTime) Gdip_Alt_TextToGraphics(Fade_G3, extractionTimeText, "x" xTopLeft+fadeExtractionTimeTextX-fadeLyr3CanvasX " y" yTopLeft+fadeExtractionTimeTextY-fadeLyr3CanvasY . " " . fadeExtractionTimeTextOptions, fadeFont, 0, 0) } } Else { ; bar is at 100% if !finishedBar Log("DefaultFadeAnimationLoop - Progress bar reached 100%",4) finishedBar:= true If (fadeBarInfoText = "true") { if (found7z="true") and (7zEnabled = "true") and !7zTempRomExists and use7zAnimation Gdip_Alt_TextToGraphics(Fade_G3, fadeText2, "x" xTopLeft+fadeText2X-fadeLyr3CanvasX " y" yTopLeft+fadeText2Y-fadeLyr3CanvasY . " " . fadeText2Options, fadeFont, 0, 0) else Gdip_Alt_TextToGraphics(Fade_G3, fadeText4, "x" xTopLeft+fadeText2X-fadeLyr3CanvasX " y" yTopLeft+fadeText2Y-fadeLyr3CanvasY . " " . fadeText2Options, fadeFont, 0, 0) } } Gdip_Alt_FillRoundedRectangle(Fade_G3, fadeBrushBar, xTopLeft+fadeBarX-fadeLyr3CanvasX, yTopLeft+yBar-fadeLyr3CanvasY, fadeBarW*percentage/100, fadeBarH,currentRBar) ; Process, Exist, 7z.exe ; This breaks out of 7z.exe If it's no longer running. Sometimes an extraction was very quick or there was an error and we don't want to be stuck in an infinite Loop ; If (!ErrorLevel and fadeLyr3Drawn) ; bar is at 100% or 7z is already closed or user interrupted fade, so break out If (7zTimedOut >= 200 and fadeLyr3Drawn) ; bar is at 100% or 7z is already closed or user interrupted fade, so break out ; If fadeLyr3Drawn ; Log("DefaultFadeAnimationLoop - fadeLyr3Drawn is drawn",4) ; If !ErrorLevel ; Log("DefaultFadeAnimationLoop - 7z.exe is no longer running",4) If (((found7z="true") and (7zEnabled = "true") and !(7zTempRomExists) and (use7zAnimation)) and !(rlMode="fade7z")) { Log("DefaultFadeAnimationLoop - 7z already finished or user interrupted fade, so animation loop is finished.",4) AnimationLoopFinished := true } If (fadeLyr3Drawn and (finishedBar or !fadeInActive)) { Log("DefaultFadeAnimationLoop - Fade Layer 3 is drawn and " . (If finishedBar ? "Extraction bar is at 100%" : "FadeIn is not active") . " so animation loop is finished.",4) AnimationLoopFinished := true } } Else { If fadeLyr3Drawn { Log("DefaultFadeAnimationLoop - Fade Layer 3 is drawn so animation loop is finished.",4) AnimationLoopFinished := true } } Alt_UpdateLayeredWindow(Fade_hwnd3, Fade_hdc3,fadeLyr3CanvasX,fadeLyr3CanvasY, fadeLyr3CanvasW, fadeLyr3CanvasH) Return _DefaultFadeFinished: if (fadeInExitComplete){ SetTimer, _DefaultFadeFinished, off If ((7zSounds = "true") and !(7zSoundChecked)){ ; stopping extraction sound and checking for complete sound If ((extractionSound) or (loadingSound)) SoundPlay, blank.mp3 ; playing non existent file to stop extraction sound. If FileExist( RLMediaPath . "\Fade\" . SystemName . "\" . dbName . "\loading complete.mp3") completeSound := RLMediaPath . "\Fade\" . SystemName . "\" . dbName . "\loading complete.mp3" Else If FileExist( RLMediaPath . "\Fade\" . SystemName . "\_Default\loading complete.mp3") completeSound := RLMediaPath . "\Fade\" . SystemName . "\_Default\loading complete.mp3" Else If FileExist( RLMediaPath . "\Fade\_Default\loading complete.mp3") completeSound := RLMediaPath . "\Fade\_Default\loading complete.mp3" If (completeSound) { Log("DefaultFadeAnimationLoop - Playing fade complete sound: " . completeSound) SoundPlay, %completeSound% } } } return ; Simple Hello World Fade Code Tutorial HelloWorldCustomFadeAnimation: ;====== Initializing Fade Code fadeInActive=1 ;====== Start Loop to draw Hello World text and update 7z extraction percentage If necessary Loop { Gdip_GraphicsClear(Fade_G3) ; Updating 7z extraction info If (found7z="true") and (7zEnabled = "true") and !7zTempRomExists { SetFormat, Float, 3 ; don't want to show decimal places in the percentage romExPercentageAndFile := RLObject.getExtractionSize(7zRomPath, 0) ; Get the current file being extracted and size of the 7z Extract Path - (Extraction Size\Progress (0=Accurate Method, 1=Fast Detection Method)) Loop, Parse, romExPercentageAndFile, | ; StringSplit oddly doesn't work for some unknown reason, must resort to a parsing Loop instead { If A_Index = 1 { romExCurSize := A_LoopField ; Store bytes extracted romExPercentage := (A_LoopField / romExSize) * 100 ; Calculate percentage extracted } Else If A_Index = 2 romExFile := A_LoopField } } ; Defining text to be shown FadeOutputText = Hello World If (found7z="true") and (7zEnabled = "true") and !7zTempRomExists FadeOutputText := % "Hello World`n Extracting file: " . romExFile . "`nPercentage Extracted: " . romExPercentage . "%" ; Calculating the text position centered at the screen fadeLyr3CanvasW := MeasureText(FadeOutputText, "s40 Bold","Arial")+20 ; Length of the text fadeLyr3CanvasH := 40 ; Font Size If (found7z="true") and (7zEnabled = "true") and !7zTempRomExists fadeLyr3CanvasH := 140 fadeLyr3CanvasX := (baseScreenWidth-fadeLyr3CanvasW)//2 fadeLyr3CanvasY := (baseScreenHeight-fadeLyr3CanvasH)//2 ; Creating the GDI+ text element Gdip_Alt_TextToGraphics(Fade_G3, FadeOutputText, "x" fadeLyr3CanvasW//2 " y0 Bold Center cFFffffff r4 s40", "Arial", 0, 0) ; Showing the Hello World text Alt_UpdateLayeredWindow(Fade_hwnd3, Fade_hdc3,fadeLyr3CanvasX,fadeLyr3CanvasY, fadeLyr3CanvasW, fadeLyr3CanvasH) ; Breaking animation Loop Process, Exist, 7z.exe ; This breaks out of 7z.exe If it's no longer running. Sometimes an extraction was very quick or there was an error and we don't want to be stuck in an infinite Loop If (!ErrorLevel or (romExPercentage >= 100) or !fadeInActive) ; bar is at 100% or 7z is already closed or user interrupted fade, so break out Break } ; Assuring that fade remains active for the amount of time defined at the fade delay variable If fadeInActive GoSub, FadeInDelay Return ; Blank animation which can be used with legacy transition NoAnimation: Log("NoAnimation - No Animation selected for Fade") GoSub, FadeInDelay ; This must always be at the end of all animation functions. It's a simple timer that will force the GUI to stay up the defined amount of delay If the animation was shorter then said delay. Return ;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ;------------------------------------------------------------ USER CUSTOM ANIMATIONS AND TRANSITIONS BELOW THIS LINE ------------------------------------------------------------ ;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- MyFirstAnimation: Log("MyFirstAnimation - Started") Log("MyFirstAnimation - Ended") Return