Advertisement
Guest User

Untitled

a guest
May 2nd, 2018
1,652
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 32.61 KB | None | 0 0
  1. MEmu := "Demul"
  2. MEmuV := "v0.7a 221215"
  3. MURL := ["http://demul.emulation64.com/"]
  4. MAuthor := ["djvj","bleasby"]
  5. MVersion := "2.1.10"
  6. MCRC := ""
  7. iCRC := ""
  8. MID := ""
  9. MSystem := ["Cave 3rd","Gaelco","Gaelco 3D","Sammy Atomiswave","Sega System SP","Sega Dreamcast","Sega Hikaru","Sega Naomi","Sega Naomi 2"]
  10. ;----------------------------------------------------------------------------
  11. ; Notes:
  12. ; Required - control and nvram files setup for each game/control type
  13. ; Required - moduleName ini example can be found on GIT in the Demul module folder
  14. ; moduleName ini must be placed in same folder as this module if you use the provided example, just be sure to rename it to just Demul.ini first so it matches the module's name
  15. ; GDI images must match mame zip names and be extracted and have a .dat extension
  16. ; Rom_Extension should include 7z|zip|gdi|cue|cdi|chd|mds|ccd|nrg
  17. ; Module will automatically set your rom path for you on first launch
  18. ;
  19. ; Make sure the awbios, dc, hikaru, naomi, naomi2, saturn.zip bios archives are in any of your rom paths as they are needed to play all the games.
  20. ; Set your Video Plugin to gpuDX11 and set your desired resolution there
  21. ; In case your control codes do not match mine, set your desired control type in demul, then open the demul.ini and find section PORTB and look for the device key. Use this number instead of the one I provided
  22. ; gpuDX10 and gpuDX11 are the only supported plugins. You can define what plugin you want to use for each game in the module settings in RocketLauncherUI
  23. ; Read the tooltip for the Fullscreen module setting in RocketLauncherUI on how to control windowed fullscreen, true fullscreen, or windowed mode
  24. ; Windowed fullscreen will take effect the 2nd time you run the emu. It has to calculate your resolution on first run.
  25. ;
  26. ; Controls:
  27. ; Start a game of each control type (look in the RocketLauncherUI's module settings for these types, they all have their own tabs) and configure your controls to play the game. After configuring your controls manually in Demul, open padDemul.ini and Copy/paste the JAMMA0_0 and JAMMA0_1 (for naomi) or the ATOMISWAVE0_0 and ATOMISWAVE0_1 (for atomiswave) into RocketLauncherUI's module settings for each controls tab (standard, sfstyle, etc).
  28. ; Each pair of control tabs designates another real arcade control schema for a grouping of games. Demul does not handle this like MAME, so the module does instead.
  29. ;
  30. ; Gaelco:
  31. ; There is no known way to launch the desired Gaelco rom from CLI. You will always be presented with the rom selection window on launch.
  32. ; GPUDX11 does not yet support Gaelco in true fullscreen mode. Either use DX10 which does support fullscreen for Gaelco
  33. ; or if using DX11, choose fullscreen in the video options and then match the windows resolution to your desktop. This will give a pseudo fullscreen mode.
  34. ;
  35. ; Sega Hikaru:
  36. ; Windowed Fullscreen doesn't seem to work as demul does not allow stretching of its window
  37. ;
  38. ; Troubleshooting:
  39. ; For some reason demul's ini files can get corrupted and ahk can't read/write to them correctly.
  40. ; If your ini keys are not being read or not writing to their existing keys in the demul inis, create a new file and copy/paste everything from the old ini into the new one and save.
  41. ; If you use Fade_Out, the module will disable it. Demul crashes when Fade tries to draw on top of it in windowed and fullscreen modes.
  42. ;
  43. ;Bezel:
  44. ;If the game has the wrong aspect ratio, go to demul module settings, rom settings, and set the aspect ratio option to stretch. The game will follow the aspect ratio defined by the bezel.
  45. ;----------------------------------------------------------------------------
  46. StartModule()
  47. BezelGUI()
  48. ExtraFixedResBezelGUI()
  49. FadeInStart()
  50.  
  51. primaryExe := new Emulator(emuPath . "\" . executable) ; instantiate emulator executable object
  52. emuPrimaryWindow := new Window(new WindowTitle("","window")) ; instantiate primary emulator window object
  53. emuLCD0Window := new Window(new WindowTitle("LCD 0","LCD 0"))
  54.  
  55. ; This object controls how the module reacts to different systems. Demul can play a few systems, but needs to know what system you want to run, so this module has to adapt.
  56. mType := Object("Cave 3rd","cave3rd","Gaelco","gaelco","Gaelco 3D","gaelco","Sammy Atomiswave","awave","Sega System SP","naomi","Sega Dreamcast","dc","Sega Hikaru","hikaru","Sega Naomi","naomi","Sega Naomi 2","naomi")
  57. ident := mType[systemName] ; search object for the systemName identifier Demul uses
  58. If !ident
  59. ScriptError("Your systemName is: " . systemName . "`nIt is not one of the known supported systems for this Demul module: " . moduleName)
  60.  
  61. DemuleIni := new IniFile(emuPath . "\Demul.ini")
  62. PadIni := new IniFile(emuPath . "\padDemul.ini")
  63. DemuleIni.CheckFile("Could not find Demul's ini. Please run Demul manually first and each of it's settings sections so the appropriate inis are created for you: " . DemuleIni.FileFullPath)
  64. PadIni.CheckFile("Could not find Demul's control ini. Please run Demul manually first and set up your controls so this file is created for you: " . PadIni.FileFullPath)
  65.  
  66. demuleIniEncoding := RLObject.getFileEncoding(DemuleIni.FileFullPath)
  67. If demuleIniEncoding {
  68. If (demuleIniEncoding = "ERROR")
  69. RLLog.Warning("Module - Demul.ini set to Read-only and BOM cannot be changed. Check the DLL log for further details: " . DemuleIni.FileFullPath)
  70. Else {
  71. RLLog.Info("Module - Recreating " . DemuleIni.FileFullPath . " as ANSI because UTF-8 format cannot be read")
  72. If RLObject.removeBOM(DemuleIni.FileFullPath)
  73. RLLog.Info("Module - Successfully converted " . DemuleIni.FileFullPath . " to ANSI")
  74. Else
  75. RLLog.Error("Module - Failed to convert " . DemuleIni.FileFullPath . " to ANSI")
  76. }
  77. }
  78.  
  79. maxHideTaskbar := moduleIni.Read("Settings", "MaxHideTaskbar", "true",,1)
  80. controllerCode := moduleIni.Read("Settings", "ControllerCode", "16777216",,1)
  81. mouseCode := moduleIni.Read("Settings", "MouseCode", "131072",,1)
  82. keyboardCode := moduleIni.Read("Settings", "KeyboardCode", "1073741824",,1)
  83. lightgunCode := moduleIni.Read("Settings", "LightgunCode", "-2147483648",,1)
  84. hideDemulGUI := moduleIni.Read("Settings", "HideDemulGUI", "true",,1)
  85. PerGameMemoryCards := moduleIni.Read("Settings", "PerGameMemoryCards", "true",,1)
  86. memCardPath := moduleIni.Read("Settings", "MemCardPath", emuPath . "\memsaves",,1)
  87. memCardPath := AbsoluteFromRelative(emuPath, memCardPath)
  88.  
  89. fullscreen := moduleIni.Read(romName . "|Settings", "Fullscreen", "windowedfullscreen",,1)
  90. plugin := moduleIni.Read(romName . "|Settings", "Plugin", "gpuDX11",,1)
  91. shaderUsePass1 := moduleIni.Read(romName . "|Settings", "ShaderUsePass1", "false",,1)
  92. shaderUsePass2 := moduleIni.Read(romName . "|Settings", "ShaderUsePass2", "false",,1)
  93. shaderNamePass1 := moduleIni.Read(romName . "|Settings", "ShaderNamePass1",,,1)
  94. shaderNamePass2 := moduleIni.Read(romName . "|Settings", "ShaderNamePass2",,,1)
  95. listSorting := moduleIni.Read(romName . "|Settings", "ListSorting", "true",,1)
  96. OpaqueMod := moduleIni.Read(romName . "|Settings", "OModifier", "true",,1)
  97. TransMod := moduleIni.Read(romName . "|Settings", "TModifier", "true",,1)
  98. internalResolutionScale := moduleIni.Read(romName . "|Settings", "InternalResolutionScale", "1",,1)
  99. videomode := moduleIni.Read(romName . "|Settings", "VideoMode", "0",,1)
  100. aspectRatio := moduleIni.Read(romName . "|Settings", "AspectRatio", "1",,1)
  101. MaxLayers := moduleIni.Read(romName . "|Settings", "MaxLayers", "32",,1)
  102. demulShooterEnabled := moduleIni.Read(romName . "|Settings", "DemulShooterEnabled", "false",,1)
  103. dcRegion := moduleIni.Read(romName . "|Settings", "DreamcastRegion",,,1)
  104.  
  105.  
  106. hideVMU := moduleIni.Read("Settings", "hideVMU", "false",,1)
  107. VMU1Pos := moduleIni.Read("Settings", "VMU1Pos", "topLeft",,1) ; topRight, topCenter, topLeft, leftCenter, bottomLeft, bottomCenter, bottomRight, rightCenter
  108. VMU2Pos := moduleIni.Read("Settings", "VMU2Pos", "topRight",,1) ; topRight, topCenter, topLeft, leftCenter, bottomLeft, bottomCenter, bottomRight, rightCenter
  109. VMU3Pos := moduleIni.Read("Settings", "VMU3Pos", "bottomLeft",,1) ; topRight, topCenter, topLeft, leftCenter, bottomLeft, bottomCenter, bottomRight, rightCenter
  110. VMU4Pos := moduleIni.Read("Settings", "VMU4Pos", "bottomRight",,1) ; topRight, topCenter, topLeft, leftCenter, bottomLeft, bottomCenter, bottomRight, rightCenter
  111. VMUHideKey := moduleIni.Read("Settings", "VMUHideKey","F10",,1)
  112.  
  113. Bios := moduleIni.Read(romName, "Bios",,,1)
  114. LoadDecrypted := moduleIni.Read(romName, "LoadDecrypted",,,1) ; not currently supported
  115.  
  116. ; Read all the control values
  117. controls := moduleIni.Read(romname, "Controls", "standard",,1) ; have to read this first so the below ini reads work
  118. push1_0 := moduleIni.Read(controls . "_JAMMA0_0", "push1",,,1)
  119. push2_0 := moduleIni.Read(controls . "_JAMMA0_0", "push2",,,1)
  120. push3_0 := moduleIni.Read(controls . "_JAMMA0_0", "push3",,,1)
  121. push4_0 := moduleIni.Read(controls . "_JAMMA0_0", "push4",,,1)
  122. push5_0 := moduleIni.Read(controls . "_JAMMA0_0", "push5",,,1)
  123. push6_0 := moduleIni.Read(controls . "_JAMMA0_0", "push6",,,1)
  124. push7_0 := moduleIni.Read(controls . "_JAMMA0_0", "push7",,,1)
  125. push8_0 := moduleIni.Read(controls . "_JAMMA0_0", "push8",,,1)
  126. service_0 := moduleIni.Read(controls . "_JAMMA0_0", "SERVICE",,,1)
  127. start_0 := moduleIni.Read(controls . "_JAMMA0_0", "START",,,1)
  128. coin_0 := moduleIni.Read(controls . "_JAMMA0_0", "COIN",,,1)
  129. digitalup_0 := moduleIni.Read(controls . "_JAMMA0_0", "DIGITALUP",,,1)
  130. digitaldown_0 := moduleIni.Read(controls . "_JAMMA0_0", "DIGITALDOWN",,,1)
  131. digitalleft_0 := moduleIni.Read(controls . "_JAMMA0_0", "DIGITALLEFT",,,1)
  132. digitalright_0 := moduleIni.Read(controls . "_JAMMA0_0", "DIGITALRIGHT",,,1)
  133. analogup_0 := moduleIni.Read(controls . "_JAMMA0_0", "ANALOGUP",,,1)
  134. analogdown_0 := moduleIni.Read(controls . "_JAMMA0_0", "ANALOGDOWN",,,1)
  135. analogleft_0 := moduleIni.Read(controls . "_JAMMA0_0", "ANALOGLEFT",,,1)
  136. analogright_0 := moduleIni.Read(controls . "_JAMMA0_0", "ANALOGRIGHT",,,1)
  137. analogup2_0 := moduleIni.Read(controls . "_JAMMA0_0", "ANALOGUP2",,,1)
  138. analogdown2_0 := moduleIni.Read(controls . "_JAMMA0_0", "ANALOGDOWN2",,,1)
  139. analogleft2_0 := moduleIni.Read(controls . "_JAMMA0_0", "ANALOGLEFT2",,,1)
  140. analogright2_0 := moduleIni.Read(controls . "_JAMMA0_0", "ANALOGRIGHT2",,,1)
  141. push1_1 := moduleIni.Read(controls . "_JAMMA0_1", "push1",,,1)
  142. push2_1 := moduleIni.Read(controls . "_JAMMA0_1", "push2",,,1)
  143. push3_1 := moduleIni.Read(controls . "_JAMMA0_1", "push3",,,1)
  144. push4_1 := moduleIni.Read(controls . "_JAMMA0_1", "push4",,,1)
  145. push5_1 := moduleIni.Read(controls . "_JAMMA0_1", "push5",,,1)
  146. push6_1 := moduleIni.Read(controls . "_JAMMA0_1", "push6",,,1)
  147. push7_1 := moduleIni.Read(controls . "_JAMMA0_1", "push7",,,1)
  148. push8_1 := moduleIni.Read(controls . "_JAMMA0_1", "push8",,,1)
  149. service_1 := moduleIni.Read(controls . "_JAMMA0_1", "SERVICE",,,1)
  150. start_1 := moduleIni.Read(controls . "_JAMMA0_1", "START",,,1)
  151. coin_1 := moduleIni.Read(controls . "_JAMMA0_1", "COIN",,,1)
  152. digitalup_1 := moduleIni.Read(controls . "_JAMMA0_1", "DIGITALUP",,,1)
  153. digitaldown_1 := moduleIni.Read(controls . "_JAMMA0_1", "DIGITALDOWN",,,1)
  154. digitalleft_1 := moduleIni.Read(controls . "_JAMMA0_1", "DIGITALLEFT",,,1)
  155. digitalright_1 := moduleIni.Read(controls . "_JAMMA0_1", "DIGITALRIGHT",,,1)
  156. analogup_1 := moduleIni.Read(controls . "_JAMMA0_1", "ANALOGUP",,,1)
  157. analogdown_1 := moduleIni.Read(controls . "_JAMMA0_1", "ANALOGDOWN",,,1)
  158. analogleft_1 := moduleIni.Read(controls . "_JAMMA0_1", "ANALOGLEFT",,,1)
  159. analogright_1 := moduleIni.Read(controls . "_JAMMA0_1", "ANALOGRIGHT",,,1)
  160. analogup2_1 := moduleIni.Read(controls . "_JAMMA0_1", "ANALOGUP2",,,1)
  161. analogdown2_1 := moduleIni.Read(controls . "_JAMMA0_1", "ANALOGDOWN2",,,1)
  162. analogleft2_1 := moduleIni.Read(controls . "_JAMMA0_1", "ANALOGLEFT2",,,1)
  163. analogright2_1 := moduleIni.Read(controls . "_JAMMA0_1", "ANALOGRIGHT2",,,1)
  164.  
  165. ;Bezel settings
  166. bezelTopOffset := moduleIni.Read(romName . "|Settings", "Bezel_Top_Offset","0",,1)
  167. bezelBottomOffset := moduleIni.Read(romName . "|Settings", "Bezel_Bottom_Offset","0",,1)
  168. bezelRightOffset := moduleIni.Read(romName . "|Settings", "Bezel_Right_Offset", "0",,1)
  169. bezelLeftOffset := moduleIni.Read(romName . "|Settings", "Bezel_Left_Offset", "0",,1)
  170. If (plugin = "gpuDX11ng") ; this is for legacy support. Original demul 0.7 used gpuDX11ng
  171. plugin := "gpuDX11old"
  172.  
  173. If (InStr(systemName, "Hikaru") && plugin != "gpuDX11")
  174. plugin := "gpuDX11" ; Hikaru does not work with gpuDX10 gpu plugin, setting it dumps an error
  175.  
  176. ; Verify user set desired gpu plugin name correctly
  177. If (plugin != "gpuDX11old" && plugin != "gpuDX11" && plugin != "gpuDX10" && plugin != "")
  178. ScriptError(plugin . " is not a supported gpu plugin.`nLeave the plugin blank to use the default ""gpuDX11"".`nValid options are gpuDX11old, gpuDX11 or gpuDX10.")
  179.  
  180. ; Read and write videomode value for cable type
  181. rvideomode := DemuleIni.Read("main", "videomode")
  182. RLLog.Info("Module - Demul is reading the config with videomode = " . rvideomode)
  183. DemuleIni.Write(videomode, "main", "videomode")
  184. RLLog.Info("Module - Demul is updating the config with videomode = " . videomode)
  185.  
  186. ; Handle Demul's rom paths so the user doesn't have to
  187. romPathCount := DemuleIni.Read("files", "romsPathsCount")
  188. RLLog.Info("Module - Demul is configured with " . romPathCount . " rom path(s). Scanning these for a romPath to this rom.")
  189. Loop % romPathCount
  190. { demulRomPath := A_Index - 1 ; rompaths in demul start with 0
  191. path%A_Index% := DemuleIni.Read("files", "roms" . demulRomPath)
  192. RLLog.Info("Module - Path" . demulRomPath . ": " . path%A_Index%)
  193. ; msgbox % path%A_Index%
  194. If (path%A_Index% = romPath . "\") ; demul tacks on the backslash at the end
  195. { romPathFound := 1 ; flag that demul has this romPath in its config and no need to add it
  196. RLLog.Info("Module - Stopping search because Demul is already configured with the correct romPath to this rom: " . path%A_Index%)
  197. Break ; stop looking for a correct romPath
  198. }
  199. }
  200. If !romPathFound ; if demul doesn't have the romPath in its ini, add it
  201. { RLLog.Warning("Module - Demul does not have this romPath in Demul.ini, adding it for you.")
  202. nextPath := romPathCount + 1 ; add 1 to the romPathCount and write that to the ini
  203. DemuleIni.Write(nextPath, "files", "romsPathsCount")
  204. DemuleIni.Write(romPath . "\", "files", "roms" . romPathCount) ; write the rompath to the ini
  205. }
  206.  
  207. ; Force Fade_Out to disabled as it causes demul to not close properly
  208. ; fadeOut = false
  209. ; RLLog.Warning("Module - Turning off Fade_Out because it doesn't let Demul exit properly.")
  210.  
  211. GpuIni := new IniFile(emuPath . "\" . plugin . ".ini")
  212. GpuIni.CheckFile("Please run Demul manually first and select the " . plugin . " gpu plugin so it creates this file for you: " . GpuIni.FileFullPath)
  213.  
  214. demulFileEncoding := RLObject.getFileEncoding(GpuIni.FileFullPath)
  215. If demulFileEncoding {
  216. If (demulFileEncoding = "ERROR")
  217. RLLog.Warning("Module - GPU ini set to Read-only and BOM cannot be changed. Check the DLL log for further details: " . GpuIni.FileFullPath)
  218. Else {
  219. RLLog.Info("Module - Recreating " . GpuIni.FileFullPath . " as ANSI because UTF-8 format cannot be read")
  220. If RLObject.removeBOM(GpuIni.FileFullPath)
  221. RLLog.Info("Module - Successfully converted " . GpuIni.FileFullPath . " to ANSI")
  222. Else
  223. RLLog.Error("Module - Failed to convert " . GpuIni.FileFullPath . " to ANSI")
  224. }
  225. }
  226.  
  227. BezelStart()
  228.  
  229. ; Setting emu resolution if bezel is enabled
  230. If (BezelPath)
  231. { If (plugin = "gpuDX11" || plugin = "gpuDX11old") {
  232. GpuIni.Write(bezelScreenWidth, "resolution", "Width")
  233. GpuIni.Write(bezelScreenHeight, "resolution", "Height")
  234. } Else {
  235. GpuIni.Write(bezelScreenWidth, "resolution", "wWidth")
  236. GpuIni.Write(bezelScreenHeight, "resolution", "wHeight")
  237. }
  238. }
  239.  
  240. ; This updates the DX11gpu ini file to turn List Sorting on or off. Depending on the games, turning this on for some games may remedy missing graphics, having it off on other games may fix corrupted graphics. Untill they improve the DX11gpu, this is the best it's gonna get.
  241. If (ListSorting = "true")
  242. GpuIni.Write(0, "main", "AutoSort")
  243. Else
  244. GpuIni.Write(1, "main", "AutoSort")
  245.  
  246. ; This will set the Opaque or Trans modifier for each game
  247. If (OpaqueMod = "true")
  248. GpuIni.Write(0, "main", "OModifier")
  249. Else
  250. GpuIni.Write(1, "main", "OModifier")
  251.  
  252. If (TransMod = "true")
  253. GpuIni.Write(0, "main", "TModifier")
  254. Else
  255. GpuIni.Write(1, "main", "TModifier")
  256.  
  257. ; This updates the DX10gpu or DX11gpu ini file to the ratio and scale you want to use for this game
  258. GpuIni.Write(aspectRatio, "main", "aspect")
  259. GpuIni.Write(InternalResolutionScale, "main", "scaling")
  260.  
  261. If (plugin = "gpuDX11" || plugin = "gpuDX11old") {
  262. GpuIni.Write(MaxLayers, "main", "MaxLayers")
  263. }
  264.  
  265. ; This updates the demul.ini with your gpu plugin choice for the selected rom
  266. DemuleIni.Write(plugin . ".dll", "plugins", "gpu")
  267.  
  268. ; This updates the demul.ini with your VMU display choice
  269. DemuleIni.Write(hideVMU, "main", "VMUscreendisable")
  270.  
  271. ; Shader Effects
  272. Loop, 2 {
  273. shaderUsePass%A_Index% := If (ShaderUsePass%A_Index% != "" and ShaderUsePass%A_Index% != "ERROR" ? (ShaderUsePass%A_Index%) : (GlobalShaderUsePass%A_Index%)) ; determine what shaderUsePass to use
  274. currentusePass%A_Index% := GpuIni.Read("shaders", "usePass" . A_Index)
  275. If (shaderUsePass%A_Index% = "true")
  276. {
  277. shaderNamePass%A_Index% := If (ShaderNamePass%A_Index% != "" and ShaderNamePass%A_Index% != "ERROR" ? (ShaderNamePass%A_Index%) : (GlobalShaderNamePass%A_Index%)) ; determine what shaderNamePass to use
  278. If !StringUtils.Contains(shaderNamePass%A_Index%,"FXAA|HDR-TV|SCANLINES|CARTOON|RGB DOT\(MICRO\)|RGB DOT\(TINY\)|BLUR")
  279. ScriptError(shaderNamePass%A_Index% . " is not a valid choice for a shader. Your options are FXAA, HDR-TV, SCANLINES, CARTOON, RGB DOT(MICRO), RGB DOT(TINY), or BLUR.")
  280. If (currentusePass%A_Index% = 0)
  281. GpuIni.Write(1, "shaders", "usePass" . A_Index) ; turn shader on in gpuDX11 ini
  282. GpuIni.Write(shaderNamePass%A_Index%, "shaders", "shaderPass" . A_Index) ; update gpuDX11 ini with the shader name to use
  283. }Else If (shaderUsePass%A_Index% != "true" and currentusePass%A_Index% = 1)
  284. GpuIni.Write(0, "shaders", "usePass" . A_Index) ; turn shader off in gpuDX11 ini
  285. }
  286.  
  287. If (ident = "dc")
  288. {
  289. 7z(romPath, romName, romExtension, sevenZExtractPath)
  290. defaultIni := "[main]`r`nimageFileName = `r`nopenDialog = false"
  291. If (romExtension = ".cdi" || romExtension = ".mds" || romExtension = ".ccd" || romExtension = ".nrg" || romExtension = ".gdi" || romExtension = ".cue") {
  292. GdrImageIni := new IniFile(emuPath . "\gdrImage.ini")
  293. If !GdrImageIni.Exist() {
  294. GdrImageIni.Append(defaultIni) ; Create a default gdrImage.ini in your emu folder if one does not exist already.
  295. ; GdrImageIni.Delete(gdrImageFile) ; don't know why this was in the old module, no point in deleting the file I just made
  296. }
  297. TimerUtils.Sleep(500)
  298. DemuleIni.Write("gdrImage.dll", "plugins", "gdr")
  299. GdrImageIni.Write("false", "Main", "openDialog")
  300. GdrImageIni.Write(romPath . "\" . romName . romExtension, "Main", "imagefilename")
  301. } Else If (romExtension = ".chd")
  302. {
  303. GdrCHDIni := new IniFile(emuPath . "\gdrCHD.ini")
  304. If !GdrCHDIni.Exist() {
  305. GdrCHDIni.Append(defaultIni) ; Create a default gdrCHD.ini in your emu folder if one does not exist already.
  306. ; GdrCHDIni.Delete(gdrCHDFile) ; don't know why this was in the old module, no point in deleting the file I just made
  307. }
  308. TimerUtils.Sleep(500)
  309. GdrCHDIni.Write("false", "Main", "openDialog")
  310. DemuleIni.Write("gdrCHD.dll", "plugins", "gdr")
  311. GdrCHDIni.Write(romPath . "\" . romName . romExtension, "Main", "imagefilename")
  312. } Else
  313. ScriptError(romExtension . " is not a supported file type for this " . moduleName . " module.")
  314.  
  315. If (dcRegion != "" && dcRegion != "ERROR") {
  316. dcRegion := StringUtils.RegExReplace(dcRegion,"\s.*") ; Cleans off the added text from the key's value so only the number is left
  317. DemuleIni.Write(dcRegion, "main", "region") ; setting specific region user has set from the moduleName ini
  318. } Else
  319. DemuleIni.Write(1, "main", "region") ; setting region to Auto if user did not specify a specific one
  320. } Else { ; all other systems, Naomi and Atomiswave
  321. ; This updates the demul.ini with your Bios choice for the selected rom
  322. If (Bios != "" && Bios != "ERROR") {
  323. Bios := StringUtils.RegExReplace(Bios,"\s.*") ; Cleans off the added text from the key's value so only the number is left
  324. DemuleIni.Write("false", "main", "naomiBiosAuto") ; turning auto bios off so we can use a specific one instead
  325. DemuleIni.Write(Bios, "main", "naomiBios") ; setting specific bios user has set from the moduleName ini
  326. } Else
  327. DemuleIni.Write("true", "main", "naomiBiosAuto") ; turning auto bios on if user did not specify a specific one
  328. }
  329.  
  330. ; This section writes your custom keys to the padDemul.ini. Naomi games had many control panel layouts. The only way we can accomodate these differing controls, is to keep track of them all and write them to the ini at the launch of each game.
  331. ; First we check if the last controls used are the same as the game we want to play, so we don't waste time updating the ini if it is not necessary. For example playing 2 sfstyle type games in a row, we wouldn't need to write to the ini.
  332.  
  333. ; This section tells demul what arcade control type should be connected to the game. Options are standard (aka controller), mouse, lightgun, or keyboard
  334. If (controls = "lightgun" || controls = "mouse") {
  335. RLLog.Info("Module - This game uses a Mouse or Lightgun control type.")
  336. DemuleIni.Write(MouseCode, "PORTB", "device")
  337. } Else If (controls = "keyboard") {
  338. RLLog.Info("Module - This game uses a Keyboard control type.")
  339. DemuleIni.Write(KeyboardCode, "PORTB", "device")
  340. } Else { ; accounts for all other control types
  341. RLLog.Info("Module - This game uses a standard (controller) control type.")
  342. DemuleIni.Write(ControllerCode, "PORTB", "device")
  343. }
  344.  
  345. WriteControls(0,push1_0,push2_0,push3_0,push4_0,push5_0,push6_0,push7_0,push8_0,SERVICE_0,START_0,COIN_0,DIGITALUP_0,DIGITALDOWN_0,DIGITALLEFT_0,DIGITALRIGHT_0,ANALOGUP_0,ANALOGDOWN_0,ANALOGLEFT_0,ANALOGRIGHT_0,ANALOGUP2_0,ANALOGDOWN2_0,ANALOGLEFT2_0,ANALOGRIGHT2_0)
  346.  
  347. WriteControls(1,push1_1,push2_1,push3_1,push4_1,push5_1,push6_1,push7_1,push8_1,SERVICE_1,START_1,COIN_1,DIGITALUP_1,DIGITALDOWN_1,DIGITALLEFT_1,DIGITALRIGHT_1,ANALOGUP_1,ANALOGDOWN_1,ANALOGLEFT_1,ANALOGRIGHT_1,ANALOGUP2_1,ANALOGDOWN2_1,ANALOGLEFT2_1,ANALOGRIGHT2_1)
  348.  
  349. RLLog.Info("Module - Wrote " . controls . " controls to padDemul.ini.")
  350.  
  351. ; This will check the save game files and create per game ones if enabled.
  352. If (PerGameMemoryCards = "true")
  353. {
  354. MemCardFolder := new Folder(memCardPath)
  355. DefaultMemCard := new File(memCardPath . "\default_vms.bin") ; defining default blank VMU file
  356. If !DefaultMemCard.Exist("Folder")
  357. DefaultMemCard.CreateDir() ; create memcard folder if it doesn't exist
  358. If defaultMemCard.Exist()
  359. {
  360. RLLog.Info("VMU - Default VMU file location - " . defaultMemCard.FileFullPath)
  361. Loop, 4
  362. {
  363. outerLoop := A_Index
  364. If (A_Index = 1)
  365. contrPort := "A"
  366. Else If (A_Index = 2)
  367. contrPort := "B"
  368. Else If (A_Index = 3)
  369. contrPort := "C"
  370. Else If (A_Index = 4)
  371. contrPort := "D"
  372. controllerPort%contrPort% := DemuleIni.Read("PORT" . contrPort, "device")
  373. RLLog.Info("VMU - Config for controller PORT" . contrPort . " = " . controllerPort%contrPort%)
  374. If (controllerPort%contrPort% = -1)
  375. Continue
  376. Loop, 2
  377. {
  378. SubCount := A_Index - 1
  379. VMUPort%SubCount% := DemuleIni.Read("PORT" . contrPort, "port" . SubCount)
  380. RLLog.Info("VMU - Config Plugin VMUPort" . contrPort . SubCount . " for controller PORT" . contrPort . " = " . VMUPort%SubCount%)
  381. If (VMUPort%SubCount% <> -1)
  382. {
  383. VMUPortFile%SubCount% := DemuleIni.Read("VMS", "VMS" . contrPort . SubCount)
  384. RLLog.Info("VMU - VMUPortFile" . contrPort . SubCount . " controllerVMU" . contrPort . SubCount . " " . "VMS" . contrPort . SubCount . " = " . VMUPortFile%SubCount%)
  385. memCardName := If romTable[1,5] ? romTable[1,4] : romName ; defining rom name for multi disc rom
  386. PerGameVMUBin%A_Index% := new File(memCardPath . "\" . memCardName . "_vms_" . contrPort . SubCount . ".bin")
  387. RLLog.Info("VMU - PerGameVMUBin = " . PerGameVMUBin%A_Index%.FileFullPath)
  388. If PerGameVMUBin%A_Index%.Exist()
  389. {
  390. RLLog.Info("VMU - PerGameVMU file exists at " . PerGameVMUBin%A_Index%.FileFullPath)
  391. } Else {
  392. RLLog.Info("VMU - PerGameVMU file does not exist. So we will create one at " . PerGameVMUBin%A_Index%.FileFullPath)
  393. DefaultMemCard.Copy(PerGameVMUBin%A_Index%.FileFullPath)
  394. }
  395. DemuleIni.Write(PerGameVMUBin%A_Index%.FileFullPath, "VMS", "VMS" . contrPort . SubCount)
  396. RLLog.Info("VMU - PerGameVMU file written to " . DemuleIni.FileFullPath . " at section VMS to variable VMS" . contrPort . SubCount . " as " . PerGameVMUBin%A_Index%.FileFullPath)
  397. } Else {
  398. RLLog.Info("VMU - No VMU Plugged In.")
  399. }
  400. }
  401. }
  402. } Else {
  403. RLLog.Info("VMU - No default VMU file at " . DefaultMemCard.FileFullPath)
  404. }
  405. }
  406.  
  407. ; Setting demul to use true fullscreen if defined in settings.ini, otherwise sets demul to run windowed. This is for gpuDX11 plugin only
  408. If (plugin = "gpuDX11" || plugin = "gpuDX11old")
  409. If (fullscreen = "truefullscreen")
  410. GpuIni.Write(1, "main", "UseFullscreen")
  411. Else
  412. GpuIni.Write(0, "main", "UseFullscreen")
  413.  
  414. If (fullscreen = "windowedfullscreen")
  415. {
  416. If (plugin = "gpuDX11" || plugin = "gpuDX11old") {
  417. GpuIni.Write(appWidthNew, "resolution", "Width")
  418. GpuIni.Write(appHeightNew, "resolution", "Height")
  419. } Else {
  420. GpuIni.Write(appWidthNew, "resolution", "wWidth")
  421. GpuIni.Write(appHeightNew, "resolution", "wHeight")
  422. }
  423. If (maxHideTaskbar = "true") {
  424. RLLog.Info("Module - Hiding Taskbar and Start Button.")
  425. MiscUtils.TaskBar("off")
  426. }
  427. ; Create black background to give the emu the fullscreen look
  428. RLLog.Info("Module - Creating black background to simulate a fullscreen look.")
  429. Gui demulGUI: -Caption +ToolWindow +0x08000000
  430. Gui demulGUI: Color, Black
  431. Gui demulGUI: Show, x0 y0 h%A_ScreenHeight% w%A_ScreenWidth%
  432. }
  433.  
  434. If (ident != "dc" && demulShooterEnabled = "true") { ; If demulshooter is enabled for this game, launch it with relevant options
  435. DemulShooterExe := New DemulShooter()
  436. DemulShooterExe.Launch("demul07a",romName,"-noresize")
  437. }
  438.  
  439. TimerUtils.Sleep(250)
  440.  
  441. ; Construct the CLI for demul and send romName if naomi or atomiswave. Dreamcast needs a full path and romName.
  442. If (LoadDecrypted = "true") ; decrypted naomi rom
  443. romCLI := "-customrom=" . """" . romPath . "\" . romName . ".bin"""
  444. Else If (ident = "dc") ; dreamcast game
  445. romCLI := " -image=" . """" . romPath . "\" . romName . romExtension . """"
  446. Else ; standard naomi rom
  447. romCLI := "-rom=" . romName
  448.  
  449. hideEmuObj := Object(emuLCD0Window,0,emuPrimaryWindow,1)
  450. HideAppStart(hideEmuObj,hideEmu)
  451.  
  452. primaryExe.Run(" -run=" . ident . " " . romCLI, (If hideDemulGUI = "true" ? "min" : "")) ; launching minimized, then restoring later hides the launch completely
  453.  
  454. TimerUtils.Sleep(1000) ; Need a second for demul to launch, increase if yours takes longer and the emu is NOT appearing and staying minimized. This is required otherwise bezel backgrounds do not appear
  455.  
  456. DetectHiddenWindows, On
  457. If (hideDemulGUI = "true")
  458. {
  459. emuPrimaryWindow.Restore()
  460. emuPrimaryWindow.Activate()
  461. }
  462.  
  463. RLLog.Info("Module - Waiting for Demul to finish loading game.")
  464. winTextSplit := []
  465. Loop { ; looping until demul is done loading rom and gpu starts showing frames
  466. TimerUtils.Sleep(200,0)
  467. winTitle := emuPrimaryWindow.GetTitle(0) ; do not update the wintitle otherwise emu won't close on exit
  468. winTextSplit := StringUtils.Split(winTitle, A_Space)
  469. If (winTextSplit[5] = "RPS:" And winTextSplit[6] != "0" And winTextSplit[6] != "1")
  470. Break
  471. }
  472. RLLog.Info("Module - Demul finished loading game.")
  473.  
  474. If (StringUtils.Contains(systemName, "Gaelco|Hikaru") && fullscreen = "truefullscreen")
  475. KeyUtils.Send("!{Enter}") ; Automatic fullscreen seems to be broken in the Gaelco driver, must alt+Enter to get fullscreen
  476.  
  477. ; This is where we calculate and maximize demul's window using our pseudo fullscreen code
  478. If (fullscreen = "windowedfullscreen")
  479. {
  480. emuPrimaryWindow.Maximize() ; this will take effect after you run demul once because we cannot stretch demul's screen while it is running.
  481. }
  482.  
  483. BezelDraw()
  484.  
  485. If (hideVMU = "false"){
  486. ExtraFixedResBezel := new Window(new WindowTitle("ahk_ID " . extraFixedRes_Bezel_hwnd))
  487. SetTimer, CheckforVMU, 5000
  488. }
  489.  
  490. HideAppEnd(hideEmuObj,hideEmu)
  491. FadeInExit()
  492. primaryExe.Process("WaitClose")
  493.  
  494. If (fullscreen = "windowedfullscreen")
  495. { Gui demulGUI: Destroy
  496. RLLog.Info("Module - Destroyed black gui background.")
  497. }
  498.  
  499. If (ident = "dc")
  500. 7zCleanUp()
  501.  
  502. BezelExit()
  503. ExtraFixedResBezelExit()
  504. FadeOutExit()
  505.  
  506. If (fullscreen = "windowedfullscreen" && maxHideTaskbar = "true") {
  507. RLLog.Info("Module - Showing Taskbar and Start Button.")
  508. MiscUtils.TaskBar("on")
  509. }
  510.  
  511. ExitModule()
  512.  
  513. ; Write new controls to padDemul.ini
  514. WriteControls(player,push1,push2,push3,push4,push5,push6,push7,push8,service,start,coin,digitalup,digitaldown,digitalleft,digitalright,analogup,analogdown,analogleft,analogright,analogup2,analogdown2,analogleft2,analogright2) {
  515. Global PadIni
  516. PadIni.Write(push1, "JAMMA0_" . player, "PUSH1")
  517. PadIni.Write(push2, "JAMMA0_" . player, "PUSH2")
  518. PadIni.Write(push3, "JAMMA0_" . player, "PUSH3")
  519. PadIni.Write(push4, "JAMMA0_" . player, "PUSH4")
  520. PadIni.Write(push5, "JAMMA0_" . player, "PUSH5")
  521. PadIni.Write(push6, "JAMMA0_" . player, "PUSH6")
  522. PadIni.Write(push7, "JAMMA0_" . player, "PUSH7")
  523. PadIni.Write(push8, "JAMMA0_" . player, "PUSH8")
  524. PadIni.Write(service, "JAMMA0_" . player, "SERVICE")
  525. PadIni.Write(start, "JAMMA0_" . player, "START")
  526. PadIni.Write(coin, "JAMMA0_" . player, "COIN")
  527. PadIni.Write(digitalup, "JAMMA0_" . player, "DIGITALUP")
  528. PadIni.Write(digitaldown, "JAMMA0_" . player, "DIGITALDOWN")
  529. PadIni.Write(digitalleft, "JAMMA0_" . player, "DIGITALLEFT")
  530. PadIni.Write(digitalright, "JAMMA0_" . player, "DIGITALRIGHT")
  531. PadIni.Write(analogup, "JAMMA0_" . player, "ANALOGUP")
  532. PadIni.Write(analogdown, "JAMMA0_" . player, "ANALOGDOWN")
  533. PadIni.Write(analogleft, "JAMMA0_" . player, "ANALOGLEFT")
  534. PadIni.Write(analogright, "JAMMA0_" . player, "ANALOGRIGHT")
  535. PadIni.Write(analogup2, "JAMMA0_" . player, "ANALOGUP2")
  536. PadIni.Write(analogdown2, "JAMMA0_" . player, "ANALOGDOWN2")
  537. PadIni.Write(analogleft2, "JAMMA0_" . player, "ANALOGLEFT2")
  538. PadIni.Write(analogright2, "JAMMA0_" . player, "ANALOGRIGHT2")
  539. }
  540.  
  541. HaltEmu:
  542. If (fullscreen = "truefullscreen")
  543. KeyUtils.Send("!{Enter}")
  544. If VMUHideKey
  545. XHotKeywrapper(VMUHideKey,"VMUHide","OFF")
  546. Return
  547. RestoreEmu:
  548. If (fullscreen = "truefullscreen")
  549. KeyUtils.Send("!{Enter}")
  550. If (hideVMU = "false") {
  551. Loop, 4
  552. { VMUWindow%A_Index%.Set("Transparent", 0)
  553. VMUWindow%A_Index%.Activate()
  554. VMUWindow%A_Index%.Set("AlwaysOnTop", "On")
  555. ExtraFixedResBezel.Set("AlwaysOnTop", "On")
  556. If !(VMUHidden)
  557. VMUWindow%A_Index%.Set("Transparent", "off")
  558. }
  559. emuPrimaryWindow.Activate()
  560. }
  561. If VMUHideKey
  562. XHotKeywrapper(VMUHideKey,"VMUHide","ON")
  563. Return
  564.  
  565. HideGUIWindow:
  566. emuPrimaryWindow.Set("Transparent", "On")
  567. emuPrimaryWindow.Activate() ; once activated, demul starts loading the rom
  568. Return
  569.  
  570. CheckforVMU:
  571. Loop, 4
  572. { Transform, letter, Chr, % A_Index + asc("A") - 1 ; transform number to letter
  573. If ((!(VMUWindow%A_Index%)) and (VMUScreenID%A_Index%:=WinExist("PORT " . letter . " VMU 0 ahk_class PORT " . letter . " VMU 0")))
  574. { VMUWindow%A_Index% := new Window(new WindowTitle("ahk_ID " . VMUScreenID%A_Index%))
  575. VMUWindow%A_Index%.Set("Transparent", 0)
  576. ExtraFixedResBezelDraw(VMUScreenID%A_Index%, "VMU",VMU%A_Index%Pos, 144, 96, 8, 8, 28, 8)
  577. VMUWindow%A_Index%.Activate()
  578. VMUWindow%A_Index%.Set("AlwaysOnTop", "On")
  579. ExtraFixedResBezel.Set("AlwaysOnTop", "On")
  580. VMU%A_Index%Draw := true
  581. If !(VMUHidden)
  582. VMUWindow%A_Index%.Set("Transparent", "off")
  583. If !(VMULoaded){
  584. VMUHideKey := xHotKeyVarEdit(VMUHideKey,"VMUHideKey","~","Add")
  585. xHotKeywrapper(VMUHideKey,"VMUHide")
  586. VMULoaded := true
  587. }
  588. emuPrimaryWindow.Activate()
  589. }
  590. }
  591. If ((VMU1Draw) and (VMU2Draw) and (VMU3Draw) and (VMU4Draw))
  592. SetTimer, CheckforVMU, off
  593. Return
  594.  
  595. VMUHide:
  596. If VMUHidden {
  597. Loop, 4
  598. VMUWindow%a_index%.Set("Transparent", "off")
  599. UpdateLayeredWindow(extraFixedRes_Bezel_hwnd, extraFixedRes_Bezel_hdc,0,0, A_ScreenWidth, A_ScreenHeight,255)
  600. VMUHidden := false
  601. } Else {
  602. Loop, 4
  603. VMUWindow%a_index%.Set("Transparent", 0)
  604. UpdateLayeredWindow(extraFixedRes_Bezel_hwnd, extraFixedRes_Bezel_hdc,0,0, A_ScreenWidth, A_ScreenHeight,0)
  605. VMUHidden := true
  606. }
  607. Return
  608.  
  609. CloseProcess:
  610. FadeOutStart()
  611. If (demulShooterEnabled = "true") {
  612. DemulShooterExe.Close()
  613. }
  614. emuPrimaryWindow.PostMessage("0x111", "40085") ; Stop emulation first for a clean exit
  615. TimerUtils.Sleep(5) ; just like to give a little time before closing
  616. emuPrimaryWindow.PostMessage("0x111", "40080") ; Exit
  617. Return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement