Code: Select all
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#SingleInstance force
;SETUP==================================
iniread,Rows,ePSXe Frontend.ini,Rows,Row,Error
If Rows = Error
{
Rows := 5
}
iniread,Width,ePSXe Frontend.ini,Size,Width,Error
ifequal,Width,ERROR
{
Coverwidth := Divide(A_Screenwidth,Rows)
Coverwidth := Subtract(Coverwidth,20)
Coverheight := Subtract(Coverwidth,18)
}
ifnotequal,Width,ERROR
{
Coverwidth := Width
aaab := Divide(A_Screenwidth,Rows)
bbbc := Subtract(aaab,20)
Coverheight := Subtract(bbbc,18)
}
Up := Subtract(A_Screenwidth,60)
count := 0
ButtonsRow := Rows
ButtonsW := Coverwidth
ButtonsH := Coverheight
FileList =
iniread,Image,ePSXe Frontend.ini,Disc,Image,Select Disc image folder
iniread,Coverart,ePSXe Frontend.ini,Coverart,Cover,Error
ifinstring,coverart,Error
coverarta = (Optional, but highly recommended) Select Disc image folder
Else
coverarta = %coverart%
iniread,Emulator,ePSXe Frontend.ini,Emulator,Emulator,Select ePSXe.exe
iniread,Games,ePSXe Frontend.ini,number of games,Count,Error
If Games = Error
Games = 0
;BUTTONS===========================================================
gui,font,s15
Menu,FileMenu,Add,Build wall,Build
Menu,FileMenu,Add,Delete wall,Delete
Menu,FileMenu,Add,Run emulator,StartEmulater
Menu,FileMenu,Add,Setup,Setup
Menu,FileMenu,Add,Exit,Exit
Menu,MyMenuBar,Add,Options,:FileMenu
Gui,Menu,MyMenuBar
Gui,add,button,section x+10 gBuild 0 w0 vControl%count%,Build wall
Gui,font,s20
Gui,add,button,x%Up% gUp,U`nP
Gui,add,button,y+20 vDown gDown,D`nO`nW`nN
Gui,font,s15
while Cpos:=ReadNext(count){
count++
iniread,Icon,ePSXe Frontend.ini,GameLocation,GameLocation%count%
Gui,Add,Picture,gStartGame %Cpos% w%ButtonsW% h%ButtonsH% vControl%count%,%Icon%
}
Gui,Show,maximize
return
MenuFileOpen:
return
MenuHandler:
Return
a::
return
Up:
GuiControlGet,FirstControl,Pos,Control1
ifLess,FirstControlY,15
MoveControls(0,Coverheight)
return
Down:
bottom := Add(ButtonsH,20)
Down := Subtract(A_Screenheight,bottom)
GuiControlGet,FirstControl,Pos,Control%Games%
IfGreater,FirstControlY,%Down%
MoveControls(0,-Coverheight)
Return
Setup:
gui,2:+AlwaysOnTop
gui,2:font,s20
gui,2:default
Gui,2:add,button,xm ym gDisc h50,Select disc image folder
gui,2:add,Edit,y+10 vImagea readonly w1000,%Image%
Gui,2:add,button,y+10 gEmulator h50,Select emulator
gui,2:add,Edit,y+10 vEmu readonly w1000,%Emulator%
Gui,2:add,button,y+10 gArt h50,Select disc Cover art folder
gui,2:add,Edit,y+10 vCover readonly w1000,%Coverarta%
gui,2:add,button,y+10 x15 h50 gSubmit,Submit
gui,2:add,edit,x+10 h50 vEdit w50,%Rows%
Gui,2:add,text,x+10,pictures across.
gui,2:add,button,x17 y+25 gCancel,Close
gui,2:show,autosize
Return
Cancel:
gui,2:destroy
Return
Art:
gui,submit,nohide
Fileselectfolder,Coverart
iniwrite,%Coverart%,ePSXe Frontend.ini,Coverart,Cover
guicontrol,text,Cover,%Coverart%
return
Emulator:
gui,submit,nohide
Fileselectfile,Emulator,,,,(*.exe)
Iniwrite,%emulator%,ePSXe Frontend.ini,Emulator,Emulator
guicontrol,text,Emu,%emulator%
return
Disc:
gui,submit,nohide
fileselectfolder,Disc
iniwrite,%Disc%,ePSXe Frontend.ini,Disc,Image
guicontrol,text,Imagea,%disc%
Return
Build:
if Image = Error
Msgbox no disc image folder found.
for i,ext in ["img","bin","iso","ccd","cue","mds","pbp","ecm"]
{
Loop,%Image%\*.%ext%
{
ImageCount++
FileList = %FileList%%A_LoopFileName%`n
Sort,FileList,
}
}
Tilearea := Subtract(A_Screenwidth,100)
Tilesize := Multiply(ButtonsRow,ButtonsW)
ifgreater,Tilesize,%Tilearea%
{
ButtonsW := Divide(Tilearea,ButtonsRow)
iniwrite,%ButtonsW%,ePSXe Frontend.ini,Size,Width
}
ifLess,Tilesize,%Tilearea%
{
SizeDifference:= Subtract(Tilearea,Tilesize)
NewSize := Divide(SizeDifference,ButtonsRow)
ButtonsW := Add(ButtonsW,NewSize)
iniwrite,%ButtonsW%,ePSXe Frontend.ini,Size,Width
}
Loop,parse,FileList,`n
{
GamesName++
if A_LoopField =
continue
iniwrite,%A_LoopField%,ePSXe Frontend.ini,GameName,GameName%GamesName%
iniwrite,%GamesName%,ePSXe Frontend.ini,number of games,Count
}
iniread,ini,ePSXe Frontend.ini,AlreadyBuilt,Stopped
ifinstring,ini,stop
{
msgbox Folder already searched.
}
else
{
GuiControl,Disable,Down
Loop,parse,FileList,`n
{
if A_LoopField =
continue
StringTrimRight,C_LoopField,A_LoopField,4
GuiControlGet,pos,pos,Control%count%
count++
NewlyAddedPos := mod(count,ButtonsRow) ? ("x" posx+ButtonsW " y" posy) : ("xm" " y" posy+ButtonsH)
ifinstring Coverart,Error
Gui,Add,Picture,gStartGame %NewlyAddedPos% w%ButtonsW% h%ButtonsH% vControl%count%,%C_LoopField%
else
Gui,Add,Picture,gStartGame %NewlyAddedPos% w%ButtonsW% h%ButtonsH% vControl%count%,%Coverart%\%C_LoopField%.ico
IniWrite,%NewlyAddedPos%,ePSXe Frontend.ini,Buttons,Control%count%
IniWrite,xm y18,ePSXe Frontend.ini,Buttons,Control1 ;First controls position.
guicontrol,move,Control1,x18 y18
Gui,Show,AutoSize maximize
iniwrite,stop,ePSXe Frontend.ini,AlreadyBuilt,Stopped
iniwrite,%Coverart%\%C_LoopField%.ico,ePSXe Frontend.ini,GameLocation,GameLocation%count%
Games = %Count%
Guicontrol,text,Gamenumber,%Games% games found
if (!Mod(A_Index,rows))
{
GameCount = %count%
TilesAcross := Add(GameCount,1)
}
if count = %TilesAcross%
{
NewlyAddedPosb := ("x18" " y" posy+ButtonsH)
guicontrol,move,Control%count%,%NewlyAddedPosb%
IniWrite,%NewlyAddedPosb%,ePSXe Frontend.ini,Buttons,Control%count%
}
if (!Mod(A_Index,rows))
{
NewlyAddedPosa := ("x" posx+ButtonsW " y" posy)
guicontrol,move,Control%count%,%NewlyAddedPosa%
IniWrite,%NewlyAddedPosa%,ePSXe Frontend.ini,Buttons,Control%count%
}
ifequal,Count,%ImageCount%
{
GuiControl,Enable,Down
}
}
}
return
StartGame:
if A_GuiEvent = DoubleClick
{
Stringtrimleft,number,A_GuiControl,7
iniread,Games,ePSXe Frontend.ini,GameName,GameName%number%
Run,"%Emulator%" -loadbin "%image%\%games%" -nogui
}
return
Delete:
inidelete,ePSXe Frontend.ini,Buttons
inidelete,ePSXe Frontend.ini,AlreadyBuilt
inidelete,ePSXe Frontend.ini,GameLocation
inidelete,ePSXe Frontend.ini,GameName
Inidelete,ePSXe Frontend.ini,number of games
reload
return
StartEmulater:
if not A_IsAdmin
{
Run *RunAs %Emulator%
}
Return
Submit:
gui,submit,nohide
iniwrite,%Edit%,ePSXe Frontend.ini,Rows,Row
Gosub,Delete
return
Exit:
GuiEscape:
GuiClose:
ExitApp
return
ReadNext(Previous){
Previous++
IniRead,ButtonsPos,ePSXe Frontend.ini,Buttons,Control%Previous%,%A_Space%
return,ButtonsPos
}
MoveControls(XShift,YShift)
{
WinGet,ListOfControls,ControlList
Loop,Parse,ListOfControls,`n,`r
{
GuiControlGet,ControlName,Name,%A_LoopField%
If InStr(ControlName,"Control")
{
GuiControlGet,Pos,Pos,%ControlName%
NewX := PosX + XShift
NewY := PosY + YShift
GuiControl,MoveDraw,%ControlName%,x%NewX% y%NewY%
}
}
Return
}
Add(x,y)
{
return x + y
}
Divide(x,y)
{
return x / y
}
Subtract(x,y)
{
return x - y
}
Multiply(x,y)
{
return x * y
}