djvj icon

Untitled

djvj | PRO | 01/10/16 08:15:02 PM UTC | 0 ⭐ | 637 👁️ | Never ⏰ | []
text |

17.32 KB

|

None

|

0 👍

/

0 👎

MEmu = ePSXe
MEmuV =  v1.9.0
MURL = http://www.epsxe.com/
MAuthor = djvj & Shateredsoul & brolly
MVersion = 2.1.2
MCRC = 6CCA82E7
iCRC = 5C02FF87
MID = 635038268888210842
MSystem = "Sony PlayStation"
;----------------------------------------------------------------------------
; Notes:
; epsxe can't deal with bin/cue dumps with more than one audio track if you load the cue file directly.
; For these to work you must mount the cue on Virtual Drive and let epsxe boot the game from there.
; You need to make sure you have a SCSI virtual drive on Daemon Tools, NOT a DT one.
; On first time use, 2 default memory card files will be created called _default_001.mcr and _default_002.mcr in emuPath\memcards
;
; Extract all your BIOS files to the bios subfolder. Then goto Config->Bios and select the bios you wish to use.
;
; Go to Config->Video then choose a plugin. Pete's OpenGL line is preffered
; Click Configure (under video plugin) and choose fullscreen and set your desired resolution. Video options/results will vary based on the plugin you choose.
;
; If you are using images with multiple tracks, set your extension to cue (make sure all your cues are correctly pointing to their tracks).
; Go to Config->Cdrom->Configure button and select the drive letter associated with your Virtual Drive virtual drive.
;
; ePSXe will ONLY close via Escape, it will bug out with all other forms of closing a normal program. Do not edit CloseProcess!
;
; TurboButton will only work with DX7 video plugin. Turbo key by Hypnoziz
;
; Requires at least Libs\Shared.ahk v1.1.3
;
; epsxe stores its settings in the registry @ HKEY_CURRENT_USER\Software\epsxe\config
; plugins store their settings in the registry @ HKEY_CURRENT_USER\Software\Vision Thing\PSEmu Pro
;----------------------------------------------------------------------------
StartModule()
BezelGUI()
FadeInStart()
 settingsFile := modulePath . "\" . moduleName . ".ini"
 ; Plugin settings are overridable per rom.
GfxPlugin := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Graphics_Plugin","PeteOpenGL2",,1) ; Use the gfx plugin name
HiresX := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Internal_X_Resolution",0,,1)
HiresY := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Internal_Y_Resolution",0,,1)
KeepRatio := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Stretching_Mode",0,,1)
NoRenderTexture := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Render_Mode",0,,1)
FilterType := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Texture_Filtering",0,,1)
HiResTextures := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Hi-Res_Textures",0,,1)
TWinShader := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Pixel_Shader","false",,1)
OffscreenDrawing := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Offscreen_Drawing",0,,1)
FrameTexType := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Framebuffer_Effects",0,,1)
FrameUpload := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Framebuffer_Uploads",0,,1)
ShaderDir := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Shader_Dir",,,1)
FullscreenShader := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Fullscreen_Shader",0,,1)
FSShaderLevel := IniReadCheck(settingsFile, "Pete's OpenGL2 GPU Plugin|" . romName, "Shader_Level",1,,1)
 Fullscreen := IniReadCheck(settingsFile, "Settings", "Fullscreen","true",,1)
turboButton := IniReadCheck(settingsFile, "Settings", "turboButton","F12",,1)		; Key mapping for turbo button assignment
slowBoot := IniReadCheck(settingsFile, "Settings", "slowBoot","false",,1)			; If true, force emulator to show bios screen at boot
enableAnalog := IniReadCheck(settingsFile, "Settings|" . romName, "EnableAnalog","true",,1)	; If true, enables analog controls at start of game for you, so you don't have to press F5
hideEpsxeGUIs := IniReadCheck(settingsFile, "Settings", "HideePSXeGUIs","true",,1)
perGameMemCards := IniReadCheck(settingsFile, "Settings", "PerGameMemoryCards","true",,1)
disableMemoryCard1 := IniReadCheck(settingsFile, romName, "DisableMemoryCard1","false",,1)	; If true, disables memory card 1 for this game. Some games may not boot if both memory cards are inserted.
disableMemoryCard2 := IniReadCheck(settingsFile, romName, "DisableMemoryCard2","false",,1)	; If true, disables memory card 2 for this game. Some games may not boot if both memory cards are inserted.
memCardPath := IniReadCheck(settingsFile, "Settings", "MemCardPath", emuPath . "\memcards",,1)
memCardPath := AbsoluteFromRelative(emuPath, memCardPath)
 ; dialogOpen := i18n("dialog.open")	; Looking up local translation
dialogOpen := "Open"	; apparently ePSXe doesnt support multiple languages, forcing this until it does
 BezelStart()
 ; Set the GPU plugin and it's settings.
WriteReg("SZ", "epsxe\config", "VideoPlugin", "gpu" . GfxPlugin . ".dll")
 ; TODO: The other video plugins might use the same settings and even if they don't, it probably won't hurt
; to have these values in the registry for the selected plugin.
; Only apply these settings if the user selected the OpenGL2 plugin.
If (GfxPlugin = "PeteOpenGL2") {
	WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "HiresX", HiresX)
	WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "HiresY", HiresY)
	WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "KeepRatio", KeepRatio)
	WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "NoRenderTexture", NoRenderTexture)
	WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "FilterType", FilterType)
	WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "HiResTextures", HiResTextures)
	TWinShader := If TWinShader = "true" ? 1 : 0	; Convert texture shader bool into an int before writing to the registry
	WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "TWinShader", TWinShader)
	WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "OffscreenDrawing", OffscreenDrawing)
	WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "FrameTexType", FrameTexType)
	WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "FrameUpload", FrameUpload)
 	; If the shader directory isn't set then disable the other shader settings if the fullscreen shader is 3 or 5.
	If (ShaderDir = "") {
		If (FullscreenShader in 3, 5) {
			WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "FullscreenShader", 0)
			WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "FSShaderLevel", 0)
		} Else {
			WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "FullscreenShader", FullscreenShader)
			WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "FSShaderLevel", FSShaderLevel)
		}
	} Else {
		ShaderDir := GetFullName(ShaderDir) . "\"
		; TODO: Should check that the shader folder/files exist.
		WriteReg("SZ", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "ShaderDir", ShaderDir)
		; TODO: Probably should check that FullscreenShader is set to 3 or 5.
		WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "FullscreenShader", FullscreenShader)
		WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "FSShaderLevel", FSShaderLevel)
 		; Turn these settings off because they'll blur/alter the image before it gets to the shader.
		WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "FilterType", 0)
		WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "HiResTextures", 0)
		WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "FullscreenBlur", 0)
	}
}
 ; Changes fullscreen setting for the gpu plugin.
If (Fullscreen = "true") {
	WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "WindowMode", 0)
} Else {
	WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\"  . GfxPlugin, "WindowMode", 1)
 	If (bezelEnabled = "true") {
		winSize := bezelScreenHeight * 65536 + bezelScreenWidth	; convert desired windowed resolution to Decimal
		WriteReg("DWORD", "Vision Thing\PSEmu Pro\GPU\" . GfxPlugin, "WinSize", winSize)
	}
}
 ; Memory Cards
 defaultMemCard1 := memCardPath . "\_default_001.mcr"	; defining default blank memory card for slot 1
defaultMemCard2 := memCardPath . "\_default_002.mcr"	; defining default blank memory card for slot 2
memCardName := If romTable[1,5] ? romTable[1,4] : romName	; defining rom name for multi disc rom
romMemCard1 := memCardPath . "\" . memCardName . "_001.mcr"		; defining name for rom's memory card for slot 1
romMemCard2 := memCardPath . "\" . memCardName . "_002.mcr"		; defining name for rom's memory card for slot 2
memcardType := If perGameMemCards = "true" ? "rom" : "default"	; define the type of memory card we will create in the below loop
If !FileExist(memCardPath)
	FileCreateDir, %memCardPath%	; create memcard folder if it doesn't exist
Loop 2
{	If !FileExist(%memcardType%MemCard%A_Index%)
	{	FileAppend,, % %memcardType%MemCard%A_Index%		; create a new blank memory card if one does not exist
		Log("Module - Created a new blank memory card in Slot " . A_Index . ":" . %memcardType%MemCard%A_Index%)
	}
	WriteReg("SZ", "epsxe\config", "Memcard" . A_Index, %memcardType%MemCard%A_Index%)
 	; Now disable a memory card if required for the game to boot properly
	memcard%A_Index%Enable := ReadReg("epsxe\config", "Memcard" . A_Index . "Enable")
	If (disableMemoryCard%A_Index% = "true")
		WriteReg("SZ", "epsxe\config", "Memcard" . A_Index . "Enable", 0)
	Else
		WriteReg("SZ", "epsxe\config", "Memcard" . A_Index . "Enable", 1)
}
 hideEmuObj := Object(dialogOpen . " PSX ISO ahk_class #32770",0,"ahk_class EPSXGUI",0,"ePSXe ahk_class EPSX",1)	; Hide_Emu will hide these windows. 0 = will never unhide, 1 = will unhide later
7z(romPath, romName, romExtension, 7zExtractPath)
 epsxeExtension := InStr(".ccd|.cue|.mds|.img|.iso|.pbp",romExtension)	; the psx extensions supported by the emu
 SetKeyDelay(50)
; turboButton := xHotKeyVarEdit(turboButton,"turboButton","~","Add")
xHotKeywrapper(turboButton,"TurboProcess")
turboEnabled := 0				; Initialize turbo state
 RomTableCheck()	; make sure romTable is created already so the next line can calculate correctly
noGUI := If romTable.MaxIndex() ? "" : " -nogui" ; multidisc games will not use nogui because we need to select an option in epsxe's gui to swap discs
slowBoot := If slowBoot = "true" ? " -slowboot" : ""
 If (noGUI = "" && hideEpsxeGUIs = "true") {	; for multi disc games only
	Log("Module - Starting the HideGUIWindow timer to prevent them from showing")
	SetTimer, HideGUIWindow, 10	; start watching for gui window so it can be completely hidden
}
 ; Mount the CD using Virtual Drive
If (epsxeExtension && vdEnabled = "true") {
	Log("Module - Virtual Drive is enabled and " . romExtension . " is a supported Virtual Drive extension")
 	VirtualDrive("get")	; populates the vdDriveLetter variable with the drive letter to your scsi or dt virtual drive
	currentCDRomAscii := ReadReg("epsxe\config", "CdromLetter")	; read the current setting for ePSXe's cdrom it is using
	currentCDRomLetter := Chr(currentCDRomAscii)	; converts the ascii code to a letter
 	If (currentCDRomLetter = "")
		Log("Module - " . MEmu . " is not configured with a CDRom Drive")
	Else If (currentCDRomAscii = 48)
		Log("Module - " . MEmu . " is configured to read from the FirstCdrom Drive and will be updated to a proper letter instead")
	Else
		Log("Module - " . MEmu . " is configured to read from Drive " . currentCDRomLetter . ":")
 	If (currentCDRomLetter != vdDriveLetter) {
		newCDRomAscii := Asc(vdDriveLetter)	; converts the letter to an ascii code
		WriteReg("SZ", "epsxe\config", "CdromLetter", newCDRomAscii)
		Log("Module - Updated " . MEmu . " to use Drive " . vdDriveLetter . ": for all future launches.",2)
	} Else
		Log("Module - " . MEmu . " is configured to use the correct drive already")
 	VirtualDrive("mount",romPath . "\" . romName . romExtension)
	HideEmuStart()	; This fully ensures windows are completely hidden even faster than winwait
	errorLvl := Run(executable . noGUI . slowBoot, emuPath)
	usedVD := 1
} Else {
    If (romExtension = ".pbp") {
		Log("Module - Sending rom to emu directly with the load binary directive.")
		HideEmuStart()	; This fully ensures windows are completely hidden even faster than winwait
		errorLvl := Run(executable . noGUI . slowBoot . " -loadbin """ . romPath . "\" . romName . romExtension . """", emuPath)
    } Else {
		Log("Module - Sending rom to emu directly as Virtual Drive is not enabled or " . romExtension . " is not a supported Virtual Drive extension.")
		HideEmuStart()	; This fully ensures windows are completely hidden even faster than winwait
		errorLvl := Run(executable . noGUI . slowBoot . " -loadiso """ . romPath . "\" . romName . romExtension . """", emuPath)
	}
}
If errorLvl
	ScriptError("Error launching " . executable . "`, closing module.")
 epsxeLaunchType := If usedVD ? "CDROM" : "ISO"	; determines which command gets sent to epsxe
 If (noGUI = "") {	; for multi disc games only
	Log("Module - " . romName . " is a multi-disc game, so launching " . MEmu . " with GUI enabled so swapping can occur.")
	WinWait("ePSXe ahk_class EPSXGUI")
	If (epsxeLaunchType = "CDROM") {
		Log("Module - Telling ePSXe to run a CDROM")
		PostMessage, 0x111, 40001,,,ahk_class EPSXGUI	; Run CDROM
	} Else {
		Log("Module - Telling ePSXe to run an ISO")
		PostMessage, 0x111, 40003,,,ahk_class EPSXGUI	; Run ISO
	}
} Else
	Log("Module - " . romName . " is not a multi-disc game, so launching " . MEmu . " with GUI disabled.")
 If (!usedVD && noGUI = "") {		; for some reason, epsxe still shows an open psx iso box even though it was provided on the run command when we don't also send -nogui. This handles loading the rom.
	Log("Module - " . MEmu . " GUI and DT support are both disabled. Loading rom via the Open PSX ISO window.")
	OpenROM(dialogOpen . " PSX ISO ahk_class #32770", romPath . "\" . romName . romExtension)
}	
 WinWait("ePSXe ahk_class EPSX")
WinWaitActive("ePSXe ahk_class EPSX")
 If (noGUI = "" && hideEpsxeGUIs = "true") {	; for multi disc games only
	Log("Module - Stopping the HideGUIWindow timer")
	SetTimer, HideGUIWindow, Off
}
 BezelDraw()
HideEmuEnd()
FadeInExit()
 If (enableAnalog = "true")
{	Sleep, 1500	; necessary otherwise epsxe doesn't register the key
	Send, {F5 down}{F5 up}
}
 Process("WaitClose", executable)
 If usedVD
	VirtualDrive("unmount")
 7zCleanUp()
BezelExit()
FadeOutExit()
ExitModule()
  ReadReg(var1, var2) {
	RegRead, regValue, HKEY_CURRENT_USER, Software\%var1%, %var2%
	Return %regValue%
}
 WriteReg(type, var1, var2, var3) {
	RegWrite, REG_%type%, HKEY_CURRENT_USER, Software\%var1%, %var2%, %var3%
}
 TurboProcess:
    If (turboEnabled = 0) {
		Send, {Delete}{End}{End}{Delete}
		turboEnabled := 1
    } Else {
		Send, {Delete}{End}{Delete}
		turboEnabled := 0
    }
Return
 HaltEmu:
	If (Fullscreen = "true")
	{	PostMessage, 0x111, 40001,,,ahk_class EPSXGUI	; Go fullscreen, same as alt+enter
		Sleep, 200
	}
Return
 MultiGame:
	; msgbox % "selectedRom = " . selectedRom . "`nselected game = " . currentButton . "`nmgRomPath = " . mgRomPath . "`nmgRomExt = " . mgRomExt . "`nmgRomName = "  . mgRomName
	SetKeyDelay(50)
	If usedVD
	{	VirtualDrive("unmount")	; Unmount the CD from Virtual Drive
		Sleep, 500	; Required to prevent your Virtual Drive app from bugging
		VirtualDrive("mount",selectedRom)	; Mount the CD using Virtual Drive
	}
	ControlSend,, {ESC down}{ESC Up}, ahk_class EPSX	; this exits the game window and brings back ePSXe's gui menu window
	If (hideEpsxeGUIs = "true")
	{	Log("Module - Starting the HideGUIWindow timer to prevent them from showing")
		SetTimer, HideGUIWindow, 10
	}
 	If (epsxeLaunchType = "CDROM") {
		Log("Module - Telling ePSXe to swap to another CDROM")
		PostMessage, 0x111, 40005,,,ahk_class EPSXGUI	; Change Disc CDROM
	} Else {
		Log("Module - Telling ePSXe to swap to another ISO")
		PostMessage, 0x111, 40006,,,ahk_class EPSXGUI	; Change Disc ISO
	}
 	If usedVD
	{	WinWait("Change Disc Option ahk_class #32770")
		ControlSend,Button1,{Enter},Change Disc Option ahk_class #32770
	} Else {
		OpenROM(dialogOpen . " PSX ISO ahk_class #32770", selectedRom)
	}	
	If hideEpsxeGUIs := "true"
	{	Log("Module - Stopping the HideGUIWindow timer")
		SetTimer, HideGUIWindow, off
	}
	; If BezelEnabled
		; BezelDraw()
Return
 RestoreEmu:
	WinActivate, ahk_id  %emulatorID%
	If (Fullscreen = "true")
		PostMessage, 0x111, 40001,,,ahk_class EPSXGUI	; Go fullscreen, same as alt+enter
Return
 HideGUIWindow:
	WinSet, Transparent, On, ePSXe ahk_class EPSXGUI
	WinSet, Transparent, On, Open PSX ISO ahk_class #32770	; when not using DT
	WinSet, Transparent, On, Change Disc Option ahk_class #32770	; when using DT
Return
 CloseProcess:
	FadeOutStart()
	SetWinDelay, 50
	Log("Module - Sending Escape to close emulator")
	If (noGUI = "") {	; for multi disc games only
		PostMessage, 0x111, 40007,,,ahk_class EPSX	; Exit ePSXe, only works when guis are used though, basically when multigame supported games are launched
		WinWait("ePSXe ahk_class EPSXGUI")
		WinClose("ePSXe ahk_class EPSXGUI")
	} Else
		ControlSend,, {Esc down}{Esc up}, ePSXe ahk_class EPSX ; DO NOT CHANGE
Return
 ; PostMessage, 0x111, 40008,,,ahk_class EPSXGUI	; Continue
; PostMessage, 0x111, 40009,,,ahk_class EPSXGUI	; Reset

Comments