2878 lines
65 KiB
PHP
2878 lines
65 KiB
PHP
;Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com )
|
|
;
|
|
;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.
|
|
|
|
|
|
|
|
lastmouseholded db 0
|
|
mousebuttonstat dw 0
|
|
MouseMoveOkay db 0
|
|
LastHoldEnable db 0
|
|
|
|
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
|
|
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
|
|
je .dohold5
|
|
cmp byte[GUIHold],2
|
|
jne .nohold2m
|
|
.dohold5
|
|
mov ecx,[GUIHoldXlimL]
|
|
mov edx,[GUIHoldXlimR]
|
|
call Set_MouseXMax
|
|
mov ecx,[GUIHoldYlim]
|
|
mov edx,[GUIHoldYlim]
|
|
call Set_MouseYMax
|
|
.nohold2m
|
|
cmp byte[GUIHold],3
|
|
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 word[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 word[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 byte[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],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
|
|
cmp word[GUImouseposx],230
|
|
jb near .noclicked
|
|
cmp word[GUImouseposx],233
|
|
jb near .noclick
|
|
cmp word[GUImouseposx],242
|
|
ja .notfound7
|
|
mov byte[GUIcwinpress],1
|
|
jmp .noclick
|
|
.notfound7
|
|
cmp word[GUImouseposx],244
|
|
jb near .noclick
|
|
cmp word[GUImouseposx],253
|
|
ja .notfound8
|
|
mov byte[GUIcwinpress],2
|
|
jmp .noclick
|
|
.notfound8
|
|
jmp .noclick
|
|
.noclicked
|
|
cmp byte[OSPort],3
|
|
jne .noclick
|
|
mov byte[GUIpclicked],1
|
|
mov byte[GUIHold],255
|
|
mov eax,[GUImouseposy]
|
|
mov [GUIHoldYlim],eax
|
|
mov eax,[GUImouseposx]
|
|
mov [GUIHoldXlimL],eax
|
|
call MouseWindow
|
|
jmp .noclick
|
|
.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],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
|
|
; Slide Bar Hold
|
|
mov eax,[GUIHoldYlim]
|
|
mov [GUImouseposy],eax
|
|
mov ebx,[GUImouseposx]
|
|
mov eax,[GUIHoldXlimL]
|
|
cmp ebx,eax
|
|
jnl .noless
|
|
mov [GUImouseposx],eax
|
|
.noless
|
|
mov eax,[GUIHoldXlimR]
|
|
cmp ebx,eax
|
|
jng .nogreat
|
|
mov [GUImouseposx],eax
|
|
.nogreat
|
|
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 .nobhold
|
|
cmp edx,[GUIHoldYlim]
|
|
jl near .nobhold
|
|
cmp eax,[GUIHoldXlimR]
|
|
jg near .nobhold
|
|
cmp edx,[GUIHoldYlimR]
|
|
jg near .nobhold
|
|
mov al,[GUICBHold2]
|
|
mov [GUICBHold],al
|
|
ret
|
|
.nobhold
|
|
mov byte[GUICBHold],0
|
|
ret
|
|
.hold5
|
|
; Slide Bar Hold
|
|
mov eax,[GUIHoldYlim]
|
|
mov [GUImouseposy],eax
|
|
mov ebx,[GUImouseposx]
|
|
mov eax,[GUIHoldXlimL]
|
|
cmp ebx,eax
|
|
jnl .nolessa
|
|
mov [GUImouseposx],eax
|
|
.nolessa
|
|
mov eax,[GUIHoldXlimR]
|
|
cmp ebx,eax
|
|
jng .nogreata
|
|
mov [GUImouseposx],eax
|
|
.nogreata
|
|
mov byte[lastmouseholded],1
|
|
jmp DisplayGUISoundClick
|
|
.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,word[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,word[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
|
|
|
|
cmp byte[OSPort],3
|
|
jne .notwinpressa
|
|
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
|
|
.notwinpressa
|
|
|
|
cmp byte[OSPort],3
|
|
jne .notwinpressb
|
|
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
|
|
|
|
; 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
|
|
je near MoviePlay
|
|
cmp byte[GUICBHold],17
|
|
je near MovieRecord
|
|
cmp byte[GUICBHold],18
|
|
je near MovieStop
|
|
cmp byte[GUICBHold],19
|
|
je near MovieRecord
|
|
cmp byte[GUICBHold],20
|
|
je near SkipMovie
|
|
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
|
|
cmp byte[GUICBHold],21
|
|
jne .nomodem1
|
|
mov byte[CNetType],3
|
|
.nomodem1
|
|
cmp byte[GUICBHold],22
|
|
jne .nomodem2
|
|
mov byte[CNetType],10
|
|
mov byte[ModemProcess],0
|
|
.nomodem2
|
|
cmp byte[GUICBHold],23
|
|
jne .nomodem3
|
|
mov byte[CNetType],2
|
|
.nomodem3
|
|
cmp byte[GUICBHold],24
|
|
jne .nomodem4
|
|
mov byte[CNetType],12
|
|
mov byte[ModemProcess],0
|
|
.nomodem4
|
|
cmp byte[GUICBHold],25
|
|
jne .nomodem4b
|
|
mov byte[CNetType],15
|
|
mov byte[ModemProcess],40
|
|
mov byte[WhichRemote],4
|
|
.nomodem4b
|
|
cmp byte[GUICBHold],26
|
|
jne .nomodem4c
|
|
mov byte[CNetType],15
|
|
mov byte[ModemProcess],41
|
|
mov byte[WhichRemote],4
|
|
.nomodem4c
|
|
cmp byte[GUICBHold],27
|
|
jne .noinit
|
|
cmp byte[CNetType],20
|
|
jne near .nostat20b2
|
|
call PreparePacket
|
|
mov al,255
|
|
call RemoteSendChar
|
|
call SendPacket
|
|
call PreparePacket
|
|
mov al,255
|
|
call RemoteSendChar
|
|
call SendPacket
|
|
call PreparePacket
|
|
mov al,255
|
|
call RemoteSendChar
|
|
call SendPacket
|
|
cmp byte[NetQuitAfter],0
|
|
je .nostat20b2
|
|
mov byte[GUIQuit],1
|
|
.nostat20b2
|
|
call RemoteDeInit
|
|
.noinit
|
|
cmp byte[GUICBHold],28
|
|
jne .nomodem5
|
|
mov byte[CNetType],11
|
|
mov byte[ModemProcess],0
|
|
.nomodem5
|
|
cmp byte[GUICBHold],34
|
|
jne .noipx1
|
|
mov byte[WhichRemote],2
|
|
mov byte[ModemProcess],30
|
|
mov byte[CNetType],15
|
|
.noipx1
|
|
cmp byte[GUICBHold],64
|
|
jne .nostatecancel
|
|
mov byte[NetStateQuit],1
|
|
.nostatecancel
|
|
cmp byte[GUICBHold],65
|
|
jne .nohomepage
|
|
call GotoHomepage
|
|
.nohomepage
|
|
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:
|
|
mov al,[GUIcurrentvideocursloc]
|
|
cmp byte[OSPort],2
|
|
jae .yes16b
|
|
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
|
|
; 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
|
|
xor eax,eax
|
|
mov al,[cvidmode]
|
|
cmp byte[GUIWFVID+eax],1
|
|
je .fullsc
|
|
mov [PrevWinMode],al
|
|
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
|
|
mov dword[GUIkeydelay],0
|
|
ret
|
|
.prevvid db 0
|
|
|
|
NEWSYM SwitchFullScreen
|
|
pushad
|
|
mov ecx,255*296
|
|
mov eax,[vidbufferofsb]
|
|
.loop
|
|
mov dword[eax],0FEFEFEFEh
|
|
add eax,4
|
|
loop .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
|
|
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 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 GUIClickCButtonS 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
|
|
call initrevst
|
|
mov al,[DSPMem+0Ch]
|
|
call WDSPReg0C
|
|
mov al,[DSPMem+1Ch]
|
|
call WDSPReg1C
|
|
mov al,[DSPMem+2Ch]
|
|
call WDSPReg2C
|
|
mov al,[DSPMem+3Ch]
|
|
call WDSPReg3C
|
|
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
|
|
|
|
%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
|
|
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
|
|
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
|
|
cmp byte[En2xSaI],0
|
|
jne %%nomodeq
|
|
call ClearScreen
|
|
cmp byte[OSPort],2
|
|
jae %%nomodeq
|
|
cmp byte[cvidmode],1
|
|
jne %%nomodeq
|
|
mov byte[cbitmode],1
|
|
call initvideo2
|
|
mov byte[cbitmode],0
|
|
call GUISetPal
|
|
%%nomodeq
|
|
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 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
|
|
|
|
GUIlastdispval dd 0
|
|
GUIdispmode dd 0
|
|
GUIlastypos dd 0
|
|
GUIlastcpos dd 0
|
|
GUIlastvpos dd 0
|
|
|
|
%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,dword[%8]
|
|
mov [GUIlastcpos],eax
|
|
mov eax,dword[%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 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,167,228,178,1
|
|
GUIPButtonHoleLoad 9,163,byte[GUIloadfntype],0
|
|
GUIPButtonHoleLoad 9,171,byte[GUIloadfntype],1
|
|
GUIPButtonHoleLoad 9,179,byte[GUIloadfntype],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
|
|
|
|
DisplayGUIMovieClick:
|
|
cmp byte[MovieRecordWinVal],0
|
|
je near .displayboxa
|
|
GUIPHoldbutton 17,55,59,66,19
|
|
GUIPHoldbutton 70,55,112,66,20
|
|
ret
|
|
.displayboxa
|
|
GUIPHoldbutton 7,17,49,28,16
|
|
GUIPHoldbutton 7,33,49,44,17
|
|
GUIPHoldbutton 7,49,49,60,18
|
|
%ifdef __LINUX__
|
|
GUIPButtonHole 60,25,byte[CMovieExt],'v'
|
|
%else
|
|
GUIPButtonHole 60,25,byte[CMovieExt],'V'
|
|
%endif
|
|
GUIPButtonHole 80,25,byte[CMovieExt],'1'
|
|
GUIPButtonHole 100,25,byte[CMovieExt],'2'
|
|
GUIPButtonHole 120,25,byte[CMovieExt],'3'
|
|
GUIPButtonHole 60,40,byte[CMovieExt],'4'
|
|
GUIPButtonHole 80,40,byte[CMovieExt],'5'
|
|
GUIPButtonHole 100,40,byte[CMovieExt],'6'
|
|
GUIPButtonHole 120,40,byte[CMovieExt],'7'
|
|
GUIPButtonHole 60,55,byte[CMovieExt],'8'
|
|
GUIPButtonHole 80,55,byte[CMovieExt],'9'
|
|
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
|
|
cmp byte[OSPort],3
|
|
jne %%notwin32
|
|
cmp dword[keycontrolval],0
|
|
je %%notwin32
|
|
push ebx
|
|
mov ebx,[keycontrolval]
|
|
mov byte[ebx],1
|
|
pop ebx
|
|
%%notwin32
|
|
ret
|
|
%%cancelkey
|
|
xor ebx,ebx
|
|
mov %3,ebx
|
|
ret
|
|
%%skip
|
|
%endmacro
|
|
|
|
%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 dword[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 dword[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
|
|
cmp byte[OSPort],3
|
|
je near .win32
|
|
GUIPHoldbutton 125,50,185,61,15
|
|
.win32
|
|
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
|
|
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,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,135,[edi]
|
|
DGOptnsProcBoxb 165,145,[edi+4]
|
|
DGOptnsProcBoxb 125,135,[edi+8]
|
|
DGOptnsProcBoxb 125,145,[edi+12]
|
|
|
|
xor ebx,ebx
|
|
mov bl,[cplayernum]
|
|
GUIClickCButtonID 5,162,byte[pl1p209+ebx]
|
|
ret
|
|
|
|
|
|
DisplayGUIOptionClick:
|
|
GUIClickCButtonfr 11,26,byte[frameskip]
|
|
xor ebx,ebx
|
|
mov bl,[cvidmode]
|
|
cmp byte[GUINGVID+ebx],1
|
|
jne near .invalidng
|
|
GUIClickCButton2 11,36,byte[newengen],byte[cfgnewgfx],1
|
|
.invalidng
|
|
GUIClickCButton2 11,46,byte[vsyncon],byte[cfgvsync],1
|
|
GUIClickCButton2 11,56,byte[FPUCopy],byte[cfgcopymethod],2
|
|
GUIClickCButtonM 11,66,byte[pl12s34]
|
|
cmp byte[OSPort],3
|
|
je near .win32config
|
|
GUIClickCButton 11,76,byte[SidewinderFix]
|
|
.win32config
|
|
%ifndef __LINUX__
|
|
GUIClickCButton 11,76,byte[HighPriority]
|
|
%endif
|
|
GUIClickCButton 11,86,byte[FPSAtStart]
|
|
GUIClickCButton 11,96,byte[Turbo30hz]
|
|
GUIClickCButton 11,106,byte[TimerEnable]
|
|
GUIClickCButton 11,116,byte[FastFwdToggle]
|
|
GUIClickCButton 11,126,byte[SRAMSave5Sec]
|
|
GUIClickCButtonO 11,136,byte[OldGfxMode2]
|
|
GUIClickCButton 11,146,byte[LatestSave]
|
|
GUIClickCButton 11,156,byte[AutoState]
|
|
GUIClickCButton 11,166,byte[DontSavePath]
|
|
GUIClickCButton 11,176,byte[SPCDisable]
|
|
GUIClickCButton 11,186,byte[GUIEnableTransp]
|
|
; Frameskip = 0
|
|
cmp byte[frameskip],0
|
|
je near .autopress
|
|
GUIPHoldbutton2 97,12,105,22,12,byte[frameskip],1,10
|
|
GUIPHoldbutton2 108,12,116,22,13,byte[frameskip],-1,1
|
|
ret
|
|
.autopress
|
|
GUIPHoldbutton2 118,12,126,22,12,byte[maxskip],1,9
|
|
GUIPHoldbutton2 129,12,137,22,13,byte[maxskip],-1,0
|
|
ret
|
|
|
|
|
|
DisplayGUIVideoClick2:
|
|
push eax
|
|
mov eax,[NumVideoModes]
|
|
mov dword[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 dword[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
|
|
GUIClickCButton4 11,103,byte[scanlines],byte[cfgscanline],1
|
|
.nocheckboxb
|
|
xor ebx,ebx
|
|
mov bl,[cvidmode]
|
|
cmp byte[GUITBVID+ebx],0
|
|
je .nocheckboxttb
|
|
GUIClickCButton5 11,163,byte[Triplebufen],1
|
|
.nocheckboxttb
|
|
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[GUIHSVID+ebx],0
|
|
je near .nohsline
|
|
GUIClickCButton4 11,113,byte[scanlines],byte[cfgscanline],3
|
|
GUIClickCButton4 11,123,byte[scanlines],byte[cfgscanline],2
|
|
.nohsline
|
|
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,73,byte[antienab],byte[cfginterp],1
|
|
.nocheckbox1b
|
|
xor ebx,ebx
|
|
mov bl,[cvidmode]
|
|
cmp byte[GUIFSVID+ebx],0
|
|
je .nocheckbox2b
|
|
GUIClickCButton3 11,83,byte[ScreenScale],byte[GUIScreenScale],1
|
|
.nocheckbox2b
|
|
xor ebx,ebx
|
|
mov bl,[cvidmode]
|
|
cmp byte[GUISSVID+ebx],0
|
|
je .nocheckbox3b
|
|
GUIClickCButton3 11,93,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
|
|
ret
|
|
|
|
GUINumValue dd 0
|
|
GUIBlankVar dd 0
|
|
|
|
DisplayGUISoundClick:
|
|
mov eax,[GUImouseposx]
|
|
sub eax,[GUIwinposx+6*4]
|
|
mov edx,[GUImouseposy]
|
|
sub edx,[GUIwinposy+6*4]
|
|
GUIClickCButton 11,21,byte[cfgsoundon]
|
|
GUIClickCButton 11,30,byte[cfgStereoSound]
|
|
GUIClickCButton 11,39,byte[RaisePitch]
|
|
GUIClickCButton 11,101,byte[SoundNoiseDis]
|
|
GUIClickCButtonS 11,111,byte[RevStereo]
|
|
cmp byte[OSPort],3
|
|
je near .win32sound
|
|
GUIClickCButton 11,121,byte[Surround]
|
|
.win32sound
|
|
%ifndef __LINUX__
|
|
GUIClickCButton 11,121,byte[LargeSoundBuf]
|
|
%endif
|
|
GUIClickCButton 11,131,byte[InterSound]
|
|
GUIClickCButton 11,141,byte[LowPassFilter]
|
|
GUIClickCButton 11,151,byte[SoundBufEn]
|
|
GUIClickCButton 11,161,byte[UseCubicSpline]
|
|
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
|
|
|
|
sampratenext db 1,4,5,6,2,3,0,0,0,0
|
|
|
|
%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
|
|
GUIBoxVar 82,129,173,136,GUIcurrentcheatwin,1
|
|
GUIBoxVar 82,140,196,147,GUIcurrentcheatwin,2
|
|
; 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
|
|
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
|
|
ret
|
|
|
|
DisplayNetOptnsClick:
|
|
cmp byte[CNetType],1
|
|
jne near .nomodem
|
|
GUIPHoldbutton 5,15,89,26,21
|
|
GUIPHoldbutton 5,30,89,41,22
|
|
GUIPHoldbutton 5,45,89,56,23
|
|
GUIPHoldbutton 5,60,89,71,24
|
|
.nomodem
|
|
cmp byte[CNetType],2
|
|
jne near .nomodemc
|
|
GUIPButtonHole2 9,25,byte[ComNum],1,byte[ComIRQ],4
|
|
GUIPButtonHole2 9,35,byte[ComNum],2,byte[ComIRQ],3
|
|
GUIPButtonHole2 9,45,byte[ComNum],3,byte[ComIRQ],4
|
|
GUIPButtonHole2 9,55,byte[ComNum],4,byte[ComIRQ],3
|
|
GUIPButtonHole 94,25,byte[BaudRate],0
|
|
GUIPButtonHole 94,35,byte[BaudRate],1
|
|
GUIPButtonHole 94,45,byte[BaudRate],2
|
|
GUIPButtonHole 94,55,byte[BaudRate],3
|
|
GUIPButtonHole 94,65,byte[BaudRate],4
|
|
GUIPButtonHole 94,75,byte[BaudRate],5
|
|
GUIPButtonHole 94,85,byte[BaudRate],6
|
|
GUIPButtonHole 9,85,byte[GUIDialSt+3],'T'
|
|
GUIPButtonHole 9,95,byte[GUIDialSt+3],'P'
|
|
GUIPHoldbutton2 55,69,63,79,25,byte[ComIRQ],1,15
|
|
GUIPHoldbutton2 66,69,74,79,26,byte[ComIRQ],-1,2
|
|
GUITextBoxInput 21,125,175,133,GUIInitSt1,24
|
|
GUITextBoxInput 21,136,175,144,GUIInitSt2,24
|
|
GUIClickCButton 12,147,byte[FossilUse]
|
|
.nomodemc
|
|
cmp byte[CNetType],3
|
|
jne near .nomodemd
|
|
GUIPHoldbutton 141,38,175,49,28
|
|
.nomodemd
|
|
cmp byte[CNetType],4
|
|
jne near .notcpip
|
|
cmp byte[NetPlayNoMore],1
|
|
je near .notcpip
|
|
GUIPHoldbutton 5,35,129,46,25
|
|
GUIPHoldbutton 5,70,129,81,26
|
|
GUITextBoxInputB 55,13,95,21,1
|
|
GUITextBoxInputB 26,58,191,66,0
|
|
GUITextBoxInputB 55,23,119,31,2
|
|
|
|
GUIClickCButton 5,93,byte[UDPConfig]
|
|
.notcpip
|
|
cmp byte[CNetType],10
|
|
je .init
|
|
cmp byte[CNetType],11
|
|
je .init
|
|
cmp byte[CNetType],15
|
|
je .init
|
|
cmp byte[CNetType],12
|
|
jne near .noinit
|
|
.init
|
|
GUIPHoldbutton 120,135,181,146,27
|
|
.noinit
|
|
cmp byte[CNetType],7
|
|
jne near .noipx
|
|
GUIPHoldbutton 53,48,87,59,34
|
|
.noipx
|
|
cmp byte[CNetType],20
|
|
jne near .nochat
|
|
GUIPHoldbutton 111,169,181,180,27
|
|
GUIClickCButtonN 7,135,byte[RemoteCommand],3
|
|
GUIClickCButtonN 32,135,byte[RemoteCommand],4
|
|
GUIClickCButtonN 57,135,byte[RemoteCommand],5
|
|
GUIClickCButtonN 7,145,byte[RemoteCommand],6
|
|
GUIClickCButtonN 32,145,byte[RemoteCommand],7
|
|
GUIClickCButtonN 7,175,byte[RemoteCommand],8
|
|
|
|
GUIClickCButtonN 111,135,byte[RemoteCommand],50
|
|
GUIClickCButtonN 111,145,byte[RemoteCommand],41
|
|
GUIClickCButtonN 111,155,byte[RemoteCommand],42
|
|
GUIPHoldbutton2 79,156,87,166,29,byte[Latencytochange],1,19
|
|
GUIPHoldbutton2 90,156,98,166,30,byte[Latencytochange],-1,1
|
|
; DrawSlideBarWin 8,181,15,[GUIcurrentvideoviewloc],[TViewLoc],12,97,GUINCStA
|
|
; GUISlidebarImpl 181,15,188,112,GUINCStA,12,GUIcurrentcheatviewloc,TViewCLoc,TViewLoc,12
|
|
|
|
mov al,[Latency]
|
|
cmp byte[Latencytochange],al
|
|
je .nochat
|
|
mov byte[RemoteCommand],20
|
|
.nochat
|
|
|
|
cmp byte[CNetType],22
|
|
je .yesstate
|
|
cmp byte[CNetType],21
|
|
jne near .nostate
|
|
.yesstate
|
|
GUIPHoldbutton 73,48,127,59,64
|
|
.nostate
|
|
ret
|
|
|
|
guipresstest:
|
|
xor ebx,ebx
|
|
mov ecx,256+128+64
|
|
.a
|
|
mov byte[pressed+ebx],0
|
|
inc ebx
|
|
loop .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
|
|
loop .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
|
|
loop .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
|
|
|
|
guipresstext1 db 'ENTER THE KEY',0
|
|
guipresstext2 db 'OR BUTTON TO USE',0
|
|
guipresstext3 db '(ESC TO CLEAR)',0
|
|
|
|
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
|
|
loop .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
|
|
loop .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
|
|
|
|
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
|
|
guipressptr dd 0
|
|
guicpressptr dd 0
|
|
|
|
DisplayGameOptnsClick:
|
|
; Process boxes
|
|
mov dword[keycontrolval],0
|
|
DGOptnsProcBox 27,24,[KeyBGDisble0]
|
|
DGOptnsProcBox 27+45,24,[KeyBGDisble1]
|
|
DGOptnsProcBox 27+45*2,24,[KeyBGDisble2]
|
|
DGOptnsProcBox 27+45*3,24,[KeyBGDisble3]
|
|
DGOptnsProcBox 27,32,[KeySprDisble]
|
|
DGOptnsProcBox 78,52,[KeyResetAll]
|
|
DGOptnsProcBox 78,60,[KeyExtraEnab]
|
|
DGOptnsProcBox 78,68,[KeyNewGfxSwt]
|
|
DGOptnsProcBox 78,76,[KeyWinDisble]
|
|
DGOptnsProcBox 78,84,[KeyOffsetMSw]
|
|
DGOptnsProcBox 78,92,[KeySlowDown]
|
|
DGOptnsProcBox 178,60,[KeyVolUp]
|
|
DGOptnsProcBox 178,68,[KeyVolDown]
|
|
DGOptnsProcBox 178,76,[KeyFRateUp]
|
|
DGOptnsProcBox 178,84,[KeyFRateDown]
|
|
cmp byte[OSPort],3
|
|
jne near .notwin32
|
|
DGOptnsProcBox 178,44,[KeyRewind]
|
|
.notwin32
|
|
DGOptnsProcBox 178,52,[KeyFastFrwrd]
|
|
DGOptnsProcBox 27,112,[KeyDisableSC0]
|
|
DGOptnsProcBox 27+45,112,[KeyDisableSC1]
|
|
DGOptnsProcBox 27+45*2,112,[KeyDisableSC2]
|
|
DGOptnsProcBox 27+45*3,112,[KeyDisableSC3]
|
|
DGOptnsProcBox 27,120,[KeyDisableSC4]
|
|
DGOptnsProcBox 27+45,120,[KeyDisableSC5]
|
|
DGOptnsProcBox 27+45*2,120,[KeyDisableSC6]
|
|
DGOptnsProcBox 27+45*3,120,[KeyDisableSC7]
|
|
DGOptnsProcBox 27+45*2,132,[KeyStateSlc0]
|
|
DGOptnsProcBox 27+45*3,132,[KeyStateSlc1]
|
|
DGOptnsProcBox 27,140,[KeyStateSlc2]
|
|
DGOptnsProcBox 27+45,140,[KeyStateSlc3]
|
|
DGOptnsProcBox 27+45*2,140,[KeyStateSlc4]
|
|
DGOptnsProcBox 27+45*3,140,[KeyStateSlc5]
|
|
DGOptnsProcBox 27,148,[KeyStateSlc6]
|
|
DGOptnsProcBox 27+45,148,[KeyStateSlc7]
|
|
DGOptnsProcBox 27+45*2,148,[KeyStateSlc8]
|
|
DGOptnsProcBox 27+45*3,148,[KeyStateSlc9]
|
|
DGOptnsProcBox 8+25,158,[KeySaveState]
|
|
DGOptnsProcBox 8+57+25,158,[KeyLoadState]
|
|
DGOptnsProcBox 8+114+25,158,[KeyStateSelct]
|
|
DGOptnsProcBox 8+25,178,[KeyQuickLoad]
|
|
DGOptnsProcBox 8+57+31,178,[KeyQuickRst]
|
|
DGOptnsProcBox 8+114+25,178,[KeyQuickExit]
|
|
DGOptnsProcBox 8+25,188,[KeyQuickChat]
|
|
DGOptnsProcBox 8+57+49,188,[KeyQuickSnapShot]
|
|
ret
|
|
|
|
DisplayGUIOptnsClick:
|
|
mov eax,[GUImouseposx]
|
|
sub eax,[GUIwinposx+10*4]
|
|
mov edx,[GUImouseposy]
|
|
sub edx,[GUIwinposy+10*4]
|
|
GUIClickCButton 12,23,byte[mousewrap]
|
|
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]
|
|
GUIClickCButton6 12,83,byte[GUIEffect],1
|
|
GUIClickCButton6 12,93,byte[GUIEffect],2
|
|
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[GUIRAdd],al
|
|
je .nomovebar1b
|
|
mov byte[GUIRAdd],al
|
|
call GUISetPal
|
|
.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[GUIGAdd],al
|
|
je .nomovebar2b
|
|
mov byte[GUIGAdd],al
|
|
call GUISetPal
|
|
.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[GUIBAdd],al
|
|
je .nomovebar3b
|
|
mov byte[GUIBAdd],al
|
|
call GUISetPal
|
|
.nomovebar3b
|
|
mov byte[GUIHold],2
|
|
mov eax,[GUIwinposy+10*4]
|
|
add eax,148
|
|
mov [GUIHoldYlim],eax
|
|
.nomovebar3
|
|
.nomovebar
|
|
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:
|
|
cmp byte[OSPort],3
|
|
jne near .nowin32
|
|
GUIPHoldbutton 5,87,74,98,65
|
|
.nowin32
|
|
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 178,82,byte[GUIComboPNum],0
|
|
GUIPButtonHole 196,82,byte[GUIComboPNum],1
|
|
GUIPButtonHole 214,82,byte[GUIComboPNum],2
|
|
GUIPButtonHole 232,82,byte[GUIComboPNum],3
|
|
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 135,91,157,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
|
|
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
|
|
GUIPHoldbutton 30,140,80,152,51
|
|
cmp byte[CheatSearchStatus],1
|
|
jne near .cheatsearching
|
|
jmp .nosearch
|
|
.cheatsearching
|
|
cmp byte[CheatSrcSearchType],1
|
|
je near .cheatsearchingcomp
|
|
jmp .searched
|
|
.cheatsearchingcomp
|
|
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
|
|
GUIPHoldbutton 120,140,170,152,53
|
|
.nosearch
|
|
GUIPHoldbutton 10,140,60,152,51
|
|
GUIPHoldbutton 70,140,110,152,52
|
|
ret
|
|
|
|
.preview
|
|
; 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
|
|
GUIPHoldbutton 140,140,180,152,55
|
|
ret
|
|
; DrawSlideBarWin 13,173,28,[GUIcurrentchtsrcviewloc],[NumCheatSrc],12,73,GUICSStA
|
|
; DrawGUIWinBox 13,5,20,171,108,167
|
|
.add
|
|
GUIPHoldbutton 60,155,120,167,56
|
|
GUIPHoldbutton 130,155,160,167,57
|
|
GUIClickCButton 8,139,byte[CheatUpperByteOnly]
|
|
GUIBoxVar 10,30,80,37,CurCStextpos,0
|
|
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
|
|
|
|
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 byte[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
|
|
|