Files
ZSNES/zsnes/src/gui/gui.asm

4695 lines
108 KiB
NASM

;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.
; 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.
; **************************************
; GUI.ASM
; **************************************
;
; Associated files :
; GUIWinDp.inc - Window Display Routines
; GUITools.inc - Misc routines for the GUI
; Quick Searches :
; DisplayMenu - routines to display top menu bar
; Incomp - Search for start of modem processing
; GUIgetcurrentinput
; GUITryMenuItem - Processes the menu item when user clicks item
; Mouseimplementation
; DGUIDisplayer
; LGUILoadData
; SetInputDevice
; CalibrateDev1
; ButtonProcess - routines that processes boxed buttons
; CheatCodeSearchInit
; guiwincontrol
%include "macros.mac"
EXTSYM curblank,vidpastecopyscr,frameskip,newengen,vsyncon,cvidmode,antienab
EXTSYM smallscreenon,soundon,StereoSound,SoundQuality,MusicRelVol,endprog
EXTSYM continueprog,spcBuffera,spcRamcmp,cbitmode,makepal,t1cc,LoadDir,LoadDrive
EXTSYM SRAMDir,SRAMChdir,SRAMDirCurDir,initsnes,fname,makeextension,sram
EXTSYM loadfileGUI,GUIloadfailed,romloadskip,SetupROM,romdata,ramsize
EXTSYM cfgloadsdir,init65816,procexecloop,SPCRAM,spcPCRam,spcS,spcRamDP,spcA
EXTSYM spcX,spcY,spcP,spcNZ,Voice0Status,Voice1Status,Voice2Status,Voice3Status
EXTSYM Voice4Status,Voice5Status,Voice6Status,Voice7Status,ClearScreen
EXTSYM statesaver,loadstate2,vidbuffer,ASCII2Font,hirestiledat,showallext
EXTSYM scanlines,statefileloc,pl1selk,pl2selk,fnamest,sprlefttot,spritetablea
EXTSYM fnames,CHIPBATT,sfxramdata,setaramdata,SETAEnable,cgram,srama,tempco0
EXTSYM prevbright,maxbr,prevpal,coladdr,coladdg,coladdb,scaddtype,ScreenScale
EXTSYM initvideo,pressed,UpdateDevices,memtabler8
EXTSYM memtablew8,writeon,pl1contrl,pl2contrl,JoyRead,SetInputDevice,delay
EXTSYM FPSOn,RevStereo,WDSPReg0C,WDSPReg1C,pl12s34,resolutn
EXTSYM InitDrive,InitDir,createnewcfg,Makemode7Table,vidbufferofsb,ZipSupport
EXTSYM wramdata,bgfixer,cfgnewgfx,videotroub,Open_File,Read_File
EXTSYM Close_File,Write_File,Create_File,File_Seek,File_Seek_End,Get_Date
EXTSYM Check_Key,Get_Key,Change_Drive,Change_Single_Dir,Change_Dir,Get_Dir
EXTSYM Get_First_Entry,Get_Next_Entry,Set_DTA_Address,curexecstate,TripBufAvail
EXTSYM nmiprevaddrl,nmiprevaddrh,nmirept,nmiprevline,nmistatus,spcnumread
EXTSYM NextLineCache,ResetTripleBuf,GUINGVID,ScanCodeListing
EXTSYM AdjustFrequency,GUISaveVars,Init_Mouse,Get_MouseData,Set_MouseXMax
EXTSYM Set_MouseYMax,Set_MousePosition,Get_MousePositionDisplacement,GUIInit
EXTSYM GUIDeInit,SpecialLine,DrawWater,DrawBurn,SA1Enable,SA1RAMArea
EXTSYM MMXCheck,SaveCombFile,showinfogui
EXTSYM ErrorPointer,MessageOn,GetTime,sndrot,regsbackup,GetScreen
EXTSYM GUITBWVID,Clear2xSaIBuffer,MouseWindow,cfgcvidmode
EXTSYM ExitFromGUI,GUIWFVID,cfgvsync,newgfx16b,cfgscanline,cfginterp
EXTSYM NumVideoModes,cfgvolume,MusicVol,DSPMem,NumInputDevices,GUIInputNames
EXTSYM GUIVideoModeNames,GUISLVID,GUIINVID,GUIEAVID,GUIIEVID,GUIFSVID,GUIWSVID
EXTSYM GUISSVID,GUITBVID,GUIHSVID,GUI2xVID,GUII2VID,GUIM7VID,cfgsoundon
EXTSYM cfgSoundQuality,cfgStereoSound,cfgforce8b,convertnum,converthex,snesmouse
EXTSYM pl1upk,pl1downk,pl1leftk,pl1rightk,pl1Lk,pl1Rk,pl1Ak,pl1Bk,outofmemfix
EXTSYM yesoutofmemory,JoyX,JoyY,JoyMinX,JoyMinY,JoyMaxX,JoyMaxY,JoyMinX209
EXTSYM JoyMaxX209,JoyMinY209,JoyMaxY209,GetCoords,GetCoords3,MultiTap,SFXEnable
EXTSYM RestoreSystemVars,GUIBIFIL,GUIHQ2X,GUIHQ3X,GUIHQ4X,firstsaveinc,nssdip1
EXTSYM nssdip2,nssdip3,nssdip4,nssdip5,nssdip6,SkipMovie,MovieStop,MoviePlay
EXTSYM MovieRecord,MovieInsertChapter,MovieSeekAhead,MovieSeekBehind
EXTSYM ResetDuringMovie,MovieDumpRaw
EXTSYM GUIwinposx,GUIwinposy,maxskip,GUIEffect,hqFilter,En2xSaI,AutoLoadCht
EXTSYM LowPassFilterType,MovieStartMethod,MovieDisplayFrame,resetposn
EXTSYM SnapPath,SPCPath,BSXPath,SGPath,STPath,GNextPath,FEOEZPath,SJNSPath
EXTSYM MDHPath,SPL4Path,CheatSrcByteSize,prevloadfnamel,prevloaddname
EXTSYM prevloadnames,prevloaddnamel,prevlfreeze,FirstTimeData,MMXSupport
EXTSYM GUIRAdd,GUIGAdd,GUIBAdd,GUITRAdd,GUITGAdd,GUITBAdd,GUIWRAdd
EXTSYM GUIWGAdd,GUIWBAdd,GUIloadfntype,SoundInterpType,PrimaryBuffer
EXTSYM CheatSrcByteBase,CheatSrcSearchType,CheatUpperByteOnly,GUIComboGameSpec
EXTSYM KeyStateSlc0,KeyStateSlc1,KeyStateSlc2,KeyStateSlc3,KeyStateSlc4
EXTSYM KeyStateSlc5,KeyStateSlc6,KeyStateSlc7,KeyStateSlc8,KeyStateSlc9
EXTSYM RewindStates,RewindFrames,PauseRewind,PauseLoad,SRAMState,AutoState
EXTSYM LatestSave,SRAMSave5Sec,AutoIncSaveSlot,pl3selk,pl4selk,pl5selk
EXTSYM pl1Atk,pl2Atk,pl3Atk,pl4Atk,pl5Atk,pl3contrl,KeyUsePlayer1234
EXTSYM pl1Ltk,pl2Ltk,pl3Ltk,pl4Ltk,pl5Ltk,pl4contrl,KeyResetAll,CalibXmin
EXTSYM pl5contrl,KeyExtraEnab,CalibYmin
EXTSYM pl1ULk,pl2ULk,pl3ULk,pl4ULk,pl5ULk,KeyVolDown,KeyVolUp,CalibXmax
EXTSYM CalibYmax,CalibXmin209,CalibXmax209,CalibYmin209,CalibYmax209
EXTSYM KeyBGDisble0,KeyBGDisble1,KeyBGDisble2,KeyBGDisble3,KeySprDisble
EXTSYM KeyDisableSC0,KeyDisableSC1,KeyDisableSC2,KeyDisableSC3,KeyQuickSnapShot
EXTSYM KeyDisableSC4,KeyDisableSC5,KeyDisableSC6,KeyDisableSC7,KeyQuickSaveSPC
EXTSYM KeyQuickLoad,KeyQuickRst,KeyQuickExit,KeyQuickClock,KeyQuickChat
EXTSYM KeyInsrtChap,KeyPrevChap,KeyNextChap,KeyDisplayFPS,KeyNewGfxSwt
EXTSYM KeyIncStateSlot,KeyDecStateSlot,KeySaveState,KeyLoadState,KeyStateSelct
EXTSYM KeyRewind,KeyEmuSpeedUp,KeyEmuSpeedDown,KeyFRateUp,KeyFRateDown
EXTSYM KeyFastFrwrd,KeySlowDown,KeyResetSpeed,EMUPauseKey,INCRFrameKey
EXTSYM KeyWinDisble,KeyOffsetMSw,JoyPad1Move,GUIScreenScale,GUIsmallscreenon
EXTSYM mousewrap,GUIClick,PrevFSMode,PrevWinMode,GUIshowallext,HighPriority
EXTSYM FPSAtStart,Turbo30hz,TimerEnable,OldGfxMode2,DontSavePath,SmallMsgText
EXTSYM AutoPatch,RomInfo,AllowUDLR,DisableScreenSaver,Triplebufen,GrayscaleMode
EXTSYM Mode7HiRes16b,FFRatio,SDRatio,EmuSpeed,mouseshad,TripleBufferWin
EXTSYM BilinearFilter,lastcursres,OldVolume,prevloadl,prevloadfname,OldWinPos
EXTSYM GUIwinposy2,GUIwinposx2,AllowMultipleInst,Surround,SoundBufEn,SPCDisable
EXTSYM GUIEnableTransp,FilteredGUI,MouseWheel,TrapMouseCursor,AlwaysOnTop
EXTSYM pl1p209,pl1p209b,SaveMainWindowPos,FastFwdToggle,SidewinderFix,RaisePitch
EXTSYM KeyDisplayBatt,PauseFocusChange,KeyIncreaseGamma,KeyDecreaseGamma
EXTSYM MovieVideoMode, MovieAudioMode
%ifdef __UNIXSDL__
EXTSYM numlockptr
%elifdef __WIN32__
EXTSYM initDirectDraw,reInitSound,CheckAlwaysOnTop,CheckPriority,CheckScreenSaver
%elifdef __MSDOS__
EXTSYM dssel,SetInputDevice209,initvideo2
%endif
%ifndef __MSDOS__
EXTSYM ZsnesPage,DocsPage
%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"
%include "gui/guiload.inc"
SECTION .data
NEWSYM WaterOn, db 1
; 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#1 Add Code Modem Misc Keys
; Run Input#2 Browse IPX GUI Opns
; Reset Input#3 Search Movie Opn
; ----- Input#4 Key Comb.
; Save State Input#5 Save Cfg
; Load State ----- ----
; Pick State Add-Ons About
; ----- Chip Cfg
; Quit ----
; Options
; Video
; Sound
; Paths
; Saves
; Speed
; MultiPlay 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 = Add-Ons
; 18 = Chip Config
; 19 = Paths
; 20 = Saves
; 21 = Speed
;The first byte is the number of fields on the right not including the seperators
MenuDat1 db 12, 3,1,1,1,1,1,1,1,1,1,0,1,2,0
MenuDat2 db 8, 3,1,1,0,1,1,1,0,2,0,0
MenuDat3 db 14, 3,1,1,1,1,0,1,1,0,1,1,1,1,1,2,0
MenuDat4 db 2, 3,1,2,0
MenuDat5 db 1, 3,2,0
MenuDat6 db 6, 3,1,1,1,1,0,2,0
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
.onoff db 1,'FREEZE DATA : OFF ',0
db 1,'CLEAR ALL DATA ',0
GUIGameMenuData:
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 ',0
GUIConfigMenuData:
db 1,'INPUT #1 ',0
db 1,'INPUT #2 ',0
db 1,'INPUT #3 ',0
db 1,'INPUT #4 ',0
db 1,'INPUT #5 ',0
db 0,'------------',0
db 1,'ADD-ONS ',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 ',0
GUICheatMenuData:
db 1,'ADD CODE ',0
db 1,'BROWSE ',0
db 1,'SEARCH ',0
GUINetPlayMenuData:
db 1,'MODEM ',0
db 1,'IPX ',0
GUIMiscMenuData:
db 1,'MISC KEYS ',0
db 1,'GUI OPNS ',0
db 1,'MOVIE OPN ',0
db 1,'KEY COMB. ',0
db 1,'SAVE CFG ',0
db 0,'------------',0
db 1,'ABOUT ',0
; Config, Options -> New Gfx Engine, Frame Rate, Fast Forward FrameRate, etc.
; Config, Video -> Video Mode, Interpolation, etc.
; Config, Options -> Set up Save and/or Load State Confirmation
; Select Different game key assignments
; If menu should go to Load or last position when ESC
; is pressed from game
SECTION .bss
NEWSYM ForceROMTiming, resb 1
NEWSYM ForceHiLoROM, resb 1
NEWSYM CombinDataGlob, resb 3300 ; 20-name, 42-combo, 2-key#, 1-P#, 1-ff
NEWSYM CombinDataLocl, resb 3300
GUIwinorder resb 18
GUIwinpos resb 18
GUIwinactiv resb 18
ViewBuffer resb 50*32
SECTION .data
; Window sizes and positions
; LOAD STAT INPT OPT VID SND CHT NET GMKEY GUIOP ABT RSET SRC STCN MOVE CMBO ADDO CHIP PATH SAVE SPED
GUIwinposxo dd 0,6 ,65 ,33 ,42 ,38 ,34 ,6 ,64 ,8 ,8 ,33 ,56 ,64 ,56 ,5 ,3 ,48 ,48 ,6 ,28 ,53
GUIwinposyo dd 0,20 ,70 ,30 ,20 ,20 ,20 ,20 ,30 ,30 ,20 ,20 ,60 ,30 ,65 ,25 ,19 ,60 ,60 ,20 ,30 ,25
GUIwinsizex dd 0,244 ,126 ,189 ,172 ,180 ,188 ,244 ,8*16,240 ,240 ,190 ,9*16,8*16,9*16,246 ,250 ,160 ,160 ,244 ,200 ,150
GUIwinsizey dd 0,190 ,3*16,166 ,190 ,192 ,188 ,191 ,40 ,170 ,150 ,190 ,42 ,40 ,42 ,180 ,190 ,100 ,100 ,190 ,160 ,180
GUIwinptr db 0
SECTION .bss
GUItextcolor resb 5
GUIcmenupos resb 1
GUIescpress resb 1
GUIcwinpress resb 1
GUIpmenupos resb 1
GUIcrowpos resd 1
GUIpclicked resb 1
GUImouseposx resd 1
GUImouseposy resd 1
GUICYLocPtr resd 1
GUIMenuL resd 1
GUIMenuR resd 1
GUIMenuD resd 1
GUIOnMenuItm resb 1
NEWSYM GUIQuit, resb 1
GUIHold resb 1
GUIHoldx resd 1
GUIHoldy resd 1
GUIHoldxm resd 1
GUIHoldym resd 1
GUIcolscaleval resd 1
cwindrawn resb 1
GUIWincol resd 1
GUIWincoladd resd 1
GUITemp resd 1
GUIHoldXlimL resd 1
GUIHoldXlimR resd 1
GUIHoldYlim resd 1
GUIHoldYlimR resd 1
cloadnpos resd 1
cloadnposb resd 1
cloadmaxlen resd 1
cloadnleft resd 1
cplayernum resb 1
vbuflimtop resd 1
vbuflimbot resd 1
GUIScrolTim1 resd 1
GUIScrolTim2 resd 1
GUICHold resd 1
NEWSYM GUICBHold, resd 1
GUICBHold2 resd 1
GUIDClickTL resd 1
GUIDClCWin resd 1
GUIDClCEntry resd 1
GUICResetPos resd 1
GUICStatePos resd 1
GUICCFlash resb 1
GUILDFlash resb 1
GUIPalConv resd 1
PrevResoln resw 1
SnowMover resd 1
keycontrolval resd 1
NEWSYM CheatBDoor, resb 1
NEWSYM ShowTimer, resb 1
NEWSYM MousePRClick, resb 1
NEWSYM MouseDis, resb 1
NEWSYM CheatOn, resd 1
NEWSYM NumCheats, resd 1
NEWSYM cheatdataprev, resb 28 ; leave contents blank
NEWSYM cheatdata, resb 28*255+56 ; toggle, value, address, pvalue, name(22)
NEWSYM GUIcurrentdir, resb 131
curgsval resb 1
SECTION .data
NEWSYM EEgg, db 0
RestoreValues db 0
NEWSYM numdrives, dd 26
SubPalTable times 256 db 1 ; Corresponding Gray Scale Color
SECTION .bss
NEWSYM GUICMessage, resd 1
NEWSYM GUICTimer, resd 1
NEWSYM GUIOn, resb 1
NEWSYM GUIOn2, resb 1
NEWSYM GUIReset, resb 1
NEWSYM CurPalSelect, resb 1
NEWSYM MotionBlur, resb 1
NEWSYM StartLL, resd 1
NEWSYM StartLR, resd 1
NEWSYM TRVal, resw 1
NEWSYM TGVal, resw 1
NEWSYM TBVal, resw 1
NEWSYM TRVali, resw 1
NEWSYM TGVali, resw 1
NEWSYM TBVali, resw 1
NEWSYM TRVal2, resw 1
NEWSYM TGVal2, resw 1
NEWSYM TBVal2, resw 1
SECTION .text
%macro stim 0
%ifdef __MSDOS__
sti
%endif
%endmacro
%macro clim 0
%ifdef __MSDOS__
cli
%endif
%endmacro
clearsram:
push eax
push ecx
mov eax,srama
mov ecx,65536
.loop
mov byte[eax],0FFh
inc eax
dec ecx
jnz .loop
cmp byte[SFXEnable],0
je .nosfxbatt
cmp byte[CHIPBATT],0
je .nosfxbatt
mov eax,[sfxramdata]
mov ecx,65536
.loop2
mov byte[eax],0FFh
inc eax
dec ecx
jnz .loop2
.nosfxbatt
cmp byte[SETAEnable],0
je .nosetasram
mov eax,[setaramdata]
mov ecx,4096
.loop2seta
mov byte[eax],0FFh
inc eax
dec ecx
jnz .loop2seta
.nosetasram
cmp byte[SA1Enable],1
jne .nosa1
cmp byte[CHIPBATT],1
jne .nosa1
mov eax,[SA1RAMArea]
mov ecx,65536*2
.loop3
mov byte[eax],0FFh
inc eax
dec ecx
jnz .loop3
.nosa1
pop ecx
pop eax
ret
GUIQuickLoadUpdate:
cmp byte[prevlfreeze],0
je .off
mov dword[GUIPrevMenuData.onoff+15],'ON '
jmp .on
.off
mov dword[GUIPrevMenuData.onoff+15],'OFF '
.on
%ifdef __MSDOS__
mov esi,prevloadnames
%else
mov esi,prevloadfnamel
%endif
mov edi,GUIPrevMenuData+3
mov edx,10
.mainloop
%ifdef __MSDOS__
mov ecx,16
%else
mov ecx,25
%endif
push edi
push esi
cmp byte[esi],32
je near .fin2
.loop
mov al,[esi]
cmp al,0
je .zero
mov [edi],al
inc esi
inc edi
dec ecx
jnz .loop
cmp byte[esi],0
je .zero
mov byte[edi],'.'
mov byte[edi+1],'.'
mov byte[edi+2],'.'
jmp .fin
.zero
add ecx,3
.loop2
mov byte[edi],32
inc edi
dec ecx
jnz .loop2
jmp .fin
.fin2
mov ecx,18
.loop3
mov byte[edi],32
inc edi
dec ecx
jnz .loop3
.fin
pop esi
pop edi
%ifdef __MSDOS__
add esi,16
%else
add esi,512 ;16
%endif
add edi,32
dec edx
jnz near .mainloop
ret
SECTION .data
NEWSYM ComboHeader, db 'Key Combination File',26,1,0
NEWSYM ComboBlHeader, times 23 db 0
SECTION .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
%endmacro
SECTION .data
NEWSYM GUIoldhand9o, dd 0
NEWSYM GUIoldhand9s, dw 0
NEWSYM GUIoldhand8o, dd 0
NEWSYM GUIoldhand8s, dw 0
GUIt1cc dd 0
GUIt1ccSwap db 0
GUIskipnextkey42 db 0
SECTION .text
NEWSYM GUIinit18_2hz
mov al,00110110b
out 43h,al
mov ax,0
out 40h,al
mov al,ah
out 40h,al
ret
NEWSYM GUIinit36_4hz
mov al,00110110b
out 43h,al
mov ax,32768
out 40h,al
mov al,ah
out 40h,al
ret
NEWSYM 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
iretd
NEWSYM 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[resetposn],1
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
%endmacro
loadnetopen:
loadmenuopen 8
ret
SECTION .bss
MouseInitOkay resb 1
SECTION .text
LoadDetermine:
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
%ifdef __MSDOS__
mov byte[GUINetPlayMenuData+14],2
%endif
cmp byte[romloadskip],0
je .noromloaded
mov byte[GUIGameMenuData+14],2
mov byte[GUIGameMenuData+14*2],2
mov byte[GUIGameMenuData+14*4],2
mov byte[GUIGameMenuData+14*5],2
mov byte[GUIGameMenuData+14*6],2
mov byte[GUICheatMenuData],2
mov byte[GUICheatMenuData+14],2
mov byte[GUICheatMenuData+14*2],2
mov byte[GUIMiscMenuData+14*2],2
.noromloaded
ret
SECTION .data
SantaData:
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0
db 1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1
db 1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1
db 1,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1
SantaPos dd 272
SantaNextT dd 36*15
NEWSYM NumSnow, dd 0
NEWSYM SnowTimer, dd 36*30
MsgGiftLeft dd 0
SECTION .text
DrawSnow:
cmp byte[OkaySC],0
je near .nosanta
cmp dword[MsgGiftLeft],0
je .nodec
mov edx,20
mov ebx,210
mov byte[GUItextcolor],228
GUIOuttextwin .giftmsg
.nodec
mov esi,[vidbuffer]
add esi,[SantaPos]
add esi,60*288
mov edx,SantaData
mov ebx,8
.sloop2
mov ecx,16
.sloop
cmp byte[edx],0
je .transp
mov byte[esi],0
.transp
inc esi
inc edx
dec ecx
jnz .sloop
add esi,272
dec ebx
jnz .sloop2
.nosanta
mov esi,[vidbuffer]
mov ecx,200
xor edx,edx
.loop
xor eax,eax
mov al,[SnowData+edx*4+3]
mov ebx,eax
shl eax,8
shl ebx,5
add eax,ebx
xor ebx,ebx
mov bl,[SnowData+edx*4+1]
add eax,ebx
add eax,16
mov bl,[SnowVelDist+edx*2]
and bl,03h
add bl,228
test byte[SnowVelDist+edx*2],8
jz .nosnow
mov [esi+eax],bl
.nosnow
inc edx
dec ecx
jnz .loop
; Change Snow Displacement Values
.next
cmp dword[SnowMover],0
je .nomore
call ProcessSnowVelocity
dec dword[SnowMover]
jmp .next
.nomore
ret
SECTION .data
.giftmsg db 'A GIFT TO YOU IN THE OPTIONS!',0
SECTION .text
ProcessSnowVelocity:
cmp dword[MsgGiftLeft],0
je .nodec
dec dword[MsgGiftLeft]
.nodec
cmp dword[NumSnow],200
jne .snowincr
cmp dword[SantaNextT],0
je .skip
dec dword[SantaNextT]
jmp .notsreset
.skip
dec dword[SantaPos]
cmp dword[SantaPos],0
jne .notsreset
mov dword[SantaPos],272
mov dword[SantaNextT],36*60
jmp .notsreset
.snowincr
dec dword[SnowTimer]
jnz .notsreset
inc dword[NumSnow]
mov dword[SnowTimer],18
.notsreset
mov ecx,[NumSnow]
cmp ecx,0
jne .okay
ret
.okay
xor edx,edx
.loop
xor eax,eax
mov al,[SnowVelDist+edx*2]
mov ebx,100
sub bl,[MusicRelVol]
add bx,bx
add ax,bx
add ax,bx
add word[SnowData+edx*4],ax
xor eax,eax
mov al,[SnowVelDist+edx*2+1]
add ax,256
add word[SnowData+edx*4+2],ax
cmp word[SnowData+edx*4+2],200h
ja .nosdata
or byte[SnowVelDist+edx*2],8
.nosdata
inc edx
dec ecx
jnz .loop
ret
SECTION .bss
OkaySC resb 1
SECTION .data
cstempfname db 'tmpchtsr.___',0
SECTION .text
NEWSYM SaveSramData
; change to sram dir
pushad
call SRAMChdir
popad
cmp byte[sramsavedis],1
je .savesramdone
cmp dword[ramsize],0
je .savesramdone
mov edx,[sram]
cmp byte[SFXEnable],1
jne .notsfx
mov edx,[sfxramdata]
.notsfx
cmp byte[SA1Enable],1
jne .notsa1
mov edx,[SA1RAMArea]
.notsa1
cmp byte[SETAEnable],1
jne .notseta
mov edx,[setaramdata]
.notseta
cmp edx,[sram]
je .notspecial
cmp byte[CHIPBATT],0
je .savesramdone
.notspecial
clim
push edx ;Backup data to save
mov edx,fnames+1
call Create_File
jc .failed
mov bx,ax
xor ecx,ecx
mov ecx,[ramsize]
pop edx ;Restore data to save
call Write_File
call Close_File
push edx ;Dirty hack for the next line
.failed
pop edx ;This is needed here because if the jump to failed is carried out, edx is never popped
stim
.savesramdone
call SaveCombFile
; change dir to InitDrive/InitDir
mov dl,[InitDrive]
mov ebx,InitDir
call Change_Dir
ret
NEWSYM ProcRewind
mov eax,KeyRewind
add eax,4
mov ebx,8
.loop
cmp byte[eax],'a'
jb .b
cmp byte[eax],'z'
ja .b
sub byte[eax],'a'-'A'
.b
inc eax
dec ebx
jnz .loop
sub eax,8
; 90,83,75,78,73,71
mov dword[.temp],44*65536*256+24*65536+72*256+40
mov word[.temp+4],41*256+50
add dword[.temp],34*65536*256+51*65536+11*256+50
add word[.temp+4],30*256+23
call .c
; 95,68,69,77,79,95
mov dword[.temp],25*65536*256+29*65536+31*256+62
mov word[.temp+4],43*256+18
add dword[.temp],52*65536*256+40*65536+37*256+33
add word[.temp+4],52*256+61
call .c
; 80,72,65,82,79,83
mov dword[.temp],11*65536*256+33*65536+24*256+35
mov word[.temp+4],52*256+30
add dword[.temp],71*65536*256+32*65536+48*256+45
add word[.temp+4],31*256+49
call .c
ret
.c
mov ebx,[.temp]
cmp [eax],ebx
jne .noteq
mov bx,[.temp+4]
cmp [eax+4],bx
jne .noteq
mov dword[eax],0
mov dword[eax+4],0
mov dword[eax+8],0
.noteq
ret
SECTION .bss
.temp resd 2
SECTION .text
%macro ProcessOneDigit 1
cmp dl,9
jbe %%notover
add dl,65-48-10
%%notover
add dl,48
mov [.message+%1],dl
xor edx,edx
div ebx
%endmacro
SECTION .data
.message db 0,0,0,0,' ',0,0,0,0,0,0,0
SECTION .text
NEWSYM StartGUI
cmp byte[TripBufAvail],0
jne .notexttb
mov byte[Triplebufen],0
.notexttb
cmp byte[MMXSupport],1
jne .2xSaIdis
cmp byte[newgfx16b],0
je .2xSaIdis
jmp .no2xSaIdis
.2xSaIdis
mov byte[En2xSaI],0
mov byte[hqFilter],0
.no2xSaIdis
cmp byte[En2xSaI],0
je .no2xsaidis
mov byte[Triplebufen],0
.no2xsaidis
cmp byte[En2xSaI],0
je .no2xsaien
mov byte[hqFilter],0
mov byte[scanlines],0
mov byte[antienab],0
.no2xsaien
cmp byte[hqFilter],0
je .nohq
mov byte[En2xSaI],0
mov byte[scanlines],0
mov byte[antienab],0
.nohq
mov ecx,64
mov eax,SpecialLine
.slloop
mov dword[eax],0
add eax,4
dec ecx
jnz .slloop
cmp byte[OldWinPos],0
jne .okayow
xor esi,esi
mov ecx,17
.nextow
mov eax,[GUIwinposx2+esi*4]
mov [GUIwinposx+esi*4],eax
mov eax,[GUIwinposy2+esi*4]
mov [GUIwinposy+esi*4],eax
inc esi
dec ecx
jnz .nextow
mov byte[OldWinPos],1
mov eax,[pl1p209b]
mov [pl1p209],eax
.okayow
%ifndef __MSDOS__
mov dword[GUINetPlayMenuData+1],'INTE'
mov dword[GUINetPlayMenuData+5],'RNET'
mov dword[GUINetPlayMenuData+1+14],'----'
mov dword[GUINetPlayMenuData+5+14],'----'
mov byte[MenuDat5],0
mov byte[MenuDat5+1],2
%endif
;.notwinport
; copy old quickfilename to new quickfilename
cmp byte[prevloadl],0
jne .noconvertlfqm
mov byte[prevloadl],1
mov ecx,10
xor edx,edx
.convlfnlp
mov eax,ecx
dec eax
mov edx,eax
shl eax,9
shl edx,4
mov bl,16
.convlfnlp2
mov bh,[prevloadfname+edx]
mov [prevloadfnamel+eax],bh
inc edx
inc eax
dec bl
jnz .convlfnlp2
mov eax,ecx
dec eax
mov edx,eax
shl eax,9
shl edx,7
mov bl,128
.convlfnlp2b
mov bh,[prevloaddname+edx]
mov [prevloaddnamel+eax],bh
inc edx
inc eax
dec bl
jnz .convlfnlp2b
dec ecx
jnz .convlfnlp
.noconvertlfqm
mov byte[GUIOn],1
mov byte[GUIOn2],1
mov eax,[NumComboLocl]
cmp byte[GUIComboGameSpec],0
jne .local
mov eax,[NumComboGlob]
.local
mov [NumCombo],eax
call ResetTripleBuf
cmp dword[GUIwinposx+16*4],0
jne .notzero
mov dword[GUIwinposx+16*4],3
mov dword[GUIwinposy+16*4],22
.notzero
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
mov dword[GUICTimer],0
cmp byte[OldVolume],1
jne .notold
mov byte[OldVolume],0
mov byte[MusicRelVol],100
mov byte[cfgvolume],100
; Initialize volume
xor eax,eax
xor edx,edx
mov al,[MusicRelVol]
shl eax,7
mov ebx,100
div ebx
cmp al,127
jb .noofb
mov al,127
.noofb
mov [MusicVol],al
.notold
mov byte[CheatSearchStatus],0
cmp byte[newgfx16b],0
je .nong
mov ecx,255*144
mov eax,[vidbufferofsb]
.loop
mov dword[eax],0
add eax,4
dec ecx
jnz .loop
.nong
mov byte[ShowTimer],1
call Get_Date
cmp dh,12
jne .noxmas
cmp dl,25
jne .noxmas
mov byte[OkaySC],1
.noxmas
mov byte[lastmouseholded],1
cmp dword[GUIwinposx+15*4],0
jne .nomoviemenufix
mov dword[GUIwinposx+15*4],50
mov dword[GUIwinposy+15*4],50
.nomoviemenufix
mov ax,[resolutn]
mov [PrevResoln],ax
mov word[resolutn],224
mov byte[GUIPalConv],0
mov byte[MousePRClick],1
pushad
cmp byte[MouseInitOkay],1
je near .mousedone
mov byte[MouseInitOkay],1
cmp byte[MouseDis],1
je .mousedone
call Init_Mouse
cmp ax,0
jne .mousedone
mov byte[MouseDis],1
.mousedone
popad
mov eax,[KeyQuickLoad]
test byte[pressed+eax],1
jz near .noquickload
mov byte[GUIcmenupos],0
loadmenuopen 1
.noquickload
mov esi,pressed
mov ecx,64+32+8
.pclear
mov dword[esi],0
add esi,4
dec ecx
jnz .pclear
mov byte[pressed+1],2
mov byte[GUIescpress],1
; set Video cursor location
xor eax,eax
mov al,[cvidmode]
mov [GUIcurrentvideocursloc],eax
mov ebx,[NumVideoModes]
sub ebx,5
cmp eax,ebx
jbe .noof
mov eax,ebx
.noof
mov [GUIcurrentvideoviewloc],eax
call SaveSramData
; change to sram dir
pushad
call SRAMChdir
popad
call GUIQuickLoadUpdate
call LoadDetermine
; change dir to LoadDrive/LoadDir
mov dl,[LoadDrive]
mov ebx,LoadDir
call Change_Dir
cmp byte[AutoState],0
je .noautostate
cmp byte[romloadskip],0
jne .noautostate
call SaveSecondState
.noautostate
GUIInitIRQs
cmp byte[GUIwinptr],0
jne .nomenuopen
cmp byte[lastcursres],1
je .nomenuchange
mov byte[GUIcmenupos],2
mov byte[GUIcrowpos],0
mov dword[GUICYLocPtr],MenuDat2
cmp byte[lastcursres],0
je .nomenuchange
.nomenuopen
mov byte[GUIcmenupos],0
.nomenuchange
cmp byte[GUIwinactiv+1],0
je .noloadrefresh
call GetLoadData
.noloadrefresh
mov byte[GUIHold],0
; clear 256 bytes from hirestiledat
mov esi,hirestiledat
mov ecx,256
.loophires
mov byte[esi],0
inc esi
dec ecx
jnz .loophires
mov byte[curblank],00h
call InitGUI
cmp byte[CheatWinMode],0
je near .csskip
; change to sram dir
pushad
call SRAMChdir
popad
; Load Cheat Search File
mov edx,cstempfname
call Open_File
jc .csskipb
mov bx,ax
mov edx,[vidbuffer]
add edx,129600
mov ecx,65536*2+32768
call Read_File
call Close_File
.csskipb
; change dir to LoadDrive/LoadDir
mov dl,[LoadDrive]
mov ebx,LoadDir
call Change_Dir
.csskip
mov byte[GUIQuit],0
.nokey
cmp byte[GUIQuit],2
je near .exit
cmp byte[GUIQuit],1
je near .exitgui
mov byte[GUIQuit],0
cmp byte[MouseDis],1
je .mousedis2
call ProcessMouse
cmp byte[videotroub],1
jne .notrouble
ret
.notrouble
.mousedis2
call GUIUnBuffer
cmp byte[GUIEffect],1
jne .nosnow
call DrawSnow
.nosnow
cmp byte[GUIEffect],2
jne .nowater
call DrawWater
.nowater
cmp byte[GUIEffect],3
jne .nowater2
call DrawWater
.nowater2
cmp byte[GUIEffect],4
jne .nosmoke
; call DrawSmoke
call DrawBurn
.nosmoke
cmp dword[GUIEditStringcWin],0
je .noblink
cmp dword[GUIEditStringcLen],0
je .noblink
mov eax,[GUIEditStringcLen]
cmp dword[GUIEditStringLTxt],8
jb .noblinka
mov byte[eax],'_'
mov byte[eax+1],0
mov dword[GUIEditStringLstb],1
.noblinka
cmp dword[GUIEditStringLTxt],0
jne .noblink
mov dword[GUIEditStringLTxt],16
.noblink
call DisplayBoxes
cmp dword[GUIEditStringLstb],1
jne .notblinked
mov dword[GUIEditStringLstb],0
mov eax,[GUIEditStringcLen]
mov byte[eax],0
.notblinked
call DisplayMenu
cmp byte[MouseDis],1
je .mousedis3
call DrawMouse
.mousedis3
cmp byte[FirstTimeData],0
jne .nofirsttime
call guifirsttimemsg
mov byte[FirstTimeData],1
.nofirsttime
cmp dword[GUICTimer],0
je .notimer
GUIOuttext 21,211,[GUICMessage],50
GUIOuttext 20,210,[GUICMessage],63
.notimer
call vidpastecopyscr
call GUIgetcurrentinput
jmp .nokey
.exitgui
GUIDeInitIRQs
mov ax,[PrevResoln]
mov [resolutn],ax
jmp endprog
.exit
mov edi,[spcBuffera]
mov ecx,65536
xor eax,eax
rep stosd
mov edi,spcRamcmp
mov ecx,65536/4
xor eax,eax
rep stosd
GUIDeInitIRQs
call ClearScreen
cmp byte[cbitmode],0
jne .nomakepal
call makepal
.nomakepal
mov word[t1cc],1
; get LoadDrive/LoadDir
mov ebx,LoadDir
mov edx,LoadDrive
call Get_Dir
; change dir to InitDrive/InitDir
mov dl,[InitDrive]
mov ebx,InitDir
; save config
call Change_Dir
call createnewcfg
call GUISaveVars
; change dir to SRAMDrive/SRAMDir
pushad
call SRAMChdir
popad
mov byte[MousePRClick],1
mov byte[prevbright],0
mov ax,[PrevResoln]
mov [resolutn],ax
mov byte[CheatOn],0
cmp dword[NumCheats],0
je .nocheats
mov byte[CheatOn],1
.nocheats
cmp byte[CopyRamToggle],1
jne .nocopyram
mov byte[CopyRamToggle],0
mov eax,[vidbuffer]
add eax,129600
; copy 128k ram
mov ebx,[wramdata]
mov ecx,32768
.loopcr
mov edx,[ebx]
mov [eax],edx
add ebx,4
add eax,4
dec ecx
jnz .loopcr
.nocopyram
cmp byte[CheatWinMode],2
jne .notview
mov byte[CheatWinMode],1
.notview
cmp byte[CheatWinMode],0
je .csskip2
; Save Cheat Search File
mov edx,cstempfname
call Create_File
jc .csskip2
mov bx,ax
mov edx,[vidbuffer]
add edx,129600
mov ecx,65536*2+32768
call Write_File
call Close_File
.csskip2
mov edi,[vidbuffer]
mov ecx,288*120
xor eax,eax
rep stosd
mov ecx,256*144
mov eax,[vidbufferofsb]
.loopcl
mov dword[eax],0
add eax,4
dec ecx
jnz .loopcl
mov al,[cfgsoundon]
mov [soundon],al
mov al,[cfgStereoSound]
mov [StereoSound],al
mov al,[cfgSoundQuality]
mov [SoundQuality],al
call AdjustFrequency
mov byte[GUIOn],0
mov byte[GUIOn2],0
mov byte[GUIReset],0
mov dword[StartLL],0
mov dword[StartLR],0
jmp continueprog
SECTION .bss
CheckSumVal resd 1
SECTION .data
WrongCheckSum db 10,13,'ROM Data Mismatch',10,13,10,13,0
SECTION .text
SRAMDirc:
; get LoadDrive/LoadDir
mov ebx,LoadDir
mov edx,LoadDrive
call Get_Dir
; change to sram dir
pushad
call SRAMChdir
popad
ret
LOADDir:
mov dl,[LoadDrive]
mov ebx,LoadDir
call Change_Dir
ret
guifirsttimemsg:
xor ebx,ebx
mov ecx,256
.a
mov byte[pressed+ebx],0
inc ebx
dec ecx
jnz .a
mov byte[pressed+2Ch],0
.again
GUIBox 43,75,213,163,160
GUIBox 43,75,213,75,162
GUIBox 43,75,43,163,161
GUIBox 213,75,213,163,159
GUIBox 43,163,213,163,158
GUIOuttext 52,81,guiftimemsg1,220-15
GUIOuttext 51,80,guiftimemsg1,220
GUIOuttext 52,96,guiftimemsg2,220-15
GUIOuttext 51,95,guiftimemsg2,220
GUIOuttext 52,104,guiftimemsg3,220-15
GUIOuttext 51,103,guiftimemsg3,220
GUIOuttext 52,112,guiftimemsg4,220-15
GUIOuttext 51,111,guiftimemsg4,220
GUIOuttext 52,120,guiftimemsg5,220-15
GUIOuttext 51,119,guiftimemsg5,220
GUIOuttext 52,128,guiftimemsg6,220-15
GUIOuttext 51,127,guiftimemsg6,220
GUIOuttext 52,136,guiftimemsg7,220-15
GUIOuttext 51,135,guiftimemsg7,220
GUIOuttext 52,151,guiftimemsg8,220-15
GUIOuttext 51,150,guiftimemsg8,220
call vidpastecopyscr
call GUIUnBuffer
call DisplayBoxes
call DisplayMenu
call JoyRead
cmp byte[pressed+39h],0
jne .pressedokay
jmp .again
.pressedokay
ret
SECTION .data
guiftimemsg1 db ' ONE-TIME USER REMINDER : ',0
guiftimemsg2 db ' PLEASE BE SURE TO READ ',0
guiftimemsg3 db 'THE DOCUMENTATION INCLUDED',0
guiftimemsg4 db ' WITH ZSNES FOR IMPORTANT',0
guiftimemsg5 db ' INFORMATION AND ANSWERS',0
guiftimemsg6 db ' TO COMMON PROBLEMS',0
guiftimemsg7 db ' AND QUESTIONS.',0
guiftimemsg8 db 'PRESS SPACEBAR TO PROCEED.',0
SECTION .text
guimustrestartmsg:
xor ebx,ebx
mov ecx,256
.a
cmp byte[pressed+ebx],1
jne .npr1
mov byte[pressed+ebx],2
.npr1
inc ebx
dec ecx
jnz .a
mov byte[pressed+2Ch],0
.again
GUIBox 43,87,213,151,160
GUIBox 43,87,213,87,162
GUIBox 43,87,43,151,161
GUIBox 213,87,213,151,159
GUIBox 43,151,213,151,158
GUIOuttext 56,92,guiqtimemsg1,220-15
GUIOuttext 55,91,guiqtimemsg1,220
GUIOuttext 56,100,guiqtimemsg2,220-15
GUIOuttext 55,99,guiqtimemsg2,220
GUIOuttext 56,108,guiqtimemsg3,220-15
GUIOuttext 55,107,guiqtimemsg3,220
GUIOuttext 56,116,guiqtimemsg4,220-15
GUIOuttext 55,115,guiqtimemsg4,220
GUIOuttext 56,139,guiqtimemsg8,220-15
GUIOuttext 55,138,guiqtimemsg8,220
call vidpastecopyscr
call GUIUnBuffer
call DisplayBoxes
call DisplayMenu
call JoyRead
mov byte[pressed+2Ch],0
call JoyRead
xor ebx,ebx
mov ecx,256+128+64
.b
cmp byte[pressed+ebx],1
je .pressedokay
inc ebx
dec ecx
jnz .b
jmp .again
.pressedokay
mov byte[GUIQuit],1
ret
SECTION .data
guiqtimemsg1 db 'ZSNES MUST BE RESTARTED',0
guiqtimemsg2 db 'TO USE THIS OPTION.',0
guiqtimemsg3 db 'THIS PROGRAM WILL NOW',0
guiqtimemsg4 db 'EXIT.',0
guiqtimemsg8 db 'PRESS ANY KEY.',0
SECTION .text
guiprevideo:
xor ebx,ebx
mov ecx,256
.a
mov byte[pressed+ebx],0
inc ebx
dec ecx
jnz .a
call GUIUnBuffer
call DisplayBoxes
call DisplayMenu
GUIBox 43,90,213,163,160
GUIBox 43,90,213,90,162
GUIBox 43,90,43,163,161
GUIBox 213,90,213,163,159
GUIBox 43,163,213,163,158
GUIOuttext 56,96,guiprevidmsg1,220-15
GUIOuttext 55,95,guiprevidmsg1,220
GUIOuttext 56,104,guiprevidmsg2,220-15
GUIOuttext 55,103,guiprevidmsg2,220
GUIOuttext 56,112,guiprevidmsg3,220-15
GUIOuttext 55,111,guiprevidmsg3,220
GUIOuttext 56,120,guiprevidmsg4,220-15
GUIOuttext 55,119,guiprevidmsg4,220
GUIOuttext 56,128,guiprevidmsg5,220-15
GUIOuttext 55,127,guiprevidmsg5,220
GUIOuttext 56,136,guiprevidmsg6,220-15
GUIOuttext 55,135,guiprevidmsg6,220
GUIOuttext 56,151,guiprevidmsg7,220-15
GUIOuttext 55,150,guiprevidmsg7,220
call vidpastecopyscr
mov byte[pressed+2Ch],0
.again
call JoyRead
xor ebx,ebx
mov ecx,256+128+64
.b
cmp byte[pressed+ebx],0
jne .pressedokay
inc ebx
dec ecx
jnz .b
cmp byte[MouseDis],1
je .mousedis
call Get_MouseData
test bx,01h
jnz .pressedokay
.mousedis
jmp .again
.pressedokay
ret
SECTION .data
guiprevidmsg1 db 'ZSNES WILL NOW ATTEMPT',0
guiprevidmsg2 db 'TO CHANGE YOUR VIDEO',0
guiprevidmsg3 db 'MODE. IF THE CHANGE',0
guiprevidmsg4 db 'IS UNSUCCESSFUL, WAIT',0
guiprevidmsg5 db '10 SECONDS AND VIDEO',0
guiprevidmsg6 db 'MODE WILL BE RESET',0
guiprevidmsg7 db 'PRESS ANY KEY',0
SECTION .text
guipostvideo:
mov ecx,255*144
mov eax,[vidbufferofsb]
.loop
mov dword[eax],0FFFFFFFFh
add eax,4
dec ecx
jnz .loop
mov dword[GUIkeydelay],36*10
.pressedfail
call GUIUnBuffer
call DisplayBoxes
call DisplayMenu
GUIBox 43,90,213,163,160
GUIBox 43,90,213,90,162
GUIBox 43,90,43,163,161
GUIBox 213,90,213,163,159
GUIBox 43,163,213,163,158
GUIOuttext 56,96,guipostvidmsg1,220-15
GUIOuttext 55,95,guipostvidmsg1,220
GUIOuttext 56,151,guipostvidmsg2,220-15
GUIOuttext 55,150,guipostvidmsg2,220
call vidpastecopyscr
; Wait for all mouse and input data to be 0
cmp dword[GUIkeydelay],0
je .pressedokay
;This is to make all ports not register space bar from being pressed earlier
mov byte[pressed+2Ch],0
call JoyRead
cmp byte[pressed+39h],0
jne .pressedokay
jmp .pressedfail
.pressedokay
mov byte[GUIpclicked],1
ret
SECTION .data
guipostvidmsg1 db 'VIDEO MODE CHANGED.',0
guipostvidmsg2 db 'PRESS SPACEBAR',0
SECTION .text
guipostvideofail:
mov dword[guipostvidptr],guipostvidmsg3b
mov byte[guipostvidmsg3b],0
mov byte[guipostvidmsg4b],0
mov byte[guipostvidmsg5b],0
mov eax,[ErrorPointer]
mov ebx,eax
.loop
cmp byte[ebx],0
je .found
cmp byte[ebx],'$'
je .found
inc ebx
jmp .loop
.found
mov edx,ebx
sub edx,eax
.detnext
or edx,edx
jz .notext
cmp edx,25
jbe .copytext
.nospace
dec edx
cmp byte[eax+edx],32
jne .nospace
jmp .detnext
.copytext
push ebx
mov ecx,[guipostvidptr]
.copytextloop
mov bl,[eax]
cmp bl,'$'
jne .notdol
mov bl,0
.notdol
mov [ecx],bl
inc eax
inc ecx
dec edx
jnz .copytextloop
mov byte[ecx],0
pop ebx
add dword[guipostvidptr],26
cmp byte[eax],0
je .notext
cmp byte[eax],'$'
je .notext
inc eax
jmp .found
.notext
xor ebx,ebx
mov ecx,256
.a
mov byte[pressed+ebx],0
inc ebx
dec ecx
jnz .a
call GUIUnBuffer
call DisplayBoxes
call DisplayMenu
GUIBox 43,90,213,163,160
GUIBox 43,90,213,90,162
GUIBox 43,90,43,163,161
GUIBox 213,90,213,163,159
GUIBox 43,163,213,163,158
GUIOuttext 56,96,guipostvidmsg1b,220-15
GUIOuttext 55,95,guipostvidmsg1b,220
GUIOuttext 56,108,guipostvidmsg2b,220-15
GUIOuttext 55,107,guipostvidmsg2b,220
GUIOuttext 56,119,guipostvidmsg3b,220-15
GUIOuttext 55,118,guipostvidmsg3b,220
GUIOuttext 56,129,guipostvidmsg4b,220-15
GUIOuttext 55,128,guipostvidmsg4b,220
GUIOuttext 56,139,guipostvidmsg5b,220-15
GUIOuttext 55,138,guipostvidmsg5b,220
GUIOuttext 56,152,guipostvidmsg8b,220-15
GUIOuttext 55,151,guipostvidmsg8b,220
call vidpastecopyscr
call GUIUnBuffer
call DisplayBoxes
call DisplayMenu
%ifndef __UNIXSDL__
mov dword[GUIkeydelay],0FFFFFFFFh
%else
mov dword[GUIkeydelay],0x0
%endif
jmp guipostvideo.pressedfail
SECTION .data
guipostvidmsg1b db 'VIDEO MODE CHANGE FAILED.',0
guipostvidmsg2b db 'UNABLE TO INIT VESA2:',0
guipostvidmsg3b db 'AAAAAAAAAAAAAAAAAAAAAAAAA',0
guipostvidmsg4b db 'AAAAAAAAAAAAAAAAAAAAAAAAA',0
guipostvidmsg5b db 'AAAAAAAAAAAAAAAAAAAAAAAAA',0
guipostvidmsg8b db 'PRESS ANY KEY',0
SECTION .bss
guipostvidptr resd 1
SECTION .text
GUILoadManualDir
mov ebx,GUILoadTextA
mov [ManualCPtr],ebx
cmp byte[ebx],0
je near .nofindfile
xor eax,eax
.next
cmp byte[ebx],':'
jne .nocolon
mov eax,ebx
.nocolon
inc ebx
cmp byte[ebx],0
jne .next
or eax,eax
jz .nomorecolon
cmp eax,GUILoadTextA
je .invalidcolon
mov bl,[eax-1]
cmp bl,'a'
jb .nolower
cmp bl,'z'
ja .nolower
sub bl,'a'-'A'
.nolower
cmp bl,'A'
jb .invalidcolon
cmp bl,'Z'
ja .invalidcolon
sub bl,'A'
mov dl,bl
push eax
call Change_Drive
pop eax
mov byte[ManualStatus],1
.invalidcolon
inc eax
mov [ManualCPtr],eax
.nomorecolon
mov ebx,[ManualCPtr]
cmp byte[ebx],0
je near .finish
xor eax,eax
.next2
cmp byte[ebx],'\'
jne .nobackslash
mov eax,ebx
.nobackslash
inc ebx
cmp byte[ebx],0
jne .next2
or eax,eax
jz .finish
inc eax
mov cl,[eax]
mov byte[eax],0
push ecx
push eax
mov edx,[ManualCPtr]
call Change_Single_Dir
jc .nosuchdir
mov byte[ManualStatus],1
.nosuchdir
pop eax
pop ecx
mov [eax],cl
mov [ManualCPtr],eax
.finish
mov edx,[ManualCPtr]
call Change_Single_Dir
jc .notdir
mov byte[ManualStatus],1
jmp .nomoredir
.notdir
call .nomoredir
mov edx,[ManualCPtr]
cmp byte[edx],0
je .nofindfile
; otherwise set ManualStatus to 2
mov byte[ManualStatus],2
mov dword[GUIcurrentfilewin],0
.nofindfile
ret
.nomoredir
; refresh dir if necessary
cmp byte[ManualStatus],1
jne .norefresh
call GetLoadData.a
.norefresh
ret
SECTION .bss
ManualCPtr resd 1
ManualStatus resb 1
NEWSYM Totalbyteloaded, resd 1
NEWSYM sramsavedis, resb 1
SECTION .data
DevicePtr dd pl1selk,pl2selk,pl3selk,pl4selk,pl5selk
SECTION .text
CheckMenuItemHelp:
mov al,[GUIcmenupos]
mov [GUIpmenupos],al
mov byte[GUIcmenupos],0
cmp byte[GUIwinactiv+edx],1
je .menuontop
xor eax,eax
mov al,[GUIwinptr]
inc byte[GUIwinptr]
mov [GUIwinorder+eax],dl
mov byte[GUIwinactiv+edx],1
cmp byte[resetposn],1
jne .nomenuitem
mov eax,[GUIwinposxo+edx*4]
mov [GUIwinposx+edx*4],eax
mov eax,[GUIwinposyo+edx*4]
mov [GUIwinposy+edx*4],eax
jmp .nomenuitem
.menuontop
xor eax,eax
; look for match
.notfoundyet
mov bl,[GUIwinorder+eax]
cmp bl,dl
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
ret
%macro GUICheckMenuItem 2
mov edx,%1
cmp byte[GUIcrowpos],%2
jne near %%nomenuitem
call CheckMenuItemHelp
%%nomenuitem
%endmacro
%macro checkqloadvalue 1
cmp byte[GUIcrowpos],%1
jne %%skip
mov esi,prevloaddnamel+%1*512
cmp byte[esi+1],0
je %%notvalid
mov edi,prevloadfnamel+%1*512
mov ebx,prevloadnames+%1*16
mov ecx,%1
call loadquickfname
%%notvalid
ret
%%skip
%endmacro
GUITryMenuItem: ; Defines which menu item calls what window number
cmp byte[GUIcmenupos],1
jne near .noquickload
checkqloadvalue 0
checkqloadvalue 1
checkqloadvalue 2
checkqloadvalue 3
checkqloadvalue 4
checkqloadvalue 5
checkqloadvalue 6
checkqloadvalue 7
checkqloadvalue 8
checkqloadvalue 9
cmp byte[GUIcrowpos],11
jne .skipswitch
xor byte[prevlfreeze],1
cmp byte[prevlfreeze],0
je .off
mov byte[GUIPrevMenuData.onoff+15],'O'
mov byte[GUIPrevMenuData.onoff+16],'N'
mov byte[GUIPrevMenuData.onoff+17],' '
jmp .on
.off
mov byte[GUIPrevMenuData.onoff+15],'O'
mov byte[GUIPrevMenuData.onoff+16],'F'
mov byte[GUIPrevMenuData.onoff+17],'F'
.on
.skipswitch
cmp byte[GUIcrowpos],12
jne .skipclear
cmp byte[prevlfreeze],0
jne .skipclear
mov edi,prevloadnames
mov eax,20202020h
mov ecx,4*10
rep stosd
mov edi,prevloaddnamel
xor eax,eax
mov ecx,128*10
rep stosd
mov edi,prevloadfnamel
mov eax,0 ;20202020h
mov ecx,128*10
rep stosd
call GUIQuickLoadUpdate
ret
.skipclear
.noquickload
cmp byte[GUIcmenupos],2
jne near .nomain
GUICheckMenuItem 1, 0 ; Load
cmp byte[GUIcrowpos],0
jne .noloadrefresh
jmp GetLoadData
.noloadrefresh
cmp byte[romloadskip],0
jne near .noromloaded
cmp byte[GUIcrowpos],1 ; Run
jne .norun
cmp byte[romloadskip],0
jne .dontquit
mov byte[GUIQuit],2
.dontquit
ret
.norun
GUICheckMenuItem 12, 2 ; Reset
cmp byte[GUIcrowpos],2
jne .noreset
mov byte[GUICResetPos],1
.noreset
cmp byte[GUIcrowpos],4
jne .nosavestate
mov byte[GUIStatesText5],0
mov byte[GUICStatePos],1
.nosavestate
cmp byte[GUIcrowpos],5
jne .noloadstate
mov byte[GUIStatesText5],1
mov byte[GUICStatePos],1
.noloadstate
GUICheckMenuItem 14, 4 ; Save State
GUICheckMenuItem 14, 5 ; Load State
GUICheckMenuItem 2, 6 ; Select State
.noromloaded
cmp byte[GUIcrowpos],8
jne .noquit
mov byte[GUIQuit],1
.noquit
.nomain
cmp byte[GUIcmenupos],3
jne near .noconfig
GUICheckMenuItem 3, 0 ; Input #1
GUICheckMenuItem 3, 1 ; Input #2
GUICheckMenuItem 3, 2 ; Input #3
GUICheckMenuItem 3, 3 ; Input #4
GUICheckMenuItem 3, 4 ; Input #5
cmp byte[GUIcrowpos],0
jne .noplay1
mov byte[cplayernum],0
.noplay1
cmp byte[GUIcrowpos],1
jne .noplay2
mov byte[cplayernum],1
.noplay2
cmp byte[GUIcrowpos],2
jne .noplay3
mov byte[cplayernum],2
.noplay3
cmp byte[GUIcrowpos],3
jne .noplay4
mov byte[cplayernum],3
.noplay4
cmp byte[GUIcrowpos],4
jne .noplay5
mov byte[cplayernum],4
.noplay5
;The number on the left is the window to open
;the number on the right is where in the drop down box we are
GUICheckMenuItem 17, 6 ; Add-Ons
GUICheckMenuItem 18, 7 ; Chip Config
GUICheckMenuItem 4, 9 ; Options
cmp byte[GUIcrowpos],10 ; Video
jne near .novideo
; set Video cursor location
xor eax,eax
mov al,[cvidmode]
mov [GUIcurrentvideocursloc],eax
mov edx,[NumVideoModes]
sub edx,5
cmp eax,edx
jbe .noof
mov eax,edx
.noof
mov [GUIcurrentvideoviewloc],eax
mov edx,5
call CheckMenuItemHelp
.novideo
GUICheckMenuItem 6, 11 ; Sound
GUICheckMenuItem 19, 12 ; Paths
GUICheckMenuItem 20, 13 ; Saves
GUICheckMenuItem 21, 14 ; Speed
.noconfig
cmp byte[romloadskip],0
jne near .nocheat
cmp byte[GUIcmenupos],4
jne near .nocheat
GUICheckMenuItem 7, 0
GUICheckMenuItem 7, 1
GUICheckMenuItem 13, 2
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
;.win32 ; Already commented
; 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
; change dir to InitDrive/InitDir
mov dl,[InitDrive]
mov ebx,InitDir
call Change_Dir
mov byte[savecfgforce],1
call createnewcfg
call GUISaveVars
mov byte[savecfgforce],0
call Makemode7Table
mov dword[GUICMessage],.message1
mov dword[GUICTimer],50
; change dir to LoadDrive/LoadDir
mov dl,[LoadDrive]
mov ebx,LoadDir
call Change_Dir
.nosavestuff
GUICheckMenuItem 11, 6
.nomisc
ret
SECTION .data
.message1 db 'CONFIGURATION FILES SAVED.',0
NEWSYM savecfgforce, db 0
SECTION .text
DisplayBoxes: ; Displays window when item is clicked
xor esi,esi
mov byte[cwindrawn],0
.next2
mov al,[GUIwinorder+esi]
cmp al,0
je .done
inc byte[cwindrawn]
inc esi
jmp .next2
.done
dec byte[cwindrawn]
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
ret
NEWSYM ChangetoLOADdir
mov dl,[LoadDrive]
mov ebx,LoadDir
call Change_Dir
ret
GUIProcStates:
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
pushad
call SRAMChdir
popad
cmp byte[GUIStatesText5],1
je .loadstate
pushad
call statesaver
popad
jmp .changedir
.loadstate
pushad
call loadstate2
popad
.changedir
; change dir to LoadDrive/LoadDir
call ChangetoLOADdir
ret
SaveSecondState:
pushad
call SRAMChdir
popad
mov ebx,[statefileloc]
mov al,[fnamest+ebx]
mov byte[fnamest+ebx],'s'
pushad
call statesaver
popad
mov ebx,[statefileloc]
mov [fnamest+ebx],al
call ChangetoLOADdir
ret
LoadSecondState:
pushad
call SRAMChdir
popad
mov ebx,[statefileloc]
mov al,[fnamest+ebx]
mov byte[fnamest+ebx],'s'
pushad
call loadstate2
popad
mov ebx,[statefileloc]
mov [fnamest+ebx],al
call ChangetoLOADdir
ret
GUIProcReset:
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
SECTION .bss
LoadDuplicFound resb 1
SECTION .text
%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
%endmacro
DisplayMenu:
; 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,9,15,GUIConfigMenuData,54,57,22,169,42 ;19+15*10
mov dword[GUICYLocPtr],MenuDat3
.nomenu3
cmp byte[GUIcmenupos],4
jne near .nomenu4
GUIDrawMenuM 99,16,11,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
mov dword[GUICYLocPtr],MenuDat5
jmp .nomenu5
%endif
.menu5b
GUIDrawMenuM 140,16,10,1,GUINetPlayMenuData,142,145,22,29,48 ;19+2*10
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
ret
GUIMenuDisplay:
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
ret
InitGUI:
cmp byte[newengen],0
je .nong16b
cmp byte[cbitmode],0
je .nong16b
call GetScreen
.nong16b
call ClearScreen
pushad
call Clear2xSaIBuffer
popad
call GUISetPal
call GUIBufferData
ret
GUISetPal:
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
mov bl,0
out dx,al
inc dx
.loope
mov al,bl
add al,[GUIRAdd]
mov ah,al
add al,al
add al,ah
shr al,2
out dx,al
mov al,bl
add al,[GUIGAdd]
mov ah,al
add al,al
add al,ah
shr al,2
out dx,al
mov al,bl
add al,[GUIBAdd]
mov ah,al
add al,al
add al,ah
shr al,2
out dx,al
inc bl
cmp bl,32
jne .loope
; 0,10,31
mov al,[GUITRAdd]
mov [TRVal],al
mov al,[GUITGAdd]
mov [TGVal],al
mov al,[GUITBAdd]
mov [TBVal],al
mov ax,[TRVal]
inc ax
shr ax,3
mov [TRVali],ax
shl ax,3
add [TRVal],ax
mov ax,[TGVal]
inc ax
shr ax,3
mov [TGVali],ax
shl ax,3
add [TGVal],ax
mov ax,[TBVal]
inc ax
shr ax,3
mov [TBVali],ax
shl ax,3
add [TBVal],ax
GUIPal 64,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 65,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 66,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 67,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 68,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 69,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 70,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 71,[TRVal],[TGVal],[TBVal]
GUIPal 72,40,0,20
GUIPal 73,34,0,21
GUIPal 80,0,10,28
GUIPal 81,0,10,27
GUIPal 82,0,10,25
GUIPal 83,0,09,24
GUIPal 84,0,08,22
GUIPal 85,0,07,20
GUIPal 86,0,06,18
GUIPal 87,0,05,15
GUIPal 88,20,0,10
GUIPal 89,17,0,10
; Orange Scale
mov dx,03C8h
mov al,128
mov cl,20
out dx,al
mov bh,0
mov ah,0
inc dx
.loopf
add bh,2
add ah,1
mov al,63
out dx,al
mov al,bh
out dx,al
mov al,ah
out dx,al
dec cl
jnz .loopf
; Blue scale = 148 .. 167
mov al,[GUIWRAdd]
add al,al
mov [TRVal],al
mov al,[GUIWGAdd]
add al,al
mov [TGVal],al
mov al,[GUIWBAdd]
add al,al
mov [TBVal],al
mov byte[TRVali],4
mov byte[TGVali],4
mov byte[TBVali],4
GUIPal 152,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 151,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 150,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 149,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 148,[TRVal],[TGVal],[TBVal]
mov al,[GUIWRAdd]
add al,al
mov [TRVal],al
mov al,[GUIWGAdd]
add al,al
mov [TGVal],al
mov al,[GUIWBAdd]
add al,al
mov [TBVal],al
mov byte[TRVali],4
mov byte[TGVali],4
mov byte[TBVali],4
call DecPalVal
call DecPalVal
GUIPal 157,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 156,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 155,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 154,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 153,[TRVal],[TGVal],[TBVal]
mov al,[GUIWRAdd]
add al,al
mov [TRVal],al
mov al,[GUIWGAdd]
add al,al
mov [TGVal],al
mov al,[GUIWBAdd]
add al,al
mov [TBVal],al
mov byte[TRVali],4
mov byte[TGVali],4
mov byte[TBVali],4
call DecPalVal
call DecPalVal
call DecPalVal
call DecPalVal
GUIPal 162,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 161,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 160,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 159,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 158,[TRVal],[TGVal],[TBVal]
GUIPal 163,40,40,00
GUIPal 164,30,30,00
GUIPal 165,50,00,00
GUIPal 166,35,00,00
GUIPal 167,00,00,00
; Blue scale shadow
mov al,[GUIWRAdd]
mov [TRVal],al
mov al,[GUIWGAdd]
mov [TGVal],al
mov al,[GUIWBAdd]
mov [TBVal],al
mov byte[TRVali],2
mov byte[TGVali],2
mov byte[TBVali],2
GUIPal 172,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 171,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 170,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 169,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 168,[TRVal],[TGVal],[TBVal]
mov al,[GUIWRAdd]
mov [TRVal],al
mov al,[GUIWGAdd]
mov [TGVal],al
mov al,[GUIWBAdd]
mov [TBVal],al
mov byte[TRVali],2
mov byte[TGVali],2
mov byte[TBVali],2
call DecPalVal
call DecPalVal
GUIPal 177,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 176,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 175,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 174,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 173,[TRVal],[TGVal],[TBVal]
mov al,[GUIWRAdd]
mov [TRVal],al
mov al,[GUIWGAdd]
mov [TGVal],al
mov al,[GUIWBAdd]
mov [TBVal],al
mov byte[TRVali],2
mov byte[TGVali],2
mov byte[TBVali],2
call DecPalVal
call DecPalVal
call DecPalVal
call DecPalVal
GUIPal 182,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 181,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 180,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 179,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal 178,[TRVal],[TGVal],[TBVal]
GUIPal 183,20,20,00
GUIPal 184,15,15,00
GUIPal 185,25,00,00
GUIPal 186,17,00,00
GUIPal 187,00,00,00
; gray scale2 = 189 .. 220
mov dx,03C8h
mov al,189
mov bl,0
out dx,al
inc dx
.loopi
mov al,bl
add al,al
mov ah,bl
shr ah,1
sub al,ah
out dx,al
out dx,al
add al,ah
out dx,al
inc bl
cmp bl,64
jne .loopi
GUIPal 221,00,55,00
GUIPal 222,00,45,00
GUIPal 223,00,25,00
GUIPal 224,40,0,20
GUIPal 225,32,0,15
GUIPal 226,20,0,10
GUIPal 227,16,0,07
GUIPal 228,45,45,50
GUIPal 229,40,40,45
GUIPal 230,35,35,40
GUIPal 231,30,30,35
GUIPal 232,35,15,15
GUIPal 233,50,12,60
GUIPal 234,30,14,60
cmp byte[GUIPalConv],0
je .convert
ret
.convert
mov byte[GUIPalConv],1
; Convert Image data to Gray Scale
; Create Palette Table
call GUIconvpal
; Convert Current Image in Buffer
mov esi,[vidbuffer]
mov ecx,288*240
xor eax,eax
.next
mov al,[esi]
mov bl,[SubPalTable+eax]
mov [esi],bl
inc esi
dec ecx
jnz .next
ret
SECTION .bss
NEWSYM GUICPC, resw 256
SECTION .text
%macro GUIPal16b 4
mov ax,%2
shr ax,1
shl ax,11
mov bx,%3
shl bx,5
or ax,bx
mov bx,%4
shr bx,1
or ax,bx
mov [GUICPC+%1*2],ax
%endmacro
DecPalVal:
mov ax,[TRVali]
sub word[TRVal],ax
mov ax,[TGVali]
sub word[TGVal],ax
mov ax,[TBVali]
sub word[TBVal],ax
test word[TRVal],8000h
jz .notnegr
mov word[TRVal],0
.notnegr
test word[TGVal],8000h
jz .notnegg
mov word[TGVal],0
.notnegg
test word[TBVal],8000h
jz .notnegb
mov word[TBVal],0
.notnegb
ret
GUISetPal16:
; set palette
; Fixed Color Scale = 0 .. 31
mov word[GUICPC],0
inc al
xor ebx,ebx
mov bl,1
.loopd
xor ecx,ecx
mov cl,bl
add cl,[GUIRAdd]
shr cl,1
shl ecx,11
xor eax,eax
mov al,bl
add al,[GUIGAdd]
shl eax,5
or ecx,eax
xor eax,eax
mov al,bl
add al,[GUIBAdd]
shr eax,1
or ecx,eax
mov [GUICPC+ebx*2],cx
inc bl
cmp bl,32
jne .loopd
; gray scale = 32 .. 63
mov bl,32
mov al,32
.loopc
mov al,bl
add al,al
xor ecx,ecx
mov cl,al
shr ecx,1
shl ecx,11
xor edx,edx
mov dl,al
shl edx,5
or ecx,edx
xor edx,edx
mov dl,al
shr edx,1
or ecx,edx
mov [GUICPC+ebx*2],cx
inc bl
cmp bl,64
jne .loopc
; shadow = 96 .. 127
xor ebx,ebx
.loope
xor ecx,ecx
mov al,bl
add al,[GUIRAdd]
mov ah,al
add al,al
add al,ah
shr al,2
shr al,1
or cl,al
shl ecx,6
mov al,bl
add al,[GUIGAdd]
mov ah,al
add al,al
add al,ah
shr al,2
or cl,al
shl ecx,5
mov al,bl
add al,[GUIBAdd]
mov ah,al
add al,al
add al,ah
shr al,2
shr al,1
or cl,al
mov [GUICPC+ebx*2+96*2],cx
inc bl
cmp bl,32
jne .loope
; 0,10,31
mov al,[GUITRAdd]
mov [TRVal],al
mov al,[GUITGAdd]
mov [TGVal],al
mov al,[GUITBAdd]
mov [TBVal],al
mov ax,[TRVal]
inc ax
shr ax,3
mov [TRVali],ax
shl ax,3
add [TRVal],ax
mov ax,[TGVal]
inc ax
shr ax,3
mov [TGVali],ax
shl ax,3
add [TGVal],ax
mov ax,[TBVal]
inc ax
shr ax,3
mov [TBVali],ax
shl ax,3
add [TBVal],ax
GUIPal16b 64,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 65,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 66,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 67,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 68,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 69,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 70,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 71,[TRVal],[TGVal],[TBVal]
GUIPal16b 72,40,0,20
GUIPal16b 73,34,0,21
GUIPal16b 80,0,10,28
GUIPal16b 81,0,10,27
GUIPal16b 82,0,10,25
GUIPal16b 83,0,09,24
GUIPal16b 84,0,08,22
GUIPal16b 85,0,07,20
GUIPal16b 86,0,06,18
GUIPal16b 87,0,05,15
GUIPal16b 88,20,0,10
GUIPal16b 89,17,0,10
; Orange Scale
mov cl,20
mov bh,0
mov ah,0
inc dx
mov esi,128
.loopf
add bh,2
add ah,1
mov edx,1Fh << 6
or dl,bh
shl edx,5
mov al,ah
shr al,1
or dl,al
mov [GUICPC+esi*2],dx
inc esi
dec cl
jnz .loopf
; Blue scale = 148 .. 167
mov al,[GUIWRAdd]
add al,al
mov [TRVal],al
mov al,[GUIWGAdd]
add al,al
mov [TGVal],al
mov al,[GUIWBAdd]
add al,al
mov [TBVal],al
mov byte[TRVali],4
mov byte[TGVali],4
mov byte[TBVali],4
GUIPal16b 152,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 151,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 150,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 149,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 148,[TRVal],[TGVal],[TBVal]
mov al,[GUIWRAdd]
add al,al
mov [TRVal],al
mov al,[GUIWGAdd]
add al,al
mov [TGVal],al
mov al,[GUIWBAdd]
add al,al
mov [TBVal],al
mov byte[TRVali],4
mov byte[TGVali],4
mov byte[TBVali],4
mov al,[TRVal]
shr al,2
sub [TRVal],al
mov al,[TGVal]
shr al,2
sub [TGVal],al
mov al,[TBVal]
shr al,2
sub [TBVal],al
GUIPal16b 157,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 156,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 155,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 154,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 153,[TRVal],[TGVal],[TBVal]
mov al,[GUIWRAdd]
add al,al
mov [TRVal],al
mov al,[GUIWGAdd]
add al,al
mov [TGVal],al
mov al,[GUIWBAdd]
add al,al
mov [TBVal],al
mov byte[TRVali],4
mov byte[TGVali],4
mov byte[TBVali],4
mov al,[TRVal]
shr al,1
sub [TRVal],al
mov al,[TGVal]
shr al,1
sub [TGVal],al
mov al,[TBVal]
shr al,1
sub [TBVal],al
GUIPal16b 162,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 161,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 160,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 159,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 158,[TRVal],[TGVal],[TBVal]
GUIPal16b 163,40,40,00
GUIPal16b 164,30,30,00
GUIPal16b 165,50,00,00
GUIPal16b 166,35,00,00
GUIPal16b 167,00,00,00
; Blue scale shadow
mov al,[GUIWRAdd]
mov [TRVal],al
mov al,[GUIWGAdd]
mov [TGVal],al
mov al,[GUIWBAdd]
mov [TBVal],al
mov byte[TRVali],2
mov byte[TGVali],2
mov byte[TBVali],2
GUIPal16b 172,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 171,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 170,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 169,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 168,[TRVal],[TGVal],[TBVal]
mov al,[GUIWRAdd]
mov [TRVal],al
mov al,[GUIWGAdd]
mov [TGVal],al
mov al,[GUIWBAdd]
mov [TBVal],al
mov byte[TRVali],2
mov byte[TGVali],2
mov byte[TBVali],2
call DecPalVal
call DecPalVal
GUIPal16b 177,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 176,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 175,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 174,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 173,[TRVal],[TGVal],[TBVal]
mov al,[GUIWRAdd]
mov [TRVal],al
mov al,[GUIWGAdd]
mov [TGVal],al
mov al,[GUIWBAdd]
mov [TBVal],al
mov byte[TRVali],2
mov byte[TGVali],2
mov byte[TBVali],2
call DecPalVal
call DecPalVal
call DecPalVal
call DecPalVal
GUIPal16b 182,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 181,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 180,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 179,[TRVal],[TGVal],[TBVal]
call DecPalVal
GUIPal16b 178,[TRVal],[TGVal],[TBVal]
GUIPal16b 183,20,20,00
GUIPal16b 184,15,15,00
GUIPal16b 185,25,00,00
GUIPal16b 186,17,00,00
GUIPal16b 187,00,00,00
; gray scale2 = 189 .. 220
mov bl,0
mov esi,189
.loopi
xor edx,edx
mov al,bl
add al,al
mov ah,bl
shr ah,1
sub al,ah
mov dl,al
shr dl,1
shl edx,6
or dl,al
shl edx,5
add al,ah
shr al,1
or dl,al
mov [GUICPC+esi*2],dx
inc esi
inc bl
cmp bl,64
jne .loopi
GUIPal16b 221,00,55,00
GUIPal16b 222,00,45,00
GUIPal16b 223,00,25,00
GUIPal16b 224,40,0,20
GUIPal16b 225,32,0,15
GUIPal16b 226,20,0,10
GUIPal16b 227,16,0,07
GUIPal16b 228,45,45,50
GUIPal16b 229,40,40,45
GUIPal16b 230,35,35,40
GUIPal16b 231,30,30,35
GUIPal16b 232,35,15,15
GUIPal16b 233,50,12,60
GUIPal16b 234,30,14,60
GUIPal16b 235,12,60,25
GUIPal16b 236,14,42,25
GUIPal16b 237,60,20,25
GUIPal16b 238,42,20,25
cmp byte[GUIPalConv],0
je .convert
ret
.convert
mov byte[GUIPalConv],1
mov esi,[vidbuffer]
mov edi,288*240
xor ebx,ebx
.next
mov ax,[esi+ebx*2]
mov ecx,eax
shr ecx,11
and ecx,1Fh
mov edx,eax
shr edx,6
and edx,1Fh
add ecx,edx
mov edx,eax
and edx,1Fh
add ecx,edx
shr ecx,1
mov al,[.multab+ecx]
mov [esi+ebx],al
inc ebx
dec edi
jnz .next
ret
SECTION .data
.multab db 1,1,1,2,2,3,4,4,5,6,6,7,8,8,9,10,10,11,12,12,13,14,14,15,16,16,
db 17,18,18,19,20,20,21,22,22,23,24,24,25,26,26,27,28,28,29,30,30,
db 31
SECTION .text
GUIBufferData:
mov ecx,16384
cmp byte[cbitmode],1
jne near .16b
add ecx,16384
cmp word[PrevResoln],224
je .nobufb
add esi,288*8
.nobufb
.16b
; copy to spritetable
mov esi,[vidbuffer]
cmp word[PrevResoln],224
je .nobufa
add esi,288*8
.nobufa
mov edi,[spritetablea]
add edi,8*288
.loop
mov eax,[esi]
mov [edi],eax
add esi,4
add edi,4
dec ecx
jnz .loop
mov edi,sprlefttot
mov ecx,64*5
.a
mov dword[edi],0
add edi,4
dec ecx
jnz .a
ret
GUIUnBuffer:
mov ecx,16384
; copy from spritetable
mov edi,[vidbuffer]
mov esi,[spritetablea]
add esi,8*288
rep movsd
mov eax,01010101h
mov ecx,2*288
rep stosd
ret
GUIconvpal:
mov ax,[cgram]
mov [tempco0],ax
test byte[scaddtype],00100000b
jz near .noaddition
test byte[scaddtype],10000000b
jnz near .noaddition
mov cx,[cgram]
mov ax,cx
and ax,001Fh
add al,[coladdr]
cmp al,01Fh
jb .noadd
mov al,01Fh
.noadd
mov bx,ax
mov ax,cx
shr ax,5
and ax,001Fh
add al,[coladdg]
cmp al,01Fh
jb .noaddb
mov al,01Fh
.noaddb
shl ax,5
add bx,ax
mov ax,cx
shr ax,10
and ax,001Fh
add al,[coladdb]
cmp al,01Fh
jb .noaddc
mov al,01Fh
.noaddc
shl ax,10
add bx,ax
mov [cgram],bx
.noaddition
mov edi,cgram
mov ebx,prevpal
xor ah,ah
.loopa
mov cx,[edi]
push eax
push ebx
mov [ebx],cx
mov al,ah
mov ax,cx
and al,01Fh
mov bh,[maxbr]
mov bl,bh
mul bl
mov bl,15
div bl
mov [curgsval],al
mov ax,cx
shr ax,5
and al,01Fh
mov bl,bh
mul bl
mov bl,15
div bl
add [curgsval],al
mov ax,cx
shr ax,10
and al,01Fh
mov bl,bh
mul bl
mov bl,15
div bl
add [curgsval],al
pop ebx
pop eax
add edi,2
add ebx,2
push eax
push ebx
mov al,ah
and eax,0FFh
mov bl,[curgsval]
push eax
push ebx
mov al,bl
mov bl,3
xor ah,ah
div bl
pop ebx
mov bl,al
pop eax
cmp byte[MessageOn],0
je .nochange128
cmp al,128
jne .nochange128
mov bl,31
.nochange128
or bl,bl
jnz .noadder
inc bl
.noadder
mov [SubPalTable+eax],bl
pop ebx
pop eax
inc ah
jnz near .loopa
mov al,[maxbr]
mov [prevbright],al
mov ax,[tempco0]
mov [cgram],ax
ret
SECTION .data
GUIMousePtr db 50+88,47+88,45+88,43+88,42+88,00,00,00
db 53+88,52+88,46+88,42+88,00,00,00,00
db 55+88,54+88,54+88,44+88,00,00,00,00
db 57+88,57+88,56+88,52+88,45+88,00,00,00
db 59+88,00,00,55+88,50+88,45+88,00,00
db 00,00,00,00,55+88,50+88,45+88,00
db 00,00,00,00,00,55+88,50+88,47+88
db 00,00,00,00,00,00,52+88,00
db 50,47,45,43,40,00,00,00
db 53,52,46,42,00,00,00,00
db 55,54,54,44,00,00,00,00
db 57,57,56,52,45,00,00,00
db 59,00,00,55,50,45,00,00
db 00,00,00,00,55,50,45,00
db 00,00,00,00,00,55,50,47
db 00,00,00,00,00,00,52,00
NEWSYM GUIFontData
db 0,0,0,0,0; empty space
db 01110000b
db 10011000b
db 10101000b
db 11001000b
db 01110000b; 0
db 00100000b
db 01100000b
db 00100000b
db 00100000b
db 01110000b; 1
db 01110000b
db 10001000b
db 00110000b
db 01000000b
db 11111000b; 2
db 01110000b
db 10001000b
db 00110000b
db 10001000b
db 01110000b; 3
db 01010000b
db 10010000b
db 11111000b
db 00010000b
db 00010000b; 4
db 11111000b
db 10000000b
db 11110000b
db 00001000b
db 11110000b; 5
db 01110000b
db 10000000b
db 11110000b
db 10001000b
db 01110000b; 6
db 11111000b
db 00001000b
db 00010000b
db 00010000b
db 00010000b; 7
db 01110000b
db 10001000b
db 01110000b
db 10001000b
db 01110000b; 8
db 01110000b
db 10001000b
db 01111000b
db 00001000b
db 01110000b; 9
db 01110000b
db 10001000b
db 11111000b
db 10001000b
db 10001000b; A
db 11110000b
db 10001000b
db 11110000b
db 10001000b
db 11110000b; B
db 01110000b
db 10001000b
db 10000000b
db 10001000b
db 01110000b; C
db 11110000b
db 10001000b
db 10001000b
db 10001000b
db 11110000b; D
db 11111000b
db 10000000b
db 11110000b
db 10000000b
db 11111000b; E
db 11111000b
db 10000000b
db 11110000b
db 10000000b
db 10000000b; F
db 01111000b
db 10000000b
db 10011000b
db 10001000b
db 01110000b; G
db 10001000b
db 10001000b
db 11111000b
db 10001000b
db 10001000b; H
db 11111000b
db 00100000b
db 00100000b
db 00100000b
db 11111000b; I
db 01111000b
db 00010000b
db 00010000b
db 10010000b
db 01100000b; J
db 10010000b
db 10100000b
db 11100000b
db 10010000b
db 10001000b; K
db 10000000b
db 10000000b
db 10000000b
db 10000000b
db 11111000b; L
db 11011000b
db 10101000b
db 10101000b
db 10101000b
db 10001000b; M
db 11001000b
db 10101000b
db 10101000b
db 10101000b
db 10011000b; N
db 01110000b
db 10001000b
db 10001000b
db 10001000b
db 01110000b; O
db 11110000b
db 10001000b
db 11110000b
db 10000000b
db 10000000b; P
db 01110000b
db 10001000b
db 10101000b
db 10010000b
db 01101000b; Q
db 11110000b
db 10001000b
db 11110000b
db 10010000b
db 10001000b; R
db 01111000b
db 10000000b
db 01110000b
db 00001000b
db 11110000b; S
db 11111000b
db 00100000b
db 00100000b
db 00100000b
db 00100000b; T
db 10001000b
db 10001000b
db 10001000b
db 10001000b
db 01110000b; U
db 10001000b
db 10001000b
db 01010000b
db 01010000b
db 00100000b; V
db 10001000b
db 10101000b
db 10101000b
db 10101000b
db 01010000b; W
db 10001000b
db 01010000b
db 00100000b
db 01010000b
db 10001000b; X
db 10001000b
db 01010000b
db 00100000b
db 00100000b
db 00100000b; Y
db 11111000b
db 00010000b
db 00100000b
db 01000000b
db 11111000b; Z
db 00000000b
db 00000000b
db 11111000b
db 00000000b
db 00000000b; -
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 11111000b; _
db 01101000b
db 10010000b
db 00000000b
db 00000000b
db 00000000b; ~
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00100000b; .
db 00001000b
db 00010000b
db 00100000b
db 01000000b
db 10000000b; /
db 00010000b
db 00100000b
db 01000000b
db 00100000b
db 00010000b; <
db 01000000b
db 00100000b
db 00010000b
db 00100000b
db 01000000b; >
db 01110000b
db 01000000b
db 01000000b
db 01000000b
db 01110000b; [
db 01110000b
db 00010000b
db 00010000b
db 00010000b
db 01110000b; ]
db 00000000b
db 00100000b
db 00000000b
db 00100000b
db 00000000b; :
db 01100000b
db 10011000b
db 01110000b
db 10011000b
db 01101000b; &
db 00100000b
db 00100000b
db 10101000b
db 01110000b
db 00100000b; arrow
db 01010000b
db 11111000b
db 01010000b
db 11111000b
db 01010000b; #
db 00000000b
db 11111000b
db 00000000b
db 11111000b
db 00000000b; =
db 01001000b
db 10010000b
db 00000000b
db 00000000b
db 00000000b; "
db 10000000b
db 01000000b
db 00100000b
db 00010000b
db 00001000b; \ (Screw you nassm)
db 10101000b
db 01110000b
db 11111000b
db 01110000b
db 10101000b; *
db 01110000b
db 10001000b
db 00110000b
db 00000000b
db 00100000b; ?
db 10001000b
db 00010000b
db 00100000b
db 01000000b
db 10001000b; %
db 00100000b
db 00100000b
db 11111000b
db 00100000b
db 00100000b; +
db 00000000b
db 00000000b
db 00000000b
db 00100000b
db 01000000b; ,
db 00110000b
db 01000000b
db 01000000b
db 01000000b
db 00110000b; (
db 01100000b
db 00010000b
db 00010000b
db 00010000b
db 01100000b; )
db 01110000b
db 10011000b
db 10111000b
db 10000000b
db 01110000b; @
db 00100000b
db 01000000b
db 00000000b
db 00000000b
db 00000000b; '
db 00100000b
db 00100000b
db 00100000b
db 00000000b
db 00100000b; !
db 01111000b
db 10100000b
db 01110000b
db 00101000b
db 11110000b; $
db 00000000b
db 00100000b
db 00000000b
db 00100000b
db 01000000b; ;
db 01000000b
db 00100000b
db 00000000b
db 00000000b
db 00000000b; `
db 00100000b
db 01010000b
db 00000000b
db 00000000b
db 00000000b; ^
db 00110000b
db 01000000b
db 11000000b
db 01000000b
db 00110000b; {
db 01100000b
db 00010000b
db 00011000b
db 00010000b
db 01100000b; }
db 00100000b
db 00100000b
db 01110000b
db 01110000b
db 11111000b; Up
db 11111000b
db 01110000b
db 01110000b
db 00100000b
db 00100000b; Down
db 00001000b
db 00111000b
db 11111000b
db 00111000b
db 00001000b; Left
db 10000000b
db 11100000b
db 11111000b
db 11100000b
db 10000000b; Right
db 00100000b
db 01100000b
db 11111000b
db 01100000b
db 00100000b; Arrow Left
db 00111000b
db 00100000b
db 00110000b
db 00001000b
db 10110000b; .5
db 11111100b
db 10000100b
db 11111100b
db 00000000b
db 00000000b; Maximize
db 00000000b
db 11111100b
db 00000000b
db 00000000b
db 00000000b; Minimize
db 11111000b
db 10001000b
db 10001000b
db 10001000b
db 11111000b; Maximize (Linux)
db 00000000b
db 00000000b
db 00100000b
db 01010000b
db 00100000b; shw fullstop 0x4E
db 01110000b
db 01000000b
db 01000000b
db 01000000b
db 00000000b; shw left bracket 0x4F
db 00000000b
db 00010000b
db 00010000b
db 00010000b
db 01110000b; shw right bracket 0x50
db 00000000b
db 00000000b
db 00000000b
db 01000000b
db 00100000b; shw comma 0x51
db 00000000b
db 00100000b
db 01110000b
db 00100000b
db 00000000b; shw mid-dot 0x52
db 11111000b
db 00001000b
db 11110000b
db 00100000b
db 11000000b; shw wo 0x53
db 00000000b
db 11111000b
db 01010000b
db 01100000b
db 01000000b; shw mini a 0x54
db 00000000b
db 00010000b
db 00100000b
db 11100000b
db 00100000b; shw mini i 0x55
db 00000000b
db 00100000b
db 11111000b
db 10001000b
db 00110000b; shw mini u 0x56
db 00000000b
db 00000000b
db 11111000b
db 00100000b
db 11111000b; shw mini e 0x57
db 00000000b
db 00010000b
db 11111000b
db 00110000b
db 11010000b; shw mini o 0x58
db 00000000b
db 01000000b
db 11111000b
db 01010000b
db 01000000b; shw mini ya 0x59
db 00000000b
db 00000000b
db 11110000b
db 00010000b
db 11111000b; shw mini yu 0x5A
db 00000000b
db 11111000b
db 00001000b
db 01111000b
db 11111000b; shw mini yo 0x5B
db 00000000b
db 10101000b
db 10101000b
db 00010000b
db 01100000b; shw mini tsu 0x5C
db 00000000b
db 10000000b
db 01111000b
db 00000000b
db 00000000b; shw prolong 0x5D
db 11111000b
db 00101000b
db 00110000b
db 00100000b
db 11000000b; shw a 0x5E
db 00001000b
db 00110000b
db 11100000b
db 00100000b
db 00100000b; shw i 0x5F
db 00100000b
db 11111000b
db 10001000b
db 00010000b
db 01100000b; shw u 0x60
db 11111000b
db 00100000b
db 00100000b
db 00100000b
db 11111000b; shw e 0x61
db 00010000b
db 11111000b
db 00110000b
db 01010000b
db 10010000b; shw o 0x62
db 01000000b
db 11111000b
db 01001000b
db 01001000b
db 10011000b; shw ka 0x63
db 00100000b
db 11111000b
db 00100000b
db 11111000b
db 00100000b; shw ki 0x64
db 01000000b
db 01111000b
db 10001000b
db 00010000b
db 01100000b; shw ku 0x65
db 01000000b
db 01111000b
db 10010000b
db 00010000b
db 01100000b; shw ke 0x66 ^^
db 11111000b
db 00001000b
db 00001000b
db 00001000b
db 11111000b; shw ko 0x67
db 01010000b
db 11111000b
db 01010000b
db 00010000b
db 01100000b; shw sa 0x68
db 01000000b
db 10101000b
db 01001000b
db 00010000b
db 11100000b; shw shi 0x69
db 11111000b
db 00001000b
db 00010000b
db 00110000b
db 11001000b; shw su 0x6A
db 01000000b
db 11111000b
db 01010000b
db 01000000b
db 00111000b; shw se 0x6B
db 10001000b
db 01001000b
db 00001000b
db 00010000b
db 01100000b; shw so 0x6C
db 01000000b
db 01111000b
db 11001000b
db 00110000b
db 01100000b; shw ta 0x6D
db 11111000b
db 00100000b
db 11111000b
db 00100000b
db 01000000b; shw chi 0x6E
db 10101000b
db 10101000b
db 00001000b
db 00010000b
db 01100000b; shw tsu 0x6F
db 11111000b
db 00000000b
db 11111000b
db 00100000b
db 11000000b; shw te 0x70
db 01000000b
db 01000000b
db 01100000b
db 01010000b
db 01000000b; shw to 0x71
db 00100000b
db 11111000b
db 00100000b
db 00100000b
db 01000000b; shw na 0x72
db 11110000b
db 00000000b
db 00000000b
db 00000000b
db 11111000b; shw ni 0x73
db 11111000b
db 00001000b
db 00101000b
db 00010000b
db 011010000b; shw nu 0x74
db 00100000b
db 11111000b
db 00001000b
db 01110000b
db 10101000b; shw ne 0x75
db 00001000b
db 00001000b
db 00001000b
db 00010000b
db 01100000b; shw no 0x76
db 01010000b
db 01010000b
db 01010000b
db 10001000b
db 10001000b; shw ha 0x77
db 10000000b
db 10011000b
db 11100000b
db 10000000b
db 01111000b; shw hi 0x78
db 11111000b
db 00001000b
db 00001000b
db 00010000b
db 01100000b; shw hu 0x79
db 01000000b
db 10100000b
db 10010000b
db 00001000b
db 00000000b; shw he 0x7A
db 00100000b
db 11111000b
db 01110000b
db 10101000b
db 00100000b; shw ho 0x7B
db 11111000b
db 00001000b
db 10010000b
db 01100000b
db 00100000b; shw ma 0x7C
db 11111000b
db 00000000b
db 11111000b
db 00000000b
db 11111000b; shw mi 0x7D
db 00100000b
db 01000000b
db 01000000b
db 10010000b
db 11111000b; shw mu 0x7E
db 00001000b
db 01001000b
db 00110000b
db 00110000b
db 11001000b; shw me 0x7F
db 11111000b
db 00100000b
db 11111000b
db 00100000b
db 00111000b; shw mo 0x80
db 01000000b
db 11111100b
db 01001000b
db 00100000b
db 0010000b; shw ya 0x81
db 11110000b
db 00010000b
db 00010000b
db 00010000b
db 11111000b; shw yu 0x82
db 11111000b
db 00001000b
db 11111000b
db 00001000b
db 11111000b; shw yo 0x83
db 11111000b
db 00000000b
db 11111000b
db 00010000b
db 01100000b; shw ra 0x84
db 10001000b
db 10001000b
db 10001000b
db 00010000b
db 01100000b; shw ri 0x85
db 01100000b
db 01100000b
db 01101000b
db 01101000b
db 10110000b; shw ru 0x86
db 10000000b
db 10000000b
db 10001000b
db 10001000b
db 11110000b; shw re 0x87
db 11111000b
db 10001000b
db 10001000b
db 10001000b
db 11111000b; shw ro 0x88
db 11111000b
db 10001000b
db 00001000b
db 00010000b
db 01100000b; shw wa 0x89
db 10000000b
db 01001000b
db 00001000b
db 00010000b
db 11100000b; shw n 0x8A
db 10100000b
db 10100000b
db 00000000b
db 00000000b
db 00000000b; shw voiced 0x8B
db 01000000b
db 10100000b
db 01000000b
db 00000000b
db 00000000b; shw halfvoiced 0x8C
; 189 .. 220
GUIIconDataClose:
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
db 0 ,216,216,216,216,216,216,216,0 ,0
db 214,212,202,212,212,212,202,212,210,0
db 214,212,212,200,212,200,212,212,210,202
db 214,212,212,212,198,212,212,212,210,202
db 214,212,212,196,212,196,212,212,210,200
db 214,212,194,212,212,212,194,212,210,200
db 0 ,208,208,208,208,208,208,208,198,198
db 0 ,0 ,198,198,198,198,198,198,198,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
GUIIconDataButtonHole:
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
db 0 ,0 ,0 ,207,205,207,0 ,0 ,0 ,0
db 0 ,0 ,207,203,202,203,207,0 ,0 ,0
db 0 ,207,203,200,198,200,203,207,0 ,0
db 0 ,207,202,198,197,198,202,207,0 ,0
db 0 ,207,203,200,198,200,203,207,0 ,0
db 0 ,0 ,207,203,202,203,207,0 ,0 ,0
db 0 ,0 ,0 ,207,205,207,0 ,0 ,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
GUIIconDataButtonFill:
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
db 0 ,0 ,0 ,207,209,207,0 ,0 ,0 ,0
db 0 ,0 ,207,211,212,211,207,0 ,0 ,0
db 0 ,207,211,214,216,214,211,207,0 ,0
db 0 ,207,212,216,217,216,212,207,0 ,0
db 0 ,207,211,214,216,214,211,207,0 ,0
db 0 ,0 ,207,211,212,211,207,0 ,0 ,0
db 0 ,0 ,0 ,207,209,207,0 ,0 ,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
GUIIconDataSlideBar:
db 0 ,0 ,0 ,0 ,216,0 ,0 ,0 ,0 ,0
db 0 ,0 ,0 ,212,216,220,0 ,0 ,0 ,0
db 0 ,0 ,0 ,212,216,220,202,0 ,0 ,0
db 0 ,0 ,212,212,216,218,220,0 ,0 ,0
db 0 ,0 ,212,214,216,218,220,202,0 ,0
db 0 ,0 ,212,214,216,218,220,202,0 ,0
db 0 ,0 ,0 ,212,216,220,202,202,0 ,0
db 0 ,0 ,0 ,212,216,220,202,0 ,0 ,0
db 0 ,0 ,0 ,0 ,216,202,202,0 ,0 ,0
db 0 ,0 ,0 ,0 ,0 ,202,0 ,0 ,0 ,0
GUIIconDataCheckBoxUC:
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
db 0 ,220,219,218,217,216,215,0 ,0 ,0
db 0 ,219,218,217,216,215,214,202,0 ,0
db 0 ,218,217,216,215,214,213,202,0 ,0
db 0 ,217,216,215,214,213,212,202,0 ,0
db 0 ,216,215,214,213,212,211,202,0 ,0
db 0 ,215,214,213,212,211,210,202,0 ,0
db 0 ,0 ,202,202,202,202,202,202,0 ,0
GUIIconDataCheckBoxC:
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,165,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,165,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,165,0 ,0 ,0
db 0 ,220,219,218,217,165,215,0 ,0 ,0
db 0 ,165,165,217,165,165,214,202,0 ,0
db 0 ,218,165,216,165,214,213,202,0 ,0
db 0 ,217,165,165,165,213,212,202,0 ,0
db 0 ,216,215,165,213,212,211,202,0 ,0
db 0 ,215,214,165,212,211,210,202,0 ,0
db 0 ,0 ,202,202,202,202,202,202,0 ,0
GUIIconDataCheckBoxX:
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
db 0 ,165,0 ,0 ,0 ,0 ,0 ,165,0 ,0
db 0 ,220,165,218,217,216,165,0 ,0 ,0
db 0 ,219,218,165,216,165,214,202,0 ,0
db 0 ,218,217,216,165,214,213,202,0 ,0
db 0 ,217,216,165,214,165,212,202,0 ,0
db 0 ,216,165,214,213,212,165,202,0 ,0
db 0 ,165,214,213,212,211,210,165,0 ,0
db 0 ,0 ,202,202,202,202,202,202,0 ,0
GUIIconDataUpArrow:
db 201,209,209,209,209,209,209,200,0 ,0
db 207,205,205,202,203,205,205,203,0 ,0
db 207,205,201,202,203,202,205,203,0 ,0
db 207,200,205,202,203,205,201,203,0 ,0
db 207,205,205,202,203,205,205,203,0 ,0
db 207,205,205,202,203,205,205,203,0 ,0
db 207,205,205,202,203,205,205,203,0 ,0
db 199,201,201,201,201,201,201,198,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
GUIIconDataDownArrow:
db 201,209,209,209,209,209,209,200,0 ,0
db 207,205,205,202,203,205,205,203,0 ,0
db 207,205,205,202,203,205,205,203,0 ,0
db 207,205,205,202,203,205,205,203,0 ,0
db 207,200,205,202,203,205,201,203,0 ,0
db 207,205,201,202,203,202,205,203,0 ,0
db 207,205,205,202,203,205,205,203,0 ,0
db 199,201,201,201,201,201,201,198,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
NEWSYM SnowData
dw 161,251,115,211,249,87,128,101,232,176,51,180,108,193,224,112,254,159,102,238
dw 223,123,218,42,173,160,143,170,64,1,174,29,34,187,194,199,40,89,232,32
dw 7,195,141,67,216,48,234,1,243,116,164,182,146,136,66,70,36,43,98,208
dw 63,240,216,253,147,36,33,253,98,80,228,156,73,82,85,1,97,72,187,239
dw 18,196,127,182,22,22,101,25,124,145,240,213,186,22,7,161,30,98,90,197
dw 22,205,32,150,59,133,49,140,10,128,142,185,176,142,220,195,100,102,105,194
dw 43,139,184,153,1,95,176,169,192,201,233,243,73,65,188,14,194,39,251,140
dw 239,181,142,160,242,248,82,49,9,157,233,162,254,121,112,6,118,24,56,121
dw 74,209,1,223,145,6,75,73,18,168,194,168,58,39,222,170,214,75,45,218
dw 39,197,242,98,22,90,255,5,144,244,252,55,98,18,135,101,27,85,215,207
dw 183,28,201,142,45,122,145,159,41,243,109,29,117,203,7,234,231,214,131,133
dw 217,8,74,207,130,77,21,229,167,78,218,109,142,58,134,238,29,182,178,14
dw 144,129,196,219,60,128,30,105,57,53,76,122,242,208,101,241,246,99,248,67
dw 137,244,70,51,202,94,164,125,115,72,61,72,129,169,155,122,91,154,160,83
dw 41,102,223,218,140,40,132,16,223,92,50,230,168,47,126,117,242,136,1,245
dw 171,0,36,98,73,69,14,229,66,177,108,92,39,250,243,161,111,85,211,99
dw 52,98,121,188,128,201,90,205,223,92,177,19,87,18,75,54,6,81,235,137
dw 247,66,211,129,247,39,119,206,116,250,113,231,190,196,53,51,34,114,39,22
dw 192,33,249,151,26,22,139,97,171,238,182,88,22,176,157,255,178,199,138,98
dw 140,36,112,90,25,245,134,64,48,190,165,113,24,195,84,70,175,9,179,69
dw 13,26,167,237,163,159,185,128,109,114,86,74,188,103,141,48,188,203,205,191
dw 215,193,224,4,153,36,108,3,172,235,56,251,211,115,173,216,240,33,78,150
dw 133,64,51,103,56,26,165,222,70,148,115,119,246,229,181,63,109,49,228,108
dw 126,10,170,48,87,42,193,24,28,255,176,176,209,181,97,93,61,241,201,137
dw 129,97,24,159,168,215,61,113,104,143,168,7,196,216,149,239,110,65,75,143
dw 238,0,37,19,8,56,65,234,228,72,42,5,226,95,243,51,55,231,114,90
dw 160,141,171,108,218,252,154,64,175,142,214,211,180,129,217,118,33,130,213,2
dw 73,145,93,21,162,141,97,225,112,253,49,43,113,208,131,104,31,51,192,37
dw 117,186,16,45,61,114,220,6,89,163,197,203,142,80,89,115,190,190,228,15
dw 166,145,59,139,120,79,104,252,246,73,113,144,224,65,204,155,221,85,31,99
dw 48,253,94,159,215,31,123,204,248,153,31,210,174,178,54,146,152,88,56,92
dw 197,35,124,104,211,118,1,207,108,68,123,161,107,69,143,13,79,170,130,193
dw 214,153,219,247,227,2,170,208,248,139,118,241,247,183,18,135,246,126,201,46
dw 70,234,171,72,18,135,236,216,32,178,148,231,161,15,6,254,34,181,5,71
dw 2,219,71,87,252,16,202,190,180,83,99,209,75,134,78,84,114,32,171,246
dw 125,11,57,200,102,29,176,26,205,151,152,108,100,146,117,95,71,77,158,207
dw 60,192,50,135,223,237,231,53,27,195,170,146,155,160,92,224,247,187,14,50
dw 203,5,153,42,17,75,109,14,78,160,236,114,131,105,189,209,233,135,221,207
dw 226,119,104,10,178,107,77,160,233,179,120,227,133,241,32,223,63,247,66,157
dw 140,81,118,81,63,193,173,228,214,78,124,123,222,149,9,242,0,128,194,110
NEWSYM SnowVelDist
db 57,92,100,19,100,184,238,225,55,240,255,221,215,105,226,153,164,41,22,93
db 176,203,155,199,244,52,233,219,110,227,229,227,152,240,83,248,226,31,163,22
db 28,156,18,10,248,67,123,167,25,138,90,10,79,107,208,229,248,233,185,10
db 167,21,19,178,132,154,81,70,20,71,95,147,72,27,91,189,13,189,102,84
db 195,123,251,93,68,36,178,59,107,99,104,191,76,110,44,206,123,46,98,112
db 26,50,1,35,150,17,242,208,69,23,202,197,59,80,136,124,40,89,11,40
db 1,136,90,72,198,83,2,174,174,4,28,205,135,35,194,54,22,40,4,132
db 191,88,163,66,204,230,35,111,9,177,254,174,163,68,5,88,111,235,58,236
db 4,248,172,154,101,164,43,223,10,13,210,125,146,73,192,57,117,152,128,36
db 106,21,253,113,110,133,244,4,150,32,76,71,22,106,210,244,46,128,27,215
db 231,112,177,196,198,120,196,57,234,74,235,108,64,181,209,188,177,63,197,200
db 126,164,136,163,48,62,225,223,212,201,195,121,90,7,10,196,88,53,39,249
db 147,98,65,253,246,3,152,125,242,105,44,129,94,232,13,4,86,220,194,67
db 186,210,171,197,64,138,89,78,58,150,52,79,138,201,244,111,106,181,192,69
db 234,253,239,113,98,37,209,151,60,47,241,235,185,52,173,94,172,182,47,150
db 80,118,10,58,161,237,10,64,238,198,14,74,132,250,234,63,169,86,158,170
db 76,168,124,133,28,203,246,140,228,77,50,53,115,113,157,218,90,192,28,209
db 72,117,156,101,226,99,11,245,69,59,17,175,164,59,8,166,163,185,10,60
db 100,19,26,38,114,232,180,115,238,184,88,103,178,67,212,21,87,64,85,1
db 62,87,155,62,21,96,205,195,131,97,191,252,218,209,179,201,12,2,234,110
db 162,14,145,170,156,105,85,132,132,60,239,14,80,129,225,144,149,244,188,8
db 13,168,181,168,30,142,24,110,26,172,231,182,50,214,66,193,100,45,132,144
db 205,190,16,133,45,250,83,183,140,229,117,226,68,59,163,96,235,227,25,155
db 209,105,41,214,30,107,2,85,180,23,241,39,113,63,75,44,107,142,93,29
db 62,240,235,152,147,52,54,146,109,112,139,162,238,198,201,8,141,115,112,106
db 4,99,25,155,111,161,114,253,75,100,28,59,101,150,2,122,228,6,12,59
db 249,181,67,136,227,227,199,46,75,203,50,25,50,61,62,22,238,124,218,134
db 243,21,243,222,94,138,161,234,133,23,138,45,4,226,154,227,8,84,105,126
db 200,127,240,144,124,197,102,144,53,29,94,231,108,175,136,37,44,183,178,95
db 41,196,214,12,42,221,106,225,151,32,53,130,24,211,88,14,135,18,90,219
db 177,129,90,217,162,181,199,133,116,56,36,100,230,91,220,83,41,65,20,64
db 177,197,249,24,242,62,26,234,92,44,167,153,243,94,179,163,103,29,220,199
db 128,94,236,152,53,32,77,78,228,89,124,85,87,50,197,116,179,105,236,139
db 102,17,159,66,176,27,205,36,113,80,60,6,61,174,254,174,246,72,154,31
db 97,40,10,8,114,203,238,26,89,51,134,110,118,176,87,32,192,210,146,207
db 88,45,156,179,61,224,87,107,107,1,252,187,203,100,169,211,205,105,12,231
db 137,176,166,37,192,241,169,84,32,85,112,168,154,7,247,146,183,225,246,173
db 57,103,110,236,113,118,203,200,22,87,251,7,138,37,12,84,221,171,51,209
db 242,37,89,73,151,162,139,189,131,209,221,96,107,144,175,79,199,123,98,138
db 226,86,221,254,72,14,126,180,200,171,85,94,120,124,196,225,150,57,219,158