Files
ZSNES/zsnes/src/gui/guimouse.inc

3417 lines
77 KiB
PHP

;Copyright (C) 1997-2006 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
;
;http://www.zsnes.com
;http://sourceforge.net/projects/zsnes
;
;This program is free software; you can redistribute it and/or
;modify it under the terms of the GNU General Public License
;as published by the Free Software Foundation; either
;version 2 of the License, or (at your option) any later
;version.
;
;This program is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;GNU General Public License for more details.
;
;You should have received a copy of the GNU General Public License
;along with this program; if not, write to the Free Software
;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
%ifdef __WIN32__
EXTSYM MinimizeWindow
%endif
SECTION .bss
lastmouseholded resb 1
mousebuttonstat resw 1
MouseMoveOkay resb 1
LastHoldEnable resb 1
SECTION .text
ProcessMouse:
; Process holds
mov al,[GUIHold]
cmp al,[LastHoldEnable]
je near .noholdnecessary
cmp byte[GUIHold],0
jne .noholda
mov ecx,0
mov edx,255
call Set_MouseXMax
mov ecx,0
mov edx,223
call Set_MouseYMax
.noholda
cmp byte[GUIHold],1 ; GUI Windows
jne .nohold1
mov ecx,0
mov edx,255
call Set_MouseXMax
mov ecx,16
mov edx,223
call Set_MouseYMax
.nohold1
cmp byte[GUIHold],5 ; Sound Slider
je .dohold5
cmp byte[GUIHold],6 ; Speed Slider
je .dohold5
cmp byte[GUIHold],2 ; Colour Slider
jne .nohold2m
.dohold5
mov ecx,[GUIHoldXlimL] ; Sets min/max move range for mouse
mov edx,[GUIHoldXlimR] ; once holding slider
call Set_MouseXMax
mov ecx,[GUIHoldYlim] ; Locks pointer on slider
mov edx,[GUIHoldYlim]
call Set_MouseYMax
.nohold2m
cmp byte[GUIHold],3 ; Scrollbars
jne .nohold3m
mov ecx,[GUIHoldXlimL]
mov edx,[GUIHoldXlimR]
call Set_MouseXMax
mov ecx,[GUIHoldYlim]
mov edx,[GUIHoldYlimR]
call Set_MouseYMax
.nohold3m
mov al,[GUIHold]
mov [LastHoldEnable],al
.noholdnecessary
mov byte[MouseMoveOkay],0
call Get_MouseData
mov [mousebuttonstat],bx
cmp byte[lastmouseholded],0
je .noprevhold
test bx,01h
jnz .noprevhold
mov byte[lastmouseholded],0
mov cx,[GUImouseposx]
mov dx,[GUImouseposy]
call Set_MousePosition
.noprevhold
cmp byte[mousewrap],1
je near ProcessMouseWrap
call Get_MouseData
cmp word[GUImouseposx],cx
je .zero2
mov byte[MouseMoveOkay],1
.zero2
cmp word[GUImouseposy],dx
je .zero3
mov byte[MouseMoveOkay],1
.zero3
mov [GUImouseposx],cx
test word[GUImouseposx],8000h
jz .nowrapleft
mov word[GUImouseposx],0
.nowrapleft
cmp word[GUImouseposx],255
jbe .nowrapright
mov word[GUImouseposx],255
.nowrapright
mov [GUImouseposy],dx
test word[GUImouseposy],8000h
jz .nowrapup
mov word[GUImouseposy],0
.nowrapup
cmp word[GUImouseposy],223
jbe .nowrapdown
mov word[GUImouseposy],100
.nowrapdown
jmp ProcessMouseButtons
ProcessMouseWrap:
call Get_MousePositionDisplacement
add word[GUImouseposx],cx
.again
test word[GUImouseposx],8000h
jz .nowrapleft
add word[GUImouseposx],256
jmp .again
.nowrapleft
cmp word[GUImouseposx],255
jbe .nowrapright
sub word[GUImouseposx],256
jmp .again
.nowrapright
add word[GUImouseposy],dx
.again2
test word[GUImouseposy],8000h
jz .nowrapup
add word[GUImouseposy],224
jmp .again2
.nowrapup
cmp word[GUImouseposy],223
jbe .nowrapdown
cmp byte[GUIHold],1
jne .nohold
sub word[GUImouseposy],224-16
jmp .again2
.nohold
sub word[GUImouseposy],224
jmp .again2
.nowrapdown
cmp dx,0
jne .nozero
cmp cx,0
je .zero
.nozero
mov byte[MouseMoveOkay],1
.zero
ProcessMouseButtons:
cmp byte[MouseMoveOkay],1
jne .zero
mov byte[GUIOnMenuItm],0
mov ax,[GUImouseposx]
cmp ax,[GUIMenuL]
jbe .zero
cmp ax,[GUIMenuR]
jae .zero
mov ax,[GUImouseposy]
cmp ax,18
jbe .zero
cmp ax,[GUIMenuD]
jae .zero
; Mouse Menu
xor dx,dx
sub ax,18
mov bx,10
div bx
and eax,0FFh
mov ebx,[GUICYLocPtr]
mov byte[GUIOnMenuItm],2
cmp byte[eax+ebx+1],0
je .zero
mov [GUIcrowpos],al
mov byte[GUIOnMenuItm],1
.zero
; Check if mouse is clicked on menu
mov bx,[mousebuttonstat]
cmp byte[GUIClick],1
jne .norclick2
test bx,02h
jz .norclick
cmp byte[romloadskip],0
jne .norclick2
cmp byte[MousePRClick],0
jne .norclick2
mov byte[GUIQuit],2
.norclick
mov byte[MousePRClick],0
.norclick2
test bx,01h
jz near .notclicked
cmp byte[GUIpclicked],1
je near .noclick
cmp byte[GUIOnMenuItm],2
je near .noclick
cmp byte[GUIOnMenuItm],1
jne .nomenuitem
call GUITryMenuItem
jmp .noclick
.nomenuitem
cmp word[GUImouseposy],3
jb near .noclickedw
cmp word[GUImouseposy],14
ja near .noclickedw
cmp word[GUImouseposx],230
jb near .noclickedw
cmp word[GUImouseposx],233
jb near .noclickedw
cmp word[GUImouseposx],242
ja .notfound7
%ifdef __UNIXSDL__
jmp .clickawn
%endif
cmp word[GUImouseposy],8
jb .clickawn
cmp word[GUImouseposy],8
ja .clickawn2
.clickawn
mov byte[GUIcwinpress],1
jmp .noclick
.clickawn2
mov byte[GUIcwinpress],3
jmp .noclick
.notfound7
cmp word[GUImouseposx],244
jb near .noclickedw
cmp word[GUImouseposx],253
ja .notfound8
mov byte[GUIcwinpress],2
jmp .noclick
.notfound8
.noclickedw
cmp word[GUImouseposy],15
ja near .nomenu
cmp word[GUImouseposy],3
jb near .noclicked
cmp word[GUImouseposy],13
ja near .noclicked
; GUIDMHelp 4,12,GUIMenuItem+6,1
cmp word[GUImouseposx],4
jb near .noclicked
cmp word[GUImouseposx],12
ja .notfound
mov byte[GUIcmenupos],1
mov byte[GUIcrowpos],0
jmp .noclick
.notfound
; GUIDMHelp 17,47,GUIMenuItem,2
cmp word[GUImouseposx],17
jb near .noclicked
cmp word[GUImouseposx],47
ja .notfound2
mov byte[GUIcmenupos],2
mov byte[GUIcrowpos],0
jmp .noclick
.notfound2
; GUIDMHelp 52,94,GUIMenuItem+7,3
cmp word[GUImouseposx],52
jb near .noclicked
cmp word[GUImouseposx],94
ja .notfound3
mov byte[GUIcmenupos],3
mov byte[GUIcrowpos],0
jmp .noclick
.notfound3
; GUIDMHelp 99,135,GUIMenuItem+14,4
cmp word[GUImouseposx],99
jb near .noclicked
cmp word[GUImouseposx],135
ja .notfound4
mov byte[GUIcmenupos],4
mov byte[GUIcrowpos],0
jmp .noclick
.notfound4
; GUIDMHelp 140,188,GUIMenuItem+21,5
cmp word[GUImouseposx],140
jb near .noclicked
cmp word[GUImouseposx],188
ja .notfound5
mov byte[GUIcmenupos],5
mov byte[GUIcrowpos],0
jmp .noclick
.notfound5
; GUIDMHelp 193,223,GUIMenuItem+29,6
cmp word[GUImouseposx],193
jb near .noclicked
cmp word[GUImouseposx],223
ja .notfound6
mov byte[GUIcmenupos],6
mov byte[GUIcrowpos],0
jmp .noclick
.notfound6
jmp .noclick
.noclicked
%ifdef __MSDOS__
jmp .noclick
%else
mov byte[GUIpclicked],1
mov byte[GUIHold],255
mov eax,[GUImouseposy]
mov [GUIHoldYlim],eax
mov eax,[GUImouseposx]
mov [GUIHoldXlimL],eax
call MouseWindow
jmp .noclick
%endif
.nomenu
cmp byte[GUIcmenupos],0
je near .checkmenuboxclick
mov al,[GUIcmenupos]
mov [GUIpmenupos],al
mov byte[GUIcmenupos],0
.noclick
mov byte[GUIpclicked],1
xor eax,eax
mov al,[GUIwinptr]
dec eax
xor ebx,ebx
mov bl,[GUIwinorder+eax]
cmp byte[GUIHold],2
je .hold2
cmp byte[GUIHold],3
je near .hold3
cmp byte[GUIHold],4
je near .hold4
cmp byte[GUIHold],5
je near .hold5
cmp byte[GUIHold],6
je near .hold6
cmp byte[GUIHold],1
je near .hold
cmp byte[GUIHold],255
je .holded
mov byte[GUICHold],0
ret
.holded
mov eax,[GUIHoldYlim]
mov [GUImouseposy],eax
mov eax,[GUIHoldXlimL]
mov [GUImouseposx],eax
mov cx,[GUIHoldXlimL]
mov dx,[GUIHoldYlim]
call Set_MousePosition
ret
.hold2
; Colour Slide Bar Hold
mov eax,[GUIHoldYlim]
mov [GUImouseposy],eax
mov ebx,[GUImouseposx]
mov eax,[GUIHoldXlimL]
cmp ebx,eax
jnl .noless2
mov [GUImouseposx],eax
.noless2
mov eax,[GUIHoldXlimR]
cmp ebx,eax
jng .nogreat2
mov [GUImouseposx],eax
.nogreat2
mov byte[lastmouseholded],1
jmp DisplayGUIOptnsClick
.hold3
; Box Hold
mov ebx,[GUIHoldYlim]
cmp ebx,[GUImouseposy]
jl .boxhold1
mov [GUImouseposy],ebx
.boxhold1
mov ebx,[GUIHoldXlimL]
cmp ebx,[GUImouseposx]
jl .boxhold2
mov [GUImouseposx],ebx
.boxhold2
mov ebx,[GUIHoldYlimR]
cmp ebx,[GUImouseposy]
jg .boxhold3
mov [GUImouseposy],ebx
.boxhold3
mov ebx,[GUIHoldXlimR]
cmp ebx,[GUImouseposx]
jg .boxhold4
mov [GUImouseposx],ebx
.boxhold4
mov byte[lastmouseholded],1
jmp GUIWindowMove
.hold4
mov eax,[GUImouseposx]
sub eax,[GUIwinposx+ebx*4]
mov edx,[GUImouseposy]
sub edx,[GUIwinposy+ebx*4]
cmp eax,[GUIHoldXlimL]
jl near .nobhold4
cmp edx,[GUIHoldYlim]
jl near .nobhold4
cmp eax,[GUIHoldXlimR]
jg near .nobhold4
cmp edx,[GUIHoldYlimR]
jg near .nobhold4
mov al,[GUICBHold2]
mov [GUICBHold],al
ret
.nobhold4
mov byte[GUICBHold],0
ret
.hold5
; Sound Slide Bar Hold
mov eax,[GUIHoldYlim]
mov [GUImouseposy],eax
mov ebx,[GUImouseposx]
mov eax,[GUIHoldXlimL]
cmp ebx,eax
jnl .noless5
mov [GUImouseposx],eax
.noless5
mov eax,[GUIHoldXlimR]
cmp ebx,eax
jng .nogreat5
mov [GUImouseposx],eax
.nogreat5
mov byte[lastmouseholded],1
jmp DisplayGUISoundClick
.hold6
; Speed Slide Bar Hold
mov eax,[GUIHoldYlim]
mov [GUImouseposy],eax
mov ebx,[GUImouseposx]
mov eax,[GUIHoldXlimL]
cmp ebx,eax
jnl .noless6
mov [GUImouseposx],eax
.noless6
mov eax,[GUIHoldXlimR]
cmp ebx,eax
jng .nogreat6
mov [GUImouseposx],eax
.nogreat6
mov byte[lastmouseholded],1
jmp DisplayGUISpeedClick
.hold
cmp word[GUImouseposy],16
jge .noover
test byte[mousewrap],1
jz .nomwrap
add word[GUImouseposy],224-16
jmp .hold
.nomwrap
mov word[GUImouseposy],16
.noover
mov cx,[GUImouseposy]
sub cx,[GUIHoldy]
add cx,[GUIHoldym]
movsx ecx,cx
xor eax,eax
mov al,[GUIwinptr]
dec eax
xor ebx,ebx
mov bl,[GUIwinorder+eax]
mov [GUIwinposy+ebx*4],ecx
mov cx,[GUImouseposx]
sub cx,[GUIHoldx]
add cx,[GUIHoldxm]
movsx ecx,cx
mov [GUIwinposx+ebx*4],ecx
ret
.notclicked
mov byte[GUICHold],0
mov byte[GUIpclicked],0
mov byte[GUIHold],0
%ifdef __UNIXSDL__
cmp byte[GUIcwinpress],1
jne .notwinpressa
mov byte[GUIcwinpress],0
cmp word[GUImouseposy],3
jb .notwinpressa
cmp word[GUImouseposy],13
ja .notwinpressa
cmp word[GUImouseposx],233
jb .notwinpressa
cmp word[GUImouseposx],242
ja .notwinpressa
call SwitchFullScreen
ret
%endif
%ifdef __WIN32__
cmp byte[GUIcwinpress],1
jne .notwinpressa
mov byte[GUIcwinpress],0
cmp word[GUImouseposy],3
jb .notwinpressa
cmp word[GUImouseposy],7
ja .notwinpressa
cmp word[GUImouseposx],233
jb .notwinpressa
cmp word[GUImouseposx],242
ja .notwinpressa
call SwitchFullScreen
ret
%endif
.notwinpressa
%ifndef __MSDOS__
cmp byte[GUIcwinpress],2
jne .notwinpressb
mov byte[GUIcwinpress],0
cmp word[GUImouseposy],3
jb .notwinpressb
cmp word[GUImouseposy],13
ja .notwinpressb
cmp word[GUImouseposx],244
jb .notwinpressb
cmp word[GUImouseposx],253
ja .notwinpressb
mov byte[GUIQuit],1
ret
.notwinpressb
cmp byte[GUIcwinpress],3
jne .notwinpressc
mov byte[GUIcwinpress],0
cmp word[GUImouseposy],9
jb .notwinpressc
cmp word[GUImouseposy],13
ja .notwinpressc
cmp word[GUImouseposx],233
jb .notwinpressc
cmp word[GUImouseposx],242
ja .notwinpressc
%endif
%ifdef __WIN32__
pushad
call MinimizeWindow
popad
%endif
%ifndef __MSDOS__
ret
%endif
.notwinpressc
; ButtonProcess
cmp byte[GUICBHold],1
je near GUILoadData
cmp byte[GUICBHold],2
je near GUIProcReset
cmp byte[GUICBHold],3
je near GUIProcReset
cmp byte[GUICBHold],4
je near GUIProcVideo
cmp byte[GUICBHold],10
je near GUIProcStates
cmp byte[GUICBHold],11
je near GUIProcStates
cmp byte[GUICBHold],5
je near CheatCodeRemove
cmp byte[GUICBHold],6
je near CheatCodeToggle
cmp byte[GUICBHold],7
je near CheatCodeSave
cmp byte[GUICBHold],8
je near CheatCodeLoad
cmp byte[GUICBHold],9
je near ProcessCheatCode
cmp byte[GUICBHold],33
je near CheatCodeFix
cmp byte[GUICBHold],14
je near SetDevice
cmp byte[GUICBHold],15
je near CalibrateDev1
cmp byte[GUICBHold],16 ; movie replay
jne .notMoviePlay
mov byte[GUICBHold],0
pushad
call MoviePlay
popad
ret
.notMoviePlay
cmp byte[GUICBHold],17
jne .notMovieRecord0 ; movie record
mov byte[GUICBHold],0
pushad
call MovieRecord
popad
ret
.notMovieRecord0
cmp byte[GUICBHold],18 ; movie stop
jne .notMovieStop
mov byte[GUICBHold],0
pushad
call MovieStop
popad
ret
.notMovieStop
cmp byte[GUICBHold],19 ; overwrite zmv ? yes
jne .notMovieRecord1
mov byte[GUICBHold],0
pushad
call MovieRecord
popad
ret
.notMovieRecord1
cmp byte[GUICBHold],20 ; overwrite zmv ? no
jne .notSkipMovie
mov byte[GUICBHold],0
pushad
call SkipMovie
popad
ret
.notSkipMovie
cmp byte[GUICBHold],29 ; insert chapter
jne .noInsertChap
mov byte[GUICBHold],0
pushad
call MovieInsertChapter
popad
ret
.noInsertChap
cmp byte[GUICBHold],30 ; back to previous chapter
jne .noPrevChap
mov byte[GUICBHold],0
mov byte[GUIQuit],2
pushad
call MovieSeekBehind
popad
ret
.noPrevChap
cmp byte[GUICBHold],31 ; jump to next chapter
jne .noNextChap
mov byte[GUICBHold],0
mov byte[GUIQuit],2
pushad
call MovieSeekAhead
popad
ret
.noNextChap
cmp byte[GUICBHold],32 ; append movie
jne .noAppend
mov byte[GUICBHold],0
mov byte[GUIQuit],2
pushad
;call MovieAppend
popad
ret
.noAppend
cmp byte[GUICBHold],34 ; dump raw
jne .noDumpRaw
mov byte[GUICBHold],0
mov byte[GUIQuit],2
pushad
call MovieDumpRaw
popad
cmp byte[MovieVideoMode],2
jb .nomencoder
cmp byte[mencoderExists],0
jne .nomencoder
call guimencodermsg
.nomencoder
ret
.noDumpRaw
cmp byte[GUICBHold],40
je near SetAllKeys
cmp byte[GUICBHold],50
jne .notstartcheat
call CheatCodeSearchInit
.notstartcheat
cmp byte[GUICBHold],60
jne .nocombclear
mov byte[GUIComboTextH],0
mov byte[GUINumCombo],0
mov dword[GUIComboKey],0
.nocombclear
cmp byte[GUICBHold],61
jne .nocomboadd
cmp byte[NumCombo],50
je .nocomboadd
call ComboAdder
.nocomboadd
cmp byte[GUICBHold],62
jne .nocomboreplace
cmp byte[NumCombo],0
je .nocomboreplace
call ComboReplace
.nocomboreplace
cmp byte[GUICBHold],63
jne .nocomboremove
cmp byte[NumCombo],0
je .nocomboremove
call ComboRemoval
.nocomboremove
cmp byte[GUICBHold],51
jne .notrestartcheat
mov byte[CheatWinMode],0
mov byte[CheatSearchStatus],0
.notrestartcheat
cmp byte[GUICBHold],52
jne .notviewcheat
mov byte[CheatWinMode],2
.notviewcheat
cmp byte[GUICBHold],53
jne .notsearchprocess
call CheatCodeSearchProcess
.notsearchprocess
cmp byte[GUICBHold],54
jne .notreturnview
mov byte[CheatWinMode],1
.notreturnview
cmp byte[GUICBHold],55
jne .notadd
cmp dword[NumCheatSrc],0
je .notadd
mov byte[CheatWinMode],3
mov byte[CurCStextpos],0
mov byte[CSInputDisplay],'_'
mov byte[CSInputDisplay+1],0
mov byte[CSDescDisplay],0
.notadd
cmp byte[GUICBHold],56
jne .notreturnadd
mov byte[CheatWinMode],2
.notreturnadd
cmp byte[GUICBHold],57
jne .noinsertscc
call AddCSCheatCode
; call InsertSearchDescription
.noinsertscc
%ifndef __MSDOS__
cmp byte[GUICBHold],65
jne .nozsnespage
pushad
call ZsnesPage
popad
.nozsnespage
cmp byte[GUICBHold],66
jne .nodocspage
pushad
call DocsPage
popad
.nodocspage
%endif
mov byte[GUICBHold],0
ret
.checkmenuboxclick
mov byte[GUIpclicked],1
xor eax,eax
mov al,[GUIwinptr]
or eax,eax
jz near .nomore
dec eax
xor ebx,ebx
mov bl,[GUIwinorder+eax]
mov ecx,[GUIwinposx+ebx*4]
cmp ecx,[GUImouseposx]
jge .noinsdwin
mov ecx,[GUIwinposy+ebx*4]
cmp ecx,[GUImouseposy]
jge .noinsdwin
mov ecx,[GUIwinposx+ebx*4]
add ecx,[GUIwinsizex+ebx*4]
cmp ecx,[GUImouseposx]
jle .noinsdwin
mov ecx,[GUIwinposy+ebx*4]
add ecx,[GUIwinsizey+ebx*4]
add ecx,10
cmp ecx,[GUImouseposy]
jle .noinsdwin
jmp GUIWinClicked
.noinsdwin
.nextwindowfind
or eax,eax
jz near .nomore
dec eax
mov bl,[GUIwinorder+eax]
mov ecx,[GUIwinposx+ebx*4]
cmp ecx,[GUImouseposx]
jge .nextwindowfind
mov ecx,[GUIwinposy+ebx*4]
cmp ecx,[GUImouseposy]
jge .nextwindowfind
mov ecx,[GUIwinposx+ebx*4]
add ecx,[GUIwinsizex+ebx*4]
cmp ecx,[GUImouseposx]
jle .nextwindowfind
mov ecx,[GUIwinposy+ebx*4]
add ecx,[GUIwinsizey+ebx*4]
add ecx,10
cmp ecx,[GUImouseposy]
jle .nextwindowfind
; Shift all following windows downwards by 1
.nextfind
inc eax
cmp al,[GUIwinptr]
je .foundend
mov cl,[GUIwinorder+eax]
mov [GUIwinorder+eax-1],cl
jmp .nextfind
.foundend
mov byte[GUIpclicked],0
mov [GUIwinorder+eax-1],bl
ret
.nomore
cmp dword[SantaPos],272
je .nosanta
cmp byte[ShowTimer],0
jne .nosanta
mov dword[MsgGiftLeft],36*4
mov byte[ShowTimer],1
.nosanta
ret
GUIProcVideo:
%ifdef __MSDOS__
mov al,[GUIcurrentvideocursloc]
cmp al,3
je .yes16b
cmp al,5
je .yes16b
cmp al,7
je .yes16b
cmp al,10
je .yes16b
cmp al,8
jne .no16b
.yes16b
%endif
; mov byte[newengen],0
; mov byte[cfgnewgfx],0
; jmp .skipno16b
.no16b
mov byte[newengen],1
mov byte[cfgnewgfx],1
.skipno16b
mov byte[GUICBHold],0
call guiprevideo
mov al,[cvidmode]
mov [.prevvid],al
mov al,[GUIcurrentvideocursloc]
mov [cvidmode],al
mov byte[ExitFromGUI],1
call initvideo
cmp byte[videotroub],1
je .failed
call GUISetPal
mov al,[cvidmode]
mov [cfgcvidmode],al
call guipostvideo
cmp dword[GUIkeydelay],0
je .failed2
mov dword[GUIkeydelay],0
ret
.fullsc
mov [PrevFSMode],al
ret
.failed
mov byte[videotroub],0
mov al,[.prevvid]
mov [cvidmode],al
mov [cfgcvidmode],al
call initvideo
call GUISetPal
call guipostvideofail
mov dword[GUIkeydelay],0
ret
.failed2
mov byte[videotroub],0
mov al,[.prevvid]
mov [cvidmode],al
mov [cfgcvidmode],al
call initvideo
call GUISetPal
call vidpastecopyscr
mov dword[GUIkeydelay],0
ret
SECTION .bss
.prevvid resb 1
SECTION .text
NEWSYM SwitchFullScreen
pushad
; mov ecx,255*296
; mov eax,[vidbufferofsb]
;.loop
; mov dword[eax],0FEFEFEFEh
; add eax,4
; dec ecx
; jnz .loop
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIWFVID+eax],0
je .fullsc
mov al,[PrevWinMode]
mov [cvidmode],al
mov [cfgcvidmode],al
call initvideo
popad
ret
.fullsc
mov al,[PrevFSMode]
mov [cvidmode],al
mov [cfgcvidmode],al
call initvideo
popad
ret
GUIWindowMove:
xor eax,eax
mov al,[GUIwinptr]
dec eax
xor ebx,ebx
mov bl,[GUIwinorder+eax]
mov eax,[GUImouseposx]
sub eax,[GUIwinposx+ebx*4]
mov edx,[GUImouseposy]
sub edx,[GUIwinposy+ebx*4]
cmp ebx,13
je near DisplayGUICheatSearchClick2
cmp ebx,7
je near DisplayGUICheatClick2
cmp ebx,5
je near DisplayGUIVideoClick2
cmp ebx,3
je near DisplayGUIInputClick2
cmp ebx,16
je near DisplayGUIComboClick2
jmp DisplayGUIConfirmClick2
GUIWinClicked:
mov ecx,[GUImouseposx]
sub ecx,[GUIwinposx+ebx*4]
mov edx,[GUImouseposy]
sub edx,[GUIwinposy+ebx*4]
mov esi,ecx
sub esi,[GUIwinsizex+ebx*4]
add esi,10
cmp esi,-1
jle .noclose
cmp esi,10
jge .noclose
cmp edx,0
jle .noclose
cmp edx,10
jge .noclose
mov byte[GUIwinorder+eax],0
mov byte[GUIwinactiv+ebx],0
dec byte[GUIwinptr]
ret
.noclose
cmp edx,10
jge .nomove
mov byte[GUIHold],1
mov ax,[GUIwinposx+ebx*4]
movsx eax,ax
mov [GUIHoldxm],eax
mov ax,[GUIwinposy+ebx*4]
movsx eax,ax
mov [GUIHoldym],eax
xor eax,eax
mov ax,[GUImouseposx]
mov [GUIHoldx],eax
mov ax,[GUImouseposy]
mov [GUIHoldy],eax
ret
.nomove
mov eax,[GUImouseposx]
sub eax,[GUIwinposx+ebx*4]
mov edx,[GUImouseposy]
sub edx,[GUIwinposy+ebx*4]
cmp ebx,1
je near DisplayGUIConfirmClick
cmp ebx,2
je near DisplayGUIChoseSaveClick
cmp ebx,3
je near DisplayGUIInputClick
cmp ebx,4
je near DisplayGUIOptionClick
cmp ebx,5
je near DisplayGUIVideoClick
cmp ebx,6
je near DisplayGUISoundClick
cmp ebx,7
je near DisplayGUICheatClick
cmp ebx,8
je near DisplayNetOptnsClick
cmp ebx,9
je near DisplayGameOptnsClick
cmp ebx,10
je near DisplayGUIOptnsClick
cmp ebx,11
je near DisplayGUIAboutClick
cmp ebx,12
je near DisplayGUIResetClick
cmp ebx,13
je near DisplayGUICheatSearchClick
cmp ebx,14
je near DisplayGUIStatesClick
cmp ebx,15
je near DisplayGUIMovieClick
cmp ebx,16
je near DisplayGUIComboClick
cmp ebx,17
je near DisplayGUIAddOnClick
cmp ebx,18
je near DisplayGUIChipClick
cmp ebx,19
je near DisplayGUIPathsClick
cmp ebx,20
je near DisplayGUISaveClick
cmp ebx,21
je near DisplayGUISpeedClick
ret
%macro GUIClickCButton 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
%%noclick
%endmacro
%macro GUIClickCButtonat 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
call guimustrestartmsg
%%noclick
%endmacro
%macro GUIClickCButtonf 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
%ifdef __WIN32__
pushad
call %4
popad
%endif
%%noclick
%endmacro
%macro GUIClickCButtonfT 5
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
mov %4,0
%ifdef __WIN32__
pushad
call %5
popad
%endif
%%noclick
%endmacro
%macro GUIClickCButtonC 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
mov dword[GUIccombviewloc],0
mov dword[GUIccombcursloc],0
mov dword[GUIccomblcursloc],0
%%noclick
%endmacro
%macro GUIClickCButtonN 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
mov %3,%4
%%noclick
%endmacro
%macro GUIClickCButtonO 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
push eax
xor %3,1
mov al,%3
mov [bgfixer],al
pop eax
%%noclick
%endmacro
%macro GUIClickCButtonM 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
mov byte[MultiTap],1
cmp byte[pl12s34],1
je .nomtap
cmp byte[pl3contrl],0
jne .mtap
cmp byte[pl4contrl],0
jne .mtap
cmp byte[pl5contrl],0
jne .mtap
.nomtap
mov byte[MultiTap],0
.mtap
%%noclick
%endmacro
%macro GUIClickCButtonID 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
call SetDevice
%%noclick
%endmacro
%macro GUIClickCButton2 5
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,%5
mov al,%3
mov %4,al
ret
%%noclick
%endmacro
%ifndef __UNIXSDL__
%macro GUIClickCButton2r 5
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,%5
mov al,%3
mov %4,al
%ifdef __WIN32__
pushad
call initDirectDraw
popad
%endif
ret
%%noclick
%endmacro
%endif
%macro GUIClickCButton3 5
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,%5
mov al,%3
mov %4,al
call ClearScreen
push eax
push ecx
mov eax,[vidbufferofsb]
mov ecx,288*128
%%loop
mov dword[eax],0
add eax,4
; loop %%loop
dec ecx
jnz %%loop
pop ecx
pop eax
ret
%%noclick
%endmacro
%macro GUIClickCButton5 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
cmp %3,%4
jne %%set
xor %3,%4
jmp %%clear
%%set
mov %3,%4
%%clear
ret
%%noclick
%endmacro
%macro GUIClickCButton6 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
cmp %3,%4
jne %%set
xor %3,%4
jmp %%clear
%%set
mov %3,%4
push eax
push ecx
mov eax,[vidbufferofsb]
mov ecx,288*128
%%loop
mov dword[eax],0
add eax,4
; loop %%loop
dec ecx
jnz %%loop
pop ecx
pop eax
%%clear
ret
%%noclick
%endmacro
%macro GUIClickCButton4 5
cmp eax,%1+1
jl near %%noclick
cmp edx,%2+3
jl near %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
cmp %3,%5
jne %%set
xor %3,%5
jmp %%done
%%set
mov %3,%5
%%done
mov al,%3
mov %4,al
%ifdef __MSDOS__
call ClearScreen
cmp byte[En2xSaI],0
jne %%nomodeq
cmp byte[cvidmode],2
jne %%nomodeq
jmp %%refresh
%%nomodeq
cmp byte[cvidmode],5
jne %%nomodex
%%refresh
mov byte[cbitmode],1
call initvideo2
mov byte[cbitmode],0
call GUISetPal
%%nomodex
%endif
ret
%%noclick
%endmacro
%macro GUIClickCButtonfr 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
mov byte[FPSOn],0
cmp %3,0
je %%zero
mov %3,0
jmp %%notzero
%%zero
mov %3,2
%%notzero
%%noclick
%endmacro
%macro GUIClickCButtonL 2
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor byte[showallext],1
xor byte[GUIshowallext],1
call GetLoadData
ret
%%noclick
%endmacro
%macro GUIClickCButtonI 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
pushad
call Clear2xSaIBuffer
popad
%%noclick
%endmacro
%macro GUIClickCButtonAS 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
mov byte[firstsaveinc],1
%%noclick
%endmacro
%macro GUIClickCButtonHQ 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
jz %%noclick
mov byte[En2xSaI],0
%%noclick
%endmacro
%macro GUIClickCButtonT 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
mov %4,0
%%noclick
%endmacro
%macro GUIClickCButtonMMX 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
call MMXCheck
%%noclick
%endmacro
%macro GUIClickCButton5MMXC 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
cmp byte[MMXSupport],0
je %%clear
cmp %3,%4
jne %%set
xor %3,%4
jmp %%clear
%%set
mov %3,%4
%%clear
ret
%%noclick
%endmacro
%macro GUISlidebarPostImpl 13 ; x1,y1,x2,y2,upjump,downjump,holdpos,scsize,view,cur,listsize
cmp dword[%11],0
je near %%nolower
cmp dword[GUIdispmode],1
je near %%slidebar
cmp eax,%1
jl near %%noupper
cmp edx,%2-7
jl near %%noupper
cmp eax,%3
jg near %%noupper
cmp edx,%2-1
jg near %%noupper
mov byte[%12],%13
mov byte[GUICHold],%7
jmp %5
%%noupper
cmp eax,%1
jl near %%nolower
cmp edx,%4+1
jl near %%nolower
cmp eax,%3
jg near %%nolower
cmp edx,%4+7
jg near %%nolower
mov byte[%12],%13
mov byte[GUICHold],%7+1
jmp %6
%%slidebar
cmp eax,%1
jl near %%nolower
cmp edx,%2
jl near %%nolower
cmp eax,%3
jg near %%nolower
cmp edx,%4
jg near %%nolower
mov byte[%12],%13
; displacement = (GUIdispmode * pixeldisp. / (listsize-scsize))
mov eax,[%11]
sub eax,%8
mov ebx,edx
sub ebx,[GUIlastypos]
imul ebx
mov ebx,[GUIlastdispval]
or ebx,ebx
jz near %%zerodiv
test ebx,80000000h
jnz near %%zerodiv
idiv ebx
mov ebx,[GUIlastvpos]
add ebx,eax
mov [%9],ebx
mov ebx,[GUIlastcpos]
add ebx,eax
mov [%10],ebx
test dword[%9],8000000h
jz %%noneg
mov dword[%9],0
%%noneg
test dword[%10],8000000h
jz %%noneg2
mov dword[%10],0
%%noneg2
mov eax,[%11]
dec eax
cmp [%10],eax
jb %%notover
mov [%10],eax
%%notover
sub eax,%8-1
cmp [%9],eax
jb %%notover2
mov [%9],eax
%%notover2
%%zerodiv
ret
%%nolower
%endmacro
SECTION .bss
GUIlastdispval resd 1
GUIdispmode resd 1
GUIlastypos resd 1
GUIlastcpos resd 1
GUIlastvpos resd 1
SECTION .text
%macro GUISlidebarImpl 10 ; x1,y1,x2,y2,GUI?StA,ScrnSize,ViewLoc,CursLoc,Entries,win#
mov dword[GUIdispmode],0
cmp eax,%1
jl near %%nobar
cmp edx,%2
jl near %%nobar
cmp eax,%3
jg near %%nobar
cmp edx,%4
jg near %%nobar
sub edx,%2
cmp [%5+4],edx
ja near %%above
cmp [%5+8],edx
jb near %%below
add edx,%2
mov [GUIlastypos],edx
mov dword[GUIdispmode],1
mov eax,[GUIwinposy+%10*4]
add eax,%2
mov [GUIHoldYlim],eax
mov eax,[GUIwinposy+%10*4]
add eax,%4
mov [GUIHoldYlimR],eax
mov eax,[GUIwinposx+%10*4]
add eax,%1
mov [GUIHoldXlimL],eax
mov eax,[GUIwinposx+%10*4]
add eax,%3
mov [GUIHoldXlimR],eax
mov eax,[%5]
mov [GUIlastdispval],eax
mov eax,[%8]
mov [GUIlastcpos],eax
mov eax,[%7]
mov [GUIlastvpos],eax
mov byte[GUIHold],3
ret
%%above
sub dword[%7],%6
sub dword[%8],%6
test dword[%7],8000000h
jz %%noneg
mov dword[%7],0
mov dword[%8],0
%%noneg
ret
%%below
add dword[%7],%6
add dword[%8],%6
mov ebx,[%9]
dec ebx
cmp [%8],ebx
jb %%notoverflow
mov [%8],ebx
sub ebx,%6-1
mov [%7],ebx
%%notoverflow
mov ebx,[%9]
sub ebx,%6
cmp [%7],ebx
jb %%notoverflow2
mov [%7],ebx
%%notoverflow2
ret
%%nobar
; upper arrow
cmp eax,%1
jl near %%noupper
cmp edx,%2-7
jl near %%noupper
cmp eax,%3
jg near %%noupper
cmp edx,%2-1
jg near %%noupper
mov eax,[GUIwinposy+%10*4]
add eax,%2-7
mov [GUIHoldYlim],eax
mov eax,[GUIwinposy+%10*4]
add eax,%2-1
mov [GUIHoldYlimR],eax
mov eax,[GUIwinposx+%10*4]
add eax,%1
mov [GUIHoldXlimL],eax
mov eax,[GUIwinposx+%10*4]
add eax,%3
mov [GUIHoldXlimR],eax
mov byte[GUIHold],3
ret
%%noupper
; lower arrow
cmp eax,%1
jl near %%nolower
cmp edx,%4+1
jl near %%nolower
cmp eax,%3
jg near %%nolower
cmp edx,%4+7
jg near %%nolower
mov eax,[GUIwinposy+%10*4]
add eax,%4+1
mov [GUIHoldYlim],eax
mov eax,[GUIwinposy+%10*4]
add eax,%4+7
mov [GUIHoldYlimR],eax
mov eax,[GUIwinposx+%10*4]
add eax,%1
mov [GUIHoldXlimL],eax
mov eax,[GUIwinposx+%10*4]
add eax,%3
mov [GUIHoldXlimR],eax
mov byte[GUIHold],3
ret
%%nolower
%endmacro
%macro GUIPostWinBoxMove 11 ;x1,y1,x2,y2,view,curs,num,.scru,.scrd,jumpto,sizeofscreen
cmp eax,%1
jl near %%noload
cmp eax,%3
jg near %%noload
cmp edx,%2
je near %%scrollup
cmp edx,%4
jne near %%noload
; Scroll Down
cmp dword[%7],%11
jbe %9
mov ebx,[%5]
add ebx,%11-1
mov [%6],ebx
%9
cmp dword[GUIScrolTim1],0
jne near %%donescrol
mov ebx,[%7]
dec ebx
cmp ebx,[%6]
jbe %%donescrolldown
inc dword[%6]
cmp dword[%7],%11
jbe near %%donescrol
inc dword[%5]
mov ebx,[%7]
sub ebx,%11
cmp ebx,[%5]
ja near %%donescrolldown
mov [%5],ebx
jmp %%donescrolldown
%%scrollup
mov ebx,[%5]
mov [%6],ebx
%8
cmp dword[GUIScrolTim1],0
jne near %%donescrol
cmp dword[%6],0
je %%donescrolldown
dec dword[%6]
cmp dword[%5],0
je %%donescrolldown
dec dword[%5]
%%donescrolldown
mov dword[GUIScrolTim1],1
cmp dword[GUIScrolTim2],4
jb %%noscrol1
inc dword[GUIScrolTim1]
%%noscrol1
cmp dword[GUIScrolTim2],0
je %%noscrol2
inc dword[GUIScrolTim1]
dec dword[GUIScrolTim2]
%%noscrol2
%%donescrol
jmp %10
%%noload
%endmacro
%macro GUIPHoldbutton 5
cmp eax,%1
jl near %%nohold
cmp edx,%2
jl near %%nohold
cmp eax,%3
jg near %%nohold
cmp edx,%4
jg near %%nohold
mov dword[GUIHoldXlimL],%1
mov dword[GUIHoldXlimR],%3
mov dword[GUIHoldYlim],%2
mov dword[GUIHoldYlimR],%4
mov byte[GUICBHold2],%5
mov byte[GUIHold],4
%%nohold
%endmacro
%macro GUIPHoldbutton2 8
cmp eax,%1
jl near %%nohold
cmp edx,%2
jl near %%nohold
cmp eax,%3
jg near %%nohold
cmp edx,%4
jg near %%nohold
cmp byte[GUIHold],0
jne %%nohold
mov dword[GUIHoldXlimL],%1
mov dword[GUIHoldXlimR],%3
mov dword[GUIHoldYlim],%2
mov dword[GUIHoldYlimR],%4
mov byte[GUICBHold2],%5
mov byte[GUIHold],4
cmp %6,%8
je %%nohold
add %6,%7
%%nohold
%endmacro
%macro GUITextBoxInput 6
cmp eax,%1
jl %%noclick
cmp edx,%2
jl %%noclick
cmp eax,%3
jg %%noclick
cmp edx,%4
jg %%noclick
mov dword[GUIEditString],%5
mov dword[GUIEditStringmLen],%6
mov dword[GUIEditStringLTxt],0
mov dword[GUIEditStringcWin],1
%%noclick
%endmacro
%macro GUITextBoxInputB 5
cmp eax,%1
jl %%noclick
cmp edx,%2
jl %%noclick
cmp eax,%3
jg %%noclick
cmp edx,%4
jg %%noclick
mov byte[GUINetTextm2],%5
%%noclick
%endmacro
%macro GUITextBoxInputNach 6
cmp eax,%1
jl %%noclick
cmp edx,%2
jl %%noclick
cmp eax,%3
jg %%noclick
cmp edx,%4
jg %%noclick
mov dword[GUIInputBox],%5
mov dword[GUIInputLimit],%6-1
%%noclick
%endmacro
%macro GUIPButtonHole 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+1
jl %%noclick
cmp eax,%1+7
jg %%noclick
cmp edx,%2+7
jg %%noclick
mov %3,%4
%%noclick
%endmacro
%macro GUIPButtonHole2 6
cmp eax,%1+1
jl %%noclick
cmp edx,%2+1
jl %%noclick
cmp eax,%1+7
jg %%noclick
cmp edx,%2+7
jg %%noclick
mov %3,%4
mov %5,%6
%%noclick
%endmacro
%macro GUIPButtonHoleLoad 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+1
jl %%noclick
cmp eax,%1+7
jg %%noclick
cmp edx,%2+7
jg %%noclick
mov %3,%4
call GetLoadData
ret
%%noclick
%endmacro
%macro GUIWinControl 13 ;x,y,x2,y2,currentwin,vpos,#entries,starty,y/entry,cpos,winval,win#,dclicktick#
cmp eax,%1
jl near %%noload
cmp edx,%2
jl near %%noload
cmp eax,%3
jg near %%noload
cmp edx,%4
jg near %%noload
cmp dword[%7],0
je near %%noload
mov dword[%5],%11
mov eax,edx
sub eax,%8
xor edx,edx
mov ebx,%9
div ebx
add eax,[%6]
mov ebx,[%7]
dec ebx
cmp eax,ebx
jg %%nomod
mov [%10],eax
%%nomod
cmp byte[GUIHold],0
jne %%held
cmp dword[GUIDClickTL],0
je %%noprevhold
cmp byte[GUIDClCWin],%11
jne %%noprevhold
cmp [GUIDClCEntry],eax
jne %%noprevhold
mov dword[GUIDClickTL],0
mov eax,%12
cmp eax,1
jne %%cheat
call GUILoadData
ret
%%cheat
call CheatCodeToggle
ret
%%noprevhold
mov dword[GUIDClickTL],%13
mov byte[GUIDClCWin],%11
mov [GUIDClCEntry],eax
%%held
mov eax,[GUIwinposy+%12*4]
add eax,%2-1
mov [GUIHoldYlim],eax
mov eax,[GUIwinposy+%12*4]
add eax,%4+1
mov [GUIHoldYlimR],eax
mov eax,[GUIwinposx+%12*4]
add eax,%1
mov [GUIHoldXlimL],eax
mov eax,[GUIwinposx+%12*4]
add eax,%3
mov [GUIHoldXlimR],eax
mov byte[GUIHold],3
ret
%%noload
%endmacro
%macro GUIWinControl2 13 ;Key Combination Editor Exclusive
cmp eax,%1
jl near %%noload
cmp edx,%2
jl near %%noload
cmp eax,%3
jg near %%noload
cmp edx,%4
jg near %%noload
cmp dword[%7],0
je near %%noload
mov dword[GUIccomblcursloc],0FFFFFFFFh
mov dword[%5],%11
mov eax,edx
sub eax,%8
xor edx,edx
mov ebx,%9
div ebx
add eax,[%6]
mov ebx,[%7]
dec ebx
cmp eax,ebx
jg %%nomod
mov [%10],eax
%%nomod
cmp byte[GUIHold],0
jne %%held
cmp dword[GUIDClickTL],0
je %%noprevhold
cmp byte[GUIDClCWin],%11
jne %%noprevhold
cmp [GUIDClCEntry],eax
jne %%noprevhold
mov dword[GUIDClickTL],0
mov eax,%12
cmp eax,1
jne %%cheat
call GUILoadData
ret
%%cheat
call CheatCodeToggle
ret
%%noprevhold
mov dword[GUIDClickTL],%13
mov byte[GUIDClCWin],%11
mov [GUIDClCEntry],eax
%%held
mov eax,[GUIwinposy+%12*4]
add eax,%2-1
mov [GUIHoldYlim],eax
mov eax,[GUIwinposy+%12*4]
add eax,%4+1
mov [GUIHoldYlimR],eax
mov eax,[GUIwinposx+%12*4]
add eax,%1
mov [GUIHoldXlimL],eax
mov eax,[GUIwinposx+%12*4]
add eax,%3
mov [GUIHoldXlimR],eax
mov byte[GUIHold],3
ret
%%noload
%endmacro
; Mouseimplementation
DisplayGUIConfirmClick2:
cmp dword[GUIfileentries],1
jbe near .noload2
GUISlidebarPostImpl 146,33,153,33+93,.scrollupsl,.scrolldownsl,1,15,GUIcurrentviewloc,GUIcurrentcursloc,GUIfileentries,GUIcurrentfilewin,0
GUIPostWinBoxMove 5,26,144,27+15*7,GUIcurrentviewloc,GUIcurrentcursloc,GUIfileentries,.scrollupsl,.scrolldownsl,DisplayGUIConfirmClick.skipscrol,15
.noload2
cmp dword[GUIdirentries],1
jbe near .noload3
GUISlidebarPostImpl 230,33,237,33+93,.scrollupsld,.scrolldownsld,3,15,GUIcurrentdirviewloc,GUIcurrentdircursloc,GUIdirentries,GUIcurrentfilewin,1
GUIPostWinBoxMove 160,26,228,27+15*7,GUIcurrentdirviewloc,GUIcurrentdircursloc,GUIdirentries,.scrollupsld,.scrolldownsld,DisplayGUIConfirmClick.skipscrol,15
.noload3
DisplayGUIConfirmClick:
;DrawSlideBarWin 1,133,43,[GUIcurrentviewloc],[GUIfileentries],15,94,[GUILStA]
; offset 0 = (ysize-(yend-ystart+1)), offset 1 = starty, offset 2 = endy
; SlideBar Implementation
GUISlidebarImpl 146,33,153,33+93,GUILStA,15,GUIcurrentviewloc,GUIcurrentcursloc,GUIfileentries,1
GUISlidebarImpl 230,33,237,33+93,GUILStB,15,GUIcurrentdirviewloc,GUIcurrentdircursloc,GUIdirentries,1
mov dword[GUIScrolTim1],0
mov dword[GUIScrolTim2],6
.skipscrol
GUIClickCButtonL 10,187
GUIWinControl 5,27,144,26+15*7,GUIcurrentfilewin,GUIcurrentviewloc,GUIfileentries,27,7,GUIcurrentcursloc,0,1,30
GUIWinControl 160,27,228,26+15*7,GUIcurrentfilewin,GUIcurrentdirviewloc,GUIdirentries,27,7,GUIcurrentdircursloc,1,1,30
GUIPHoldbutton 186,165,228,176,1
GUIPButtonHoleLoad 9,163,byte[GUIloadfntype],0
GUIPButtonHoleLoad 9,171,byte[GUIloadfntype],1
GUIPButtonHoleLoad 9,179,byte[GUIloadfntype],2
GUIClickCButton5 144,177,byte[ForceROMTiming],1
GUIClickCButton5 144,187,byte[ForceROMTiming],2
GUIClickCButton5 184,177,byte[ForceHiLoROM],1
GUIClickCButton5 184,187,byte[ForceHiLoROM],2
ret
DisplayGUIChoseSaveClick:
GUIPButtonHole 10,28,byte[GUIChoseSaveText2],'t'
GUIPButtonHole 30,28,byte[GUIChoseSaveText2],'1'
GUIPButtonHole 50,28,byte[GUIChoseSaveText2],'2'
GUIPButtonHole 70,28,byte[GUIChoseSaveText2],'3'
GUIPButtonHole 90,28,byte[GUIChoseSaveText2],'4'
GUIPButtonHole 10,43,byte[GUIChoseSaveText2],'5'
GUIPButtonHole 30,43,byte[GUIChoseSaveText2],'6'
GUIPButtonHole 50,43,byte[GUIChoseSaveText2],'7'
GUIPButtonHole 70,43,byte[GUIChoseSaveText2],'8'
GUIPButtonHole 90,43,byte[GUIChoseSaveText2],'9'
mov ebx,[statefileloc]
mov al,[GUIChoseSaveText2]
mov [fnamest+ebx],al
ret
%macro DGOptnsProcBox 3
cmp eax,%1
jl %%skip
cmp edx,%2
jl %%skip
cmp eax,%1+19
jg %%skip
cmp edx,%2+6
jg %%skip
push edi
call guipresstest
pop edi
cmp ebx,1
je %%cancelkey
cmp ebx,3Bh
je %%cancelkey
mov %3,ebx
%ifndef __MSDOS__
cmp dword[keycontrolval],0
je %%notwin32
push ebx
mov ebx,[keycontrolval]
mov byte[ebx],1
pop ebx
%%notwin32
%endif
ret
%%cancelkey
xor ebx,ebx
mov %3,ebx
ret
%%skip
%endmacro
DisplayGUIMovieClick:
cmp byte[MovieRecordWinVal],0 ; Overwrite Window
je near .displayboxa
GUIPHoldbutton 17,55,59,66,19
GUIPHoldbutton 70,55,112,66,20
ret
.displayboxa ; Main Window
GUIPHoldbutton 9,50,48,61,16 ; Buttons
GUIPHoldbutton 55,50,94,61,17
GUIPHoldbutton 103,50,144,61,18
GUIPHoldbutton 153,50,193,61,32
GUIPHoldbutton 9,68,112,79,29
GUIPHoldbutton 9,84,112,95,30
GUIPHoldbutton 9,100,112,111,31
GUIPHoldbutton 132,165,197,176,34
; Ratios
GUIPButtonHole 10,25,byte[CMovieExt],'v' ; Select
GUIPButtonHole 30,25,byte[CMovieExt],'1'
GUIPButtonHole 50,25,byte[CMovieExt],'2'
GUIPButtonHole 70,25,byte[CMovieExt],'3'
GUIPButtonHole 90,25,byte[CMovieExt],'4'
GUIPButtonHole 10,35,byte[CMovieExt],'5'
GUIPButtonHole 30,35,byte[CMovieExt],'6'
GUIPButtonHole 50,35,byte[CMovieExt],'7'
GUIPButtonHole 70,35,byte[CMovieExt],'8'
GUIPButtonHole 90,35,byte[CMovieExt],'9'
GUIPButtonHole 115,25,byte[MovieStartMethod],0 ; Start From
GUIPButtonHole 152,25,byte[MovieStartMethod],1
GUIPButtonHole 200,25,byte[MovieStartMethod],2
GUIPButtonHole 115,35,byte[MovieStartMethod],3
GUIPButtonHole 9,128,byte[MovieVideoMode],0 ; Movie Options
GUIPButtonHole 9,138,byte[MovieVideoMode],1
GUIPButtonHole 9,148,byte[MovieVideoMode],2
GUIPButtonHole 9,158,byte[MovieVideoMode],3
GUIPButtonHole 9,168,byte[MovieVideoMode],4
GUIPButtonHole 9,178,byte[MovieVideoMode],5
GUIClickCButton 130,128,byte[MovieAudio]
GUIClickCButton 130,138,byte[MovieAudioCompress]
GUIClickCButton 130,148,byte[MovieVideoAudio]
DGOptnsProcBox 116,71,[KeyInsrtChap] ; Keyboard Shortcut Boxes
DGOptnsProcBox 116,87,[KeyPrevChap]
DGOptnsProcBox 116,103,[KeyNextChap]
GUIClickCButton 144,67,byte[MovieDisplayFrame] ; Checkbox
ret
%macro DGOptnsProcBoxc 5
cmp eax,%1
jl %%skip
cmp edx,%2
jl %%skip
cmp eax,%3
jg %%skip
cmp edx,%4
jg %%skip
push edi
call guipresstest
pop edi
cmp ebx,1
je %%cancelkey
cmp ebx,3Bh
je %%cancelkey
mov %5,ebx
ret
%%cancelkey
cmp ebx,1
jne %%noesc
mov byte[pressed+1],2
%%noesc
xor ebx,ebx
mov %5,ebx
ret
%%skip
%endmacro
%macro DGOptnsProcBoxb 3
cmp eax,%1
jl near %%skip
cmp edx,%2
jl near %%skip
cmp eax,%1+19
jg near %%skip
cmp edx,%2+6
jg near %%skip
push edi
call guipresstest
pop edi
cmp ebx,1
je %%cancelkey
cmp ebx,3Bh
je %%cancelkey
mov %3,ebx
jmp %%donekey
%%cancelkey
cmp ebx,1
jne %%noesc
mov byte[pressed+1],2
%%noesc
xor ebx,ebx
mov %3,ebx
%%donekey
xor ecx,ecx
%%joysloop
cmp dword[pl1ULk+ecx*4],80h
jbe %%nojoystick
mov dword[pl1ULk+ecx*4],0
%%nojoystick
inc ecx
cmp ecx,16
jne %%joysloop
ret
%%skip
%endmacro
DisplayGUIInputClick2:
push eax
mov eax,[NumInputDevices]
mov [GUINumValue],eax
pop eax
GUISlidebarPostImpl 109,42,116,69,.scrollup,.scrolldown,9,5,GUIcurrentinputviewloc,GUIcurrentinputcursloc,GUINumValue,GUIBlankVar,1
GUIPostWinBoxMove 5,35,107,35+5*8,GUIcurrentinputviewloc,GUIcurrentinputcursloc,GUINumValue,.scrollup,.scrolldown,DisplayGUIInputClick.skipscrol,5
DisplayGUIInputClick:
; SlideBar Implementation
push eax
mov eax,[NumInputDevices]
mov [GUINumValue],eax
pop eax
GUISlidebarImpl 109,42,116,69,GUIIStA,5,GUIcurrentinputviewloc,GUIcurrentinputcursloc,GUINumValue,3
.skipscrol
;x,y,x2,y2,currentwin,vpos,#entries,starty,y/entry,cpos,winval,win#,dclicktick#
GUIWinControl 5,36,107,34+5*8,GUIBlankVar,GUIcurrentinputviewloc,GUINumValue,35,8,GUIcurrentinputcursloc,4,3,0
GUIPHoldbutton 125,34,155,45,14 ; Buttons
%ifdef __MSDOS__
GUIPHoldbutton 125,50,185,61,15
%endif
GUIPHoldbutton 125,66,185,77,40
mov edi,pl1selk
mov dword[keycontrolval],pl1contrl
cmp byte[cplayernum],1
jne .nopl2
mov edi,pl2selk
mov dword[keycontrolval],pl2contrl
.nopl2
cmp byte[cplayernum],2
jne .nopl3
mov edi,pl3selk
mov dword[keycontrolval],pl3contrl
.nopl3
cmp byte[cplayernum],3
jne .nopl4
mov edi,pl4selk
mov dword[keycontrolval],pl4contrl
.nopl4
cmp byte[cplayernum],4
jne .nopl5
mov edi,pl5selk
mov dword[keycontrolval],pl5contrl
.nopl5
;Check if controller is set
push eax
mov eax,[keycontrolval]
cmp dword[eax],0
pop eax
je near .lockInputChange
DGOptnsProcBox 45,150,[edi]
DGOptnsProcBox 45,140,[edi+4]
DGOptnsProcBox 45,100,[edi+8]
DGOptnsProcBox 45,110,[edi+12]
DGOptnsProcBox 45,120,[edi+16]
DGOptnsProcBox 45,130,[edi+20]
DGOptnsProcBox 85,120,[edi+24]
DGOptnsProcBox 85,100,[edi+28]
DGOptnsProcBox 85,140,[edi+32]
DGOptnsProcBox 85,130,[edi+36]
DGOptnsProcBox 85,110,[edi+40]
DGOptnsProcBox 85,150,[edi+44]
mov edi,pl1Atk
cmp byte[cplayernum],1
jne .nopl2t
mov edi,pl2Atk
.nopl2t
cmp byte[cplayernum],2
jne .nopl3t
mov edi,pl3Atk
.nopl3t
cmp byte[cplayernum],3
jne .nopl4t
mov edi,pl4Atk
.nopl4t
cmp byte[cplayernum],4
jne .nopl5t
mov edi,pl5Atk
.nopl5t
DGOptnsProcBox 165,100,[edi] ; A Turbo
DGOptnsProcBox 165,110,[edi+4] ; B Turbo
DGOptnsProcBox 125,100,[edi+8] ; X Turbo
DGOptnsProcBox 125,110,[edi+12] ; Y Turbo
mov edi,pl1Ltk
cmp byte[cplayernum],1
jne .nopl2tl
mov edi,pl2Ltk
.nopl2tl
cmp byte[cplayernum],2
jne .nopl3tl
mov edi,pl3Ltk
.nopl3tl
cmp byte[cplayernum],3
jne .nopl4tl
mov edi,pl4Ltk
.nopl4tl
cmp byte[cplayernum],4
jne .nopl5tl
mov edi,pl5Ltk
.nopl5tl
DGOptnsProcBox 125,120,[edi] ; L Turbo
DGOptnsProcBox 165,120,[edi+4] ; R Turbo
mov edi,pl1ULk
cmp byte[cplayernum],1
jne .nopl2tb
mov edi,pl2ULk
.nopl2tb
cmp byte[cplayernum],2
jne .nopl3tb
mov edi,pl3ULk
.nopl3tb
cmp byte[cplayernum],3
jne .nopl4tb
mov edi,pl4ULk
.nopl4tb
cmp byte[cplayernum],4
jne .nopl5tb
mov edi,pl5ULk
.nopl5tb
DGOptnsProcBoxb 165,140,[edi]
DGOptnsProcBoxb 165,150,[edi+4]
DGOptnsProcBoxb 125,140,[edi+8]
DGOptnsProcBoxb 125,150,[edi+12]
.lockInputChange
%ifdef __MSDOS__
xor ebx,ebx
mov bl,[cplayernum]
GUIClickCButtonID 5,162,byte[pl1p209+ebx]
%endif
ret
DisplayGUIOptionClick:
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUINGVID+ebx],1
jne near .invalidng
GUIClickCButton2 11,30,byte[newengen],byte[cfgnewgfx],1
.invalidng
GUIClickCButtonMMX 11,40,byte[MMXSupport]
GUIClickCButtonM 11,50,byte[pl12s34]
%ifdef __MSDOS__
GUIClickCButton 11,60,byte[SidewinderFix]
%elifdef __WIN32__
GUIClickCButton 11,60,byte[HighPriority]
pushad
call CheckPriority
popad
%endif
GUIClickCButton 11,70,byte[FPSAtStart]
GUIClickCButton 11,80,byte[Turbo30hz]
GUIClickCButton 11,90,byte[TimerEnable]
GUIClickCButtonO 11,100,byte[OldGfxMode2]
GUIClickCButton 11,110,byte[DontSavePath]
GUIClickCButton 11,120,byte[SmallMsgText]
GUIClickCButton 11,130,byte[AutoPatch]
GUIClickCButton 11,140,byte[RomInfo]
GUIClickCButton 11,150,byte[AllowUDLR]
%ifndef __MSDOS__
GUIClickCButton 11,160,byte[PauseFocusChange]
%endif
%ifdef __WIN32__
GUIClickCButton 11,170,byte[DisableScreenSaver]
pushad
call CheckScreenSaver
popad
%endif
ret
DisplayGUIVideoClick2:
push eax
mov eax,[NumVideoModes]
mov [GUINumValue],eax
pop eax
GUISlidebarPostImpl 117,33,124,62,.scrollup,.scrolldown,5,5,GUIcurrentvideoviewloc,GUIcurrentvideocursloc,GUINumValue,GUIBlankVar,1
GUIPostWinBoxMove 5,27,115,27+5*8,GUIcurrentvideoviewloc,GUIcurrentvideocursloc,GUINumValue,.scrollup,.scrolldown,DisplayGUIVideoClick.skipscrol,5
DisplayGUIVideoClick:
; SlideBar Implementation
push eax
mov eax,[NumVideoModes]
mov [GUINumValue],eax
pop eax
GUISlidebarImpl 117,33,124,62,GUIVStA,5,GUIcurrentvideoviewloc,GUIcurrentvideocursloc,GUINumValue,5
.skipscrol
GUIWinControl 5,28,115,26+5*8,GUIBlankVar,GUIcurrentvideoviewloc,GUINumValue,27,8,GUIcurrentvideocursloc,2,5,0
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUISLVID+ebx],0
je near .nocheckboxb
%ifdef __UNIXSDL__
GUIClickCButton4 21,119,byte[scanlines],byte[cfgscanline],1
%else
GUIClickCButton4 21,114,byte[scanlines],byte[cfgscanline],1
%endif
.nocheckboxb
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUITBVID+ebx],0
je .nocheckboxttb
GUIClickCButtonT 11,163,byte[Triplebufen],byte[vsyncon]
.nocheckboxttb
GUIClickCButton 11,183,byte[GrayscaleMode]
%ifdef __WIN32__
GUIClickCButtonf 115,183,byte[vsyncon],initDirectDraw
pushad
call Clear2xSaIBuffer
popad
%elifdef __MSDOS__
GUIClickCButtonT 115,183,byte[vsyncon],byte[Triplebufen]
%endif
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIM7VID+ebx],0
je .nocheckboxtm7
GUIClickCButton5 11,173,byte[Mode7HiRes16b],1
.nocheckboxtm7
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIM7VID+ebx],0
je .nontscfilter
GUIClickCButton5 115,173,byte[NTSCFilter],1
.nontscfilter
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIHSVID+ebx],0
je near .nohsline
%ifdef __UNIXSDL__
GUIClickCButton4 61,119,byte[scanlines],byte[cfgscanline],3
GUIClickCButton4 101,119,byte[scanlines],byte[cfgscanline],2
%else
GUIClickCButton4 61,114,byte[scanlines],byte[cfgscanline],3
GUIClickCButton4 101,114,byte[scanlines],byte[cfgscanline],2
%endif
.nohsline
%ifdef __WIN32__
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUITBWVID+ebx],0
je near .notriplebufferwin
GUIClickCButtonf 11,123,byte[TripleBufferWin],initDirectDraw
pushad
call Clear2xSaIBuffer
popad
.notriplebufferwin
%endif
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIHQ2X+ebx],0
jne .checkboxhq
cmp byte[GUIHQ3X+ebx],0
jne .checkboxhq
cmp byte[GUIHQ4X+ebx],0
jne .checkboxhq
jmp .nocheckboxhq
.checkboxhq
GUIClickCButtonHQ 115,163,byte[hqFilter]
.nocheckboxhq
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUI2xVID+ebx],0
je near .no2xSaI
GUIClickCButton6 11,133,byte[En2xSaI],1
GUIClickCButton6 11,143,byte[En2xSaI],2
GUIClickCButton6 11,153,byte[En2xSaI],3
.no2xSaI
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIIEVID+ebx],0
je .nocheckbox1b
GUIClickCButton3 11,78,byte[antienab],byte[cfginterp],1
.nocheckbox1b
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIBIFIL+ebx],0
je .nocheckbox1bf
GUIClickCButton 11,163,byte[BilinearFilter]
.nocheckbox1bf
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIFSVID+ebx],0
je .nocheckbox2b
GUIClickCButton3 11,88,byte[ScreenScale],byte[GUIScreenScale],1
.nocheckbox2b
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUISSVID+ebx],0
je .nocheckbox3b
GUIClickCButton3 11,98,byte[smallscreenon],byte[GUIsmallscreenon],1
.nocheckbox3b
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUII2VID+ebx],0
je .nocheckboxi2
GUIClickCButton3 11,163,byte[antienab],byte[cfginterp],1
.nocheckboxi2
GUIPHoldbutton 128,60,164,71,4
mov al,[vsyncon]
mov [cfgvsync],al
xor al,al
ret
SECTION .bss
GUINumValue resd 1
GUIBlankVar resd 1
SECTION .text
DisplayGUISoundClick:
mov eax,[GUImouseposx]
sub eax,[GUIwinposx+6*4]
mov edx,[GUImouseposy]
sub edx,[GUIwinposy+6*4]
GUIClickCButtonf 11,21,byte[cfgsoundon],reInitSound
%ifdef __MSDOS__
GUIClickCButton 102,21,byte[cfgforce8b]
%endif
GUIClickCButton 11,30,byte[cfgStereoSound]
%ifdef __MSDOS__
GUIClickCButton 11,39,byte[RaisePitch]
%endif
; GUIClickCButton 11,101,byte[SoundNoiseDis]
GUIClickCButton 11,111,byte[RevStereo]
GUIClickCButton 11,121,byte[Surround]
GUIClickCButton 11,131,byte[SoundBufEn]
GUIClickCButton 11,141,byte[SPCDisable]
GUIClickCButton5 11,163,byte[SoundInterpType],1
GUIClickCButton5 11,173,byte[SoundInterpType],2
%ifndef __MSDOS__
GUIClickCButton5MMXC 11,183,byte[SoundInterpType],3
%endif
GUIClickCButton5 111,163,byte[LowPassFilterType],1
GUIClickCButton5 111,173,byte[LowPassFilterType],2
%ifndef __MSDOS__
GUIClickCButton5MMXC 111,183,byte[LowPassFilterType],3
%endif
%ifdef __WIN32__
GUIClickCButton 11,101,byte[PrimaryBuffer]
%endif
cmp eax,15
jl near .nosrate
cmp edx,61
jl near .nosrate
cmp eax,69
jg near .nosrate
cmp edx,69
jg near .nosrate
xor eax,eax
mov al,[cfgSoundQuality]
mov al,[sampratenext+eax]
mov [cfgSoundQuality],al
.nosrate
cmp eax,15
jl near .nomovebar
cmp eax,15+100
jg near .nomovebar
cmp edx,89
jl near .nomovebar
cmp edx,93
jg near .nomovebar
sub eax,15
mov [MusicRelVol],al
mov [cfgvolume],al
mov byte[GUIHold],5
mov eax,[GUIwinposy+6*4]
add eax,91
mov [GUIHoldYlim],eax
xor eax,eax
xor edx,edx
mov al,[MusicRelVol]
shl eax,7
mov ebx,100
div ebx
cmp al,127
jb .noof
mov al,127
.noof
mov [MusicVol],al
mov al,[DSPMem+0Ch]
call WDSPReg0C
mov al,[DSPMem+1Ch]
call WDSPReg1C
mov eax,[GUIwinposx+6*4]
add eax,15
mov [GUIHoldXlimL],eax
add eax,100
mov [GUIHoldXlimR],eax
.nomovebar
ret
SECTION .data
sampratenext db 1,4,5,6,2,3,0,0,0,0
SECTION .text
%macro GUIBoxVar 6
cmp eax,%1
jl %%nope
cmp edx,%2
jl %%nope
cmp eax,%3
jg %%nope
cmp edx,%4
jg %%nope
mov dword[%5],%6
%%nope
%endmacro
DisplayGUICheatClick2:
GUISlidebarPostImpl 231,28,238,100,.scrollup,.scrolldown,7,12,GUIcurrentcheatviewloc,GUIcurrentcheatcursloc,NumCheats,GUIBlankVar,1
GUIPostWinBoxMove 5,22,229,22+12*7,GUIcurrentcheatviewloc,GUIcurrentcheatcursloc,NumCheats,.scrollup,.scrolldown,DisplayGUICheatClick.skipscrol,12
DisplayGUICheatClick:
GUIBoxVar 5,20,181,110,GUIcurrentcheatwin,0 ; Main Box
GUIBoxVar 82,129,173,136,GUIcurrentcheatwin,1 ; Enter Code Box
GUIBoxVar 82,140,196,147,GUIcurrentcheatwin,2 ; Description Box
; SlideBar Implementation
GUISlidebarImpl 231,28,238,100,GUICStA,12,GUIcurrentcheatviewloc,GUIcurrentcheatcursloc,NumCheats,7
.skipscrol
cmp byte[GUIcurrentcheatwin],0
jne near .nowin
GUIWinControl 5,23,229,21+12*7,GUIBlankVar,GUIcurrentcheatviewloc,NumCheats,22,7,GUIcurrentcheatcursloc,3,7,30
.nowin
GUIPHoldbutton 5,113,47,124,5 ; Buttons
GUIPHoldbutton 52,113,94,124,6
GUIPHoldbutton 99,113,141,124,7
GUIPHoldbutton 146,113,188,124,8
GUIPHoldbutton 212,134,236,145,9
GUIPHoldbutton 193,113,235,124,33
GUIClickCButton5 11,186,byte[AutoLoadCht],1 ; Checkbox
ret
DisplayNetOptnsClick:
ret
guipresstest:
xor ebx,ebx
mov ecx,256+128+64
.a
mov byte[pressed+ebx],0
inc ebx
dec ecx
jnz .a
call GUIUnBuffer
call DisplayBoxes
call DisplayMenu
GUIBox 75,95,180,131,160
GUIBox 75,95,180,95,162
GUIBox 75,95,75,131,161
GUIBox 180,95,180,131,159
GUIBox 75,131,180,131,158
GUIOuttext 81,101,guipresstext1,220-15
GUIOuttext 80,100,guipresstext1,220
GUIOuttext 81,111,guipresstext2,220-15
GUIOuttext 80,110,guipresstext2,220
GUIOuttext 81,121,guipresstext3,220-15
GUIOuttext 80,120,guipresstext3,220
call vidpastecopyscr
.again
call JoyRead
; mov dword[pressed+0CCh],0
; mov dword[pressed+0CCh+80h],0
; mov dword[pressed+0E8h],0
; mov dword[pressed+0E8h+80h],0
xor ebx,ebx
mov ecx,256+128+64
.b
cmp byte[pressed+ebx],0
jne .pressedokay
inc ebx
dec ecx
jnz .b
jmp .again
.pressedokay
push ebx
xor ebx,ebx
mov ecx,256+128+64
.a2
cmp byte[pressed+ebx],0
je .pressedokayb
mov byte[pressed+ebx],2
.pressedokayb
inc ebx
dec ecx
jnz .a2
pop ebx
.again2
call Check_Key
or al,al
jz .nokey
call Get_Key
jmp .again2
.nokey
; push ebx
; mov eax,0Bh
; int 33h
; pop ebx
ret
SECTION .data
guipresstext1 db 'ENTER THE KEY',0
guipresstext2 db 'OR BUTTON TO USE',0
guipresstext3 db '(ESC TO CLEAR)',0
SECTION .text
guipresstestb:
call GUIUnBuffer
call DisplayBoxes
call DisplayMenu
GUIBox 65,80,194,126,160
GUIBox 65,80,194,80,162
GUIBox 65,80,65,126,161
GUIBox 194,80,194,126,159
GUIBox 65,126,194,126,158
GUIOuttext 71,86,guipresstext1,220-15
GUIOuttext 70,85,guipresstext1,220
GUIOuttext 71,96,guipresstext2,220-15
GUIOuttext 70,95,guipresstext2,220
GUIOuttext 71,116,guipresstext3b,220-15
GUIOuttext 70,115,guipresstext3b,220
mov eax,[guipressptr]
GUIOuttext 71,106,eax,220-15
mov eax,[guipressptr]
GUIOuttext 70,105,eax,220
call vidpastecopyscr
mov ecx,8192
call delay
.tryagain
call JoyRead
xor ebx,ebx
mov ecx,256+128+64
.b2
cmp byte[pressed+ebx],0
jne .tryagain
inc ebx
dec ecx
jnz .b2
.again
call JoyRead
; mov dword[pressed+0CCh],0
; mov dword[pressed+0CCh+80h],0
; mov dword[pressed+0E8h],0
; mov dword[pressed+0E8h+80h],0
xor ebx,ebx
mov ecx,256+128+64
.b
cmp byte[pressed+ebx],0
jne .pressedokay
inc ebx
dec ecx
jnz .b
jmp .again
.pressedokay
.again2
call Check_Key
or al,al
jz .nokey
call Get_Key
jmp .again2
.nokey
cmp ebx,1
je .skip
cmp ebx,3Bh
je .skip
mov eax,[guicpressptr]
mov [eax],ebx
.skip
; push ebx
; mov eax,0Bh
; int 33h
; pop ebx
ret
SECTION .data
guipresstext3b db '(ESC TO SKIP)',0
guipresstext4b db 'FOR UP ',0
db 'FOR DOWN ',0
db 'FOR LEFT ',0
db 'FOR RIGHT ',0
db 'FOR START ',0
db 'FOR SELECT ',0
db 'FOR A (RIGHT BUTTON)',0
db 'FOR B (DOWN BUTTON) ',0
db 'FOR X (TOP BUTTON) ',0
db 'FOR Y (LEFT BUTTON) ',0
db 'FOR THE L BUTTON ',0
db 'FOR THE R BUTTON ',0
SECTION .bss
guipressptr resd 1
guicpressptr resd 1
SECTION .text
DisplayGameOptnsClick:
mov dword[keycontrolval],0 ; Shortcut Boxes
DGOptnsProcBox 27,23,[KeyBGDisble0]
DGOptnsProcBox 27+45,23,[KeyBGDisble1]
DGOptnsProcBox 27+45*2,23,[KeyBGDisble2]
DGOptnsProcBox 27+45*3,23,[KeyBGDisble3]
DGOptnsProcBox 27+45*4,23,[KeySprDisble]
DGOptnsProcBox 27,41,[KeyDisableSC0]
DGOptnsProcBox 27+45,41,[KeyDisableSC1]
DGOptnsProcBox 27+45*2,41,[KeyDisableSC2]
DGOptnsProcBox 27+45*3,41,[KeyDisableSC3]
DGOptnsProcBox 34+45*4,41,[KeyVolUp]
DGOptnsProcBox 27,50,[KeyDisableSC4]
DGOptnsProcBox 27+45,50,[KeyDisableSC5]
DGOptnsProcBox 27+45*2,50,[KeyDisableSC6]
DGOptnsProcBox 27+45*3,50,[KeyDisableSC7]
DGOptnsProcBox 34+45*4,50,[KeyVolDown]
DGOptnsProcBox 8+25,70,[KeyQuickLoad]
DGOptnsProcBox 8+57+26,70,[KeyQuickRst]
DGOptnsProcBox 8+114+20,70,[KeyQuickExit]
DGOptnsProcBox 8+114+78,70,[KeyQuickClock]
DGOptnsProcBox 8+25,80,[KeyQuickChat]
DGOptnsProcBox 8+57+45,80,[KeyQuickSnapShot]
DGOptnsProcBox 8+108+70,80,[KeyQuickSaveSPC]
DGOptnsProcBox 78,100,[KeyUsePlayer1234]
DGOptnsProcBox 78,110,[KeyResetAll]
DGOptnsProcBox 78,120,[KeyExtraEnab]
DGOptnsProcBox 78,130,[KeyDisplayFPS]
DGOptnsProcBox 78,140,[KeyIncreaseGamma]
DGOptnsProcBox 78,150,[KeyDecreaseGamma]
%ifndef __MSDOS__
DGOptnsProcBox 78,160,[KeyDisplayBatt]
%endif
DGOptnsProcBox 191,100,[KeyNewGfxSwt]
DGOptnsProcBox 191,110,[KeyWinDisble]
DGOptnsProcBox 191,120,[KeyOffsetMSw]
ret
DisplayGUIOptnsClick:
mov eax,[GUImouseposx]
sub eax,[GUIwinposx+10*4]
mov edx,[GUImouseposy]
sub edx,[GUIwinposy+10*4]
GUIClickCButton 12,23,byte[mousewrap] ; Checkboxes
GUIClickCButton 12,33,byte[mouseshad]
GUIClickCButton 12,43,byte[lastcursres]
GUIClickCButton 12,53,byte[resetposn]
GUIClickCButton 12,63,byte[GUIClick]
GUIClickCButton 12,73,byte[JoyPad1Move]
GUIClickCButton 124,23,byte[GUIEnableTransp]
GUIClickCButtonI 124,33,byte[FilteredGUI]
GUIClickCButton6 124,43,byte[GUIEffect],1
GUIClickCButton6 124,53,byte[GUIEffect],2
GUIClickCButton6 124,63,byte[GUIEffect],3
GUIClickCButton6 124,73,byte[GUIEffect],4
%ifdef __WIN32__
GUIClickCButton 124,83,byte[MouseWheel]
GUIClickCButton 124,93,byte[TrapMouseCursor]
GUIClickCButton 12,168,byte[AlwaysOnTop]
GUIClickCButton 12,178,byte[SaveMainWindowPos]
GUIClickCButton 12,188,byte[AllowMultipleInst]
%endif
GUIPButtonHole 48,108,byte[CurPalSelect],0 ; Radio Buttons
GUIPButtonHole 88,108,byte[CurPalSelect],1
GUIPButtonHole 135,108,byte[CurPalSelect],2
push eax ; Sliders
cmp byte[CurPalSelect],1
je .yespal2b
cmp byte[CurPalSelect],2
je .yespal3b
mov al,[GUIRAdd]
mov [TRVal2],al
mov al,[GUIGAdd]
mov [TGVal2],al
mov al,[GUIBAdd]
mov [TBVal2],al
jmp .nopal1b
.yespal2b
mov al,[GUITRAdd]
mov [TRVal2],al
mov al,[GUITGAdd]
mov [TGVal2],al
mov al,[GUITBAdd]
mov [TBVal2],al
jmp .nopal1b
.yespal3b
mov al,[GUIWRAdd]
mov [TRVal2],al
mov al,[GUIWGAdd]
mov [TGVal2],al
mov al,[GUIWBAdd]
mov [TBVal2],al
.nopal1b
pop eax
cmp eax,25
jl near .nomovebar
cmp eax,25+32*4-1
jg near .nomovebar
sub eax,25
shr eax,2
cmp edx,122
jl .nomovebar1
cmp edx,126
jg .nomovebar1
cmp byte[TRVal2],al
je .nomovebar1b
mov [TRVal2],al
mov byte[TRVal2+1],1
.nomovebar1b
mov byte[GUIHold],2
mov eax,[GUIwinposy+10*4]
add eax,124
mov [GUIHoldYlim],eax
jmp .nomovebar
.nomovebar1
cmp edx,134
jl .nomovebar2
cmp edx,138
jg .nomovebar2
cmp byte[TGVal2],al
je .nomovebar2b
mov [TGVal2],al
mov byte[TRVal2+1],1
.nomovebar2b
mov byte[GUIHold],2
mov eax,[GUIwinposy+10*4]
add eax,136
mov [GUIHoldYlim],eax
jmp .nomovebar
.nomovebar2
cmp edx,146
jl .nomovebar3
cmp edx,150
jg .nomovebar3
cmp byte[TBVal2],al
je .nomovebar3b
mov [TBVal2],al
mov byte[TRVal2+1],1
.nomovebar3b
mov byte[GUIHold],2
mov eax,[GUIwinposy+10*4]
add eax,148
mov [GUIHoldYlim],eax
.nomovebar3
.nomovebar
push eax
cmp byte[CurPalSelect],1
je .yespal2
cmp byte[CurPalSelect],2
je .yespal3
mov al,[TRVal2]
mov [GUIRAdd],al
mov al,[TGVal2]
mov [GUIGAdd],al
mov al,[TBVal2]
mov [GUIBAdd],al
jmp .nopal1
.yespal2
mov al,[TRVal2]
mov [GUITRAdd],al
mov al,[TGVal2]
mov [GUITGAdd],al
mov al,[TBVal2]
mov [GUITBAdd],al
jmp .nopal1
.yespal3
mov al,[TRVal2]
mov [GUIWRAdd],al
mov al,[TGVal2]
mov [GUIWGAdd],al
mov al,[TBVal2]
mov [GUIWBAdd],al
.nopal1
pop eax
cmp byte[TRVal2+1],1
jne .nopalchange
call GUISetPal
mov byte[TRVal2+1],0
.nopalchange
cmp byte[GUIHold],2
jne .nohold
mov eax,[GUIwinposx+10*4]
add eax,25
mov [GUIHoldXlimL],eax
mov eax,[GUIwinposx+10*4]
add eax,25+32*4-1
mov [GUIHoldXlimR],eax
.nohold
ret
DisplayGUIAboutClick:
%ifndef __MSDOS__
cmp byte[EEgg],1
je near .eegg
GUIPHoldbutton 90,22,175,32,65
GUIPHoldbutton 90,33,175,43,66
.eegg
%endif
ret
%macro ComboBoxProc 5
cmp eax,%1
jl %%nope
cmp edx,%2
jl %%nope
cmp eax,%3
jg %%nope
cmp edx,%4
jg %%nope
cmp byte[GUINumCombo],42
je %%nope
xor ebx,ebx
mov bl,[GUINumCombo]
mov byte[GUIComboData+ebx],%5
inc byte[GUINumCombo]
%%nope
%endmacro
%macro ComboBoxProcD 4
cmp eax,%1
jl %%nope
cmp edx,%2
jl %%nope
cmp eax,%3
jg %%nope
cmp edx,%4
jg %%nope
cmp byte[GUINumCombo],0
je %%nope
dec byte[GUINumCombo]
%%nope
%endmacro
; DrawSlideBar 16,192,20,[GUIccombviewloc],[NumCombo],8,61,GUICSStC,13,14
; DrawBorderedBox 16,10,20,190,80,19
; DrawGUIWinBox 3,5,34,107,77,167
; DrawSlideBarWin 3,109,42,[GUIcurrentinputviewloc],16,5,28,GUIIStA
DisplayGUIComboClick2:
mov dword[keycontrolval],0
; x1,y1,x2,y2,upjump,downjump,holdpos,scsize,view,cur,listsize
GUISlidebarPostImpl 192,28,199,72,.scrollup,.scrolldown,13,8,GUIccombviewloc,GUIccombcursloc,NumCombo,GUIBlankVar,1
;x1,y1,x2,y2,view,curs,num,.scru,.scrd,jumpto,sizeofscreen
GUIPostWinBoxMove 10,22,190,23+8*7,GUIccombviewloc,GUIccombcursloc,NumCombo,.scrollup,.scrolldown,DisplayGUIComboClick.skipscrol,8
DisplayGUIComboClick:
; SlideBar Implementation
; x1,y1,x2,y2,GUI?StA,ScrnSize,ViewLoc,CursLoc,Entries,win#
GUISlidebarImpl 192,28,199,72,GUICSStC,8,GUIccombviewloc,GUIccombviewloc,NumCombo,16
.skipscrol
;x,y,x2,y2,currentwin,vpos,#entries,starty,y/entry,cpos,winval,win#,dclicktick#
GUIWinControl2 10,23,190,22+8*7,GUIBlankVar,GUIccombviewloc,NumCombo,23,7,GUIccombcursloc,6,16,0
GUIPButtonHole 158,82,byte[GUIComboPNum],0
GUIPButtonHole 176,82,byte[GUIComboPNum],1
GUIPButtonHole 194,82,byte[GUIComboPNum],2
GUIPButtonHole 212,82,byte[GUIComboPNum],3
GUIPButtonHole 230,82,byte[GUIComboPNum],4
GUIClickCButton 163,88,byte[GUIComboLHorz]
GUIClickCButtonC 163,96,byte[GUIComboGameSpec]
GUIPHoldbutton 202,20,246,31,60
GUIPHoldbutton 202,35,246,46,61
GUIPHoldbutton 202,50,246,61,62
GUIPHoldbutton 202,65,246,76,63
DGOptnsProcBoxc 10,91,32,99,[GUIComboKey]
ComboBoxProc 75,150,85,157,1
ComboBoxProc 89,150,99,157,2
ComboBoxProc 103,150,113,157,3
ComboBoxProc 117,150,127,157,4
ComboBoxProc 131,150,141,157,5
ComboBoxProc 145,150,155,157,6
ComboBoxProc 159,150,169,157,7
ComboBoxProc 173,150,183,157,8
ComboBoxProc 187,150,197,157,9
ComboBoxProc 201,150,211,157,10
ComboBoxProc 215,150,227,157,11
ComboBoxProc 231,150,243,157,12
ComboBoxProc 75,160,85,167,13
ComboBoxProc 89,160,99,167,14
ComboBoxProc 103,160,113,167,15
ComboBoxProc 117,160,127,167,16
ComboBoxProc 131,160,141,167,17
ComboBoxProc 145,160,155,167,18
ComboBoxProc 159,160,169,167,19
ComboBoxProc 173,160,183,167,20
ComboBoxProc 187,160,197,167,21
ComboBoxProc 201,160,211,167,22
ComboBoxProc 215,160,227,167,23
ComboBoxProc 231,160,243,167,24
ComboBoxProc 75,170,85,177,25
ComboBoxProc 89,170,99,177,26
ComboBoxProc 103,170,113,177,27
ComboBoxProc 117,170,127,177,28
ComboBoxProc 131,170,141,177,29
ComboBoxProc 145,170,155,177,30
ComboBoxProc 159,170,169,177,31
ComboBoxProc 173,170,183,177,32
ComboBoxProc 187,170,197,177,33
ComboBoxProc 201,170,211,177,34
ComboBoxProc 215,170,227,177,35
ComboBoxProc 231,170,243,177,36
ComboBoxProc 10,189,20,196,37
ComboBoxProc 24,189,34,196,38
ComboBoxProc 38,189,48,196,39
ComboBoxProc 52,189,62,196,40
ComboBoxProc 66,189,76,196,41
ComboBoxProc 80,189,90,196,42
ComboBoxProc 107,189,117,196,43
ComboBoxProc 121,189,131,196,44
ComboBoxProc 135,189,145,196,45
ComboBoxProc 149,189,159,196,46
ComboBoxProc 163,189,173,196,47
ComboBoxProc 177,189,187,196,48
ComboBoxProcD 204,189,218,196
mov ebx,[NumComboLocl]
cmp byte[GUIComboGameSpec],0
jne .local
mov ebx,[NumComboGlob]
.local
mov [NumCombo],ebx
xor ebx,ebx
ret
DisplayGUIResetClick:
GUIPHoldbutton 20,30,56,41,2
GUIPHoldbutton 80,30,116,41,3
ret
DisplayGUIStatesClick:
GUIPHoldbutton 20,30,56,41,10
GUIPHoldbutton 80,30,116,41,11
ret
DisplayGUICheatSearchClick2:
cmp byte[CheatWinMode],2
je near DisplayGUICheatSearchClick.preview
DisplayGUICheatSearchClick:
cmp byte[CheatWinMode],1
je near .incheatmode
cmp byte[CheatWinMode],2
je near .view
cmp byte[CheatWinMode],3
je near .add
GUIPHoldbutton 95,140,140,152,50 ; Main Menu
GUIPButtonHole 11,28,byte[CheatSrcByteSize],0
GUIPButtonHole 11,38,byte[CheatSrcByteSize],1
GUIPButtonHole 11,48,byte[CheatSrcByteSize],2
GUIPButtonHole 11,58,byte[CheatSrcByteSize],3
GUIPButtonHole 11,73,byte[CheatSrcByteBase],0
GUIPButtonHole 11,83,byte[CheatSrcByteBase],1
GUIPButtonHole 11,113,byte[CheatSrcSearchType],0
GUIPButtonHole 11,123,byte[CheatSrcSearchType],1
ret
.incheatmode ; Exact Value
GUIPHoldbutton 30,140,80,152,51
cmp byte[CheatSearchStatus],1
jne near .cheatsearching
jmp .nosearch
.cheatsearching ; Return and Re-Search
cmp byte[CheatSrcSearchType],1
je near .cheatsearchingcomp
jmp .searched
.cheatsearchingcomp ; Select Comparison
GUIPButtonHole 11,33,byte[CheatCompareValue],0
GUIPButtonHole 11,43,byte[CheatCompareValue],1
GUIPButtonHole 11,53,byte[CheatCompareValue],2
GUIPButtonHole 11,63,byte[CheatCompareValue],3
.searched ; Restart/View/Search Buttons
GUIPHoldbutton 120,140,170,152,53
.nosearch
GUIPHoldbutton 10,140,60,152,51
GUIPHoldbutton 70,140,110,152,52
ret
; View Cheat
.preview ; Preview Box
; x1,y1,x2,y2,upjump,downjump,holdpos,scsize,view,cur,listsize
GUISlidebarPostImpl 173,28,180,100,.scrollup,.scrolldown,11,12,GUIcurrentchtsrcviewloc,GUIcurrentchtsrccursloc,NumCheatSrc,GUIBlankVar,1
;x1,y1,x2,y2,view,curs,num,.scru,.scrd,jumpto,sizeofscreen
GUIPostWinBoxMove 5,22,171,22+12*7,GUIcurrentchtsrcviewloc,GUIcurrentchtsrccursloc,NumCheatSrc,.scrollup,.scrolldown,DisplayGUICheatSearchClick.skipscrol,12
.view
; x1,y1,x2,y2,GUI?StA,ScrnSize,ViewLoc,CursLoc,Entries,win#
GUISlidebarImpl 173,28,180,100,GUICSStA,12,GUIcurrentchtsrcviewloc,GUIcurrentchtsrccursloc,NumCheatSrc,13
.skipscrol
; x,y,x2,y2,currentwin,vpos,#entries,starty,y/entry,cpos,winval,win#,dclicktick#
GUIWinControl 5,23,171,21+12*7,GUIBlankVar,GUIcurrentchtsrcviewloc,NumCheatSrc,22,7,GUIcurrentchtsrccursloc,5,13,30
GUIPHoldbutton 70,140,130,152,54 ; Return/Add Buttons
GUIPHoldbutton 140,140,180,152,55
ret
; DrawSlideBarWin 13,173,28,[GUIcurrentchtsrcviewloc],[NumCheatSrc],12,73,GUICSStA
; DrawGUIWinBox 13,5,20,171,108,167
.add ; Add Cheat
GUIPHoldbutton 60,155,120,167,56 ; Return/Add Buttons
GUIPHoldbutton 130,155,160,167,57
GUIClickCButton 8,139,byte[CheatUpperByteOnly] ; Checkbox
GUIBoxVar 10,30,80,37,CurCStextpos,0 ; Input Boxes
GUIBoxVar 10,55,126,62,CurCStextpos,1
ret
DisplayGUIAddOnClick:
GUIPButtonHole 9,15,byte[snesmouse],0
GUIPButtonHole 9,25,byte[snesmouse],1
GUIPButtonHole 9,35,byte[snesmouse],2
GUIPButtonHole 9,45,byte[snesmouse],3
GUIPButtonHole 9,55,byte[snesmouse],4
ret
DisplayGUIChipClick:
GUIClickCButton 9,43,byte[nssdip1]
GUIClickCButton 59,43,byte[nssdip2]
GUIClickCButton 109,43,byte[nssdip3]
GUIClickCButton 9,53,byte[nssdip4]
GUIClickCButton 59,53,byte[nssdip5]
GUIClickCButton 109,53,byte[nssdip6]
ret
DisplayGUIPathsClick:
GUITextBoxInputNach 75,15,230,25,1,1024 ;SRAMDir
GUITextBoxInputNach 75,35,230,45,2,1024 ;SnapPath
GUITextBoxInputNach 75,55,230,65,3,1024 ;SPCPath
GUITextBoxInputNach 8,95,100,105,4,1024 ;BSXPath
GUITextBoxInputNach 8,120,100,130,5,1024 ;SGPath
GUITextBoxInputNach 135,95,235,105,6,1024 ;STPath
GUITextBoxInputNach 135,120,235,130,7,1024 ;GNextPath
GUITextBoxInputNach 8,155,100,165,8,1024 ;FEOEZPath
GUITextBoxInputNach 135,155,235,165,9,1024 ;SJNSPath
GUITextBoxInputNach 8,180,100,190,10,1024 ;MDHPath
GUITextBoxInputNach 135,180,235,190,11,1024 ;SPL4Path
ret
DisplayGUISaveClick:
GUIClickCButtonAS 11,40,byte[AutoIncSaveSlot]
GUIClickCButton 11,50,byte[SRAMSave5Sec]
GUIClickCButton 11,60,byte[LatestSave]
GUIClickCButton 11,70,byte[AutoState]
GUIClickCButton 11,80,byte[SRAMState]
GUIClickCButton 11,90,byte[PauseLoad]
GUIClickCButton 11,100,byte[PauseRewind]
GUIPHoldbutton2 173,17,181,24,70,byte[RewindStates],1,99
GUIPHoldbutton2 184,17,192,24,71,byte[RewindStates],-1,0
GUIPHoldbutton2 173,29,181,36,72,byte[RewindFrames],1,99
GUIPHoldbutton2 184,29,192,36,73,byte[RewindFrames],-1,0
DGOptnsProcBox 27,121,[KeyStateSlc0]
DGOptnsProcBox 27+45,121,[KeyStateSlc1]
DGOptnsProcBox 27+45*2,121,[KeyStateSlc2]
DGOptnsProcBox 27+45*3,121,[KeyStateSlc3]
DGOptnsProcBox 27,130,[KeyStateSlc4]
DGOptnsProcBox 27+45,130,[KeyStateSlc5]
DGOptnsProcBox 27+45*2,130,[KeyStateSlc6]
DGOptnsProcBox 27+45*3,130,[KeyStateSlc7]
DGOptnsProcBox 27,139,[KeyStateSlc8]
DGOptnsProcBox 27+45,139,[KeyStateSlc9]
DGOptnsProcBox 27+45*2,139,[KeyIncStateSlot]
DGOptnsProcBox 27+45*3,139,[KeyDecStateSlot]
DGOptnsProcBox 8+25,148,[KeySaveState]
DGOptnsProcBox 8+57+25,148,[KeyLoadState]
DGOptnsProcBox 8+114+25,148,[KeyStateSelct]
DGOptnsProcBox 8+38,157,[KeyRewind]
ret
DisplayGUISpeedClick:
mov eax,[GUImouseposx] ; this updates the mouse location
sub eax,[GUIwinposx+21*4] ; effectively 'grabbing' the cursor !
mov edx,[GUImouseposy]
sub edx,[GUIwinposy+21*4]
GUIClickCButton 11,135,byte[FastFwdToggle] ; Checkboxes
GUIClickCButtonfr 11,145,byte[frameskip]
cmp byte[frameskip],0
jne near .frate
DGOptnsProcBox 12,78,[KeyEmuSpeedUp]
DGOptnsProcBox 12,98,[KeyEmuSpeedDown]
jmp near .endsc
.frate
DGOptnsProcBox 12,78,[KeyFRateUp]
DGOptnsProcBox 12,98,[KeyFRateDown]
.endsc
DGOptnsProcBox 12,58,[KeyFastFrwrd] ; Shortcut Boxes
DGOptnsProcBox 12,68,[KeySlowDown]
DGOptnsProcBox 12,88,[KeyResetSpeed]
DGOptnsProcBox 12,108,[EMUPauseKey]
DGOptnsProcBox 12,118,[INCRFrameKey]
GUIPHoldbutton2 118,24,126,32,74,byte[FFRatio],1,28
GUIPHoldbutton2 129,24,137,32,75,byte[FFRatio],-1,0
GUIPHoldbutton2 118,35,126,43,76,byte[SDRatio],1,28
GUIPHoldbutton2 129,35,137,43,77,byte[SDRatio],-1,0
cmp byte[frameskip],0
je near .autopress
GUIPHoldbutton2 97,13,105,21,12,byte[frameskip],1,10
GUIPHoldbutton2 108,13,116,21,13,byte[frameskip],-1,1
ret
.autopress
GUIPHoldbutton2 118,13,126,21,12,byte[maxskip],1,9
GUIPHoldbutton2 129,13,137,21,13,byte[maxskip],-1,0
; Speed Slider
cmp eax,15 ; X-Range for click-area
jl near .nomovebar
cmp eax,15+116
jg near .nomovebar
sub eax,15
shr eax,1
cmp edx,173 ; Y-Range for click-area
jl near .nomovebar
cmp edx,177
jg near .nomovebar
mov [EmuSpeed],al
mov byte[GUIHold],6 ; Lock mouse to bar when clicked
mov eax,[GUIwinposy+21*4]
add eax,175
mov [GUIHoldYlim],eax
mov eax,[GUIwinposx+21*4]
add eax,15
mov [GUIHoldXlimL],eax
add eax,116
mov [GUIHoldXlimR],eax
.nomovebar
ret
DrawMouse:
mov edi,[vidbuffer]
add edi,16
add edi,[GUImouseposx]
mov eax,[GUImouseposy]
shl eax,8
mov ebx,[GUImouseposy]
shl ebx,5
add eax,ebx
add edi,eax
mov esi,GUIMousePtr
mov edx,8
.next2
mov ecx,8
.next
mov al,[esi]
or al,al
jz near .nodraw
test byte[mouseshad],1
jz near .finishadow
mov bl,[edi+288*10+8]
cmp bl,32
jae .noprimshad
add byte[edi+288*10+8],96
jmp .finishadow
.noprimshad
mov bl,[edi+288*4+3]
cmp bl,32
jb .nogray
cmp bl,63
ja .nogray
sub bl,32
shr bl,1
add bl,32
mov [edi+288*4+3],bl
jmp .finishadow
.nogray
and bl,11110000b
cmp bl,64
jne .nomidshad2
add byte[edi+288*4+3],16
jmp .finishadow
.nomidshad2
mov bl,[edi+288*7+5]
cmp bl,148
jb .nomidshad
cmp bl,167
ja .mid2
add byte[edi+288*7+5],20
jmp .finishadow
.mid2
cmp bl,189
jb .nomidshad
cmp bl,220
ja .nomidshad
sub bl,189
; test bl,01h
; jnz .nomidshad
shr bl,1
add bl,189
mov [edi+288*7+5],bl
jmp .finishadow
.nomidshad
.finishadow
mov [edi],al
.nodraw
inc esi
inc edi
dec ecx
jnz near .next
add edi,288-8
dec edx
jnz near .next2
ret