📄 gui.asm
字号:
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach );;http://www.zsnes.com;http://sourceforge.net/projects/zsnes;https://zsnes.bountysource.com;;This program is free software; you can redistribute it and/or;modify it under the terms of the GNU General Public License;version 2 as published by the Free Software Foundation.;;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.; Sorry. The GUI code is a total mess. One problem I encountered is that; there seems to be a bug in nasm with using math calculations combined; with macros within macros, so in some macro definitions, I had to; add/subtract extra values in certain macros to get the GUI to align; correctly.; The GUI is drawn is mostly manually. What I mean is such as; coding 5 boxes to represent a shaded box for each box. Although that; can be simplified using macros to draw 5 boxes, that unknown bug in nasm; showed up which prevented me from using macros extensively. I was; thinking of changing it to an object-based GUI for easier coding,; but that was decided far into the development of the GUI itself; and that I also never expected this code to become open-source, so I; decided not to proceed with it.; Routine StartGUI is the function called to start the GUI and also; contains the execution main loop of the GUI. If you want to completely; replace the GUI, just add a function call from that function, then; jump to endprog to exit ZSNES or continueprog to continue with the; gameplay. Do not replace StartGUI with a function since it is not; a function, but rather a label that is being jumped to.%include "macros.mac"EXTSYM curblank,vidpastecopyscr,frameskip,newengen,cvidmode,antienabEXTSYM soundon,StereoSound,SoundQuality,MusicRelVol,endprogEXTSYM continueprog,spcBuffera,cbitmode,t1ccEXTSYM romloadskip,romdata,init65816,current_zstEXTSYM procexecloop,SPCRAM,spcPCRam,spcS,spcRamDP,spcA,spcX,spcY,spcP,spcNZEXTSYM Voice0Status,Voice1Status,Voice2Status,Voice3Status,Voice4StatusEXTSYM Voice5Status,Voice6Status,Voice7Status,statesaver,loadstate2EXTSYM vidbuffer,ASCII2Font,hirestiledat,showallext,scanlinesEXTSYM sprlefttot,spritetablea,KeyRTRCycleEXTSYM cgram,tempco0,prevbright,maxbr,prevpal,coladdr,coladdgEXTSYM coladdb,scaddtype,initvideo,pressed,UpdateDevices,memtabler8EXTSYM memtablew8,writeon,JoyRead,SetInputDevice,delay,FPSOn,RevStereo,WDSPReg0CEXTSYM WDSPReg1C,pl12s34,resolutn,Makemode7Table,vidbufferofsb,wramdata,bgfixerEXTSYM videotroub,CheatCodeSave,CheatCodeLoad,LoadCheatSearchFileEXTSYM SaveCheatSearchFile,Get_Date,Check_Key,Get_Key,sramEXTSYM TripBufAvail,ResetTripleBuf,ScanCodeListingEXTSYM AdjustFrequency,GUISaveVars,Init_Mouse,Get_MouseData,Set_MouseXMaxEXTSYM Set_MouseYMax,Set_MousePosition,Get_MousePositionDisplacement,GUIInitEXTSYM GUIDeInit,SpecialLine,DrawWater,DrawBurn,DrawSmokeEXTSYM GetDate,horizon_get,ErrorPointer,MessageOn,GetTimeEXTSYM GetScreen,Clear2xSaIBuffer,MouseWindow,ExitFromGUIEXTSYM newgfx16b,NumVideoModes,MusicVol,DSPMem,NumInputDevicesEXTSYM GUIInputNames,GUIVideoModeNames,GameSpecificInput,device1,device2,TwelveHourClockEXTSYM GUIM7VID,GUINTVID,GUIHQ2X,RawDumpInProgressEXTSYM MultiTap,SFXEnable,RestoreSystemVarsEXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6EXTSYM SkipMovie,MovieStop,MoviePlay,MovieRecordEXTSYM MovieInsertChapter,MovieSeekAhead,MovieSeekBehind,ResetDuringMovieEXTSYM MovieDumpRaw,MovieAppend,AutoLoadCht,GUIQuickLoadUpdate,GUILoadDataEXTSYM GUIwinposx,GUIwinposy,maxskip,GUIEffect,hqFilter,En2xSaI,NTSCFilterEXTSYM NTSCBlend,NTSCHue,NTSCSat,NTSCCont,NTSCBright,NTSCSharp,NTSCRefEXTSYM NTSCGamma,NTSCRes,NTSCArt,NTSCFringe,NTSCBleed,NTSCWarpEXTSYM LowPassFilterType,MovieStartMethod,MovieDisplayFrame,savewinposEXTSYM SnapPath,SPCPath,BSXPath,SGPath,STPath,GNextPath,FEOEZPath,SJNSPathEXTSYM MDHPath,SPL4Path,SRAMPath,CheatSrcByteSize,prevloadfnamelEXTSYM prevloadiname,prevloaddnamel,prevlfreeze,FirstTimeData,MMXSupportEXTSYM GUIRAdd,GUIGAdd,GUIBAdd,GUITRAdd,GUITGAdd,GUITBAdd,GUIWRAddEXTSYM GUIWGAdd,GUIWBAdd,GUIloadfntype,SoundInterpTypeEXTSYM CheatSrcByteBase,CheatSrcSearchType,CheatUpperByteOnly,GUIComboGameSpecEXTSYM KeyStateSlc0,KeyStateSlc1,KeyStateSlc2,KeyStateSlc3,KeyStateSlc4EXTSYM KeyStateSlc5,KeyStateSlc6,KeyStateSlc7,KeyStateSlc8,KeyStateSlc9EXTSYM RewindStates,RewindFrames,PauseRewind,PauseLoad,SRAMState,AutoStateEXTSYM LatestSave,SRAMSave5Sec,AutoIncSaveSlot,KeyUsePlayer1234EXTSYM pl1contrl,pl1selk,pl1startk,pl1upk,pl1downk,pl1leftk,pl1rightk,pl1XkEXTSYM pl1Ak,pl1Lk,pl1Yk,pl1Bk,pl1Rk,pl1Xtk,pl1Ytk,pl1Atk,pl1Btk,pl1Ltk,pl1RtkEXTSYM pl1ULk,pl1URk,pl1DLk,pl1DRk,pl2contrl,pl2selk,pl2startk,pl2upk,pl2downkEXTSYM pl2leftk,pl2rightk,pl2Xk,pl2Ak,pl2Lk,pl2Yk,pl2Bk,pl2Rk,pl2Xtk,pl2YtkEXTSYM pl2Atk,pl2Btk,pl2Ltk,pl2Rtk,pl2ULk,pl2URk,pl2DLk,pl2DRk,pl3contrl,pl3selkEXTSYM pl3startk,pl3upk,pl3downk,pl3leftk,pl3rightk,pl3Xk,pl3Ak,pl3Lk,pl3YkEXTSYM pl3Bk,pl3Rk,pl3Xtk,pl3Ytk,pl3Atk,pl3Btk,pl3Ltk,pl3Rtk,pl3ULk,pl3URkEXTSYM pl3DLk,pl3DRk,pl4contrl,pl4selk,pl4startk,pl4upk,pl4downk,pl4leftkEXTSYM pl4rightk,pl4Xk,pl4Ak,pl4Lk,pl4Yk,pl4Bk,pl4Rk,pl4Xtk,pl4Ytk,pl4Atk,pl4BtkEXTSYM pl4Ltk,pl4Rtk,pl4ULk,pl4URk,pl4DLk,pl4DRk,pl5contrl,pl5selk,pl5startkEXTSYM pl5upk,pl5downk,pl5leftk,pl5rightk,pl5Xk,pl5Ak,pl5Lk,pl5Yk,pl5Bk,pl5RkEXTSYM pl5Xtk,pl5Ytk,pl5Atk,pl5Btk,pl5Ltk,pl5Rtk,pl5ULk,pl5URk,pl5DLk,pl5DRkEXTSYM KeyResetAll,KeyExtraEnab1,KeyExtraEnab2,KeyVolDown,KeyVolUpEXTSYM KeyBGDisble0,KeyBGDisble1,KeyBGDisble2,KeyBGDisble3,KeySprDisbleEXTSYM KeyDisableSC0,KeyDisableSC1,KeyDisableSC2,KeyDisableSC3,KeyQuickSnapShotEXTSYM KeyDisableSC4,KeyDisableSC5,KeyDisableSC6,KeyDisableSC7,KeyQuickSaveSPCEXTSYM KeyQuickLoad,KeyQuickRst,KeyQuickExit,KeyQuickClock,KeyQuickChatEXTSYM KeyInsrtChap,KeyPrevChap,KeyNextChap,KeyDisplayFPS,KeyNewGfxSwtEXTSYM KeyIncStateSlot,KeyDecStateSlot,KeySaveState,KeyLoadState,KeyStateSelctEXTSYM KeyRewind,KeyEmuSpeedUp,KeyEmuSpeedDown,KeyFRateUp,KeyFRateDownEXTSYM KeyFastFrwrd,KeySlowDown,KeyResetSpeed,EMUPauseKey,INCRFrameKeyEXTSYM KeyWinDisble,KeyOffsetMSw,JoyPad1Move,init_save_paths,loadquickfnameEXTSYM mousewrap,GUIRClick,SaveSramData,SwapMouseButtonsEXTSYM FPSAtStart,Turbo30hz,TimerEnable,SmallMsgText,mouse1lh,mouse2lhEXTSYM AutoPatch,RomInfo,AllowUDLR,GrayscaleMode,GUIMovieForcedTextEXTSYM Mode7HiRes16b,FFRatio,SDRatio,EmuSpeed,mouseshad,MovieForcedLengthEnabledEXTSYM esctomenu,GUILoadKeysJumpTo,lhguimouse,MZTForceRTR,GetMovieForcedLengthEXTSYM GUIEnableTransp,FilteredGUI,Surround,SPCDisable,nosaveSRAMEXTSYM FastFwdToggle,gui_key,gui_key_extended,GUILoadKeysNavigateEXTSYM KeyDisplayBatt,KeyIncreaseGamma,KeyDecreaseGammaEXTSYM MovieVideoMode,MovieAudio,MovieVideoAudio,MovieAudioCompress,newfontEXTSYM d_names,selected_names,GUIfileentries,GUIdirentries,GUIcurrentdirviewlocEXTSYM GUIcurrentfilewin,GUIcurrentcursloc,GUIcurrentviewloc,SetMovieForcedLengthEXTSYM GUIcurrentdircursloc,GetLoadData,ZRomPath,SaveSecondState,ClockBox,DisplayInfoEXTSYM GUIJT_currentviewloc,GUIJT_currentcursloc,GUIJT_entries,ScreenShotFormatEXTSYM GUIJT_offset,GUIJT_viewable,GUIGenericJumpTo,SSAutoFire,SSPause%ifdef __UNIXSDL__EXTSYM numlockptr%elifdef __WIN32__EXTSYM initDirectDraw,reInitSound,CheckAlwaysOnTop,CheckPriority,AlwaysOnTopEXTSYM CheckScreenSaver,MouseWheel,TrapMouseCursor,AllowMultipleInst,TripleBufferWinEXTSYM HighPriority,DisableScreenSaver,SaveMainWindowPos,PrimaryBufferEXTSYM CBBuffer,CBLength,PasteClipBoard,ctrlptr,PauseFocusChange%elifdef __MSDOS__EXTSYM dssel,SetInputDevice209,initvideo2,Force8b,SBHDMA,vibracard,smallscreenonEXTSYM pl1p209,pl2p209,pl3p209,pl4p209,pl5p209,SidewinderFix,Triplebufen,ScreenScaleEXTSYM GUIEAVID,GUIFSVID,GUIWSVID,GUISSVID,GUITBVID,GUISLVID,GUIHSVID,GUI2xVIDEXTSYM JoyMinX209,JoyMaxX209,JoyMinY209,JoyMaxY209,DOSClearScreen,dosmakepal%endif%ifndef __MSDOS__EXTSYM ZsnesPage,DocsPage,GUICustomX,GUICustomY,GetCustomXY,SetCustomXY,initwinvideoEXTSYM Keep4_3Ratio,PrevFSMode,PrevWinMode,NTSCFilterInit,hqFilterlevelEXTSYM GUIWFVID,GUIDSIZE,GUIHQ3X,GUIHQ4X,GUIKEEP43,Keep43Check,changeRes%endif%ifndef __WIN32__EXTSYM GUII2VID%endif%ifndef __UNIXSDL__EXTSYM vsyncon%endif%ifdef __OPENGL__EXTSYM BilinearFilter,GUIBIFIL,drawscreenwin,blinit%endif%include "gui/guitools.inc"%include "gui/guimisc.inc"%include "gui/guimouse.inc"%include "gui/guiwindp.inc"%include "gui/guikeys.inc"%include "gui/guicheat.inc"%include "gui/guicombo.inc"; Things to do :;; .checkmenuboxclick; gray scale = 32 .. 63; shadow = 96 .. 127; blue scale = 148 .. 167, 168 .. 187; gray scale = 189 .. 220 (32+137); | Game Config Cheat MultiPlay Misc;-------------------------------------------------------; Load Input Add Code Modem Misc Keys; Run ----- Browse IPX GUI Opts; Reset Devices Search Movie Opt; ----- Chip Cfg Key Comb.; Save State ----- Save Cfg; Load State Options -----; Pick State Video About; ----- Sound; Quit Paths; Saves; Speed; NetPlay only has "Internet" for Windows/Linux; Windows : 1 = Load; 2 = Chose State; 3 = Input Device Window; 4 = Options; 5 = Video; 6 = Sound; 7 = Cheat; 8 = Net Options; 9 = Game Options; 10 = GUI Options; 11 = About; 12 = Reset Confirmation; 13 = Cheat Search; 14 = SaveState Confirmation; 15 = Movies; 16 = Key Combo; 17 = Devices; 18 = Chip Config; 19 = Paths; 20 = Saves; 21 = SpeedSECTION .data;The first byte is the number of fields on the right not including the seperatorsMenuDat1 db 12, 3,1,1,1,1,1,1,1,1,1,0,1,2,0MenuDat2 db 8, 3,1,1,0,1,1,1,0,2,0MenuDat3 db 10, 3,0,1,1,0,1,1,1,1,1,2,0MenuDat4 db 2, 3,1,2,0%ifndef __MSDOS__MenuDat5 db 0, 2,0,0%elseMenuDat5 db 1, 3,2,0%endifMenuDat6 db 6, 3,1,1,1,1,0,2,0NEWSYM GUIPrevMenuData, db 1,'1. ',0 db 1,'2. ',0 db 1,'3. ',0 db 1,'4. ',0 db 1,'5. ',0 db 1,'6. ',0 db 1,'7. ',0 db 1,'8. ',0 db 1,'9. ',0 db 1,'0. ',0 db 0,'------------',0 db 1,'FREEZE DATA: OFF ',0 db 1,'CLEAR ALL DATA ',0GUIGameMenuData: db 1,'LOAD ',0 db 1,'RUN [ESC] ',0 db 1,'RESET ',0 db 0,'------------',0 db 1,'SAVE STATE ',0 db 1,'OPEN STATE ',0 db 1,'PICK STATE ',0 db 0,'------------',0 db 1,'QUIT ',0GUIConfigMenuData: db 1,'INPUT ',0 db 0,'------------',0 db 1,'DEVICES ',0 db 1,'CHIP CFG ',0 db 0,'------------',0 db 1,'OPTIONS ',0 db 1,'VIDEO ',0 db 1,'SOUND ',0 db 1,'PATHS ',0 db 1,'SAVES ',0 db 1,'SPEED ',0GUICheatMenuData: db 1,'ADD CODE ',0 db 1,'BROWSE ',0 db 1,'SEARCH ',0GUINetPlayMenuData:%ifndef __MSDOS__ db 1,'INTERNET ',0 db 0,'------------',0%else db 1,'MODEM ',0 db 1,'IPX ',0%endifGUIMiscMenuData: db 1,'MISC KEYS ',0 db 1,'GUI OPTS ',0 db 1,'MOVIE OPT ',0 db 1,'KEY COMB. ',0 db 1,'SAVE CFG ',0 db 0,'------------',0 db 1,'ABOUT ',0; Window sizes and positions; LOAD STAT INPT OPT VID SND CHT NET GMKEY GUIOP ABT RSET SRC STCN MOVE CMBO ADDO CHIP PATH SAVE SPEDGUIwinposxo dd 0,6 ,65 ,33 ,42 ,5 ,34 ,6 ,64 ,8 ,5 ,33 ,56 ,64 ,56 ,5 ,3 ,28 ,48 ,6 ,28 ,53GUIwinposyo dd 0,20 ,70 ,20 ,20 ,20 ,20 ,20 ,30 ,30 ,20 ,20 ,60 ,30 ,60 ,20 ,20 ,60 ,60 ,20 ,30 ,20GUIwinsizex dd 0,244 ,126 ,205 ,180 ,245 ,188 ,244 ,128 ,240 ,245 ,190 ,144 ,128 ,144 ,246 ,250 ,200 ,160 ,244 ,200 ,150GUIwinsizey dd 0,190 ,68 ,192 ,190 ,190 ,188 ,191 ,40 ,170 ,150 ,190 ,42 ,40 ,42 ,190 ,190 ,120 ,100 ,190 ,168 ,180NEWSYM GUIwinptr, db 0NEWSYM WaterOn, db 1NEWSYM ForceROMTiming, db 0NEWSYM ForceHiLoROM, db 0NEWSYM CalibXmin, dd 0NEWSYM CalibXmax, dd 0NEWSYM CalibYmin, dd 0NEWSYM CalibYmax, dd 0NEWSYM CalibXmin209, dd 0NEWSYM CalibXmax209, dd 0NEWSYM CalibYmin209, dd 0NEWSYM CalibYmax209, dd 0EEgg db 0RestoreValues db 0NEWSYM numdrives, dd 26SubPalTable times 256 db 1 ; Corresponding Gray Scale ColorSECTION .bssNEWSYM CombinDataGlob, resb 3300 ; 20-name, 42-combo, 2-key#, 1-P#, 1-ffNEWSYM CombinDataLocl, resb 3300NEWSYM GUIwinorder, resb 22GUIwinpos resb 22NEWSYM GUIwinactiv, resb 22ViewBuffer resb 50*32GUItextcolor resb 5NEWSYM GUIcmenupos, resb 1GUIescpress resb 1GUIcwinpress resb 1NEWSYM GUIpmenupos, resb 1GUIcrowpos resd 1GUIpclicked resb 1GUImouseposx resd 1GUImouseposy resd 1GUICYLocPtr resd 1GUIMenuL resd 1GUIMenuR resd 1GUIMenuD resd 1GUIOnMenuItm resb 1NEWSYM GUIQuit, resb 1GUIHold resb 1GUIHoldx resd 1GUIHoldy resd 1GUIHoldxm resd 1GUIHoldym resd 1GUIcolscaleval resd 1cwindrawn resb 1GUIWincol resd 1GUIWincoladd resd 1GUITemp resd 1GUIHoldXlimL resd 1GUIHoldXlimR resd 1GUIHoldYlim resd 1GUIHoldYlimR resd 1cloadnpos resd 1cloadnposb resd 1cloadmaxlen resd 1cloadnleft resd 1cplayernum resb 1vbuflimtop resd 1vbuflimbot resd 1GUIScrolTim1 resd 1GUIScrolTim2 resd 1BlankVar resb 1GUICHold resd 1NEWSYM GUICBHold, resd 1GUICBHold2 resd 1GUIDClickTL resd 1GUIDClCWin resd 1GUIDClCEntry resd 1GUICResetPos resd 1GUICStatePos resd 1GUICCFlash resb 1GUILDFlash resb 1GUIPalConv resd 1PrevResoln resw 1SnowMover resd 1keycontrolval resd 1NEWSYM CheatBDoor, resb 1NEWSYM ShowTimer, resb 1NEWSYM MousePRClick, resb 1NEWSYM MouseDis, resb 1NEWSYM CheatOn, resd 1NEWSYM NumCheats, resd 1NEWSYM cheatdataprev, resb 28 ; leave contents blankNEWSYM cheatdata, resb 28*255+56 ; toggle, value, address, pvalue, name(22)curgsval resb 1NEWSYM GUICMessage, resd 1NEWSYM GUICTimer, resd 1NEWSYM GUIOn, resb 1NEWSYM GUIOn2, resb 1NEWSYM GUIReset, resb 1NEWSYM CurPalSelect, resb 1NEWSYM MotionBlur, resb 1NEWSYM StartLL, resd 1NEWSYM StartLR, resd 1NEWSYM TRVal, resw 1NEWSYM TGVal, resw 1NEWSYM TBVal, resw 1NEWSYM TRVali, resw 1NEWSYM TGVali, resw 1NEWSYM TBVali, resw 1NEWSYM TRVal2, resw 1NEWSYM TGVal2, resw 1NEWSYM TBVal2, resw 1SECTION .dataNEWSYM ComboHeader, db 'Key Combination File',26,1,0NEWSYM ComboBlHeader, times 23 db 0SECTION .text%macro GUIInitIRQs 0 call GUIInit mov esi,pressed mov ecx,256 mov al,0.loopa mov [esi],al inc esi dec ecx jnz .loopa%endmacro%macro GUIDeInitIRQs 0 call GUIDeInit%endmacroSECTION .dataNEWSYM GUIoldhand9o, dd 0NEWSYM GUIoldhand9s, dw 0NEWSYM GUIoldhand8o, dd 0NEWSYM GUIoldhand8s, dw 0GUIt1cc dd 0GUIt1ccSwap db 0GUIskipnextkey42 db 0SECTION .textNEWSYM GUIinit18_2hz mov al,00110110b out 43h,al mov ax,0 out 40h,al mov al,ah out 40h,al retNEWSYM GUIinit36_4hz mov al,00110110b out 43h,al mov ax,32768 out 40h,al mov al,ah out 40h,al retNEWSYM GUI36hzcall inc dword[GUIt1cc] inc dword[SnowMover] cmp dword[GUIEditStringLTxt],0 je .nodec dec dword[GUIEditStringLTxt].nodec cmp dword[GUIScrolTim1],0 je .nodec4 dec dword[GUIScrolTim1].nodec4 cmp dword[GUIDClickTL],0 je .nodec2 dec dword[GUIDClickTL].nodec2 cmp dword[GUIkeydelay],0 je .nodec3 dec dword[GUIkeydelay].nodec3 cmp dword[GUIkeydelay2],0 je .nodec3b dec dword[GUIkeydelay2].nodec3b cmp dword[GUICTimer],0 je .nodec6 dec dword[GUICTimer].nodec6 inc byte[GUICCFlash] and byte[GUICCFlash],0Fh inc byte[GUILDFlash] and byte[GUILDFlash],0Fh ret%ifdef __MSDOS__NEWSYM GUIhandler8h cli push ds push eax mov ax,[cs:dssel] mov ds,ax call GUI36hzcall xor byte[GUIt1ccSwap],1 cmp byte[GUIt1ccSwap],0 je .nocall pushf call far [GUIoldhand8o].nocall mov al,20h out 20h,al pop eax pop ds sti iretdNEWSYM GUIhandler9h cli push ds push eax push ebx mov ax,[cs:dssel] mov ds,ax xor ebx,ebx in al,60h ; get keyboard scan code cmp al,42 jne .no42 cmp byte[GUIskipnextkey42],0 je .no42 mov byte[GUIskipnextkey42],0 jmp .skipkeyrel.no42 cmp al,0E0h jne .noE0 mov byte[GUIskipnextkey42],1 jmp .skipkeyrel.noE0 mov byte[GUIskipnextkey42],0 mov bl,al xor bh,bh test bl,80h ; check if bit 7 is on (key released) jnz .keyrel cmp byte[pressed+ebx],0 jne .skipa mov byte[pressed+ebx],1 ; if not, set key to pressed.skipa jmp .skipkeyrel.keyrel and bl,7Fh mov byte[pressed+ebx],0 ; if not, set key to pressed.skipkeyrel mov byte[pressed],0 pushf call far [GUIoldhand9o] mov al,20h out 20h,al pop ebx pop eax pop ds sti iretd%endif%macro loadmenuopen 1 mov al,[GUIcmenupos] mov [GUIpmenupos],al mov byte[GUIcmenupos],0 cmp byte[GUIwinactiv+%1],1 je %%menuontop xor eax,eax mov al,[GUIwinptr] inc byte[GUIwinptr] mov byte[GUIwinorder+eax],%1 mov byte[GUIwinactiv+%1],1 cmp byte[savewinpos],0 jne %%nomenuitem mov eax,[GUIwinposxo+%1*4] mov [GUIwinposx+%1*4],eax mov eax,[GUIwinposyo+%1*4] mov [GUIwinposy+%1*4],eax jmp %%nomenuitem%%menuontop xor eax,eax ; look for match%%notfoundyet mov bl,[GUIwinorder+eax] cmp bl,%1 je %%nextfind inc eax jmp %%notfoundyet%%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%%nomenuitem%endmacroloadnetopen: loadmenuopen 8 retSECTION .bssMouseInitOkay resb 1SECTION .textLoadDetermine: mov byte[GUIGameMenuData+14],1 mov byte[GUIGameMenuData+14*2],1 mov byte[GUIGameMenuData+14*4],1 mov byte[GUIGameMenuData+14*5],1 mov byte[GUIGameMenuData+14*6],1 mov byte[GUICheatMenuData],1 mov byte[GUICheatMenuData+14],1 mov byte[GUICheatMenuData+14*2],1 mov byte[GUIMiscMenuData+14*2],1 mov byte[GUINetPlayMenuData],2 ; Gray out Netplay options
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -