MEmu = Bgb MEmuV = v1.4.3 MURL = http://bgb.bircd.org/ MAuthor = djvj,ghutch92 MVersion = 2.0.6 MCRC = B399DD36 iCRC = 6B31DD58 mId = 635637123510883144 MSystem = "Nintendo Game Boy","Nintendo Game Boy Color" ;---------------------------------------------------------------------------- ; Notes: ; Place the "[BIOS] Nintendo Game Boy Color Boot ROM (World).gbc" rom in the bgb dir so you get correct colors ; Run the emu, right click and goto Options->System->GBC Bootrom and paste in the filename of the GBC boot rom ; Don't forget to check the "bootroms enabled" box ; Module will automatically delete the width/height settings so BGB sizes correctly to your monitor when going fullscreen. ;---------------------------------------------------------------------------- StartModule() BezelGUI() settingsFile := modulePath . "\" . systemName . ".ini" If !FileExist(settingsFile) settingsFile := modulePath . "\" . moduleName . ".ini" SplitScreen2PlayersMode := IniReadCheck(settingsFile, "Settings", "SplitScreen_2_Players","Vertical",,1) ;horizontal or vertical SplitScreen3PlayersMode := IniReadCheck(settingsFile, "Settings", "SplitScreen_3_Players","P1top",,1) ; For Player1 screen to be on left: P1left. For Player1 screen to be on top: P1top. For Player1 screen to be on bottom: P1bottom. For Player1 screen to be on right: P1right. Fullscreen := IniReadCheck(settingsFile, "Settings", "Fullscreen","true",,1) SGBColorsEnabled := IniReadCheck(settingsFile, "Settings", "SGB_Colors_Enabled","false",,1) ; if enabled some game boy games will have color instead of being black and white SGBBorderEnabled := IniReadCheck(settingsFile, "Settings", "SGB_Border_Enabled","false",,1) ; if enabled some game boy games will have the border that the SGB used for tv screens multiplayerMenu := IniReadCheck(settingsFile, "Settings|" . romName, "Multiplayer_Menu","false",,1) If (multiplayerMenu = "true") SelectedNumberofPlayers := NumberOfPlayersSelectionMenu(4) FadeInStart() If (SelectedNumberofPlayers > 1) BezelStart(SelectedNumberofPlayers) Else BezelStart() ; Using commandline -setting name=value to set emulator options ; This disables Esc from bringing up the debug window (bgb's default behavior). If it's on, pressing Esc brings up debug, rather then closing the emu parameters := " -setting DebugEsc=0" ;disables or enables Super Game Boy Colors for the Game Boy (DMG) parameters := (SGBColorsEnabled = "true") ? (parameters . " -setting SGBnocolors=0") : (parameters . " -setting SGBnocolors=1") ;disables or enables Super Game Boy Border for the Game Boy (DMG) parameters := (SGBBorderEnabled = "true") ? (parameters . " -setting Border=1") : (parameters . " -setting Border=0") hideEmuObj := Object("ahk_class OS95",1) ; Hide_Emu will hide these windows. 0 = will never unhide, 1 = will unhide later 7z(romPath, romName, romExtension, sevenZExtractPath) HideEmuStart() If (SelectedNumberofPlayers = 1 || multiplayerMenu = "false") { If (Fullscreen = "true") { ; Width/Height values must be blank so BGB sizes correctly to the monitor when going fullscreen because it has no proper aspect ratio control. bgbIniFile := emuPath . "\bgb.ini" bgbIni := LoadProperties(bgbIniFile) ; load the ini into memory WriteProperty(bgbIni,"Width","") ; delete value WriteProperty(bgbIni,"Height","") SaveProperties(bgbIniFile,bgbIni) ; save changes } parameters .= " -setting Windowmode=1" Run(executable . parameters . " """ . romPath . "\" . romName . romExtension . """",emuPath) WinWait("bgb ahk_class Tfgb") WinWaitActive("bgb ahk_class Tfgb") If (Fullscreen = "true") { Log("Module - Creating black background to simulate a fullscreen look.") MaximizeWindow("bgb ahk_class Tfgb") ; bgb always stretches when telling it to go fullscreen so module handles it instead WinSet, AlwaysOnTop, On, bgb ahk_class Tfgb ; forces emu to always remain above the background Gui bgbGUI: -AlwaysOnTop -Caption +ToolWindow Gui bgbGUI: Color, Black Gui bgbGUI: Show, x0 y0 h%A_ScreenHeight% w%A_ScreenWidth% WinActivate % "bgb ahk_class Tfgb" } } Else { ;screen positions If (SelectedNumberofPlayers = 2) If (SplitScreen2PlayersMode = "Vertical") X1 := 0 , Y1 := 0 , W1 := A_ScreenWidth//2 , H1 := A_ScreenHeight , X2 := A_ScreenWidth//2 , Y2 := 0 , W2 := A_ScreenWidth//2 , H2 := A_ScreenHeight Else X1 := 0 , Y1 := 0 , W1 := A_ScreenWidth , H1 := A_ScreenHeight//2 , X2 := 0 , Y2 := A_ScreenHeight//2 , W2 := A_ScreenWidth , H2 := A_ScreenHeight//2 Else If (SelectedNumberofPlayers = 3) If (SplitScreen3PlayersMode = "P1left") X1 := 0 , Y1 := 0 , W1 := A_ScreenWidth//2 , H1 := A_ScreenHeight , X2 := A_ScreenWidth//2 , Y2 := 0 , W2 := A_ScreenWidth//2 , H2 := A_ScreenHeight//2 , X3 := A_ScreenWidth//2 , Y3 := A_ScreenHeight//2 , W3 := A_ScreenWidth//2 , H3 := A_ScreenHeight//2 Else If (SplitScreen3PlayersMode = "P1bottom") X1 := 0 , Y1 := A_ScreenHeight//2 , W1 := A_ScreenWidth , H1 := A_ScreenHeight//2 , X2 := 0 , Y2 := 0 , W2 := A_ScreenWidth//2 , H2 := A_ScreenHeight//2 , X3 := A_ScreenWidth//2 , Y3 := 0 , W3 := A_ScreenWidth//2 , H3 := A_ScreenHeight//2 Else If (SplitScreen3PlayersMode = "P1right") X1 := A_ScreenWidth//2 , Y1 := 0 , W1 := A_ScreenWidth//2 , H1 := A_ScreenHeight , X2 := 0 , Y2 := 0 , W2 := A_ScreenWidth//2 , H2 := A_ScreenHeight//2 , X3 := 0 , Y3 := A_ScreenHeight//2 , W3 := A_ScreenWidth//2 , H3 := A_ScreenHeight//2 Else ; top X1 := 0 , Y1 := 0 , W1 := A_ScreenWidth , H1 := A_ScreenHeight//2, X2 := 0 , Y2 := A_ScreenHeight//2 , W2 := A_ScreenWidth//2 , H2 := A_ScreenHeight//2, X3 := A_ScreenWidth//2 , Y3 := A_ScreenHeight//2 , W3 := A_ScreenWidth//2 , H3 := A_ScreenHeight//2 Else X1 := 0 , Y1 := 0 , W1 := A_ScreenWidth//2 , H1 := A_ScreenHeight//2 , X2 := A_ScreenWidth//2 , Y2 := 0 , W2 := A_ScreenWidth//2 , H2 := A_ScreenHeight//2 , X3 := 0 , Y3 := A_ScreenHeight//2 , W3 := A_ScreenWidth//2 , H3 := A_ScreenHeight//2 , X4 := A_ScreenWidth//2 , Y4 := A_ScreenHeight//2 , W4 := A_ScreenWidth//2 , H4 := A_ScreenHeight//2 ;removing fullscreen ## only app with focus receives input. This means player 1 can't control player 2's game. ## Turning on remotejoy so player 2 can actually play parameters .= " -setting Windowmode=1 -setting JoyFocus=1 -setting RemoteJoy=1" Address := "127.0.0.1" ;local address Port := 8765 ;default port Loop % SelectedNumberofPlayers { parameters .= " " . (If (A_Index = 1) ? "-listen" : "-connect") . " " . address . ":" . port multi_romName := gamesSelectedArray[A_Index] If !multi_romName multi_romName := romName Run(executable . parameters . " """ . romPath . "\" . multi_romName . romExtension . """",emuPath,, Screen%A_Index%PID) WinWait("ahk_pid " . Screen%A_Index%PID) WinGet, Screen%A_Index%ID, ID, % "ahk_pid " . Screen%A_Index%PID If Fullscreen = true { WinSet, Style, -0xC00000, % "ahk_id " . Screen%A_Index%ID ToggleMenu(Screen%A_Index%ID) WinSet, Style, -0xC40000, % "ahk_id " . Screen%A_Index%ID currentScreen := a_index WinMove, % "ahk_id " . Screen%currentScreen%ID, , % X%currentScreen%, % Y%currentScreen%, % W%currentScreen%, % H%currentScreen% ;check If window moved timeout := A_TickCount Loop { WinGetPos, X, Y, W, H, % "ahk_id " . Screen%currentScreen%ID If (X=X%currentScreen%) and (Y=Y%currentScreen%) and (W=W%currentScreen%) and (H=H%currentScreen%) Break If (timeout 1) { Loop, %SelectedNumberofPlayers% { WinClose("ahk_id " . Screen%a_index%ID) WinWaitClose("ahk_id " . Screen%a_index%ID) } } Else WinClose("ahk_class Tfgb") Return