3417 lines
77 KiB
PHP
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
|