djvj icon

Untitled

djvj | PRO | 11/22/15 04:20:21 PM UTC | 0 ⭐ | 684 👁️ | Never ⏰ | []
text |

102.34 KB

|

None

|

0 👍

/

0 👎

MCRC=2DCAE7EF
MVersion=1.1.7
 BezelGUI(){
	Global
	if (bezelEnabled = "true"){
		Log("BezelGUI - Started")
		; creating GUi elements and pointers
		; Bezel_GUI1 - Background
		; Bezel_GUI2 - Overlay
		; Bezel_GUI3 - Bezel Image
		; Bezel_GUI4 - Instruction Card
		; Bezel_GUI5 - Instruction Card Left Menu Background
		; Bezel_GUI6 - Instruction Card Left Menu List
		; Bezel_GUI7 - Instruction Card Right Menu Background
		; Bezel_GUI8 - Instruction Card Right Menu List
		;initializing gdi plus
		If !pToken
			pToken := Gdip_Startup()
		Loop, 8 { 
			If (a_index = 1) {
				Gui, Bezel_GUI%A_Index%: +Disabled -Caption +E0x80000 +OwnDialogs +LastFound +ToolWindow 
			} Else {
				OwnerGUI := A_Index - 1
				Gui, Bezel_GUI%A_Index%: +OwnerBezel_GUI%OwnerGUI% +Disabled -Caption +E0x80000 +OwnDialogs +LastFound +ToolWindow +AlwaysOnTop 
			}
			Gui, Bezel_GUI%A_Index%: Margin,0,0
			Gui, Bezel_GUI%A_Index%: Show,, BezelLayer%A_Index%
			Bezel_hwnd%A_Index% := WinExist()
			Bezel_hbm%A_Index% := CreateDIBSection(A_ScreenWidth, A_ScreenHeight)
			Bezel_hdc%A_Index% := CreateCompatibleDC()
			Bezel_obm%A_Index% := SelectObject(Bezel_hdc%A_Index%, Bezel_hbm%A_Index%)
			Bezel_G%A_Index% := Gdip_GraphicsFromhdc(Bezel_hdc%A_Index%)
			Gdip_SetSmoothingMode(Bezel_G%A_Index%, 4)
		}
		Log("BezelGUI - Ended")	
	}
}
 BezelStart(Mode="",parent="",angle="",rom=""){
	Global
	if (bezelEnabled = "true"){
		Log("BezelStart - Started")
			;Defining Bezel Mode
		if !Mode
			bezelMode = Normal
		else if (Mode = "fixResMode")
			bezelMode = fixResMode
		else if (Mode = "layout")
			bezelLayoutFile = %rom%
		else if RegExMatch(Mode, "^\d+$")
			bezelMode = MultiScreens	
		else
			Log("Invalid Bezel mode defined on the module.",3)
		;Choosing to use layout files or normal bezel
		if bezelLayoutFile	
			{
			If !FileExist( emuPath . "\artwork\" . bezelLayoutFile . ".zip") and !FileExist( emuPath . "\artwork\" . parent . ".zip")
				{
				Log("Bezel - Layout mode selected but no MAME or MESS layout file found. Using RocketLauncher Bezel normal mode instead.",1)
				bezelMode = Normal
				bezelLayoutFile =
			} else {
				Log("Bezel - MAME or MESS layout file (" . emuPath . "\artwork\" . bezelLayoutFile . ".zip" . " or " . emuPath . "\artwork\" . parent . ".zip" . ") already exists. Bezel addon will exit without doing any change to the emulator launch.",1)
				useBezels := " -use_bezels"
				Return
			}
		}
		Log("Bezel - Bezel mode " . bezelMode . " selected.",4)
		;Check for old modules error 
		IfWinNotExist, BezelLayer1
			ScriptError("You have an old incompatible module version.`n`r`n`rUpdate your modules before running RocketLauncher again!!!")
		; -------------- Read ini options and define default values
		Bezel_GlobalFile := A_ScriptDir . "\Settings\Global Bezel.ini" 
		Bezel_SystemFile := A_ScriptDir . "\Settings\" . systemName . "\Bezel.ini" 
		Bezel_RomFile := A_ScriptDir . "\Settings\" . systemName . "\" . dbname . "\Bezel.ini" 
		if (RIni_Read("bezelGlobalRini",Bezel_GlobalFile) = -11)
			RIni_Create("bezelGlobalRini")
		if (RIni_Read("bezelSystemRini",Bezel_SystemFile) = -11)
			RIni_Create("bezelSystemRini")
		if (RIni_Read("BezelRomRini",Bezel_RomFile) = -11)
			RIni_Create("BezelRomRini")
		;[Settings]
		bezelFileExtensions := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Settings", "Bezel_Supported_Image_Files","png|gif|tif|bmp|jpg")
		bezelDelay := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Settings", "Bezel_Delay","0")
		;[Bezel Change]
		bezelChangeDur := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Bezel Change", "Bezel_Transition_Duration","500")
		bezelSaveSelected := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini","Bezel Change","Bezel_Save_Selected","false")
		extraFullScreenBezel := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini","Bezel Change","Extra_FullScreen_Bezel","false") 
		;[Background]
		bezelBackgroundChangeDur := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Background", "Background_Change_Timer","0") ; 0 if disabled, number if you want the bezel background to change automatically at each x miliseconds
		bezelBackgroundTransition := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Background", "Background_Transition_Animation","fade") ; none or fade
		bezelBackgroundTransitionDur := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Background", "Background_Transition_Duration","500") ; determines the duration of fade bezel background transition
		bezelUseBackgrounds := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Background", "Use_Backgrounds","false") ; determines the duration of fade bezel background transition
		;[Bezel Change Keys]
		nextBezelKey := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Bezel Change Keys", "Next_Bezel_Key", "") 
		previousBezelKey := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Bezel Change Keys", "Previous_Bezel_Key","")
		If (bezelICEnabled = "true") {
			;[Instruction Cards General Settings]
			positionIC := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards General Settings", "IC_Positions","topLeft|topRight|bottomLeft|bottomRight|topCenter|leftCenter|rightCenter|bottomCenter") ; (1-8 positions) can be topLeft|topRight|bottomLeft|bottomRight|topCenter|leftCenter|rightCenter|bottomCenter
			animationIC := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards General Settings", "IC_Transition_Animation","fade") ; can be none, fade, slideIn, slideOutandIn
			ICChangeDur := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards General Settings", "IC_Transition_Duration","500")
			enableICChangeSound := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards General Settings", "IC_Enable_Transition_Sound","true") ; It searches for sound files named ICslideIn.mp3, ICslideOut.mp3, ICFadeOut.mp3, ICFadeIn.mp3 or ICChange.mp3 on the default global, default system and rom bezel folders to be played while changing the ICs
			ICScaleFactor := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards General Settings", "IC_Scale_Factor","ScreenHeight") ;you can choose between a number (1 to keep the original image size), or the words: ScreenHeight, ScreenWidth, HalfScreenHeight, HalfScreenWidth, OneThirdScreenHeight and OneThirdScreenWidth in order to resize the image in relation to the screen size. The default value is ScreenHeight that will work better in any resolution with a two ICs option (also the default one). 
			ICSaveSelected := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini","Instruction Cards General Settings","IC_Save_Selected","false")
			;[Instruction Cards Menu]
			leftMenuPositionsIC := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Menu", "IC_Left_Menu_Positions","topLeft|leftCenter|bottomLeft|bottomCenter") ; (1-8 positions) can be topLeft|topRight|bottomLeft|bottomRight|topCenter|leftCenter|rightCenter|bottomCenter
			ICleftMenuListItems := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Menu", "IC_Left_Menu_Number_of_List_Items","7")
			rightMenuPositionsIC := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Menu", "IC_Right_Menu_Positions","topRight|rightCenter|bottomRight|topCenter") ; (1-8 positions) can be topLeft|topRight|bottomLeft|bottomRight|topCenter|leftCenter|rightCenter|bottomCenter 
			ICrightMenuListItems := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Menu", "IC_Right_Menu_Number_of_List_Items","7")
			;[Instruction Cards Visibility]
			displayICOnStartup := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Visibility", "IC_Display_Card_on_Startup","false")  
			ICRandomSlideShowTimer := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Visibility", "IC_Random_Slide_Show_Timer","0")  
			toogleICVisibilityKey := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Visibility", "IC_Toggle_Visibility_Key","") 
			;[Instruction Cards Keys Change Mode 1]
			leftICMenuKey := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 1", "IC_Left_Menu_Key","")
			rightICMenuKey := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 1", "IC_Right_Menu_Key","")
			;[Instruction Cards Keys Change Mode 2]
			changeActiveICKey := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 2", "IC_Change_Active_Instruction_Card_Key","")
			previousICKey := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 2", "IC_Previous_Instruction_Card_Key","")
			nextICKey := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 2", "IC_Next_Instruction_Card_Key","")
			;[Instruction Cards Keys Change Mode 3]
			previousIC1Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_1_Previous_Key","")
			previousIC2Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_2_Previous_Key","")
			previousIC3Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_3_Previous_Key","")
			previousIC4Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_4_Previous_Key","")
			previousIC5Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_5_Previous_Key","")
			previousIC6Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_6_Previous_Key","")
			previousIC7Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_7_Previous_Key","")
			previousIC8Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_8_Previous_Key","")
			nextIC1Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_1_Next_Key","")
			nextIC2Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_2_Next_Key","")
			nextIC3Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_3_Next_Key","")
			nextIC4Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_4_Next_Key","")
			nextIC5Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_5_Next_Key","")
			nextIC6Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_6_Next_Key","")
			nextIC7Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_7_Next_Key","")
			nextIC8Key := RIniBezelLoadVar("bezelGlobalRini","bezelSystemRini", "BezelRomRini", "Instruction Cards Keys Change Mode 3", "IC_8_Next_Key","")
		}
		; Saving values to ini file
		RIni_Write("bezelGlobalRini",Bezel_GlobalFile,"`r`n",1,1,1)
		IfNotExist, % A_ScriptDir . "\Settings\" . systemName 
			FileCreateDir, % A_ScriptDir . "\Settings\" . systemName 
		RIni_Write("bezelSystemRini",Bezel_SystemFile,"`r`n",1,1,1)
		;logging all Bezel Options
		Log("Bezel variable values: " . BezelVarLog,5)
		; -------------- End of Read ini options and define default values
		;Loading Bezel parameters and images
		;Checking if game is vertical oriented
		if (angle != 180 && ((angle=90) or (angle=270) or (angle))) {
			vertical := "true"
			Log("Bezel - Assuming that game has vertical orientation. Bezel will search on the extra folder Vertical in order to find assets.",4)
		} else
			Log("Bezel - Assuming that game has horizontal orientation.",4)
		;Read Bezel Image
		if (bezelMode = "MultiScreens"){
			bezelNumberOfScreens := mode
			bezelPath := BezelFilesPath("Bezel [" . bezelNumberOfScreens . "S]",bezelFileExtensions)
		} else {
			bezelPath := BezelFilesPath("Bezel",bezelFileExtensions,true)
		}
		;-----Loading Image Files into ARRAYs for bezel/background/overlay/instruction card
		If bezelPath 
			{
			bezelCheckPosTimeout = 5000
			;Setting bezel aleatory choosed file
			bezelImagesList := []
			if (bezelMode = "MultiScreens")
				{
				Loop, Parse, bezelFileExtensions,|
					Loop, % bezelPath . "\Bezel [" . bezelNumberOfScreens . "S]*." . A_LoopField
						bezelImagesList.Insert(A_LoopFileFullPath)
			} else {
				Loop, Parse, bezelFileExtensions,|
					Loop, % bezelPath . "\Bezel*." . A_LoopField
						if !RegExMatch(A_LoopFileName, "i)\[[0-9]+S\]")
							bezelImagesList.Insert(A_LoopFileFullPath)
			}
			if (extraFullScreenBezel = "true"){
				Log("Bezel - Adding extra fullscreen fake bezel image",1)
				Log("Bezel - This will prevent real bezels froms showing! Disable extraFullScreenBezel setting to restore real bezels.",2)
				bezelImagesList.Insert("fakeFullScreenBezel")
			}
			Random, RndmBezel, 1, % bezelImagesList.MaxIndex()
			if (bezelSaveSelected="true"){
				bezelSelectedIndex := RIni_GetKeyValue("BezelRomRini","Bezel Change","Initial_Bezel_Index")
				RndmBezel := if (bezelSelectedIndex = -2) or (bezelSelectedIndex = -3) ? RndmBezel :  bezelSelectedIndex
			}
			bezelImageFile := bezelImagesList[RndmBezel]
			SplitPath, bezelImageFile, bezelImageFileName 
			Log("Bezel - Loading Bezel image: " . bezelImageFile,1)		
			;Setting overlay aleatory choosed file (only searches overlays at the bezel.png folder)
			bezelOverlaysList := []
			If FileExist(bezelPath . "\Overlay" . SubStr(bezelImageFileName,6)) {
				bezelOverlaysList.Insert(bezelPath . "\Overlay" . SubStr(bezelImageFileName,6))
				bezelOverlayFile := % bezelPath . "\Overlay" . SubStr(bezelImageFileName,6)
				Log("Bezel - Loading Overlay image with the same name of the bezel image: " . bezelOverlayFile,1)
			} Else {
				if (bezelMode = "MultiScreens")
					{
					Loop, Parse, bezelFileExtensions,|
						Loop, % bezelPath . "\Overlay [" . bezelNumberOfScreens . "S]*." . A_LoopField
							bezelOverlaysList.Insert(A_LoopFileFullPath)
				} else {
					Loop, Parse, bezelFileExtensions,|
						Loop, % bezelPath . "\Overlay*." . A_LoopField
							if !RegExMatch(A_LoopFileName, "i)\[[0-9]+S\]")
								 bezelOverlaysList.Insert(A_LoopFileFullPath)
				}
				Random, RndmBezelOverlay, 1, % bezelOverlaysList.MaxIndex()
				bezelOverlayFile := bezelOverlaysList[RndmBezelOverlay]
				If FileExist(bezelOverlayFile)
					Log("Bezel - Loading Overlay image: " . bezelOverlayFile,1)
			}
		} else {
			if (extraFullScreenBezel = "true"){
				Log("Adding extra fullscreen fake bezel image",1)
				bezelImagesList := []
				bezelPath := "fakeFullScreenBezel"
				RndmBezel := 1
				bezelImageFile := "fakeFullScreenBezel"
				bezelImagesList.Insert("fakeFullScreenBezel")
			}
		}
		If (bezelICEnabled = "true") {
			;Loading bezel instruction card files
			bezelICPath := BezelFilesPath("Instruction Card",bezelFileExtensions)		
			if bezelICPath
				{
				;Acquiring screen info for dealing with rotated menu drawings
				Gdip_Alt_GetRotatedDimensions(A_ScreenWidth, A_ScreenHeight, screenRotationAngle, baseScreenWidth, baseScreenHeight)
				Gdip_GetRotatedTranslation(baseScreenWidth, baseScreenHeight, screenRotationAngle, xTranslation, yTranslation)
				xTranslation:=round(xTranslation), yTranslation:=round(yTranslation)
				Loop, 5 { 
					CurrentGUI := a_index + 3
					Gdip_TranslateWorldTransform(Bezel_G%CurrentGUI%, xTranslation, yTranslation)
					Gdip_RotateWorldTransform(Bezel_G%CurrentGUI%, screenRotationAngle)
				}
				;List of available IC images
				bezelICImageList := []
				Loop, Parse, bezelFileExtensions,|
					Loop, %bezelICPath%\Instruction Card*.%A_LoopField%
						bezelICImageList.Insert(A_LoopFileFullPath)
				Loop, % bezelICImageList.MaxIndex()
					ICLogFilesList := ICLogFilesList . "`r`n`t`t`t`t`t" . bezelICImageList[a_index]
				Log("Bezel - Instruction Card images found: " . ICLogFilesList,4)
				;IC Position Array
				listofPosibleICPositions = topLeft,topRight,bottomLeft,bottomRight,topCenter,leftCenter,rightCenter,bottomCenter
				listofPossibleICScale = HalfScreenHeight|HalfScreenWidth|OneThirdScreenHeight|OneThirdScreenWidth|ScreenHeight|ScreenWidth
				StringSplit, positionICArray, positionIC, |, 
				;IC Array	
				defaultICScaleFactor := ICScaleFactor
				bezelICArray := [] ;bezelICArray[screenICPositionIndex, ICimageIndex, Attribute]
				activeIC := 1
				selectedICimage := []
				prevselectedICimage := []
				selectedRightMenuItem := []
				selectedLeftMenuItem := []
				maxICimage := []
				currentImage := 0
				loop, 8
					{
					currentImage := 0
					currentICPositionIndex := a_index
					Loop, % bezelICImageList.MaxIndex()
						{
						currentBezelICFileName := bezelICImageList[a_index]
						SplitPath, currentBezelICFileName, , , , currentPureFileName
						postionNotDefined := false
						if currentPureFileName not contains %listofPosibleICPositions%
							postionNotDefined := true
						if ( ( (positionICArray%currentICPositionIndex%) and (InStr(currentPureFileName,positionICArray%currentICPositionIndex%)) ) or (postionNotDefined = true) ) 
							{
							currentImage++
							bezelICArray[currentICPositionIndex,currentImage,1] := currentBezelICFileName ; path to instruction card image
							bezelICArray[currentICPositionIndex,currentImage,2] := Gdip_CreateBitmapFromFile(currentBezelICFileName) ;bitmap pointer
							;image size
							ICScaleFactor := defaultICScaleFactor
							Loop, parse, listofPossibleICScale,|,
							{
								if InStr(currentPureFileName,A_LoopField)
								{
								ICScaleFactor := A_LoopField
								Log("ICScaleFactor set by instruction card file name: " . ICScaleFactor,5)
								break
								}
							}
							if (ICScaleFactor="ScreenHeight")
								ICScaleFactor := baseScreenHeight/Gdip_GetImageHeight(bezelICArray[currentICPositionIndex,currentImage,2])
							else if (ICScaleFactor="ScreenWidth")
								ICScaleFactor := baseScreenWidth/Gdip_GetImageWidth(bezelICArray[currentICPositionIndex,currentImage,2])	
							else if (ICScaleFactor="HalfScreenHeight")
								ICScaleFactor := baseScreenHeight/2/Gdip_GetImageHeight(bezelICArray[currentICPositionIndex,currentImage,2])	
							else if (ICScaleFactor="HalfScreenWidth")
								ICScaleFactor := baseScreenWidth/2/Gdip_GetImageWidth(bezelICArray[currentICPositionIndex,currentImage,2])	
							else if (ICScaleFactor="OneThirdScreenHeight")
								ICScaleFactor := baseScreenHeight/3/Gdip_GetImageHeight(bezelICArray[currentICPositionIndex,currentImage,2])	
							else if (ICScaleFactor="OneThirdScreenWidth")
								ICScaleFactor := baseScreenWidth/3/Gdip_GetImageWidth(bezelICArray[currentICPositionIndex,currentImage,2])	
							else 
								ICScaleFactor := ICScaleFactor	
							bezelICArray[currentICPositionIndex,currentImage,3] := round(Gdip_GetImageWidth(bezelICArray[currentICPositionIndex,currentImage,2])*ICScaleFactor) ; width of instruction card image
							bezelICArray[currentICPositionIndex,currentImage,4] := round(Gdip_GetImageHeight(bezelICArray[currentICPositionIndex,currentImage,2])*ICScaleFactor) ; height of instruction card image
							;clean name
							StringTrimLeft, currentLabel, currentPureFileName,16
							replace := {"topLeft":"","topRight":"","bottomLeft":"","bottomRight":"","topCenter":"","leftCenter":"","rightCenter":"","bottomCenter":""} ; Removing place strings from name
							For what, with in replace
								if InStr(currentLabel,what)
									StringReplace, currentLabel, currentLabel, %what%, %with%, All
							replace := {"HalfScreenHeight":"","HalfScreenWidth":"","OneThirdScreenHeight":"","OneThirdScreenWidth":"","ScreenHeight":"","ScreenWidth":""} ; Removing scale factor from name
							For what, with in replace
								if InStr(currentLabel,what)
									StringReplace, currentLabel, currentLabel, %what%, %with%, All
							currentLabel:=RegExReplace(currentLabel,"\(.*\)","") ; remove anything inside parentesis
							currentLabel:=RegExReplace(currentLabel,"^\s*","") ; remove leading
							currentLabel:=RegExReplace(currentLabel,"\s*$","") ; remove trailing
							bezelICArray[currentICPositionIndex,currentImage,5] := currentLabel ;clean Name
						}
					}
					bezelICArray[currentICPositionIndex,0,5] := "None"
					selectedICimage[currentICPositionIndex] := 0
					prevselectedICimage[currentICPositionIndex] := 0
					selectedRightMenuItem[currentICPositionIndex] := 0
					selectedLeftMenuItem[currentICPositionIndex] := 0
					maxICimage[currentICPositionIndex] := currentImage
					currentImage := 0
					ICVisibilityOn := true
				}
				if enableICChangeSound
					{
					currentPath := BezelFilesPath("ICslideIn","mp3")
					if currentPath
						slideInICSound := currentPath . "\ICslideIn.mp3"
					currentPath := BezelFilesPath("ICslideOut","mp3")
					if currentPath
						slideOutICSound := currentPath . "\ICslideOut.mp3"
					currentPath := BezelFilesPath("ICFadeOut","mp3")
					if currentPath
						fadeOutICSound := currentPath . "\ICFadeOut.mp3"
					currentPath := BezelFilesPath("ICFadeIn","mp3")
					if currentPath
						fadeOutICSound := currentPath . "\ICFadeIn.mp3"
					currentPath := BezelFilesPath("ICChange","mp3")
					if currentPath
						changeICSound := currentPath . "\ICChange.mp3"
				}
				;initializing IC menus
				StringReplace, leftMenuPositionsIC, leftMenuPositionsIC,|,`,, all
				StringReplace, rightMenuPositionsIC, rightMenuPositionsIC,|,`,, all
				loop, 8
					{
					if positionICArray%a_index% in %leftMenuPositionsIC%
						{
						if bezelICArray[a_index,1,1]
							{
							leftMenuActiveIC := a_index
							break
						}
					}
				}
				loop, 8
					{
					if positionICArray%a_index% in %rightMenuPositionsIC%
						{
						if bezelICArray[a_index,1,1]
							{
							rightMenuActiveIC := a_index
							break
						}
					}
				}
				;loading menu parameters
				menuSelectedItem := []	
				loop, 2
					{
					if (a_index=1)
						currentICMenu := "Left" 
					else 
						currentICMenu := "Right" 
					bezelIC%currentICMenu%MenuList := []
					bezelICMenuPath := BezelFilesPath("IC Menu " . currentICMenu, bezelFileExtensions)
					if !bezelICMenuPath
						{
						CreateICMenuBitmap(currentICMenu)
						bezelICMenuPath := RLMediaPath . "\Bezels\_Default"
					}
					Loop, Parse, bezelFileExtensions,|
						Loop, % bezelICMenuPath . "\IC Menu " . currentICMenu . "*." . A_LoopField
							bezelIC%currentICMenu%MenuList.Insert(A_LoopFileFullPath)
					Random, RndmbezelICMenu, 1, % bezelIC%currentICMenu%MenuList.MaxIndex()
					;File and bitmap pointers
					bezelIC%currentICMenu%MenuFile := bezelIC%currentICMenu%MenuList[RndmbezelICMenu]
					bezelIC%currentICMenu%MenuBitmap := Gdip_CreateBitmapFromFile(bezelIC%currentICMenu%MenuFile)
					Gdip_GetImageDimensions(bezelIC%currentICMenu%MenuBitmap, bezelIC%currentICMenu%MenuBitmapW, bezelIC%currentICMenu%MenuBitmapH)
					;Ini appearance options
					currentICMenuFile := bezelIC%currentICMenu%MenuList[RndmbezelICMenu]
					SplitPath, currentICMenuFile,,,,ICMenuFileNameNoExt
					BezelICMenuIniFile := bezelICMenuPath . "\" . ICMenuFileNameNoExt . ".ini"
					if (RIni_Read("bezelICRini" . currentICMenu,BezelICMenuIniFile) = -11)
						RIni_Create("bezelICRini" . currentICMenu)
					IC%currentICMenu%MenuListTextFont := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Font","Bebas Neue")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Font",IC%currentICMenu%MenuListTextFont) ; set value if ini not found
					IC%currentICMenu%MenuListTextAlignment := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Alignment","Center")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Alignment",IC%currentICMenu%MenuListTextAlignment) ; set value if ini not found
					IC%currentICMenu%MenuListTextSize := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Text_Size","50")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Text_Size",IC%currentICMenu%MenuListTextSize) ; set value if ini not found
					IC%currentICMenu%MenuListDisabledTextSize := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Disabled_Text_Size","30")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Disabled_Text_Size",IC%currentICMenu%MenuListDisabledTextSize) ; set value if ini not found
					IC%currentICMenu%MenuListTextColor := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Selected_Text_Color","FF000000")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Selected_Text_Color",IC%currentICMenu%MenuListTextColor) ; set value if ini not found
					IC%currentICMenu%MenuListDisabledTextColor := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Disabled_Text_Color","FFCCCCCC")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Disabled_Text_Color",IC%currentICMenu%MenuListDisabledTextColor) ; set value if ini not found
					IC%currentICMenu%MenuListCurrentTextColor := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Current_Text_Color","FFFF00FF")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Current_Text_Color",IC%currentICMenu%MenuListCurrentTextColor) ; set value if ini not found
					IC%currentICMenu%MenuListX := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Top_X_position","20")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Top_X_position",IC%currentICMenu%MenuListX) ; set value if ini not found
					IC%currentICMenu%MenuListY := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Top_Y_position","20")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Top_Y_position",IC%currentICMenu%MenuListY) ; set value if ini not found
					IC%currentICMenu%MenuListWidth := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Width","260")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Width",IC%currentICMenu%MenuListWidth) ; set value if ini not found
					IC%currentICMenu%MenuListHeight := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Height","360")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card List Settings","Height",IC%currentICMenu%MenuListHeight) ; set value if ini not found
					IC%currentICMenu%MenuPositionTextFont := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Font","Bebas Neue")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Font",IC%currentICMenu%MenuPositionTextFont) ; set value if ini not found
					IC%currentICMenu%MenuPositionTextAlignment := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Alignment","Right")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Alignment",IC%currentICMenu%MenuPositionTextAlignment) ; set value if ini not found
					IC%currentICMenu%MenuPositionTextSize := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Text_Size","20")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Text_Size",IC%currentICMenu%MenuPositionTextSize) ; set value if ini not found				
					IC%currentICMenu%MenuPositionTextColor := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Text_Color","FFFFFFFF")
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Text_Color",IC%currentICMenu%MenuPositionTextColor) ; set value if ini not found	
					IC%currentICMenu%MenuPositionTextX := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Top_X_position",0)
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Top_X_position",IC%currentICMenu%MenuPositionTextX) ; set value if ini not found
					IC%currentICMenu%MenuPositionTextY := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Top_Y_position",bezelIC%currentICMenu%MenuBitmapH-IC%currentICMenu%MenuPositionTextSize)
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Top_Y_position",IC%currentICMenu%MenuPositionTextY) ; set value if ini not found
					IC%currentICMenu%MenuPositionTextWidth := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Width",bezelIC%currentICMenu%MenuBitmapW)
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Width",IC%currentICMenu%MenuPositionTextWidth) ; set value if ini not found
					IC%currentICMenu%MenuPositionTextHeight := RIni_GetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Height",IC%currentICMenu%MenuPositionTextSize)
					RIni_SetKeyValue("bezelICRini" . currentICMenu,"Instruction Card Screen Position Text Settings","Height",IC%currentICMenu%MenuPositionTextHeight) ; set value if ini not found
					; Saving values to ini file
					RIni_Write("bezelICRini" . currentICMenu,BezelICMenuIniFile,"`r`n",1,1,1)
					;Resizing Menu items
					XBaseRes := 1920, YBaseRes := 1080
					if (((A_screenWidth < A_screenHeight) and ((screenRotationAngle=0) or (screenRotationAngle=180))) or ((A_screenWidth > A_screenHeight) and ((screenRotationAngle=90) or (screenRotationAngle=270))))
						XBaseRes := 1080, YBaseRes := 1920
					ICMenuScreenScallingFactor := baseScreenHeight/YBaseRes
					OptionScale(IC%currentICMenu%MenuListX, ICMenuScreenScallingFactor)
					OptionScale(IC%currentICMenu%MenuListY, ICMenuScreenScallingFactor)
					OptionScale(IC%currentICMenu%MenuListWidth, ICMenuScreenScallingFactor)
					OptionScale(IC%currentICMenu%MenuListHeight, ICMenuScreenScallingFactor)
					OptionScale(IC%currentICMenu%MenuListTextSize, ICMenuScreenScallingFactor)
					OptionScale(IC%currentICMenu%MenuListDisabledTextSize, ICMenuScreenScallingFactor)
					OptionScale(IC%currentICMenu%MenuPositionTextX, ICMenuScreenScallingFactor)
					OptionScale(IC%currentICMenu%MenuPositionTextY, ICMenuScreenScallingFactor)
					OptionScale(IC%currentICMenu%MenuPositionTextWidth, ICMenuScreenScallingFactor)
					OptionScale(IC%currentICMenu%MenuPositionTextHeight, ICMenuScreenScallingFactor)
					OptionScale(bezelIC%currentICMenu%MenuBitmapW, ICMenuScreenScallingFactor)
					OptionScale(bezelIC%currentICMenu%MenuBitmapH, ICMenuScreenScallingFactor)
				}
				pGraphUpd(Bezel_G4,baseScreenWidth,baseScreenHeight)
				pGraphUpd(Bezel_G5,bezelICLeftMenuBitmapW,bezelICLeftMenuBitmapH)
				pGraphUpd(Bezel_G6,ICLeftMenuListWidth,ICLeftMenuListTextSize)
				pGraphUpd(Bezel_G7,bezelICRightMenuBitmapW,bezelICRightMenuBitmapH)
				pGraphUpd(Bezel_G8,ICRightMenuListWidth,ICRightMenuListTextSize)
			}
		}
		If bezelPath 
			{	
			;Setting ini file with bezel coordinates and reading its values
			if (bezelImageFile = "fakeFullScreenBezel"){
				bezelScreenX := 0
				bezelScreenY := 0
				bezelScreenWidth := A_ScreenWidth
				bezelScreenHeight := A_ScreenHeight
				origbezelImageW := A_ScreenWidth
				origbezelImageH := A_ScreenHeight
				bezelOrigIniScreenX1 := 0
				bezelOrigIniScreenY1 := 0
				bezelOrigIniScreenX2 := A_ScreenWidth
				bezelOrigIniScreenY2 := A_ScreenHeight
			} else {		
				ReadBezelIniFile()
				bezelScreenX1 := bezelOrigIniScreenX1
				bezelScreenY1 := bezelOrigIniScreenY1
				bezelScreenX2 := bezelOrigIniScreenX2
				bezelScreenY2 := bezelOrigIniScreenY2	
				; creating bitmap pointers
				bezelBitmap := Gdip_CreateBitmapFromFile(bezelImageFile)
				Gdip_GetImageDimensions(bezelBitmap, origbezelImageW, origbezelImageH)
				bezelImageW := origbezelImageW
				bezelImageH := origbezelImageH 
				; calculating BezelCoordinates
				if (bezelMode = "Normal")
					BezelCoordinates("Normal")
				else if (bezelMode = "MultiScreens")
					BezelCoordinates("MultiScreens")
			}
			if bezelOverlayFile
				bezelOverlayBitmap := Gdip_CreateBitmapFromFile(bezelOverlayFile)
		}
		If (bezelPath) or (bezelICPath) 
			{
			;force windowed mode
				if !disableForceFullscreen
					Fullscreen := false
		}
		Log("BezelStart - Ended")
	}
Return 
}
  BezelDraw(){
	Global
	if (bezelEnabled = "true"){
		Log("BezelDraw - Started")
		If bezelDelay
			Sleep % bezelDelay
		;------------ bezel background
		;Setting background aleatory choosed file
		bezelBackgroundFile := 
		if !(bezelImageFile = "fakeFullScreenBezel"){
			SplitPath, bezelImageFile, bezelImageFileName 
			bezelBackgroundsList := []
			If FileExist(bezelPath . "\Background" . SubStr(bezelImageFileName,6,StrLen(bezelImageFileName)-9) . ".*") {
				Loop, Parse, bezelFileExtensions,|
					If FileExist(bezelPath . "\Background" . SubStr(bezelImageFileName,6,StrLen(bezelImageFileName)-9) . "." . A_LoopField) 
						bezelBackgroundsList.Insert(bezelPath . "\Background" . SubStr(bezelImageFileName,6,StrLen(bezelImageFileName)-9) . "." . A_LoopField)
				Random, RndBezelBackground, 1, % bezelBackgroundsList.MaxIndex()
				bezelBackgroundfile := bezelBackgroundsList[RndBezelBackground]
				Log("Bezel - Loading Background image with the same name of the bezel image: " . bezelBackgroundFile,1)
			} Else {
				bezelBackgroundPath := BezelFilesPath("Background",bezelFileExtensions,false,if (bezelUseBackgrounds="true") ? true : false)
				if (bezelBackgroundPath)
				{ 	bezelBackgroundfileList := []
					Loop, Parse, bezelFileExtensions,|
						Loop, % bezelBackgroundPath . "\" . "Background*." . A_LoopField
							If (!(FileExist(bezelBackgroundPath . "\Bezel" . SubStr(A_LoopFileName,11,StrLen(A_LoopFileName)-14) . ".*")))
							bezelBackgroundfileList.Insert(A_LoopFileFullPath)
					Random, RndBezelBackground, 1, % bezelBackgroundfileList.MaxIndex()
					bezelBackgroundfile := bezelBackgroundfileList[RndBezelBackground]
					Log("Bezel - Loading Background image: " . bezelBackgroundFile,1)
				}
			}
		}
		Gdip_GraphicsClear(Bezel_G1)
		pBrush := Gdip_BrushCreateSolid("0xff000000")
		Gdip_Alt_FillRectangle(Bezel_G1, pBrush, -1, -1, A_ScreenWidth+2, A_ScreenWidth+2)
		if bezelBackgroundFile
			{
			bezelBackgroundBitmap := Gdip_CreateBitmapFromFile(bezelBackgroundFile)
			; Updating GUI 1 - Background - with image
			Gdip_DrawImage(Bezel_G1, bezelBackgroundBitmap, 0, 0,A_ScreenWidth+1,A_ScreenHeight+1)        
			Log("Bezel - Background Screen Position: BezelImage left=" . 0 . " top=" . 0 . " right=" . A_ScreenWidth . " bottom=" . A_ScreenHeight ,5)
		}
		UpdateLayeredWindow(Bezel_hwnd1, Bezel_hdc1,0,0, A_ScreenWidth, A_ScreenHeight)
		Gui, Bezel_GUI1: Show, na
		;------------ bezelMode bezelLayoutFile
		if bezelLayoutFile	
			return
		If bezelPath 
			{
			;------------ bezelMode MultiScreens
			if (bezelMode = "MultiScreens") {
				; Disable windows components
				; Going to the label on the module to enable or disable emulator window manipulation codes to hide windows components, ...  
				var := "BezelLabel"
				If IsLabel(var)
					gosub, %var%
				loop, %bezelNumberOfScreens%
					{
					currentScreen := a_index
					If !disableHideTitleBarScreen%currentScreen%
						WinSet, Style, -0xC00000, % "ahk_id " . Screen%currentScreen%ID
					If !disableHideToggleMenuScreen%currentScreen%
						ToggleMenu(Screen%a_index%ID)
					If !disableHideBorderScreen%currentScreen%
						WinSet, Style, -0xC40000, % "ahk_id " . Screen%currentScreen%ID
					;Moving emulator Window to predefined bezel position
					screenPositionLogList := screenPositionLogList . "`r`n`t`t`t`t`tScreen " . currentScreen . ": left=" . bezelScreen%currentScreen%X1 . " top=" . bezelScreen%currentScreen%Y1 . " right=" . (bezelScreen%currentScreen%X1+bezelScreen%currentScreen%W) . " bottom=" . (bezelScreen%currentScreen%Y1+bezelScreen%currentScreen%H)
					If !disableWinMove
						WinMove, % "ahk_id " . Screen%currentScreen%ID, , % bezelScreen%currentScreen%X1, % bezelScreen%currentScreen%Y1, % bezelScreen%currentScreen%W, % bezelScreen%currentScreen%H
				}
				If !disableWinMove
					{
					;check if windows moved
					sleep, 200
					loop, %bezelNumberOfScreens%
						{			
						currentScreen := a_index
						X:="" , Y:="" , W:="" , H:=""
						timeout := A_TickCount
						loop
							{
							sleep, 50
							WinGetPos, X, Y, W, H, % "ahk_id " . Screen%currentScreen%ID
							if (X=bezelScreen%currentScreen%X1) and (Y=bezelScreen%currentScreen%Y1) and (W=bezelScreen%currentScreen%W) and (H=bezelScreen%currentScreen%H)
								break
							if(timeout < A_TickCount - bezelCheckPosTimeout) {
								Log("Screen " . currentScreen . " did not moved to correct bezel position. Timeout enabled.",5)
								break
							}
							sleep, 50
							WinMove, % "ahk_id " . Screen%currentScreen%ID, , % bezelScreen%currentScreen%X1, % bezelScreen%currentScreen%Y1, % bezelScreen%currentScreen%W, % bezelScreen%currentScreen%H
						}
					}
				}				
			;------------ bezelMode Normal
			} else if (bezelMode = "Normal") {
				WinGet emulatorID, ID, A
				;BezelCoordinates("Normal")
				Log("Bezel - Bezel Screen Offset: left=" . bezelLeftOffset . " top=" . bezelTopOffset . " right=" . bezelRightOffset . " bottom=" . bezelBottomOffset ,1)
				; Going to the label on the module to enable or disable emulator window manipulation codes to hide windows components, ...  
				var := "BezelLabel"
				If IsLabel(var)
					gosub, %var%
				; list of windows manipulation options that can be enabled/disabled on the BezelLabel (they are enable as default)
				If !disableHideTitleBar
					WinSet, Style, -0xC00000, A
				If !disableHideToggleMenu
					ToggleMenu(emulatorID)
				If !disableHideBorder
					WinSet, Style, -0xC40000, A
				;Moving emulator Window to predefined bezel window 
				If !disableWinMove
					{
					bezelScreenX := round(bezelScreenX) , bezelScreenY := round(bezelScreenY), bezelScreenWidth := round(bezelScreenWidth) , bezelScreenHeight := round(bezelScreenHeight)
					WinMove, ahk_id %emulatorID%, , %bezelScreenX%, %bezelScreenY%, %bezelScreenWidth%, %bezelScreenHeight%
					; check if window moved
					X:="" , Y:="" , W:="" , H:=""
					timeout := A_TickCount
					sleep, 200
					loop
						{
						sleep, 50
						WinGetPos, X, Y, W, H, ahk_id %emulatorID%
						if (X=bezelScreenX) and (Y=bezelScreenY) and (W=bezelScreenWidth) and (H=bezelScreenHeight)
						{
							Log("Bezel - Moving emulator window delay, window moved",5)
							break
						}
						if(timeout < A_TickCount - bezelCheckPosTimeout)
						{
							Log("Bezel - Moving emulator window delay timed out",5)
							break
						}
						sleep, 50
						WinMove, ahk_id %emulatorID%, , %bezelScreenX%, %bezelScreenY%, %bezelScreenWidth%, %bezelScreenHeight%
					}
				}
			;------------ bezelMode fixResMode
			} else if (bezelMode = "fixResMode") {  ; Define coordinates for emulators that does not support custom made resolutions. 
				WinGet emulatorID, ID, A
				Log("Bezel - Emulator does not support custom made resolution. Game screen will be centered at the emulator resolution and the bezel png will be drawn around it. The bezel image will be croped if its resolution is bigger them the screen resolution.",1)
				X:="" , Y:="" , W:="" , H:=""
				timeout := A_TickCount
				loop 
					{
					sleep, 50
					WinGetPos, bezelScreenX, bezelScreenY, bezelScreenWidth, bezelScreenHeight, A
					if bezelScreenX and bezelScreenY and bezelScreenWidth and bezelScreenHeight
						break
					if(timeout < A_TickCount - bezelCheckPosTimeout)
						break
				}
				Log("Bezel - Emulator Screen Position: left=" . bezelScreenX . " top=" . bezelScreenY . " width=" . bezelScreenWidth . " height=" . bezelScreenHeight ,5)
				BezelCoordinates("fixResMode")
				Log("Bezel - Screen Offset: left=" . bezelLeftOffset . " top=" . bezelTopOffset . " right=" . bezelRightOffset . " bottom=" . bezelBottomOffset ,1)
				; Going to the label on the module to enable or disable emulator window manipulation codes to hide windows components, ...  
				var := "BezelLabel"
				If IsLabel(var)
					gosub, %var%
				; list of windows manipulation options that can be enabled/disabled on the BezelLabel (they are enable as default)
				If !disableHideTitleBar
					WinSet, Style, -0xC00000, A
				If !disableHideToggleMenu
					ToggleMenu(emulatorID)
				If !disableHideBorder
					WinSet, Style, -0xC40000, A
				;Moving emulator Window to predefined bezel window 
				If !disableWinMove
					{
					bezelScreenX := round(bezelScreenX) , bezelScreenY := round(bezelScreenY)
					WinMove, ahk_id %emulatorID%, , %bezelScreenX%, %bezelScreenY%
					; check if window moved
					X:="" , Y:="" 
					timeout := A_TickCount
					sleep, 200
					Log("Bezel - Moving emulator window delay start",5)
					loop
						{
						sleep, 50
						WinGetPos, X, Y, , , ahk_id %emulatorID%
						if (X=bezelScreenX) and (Y=bezelScreenY) {
							Log("Bezel - Moving emulator window delay, window moved",5)
							break
						}
						if(timeout < A_TickCount - bezelCheckPosTimeout) {
							Log("Bezel - Moving emulator window delay timed out",5)
							break
						}
						sleep, 50
						WinMove, ahk_id %emulatorID%, , %bezelScreenX%, %bezelScreenY%
					}
				}
			}
			;Drawing Bezel GUI
			if !(bezelImageFile = "fakeFullScreenBezel"){
				Gdip_DrawImage(Bezel_G3, bezelBitmap, bezelImageX, bezelImageY,bezelImageW,bezelImageH)        
				if !bezelLoaded
					UpdateLayeredWindow(Bezel_hwnd3, Bezel_hdc3,0,0, A_ScreenWidth, A_ScreenHeight)
				Log("Bezel - Bezel Image Screen Position: BezelImage left=" . bezelImageX . " top=" . bezelImageY . " right=" . (bezelImageX+bezelImageW) . " bottom=" . (bezelImageY+bezelImageH)  ,5)	
				if (bezelMode = "MultiScreens")
					Log("Bezel - Game Screen Position:" . screenPositionLogList, 4)
				else
					Log("Bezel - Game Screen Position: BezelImage left=" . bezelScreenX . " top=" . bezelScreenY . " right=" . (bezelScreenX+bezelScreenWidth) . " bottom=" . (bezelScreenY+bezelScreenHeight) ,5)	
			}
			;Drawing Overlay Image above screen
			If bezelOverlayFile
				{
				if (bezelMode = "MultiScreens") {
					loop, %bezelNumberOfScreens%
						Gdip_DrawImage(Bezel_G2, bezelOverlayBitmap, bezelScreen%A_Index%X1, bezelScreen%A_Index%Y1,bezelScreen%A_Index%W,bezelScreen%A_Index%H)     		
					if !bezelLoaded
						UpdateLayeredWindow(Bezel_hwnd2, Bezel_hdc2,0,0, A_ScreenWidth, A_ScreenHeight)
				} else {
					Gdip_DrawImage(Bezel_G2, bezelOverlayBitmap, 0, 0,bezelScreenWidth,bezelScreenHeight)        
					if !bezelLoaded
						UpdateLayeredWindow(Bezel_hwnd2, Bezel_hdc2,bezelScreenX,bezelScreenY, bezelScreenWidth, bezelScreenHeight)
					Log("Bezel - Overlay Screen Position: BezelImage left=" . bezelScreenX . " top=" . bezelScreenY . " right=" . (bezelScreenX+bezelScreenWidth) . " bottom=" . (bezelScreenY+bezelScreenHeight) ,5)	
				}
			}
			if !bezelLoaded
				{
				;Initializing Instruction Cards Keys
				gosub, EnableBezelKeys
				;Initializing bezel change
				if (bezelImagesList.MaxIndex() > 1) {
					if nextBezelKey
						{
						nextBezelKey := xHotKeyVarEdit(nextBezelKey,"nextBezelKey","~","Add")
						XHotKeywrapper(nextBezelKey,"nextBezel")
					}
					if previousBezelKey
						{
						previousBezelKey := xHotKeyVarEdit(previousBezelKey,"previousBezelKey","~","Add")
						XHotKeywrapper(previousBezelKey,"previousBezel")
					}
				}
				;Creating bezel background timer
				if (bezelBackgroundsList.MaxIndex() > 1)
					if bezelBackgroundChangeDur
						settimer, BezelBackgroundTimer, %bezelBackgroundChangeDur%
			}
		}
		if bezelICPath
			{
			if ((ICSaveSelected="true") and (FileExist(Bezel_RomFile))) {
				loop, 8
					if maxICimage[a_index]
						{
						selectedIndex := RIni_GetKeyValue("BezelRomRini","Instruction Cards","Initial_Card_" . a_index . "_Index")
						selectedICimage[a_index] := if (selectedIndex = -2) or (selectedIndex = -3) ? 1 :  selectedIndex
					}
			}
			if (displayICOnStartup = "true") {
				loop, 8
					{
					if !(selectedICimage[a_index]) 
						selectedICimage[a_index] := 1
					if maxICimage[a_index]
						{
						DrawIC()
					}
				}
			} else if (displayICOnStartup = "Random") {
				gosub, randomICChange
			}
			if %ICRandomSlideShowTimer%
				SetTimer, randomICChange, %ICRandomSlideShowTimer%
		}
		bezelLoaded := true
		Log("BezelDraw - Ended")
	}
Return
}
 BezelExit(){
	Global
	if (bezelEnabled = "true"){
		Log("BezelExit - Started")
		;Deleting pointers and destroying GUis
		loop, 8 {
			SelectObject(Bezel_hdc%A_Index%, Bezel_obm%A_Index%)
			DeleteObject(Bezel_hbm%A_Index%)
			DeleteDC(Bezel_hdc%A_Index%)
			Gdip_DeleteGraphics(Bezel_G%A_Index%)
			Gui, Bezel_GUI%A_Index%: Destroy
		}
		If bezelPath 
			{
			log("Bezel - Removing bezel image components to exit RocketLauncher.",1)
			if bezelBitmap
				Gdip_DisposeImage(bezelBitmap)
			if bezelBackgroundFile
				Gdip_DisposeImage(bezelBackgroundBitmap)
			if bezelOverlayFile
				Gdip_DisposeImage(bezelOverlayBitmap) 
			if BezelBackgroundChangeLoaded
				Gdip_DisposeImage(preRndmBezelBackground) 
			if bezelICPath
				{
				loop, 8
					{
					currentICPositionIndex := a_index
					loop, %numberofICImages%
						{
						if bezelICArray[currentICPositionIndex,a_index,2]
							Gdip_DisposeImage(bezelICArray[currentICPositionIndex,a_index,2])
					}
				}
			}
			if (bezelSaveSelected="true") {
				RIni_SetKeyValue("BezelRomRini","Bezel Change","Initial_Bezel_Index",RndmBezel)	
				updateBezel_RomFile := true
			}
		}
		if bezelICPath
			{
			if (ICSaveSelected="true"){
				Loop, 8
					RIni_SetKeyValue("BezelRomRini","Instruction Cards","Initial_Card_" . a_index . "_Index",selectedICimage[a_index])
				updateBezel_RomFile := true
			}
		}
		if updateBezel_RomFile
			{
			SplitPath, Bezel_RomFile, , Bezel_RomFilePath
			FileCreateDir, % Bezel_RomFilePath
			RIni_Write("BezelRomRini",Bezel_RomFile,"`r`n",1,1,1)
		}
		Log("BezelExit - Ended")
	}
Return
}
  ReadBezelIniFile(){
	Global
	StringTrimRight, bezelIniFile, bezelImageFile, 4
	bezelIniFile := bezelIniFile . ".ini"
	If !FileExist(bezelIniFile)
		Log("Bezel - Bezel Ini file not found. Creating the file " . bezelIniFile . " with full screen coordinates. You should edit the ini file to enter the coordinates in pixels of the screen emulator location on the bezel image.",2)
	bezelOrigIniScreenX1 := IniReadCheck(bezelIniFile, "General", "Bezel Screen Top Left X Coordinate", 0)
	bezelOrigIniScreenY1 := IniReadCheck(bezelIniFile, "General", "Bezel Screen Top Left Y Coordinate", 0)
	bezelOrigIniScreenX2 := IniReadCheck(bezelIniFile, "General", "Bezel Screen Bottom Right X Coordinate", A_ScreenWidth)
	bezelOrigIniScreenY2 := IniReadCheck(bezelIniFile, "General", "Bezel Screen Bottom Right Y Coordinate", A_ScreenHeight)
	Log("Bezel - Bezel ini file found. Defined screen positions: X1=" . bezelOrigIniScreenX1 . " Y1=" . bezelOrigIniScreenY1 . " X2=" . bezelOrigIniScreenX2 . " Y2=" . bezelOrigIniScreenY2 ,5)	
	;reading additional screens info
	if (bezelMode = "MultiScreens") {
		loop, % bezelNumberOfScreens-1
			{
			currentScreen := a_index+1
			bezelScreen%currentScreen%X1 := IniReadCheck(bezelIniFile, "General", "Bezel Screen " . currentScreen . " Top Left X Coordinate", 0)
			bezelScreen%currentScreen%Y1 := IniReadCheck(bezelIniFile, "General", "Bezel Screen " . currentScreen . " Top Left Y Coordinate", 0)
			bezelScreen%currentScreen%X2 := IniReadCheck(bezelIniFile, "General", "Bezel Screen " . currentScreen . " Bottom Right X Coordinate", 0)
			bezelScreen%currentScreen%Y2 := IniReadCheck(bezelIniFile, "General", "Bezel Screen " . currentScreen . " Bottom Right Y Coordinate", 0)
		}
	}
return
}
 BezelCoordinates(CoordinatesMode){
	Global
	if (CoordinatesMode = "Normal"){
		; Resizing bezel transparent area to the screen resolution (image is stretched to Center screen, keeping aspect)
		widthMaxPerc := ( A_ScreenWidth / bezelImageW )	; get the percentage needed to maximise the image so the higher dimension reaches the screen's edge
		heightMaxPerc := ( A_ScreenHeight / bezelImageH )
		scaleFactor := If (widthMaxPerc < heightMaxPerc) ? widthMaxPerc : heightMaxPerc
		bezelImageW := Round(bezelImageW * scaleFactor)
		bezelImageH := Round(bezelImageH * scaleFactor)
		bezelImageX := Round( ( A_ScreenWidth - bezelImageW ) // 2 )
		bezelImageY := Round( ( A_ScreenHeight - bezelImageH ) // 2 )
		; Defining emulator position 
		bezelScreenX := Round ( bezelImageX + (bezelScreenX1 * scaleFactor) )
		bezelScreenY := Round ( bezelImageY + (bezelScreenY1 * scaleFactor) )
		bezelScreenWidth := Round( (bezelScreenX2-bezelScreenX1)* scaleFactor )
		bezelScreenHeight := Round( (bezelScreenY2-bezelScreenY1)* scaleFactor )
		; Applying offsets to correctly place the emulator if the emulator has extra window components
		bezelScreenX := if bezelLeftOffset ? bezelScreenX - bezelLeftOffset : bezelScreenX
		bezelScreenY := if bezelTopOffset ? bezelScreenY - bezelTopOffset : bezelScreenY
		bezelScreenWidth := if bezelRightOffset ? ( if bezelLeftOffset ? bezelScreenWidth + bezelRightOffset + bezelLeftOffset : bezelScreenWidth + bezelRightOffset ) : ( if bezelLeftOffset ? bezelScreenWidth + bezelLeftOffset : bezelScreenWidth )
		bezelScreenHeight := if bezelTopOffset ? ( if bezelBottomOffset ? bezelScreenHeight + bezelTopOffset + bezelBottomOffset : bezelScreenHeight + bezelTopOffset ) : ( if bezelBottomOffset ? bezelScreenHeight + bezelBottomOffset : bezelScreenHeight )
		bezelScreenX := round(bezelScreenX) , bezelScreenY := round(bezelScreenY), bezelScreenWidth := round(bezelScreenWidth) , bezelScreenHeight := round(bezelScreenHeight)
	} else if (CoordinatesMode = "MultiScreens") {
		; Resizing bezel transparent area to the screen resolution (image is stretched to Center screen, keeping aspect)
		widthMaxPerc := ( A_ScreenWidth / bezelImageW )	; get the percentage needed to maximise the image so the higher dimension reaches the screen's edge
		heightMaxPerc := ( A_ScreenHeight / bezelImageH )
		scaleFactor := If (widthMaxPerc < heightMaxPerc) ? widthMaxPerc : heightMaxPerc
		bezelImageW := Round(bezelImageW * scaleFactor)
		bezelImageH := Round(bezelImageH * scaleFactor)
		bezelImageX := Round( ( A_ScreenWidth - bezelImageW ) // 2 )
		bezelImageY := Round( ( A_ScreenHeight - bezelImageH ) // 2 )
		; Defining emulator position 
		bezelScreen1X1 := bezelScreenX1
		bezelScreen1Y1 := bezelScreenY1
		bezelScreen1X2 := bezelScreenX2
		bezelScreen1Y2 := bezelScreenY2	
		loop, %bezelNumberOfScreens%
			{
			bezelScreen%a_index%W := Round((bezelScreen%a_index%X2-bezelScreen%a_index%X1)*scaleFactor) 
			bezelScreen%a_index%H := Round((bezelScreen%a_index%Y2-bezelScreen%a_index%Y1)*scaleFactor) 
			bezelScreen%a_index%X1 := Round(bezelImageX+bezelScreen%a_index%X1*scaleFactor)	 
			bezelScreen%a_index%Y1 := Round(bezelImageY+bezelScreen%a_index%Y1*scaleFactor)	 
			; Applying offsets to correctly place the emulator if the emulator has extra window components
			bezelScreen%a_index%X1 := if bezelLeftOffsetScreen%a_index% ? bezelScreen%a_index%X1 - bezelLeftOffsetScreen%a_index% : bezelScreen%a_index%X1
			bezelScreen%a_index%Y1 := if bezelTopOffsetScreen%a_index% ? bezelScreen%a_index%Y1 - bezelTopOffsetScreen%a_index% : bezelScreen%a_index%Y1
			bezelScreen%a_index%W := if bezelRightOffsetScreen%a_index% ? ( if bezelLeftOffsetScreen%a_index% ? bezelScreen%a_index%W + bezelRightOffsetScreen%a_index% + bezelLeftOffsetScreen%a_index% : bezelScreen%a_index%W + bezelRightOffsetScreen%a_index% ) : ( if bezelLeftOffsetScreen%a_index% ? bezelScreen%a_index%W + bezelLeftOffsetScreen%a_index% : bezelScreen%a_index%W )
			bezelScreen%a_index%H := if bezelTopOffsetScreen%a_index% ? ( if bezelBottomOffsetScreen%a_index% ? bezelScreen%a_index%H + bezelTopOffsetScreen%a_index% + bezelBottomOffsetScreen%a_index% : bezelScreen%a_index%H + bezelTopOffsetScreen%a_index% ) : ( if bezelBottomOffsetScreen%a_index% ? bezelScreen%a_index%H + bezelBottomOffsetScreen%a_index% : bezelScreen%a_index%H )
			bezelScreen%a_index%X1 := round(bezelScreen%a_index%X1) , bezelScreen%a_index%Y1 := round(bezelScreen%a_index%Y1), bezelScreen%a_index%W := round(bezelScreen%a_index%W) , bezelScreen%a_index%H := round(bezelScreen%a_index%H)			
			log("Emulator Screen " . a_index . " position on bezel: X=" . bezelScreen%a_index%X1 . " Y=" . bezelScreen%a_index%Y1 . " W=" . bezelScreen%a_index%W . " H=" . bezelScreen%a_index%H ,5)
		}
	} else if (CoordinatesMode = "fixResMode") {
		bezelScreenWidth := if bezelRightOffset ? ( if bezelLeftOffset ? bezelScreenWidth - bezelRightOffset - bezelLeftOffset : bezelScreenWidth - bezelRightOffset ) : ( if bezelLeftOffset ? bezelScreenWidth - bezelLeftOffset : bezelScreenWidth )
		bezelScreenHeight := if bezelTopOffset ? ( if bezelBottomOffset ? bezelScreenHeight - bezelTopOffset - bezelBottomOffset : bezelScreenHeight - bezelTopOffset ) : ( if bezelBottomOffset ? bezelScreenHeight - bezelBottomOffset : bezelScreenHeight )
		bezelScreenX:= Round((A_ScreenWidth-bezelScreenWidth)/2)
		bezelScreenY:= Round((A_ScreenHeight-bezelScreenHeight)/2) 
		bezelScreenX := if bezelLeftOffset ? bezelScreenX - bezelLeftOffset : bezelScreenX
		bezelScreenY := if bezelTopOffset ? bezelScreenY - bezelTopOffset : bezelScreenY
		xScaleFactor := (bezelScreenWidth)/(bezelScreenX2-bezelScreenX1)
		yScaleFactor := (bezelScreenHeight)/(bezelScreenY2-bezelScreenY1)
		bezelImageW := Round(bezelImageW * xScaleFactor)
		bezelImageH := Round(bezelImageH * yScaleFactor) 
		bezelImageX := Round( (A_ScreenWidth-(bezelScreenX2-bezelScreenX1)*xScaleFactor)//2-bezelScreenX1*xScaleFactor )
		bezelImageY := Round( (A_ScreenHeight-(bezelScreenY2-bezelScreenY1)*yScaleFactor)//2-bezelScreenY1*yScaleFactor )		
	}
Return
}
 BezelFilesPath(filename,fileextension,excludeScreens=false,useBkgdPath=false)
{	Global RLMediaPath, systemName, dbName, vertical, gameInfo, emuName
	bezelpath1 := RLMediaPath . "\Bezels\" . systemName . "\" . dbName
	If (gameInfo["Cloneof"].Value)
		bezelpath2 := RLMediaPath . "\Bezels\" . systemName . "\" . gameInfo["Cloneof"].Value
	If (useBkgdPath){
		bezelpath3 := RLMediaPath . "\Backgrounds\" . systemName . "\" . dbName
		If (gameInfo["Cloneof"].Value)
			bezelpath4 := RLMediaPath . "\Backgrounds\" . systemName . "\" . gameInfo["Cloneof"].Value
	}
	If (vertical = "true")
		bezelpath5 := RLMediaPath . "\Bezels\" . systemName . "\_Default\" . emuName . "\Vertical"
	Else
		bezelpath6 := RLMediaPath . "\Bezels\" . systemName . "\_Default\" . emuName . "\Horizontal"
	bezelpath7 := RLMediaPath . "\Bezels\" . systemName . "\_Default\" . emuName
	If (vertical = "true")
		bezelpath8 := RLMediaPath . "\Bezels\" . systemName . "\_Default\Vertical"
	Else
		bezelpath9 := RLMediaPath . "\Bezels\" . systemName . "\_Default\Horizontal"
	bezelpath10 := RLMediaPath . "\Bezels\" . systemName . "\_Default"
	If (useBkgdPath){
		If (vertical = "true")
			bezelpath11 := RLMediaPath . "\Backgrounds\" . systemName . "\_Default\Vertical"
		else
			bezelpath12 := RLMediaPath . "\Backgrounds\" . systemName . "\_Default\Horizontal"
		bezelpath13 := RLMediaPath . "\Backgrounds\" . systemName . "\_Default"
	}
	If (vertical = "true")
		bezelpath14 := RLMediaPath . "\Bezels\_Default\Vertical"
	Else
		bezelpath15 := RLMediaPath . "\Bezels\_Default\Horizontal"
	bezelpath16 := RLMediaPath . "\Bezels\_Default"
	If (useBkgdPath){
		If (vertical = "true")
			bezelpath17 := RLMediaPath . "\Backgrounds\_Default\Vertical"
		else
			bezelpath18 := RLMediaPath . "\Backgrounds\_Default\Horizontal"
		bezelpath19 := RLMediaPath . "\Backgrounds\_Default"
	}
	Loop, 19 {
		If bezelpath%a_index%
			{
			Log("Bezel - Looking for " . filename . " in: " . bezelpath%A_Index%,4)
			currentbezelpathNumber := a_index
			Loop, Parse, fileextension,|
			{	Loop % bezelpath%currentbezelpathNumber% . "\" . filename . "*." . A_LoopField
					{
					if (!(filename="Background") or ((filename="Background") and !(FileExist(bezelpath%currentbezelpathNumber% . "\Bezel" . SubStr(A_LoopFileName,11,StrLen(A_LoopFileName)-14) . ".*"))))  ;excluding bezel specific backgrounds 
						{
						If excludeScreens
							{
							If !RegExMatch(A_LoopFileName, "i)\[[0-9]+S\]")
								{
								Log("Bezel - Found " . filename . " art in folder: " . bezelpath%currentbezelpathNumber%,4)
								bezelPathFound := bezelpath%currentbezelpathNumber%
								break
							}
						} Else {					
							Log("Bezel - Found " . filename . " art in folder: " . bezelpath%currentbezelpathNumber%,4)
							bezelPathFound := bezelpath%currentbezelpathNumber%
							break
						}
					}
				}
			}
			If bezelPathFound
				break
		}
	}
	If !bezelPathFound
		log("Bezel - Bezels are enabled, however none of the " . filename . " files, with extensions " . fileextension . " exist on the bezel folders.",2)
	Return bezelPathFound
}		
  ;Function to load ini values
RIniBezelLoadVar(gRIniVar,sRIniVar,rRIniVar,gsec,gkey,gdefaultvalue="",ssec=0,skey=0,sdefaultvalue="use_global",rdefaultvalue="use_global") {
    Global
    if not ssec
        ssec := gsec
    if not skey
        skey := gkey
	X1 := RIni_GetKeyValue(gRIniVar,gsec,gkey)
	X1 := If (X1 = -2) or (X1 = -3) ? gdefaultvalue :  X1
	X2 := RIni_GetKeyValue(sRIniVar,ssec,skey)
	X2 := If (X2 = -2) or (X2 = -3) ? sdefaultvalue :  X2
	X3 := RIni_GetKeyValue(rRIniVar,ssec,skey)
	X3 := If (X3 = -2) or (X3 = -3) ? rdefaultvalue :  X3
	X4 := (If (X3 = "use_global")  ? (If (X2 = "use_global") ? (X1) : (X2)) : (X3))	
	RIni_SetKeyValue(gRIniVar,gsec,gkey,X1)
    RIni_SetKeyValue(sRIniVar,ssec,skey,X2)
	RIni_SetKeyValue(rRIniVar,ssec,skey,X3)
    BezelVarLog .= "`r`n`t`t`t`t`t" . "[" . gsec . "] " . gkey . " = " . X4
	Return X4
}
  ; Bezel Change Code 
BezelBackgroundTimer:
	BezelBackgroundChangeLoaded := true
	preRndmBezelBackground := RndmBezelBackground
	RndmBezelBackground := RndmBezelBackground + 1
	if (RndmBezelBackground > bezelBackgroundsList.MaxIndex())
		RndmBezelBackground := 1
	prebezelBackgroundfile := bezelBackgroundsList[preRndmBezelBackground] 
	bezelBackgroundfile := bezelBackgroundsList[RndmBezelBackground]
	prebezelBackgroundBitmap := Gdip_CreateBitmapFromFile(prebezelBackgroundfile)
	bezelBackgroundBitmap := Gdip_CreateBitmapFromFile(bezelBackgroundFile)
	if (bezelBackgroundTransition="fade"){
		;fade in
		startTime := A_TickCount
		Loop {
			Gdip_GraphicsClear(Bezel_G1)
			t := if ((TimeElapsed := A_TickCount-startTime) < bezelBackgroundTransitionDur) ? ((timeElapsed/bezelBackgroundTransitionDur)) : 1
			Gdip_DrawImage(Bezel_G1, prebezelBackgroundBitmap, 0, 0,A_ScreenWidth,A_ScreenHeight)    
			Gdip_DrawImage(Bezel_G1, bezelBackgroundBitmap, 0, 0,A_ScreenWidth,A_ScreenHeight,"","","","",t) 
			UpdateLayeredWindow(Bezel_hwnd1, Bezel_hdc1,0,0, A_ScreenWidth, A_ScreenHeight)
			If (t >= 1)
				Break
		}				
	} else {
		Gdip_GraphicsClear(Bezel_G1)
		Gdip_DrawImage(Bezel_G1, bezelBackgroundBitmap, 0, 0,A_ScreenWidth,A_ScreenHeight)    
		UpdateLayeredWindow(Bezel_hwnd1, Bezel_hdc1,0,0, A_ScreenWidth, A_ScreenHeight)		
	}
return
  NextBezel:
PreviousBezel:
if bezelPath
	{
	if bezelLayoutFile
		return
	if (A_ThisLabel="NextBezel") {
		RndmBezel := RndmBezel + 1
		if (RndmBezel > bezelImagesList.MaxIndex()){
			RndmBezel := 1
		}
	} else if (A_ThisLabel="PreviousBezel") {
		RndmBezel := RndmBezel - 1
		if (RndmBezel < 1){
			RndmBezel := bezelImagesList.MaxIndex()
		}
	}
	;fade out
	startTime := A_TickCount
	Loop {
		t := if ((TimeElapsed := A_TickCount-startTime) < bezelChangeDur) ? (255*(1-(timeElapsed/bezelChangeDur))) : 0
		If bezelOverlayFile
			{
			if (bezelMode = "MultiScreens") {
				Gdip_GraphicsClear(Bezel_G2)
				loop, %bezelNumberOfScreens%
					Gdip_DrawImage(Bezel_G2, bezelOverlayBitmap, bezelScreen%A_Index%X1, bezelScreen%A_Index%Y1,bezelScreen%A_Index%W,bezelScreen%A_Index%H)     		
				UpdateLayeredWindow(Bezel_hwnd2, Bezel_hdc2,0,0, A_ScreenWidth, A_ScreenHeight,t)
			} else {
				Gdip_GraphicsClear(Bezel_G2)
				Gdip_DrawImage(Bezel_G2, bezelOverlayBitmap, 0, 0,bezelScreenWidth,bezelScreenHeight)
				UpdateLayeredWindow(Bezel_hwnd2, Bezel_hdc2,bezelScreenX,bezelScreenY, bezelScreenWidth, bezelScreenHeight,t)	
			}
		}
		Gdip_GraphicsClear(Bezel_G3)
		if (bezelImageFile = "fakeFullScreenBezel"){
			Gdip_DrawImage(Bezel_G3, bezelBitmap, bezelImageX, bezelImageY,bezelImageW,bezelImageH)
			UpdateLayeredWindow(Bezel_hwnd3, Bezel_hdc3,0,0, A_ScreenWidth, A_ScreenHeight,t)
		}
		WinSet, Transparent, %t%, ahk_id %emulatorID%
		If (t <= 0)
			Break
	}
	prevbezelImageW := origbezelImageW
	prevbezelImageH := origbezelImageH
	prevbezelOrigIniScreenX1 := bezelOrigIniScreenX1
	prevbezelOrigIniScreenY1 := bezelOrigIniScreenY1
	prevbezelOrigIniScreenX2 := bezelOrigIniScreenX2
	prevbezelOrigIniScreenY2 := bezelOrigIniScreenY2		
	bezelImageFile := bezelImagesList[RndmBezel]	
	if (bezelImageFile = "fakeFullScreenBezel"){
		origbezelImageW := A_ScreenWidth
		origbezelImageH := A_ScreenHeight
		bezelOrigIniScreenX1 := 0
		bezelOrigIniScreenY1 := 0
		bezelOrigIniScreenX2 := A_ScreenWidth
		bezelOrigIniScreenY2 := A_ScreenHeight
	} else {
		bezelBitmap := Gdip_CreateBitmapFromFile(bezelImageFile)
		Gdip_GetImageDimensions(bezelBitmap, origbezelImageW, origbezelImageH)
		ReadBezelIniFile()
	}
	WinActivate, ahk_id %emulatorID%
	Gdip_GraphicsClear(Bezel_G2)
	Gdip_GraphicsClear(Bezel_G3)
	if ((prevbezelImageW=origbezelImageW) and (prevbezelImageH = origbezelImageH) and (prevbezelOrigIniScreenX1 = bezelOrigIniScreenX1) and (prevbezelOrigIniScreenY1 = bezelOrigIniScreenY1) and (prevbezelOrigIniScreenX2 = bezelOrigIniScreenX2) and (prevbezelOrigIniScreenY2 = bezelOrigIniScreenY2) )	{ ;just replace bezel image
		if !(bezelImageFile = "fakeFullScreenBezel")
			Gdip_DrawImage(Bezel_G3, bezelBitmap, bezelImageX, bezelImageY,bezelImageW,bezelImageH)        
		;Drawing Overlay Image above screen
		If bezelOverlayFile
			if (bezelMode = "MultiScreens")
				Gdip_DrawImage(Bezel_G2, bezelOverlayBitmap, bezelScreen%A_Index%X1, bezelScreen%A_Index%Y1,bezelScreen%A_Index%W,bezelScreen%A_Index%H)     		
			else
				Gdip_DrawImage(Bezel_G2, bezelOverlayBitmap, 0, 0,bezelScreenWidth,bezelScreenHeight)
	} else { ; recalculate everything bezel related
		bezelImageW := origbezelImageW 
		bezelImageH := origbezelImageH 
		bezelScreenX1 := bezelOrigIniScreenX1
		bezelScreenY1 := bezelOrigIniScreenY1
		bezelScreenX2 := bezelOrigIniScreenX2
		bezelScreenY2 := bezelOrigIniScreenY2
		ToggleMenu(emulatorID)
		if (bezelMode = "Normal")
			BezelCoordinates("Normal")			
		BezelDraw()
	}
	;fade in
	startTime := A_TickCount
	Loop {
		t := if ((TimeElapsed := A_TickCount-startTime) < bezelChangeDur) ? (255*(timeElapsed/bezelChangeDur)) : 255
		If bezelOverlayFile
			{
			if (bezelMode = "MultiScreens") {
				Gdip_GraphicsClear(Bezel_G2)
				loop, %bezelNumberOfScreens%
					Gdip_DrawImage(Bezel_G2, bezelOverlayBitmap, bezelScreen%A_Index%X1, bezelScreen%A_Index%Y1,bezelScreen%A_Index%W,bezelScreen%A_Index%H)     		
					UpdateLayeredWindow(Bezel_hwnd2, Bezel_hdc2,0,0, A_ScreenWidth, A_ScreenHeight,t)
			} else {
				Gdip_GraphicsClear(Bezel_G2)
				Gdip_DrawImage(Bezel_G2, bezelOverlayBitmap, 0, 0,bezelScreenWidth,bezelScreenHeight)
				UpdateLayeredWindow(Bezel_hwnd2, Bezel_hdc2,bezelScreenX,bezelScreenY, bezelScreenWidth, bezelScreenHeight,t)	
			}
		}
		Gdip_GraphicsClear(Bezel_G3)
		if !(bezelImageFile = "fakeFullScreenBezel")
			Gdip_DrawImage(Bezel_G3, bezelBitmap, bezelImageX, bezelImageY,bezelImageW,bezelImageH)  
		UpdateLayeredWindow(Bezel_hwnd3, Bezel_hdc3,0,0, A_ScreenWidth, A_ScreenHeight,t)
		WinSet, Transparent, %t%, ahk_id %emulatorID%
		If (t >= 255)
			Break
	}		
}	
return
  ;Instruction Cards Code
toogleICVisibility:
	if ICVisibilityOn
		{
		gosub, DisableBezelKeys
		if ICRightMenuDraw 
			gosub, DisableICRightMenuKeys
		if ICLeftMenuDraw
			gosub, DisableICLeftMenuKeys
		XHotKeywrapper(toogleICVisibilityKey,"toogleICVisibility", "ON")
		startTime := A_TickCount
		Loop {
			t := if ((TimeElapsed := A_TickCount-startTime) < ICChangeDur) ? ((1-(timeElapsed/ICChangeDur))) : 0
			Alt_UpdateLayeredWindow(Bezel_hwnd4, Bezel_hdc4,0,0, baseScreenWidth, baseScreenHeight, round(255*t))
			If (t <= 0){
				Alt_UpdateLayeredWindow(Bezel_hwnd4, Bezel_hdc4,0,0, baseScreenWidth, baseScreenHeight,  0)
				Break
			}
		}
		ICVisibilityOn := false
		} else {
		gosub, EnableBezelKeys
		if ICRightMenuDraw 
			gosub, EnableICRightMenuKeys
		if ICLeftMenuDraw
			gosub, EnableICLeftMenuKeys
		startTime := A_TickCount
		Loop {
			t := if ((TimeElapsed := A_TickCount-startTime) < ICChangeDur) ? ((timeElapsed/ICChangeDur)) : 1
			Alt_UpdateLayeredWindow(Bezel_hwnd4, Bezel_hdc4,0,0, baseScreenWidth, baseScreenHeight, round(255*t))
			If (t >= 1){
				Alt_UpdateLayeredWindow(Bezel_hwnd4, Bezel_hdc4,0,0, baseScreenWidth, baseScreenHeight)
				Break
			}
		}
		ICVisibilityOn := true
	}
return
  nextIC1:
nextIC2:
nextIC3:
nextIC4:
nextIC5:
nextIC6:
nextIC7:
nextIC8:
previousIC1:
previousIC2:
previousIC3:
previousIC4:
previousIC5:
previousIC6:
previousIC7:
previousIC8:
	if %ICRandomSlideShowTimer%
		{
		SetTimer, randomICChange, off
		ICRandomSlideShowTimer := 0
		Return
	}
	StringTrimRight, currentICChange, A_ThisLabel, 1
	StringRight, currentICChangeKeyPressed, A_ThisLabel, 1
	activeIC := 0
	ICindex := 0
	loop, 8
		{
		if bezelICArray[a_index,1,1]
			ICindex++
		if (ICindex = currentICChangeKeyPressed)
			{
			activeIC := a_index
			break
		}
	}
	if (currentICChange="nextIC"){
		gosub, nextIC		
	} else {
		gosub, previousIC		
	}
return
 nextIC:
previousIC:
	if %ICRandomSlideShowTimer%
		{
		SetTimer, randomICChange, off
		ICRandomSlideShowTimer := 0
		Return
	}
	prevSelectedICimage[activeIC] := selectedICimage[activeIC]
	if (A_ThisLabel="nextIC") {
		selectedICimage[activeIC] := selectedICimage[activeIC] + 1
		if (selectedICimage[activeIC] > maxICimage[activeIC]){
			selectedICimage[activeIC] := 0
		}
	} else {
		selectedICimage[activeIC] := selectedICimage[activeIC] - 1
		if (selectedICimage[activeIC] < 0){
			selectedICimage[activeIC] := maxICimage[activeIC]
		}
	}
	DrawIC()
return
  changeActiveIC:
	if %ICRandomSlideShowTimer%
		{
		SetTimer, randomICChange, off
		ICRandomSlideShowTimer := 0
		Return
	}
	loop, 8 
		{
		activeIC++
		if (activeIC > 8)
		activeIC := 1
		if bezelICArray[activeIC,1,1] 
			break
	}
	if selectedICimage[activeIC]
		{
		;grow effect
		GrowSize := 1
		While GrowSize <= 10 {
			Gdip_GraphicsClear(Bezel_G4)
			loop, 8
				{
				if (a_index = activeIC) {
					ICposition(a_index,selectedICimage[a_index])
					Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,selectedICimage[a_index],2], ICPositionArray[1]-GrowSize, ICPositionArray[2]-GrowSize, bezelICArray[a_index,selectedICimage[a_index],3]+2*GrowSize, bezelICArray[a_index,selectedICimage[a_index],4]+2*GrowSize)
				} else {
					if bezelICArray[a_index,selectedICimage[a_index],1] 
						{
						ICposition(a_index,selectedICimage[a_index])
						Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,selectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,selectedICimage[a_index],3], bezelICArray[a_index,selectedICimage[a_index],4])    
					}
				}
			}
			Alt_UpdateLayeredWindow(Bezel_hwnd4, Bezel_hdc4,0,0, baseScreenWidth, baseScreenHeight)
			GrowSize++
		}
		;reset
		Gdip_GraphicsClear(Bezel_G4)
		loop, 8
			{
			if bezelICArray[a_index,selectedICimage[a_index],1] 
				{
				ICposition(a_index,selectedICimage[a_index])
				Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,selectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,selectedICimage[a_index],3], bezelICArray[a_index,selectedICimage[a_index],4])
			}
		}
		Alt_UpdateLayeredWindow(Bezel_hwnd4, Bezel_hdc4,0,0, baseScreenWidth, baseScreenHeight)
	}
return
  DrawIC(){
	Global 
	if (animationIC="none"){
		Gdip_GraphicsClear(Bezel_G4)
		if changeICSound
			SoundPlay, %changeICSound%
		loop, 8
			{
			if bezelICArray[a_index,selectedICimage[a_index],1]
				{
				ICposition(a_index,selectedICimage[a_index])
				Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,selectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,selectedICimage[a_index],3], bezelICArray[a_index,selectedICimage[a_index],4])
			}
		}
		Alt_UpdateLayeredWindow(Bezel_hwnd4, Bezel_hdc4,0,0, baseScreenWidth, baseScreenHeight)
	} else if (animationIC="fade"){ 
		;fade out
		if prevSelectedICimage[activeIC]
			{
			if fadeOutICSound
				SoundPlay, %fadeOutICSound%
			startTime := A_TickCount
			Loop {
				Gdip_GraphicsClear(Bezel_G4)
				t := if ((TimeElapsed := A_TickCount-startTime) < ICChangeDur) ? ((1-(timeElapsed/ICChangeDur))) : 0
				loop, 8
					{
					if (activeIC = a_index) {
						ICposition(a_index,prevselectedICimage[a_index])
						Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,prevselectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,prevselectedICimage[a_index],3], bezelICArray[a_index,prevselectedICimage[a_index],4],"","","","",t)   
					} else {
						if bezelICArray[a_index,selectedICimage[a_index],1]
							{
							ICposition(a_index,selectedICimage[a_index])
							Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,selectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,selectedICimage[a_index],3], bezelICArray[a_index,selectedICimage[a_index],4])
						}
					}
				}
				Alt_UpdateLayeredWindow(Bezel_hwnd4, Bezel_hdc4,0,0, baseScreenWidth, baseScreenHeight)
				If (t <= 0)
					Break
			}
		}	
		;fade in
		if fadeInICSound
				SoundPlay, %fadeInICSound%
		startTime := A_TickCount
		Loop {
			Gdip_GraphicsClear(Bezel_G4)
			t := if ((TimeElapsed := A_TickCount-startTime) < ICChangeDur) ? ((timeElapsed/ICChangeDur)) : 1
			loop, 8
				{
				if (activeIC = a_index) {
					ICposition(a_index,selectedICimage[a_index])
					Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,selectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,selectedICimage[a_index],3], bezelICArray[a_index,selectedICimage[a_index],4],"","","","",t) 
				} else {
					if bezelICArray[a_index,selectedICimage[a_index],1]
						{
						ICposition(a_index,selectedICimage[a_index])
						Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,selectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,selectedICimage[a_index],3], bezelICArray[a_index,selectedICimage[a_index],4])
					}
				}
			}
			Alt_UpdateLayeredWindow(Bezel_hwnd4, Bezel_hdc4,0,0, baseScreenWidth, baseScreenHeight)
			If (t >= 1)
				Break
		}			
	} else if (animationIC="slideOutandIn"){
		; slide out
		if prevSelectedICimage[activeIC]
			{
			if slideOutICSound
				SoundPlay, %slideOutICSound%
			startTime := A_TickCount
			Loop {
				Gdip_GraphicsClear(Bezel_G4)
				t := if ((TimeElapsed := A_TickCount-startTime) < ICChangeDur) ? ((timeElapsed/ICChangeDur)) : 1
				loop, 8
					{
					if (activeIC = a_index) {
						ICposition(a_index,prevselectedICimage[a_index],t)
						Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,prevselectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,prevselectedICimage[a_index],3], bezelICArray[a_index,prevselectedICimage[a_index],4])
					} else {
						if bezelICArray[a_index,selectedICimage[a_index],1]
							{
							ICposition(a_index,selectedICimage[a_index])
							Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,selectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,selectedICimage[a_index],3], bezelICArray[a_index,selectedICimage[a_index],4])
						}						
					}
				}
				Alt_UpdateLayeredWindow(Bezel_hwnd4, Bezel_hdc4,0,0, baseScreenWidth, baseScreenHeight)
				If (t >= 1)
					Break
			}
		}
		; slide in
		if slideInICSound
			SoundPlay, %slideInICSound%
		startTime := A_TickCount
		Loop {
			Gdip_GraphicsClear(Bezel_G4)
			t := if ((TimeElapsed := A_TickCount-startTime) < ICChangeDur) ? ((1-(timeElapsed/ICChangeDur))) : 0
			loop, 8
				{
				if (a_index = activeIC) {
					ICposition(a_index,selectedICimage[a_index],t)
					Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,selectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,selectedICimage[a_index],3], bezelICArray[a_index,selectedICimage[a_index],4])
				} else {
					if bezelICArray[a_index,selectedICimage[a_index],1]
						{
						ICposition(a_index,selectedICimage[a_index])
						Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,selectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,selectedICimage[a_index],3], bezelICArray[a_index,selectedICimage[a_index],4])
					}						
				}
			}
			Alt_UpdateLayeredWindow(Bezel_hwnd4, Bezel_hdc4,0,0, baseScreenWidth, baseScreenHeight)
			If (t <= 0)
				Break
		}
	} else if (animationIC="slideIn"){
		; slide in
		if slideInICSound
			SoundPlay, %slideInICSound%
		startTime := A_TickCount
		Loop {
			Gdip_GraphicsClear(Bezel_G4)
			t := if ((TimeElapsed := A_TickCount-startTime) < ICChangeDur) ? ((1-(timeElapsed/ICChangeDur))) : 0
			loop, 8
				{
				if (a_index = activeIC) {
					ICposition(a_index,selectedICimage[a_index],t)
					Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,selectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,selectedICimage[a_index],3], bezelICArray[a_index,selectedICimage[a_index],4])
				} else {
					if bezelICArray[a_index,selectedICimage[a_index],1]
						{
						ICposition(a_index,selectedICimage[a_index])
						Gdip_Alt_DrawImage(Bezel_G4, bezelICArray[a_index,selectedICimage[a_index],2], ICPositionArray[1], ICPositionArray[2], bezelICArray[a_index,selectedICimage[a_index],3], bezelICArray[a_index,selectedICimage[a_index],4])
					}						
				}
			}
			Alt_UpdateLayeredWindow(Bezel_hwnd4, Bezel_hdc4,0,0, baseScreenWidth, baseScreenHeight)
			If (t <= 0)
				Break
		}	
	}
return
}
 ICposition(ICSelectedIndex,ICImageSelectedIndex, step = "0"){
	Global
	if not ICPositionArray
		ICPositionArray := []
	if (positionICArray%ICSelectedIndex% = "topLeft") {
		ICPositionArray[1] := round( 0 - step*bezelICArray[ICSelectedIndex,ICImageSelectedIndex,3] )
		ICPositionArray[2] := 0	
	} else if (positionICArray%ICSelectedIndex% = "topRight") {
		ICPositionArray[1] := round( baseScreenWidth - bezelICArray[ICSelectedIndex,ICImageSelectedIndex,3] + step*bezelICArray[ICSelectedIndex,ICImageSelectedIndex,3] )
		ICPositionArray[2] := 0		
	} else if (positionICArray%ICSelectedIndex% = "bottomLeft") {
		ICPositionArray[1] := round( 0 - step*bezelICArray[ICSelectedIndex,ICImageSelectedIndex,3] )
		ICPositionArray[2] := round( baseScreenHeight - bezelICArray[ICSelectedIndex,ICImageSelectedIndex,4] ) 			
	} else if (positionICArray%ICSelectedIndex% = "bottomRight") {
		ICPositionArray[1] := round( baseScreenWidth - bezelICArray[ICSelectedIndex,ICImageSelectedIndex,3] + step*bezelICArray[ICSelectedIndex,ICImageSelectedIndex,3] )
		ICPositionArray[2] := round( baseScreenHeight - bezelICArray[ICSelectedIndex,ICImageSelectedIndex,4] )			
	} else if (positionICArray%ICSelectedIndex% = "topCenter") {
		ICPositionArray[1] := round( baseScreenWidth//2 - bezelICArray[ICSelectedIndex,ICImageSelectedIndex,3]//2 )
		ICPositionArray[2] := round( 0 - step*bezelICArray[ICSelectedIndex,ICImageSelectedIndex,4] )
	} else if (positionICArray%ICSelectedIndex% = "leftCenter") {
		ICPositionArray[1] := round( 0 - step*bezelICArray[ICSelectedIndex,ICImageSelectedIndex,3] )
		ICPositionArray[2] := round( ( baseScreenHeight - bezelICArray[ICSelectedIndex,ICImageSelectedIndex,4] ) // 2 )								
	} else if (positionICArray%ICSelectedIndex% = "rightCenter") {
		ICPositionArray[1] := round( ( baseScreenWidth - bezelICArray[ICSelectedIndex,ICImageSelectedIndex,3] ) + step*bezelICArray[ICSelectedIndex,ICImageSelectedIndex,3] )
		ICPositionArray[2] := round( ( baseScreenHeight - bezelICArray[ICSelectedIndex,ICImageSelectedIndex,4] ) // 2 )											
	} else { ; bottomCenter
		ICPositionArray[1] := round( ( baseScreenWidth - bezelICArray[ICSelectedIndex,ICImageSelectedIndex,3] ) // 2 )
		ICPositionArray[2] := round( baseScreenHeight - bezelICArray[ICSelectedIndex,ICImageSelectedIndex,4] + step*bezelICArray[ICSelectedIndex,ICImageSelectedIndex,4] )			
	}
return  ICPositionArray
}
  ;IC Menu code
 rightICMenu:
leftICMenu:
	if %ICRandomSlideShowTimer%
		{
		SetTimer, randomICChange, off
		ICRandomSlideShowTimer := 0
	}
	if (A_ThisLabel="rightICMenu") {
		if ICRightMenuDraw
			{
			gosub, DisableICRightMenuKeys
			SetTimer, UpdatecurrentRightICScrollingText, off
			Gdip_GraphicsClear(Bezel_G7)
			Gdip_GraphicsClear(Bezel_G8)
			Alt_UpdateLayeredWindow(Bezel_hwnd7, Bezel_hdc7, baseScreenWidth-bezelICRightMenuBitmapW, (baseScreenHeight-bezelICRightMenuBitmapH)//2, bezelICRightMenuBitmapW, bezelICRightMenuBitmapH)
			Alt_UpdateLayeredWindow(Bezel_hwnd8, Bezel_hdc8, baseScreenWidth-ICMenuListX-ICMenuListWidth, (baseScreenHeight-bezelICLeftMenuBitmapH)//2+ICMenuListY+ICMenuListHeight//2-ICMenuListTextSize//2, ICMenuListWidth, ICMenuListTextSize)				
			ICRightMenuDraw := false
		} else {
			DrawICMenu("right")
			gosub, EnableICRightMenuKeys
			ICRightMenuDraw := true
		}
    } else {
		if ICLeftMenuDraw
			{
			gosub, DisableICLeftMenuKeys
			SetTimer, UpdatecurrentLeftICScrollingText, off
			Gdip_GraphicsClear(Bezel_G5)
			Gdip_GraphicsClear(Bezel_G6)
			Alt_UpdateLayeredWindow(Bezel_hwnd5, Bezel_hdc5, 0, (baseScreenHeight-bezelICLeftMenuBitmapH)//2, bezelICLeftMenuBitmapW, bezelICLeftMenuBitmapH)
			Alt_UpdateLayeredWindow(Bezel_hwnd6, Bezel_hdc6, ICMenuListX, (baseScreenHeight-bezelICLeftMenuBitmapH)//2+ICMenuListY+ICMenuListHeight//2-ICMenuListTextSize//2, ICMenuListWidth, ICMenuListTextSize)
			ICLeftMenuDraw := false
		} else {
			DrawICMenu("left")
			gosub, EnableICLeftMenuKeys
			ICLeftMenuDraw := true
		}
	}
return
 rightICMenuUp:
rightICMenuDown:
rightICMenuLeft:
rightICMenuRight:
leftICMenuUp:
leftICMenuDown:
leftICMenuLeft:
leftICMenuRight:
	if InStr(A_ThisLabel,"MenuUp"){
		if InStr(A_ThisLabel,"rightIC"){
				selectedRightMenuItem[rightMenuActiveIC] := selectedRightMenuItem[rightMenuActiveIC] + 1
			if (selectedRightMenuItem[rightMenuActiveIC] > maxICimage[rightMenuActiveIC])
				selectedRightMenuItem[rightMenuActiveIC] := 0	
		} else { ;left
				selectedLeftMenuItem[leftMenuActiveIC] := selectedLeftMenuItem[leftMenuActiveIC] + 1
			if (selectedLeftMenuItem[leftMenuActiveIC] > maxICimage[leftMenuActiveIC])
				selectedLeftMenuItem[leftMenuActiveIC] := 0			
		}
	} else if InStr(A_ThisLabel,"MenuDown"){
		if InStr(A_ThisLabel,"rightIC"){
			selectedRightMenuItem[rightMenuActiveIC] := selectedRightMenuItem[rightMenuActiveIC] - 1
			if (selectedRightMenuItem[rightMenuActiveIC] < 0)
				selectedRightMenuItem[rightMenuActiveIC] := maxICimage[rightMenuActiveIC]	
		} else { ;left
			selectedLeftMenuItem[leftMenuActiveIC] := selectedLeftMenuItem[leftMenuActiveIC] - 1
			if (selectedLeftMenuItem[leftMenuActiveIC] < 0)
				selectedLeftMenuItem[leftMenuActiveIC] := maxICimage[leftMenuActiveIC]			
		}		
	} else if InStr(A_ThisLabel,"MenuLeft"){ ;left key
		if InStr(A_ThisLabel,"rightIC"){ ;right menu
			loop, 8
				{
				rightMenuActiveIC--
				if (rightMenuActiveIC < 1)
					rightMenuActiveIC := 8
				if bezelICArray[rightMenuActiveIC,1,1] 
					if positionICArray%rightMenuActiveIC% in %rightMenuPositionsIC% 
						break
			}
		} else { ;left menu key
			loop, 8
				{
				leftMenuActiveIC--
				if (leftMenuActiveIC < 1)
					leftMenuActiveIC := 8
				if bezelICArray[leftMenuActiveIC,1,1] 
					if positionICArray%leftMenuActiveIC% in %leftMenuPositionsIC% 
						break
			}		
		}
	} else { ;Right key
		if InStr(A_ThisLabel,"rightIC"){ ;right menu
			loop, 8 
				{
				rightMenuActiveIC++
				if (rightMenuActiveIC > 8)
					rightMenuActiveIC := 1
				if bezelICArray[rightMenuActiveIC,1,1] 
					if positionICArray%rightMenuActiveIC% in %rightMenuPositionsIC% 
						break
			}
		} else { ;left menu key
			loop, 8
				{
				leftMenuActiveIC++
				if (leftMenuActiveIC > 8)
					leftMenuActiveIC := 1
				if bezelICArray[leftMenuActiveIC,1,1] 
					if positionICArray%leftMenuActiveIC% in %leftMenuPositionsIC% 
						break
			}		
		}
	}
	if InStr(A_ThisLabel,"rightIC")
		DrawICMenu("right")
	else ; left
		DrawICMenu("left")
Return
  rightICMenuSelect:
leftICMenuSelect:
	if InStr(A_ThisLabel,"rightIC"){
		activeIC := rightMenuActiveIC
		selectedICimage[activeIC] := selectedRightMenuItem[rightMenuActiveIC]
		DrawIC()
		DrawICMenu("right")
	} else { ; left
		activeIC := leftMenuActiveIC
		selectedICimage[activeIC] := selectedLeftMenuItem[leftMenuActiveIC]
		DrawIC()
		DrawICMenu("left")
	}
Return
  DrawICMenu(side){
	Global 
	;Initializing parameters
	ICMenuListTextFont := IC%side%MenuListTextFont 
	ICMenuListTextAlignment := IC%side%MenuListTextAlignment
	ICMenuListTextSize := IC%side%MenuListTextSize 
	ICMenuListTextColor := IC%side%MenuListTextColor
	ICMenuListDisabledTextColor := IC%side%MenuListDisabledTextColor
	ICMenuListCurrentTextColor := IC%side%MenuListCurrentTextColor 
	ICMenuListDisabledTextSize   := IC%side%MenuListDisabledTextSize 
	ICMenuListItems := IC%side%MenuListItems
	ICMenuListX := IC%side%MenuListX
	ICMenuListY := IC%side%MenuListY
	ICMenuListWidth := IC%side%MenuListWidth 
	ICMenuListHeight := IC%side%MenuListHeight
	ICMenuPositionTextFont := IC%side%MenuPositionTextFont
	ICMenuPositionTextSize := IC%side%MenuPositionTextSize 
	ICMenuPositionTextColor := IC%side%MenuPositionTextColor
	ICMenuPositionTextX := IC%side%MenuPositionTextX
	ICMenuPositionTextY := IC%side%MenuPositionTextY
	ICMenuPositionTextWidth := IC%side%MenuPositionTextWidth
	ICMenuPositionTextHeight := IC%side%MenuPositionTextHeight
	ICMenuPositionTextAlignment := IC%side%MenuPositionTextAlignment
	VDistBtwICNames := ICMenuListHeight//(ICMenuListItems+1)
	menuActiveIC := %side%MenuActiveIC
	menuSelectedItem[menuActiveIC] := if selected%side%MenuItem[menuActiveIC] ? selected%side%MenuItem[menuActiveIC] : 0 
	;Drawing Menu Image
	if (side="left"){
		Gdip_GraphicsClear(Bezel_G5)
		Gdip_GraphicsClear(Bezel_G6)
		Gdip_Alt_DrawImage(Bezel_G5, bezelICLeftMenuBitmap, 0, 0, bezelICLeftMenuBitmapW, bezelICLeftMenuBitmapH)
		Gdip_Alt_TextToGraphics(Bezel_G5, positionICArray%leftMenuActiveIC%, "x" . ICMenuPositionTextX . " y" . ICMenuPositionTextY . " " . ICMenuPositionTextAlignment . " c" . ICMenuPositionTextColor . " r4 s" . ICMenuPositionTextSize . " normal", ICMenuPositionTextFont, ICMenuPositionTextWidth, ICMenuPositionTextHeight)
	} else {
		Gdip_GraphicsClear(Bezel_G7)
		Gdip_GraphicsClear(Bezel_G8)
		Gdip_Alt_DrawImage(Bezel_G7, bezelICRightMenuBitmap, 0, 0, bezelICRightMenuBitmapW, bezelICRightMenuBitmapH)
		Gdip_Alt_TextToGraphics(Bezel_G7, positionICArray%rightMenuActiveIC%, "x" . ICMenuPositionTextX . " y" . ICMenuPositionTextY . " " . ICMenuPositionTextAlignment . " c" . ICMenuPositionTextColor . " r4 s" . ICMenuPositionTextSize . " normal", ICMenuPositionTextFont, ICMenuPositionTextWidth, ICMenuPositionTextHeight)
	}
	;Drawing IC List
	bottomtext := menuSelectedItem[menuActiveIC]
	topText := menuSelectedItem[menuActiveIC]
	Loop, % ICMenuListItems//2+1
		{
		If (a_index=1)
			{
			currentSelectedColor%side% := if (menuSelectedItem[menuActiveIC] = selectedICimage[menuActiveIC]) ? ICMenuListCurrentTextColor : ICMenuListTextColor
			currentSelectedLabel%side% := bezelICArray[menuActiveIC,menuSelectedItem[menuActiveIC],5]
			MeasureCurrentSelectedIC := MeasureText(currentSelectedLabel%side%, "Left r4 s" . ICMenuListTextSize . " bold",ICMenuListTextFont)
			if (MeasureCurrentSelectedIC <= ICMenuListWidth) {
				TextOptions := "x0 y0 " . ICMenuListTextAlignment . " c" . currentSelectedColor%side% . " r4 s" . ICMenuListTextSize . " bold"
				if (side="left") {
					SetTimer, UpdatecurrentLeftICScrollingText, off
					Gdip_GraphicsClear(Bezel_G6)
					Gdip_Alt_TextToGraphics(Bezel_G6, currentSelectedLabel%side%, TextOptions, ICMenuListTextFont, ICMenuListWidth, ICMenuListTextSize)
				} else {
					SetTimer, UpdatecurrentRightICScrollingText, off
					Gdip_GraphicsClear(Bezel_G8)
					Gdip_Alt_TextToGraphics(Bezel_G8, currentSelectedLabel%side%, TextOptions, ICMenuListTextFont, ICMenuListWidth, ICMenuListTextSize)
				}
			} else {	
				if (side="left"){
					initLeftPixels := 0
					xLeft := 0
					SetTimer, UpdatecurrentLeftICScrollingText, 20
				} else {
					initRightPixels := 0
					xRight := 0
					SetTimer, UpdatecurrentRightICScrollingText, 20
				}
			}
		} Else {		
			bottomtext++
			bottomtext := If (bottomtext > maxICimage[menuActiveIC]) ? 0 : bottomtext
			currentColor := if (bottomtext = selectedICimage[menuActiveIC]) ? ICMenuListCurrentTextColor : ICMenuListDisabledTextColor
			currentLabel := bezelICArray[menuActiveIC,bottomtext,5]
			TextOptions := "x" . ICMenuListX . " y" . ICMenuListY+ICMenuListHeight//2-(a_index-1)*(VDistBtwICNames)-ICMenuListDisabledTextSize//2 . " " . ICMenuListTextAlignment . " c" . currentColor . " r4 s" . ICMenuListDisabledTextSize . " normal"
			if (side="left"){
				Gdip_Alt_TextToGraphics(Bezel_G5, currentLabel, TextOptions, ICMenuListTextFont, ICMenuListWidth, ICMenuListDisabledTextSize)
			} else {
				Gdip_Alt_TextToGraphics(Bezel_G7, currentLabel, TextOptions, ICMenuListTextFont, ICMenuListWidth, ICMenuListDisabledTextSize)
			}
			topText--
			topText := If (topText < 0) ? maxICimage[menuActiveIC] : topText
			currentColor := if (topText = selectedICimage[menuActiveIC]) ? ICMenuListCurrentTextColor : ICMenuListDisabledTextColor
			currentLabel := bezelICArray[menuActiveIC,topText,5]
			TextOptions := "x" . ICMenuListX . " y" . ICMenuListY+ICMenuListHeight//2+(a_index-1)*(VDistBtwICNames)-ICMenuListDisabledTextSize//2 . " " . ICMenuListTextAlignment . " c" . currentColor . " r4 s" . ICMenuListDisabledTextSize . " normal"
			if (side="left"){
				Gdip_Alt_TextToGraphics(Bezel_G5, currentLabel, TextOptions, ICMenuListTextFont, ICMenuListWidth, ICMenuListDisabledTextSize)
			} else {
				Gdip_Alt_TextToGraphics(Bezel_G7, currentLabel, TextOptions, ICMenuListTextFont, ICMenuListWidth, ICMenuListDisabledTextSize)
			}
		}
	}
	if (side="left"){
		Alt_UpdateLayeredWindow(Bezel_hwnd5, Bezel_hdc5, 0, (baseScreenHeight-bezelICLeftMenuBitmapH)//2, bezelICLeftMenuBitmapW, bezelICLeftMenuBitmapH)
		Alt_UpdateLayeredWindow(Bezel_hwnd6, Bezel_hdc6, ICMenuListX, (baseScreenHeight-bezelICLeftMenuBitmapH)//2+ICMenuListY+ICMenuListHeight//2-(ICMenuListTextSize)//2, ICMenuListWidth, ICMenuListTextSize)
	} else {
		Alt_UpdateLayeredWindow(Bezel_hwnd7, Bezel_hdc7, baseScreenWidth-bezelICRightMenuBitmapW, (baseScreenHeight-bezelICRightMenuBitmapH)//2, bezelICRightMenuBitmapW, bezelICRightMenuBitmapH)
		Alt_UpdateLayeredWindow(Bezel_hwnd8, Bezel_hdc8, baseScreenWidth-bezelICRightMenuBitmapW+ICMenuListX, (baseScreenHeight-bezelICLeftMenuBitmapH)//2+ICMenuListY+ICMenuListHeight//2-(ICMenuListTextSize)//2, ICMenuListWidth, ICMenuListTextSize)				
	}		
Return	
}
 UpdatecurrentLeftICScrollingText: ;Updating scrolling IC name
    Options = y0 c%currentSelectedColorLeft% r4 s%ICMenuListTextSize% bold
	scrollingVelocity := 2
	xLeft := (-xLeft >= E3) ? initLeftPixels : xLeft-scrollingVelocity
	initLeftPixels := ICLeftMenuListWidth
    Gdip_GraphicsClear(Bezel_G6)
    E := Gdip_Alt_TextToGraphics(Bezel_G6, currentSelectedLabelLeft, "x" xLeft " " Options, ICMenuListTextFont, (xLeft < 0) ? ICLeftMenuListWidth-xLeft : ICLeftMenuListWidth, ICMenuListTextSize)
    StringSplit, E, E, |
	Alt_UpdateLayeredWindow(Bezel_hwnd6, Bezel_hdc6, ICMenuListX, (baseScreenHeight-bezelICLeftMenuBitmapH)//2+ICMenuListY+ICMenuListHeight//2-(ICMenuListTextSize)//2, ICMenuListWidth, ICMenuListTextSize)
return
 UpdatecurrentRightICScrollingText: ;Updating scrolling IC name
    Options = y0 c%currentSelectedColorRight% r4 s%ICMenuListTextSize% bold
	scrollingVelocity := 2
	xRight := (-xRight >= E3) ? initRightPixels : xRight-scrollingVelocity
	initRightPixels := ICRightMenuListWidth
    Gdip_GraphicsClear(Bezel_G8)
    E := Gdip_Alt_TextToGraphics(Bezel_G8, currentSelectedLabelRight, "x" xRight " " Options, ICMenuListTextFont, (xRight < 0) ? ICRightMenuListWidth-xRight : ICRightMenuListWidth, ICMenuListTextSize)
    StringSplit, E, E, |
	Alt_UpdateLayeredWindow(Bezel_hwnd8, Bezel_hdc8, baseScreenWidth-bezelICRightMenuBitmapW+ICMenuListX, (baseScreenHeight-bezelICLeftMenuBitmapH)//2+ICMenuListY+ICMenuListHeight//2-(ICMenuListTextSize)//2, ICMenuListWidth, ICMenuListTextSize)
Return
   randomICChange:
	loop, 8
		{
		if 	maxICimage[a_index]
			{
			activeIC := a_index
			Random, ICImage, 1, % maxICimage[activeIC]
			selectedICimage[activeIC] := ICImage
			DrawIC()
		}
	}
Return
  EnableBezelKeys:
	if bezelICPath
		{
		if toogleICVisibilityKey
			XHotKeywrapper(toogleICVisibilityKey,"toogleICVisibility", "ON")
		if nextICKey
			XHotKeywrapper(nextICKey,"nextIC", "ON")
		if previousICKey
			XHotKeywrapper(previousICKey,"previousIC", "ON")
		if changeActiveICKey
			XHotKeywrapper(changeActiveICKey,"changeActiveIC", "ON")
		loop, 8
			{
			if nextIC%a_index%Key
				XHotKeywrapper(nextIC%a_index%Key,"nextIC" . A_Index, "ON")
			if previousIC%a_index%Key
				XHotKeywrapper(previousIC%a_index%Key,"previousIC" . A_Index, "ON")
		}
		if leftICMenuKey
			XHotKeywrapper(leftICMenuKey,"leftICMenu", "ON")
		if rightICMenuKey
			XHotKeywrapper(rightICMenuKey,"rightICMenu", "ON")
	}		
	if (bezelImagesList.MaxIndex() > 1) {
		if nextBezelKey
			XHotKeywrapper(nextBezelKey,"nextBezel", "ON")
		if previousBezelKey
			XHotKeywrapper(previousBezelKey,"previousBezel", "ON")
	} 
    Log("Bezel Keys Enabled",5)
Return
  DisableBezelKeys:
	if bezelICPath
		{
		if toogleICVisibilityKey
			XHotKeywrapper(toogleICVisibilityKey,"toogleICVisibility", "OFF")
		if nextICKey
			XHotKeywrapper(nextICKey,"nextIC", "OFF")
		if previousICKey
			XHotKeywrapper(previousICKey,"previousIC", "OFF")
		if changeActiveICKey
			XHotKeywrapper(changeActiveICKey,"changeActiveIC", "OFF")
		loop, 8
			{
			if nextIC%a_index%Key
				XHotKeywrapper(nextIC%a_index%Key,"nextIC" . A_Index, "OFF")
			if previousIC%a_index%Key
				XHotKeywrapper(previousIC%a_index%Key,"previousIC" . A_Index, "OFF")
		}
		if leftICMenuKey
			XHotKeywrapper(leftICMenuKey,"leftICMenu", "OFF")
		if rightICMenuKey
			XHotKeywrapper(rightICMenuKey,"rightICMenu", "OFF")
	}		
	if (bezelImagesList.MaxIndex() > 1) {
		if nextBezelKey
			XHotKeywrapper(nextBezelKey,"nextBezel", "OFF")
		if previousBezelKey
			XHotKeywrapper(previousBezelKey,"previousBezel", "OFF")
	} 
    Log("Bezel Keys Disabled",5)
Return
 EnableICRightMenuKeys:
	XHotKeywrapper(navP2SelectKey,"rightICMenuSelect","ON") 
	XHotKeywrapper(navP2LeftKey,"rightICMenuLeft","ON")
	XHotKeywrapper(navP2RightKey,"rightICMenuRight","ON")
	XHotKeywrapper(navP2UpKey,"rightICMenuUp","ON")
	XHotKeywrapper(navP2DownKey,"rightICMenuDown","ON")
return
 DisableICRightMenuKeys:
	XHotKeywrapper(navP2SelectKey,"rightICMenuSelect","OFF") 
	XHotKeywrapper(navP2LeftKey,"rightICMenuLeft","OFF")
	XHotKeywrapper(navP2RightKey,"rightICMenuRight","OFF")
	XHotKeywrapper(navP2UpKey,"rightICMenuUp","OFF")
	XHotKeywrapper(navP2DownKey,"rightICMenuDown","OFF")
return
 EnableICLeftMenuKeys:
	XHotKeywrapper(navSelectKey,"leftICMenuSelect","ON") 
	XHotKeywrapper(navLeftKey,"leftICMenuLeft","ON")
	XHotKeywrapper(navRightKey,"leftICMenuRight","ON")
	XHotKeywrapper(navUpKey,"leftICMenuUp","ON")
	XHotKeywrapper(navDownKey,"leftICMenuDown","ON")
return
 DisableICLeftMenuKeys:
	XHotKeywrapper(navSelectKey,"leftICMenuSelect","OFF") 
	XHotKeywrapper(navLeftKey,"leftICMenuLeft","OFF")
	XHotKeywrapper(navRightKey,"leftICMenuRight","OFF")
	XHotKeywrapper(navUpKey,"leftICMenuUp","OFF")
	XHotKeywrapper(navDownKey,"leftICMenuDown","OFF")
return
  ExtraFixedResBezelGUI(){
	Global bezelEnabled, extraFixedRes_Bezel_hbm, extraFixedRes_Bezel_hdc, extraFixedRes_Bezel_hwnd, extraFixedRes_Bezel_G
	if (bezelEnabled = "true"){
		;Gui, extraFixedRes_Bezel_GUI: +OwnerBezel_GUI8 +Disabled -Caption +E0x80000 +OwnDialogs +LastFound +ToolWindow +AlwaysOnTop 
		Gui, extraFixedRes_Bezel_GUI: +Disabled -Caption +E0x80000 +OwnDialogs +LastFound +ToolWindow +AlwaysOnTop 
		Gui, extraFixedRes_Bezel_GUI: Margin,0,0
		Gui, extraFixedRes_Bezel_GUI: Show,, BezelLayer9
		extraFixedRes_Bezel_hwnd := WinExist()
		extraFixedRes_Bezel_hbm := CreateDIBSection(A_ScreenWidth, A_ScreenHeight)
		extraFixedRes_Bezel_hdc := CreateCompatibleDC()
		extraFixedRes_Bezel_obm := SelectObject(extraFixedRes_Bezel_hdc, extraFixedRes_Bezel_hbm)
		extraFixedRes_Bezel_G := Gdip_GraphicsFromhdc(extraFixedRes_Bezel_hdc)
		Gdip_SetSmoothingMode(extraFixedRes_Bezel_G, 4)
	}
}
  ExtraFixedResBezelDraw(extraFixedResScreenID, filePreffix="VMU", extraFixedResPosition="TopRight",extraFixedResBezelScreenWidth=80,extraFixedResBezelScreenHeight=60,extraFixedResBezelRightOffset=0,extraFixedResBezelLeftOffset=0,extraFixedResBezelTopOffset=0,extraFixedResBezelBottomOffset=0){
	Global bezelEnabled, bezelPath, extraFixedRes_Bezel_hbm, extraFixedRes_Bezel_hdc, extraFixedRes_Bezel_hwnd, extraFixedRes_Bezel_G, bezelFileExtensions
	if ((bezelEnabled = "true") and (bezelPath)){
		;Check for extraFixedRes bezel file:
		extraFixedResBezelPath := BezelFilesPath(filePreffix . " Bezel",bezelFileExtensions)
		If extraFixedResBezelPath 
			{	;Setting bezel aleatory choosed file
			extraFixedResbezelImagesList := []
			Loop, Parse, bezelFileExtensions,|
				Loop, % extraFixedResBezelPath . "\" . filePreffix . " Bezel*." . A_LoopField
					if !RegExMatch(A_LoopFileName, "i)\[[0-9]+S\]")
						extraFixedResBezelImagesList.Insert(A_LoopFileFullPath)
			Random, RndmextraFixedResBezel, 1, % extraFixedResBezelImagesList.MaxIndex()
			extraFixedResBezelImageFile := extraFixedResBezelImagesList[RndmextraFixedResBezel]
			SplitPath, extraFixedResBezelImageFile, extraFixedResBezelImageFileName, extraFixedResBezelImageDir,,extraFixedResBezelImageFileNameNoExt
			Log("Bezel - Loading extraFixedRes Bezel image: " . extraFixedResBezelImageFile,1)		
			;Setting overlay aleatory choosed file (only searches overlays at the bezel.png folder)
			If FileExist(extraFixedResBezelPath . "\" . filePreffix . " Overlay" . SubStr(extraFixedResBezelImageFileName,StrLen(filePreffix)+7)) {
				extraFixedResBezelOverlaysList := []
				extraFixedResBezelOverlaysList.Insert(extraFixedResBezelPath . "\" . filePreffix . " Overlay" . SubStr(extraFixedResBezelImageFileName,StrLen(filePreffix)+7))
				extraFixedResBezelOverlayFile := % extraFixedResBezelPath . "\" . filePreffix . " Overlay" . SubStr(extraFixedResBezelImageFileName,StrLen(filePreffix)+7)
				extraFixedResBezelOverlayBitmap := Gdip_CreateBitmapFromFile(extraFixedResBezelOverlayFile)
				Log("Bezel - Loading extraFixedRes Overlay image with the same name of the extraFixedRes bezel image: " . extraFixedResBezelOverlayFile,1)
			}
			;Read extraFixedRes Bezel ini coordinates
			extraFixedResBezelScreenX1 := IniReadCheck(extraFixedResBezelImageDir . "\" . extraFixedResBezelImageFileNameNoExt . ".ini", "General", "Bezel Screen Top Left X Coordinate", 0)
			extraFixedResBezelScreenY1 := IniReadCheck(extraFixedResBezelImageDir . "\" . extraFixedResBezelImageFileNameNoExt . ".ini", "General", "Bezel Screen Top Left Y Coordinate", 0)
			extraFixedResBezelScreenX2 := IniReadCheck(extraFixedResBezelImageDir . "\" . extraFixedResBezelImageFileNameNoExt . ".ini", "General", "Bezel Screen Bottom Right X Coordinate", 150)
			extraFixedResBezelScreenY2 := IniReadCheck(extraFixedResBezelImageDir . "\" . extraFixedResBezelImageFileNameNoExt . ".ini", "General", "Bezel Screen Bottom Right Y Coordinate", 100)
			; creating bitmap pointers
			extraFixedResBezelBitmap := Gdip_CreateBitmapFromFile(extraFixedResBezelImageFile)
			Gdip_GetImageDimensions(extraFixedResBezelBitmap, extraFixedResBezelImageW, extraFixedResBezelImageH)
			xScaleFactor := (extraFixedResBezelScreenWidth)/(extraFixedResBezelScreenX2-extraFixedResBezelScreenX1)
			yScaleFactor := (extraFixedResBezelScreenHeight)/(extraFixedResBezelScreenY2-extraFixedResBezelScreenY1)
			extraFixedResBezelImageW := Round(extraFixedResBezelImageW * xScaleFactor)
			extraFixedResBezelImageH := Round(extraFixedResBezelImageH * yScaleFactor) 
			if (extraFixedResPosition="TopRight")
				extraFixedResBezelImageX := A_ScreenWidth - extraFixedResBezelImageW , extraFixedResBezelImageY := 0
			else if (extraFixedResPosition="TopCenter")
				extraFixedResBezelImageX := (A_ScreenWidth - extraFixedResBezelImageW)//2 , extraFixedResBezelImageY := 0				
			else if (extraFixedResPosition="TopLeft") 
				extraFixedResBezelImageX := 0 , extraFixedResBezelImageY := 0	
			else if (extraFixedResPosition="LeftCenter")
				extraFixedResBezelImageX := 0 , extraFixedResBezelImageY := (A_ScreenHeight - extraFixedResBezelImageH)//2									
			else if (extraFixedResPosition="BottomRight")
				extraFixedResBezelImageX := A_ScreenWidth - extraFixedResBezelImageW , extraFixedResBezelImageY := A_ScreenHeight - extraFixedResBezelImageH	
			else if (extraFixedResPosition="BottomCenter")
				extraFixedResBezelImageX := (A_ScreenWidth - extraFixedResBezelImageW)//2 , extraFixedResBezelImageY := A_ScreenHeight - extraFixedResBezelImageH					
			else if (extraFixedResPosition="BottomLeft")
				extraFixedResBezelImageX := 0 , extraFixedResBezelImageY := A_ScreenHeight - extraFixedResBezelImageH					
			else ; Right Center
				extraFixedResBezelImageX := A_ScreenWidth - extraFixedResBezelImageW , extraFixedResBezelImageY := (A_ScreenHeight - extraFixedResBezelImageH)//2
			extraFixedResBezelScreenX := extraFixedResBezelImageX + Round(extraFixedResBezelScreenX1*xScaleFactor)
			extraFixedResBezelScreenY := extraFixedResBezelImageY + Round(extraFixedResBezelScreenY1*yScaleFactor) 
			; Applying offsets to correctly place the emulator if the emulator has extra window components
			extraFixedResBezelScreenX := if extraFixedResBezelLeftOffset ? extraFixedResBezelScreenX - extraFixedResBezelLeftOffset : extraFixedResBezelScreenX
			extraFixedResBezelScreenY := if extraFixedResBezelTopOffset ? extraFixedResBezelScreenY - extraFixedResBezelTopOffset : extraFixedResBezelScreenY
			; check if window moved (maximun 5 seconds)
			X:="" , Y:="" , timeout := A_TickCount
			sleep, 200
			loop
				{
				sleep, 50
				WinGetPos, X, Y, , , ahk_id %extraFixedResScreenID%
				if (X=extraFixedResBezelScreenX) and (Y=extraFixedResBezelScreenY) 
					break
				if(timeout < A_TickCount - 5000)
					break
				sleep, 50
				WinMove, ahk_id %extraFixedResScreenID%, , %extraFixedResBezelScreenX%, %extraFixedResBezelScreenY%
			}
			;Drawing extraFixedRes Bezel GUI
			Gdip_DrawImage(extraFixedRes_Bezel_G, extraFixedResBezelBitmap, extraFixedResBezelImageX, extraFixedResBezelImageY,extraFixedResBezelImageW,extraFixedResBezelImageH)        
			Log("Bezel - extraFixedRes Bezel Image Screen Position: left=" . extraFixedResBezelImageX . " top=" . extraFixedResBezelImageY . " right=" . (extraFixedResBezelImageX+extraFixedResBezelImageW) . " bottom=" . (extraFixedResBezelImageY+extraFixedResBezelImageH)  ,5)	
			;Drawing Overlay Image above screen
			If (extraFixedResBezelOverlayFile)
			{	Gdip_DrawImage(extraFixedRes_Bezel_G, extraFixedResBezelOverlayBitmap, extraFixedResBezelImageX+Round(extraFixedResBezelScreenX1*xScaleFactor), extraFixedResBezelImageY+Round(extraFixedResBezelScreenY1*yScaleFactor) ,extraFixedResBezelScreenWidth,extraFixedResBezelScreenHeight)   
				Log("Bezel - extraFixedRes Overlay Screen Position: left=" . extraFixedResBezelImageX+Round(extraFixedResBezelScreenX1*xScaleFactor) . " top=" . extraFixedResBezelImageY+Round(extraFixedResBezelScreenY1*yScaleFactor) . " right=" . extraFixedResBezelImageX+(Round(extraFixedResBezelScreenX1*xScaleFactor)+extraFixedResBezelScreenWidth) . " bottom=" . extraFixedResBezelImageY+Round(extraFixedResBezelScreenY1*yScaleFactor)+extraFixedResBezelScreenHeight ,5)	
			}
			UpdateLayeredWindow(extraFixedRes_Bezel_hwnd, extraFixedRes_Bezel_hdc,0,0, A_ScreenWidth, A_ScreenHeight)
		}
		Log("BezelDraw - Ended")
	}
Return
}
 ExtraFixedResBezelExit(){
	Global bezelEnabled, extraFixedResBezelPath, extraFixedRes_Bezel_hbm, extraFixedRes_Bezel_obm, extraFixedRes_Bezel_hdc, extraFixedRes_Bezel_hwnd, extraFixedRes_Bezel_G, extraFixedResBezelImageFile, extraFixedResBezelBitmap, extraFixedResBezelOverlayFile, extraFixedResBezelOverlayBitmap
	if (bezelEnabled = "true"){
		SelectObject(extraFixedRes_Bezel_hdc, extraFixedRes_Bezel_obm)
		DeleteObject(extraFixedRes_Bezel_hbm)
		DeleteDC(extraFixedRes_Bezel_hdc)
		Gdip_DeleteGraphics(extraFixedRes_Bezel_G)
		Gui, extraFixedRes_Bezel_GUI: Destroy
		If extraFixedResBezelPath 
		{	if extraFixedResBezelImageFile
				Gdip_DisposeImage(extraFixedResBezelBitmap)
			if extraFixedResBezelOverlayFile
				Gdip_DisposeImage(extraFixedResBezelOverlayBitmap)	
		}
	}
Return
}
 CreateICMenuBitmap(side){
	Global RLMediaPath
	pBitmap := Gdip_CreateBitmap(300, 400)
	G := Gdip_GraphicsFromImage(pBitmap)
	pBrush := Gdip_BrushCreateSolid("0xff000000")
	Gdip_FillRectangle(G, pBrush, 0, 0, 300, 400)
	pBrush2 := Gdip_BrushCreateSolid("0xffffffff")
	Gdip_FillRectangle(G, pBrush2, 20, 20, 260, 360)
	Gdip_DeleteBrush(pBrush)
	Gdip_DeleteBrush(pBrush2)
	Gdip_SaveBitmapToFile(pBitmap, RLMediaPath . "\Bezels\_Default\IC Menu " . side . ".png")
	Gdip_DisposeImage(pBitmap)
	Gdip_DeleteGraphics(G)
	return
}

Comments