📄 gui.asm
字号:
cmp byte[GUIcrowpos],0 jne .noaddc mov dword[GUIcurrentcheatwin],1.noaddc cmp byte[GUIcrowpos],1 jne .nobrowsec mov dword[GUIcurrentcheatwin],0.nobrowsec.nocheat cmp byte[GUIcmenupos],5 jne near .nonet%ifdef __MSDOS__; GUICheckMenuItem 8, 0 ; Disable DOS Netplay Options; GUICheckMenuItem 8, 1%endif; GUICheckMenuItem 8, 0 ; Disable WIN/SDL Internet Option cmp byte[GUIcrowpos],0 jne near .nonet.nonet cmp byte[GUIcmenupos],6 jne near .nomisc GUICheckMenuItem 9, 0 GUICheckMenuItem 10, 1 cmp byte[romloadskip],0 jne near .nomovie GUICheckMenuItem 15, 2 cmp byte[GUIcrowpos],2 jne .nomovie mov byte[MovieRecordWinVal],0.nomovie GUICheckMenuItem 16, 3 ; Save Config cmp byte[GUIcrowpos],4 jne .nosavestuff mov byte[savecfgforce],1 pushad call GUISaveVars popad mov byte[savecfgforce],0 call Makemode7Table mov dword[GUICMessage],.message1 mov dword[GUICTimer],50.nosavestuff GUICheckMenuItem 11, 6.nomisc retSECTION .data.message1 db 'CONFIGURATION FILES SAVED.',0NEWSYM savecfgforce, db 0SECTION .textDisplayBoxes: ; Displays window when item is clicked xor esi,esi.next2 mov al,[GUIwinorder+esi] cmp al,0 je .done inc esi jmp .next2.done mov eax,esi dec eax mov [cwindrawn],al xor eax,eax xor esi,esi.next mov al,[GUIwinorder+esi] cmp al,0 je near .nomore push esi cmp al,1 jne .noguiconfirm cmp byte[GUIReset],1 je near .finstuff call DisplayGUILoad jmp .finstuff.noguiconfirm cmp al,2 jne .noguichosesave call DisplayGUIChoseSave jmp .finstuff.noguichosesave cmp al,3 jne .noguiinput call DisplayGUIInput jmp .finstuff.noguiinput cmp al,4 jne .noguioption call DisplayGUIOption jmp .finstuff.noguioption cmp al,5 jne .noguivideo call DisplayGUIVideo jmp .finstuff.noguivideo cmp al,6 jne .noguisound call DisplayGUISound jmp .finstuff.noguisound cmp al,7 jne .noguicheat call DisplayGUICheat jmp .finstuff.noguicheat cmp al,8 jne .noguinet call DisplayNetOptns jmp .finstuff.noguinet cmp al,9 jne .noguigameop call DisplayGameOptns jmp .finstuff.noguigameop cmp al,10 jne .noguiconf call DisplayGUIOptns%ifdef __WIN32__ pushad call CheckAlwaysOnTop popad%endif jmp .finstuff.noguiconf cmp al,11 jne .noguiconf2 call DisplayGUIAbout jmp .finstuff.noguiconf2 cmp al,12 jne .noguireset call DisplayGUIReset jmp .finstuff.noguireset cmp al,13 jne .noguisearch call DisplayGUISearch jmp .finstuff.noguisearch cmp al,14 jne .noguistates call DisplayGUIStates jmp .finstuff.noguistates cmp al,15 jne .noguimovies call DisplayGUIMovies jmp .finstuff.noguimovies cmp al,16 jne .noguicombo call DisplayGUICombo jmp .finstuff.noguicombo cmp al,17 jne .noaddon call DisplayGUIAddOns jmp .finstuff.noaddon cmp al,18 jne .nochipconfig call DisplayGUIChipConfig jmp .finstuff.nochipconfig cmp al,19 jne .nopaths call DisplayGUIPaths jmp .finstuff.nopaths cmp al,20 jne .nosave call DisplayGUISave jmp .finstuff.nosave cmp al,21 jne .nospeed call DisplayGUISpeed jmp .finstuff.nospeed.finstuff pop esi inc esi dec byte[cwindrawn] jmp .next.nomore retGUIProcStates: xor eax,eax mov al,[GUIwinptr] dec eax mov byte[GUIwinactiv+14],0 mov byte[GUIwinorder+eax],0 dec byte[GUIwinptr] cmp byte[GUICBHold],10 je .yesstate mov byte[GUICBHold],0 ret.yesstate mov byte[GUICBHold],0 cmp byte[GUIStatesText5],1 je .loadstate pushad call statesaver popad jmp .changedir.loadstate pushad call loadstate2 popad.changedir retGUIProcReset: cmp byte[GUICBHold],2 jne .noreset pushad mov byte[GUIReset],1 cmp byte[MovieProcessing],2 ;Recording jne .nomovierecording call ResetDuringMovie jmp .movieendif.nomovierecording call GUIDoReset.movieendif popad.noreset mov byte[GUICBHold],0 xor eax,eax mov al,[GUIwinptr] dec eax mov byte[GUIwinactiv+12],0 mov byte[GUIwinorder+eax],0 dec byte[GUIwinptr] ret%macro GUIDMHelp 4 mov byte[GUItextcolor],46 mov byte[GUItextcolor+1],42 mov byte[GUItextcolor+2],38 mov byte[GUItextcolor+3],44 mov byte[GUItextcolor+4],40 cmp byte[GUIcmenupos],%4 jne %%nohighlight mov byte[GUItextcolor],38 mov byte[GUItextcolor+1],40 mov byte[GUItextcolor+2],46 mov byte[GUItextcolor+3],40 mov byte[GUItextcolor+4],44%%nohighlight GUIBox %1,3,%2,3,[GUItextcolor] GUIBox %1,4,%2,12,[GUItextcolor+1] GUIBox %1,13,%2,13,[GUItextcolor+2] GUIBox %1,3,%1,12,[GUItextcolor+3] GUIBox %2,4,%2,13,[GUItextcolor+4] GUIOuttext %1+5,7,%3,44 GUIOuttext %1+4,6,%3,62%endmacro%macro GUIDMHelpB 4 mov byte[GUItextcolor],46 mov byte[GUItextcolor+1],42 mov byte[GUItextcolor+2],38 mov byte[GUItextcolor+3],44 mov byte[GUItextcolor+4],40 cmp byte[GUIcwinpress],%4 jne %%nohighlight mov byte[GUItextcolor],38 mov byte[GUItextcolor+1],40 mov byte[GUItextcolor+2],46 mov byte[GUItextcolor+3],40 mov byte[GUItextcolor+4],44%%nohighlight GUIBox %1,3,%2,3,[GUItextcolor] GUIBox %1,4,%2,13,[GUItextcolor+1] GUIBox %1,14,%2,14,[GUItextcolor+2] GUIBox %1,3,%1,13,[GUItextcolor+3] GUIBox %2,4,%2,14,[GUItextcolor+4] GUIOuttext %1+3,7,%3,44 GUIOuttext %1+2,6,%3,62%endmacro%macro GUIDMHelpB2 4 mov byte[GUItextcolor],46 mov byte[GUItextcolor+1],42 mov byte[GUItextcolor+2],38 mov byte[GUItextcolor+3],44 mov byte[GUItextcolor+4],40 cmp byte[GUIcwinpress],%4 jne %%nohighlight mov byte[GUItextcolor],38 mov byte[GUItextcolor+1],40 mov byte[GUItextcolor+2],46 mov byte[GUItextcolor+3],40 mov byte[GUItextcolor+4],44%%nohighlight GUIBox %1,3,%2,3,[GUItextcolor] GUIBox %1,4,%2,6,[GUItextcolor+1] GUIBox %1,7,%2,7,[GUItextcolor+2] GUIBox %1,3,%1,6,[GUItextcolor+3] GUIBox %2,4,%2,7,[GUItextcolor+4] GUIOuttext %1+3,5,%3,44 GUIOuttext %1+2,4,%3,62%endmacro%macro GUIDMHelpB3 4 mov byte[GUItextcolor],46 mov byte[GUItextcolor+1],42 mov byte[GUItextcolor+2],38 mov byte[GUItextcolor+3],44 mov byte[GUItextcolor+4],40 cmp byte[GUIcwinpress],%4 jne %%nohighlight mov byte[GUItextcolor],38 mov byte[GUItextcolor+1],40 mov byte[GUItextcolor+2],46 mov byte[GUItextcolor+3],40 mov byte[GUItextcolor+4],44%%nohighlight GUIBox %1,9,%2,9,[GUItextcolor] GUIBox %1,10,%2,12,[GUItextcolor+1] GUIBox %1,13,%2,13,[GUItextcolor+2] GUIBox %1,9,%1,12,[GUItextcolor+3] GUIBox %2,10,%2,13,[GUItextcolor+4] GUIOuttext %1+3,11,%3,44 GUIOuttext %1+2,10,%3,62%endmacro%macro GUIDrawMenuM 10 GUIShadow %7,%8,%7+4+%3*6,%8+3+%4*10 GUIBox %1,%2,%1+4+%3*6,%2+3+%4*10,43 mov edi,[GUIcrowpos] mov ecx,edi shl edi,8 shl ecx,5 add edi,ecx lea edi,[edi*5] shl edi,1 add edi,[vidbuffer] add edi,%1+17+18*288 mov ecx,6*%3+3 mov edx,1 mov al,73 push edi call GUIDrawBox pop edi add edi,288 mov ecx,6*%3+3 mov edx,7 mov al,72 push edi call GUIDrawBox pop edi add edi,288*7 mov ecx,6*%3+3 mov edx,1 mov al,73 call GUIDrawBox GUIBox %1+%10,%2,%1+4+%3*6,%2,47 GUIBox %1,%2,%1,%9,45 GUIBox %1,%9,%1+4+%3*6,%9,39 GUIBox %1+4+%3*6,1+%2,%1+4+%3*6,%9,41 mov edi,%5 mov esi,[vidbuffer] add esi,16+%6+20*288 mov ecx,%4 mov edx,6*%3 call GUIMenuDisplay mov dword[GUIMenuL],%1+1 mov dword[GUIMenuR],%1+6*%3+3 mov dword[GUIMenuD],18+%4*10%endmacroDisplayMenu: ; Draw Shadow GUIShadow 5,7,235,21 ; Display Top Border GUIBox 0,1,229,1,71 GUIBox 0,2,229,2,70 GUIBox 0,3,229,3,69 GUIBox 0,4,229,4,68 GUIBox 0,5,229,5,67 GUIBox 0,6,229,6,66 GUIBox 0,7,229,7,65 GUIBox 0,8,229,8,64 GUIBox 0,9,229,9,65 GUIBox 0,10,229,10,66 GUIBox 0,11,229,11,67 GUIBox 0,12,229,12,68 GUIBox 0,13,229,13,69 GUIBox 0,14,229,14,70 GUIBox 0,15,229,15,71%ifdef __UNIXSDL__ GUIShadow 238,9,247,20 GUIShadow 249,9,257,20%endif%ifdef __WIN32__ GUIShadow 238,9,247,14 GUIShadow 238,16,247,20 GUIShadow 249,9,257,20%endif.notwinpressa%ifdef __UNIXSDL__ mov byte[GUIMenuItem+36],247 GUIDMHelpB 233,242,GUIMenuItem+36,1 mov byte[GUIMenuItem+36],'x' GUIDMHelpB 244,253,GUIMenuItem+36,2%endif%ifdef __WIN32__ mov byte[GUIMenuItem+36],249 GUIDMHelpB2 233,242,GUIMenuItem+36,1 mov byte[GUIMenuItem+36],248 GUIDMHelpB3 233,242,GUIMenuItem+36,3 mov byte[GUIMenuItem+36],'x' GUIDMHelpB 244,253,GUIMenuItem+36,2%endif.notwinpressb ; Display upper-left box mov byte[GUIMenuItem+36],25 GUIDMHelp 4,12,GUIMenuItem+6,1 GUIOuttext 4+3,7,GUIMenuItem+36,44 GUIOuttext 4+2,6,GUIMenuItem+36,62 ; Display boxes GUIDMHelp 17,47,GUIMenuItem,2 GUIDMHelp 52,94,GUIMenuItem+7,3 GUIDMHelp 99,135,GUIMenuItem+14,4 GUIDMHelp 140,188,GUIMenuItem+21,5 GUIDMHelp 193,223,GUIMenuItem+29,6 mov dword[GUIMenuL],0 mov dword[GUIMenuR],0 mov dword[GUIMenuD],0 ; format : x pos, y pos, #charx, #chary, name, xpos+2, xpos+5,22, ; 19+#chary*10, length of top menu box cmp byte[GUIcmenupos],1 jne near .nomenu1 GUIDrawMenuM 4,16,30,13,GUIPrevMenuData,6,9,22,149,8 ;19+13*10 mov dword[GUICYLocPtr],MenuDat1.nomenu1 cmp byte[GUIcmenupos],2 jne near .nomenu2 GUIDrawMenuM 17,16,10,9,GUIGameMenuData,19,22,22,109,30 ;19+9*10 mov dword[GUICYLocPtr],MenuDat2.nomenu2 cmp byte[GUIcmenupos],3 jne near .nomenu3 GUIDrawMenuM 52,16,8,11,GUIConfigMenuData,54,57,22,129,42 ;19+11*10 mov dword[GUICYLocPtr],MenuDat3.nomenu3 cmp byte[GUIcmenupos],4 jne near .nomenu4 GUIDrawMenuM 99,16,8,3,GUICheatMenuData,101,104,22,49,36 ;19+3*10 mov dword[GUICYLocPtr],MenuDat4.nomenu4 cmp byte[GUIcmenupos],5 jne near .nomenu5%ifdef __MSDOS__ GUIDrawMenuM 140,16,10,2,GUINetPlayMenuData,142,145,22,39,48 ;19+2*10%else GUIDrawMenuM 140,16,10,1,GUINetPlayMenuData,142,145,22,29,48 ;19+1*10%endif mov dword[GUICYLocPtr],MenuDat5.nomenu5 cmp byte[GUIcmenupos],6 jne near .nomenu6 GUIDrawMenuM 193,16,9,7,GUIMiscMenuData,195,198,22,89,30 ;19+5*10 mov dword[GUICYLocPtr],MenuDat6.nomenu6 retGUIMenuDisplay: xor ebx,ebx.next mov al,[edi] push ebx push ecx push esi cmp al,0 je near .notext cmp al,2 je .darktext inc edi mov byte[GUItextcolor],44 cmp byte[GUIcrowpos],bl je .nodrawshadow push edi push esi add esi,289 call GUIOutputString pop esi pop edi.nodrawshadow mov byte[GUItextcolor],63 call GUIOutputString inc edi jmp .text.darktext inc edi mov byte[GUItextcolor],42 cmp byte[GUIcrowpos],bl je .nodrawshadow2 push edi push esi add esi,289 call GUIOutputString pop esi pop edi.nodrawshadow2 mov byte[GUItextcolor],57 call GUIOutputString inc edi jmp .text.notext add esi,4*288 mov ecx,edx.loop mov byte[esi],45 mov byte[esi-289],40 mov byte[esi+289],42 inc esi dec ecx jnz .loop add edi,14.text pop esi pop ecx pop ebx add esi,10*288 inc ebx dec ecx jnz near .next retInitGUI: cmp byte[newengen],0 je .nong16b cmp byte[cbitmode],0 je .nong16b call GetScreen.nong16b%ifdef __MSDOS__ call DOSClearScreen%endif pushad call Clear2xSaIBuffer popad call GUISetPal call GUIBufferData retGUISetPal: cmp byte[cbitmode],1 je near GUISetPal16 ; set palette ; Fixed Color Scale = 0 .. 31 mov dx,03C8h mov al,0 out dx,al inc dx out dx,al out dx,al out dx,al inc al mov dx,03C8h mov bl,1 out dx,al inc dx.loopd mov al,bl add al,[GUIRAdd] out dx,al mov al,bl add al,[GUIGAdd] out dx,al mov al,bl add al,[GUIBAdd] out dx,al inc bl cmp bl,32 jne .loopd ; gray scale = 32 .. 63 mov dx,03C8h mov bl,32 mov al,32 out dx,al inc dx.loopc mov al,bl add al,al out dx,al out dx,al out dx,al inc bl cmp bl,64 jne .loopc ; shadow = 96 .. 127 inc al mov al,96 mov dx,03C8h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -