diff --git a/.gitignore b/.gitignore index fce0103..26ffd1c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ src/bin/*.8xv test spasm-ng +Edusoft +Flicky +*.png diff --git a/README.md b/README.md index 561cb52..a7d3c02 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A mostly complete port of the Sega Master System version of Sonic 2 to the TI-84+ CE. -The game is 443 kilobytes in size. Make sure that every appvar and the launcher is loaded into archive memory, as the game will crash if any appvar is stored in RAM. +The game is 443 kilobytes in size. Make sure that every appvar and the launcher (Sonic2.8xp) is stored in archive memory, as the game will crash if any appvar is stored in RAM. # Controls @@ -22,5 +22,5 @@ Delete - Reset Game - [x] Replace original 6bpp palettes with 16bpp approximations - [x] Emulate the SMS VDP, rendering, caches, and all - [x] Fix remaining runtime errors - - [ ] (MID PRIORITY) Get the game running at full speed + - [x] (MID PRIORITY) Get the game running at full speed - [ ] (VERY LOW PRIORITY) expand the rendering area to fill the 84+ CE's screen \ No newline at end of file diff --git a/build.bat b/build.bat index b06c8b6..fb2feb9 100644 --- a/build.bat +++ b/build.bat @@ -1,12 +1,12 @@ -echo off +@echo off set /P VersionType=What version are you building? (1 = Normal, 2 = Easy): set /P Language=What language are you using? (1 = English, 2 = French): cd src echo Assembling game... -spasm64 -E -D Version=%VersionType% sonic2.asm bin/sonic2.8xp -spasm64 -E -L -O -D Version=%VersionType% -D Listing=1 -D Language=%Language% s2_engine.asm s2.8xv +spasm64 -E -D Version=%VersionType% launcher.asm bin/sonic2.8xp +spasm64 -E -L -O -D Version=%VersionType% -D Listing=1 -D Language=%Language% s2.asm s2.8xv echo Building Rom Listings... spasm64 -E -L -D Listing=1 object_logic/bank28.asm bin/bank28.8xv @@ -42,7 +42,8 @@ spasm64 -E -D Listing=0 object_logic/bank28.asm bin/bank28.8xv spasm64 -E -L bank29.asm bin/bank29.8xv spasm64 -E -D Listing=0 appvars/bank30.asm bin/bank30.8xv spasm64 -E -D Listing=0 appvars/bank31.asm bin/bank31.8xv -spasm64 -E -D Version=%VersionType% -D Listing=0 -D Language=%Language% s2_engine.asm bin/Sonic2.8xv +spasm64 -E -L SHC/SHC.asm bin/bank32.8xv +spasm64 -E -D Version=%VersionType% -D Listing=0 -D Language=%Language% s2.asm bin/Sonic2.8xv cd .. diff --git a/src/SHC/Bank32.lab b/src/SHC/Bank32.lab new file mode 100644 index 0000000..d900616 --- /dev/null +++ b/src/SHC/Bank32.lab @@ -0,0 +1,1732 @@ +_CHECKINPUT = $0A4B +_DATA_05AA = $05AF +_DATA_7761 = $6DAD +_DRAWCURSOR = $0A9C +_ERROR_MSG = $0067 +_GETCOMPRESSIONTYPE = $1422 +_LABEL_1AA6_22 = $134C +_LOAD_INTRO_LEVEL = $0B81 +_LOAD_TITLE_LEVEL = $0C57 +_MOVECURSORDOWN = $0A8C +_MOVECURSORUP = $0A7D +_PLAYER_ANIM_BALANCEFRAMECOUNTERS = $3182 +_PLAYER_ANIM_BALANCEFRAMES = $316E +_PLAYER_CHANGEFRAMEDISPLAYTIME_WALKFRAMECOUNTERS = $3124 +_PORT1_INPUT = $130B +_RESETCURSORVELOCITY = $0A78 +_START = $0000 +_TILEMAPPINGS = $0AB1 +_VDP_INITREGISTERS_REGVALUES = $0EAF +ACT1 = $0000 +ACT2 = $0001 +ACT2TEXT = $0B77 +ACT3 = $0002 +ACT3TEXT = $0B7C +ALT_PALETTE_GMZ_CONVEYOR = $7784 +APPVAROBJ = $0015 +ARC_UNARC = $21448 +BACKGROUNDXSCROLL = $D172 +BACKGROUNDYSCROLL = $D173 +BANK04 = $795D +BANK05 = $7965 +BANK06 = $796D +BANK07 = $7975 +BANK08 = $797D +BANK09 = $7985 +BANK10 = $798D +BANK11 = $7995 +BANK12 = $799D +BANK13 = $79A5 +BANK14 = $79AD +BANK15 = $79B5 +BANK16 = $79BD +BANK17 = $79C5 +BANK18 = $79CD +BANK19 = $79D5 +BANK20 = $79DD +BANK21 = $79E5 +BANK22 = $79ED +BANK23 = $79F5 +BANK24 = $79FD +BANK25 = $7A05 +BANK26 = $7A0D +BANK27 = $7A15 +BANK28 = $D071F6 +BANK28HEADER = $7A1D +BANK29 = $7A25 +BANK30 = $D0B1F6 +BANK30HEADER = $7A2D +BANK31 = $D0F1F6 +BANK31HEADER = $7A35 +BANK32 = $8000 +BANKADDRESSTABLE = $D0E000 +BANKSLOT2 = $8000 +BGPALETTECONTROL = $D4E6 +BGPALETTEINDEX = $D4E7 +BITFIELDCOUNT = $D340 +BTN_1 = $0010 +BTN_1_BIT = $0004 +BTN_2 = $0020 +BTN_2_BIT = $0005 +BTN_DOWN = $0002 +BTN_DOWN_BIT = $0001 +BTN_LEFT = $0004 +BTN_LEFT_BIT = $0002 +BTN_RIGHT = $0008 +BTN_RIGHT_BIT = $0003 +BTN_UP = $0001 +BTN_UP_BIT = $0000 +CALCULATEPLAYERDIRECTION = $2994 +CAMERA_METATILECOLBUFFER = $D178 +CAMERA_METATILEPTR = $D278 +CAMERA_X = $D174 +CAMERA_Y = $D176 +CAMERAOFFSETX = $D288 +CAMERAOFFSETY = $D289 +CHANGEGAMEMODE = $1CCA +CHAOSEMERALDDATA = $700F +CHECKFORBANK = $780F +CHECKFORBANK_TOGGLEINTERRUPT = $7855 +CHKFINDSYM = $2050C +CLEARMEMORYMAP = $D27947 +CLLSN_ADJUSTEDX = $D356 +CLLSN_ADJUSTEDY = $D358 +CLLSN_COLLISIONVALUEX = $D362 +CLLSN_COLLISIONVALUEY = $D361 +CLLSN_HEADERPTR3 = $D36F +CLLSN_LEVELMAPBLOCKPTR = $D354 +CLLSN_METATILEINDEX = $D353 +CLLSN_METATILESURFACETYPE = $D35E +CLLSN_METATILETRIGGERFUNCPTRS = $6387 +CLLSN_METATILEX = $D35A +CLLSN_METATILEY = $D35C +CLLSN_PROJECTVERTICAL = $66F7 +CLLSN_PROJECTVERTICAL_EPILOGUE = $6741 +CLLSN_PROJECTVERTICAL_NOALTER = $6743 +CLLSN_RINGBLOCK = $D352 +CLRLCDFULL = $20808 +CMDPIXELSHADOW = $D07396 +COLLISION_MONITOR = $3F96 +COLLISION_MONITOR_CONTINUE = $3FE2 +COLLISION_MONITOR_INVINCIBILITY = $4008 +COLLISION_MONITOR_LIFE = $3FD6 +COLLISION_MONITOR_RINGS = $3FB8 +COLLISION_MONITOR_SNEAKERS = $3FEF +COLORDEPTH = $DC41 +CONTINUECOUNTER = $D2BD +CONTINUESCREEN_COUNT = $D2C4 +CONTINUESCREEN_DRAWSCREEN = $2077 +CONTINUESCREEN_LOADNUMBERMAPPINGS = $20B4 +CONTINUESCREEN_LOADNUMBERTILES = $6DEF +CONTINUESCREEN_LOADTILES = $6DDC +CONTINUESCREEN_MAINLOOP = $06FD +CONTINUESCREEN_TIMER = $D2C3 +CONTROLBYTE = $D2D2 +CONVERTPIXELROW = $D27D1E +CONVERTTILETO8BPP = $D27D00 +CPHLDE = $2013C +CRAM = $E30200 +CURRENTACT = $D296 +CURRENTLEVEL = $D295 +CURRENTMETATILEADDR = $D23D +CURSORPOS = $D2C2 +DATA_1E6D = $172B +DATA_1E76 = $1734 +DATA_1E79 = $1737 +DATA_1E7C = $173A +DATA_1E7F = $173D +DATA_1E82 = $1740 +DATA_1E85 = $1743 +DATA_1E88 = $1746 +DATA_1E8B = $1749 +DATA_1E8E = $174C +DATA_1E91 = $174F +DATA_1E94 = $1752 +DATA_1E97 = $1755 +DATA_1E9A = $1758 +DATA_1E9D = $175B +DATA_1EA0 = $175E +DATA_1EA3 = $1761 +DATA_1EA6 = $1764 +DATA_1EA9 = $1767 +DATA_1EAC = $176A +DATA_1EAF = $176D +DATA_1EB2 = $1770 +DATA_1EB5 = $1773 +DATA_1EB8 = $1776 +DATA_1EBB = $1779 +DATA_1EBE = $177C +DATA_1EC1 = $177F +DATA_1EC4 = $1782 +DATA_1EC7 = $1785 +DATA_1ECA = $1788 +DATA_1ECD = $178B +DATA_1ED0 = $178E +DATA_1ED3 = $1791 +DATA_1ED6 = $1794 +DATA_1ED9 = $1797 +DATA_1EDC = $179A +DATA_1EDF = $179D +DATA_1EE2 = $17A0 +DATA_1EE5 = $17A3 +DATA_1EE8 = $17A6 +DATA_1EEB = $17A9 +DATA_1F70 = $182E +DATA_1FE4 = $18A2 +DATA_231A = $1BCE +DATA_2320 = $1BD4 +DATA_23F8 = $1CAC +DATA_2402 = $1CB6 +DATA_240C = $1CC0 +DATA_28FE = $2102 +DATA_2904 = $2108 +DATA_2974 = $2178 +DATA_299C = $21A0 +DATA_29C4 = $21C8 +DATA_2A34 = $2238 +DATA_2AA4 = $22A8 +DATA_2B14 = $2318 +DATA_2B84 = $2388 +DATA_2BF4 = $23F8 +DATA_2C64 = $2468 +DATA_2D0C = $24D8 +DATA_2D6C = $2570 +DATA_2D98 = $259C +DATA_2DAC = $25B0 +DATA_2DC0 = $25C4 +DATA_2DD4 = $25D8 +DATA_2E04 = $2608 +DATA_2E90 = $2694 +DATA_2F1C = $2720 +DATA_330 = $0326 +DATA_4016 = $37F8 +DATA_43D3 = $3BB5 +DATA_543F = $4B9B +DATA_5445 = $4BA1 +DATA_544B = $4BA7 +DATA_54F9 = $4C55 +DATA_5501 = $4C5D +DATA_5509 = $4C65 +DATA_5511 = $4C6D +DATA_5519 = $4C75 +DATA_5521 = $4C7D +DATA_5529 = $4C85 +DATA_62BD = $5A0F +DATA_6404 = $5B4A +DATA_6975 = $609B +DATA_6B27 = $623F +DATA_6BB2 = $62CA +DATA_6D41 = $644C +DATA_6D41_END = $6454 +DATA_80275 = $81D6 +DATA_80382 = $82BB +DATA_803A2 = $82DB +DATA_803B2 = $82EB +DATA_80414 = $834D +DATA_820D2 = $A00B +DATA_823E1 = $A31A +DATA_823E7 = $A320 +DATA_8262E = $A567 +DATA_ACCELERATIONVALUES_LEFT = $3578 +DATA_ACCELERATIONVALUES_LEFT_UNDERWATER = $36F8 +DATA_ACCELERATIONVALUES_RIGHT = $34F8 +DATA_ACCELERATIONVALUES_RIGHT_UNDERWATER = $3678 +DATA_B30_9841 = $E000 +DATA_B30_9A41 = $E200 +DATA_B30_AF41 = $7769 +DATA_B30_AF4A = $7772 +DATA_B30_AF51 = $7779 +DATA_B30_AF53 = $777B +DATA_B30_AF5C = $7784 +DATA_B30_AF61 = $7789 +DATA_B30_AF65 = $778D +DATA_B30_AF7D = $77A5 +DATA_B30_AF83 = $77AB +DATA_B30_AF9F = $77C7 +DATA_B30_AFCF = $77F7 +DATA_B30_AFD5 = $77FD +DATA_B30_AFDB = $7803 +DATA_DECELERATIONVALUES = $35F8 +DATA_OFFSCREENBUFFEROFFSETS = $515A +DATA_RINGCOLLISION_METATILES = $6AC8 +DATA_SONICLOOPANIMATIONS = $321B +DATA_SONICLOOPFALLFRAMES = $31D7 +DEMOBANK = $D2D8 +DEMONUMBER = $D2D7 +DEMOSEQUENCE_CHANGELEVEL = $1D86 +DEMOSEQUENCE_LOADLEVEL = $1DF1 +DEMOSEQUENCE_PLAYDEMO = $1D18 +DONOTHINGSTUB = $5BF6 +DRAW8BPPTILEEND = $D27D4D +DRAWCACHEDPIXEL = $D27D3F +DRAWCACHEDTILE = $D27B5A +DRAWCACHEDTILE_FLIPPEDX = $D27BA8 +DRAWPIXEL = $D27D3E +DRAWSAT = $D27C7E +DRAWSATTRIG = $D4C1 +DRAWSCREEN = $7A45 +DRAWSCREENMAP = $D27ADA +DRAWSCREENMAP_TILES = $D27B0A +DRAWTILEMAPTRIG = $D4C0 +EMERALDFLAGS = $D2C5 +ENGINE_ADJUSTPLAYERAFTERCOLLISION = $5B37 +ENGINE_ALLOCATEOBJECTHIGHPRIORITY = $5899 +ENGINE_ALLOCATEOBJECTLOWPRIORITY = $58B8 +ENGINE_ANIMATERINGART = $75F2 +ENGINE_CALCULATEBGSCROLL = $41E1 +ENGINE_CALCULATECAMERABOUNDS = $5601 +ENGINE_CAMERAADJUST = $55C3 +ENGINE_CAPLIFECOUNTERVALUE = $1E4C +ENGINE_CHECKCOLLISION = $5F68 +ENGINE_CHECKCOLLISION_BOTTOM = $5FDB +ENGINE_CHECKCOLLISION_LEFT = $5FC0 +ENGINE_CHECKCOLLISION_RETURN = $6055 +ENGINE_CHECKCOLLISION_TOP = $5FF9 +ENGINE_CHECKCOLLISION_UPDATEOBJECTFLAGS = $600D +ENGINE_CHECKCOLLISIONANDADJUSTPLAYER = $5AA1 +ENGINE_CHECKGLOBALTRIGGERS = $05D8 +ENGINE_CHECKHASEMERALD = $078B +ENGINE_CLEARAUXLEVELHEADER = $7388 +ENGINE_CLEARLEVELATTRIBUTES = $4C8D +ENGINE_CLEARPALETTERAM = $6E6A +ENGINE_CLEARPLAYERTILES = $0D7F +ENGINE_CLEARUNDERWATER = $410C +ENGINE_CLEARVRAM = $6E3B +ENGINE_CLEARWORKINGVRAM = $1A98 +ENGINE_COLLISION_ADJUSTVERTICALPOS = $6798 +ENGINE_COLLISIONDATAPTR = $D2D4 +ENGINE_COPYMAPPINGSCOLUMNTOVRAM = $506B +ENGINE_COPYMAPPINGSROWTOVRAM = $5135 +ENGINE_COPYMAPPINGSTOVRAM_COLUMN = $5013 +ENGINE_COPYMAPPINGSTOVRAM_ROW = $50DA +ENGINE_COPYPALETTES = $0DED +ENGINE_CREATEBLOCKFRAGMENTOBJECTS = $6916 +ENGINE_DATA_BYTEFLIPLUT = $0100 +ENGINE_DATA_STATUSICONDEFAULTS = $1AD7 +ENGINE_DEALLOCATEOBJECT = $599B +ENGINE_DEMO_MOVEPLAYER = $1332 +ENGINE_DEMOSEQ_BANK = $D2D8 +ENGINE_DISPLAYEXPLOSIONOBJECT = $59DE +ENGINE_DIVIDE_16_BY_U8 = $14DF +ENGINE_DYNPALETTE_0 = $D4A6 +ENGINE_DYNPALETTE_1 = $D4AE +ENGINE_ERRORTRAP = $006C +ENGINE_GETCOLLISIONDATA_CLEANUP = $6C38 +ENGINE_GETCOLLISIONDATA_HANDLEOVERFLOW = $6C3C +ENGINE_GETCOLLISIONDATAFORBLOCK = $6B42 +ENGINE_GETCOLLISIONVALUEFORBLOCK = $6BD3 +ENGINE_GETOBJECTDESCRIPTORPOINTER = $5C0B +ENGINE_GETOBJECTINDEXFROMPOINTER = $5BFC +ENGINE_GETOBJECTSCREENPOS = $324F +ENGINE_HANDLEPLC = $6E7F +ENGINE_HANDLEPLC_CHAOSEMERALD = $6FEB +ENGINE_HANDLEPLC_CLEANUP = $6F68 +ENGINE_HANDLEPLC_COPYMIRRORED = $6EEA +ENGINE_HANDLEPLC_MONITORART = $701F +ENGINE_HANDLEPLC_NOBANK = $6F25 +ENGINE_HANDLEPLC_PARSEDESCRIPTOR = $6F43 +ENGINE_HANDLEVBLANK = $0488 +ENGINE_HANDLEVBLANK_EPILOGUE = $054F +ENGINE_HANDLEVBLANK_PALETTESONLY = $058F +ENGINE_INITCOUNTERS = $1B12 +ENGINE_INITIALISE = $0448 +ENGINE_INITSTATUSICONS = $1AA6 +ENGINE_INPUTFLAGS = $D137 +ENGINE_INPUTFLAGSLAST = $D147 +ENGINE_INTERRUPT = $0038 +ENGINE_INTERRUPTSERVICED = $D135 +ENGINE_LIMITSCREENPOS_RIGHT = $34C6 +ENGINE_LOADAUXLEVELHEADER = $1B45 +ENGINE_LOADCARDMAPPINGS = $1203 +ENGINE_LOADLEVEL = $1A66 +ENGINE_LOADLEVEL_DRAWSCREEN = $4AAF +ENGINE_LOADLEVEL_SETINITIALPOSITIONS = $4B1C +ENGINE_LOADLEVELHEADER = $4C9B +ENGINE_LOADLEVELLAYOUT = $4A67 +ENGINE_LOADLEVELLAYOUT_COPYBYTE = $4AA6 +ENGINE_LOADLEVELPALETTE = $6CF9 +ENGINE_LOADLEVELTILES = $6C94 +ENGINE_LOADMAPPINGS = $120B +ENGINE_LOADMAPPINGS32_COLUMN = $4FB6 +ENGINE_LOADMAPPINGS32_ROW = $5094 +ENGINE_LOADPLAYERTILES = $0D31 +ENGINE_LOADPLAYERTILES_COPYTILES = $0D76 +ENGINE_LOCKCAMERA = $413D +ENGINE_MAPPINGS_GETBLOCKXY = $41FE +ENGINE_MONITORCLLSNTYPE = $D39D +ENGINE_MOVEOBJECTTOPLAYER = $59B9 +ENGINE_MULTIPLY_8_BY_8U = $14D3 +ENGINE_NMI = $0066 +ENGINE_OBJCHARCODEPTR = $D110 +ENGINE_OBJECTSLOTS = $D500 +ENGINE_PAUSEHANDLER = $05B7 +ENGINE_POWERUPTIMER = $D4A0 +ENGINE_RELEASECAMERA = $4137 +ENGINE_REMOVEBREAKABLEBLOCK = $5D57 +ENGINE_RESET = $0426 +ENGINE_RESETINTERRUPTFLAG = $0DDA +ENGINE_RINGANIMFRAME = $D351 +ENGINE_RINGART_DEST = $D397 +ENGINE_RINGART_SRC = $D395 +ENGINE_SETCAMERAANDLOCK = $4149 +ENGINE_SETMAXIMUMCAMERAX = $4177 +ENGINE_SETMINIMUMCAMERAX = $4167 +ENGINE_SETOBJECTVERTICALSPEED = $5A50 +ENGINE_SETSTATUSICONPOSITIONS = $1AFB +ENGINE_SETUNDERWATER = $4111 +ENGINE_SWAPFRAME2 = $0DBB +ENGINE_TIMER_INCREMENT = $195F +ENGINE_TIMER_SETSPRITES = $198E +ENGINE_TOGGLESPRITEVISIBLE = $11A9 +ENGINE_UPDATEALLOBJECTS = $5665 +ENGINE_UPDATECAMERAPOS = $4117 +ENGINE_UPDATECAMERAXPOS = $4187 +ENGINE_UPDATECAMERAXPOS_LIMIT = $41AB +ENGINE_UPDATECAMERAYPOS = $41B2 +ENGINE_UPDATECAMERAYPOS_LIMIT = $41DA +ENGINE_UPDATECYCLINGPALETTES = $7341 +ENGINE_UPDATELEVELSTATE = $08EA +ENGINE_UPDATEMAPPINGBLOCK = $1288 +ENGINE_UPDATEOBJECT = $57A0 +ENGINE_UPDATEOBJECT_ANIMATION = $5801 +ENGINE_UPDATEOBJECT_GETLOGICPTR = $57BC +ENGINE_UPDATEOBJECT_PROCESSLOGIC = $57DC +ENGINE_UPDATEOBJECT_STATE = $57B6 +ENGINE_UPDATEOBJECTHPOS = $111C +ENGINE_UPDATEOBJECTPOSITION = $5F27 +ENGINE_UPDATEOBJECTVPOS = $10C8 +ENGINE_UPDATEPLAYEROBJECT = $5795 +ENGINE_UPDATEPLAYEROBJECTSTATE = $27AC +ENGINE_UPDATERINGCOUNTERSPRITES = $1E76 +ENGINE_UPDATESHZ2WIND = $607C +ENGINE_UPDATESPRITEATTRIBS = $1067 +ENGINE_UPDATESPRITEATTRIBS_ADJ_POS = $D393 +ENGINE_UPDATESPRITEATTRIBS_HPOS_PTR = $D36B +ENGINE_UPDATESPRITEATTRIBS_NOCLEAR = $11BD +ENGINE_UPDATESPRITEATTRIBS_VPOS_PTR = $D369 +ENGINE_UPDATESPRITEATTRIBSART = $0D93 +ENGINE_UPDATEUNDERWATERFLAG = $40FE +ENGINE_WAITFORINTERRUPT = $0598 +ENGINE_WATERLEVEL_DONOTHING = $4050 +ENGINE_WATERLEVEL_INCAIRTIMER = $4032 +ENGINE_WATERLEVEL_SPAWNBUBBLE = $4051 +ENGINE_WATERLEVEL_SPAWNCOUNTOBJ = $4049 +EVALGAMEPTR = $D0DFFC +EVALUATEGAME = $065D +EXITGAME = $D2790B +EXITGAMEEND = $D2795D +FGPALETTECONTROL = $D4E8 +FGPALETTEINDEX = $D4E9 +FLAGPOINTER = $D345 +FRAME1PAGE = $D12A +FRAME2PAGE = $D12B +FRAMECOUNTER = $D12F +GAMEOVERSCREEN_DRAWSCREEN = $203F +GAMEOVERSCREEN_LOADTILES = $6DC9 +GAMESTATE_CHECKCONTINUE = $06BC +GAMESTATE_DOCONTINUE = $06A1 +GAMESTATE_ENDSEQUENCE = $0602 +GAMESTATE_GAMEOVER = $0664 +GAMESTATE_KILLPLAYER = $083D +GAMESTATE_NEXTACT = $0738 +GAMESTATE_NEXTZONE = $07AE +GAMESTATE_TITLECARD = $088D +GETDATAPTR = $D278F4 +GETTILECOORDINATES = $D27C12 +GETTILEFLAGS = $D27C2C +GETTILEPOINTER = $D27BE8 +GLOBALTRIGGERS = $D293 +GT_0 = $0001 +GT_1 = $0002 +GT_BIT_0 = $0000 +GT_BIT_1 = $0001 +GT_END_SEQUENCE = $0080 +GT_END_SEQUENCE_BIT = $0007 +GT_GAMEOVER = $0040 +GT_GAMEOVER_BIT = $0006 +GT_KILL_PLAYER = $0008 +GT_KILL_PLAYER_BIT = $0003 +GT_NEXT_ACT = $0020 +GT_NEXT_ACT_BIT = $0005 +GT_NEXT_LEVEL = $0010 +GT_NEXT_LEVEL_BIT = $0004 +GT_TITLECARD = $0004 +GT_TITLECARD_BIT = $0002 +HASEMERALDTRG = $D2C6 +HOLDTIME = $D46A +IDLETIMER = $D3B4 +INCREMENTRINGCOUNTER = $1E63 +KBD0 = $0001 +KBD1 = $0002 +KBD2 = $0002 +KBD2ND = $0020 +KBD3 = $0002 +KBD4 = $0004 +KBD5 = $0004 +KBD6 = $0004 +KBD7 = $0008 +KBD8 = $0008 +KBD9 = $0008 +KBDADD = $0002 +KBDALPHA = $0080 +KBDAPPS = $0040 +KBDCLEAR = $0040 +KBDCOMMA = $0010 +KBDCOS = $0020 +KBDCS = $0001 +KBDDECPNT = $0001 +KBDDEL = $0080 +KBDDIV = $0010 +KBDDOWN = $0001 +KBDENTER = $0001 +KBDG1 = $F50012 +KBDG2 = $F50014 +KBDG3 = $F50016 +KBDG4 = $F50018 +KBDG5 = $F5001A +KBDG6 = $F5001C +KBDG7 = $F5001E +KBDGRAPH = $0001 +KBDGRAPHVAR = $0080 +KBDLEFT = $0002 +KBDLN = $0004 +KBDLOG = $0008 +KBDLPAREN = $0010 +KBDMAT = $0040 +KBDMODE = $0040 +KBDMUL = $0008 +KBDPGRM = $0040 +KBDPOWER = $0020 +KBDRECIP = $0020 +KBDRIGHT = $0004 +KBDRPAREN = $0010 +KBDSIN = $0020 +KBDSQUARE = $0010 +KBDSTAT = $0080 +KBDSTORE = $0002 +KBDSUB = $0004 +KBDTAN = $0020 +KBDTRACE = $0002 +KBDUP = $0008 +KBDVARS = $0040 +KBDWINDOW = $0008 +KBDY = $0010 +KBDZOOM = $0004 +KBIT0 = $0000 +KBIT1 = $0001 +KBIT2 = $0001 +KBIT2ND = $0005 +KBIT3 = $0001 +KBIT4 = $0002 +KBIT5 = $0002 +KBIT6 = $0002 +KBIT7 = $0003 +KBIT8 = $0003 +KBIT9 = $0003 +KBITADD = $0001 +KBITALPHA = $0007 +KBITAPPS = $0006 +KBITCLEAR = $0006 +KBITCOMMA = $0004 +KBITCOS = $0005 +KBITCS = $0000 +KBITDECPNT = $0000 +KBITDEL = $0007 +KBITDIV = $0004 +KBITDOWN = $0000 +KBITENTER = $0000 +KBITGRAPH = $0000 +KBITGRAPHVAR = $0007 +KBITLEFT = $0001 +KBITLN = $0002 +KBITLOG = $0003 +KBITLPAREN = $0004 +KBITMATH = $0006 +KBITMODE = $0006 +KBITMUL = $0003 +KBITPGRM = $0006 +KBITPOWER = $0005 +KBITRECIP = $0005 +KBITRIGHT = $0002 +KBITRPAREN = $0004 +KBITSIN = $0005 +KBITSQUARE = $0004 +KBITSTAT = $0007 +KBITSTORE = $0001 +KBITSUB = $0002 +KBITTAN = $0005 +KBITTRACE = $0001 +KBITUP = $0003 +KBITVARS = $0006 +KBITWINDOW = $0003 +KBITY = $0004 +KBITZOOM = $0002 +LABEL_107C = $0D29 +LABEL_1084 = $0D31 +LABEL_129C = $0DBB +LABEL_12C8 = $0DDF +LABEL_13D2 = $0F92 +LABEL_19D7 = $1256 +LABEL_1A13 = $1292 +LABEL_1BF7 = $14ED +LABEL_1CC4 = $1576 +LABEL_1CCA = $157C +LABEL_1CD0 = $1582 +LABEL_1D05 = $15B7 +LABEL_1D34 = $15E6 +LABEL_1D4F = $1601 +LABEL_1D60 = $1612 +LABEL_1D6F = $1621 +LABEL_1D7F = $1631 +LABEL_1DAF = $165F +LABEL_200 = $0200 +LABEL_20FB = $19B7 +LABEL_2416 = $1CCA +LABEL_242F_49 = $1CDF +LABEL_2439_50 = $1CE8 +LABEL_243C = $1CEB +LABEL_2459_51 = $1D03 +LABEL_247B = $1D24 +LABEL_24BE_48 = $1D67 +LABEL_2530 = $1DD7 +LABEL_2576 = $1E1D +LABEL_259C = $1E3E +LABEL_25C3 = $1E63 +LABEL_2606 = $1EA1 +LABEL_264E = $1ED8 +LABEL_2849 = $20D0 +LABEL_2FCB = $27CF +LABEL_3011 = $2806 +LABEL_3032 = $282A +LABEL_3054 = $284C +LABEL_305F = $285A +LABEL_3072 = $287F +LABEL_307F = $288C +LABEL_3092 = $289A +LABEL_30A5 = $28A8 +LABEL_30C7 = $28DA +LABEL_30D8 = $28EB +LABEL_30FD = $290B +LABEL_3138 = $2927 +LABEL_3176 = $2960 +LABEL_318F = $2979 +LABEL_31BF = $29A9 +LABEL_31F8 = $29E2 +LABEL_3222 = $2A0C +LABEL_3245 = $2A2F +LABEL_3267 = $2A51 +LABEL_3385 = $2B97 +LABEL_33A8 = $2BBA +LABEL_33B7 = $2BC9 +LABEL_33EA = $2BFB +LABEL_3467 = $2C78 +LABEL_3484 = $2C90 +LABEL_348F = $2C9B +LABEL_34A4 = $2CB0 +LABEL_34A9 = $2CB5 +LABEL_34DA = $2CE6 +LABEL_34E1 = $2CED +LABEL_359B = $2DAA +LABEL_3638 = $2E47 +LABEL_365C = $2E6B +LABEL_3676 = $2E85 +LABEL_3681 = $2E90 +LABEL_36B2 = $2EC1 +LABEL_36E1 = $2EEE +LABEL_3702 = $2F0F +LABEL_3703 = $2F10 +LABEL_3725 = $2F30 +LABEL_375F = $2F6A +LABEL_376E = $2F79 +LABEL_3796 = $2FA0 +LABEL_384E = $3052 +LABEL_3A62 = $3276 +LABEL_3ACA = $32E4 +LABEL_4024 = $3806 +LABEL_4037 = $3819 +LABEL_4044 = $3826 +LABEL_404F = $3831 +LABEL_4064 = $3846 +LABEL_4079 = $385B +LABEL_408E = $3870 +LABEL_40B2 = $3892 +LABEL_40D6 = $38B5 +LABEL_40E0 = $38BF +LABEL_40F0 = $38CF +LABEL_4109 = $38E8 +LABEL_4135 = $3916 +LABEL_4137 = $3918 +LABEL_415A = $393A +LABEL_415F = $393F +LABEL_4199 = $3979 +LABEL_41A6 = $3986 +LABEL_41DD = $39BD +LABEL_41EA = $39CA +LABEL_4204 = $39E4 +LABEL_4226 = $3A06 +LABEL_424A = $3A2B +LABEL_42B7 = $3A97 +LABEL_42E8 = $3AC7 +LABEL_4310 = $3AF1 +LABEL_4352 = $3B33 +LABEL_437A = $3B5E +LABEL_438A = $3B6E +LABEL_43AF = $3B92 +LABEL_43BF = $3BA1 +LABEL_43C5 = $3BA7 +LABEL_43F3 = $3BD5 +LABEL_43F9 = $3BDB +LABEL_4408 = $3BE5 +LABEL_440E = $3BE5 +LABEL_4414 = $3BEB +LABEL_441A = $3BE5 +LABEL_4420 = $3BF1 +LABEL_4440 = $3C10 +LABEL_4446 = $3C16 +LABEL_4459 = $3C10 +LABEL_445F = $3C29 +LABEL_4476 = $3C40 +LABEL_447C = $3C46 +LABEL_4482 = $3C4C +LABEL_44A2 = $3C6B +LABEL_44A8 = $3C71 +LABEL_44BB = $3C95 +LABEL_44C1 = $3C84 +LABEL_44D8 = $3C7E +LABEL_44DE = $3C9B +LABEL_44E4 = $3CA1 +LABEL_4504 = $3C9B +LABEL_450A = $3CC0 +LABEL_451D = $3C9B +LABEL_4523 = $3CD3 +LABEL_453A = $3CBA +LABEL_4540 = $3CEA +LABEL_4546 = $3CF0 +LABEL_4566 = $3D33 +LABEL_456C = $3D0F +LABEL_457F = $3D33 +LABEL_4585 = $3D22 +LABEL_459C = $3D39 +LABEL_45A2 = $3D3F +LABEL_45A8 = $3D45 +LABEL_45BA = $3D57 +LABEL_45C6 = $3D63 +LABEL_45D8 = $3D75 +LABEL_45E4 = $3D81 +LABEL_45F6 = $3D93 +LABEL_4602 = $3D9F +LABEL_4614 = $3DB1 +LABEL_4620 = $3DBD +LABEL_4623 = $3DC0 +LABEL_4629 = $3DC6 +LABEL_462F = $3DCC +LABEL_4637 = $3DD4 +LABEL_4640 = $3DDD +LABEL_464B = $3DE8 +LABEL_464D = $3DEA +LABEL_465D = $3DFA +LABEL_466D = $3E0A +LABEL_467D = $3E1A +LABEL_468D = $3E2A +LABEL_469D = $3E3A +LABEL_46BB = $3E58 +LABEL_46C0 = $3E5D +LABEL_46EA = $3E87 +LABEL_472 = $0457 +LABEL_4727 = $3EC4 +LABEL_475F = $3EFC +LABEL_4764 = $3F01 +LABEL_47C9 = $3F66 +LABEL_483B = $3FE2 +LABEL_4845 = $3FEC +LABEL_4884 = $4021 +LABEL_4887 = $4024 +LABEL_48C4 = $405D +LABEL_48D4 = $406D +LABEL_48D5 = $406E +LABEL_48F0 = $4089 +LABEL_4917 = $40B0 +LABEL_4926 = $40BD +LABEL_4935 = $40CA +LABEL_4944 = $40D7 +LABEL_4951 = $40E4 +LABEL_4960 = $40F1 +LABEL_498A = $4117 +LABEL_49CF = $415C +LABEL_59E_218 = $05A3 +LABEL_5D93 = $5512 +LABEL_5E24 = $55A4 +LABEL_5E42 = $55C3 +LABEL_5E62 = $55E3 +LABEL_5EA1 = $5622 +LABEL_5EE4 = $5665 +LABEL_5EFD = $567C +LABEL_5F29 = $56A6 +LABEL_5F3D = $56B9 +LABEL_5F73 = $56CC +LABEL_60E9 = $583E +LABEL_611D = $5872 +LABEL_6127 = $587C +LABEL_6131 = $5886 +LABEL_6139 = $588E +LABEL_615C = $58AF +LABEL_617C = $58CF +LABEL_61C2 = $5915 +LABEL_61FA = $594D +LABEL_620F = $595C +LABEL_6212 = $5965 +LABEL_623F = $5992 +LABEL_62A7 = $59F9 +LABEL_62FD = $5A4F +LABEL_6311 = $5A63 +LABEL_6313 = $5A65 +LABEL_631A = $5A6C +LABEL_6344 = $5A96 +LABEL_634C = $5A9E +LABEL_6355 = $5AA7 +LABEL_635B = $5AAD +LABEL_636B = $5ABD +LABEL_63A9 = $5AF6 +LABEL_63C0 = $5B0C +LABEL_63E5 = $5B2B +LABEL_6424 = $5B6A +LABEL_6425 = $5B6B +LABEL_643C = $5B82 +LABEL_6454 = $5B9A +LABEL_6483 = $5BC9 +LABEL_64B1 = $5BF7 +LABEL_64D4 = $5C1A +LABEL_6544 = $5C8A +LABEL_656B = $5CB1 +LABEL_6576 = $5CBC +LABEL_66FB = $5E3A +LABEL_670F = $5E4E +LABEL_677C = $5EBB +LABEL_6791 = $5ED0 +LABEL_67B1 = $5EF0 +LABEL_6938 = $605E +LABEL_6956 = $607C +LABEL_697D = $60A3 +LABEL_698F = $60B5 +LABEL_69F5 = $6119 +LABEL_6A25 = $6144 +LABEL_6A7E = $619B +LABEL_6ACD = $61E6 +LABEL_6B17 = $622F +LABEL_6B47 = $625F +LABEL_6B61 = $6279 +LABEL_6B85 = $629D +LABEL_6B95 = $62AD +LABEL_6B96 = $62AE +LABEL_6B9B = $62B3 +LABEL_6BA7 = $62BF +LABEL_6BF2 = $630A +LABEL_6C01 = $6319 +LABEL_6C21 = $6338 +LABEL_6C2D = $6344 +LABEL_6C3C = $6353 +LABEL_6C9C = $63B3 +LABEL_6C9D = $63B3 +LABEL_6CA0 = $63B3 +LABEL_6CA1 = $63B3 +LABEL_6CA2 = $63B4 +LABEL_6CAD = $63BF +LABEL_6CE2 = $63EF +LABEL_6CF7 = $6404 +LABEL_6D0D = $641A +LABEL_6D49 = $6454 +LABEL_6D52 = $645D +LABEL_6D81 = $6486 +LABEL_6DAA = $64AE +LABEL_6DCC = $64D2 +LABEL_6DD5 = $64D9 +LABEL_6DED = $64F1 +LABEL_6E10 = $650F +LABEL_6E30 = $652A +LABEL_6E56 = $6550 +LABEL_6E8B = $6585 +LABEL_6EB1 = $65AB +LABEL_6F3 = $0621 +LABEL_6F82 = $666A +LABEL_6FCE = $66B5 +LABEL_708D = $675F +LABEL_7172 = $6842 +LABEL_7314 = $69E0 +LABEL_7378 = $6A3E +LABEL_75C5 = $6C53 +LABEL_7614 = $6C6A +LABEL_761E = $6C74 +LABEL_7881 = $6ECE +LABEL_7F46 = $758A +LABEL_7F74 = $75B8 +LABEL_7F7E = $75C2 +LABEL_8003A = $8007 +LABEL_80049 = $8011 +LABEL_80066 = $801C +LABEL_8007E = $8025 +LABEL_80096 = $802F +LABEL_800A9 = $8039 +LABEL_800E5 = $8052 +LABEL_800F2 = $805F +LABEL_80114 = $807C +LABEL_8011E = $8086 +LABEL_80129 = $8091 +LABEL_80131 = $8099 +LABEL_8013E = $80A1 +LABEL_8013F = $80A2 +LABEL_80154 = $80B7 +LABEL_8015A = $80BD +LABEL_8015B = $80BE +LABEL_80167 = $80CA +LABEL_80170 = $80D3 +LABEL_80181 = $80DA +LABEL_80194 = $80E3 +LABEL_801A7 = $80EC +LABEL_801B3 = $80F8 +LABEL_801BA = $80FF +LABEL_801C1 = $8106 +LABEL_801C4 = $8109 +LABEL_80201 = $8145 +LABEL_80222 = $816F +LABEL_80225 = $8172 +LABEL_8022A = $8177 +LABEL_8024A = $81A8 +LABEL_80258 = $81B4 +LABEL_80262 = $81BE +LABEL_80280 = $81E1 +LABEL_8028F = $81F0 +LABEL_8029E = $81FE +LABEL_802A1 = $8206 +LABEL_802AB = $8210 +LABEL_802B5 = $821A +LABEL_802C1 = $8226 +LABEL_802C3 = $8228 +LABEL_802CD = $8232 +LABEL_802CE = $8233 +LABEL_802D0 = $824A +LABEL_802D4 = $8253 +LABEL_802EF = $827A +LABEL_80303 = $828E +LABEL_80304 = $828F +LABEL_80325 = $82AE +LABEL_80348 = $82B2 +LABEL_8040D = $8346 +LABEL_81D = $0735 +LABEL_8A4 = $07B7 +LABEL_91B = $082C +LABEL_9C4 = $08CF +LABEL_A13 = $0918 +LABEL_A27 = $0927 +LABEL_A2C = $094A +LABEL_F41 = $0BF4 +LABEL_FB9 = $0C6B +LANGUAGE = $0001 +LASTBANKNUMBER = $001F +LASTLEVEL = $0007 +LASTTILEMAPTRIG = $D4C2 +LCDBPP8 = $0027 +LCDHEIGHT = $00F0 +LCDNORMALMODE = $092D +LCDWIDTH = $0140 +LEVEL_ALZ = $0002 +LEVEL_CEZ = $0006 +LEVEL_END = $0007 +LEVEL_GHZ = $0003 +LEVEL_GMZ = $0004 +LEVEL_INTRO = $0009 +LEVEL_SEZ = $0005 +LEVEL_SHZ = $0001 +LEVEL_UGZ = $0000 +LEVELATTRIBUTES = $D15E +LEVELATTRIBUTES.DATAOFFSET = $D16E +LEVELATTRIBUTES.IX01 = $D15F +LEVELATTRIBUTES.LAYOUTBANK = $D163 +LEVELATTRIBUTES.LAYOUTPTR = $D166 +LEVELATTRIBUTES.METATILEBANK = $D162 +LEVELATTRIBUTES.METATILEPTR = $D164 +LEVELATTRIBUTES.METATILEX = $D160 +LEVELATTRIBUTES.METATILEY = $D161 +LEVELATTRIBUTES.STRIDETABLE = $D168 +LEVELATTRIBUTES.VIEWPORTFLAGS = $D15E +LEVELATTRIBUTES.WIDTH = $D16C +LEVELATTRIBUTES.WIDTHNEG = $D16A +LEVELDATASTART = $C001 +LEVELDEMOHEADERS = $1DB7 +LEVELDESCRIPTOR.DATAOFFSET = $0010 +LEVELDESCRIPTOR.IX01 = $0001 +LEVELDESCRIPTOR.LAYOUTBANK = $0005 +LEVELDESCRIPTOR.LAYOUTPTR = $0008 +LEVELDESCRIPTOR.METATILEBANK = $0004 +LEVELDESCRIPTOR.METATILEPTR = $0006 +LEVELDESCRIPTOR.METATILEX = $0002 +LEVELDESCRIPTOR.METATILEY = $0003 +LEVELDESCRIPTOR.STRIDETABLE = $000A +LEVELDESCRIPTOR.VIEWPORTFLAGS = $0000 +LEVELDESCRIPTOR.WIDTH = $000E +LEVELDESCRIPTOR.WIDTHNEG = $000C +LEVELHEADER_5803 = $4F5E +LEVELHEADER_5819 = $4F74 +LEVELHEADER_ALZ1 = $4E14 +LEVELHEADER_ALZ2 = $4E2A +LEVELHEADER_ALZ3 = $4E40 +LEVELHEADER_CEZ1 = $4F1C +LEVELHEADER_CEZ2 = $4F32 +LEVELHEADER_CEZ3 = $4F48 +LEVELHEADER_GHZ1 = $4D90 +LEVELHEADER_GHZ2 = $4DA6 +LEVELHEADER_GHZ3 = $4DBC +LEVELHEADER_GMZ1 = $4E98 +LEVELHEADER_GMZ2 = $4EAE +LEVELHEADER_GMZ3 = $4EC4 +LEVELHEADER_INTRO = $4F8A +LEVELHEADER_SEZ1 = $4EDA +LEVELHEADER_SEZ2 = $4EF0 +LEVELHEADER_SEZ3 = $4F06 +LEVELHEADER_SHZ1 = $4DD2 +LEVELHEADER_SHZ2 = $4DE8 +LEVELHEADER_SHZ3 = $4DFE +LEVELHEADER_TITLE = $4FA0 +LEVELHEADER_UGZ1 = $4E56 +LEVELHEADER_UGZ2 = $4E6C +LEVELHEADER_UGZ3 = $4E82 +LEVELHEADERS = $4D40 +LEVELHEADERS_ALZ = $4D60 +LEVELHEADERS_CEZ = $4D78 +LEVELHEADERS_GHZ = $4D66 +LEVELHEADERS_GMZ = $4D6C +LEVELHEADERS_INTRO_TITLE = $4D8A +LEVELHEADERS_SEZ = $4D72 +LEVELHEADERS_SHZ = $4D5A +LEVELHEADERS_UGZ = $4D54 +LEVELHEADERS_UNK1 = $4D7E +LEVELHEADERS_UNK2 = $4D84 +LEVELLAYOUT = $C001 +LEVELLAYOUT_DATA_INITPOS = $4B5D +LEVELLAYOUT_DATA_INITPOS_ALZ = $4B7D +LEVELLAYOUT_DATA_INITPOS_ALZ1 = $4BDD +LEVELLAYOUT_DATA_INITPOS_ALZ2 = $4BE5 +LEVELLAYOUT_DATA_INITPOS_ALZ3 = $4BED +LEVELLAYOUT_DATA_INITPOS_CEZ = $4B95 +LEVELLAYOUT_DATA_INITPOS_CEZ1 = $4C3D +LEVELLAYOUT_DATA_INITPOS_CEZ2 = $4C45 +LEVELLAYOUT_DATA_INITPOS_CEZ3 = $4C4D +LEVELLAYOUT_DATA_INITPOS_GHZ = $4B83 +LEVELLAYOUT_DATA_INITPOS_GHZ1 = $4BF5 +LEVELLAYOUT_DATA_INITPOS_GHZ2 = $4BFD +LEVELLAYOUT_DATA_INITPOS_GHZ3 = $4C05 +LEVELLAYOUT_DATA_INITPOS_GMZ = $4B89 +LEVELLAYOUT_DATA_INITPOS_GMZ1 = $4C0D +LEVELLAYOUT_DATA_INITPOS_GMZ2 = $4C15 +LEVELLAYOUT_DATA_INITPOS_GMZ3 = $4C1D +LEVELLAYOUT_DATA_INITPOS_SEZ = $4B8F +LEVELLAYOUT_DATA_INITPOS_SEZ1 = $4C25 +LEVELLAYOUT_DATA_INITPOS_SEZ2 = $4C2D +LEVELLAYOUT_DATA_INITPOS_SEZ3 = $4C35 +LEVELLAYOUT_DATA_INITPOS_SHZ = $4B77 +LEVELLAYOUT_DATA_INITPOS_SHZ1 = $4BC5 +LEVELLAYOUT_DATA_INITPOS_SHZ2 = $4BCD +LEVELLAYOUT_DATA_INITPOS_SHZ3 = $4BD5 +LEVELLAYOUT_DATA_INITPOS_UGZ = $4B71 +LEVELLAYOUT_DATA_INITPOS_UGZ1 = $4BAD +LEVELLAYOUT_DATA_INITPOS_UGZ2 = $4BB5 +LEVELLAYOUT_DATA_INITPOS_UGZ3 = $4BBD +LEVELPALETTEVALUES = $7305 +LEVELSELECT_DRAWENTRIES = $0988 +LEVELSELECT_ENTRY1 = $0ACF +LEVELSELECT_ENTRY10 = $0B17 +LEVELSELECT_ENTRY13 = $0B2F +LEVELSELECT_ENTRY16 = $0B47 +LEVELSELECT_ENTRY19 = $0B5F +LEVELSELECT_ENTRY4 = $0AE7 +LEVELSELECT_ENTRY7 = $0AFF +LEVELSELECT_FINISHSETUP = $09D1 +LEVELSELECT_LOADFONT = $6D23 +LEVELSELECT_MAINLOOP = $0A2C +LEVELSELECT_TEXTENTRIES = $096C +LEVELSELECT_TITLE = $0AB7 +LEVELSELECT_VALUES = $0A02 +LEVELSELECT_VRAMENTRIES = $097A +LEVELSELECTCHECK = $047C +LEVELSELECTMENU = $094A +LEVELSELECTTRG = $D12C +LEVELTILESETS = $7053 +LEVELTIMER = $D2B9 +LEVELTIMERTABLE = $DC00 +LEVELTIMERTRIGGER = $D2B8 +LIFECOUNTER = $D298 +LIVESONENTRY = $D297 +LOADBANKFROMRAM = $78A9 +LOADCOMPRESSEDTILE = $13C1 +LOADSHCSCREEN = $7637 +LOADTILES = $134C +LOADUNCOMPRESSEDTILE = $13B2 +LOGIC_CHANGEDIRECTIONTOWARDSOBJECT = $5CDC +LOGIC_CHANGEDIRECTIONTOWARDSPLAYER = $5CD8 +LOGIC_CHECKDESTROYOBJECT = $59CE +LOGIC_CMD_CALL = $5DF3 +LOGIC_CMD_DEALLOCATE = $5DF0 +LOGIC_CMD_DONOTHING = $5E09 +LOGIC_CMD_PLAYSOUND = $5F04 +LOGIC_CMD_PROCESSLOGIC = $5DEA +LOGIC_CMD_RESTARTSEQUENCE = $5DED +LOGIC_CMD_SETSPEED = $5E0A +LOGIC_COMMANDVTABLE = $5DCA +LOGIC_MOVEHORIZONTALTOWARDSOBJECT = $5CF8 +LOGIC_MOVEHORIZONTALTOWARDSPLAYERAT0400 = $5CF2 +LOGIC_MOVEVERTICALTOWARDSOBJECT = $5D2E +LOGIC_POINTERS = $56D7 +LOGIC_PROCESSCOMMAND = $5DB4 +LOGIC_SETOBJECTFACINGLEFT = $5F19 +LOGIC_SETOBJECTFACINGRIGHT = $5F14 +LOGIC_TOGGLEOBJECTDIRECTION = $5F1E +LOGIC_UPDATEOBJECTDIRECTIONFLAG = $5CC1 +LVP_CAMERA_LOCKED = $0007 +LVP_CAMERA_UPDATE_RQD = $0006 +LVP_COL_UPDATE_PENDING = $0005 +LVP_ROW_UPDATE_PENDING = $0004 +LVP_SCROLL_DOWN = $0001 +LVP_SCROLL_LEFT = $0002 +LVP_SCROLL_RIGHT = $0003 +LVP_SCROLL_UP = $0000 +MINECART_LOOKINGAHEAD = $3F42 +MINECART_LOOKINGDOWN = $3F5A +MINECART_LOOKINGUP = $3F4E +MINECART_SETSPRITE = $3F22 +MINECART_UPDATEANIMATION = $3F21 +MONITOR_ART_POINTERS = $7041 +MONITORTYPE_NONE0 = $0000 +MONITORTYPE_NONE1 = $0001 +MONITORTYPE_RINGS = $0002 +MOV9TOOP1 = $20320 +MPLCDCTRL = $E30018 +MPLCDICR = $E30028 +MPLCDIMSC = $E3001C +MPLCDPALETTE = $E30200 +MPLCDRIS = $E30020 +MPLCDTIMING1 = $E30004 +MULTTABLE_104 = $43A7 +MULTTABLE_120 = $4347 +MULTTABLE_128 = $42E7 +MULTTABLE_16 = $4A27 +MULTTABLE_168 = $42A7 +MULTTABLE_24 = $48C7 +MULTTABLE_256 = $4247 +MULTTABLE_32 = $47A7 +MULTTABLE_40 = $46C7 +MULTTABLE_56 = $4627 +MULTTABLE_64 = $4587 +MULTTABLE_72 = $4507 +MULTTABLE_80 = $4487 +MULTTABLE_96 = $4407 +NEXTCONTROLBYTE = $D2D9 +OBJ_COL_BOTTOM = $0001 +OBJ_COL_LEFT = $0003 +OBJ_COL_RIGHT = $0002 +OBJ_COL_TOP = $0000 +OBJ_F23_BIT0 = $0000 +OBJ_F3_BIT1 = $0001 +OBJ_F3_BIT2 = $0002 +OBJ_F3_BIT3 = $0003 +OBJ_F3_BIT4 = $0004 +OBJ_F3_BIT5 = $0005 +OBJ_F3_BIT6 = $0006 +OBJ_F3_BIT7 = $0007 +OBJ_F3_IN_AIR = $0000 +OBJ_F4_BIT0 = $0000 +OBJ_F4_BIT1 = $0001 +OBJ_F4_BIT2 = $0002 +OBJ_F4_BIT3 = $0003 +OBJ_F4_BIT6 = $0006 +OBJ_F4_FACING_LEFT = $0004 +OBJ_F4_FLASHING = $0005 +OBJ_F4_VISIBLE = $0007 +OBJECT.ACTVOBJIDX = $003E +OBJECT.ANIMFRAME = $0006 +OBJECT.BGCOLFLAGS = $0022 +OBJECT.COLLIDINGOBJ = $0020 +OBJECT.D530 = $0030 +OBJECT.D531 = $0031 +OBJECT.D533 = $0033 +OBJECT.D534 = $0034 +OBJECT.D535 = $0035 +OBJECT.D536 = $0036 +OBJECT.D537 = $0037 +OBJECT.D538 = $0038 +OBJECT.D539 = $0039 +OBJECT.FLAGS03 = $0003 +OBJECT.FLAGS04 = $0004 +OBJECT.FLASHCOUNTER = $002E +OBJECT.FRAMECOUNTER = $0007 +OBJECT.HEIGHT = $002D +OBJECT.INITIALX = $003A +OBJECT.INITIALY = $003C +OBJECT.IX0A = $000A +OBJECT.IX0B = $000B +OBJECT.IX1E = $001E +OBJECT.IX1F = $001F +OBJECT.IX23 = $0023 +OBJECT.IX24 = $0024 +OBJECT.IX25 = $0025 +OBJECT.IX26 = $0026 +OBJECT.IX27 = $0027 +OBJECT.IX3F = $003F +OBJECT.LEFTFACINGIDX = $0009 +OBJECT.LOGICPTR = $000C +OBJECT.LOGICSEQPTR = $000E +OBJECT.OBJID = $0000 +OBJECT.POWERUP = $0032 +OBJECT.RIGHTFACINGIDX = $0008 +OBJECT.SCREENX = $001A +OBJECT.SCREENY = $001C +OBJECT.SPRCOLFLAGS = $0021 +OBJECT.SPRITECOUNT = $0005 +OBJECT.SPRMAPPGPTR = $0028 +OBJECT.SPROFFSETS = $002A +OBJECT.STATE = $0001 +OBJECT.STATENEXT = $0002 +OBJECT.SUBPIXELX = $0010 +OBJECT.SUBPIXELY = $0013 +OBJECT.VELX = $0016 +OBJECT.VELY = $0018 +OBJECT.WIDTH = $002C +OBJECT.X = $0011 +OBJECT.Y = $0014 +OBJECT_AIRCOUNTDOWN = $0009 +OBJECT_ALZ3_BOSS = $004A +OBJECT_ALZ_BUBBLE = $000A +OBJECT_BLOCKFRAGMENT = $0004 +OBJECT_BLOCKFRAGMENT2 = $0007 +OBJECT_CHAOSEMERALD1 = $0011 +OBJECT_CHAOSEMERALD2 = $0012 +OBJECT_CHAOSEMERALD3 = $0013 +OBJECT_CHAOSEMERALD4 = $0014 +OBJECT_CRAB = $0023 +OBJECT_CRABPROJECTILE = $0024 +OBJECT_DROPPEDRING = $0008 +OBJECT_EXPLOSION = $000F +OBJECT_GLIDER = $0027 +OBJECT_INTROCLOUDS = $001D +OBJECT_INTROTREE = $001E +OBJECT_INVALID = $001F +OBJECT_INVINCIBILITYSTAR = $0005 +OBJECT_MINECART = $0029 +OBJECT_MONITOR = $0010 +OBJECT_MOTOBUG = $0034 +OBJECT_NEWTRON = $0035 +OBJECT_NEWTRON_FIREBALL = $003C +OBJECT_PRISONANIMALS = $0041 +OBJECT_PRISONCAPSULE = $0040 +OBJECT_RINGSPARKLE = $0002 +OBJECT_SHZ3_BOSS = $0048 +OBJECT_SHZ3_BOSS_FIREBALL = $0049 +OBJECT_SHZ3_EGGCAPSULE = $0047 +OBJECT_SHZ3_SMALLBIRD1 = $0036 +OBJECT_SHZ3_SMALLBIRD2 = $0046 +OBJECT_SIGNPOST = $0018 +OBJECT_SIGNPOST2 = $0015 +OBJECT_SIGNPOST3 = $0016 +OBJECT_SIGNPOST4 = $0017 +OBJECT_SONIC = $0001 +OBJECT_SPEEDSHOESSTAR = $0003 +OBJECT_UGZ_CANNONBALL = $004C +OBJECT_UGZ_PINCERS = $004D +OBJECT_UGZ_ROBOTNIK = $004B +OBJECT_UGZFIREBALL = $000E +OBJECT_WATERSPLASH = $000B +PALETTE_CALCULATEOFFSET = $775C +PALETTE_FADETOBLACK = $7705 +PALETTE_FADETOCOLOUR = $76A1 +PALETTE_RESET = $7691 +PALETTE_UPDATE = $764F +PALETTE_UPDATECOLOURS = $7681 +PALETTE_UPDATETRIG = $D4EA +PALETTEFADEOUT = $0DDF +PALETTEFADETIME = $D2C8 +PALETTERESETTRG = $D131 +PALETTES = $F680 +PATTERNLOADCUE = $D3AB +PAUSEHANDLER_TRIG = $05D7 +PIXELSHADOW = $D031F6 +PLAYER = $D500 +PLAYER.ACTVOBJIDX = $D53E +PLAYER.ANIMFRAME = $D506 +PLAYER.BGCOLFLAGS = $D522 +PLAYER.COLLIDINGOBJ = $D520 +PLAYER.D530 = $D530 +PLAYER.D531 = $D531 +PLAYER.D533 = $D533 +PLAYER.D534 = $D534 +PLAYER.D535 = $D535 +PLAYER.D536 = $D536 +PLAYER.D537 = $D537 +PLAYER.D538 = $D538 +PLAYER.D539 = $D539 +PLAYER.FLAGS03 = $D503 +PLAYER.FLAGS04 = $D504 +PLAYER.FLASHCOUNTER = $D52E +PLAYER.FRAMECOUNTER = $D507 +PLAYER.HEIGHT = $D52D +PLAYER.INITIALX = $D53A +PLAYER.INITIALY = $D53C +PLAYER.IX0A = $D50A +PLAYER.IX0B = $D50B +PLAYER.IX1E = $D51E +PLAYER.IX1F = $D51F +PLAYER.IX23 = $D523 +PLAYER.IX24 = $D524 +PLAYER.IX25 = $D525 +PLAYER.IX26 = $D526 +PLAYER.IX27 = $D527 +PLAYER.IX2F = $D52F +PLAYER.IX3F = $D53F +PLAYER.LEFTFACINGIDX = $D509 +PLAYER.LOGICPTR = $D50C +PLAYER.LOGICSEQPTR = $D50E +PLAYER.OBJID = $D500 +PLAYER.POWERUP = $D532 +PLAYER.RIGHTFACINGIDX = $D508 +PLAYER.SCREENX = $D51A +PLAYER.SCREENY = $D51C +PLAYER.SPRCOLFLAGS = $D521 +PLAYER.SPRITECOUNT = $D505 +PLAYER.SPRMAPPGPTR = $D528 +PLAYER.SPROFFSETS = $D52A +PLAYER.STATE = $D501 +PLAYER.STATENEXT = $D502 +PLAYER.SUBPIXELX = $D510 +PLAYER.SUBPIXELY = $D513 +PLAYER.VELX = $D516 +PLAYER.VELY = $D518 +PLAYER.WIDTH = $D52C +PLAYER.X = $D511 +PLAYER.Y = $D514 +PLAYER_AIRTIMERHI = $D469 +PLAYER_AIRTIMERLO = $D468 +PLAYER_ALZ_WATERBOUNCE = $6B08 +PLAYER_ANIM_CALCBALANCEFRAME = $3134 +PLAYER_ANIM_CALCBALANCEFRAME_USEINPUTFLAGS = $3192 +PLAYER_CALCACCEL = $33F9 +PLAYER_CALCACCEL_GETVALUE = $3448 +PLAYER_CALCACCEL_NOBTNPRESS = $34A5 +PLAYER_CALCACCEL_UNDERWATER = $347C +PLAYER_CALCGRAVITY = $3386 +PLAYER_CALCGRAVITY_UNDERWATER = $33B4 +PLAYER_CALCULATEBALANCE = $30BE +PLAYER_CALCULATEBALANCE_LEFT = $30E9 +PLAYER_CALCULATEBALANCE_NONE = $30FB +PLAYER_CALCULATEBALANCE_RIGHT = $30F2 +PLAYER_CALCULATELOOPFALLFRAME = $31AE +PLAYER_CALCULATELOOPFRAME = $31FB +PLAYER_CHANGEFRAMEDISPLAYTIME = $3100 +PLAYER_CHECKFINISHSKID = $2AD6 +PLAYER_CHECKHORIZONTALLEVELCOLLISION = $67D3 +PLAYER_CHECKHORIZONTALLEVELCOLLISION_LEFT = $6842 +PLAYER_CHECKSKID = $2B33 +PLAYER_CHECKTOPLEVELCOLLISION = $6986 +PLAYER_CLEARCOLLIDINGOBJECT = $30B9 +PLAYER_COLLIDEBREAKABLEBLOCK_UPDATEMAPPINGS = $68E3 +PLAYER_COLLIDEHORIZONTALWITHPIPEBLOCK = $6800 +PLAYER_COLLIDELEFTBREAKABLEBLOCK = $68BE +PLAYER_COLLIDELEFTSOLIDBLOCK = $6864 +PLAYER_COLLIDELEFTWITHSPIKEBLOCK = $6958 +PLAYER_COLLIDERIGHTBREAKABLEBLOCK = $6898 +PLAYER_COLLIDERIGHTWITHSOLIDBLOCK = $6809 +PLAYER_COLLIDERIGHTWITHSPIKEBLOCK = $6935 +PLAYER_COLLIDESPIKEBLOCK_PLAYERHURT = $6978 +PLAYER_COLLIDETOPSOLIDBLOCK = $69B2 +PLAYER_COLLIDETOPVERTICALSPRING = $69E7 +PLAYER_COLLIDETOPWITHSPIKEBLOCK = $69F0 +PLAYER_COLLIDEVERTICALWITHPIPEBLOCK = $6A35 +PLAYER_COLLIDEWITHRINGBLOCK = $6A60 +PLAYER_DELTAVX = $D36F +PLAYER_ENTERPIPE = $65B1 +PLAYER_ENTERPIPE_BOTTOM = $65D0 +PLAYER_ENTERPIPE_LEFT = $661F +PLAYER_ENTERPIPE_RETURN = $6669 +PLAYER_ENTERPIPE_RIGHT = $6646 +PLAYER_ENTERPIPE_TOP = $65F8 +PLAYER_FLASHCOUNTER = $D3A9 +PLAYER_FLASHOBJECT = $308C +PLAYER_HANDLEBALANCE = $29E2 +PLAYER_HANDLECROUCHED = $2A51 +PLAYER_HANDLEDIAGONALSPRING = $2C4F +PLAYER_HANDLEENDOFLEVEL = $2D09 +PLAYER_HANDLEENDOFLEVEL_EXITLEFT = $2D73 +PLAYER_HANDLEENDOFLEVEL_EXITRIGHT = $2D51 +PLAYER_HANDLEENDOFLEVEL_INCLEVEL = $2D37 +PLAYER_HANDLEFALLING = $2C67 +PLAYER_HANDLEIDLE = $2A0C +PLAYER_HANDLEJUMPING = $2BFB +PLAYER_HANDLELOOKUP = $2A2F +PLAYER_HANDLEROLLING = $2BBA +PLAYER_HANDLERUNNING = $2B4F +PLAYER_HANDLESKIDLEFT = $2B97 +PLAYER_HANDLESKIDRIGHT = $2B74 +PLAYER_HANDLESPINDASH = $2A6D +PLAYER_HANDLESTANDING = $29A9 +PLAYER_HANDLEVERTICALSPRING = $2C35 +PLAYER_HANDLEWALK = $2A91 +PLAYER_HURTTRIGGER = $D3A8 +PLAYER_KILLTRIGGER = $D49F +PLAYER_MAXVELX = $D36D +PLAYER_METATILEDELTAVX = $D371 +PLAYER_MINECART_HANDLE = $3F01 +PLAYER_NOP = $2F69 +PLAYER_PLAYHURTANIMATION = $2FEF +PLAYER_RAMPLAUNCH = $64F1 +PLAYER_ROLLINGCHECKSKID = $2AF6 +PLAYER_SETSTATE_CROUCH = $285A +PLAYER_SETSTATE_DEAD = $3029 +PLAYER_SETSTATE_DIAGONALSPRING = $290B +PLAYER_SETSTATE_FALLING = $2941 +PLAYER_SETSTATE_HORIZONTALSPRING = $2927 +PLAYER_SETSTATE_HURT = $2FBA +PLAYER_SETSTATE_JUMPFROMRAMP = $28DA +PLAYER_SETSTATE_JUMPING = $32AB +PLAYER_SETSTATE_LOOKUP = $284C +PLAYER_SETSTATE_MOVEBACK = $2E7E +PLAYER_SETSTATE_ROLL = $28A8 +PLAYER_SETSTATE_ROLL_SPINDASHRELEASE = $28C4 +PLAYER_SETSTATE_RUNNING = $287F +PLAYER_SETSTATE_SKIDLEFT = $289A +PLAYER_SETSTATE_SKIDRIGHT = $288C +PLAYER_SETSTATE_SPINDASH = $2870 +PLAYER_SETSTATE_STANDING = $2806 +PLAYER_SETSTATE_VERTICALSPRING = $28EB +PLAYER_SETSTATE_WALKING = $282A +PLAYER_UNDERWATERFLAG = $D467 +PLAYER_UPDATEPLAYER.VELY = $3368 +PLAYER_UPDATEPOSITIONX = $32FB +PLAYER_UPDATEPOSITIONX_SETZERO = $335E +PLAYER_UPDATEVPOS = $33D5 +PLAYEROBJ = $D500 +PLAYERSTATE_16 = $0010 +PLAYERSTATE_ALZ_BUBBLE = $0024 +PLAYERSTATE_ALZSLOPE = $001A +PLAYERSTATE_BALANCE = $0019 +PLAYERSTATE_CONTINUESCREEN = $002F +PLAYERSTATE_CROUCH = $0004 +PLAYERSTATE_DIAGONALSPRING = $001C +PLAYERSTATE_DROWNING = $0028 +PLAYERSTATE_ENDOFLEVEL = $0020 +PLAYERSTATE_ENDSEQ_INIT = $002A +PLAYERSTATE_ENDSEQUENCE = $002B +PLAYERSTATE_ENTERMINECART = $0016 +PLAYERSTATE_FALLFROMLOOP = $001D +PLAYERSTATE_FALLING = $000E +PLAYERSTATE_HANGGLIDER = $0013 +PLAYERSTATE_HANGGLIDERBACK = $0014 +PLAYERSTATE_HANGGLIDERFWD = $0015 +PLAYERSTATE_HURT = $001E +PLAYERSTATE_IDLE = $0002 +PLAYERSTATE_INMINECART = $0017 +PLAYERSTATE_INPIPE = $0021 +PLAYERSTATE_JUMPFROMRAMP = $001B +PLAYERSTATE_JUMPING = $000A +PLAYERSTATE_LOOKUP = $0003 +PLAYERSTATE_LOSTLIFE = $001F +PLAYERSTATE_ONLOOP = $000C +PLAYERSTATE_ROLLING = $0009 +PLAYERSTATE_RUNNING = $0006 +PLAYERSTATE_SHZ3_BOSS_FALL = $0026 +PLAYERSTATE_SKIDDINGLEFT = $0008 +PLAYERSTATE_SKIDDINGRIGHT = $0007 +PLAYERSTATE_SPINDASH = $0034 +PLAYERSTATE_STANDING = $0001 +PLAYERSTATE_UGZ_BOSS = $0023 +PLAYERSTATE_VERTICALSPRING = $000B +PLAYERSTATE_WALKING = $0005 +PLC_BANKNUMBER = $D3AC +PLC_BYTECOUNT = $D3AD +PLC_DESCRIPTOR = $D3B2 +PLC_ENDOFLEVELPATTERNS = $6F7C +PLC_EOL_ALZ_BOSS = $6FBB +PLC_EOL_GHZ_BOSS = $6FC8 +PLC_EOL_GMZ_BOSS = $6FA7 +PLC_EOL_PRISONCAPSULE = $6F92 +PLC_EOL_PRISONCAPSULEANIMALS = $6F99 +PLC_EOL_SEZ_BOSS = $6FD6 +PLC_EOL_SHZ_BOSS = $6FB4 +PLC_EOL_SIGNPOST = $6FA0 +PLC_EOL_UGZ_BOSS = $6FCF +PLC_EOL_UNKNOWN_2 = $6FE3 +PLC_EOL_UNKNOWN_3 = $6FE4 +PLC_SOURCEADDR = $D3AE +PLC_VRAMADDR = $D3B0 +PLOTSSCREEN = $D09466 +PORT_IOPORT1 = $00DC +PORT_VDPADDRESS = $00BF +PORT_VDPDATA = $00BE +PORT_VDPSTATUS = $00BF +PORTS_GG_START = $0000 +PORTS_IO1 = $00DC +PORTS_IO2 = $00DD +PORTS_IO_CONTROL = $003F +PORTS_VDP_CONTROL = $00BF +PORTS_VDP_DATA = $00BE +PORTS_VDP_HCOUNTER = $007F +PORTS_VDP_VCOUNTER = $007E +PUTBANKINSLOT2 = $7898 +RAMSTART = $D00000 +READINPUT = $12B4 +RENDEREDSCREENMAP = $D52C00 +RENDERSCREENMAP = $D27A6A +RENDERSCREENMAP_NULLSCROLL = $D27AB9 +RESTOREREGISTERS = $787D +RINGARTPOINTERS = $1B90 +RINGARTPOINTERS_ALZ = $1BB0 +RINGARTPOINTERS_ALZ1 = $1C16 +RINGARTPOINTERS_ALZ2 = $1C20 +RINGARTPOINTERS_ALZ3 = $1C2A +RINGARTPOINTERS_CEZ = $1BC8 +RINGARTPOINTERS_CEZ1 = $1C8E +RINGARTPOINTERS_CEZ2 = $1C98 +RINGARTPOINTERS_CEZ3 = $1CA2 +RINGARTPOINTERS_GHZ = $1BB6 +RINGARTPOINTERS_GHZ1 = $1BDA +RINGARTPOINTERS_GHZ2 = $1BE4 +RINGARTPOINTERS_GHZ3 = $1BEE +RINGARTPOINTERS_GMZ = $1BBC +RINGARTPOINTERS_GMZ1 = $1C52 +RINGARTPOINTERS_GMZ2 = $1C5C +RINGARTPOINTERS_GMZ3 = $1C66 +RINGARTPOINTERS_SEZ = $1BC2 +RINGARTPOINTERS_SEZ1 = $1C70 +RINGARTPOINTERS_SEZ2 = $1C7A +RINGARTPOINTERS_SEZ3 = $1C84 +RINGARTPOINTERS_SHZ = $1BAA +RINGARTPOINTERS_SHZ1 = $1BF8 +RINGARTPOINTERS_SHZ2 = $1C02 +RINGARTPOINTERS_SHZ3 = $1C0C +RINGARTPOINTERS_UGZ = $1BA4 +RINGARTPOINTERS_UGZ1 = $1C34 +RINGARTPOINTERS_UGZ2 = $1C3E +RINGARTPOINTERS_UGZ3 = $1C48 +RINGCOUNTER = $D299 +ROM_HEADER = $763F +ROMSTART = $D20000 +SAT = $D64B00 +SAVESP = $DE02 +SAVESSCREEN = $D0EA1F +SCORE = $D29C +SCORE_ADDBADNIKVALUE = $156A +SCORE_ADDBOSSVALUE = $1570 +SCORE_ADDVALUE = $1937 +SCORE_BADNIKVALUE = $172E +SCORE_BOSSVALUE = $1731 +SCORE_CALCULATEACTTIMESCORE = $17AC +SCORE_CALCULATEACTTIMESCORE_SEC = $17CC +SCORE_CONVERTBCDTOASCI = $16F5 +SCORECARD_LOADMAPPINGS = $6E02 +SCORECARD_MAPPINGS_BLANK = $16ED +SCORECARD_MAPPINGS_NUMBERS = $16C5 +SCORECARD_UPDATESCORE = $1508 +SCRAPMEM = $D02AD7 +SCREENMAP = $D64400 +SCROLLADJUSTVALUES = $05AF +SCROLLINGTEXT_UPDATESPRITES = $20E4 +SEGASP = $DE05 +SEGATILECACHE = $D031F6 +SEGATILEFLAGS = $D64C00 +SEGAVRAM = $D60C00 +SETCACHEDTILE_DRAWINGGAP = $D27BCF +SETCACHEDTILE_DRAWINGGAPY = $D27B91 +SETSCANLINESKIP = $D27D08 +SETSPRITECOORDS = $D27CD3 +SETSPRITEPTR = $D27CE7 +SETTILECACHEFLAGS = $14AA +SHCHEADER = $7A3D +SMS_PALETTE = $0E22 +SOURCEPOINTER = $D348 +SPECOBJ_HIDETIMERRINGS = $0006 +SPRITEDEF.BANKNUM = $0000 +SPRITEDEF.LINECOUNT = $0003 +SPRITEDEF.SOURCEADDRESS = $0001 +STOREBANKADDRESS = $D278E8 +STOREBANKPOINTERS = $D278B7 +STOREREGISTERS = $7861 +TEMPSP = $D0053F +TILECOUNT = $D342 +TILESET_ALZ = $71A9 +TILESET_CEZ = $7289 +TILESET_CEZ3 = $72C6 +TILESET_GHZ = $71E6 +TILESET_GMZ = $7214 +TILESET_INTRO = $72F0 +TILESET_SEZ = $7251 +TILESET_SHZ = $7167 +TILESET_UGZ = $7125 +TILESET_UNK1 = $72D6 +TILESETENTRY.BANKNUM = $0000 +TILESETENTRY.SOURCEADDRESS = $0003 +TILESETENTRY.VRAMADDRESS = $0001 +TILESETHEADER.BANKNUM = $0000 +TILESETHEADER.ENTRIES = $0005 +TILESETHEADER.SOURCEADDRESS = $0003 +TILESETHEADER.VRAMADDRESS = $0001 +TIME_1SECOND = $003C +TIME_2SECONDS = $0078 +TIME_3SECONDS = $00B4 +TITLECARD_LOADACTLOGOMAPPINGS = $1F11 +TITLECARD_LOADANDDRAW = $1EA1 +TITLECARD_LOADTEXT = $1ED8 +TITLECARD_LOADTILES = $6D38 +TITLECARD_LOADZONETEXT = $1F3B +TITLECARD_MAPPINGS = $20F4 +TITLECARD_PICTUREPOINTERS = $6DAD +TITLECARD_SCROLLACTLOGO = $1FAE +TITLECARD_SCROLLTEXTFROMLEFT = $1F6D +TITLESCREEN_CHANGEPRESSSTARTTEXT = $0D0E +UNK_01 = $D001 +UNK_02 = $D12D +UNK_03 = $D130 +UNK_04 = $D132 +UNK_05 = $D176 +UNK_06 = $D203 +UPDATECYCLINGPALETTE_CONVEYOR = $7461 +UPDATECYCLINGPALETTE_DONOTHING = $7387 +UPDATECYCLINGPALETTE_DONOTHING2 = $7396 +UPDATECYCLINGPALETTE_JUMPVECTORS = $7367 +UPDATECYCLINGPALETTE_LAVA = $73FD +UPDATECYCLINGPALETTE_LIGHTNING = $751C +UPDATECYCLINGPALETTE_LIGHTNING2 = $754C +UPDATECYCLINGPALETTE_ORB = $74ED +UPDATECYCLINGPALETTE_RAIN = $7397 +UPDATECYCLINGPALETTE_SCROLLINGTEXT = $7569 +UPDATECYCLINGPALETTE_SHZ_LIGHTNING = $73C9 +UPDATECYCLINGPALETTE_UNKNOWN2 = $7493 +UPDATECYCLINGPALETTE_WALLLIGHTING = $74C2 +UPDATECYCLINGPALETTE_WATER = $742F +UPDATECYCLINGPALETTEBANK = $7357 +UPDATEPALETTESONLY = $D4A3 +VDP_224LINESELECTBIT = $0010 +VDP_240LINESELECTBIT = $0008 +VDP_CLEARSAT = $104D +VDP_CLEARSCREEN = $101A +VDP_CLEARSCREENMAP = $1004 +VDP_CLEARTILECACHE = $103A +VDP_COPY = $0F3A +VDP_DEFAULTTILEATTRIBS = $D2C7 +VDP_DISABLEFRAMEINTERRUPT = $0F6A +VDP_DISPLAYVISIBLEBIT = $0040 +VDP_DISPMODE_M1 = $0001 +VDP_DISPMODE_M2 = $0002 +VDP_DISPMODE_M3 = $0004 +VDP_DISPMODE_M4 = $0008 +VDP_DISPMODE_SMS_224 = $000B +VDP_DISPMODE_SMS_240 = $000E +VDP_DRAWTEXT = $0F72 +VDP_ENABLEFRAMEINTERRUPT = $0F62 +VDP_EXTRAHEIGHTBIT = $0002 +VDP_FRAMEINTERRUPTSBIT = $0020 +VDP_HSCROLL = $D877 +VDP_HSCROLLBIT = $0040 +VDP_INITREGISTERS = $0EA2 +VDP_LARGESPRITESBIT = $0002 +VDP_LINEINTERRUPTSBIT = $0010 +VDP_MASKCOLUMN0BIT = $0020 +VDP_MODE4BIT = $0004 +VDP_READBYTE = $0EFA +VDP_READSTATUS = $0ED1 +VDP_SATADDRESS = $D64B00 +VDP_SATUPDATETRIG = $D134 +VDP_SCREENMAP = $D64400 +VDP_SENDREAD = $0EE2 +VDP_SETADDRESS = $0ED5 +VDP_SETMODE2REG_DISPLAYOFF = $0F5A +VDP_SETMODE2REG_DISPLAYON = $0F52 +VDP_SETREGISTER = $0EBA +VDP_SPRITEDOUBLINGBIT = $0001 +VDP_SPRITESHIFTBIT = $0008 +VDP_SYNCENABLEBIT = $0001 +VDP_TILECOLBUFFER = $D17F +VDP_TILEROWBUFFER = $D1BB +VDP_UPDATESAT = $0FD1 +VDP_UPDATESAT_ATTRIBUTES = $0FE2 +VDP_VIEWPORTX = $D179 +VDP_VIEWPORTY = $D17C +VDP_VSCROLL = $D878 +VDP_VSCROLLBIT = $0080 +VDP_WORKINGSAT = $DB00 +VDP_WORKINGSAT_HPOS = $DB40 +VDP_WORKINGSAT_VPOS = $DB00 +VDP_WRITE = $0F1B +VDP_WRITEANDSKIP = $0F08 +VDP_WRITEBYTE = $0EED +VDPREGISTER0 = $D11E +VDPREGISTER1 = $D11F +VDPREGISTER2 = $D120 +VDPREGISTER3 = $D121 +VDPREGISTER4 = $D122 +VDPREGISTER5 = $D123 +VDPREGISTER6 = $D124 +VERSION = $0002 +VF_DONOTHING = $022A +VF_ENGINE_ADJUSTPLAYERAFTERCOLLISION = $0227 +VF_ENGINE_ALLOCATEOBJECTHIGHPRIORITY = $0200 +VF_ENGINE_ALLOCATEOBJECTLOWPRIORITY = $0203 +VF_ENGINE_CAPLIFECOUNTERVALUE = $030B +VF_ENGINE_CHANGELEVELMUSIC = $0314 +VF_ENGINE_CHECKCOLLISION = $025A +VF_ENGINE_CHECKCOLLISIONANDADJUSTPLAYER = $0218 +VF_ENGINE_CREATEBLOCKFRAGMENTOBJECTS = $02E4 +VF_ENGINE_DEALLOCATEOBJECT = $0206 +VF_ENGINE_DISPLAYEXPLOSIONOBJECT = $025D +VF_ENGINE_GETCOLLISIONVALUEFORBLOCK = $0263 +VF_ENGINE_GETOBJECTDESCRIPTORPOINTER = $0233 +VF_ENGINE_GETOBJECTINDEXFROMPOINTER = $0230 +VF_ENGINE_INCREMENTRINGCOUNTER = $026C +VF_ENGINE_LOCKCAMERA = $0275 +VF_ENGINE_MOVEOBJECTTOPLAYER = $0209 +VF_ENGINE_RELEASECAMERA = $0278 +VF_ENGINE_REMOVEBREAKABLEBLOCK = $0311 +VF_ENGINE_SETCAMERAANDLOCK = $02F6 +VF_ENGINE_SETMAXIMUMCAMERAX = $0305 +VF_ENGINE_SETMINIMUMCAMERAX = $0302 +VF_ENGINE_SETOBJECTVERTICALSPEED = $020F +VF_ENGINE_UPDATEOBJECTPOSITION = $0257 +VF_ENGINE_UPDATERINGCOUNTERSPRITES = $030E +VF_LOGIC_CHANGEDIRECTIONTOWARDSOBJECT = $0242 +VF_LOGIC_CHANGEDIRECTIONTOWARDSPLAYER = $023F +VF_LOGIC_CHECKDESTROYOBJECT = $020C +VF_LOGIC_MOVEHORIZONTALTOWARDSOBJECT = $0248 +VF_LOGIC_MOVEHORIZONTALTOWARDSPLAYERAT0400 = $0245 +VF_LOGIC_MOVEVERTICALTOWARDSOBJECT = $024B +VF_LOGIC_SETOBJECTFACINGLEFT = $0251 +VF_LOGIC_SETOBJECTFACINGRIGHT = $024E +VF_LOGIC_TOGGLEOBJECTDIRECTION = $0254 +VF_LOGIC_UPDATEOBJECTDIRECTIONFLAG = $023C +VF_PLAYER_ANIM_CALCBALANCEFRAME = $02FC +VF_PLAYER_CALCULATELOOPFALLFRAME = $0272 +VF_PLAYER_CALCULATELOOPFRAME = $026F +VF_PLAYER_CHANGEFRAMEDISPLAYTIME = $02F9 +VF_PLAYER_HANDLEBALANCE = $02F0 +VF_PLAYER_HANDLECROUCHED = $02A8 +VF_PLAYER_HANDLEDIAGONALSPRING = $02A5 +VF_PLAYER_HANDLEENDOFLEVEL = $02BD +VF_PLAYER_HANDLEFALLING = $028D +VF_PLAYER_HANDLEIDLE = $02C3 +VF_PLAYER_HANDLEJUMPING = $029F +VF_PLAYER_HANDLELOOKUP = $02AB +VF_PLAYER_HANDLEROLLING = $02B1 +VF_PLAYER_HANDLERUNNING = $02BA +VF_PLAYER_HANDLESKIDLEFT = $02CF +VF_PLAYER_HANDLESKIDRIGHT = $02CC +VF_PLAYER_HANDLESPINDASH = $0323 +VF_PLAYER_HANDLESTANDING = $0269 +VF_PLAYER_HANDLEVERTICALSPRING = $0284 +VF_PLAYER_HANDLEWALK = $02D8 +VF_PLAYER_NOP = $02C6 +VF_PLAYER_PLAYHURTANIMATION = $027B +VF_PLAYER_SETSTATE_MOVEBACK = $02B7 +VF_SCORE_ADDBADNIKVALUE = $0317 +VF_SCORE_ADDBOSSVALUE = $031A +VF_UPDATECYCLINGPALETTE_SCROLLINGTEXT = $02DE +VRAM = $D40000 +VRAMEND = $D65800 +VRAMPOINTER = $DE00 +WORKINGCRAM = $D4C6 +WRITEBLANKTILE = $144D +WRITEMIRROREDTILETOVRAM = $1488 +WRITETILETOVRAM = $1458 +XORDECODE = $13F2 diff --git a/src/SHC/SHC.asm b/src/SHC/SHC.asm new file mode 100644 index 0000000..655bf80 --- /dev/null +++ b/src/SHC/SHC.asm @@ -0,0 +1,515 @@ +#define Port_VDPAddress $BF +#define Port_VDPData $BE +#define Port_VDPStatus $BF +#define Port_IoPort1 $DC +.assume adl=0 +.org $8000 + +Bank32: + call LABEL_80280 + di + call LABEL_80325 +LABEL_8003A: + ld hl, $C000 + ld.lil de, SegaVRAM+$77A0 + ld b, $1B +LABEL_80049: + ld a, (hl) + ld.lil (de), a + xor a + ld (hl), a + inc hl + inc.lil de + djnz LABEL_80049 + exx +LABEL_80066: + ld hl, DATA_803B2 + ld de, $0020 + call LABEL_8028F +LABEL_8007E: + exx + ld hl, DATA_820D2 + ld de, $3800 + call LABEL_8028F +LABEL_80096: + ld a, $04 + ld ($C012), a + ld a, $FF + ld ($C01A), a +LABEL_800A9: + call LABEL_801C4 + call LABEL_800F2 + call LABEL_8013F + ld a, ($C012) + or a + jr nz, LABEL_800E5 + ld b, a + ld a, ($C011) + cp b + jr nz, LABEL_800E5 + jp LABEL_80348 + +LABEL_800E5: + exx + ld a, b + exx + and $20 + jr z, LABEL_800A9 + xor a + ld ($C012), a + jr LABEL_800A9 + +LABEL_800F2: + ld de, DATA_80382 + xor a + ld ($C019), a + ld hl, ($C015) + inc hl + ld ($C015), hl + ld a, l + add a, a + jr nc, LABEL_80129 + ld a, h + cp $03 + jr c, LABEL_80114 + xor a + ld ($C012), a + jr LABEL_80131 + +LABEL_80114: + ld a, ($C018) + and $30 + sub $10 + jr nc, LABEL_8011E + xor a +LABEL_8011E: + ld ($C019), a + add a, e + ld e, a + ld a, $00 + adc a, d + ld d, a + jr LABEL_8013E + +LABEL_80129: + ld a, h + dec a + and $03 + sub $02 + jr c, LABEL_8013E +LABEL_80131: + ld de, DATA_803A2 + ld a, $20 + ld ($C019), a +LABEL_8013E: + ret + +LABEL_8013F: + ld hl, ($C010) + ld a, ($C012) + sub h + jr nz, LABEL_8015B + ld a, ($C013) + cp e + jr nz, LABEL_80154 + ld a, ($C014) + cp d + jr z, LABEL_8015A +LABEL_80154: + ld a, ($C011) + ld b, a + jr LABEL_80167 + +LABEL_8015A: + ret + +LABEL_8015B: + sbc a, a + ld b, a + and $80 + or $40 + ld c, a + add hl, bc + ld ($C010), hl + ld b, h +LABEL_80167: + ld ($C013), de + ld c, $10 + ld hl, $C000 +LABEL_80170: + push hl + ld a, (de) + and $30 + call LABEL_801B3 +LABEL_80181: + and $30 + ld l, a + ld a, (de) + and $0C + call LABEL_801B3 +LABEL_80194: + and $0C + ld h, a + ld a, (de) + and $03 + call LABEL_801B3 +LABEL_801A7: + and $03 + or h + or l + pop hl + ld (hl), a + inc de + inc l + dec c + jr nz, LABEL_80170 + ret + +LABEL_801B3: + push bc + ld c, a + ld a, b + or a + jr z, LABEL_801C1 + xor a +LABEL_801BA: + add a, c + djnz LABEL_801BA + rrca + rrca + pop bc + ret + +LABEL_801C1: + xor a + pop bc + ret + +LABEL_801C4: + ld.lil hl, mpLcdRis + ld.lil de, mpLcdIcr + ld a, $08 +_: bit.lil 3, (hl) + jr z, -_ + ld.lil (de), a + ld hl, ($C019) + ld a, l + cp h + jr z, LABEL_80222 + ld ($C019), a + ld hl, DATA_823E1 + rrca + rrca + rrca + and $06 + ld c, a + ld b, $00 + add hl, bc + ld a, (hl) + inc hl + ld h, (hl) + ld l, a + ld de, $0414 + sbc hl, de + ld de, DATA_80414 + add hl, de + ld de, DATA_823E7 + ld a, (de) + ld b, 0 +LABEL_80201: + ld c, a + inc de + ld a, (de) + inc de + push de + ex de, hl + ld h, (hl) + ld l, a + push bc + ld.lil bc, SegaVRAM + $3800 + add.lil hl, bc + ex.lil de, hl + ld.lil bc, romStart + add.lil hl, bc + pop bc + ldir.lil + pop de + inc de + ld a, (de) + or a + jr nz, LABEL_80201 + call.lil DrawScreenMap + jr LABEL_8022A + +LABEL_80222: + ld bc, $8002 +LABEL_80225: + djnz LABEL_80225 + dec c + jr nz, LABEL_80225 + +LABEL_8022A: + ld b, $10 + ld.lil de, CRAM + exx + ld.lil de, $D2C000 + +_: push bc + ld a, (de) + ld l, a + ld h, $00 + add hl, hl + ld.lil bc, SMS_Palette+romStart + add.lil hl, bc + push.lil hl + exx + pop.lil hl + ld bc, $0002 + ldir.lil + exx + inc.lil de + pop bc + djnz -_ + + call LABEL_8024A + jp LABEL_80258 + +LABEL_8024A: + exx + call _Port1_Input + ld h, a + ld a, b + xor h + ld b, h + and h + ld c, a + exx + ret + +LABEL_80258: + ld hl, ($C017) + ld a, h + or l + jr nz, LABEL_80262 + ld hl, $365A +LABEL_80262: + ld d, h + ld e, l + ld a, l + rlca + rlca + ld b, a + ld a, h + ld h, b + rlca + rlca + ld l, a + add hl, de + ld a, h + ld h, l + ld l, a + ld ($C017), hl + call.lil RenderScreenMap + ret + +; Data from 80275 to 8027F (11 bytes) +DATA_80275: + .db $FF, $00, $00, $F0, $FB, $FF, $FF, $FF, $FF, $80, $16 + +LABEL_80280: + xor a + push af + pop af + ld a, i + ret pe + dec sp + dec sp + pop af + sub $01 + sbc a, a + and $01 + ret + +LABEL_8028F: + ld.lil bc, SegaVRAM + ex de, hl + add.lil hl, bc + ex.lil de, hl + ld a, $80 + jr LABEL_802A1 + +LABEL_8029E: + push af + ld a, (hl) + ld.lil (de), a + inc hl + inc.lil de + pop af +LABEL_802A1: + add a, a + jr nc, LABEL_8029E + jr nz, LABEL_802AB + ld a, (hl) + inc hl + adc a, a + jr nc, LABEL_8029E +LABEL_802AB: + add a, a + jr nc, LABEL_802EF + jr nz, LABEL_802B5 + ld a, (hl) + inc hl + adc a, a + jr nc, LABEL_802EF +LABEL_802B5: + ld b, $02 + add a, a + jr nc, LABEL_802C3 + jr nz, LABEL_802C1 + ld a, (hl) + inc hl + adc a, a + jr nc, LABEL_802C3 +LABEL_802C1: + inc b + inc b +LABEL_802C3: + add a, a + jr nc, LABEL_802CE + jr nz, LABEL_802CD + ld a, (hl) + inc hl + adc a, a + jr nc, LABEL_802CE +LABEL_802CD: + inc b +LABEL_802CE: + push hl + ld l, (hl) + ld h, $BF + + ex.lil de, hl + push bc + ld.lil bc, SegaVRAM + or a + sbc hl, bc + pop bc + set 6, h + ex de, hl + add hl, de + res 6, d + ex af, af' +LABEL_802D0: + push bc + ld.lil bc, SegaVRAM + add.lil hl, bc + pop bc +LABEL_802D4: + push bc + ld.lil a, (hl) + inc.lil hl + push de + pop iy + ld.lil bc, SegaVRAM + add.lil iy, bc + ld.lil (iy), a + inc de + pop bc + djnz LABEL_802D4 + + ex de, hl + ld.lil bc, SegaVRAM + add.lil hl, bc + ex.lil de, hl + + pop hl + inc hl + ex af, af' + jr LABEL_802A1 + +LABEL_802EF: + ex af, af' + ld a, (hl) + inc hl + push hl + ld h, (hl) + ld l, a + ld a, h + and $07 + jr nz, LABEL_80304 + ex (sp), hl + inc hl + ld a, (hl) + ex (sp), hl + or a + jr nz, LABEL_80303 + pop hl + ret + +LABEL_80303: + dec a +LABEL_80304: + add a, $02 + ld b, a + ld a, h + or $07 + rrca + rrca + rrca + and $BF + ld h, a + ex.lil de, hl + push bc + ld.lil bc, SegaVRAM + sbc hl, bc + pop bc + set 6, h + ex de, hl + add hl, de + res 6, d + jr LABEL_802D0 + +LABEL_80325: + call Engine_ClearVRAM + ret + +LABEL_80348: + call LABEL_80325 + exx + ld a, r + ret po + ei + ret + +; Data from 80382 to 8040C (139 bytes) +DATA_80382: + .db $00, $10, $20, $34, $38, $3D, $3F, $3F, $3D, $38, $34, $20, $10, $00, $00, $00 + .db $00, $10, $20, $34, $38, $3D, $3F, $38, $34, $20, $10, $00, $00, $00, $00, $00 +DATA_803A2: + .db $00, $10, $20, $34, $38, $3D, $3F + .fill 9, $00 +DATA_803B2: + .db $46, $00, $FF, $F8, $14, $05, $05, $18, $FC, $2A, $2A, $FC, $55, $40, $55, $E8 + .db $F8, $15, $57, $57, $01, $01, $BE, $07, $BF, $0E, $0F, $F0, $FF, $FC, $E4, $E4 + .db $D0, $FE, $BF, $37, $BF, $0F, $E8, $46, $E6, $FF, $0C, $F0, $7F, $FC, $E0, $93 + .db $E0, $AA, $AA, $E0, $FC, $FF, $77, $FF, $E8, $58, $FE, $3F, $FF, $C0, $BA, $E0 + .db $F8, $1B, $F7, $E0, $F8, $1B, $0F, $E3, $E0, $E0, $1F, $E0, $F2, $E0, $A0, $A0 + .db $E0, $FC, $03, $EA, $EA, $80, $80, $7F, $FF, $33, $FE + +LABEL_8040D: + ret po + ld l, $F9 + add a, b + ret m + dec bc + rst $38 ; Engine_Interrupt +; Data from 80414 to 83FFF (15340 bytes) +DATA_80414: + #import "SHC/SHCDATA.bin" + +#define DATA_820D2 DATA_80414 + $1CBE +#define DATA_823E1 DATA_80414 + $1FCD +#define DATA_823E7 DATA_80414 + $1FD3 +#define DATA_8262E DATA_80414 + $221A + +#include "s2.lab" \ No newline at end of file diff --git a/src/SHC/SHCDATA.bin b/src/SHC/SHCDATA.bin new file mode 100644 index 0000000..88bd230 Binary files /dev/null and b/src/SHC/SHCDATA.bin differ diff --git a/src/SHC/SHC_SMS.bin b/src/SHC/SHC_SMS.bin new file mode 100644 index 0000000..8a5a4be Binary files /dev/null and b/src/SHC/SHC_SMS.bin differ diff --git a/src/appvars.asm b/src/appvars.asm index fc0b73a..63b8676 100644 --- a/src/appvars.asm +++ b/src/appvars.asm @@ -4,9 +4,12 @@ .ASSUME ADL=1 CheckForBank: ;it's bankin' time - call.is StoreRegisters - ld hl, Engine_ResetInterruptFlag + call.sis StoreRegisters + jp.lil +_ + romStart + +_: ld hl, Engine_ResetInterruptFlag push.sis hl ;Copy the return address to the 16-bit stack + ;check for object logic banks ld hl, Bank28 cp 28 @@ -52,7 +55,7 @@ StoreRegisters: ;stores registers in RAM push ix push iy ld sp, (SegaSP) - ret.lil + ret RestoreRegisters: ld (SegaSP), sp @@ -67,8 +70,6 @@ RestoreRegisters: pop de pop bc pop af - ex af, af' - pop af ld sp, (SegaSP) ret @@ -90,8 +91,61 @@ LoadBankFromRAM: ldir jp CheckForBank_ToggleInterrupt + romStart +#define BankAddressTable $D0E000 + +StoreBankPointers: ;for loading sprite data from ROM banks + xor a +_: push af + ld l, a + ld e, a + ld h, 8 + ld d, 3 + mlt hl + mlt de + + ld bc, Bank04 + romStart + add hl, bc ;HL = ROM bank header + ex de, hl + ld bc, BankAddressTable + add hl, bc + ex de, hl ;DE = bank address holder + + push de + call Mov9ToOP1 + call ChkFindSym + ex de, hl + pop de + jp c, ExitGame + + ld (StoreBankAddress + 1 + romStart), de + ld de, $FF8012 ;offset HL into actual data + add hl, de +StoreBankAddress: + ld (0), hl + pop af + inc a + cp 28 + jr nz, -_ + ret.sis + +GetDataPTR: ;locate ROM bank data in archive memory + sub $04 + push de + push bc + ld e, a + ld d, 3 + mlt de + ex de, hl + ld bc, BankAddressTable + add hl, bc + ld hl, (hl) + ex de, hl + add hl, de + pop bc + pop de + ret.sis + ExitGame: -.ORG ExitGame+romStart ld a, $D0 ld mb, a ld sp, ($D2DE02) @@ -106,15 +160,26 @@ ExitGame: ld bc, $0040 ld (hl), $00 ldir + + ld hl, ClearMemoryMap + ld de, VRAM + ld bc, ExitGameEnd-ClearMemoryMap + ldir + jp VRAM + +ClearMemoryMap: + ;clear emulated memory map location + ld hl, romStart + ld de, romStart+1 + ld bc, $FFFF + ld (hl), $00 + ldir call ClrLCDFull ei ret ExitGameEnd: -.ORG ExitGameEnd-romStart ;Appvar Headers - - Bank04: .db AppvarObj, "Bank04", 0 @@ -187,9 +252,18 @@ Bank26: Bank27: .db AppVarObj, "Bank27", 0 -NullBank: - .db AppVarObj, "Bank29", 0 +Bank28Header: + .db AppVarObj, "Bank28", 0 Bank29: .db AppvarObj, "Bank29", 0 + +Bank30Header: + .db AppvarObj, "Bank30", 0 + +Bank31Header: + .db AppvarObj, "Bank31", 0 + +SHCHeader: + .db AppvarObj, "Bank32", 0 .ASSUME ADL=0 \ No newline at end of file diff --git a/src/appvars/bank05.asm b/src/appvars/bank05.asm index b577ef7..081a32c 100644 --- a/src/appvars/bank05.asm +++ b/src/appvars/bank05.asm @@ -5,3 +5,9 @@ Art_Sonic_Gliding: Art_Sonic_Minecart: #import "art\sonic\art_ucmp_sonic_minecart.bin" + +Art_Sonic_SpinDash: +#import "art\sonic\art_ucmp_spin_dash.bin" + +Art_Sonic_SpinDash_Mirrored: +#import "art\sonic\art_ucmp_spin_dash_mirrored.bin" \ No newline at end of file diff --git a/src/appvars/bank13.asm b/src/appvars/bank13.asm index 61a5e1f..da7f3d8 100644 --- a/src/appvars/bank13.asm +++ b/src/appvars/bank13.asm @@ -8,11 +8,7 @@ Layout_GHZ2: Layout_GHZ3: -#if Version = 2 #import "layout\ghz\layout_ghz3.bin" -#else -#import "layout\ghz\layout_ghz3_og.bin" -#endif Layout_SHZ1: #if Version = 2 diff --git a/src/appvars/bank31.asm b/src/appvars/bank31.asm index 1f53b83..753c4fc 100644 --- a/src/appvars/bank31.asm +++ b/src/appvars/bank31.asm @@ -9,5 +9,6 @@ #if Listing=0 #include "s2.lab" +#include "bin/bank05.lab" #endif #undef Listing \ No newline at end of file diff --git a/src/art/sonic/art_ucmp_sonic.bin b/src/art/sonic/art_ucmp_sonic.bin index ad8d529..a76b06b 100644 Binary files a/src/art/sonic/art_ucmp_sonic.bin and b/src/art/sonic/art_ucmp_sonic.bin differ diff --git a/src/art/sonic/art_ucmp_sonic_mirrored.bin b/src/art/sonic/art_ucmp_sonic_mirrored.bin index 5da8ed7..efea4f9 100644 Binary files a/src/art/sonic/art_ucmp_sonic_mirrored.bin and b/src/art/sonic/art_ucmp_sonic_mirrored.bin differ diff --git a/src/art/sonic/art_ucmp_spin_dash.bin b/src/art/sonic/art_ucmp_spin_dash.bin new file mode 100644 index 0000000..f5f8b25 Binary files /dev/null and b/src/art/sonic/art_ucmp_spin_dash.bin differ diff --git a/src/art/sonic/art_ucmp_spin_dash_mirrored.bin b/src/art/sonic/art_ucmp_spin_dash_mirrored.bin new file mode 100644 index 0000000..50068f5 Binary files /dev/null and b/src/art/sonic/art_ucmp_spin_dash_mirrored.bin differ diff --git a/src/bin/Sonic2.8xv b/src/bin/Sonic2.8xv index 26a1477..b274ed2 100644 Binary files a/src/bin/Sonic2.8xv and b/src/bin/Sonic2.8xv differ diff --git a/src/bin/bank04.8xv b/src/bin/bank04.8xv index c7bc924..6ae514c 100644 Binary files a/src/bin/bank04.8xv and b/src/bin/bank04.8xv differ diff --git a/src/bin/bank05.8xv b/src/bin/bank05.8xv index 7e61b62..c130135 100644 Binary files a/src/bin/bank05.8xv and b/src/bin/bank05.8xv differ diff --git a/src/bin/bank05.lab b/src/bin/bank05.lab index 601c238..7e0bc71 100644 --- a/src/bin/bank05.lab +++ b/src/bin/bank05.lab @@ -1,2 +1,4 @@ ART_SONIC_GLIDING = $8000 ART_SONIC_MINECART = $9E00 +ART_SONIC_SPINDASH = $A340 +ART_SONIC_SPINDASH_MIRRORED = $A940 diff --git a/src/bin/bank13.8xv b/src/bin/bank13.8xv index 8e50f5f..1384e15 100644 Binary files a/src/bin/bank13.8xv and b/src/bin/bank13.8xv differ diff --git a/src/bin/bank13.lab b/src/bin/bank13.lab index 95c00ec..d80b23d 100644 --- a/src/bin/bank13.lab +++ b/src/bin/bank13.lab @@ -1,5 +1,5 @@ LAYOUT_GHZ1 = $8000 LAYOUT_GHZ2 = $8C6C LAYOUT_GHZ3 = $9885 -LAYOUT_SHZ1 = $A392 -LAYOUT_SHZ2 = $B041 +LAYOUT_SHZ1 = $A2E8 +LAYOUT_SHZ2 = $AF97 diff --git a/src/bin/bank16.8xv b/src/bin/bank16.8xv index 562aeef..a9119df 100644 Binary files a/src/bin/bank16.8xv and b/src/bin/bank16.8xv differ diff --git a/src/bin/bank28.8xv b/src/bin/bank28.8xv index 5226905..3d3ae7b 100644 Binary files a/src/bin/bank28.8xv and b/src/bin/bank28.8xv differ diff --git a/src/bin/bank29.8xv b/src/bin/bank29.8xv index 0ad6fb5..4a75339 100644 Binary files a/src/bin/bank29.8xv and b/src/bin/bank29.8xv differ diff --git a/src/bin/bank30.8xv b/src/bin/bank30.8xv index d1f857e..e6885db 100644 Binary files a/src/bin/bank30.8xv and b/src/bin/bank30.8xv differ diff --git a/src/bin/bank30.lab b/src/bin/bank30.lab index 3a2a47f..b142f38 100644 --- a/src/bin/bank30.lab +++ b/src/bin/bank30.lab @@ -6,52 +6,52 @@ DATA_B30_8E31 = $8E33 DATA_B30_8E36 = $8E38 DATA_B30_8E4D = $8E4F DATA_B30_8E9B = $8E9D -DATA_B30_8FC6 = $8FCC -DATA_B30_8FCA = $8FD0 -DATA_B30_8FD0 = $8FD6 -DATA_B30_903D = $9043 -DATA_B30_905D = $9063 -DATA_B30_9069 = $906C -DATA_B30_906F = $9072 -DATA_B30_9075 = $9078 -DATA_B30_907F = $9082 -DATA_B30_90A4 = $90A7 -DATA_B30_90E5 = $90E8 -DATA_B30_914D = $9150 -DATA_B30_9157 = $915A -DATA_B30_91FD = $9200 -DATA_B30_920B = $920E -DATA_B30_9215 = $9218 -DATA_B30_921F = $9222 -DATA_B30_9229 = $922C -DATA_B30_9266 = $9269 -DATA_B30_9270 = $9273 -DATA_B30_92F8 = $92FB -DATA_B30_930E = $9311 -DATA_B30_9316 = $9319 -DATA_B30_931E = $9321 -DATA_B30_9456 = $945B -DATA_B30_946C = $9471 -DATA_B30_9472 = $9477 -DATA_B30_9484 = $9489 -DATA_B30_949E = $94A3 -DATA_B30_94C4 = $94C9 -DATA_B30_94FF = $9504 -DATA_B30_9505 = $950A -DATA_B30_9516 = $951B -DATA_B30_9602 = $9608 -DATA_B30_960C = $9612 -DATA_B30_9637 = $963D -DATA_B30_9671 = $9677 -DATA_B30_9677 = $967D -DATA_B30_96A6 = $96AC -DATA_B30_96E8 = $96EE -DATA_B30_96FC = $9702 -DATA_B30_9706 = $970C -DATA_B30_9735 = $973B -DATA_B30_976F = $9775 -DATA_B30_9808 = $980E -DATA_B30_981C = $9822 +DATA_B30_8FC6 = $8FCA +DATA_B30_8FCA = $8FCE +DATA_B30_8FD0 = $8FD4 +DATA_B30_903D = $9041 +DATA_B30_905D = $9061 +DATA_B30_9069 = $906A +DATA_B30_906F = $9070 +DATA_B30_9075 = $9076 +DATA_B30_907F = $9080 +DATA_B30_90A4 = $90A5 +DATA_B30_90E5 = $90E6 +DATA_B30_914D = $914E +DATA_B30_9157 = $9158 +DATA_B30_91FD = $91FE +DATA_B30_920B = $920C +DATA_B30_9215 = $9216 +DATA_B30_921F = $9220 +DATA_B30_9229 = $922A +DATA_B30_9266 = $9267 +DATA_B30_9270 = $9271 +DATA_B30_92F8 = $92F9 +DATA_B30_930E = $930F +DATA_B30_9316 = $9317 +DATA_B30_931E = $931F +DATA_B30_9456 = $9459 +DATA_B30_946C = $946F +DATA_B30_9472 = $9475 +DATA_B30_9484 = $9487 +DATA_B30_949E = $94A1 +DATA_B30_94C4 = $94C7 +DATA_B30_94FF = $9502 +DATA_B30_9505 = $9508 +DATA_B30_9516 = $9519 +DATA_B30_9602 = $960B +DATA_B30_960C = $9615 +DATA_B30_9637 = $9640 +DATA_B30_9671 = $967A +DATA_B30_9677 = $9680 +DATA_B30_96A6 = $96AF +DATA_B30_96E8 = $96F1 +DATA_B30_96FC = $9705 +DATA_B30_9706 = $970F +DATA_B30_9735 = $973E +DATA_B30_976F = $9778 +DATA_B30_9808 = $9811 +DATA_B30_981C = $9825 DATA_OBJECTLAYOUT_ALZ = $8157 DATA_OBJECTLAYOUT_ALZ1 = $8586 DATA_OBJECTLAYOUT_ALZ2 = $8668 @@ -81,7 +81,7 @@ DATA_OBJECTLAYOUT_UGZ1 = $8175 DATA_OBJECTLAYOUT_UGZ2 = $82C3 DATA_OBJECTLAYOUT_UGZ3 = $8411 DATA_OBJECTLAYOUTS = $8137 -DEMOCONTROLSEQUENCE_SEZ = $9847 +DEMOCONTROLSEQUENCE_SEZ = $984A ENGINE_UPDATEOBJECTLAYOUT = $8000 LABEL_812E = $8130 LABEL_B30_8DB3 = $8DB5 @@ -97,52 +97,52 @@ LABEL_B30_8F42 = $8F47 LABEL_B30_8F4B = $8F51 LABEL_B30_8F5E = $8F64 LABEL_B30_8F7D = $8F83 -LABEL_B30_8FB2 = $8FB8 -LABEL_B30_9020 = $9026 -LABEL_B30_9026 = $902C -LABEL_B30_9038 = $903E -LABEL_B30_9136 = $9139 -LABEL_B30_913C = $913F -LABEL_B30_9142 = $9145 -LABEL_B30_9148 = $914B -LABEL_B30_91CA = $91CD -LABEL_B30_91CF = $91D2 -LABEL_B30_91E9 = $91EC -LABEL_B30_91F3 = $91F6 -LABEL_B30_9260 = $9263 -LABEL_B30_9285 = $9288 -LABEL_B30_929B = $929E -LABEL_B30_92B3 = $92B6 -LABEL_B30_92D7 = $92DA -LABEL_B30_9326 = $9329 -LABEL_B30_933A = $933D -LABEL_B30_934A = $934D -LABEL_B30_9365 = $9369 -LABEL_B30_9370 = $9374 -LABEL_B30_9386 = $938B -LABEL_B30_93C2 = $93C7 -LABEL_B30_9401 = $9406 -LABEL_B30_940F = $9414 -LABEL_B30_942E = $9433 -LABEL_B30_943A = $943F -LABEL_B30_94DA = $94DF -LABEL_B30_94E0 = $94E5 -LABEL_B30_951C = $9521 -LABEL_B30_954E = $9554 -LABEL_B30_9556 = $955C -LABEL_B30_9568 = $956E -LABEL_B30_95A0 = $95A6 -LABEL_B30_95B0 = $95B6 -LABEL_B30_95D1 = $95D9 -LABEL_B30_95E0 = $95E9 -LABEL_B30_95FE = $9604 -LABEL_B30_9680 = $9686 -LABEL_B30_96C0 = $96C6 -LABEL_B30_96F8 = $96FE -LABEL_B30_970F = $9715 -LABEL_B30_973F = $9745 -LABEL_B30_9818 = $981E -LABEL_B30_9826 = $982C +LABEL_B30_8FB2 = $8FB6 +LABEL_B30_9020 = $9024 +LABEL_B30_9026 = $902A +LABEL_B30_9038 = $903C +LABEL_B30_9136 = $9137 +LABEL_B30_913C = $913D +LABEL_B30_9142 = $9143 +LABEL_B30_9148 = $9149 +LABEL_B30_91CA = $91CB +LABEL_B30_91CF = $91D0 +LABEL_B30_91E9 = $91EA +LABEL_B30_91F3 = $91F4 +LABEL_B30_9260 = $9261 +LABEL_B30_9285 = $9286 +LABEL_B30_929B = $929C +LABEL_B30_92B3 = $92B4 +LABEL_B30_92D7 = $92D8 +LABEL_B30_9326 = $9327 +LABEL_B30_933A = $933B +LABEL_B30_934A = $934B +LABEL_B30_9365 = $9367 +LABEL_B30_9370 = $9372 +LABEL_B30_9386 = $9389 +LABEL_B30_93C2 = $93C5 +LABEL_B30_9401 = $9404 +LABEL_B30_940F = $9412 +LABEL_B30_942E = $9431 +LABEL_B30_943A = $943D +LABEL_B30_94DA = $94DD +LABEL_B30_94E0 = $94E3 +LABEL_B30_951C = $951F +LABEL_B30_954E = $9557 +LABEL_B30_9556 = $955F +LABEL_B30_9568 = $9571 +LABEL_B30_95A0 = $95A9 +LABEL_B30_95B0 = $95B9 +LABEL_B30_95D1 = $95DC +LABEL_B30_95E0 = $95EC +LABEL_B30_95FE = $9607 +LABEL_B30_9680 = $9689 +LABEL_B30_96C0 = $96C9 +LABEL_B30_96F8 = $9701 +LABEL_B30_970F = $9718 +LABEL_B30_973F = $9748 +LABEL_B30_9818 = $9821 +LABEL_B30_9826 = $982F LOGIC_TITLE_SONICHAND = $8D99 LOGIC_TITLE_TAILSEYE = $8DD1 OBJECTLAYOUT_CHECKLOADOBJECT = $804D diff --git a/src/bin/bank31.8xv b/src/bin/bank31.8xv index 5a77031..3d48a0c 100644 Binary files a/src/bin/bank31.8xv and b/src/bin/bank31.8xv differ diff --git a/src/bin/bank31.lab b/src/bin/bank31.lab index a1cce85..c73e8a2 100644 --- a/src/bin/bank31.lab +++ b/src/bin/bank31.lab @@ -1,38 +1,38 @@ -AD_EXPLOSION_01 = $8987 -AD_EXPLOSION_01_CHARCODES = $89A8 -AD_EXPLOSION_02 = $8992 -AD_EXPLOSION_02_CHARCODES = $89A9 -AD_EXPLOSION_03 = $899D -AD_EXPLOSION_03_CHARCODES = $89AB -AIRCOUNTDOWN_INIT = $B0C8 -AIRCOUNTDOWN_TIMEREXPIRED = $B11D -AIRCOUNTDOWN_UPDATE = $B0EF -ALZ_BUBBLE_STATE_00 = $B164 -ALZ_BUBBLE_STATE_01 = $B16A -ALZ_BUBBLE_STATE_02 = $B1A3 -ALZ_BUBBLE_STATE_03 = $B1A9 -ALZ_BUBBLE_STATE_04 = $B1C8 -ALZ_BUBBLE_STATE_05 = $B1CE -ALZ_BUBBLE_STATE_06 = $B1FD -ALZ_BUBBLE_STATE_07 = $B203 -ALZ_BUBBLE_STATE_08 = $B222 -ALZ_BUBBLE_STATE_09 = $B228 -ALZ_BUBBLE_STATE_0A = $B236 -ANIMDATA_BLANKFRAME = $8DA7 -ANIMDATA_EXPLOSION = $897F -ANIMDATA_MONITORS = $89AD -BLOCKFRAGMENT_STATE_00 = $AC56 -BLOCKFRAGMENT_STATE_00_LOGIC_01 = $AC62 -BLOCKFRAGMENT_STATE_01 = $AC5C -BLOCKFRAGMENT_STATE_01_LOGIC_01 = $AD05 -CHAOSEMERALD_CHECKCOLLISIONS = $B837 -CHAOSEMERALD_CHECKCOLLISIONS_CEZ = $B884 -CHAOSEMERALD_DESTRUCT = $B875 -CHAOSEMERALD_INIT = $B7FC -CHAOSEMERALD_NEXTLEVEL = $B86F -CHAOSEMERALD_STATE_00 = $B7E6 -CHAOSEMERALD_STATE_01 = $B7EC -CHAOSEMERALD_STATE_02 = $B7F2 +AD_EXPLOSION_01 = $8971 +AD_EXPLOSION_01_CHARCODES = $8992 +AD_EXPLOSION_02 = $897C +AD_EXPLOSION_02_CHARCODES = $8993 +AD_EXPLOSION_03 = $8987 +AD_EXPLOSION_03_CHARCODES = $8995 +AIRCOUNTDOWN_INIT = $B0B2 +AIRCOUNTDOWN_TIMEREXPIRED = $B107 +AIRCOUNTDOWN_UPDATE = $B0D9 +ALZ_BUBBLE_STATE_00 = $B14E +ALZ_BUBBLE_STATE_01 = $B154 +ALZ_BUBBLE_STATE_02 = $B18D +ALZ_BUBBLE_STATE_03 = $B193 +ALZ_BUBBLE_STATE_04 = $B1B2 +ALZ_BUBBLE_STATE_05 = $B1B8 +ALZ_BUBBLE_STATE_06 = $B1E7 +ALZ_BUBBLE_STATE_07 = $B1ED +ALZ_BUBBLE_STATE_08 = $B20C +ALZ_BUBBLE_STATE_09 = $B212 +ALZ_BUBBLE_STATE_0A = $B220 +ANIMDATA_BLANKFRAME = $8D91 +ANIMDATA_EXPLOSION = $8969 +ANIMDATA_MONITORS = $8997 +BLOCKFRAGMENT_STATE_00 = $AC40 +BLOCKFRAGMENT_STATE_00_LOGIC_01 = $AC4C +BLOCKFRAGMENT_STATE_01 = $AC46 +BLOCKFRAGMENT_STATE_01_LOGIC_01 = $ACEF +CHAOSEMERALD_CHECKCOLLISIONS = $B81D +CHAOSEMERALD_CHECKCOLLISIONS_CEZ = $B86A +CHAOSEMERALD_DESTRUCT = $B85B +CHAOSEMERALD_INIT = $B7E2 +CHAOSEMERALD_NEXTLEVEL = $B855 +CHAOSEMERALD_STATE_00 = $B7CC +CHAOSEMERALD_STATE_01 = $B7D2 +CHAOSEMERALD_STATE_02 = $B7D8 DATA_B31_80C0 = $80C0 DATA_B31_8188 = $818E DATA_B31_8193 = $8199 @@ -133,1000 +133,998 @@ DATA_B31_859D = $85A3 DATA_B31_85A8 = $85AE DATA_B31_85B3 = $85B9 DATA_B31_85BE = $85C4 -DATA_B31_85C9 = $85F0 -DATA_B31_85D1 = $85F8 -DATA_B31_85D7 = $85FE -DATA_B31_85E2 = $8609 -DATA_B31_85ED = $8614 -DATA_B31_85EE = $8615 -DATA_B31_85EF = $8616 -DATA_B31_8631 = $8658 -DATA_B31_863C = $8663 -DATA_B31_8647 = $866E -DATA_B31_8652 = $8679 -DATA_B31_865D = $8684 -DATA_B31_8668 = $868F -DATA_B31_8673 = $869A -DATA_B31_867E = $86A5 -DATA_B31_8689 = $86B0 -DATA_B31_8694 = $86BB -DATA_B31_869F = $86C6 -DATA_B31_86AA = $86D1 -DATA_B31_86B5 = $86DC -DATA_B31_86C0 = $86E7 -DATA_B31_86CB = $86F2 -DATA_B31_86D6 = $86FD -DATA_B31_86E1 = $8708 -DATA_B31_86EC = $8713 -DATA_B31_86F7 = $871E -DATA_B31_8702 = $8729 -DATA_B31_870D = $8734 -DATA_B31_8718 = $873F -DATA_B31_8723 = $874A -DATA_B31_872E = $8755 -DATA_B31_8739 = $8760 -DATA_B31_8744 = $876B -DATA_B31_874F = $8776 -DATA_B31_875A = $8781 -DATA_B31_8765 = $878C -DATA_B31_8770 = $8797 -DATA_B31_877B = $87A2 -DATA_B31_8786 = $87AD -DATA_B31_8791 = $87B8 -DATA_B31_8793 = $87BA -DATA_B31_8797 = $87BE -DATA_B31_87A2 = $87C9 -DATA_B31_87A3 = $87CA -DATA_B31_87A5 = $87CC -DATA_B31_87AF = $87D6 -DATA_B31_87BA = $87E1 -DATA_B31_87C5 = $87EC -DATA_B31_87D0 = $87F7 -DATA_B31_87DB = $8802 -DATA_B31_87DC = $8803 -DATA_B31_87DD = $8804 -DATA_B31_87DE = $8805 -DATA_B31_87DF = $8806 -DATA_B31_87ED = $8814 -DATA_B31_87F8 = $881F -DATA_B31_8803 = $882A -DATA_B31_880E = $8835 -DATA_B31_8819 = $8840 -DATA_B31_881B = $8842 -DATA_B31_881D = $8844 -DATA_B31_881F = $8846 -DATA_B31_8821 = $8848 -DATA_B31_882F = $8856 -DATA_B31_883A = $8861 -DATA_B31_8845 = $886C -DATA_B31_8850 = $8877 -DATA_B31_885B = $8882 -DATA_B31_8866 = $888D -DATA_B31_8871 = $8898 -DATA_B31_8872 = $8899 -DATA_B31_8873 = $889A -DATA_B31_8874 = $889B -DATA_B31_8875 = $889C -DATA_B31_8876 = $889D -DATA_B31_8877 = $889E -DATA_B31_8885 = $88AC -DATA_B31_8890 = $88B7 -DATA_B31_889B = $88C2 -DATA_B31_88A6 = $88CD -DATA_B31_88B1 = $88D8 -DATA_B31_88BC = $88E3 -DATA_B31_88C7 = $88EE -DATA_B31_88CD = $88F4 -DATA_B31_88CF = $88F6 -DATA_B31_88D5 = $88FC -DATA_B31_88DD = $8904 -DATA_B31_88E3 = $890A -DATA_B31_88EE = $8915 -DATA_B31_88F9 = $8920 -DATA_B31_88FB = $8922 -DATA_B31_88FF = $8926 -DATA_B31_890A = $8931 -DATA_B31_890C = $8933 -DATA_B31_8912 = $8939 -DATA_B31_891D = $8944 -DATA_B31_8928 = $894F -DATA_B31_892A = $8951 -DATA_B31_892C = $8953 -DATA_B31_8934 = $895B -DATA_B31_893F = $8966 -DATA_B31_894A = $8971 -DATA_B31_8955 = $897C -DATA_B31_8956 = $897D -DATA_B31_8957 = $897E -DATA_B31_898C = $89B3 -DATA_B31_8997 = $89BE -DATA_B31_89A2 = $89C9 -DATA_B31_89A8 = $89CF -DATA_B31_89AE = $89D5 -DATA_B31_89B2 = $89D9 -DATA_B31_89BD = $89E4 -DATA_B31_89BF = $89E6 -DATA_B31_89CF = $89F6 -DATA_B31_89DA = $8A01 -DATA_B31_89E5 = $8A0C -DATA_B31_89F0 = $8A17 -DATA_B31_89FB = $8A22 -DATA_B31_8A06 = $8A2D -DATA_B31_8A11 = $8A38 -DATA_B31_8A1C = $8A43 -DATA_B31_8A1E = $8A45 -DATA_B31_8A20 = $8A47 -DATA_B31_8A24 = $8A4B -DATA_B31_8A2C = $8A53 -DATA_B31_8A30 = $8A57 -DATA_B31_8A32 = $8A59 -DATA_B31_8A34 = $8A5B -DATA_B31_8A44 = $8A6B -DATA_B31_8A4F = $8A76 -DATA_B31_8A5A = $8A81 -DATA_B31_8A65 = $8A8C -DATA_B31_8A70 = $8A97 -DATA_B31_8A7B = $8AA2 -DATA_B31_8A86 = $8AAD -DATA_B31_8A91 = $8AB8 -DATA_B31_8A93 = $8ABA -DATA_B31_8A95 = $8ABC -DATA_B31_8A97 = $8ABE -DATA_B31_8A99 = $8AC0 -DATA_B31_8A9B = $8AC2 -DATA_B31_8A9D = $8AC4 -DATA_B31_8A9F = $8AC6 -DATA_B31_8AA1 = $8AC8 -DATA_B31_8AA5 = $8ACC -DATA_B31_8AB0 = $8AD7 -DATA_B31_8AB8 = $8ADF -DATA_B31_8AC2 = $8AE9 -DATA_B31_8ACD = $8AF4 -DATA_B31_8AD8 = $8AFF -DATA_B31_8AE3 = $8B0A -DATA_B31_8AEE = $8B15 -DATA_B31_8AEF = $8B16 -DATA_B31_8AF0 = $8B17 -DATA_B31_8AF1 = $8B18 -DATA_B31_8AF5 = $8B1C -DATA_B31_8B00 = $8B27 -DATA_B31_8B02 = $8B29 -DATA_B31_8B06 = $8B2D -DATA_B31_8B11 = $8B38 -DATA_B31_8B12 = $8B39 -DATA_B31_8B16 = $8B3D -DATA_B31_8B21 = $8B48 -DATA_B31_8B2A = $8B51 -DATA_B31_8B30 = $8B57 -DATA_B31_8B3B = $8B62 -DATA_B31_8B46 = $8B6D -DATA_B31_8B62 = $8B89 -DATA_B31_8B6A = $8B91 -DATA_B31_8B75 = $8B9C -DATA_B31_8B80 = $8BA7 -DATA_B31_8B8B = $8BB2 -DATA_B31_8B8F = $8BB6 -DATA_B31_8B93 = $8BBA -DATA_B31_8B97 = $8BBE -DATA_B31_8B9F = $8BC6 -DATA_B31_8BAA = $8BD1 -DATA_B31_8BB5 = $8BDC -DATA_B31_8BC0 = $8BE7 -DATA_B31_8BC6 = $8BED -DATA_B31_8BCC = $8BF3 -DATA_B31_8BD2 = $8BF9 -DATA_B31_8BD8 = $8BFF -DATA_B31_8BE3 = $8C0A -DATA_B31_8BEE = $8C15 -DATA_B31_8BEF = $8C16 -DATA_B31_8BF0 = $8C17 -DATA_B31_8BFA = $8C21 -DATA_B31_8C05 = $8C2C -DATA_B31_8C10 = $8C37 -DATA_B31_8C1B = $8C42 -DATA_B31_8C26 = $8C4D -DATA_B31_8C28 = $8C4F -DATA_B31_8C2A = $8C51 -DATA_B31_8C2E = $8C55 -DATA_B31_8C32 = $8C59 -DATA_B31_8C3C = $8C63 -DATA_B31_8C47 = $8C6E -DATA_B31_8C52 = $8C79 -DATA_B31_8C5D = $8C84 -DATA_B31_8C68 = $8C8F -DATA_B31_8C70 = $8C97 -DATA_B31_8C78 = $8C9F -DATA_B31_8C80 = $8CA7 -DATA_B31_8C88 = $8CAF -DATA_B31_8C8C = $8CB3 -DATA_B31_8C97 = $8CBE -DATA_B31_8C98 = $8CBF -DATA_B31_8CA4 = $8CCB -DATA_B31_8CAF = $8CD6 -DATA_B31_8CBA = $8CE1 -DATA_B31_8CC5 = $8CEC -DATA_B31_8CD0 = $8CF7 -DATA_B31_8CDB = $8D02 -DATA_B31_8CE0 = $8D07 -DATA_B31_8CE5 = $8D0C -DATA_B31_8CEA = $8D11 -DATA_B31_8CEF = $8D16 -DATA_B31_8CF2 = $8D19 -DATA_B31_8CF8 = $8D1F -DATA_B31_8D03 = $8D2A -DATA_B31_8D0E = $8D35 -DATA_B31_8D16 = $8D3D -DATA_B31_8D1E = $8D45 -DATA_B31_8D24 = $8D4B -DATA_B31_8D2F = $8D56 -DATA_B31_8D3A = $8D61 -DATA_B31_8D3C = $8D63 -DATA_B31_8D3E = $8D65 -DATA_B31_8D42 = $8D69 -DATA_B31_8D4D = $8D74 -DATA_B31_8D4F = $8D76 -DATA_B31_8D57 = $8D7E -DATA_B31_8D62 = $8D89 -DATA_B31_8D6D = $8D94 -DATA_B31_8D78 = $8D9F -DATA_B31_8D7A = $8DA1 -DATA_B31_8D7C = $8DA3 -DATA_B31_8D7E = $8DA5 -DATA_B31_8D8B = $8DB2 -DATA_B31_8D8F = $8DB6 -DATA_B31_8D9A = $8DC1 -DATA_B31_8D9C = $8DC3 -DATA_B31_8DA6 = $8DCD -DATA_B31_8DB1 = $8DD8 -DATA_B31_8DBC = $8DE3 -DATA_B31_8DC7 = $8DEE -DATA_B31_8DD2 = $8DF9 -DATA_B31_8DD5 = $8DFC -DATA_B31_8DD8 = $8DFF -DATA_B31_8DDB = $8E02 -DATA_B31_8DDE = $8E05 -DATA_B31_8DE8 = $8E0F -DATA_B31_8DF3 = $8E1A -DATA_B31_8DFE = $8E25 -DATA_B31_8E09 = $8E30 -DATA_B31_8E14 = $8E3B -DATA_B31_8E17 = $8E3E -DATA_B31_8E1A = $8E41 -DATA_B31_8E1D = $8E44 -DATA_B31_8E20 = $8E47 -DATA_B31_8E28 = $8E4F -DATA_B31_8E33 = $8E5A -DATA_B31_8E3E = $8E65 -DATA_B31_8E49 = $8E70 -DATA_B31_8E4C = $8E73 -DATA_B31_8E4F = $8E76 -DATA_B31_8E52 = $8E79 -DATA_B31_8E5C = $8E83 -DATA_B31_8E67 = $8E8E -DATA_B31_8E72 = $8E99 -DATA_B31_8E7D = $8EA4 -DATA_B31_8E88 = $8EAF -DATA_B31_8E8E = $8EB5 -DATA_B31_8E94 = $8EBB -DATA_B31_8E9A = $8EC1 -DATA_B31_8E9D = $8EC4 -DATA_B31_8EA3 = $8ECA -DATA_B31_8EAE = $8ED5 -DATA_B31_8EB9 = $8EE0 -DATA_B31_8EBA = $8EE1 -DATA_B31_8EBB = $8EE2 -DATA_B31_8EC1 = $8EE8 -DATA_B31_8ECC = $8EF3 -DATA_B31_8ED7 = $8EFE -DATA_B31_8ED9 = $8F00 -DATA_B31_8EDB = $8F02 -DATA_B31_8EE5 = $8F0C -DATA_B31_8EF0 = $8F17 -DATA_B31_8EFB = $8F22 -DATA_B31_8F06 = $8F2D -DATA_B31_8F11 = $8F38 -DATA_B31_8F17 = $8F3E -DATA_B31_8F1D = $8F44 -DATA_B31_8F23 = $8F4A -DATA_B31_8F2D = $8F54 -DATA_B31_8F38 = $8F5F -DATA_B31_8F43 = $8F6A -DATA_B31_8F47 = $8F6E -DATA_B31_8F4B = $8F72 -DATA_B31_8F51 = $8F78 -DATA_B31_8F5C = $8F83 -DATA_B31_8F67 = $8F8E -DATA_B31_8F6D = $8F94 -DATA_B31_8F73 = $8F9A -DATA_B31_8F79 = $8FA0 -DATA_B31_8F84 = $8FAB -DATA_B31_8F85 = $8FAC -DATA_B31_8F89 = $8FB0 -DATA_B31_8F94 = $8FBB -DATA_B31_8F95 = $8FBC -DATA_B31_8F9D = $8FC4 -DATA_B31_8FA8 = $8FCF -DATA_B31_8FB3 = $8FDA -DATA_B31_8FBE = $8FE5 -DATA_B31_8FD2 = $8FF9 -DATA_B31_8FE6 = $900D -DATA_B31_8FF6 = $901D -DATA_B31_8FFC = $9023 -DATA_B31_9007 = $902E -DATA_B31_9012 = $9039 -DATA_B31_9013 = $903A -DATA_B31_9014 = $903B -DATA_B31_9024 = $904B -DATA_B31_902F = $9056 -DATA_B31_903A = $9061 -DATA_B31_9045 = $906C -DATA_B31_9050 = $9077 -DATA_B31_905B = $9082 -DATA_B31_9066 = $908D -DATA_B31_9071 = $9098 -DATA_B31_907B = $90A2 -DATA_B31_9085 = $90AC -DATA_B31_908F = $90B6 -DATA_B31_9099 = $90C0 -DATA_B31_90A3 = $90CA -DATA_B31_90AD = $90D4 -DATA_B31_90B7 = $90DE -DATA_B31_90C9 = $90F0 -DATA_B31_90D4 = $90FB -DATA_B31_90DF = $9106 -DATA_B31_90EA = $9111 -DATA_B31_90F5 = $911C -DATA_B31_9100 = $9127 -DATA_B31_910B = $9132 -DATA_B31_9116 = $913D -DATA_B31_9121 = $9148 -DATA_B31_9122 = $9149 -DATA_B31_9123 = $914A -DATA_B31_9124 = $914B -DATA_B31_9125 = $914C -DATA_B31_9126 = $914D -DATA_B31_9127 = $914E -DATA_B31_9128 = $914F -DATA_B31_9129 = $9150 -DATA_B31_9133 = $915A -DATA_B31_913E = $9165 -DATA_B31_9149 = $9170 -DATA_B31_9154 = $917B -DATA_B31_915F = $9186 -DATA_B31_916A = $9191 -DATA_B31_917E = $91A5 -DATA_B31_918E = $91B5 -DATA_B31_919E = $91C5 -DATA_B31_91A2 = $91C9 -DATA_B31_91AD = $91D4 -DATA_B31_91AF = $91D6 -DATA_B31_91BB = $91E2 -DATA_B31_91C6 = $91ED -DATA_B31_91D1 = $91F8 -DATA_B31_91DC = $9203 -DATA_B31_91E7 = $920E -DATA_B31_91F2 = $9219 -DATA_B31_91FC = $9223 -DATA_B31_9204 = $922B -DATA_B31_920E = $9235 -DATA_B31_9218 = $923F -DATA_B31_9232 = $9259 -DATA_B31_923D = $9264 -DATA_B31_9248 = $926F -DATA_B31_9253 = $927A -DATA_B31_925E = $9285 -DATA_B31_9269 = $9290 -DATA_B31_9274 = $929B -DATA_B31_927F = $92A6 -DATA_B31_928A = $92B1 -DATA_B31_9295 = $92BC -DATA_B31_92A0 = $92C7 -DATA_B31_92AB = $92D2 -DATA_B31_92B1 = $92D8 -DATA_B31_92B7 = $92DE -DATA_B31_92BD = $92E4 -DATA_B31_92C5 = $92EC -DATA_B31_92CF = $92F6 -DATA_B31_92D5 = $92FC -DATA_B31_92DB = $9302 -DATA_B31_92E1 = $9308 -DATA_B31_92E9 = $9310 -DATA_B31_92EF = $9316 -DATA_B31_92F5 = $931C -DATA_B31_92FD = $9324 -DATA_B31_9308 = $932F -DATA_B31_9313 = $933A -DATA_B31_931E = $9345 -DATA_B31_9324 = $934B -DATA_B31_9328 = $934F -DATA_B31_932E = $9355 -DATA_B31_9336 = $935D -DATA_B31_9341 = $9368 -DATA_B31_934C = $9373 -DATA_B31_9357 = $937E -DATA_B31_9359 = $9380 -DATA_B31_935B = $9382 -DATA_B31_935D = $9384 -DATA_B31_9363 = $938A -DATA_B31_936E = $9395 -DATA_B31_9379 = $93A0 -DATA_B31_937D = $93A4 -DATA_B31_9381 = $93A8 -DATA_B31_938B = $93B2 -DATA_B31_9396 = $93BD -DATA_B31_93A1 = $93C8 -DATA_B31_93AC = $93D3 -DATA_B31_93B7 = $93DE -DATA_B31_93B8 = $93DF -DATA_B31_93B9 = $93E0 -DATA_B31_93BE = $93E5 -DATA_B31_93C3 = $93EA -DATA_B31_93C9 = $93F0 -DATA_B31_93D4 = $93FB -DATA_B31_93DF = $9406 -DATA_B31_93E1 = $9408 -DATA_B31_93E3 = $940A -DATA_B31_93E7 = $940E -DATA_B31_93F2 = $9419 -DATA_B31_93FE = $9425 -DATA_B31_9406 = $942D -DATA_B31_9411 = $9438 -DATA_B31_941C = $9443 -DATA_B31_9427 = $944E -DATA_B31_9429 = $9450 -DATA_B31_942B = $9452 -DATA_B31_942D = $9454 -DATA_B31_9437 = $945E -DATA_B31_9442 = $9469 -DATA_B31_944D = $9474 -DATA_B31_9458 = $947F -DATA_B31_9463 = $948A -DATA_B31_9465 = $948C -DATA_B31_9467 = $948E -DATA_B31_9469 = $9490 -DATA_B31_946B = $9492 -DATA_B31_9483 = $94AA -DATA_B31_948E = $94B5 -DATA_B31_9499 = $94C0 -DATA_B31_94A4 = $94CB -DATA_B31_94AF = $94D6 -DATA_B31_94BA = $94E1 -DATA_B31_94C5 = $94EC -DATA_B31_94D0 = $94F7 -DATA_B31_94DB = $9502 -DATA_B31_94E6 = $950D -DATA_B31_94F1 = $9518 -DATA_B31_94FC = $9523 -DATA_B31_9500 = $9527 -DATA_B31_9502 = $9529 -DATA_B31_9506 = $952D -DATA_B31_950E = $9535 -DATA_B31_9512 = $9539 -DATA_B31_9516 = $953D -DATA_B31_951E = $9545 -DATA_B31_9526 = $954D -DATA_B31_952E = $9555 -DATA_B31_9536 = $955D -DATA_B31_953E = $9565 -DATA_B31_9552 = $9579 -DATA_B31_955D = $9584 -DATA_B31_9568 = $958F -DATA_B31_9573 = $959A -DATA_B31_957E = $95A5 -DATA_B31_9589 = $95B0 -DATA_B31_9594 = $95BB -DATA_B31_959F = $95C6 -DATA_B31_95AA = $95D1 -DATA_B31_95B5 = $95DC -DATA_B31_95BA = $95E1 -DATA_B31_95BF = $95E6 -DATA_B31_95C5 = $95EC -DATA_B31_95CA = $95F1 -DATA_B31_95D0 = $95F7 -DATA_B31_95D5 = $95FC -DATA_B31_95D8 = $95FF -DATA_B31_95DF = $9606 -DATA_B31_95E6 = $960D -DATA_B31_95EE = $9615 -DATA_B31_95F9 = $9620 -DATA_B31_9604 = $962B -DATA_B31_960F = $9636 -DATA_B31_9611 = $9638 -DATA_B31_9613 = $963A -DATA_B31_9615 = $963C -DATA_B31_9627 = $964E -DATA_B31_9632 = $9659 -DATA_B31_963D = $9664 -DATA_B31_9648 = $966F -DATA_B31_9653 = $967A -DATA_B31_965E = $9685 -DATA_B31_9669 = $9690 -DATA_B31_9674 = $969B -DATA_B31_967F = $96A6 -DATA_B31_968B = $96B2 -DATA_B31_9691 = $96B8 -DATA_B31_9694 = $96BB -DATA_B31_969A = $96C1 -DATA_B31_96A6 = $96CD -DATA_B31_96B2 = $96D9 -DATA_B31_96BE = $96E5 -DATA_B31_96CA = $96F1 -DATA_B31_96D2 = $96F9 -DATA_B31_96DD = $9704 -DATA_B31_96E8 = $970F -DATA_B31_96F3 = $971A -DATA_B31_96FB = $9722 -DATA_B31_9719 = $9740 -DATA_B31_9724 = $974B -DATA_B31_972F = $9756 -DATA_B31_973A = $9761 -DATA_B31_9745 = $976C -DATA_B31_9750 = $9777 -DATA_B31_975B = $9782 -DATA_B31_9766 = $978D -DATA_B31_9771 = $9798 -DATA_B31_977C = $97A3 -DATA_B31_9787 = $97AE -DATA_B31_9792 = $97B9 -DATA_B31_979D = $97C4 -DATA_B31_97A8 = $97CF -DATA_B31_97B3 = $97DA -DATA_B31_97B9 = $97E0 -DATA_B31_97BF = $97E6 -DATA_B31_97C5 = $97EC -DATA_B31_97CB = $97F2 -DATA_B31_97D3 = $97FA -DATA_B31_97D9 = $9800 -DATA_B31_97E1 = $9808 -DATA_B31_97E7 = $980E -DATA_B31_97ED = $9814 -DATA_B31_97F3 = $981A -DATA_B31_97F9 = $9820 -DATA_B31_97FF = $9826 -DATA_B31_9805 = $982C -DATA_B31_980B = $9832 -DATA_B31_983D = $9864 -DATA_B31_9848 = $986F -DATA_B31_9853 = $987A -DATA_B31_985E = $9885 -DATA_B31_9869 = $9890 -DATA_B31_9874 = $989B -DATA_B31_987F = $98A6 -DATA_B31_988A = $98B1 -DATA_B31_9895 = $98BC -DATA_B31_98A0 = $98C7 -DATA_B31_98AB = $98D2 -DATA_B31_98B6 = $98DD -DATA_B31_98C1 = $98E8 -DATA_B31_98C3 = $98EA -DATA_B31_98C5 = $98EC -DATA_B31_98C7 = $98EE -DATA_B31_98C9 = $98F0 -DATA_B31_98CB = $98F2 -DATA_B31_98CD = $98F4 -DATA_B31_98CF = $98F6 -DATA_B31_98D1 = $98F8 -DATA_B31_98D3 = $98FA -DATA_B31_98D5 = $98FC -DATA_B31_98D7 = $98FE -DATA_B31_98D9 = $9900 -DATA_B31_98E7 = $990E -DATA_B31_98F2 = $9919 -DATA_B31_98FD = $9924 -DATA_B31_9908 = $992F -DATA_B31_9913 = $993A -DATA_B31_991E = $9945 -DATA_B31_9929 = $9950 -DATA_B31_992A = $9951 -DATA_B31_992B = $9952 -DATA_B31_992C = $9953 -DATA_B31_992D = $9954 -DATA_B31_992E = $9955 -DATA_B31_992F = $9956 -DATA_B31_9935 = $995C -DATA_B31_9940 = $9967 -DATA_B31_994B = $9972 -DATA_B31_994C = $9973 -DATA_B31_994D = $9974 -DATA_B31_9961 = $9988 -DATA_B31_996C = $9993 -DATA_B31_9977 = $999E -DATA_B31_9982 = $99A9 -DATA_B31_998D = $99B4 -DATA_B31_9998 = $99BF -DATA_B31_99A3 = $99CA -DATA_B31_99AE = $99D5 -DATA_B31_99B8 = $99DF -DATA_B31_99C2 = $99E9 -DATA_B31_99CC = $99F3 -DATA_B31_99D6 = $99FD -DATA_B31_99E2 = $9A09 -DATA_B31_99EE = $9A15 -DATA_B31_99FA = $9A21 -DATA_B31_9A02 = $9A29 -DATA_B31_9A0D = $9A34 -DATA_B31_9A18 = $9A3F -DATA_B31_9A23 = $9A4A -DATA_B31_9A24 = $9A4B -DATA_B31_9A25 = $9A4C -DATA_B31_9A26 = $9A4D -DATA_B31_9A2A = $9A51 -DATA_B31_9A35 = $9A5C -DATA_B31_9A40 = $9A67 -DATA_B31_9A4C = $9A73 -DATA_B31_9A78 = $9A9F -DATA_B31_9A83 = $9AAA -DATA_B31_9A8E = $9AB5 -DATA_B31_9A99 = $9AC0 -DATA_B31_9AA4 = $9ACB -DATA_B31_9AAF = $9AD6 -DATA_B31_9ABA = $9AE1 -DATA_B31_9AC5 = $9AEC -DATA_B31_9AD0 = $9AF7 -DATA_B31_9ADB = $9B02 -DATA_B31_9AE6 = $9B0D -DATA_B31_9AF1 = $9B18 -DATA_B31_9AFC = $9B23 -DATA_B31_9B07 = $9B2E -DATA_B31_9B12 = $9B39 -DATA_B31_9B1D = $9B44 -DATA_B31_9B28 = $9B4F -DATA_B31_9B33 = $9B5A -DATA_B31_9B3E = $9B65 -DATA_B31_9B49 = $9B70 -DATA_B31_9B4F = $9B76 -DATA_B31_9B55 = $9B7C -DATA_B31_9B5B = $9B82 -DATA_B31_9B61 = $9B88 -DATA_B31_9B67 = $9B8E -DATA_B31_9B6D = $9B94 -DATA_B31_9B73 = $9B9A -DATA_B31_9B79 = $9BA0 -DATA_B31_9B7F = $9BA6 -DATA_B31_9B85 = $9BAC -DATA_B31_9B8B = $9BB2 -DATA_B31_9B91 = $9BB8 -DATA_B31_9B97 = $9BBE -DATA_B31_9B9D = $9BC4 -DATA_B31_9BA3 = $9BCA -DATA_B31_9BA9 = $9BD0 -DATA_B31_9BAF = $9BD6 -DATA_B31_9BB5 = $9BDC -DATA_B31_9BBB = $9BE2 -DATA_B31_9BC1 = $9BE8 -DATA_B31_9BCC = $9BF3 -DATA_B31_9BD7 = $9BFE -DATA_B31_9BE2 = $9C09 -DATA_B31_9BED = $9C14 -DATA_B31_9C03 = $9C2A -DATA_B31_9C0E = $9C35 -DATA_B31_9C19 = $9C40 -DATA_B31_9C24 = $9C4B -DATA_B31_9C2F = $9C56 -DATA_B31_9C3A = $9C61 -DATA_B31_9C45 = $9C6C -DATA_B31_9C50 = $9C77 -DATA_B31_9C5B = $9C82 -DATA_B31_9C66 = $9C8D -DATA_B31_9C6A = $9C91 -DATA_B31_9C6E = $9C95 -DATA_B31_9C76 = $9C9D -DATA_B31_9C7E = $9CA5 -DATA_B31_9C86 = $9CAD -DATA_B31_9C8E = $9CB5 -DATA_B31_9C96 = $9CBD -DATA_B31_9C9E = $9CC5 -DATA_B31_9CAC = $9CD3 -DATA_B31_9CB7 = $9CDE -DATA_B31_9CC2 = $9CE9 -DATA_B31_9CCD = $9CF4 -DATA_B31_9CD8 = $9CFF -DATA_B31_9CE3 = $9D0A -DATA_B31_9CEE = $9D15 -DATA_B31_9CF0 = $9D17 -DATA_B31_9CF2 = $9D19 -DATA_B31_9CF4 = $9D1B -DATA_B31_9CF6 = $9D1D -DATA_B31_9CF8 = $9D1F -DATA_B31_9CFA = $9D21 -DATA_B31_9D00 = $9D27 -DATA_B31_9D0B = $9D32 -DATA_B31_9D16 = $9D3D -DATA_B31_9D22 = $9D49 -DATA_B31_9D32 = $9D59 -DATA_B31_A14A = $A171 -DATA_B31_A606 = $A62D -DATA_B31_A676 = $A69D -DATA_B31_A696 = $A6BD -DATA_B31_A69E = $A6C5 -DATA_B31_A70E = $A737 -DATA_B31_A71A = $A743 -DATA_B31_A73E = $A757 -DATA_B31_A772 = $A79B -DATA_B31_A788 = $A7B1 -DATA_B31_A78E = $A7B7 -DATA_B31_A819 = $A83F -DATA_B31_A863 = $A889 -DATA_B31_A875 = $A89B -DATA_B31_A87B = $A8A1 -DATA_B31_A895 = $A8BB -DATA_B31_A8A7 = $A8CD -DATA_B31_A8B9 = $A8DF -DATA_B31_A8CB = $A8F1 -DATA_B31_A8D5 = $A8FB -DATA_B31_A8DD = $A903 -DATA_B31_A8E5 = $A90B -DATA_B31_A8EB = $A911 -DATA_B31_A8F1 = $A917 -DATA_B31_A903 = $A929 -DATA_B31_A90B = $A931 -DATA_B31_A921 = $A947 -DATA_B31_A937 = $A95D -DATA_B31_A953 = $A979 -DATA_B31_A987 = $A9AD -DATA_B31_A993 = $A9B6 -DATA_B31_A99D = $A9C0 -DATA_B31_A9B7 = $A9DA -DATA_B31_A9D1 = $A9F4 -DATA_B31_A9E9 = $AA0C -DATA_B31_AA09 = $AA2C -DATA_B31_AA31 = $AA54 -DATA_B31_AA97 = $AABA -DATA_B31_AAB1 = $AAD4 -DATA_B31_AAF6 = $AB19 -DATA_B31_AB7A = $ABAB -DATA_B31_AB84 = $ABB5 -DATA_B31_AC98 = $ACC5 -DATA_B31_ACB8 = $ACE5 -DATA_B31_ACEB = $AD18 -DATA_B31_ACEF = $AD1C -DATA_B31_ACF8 = $AD22 -DATA_B31_AE00 = $AE29 -DATA_B31_AF72 = $AF9B -DATA_B31_AF78 = $AFA1 -DATA_B31_AF7E = $AFA7 -DATA_B31_AF90 = $AFB9 -DATA_B31_AFFB = $B025 -DATA_B31_B009 = $B033 -DATA_B31_B07E = $B0A4 -DATA_B31_B084 = $B0AA -DATA_B31_B470 = $B48E -DATA_B31_B513 = $B52B -DATA_B31_B517 = $B52F -DATA_B31_B51D = $B535 -DATA_B31_B590 = $B5A2 -DATA_B31_BA42 = $BA21 -DATA_B31_BA7A = $BA59 -DATA_B31_BA86 = $BA65 -DATA_B31_BA8A = $BA69 -DATA_B31_BA90 = $BA6F -DATA_B31_BBC6 = $BBA7 -DATA_B31_BBCA = $BBAB -DATA_B31_BBD0 = $BBB1 -DATA_PLAYERSPRITES = $BCAC -DATA_PLAYERSPRITES_MIRRORED = $BE44 -EXPLOSION_STATE_00 = $B6A5 -EXPLOSION_STATE_01 = $B6AB -EXPLOSION_STATE_01_LOGIC_01 = $B6FC -EXPLOSION_STATE_01_LOGIC_02 = $B6CD -EXPLOSION_STATE_01_LOGIC_03 = $B6FD -FALLINGSPIKE_CHECKCOLLISION = $BAE6 -FALLINGSPIKE_INIT = $BADA -FALLINGSPIKE_STATE_00 = $BA8C -FALLINGSPIKE_STATE_01 = $BA92 -FALLINGSPIKE_STATE_02 = $BA98 -FALLINGSPIKE_STATE_03 = $BABD -FALLINGSPIKE_STATE_04 = $BAC3 -FALLINGSPIKE_STATE_05 = $BAD4 -HIDETIMERRINGS_INIT = $AF74 -HIDETIMERRINGS_MOVESPRITES = $AF81 -HIDETIMERRINGS_STATE_00 = $AF68 -HIDETIMERRINGS_STATE_01 = $AF6E -INTROCLOUDSANDPALETTE_INIT = $BC03 -INTROCLOUDSANDPALETTE_STATE_00 = $BBF7 -INTROCLOUDSANDPALETTE_STATE_01 = $BBFD -INTROTREE_ADJUSTHPOS = $BC6F -INTROTREE_INIT = $BC52 -INTROTREE_STATE_00 = $BC46 -INTROTREE_STATE_01 = $BC4C -INVINCIBILITYSTARS_STATE_00 = $AE33 -INVINCIBILITYSTARS_STATE_00_LOGIC_01 = $AF3D -INVINCIBILITYSTARS_STATE_01 = $AE39 -INVINCIBILITYSTARS_STATE_01_LOGIC_01 = $AF50 -INVINCIBILITYSTARS_STATE_02 = $AEBB -LABEL_B31_A967 = $A98D -LABEL_B31_A96E = $A994 -LABEL_B31_A972 = $A998 -LABEL_B31_AA37 = $AA5A -LABEL_B31_AA3C = $AA5F -LABEL_B31_AA41 = $AA64 -LABEL_B31_AA54 = $AA77 -LABEL_B31_AA6D = $AA90 -LABEL_B31_AA81 = $AAA4 -LABEL_B31_AB06 = $AB37 -LABEL_B31_AB34 = $AB65 -LABEL_B31_AB4C = $AB7D -LABEL_B31_AB64 = $AB95 -LABEL_B31_AB8C = $ABBD -LABEL_B31_ABA2 = $ABD3 -LABEL_B31_ABC6 = $ABF7 -LABEL_B31_ABFD = $AC2E -LABEL_B31_AC20 = $AC51 -LABEL_B31_AD00 = $AD2A -LABEL_B31_AD88 = $ADB2 -LABEL_B31_ADB3 = $ADDD -LABEL_B31_AFAA = $AFD3 -LABEL_B31_B017 = $B041 -LABEL_B31_B06C = $B097 -LABEL_B31_B079 = $B09F -LABEL_B31_B22D = $B23C -LABEL_B31_B245 = $B254 -LABEL_B31_B24C = $B25B -LABEL_B31_B250 = $B25F -LABEL_B31_B272 = $B281 -LABEL_B31_B2B6 = $B2C5 -LABEL_B31_B307 = $B326 -LABEL_B31_B30C = $B32B -LABEL_B31_B311 = $B330 -LABEL_B31_B341 = $B35F -LABEL_B31_B35E = $B37C -LABEL_B31_B375 = $B393 -LABEL_B31_B3BD = $B3DB -LABEL_B31_B3D2 = $B3F0 -LABEL_B31_B3F2 = $B411 -LABEL_B31_B3FE = $B41D -LABEL_B31_B4A0 = $B4BE -LABEL_B31_B4CE = $B4EA -LABEL_B31_B523 = $B53B -LABEL_B31_B53E = $B556 -LABEL_B31_B584 = $B59C -LABEL_B31_B6D9 = $B6E7 -LABEL_B31_B702 = $B70E -LABEL_B31_B70B = $B717 -LABEL_B31_B901 = $B8F9 -LABEL_B31_B912 = $B90A -LABEL_B31_B981 = $B974 -LABEL_B31_B9A0 = $B993 -LABEL_B31_B9C2 = $B9B0 -LABEL_B31_B9F3 = $B9D7 -LABEL_B31_BA23 = $BA02 -LABEL_B31_BA96 = $BA75 -LABEL_B31_BAFB = $BADA -LABEL_B31_BB0B = $BAEA -LABEL_B31_BB29 = $BB09 -LABEL_B31_BB40 = $BB20 -LABEL_B31_BB5C = $BB3D -LABEL_B31_BB61 = $BB42 -LABEL_B31_BBD6 = $BBB7 -LABEL_B31_BBF9 = $BBDA -LABEL_B31_BC45 = $BC26 -LABEL_B31_BCA2 = $BC83 -LOGIC_AIRCOUNTDOWN = $B0A0 -LOGIC_ALZ_BUBBLE = $B14E -LOGIC_ALZ_BUBBLE_GETPLAYERPOS = $B3C4 -LOGIC_ALZ_BUBBLE_SETPOSITION = $B3AB -LOGIC_BLOCKFRAGMENT = $AC52 -LOGIC_BUBBLE_SETHORIZONTALSPEED = $B3F7 -LOGIC_CHAOSEMERALD = $B7E0 -LOGIC_DATA_MONITORTYPES = $B7C2 -LOGIC_DROPPEDRING = $AF9B -LOGIC_EXPLOSION = $B69F -LOGIC_FALLINGSPIKE = $BA59 -LOGIC_HIDETIMERRINGS = $AF64 -LOGIC_INTROCLOUDSANDPALETTE = $BBF3 -LOGIC_INTROTREE = $BC42 -LOGIC_INVINCIBILITYSTARS = $AE2D -LOGIC_MONITORS = $B71C -LOGIC_RINGSPARKLE = $AC12 -LOGIC_SIGNPOST = $B89A -LOGIC_SONIC = $A6CD -LOGIC_SONIC_LOADNEXTLEVEL = $AB31 -LOGIC_SPEEDSHOESSTARS = $AD62 -LOGIC_SPEEDSHOESSTARS_STATE0 = $AD68 -LOGIC_SPEEDSHOESSTARS_STATE1 = $AD6E -LOGIC_SPEEDSHOESSTARS_STATE2 = $AD90 -LOGIC_UGZ_FIREBALL = $B5C2 -LOGIC_WATERSPLASH = $B4EF -MONITOR_CHECKCOLLISIONS = $B75C -MONITOR_CHECKCOLLISIONS_ABOVE = $B781 -MONITOR_EMERALD_CHECKLOADTILES = $B7CC -MONITOR_INIT = $B748 -MONITOR_LOADTILES = $B751 -MONITOR_SETCOLLISIONVALUE = $B7A3 -MONITORS_STATE_00 = $B722 -MONITORS_STATE_01 = $B728 -MONITORS_STATE_02 = $B72E +DATA_B31_85C9 = $85DA +DATA_B31_85D1 = $85E2 +DATA_B31_85D7 = $85E8 +DATA_B31_85E2 = $85F3 +DATA_B31_85ED = $85FE +DATA_B31_85EE = $85FF +DATA_B31_85EF = $8600 +DATA_B31_8631 = $8642 +DATA_B31_863C = $864D +DATA_B31_8647 = $8658 +DATA_B31_8652 = $8663 +DATA_B31_865D = $866E +DATA_B31_8668 = $8679 +DATA_B31_8673 = $8684 +DATA_B31_867E = $868F +DATA_B31_8689 = $869A +DATA_B31_8694 = $86A5 +DATA_B31_869F = $86B0 +DATA_B31_86AA = $86BB +DATA_B31_86B5 = $86C6 +DATA_B31_86C0 = $86D1 +DATA_B31_86CB = $86DC +DATA_B31_86D6 = $86E7 +DATA_B31_86E1 = $86F2 +DATA_B31_86EC = $86FD +DATA_B31_86F7 = $8708 +DATA_B31_8702 = $8713 +DATA_B31_870D = $871E +DATA_B31_8718 = $8729 +DATA_B31_8723 = $8734 +DATA_B31_872E = $873F +DATA_B31_8739 = $874A +DATA_B31_8744 = $8755 +DATA_B31_874F = $8760 +DATA_B31_875A = $876B +DATA_B31_8765 = $8776 +DATA_B31_8770 = $8781 +DATA_B31_877B = $878C +DATA_B31_8786 = $8797 +DATA_B31_8791 = $87A2 +DATA_B31_8793 = $87A4 +DATA_B31_8797 = $87A8 +DATA_B31_87A2 = $87B3 +DATA_B31_87A3 = $87B4 +DATA_B31_87A5 = $87B6 +DATA_B31_87AF = $87C0 +DATA_B31_87BA = $87CB +DATA_B31_87C5 = $87D6 +DATA_B31_87D0 = $87E1 +DATA_B31_87DB = $87EC +DATA_B31_87DC = $87ED +DATA_B31_87DD = $87EE +DATA_B31_87DE = $87EF +DATA_B31_87DF = $87F0 +DATA_B31_87ED = $87FE +DATA_B31_87F8 = $8809 +DATA_B31_8803 = $8814 +DATA_B31_880E = $881F +DATA_B31_8819 = $882A +DATA_B31_881B = $882C +DATA_B31_881D = $882E +DATA_B31_881F = $8830 +DATA_B31_8821 = $8832 +DATA_B31_882F = $8840 +DATA_B31_883A = $884B +DATA_B31_8845 = $8856 +DATA_B31_8850 = $8861 +DATA_B31_885B = $886C +DATA_B31_8866 = $8877 +DATA_B31_8871 = $8882 +DATA_B31_8872 = $8883 +DATA_B31_8873 = $8884 +DATA_B31_8874 = $8885 +DATA_B31_8875 = $8886 +DATA_B31_8876 = $8887 +DATA_B31_8877 = $8888 +DATA_B31_8885 = $8896 +DATA_B31_8890 = $88A1 +DATA_B31_889B = $88AC +DATA_B31_88A6 = $88B7 +DATA_B31_88B1 = $88C2 +DATA_B31_88BC = $88CD +DATA_B31_88C7 = $88D8 +DATA_B31_88CD = $88DE +DATA_B31_88CF = $88E0 +DATA_B31_88D5 = $88E6 +DATA_B31_88DD = $88EE +DATA_B31_88E3 = $88F4 +DATA_B31_88EE = $88FF +DATA_B31_88F9 = $890A +DATA_B31_88FB = $890C +DATA_B31_88FF = $8910 +DATA_B31_890A = $891B +DATA_B31_890C = $891D +DATA_B31_8912 = $8923 +DATA_B31_891D = $892E +DATA_B31_8928 = $8939 +DATA_B31_892A = $893B +DATA_B31_892C = $893D +DATA_B31_8934 = $8945 +DATA_B31_893F = $8950 +DATA_B31_894A = $895B +DATA_B31_8955 = $8966 +DATA_B31_8956 = $8967 +DATA_B31_8957 = $8968 +DATA_B31_898C = $899D +DATA_B31_8997 = $89A8 +DATA_B31_89A2 = $89B3 +DATA_B31_89A8 = $89B9 +DATA_B31_89AE = $89BF +DATA_B31_89B2 = $89C3 +DATA_B31_89BD = $89CE +DATA_B31_89BF = $89D0 +DATA_B31_89CF = $89E0 +DATA_B31_89DA = $89EB +DATA_B31_89E5 = $89F6 +DATA_B31_89F0 = $8A01 +DATA_B31_89FB = $8A0C +DATA_B31_8A06 = $8A17 +DATA_B31_8A11 = $8A22 +DATA_B31_8A1C = $8A2D +DATA_B31_8A1E = $8A2F +DATA_B31_8A20 = $8A31 +DATA_B31_8A24 = $8A35 +DATA_B31_8A2C = $8A3D +DATA_B31_8A30 = $8A41 +DATA_B31_8A32 = $8A43 +DATA_B31_8A34 = $8A45 +DATA_B31_8A44 = $8A55 +DATA_B31_8A4F = $8A60 +DATA_B31_8A5A = $8A6B +DATA_B31_8A65 = $8A76 +DATA_B31_8A70 = $8A81 +DATA_B31_8A7B = $8A8C +DATA_B31_8A86 = $8A97 +DATA_B31_8A91 = $8AA2 +DATA_B31_8A93 = $8AA4 +DATA_B31_8A95 = $8AA6 +DATA_B31_8A97 = $8AA8 +DATA_B31_8A99 = $8AAA +DATA_B31_8A9B = $8AAC +DATA_B31_8A9D = $8AAE +DATA_B31_8A9F = $8AB0 +DATA_B31_8AA1 = $8AB2 +DATA_B31_8AA5 = $8AB6 +DATA_B31_8AB0 = $8AC1 +DATA_B31_8AB8 = $8AC9 +DATA_B31_8AC2 = $8AD3 +DATA_B31_8ACD = $8ADE +DATA_B31_8AD8 = $8AE9 +DATA_B31_8AE3 = $8AF4 +DATA_B31_8AEE = $8AFF +DATA_B31_8AEF = $8B00 +DATA_B31_8AF0 = $8B01 +DATA_B31_8AF1 = $8B02 +DATA_B31_8AF5 = $8B06 +DATA_B31_8B00 = $8B11 +DATA_B31_8B02 = $8B13 +DATA_B31_8B06 = $8B17 +DATA_B31_8B11 = $8B22 +DATA_B31_8B12 = $8B23 +DATA_B31_8B16 = $8B27 +DATA_B31_8B21 = $8B32 +DATA_B31_8B2A = $8B3B +DATA_B31_8B30 = $8B41 +DATA_B31_8B3B = $8B4C +DATA_B31_8B46 = $8B57 +DATA_B31_8B62 = $8B73 +DATA_B31_8B6A = $8B7B +DATA_B31_8B75 = $8B86 +DATA_B31_8B80 = $8B91 +DATA_B31_8B8B = $8B9C +DATA_B31_8B8F = $8BA0 +DATA_B31_8B93 = $8BA4 +DATA_B31_8B97 = $8BA8 +DATA_B31_8B9F = $8BB0 +DATA_B31_8BAA = $8BBB +DATA_B31_8BB5 = $8BC6 +DATA_B31_8BC0 = $8BD1 +DATA_B31_8BC6 = $8BD7 +DATA_B31_8BCC = $8BDD +DATA_B31_8BD2 = $8BE3 +DATA_B31_8BD8 = $8BE9 +DATA_B31_8BE3 = $8BF4 +DATA_B31_8BEE = $8BFF +DATA_B31_8BEF = $8C00 +DATA_B31_8BF0 = $8C01 +DATA_B31_8BFA = $8C0B +DATA_B31_8C05 = $8C16 +DATA_B31_8C10 = $8C21 +DATA_B31_8C1B = $8C2C +DATA_B31_8C26 = $8C37 +DATA_B31_8C28 = $8C39 +DATA_B31_8C2A = $8C3B +DATA_B31_8C2E = $8C3F +DATA_B31_8C32 = $8C43 +DATA_B31_8C3C = $8C4D +DATA_B31_8C47 = $8C58 +DATA_B31_8C52 = $8C63 +DATA_B31_8C5D = $8C6E +DATA_B31_8C68 = $8C79 +DATA_B31_8C70 = $8C81 +DATA_B31_8C78 = $8C89 +DATA_B31_8C80 = $8C91 +DATA_B31_8C88 = $8C99 +DATA_B31_8C8C = $8C9D +DATA_B31_8C97 = $8CA8 +DATA_B31_8C98 = $8CA9 +DATA_B31_8CA4 = $8CB5 +DATA_B31_8CAF = $8CC0 +DATA_B31_8CBA = $8CCB +DATA_B31_8CC5 = $8CD6 +DATA_B31_8CD0 = $8CE1 +DATA_B31_8CDB = $8CEC +DATA_B31_8CE0 = $8CF1 +DATA_B31_8CE5 = $8CF6 +DATA_B31_8CEA = $8CFB +DATA_B31_8CEF = $8D00 +DATA_B31_8CF2 = $8D03 +DATA_B31_8CF8 = $8D09 +DATA_B31_8D03 = $8D14 +DATA_B31_8D0E = $8D1F +DATA_B31_8D16 = $8D27 +DATA_B31_8D1E = $8D2F +DATA_B31_8D24 = $8D35 +DATA_B31_8D2F = $8D40 +DATA_B31_8D3A = $8D4B +DATA_B31_8D3C = $8D4D +DATA_B31_8D3E = $8D4F +DATA_B31_8D42 = $8D53 +DATA_B31_8D4D = $8D5E +DATA_B31_8D4F = $8D60 +DATA_B31_8D57 = $8D68 +DATA_B31_8D62 = $8D73 +DATA_B31_8D6D = $8D7E +DATA_B31_8D78 = $8D89 +DATA_B31_8D7A = $8D8B +DATA_B31_8D7C = $8D8D +DATA_B31_8D7E = $8D8F +DATA_B31_8D8B = $8D9C +DATA_B31_8D8F = $8DA0 +DATA_B31_8D9A = $8DAB +DATA_B31_8D9C = $8DAD +DATA_B31_8DA6 = $8DB7 +DATA_B31_8DB1 = $8DC2 +DATA_B31_8DBC = $8DCD +DATA_B31_8DC7 = $8DD8 +DATA_B31_8DD2 = $8DE3 +DATA_B31_8DD5 = $8DE6 +DATA_B31_8DD8 = $8DE9 +DATA_B31_8DDB = $8DEC +DATA_B31_8DDE = $8DEF +DATA_B31_8DE8 = $8DF9 +DATA_B31_8DF3 = $8E04 +DATA_B31_8DFE = $8E0F +DATA_B31_8E09 = $8E1A +DATA_B31_8E14 = $8E25 +DATA_B31_8E17 = $8E28 +DATA_B31_8E1A = $8E2B +DATA_B31_8E1D = $8E2E +DATA_B31_8E20 = $8E31 +DATA_B31_8E28 = $8E39 +DATA_B31_8E33 = $8E44 +DATA_B31_8E3E = $8E4F +DATA_B31_8E49 = $8E5A +DATA_B31_8E4C = $8E5D +DATA_B31_8E4F = $8E60 +DATA_B31_8E52 = $8E63 +DATA_B31_8E5C = $8E6D +DATA_B31_8E67 = $8E78 +DATA_B31_8E72 = $8E83 +DATA_B31_8E7D = $8E8E +DATA_B31_8E88 = $8E99 +DATA_B31_8E8E = $8E9F +DATA_B31_8E94 = $8EA5 +DATA_B31_8E9A = $8EAB +DATA_B31_8E9D = $8EAE +DATA_B31_8EA3 = $8EB4 +DATA_B31_8EAE = $8EBF +DATA_B31_8EB9 = $8ECA +DATA_B31_8EBA = $8ECB +DATA_B31_8EBB = $8ECC +DATA_B31_8EC1 = $8ED2 +DATA_B31_8ECC = $8EDD +DATA_B31_8ED7 = $8EE8 +DATA_B31_8ED9 = $8EEA +DATA_B31_8EDB = $8EEC +DATA_B31_8EE5 = $8EF6 +DATA_B31_8EF0 = $8F01 +DATA_B31_8EFB = $8F0C +DATA_B31_8F06 = $8F17 +DATA_B31_8F11 = $8F22 +DATA_B31_8F17 = $8F28 +DATA_B31_8F1D = $8F2E +DATA_B31_8F23 = $8F34 +DATA_B31_8F2D = $8F3E +DATA_B31_8F38 = $8F49 +DATA_B31_8F43 = $8F54 +DATA_B31_8F47 = $8F58 +DATA_B31_8F4B = $8F5C +DATA_B31_8F51 = $8F62 +DATA_B31_8F5C = $8F6D +DATA_B31_8F67 = $8F78 +DATA_B31_8F6D = $8F7E +DATA_B31_8F73 = $8F84 +DATA_B31_8F79 = $8F8A +DATA_B31_8F84 = $8F95 +DATA_B31_8F85 = $8F96 +DATA_B31_8F89 = $8F9A +DATA_B31_8F94 = $8FA5 +DATA_B31_8F95 = $8FA6 +DATA_B31_8F9D = $8FAE +DATA_B31_8FA8 = $8FB9 +DATA_B31_8FB3 = $8FC4 +DATA_B31_8FBE = $8FCF +DATA_B31_8FD2 = $8FE3 +DATA_B31_8FE6 = $8FF7 +DATA_B31_8FF6 = $9007 +DATA_B31_8FFC = $900D +DATA_B31_9007 = $9018 +DATA_B31_9012 = $9023 +DATA_B31_9013 = $9024 +DATA_B31_9014 = $9025 +DATA_B31_9024 = $9035 +DATA_B31_902F = $9040 +DATA_B31_903A = $904B +DATA_B31_9045 = $9056 +DATA_B31_9050 = $9061 +DATA_B31_905B = $906C +DATA_B31_9066 = $9077 +DATA_B31_9071 = $9082 +DATA_B31_907B = $908C +DATA_B31_9085 = $9096 +DATA_B31_908F = $90A0 +DATA_B31_9099 = $90AA +DATA_B31_90A3 = $90B4 +DATA_B31_90AD = $90BE +DATA_B31_90B7 = $90C8 +DATA_B31_90C9 = $90DA +DATA_B31_90D4 = $90E5 +DATA_B31_90DF = $90F0 +DATA_B31_90EA = $90FB +DATA_B31_90F5 = $9106 +DATA_B31_9100 = $9111 +DATA_B31_910B = $911C +DATA_B31_9116 = $9127 +DATA_B31_9121 = $9132 +DATA_B31_9122 = $9133 +DATA_B31_9123 = $9134 +DATA_B31_9124 = $9135 +DATA_B31_9125 = $9136 +DATA_B31_9126 = $9137 +DATA_B31_9127 = $9138 +DATA_B31_9128 = $9139 +DATA_B31_9129 = $913A +DATA_B31_9133 = $9144 +DATA_B31_913E = $914F +DATA_B31_9149 = $915A +DATA_B31_9154 = $9165 +DATA_B31_915F = $9170 +DATA_B31_916A = $917B +DATA_B31_917E = $918F +DATA_B31_918E = $919F +DATA_B31_919E = $91AF +DATA_B31_91A2 = $91B3 +DATA_B31_91AD = $91BE +DATA_B31_91AF = $91C0 +DATA_B31_91BB = $91CC +DATA_B31_91C6 = $91D7 +DATA_B31_91D1 = $91E2 +DATA_B31_91DC = $91ED +DATA_B31_91E7 = $91F8 +DATA_B31_91F2 = $9203 +DATA_B31_91FC = $920D +DATA_B31_9204 = $9215 +DATA_B31_920E = $921F +DATA_B31_9218 = $9229 +DATA_B31_9232 = $9243 +DATA_B31_923D = $924E +DATA_B31_9248 = $9259 +DATA_B31_9253 = $9264 +DATA_B31_925E = $926F +DATA_B31_9269 = $927A +DATA_B31_9274 = $9285 +DATA_B31_927F = $9290 +DATA_B31_928A = $929B +DATA_B31_9295 = $92A6 +DATA_B31_92A0 = $92B1 +DATA_B31_92AB = $92BC +DATA_B31_92B1 = $92C2 +DATA_B31_92B7 = $92C8 +DATA_B31_92BD = $92CE +DATA_B31_92C5 = $92D6 +DATA_B31_92CF = $92E0 +DATA_B31_92D5 = $92E6 +DATA_B31_92DB = $92EC +DATA_B31_92E1 = $92F2 +DATA_B31_92E9 = $92FA +DATA_B31_92EF = $9300 +DATA_B31_92F5 = $9306 +DATA_B31_92FD = $930E +DATA_B31_9308 = $9319 +DATA_B31_9313 = $9324 +DATA_B31_931E = $932F +DATA_B31_9324 = $9335 +DATA_B31_9328 = $9339 +DATA_B31_932E = $933F +DATA_B31_9336 = $9347 +DATA_B31_9341 = $9352 +DATA_B31_934C = $935D +DATA_B31_9357 = $9368 +DATA_B31_9359 = $936A +DATA_B31_935B = $936C +DATA_B31_935D = $936E +DATA_B31_9363 = $9374 +DATA_B31_936E = $937F +DATA_B31_9379 = $938A +DATA_B31_937D = $938E +DATA_B31_9381 = $9392 +DATA_B31_938B = $939C +DATA_B31_9396 = $93A7 +DATA_B31_93A1 = $93B2 +DATA_B31_93AC = $93BD +DATA_B31_93B7 = $93C8 +DATA_B31_93B8 = $93C9 +DATA_B31_93B9 = $93CA +DATA_B31_93BE = $93CF +DATA_B31_93C3 = $93D4 +DATA_B31_93C9 = $93DA +DATA_B31_93D4 = $93E5 +DATA_B31_93DF = $93F0 +DATA_B31_93E1 = $93F2 +DATA_B31_93E3 = $93F4 +DATA_B31_93E7 = $93F8 +DATA_B31_93F2 = $9403 +DATA_B31_93FE = $940F +DATA_B31_9406 = $9417 +DATA_B31_9411 = $9422 +DATA_B31_941C = $942D +DATA_B31_9427 = $9438 +DATA_B31_9429 = $943A +DATA_B31_942B = $943C +DATA_B31_942D = $943E +DATA_B31_9437 = $9448 +DATA_B31_9442 = $9453 +DATA_B31_944D = $945E +DATA_B31_9458 = $9469 +DATA_B31_9463 = $9474 +DATA_B31_9465 = $9476 +DATA_B31_9467 = $9478 +DATA_B31_9469 = $947A +DATA_B31_946B = $947C +DATA_B31_9483 = $9494 +DATA_B31_948E = $949F +DATA_B31_9499 = $94AA +DATA_B31_94A4 = $94B5 +DATA_B31_94AF = $94C0 +DATA_B31_94BA = $94CB +DATA_B31_94C5 = $94D6 +DATA_B31_94D0 = $94E1 +DATA_B31_94DB = $94EC +DATA_B31_94E6 = $94F7 +DATA_B31_94F1 = $9502 +DATA_B31_94FC = $950D +DATA_B31_9500 = $9511 +DATA_B31_9502 = $9513 +DATA_B31_9506 = $9517 +DATA_B31_950E = $951F +DATA_B31_9512 = $9523 +DATA_B31_9516 = $9527 +DATA_B31_951E = $952F +DATA_B31_9526 = $9537 +DATA_B31_952E = $953F +DATA_B31_9536 = $9547 +DATA_B31_953E = $954F +DATA_B31_9552 = $9563 +DATA_B31_955D = $956E +DATA_B31_9568 = $9579 +DATA_B31_9573 = $9584 +DATA_B31_957E = $958F +DATA_B31_9589 = $959A +DATA_B31_9594 = $95A5 +DATA_B31_959F = $95B0 +DATA_B31_95AA = $95BB +DATA_B31_95B5 = $95C6 +DATA_B31_95BA = $95CB +DATA_B31_95BF = $95D0 +DATA_B31_95C5 = $95D6 +DATA_B31_95CA = $95DB +DATA_B31_95D0 = $95E1 +DATA_B31_95D5 = $95E6 +DATA_B31_95D8 = $95E9 +DATA_B31_95DF = $95F0 +DATA_B31_95E6 = $95F7 +DATA_B31_95EE = $95FF +DATA_B31_95F9 = $960A +DATA_B31_9604 = $9615 +DATA_B31_960F = $9620 +DATA_B31_9611 = $9622 +DATA_B31_9613 = $9624 +DATA_B31_9615 = $9626 +DATA_B31_9627 = $9638 +DATA_B31_9632 = $9643 +DATA_B31_963D = $964E +DATA_B31_9648 = $9659 +DATA_B31_9653 = $9664 +DATA_B31_965E = $966F +DATA_B31_9669 = $967A +DATA_B31_9674 = $9685 +DATA_B31_967F = $9690 +DATA_B31_968B = $969C +DATA_B31_9691 = $96A2 +DATA_B31_9694 = $96A5 +DATA_B31_969A = $96AB +DATA_B31_96A6 = $96B7 +DATA_B31_96B2 = $96C3 +DATA_B31_96BE = $96CF +DATA_B31_96CA = $96DB +DATA_B31_96D2 = $96E3 +DATA_B31_96DD = $96EE +DATA_B31_96E8 = $96F9 +DATA_B31_96F3 = $9704 +DATA_B31_96FB = $970C +DATA_B31_9719 = $972A +DATA_B31_9724 = $9735 +DATA_B31_972F = $9740 +DATA_B31_973A = $974B +DATA_B31_9745 = $9756 +DATA_B31_9750 = $9761 +DATA_B31_975B = $976C +DATA_B31_9766 = $9777 +DATA_B31_9771 = $9782 +DATA_B31_977C = $978D +DATA_B31_9787 = $9798 +DATA_B31_9792 = $97A3 +DATA_B31_979D = $97AE +DATA_B31_97A8 = $97B9 +DATA_B31_97B3 = $97C4 +DATA_B31_97B9 = $97CA +DATA_B31_97BF = $97D0 +DATA_B31_97C5 = $97D6 +DATA_B31_97CB = $97DC +DATA_B31_97D3 = $97E4 +DATA_B31_97D9 = $97EA +DATA_B31_97E1 = $97F2 +DATA_B31_97E7 = $97F8 +DATA_B31_97ED = $97FE +DATA_B31_97F3 = $9804 +DATA_B31_97F9 = $980A +DATA_B31_97FF = $9810 +DATA_B31_9805 = $9816 +DATA_B31_980B = $981C +DATA_B31_983D = $984E +DATA_B31_9848 = $9859 +DATA_B31_9853 = $9864 +DATA_B31_985E = $986F +DATA_B31_9869 = $987A +DATA_B31_9874 = $9885 +DATA_B31_987F = $9890 +DATA_B31_988A = $989B +DATA_B31_9895 = $98A6 +DATA_B31_98A0 = $98B1 +DATA_B31_98AB = $98BC +DATA_B31_98B6 = $98C7 +DATA_B31_98C1 = $98D2 +DATA_B31_98C3 = $98D4 +DATA_B31_98C5 = $98D6 +DATA_B31_98C7 = $98D8 +DATA_B31_98C9 = $98DA +DATA_B31_98CB = $98DC +DATA_B31_98CD = $98DE +DATA_B31_98CF = $98E0 +DATA_B31_98D1 = $98E2 +DATA_B31_98D3 = $98E4 +DATA_B31_98D5 = $98E6 +DATA_B31_98D7 = $98E8 +DATA_B31_98D9 = $98EA +DATA_B31_98E7 = $98F8 +DATA_B31_98F2 = $9903 +DATA_B31_98FD = $990E +DATA_B31_9908 = $9919 +DATA_B31_9913 = $9924 +DATA_B31_991E = $992F +DATA_B31_9929 = $993A +DATA_B31_992A = $993B +DATA_B31_992B = $993C +DATA_B31_992C = $993D +DATA_B31_992D = $993E +DATA_B31_992E = $993F +DATA_B31_992F = $9940 +DATA_B31_9935 = $9946 +DATA_B31_9940 = $9951 +DATA_B31_994B = $995C +DATA_B31_994C = $995D +DATA_B31_994D = $995E +DATA_B31_9961 = $9972 +DATA_B31_996C = $997D +DATA_B31_9977 = $9988 +DATA_B31_9982 = $9993 +DATA_B31_998D = $999E +DATA_B31_9998 = $99A9 +DATA_B31_99A3 = $99B4 +DATA_B31_99AE = $99BF +DATA_B31_99B8 = $99C9 +DATA_B31_99C2 = $99D3 +DATA_B31_99CC = $99DD +DATA_B31_99D6 = $99E7 +DATA_B31_99E2 = $99F3 +DATA_B31_99EE = $99FF +DATA_B31_99FA = $9A0B +DATA_B31_9A02 = $9A13 +DATA_B31_9A0D = $9A1E +DATA_B31_9A18 = $9A29 +DATA_B31_9A23 = $9A34 +DATA_B31_9A24 = $9A35 +DATA_B31_9A25 = $9A36 +DATA_B31_9A26 = $9A37 +DATA_B31_9A2A = $9A3B +DATA_B31_9A35 = $9A46 +DATA_B31_9A40 = $9A51 +DATA_B31_9A4C = $9A5D +DATA_B31_9A78 = $9A89 +DATA_B31_9A83 = $9A94 +DATA_B31_9A8E = $9A9F +DATA_B31_9A99 = $9AAA +DATA_B31_9AA4 = $9AB5 +DATA_B31_9AAF = $9AC0 +DATA_B31_9ABA = $9ACB +DATA_B31_9AC5 = $9AD6 +DATA_B31_9AD0 = $9AE1 +DATA_B31_9ADB = $9AEC +DATA_B31_9AE6 = $9AF7 +DATA_B31_9AF1 = $9B02 +DATA_B31_9AFC = $9B0D +DATA_B31_9B07 = $9B18 +DATA_B31_9B12 = $9B23 +DATA_B31_9B1D = $9B2E +DATA_B31_9B28 = $9B39 +DATA_B31_9B33 = $9B44 +DATA_B31_9B3E = $9B4F +DATA_B31_9B49 = $9B5A +DATA_B31_9B4F = $9B60 +DATA_B31_9B55 = $9B66 +DATA_B31_9B5B = $9B6C +DATA_B31_9B61 = $9B72 +DATA_B31_9B67 = $9B78 +DATA_B31_9B6D = $9B7E +DATA_B31_9B73 = $9B84 +DATA_B31_9B79 = $9B8A +DATA_B31_9B7F = $9B90 +DATA_B31_9B85 = $9B96 +DATA_B31_9B8B = $9B9C +DATA_B31_9B91 = $9BA2 +DATA_B31_9B97 = $9BA8 +DATA_B31_9B9D = $9BAE +DATA_B31_9BA3 = $9BB4 +DATA_B31_9BA9 = $9BBA +DATA_B31_9BAF = $9BC0 +DATA_B31_9BB5 = $9BC6 +DATA_B31_9BBB = $9BCC +DATA_B31_9BC1 = $9BD2 +DATA_B31_9BCC = $9BDD +DATA_B31_9BD7 = $9BE8 +DATA_B31_9BE2 = $9BF3 +DATA_B31_9BED = $9BFE +DATA_B31_9C03 = $9C14 +DATA_B31_9C0E = $9C1F +DATA_B31_9C19 = $9C2A +DATA_B31_9C24 = $9C35 +DATA_B31_9C2F = $9C40 +DATA_B31_9C3A = $9C4B +DATA_B31_9C45 = $9C56 +DATA_B31_9C50 = $9C61 +DATA_B31_9C5B = $9C6C +DATA_B31_9C66 = $9C77 +DATA_B31_9C6A = $9C7B +DATA_B31_9C6E = $9C7F +DATA_B31_9C76 = $9C87 +DATA_B31_9C7E = $9C8F +DATA_B31_9C86 = $9C97 +DATA_B31_9C8E = $9C9F +DATA_B31_9C96 = $9CA7 +DATA_B31_9C9E = $9CAF +DATA_B31_9CAC = $9CBD +DATA_B31_9CB7 = $9CC8 +DATA_B31_9CC2 = $9CD3 +DATA_B31_9CCD = $9CDE +DATA_B31_9CD8 = $9CE9 +DATA_B31_9CE3 = $9CF4 +DATA_B31_9CEE = $9CFF +DATA_B31_9CF0 = $9D01 +DATA_B31_9CF2 = $9D03 +DATA_B31_9CF4 = $9D05 +DATA_B31_9CF6 = $9D07 +DATA_B31_9CF8 = $9D09 +DATA_B31_9CFA = $9D0B +DATA_B31_9D00 = $9D11 +DATA_B31_9D0B = $9D1C +DATA_B31_9D16 = $9D27 +DATA_B31_9D22 = $9D33 +DATA_B31_9D32 = $9D43 +DATA_B31_A14A = $A15B +DATA_B31_A606 = $A617 +DATA_B31_A676 = $A687 +DATA_B31_A696 = $A6A7 +DATA_B31_A69E = $A6AF +DATA_B31_A70E = $A721 +DATA_B31_A71A = $A72D +DATA_B31_A73E = $A741 +DATA_B31_A772 = $A785 +DATA_B31_A788 = $A79B +DATA_B31_A78E = $A7A1 +DATA_B31_A819 = $A829 +DATA_B31_A863 = $A873 +DATA_B31_A875 = $A885 +DATA_B31_A87B = $A88B +DATA_B31_A895 = $A8A5 +DATA_B31_A8A7 = $A8B7 +DATA_B31_A8B9 = $A8C9 +DATA_B31_A8CB = $A8DB +DATA_B31_A8D5 = $A8E5 +DATA_B31_A8DD = $A8ED +DATA_B31_A8E5 = $A8F5 +DATA_B31_A8EB = $A8FB +DATA_B31_A8F1 = $A901 +DATA_B31_A903 = $A913 +DATA_B31_A90B = $A91B +DATA_B31_A921 = $A931 +DATA_B31_A937 = $A947 +DATA_B31_A953 = $A963 +DATA_B31_A987 = $A997 +DATA_B31_A993 = $A9A0 +DATA_B31_A99D = $A9AA +DATA_B31_A9B7 = $A9C4 +DATA_B31_A9D1 = $A9DE +DATA_B31_A9E9 = $A9F6 +DATA_B31_AA09 = $AA16 +DATA_B31_AA31 = $AA3E +DATA_B31_AA97 = $AAA4 +DATA_B31_AAB1 = $AABE +DATA_B31_AAF6 = $AB03 +DATA_B31_AB7A = $AB95 +DATA_B31_AB84 = $AB9F +DATA_B31_AC98 = $ACAF +DATA_B31_ACB8 = $ACCF +DATA_B31_ACEB = $AD02 +DATA_B31_ACEF = $AD06 +DATA_B31_ACF8 = $AD0C +DATA_B31_AE00 = $AE13 +DATA_B31_AF72 = $AF85 +DATA_B31_AF78 = $AF8B +DATA_B31_AF7E = $AF91 +DATA_B31_AF90 = $AFA3 +DATA_B31_AFFB = $B00F +DATA_B31_B009 = $B01D +DATA_B31_B07E = $B08E +DATA_B31_B084 = $B094 +DATA_B31_B470 = $B478 +DATA_B31_B513 = $B515 +DATA_B31_B517 = $B519 +DATA_B31_B51D = $B51F +DATA_B31_B590 = $B58C +DATA_B31_BA42 = $BA07 +DATA_B31_BA7A = $BA3F +DATA_B31_BA86 = $BA4B +DATA_B31_BA8A = $BA4F +DATA_B31_BA90 = $BA55 +DATA_B31_BBC6 = $BB8D +DATA_B31_BBCA = $BB91 +DATA_B31_BBD0 = $BB97 +DATA_PLAYERSPRITES = $BC92 +DATA_PLAYERSPRITES_MIRRORED = $BE2A +EXPLOSION_STATE_00 = $B68F +EXPLOSION_STATE_01 = $B695 +EXPLOSION_STATE_01_LOGIC_01 = $B6E6 +EXPLOSION_STATE_01_LOGIC_02 = $B6B7 +EXPLOSION_STATE_01_LOGIC_03 = $B6E7 +FALLINGSPIKE_CHECKCOLLISION = $BACC +FALLINGSPIKE_INIT = $BAC0 +FALLINGSPIKE_STATE_00 = $BA72 +FALLINGSPIKE_STATE_01 = $BA78 +FALLINGSPIKE_STATE_02 = $BA7E +FALLINGSPIKE_STATE_03 = $BAA3 +FALLINGSPIKE_STATE_04 = $BAA9 +FALLINGSPIKE_STATE_05 = $BABA +HIDETIMERRINGS_INIT = $AF5E +HIDETIMERRINGS_MOVESPRITES = $AF6B +HIDETIMERRINGS_STATE_00 = $AF52 +HIDETIMERRINGS_STATE_01 = $AF58 +INTROCLOUDSANDPALETTE_INIT = $BBE9 +INTROCLOUDSANDPALETTE_STATE_00 = $BBDD +INTROCLOUDSANDPALETTE_STATE_01 = $BBE3 +INTROTREE_ADJUSTHPOS = $BC55 +INTROTREE_INIT = $BC38 +INTROTREE_STATE_00 = $BC2C +INTROTREE_STATE_01 = $BC32 +INVINCIBILITYSTARS_STATE_00 = $AE1D +INVINCIBILITYSTARS_STATE_00_LOGIC_01 = $AF27 +INVINCIBILITYSTARS_STATE_01 = $AE23 +INVINCIBILITYSTARS_STATE_01_LOGIC_01 = $AF3A +INVINCIBILITYSTARS_STATE_02 = $AEA5 +LABEL_B31_A967 = $A977 +LABEL_B31_A96E = $A97E +LABEL_B31_A972 = $A982 +LABEL_B31_AA37 = $AA44 +LABEL_B31_AA3C = $AA49 +LABEL_B31_AA41 = $AA4E +LABEL_B31_AA54 = $AA61 +LABEL_B31_AA6D = $AA7A +LABEL_B31_AA81 = $AA8E +LABEL_B31_AB06 = $AB21 +LABEL_B31_AB34 = $AB4F +LABEL_B31_AB4C = $AB67 +LABEL_B31_AB64 = $AB7F +LABEL_B31_AB8C = $ABA7 +LABEL_B31_ABA2 = $ABBD +LABEL_B31_ABC6 = $ABE1 +LABEL_B31_ABFD = $AC18 +LABEL_B31_AC20 = $AC3B +LABEL_B31_AD00 = $AD14 +LABEL_B31_AD88 = $AD9C +LABEL_B31_ADB3 = $ADC7 +LABEL_B31_AFAA = $AFBD +LABEL_B31_B017 = $B02B +LABEL_B31_B06C = $B081 +LABEL_B31_B079 = $B089 +LABEL_B31_B22D = $B226 +LABEL_B31_B245 = $B23E +LABEL_B31_B24C = $B245 +LABEL_B31_B250 = $B249 +LABEL_B31_B272 = $B26B +LABEL_B31_B2B6 = $B2AF +LABEL_B31_B307 = $B310 +LABEL_B31_B30C = $B315 +LABEL_B31_B311 = $B31A +LABEL_B31_B341 = $B349 +LABEL_B31_B35E = $B366 +LABEL_B31_B375 = $B37D +LABEL_B31_B3BD = $B3C5 +LABEL_B31_B3D2 = $B3DA +LABEL_B31_B3F2 = $B3FB +LABEL_B31_B3FE = $B407 +LABEL_B31_B4A0 = $B4A8 +LABEL_B31_B4CE = $B4D4 +LABEL_B31_B523 = $B525 +LABEL_B31_B53E = $B540 +LABEL_B31_B584 = $B586 +LABEL_B31_B6D9 = $B6D1 +LABEL_B31_B702 = $B6F8 +LABEL_B31_B70B = $B701 +LABEL_B31_B901 = $B8DF +LABEL_B31_B912 = $B8F0 +LABEL_B31_B981 = $B95A +LABEL_B31_B9A0 = $B979 +LABEL_B31_B9C2 = $B996 +LABEL_B31_B9F3 = $B9BD +LABEL_B31_BA23 = $B9E8 +LABEL_B31_BA96 = $BA5B +LABEL_B31_BAFB = $BAC0 +LABEL_B31_BB0B = $BAD0 +LABEL_B31_BB29 = $BAEF +LABEL_B31_BB40 = $BB06 +LABEL_B31_BB5C = $BB23 +LABEL_B31_BB61 = $BB28 +LABEL_B31_BBD6 = $BB9D +LABEL_B31_BBF9 = $BBC0 +LABEL_B31_BC45 = $BC0C +LABEL_B31_BCA2 = $BC69 +LOGIC_AIRCOUNTDOWN = $B08A +LOGIC_ALZ_BUBBLE = $B138 +LOGIC_ALZ_BUBBLE_GETPLAYERPOS = $B3AE +LOGIC_ALZ_BUBBLE_SETPOSITION = $B395 +LOGIC_BLOCKFRAGMENT = $AC3C +LOGIC_BUBBLE_SETHORIZONTALSPEED = $B3E1 +LOGIC_CHAOSEMERALD = $B7C6 +LOGIC_DATA_MONITORTYPES = $B7A8 +LOGIC_DROPPEDRING = $AF85 +LOGIC_EXPLOSION = $B689 +LOGIC_FALLINGSPIKE = $BA3F +LOGIC_HIDETIMERRINGS = $AF4E +LOGIC_INTROCLOUDSANDPALETTE = $BBD9 +LOGIC_INTROTREE = $BC28 +LOGIC_INVINCIBILITYSTARS = $AE17 +LOGIC_MONITORS = $B706 +LOGIC_RINGSPARKLE = $ABFC +LOGIC_SIGNPOST = $B880 +LOGIC_SONIC = $A6B7 +LOGIC_SONIC_LOADNEXTLEVEL = $AB1B +LOGIC_SPEEDSHOESSTARS = $AD4C +LOGIC_SPEEDSHOESSTARS_STATE0 = $AD52 +LOGIC_SPEEDSHOESSTARS_STATE1 = $AD58 +LOGIC_SPEEDSHOESSTARS_STATE2 = $AD7A +LOGIC_UGZ_FIREBALL = $B5AC +LOGIC_WATERSPLASH = $B4D9 +MONITOR_CHECKCOLLISIONS = $B746 +MONITOR_CHECKCOLLISIONS_ABOVE = $B76B +MONITOR_EMERALD_CHECKLOADTILES = $B7B2 +MONITOR_INIT = $B732 +MONITOR_LOADTILES = $B73B +MONITOR_SETCOLLISIONVALUE = $B78D +MONITORS_STATE_00 = $B70C +MONITORS_STATE_01 = $B712 +MONITORS_STATE_02 = $B718 OBJECT_ANIMFRAMEMAPPINGS = $8000 -RINGSPARKLE_STATE_00 = $AC16 -RINGSPARKLE_STATE_01 = $AC1C -SIGNPOST_STATE_00 = $B8A6 -SIGNPOST_STATE_00_LOGIC_01 = $B90E -SIGNPOST_STATE_01 = $B8AF -SIGNPOST_STATE_01_LOGIC_01 = $B913 -SIGNPOST_STATE_02 = $B8B5 -SIGNPOST_STATE_02_LOGIC_01 = $B92F -SIGNPOST_STATE_03 = $B8CF -SIGNPOST_STATE_03_LOGIC_01 = $B9DA -SIGNPOST_STATE_03_LOGIC_02 = $B9E5 -SIGNPOST_STATE_03_LOGIC_03 = $B9F0 -SIGNPOST_STATE_04 = $B8DD -SIGNPOST_STATE_04_LOGIC_01 = $B8EF -SIGNPOST_STATE_05 = $B8E3 -SONIC_DROWNING = $BD08 -SONIC_HURT = $BD14 -SONIC_IDLE = $BCC4 -SONIC_LEAP = $BD10 -SONIC_LOOKDOWN = $BCE8 -SONIC_LOOKUP = $BCD4 -SONIC_ROLL = $BCEC -SONIC_RUNNING = $BCD8 -SONIC_SKID = $BD00 -SONIC_SPRING = $BD1C -SONIC_STANDING = $BCD0 -SONIC_STATE_01 = $A73D -SONIC_STATE_02 = $A74D -SONIC_STATE_03 = $A759 -SONIC_STATE_04 = $A75F -SONIC_STATE_05 = $A765 -SONIC_STATE_06 = $A76D -SONIC_STATE_07 = $A77F -SONIC_STATE_08 = $A789 -SONIC_STATE_09 = $A793 -SONIC_STATE_0A = $A7A3 -SONIC_STATE_0B = $A7AB -SONIC_STATE_0D = $A7BF -SONIC_STATE_0E = $A7C5 -SONIC_STATE_SPINDASH = $AB23 -SONIC_WALKING = $BCAC -SPINDASHSPR1 = $85CF -SPINDASHSPR2 = $85DA -SPINDASHSPR3 = $85E5 -SPRARRANGE_1X1_1X1_1X1 = $9D7D -SPRARRANGE_1X1_1X1_4X1_2X2 = $9F29 -SPRARRANGE_1X1_5X2 = $9FA5 -SPRARRANGE_1X1_5X3 = $A0A1 -SPRARRANGE_1X1_BC = $9D55 -SPRARRANGE_1X2_BC = $9D61 -SPRARRANGE_1X6_1X8_1X6 = $A121 -SPRARRANGE_2X1_3X1 = $9DBD -SPRARRANGE_2X1_BC = $9D59 -SPRARRANGE_2X1_DIAG = $9D69 -SPRARRANGE_2X2_1X3 = $9E81 -SPRARRANGE_2X2_2X2_2X2_DIAG = $A031 -SPRARRANGE_2X2_BC = $9D89 -SPRARRANGE_2X3 = $9DFD -SPRARRANGE_2X4 = $9EBD -SPRARRANGE_3X1 = $9D71 -SPRARRANGE_3X1_2X1 = $9DA9 -SPRARRANGE_3X1_3X1 = $9E3D -SPRARRANGE_3X2_BC = $9DE5 -SPRARRANGE_3X3 = $9EDD -SPRARRANGE_4X1 = $9D99 -SPRARRANGE_4X1_1X3_2X2 = $9E55 -SPRARRANGE_4X1_2X3 = $9E15 -SPRARRANGE_4X2 = $9E9D -SPRARRANGE_4X2_3X1 = $9F79 -SPRARRANGE_4X3 = $9FD1 -SPRARRANGE_4X4 = $A0E1 -SPRARRANGE_5X1 = $9DD1 -SPRARRANGE_5X2 = $9F01 -SPRARRANGE_6X1_2X2 = $9F51 -SPRARRANGE_6X1_8X1_1X1_1X1 = $A061 -SPRARRANGE_6X2 = $A001 -UGZ_FIREBALL_ADJUSTVERTICALSPEED = $B62D -UGZ_FIREBALL_ADJUSTVERTICALSPEED_CHECKPOS = $B644 -UGZ_FIREBALL_CHECKCOLLISION = $B68D -UGZ_FIREBALL_INIT = $B5FF -UGZ_FIREBALL_INIT_MOVEUP = $B60A -UGZ_FIREBALL_RESETHORIZONTALPOS = $B673 -UGZ_FIREBALL_STATE_00 = $B5CE -UGZ_FIREBALL_STATE_01 = $B5D4 -UGZ_FIREBALL_STATE_02 = $B5DA -UGZ_FIREBALL_STATE_03 = $B5E0 -UGZ_FIREBALL_STATE_04 = $B5ED -UGZ_FIREBALL_STATE_05 = $B5F3 -UGZ_FIREBALL_WAITFORVISIBLE = $B669 -WATERSPLASH_DONOTHING = $B52A -WATERSPLASH_INIT = $B503 -WATERSPLASH_STATE_00 = $B4F3 -WATERSPLASH_STATE_01 = $B4F9 +RINGSPARKLE_STATE_00 = $AC00 +RINGSPARKLE_STATE_01 = $AC06 +SIGNPOST_STATE_00 = $B88C +SIGNPOST_STATE_00_LOGIC_01 = $B8F4 +SIGNPOST_STATE_01 = $B895 +SIGNPOST_STATE_01_LOGIC_01 = $B8F9 +SIGNPOST_STATE_02 = $B89B +SIGNPOST_STATE_02_LOGIC_01 = $B915 +SIGNPOST_STATE_03 = $B8B5 +SIGNPOST_STATE_03_LOGIC_01 = $B9C0 +SIGNPOST_STATE_03_LOGIC_02 = $B9CB +SIGNPOST_STATE_03_LOGIC_03 = $B9D6 +SIGNPOST_STATE_04 = $B8C3 +SIGNPOST_STATE_04_LOGIC_01 = $B8D5 +SIGNPOST_STATE_05 = $B8C9 +SONIC_DROWNING = $BCEE +SONIC_HURT = $BCFA +SONIC_IDLE = $BCAA +SONIC_LEAP = $BCF6 +SONIC_LOOKDOWN = $BCCE +SONIC_LOOKUP = $BCBA +SONIC_ROLL = $BCD2 +SONIC_RUNNING = $BCBE +SONIC_SKID = $BCE6 +SONIC_SPRING = $BD02 +SONIC_STANDING = $BCB6 +SONIC_STATE_01 = $A727 +SONIC_STATE_02 = $A737 +SONIC_STATE_03 = $A743 +SONIC_STATE_04 = $A749 +SONIC_STATE_05 = $A74F +SONIC_STATE_06 = $A757 +SONIC_STATE_07 = $A769 +SONIC_STATE_08 = $A773 +SONIC_STATE_09 = $A77D +SONIC_STATE_0A = $A78D +SONIC_STATE_0B = $A795 +SONIC_STATE_0D = $A7A9 +SONIC_STATE_0E = $A7AF +SONIC_STATE_SPINDASH = $AB0D +SONIC_WALKING = $BC92 +SPINDASHSPR = $85CF +SPRARRANGE_1X1_1X1_1X1 = $9D67 +SPRARRANGE_1X1_1X1_4X1_2X2 = $9F13 +SPRARRANGE_1X1_5X2 = $9F8F +SPRARRANGE_1X1_5X3 = $A08B +SPRARRANGE_1X1_BC = $9D3F +SPRARRANGE_1X2_BC = $9D4B +SPRARRANGE_1X6_1X8_1X6 = $A10B +SPRARRANGE_2X1_3X1 = $9DA7 +SPRARRANGE_2X1_BC = $9D43 +SPRARRANGE_2X1_DIAG = $9D53 +SPRARRANGE_2X2_1X3 = $9E6B +SPRARRANGE_2X2_2X2_2X2_DIAG = $A01B +SPRARRANGE_2X2_BC = $9D73 +SPRARRANGE_2X3 = $9DE7 +SPRARRANGE_2X4 = $9EA7 +SPRARRANGE_3X1 = $9D5B +SPRARRANGE_3X1_2X1 = $9D93 +SPRARRANGE_3X1_3X1 = $9E27 +SPRARRANGE_3X2_BC = $9DCF +SPRARRANGE_3X3 = $9EC7 +SPRARRANGE_4X1 = $9D83 +SPRARRANGE_4X1_1X3_2X2 = $9E3F +SPRARRANGE_4X1_2X3 = $9DFF +SPRARRANGE_4X2 = $9E87 +SPRARRANGE_4X2_3X1 = $9F63 +SPRARRANGE_4X3 = $9FBB +SPRARRANGE_4X4 = $A0CB +SPRARRANGE_5X1 = $9DBB +SPRARRANGE_5X2 = $9EEB +SPRARRANGE_6X1_2X2 = $9F3B +SPRARRANGE_6X1_8X1_1X1_1X1 = $A04B +SPRARRANGE_6X2 = $9FEB +UGZ_FIREBALL_ADJUSTVERTICALSPEED = $B617 +UGZ_FIREBALL_ADJUSTVERTICALSPEED_CHECKPOS = $B62E +UGZ_FIREBALL_CHECKCOLLISION = $B677 +UGZ_FIREBALL_INIT = $B5E9 +UGZ_FIREBALL_INIT_MOVEUP = $B5F4 +UGZ_FIREBALL_RESETHORIZONTALPOS = $B65D +UGZ_FIREBALL_STATE_00 = $B5B8 +UGZ_FIREBALL_STATE_01 = $B5BE +UGZ_FIREBALL_STATE_02 = $B5C4 +UGZ_FIREBALL_STATE_03 = $B5CA +UGZ_FIREBALL_STATE_04 = $B5D7 +UGZ_FIREBALL_STATE_05 = $B5DD +UGZ_FIREBALL_WAITFORVISIBLE = $B653 +WATERSPLASH_DONOTHING = $B514 +WATERSPLASH_INIT = $B4ED +WATERSPLASH_STATE_00 = $B4DD +WATERSPLASH_STATE_01 = $B4E3 diff --git a/src/bin/bank32.lab b/src/bin/bank32.lab new file mode 100644 index 0000000..89b30cc --- /dev/null +++ b/src/bin/bank32.lab @@ -0,0 +1,1737 @@ +_CHECKINPUT = $0A55 +_DATA_05AA = $05C3 +_DATA_7761 = $6DE2 +_DRAWCURSOR = $0AA6 +_ERROR_MSG = $0067 +_GETCOMPRESSIONTYPE = $1433 +_LABEL_1AA6_22 = $135D +_LOAD_INTRO_LEVEL = $0B8B +_LOAD_TITLE_LEVEL = $0C61 +_MOVECURSORDOWN = $0A96 +_MOVECURSORUP = $0A87 +_PLAYER_ANIM_BALANCEFRAMECOUNTERS = $31B0 +_PLAYER_ANIM_BALANCEFRAMES = $319C +_PLAYER_CHANGEFRAMEDISPLAYTIME_WALKFRAMECOUNTERS = $3152 +_PORT1_INPUT = $131C +_RESETCURSORVELOCITY = $0A82 +_START = $0000 +_TILEMAPPINGS = $0ABB +_VDP_INITREGISTERS_REGVALUES = $0EC0 +ACT1 = $0000 +ACT2 = $0001 +ACT2TEXT = $0B81 +ACT3 = $0002 +ACT3TEXT = $0B86 +ALT_PALETTE_GMZ_CONVEYOR = $77B9 +APPVAROBJ = $0015 +ARC_UNARC = $21448 +BACKGROUNDXSCROLL = $D172 +BACKGROUNDYSCROLL = $D173 +BANK04 = $7996 +BANK05 = $799E +BANK06 = $79A6 +BANK07 = $79AE +BANK08 = $79B6 +BANK09 = $79BE +BANK10 = $79C6 +BANK11 = $79CE +BANK12 = $79D6 +BANK13 = $79DE +BANK14 = $79E6 +BANK15 = $79EE +BANK16 = $79F6 +BANK17 = $79FE +BANK18 = $7A06 +BANK19 = $7A0E +BANK20 = $7A16 +BANK21 = $7A1E +BANK22 = $7A26 +BANK23 = $7A2E +BANK24 = $7A36 +BANK25 = $7A3E +BANK26 = $7A46 +BANK27 = $7A4E +BANK28 = $D071F6 +BANK28HEADER = $7A56 +BANK29 = $7A5E +BANK30 = $D0B1F6 +BANK30HEADER = $7A66 +BANK31 = $D0F1F6 +BANK31HEADER = $7A6E +BANK32 = $8000 +BANKADDRESSTABLE = $D0E000 +BANKSLOT2 = $8000 +BGPALETTECONTROL = $D4E6 +BGPALETTEINDEX = $D4E7 +BITFIELDCOUNT = $D340 +BTN_1 = $0010 +BTN_1_BIT = $0004 +BTN_2 = $0020 +BTN_2_BIT = $0005 +BTN_DOWN = $0002 +BTN_DOWN_BIT = $0001 +BTN_LEFT = $0004 +BTN_LEFT_BIT = $0002 +BTN_RIGHT = $0008 +BTN_RIGHT_BIT = $0003 +BTN_UP = $0001 +BTN_UP_BIT = $0000 +CALCULATEPLAYERDIRECTION = $29BB +CAMERA_METATILECOLBUFFER = $D178 +CAMERA_METATILEPTR = $D278 +CAMERA_X = $D174 +CAMERA_Y = $D176 +CAMERAOFFSETX = $D288 +CAMERAOFFSETY = $D289 +CHANGEGAMEMODE = $1CE9 +CHAOSEMERALDDATA = $7044 +CHECKFORBANK = $7844 +CHECKFORBANK_TOGGLEINTERRUPT = $788F +CHECKSPRITEOFFSCREEN = $D27D1F +CHKFINDSYM = $2050C +CLEARMEMORYMAP = $7980 +CLLSN_ADJUSTEDX = $D356 +CLLSN_ADJUSTEDY = $D358 +CLLSN_COLLISIONVALUEX = $D362 +CLLSN_COLLISIONVALUEY = $D361 +CLLSN_HEADERPTR3 = $D36F +CLLSN_LEVELMAPBLOCKPTR = $D354 +CLLSN_METATILEINDEX = $D353 +CLLSN_METATILESURFACETYPE = $D35E +CLLSN_METATILETRIGGERFUNCPTRS = $63B4 +CLLSN_METATILEX = $D35A +CLLSN_METATILEY = $D35C +CLLSN_PROJECTVERTICAL = $6724 +CLLSN_PROJECTVERTICAL_EPILOGUE = $676E +CLLSN_PROJECTVERTICAL_NOALTER = $6770 +CLLSN_RINGBLOCK = $D352 +CLRLCDFULL = $20808 +CMDPIXELSHADOW = $D07396 +COLLISION_MONITOR = $3FC4 +COLLISION_MONITOR_CONTINUE = $4010 +COLLISION_MONITOR_INVINCIBILITY = $4036 +COLLISION_MONITOR_LIFE = $4004 +COLLISION_MONITOR_RINGS = $3FE6 +COLLISION_MONITOR_SNEAKERS = $401D +COLORDEPTH = $DC41 +CONTINUECOUNTER = $D2BD +CONTINUESCREEN_COUNT = $D2C4 +CONTINUESCREEN_DRAWSCREEN = $209A +CONTINUESCREEN_LOADNUMBERMAPPINGS = $20D7 +CONTINUESCREEN_LOADNUMBERTILES = $6E24 +CONTINUESCREEN_LOADTILES = $6E11 +CONTINUESCREEN_MAINLOOP = $070F +CONTINUESCREEN_TIMER = $D2C3 +CONTROLBYTE = $D2D2 +CONVERTPIXELROW = $D27D60 +CONVERTTILETO8BPP = $D27D42 +CPHLDE = $2013C +CRAM = $E30200 +CURRENTACT = $D296 +CURRENTLEVEL = $D295 +CURRENTMETATILEADDR = $D23D +CURSORPOS = $D2C2 +DATA_1E6D = $1749 +DATA_1E76 = $1752 +DATA_1E79 = $1755 +DATA_1E7C = $1758 +DATA_1E7F = $175B +DATA_1E82 = $175E +DATA_1E85 = $1761 +DATA_1E88 = $1764 +DATA_1E8B = $1767 +DATA_1E8E = $176A +DATA_1E91 = $176D +DATA_1E94 = $1770 +DATA_1E97 = $1773 +DATA_1E9A = $1776 +DATA_1E9D = $1779 +DATA_1EA0 = $177C +DATA_1EA3 = $177F +DATA_1EA6 = $1782 +DATA_1EA9 = $1785 +DATA_1EAC = $1788 +DATA_1EAF = $178B +DATA_1EB2 = $178E +DATA_1EB5 = $1791 +DATA_1EB8 = $1794 +DATA_1EBB = $1797 +DATA_1EBE = $179A +DATA_1EC1 = $179D +DATA_1EC4 = $17A0 +DATA_1EC7 = $17A3 +DATA_1ECA = $17A6 +DATA_1ECD = $17A9 +DATA_1ED0 = $17AC +DATA_1ED3 = $17AF +DATA_1ED6 = $17B2 +DATA_1ED9 = $17B5 +DATA_1EDC = $17B8 +DATA_1EDF = $17BB +DATA_1EE2 = $17BE +DATA_1EE5 = $17C1 +DATA_1EE8 = $17C4 +DATA_1EEB = $17C7 +DATA_1F70 = $184C +DATA_1FE4 = $18C0 +DATA_231A = $1BED +DATA_2320 = $1BF3 +DATA_23F8 = $1CCB +DATA_2402 = $1CD5 +DATA_240C = $1CDF +DATA_28FE = $2129 +DATA_2904 = $212F +DATA_2974 = $219F +DATA_299C = $21C7 +DATA_29C4 = $21EF +DATA_2A34 = $225F +DATA_2AA4 = $22CF +DATA_2B14 = $233F +DATA_2B84 = $23AF +DATA_2BF4 = $241F +DATA_2C64 = $248F +DATA_2D0C = $24FF +DATA_2D6C = $2597 +DATA_2D98 = $25C3 +DATA_2DAC = $25D7 +DATA_2DC0 = $25EB +DATA_2DD4 = $25FF +DATA_2E04 = $262F +DATA_2E90 = $26BB +DATA_2F1C = $2747 +DATA_330 = $0326 +DATA_4016 = $3826 +DATA_43D3 = $3BE3 +DATA_543F = $4BC8 +DATA_5445 = $4BCE +DATA_544B = $4BD4 +DATA_54F9 = $4C82 +DATA_5501 = $4C8A +DATA_5509 = $4C92 +DATA_5511 = $4C9A +DATA_5519 = $4CA2 +DATA_5521 = $4CAA +DATA_5529 = $4CB2 +DATA_62BD = $5A3C +DATA_6404 = $5B77 +DATA_6975 = $60C8 +DATA_6B27 = $626C +DATA_6BB2 = $62F7 +DATA_6D41 = $6479 +DATA_6D41_END = $6481 +DATA_80275 = $81D6 +DATA_80382 = $82BB +DATA_803A2 = $82DB +DATA_803B2 = $82EB +DATA_80414 = $834D +DATA_820D2 = $A00B +DATA_823E1 = $A31A +DATA_823E7 = $A320 +DATA_8262E = $A567 +DATA_ACCELERATIONVALUES_LEFT = $35A6 +DATA_ACCELERATIONVALUES_LEFT_UNDERWATER = $3726 +DATA_ACCELERATIONVALUES_RIGHT = $3526 +DATA_ACCELERATIONVALUES_RIGHT_UNDERWATER = $36A6 +DATA_B30_9841 = $E000 +DATA_B30_9A41 = $E200 +DATA_B30_AF41 = $779E +DATA_B30_AF4A = $77A7 +DATA_B30_AF51 = $77AE +DATA_B30_AF53 = $77B0 +DATA_B30_AF5C = $77B9 +DATA_B30_AF61 = $77BE +DATA_B30_AF65 = $77C2 +DATA_B30_AF7D = $77DA +DATA_B30_AF83 = $77E0 +DATA_B30_AF9F = $77FC +DATA_B30_AFCF = $782C +DATA_B30_AFD5 = $7832 +DATA_B30_AFDB = $7838 +DATA_DECELERATIONVALUES = $3626 +DATA_OFFSCREENBUFFEROFFSETS = $5187 +DATA_RINGCOLLISION_METATILES = $6AFD +DATA_SONICLOOPANIMATIONS = $3249 +DATA_SONICLOOPFALLFRAMES = $3205 +DEMOBANK = $D2D8 +DEMONUMBER = $D2D7 +DEMOSEQUENCE_CHANGELEVEL = $1DA8 +DEMOSEQUENCE_LOADLEVEL = $1E13 +DEMOSEQUENCE_PLAYDEMO = $1D39 +DONOTHINGSTUB = $5C23 +DRAW8BPPTILEEND = $D27D8F +DRAWCACHEDPIXEL = $D27D81 +DRAWCACHEDTILE = $D27B93 +DRAWCACHEDTILE_FLIPPEDX = $D27BE1 +DRAWPIXEL = $D27D80 +DRAWSAT = $D27CB7 +DRAWSATTRIG = $D4C1 +DRAWSCREEN = $7A7E +DRAWSCREENMAP = $D27B13 +DRAWSCREENMAP_TILES = $D27B43 +DRAWTILEMAPTRIG = $D4C0 +EMERALDFLAGS = $D2C5 +ENGINE_ADJUSTPLAYERAFTERCOLLISION = $5B64 +ENGINE_ALLOCATEOBJECTHIGHPRIORITY = $58C6 +ENGINE_ALLOCATEOBJECTLOWPRIORITY = $58E5 +ENGINE_ANIMATERINGART = $7627 +ENGINE_CALCULATEBGSCROLL = $420F +ENGINE_CALCULATECAMERABOUNDS = $562E +ENGINE_CAMERAADJUST = $55F0 +ENGINE_CAPLIFECOUNTERVALUE = $1E6D +ENGINE_CHECKCOLLISION = $5F95 +ENGINE_CHECKCOLLISION_BOTTOM = $6008 +ENGINE_CHECKCOLLISION_LEFT = $5FED +ENGINE_CHECKCOLLISION_RETURN = $6082 +ENGINE_CHECKCOLLISION_TOP = $6026 +ENGINE_CHECKCOLLISION_UPDATEOBJECTFLAGS = $603A +ENGINE_CHECKCOLLISIONANDADJUSTPLAYER = $5ACE +ENGINE_CHECKGLOBALTRIGGERS = $05F1 +ENGINE_CHECKHASEMERALD = $0799 +ENGINE_CLEARAUXLEVELHEADER = $73BD +ENGINE_CLEARLEVELATTRIBUTES = $4CBA +ENGINE_CLEARPALETTERAM = $6E9F +ENGINE_CLEARPLAYERTILES = $0D90 +ENGINE_CLEARUNDERWATER = $413A +ENGINE_CLEARVRAM = $6E70 +ENGINE_CLEARWORKINGVRAM = $1AB7 +ENGINE_COLLISION_ADJUSTVERTICALPOS = $67C5 +ENGINE_COLLISIONDATAPTR = $D2D4 +ENGINE_COPYMAPPINGSCOLUMNTOVRAM = $5098 +ENGINE_COPYMAPPINGSROWTOVRAM = $5162 +ENGINE_COPYMAPPINGSTOVRAM_COLUMN = $5040 +ENGINE_COPYMAPPINGSTOVRAM_ROW = $5107 +ENGINE_COPYPALETTES = $0DFE +ENGINE_CREATEBLOCKFRAGMENTOBJECTS = $694B +ENGINE_DATA_BYTEFLIPLUT = $0100 +ENGINE_DATA_STATUSICONDEFAULTS = $1AF6 +ENGINE_DEALLOCATEOBJECT = $59C8 +ENGINE_DEMO_MOVEPLAYER = $1343 +ENGINE_DEMOSEQ_BANK = $D2D8 +ENGINE_DISPLAYEXPLOSIONOBJECT = $5A0B +ENGINE_DIVIDE_16_BY_U8 = $14F0 +ENGINE_DYNPALETTE_0 = $D4A6 +ENGINE_DYNPALETTE_1 = $D4AE +ENGINE_ERRORTRAP = $006C +ENGINE_GETCOLLISIONDATA_CLEANUP = $6C6D +ENGINE_GETCOLLISIONDATA_HANDLEOVERFLOW = $6C71 +ENGINE_GETCOLLISIONDATAFORBLOCK = $6B77 +ENGINE_GETCOLLISIONVALUEFORBLOCK = $6C08 +ENGINE_GETOBJECTDESCRIPTORPOINTER = $5C38 +ENGINE_GETOBJECTINDEXFROMPOINTER = $5C29 +ENGINE_GETOBJECTSCREENPOS = $327D +ENGINE_HANDLEPLC = $6EB4 +ENGINE_HANDLEPLC_CHAOSEMERALD = $7020 +ENGINE_HANDLEPLC_CLEANUP = $6F9D +ENGINE_HANDLEPLC_COPYMIRRORED = $6F1F +ENGINE_HANDLEPLC_MONITORART = $7054 +ENGINE_HANDLEPLC_NOBANK = $6F5A +ENGINE_HANDLEPLC_PARSEDESCRIPTOR = $6F78 +ENGINE_HANDLEVBLANK = $0489 +ENGINE_HANDLEVBLANK_EPILOGUE = $0549 +ENGINE_HANDLEVBLANK_PALETTESONLY = $0589 +ENGINE_INITCOUNTERS = $1B31 +ENGINE_INITIALISE = $0448 +ENGINE_INITSTATUSICONS = $1AC5 +ENGINE_INPUTFLAGS = $D137 +ENGINE_INPUTFLAGSLAST = $D147 +ENGINE_INTERRUPT = $0038 +ENGINE_INTERRUPTSERVICED = $D135 +ENGINE_LIMITSCREENPOS_RIGHT = $34F4 +ENGINE_LOADAUXLEVELHEADER = $1B64 +ENGINE_LOADCARDMAPPINGS = $1214 +ENGINE_LOADLEVEL = $1A84 +ENGINE_LOADLEVEL_DRAWSCREEN = $4ADD +ENGINE_LOADLEVEL_SETINITIALPOSITIONS = $4B49 +ENGINE_LOADLEVELHEADER = $4CC8 +ENGINE_LOADLEVELLAYOUT = $4A95 +ENGINE_LOADLEVELLAYOUT_COPYBYTE = $4AD4 +ENGINE_LOADLEVELPALETTE = $6D2E +ENGINE_LOADLEVELTILES = $6CC9 +ENGINE_LOADMAPPINGS = $121C +ENGINE_LOADMAPPINGS32_COLUMN = $4FE3 +ENGINE_LOADMAPPINGS32_ROW = $50C1 +ENGINE_LOADPLAYERTILES = $0D42 +ENGINE_LOADPLAYERTILES_COPYTILES = $0D87 +ENGINE_LOCKCAMERA = $416B +ENGINE_MAPPINGS_GETBLOCKXY = $422C +ENGINE_MONITORCLLSNTYPE = $D39D +ENGINE_MOVEOBJECTTOPLAYER = $59E6 +ENGINE_MULTIPLY_8_BY_8U = $14E4 +ENGINE_NMI = $0066 +ENGINE_OBJCHARCODEPTR = $D110 +ENGINE_OBJECTSLOTS = $D500 +ENGINE_PAUSEHANDLER = $05CB +ENGINE_POWERUPTIMER = $D4A0 +ENGINE_RELEASECAMERA = $4165 +ENGINE_REMOVEBREAKABLEBLOCK = $5D84 +ENGINE_RESET = $0426 +ENGINE_RESETINTERRUPTFLAG = $0DEB +ENGINE_RESETLEVEL = $0870 +ENGINE_RINGANIMFRAME = $D351 +ENGINE_RINGART_DEST = $D397 +ENGINE_RINGART_SRC = $D395 +ENGINE_SETCAMERAANDLOCK = $4177 +ENGINE_SETMAXIMUMCAMERAX = $41A5 +ENGINE_SETMINIMUMCAMERAX = $4195 +ENGINE_SETOBJECTVERTICALSPEED = $5A7D +ENGINE_SETSTATUSICONPOSITIONS = $1B1A +ENGINE_SETUNDERWATER = $413F +ENGINE_SWAPFRAME2 = $0DCC +ENGINE_TIMER_INCREMENT = $197D +ENGINE_TIMER_SETSPRITES = $19AC +ENGINE_TOGGLESPRITEVISIBLE = $11BA +ENGINE_UPDATEALLOBJECTS = $5692 +ENGINE_UPDATECAMERAPOS = $4145 +ENGINE_UPDATECAMERAXPOS = $41B5 +ENGINE_UPDATECAMERAXPOS_LIMIT = $41D9 +ENGINE_UPDATECAMERAYPOS = $41E0 +ENGINE_UPDATECAMERAYPOS_LIMIT = $4208 +ENGINE_UPDATECYCLINGPALETTES = $7376 +ENGINE_UPDATELEVELSTATE = $08F4 +ENGINE_UPDATEMAPPINGBLOCK = $1299 +ENGINE_UPDATEOBJECT = $57CD +ENGINE_UPDATEOBJECT_ANIMATION = $582E +ENGINE_UPDATEOBJECT_GETLOGICPTR = $57E9 +ENGINE_UPDATEOBJECT_PROCESSLOGIC = $5809 +ENGINE_UPDATEOBJECT_STATE = $57E3 +ENGINE_UPDATEOBJECTHPOS = $112D +ENGINE_UPDATEOBJECTPOSITION = $5F54 +ENGINE_UPDATEOBJECTVPOS = $10D9 +ENGINE_UPDATEPLAYEROBJECT = $57C2 +ENGINE_UPDATEPLAYEROBJECTSTATE = $27D3 +ENGINE_UPDATERINGCOUNTERSPRITES = $1E97 +ENGINE_UPDATESHZ2WIND = $60A9 +ENGINE_UPDATESPRITEATTRIBS = $1078 +ENGINE_UPDATESPRITEATTRIBS_ADJ_POS = $D393 +ENGINE_UPDATESPRITEATTRIBS_HPOS_PTR = $D36B +ENGINE_UPDATESPRITEATTRIBS_NOCLEAR = $11CE +ENGINE_UPDATESPRITEATTRIBS_VPOS_PTR = $D369 +ENGINE_UPDATESPRITEATTRIBSART = $0DA4 +ENGINE_UPDATEUNDERWATERFLAG = $412C +ENGINE_WAITFORINTERRUPT = $0592 +ENGINE_WATERLEVEL_DONOTHING = $407E +ENGINE_WATERLEVEL_INCAIRTIMER = $4060 +ENGINE_WATERLEVEL_SPAWNBUBBLE = $407F +ENGINE_WATERLEVEL_SPAWNCOUNTOBJ = $4077 +EVALGAMEPTR = $D0DFFC +EVALUATEGAME = $0673 +EXITGAME = $7944 +EXITGAMEEND = $7996 +FGPALETTECONTROL = $D4E8 +FGPALETTEINDEX = $D4E9 +FLAGPOINTER = $D345 +FRAME1PAGE = $D12A +FRAME2PAGE = $D12B +FRAMECOUNTER = $D12F +GAMEOVERSCREEN_DRAWSCREEN = $2062 +GAMEOVERSCREEN_LOADTILES = $6DFE +GAMESTATE_CHECKCONTINUE = $06D1 +GAMESTATE_DOCONTINUE = $06B6 +GAMESTATE_ENDSEQUENCE = $061B +GAMESTATE_GAMEOVER = $067A +GAMESTATE_KILLPLAYER = $0846 +GAMESTATE_NEXTACT = $074A +GAMESTATE_NEXTZONE = $07BC +GAMESTATE_TITLECARD = $0894 +GETDATAPTR = $792D +GETTILECOORDINATES = $D27C4B +GETTILEFLAGS = $D27C65 +GETTILEPOINTER = $D27C21 +GLOBALTRIGGERS = $D293 +GT_0 = $0001 +GT_1 = $0002 +GT_BIT_0 = $0000 +GT_BIT_1 = $0001 +GT_END_SEQUENCE = $0080 +GT_END_SEQUENCE_BIT = $0007 +GT_GAMEOVER = $0040 +GT_GAMEOVER_BIT = $0006 +GT_KILL_PLAYER = $0008 +GT_KILL_PLAYER_BIT = $0003 +GT_NEXT_ACT = $0020 +GT_NEXT_ACT_BIT = $0005 +GT_NEXT_LEVEL = $0010 +GT_NEXT_LEVEL_BIT = $0004 +GT_TITLECARD = $0004 +GT_TITLECARD_BIT = $0002 +HASEMERALDTRG = $D2C6 +HOLDTIME = $D46A +IDLETIMER = $D3B4 +INCREMENTRINGCOUNTER = $1E84 +KBD0 = $0001 +KBD1 = $0002 +KBD2 = $0002 +KBD2ND = $0020 +KBD3 = $0002 +KBD4 = $0004 +KBD5 = $0004 +KBD6 = $0004 +KBD7 = $0008 +KBD8 = $0008 +KBD9 = $0008 +KBDADD = $0002 +KBDALPHA = $0080 +KBDAPPS = $0040 +KBDCLEAR = $0040 +KBDCOMMA = $0010 +KBDCOS = $0020 +KBDCS = $0001 +KBDDECPNT = $0001 +KBDDEL = $0080 +KBDDIV = $0010 +KBDDOWN = $0001 +KBDENTER = $0001 +KBDG1 = $F50012 +KBDG2 = $F50014 +KBDG3 = $F50016 +KBDG4 = $F50018 +KBDG5 = $F5001A +KBDG6 = $F5001C +KBDG7 = $F5001E +KBDGRAPH = $0001 +KBDGRAPHVAR = $0080 +KBDLEFT = $0002 +KBDLN = $0004 +KBDLOG = $0008 +KBDLPAREN = $0010 +KBDMAT = $0040 +KBDMODE = $0040 +KBDMUL = $0008 +KBDPGRM = $0040 +KBDPOWER = $0020 +KBDRECIP = $0020 +KBDRIGHT = $0004 +KBDRPAREN = $0010 +KBDSIN = $0020 +KBDSQUARE = $0010 +KBDSTAT = $0080 +KBDSTORE = $0002 +KBDSUB = $0004 +KBDTAN = $0020 +KBDTRACE = $0002 +KBDUP = $0008 +KBDVARS = $0040 +KBDWINDOW = $0008 +KBDY = $0010 +KBDZOOM = $0004 +KBIT0 = $0000 +KBIT1 = $0001 +KBIT2 = $0001 +KBIT2ND = $0005 +KBIT3 = $0001 +KBIT4 = $0002 +KBIT5 = $0002 +KBIT6 = $0002 +KBIT7 = $0003 +KBIT8 = $0003 +KBIT9 = $0003 +KBITADD = $0001 +KBITALPHA = $0007 +KBITAPPS = $0006 +KBITCLEAR = $0006 +KBITCOMMA = $0004 +KBITCOS = $0005 +KBITCS = $0000 +KBITDECPNT = $0000 +KBITDEL = $0007 +KBITDIV = $0004 +KBITDOWN = $0000 +KBITENTER = $0000 +KBITGRAPH = $0000 +KBITGRAPHVAR = $0007 +KBITLEFT = $0001 +KBITLN = $0002 +KBITLOG = $0003 +KBITLPAREN = $0004 +KBITMATH = $0006 +KBITMODE = $0006 +KBITMUL = $0003 +KBITPGRM = $0006 +KBITPOWER = $0005 +KBITRECIP = $0005 +KBITRIGHT = $0002 +KBITRPAREN = $0004 +KBITSIN = $0005 +KBITSQUARE = $0004 +KBITSTAT = $0007 +KBITSTORE = $0001 +KBITSUB = $0002 +KBITTAN = $0005 +KBITTRACE = $0001 +KBITUP = $0003 +KBITVARS = $0006 +KBITWINDOW = $0003 +KBITY = $0004 +KBITZOOM = $0002 +LABEL_107C = $0D3A +LABEL_1084 = $0D42 +LABEL_129C = $0DCC +LABEL_12C8 = $0DF0 +LABEL_13D2 = $0FA3 +LABEL_19D7 = $1267 +LABEL_1A13 = $12A3 +LABEL_1BF7 = $14FE +LABEL_1CC4 = $1594 +LABEL_1CCA = $159A +LABEL_1CD0 = $15A0 +LABEL_1D05 = $15D5 +LABEL_1D34 = $1604 +LABEL_1D4F = $161F +LABEL_1D60 = $1630 +LABEL_1D6F = $163F +LABEL_1D7F = $164F +LABEL_1DAF = $167D +LABEL_200 = $0200 +LABEL_20FB = $19D5 +LABEL_2416 = $1CE9 +LABEL_242F_49 = $1CFE +LABEL_2439_50 = $1D07 +LABEL_243C = $1D0A +LABEL_2459_51 = $1D23 +LABEL_247B = $1D45 +LABEL_24BE_48 = $1D88 +LABEL_2530 = $1DF9 +LABEL_2576 = $1E40 +LABEL_259C = $1E5E +LABEL_25C3 = $1E84 +LABEL_2606 = $1EC2 +LABEL_264E = $1EFA +LABEL_2849 = $20F3 +LABEL_2FCB = $27F6 +LABEL_3011 = $282D +LABEL_3032 = $2851 +LABEL_3054 = $2873 +LABEL_305F = $2881 +LABEL_3072 = $28A6 +LABEL_307F = $28B3 +LABEL_3092 = $28C1 +LABEL_30A5 = $28CF +LABEL_30C7 = $2901 +LABEL_30D8 = $2912 +LABEL_30FD = $2932 +LABEL_3138 = $294E +LABEL_3176 = $2987 +LABEL_318F = $29A0 +LABEL_31BF = $29D0 +LABEL_31F8 = $2A09 +LABEL_3222 = $2A33 +LABEL_3245 = $2A56 +LABEL_3267 = $2A78 +LABEL_3385 = $2BC5 +LABEL_33A8 = $2BE8 +LABEL_33B7 = $2BF7 +LABEL_33EA = $2C29 +LABEL_3467 = $2CA6 +LABEL_3484 = $2CBE +LABEL_348F = $2CC9 +LABEL_34A4 = $2CDE +LABEL_34A9 = $2CE3 +LABEL_34DA = $2D14 +LABEL_34E1 = $2D1B +LABEL_359B = $2DD8 +LABEL_3638 = $2E75 +LABEL_365C = $2E99 +LABEL_3676 = $2EB3 +LABEL_3681 = $2EBE +LABEL_36B2 = $2EEF +LABEL_36E1 = $2F1C +LABEL_3702 = $2F3D +LABEL_3703 = $2F3E +LABEL_3725 = $2F5E +LABEL_375F = $2F98 +LABEL_376E = $2FA7 +LABEL_3796 = $2FCE +LABEL_384E = $3080 +LABEL_3A62 = $32A4 +LABEL_3ACA = $3312 +LABEL_4024 = $3834 +LABEL_4037 = $3847 +LABEL_4044 = $3854 +LABEL_404F = $385F +LABEL_4064 = $3874 +LABEL_4079 = $3889 +LABEL_408E = $389E +LABEL_40B2 = $38C0 +LABEL_40D6 = $38E3 +LABEL_40E0 = $38ED +LABEL_40F0 = $38FD +LABEL_4109 = $3916 +LABEL_4135 = $3944 +LABEL_4137 = $3946 +LABEL_415A = $3968 +LABEL_415F = $396D +LABEL_4199 = $39A7 +LABEL_41A6 = $39B4 +LABEL_41DD = $39EB +LABEL_41EA = $39F8 +LABEL_4204 = $3A12 +LABEL_4226 = $3A34 +LABEL_424A = $3A59 +LABEL_42B7 = $3AC5 +LABEL_42E8 = $3AF5 +LABEL_4310 = $3B1F +LABEL_4352 = $3B61 +LABEL_437A = $3B8C +LABEL_438A = $3B9C +LABEL_43AF = $3BC0 +LABEL_43BF = $3BCF +LABEL_43C5 = $3BD5 +LABEL_43F3 = $3C03 +LABEL_43F9 = $3C09 +LABEL_4408 = $3C13 +LABEL_440E = $3C13 +LABEL_4414 = $3C19 +LABEL_441A = $3C13 +LABEL_4420 = $3C1F +LABEL_4440 = $3C3E +LABEL_4446 = $3C44 +LABEL_4459 = $3C3E +LABEL_445F = $3C57 +LABEL_4476 = $3C6E +LABEL_447C = $3C74 +LABEL_4482 = $3C7A +LABEL_44A2 = $3C99 +LABEL_44A8 = $3C9F +LABEL_44BB = $3CC3 +LABEL_44C1 = $3CB2 +LABEL_44D8 = $3CAC +LABEL_44DE = $3CC9 +LABEL_44E4 = $3CCF +LABEL_4504 = $3CC9 +LABEL_450A = $3CEE +LABEL_451D = $3CC9 +LABEL_4523 = $3D01 +LABEL_453A = $3CE8 +LABEL_4540 = $3D18 +LABEL_4546 = $3D1E +LABEL_4566 = $3D61 +LABEL_456C = $3D3D +LABEL_457F = $3D61 +LABEL_4585 = $3D50 +LABEL_459C = $3D67 +LABEL_45A2 = $3D6D +LABEL_45A8 = $3D73 +LABEL_45BA = $3D85 +LABEL_45C6 = $3D91 +LABEL_45D8 = $3DA3 +LABEL_45E4 = $3DAF +LABEL_45F6 = $3DC1 +LABEL_4602 = $3DCD +LABEL_4614 = $3DDF +LABEL_4620 = $3DEB +LABEL_4623 = $3DEE +LABEL_4629 = $3DF4 +LABEL_462F = $3DFA +LABEL_4637 = $3E02 +LABEL_4640 = $3E0B +LABEL_464B = $3E16 +LABEL_464D = $3E18 +LABEL_465D = $3E28 +LABEL_466D = $3E38 +LABEL_467D = $3E48 +LABEL_468D = $3E58 +LABEL_469D = $3E68 +LABEL_46BB = $3E86 +LABEL_46C0 = $3E8B +LABEL_46EA = $3EB5 +LABEL_472 = $0457 +LABEL_4727 = $3EF2 +LABEL_475F = $3F2A +LABEL_4764 = $3F2F +LABEL_47C9 = $3F94 +LABEL_483B = $4010 +LABEL_4845 = $401A +LABEL_4884 = $404F +LABEL_4887 = $4052 +LABEL_48C4 = $408B +LABEL_48D4 = $409B +LABEL_48D5 = $409C +LABEL_48F0 = $40B7 +LABEL_4917 = $40DE +LABEL_4926 = $40EB +LABEL_4935 = $40F8 +LABEL_4944 = $4105 +LABEL_4951 = $4112 +LABEL_4960 = $411F +LABEL_498A = $4145 +LABEL_49CF = $418A +LABEL_59E_218 = $05B7 +LABEL_5D93 = $553F +LABEL_5E24 = $55D1 +LABEL_5E42 = $55F0 +LABEL_5E62 = $5610 +LABEL_5EA1 = $564F +LABEL_5EE4 = $5692 +LABEL_5EFD = $56A9 +LABEL_5F29 = $56D3 +LABEL_5F3D = $56E6 +LABEL_5F73 = $56F9 +LABEL_60E9 = $586B +LABEL_611D = $589F +LABEL_6127 = $58A9 +LABEL_6131 = $58B3 +LABEL_6139 = $58BB +LABEL_615C = $58DC +LABEL_617C = $58FC +LABEL_61C2 = $5942 +LABEL_61FA = $597A +LABEL_620F = $5989 +LABEL_6212 = $5992 +LABEL_623F = $59BF +LABEL_62A7 = $5A26 +LABEL_62FD = $5A7C +LABEL_6311 = $5A90 +LABEL_6313 = $5A92 +LABEL_631A = $5A99 +LABEL_6344 = $5AC3 +LABEL_634C = $5ACB +LABEL_6355 = $5AD4 +LABEL_635B = $5ADA +LABEL_636B = $5AEA +LABEL_63A9 = $5B23 +LABEL_63C0 = $5B39 +LABEL_63E5 = $5B58 +LABEL_6424 = $5B97 +LABEL_6425 = $5B98 +LABEL_643C = $5BAF +LABEL_6454 = $5BC7 +LABEL_6483 = $5BF6 +LABEL_64B1 = $5C24 +LABEL_64D4 = $5C47 +LABEL_6544 = $5CB7 +LABEL_656B = $5CDE +LABEL_6576 = $5CE9 +LABEL_66FB = $5E67 +LABEL_670F = $5E7B +LABEL_677C = $5EE8 +LABEL_6791 = $5EFD +LABEL_67B1 = $5F1D +LABEL_6938 = $608B +LABEL_6956 = $60A9 +LABEL_697D = $60D0 +LABEL_698F = $60E2 +LABEL_69F5 = $6146 +LABEL_6A25 = $6171 +LABEL_6A7E = $61C8 +LABEL_6ACD = $6213 +LABEL_6B17 = $625C +LABEL_6B47 = $628C +LABEL_6B61 = $62A6 +LABEL_6B85 = $62CA +LABEL_6B95 = $62DA +LABEL_6B96 = $62DB +LABEL_6B9B = $62E0 +LABEL_6BA7 = $62EC +LABEL_6BF2 = $6337 +LABEL_6C01 = $6346 +LABEL_6C21 = $6365 +LABEL_6C2D = $6371 +LABEL_6C3C = $6380 +LABEL_6C9C = $63E0 +LABEL_6C9D = $63E0 +LABEL_6CA0 = $63E0 +LABEL_6CA1 = $63E0 +LABEL_6CA2 = $63E1 +LABEL_6CAD = $63EC +LABEL_6CE2 = $641C +LABEL_6CF7 = $6431 +LABEL_6D0D = $6447 +LABEL_6D49 = $6481 +LABEL_6D52 = $648A +LABEL_6D81 = $64B3 +LABEL_6DAA = $64DB +LABEL_6DCC = $64FF +LABEL_6DD5 = $6506 +LABEL_6DED = $651E +LABEL_6E10 = $653C +LABEL_6E30 = $6557 +LABEL_6E56 = $657D +LABEL_6E8B = $65B2 +LABEL_6EB1 = $65D8 +LABEL_6F3 = $0637 +LABEL_6F82 = $6697 +LABEL_6FCE = $66E2 +LABEL_708D = $678C +LABEL_7172 = $686F +LABEL_7314 = $6A15 +LABEL_7378 = $6A73 +LABEL_75C5 = $6C88 +LABEL_7614 = $6C9F +LABEL_761E = $6CA9 +LABEL_7881 = $6F03 +LABEL_7F46 = $75BF +LABEL_7F74 = $75ED +LABEL_7F7E = $75F7 +LABEL_8003A = $8007 +LABEL_80049 = $8011 +LABEL_80066 = $801C +LABEL_8007E = $8025 +LABEL_80096 = $802F +LABEL_800A9 = $8039 +LABEL_800E5 = $8052 +LABEL_800F2 = $805F +LABEL_80114 = $807C +LABEL_8011E = $8086 +LABEL_80129 = $8091 +LABEL_80131 = $8099 +LABEL_8013E = $80A1 +LABEL_8013F = $80A2 +LABEL_80154 = $80B7 +LABEL_8015A = $80BD +LABEL_8015B = $80BE +LABEL_80167 = $80CA +LABEL_80170 = $80D3 +LABEL_80181 = $80DA +LABEL_80194 = $80E3 +LABEL_801A7 = $80EC +LABEL_801B3 = $80F8 +LABEL_801BA = $80FF +LABEL_801C1 = $8106 +LABEL_801C4 = $8109 +LABEL_80201 = $8145 +LABEL_80222 = $816F +LABEL_80225 = $8172 +LABEL_8022A = $8177 +LABEL_8024A = $81A8 +LABEL_80258 = $81B4 +LABEL_80262 = $81BE +LABEL_80280 = $81E1 +LABEL_8028F = $81F0 +LABEL_8029E = $81FE +LABEL_802A1 = $8206 +LABEL_802AB = $8210 +LABEL_802B5 = $821A +LABEL_802C1 = $8226 +LABEL_802C3 = $8228 +LABEL_802CD = $8232 +LABEL_802CE = $8233 +LABEL_802D0 = $824A +LABEL_802D4 = $8253 +LABEL_802EF = $827A +LABEL_80303 = $828E +LABEL_80304 = $828F +LABEL_80325 = $82AE +LABEL_80348 = $82B2 +LABEL_8040D = $8346 +LABEL_81D = $0747 +LABEL_8A4 = $07C5 +LABEL_91B = $0835 +LABEL_9C4 = $08D7 +LABEL_A13 = $0922 +LABEL_A27 = $0931 +LABEL_A2C = $0954 +LABEL_F41 = $0BFE +LABEL_FB9 = $0C75 +LANGUAGE = $0002 +LASTBANKNUMBER = $001F +LASTLEVEL = $0007 +LASTTILEMAPTRIG = $D4C2 +LCDBPP8 = $0027 +LCDHEIGHT = $00F0 +LCDNORMALMODE = $092D +LCDWIDTH = $0140 +LEVEL_ALZ = $0002 +LEVEL_CEZ = $0006 +LEVEL_END = $0007 +LEVEL_GHZ = $0003 +LEVEL_GMZ = $0004 +LEVEL_INTRO = $0009 +LEVEL_SEZ = $0005 +LEVEL_SHZ = $0001 +LEVEL_UGZ = $0000 +LEVELATTRIBUTES = $D15E +LEVELATTRIBUTES.DATAOFFSET = $D16E +LEVELATTRIBUTES.IX01 = $D15F +LEVELATTRIBUTES.LAYOUTBANK = $D163 +LEVELATTRIBUTES.LAYOUTPTR = $D166 +LEVELATTRIBUTES.METATILEBANK = $D162 +LEVELATTRIBUTES.METATILEPTR = $D164 +LEVELATTRIBUTES.METATILEX = $D160 +LEVELATTRIBUTES.METATILEY = $D161 +LEVELATTRIBUTES.STRIDETABLE = $D168 +LEVELATTRIBUTES.VIEWPORTFLAGS = $D15E +LEVELATTRIBUTES.WIDTH = $D16C +LEVELATTRIBUTES.WIDTHNEG = $D16A +LEVELDATASTART = $C001 +LEVELDEMOHEADERS = $1DD9 +LEVELDESCRIPTOR.DATAOFFSET = $0010 +LEVELDESCRIPTOR.IX01 = $0001 +LEVELDESCRIPTOR.LAYOUTBANK = $0005 +LEVELDESCRIPTOR.LAYOUTPTR = $0008 +LEVELDESCRIPTOR.METATILEBANK = $0004 +LEVELDESCRIPTOR.METATILEPTR = $0006 +LEVELDESCRIPTOR.METATILEX = $0002 +LEVELDESCRIPTOR.METATILEY = $0003 +LEVELDESCRIPTOR.STRIDETABLE = $000A +LEVELDESCRIPTOR.VIEWPORTFLAGS = $0000 +LEVELDESCRIPTOR.WIDTH = $000E +LEVELDESCRIPTOR.WIDTHNEG = $000C +LEVELHEADER_5803 = $4F8B +LEVELHEADER_5819 = $4FA1 +LEVELHEADER_ALZ1 = $4E41 +LEVELHEADER_ALZ2 = $4E57 +LEVELHEADER_ALZ3 = $4E6D +LEVELHEADER_CEZ1 = $4F49 +LEVELHEADER_CEZ2 = $4F5F +LEVELHEADER_CEZ3 = $4F75 +LEVELHEADER_GHZ1 = $4DBD +LEVELHEADER_GHZ2 = $4DD3 +LEVELHEADER_GHZ3 = $4DE9 +LEVELHEADER_GMZ1 = $4EC5 +LEVELHEADER_GMZ2 = $4EDB +LEVELHEADER_GMZ3 = $4EF1 +LEVELHEADER_INTRO = $4FB7 +LEVELHEADER_SEZ1 = $4F07 +LEVELHEADER_SEZ2 = $4F1D +LEVELHEADER_SEZ3 = $4F33 +LEVELHEADER_SHZ1 = $4DFF +LEVELHEADER_SHZ2 = $4E15 +LEVELHEADER_SHZ3 = $4E2B +LEVELHEADER_TITLE = $4FCD +LEVELHEADER_UGZ1 = $4E83 +LEVELHEADER_UGZ2 = $4E99 +LEVELHEADER_UGZ3 = $4EAF +LEVELHEADERS = $4D6D +LEVELHEADERS_ALZ = $4D8D +LEVELHEADERS_CEZ = $4DA5 +LEVELHEADERS_GHZ = $4D93 +LEVELHEADERS_GMZ = $4D99 +LEVELHEADERS_INTRO_TITLE = $4DB7 +LEVELHEADERS_SEZ = $4D9F +LEVELHEADERS_SHZ = $4D87 +LEVELHEADERS_UGZ = $4D81 +LEVELHEADERS_UNK1 = $4DAB +LEVELHEADERS_UNK2 = $4DB1 +LEVELLAYOUT = $C001 +LEVELLAYOUT_DATA_INITPOS = $4B8A +LEVELLAYOUT_DATA_INITPOS_ALZ = $4BAA +LEVELLAYOUT_DATA_INITPOS_ALZ1 = $4C0A +LEVELLAYOUT_DATA_INITPOS_ALZ2 = $4C12 +LEVELLAYOUT_DATA_INITPOS_ALZ3 = $4C1A +LEVELLAYOUT_DATA_INITPOS_CEZ = $4BC2 +LEVELLAYOUT_DATA_INITPOS_CEZ1 = $4C6A +LEVELLAYOUT_DATA_INITPOS_CEZ2 = $4C72 +LEVELLAYOUT_DATA_INITPOS_CEZ3 = $4C7A +LEVELLAYOUT_DATA_INITPOS_GHZ = $4BB0 +LEVELLAYOUT_DATA_INITPOS_GHZ1 = $4C22 +LEVELLAYOUT_DATA_INITPOS_GHZ2 = $4C2A +LEVELLAYOUT_DATA_INITPOS_GHZ3 = $4C32 +LEVELLAYOUT_DATA_INITPOS_GMZ = $4BB6 +LEVELLAYOUT_DATA_INITPOS_GMZ1 = $4C3A +LEVELLAYOUT_DATA_INITPOS_GMZ2 = $4C42 +LEVELLAYOUT_DATA_INITPOS_GMZ3 = $4C4A +LEVELLAYOUT_DATA_INITPOS_SEZ = $4BBC +LEVELLAYOUT_DATA_INITPOS_SEZ1 = $4C52 +LEVELLAYOUT_DATA_INITPOS_SEZ2 = $4C5A +LEVELLAYOUT_DATA_INITPOS_SEZ3 = $4C62 +LEVELLAYOUT_DATA_INITPOS_SHZ = $4BA4 +LEVELLAYOUT_DATA_INITPOS_SHZ1 = $4BF2 +LEVELLAYOUT_DATA_INITPOS_SHZ2 = $4BFA +LEVELLAYOUT_DATA_INITPOS_SHZ3 = $4C02 +LEVELLAYOUT_DATA_INITPOS_UGZ = $4B9E +LEVELLAYOUT_DATA_INITPOS_UGZ1 = $4BDA +LEVELLAYOUT_DATA_INITPOS_UGZ2 = $4BE2 +LEVELLAYOUT_DATA_INITPOS_UGZ3 = $4BEA +LEVELPALETTEVALUES = $733A +LEVELSELECT_DRAWENTRIES = $0992 +LEVELSELECT_ENTRY1 = $0AD9 +LEVELSELECT_ENTRY10 = $0B21 +LEVELSELECT_ENTRY13 = $0B39 +LEVELSELECT_ENTRY16 = $0B51 +LEVELSELECT_ENTRY19 = $0B69 +LEVELSELECT_ENTRY4 = $0AF1 +LEVELSELECT_ENTRY7 = $0B09 +LEVELSELECT_FINISHSETUP = $09DB +LEVELSELECT_LOADFONT = $6D58 +LEVELSELECT_MAINLOOP = $0A36 +LEVELSELECT_TEXTENTRIES = $0976 +LEVELSELECT_TITLE = $0AC1 +LEVELSELECT_VALUES = $0A0C +LEVELSELECT_VRAMENTRIES = $0984 +LEVELSELECTCHECK = $047D +LEVELSELECTMENU = $0954 +LEVELSELECTTRG = $D12C +LEVELTILESETS = $7088 +LEVELTIMER = $D2B9 +LEVELTIMERTABLE = $DC00 +LEVELTIMERTRIGGER = $D2B8 +LIFECOUNTER = $D298 +LIVESONENTRY = $D297 +LOADBANKFROMRAM = $78E2 +LOADCOMPRESSEDTILE = $13D2 +LOADSHCSCREEN = $766C +LOADTILES = $135D +LOADUNCOMPRESSEDTILE = $13C3 +LOGIC_CHANGEDIRECTIONTOWARDSOBJECT = $5D09 +LOGIC_CHANGEDIRECTIONTOWARDSPLAYER = $5D05 +LOGIC_CHECKDESTROYOBJECT = $59FB +LOGIC_CMD_CALL = $5E20 +LOGIC_CMD_DEALLOCATE = $5E1D +LOGIC_CMD_DONOTHING = $5E36 +LOGIC_CMD_PLAYSOUND = $5F31 +LOGIC_CMD_PROCESSLOGIC = $5E17 +LOGIC_CMD_RESTARTSEQUENCE = $5E1A +LOGIC_CMD_SETSPEED = $5E37 +LOGIC_COMMANDVTABLE = $5DF7 +LOGIC_MOVEHORIZONTALTOWARDSOBJECT = $5D25 +LOGIC_MOVEHORIZONTALTOWARDSPLAYERAT0400 = $5D1F +LOGIC_MOVEVERTICALTOWARDSOBJECT = $5D5B +LOGIC_POINTERS = $5704 +LOGIC_PROCESSCOMMAND = $5DE1 +LOGIC_SETOBJECTFACINGLEFT = $5F46 +LOGIC_SETOBJECTFACINGRIGHT = $5F41 +LOGIC_TOGGLEOBJECTDIRECTION = $5F4B +LOGIC_UPDATEOBJECTDIRECTIONFLAG = $5CEE +LVP_CAMERA_LOCKED = $0007 +LVP_CAMERA_UPDATE_RQD = $0006 +LVP_COL_UPDATE_PENDING = $0005 +LVP_ROW_UPDATE_PENDING = $0004 +LVP_SCROLL_DOWN = $0001 +LVP_SCROLL_LEFT = $0002 +LVP_SCROLL_RIGHT = $0003 +LVP_SCROLL_UP = $0000 +MINECART_LOOKINGAHEAD = $3F70 +MINECART_LOOKINGDOWN = $3F88 +MINECART_LOOKINGUP = $3F7C +MINECART_SETSPRITE = $3F50 +MINECART_UPDATEANIMATION = $3F4F +MONITOR_ART_POINTERS = $7076 +MONITORTYPE_NONE0 = $0000 +MONITORTYPE_NONE1 = $0001 +MONITORTYPE_RINGS = $0002 +MOV9TOOP1 = $20320 +MPLCDCTRL = $E30018 +MPLCDICR = $E30028 +MPLCDIMSC = $E3001C +MPLCDPALETTE = $E30200 +MPLCDRIS = $E30020 +MPLCDTIMING1 = $E30004 +MULTTABLE_104 = $43D5 +MULTTABLE_120 = $4375 +MULTTABLE_128 = $4315 +MULTTABLE_16 = $4A55 +MULTTABLE_168 = $42D5 +MULTTABLE_24 = $48F5 +MULTTABLE_256 = $4275 +MULTTABLE_32 = $47D5 +MULTTABLE_40 = $46F5 +MULTTABLE_56 = $4655 +MULTTABLE_64 = $45B5 +MULTTABLE_72 = $4535 +MULTTABLE_80 = $44B5 +MULTTABLE_96 = $4435 +NEXTCONTROLBYTE = $D2D9 +OBJ_COL_BOTTOM = $0001 +OBJ_COL_LEFT = $0003 +OBJ_COL_RIGHT = $0002 +OBJ_COL_TOP = $0000 +OBJ_F23_BIT0 = $0000 +OBJ_F3_BIT1 = $0001 +OBJ_F3_BIT2 = $0002 +OBJ_F3_BIT3 = $0003 +OBJ_F3_BIT4 = $0004 +OBJ_F3_BIT5 = $0005 +OBJ_F3_BIT6 = $0006 +OBJ_F3_BIT7 = $0007 +OBJ_F3_IN_AIR = $0000 +OBJ_F4_BIT0 = $0000 +OBJ_F4_BIT1 = $0001 +OBJ_F4_BIT2 = $0002 +OBJ_F4_BIT3 = $0003 +OBJ_F4_BIT6 = $0006 +OBJ_F4_FACING_LEFT = $0004 +OBJ_F4_FLASHING = $0005 +OBJ_F4_VISIBLE = $0007 +OBJECT.ACTVOBJIDX = $003E +OBJECT.ANIMFRAME = $0006 +OBJECT.BGCOLFLAGS = $0022 +OBJECT.COLLIDINGOBJ = $0020 +OBJECT.D530 = $0030 +OBJECT.D531 = $0031 +OBJECT.D533 = $0033 +OBJECT.D534 = $0034 +OBJECT.D535 = $0035 +OBJECT.D536 = $0036 +OBJECT.D537 = $0037 +OBJECT.D538 = $0038 +OBJECT.D539 = $0039 +OBJECT.FLAGS03 = $0003 +OBJECT.FLAGS04 = $0004 +OBJECT.FLASHCOUNTER = $002E +OBJECT.FRAMECOUNTER = $0007 +OBJECT.HEIGHT = $002D +OBJECT.INITIALX = $003A +OBJECT.INITIALY = $003C +OBJECT.IX0A = $000A +OBJECT.IX0B = $000B +OBJECT.IX1E = $001E +OBJECT.IX1F = $001F +OBJECT.IX23 = $0023 +OBJECT.IX24 = $0024 +OBJECT.IX25 = $0025 +OBJECT.IX26 = $0026 +OBJECT.IX27 = $0027 +OBJECT.IX3F = $003F +OBJECT.LEFTFACINGIDX = $0009 +OBJECT.LOGICPTR = $000C +OBJECT.LOGICSEQPTR = $000E +OBJECT.OBJID = $0000 +OBJECT.POWERUP = $0032 +OBJECT.RIGHTFACINGIDX = $0008 +OBJECT.SCREENX = $001A +OBJECT.SCREENY = $001C +OBJECT.SPRCOLFLAGS = $0021 +OBJECT.SPRITECOUNT = $0005 +OBJECT.SPRMAPPGPTR = $0028 +OBJECT.SPROFFSETS = $002A +OBJECT.STATE = $0001 +OBJECT.STATENEXT = $0002 +OBJECT.SUBPIXELX = $0010 +OBJECT.SUBPIXELY = $0013 +OBJECT.VELX = $0016 +OBJECT.VELY = $0018 +OBJECT.WIDTH = $002C +OBJECT.X = $0011 +OBJECT.Y = $0014 +OBJECT_AIRCOUNTDOWN = $0009 +OBJECT_ALZ3_BOSS = $004A +OBJECT_ALZ_BUBBLE = $000A +OBJECT_BLOCKFRAGMENT = $0004 +OBJECT_BLOCKFRAGMENT2 = $0007 +OBJECT_CHAOSEMERALD1 = $0011 +OBJECT_CHAOSEMERALD2 = $0012 +OBJECT_CHAOSEMERALD3 = $0013 +OBJECT_CHAOSEMERALD4 = $0014 +OBJECT_CRAB = $0023 +OBJECT_CRABPROJECTILE = $0024 +OBJECT_DROPPEDRING = $0008 +OBJECT_EXPLOSION = $000F +OBJECT_GLIDER = $0027 +OBJECT_INTROCLOUDS = $001D +OBJECT_INTROTREE = $001E +OBJECT_INVALID = $001F +OBJECT_INVINCIBILITYSTAR = $0005 +OBJECT_MINECART = $0029 +OBJECT_MONITOR = $0010 +OBJECT_MOTOBUG = $0034 +OBJECT_NEWTRON = $0035 +OBJECT_NEWTRON_FIREBALL = $003C +OBJECT_PRISONANIMALS = $0041 +OBJECT_PRISONCAPSULE = $0040 +OBJECT_RINGSPARKLE = $0002 +OBJECT_SHZ3_BOSS = $0048 +OBJECT_SHZ3_BOSS_FIREBALL = $0049 +OBJECT_SHZ3_EGGCAPSULE = $0047 +OBJECT_SHZ3_SMALLBIRD1 = $0036 +OBJECT_SHZ3_SMALLBIRD2 = $0046 +OBJECT_SIGNPOST = $0018 +OBJECT_SIGNPOST2 = $0015 +OBJECT_SIGNPOST3 = $0016 +OBJECT_SIGNPOST4 = $0017 +OBJECT_SONIC = $0001 +OBJECT_SPEEDSHOESSTAR = $0003 +OBJECT_UGZ_CANNONBALL = $004C +OBJECT_UGZ_PINCERS = $004D +OBJECT_UGZ_ROBOTNIK = $004B +OBJECT_UGZFIREBALL = $000E +OBJECT_WATERSPLASH = $000B +PALETTE_CALCULATEOFFSET = $7791 +PALETTE_FADETOBLACK = $773A +PALETTE_FADETOCOLOUR = $76D6 +PALETTE_RESET = $76C6 +PALETTE_UPDATE = $7684 +PALETTE_UPDATECOLOURS = $76B6 +PALETTE_UPDATETRIG = $D4EA +PALETTEFADEOUT = $0DF0 +PALETTEFADETIME = $D2C8 +PALETTERESETTRG = $D131 +PALETTES = $F680 +PATTERNLOADCUE = $D3AB +PAUSEHANDLER_TRIG = $05F0 +PIXELSHADOW = $D031F6 +PLAYER = $D500 +PLAYER.ACTVOBJIDX = $D53E +PLAYER.ANIMFRAME = $D506 +PLAYER.BGCOLFLAGS = $D522 +PLAYER.COLLIDINGOBJ = $D520 +PLAYER.D530 = $D530 +PLAYER.D531 = $D531 +PLAYER.D533 = $D533 +PLAYER.D534 = $D534 +PLAYER.D535 = $D535 +PLAYER.D536 = $D536 +PLAYER.D537 = $D537 +PLAYER.D538 = $D538 +PLAYER.D539 = $D539 +PLAYER.FLAGS03 = $D503 +PLAYER.FLAGS04 = $D504 +PLAYER.FLASHCOUNTER = $D52E +PLAYER.FRAMECOUNTER = $D507 +PLAYER.HEIGHT = $D52D +PLAYER.INITIALX = $D53A +PLAYER.INITIALY = $D53C +PLAYER.IX0A = $D50A +PLAYER.IX0B = $D50B +PLAYER.IX1E = $D51E +PLAYER.IX1F = $D51F +PLAYER.IX23 = $D523 +PLAYER.IX24 = $D524 +PLAYER.IX25 = $D525 +PLAYER.IX26 = $D526 +PLAYER.IX27 = $D527 +PLAYER.IX2F = $D52F +PLAYER.IX3F = $D53F +PLAYER.LEFTFACINGIDX = $D509 +PLAYER.LOGICPTR = $D50C +PLAYER.LOGICSEQPTR = $D50E +PLAYER.OBJID = $D500 +PLAYER.POWERUP = $D532 +PLAYER.RIGHTFACINGIDX = $D508 +PLAYER.SCREENX = $D51A +PLAYER.SCREENY = $D51C +PLAYER.SPRCOLFLAGS = $D521 +PLAYER.SPRITECOUNT = $D505 +PLAYER.SPRMAPPGPTR = $D528 +PLAYER.SPROFFSETS = $D52A +PLAYER.STATE = $D501 +PLAYER.STATENEXT = $D502 +PLAYER.SUBPIXELX = $D510 +PLAYER.SUBPIXELY = $D513 +PLAYER.VELX = $D516 +PLAYER.VELY = $D518 +PLAYER.WIDTH = $D52C +PLAYER.X = $D511 +PLAYER.Y = $D514 +PLAYER_AIRTIMERHI = $D469 +PLAYER_AIRTIMERLO = $D468 +PLAYER_ALZ_WATERBOUNCE = $6B3D +PLAYER_ANIM_CALCBALANCEFRAME = $3162 +PLAYER_ANIM_CALCBALANCEFRAME_USEINPUTFLAGS = $31C0 +PLAYER_CALCACCEL = $3427 +PLAYER_CALCACCEL_GETVALUE = $3476 +PLAYER_CALCACCEL_NOBTNPRESS = $34D3 +PLAYER_CALCACCEL_UNDERWATER = $34AA +PLAYER_CALCGRAVITY = $33B4 +PLAYER_CALCGRAVITY_UNDERWATER = $33E2 +PLAYER_CALCULATEBALANCE = $30EC +PLAYER_CALCULATEBALANCE_LEFT = $3117 +PLAYER_CALCULATEBALANCE_NONE = $3129 +PLAYER_CALCULATEBALANCE_RIGHT = $3120 +PLAYER_CALCULATELOOPFALLFRAME = $31DC +PLAYER_CALCULATELOOPFRAME = $3229 +PLAYER_CHANGEFRAMEDISPLAYTIME = $312E +PLAYER_CHECKFINISHSKID = $2B04 +PLAYER_CHECKHORIZONTALLEVELCOLLISION = $6800 +PLAYER_CHECKHORIZONTALLEVELCOLLISION_LEFT = $686F +PLAYER_CHECKSKID = $2B61 +PLAYER_CHECKTOPLEVELCOLLISION = $69BB +PLAYER_CLEARCOLLIDINGOBJECT = $30E7 +PLAYER_COLLIDEBREAKABLEBLOCK_UPDATEMAPPINGS = $6918 +PLAYER_COLLIDEHORIZONTALWITHPIPEBLOCK = $682D +PLAYER_COLLIDELEFTBREAKABLEBLOCK = $68F3 +PLAYER_COLLIDELEFTSOLIDBLOCK = $6891 +PLAYER_COLLIDELEFTWITHSPIKEBLOCK = $698D +PLAYER_COLLIDERIGHTBREAKABLEBLOCK = $68C5 +PLAYER_COLLIDERIGHTWITHSOLIDBLOCK = $6836 +PLAYER_COLLIDERIGHTWITHSPIKEBLOCK = $696A +PLAYER_COLLIDESPIKEBLOCK_PLAYERHURT = $69AD +PLAYER_COLLIDETOPSOLIDBLOCK = $69E7 +PLAYER_COLLIDETOPVERTICALSPRING = $6A1C +PLAYER_COLLIDETOPWITHSPIKEBLOCK = $6A25 +PLAYER_COLLIDEVERTICALWITHPIPEBLOCK = $6A6A +PLAYER_COLLIDEWITHRINGBLOCK = $6A95 +PLAYER_DELTAVX = $D36F +PLAYER_ENTERPIPE = $65DE +PLAYER_ENTERPIPE_BOTTOM = $65FD +PLAYER_ENTERPIPE_LEFT = $664C +PLAYER_ENTERPIPE_RETURN = $6696 +PLAYER_ENTERPIPE_RIGHT = $6673 +PLAYER_ENTERPIPE_TOP = $6625 +PLAYER_FLASHCOUNTER = $D3A9 +PLAYER_FLASHOBJECT = $30BA +PLAYER_HANDLEBALANCE = $2A09 +PLAYER_HANDLECROUCHED = $2A78 +PLAYER_HANDLEDIAGONALSPRING = $2C7D +PLAYER_HANDLEENDOFLEVEL = $2D37 +PLAYER_HANDLEENDOFLEVEL_EXITLEFT = $2DA1 +PLAYER_HANDLEENDOFLEVEL_EXITRIGHT = $2D7F +PLAYER_HANDLEENDOFLEVEL_INCLEVEL = $2D65 +PLAYER_HANDLEFALLING = $2C95 +PLAYER_HANDLEIDLE = $2A33 +PLAYER_HANDLEJUMPING = $2C29 +PLAYER_HANDLELOOKUP = $2A56 +PLAYER_HANDLEROLLING = $2BE8 +PLAYER_HANDLERUNNING = $2B7D +PLAYER_HANDLESKIDLEFT = $2BC5 +PLAYER_HANDLESKIDRIGHT = $2BA2 +PLAYER_HANDLESPINDASH = $2A94 +PLAYER_HANDLESTANDING = $29D0 +PLAYER_HANDLEVERTICALSPRING = $2C63 +PLAYER_HANDLEWALK = $2ABF +PLAYER_HURTTRIGGER = $D3A8 +PLAYER_KILLTRIGGER = $D49F +PLAYER_MAXVELX = $D36D +PLAYER_METATILEDELTAVX = $D371 +PLAYER_MINECART_HANDLE = $3F2F +PLAYER_NOP = $2F97 +PLAYER_PLAYHURTANIMATION = $301D +PLAYER_RAMPLAUNCH = $651E +PLAYER_ROLLINGCHECKSKID = $2B24 +PLAYER_SETSTATE_CROUCH = $2881 +PLAYER_SETSTATE_DEAD = $3057 +PLAYER_SETSTATE_DIAGONALSPRING = $2932 +PLAYER_SETSTATE_FALLING = $2968 +PLAYER_SETSTATE_HORIZONTALSPRING = $294E +PLAYER_SETSTATE_HURT = $2FE8 +PLAYER_SETSTATE_JUMPFROMRAMP = $2901 +PLAYER_SETSTATE_JUMPING = $32D9 +PLAYER_SETSTATE_LOOKUP = $2873 +PLAYER_SETSTATE_MOVEBACK = $2EAC +PLAYER_SETSTATE_ROLL = $28CF +PLAYER_SETSTATE_ROLL_SPINDASHRELEASE = $28EB +PLAYER_SETSTATE_RUNNING = $28A6 +PLAYER_SETSTATE_SKIDLEFT = $28C1 +PLAYER_SETSTATE_SKIDRIGHT = $28B3 +PLAYER_SETSTATE_SPINDASH = $2897 +PLAYER_SETSTATE_STANDING = $282D +PLAYER_SETSTATE_VERTICALSPRING = $2912 +PLAYER_SETSTATE_WALKING = $2851 +PLAYER_UNDERWATERFLAG = $D467 +PLAYER_UPDATEPLAYER.VELY = $3396 +PLAYER_UPDATEPOSITIONX = $3329 +PLAYER_UPDATEPOSITIONX_SETZERO = $338C +PLAYER_UPDATEVPOS = $3403 +PLAYEROBJ = $D500 +PLAYERSTATE_16 = $0010 +PLAYERSTATE_ALZ_BUBBLE = $0024 +PLAYERSTATE_ALZSLOPE = $001A +PLAYERSTATE_BALANCE = $0019 +PLAYERSTATE_CONTINUESCREEN = $002F +PLAYERSTATE_CROUCH = $0004 +PLAYERSTATE_DIAGONALSPRING = $001C +PLAYERSTATE_DROWNING = $0028 +PLAYERSTATE_ENDOFLEVEL = $0020 +PLAYERSTATE_ENDSEQ_INIT = $002A +PLAYERSTATE_ENDSEQUENCE = $002B +PLAYERSTATE_ENTERMINECART = $0016 +PLAYERSTATE_FALLFROMLOOP = $001D +PLAYERSTATE_FALLING = $000E +PLAYERSTATE_HANGGLIDER = $0013 +PLAYERSTATE_HANGGLIDERBACK = $0014 +PLAYERSTATE_HANGGLIDERFWD = $0015 +PLAYERSTATE_HURT = $001E +PLAYERSTATE_IDLE = $0002 +PLAYERSTATE_INMINECART = $0017 +PLAYERSTATE_INPIPE = $0021 +PLAYERSTATE_JUMPFROMRAMP = $001B +PLAYERSTATE_JUMPING = $000A +PLAYERSTATE_LOOKUP = $0003 +PLAYERSTATE_LOSTLIFE = $001F +PLAYERSTATE_ONLOOP = $000C +PLAYERSTATE_ROLLING = $0009 +PLAYERSTATE_RUNNING = $0006 +PLAYERSTATE_SHZ3_BOSS_FALL = $0026 +PLAYERSTATE_SKIDDINGLEFT = $0008 +PLAYERSTATE_SKIDDINGRIGHT = $0007 +PLAYERSTATE_SPINDASH = $0034 +PLAYERSTATE_STANDING = $0001 +PLAYERSTATE_UGZ_BOSS = $0023 +PLAYERSTATE_VERTICALSPRING = $000B +PLAYERSTATE_WALKING = $0005 +PLC_BANKNUMBER = $D3AC +PLC_BYTECOUNT = $D3AD +PLC_DESCRIPTOR = $D3B2 +PLC_ENDOFLEVELPATTERNS = $6FB1 +PLC_EOL_ALZ_BOSS = $6FF0 +PLC_EOL_GHZ_BOSS = $6FFD +PLC_EOL_GMZ_BOSS = $6FDC +PLC_EOL_PRISONCAPSULE = $6FC7 +PLC_EOL_PRISONCAPSULEANIMALS = $6FCE +PLC_EOL_SEZ_BOSS = $700B +PLC_EOL_SHZ_BOSS = $6FE9 +PLC_EOL_SIGNPOST = $6FD5 +PLC_EOL_UGZ_BOSS = $7004 +PLC_EOL_UNKNOWN_2 = $7018 +PLC_EOL_UNKNOWN_3 = $7019 +PLC_SOURCEADDR = $D3AE +PLC_VRAMADDR = $D3B0 +PLOTSSCREEN = $D09466 +PORT_IOPORT1 = $00DC +PORT_VDPADDRESS = $00BF +PORT_VDPDATA = $00BE +PORT_VDPSTATUS = $00BF +PORTS_GG_START = $0000 +PORTS_IO1 = $00DC +PORTS_IO2 = $00DD +PORTS_IO_CONTROL = $003F +PORTS_VDP_CONTROL = $00BF +PORTS_VDP_DATA = $00BE +PORTS_VDP_HCOUNTER = $007F +PORTS_VDP_VCOUNTER = $007E +PUTBANKINSLOT2 = $78D1 +RAMSTART = $D00000 +READINPUT = $12C5 +RENDEREDSCREENMAP = $D52C00 +RENDERSCREENMAP = $D27AA3 +RENDERSCREENMAP_NULLSCROLL = $D27AF2 +RESTOREREGISTERS = $78B6 +RINGARTPOINTERS = $1BAF +RINGARTPOINTERS_ALZ = $1BCF +RINGARTPOINTERS_ALZ1 = $1C35 +RINGARTPOINTERS_ALZ2 = $1C3F +RINGARTPOINTERS_ALZ3 = $1C49 +RINGARTPOINTERS_CEZ = $1BE7 +RINGARTPOINTERS_CEZ1 = $1CAD +RINGARTPOINTERS_CEZ2 = $1CB7 +RINGARTPOINTERS_CEZ3 = $1CC1 +RINGARTPOINTERS_GHZ = $1BD5 +RINGARTPOINTERS_GHZ1 = $1BF9 +RINGARTPOINTERS_GHZ2 = $1C03 +RINGARTPOINTERS_GHZ3 = $1C0D +RINGARTPOINTERS_GMZ = $1BDB +RINGARTPOINTERS_GMZ1 = $1C71 +RINGARTPOINTERS_GMZ2 = $1C7B +RINGARTPOINTERS_GMZ3 = $1C85 +RINGARTPOINTERS_SEZ = $1BE1 +RINGARTPOINTERS_SEZ1 = $1C8F +RINGARTPOINTERS_SEZ2 = $1C99 +RINGARTPOINTERS_SEZ3 = $1CA3 +RINGARTPOINTERS_SHZ = $1BC9 +RINGARTPOINTERS_SHZ1 = $1C17 +RINGARTPOINTERS_SHZ2 = $1C21 +RINGARTPOINTERS_SHZ3 = $1C2B +RINGARTPOINTERS_UGZ = $1BC3 +RINGARTPOINTERS_UGZ1 = $1C53 +RINGARTPOINTERS_UGZ2 = $1C5D +RINGARTPOINTERS_UGZ3 = $1C67 +RINGCOUNTER = $D299 +ROM_HEADER = $7674 +ROMSTART = $D20000 +SAT = $D64B00 +SAVESP = $DE02 +SAVESSCREEN = $D0EA1F +SCORE = $D29C +SCORE_ADDBADNIKVALUE = $1588 +SCORE_ADDBOSSVALUE = $158E +SCORE_ADDVALUE = $1955 +SCORE_BADNIKVALUE = $174C +SCORE_BOSSVALUE = $174F +SCORE_CALCULATEACTTIMESCORE = $17CA +SCORE_CALCULATEACTTIMESCORE_SEC = $17EA +SCORE_CONVERTBCDTOASCI = $1713 +SCORECARD_LOADMAPPINGS = $6E37 +SCORECARD_MAPPINGS_BLANK = $170B +SCORECARD_MAPPINGS_NUMBERS = $16E3 +SCORECARD_UPDATESCORE = $1519 +SCRAPMEM = $D02AD7 +SCREENMAP = $D64400 +SCROLLADJUSTVALUES = $05C3 +SCROLLINGTEXT_UPDATESPRITES = $210A +SEGASP = $DE05 +SEGATILECACHE = $D031F6 +SEGATILEFLAGS = $D64C00 +SEGAVRAM = $D60C00 +SETCACHEDTILE_DRAWINGGAP = $D27C08 +SETCACHEDTILE_DRAWINGGAPY = $D27BCA +SETSCANLINESKIP = $D27D4A +SETSPRITECOORDS = $D27D05 +SETSPRITECOORDS_NOCLIP = $D27D0C +SETSPRITEPTR = $D27D29 +SETTILECACHEFLAGS = $14BB +SHCHEADER = $7A76 +SMS_PALETTE = $0E33 +SOURCEPOINTER = $D348 +SPECOBJ_HIDETIMERRINGS = $0006 +SPRITEDEF.BANKNUM = $0000 +SPRITEDEF.LINECOUNT = $0003 +SPRITEDEF.SOURCEADDRESS = $0001 +STOREBANKADDRESS = $7921 +STOREBANKPOINTERS = $78F0 +STOREREGISTERS = $789B +TEMPSP = $D0053F +TEMPSPRITEBUFFER = $D0E100 +TILECOUNT = $D342 +TILESET_ALZ = $71DE +TILESET_CEZ = $72BE +TILESET_CEZ3 = $72FB +TILESET_GHZ = $721B +TILESET_GMZ = $7249 +TILESET_INTRO = $7325 +TILESET_SEZ = $7286 +TILESET_SHZ = $719C +TILESET_UGZ = $715A +TILESET_UNK1 = $730B +TILESETENTRY.BANKNUM = $0000 +TILESETENTRY.SOURCEADDRESS = $0003 +TILESETENTRY.VRAMADDRESS = $0001 +TILESETHEADER.BANKNUM = $0000 +TILESETHEADER.ENTRIES = $0005 +TILESETHEADER.SOURCEADDRESS = $0003 +TILESETHEADER.VRAMADDRESS = $0001 +TIME_1SECOND = $003C +TIME_2SECONDS = $0078 +TIME_3SECONDS = $00B4 +TITLECARD_LOADACTLOGOMAPPINGS = $1F33 +TITLECARD_LOADANDDRAW = $1EC2 +TITLECARD_LOADTEXT = $1EFA +TITLECARD_LOADTILES = $6D6D +TITLECARD_LOADZONETEXT = $1F5D +TITLECARD_MAPPINGS = $211B +TITLECARD_PICTUREPOINTERS = $6DE2 +TITLECARD_SCROLLACTLOGO = $1FD1 +TITLECARD_SCROLLTEXTFROMLEFT = $1F8F +TITLESCREEN_CHANGEPRESSSTARTTEXT = $0D1F +UNK_01 = $D001 +UNK_02 = $D12D +UNK_03 = $D130 +UNK_04 = $D132 +UNK_05 = $D176 +UNK_06 = $D203 +UPDATECYCLINGPALETTE_CONVEYOR = $7496 +UPDATECYCLINGPALETTE_DONOTHING = $73BC +UPDATECYCLINGPALETTE_DONOTHING2 = $73CB +UPDATECYCLINGPALETTE_JUMPVECTORS = $739C +UPDATECYCLINGPALETTE_LAVA = $7432 +UPDATECYCLINGPALETTE_LIGHTNING = $7551 +UPDATECYCLINGPALETTE_LIGHTNING2 = $7581 +UPDATECYCLINGPALETTE_ORB = $7522 +UPDATECYCLINGPALETTE_RAIN = $73CC +UPDATECYCLINGPALETTE_SCROLLINGTEXT = $759E +UPDATECYCLINGPALETTE_SHZ_LIGHTNING = $73FE +UPDATECYCLINGPALETTE_UNKNOWN2 = $74C8 +UPDATECYCLINGPALETTE_WALLLIGHTING = $74F7 +UPDATECYCLINGPALETTE_WATER = $7464 +UPDATECYCLINGPALETTEBANK = $738C +UPDATEPALETTESONLY = $D4A3 +VDP_224LINESELECTBIT = $0010 +VDP_240LINESELECTBIT = $0008 +VDP_CLEARSAT = $105E +VDP_CLEARSCREEN = $102B +VDP_CLEARSCREENMAP = $1015 +VDP_CLEARTILECACHE = $104B +VDP_COPY = $0F4B +VDP_DEFAULTTILEATTRIBS = $D2C7 +VDP_DISABLEFRAMEINTERRUPT = $0F7B +VDP_DISPLAYVISIBLEBIT = $0040 +VDP_DISPMODE_M1 = $0001 +VDP_DISPMODE_M2 = $0002 +VDP_DISPMODE_M3 = $0004 +VDP_DISPMODE_M4 = $0008 +VDP_DISPMODE_SMS_224 = $000B +VDP_DISPMODE_SMS_240 = $000E +VDP_DRAWTEXT = $0F83 +VDP_ENABLEFRAMEINTERRUPT = $0F73 +VDP_EXTRAHEIGHTBIT = $0002 +VDP_FRAMEINTERRUPTSBIT = $0020 +VDP_HSCROLL = $D877 +VDP_HSCROLLBIT = $0040 +VDP_INITREGISTERS = $0EB3 +VDP_LARGESPRITESBIT = $0002 +VDP_LINEINTERRUPTSBIT = $0010 +VDP_MASKCOLUMN0BIT = $0020 +VDP_MODE4BIT = $0004 +VDP_READBYTE = $0F0B +VDP_READSTATUS = $0EE2 +VDP_SATADDRESS = $D64B00 +VDP_SATUPDATETRIG = $D134 +VDP_SCREENMAP = $D64400 +VDP_SENDREAD = $0EF3 +VDP_SETADDRESS = $0EE6 +VDP_SETMODE2REG_DISPLAYOFF = $0F6B +VDP_SETMODE2REG_DISPLAYON = $0F63 +VDP_SETREGISTER = $0ECB +VDP_SPRITEDOUBLINGBIT = $0001 +VDP_SPRITESHIFTBIT = $0008 +VDP_SYNCENABLEBIT = $0001 +VDP_TILECOLBUFFER = $D17F +VDP_TILEROWBUFFER = $D1BB +VDP_UPDATESAT = $0FE2 +VDP_UPDATESAT_ATTRIBUTES = $0FF3 +VDP_VIEWPORTX = $D179 +VDP_VIEWPORTY = $D17C +VDP_VSCROLL = $D878 +VDP_VSCROLLBIT = $0080 +VDP_WORKINGSAT = $DB00 +VDP_WORKINGSAT_HPOS = $DB40 +VDP_WORKINGSAT_VPOS = $DB00 +VDP_WRITE = $0F2C +VDP_WRITEANDSKIP = $0F19 +VDP_WRITEBYTE = $0EFE +VDPREGISTER0 = $D11E +VDPREGISTER1 = $D11F +VDPREGISTER2 = $D120 +VDPREGISTER3 = $D121 +VDPREGISTER4 = $D122 +VDPREGISTER5 = $D123 +VDPREGISTER6 = $D124 +VERSION = $0002 +VF_DONOTHING = $022A +VF_ENGINE_ADJUSTPLAYERAFTERCOLLISION = $0227 +VF_ENGINE_ALLOCATEOBJECTHIGHPRIORITY = $0200 +VF_ENGINE_ALLOCATEOBJECTLOWPRIORITY = $0203 +VF_ENGINE_CAPLIFECOUNTERVALUE = $030B +VF_ENGINE_CHANGELEVELMUSIC = $0314 +VF_ENGINE_CHECKCOLLISION = $025A +VF_ENGINE_CHECKCOLLISIONANDADJUSTPLAYER = $0218 +VF_ENGINE_CREATEBLOCKFRAGMENTOBJECTS = $02E4 +VF_ENGINE_DEALLOCATEOBJECT = $0206 +VF_ENGINE_DISPLAYEXPLOSIONOBJECT = $025D +VF_ENGINE_GETCOLLISIONVALUEFORBLOCK = $0263 +VF_ENGINE_GETOBJECTDESCRIPTORPOINTER = $0233 +VF_ENGINE_GETOBJECTINDEXFROMPOINTER = $0230 +VF_ENGINE_INCREMENTRINGCOUNTER = $026C +VF_ENGINE_LOCKCAMERA = $0275 +VF_ENGINE_MOVEOBJECTTOPLAYER = $0209 +VF_ENGINE_RELEASECAMERA = $0278 +VF_ENGINE_REMOVEBREAKABLEBLOCK = $0311 +VF_ENGINE_SETCAMERAANDLOCK = $02F6 +VF_ENGINE_SETMAXIMUMCAMERAX = $0305 +VF_ENGINE_SETMINIMUMCAMERAX = $0302 +VF_ENGINE_SETOBJECTVERTICALSPEED = $020F +VF_ENGINE_UPDATEOBJECTPOSITION = $0257 +VF_ENGINE_UPDATERINGCOUNTERSPRITES = $030E +VF_LOGIC_CHANGEDIRECTIONTOWARDSOBJECT = $0242 +VF_LOGIC_CHANGEDIRECTIONTOWARDSPLAYER = $023F +VF_LOGIC_CHECKDESTROYOBJECT = $020C +VF_LOGIC_MOVEHORIZONTALTOWARDSOBJECT = $0248 +VF_LOGIC_MOVEHORIZONTALTOWARDSPLAYERAT0400 = $0245 +VF_LOGIC_MOVEVERTICALTOWARDSOBJECT = $024B +VF_LOGIC_SETOBJECTFACINGLEFT = $0251 +VF_LOGIC_SETOBJECTFACINGRIGHT = $024E +VF_LOGIC_TOGGLEOBJECTDIRECTION = $0254 +VF_LOGIC_UPDATEOBJECTDIRECTIONFLAG = $023C +VF_PLAYER_ANIM_CALCBALANCEFRAME = $02FC +VF_PLAYER_CALCULATELOOPFALLFRAME = $0272 +VF_PLAYER_CALCULATELOOPFRAME = $026F +VF_PLAYER_CHANGEFRAMEDISPLAYTIME = $02F9 +VF_PLAYER_HANDLEBALANCE = $02F0 +VF_PLAYER_HANDLECROUCHED = $02A8 +VF_PLAYER_HANDLEDIAGONALSPRING = $02A5 +VF_PLAYER_HANDLEENDOFLEVEL = $02BD +VF_PLAYER_HANDLEFALLING = $028D +VF_PLAYER_HANDLEIDLE = $02C3 +VF_PLAYER_HANDLEJUMPING = $029F +VF_PLAYER_HANDLELOOKUP = $02AB +VF_PLAYER_HANDLEROLLING = $02B1 +VF_PLAYER_HANDLERUNNING = $02BA +VF_PLAYER_HANDLESKIDLEFT = $02CF +VF_PLAYER_HANDLESKIDRIGHT = $02CC +VF_PLAYER_HANDLESPINDASH = $0323 +VF_PLAYER_HANDLESTANDING = $0269 +VF_PLAYER_HANDLEVERTICALSPRING = $0284 +VF_PLAYER_HANDLEWALK = $02D8 +VF_PLAYER_NOP = $02C6 +VF_PLAYER_PLAYHURTANIMATION = $027B +VF_PLAYER_SETSTATE_MOVEBACK = $02B7 +VF_SCORE_ADDBADNIKVALUE = $0317 +VF_SCORE_ADDBOSSVALUE = $031A +VF_UPDATECYCLINGPALETTE_SCROLLINGTEXT = $02DE +VRAM = $D40000 +VRAMEND = $D65800 +VRAMPOINTER = $DE00 +WAIT_1S = $05AF +WORKINGCRAM = $D4C6 +WRITEBLANKTILE = $145E +WRITEMIRROREDTILETOVRAM = $1499 +WRITETILETOVRAM = $1469 +XORDECODE = $1403 diff --git a/src/bin/sonic2.8xp b/src/bin/sonic2.8xp index 84ce0c0..e4dd999 100644 Binary files a/src/bin/sonic2.8xp and b/src/bin/sonic2.8xp differ diff --git a/src/end_credits.asm b/src/end_credits.asm index 4fbab3e..59140a7 100644 --- a/src/end_credits.asm +++ b/src/end_credits.asm @@ -38,5 +38,6 @@ .db "THANKS TINY-H, " .db "THANKS OMNIMAGA" .db "THANKS MATEO " +.db "THANKS PIXELCAT" .db " ,AND YOU" .db $FF \ No newline at end of file diff --git a/src/evaluate_game.asm b/src/evaluate_game.asm new file mode 100644 index 0000000..31ab313 --- /dev/null +++ b/src/evaluate_game.asm @@ -0,0 +1,349 @@ +EvaluateGame: + di + + ld hl, EndBG + ld de, VRAM + call DecompressZX0 + + ld hl, EndPal + ld de, mpLcdPalette + ld bc, 46 + ldir + + call DrawLevelTime + call DrawTotalTime + call DrawEmeralds + ld hl, kbdG1 +_: bit kbit2nd, (hl) + jr z, -_ + ld sp, ($D2DE02) ;reset SP + jp SetupGame ;reset game + + +DrawLevelTime: + ld hl, WhiteNumbers + ld (TextColor+1), hl + + ld b, 7 + ld c, 0 + ld ix, LevelTimerTable+romStart + +_: push bc + ld l, c + ld h, 3 + mlt hl + ld de, TextCoords + add hl, de + ld de, 0 + + ld hl, (hl) + ld b, 3 +_: push bc + push hl + ld a, (ix+1) + call PTRToDoubleDigits + pop hl + + push hl + ld de, 24 + add hl, de + ld a, (ix) + call PTRToDoubleDigits + pop hl + + ld de, 320*8 + add hl, de + lea ix, ix+2 + pop bc + djnz -_ + + pop bc + inc c + djnz --_ + ret + +PTRToDoubleDigits: + ld (DoubleDigitCoords), hl + push hl + call DrawDoubleDigits + pop hl + ld de, 8 + add hl, de + ret + +DrawTotalTime: + ld hl, YellowNumbers + ld (TextColor+1), hl + + ld ix, LevelTimerTable + romStart + xor a + ld b, 21 ;number of levels + ;tally minutes +_: add a, (ix+1) + lea ix, ix+2 + djnz -_ + + ;tally hours +_: inc b + sub a, 60 + jr nc, -_ + dec b + add a, 60 ;A = total minutes + + ex af, af' + ld l, b + ld a, b + or a + jr z, +_ + call CalcTextPTR + + ld de, $D45374 - 20 + ld bc, $0808 + call DrawArt + +_: ld ix, LevelTimerTable + romStart + push ix + ld hl, ReverseBCD + ld de, 0 + ld b, 21 +_: push hl + ld a, (ix) + cp $10 + jr c, +_ + sub $10 + ld e, a + add hl, de + ld a, (hl) +_: ld (ix), a + lea ix, ix+2 + pop hl + djnz --_ + + pop ix + ld e, 0 + ld hl, 0 + ld b, 21 +_: ld e, (ix) + add hl, de + lea ix, ix+2 + djnz -_ + + ex af, af' +_: inc a + ld de, 60 + or a + sbc hl, de + jr nc, -_ + dec a + add hl, de + + ;draw minutes onto screen + push hl + call HexToBCD + ld hl, $D4536C + ld (DoubleDigitCoords), hl + call DrawDoubleDigits + pop hl + ld a, l + call HexToBCD + ld hl, $D45385 + ld (DoubleDigitCoords), hl + call DrawDoubleDigits + ret + +HexToBCD: + ld hl, ProperBCD + cp $10 + jr c, +_ + sub a, $10 + ld de, 0 + ld e, a + add hl, de + ld a, (hl) + ret + +_: or a + daa + ret + +CalcTextPTR: + ld h, 64 + mlt hl +TextColor: + ld de, YellowNumbers + add hl, de + ret + +DrawDoubleDigits: + push af + and $F0 + rrca + rrca + rrca + rrca + ld l, a + call CalcTextPTR + + ld de, (DoubleDigitCoords) + ld bc, $0808 + call DrawArt + + pop af + and $0F + ld l, a + call CalcTextPTR + + ld de, (DoubleDigitCoords) + ex de, hl + ld bc, 8 + add hl, bc + ex de, hl + + ld bc, $0808 + call DrawArt + ret + +DoubleDigitCoords: + .dl 0 + +DrawEmeralds: + ld a, ($D2D2C5) + ld b, 6 + +_: push bc + ld hl, BlankEmerald + or a + rra + push af + jr nc, +_ + + ld l, b + ld h, 3 + mlt hl + ld de, EmeraldTable + add hl, de + ld hl, (hl) + +_: ld e, b + ld d, 3 + mlt de + ex de, hl + ld bc, EmeraldCoords + add hl, bc + ld hl, (hl) + ex de, hl + + mlt bc + ld c, 22 + ld b, 16 + call DrawArt + pop af + pop bc + djnz --_ + ret + +DrawArt: + ld a, b +DrawArtLoop: + push bc + push af + ld a, c + + push hl + ld hl, lcdWidth + ld b, 0 + or a + sbc hl, bc + push hl + pop bc + pop hl + +DrawArtRow: + push af + ld a, (hl) + cp 4 + jr z, +_ + ld (de), a +_: inc hl + inc de + pop af + dec a + jr nz, DrawArtRow + ex de, hl + add hl, bc + ex de, hl + pop af + pop bc + dec a + jr nz, DrawArtLoop + ret + +#include "includes/dzx0_fast.asm" + +EndBG: +#import "misc/EndBG.bin" + +EndPal: +#import "misc/EndPal.bin" + +EmeraldTable: +.dl BlankEmerald +.dl EmeraldGreen +.dl EmeraldRed +.dl EmeraldGrey +.dl EmeraldPink +.dl EmeraldYellow +.dl EmeraldBlue + +TextCoords: +.dl $D42AD4 +.dl $D452D4 +.dl $D47AD4 +.dl $D4A2D4 +.dl $D4CAD4 +.dl $D4F2D4 +.dl $D42B6C + +EmeraldCoords: +.dl $D40000 +.dl $D50C5A +.dl $D50C3F +.dl $D50C24 +.dl $D4F35A +.dl $D4F33F +.dl $D4F324 + +EmeraldBlue: +#import "misc/Emeralds/EmeraldBlue.bin" +EmeraldYellow: +#import "misc/Emeralds/EmeraldYellow.bin" +EmeraldPink: +#import "misc/Emeralds/EmeraldPink.bin" +EmeraldGrey: +#import "misc/Emeralds/EmeraldGrey.bin" +EmeraldRed: +#import "misc/Emeralds/EmeraldRed.bin" +EmeraldGreen: +#import "misc/Emeralds/EmeraldGreen.bin" +BlankEmerald: +#import "misc/Emeralds/EmeraldBlank.bin" + +ProperBCD: +.db $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29 +.db $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43 +.db $44, $45, $46, $47, $48, $49, $50, $51, $52, $53, $54, $55, $56, $57 +.db $58, $59 + +ReverseBCD: +.db 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0 +.db 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0 +.db 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 0, 0, 0, 0, 0 +.db 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 0, 0, 0, 0, 0, 0 +.db 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 0, 0, 0, 0, 0, 0 +.db 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 0, 0, 0, 0, 0, 0 +.db 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, 0, 0, 0 +.db 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 0, 0, 0, 0, 0, 0 +.db 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 0, 0, 0, 0, 0 + + +#include "misc/font.asm" diff --git a/src/includes/dzx0_fast.asm b/src/includes/dzx0_fast.asm new file mode 100644 index 0000000..a1a2946 --- /dev/null +++ b/src/includes/dzx0_fast.asm @@ -0,0 +1,97 @@ + +; ----------------------------------------------------------------------------- +; ZX0 decoder by Einar Saukas & introspec +; "Turbo" version +; ----------------------------------------------------------------------------- +DecompressZX0: +dzx0_turbo: + ld bc, -1 ; preserve default offset 1 + ld (dzx0t_last_offset+1), bc + inc bc + ld a, $80 + jr dzx0t_literals +dzx0t_new_offset: + dec bc + dec bc ; prepare negative offset + add a, a + jr nz, dzx0t_new_offset_skip + ld a, (hl) ; load another group of 8 bits + inc hl + rla +dzx0t_new_offset_skip: + call nc, dzx0t_elias ; obtain offset MSB + inc c + ret z ; check end marker + ld b, c + ld c, (hl) ; obtain offset LSB + inc hl + rr b ; last offset bit becomes first length bit + rr c + ld (dzx0t_last_offset+1), bc ; preserve new offset + ld bc, 1 ; obtain length + call nc, dzx0t_elias + inc bc +dzx0t_copy: + push hl ; preserve source +dzx0t_last_offset: + ld hl, 0 ; restore offset + add hl, de ; calculate destination - offset + ldir ; copy from offset + pop hl ; restore source + add a, a ; copy from literals or new offset? + jr c, dzx0t_new_offset +dzx0t_literals: + inc c ; obtain length + add a, a + jr nz, dzx0t_literals_skip + ld a, (hl) ; load another group of 8 bits + inc hl + rla +dzx0t_literals_skip: + call nc, dzx0t_elias + ldir ; copy literals + add a, a ; copy from last offset or new offset? + jr c, dzx0t_new_offset + inc c ; obtain length + add a, a + jr nz, dzx0t_last_offset_skip + ld a, (hl) ; load another group of 8 bits + inc hl + rla +dzx0t_last_offset_skip: + call nc, dzx0t_elias + jr dzx0t_copy +dzx0t_elias: + add a, a ; interlaced Elias gamma coding + rl c + add a, a + jr nc, dzx0t_elias + ret nz + ld a, (hl) ; load another group of 8 bits + inc hl + rla + ret c + add a, a + rl c + add a, a + ret c + add a, a + rl c + add a, a + ret c + add a, a + rl c + add a, a + ret c +dzx0t_elias_loop: + add a, a + rl c + rl b + add a, a + jr nc, dzx0t_elias_loop + ret nz + ld a, (hl) ; load another group of 8 bits + inc hl + rla + jr nc, dzx0t_elias_loop + ret \ No newline at end of file diff --git a/src/includes/macros.asm b/src/includes/macros.asm index ed28b94..8c969cd 100644 --- a/src/includes/macros.asm +++ b/src/includes/macros.asm @@ -1,21 +1,4 @@ ; ============================================================================= -; MACRO: wait_1s() -; ----------------------------------------------------------------------------- -; Halts the CPU for 60 frames (1 second on NTSC machines). -; ----------------------------------------------------------------------------- -; In: -; None. -; Out: -; None. -; ----------------------------------------------------------------------------- - -#macro wait_1s ;wait a second - ld b, Time_1Second -_: ei - halt - djnz -_ -#endmacro -; ============================================================================= ; MACRO: Engine_FillMemory(uint8 value) ; ----------------------------------------------------------------------------- ; Fills work RAM ($C001 to $DFF0) with the specified value. diff --git a/src/includes/ti_equates.asm b/src/includes/ti_equates.asm index 6a8b26e..3434eb0 100644 --- a/src/includes/ti_equates.asm +++ b/src/includes/ti_equates.asm @@ -1,4 +1,3 @@ - #define appVarObj $15 #define lcdBpp8 $27 #define lcdHeight 240 @@ -12,10 +11,12 @@ #define ramStart $D00000 #define tempSP $D0053F #define ScrapMem $D02AD7 +#define pixelShadow $D031F6 #define cmdPixelShadow $D07396 #define plotSScreen $D09466 +#define EvalGamePTR $D0DFFC +#define TempSpriteBuffer $D0E100 #define saveSScreen $D0EA1F -#define pixelShadow $D031F6 #define SegaTileCache pixelShadow #define VRAM $D40000 #define VRAMEnd VRAM+((320*240)*2) @@ -26,6 +27,8 @@ #define mpLcdIcr $E30028 #define mpLcdPalette $E30200 #define romStart $D20000 ;game ROM, not TI ROM +#define LevelTimerTable $DC00 + kbdG1 = $F50012 diff --git a/src/sonic2.asm b/src/launcher.asm similarity index 90% rename from src/sonic2.asm rename to src/launcher.asm index 9462fa5..2fb4278 100644 --- a/src/sonic2.asm +++ b/src/launcher.asm @@ -15,12 +15,6 @@ _START: ld (hl), $00 ldir - ;set up 4bpp mode with Vcomp interrupts - ld hl, mpLcdCtrl - ld (hl), $23 - inc hl - ld (hl), %00011101 - ;set up front porch interrupt ld hl, mpLcdImsc set 3, (hl) @@ -30,7 +24,16 @@ _START: ld hl, $F50000 ld (hl), 3 + ld hl, EvaluateGame + ld (EvalGamePTR), hl + call SegaLogo +SetupGame: + ;set up 8bpp mode with Vcomp interrupts + ld hl, mpLcdCtrl + ld (hl), $27 + inc hl + ld (hl), %00011001 ;clear VRAM ld hl, VRAM @@ -101,7 +104,7 @@ _START: ld a, $D2 ld mb, a ld ($D2DE02), sp - ld.lil sp, $D1A745 + ld.lil sp, $D1A545 ld.sis sp, $DFF0 jp.sis $0000 ;start of program @@ -122,10 +125,12 @@ LoadBank: #include "sega_logo.asm" +#include "evaluate_game.asm" + #include "includes/ti_equates.asm" Palettes: -#include "includes\palettes.asm" +#include "includes/palettes.asm" Sonic2_Engine: .db AppVarObj, "Sonic2", 0 diff --git a/src/layout/ghz/layout_ghz3.bin b/src/layout/ghz/layout_ghz3.bin index 9060f96..558df46 100644 Binary files a/src/layout/ghz/layout_ghz3.bin and b/src/layout/ghz/layout_ghz3.bin differ diff --git a/src/level_select.asm b/src/level_select.asm index 5522294..7495f13 100644 --- a/src/level_select.asm +++ b/src/level_select.asm @@ -124,9 +124,7 @@ LevelSelect_Values: .db $06, $02 ;Crystal Egg Zone - Act 3 LevelSelect_MainLoop: ;0E46 - ei - halt - di + call Engine_WaitForInterrupt call _CheckInput call _DrawCursor ld a, (Engine_InputFlags) @@ -236,7 +234,7 @@ LevelSelect_Entry1: .db "ZONE SOUTERRAINE ACT-1" LevelSelect_Entry4: -.db "ZONE TRES HAUTE ACT-1" +.db "ZONE DU CIEL HAUTE ACT-1" LevelSelect_Entry7: .db "ZONE DU LAC AQUA ACT-1" diff --git a/src/mappings/titlecard/titlecard_mappings_2AA4_FR.bin b/src/mappings/titlecard/titlecard_mappings_2AA4_FR.bin index cbf3faa..6cb72cc 100644 --- a/src/mappings/titlecard/titlecard_mappings_2AA4_FR.bin +++ b/src/mappings/titlecard/titlecard_mappings_2AA4_FR.bin @@ -1 +1,2 @@ -pppppp()pp *()pppppppp % &'pp     pp \ No newline at end of file +pp*pp + pp *()pp  pp    pp      \ No newline at end of file diff --git a/src/misc/Emeralds/emeraldblank.bin b/src/misc/Emeralds/emeraldblank.bin new file mode 100644 index 0000000..70dc945 Binary files /dev/null and b/src/misc/Emeralds/emeraldblank.bin differ diff --git a/src/misc/Emeralds/emeraldblue.bin b/src/misc/Emeralds/emeraldblue.bin new file mode 100644 index 0000000..48364f4 --- /dev/null +++ b/src/misc/Emeralds/emeraldblue.bin @@ -0,0 +1 @@ +                   \ No newline at end of file diff --git a/src/misc/Emeralds/emeraldgreen.bin b/src/misc/Emeralds/emeraldgreen.bin new file mode 100644 index 0000000..fbe19e0 --- /dev/null +++ b/src/misc/Emeralds/emeraldgreen.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/misc/Emeralds/emeraldgrey.bin b/src/misc/Emeralds/emeraldgrey.bin new file mode 100644 index 0000000..479c28b --- /dev/null +++ b/src/misc/Emeralds/emeraldgrey.bin @@ -0,0 +1 @@ +                                           \ No newline at end of file diff --git a/src/misc/Emeralds/emeraldpink.bin b/src/misc/Emeralds/emeraldpink.bin new file mode 100644 index 0000000..aa1b71e --- /dev/null +++ b/src/misc/Emeralds/emeraldpink.bin @@ -0,0 +1 @@ +                \ No newline at end of file diff --git a/src/misc/Emeralds/emeraldred.bin b/src/misc/Emeralds/emeraldred.bin new file mode 100644 index 0000000..82e325a --- /dev/null +++ b/src/misc/Emeralds/emeraldred.bin @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/misc/Emeralds/emeraldyellow.bin b/src/misc/Emeralds/emeraldyellow.bin new file mode 100644 index 0000000..99afbef --- /dev/null +++ b/src/misc/Emeralds/emeraldyellow.bin @@ -0,0 +1 @@ +                \ No newline at end of file diff --git a/src/misc/EndBG.bin b/src/misc/EndBG.bin new file mode 100644 index 0000000..a101c2d Binary files /dev/null and b/src/misc/EndBG.bin differ diff --git a/src/misc/EndPal.bin b/src/misc/EndPal.bin new file mode 100644 index 0000000..0158b59 Binary files /dev/null and b/src/misc/EndPal.bin differ diff --git a/src/misc/Numbers/whitenumbers/0.bin b/src/misc/Numbers/whitenumbers/0.bin new file mode 100644 index 0000000..baf8c0f Binary files /dev/null and b/src/misc/Numbers/whitenumbers/0.bin differ diff --git a/src/misc/Numbers/whitenumbers/1.bin b/src/misc/Numbers/whitenumbers/1.bin new file mode 100644 index 0000000..bd67607 Binary files /dev/null and b/src/misc/Numbers/whitenumbers/1.bin differ diff --git a/src/misc/Numbers/whitenumbers/2.bin b/src/misc/Numbers/whitenumbers/2.bin new file mode 100644 index 0000000..d54ab2b Binary files /dev/null and b/src/misc/Numbers/whitenumbers/2.bin differ diff --git a/src/misc/Numbers/whitenumbers/3.bin b/src/misc/Numbers/whitenumbers/3.bin new file mode 100644 index 0000000..85080b5 Binary files /dev/null and b/src/misc/Numbers/whitenumbers/3.bin differ diff --git a/src/misc/Numbers/whitenumbers/4.bin b/src/misc/Numbers/whitenumbers/4.bin new file mode 100644 index 0000000..a81d0b3 Binary files /dev/null and b/src/misc/Numbers/whitenumbers/4.bin differ diff --git a/src/misc/Numbers/whitenumbers/5.bin b/src/misc/Numbers/whitenumbers/5.bin new file mode 100644 index 0000000..584b367 Binary files /dev/null and b/src/misc/Numbers/whitenumbers/5.bin differ diff --git a/src/misc/Numbers/whitenumbers/6.bin b/src/misc/Numbers/whitenumbers/6.bin new file mode 100644 index 0000000..a3af701 Binary files /dev/null and b/src/misc/Numbers/whitenumbers/6.bin differ diff --git a/src/misc/Numbers/whitenumbers/7.bin b/src/misc/Numbers/whitenumbers/7.bin new file mode 100644 index 0000000..e17b0e5 Binary files /dev/null and b/src/misc/Numbers/whitenumbers/7.bin differ diff --git a/src/misc/Numbers/whitenumbers/8.bin b/src/misc/Numbers/whitenumbers/8.bin new file mode 100644 index 0000000..1195afa Binary files /dev/null and b/src/misc/Numbers/whitenumbers/8.bin differ diff --git a/src/misc/Numbers/whitenumbers/9.bin b/src/misc/Numbers/whitenumbers/9.bin new file mode 100644 index 0000000..c8b56a2 Binary files /dev/null and b/src/misc/Numbers/whitenumbers/9.bin differ diff --git a/src/misc/Numbers/yellownumbers/0.bin b/src/misc/Numbers/yellownumbers/0.bin new file mode 100644 index 0000000..3e0aa6d Binary files /dev/null and b/src/misc/Numbers/yellownumbers/0.bin differ diff --git a/src/misc/Numbers/yellownumbers/1.bin b/src/misc/Numbers/yellownumbers/1.bin new file mode 100644 index 0000000..a607ae5 Binary files /dev/null and b/src/misc/Numbers/yellownumbers/1.bin differ diff --git a/src/misc/Numbers/yellownumbers/2.bin b/src/misc/Numbers/yellownumbers/2.bin new file mode 100644 index 0000000..dcb8e6f Binary files /dev/null and b/src/misc/Numbers/yellownumbers/2.bin differ diff --git a/src/misc/Numbers/yellownumbers/3.bin b/src/misc/Numbers/yellownumbers/3.bin new file mode 100644 index 0000000..c4dc669 Binary files /dev/null and b/src/misc/Numbers/yellownumbers/3.bin differ diff --git a/src/misc/Numbers/yellownumbers/4.bin b/src/misc/Numbers/yellownumbers/4.bin new file mode 100644 index 0000000..4f03936 Binary files /dev/null and b/src/misc/Numbers/yellownumbers/4.bin differ diff --git a/src/misc/Numbers/yellownumbers/5.bin b/src/misc/Numbers/yellownumbers/5.bin new file mode 100644 index 0000000..d1bfd1e Binary files /dev/null and b/src/misc/Numbers/yellownumbers/5.bin differ diff --git a/src/misc/Numbers/yellownumbers/6.bin b/src/misc/Numbers/yellownumbers/6.bin new file mode 100644 index 0000000..8a9a6d2 Binary files /dev/null and b/src/misc/Numbers/yellownumbers/6.bin differ diff --git a/src/misc/Numbers/yellownumbers/7.bin b/src/misc/Numbers/yellownumbers/7.bin new file mode 100644 index 0000000..389cf02 Binary files /dev/null and b/src/misc/Numbers/yellownumbers/7.bin differ diff --git a/src/misc/Numbers/yellownumbers/8.bin b/src/misc/Numbers/yellownumbers/8.bin new file mode 100644 index 0000000..6be8a9b Binary files /dev/null and b/src/misc/Numbers/yellownumbers/8.bin differ diff --git a/src/misc/Numbers/yellownumbers/9.bin b/src/misc/Numbers/yellownumbers/9.bin new file mode 100644 index 0000000..62e506e Binary files /dev/null and b/src/misc/Numbers/yellownumbers/9.bin differ diff --git a/src/misc/font.asm b/src/misc/font.asm new file mode 100644 index 0000000..006a8b0 --- /dev/null +++ b/src/misc/font.asm @@ -0,0 +1,23 @@ +WhiteNumbers: +#import "misc/Numbers/WhiteNumbers/0.bin" +#import "misc/Numbers/WhiteNumbers/1.bin" +#import "misc/Numbers/WhiteNumbers/2.bin" +#import "misc/Numbers/WhiteNumbers/3.bin" +#import "misc/Numbers/WhiteNumbers/4.bin" +#import "misc/Numbers/WhiteNumbers/5.bin" +#import "misc/Numbers/WhiteNumbers/6.bin" +#import "misc/Numbers/WhiteNumbers/7.bin" +#import "misc/Numbers/WhiteNumbers/8.bin" +#import "misc/Numbers/WhiteNumbers/9.bin" + +YellowNumbers: +#import "misc/Numbers/YellowNumbers/0.bin" +#import "misc/Numbers/YellowNumbers/1.bin" +#import "misc/Numbers/YellowNumbers/2.bin" +#import "misc/Numbers/YellowNumbers/3.bin" +#import "misc/Numbers/YellowNumbers/4.bin" +#import "misc/Numbers/YellowNumbers/5.bin" +#import "misc/Numbers/YellowNumbers/6.bin" +#import "misc/Numbers/YellowNumbers/7.bin" +#import "misc/Numbers/YellowNumbers/8.bin" +#import "misc/Numbers/YellowNumbers/9.bin" \ No newline at end of file diff --git a/src/object_animations.asm b/src/object_animations.asm index 2ceb166..383f2f8 100644 --- a/src/object_animations.asm +++ b/src/object_animations.asm @@ -206,9 +206,9 @@ DATA_B31_80C0: .dw DATA_B31_85A8 .dw DATA_B31_85B3 .dw DATA_B31_85BE -.dw SpinDashSpr1 -.dw SpinDashSpr2 -.dw SpinDashSpr3 +.dw SpinDashSpr +.dw SpinDashSpr +.dw SpinDashSpr ; ; ,- Number of sprites @@ -816,21 +816,9 @@ DATA_B31_85BE: .dw $0000 .dw $0000 .dw DATA_B31_85C9 -SpinDashSpr1: -.db $06, $04, $1C - .dw SprArrange_3x2_BC ;sprite arrangement - .dw $0000 ;vertical offset - .dw $0000 ;horizontal offset - .dw DATA_B31_85C9 ;pointer to char codes -SpinDashSpr2: -.db $06, $04, $1C - .dw SprArrange_3x2_BC ;sprite arrangement - .dw $0000 ;vertical offset - .dw $0000 ;horizontal offset - .dw DATA_B31_85C9 ;pointer to char codes -SpinDashSpr3: -.db $06, $04, $1C - .dw SprArrange_3x2_BC ;sprite arrangement +SpinDashSpr: +.db $08, $04, $1C + .dw SprArrange_4x2 ;sprite arrangement .dw $0000 ;vertical offset .dw $0000 ;horizontal offset .dw DATA_B31_85C9 ;pointer to char codes diff --git a/src/object_logic/bank28.asm b/src/object_logic/bank28.asm index 4b2c486..648afb4 100644 --- a/src/object_logic/bank28.asm +++ b/src/object_logic/bank28.asm @@ -5353,7 +5353,7 @@ LABEL_B28_BA30: call VF_Engine_GetCollisionValueForBlock cp $81 jr nz, +_ - ld hl, ($bb2a) + ld hl, (DATA_B28_BB2A) ld (ix+$18), l ld (ix+$19), h ld a, (ix+$1e) @@ -5393,7 +5393,7 @@ LABEL_B28_BAA3: ld (ix+$02), $01 ld (ix+$17), $00 ld (ix+$16), $00 - ld hl, ($bb2a) + ld hl, (DATA_B28_BB2A) ld (ix+$18), l ld (ix+$19), h ret diff --git a/src/object_logic/bank30_logic.asm b/src/object_logic/bank30_logic.asm index d28b289..8cd3e5b 100644 --- a/src/object_logic/bank30_logic.asm +++ b/src/object_logic/bank30_logic.asm @@ -187,12 +187,9 @@ LABEL_B30_8F7D: push hl ld a, b dec a - add a, a - add a, a - add a, a - add a, a - add a, a - add a, a + and $03 + rrca + rrca ld e, (ix+$1e) add a, e ld e, a @@ -239,12 +236,14 @@ LABEL_B30_8FB2: ret DATA_B30_8FC6: -.db $CA, $8F -.db $D0, $8F + .dw DATA_B30_8FCA + .dw DATA_B30_8FD0 + DATA_B30_8FCA: .db $20, $00 .dw LABEL_B30_9020 .db $FF, $03 + DATA_B30_8FD0: .db $FF, $04 .dw $FF00 @@ -986,7 +985,7 @@ DATA_B30_94FF: .dw LABEL_B30_951C .db $FF, $00 -DATA_B30_9505 +DATA_B30_9505: .db $E0, $13 .dw VF_DoNothing .db $E0, $13 @@ -1004,6 +1003,8 @@ DATA_B30_9516: LABEL_B30_951C: + ld hl, DrawTilemapTrig + set 1, (hl) ld de, $0040 ld bc, $0600 call VF_Engine_SetObjectVerticalSpeed diff --git a/src/object_logic/bank31_logic.asm b/src/object_logic/bank31_logic.asm index e7aab68..1cc59c8 100644 --- a/src/object_logic/bank31_logic.asm +++ b/src/object_logic/bank31_logic.asm @@ -368,7 +368,7 @@ _: ld hl, $0180 ld b, a jr nc, +_ ld b, $ff - ld hl, ($D511) +_: ld hl, ($D511) ld e, (ix+$11) ld d, (ix+$12) xor a diff --git a/src/object_logic/logic_monitors.asm b/src/object_logic/logic_monitors.asm index 3899df9..af9844b 100644 --- a/src/object_logic/logic_monitors.asm +++ b/src/object_logic/logic_monitors.asm @@ -121,8 +121,7 @@ Monitor_SetCollisionValue: ;$B797 ld (Engine_MonitorCllsnType), a ; set monitor type to $40 - ld (ix + Object.ix3F), $00 - set 6, (ix + Object.ix3F) ;FIXME: this could be done in the previous op + ld (ix + Object.ix3F), $40 ret ;collision value for each monitor type diff --git a/src/object_logic_pointers.asm b/src/object_logic_pointers.asm index d0e866d..28824cc 100644 --- a/src/object_logic_pointers.asm +++ b/src/object_logic_pointers.asm @@ -59,7 +59,7 @@ .dw DATA_B28_B6AF ;37 .dw DATA_B28_B73A ;38 .dw DATA_B28_B8E2 ;39 -.dw DATA_B28_B9CC ;3A +.dw DATA_B28_B9CC ;3A - GMZ pig .dw DATA_B28_BB2C ;3B .dw DATA_B28_BD8E ;3C .dw DATA_B28_BDF0 ;3D diff --git a/src/palette_routines.asm b/src/palette_routines.asm index 6ffd330..e31ec62 100644 --- a/src/palette_routines.asm +++ b/src/palette_routines.asm @@ -1,6 +1,7 @@ .ASSUME ADL=0 ;Variables used by palette control/update routines #define Palettes $F680 + Palette_Update: ld hl, $D2C9 ;counter for smooth fade inc (hl) @@ -9,7 +10,7 @@ Palette_Update: ret nc ld (hl), $00 ld ix, $D4E6 - ld iy, $D4C6 + ld iy, WorkingCRAM ld b, $02 _: push bc push iy @@ -26,7 +27,7 @@ _: lea ix, ix+2 ;check FgPaletteControl djnz --_ ret -Palette_UpdateColours: +Palette_UpdateColours: bit 7, a ;check for fade to colour jp nz, Palette_FadeToColour bit 6, a ;check for fade to black diff --git a/src/player_sprite_defs.asm b/src/player_sprite_defs.asm index 01fbc60..8bbd337 100644 --- a/src/player_sprite_defs.asm +++ b/src/player_sprite_defs.asm @@ -146,9 +146,9 @@ dstruct(SPR86, 04, $B280, $08) ;$60 dstruct(SPR87, 04, $B480, $08) ;$61 dstruct(SPR88, 04, $B680, $06) ;$62 -dstruct(SpinDash1, $04, $8A80, $06) ;$63 -dstruct(SpinDash2, $04, $8C00, $06) ;$64 -dstruct(SpinDash3, $04, $A280, $06) ;$65 +dstruct(SpinDash1, 05, Art_Sonic_SpinDash + $0, $08) ;$63 +dstruct(SpinDash2, 05, Art_Sonic_SpinDash + $200, $08) ;$64 +dstruct(SpinDash3, 05, Art_Sonic_SpinDash + $400, $08) ;$65 @@ -252,6 +252,6 @@ dstruct(SPR185, 16, $AD80, $08) dstruct(SPR186, 16, $B280, $08) dstruct(SPR187, 16, $B480, $08) dstruct(SPR188, 04, $B680, $06) -dstruct(SpinDash1M, $10, $8A80, $06) ;$61 -dstruct(SpinDash2M, $10, $8C00, $06) ;$62 -dstruct(SpinDash3M, $10, $A280, $06) ;$62 \ No newline at end of file +dstruct(MSpinDash1, 05, Art_Sonic_SpinDash_Mirrored + $0, $08) ;$63 +dstruct(MSpinDash2, 05, Art_Sonic_SpinDash_Mirrored + $200, $08) ;$64 +dstruct(MSpinDash3, 05, Art_Sonic_SpinDash_Mirrored + $400, $08) ;$65 \ No newline at end of file diff --git a/src/s2_engine.asm b/src/s2.asm similarity index 98% rename from src/s2_engine.asm rename to src/s2.asm index 1dcc3f0..c2be2bc 100644 --- a/src/s2_engine.asm +++ b/src/s2.asm @@ -1,12 +1,12 @@ .assume ADL=0 #include "includes/defines.asm" +#include "includes/macros.asm" #include "includes/sms.asm" #include "includes/structures.asm" #include "includes/objects.asm" ;values for objects #include "includes/player_states.asm" ;values for player object state #include "includes/level_values.asm" -#include "includes/macros.asm" #include "includes/memory_layout.asm" ;===================================================================== @@ -77,6 +77,9 @@ #define SegaTileFlags SegaVRAM + $4000 ;flags for drawing tilemap #define CRAM mpLcdPalette #define WorkingCRAM $D4C6 ;copy of Colour RAM maintained in work RAM. +#define ColorDepth $DC41 + + #define DATA_B30_9841 $E000 #define DATA_B30_9A41 $E200 @@ -85,9 +88,10 @@ #define LastBankNumber 1 << 5 - 1 ; must be 2^n-1 since it is used in AND ops _START: + call.lil StoreBankPointers + romStart jp Engine_Initialise -.FILL 52, $00 +.FILL 47, $00 ; ============================================================================= ; Engine_Interrupt() @@ -147,8 +151,7 @@ Engine_ErrorTrap: ;$0073 ; hang for 180 frames ld b, Time_3Seconds -_: ei - halt +_: call Engine_WaitForInterrupt djnz -_ jp _START @@ -161,7 +164,7 @@ _: ei .db " SEGA /Aspect Co.,Ltd " -.FILL $30, $00 +.FILL $2E, $00 ; ============================================================================= ; Tile Mirroring Lookup Table ; ----------------------------------------------------------------------------- @@ -225,10 +228,18 @@ Engine_Reset: ; $0431 ; init the VDP call VDP_SetMode2Reg_DisplayOff + ld a, (EmeraldFlags) + ; initialise work RAM - Engine_FillMemory $00 + ld hl, $C000 + ld de, $C001 + ld bc, $1B00 + ldir + + ld (EmeraldFlags), a call Engine_ClearVRAM + call Engine_ClearPaletteRAM ; reset the paging registers xor a @@ -250,6 +261,9 @@ Engine_Reset: ; $0431 Engine_Initialise: ;clear screen? call Engine_ClearPaletteRAM + + call LoadSHCScreen + ;call LoadSave call Engine_LoadLevelTiles call LevelSelectCheck @@ -267,9 +281,7 @@ LABEL_472: xor a ld ($D292), a call Engine_InitCounters - ei - halt - + call Engine_WaitForInterrupt ld hl, GlobalTriggers ld (hl), GT_GAMEOVER | GT_TITLECARD jp Engine_CheckGlobalTriggers @@ -317,7 +329,6 @@ Engine_HandleVBlank: ; $04A5 or a jp nz, Engine_HandleVBlank_Epilogue - call DrawScreen ;draw the last interrupt's frame ld a, (Frame2Page) ld ($FFFF), a call VDP_SetMode2Reg_DisplayOff ;update VDP mode control register 2 @@ -470,14 +481,43 @@ Engine_HandleVBlank_PalettesOnly: ; $058D ; None. ; ----------------------------------------------------------------------------- Engine_WaitForInterrupt: ; $0593 + di + + call StoreRegisters + ld a, (FrameCounter) + rra + call c, DrawScreen ;draw the last interrupt's frame + call RestoreRegisters + ei ; loop until the next interrupt has been serviced + push hl + push af ld hl, Engine_InterruptServiced _: ld a, (hl) or a jr z, -_ - - ld (hl), $00 + xor a + ld (hl), a + pop af + pop hl + ret + +; ============================================================================= +; MACRO: wait_1s() +; ----------------------------------------------------------------------------- +; Halts the CPU for 60 frames (1 second on NTSC machines). +; ----------------------------------------------------------------------------- +; In: +; None. +; Out: +; None. +; ----------------------------------------------------------------------------- + +wait_1s: ;wait a second + ld b, Time_1Second +_: call Engine_WaitForInterrupt + djnz -_ ret LABEL_59E_218: @@ -494,7 +534,15 @@ _DATA_05AA: .db $FE, $00, $FE, $FE, $02, $02, $00, $02 Engine_PauseHandler: - push af + ;the SMS pause button triggers an NMI for one frame. + ;since it's the only SMS button to do that, we'll + ;try to mimic that behavior first. + bit 6, (hl) + ret nz + set 6, (hl) + ld a, 3 + ld (DrawTilemapTrig), a + ld a, (BgPaletteControl) or a jr nz, +_ @@ -508,11 +556,12 @@ Engine_PauseHandler: cp GT_GAMEOVER jr nz, +_ - ld a, $01 + ld a, $FF ld ($D12E), a +_: ret -_: pop af - ret +PauseHandler_Trig: +.db $00 Engine_CheckGlobalTriggers: ; $0690 @@ -563,19 +612,9 @@ GameState_EndSequence: ; fade out over 1 second call PaletteFadeOut - wait_1s - - ; clear continues & emerald count - xor a - ld (ContinueCounter), a - ld (EmeraldFlags), a - - ; clear some trigger bits. - ld hl, GlobalTriggers - ld a, (hl) - and %00100111 - ld (hl), a - jp Engine_CheckGlobalTriggers + call wait_1s + jp EvaluateGame + LABEL_6F3: ;ending credits sequence ld a, $5D @@ -606,10 +645,13 @@ _: call Engine_WaitForInterrupt jr nz, -_ ret +EvaluateGame: ;display game results + ld.lil hl, (EvalGamePTR) + jp.lil (hl) + GameState_Gameover: ; $072F xor a - ei - halt + call Engine_WaitForInterrupt call Engine_ClearVRAM call Engine_ClearWorkingVRAM call Engine_ClearLevelAttributes @@ -621,8 +663,7 @@ GameState_Gameover: ; $072F ; wait for 2 seconds ld b, Time_2Seconds -_: ei - halt +_: call Engine_WaitForInterrupt djnz -_ ld bc, $0D98 @@ -637,7 +678,7 @@ _: ei _: ; fade out over 1 second call PaletteFadeOut - wait_1s + call wait_1s jp LABEL_472 @@ -685,7 +726,7 @@ GameState_CheckContinue: ; $0792 ; fade out over 1 second call PaletteFadeOut - wait_1s + call wait_1s ret @@ -733,13 +774,13 @@ LABEL_81D: GameState_NextAct: ; $0820 + call LABEL_A27 ;reset LevelTimerTrigger call Engine_CheckHasEmerald ; wait for 3 seconds ld b, Time_3Seconds -_: ei - halt +_: call Engine_WaitForInterrupt djnz -_ ; store number of lives when starting the act. this is used @@ -753,8 +794,7 @@ _: ei call PaletteFadeOut ;trigger FG & BG palette fade to black ld b, $1E -_: ei - halt +_: call Engine_WaitForInterrupt djnz -_ call Engine_ClearWorkingVRAM ;clear various blocks of RAM & prepare the SAT @@ -768,11 +808,11 @@ _: ei call ScoreCard_UpdateScore ; wait for 1 second - wait_1s + call wait_1s ;fade out for 1 second call PaletteFadeOut - wait_1s + call wait_1s ld hl, GlobalTriggers res GT_NEXT_ACT_BIT, (hl) @@ -847,8 +887,7 @@ LABEL_8A4: call PaletteFadeOut ld b, Time_1Second/2 -_: ei - halt +_: call Engine_WaitForInterrupt djnz -_ call Engine_ClearWorkingVRAM call Engine_ClearLevelAttributes @@ -862,11 +901,11 @@ _: ei call ScoreCard_UpdateScore ; wait for 1 second - wait_1s + call wait_1s ; fade out for 1 second call PaletteFadeOut - wait_1s + call wait_1s ;reset the act counter & increment level counter xor a @@ -926,16 +965,17 @@ _: ; check player's onscreen position ; wait for 2 seconds ld b, Time_2Seconds -_: ei - halt +_: call Engine_WaitForInterrupt djnz -_ + ;FALL THROUGH +Engine_ResetLevel: ; reset dynamic palette numbers call Engine_ClearAuxLevelHeader ; fade out for 1 second call PaletteFadeOut - wait_1s + call wait_1s ld a, (LifeCounter) or a @@ -963,8 +1003,7 @@ GameState_Titlecard: ; $097F ; fade out over 42 frames call PaletteFadeOut ld b, 42 -_: ei - halt +_: call Engine_WaitForInterrupt djnz -_ call Engine_LoadLevel @@ -1004,7 +1043,7 @@ _: ld a, ($D12E) ld hl, GlobalTriggers res GT_BIT_1, (hl) - halt + call Engine_WaitForInterrupt jp Engine_CheckGlobalTriggers @@ -1050,6 +1089,21 @@ LABEL_A13: ret LABEL_A27: + ld de, (LevelTimer) + ld ix, CurrentLevel + ld l, (ix) + ld h, 6 + mlt hl + ld a, (ix+1) + add a, a + ld c, a + ld b, 0 + add hl, bc + ld bc, LevelTimerTable + add hl, bc + ld (hl), e + inc hl + ld (hl), d xor a ;reset timer update trigger ld (LevelTimerTrigger), a ret @@ -1262,7 +1316,13 @@ _: push bc ld bc, $04B0 _: call LABEL_107C push bc - call Engine_WaitForInterrupt + ei + halt + di + ld a, (FrameCounter) + rra + call c, DrawScreen + call Engine_UpdateLevelState call TitleScreen_ChangePressStartText pop bc @@ -1317,23 +1377,22 @@ Engine_LoadPlayerTiles: ;$10BF jr z, +_ ld de, Data_PlayerSprites_Mirrored - $04 _: add hl, de + ld a, 31 - call Engine_SwapFrame2 - ld a, (hl) ;bank number - inc hl - ld e, (hl) ;art pointer - inc hl - ld d, (hl) - inc hl - ld b, (hl) ;tile count / 2 (each sprite is 8x16) + call.lil GetDataPTR + romStart + ld.lil a, (hl) ;bank number + inc.lil hl + ld.lil e, (hl) ;art pointer + inc.lil hl + ld.lil d, (hl) + inc.lil hl + ld.lil b, (hl) ;tile count / 2 (each sprite is 8x16) ld c, $40 mlt bc - call Engine_SwapFrame2 ;calculate new pointer for HL ex de, hl - ld.lil de, romStart - add.lil hl, de - ld.lil de, SegaVRAM + call.lil GetDataPTR + romStart ;calculate new pointer for HL + ld.lil de, SegaVRAM Engine_LoadPlayerTiles_CopyTiles: ;copy 2 tiles (64 bytes) to vram ldir.lil ld hl, $D34E @@ -1974,59 +2033,6 @@ _: pop bc ;move to the next row ei ret - -; ============================================================================= -; VDP_WrapColumnAddress(uint16 vram_addr) UNUSED -; ----------------------------------------------------------------------------- -; Checks a VRAM screen map address pointer and wraps to the first column -; if it has overflowed to the next row. -; ----------------------------------------------------------------------------- -; In: -; HL - VRAM address. -; ld: -; None. -; ----------------------------------------------------------------------------- -VDP_WrapColumnAddress: ; $19B9 - ld a, l - and $3F - ret nz - push de - ld de, $0040 - or a - sbc hl, de - call VDP_SetAddress - pop de - ret - - -; ============================================================================= -; VDP_WrapColumnAddress(uint16 vram_addr) UNUSED -; ----------------------------------------------------------------------------- -; Checks a VRAM screen map address pointer and wraps to the first column -; if it has overflowed to the next row. -; ----------------------------------------------------------------------------- -; In: -; HL - VRAM address. -; ld: -; None. -; ----------------------------------------------------------------------------- -VDP_WrapRowAddress: - ld a, h - cp $4B ;check for overflow into SAT - ret nz - ld h, $38 - ret - - -_Unknown_6: - ld a, h - cp $38 - ret nc - ld h, $3E - ret - - - LABEL_19D7: push bc @@ -2112,24 +2118,43 @@ LABEL_1A13: ReadInput: ;$1A35 + ld hl, $D145 + ld de, $D146 + ld bc, $000F + lddr + ld hl, $D155 + ld de, $D156 + ld bc, $000F + lddr ld hl, Engine_InputFlags - ld a, (hl) - ld (Engine_InputFlagsLast), a ;load the previous frame's flags - call _Port1_Input ld (hl), a ;store joypad bitfield ld ($D157), a + + ld hl, Engine_InputFlagsLast + ld c, a + ld a, ($D138) + cpl + ld b, a + ld a, c + cpl + xor b + and c + ld (hl), a + ld a, ($D292) ;should cpu control sonic? bit 3, a call nz, Engine_Demo_MovePlayer ;should the cpu control the player? ld.lil a, (kbdG6) bit kbitClear, a ;is the clear key pressed? - jp.lil nz, ExitGame + romStart ;exit the program if it is + jp.lil nz, ExitGame ;exit the program if it is + ld hl, PauseHandler_Trig ld.lil a, (kbdG1) bit kbitMode, a ;is the X key pressed? jp nz, Engine_PauseHandler ;emulate SMS start button if it is + res 6, (hl) bit kbitDel, a ;is the delete key pressed? ret z @@ -2147,19 +2172,14 @@ _: ld d, a ld e, $80 ld.lil a, (kbdG1) and kbd2nd ;check button 1 - jr z, +_ ;jump if button not pressed - ld e, $00 rra or d ld d, a -_: ld.lil a, (kbdG2) + ld.lil a, (kbdG2) and kbdAlpha ;check button 2 - jr z, +_ ;jump if button not pressed - ld e, $00 -_: rra rra - or e + rra or d ret @@ -2183,12 +2203,14 @@ Engine_Demo_MovePlayer: ; $1A8C ld a, h ;bail out if offset = 0 or l ret z + ld a, (hl) ;load the control byte ld (Engine_InputFlags), a ;and store it for later inc hl ld a, (hl) ld (Engine_InputFlagsLast), a inc hl + ld (ControlByte), hl ;fetch the next offset ret @@ -2284,11 +2306,11 @@ ScoreCard_UpdateScore: ;$1C12 _: ld a, (Engine_InputFlags) ;check for button press and BTN_1 | BTN_2 jr nz, +_ ;if not pressing a button, wait for 1 frame - ei halt - -_: ld a, (RingCounter) + di +_: call Engine_WaitForInterrupt + ld a, (RingCounter) or a jr z, +_ @@ -2301,16 +2323,17 @@ _: ld a, (RingCounter) call LABEL_1D4F ;update score graphics? call LABEL_1D6F jr --_ -_: - ; wait a second - wait_1s +_: ; wait a second + call wait_1s _: ld a, (Engine_InputFlags) ;check for button press and BTN_1 | BTN_2 jr nz, +_ ei halt -_: xor a + di +_: call Engine_WaitForInterrupt + xor a ld de, $D2A2 ;score time value ld hl, Score_BadnikValue ld a, (de) @@ -2333,6 +2356,9 @@ _: xor a inc hl or (hl) jr nz, --_ + ld hl, FrameCounter + set 1, (hl) + call Engine_WaitForInterrupt ld hl, $3C2A ;vram address ld de, ScoreCard_Mappings_Blank ;mapping source @@ -3085,8 +3111,7 @@ Engine_LoadLevel: ;$21AA ld (LevelTimer+1), a dec a ;set timer update trigger ld (LevelTimerTrigger), a -_: ei - halt +_: call Engine_WaitForInterrupt ret @@ -3345,8 +3370,7 @@ LABEL_243C: ld ($D700), a call PaletteFadeOut ld b, 42 -_: ei - halt +_: call Engine_WaitForInterrupt djnz -_ ld hl, $D292 res 5, (hl) ;clear load intro flag @@ -3359,8 +3383,7 @@ LABEL_2459_51: call _Load_Title_Level call PaletteFadeOut ;fade the palette ld b, 42 -_: ei - halt +_: call Engine_WaitForInterrupt djnz -_ ld hl, $D292 res 4, (hl) ;clear load title screen flag @@ -3416,8 +3439,7 @@ LABEL_24BE_48: call LevelSelectMenu ;run the level select call PaletteFadeOut ld b, 42 -_: ei - halt +_: call Engine_WaitForInterrupt djnz -_ _: xor a ld ($D292), a @@ -3528,8 +3550,7 @@ DemoSequence_LoadLevel: ;254A call ScrollingText_UpdateSprites call PaletteFadeOut ld b, 42 ;pause to load the level -_: ei - halt +_: call Engine_WaitForInterrupt djnz -_ call Engine_LoadLevel ;load the level call Engine_LoadLevelPalette @@ -3555,14 +3576,13 @@ _: ; reset dynamic palette numbers ; fade out over 1 second call PaletteFadeOut - wait_1s + call wait_1s ret LABEL_259C: - ei - halt + call Engine_WaitForInterrupt ld a, ($D292) bit 7, a ret nz @@ -3668,8 +3688,7 @@ LABEL_2606: inc hl ld (hl), a ld b, $0C -_: ei - halt +_: call Engine_WaitForInterrupt djnz -_ #if Language = 1 call TitleCard_LoadText @@ -3771,8 +3790,7 @@ _: ld ($D118), bc ;rows/cols TitleCard_ScrollTextFromLeft: ;$26E1 push bc - ei - halt + call Engine_WaitForInterrupt ld bc, ($D118) ;rows/cols ld de, ($D11A) ;pointer to mappings ld hl, ($D11C) ;VRAM address @@ -3948,9 +3966,8 @@ LABEL_2849: ;TODO: unused? push hl ld bc, $0001 call VDP_Copy - ei - halt - halt + call Engine_WaitForInterrupt + call Engine_WaitForInterrupt pop hl inc hl pop de @@ -3963,8 +3980,7 @@ ScrollingText_UpdateSprites: ;285D ld hl, $003C _: push hl call LABEL_107C - ei - halt + call Engine_WaitForInterrupt pop hl dec hl ld a, h @@ -4337,6 +4353,8 @@ LABEL_3267: ;* Handle a button press when the player is Spin Dashing. * ;**************************************************************** Player_HandleSpinDash: + bit OBJ_F3_IN_AIR, (ix + Object.Flags03) ;is the player in air? + jp nz, Player_SetState_Roll_SpinDashRelease ld a, $80 ;reset the camera offset ld ($D289), a call LABEL_3A62 @@ -4661,7 +4679,7 @@ LABEL_33B7: ret z res 0, (ix+$03) call LABEL_3676 - ld a, (Engine_InputFlagsLast) + ld a, (Engine_InputFlags) and BTN_1 | BTN_2 jp nz, Player_SetState_Jumping ld hl, ($D516) @@ -5774,13 +5792,14 @@ _: call Player_UpdatePositionX call LABEL_6BF2 ;check collisions call LABEL_376E - ld a, (Engine_InputFlagsLast) + ld a, (Engine_InputFlags) and BTN_1 | BTN_2 ;check for either button 1 or button 2 ret z ld a, ($D501) cp PlayerState_Crouch jp z, Player_SetState_SpinDash + cp PlayerState_SpinDash ret z @@ -6384,7 +6403,7 @@ LABEL_40F0: jr nz, +_ call LABEL_4109 jr c, +_ - ld a, (Engine_InputFlagsLast) + ld a, (Engine_InputFlags) and BTN_1 | BTN_2 ret z _: res 2, (ix+$03) @@ -6602,7 +6621,7 @@ _: ld a, ($D3C6) add a, b ld ($D3C6), a call LABEL_42B7 - ld a, (Engine_InputFlagsLast) + ld a, (Engine_InputFlags) and BTN_1 | BTN_2 ret z xor a @@ -7918,7 +7937,6 @@ Engine_LoadLevelLayout_CopyByte: ;* the screen viewport. * ;**************************************************************** Engine_LoadLevel_DrawScreen: ;$5353 ;interrupt happens immediately after this - ei call Engine_LoadLevel_SetInitialPositions ld hl, ($D2CA) ;set the screen X pos ld (Camera_X), hl @@ -11711,6 +11729,10 @@ _: cp c ;* the player's right edge. * ;******************************************************** Player_CollideRightBreakableBlock: ;$71C9 + ld a, ($D501) + cp PlayerState_SpinDash + jp z, Player_CollideBreakableBlock_UpdateMappings + bit 1, (ix+$03) jp z, Player_CollideRightWithSolidBlock ld a, ($D517) @@ -13726,18 +13748,14 @@ _: ld (Engine_RingAnimFrame), a ; swap in the bank with the ring art ld a, 29 - call Engine_SwapFrame2 + ex de, hl + call.lil GetDataPTR + romStart - push hl + push.lil hl ld.lil hl, SegaVRAM add.lil hl, de ex.lil de, hl - pop hl - - push.lil de - ld.lil de, romStart - add.lil hl, de - pop.lil de + pop.lil hl ; copy 128 bytes to VRAM ld bc, 128 @@ -13746,6 +13764,11 @@ _: ld (Engine_RingAnimFrame), a set 0, (hl) ret +LoadSHCScreen: + ld a, 32 + call Engine_SwapFrame2 + jp $8000 + ROM_HEADER: ;$7FF0 .db "TMR SEGA" .db $00, $00 ;reserved @@ -13766,8 +13789,8 @@ ROM_HEADER: ;$7FF0 #include "cycling_palette_data.asm" #include "includes/ti_equates.asm" -;#include "appvars/banks.asm" ;uncomment to include game data. meant for debugging only. #include "appvars.asm" #include "screen_drawing_routines.asm" + #include "appvars/bank_equates.inc" #undef Listing \ No newline at end of file diff --git a/src/s2.lab b/src/s2.lab index 8d7a4d6..16a87e9 100644 --- a/src/s2.lab +++ b/src/s2.lab @@ -1,61 +1,64 @@ -_CHECKINPUT = $0A18 -_DATA_05AA = $0597 -_DATA_7761 = $6D74 -_DRAWCURSOR = $0A69 +_CHECKINPUT = $0A55 +_DATA_05AA = $05C3 +_DATA_7761 = $6DE2 +_DRAWCURSOR = $0AA6 _ERROR_MSG = $0067 -_GETCOMPRESSIONTYPE = $13E9 -_LABEL_1AA6_22 = $1313 -_LOAD_INTRO_LEVEL = $0B4E -_LOAD_TITLE_LEVEL = $0C24 -_MOVECURSORDOWN = $0A59 -_MOVECURSORUP = $0A4A -_PLAYER_ANIM_BALANCEFRAMECOUNTERS = $3149 -_PLAYER_ANIM_BALANCEFRAMES = $3135 -_PLAYER_CHANGEFRAMEDISPLAYTIME_WALKFRAMECOUNTERS = $30EB -_PORT1_INPUT = $12C9 -_RESETCURSORVELOCITY = $0A45 +_GETCOMPRESSIONTYPE = $1433 +_LABEL_1AA6_22 = $135D +_LOAD_INTRO_LEVEL = $0B8B +_LOAD_TITLE_LEVEL = $0C61 +_MOVECURSORDOWN = $0A96 +_MOVECURSORUP = $0A87 +_PLAYER_ANIM_BALANCEFRAMECOUNTERS = $31B0 +_PLAYER_ANIM_BALANCEFRAMES = $319C +_PLAYER_CHANGEFRAMEDISPLAYTIME_WALKFRAMECOUNTERS = $3152 +_PORT1_INPUT = $131C +_RESETCURSORVELOCITY = $0A82 _START = $0000 -_TILEMAPPINGS = $0A7E -_UNKNOWN_6 = $1232 -_VDP_INITREGISTERS_REGVALUES = $0E78 +_TILEMAPPINGS = $0ABB +_VDP_INITREGISTERS_REGVALUES = $0EC0 ACT1 = $0000 ACT2 = $0001 -ACT2TEXT = $0B44 +ACT2TEXT = $0B81 ACT3 = $0002 -ACT3TEXT = $0B49 -ALT_PALETTE_GMZ_CONVEYOR = $7749 +ACT3TEXT = $0B86 +ALT_PALETTE_GMZ_CONVEYOR = $77B9 APPVAROBJ = $0015 ARC_UNARC = $21448 BACKGROUNDXSCROLL = $D172 BACKGROUNDYSCROLL = $D173 -BANK04 = $78AE -BANK05 = $78B6 -BANK06 = $78BE -BANK07 = $78C6 -BANK08 = $78CE -BANK09 = $78D6 -BANK10 = $78DE -BANK11 = $78E6 -BANK12 = $78EE -BANK13 = $78F6 -BANK14 = $78FE -BANK15 = $7906 -BANK16 = $790E -BANK17 = $7916 -BANK18 = $791E -BANK19 = $7926 -BANK20 = $792E -BANK21 = $7936 -BANK22 = $793E -BANK23 = $7946 -BANK24 = $794E -BANK25 = $7956 -BANK26 = $795E -BANK27 = $7966 +BANK04 = $7996 +BANK05 = $799E +BANK06 = $79A6 +BANK07 = $79AE +BANK08 = $79B6 +BANK09 = $79BE +BANK10 = $79C6 +BANK11 = $79CE +BANK12 = $79D6 +BANK13 = $79DE +BANK14 = $79E6 +BANK15 = $79EE +BANK16 = $79F6 +BANK17 = $79FE +BANK18 = $7A06 +BANK19 = $7A0E +BANK20 = $7A16 +BANK21 = $7A1E +BANK22 = $7A26 +BANK23 = $7A2E +BANK24 = $7A36 +BANK25 = $7A3E +BANK26 = $7A46 +BANK27 = $7A4E BANK28 = $D071F6 -BANK29 = $7976 +BANK28HEADER = $7A56 +BANK29 = $7A5E BANK30 = $D0B1F6 +BANK30HEADER = $7A66 BANK31 = $D0F1F6 +BANK31HEADER = $7A6E +BANKADDRESSTABLE = $D0E000 BANKSLOT2 = $8000 BGPALETTECONTROL = $D4E6 BGPALETTEINDEX = $D4E7 @@ -72,18 +75,20 @@ BTN_RIGHT = $0008 BTN_RIGHT_BIT = $0003 BTN_UP = $0001 BTN_UP_BIT = $0000 -CALCULATEPLAYERDIRECTION = $295B +CALCULATEPLAYERDIRECTION = $29BB CAMERA_METATILECOLBUFFER = $D178 CAMERA_METATILEPTR = $D278 CAMERA_X = $D174 CAMERA_Y = $D176 CAMERAOFFSETX = $D288 CAMERAOFFSETY = $D289 -CHANGEGAMEMODE = $1C91 -CHAOSEMERALDDATA = $6FD6 -CHECKFORBANK = $77D4 -CHECKFORBANK_TOGGLEINTERRUPT = $781A +CHANGEGAMEMODE = $1CE9 +CHAOSEMERALDDATA = $7044 +CHECKFORBANK = $7844 +CHECKFORBANK_TOGGLEINTERRUPT = $788F +CHECKSPRITEOFFSCREEN = $D27D1F CHKFINDSYM = $2050C +CLEARMEMORYMAP = $7980 CLLSN_ADJUSTEDX = $D356 CLLSN_ADJUSTEDY = $D358 CLLSN_COLLISIONVALUEX = $D362 @@ -92,331 +97,336 @@ CLLSN_HEADERPTR3 = $D36F CLLSN_LEVELMAPBLOCKPTR = $D354 CLLSN_METATILEINDEX = $D353 CLLSN_METATILESURFACETYPE = $D35E -CLLSN_METATILETRIGGERFUNCPTRS = $634E +CLLSN_METATILETRIGGERFUNCPTRS = $63B4 CLLSN_METATILEX = $D35A CLLSN_METATILEY = $D35C -CLLSN_PROJECTVERTICAL = $66BE -CLLSN_PROJECTVERTICAL_EPILOGUE = $6708 -CLLSN_PROJECTVERTICAL_NOALTER = $670A +CLLSN_PROJECTVERTICAL = $6724 +CLLSN_PROJECTVERTICAL_EPILOGUE = $676E +CLLSN_PROJECTVERTICAL_NOALTER = $6770 CLLSN_RINGBLOCK = $D352 CLRLCDFULL = $20808 CMDPIXELSHADOW = $D07396 -COLLISION_MONITOR = $3F5D -COLLISION_MONITOR_CONTINUE = $3FA9 -COLLISION_MONITOR_INVINCIBILITY = $3FCF -COLLISION_MONITOR_LIFE = $3F9D -COLLISION_MONITOR_RINGS = $3F7F -COLLISION_MONITOR_SNEAKERS = $3FB6 +COLLISION_MONITOR = $3FC4 +COLLISION_MONITOR_CONTINUE = $4010 +COLLISION_MONITOR_INVINCIBILITY = $4036 +COLLISION_MONITOR_LIFE = $4004 +COLLISION_MONITOR_RINGS = $3FE6 +COLLISION_MONITOR_SNEAKERS = $401D +COLORDEPTH = $DC41 CONTINUECOUNTER = $D2BD CONTINUESCREEN_COUNT = $D2C4 -CONTINUESCREEN_DRAWSCREEN = $203E -CONTINUESCREEN_LOADNUMBERMAPPINGS = $207B -CONTINUESCREEN_LOADNUMBERTILES = $6DB6 -CONTINUESCREEN_LOADTILES = $6DA3 -CONTINUESCREEN_MAINLOOP = $06E8 +CONTINUESCREEN_DRAWSCREEN = $209A +CONTINUESCREEN_LOADNUMBERMAPPINGS = $20D7 +CONTINUESCREEN_LOADNUMBERTILES = $6E24 +CONTINUESCREEN_LOADTILES = $6E11 +CONTINUESCREEN_MAINLOOP = $070F CONTINUESCREEN_TIMER = $D2C3 CONTROLBYTE = $D2D2 -CONVERTPIXELROW = $D27C5D -CONVERTTILETO8BPP = $D27C3F +CONVERTPIXELROW = $D27D60 +CONVERTTILETO8BPP = $D27D42 CPHLDE = $2013C CRAM = $E30200 CURRENTACT = $D296 CURRENTLEVEL = $D295 CURRENTMETATILEADDR = $D23D CURSORPOS = $D2C2 -DATA_1E6D = $16F2 -DATA_1E76 = $16FB -DATA_1E79 = $16FE -DATA_1E7C = $1701 -DATA_1E7F = $1704 -DATA_1E82 = $1707 -DATA_1E85 = $170A -DATA_1E88 = $170D -DATA_1E8B = $1710 -DATA_1E8E = $1713 -DATA_1E91 = $1716 -DATA_1E94 = $1719 -DATA_1E97 = $171C -DATA_1E9A = $171F -DATA_1E9D = $1722 -DATA_1EA0 = $1725 -DATA_1EA3 = $1728 -DATA_1EA6 = $172B -DATA_1EA9 = $172E -DATA_1EAC = $1731 -DATA_1EAF = $1734 -DATA_1EB2 = $1737 -DATA_1EB5 = $173A -DATA_1EB8 = $173D -DATA_1EBB = $1740 -DATA_1EBE = $1743 -DATA_1EC1 = $1746 -DATA_1EC4 = $1749 -DATA_1EC7 = $174C -DATA_1ECA = $174F -DATA_1ECD = $1752 -DATA_1ED0 = $1755 -DATA_1ED3 = $1758 -DATA_1ED6 = $175B -DATA_1ED9 = $175E -DATA_1EDC = $1761 -DATA_1EDF = $1764 -DATA_1EE2 = $1767 -DATA_1EE5 = $176A -DATA_1EE8 = $176D -DATA_1EEB = $1770 -DATA_1F70 = $17F5 -DATA_1FE4 = $1869 -DATA_231A = $1B95 -DATA_2320 = $1B9B -DATA_23F8 = $1C73 -DATA_2402 = $1C7D -DATA_240C = $1C87 -DATA_28FE = $20C9 -DATA_2904 = $20CF -DATA_2974 = $213F -DATA_299C = $2167 -DATA_29C4 = $218F -DATA_2A34 = $21FF -DATA_2AA4 = $226F -DATA_2B14 = $22DF -DATA_2B84 = $234F -DATA_2BF4 = $23BF -DATA_2C64 = $242F -DATA_2D0C = $249F -DATA_2D6C = $2537 -DATA_2D98 = $2563 -DATA_2DAC = $2577 -DATA_2DC0 = $258B -DATA_2DD4 = $259F -DATA_2E04 = $25CF -DATA_2E90 = $265B -DATA_2F1C = $26E7 +DATA_1E6D = $1749 +DATA_1E76 = $1752 +DATA_1E79 = $1755 +DATA_1E7C = $1758 +DATA_1E7F = $175B +DATA_1E82 = $175E +DATA_1E85 = $1761 +DATA_1E88 = $1764 +DATA_1E8B = $1767 +DATA_1E8E = $176A +DATA_1E91 = $176D +DATA_1E94 = $1770 +DATA_1E97 = $1773 +DATA_1E9A = $1776 +DATA_1E9D = $1779 +DATA_1EA0 = $177C +DATA_1EA3 = $177F +DATA_1EA6 = $1782 +DATA_1EA9 = $1785 +DATA_1EAC = $1788 +DATA_1EAF = $178B +DATA_1EB2 = $178E +DATA_1EB5 = $1791 +DATA_1EB8 = $1794 +DATA_1EBB = $1797 +DATA_1EBE = $179A +DATA_1EC1 = $179D +DATA_1EC4 = $17A0 +DATA_1EC7 = $17A3 +DATA_1ECA = $17A6 +DATA_1ECD = $17A9 +DATA_1ED0 = $17AC +DATA_1ED3 = $17AF +DATA_1ED6 = $17B2 +DATA_1ED9 = $17B5 +DATA_1EDC = $17B8 +DATA_1EDF = $17BB +DATA_1EE2 = $17BE +DATA_1EE5 = $17C1 +DATA_1EE8 = $17C4 +DATA_1EEB = $17C7 +DATA_1F70 = $184C +DATA_1FE4 = $18C0 +DATA_231A = $1BED +DATA_2320 = $1BF3 +DATA_23F8 = $1CCB +DATA_2402 = $1CD5 +DATA_240C = $1CDF +DATA_28FE = $2129 +DATA_2904 = $212F +DATA_2974 = $219F +DATA_299C = $21C7 +DATA_29C4 = $21EF +DATA_2A34 = $225F +DATA_2AA4 = $22CF +DATA_2B14 = $233F +DATA_2B84 = $23AF +DATA_2BF4 = $241F +DATA_2C64 = $248F +DATA_2D0C = $24FF +DATA_2D6C = $2597 +DATA_2D98 = $25C3 +DATA_2DAC = $25D7 +DATA_2DC0 = $25EB +DATA_2DD4 = $25FF +DATA_2E04 = $262F +DATA_2E90 = $26BB +DATA_2F1C = $2747 DATA_330 = $0326 -DATA_4016 = $37BF -DATA_43D3 = $3B7C -DATA_543F = $4B62 -DATA_5445 = $4B68 -DATA_544B = $4B6E -DATA_54F9 = $4C1C -DATA_5501 = $4C24 -DATA_5509 = $4C2C -DATA_5511 = $4C34 -DATA_5519 = $4C3C -DATA_5521 = $4C44 -DATA_5529 = $4C4C -DATA_62BD = $59D6 -DATA_6404 = $5B11 -DATA_6975 = $6062 -DATA_6B27 = $6206 -DATA_6BB2 = $6291 -DATA_6D41 = $6413 -DATA_6D41_END = $641B -DATA_ACCELERATIONVALUES_LEFT = $353F -DATA_ACCELERATIONVALUES_LEFT_UNDERWATER = $36BF -DATA_ACCELERATIONVALUES_RIGHT = $34BF -DATA_ACCELERATIONVALUES_RIGHT_UNDERWATER = $363F +DATA_4016 = $3826 +DATA_43D3 = $3BE3 +DATA_543F = $4BC8 +DATA_5445 = $4BCE +DATA_544B = $4BD4 +DATA_54F9 = $4C82 +DATA_5501 = $4C8A +DATA_5509 = $4C92 +DATA_5511 = $4C9A +DATA_5519 = $4CA2 +DATA_5521 = $4CAA +DATA_5529 = $4CB2 +DATA_62BD = $5A3C +DATA_6404 = $5B77 +DATA_6975 = $60C8 +DATA_6B27 = $626C +DATA_6BB2 = $62F7 +DATA_6D41 = $6479 +DATA_6D41_END = $6481 +DATA_ACCELERATIONVALUES_LEFT = $35A6 +DATA_ACCELERATIONVALUES_LEFT_UNDERWATER = $3726 +DATA_ACCELERATIONVALUES_RIGHT = $3526 +DATA_ACCELERATIONVALUES_RIGHT_UNDERWATER = $36A6 DATA_B30_9841 = $E000 DATA_B30_9A41 = $E200 -DATA_B30_AF41 = $772E -DATA_B30_AF4A = $7737 -DATA_B30_AF51 = $773E -DATA_B30_AF53 = $7740 -DATA_B30_AF5C = $7749 -DATA_B30_AF61 = $774E -DATA_B30_AF65 = $7752 -DATA_B30_AF7D = $776A -DATA_B30_AF83 = $7770 -DATA_B30_AF9F = $778C -DATA_B30_AFCF = $77BC -DATA_B30_AFD5 = $77C2 -DATA_B30_AFDB = $77C8 -DATA_DECELERATIONVALUES = $35BF -DATA_OFFSCREENBUFFEROFFSETS = $5121 -DATA_RINGCOLLISION_METATILES = $6A8F -DATA_SONICLOOPANIMATIONS = $31E2 -DATA_SONICLOOPFALLFRAMES = $319E +DATA_B30_AF41 = $779E +DATA_B30_AF4A = $77A7 +DATA_B30_AF51 = $77AE +DATA_B30_AF53 = $77B0 +DATA_B30_AF5C = $77B9 +DATA_B30_AF61 = $77BE +DATA_B30_AF65 = $77C2 +DATA_B30_AF7D = $77DA +DATA_B30_AF83 = $77E0 +DATA_B30_AF9F = $77FC +DATA_B30_AFCF = $782C +DATA_B30_AFD5 = $7832 +DATA_B30_AFDB = $7838 +DATA_DECELERATIONVALUES = $3626 +DATA_OFFSCREENBUFFEROFFSETS = $5187 +DATA_RINGCOLLISION_METATILES = $6AFD +DATA_SONICLOOPANIMATIONS = $3249 +DATA_SONICLOOPFALLFRAMES = $3205 DEMOBANK = $D2D8 DEMONUMBER = $D2D7 -DEMOSEQUENCE_CHANGELEVEL = $1D4D -DEMOSEQUENCE_LOADLEVEL = $1DB8 -DEMOSEQUENCE_PLAYDEMO = $1CDF -DONOTHINGSTUB = $5BBD -DRAW8BPPTILEEND = $D27C8C -DRAWCACHEDPIXEL = $D27C7E -DRAWCACHEDTILE = $D27A99 -DRAWCACHEDTILE_FLIPPEDX = $D27AE7 -DRAWPIXEL = $D27C7D -DRAWSAT = $D27BBD +DEMOSEQUENCE_CHANGELEVEL = $1DA8 +DEMOSEQUENCE_LOADLEVEL = $1E13 +DEMOSEQUENCE_PLAYDEMO = $1D39 +DONOTHINGSTUB = $5C23 +DRAW8BPPTILEEND = $D27D8F +DRAWCACHEDPIXEL = $D27D81 +DRAWCACHEDTILE = $D27B93 +DRAWCACHEDTILE_FLIPPEDX = $D27BE1 +DRAWPIXEL = $D27D80 +DRAWSAT = $D27CB7 DRAWSATTRIG = $D4C1 -DRAWSCREEN = $797E -DRAWSCREENMAP = $D27A19 -DRAWSCREENMAP_TILES = $D27A49 +DRAWSCREEN = $7A7E +DRAWSCREENMAP = $D27B13 +DRAWSCREENMAP_TILES = $D27B43 DRAWTILEMAPTRIG = $D4C0 EMERALDFLAGS = $D2C5 -ENGINE_ADJUSTPLAYERAFTERCOLLISION = $5AFE -ENGINE_ALLOCATEOBJECTHIGHPRIORITY = $5860 -ENGINE_ALLOCATEOBJECTLOWPRIORITY = $587F -ENGINE_ANIMATERINGART = $75B9 -ENGINE_CALCULATEBGSCROLL = $41A8 -ENGINE_CALCULATECAMERABOUNDS = $55C8 -ENGINE_CAMERAADJUST = $558A -ENGINE_CAPLIFECOUNTERVALUE = $1E13 -ENGINE_CHECKCOLLISION = $5F2F -ENGINE_CHECKCOLLISION_BOTTOM = $5FA2 -ENGINE_CHECKCOLLISION_LEFT = $5F87 -ENGINE_CHECKCOLLISION_RETURN = $601C -ENGINE_CHECKCOLLISION_TOP = $5FC0 -ENGINE_CHECKCOLLISION_UPDATEOBJECTFLAGS = $5FD4 -ENGINE_CHECKCOLLISIONANDADJUSTPLAYER = $5A68 -ENGINE_CHECKGLOBALTRIGGERS = $05BC -ENGINE_CHECKHASEMERALD = $0776 -ENGINE_CLEARAUXLEVELHEADER = $734F -ENGINE_CLEARLEVELATTRIBUTES = $4C54 -ENGINE_CLEARPALETTERAM = $6E31 -ENGINE_CLEARPLAYERTILES = $0D48 -ENGINE_CLEARUNDERWATER = $40D3 -ENGINE_CLEARVRAM = $6E02 -ENGINE_CLEARWORKINGVRAM = $1A5F -ENGINE_COLLISION_ADJUSTVERTICALPOS = $675F +ENGINE_ADJUSTPLAYERAFTERCOLLISION = $5B64 +ENGINE_ALLOCATEOBJECTHIGHPRIORITY = $58C6 +ENGINE_ALLOCATEOBJECTLOWPRIORITY = $58E5 +ENGINE_ANIMATERINGART = $7627 +ENGINE_CALCULATEBGSCROLL = $420F +ENGINE_CALCULATECAMERABOUNDS = $562E +ENGINE_CAMERAADJUST = $55F0 +ENGINE_CAPLIFECOUNTERVALUE = $1E6D +ENGINE_CHECKCOLLISION = $5F95 +ENGINE_CHECKCOLLISION_BOTTOM = $6008 +ENGINE_CHECKCOLLISION_LEFT = $5FED +ENGINE_CHECKCOLLISION_RETURN = $6082 +ENGINE_CHECKCOLLISION_TOP = $6026 +ENGINE_CHECKCOLLISION_UPDATEOBJECTFLAGS = $603A +ENGINE_CHECKCOLLISIONANDADJUSTPLAYER = $5ACE +ENGINE_CHECKGLOBALTRIGGERS = $05F1 +ENGINE_CHECKHASEMERALD = $0799 +ENGINE_CLEARAUXLEVELHEADER = $73BD +ENGINE_CLEARLEVELATTRIBUTES = $4CBA +ENGINE_CLEARPALETTERAM = $6E9F +ENGINE_CLEARPLAYERTILES = $0D90 +ENGINE_CLEARUNDERWATER = $413A +ENGINE_CLEARVRAM = $6E70 +ENGINE_CLEARWORKINGVRAM = $1AB7 +ENGINE_COLLISION_ADJUSTVERTICALPOS = $67C5 ENGINE_COLLISIONDATAPTR = $D2D4 -ENGINE_COPYMAPPINGSCOLUMNTOVRAM = $5032 -ENGINE_COPYMAPPINGSROWTOVRAM = $50FC -ENGINE_COPYMAPPINGSTOVRAM_COLUMN = $4FDA -ENGINE_COPYMAPPINGSTOVRAM_ROW = $50A1 -ENGINE_COPYPALETTES = $0DB6 -ENGINE_CREATEBLOCKFRAGMENTOBJECTS = $68DD +ENGINE_COPYMAPPINGSCOLUMNTOVRAM = $5098 +ENGINE_COPYMAPPINGSROWTOVRAM = $5162 +ENGINE_COPYMAPPINGSTOVRAM_COLUMN = $5040 +ENGINE_COPYMAPPINGSTOVRAM_ROW = $5107 +ENGINE_COPYPALETTES = $0DFE +ENGINE_CREATEBLOCKFRAGMENTOBJECTS = $694B ENGINE_DATA_BYTEFLIPLUT = $0100 -ENGINE_DATA_STATUSICONDEFAULTS = $1A9E -ENGINE_DEALLOCATEOBJECT = $5962 -ENGINE_DEMO_MOVEPLAYER = $12F9 +ENGINE_DATA_STATUSICONDEFAULTS = $1AF6 +ENGINE_DEALLOCATEOBJECT = $59C8 +ENGINE_DEMO_MOVEPLAYER = $1343 ENGINE_DEMOSEQ_BANK = $D2D8 -ENGINE_DISPLAYEXPLOSIONOBJECT = $59A5 -ENGINE_DIVIDE_16_BY_U8 = $14A6 +ENGINE_DISPLAYEXPLOSIONOBJECT = $5A0B +ENGINE_DIVIDE_16_BY_U8 = $14F0 ENGINE_DYNPALETTE_0 = $D4A6 ENGINE_DYNPALETTE_1 = $D4AE ENGINE_ERRORTRAP = $006C -ENGINE_GETCOLLISIONDATA_CLEANUP = $6BFF -ENGINE_GETCOLLISIONDATA_HANDLEOVERFLOW = $6C03 -ENGINE_GETCOLLISIONDATAFORBLOCK = $6B09 -ENGINE_GETCOLLISIONVALUEFORBLOCK = $6B9A -ENGINE_GETOBJECTDESCRIPTORPOINTER = $5BD2 -ENGINE_GETOBJECTINDEXFROMPOINTER = $5BC3 -ENGINE_GETOBJECTSCREENPOS = $3216 -ENGINE_HANDLEPLC = $6E46 -ENGINE_HANDLEPLC_CHAOSEMERALD = $6FB2 -ENGINE_HANDLEPLC_CLEANUP = $6F2F -ENGINE_HANDLEPLC_COPYMIRRORED = $6EB1 -ENGINE_HANDLEPLC_MONITORART = $6FE6 -ENGINE_HANDLEPLC_NOBANK = $6EEC -ENGINE_HANDLEPLC_PARSEDESCRIPTOR = $6F0A -ENGINE_HANDLEVBLANK = $0474 -ENGINE_HANDLEVBLANK_EPILOGUE = $0537 -ENGINE_HANDLEVBLANK_PALETTESONLY = $0577 -ENGINE_INITCOUNTERS = $1AD9 -ENGINE_INITIALISE = $0437 -ENGINE_INITSTATUSICONS = $1A6D +ENGINE_GETCOLLISIONDATA_CLEANUP = $6C6D +ENGINE_GETCOLLISIONDATA_HANDLEOVERFLOW = $6C71 +ENGINE_GETCOLLISIONDATAFORBLOCK = $6B77 +ENGINE_GETCOLLISIONVALUEFORBLOCK = $6C08 +ENGINE_GETOBJECTDESCRIPTORPOINTER = $5C38 +ENGINE_GETOBJECTINDEXFROMPOINTER = $5C29 +ENGINE_GETOBJECTSCREENPOS = $327D +ENGINE_HANDLEPLC = $6EB4 +ENGINE_HANDLEPLC_CHAOSEMERALD = $7020 +ENGINE_HANDLEPLC_CLEANUP = $6F9D +ENGINE_HANDLEPLC_COPYMIRRORED = $6F1F +ENGINE_HANDLEPLC_MONITORART = $7054 +ENGINE_HANDLEPLC_NOBANK = $6F5A +ENGINE_HANDLEPLC_PARSEDESCRIPTOR = $6F78 +ENGINE_HANDLEVBLANK = $0489 +ENGINE_HANDLEVBLANK_EPILOGUE = $0549 +ENGINE_HANDLEVBLANK_PALETTESONLY = $0589 +ENGINE_INITCOUNTERS = $1B31 +ENGINE_INITIALISE = $0448 +ENGINE_INITSTATUSICONS = $1AC5 ENGINE_INPUTFLAGS = $D137 ENGINE_INPUTFLAGSLAST = $D147 ENGINE_INTERRUPT = $0038 ENGINE_INTERRUPTSERVICED = $D135 -ENGINE_LIMITSCREENPOS_RIGHT = $348D -ENGINE_LOADAUXLEVELHEADER = $1B0C -ENGINE_LOADCARDMAPPINGS = $11C8 -ENGINE_LOADLEVEL = $1A2D -ENGINE_LOADLEVEL_DRAWSCREEN = $4A76 -ENGINE_LOADLEVEL_SETINITIALPOSITIONS = $4AE3 -ENGINE_LOADLEVELHEADER = $4C62 -ENGINE_LOADLEVELLAYOUT = $4A2E -ENGINE_LOADLEVELLAYOUT_COPYBYTE = $4A6D -ENGINE_LOADLEVELPALETTE = $6CC0 -ENGINE_LOADLEVELTILES = $6C5B -ENGINE_LOADMAPPINGS = $11D0 -ENGINE_LOADMAPPINGS32_COLUMN = $4F7D -ENGINE_LOADMAPPINGS32_ROW = $505B -ENGINE_LOADPLAYERTILES = $0CFE -ENGINE_LOADPLAYERTILES_COPYTILES = $0D3F -ENGINE_LOCKCAMERA = $4104 -ENGINE_MAPPINGS_GETBLOCKXY = $41C5 +ENGINE_LIMITSCREENPOS_RIGHT = $34F4 +ENGINE_LOADAUXLEVELHEADER = $1B64 +ENGINE_LOADCARDMAPPINGS = $1214 +ENGINE_LOADLEVEL = $1A84 +ENGINE_LOADLEVEL_DRAWSCREEN = $4ADD +ENGINE_LOADLEVEL_SETINITIALPOSITIONS = $4B49 +ENGINE_LOADLEVELHEADER = $4CC8 +ENGINE_LOADLEVELLAYOUT = $4A95 +ENGINE_LOADLEVELLAYOUT_COPYBYTE = $4AD4 +ENGINE_LOADLEVELPALETTE = $6D2E +ENGINE_LOADLEVELTILES = $6CC9 +ENGINE_LOADMAPPINGS = $121C +ENGINE_LOADMAPPINGS32_COLUMN = $4FE3 +ENGINE_LOADMAPPINGS32_ROW = $50C1 +ENGINE_LOADPLAYERTILES = $0D42 +ENGINE_LOADPLAYERTILES_COPYTILES = $0D87 +ENGINE_LOCKCAMERA = $416B +ENGINE_MAPPINGS_GETBLOCKXY = $422C ENGINE_MONITORCLLSNTYPE = $D39D -ENGINE_MOVEOBJECTTOPLAYER = $5980 -ENGINE_MULTIPLY_8_BY_8U = $149A +ENGINE_MOVEOBJECTTOPLAYER = $59E6 +ENGINE_MULTIPLY_8_BY_8U = $14E4 ENGINE_NMI = $0066 ENGINE_OBJCHARCODEPTR = $D110 ENGINE_OBJECTSLOTS = $D500 -ENGINE_PAUSEHANDLER = $059F +ENGINE_PAUSEHANDLER = $05CB ENGINE_POWERUPTIMER = $D4A0 -ENGINE_RELEASECAMERA = $40FE -ENGINE_REMOVEBREAKABLEBLOCK = $5D1E +ENGINE_RELEASECAMERA = $4165 +ENGINE_REMOVEBREAKABLEBLOCK = $5D84 ENGINE_RESET = $0426 -ENGINE_RESETINTERRUPTFLAG = $0DA3 +ENGINE_RESETINTERRUPTFLAG = $0DEB +ENGINE_RESETLEVEL = $0870 ENGINE_RINGANIMFRAME = $D351 ENGINE_RINGART_DEST = $D397 ENGINE_RINGART_SRC = $D395 -ENGINE_SETCAMERAANDLOCK = $4110 -ENGINE_SETMAXIMUMCAMERAX = $413E -ENGINE_SETMINIMUMCAMERAX = $412E -ENGINE_SETOBJECTVERTICALSPEED = $5A17 -ENGINE_SETSTATUSICONPOSITIONS = $1AC2 -ENGINE_SETUNDERWATER = $40D8 -ENGINE_SWAPFRAME2 = $0D84 -ENGINE_TIMER_INCREMENT = $1926 -ENGINE_TIMER_SETSPRITES = $1955 -ENGINE_TOGGLESPRITEVISIBLE = $116E -ENGINE_UPDATEALLOBJECTS = $562C -ENGINE_UPDATECAMERAPOS = $40DE -ENGINE_UPDATECAMERAXPOS = $414E -ENGINE_UPDATECAMERAXPOS_LIMIT = $4172 -ENGINE_UPDATECAMERAYPOS = $4179 -ENGINE_UPDATECAMERAYPOS_LIMIT = $41A1 -ENGINE_UPDATECYCLINGPALETTES = $7308 -ENGINE_UPDATELEVELSTATE = $08D5 -ENGINE_UPDATEMAPPINGBLOCK = $126B -ENGINE_UPDATEOBJECT = $5767 -ENGINE_UPDATEOBJECT_ANIMATION = $57C8 -ENGINE_UPDATEOBJECT_GETLOGICPTR = $5783 -ENGINE_UPDATEOBJECT_PROCESSLOGIC = $57A3 -ENGINE_UPDATEOBJECT_STATE = $577D -ENGINE_UPDATEOBJECTHPOS = $10E1 -ENGINE_UPDATEOBJECTPOSITION = $5EEE -ENGINE_UPDATEOBJECTVPOS = $108D -ENGINE_UPDATEPLAYEROBJECT = $575C -ENGINE_UPDATEPLAYEROBJECTSTATE = $2773 -ENGINE_UPDATERINGCOUNTERSPRITES = $1E3D -ENGINE_UPDATESHZ2WIND = $6043 -ENGINE_UPDATESPRITEATTRIBS = $102C +ENGINE_SETCAMERAANDLOCK = $4177 +ENGINE_SETMAXIMUMCAMERAX = $41A5 +ENGINE_SETMINIMUMCAMERAX = $4195 +ENGINE_SETOBJECTVERTICALSPEED = $5A7D +ENGINE_SETSTATUSICONPOSITIONS = $1B1A +ENGINE_SETUNDERWATER = $413F +ENGINE_SWAPFRAME2 = $0DCC +ENGINE_TIMER_INCREMENT = $197D +ENGINE_TIMER_SETSPRITES = $19AC +ENGINE_TOGGLESPRITEVISIBLE = $11BA +ENGINE_UPDATEALLOBJECTS = $5692 +ENGINE_UPDATECAMERAPOS = $4145 +ENGINE_UPDATECAMERAXPOS = $41B5 +ENGINE_UPDATECAMERAXPOS_LIMIT = $41D9 +ENGINE_UPDATECAMERAYPOS = $41E0 +ENGINE_UPDATECAMERAYPOS_LIMIT = $4208 +ENGINE_UPDATECYCLINGPALETTES = $7376 +ENGINE_UPDATELEVELSTATE = $08F4 +ENGINE_UPDATEMAPPINGBLOCK = $1299 +ENGINE_UPDATEOBJECT = $57CD +ENGINE_UPDATEOBJECT_ANIMATION = $582E +ENGINE_UPDATEOBJECT_GETLOGICPTR = $57E9 +ENGINE_UPDATEOBJECT_PROCESSLOGIC = $5809 +ENGINE_UPDATEOBJECT_STATE = $57E3 +ENGINE_UPDATEOBJECTHPOS = $112D +ENGINE_UPDATEOBJECTPOSITION = $5F54 +ENGINE_UPDATEOBJECTVPOS = $10D9 +ENGINE_UPDATEPLAYEROBJECT = $57C2 +ENGINE_UPDATEPLAYEROBJECTSTATE = $27D3 +ENGINE_UPDATERINGCOUNTERSPRITES = $1E97 +ENGINE_UPDATESHZ2WIND = $60A9 +ENGINE_UPDATESPRITEATTRIBS = $1078 ENGINE_UPDATESPRITEATTRIBS_ADJ_POS = $D393 ENGINE_UPDATESPRITEATTRIBS_HPOS_PTR = $D36B -ENGINE_UPDATESPRITEATTRIBS_NOCLEAR = $1182 +ENGINE_UPDATESPRITEATTRIBS_NOCLEAR = $11CE ENGINE_UPDATESPRITEATTRIBS_VPOS_PTR = $D369 -ENGINE_UPDATESPRITEATTRIBSART = $0D5C -ENGINE_UPDATEUNDERWATERFLAG = $40C5 -ENGINE_WAITFORINTERRUPT = $0580 -ENGINE_WATERLEVEL_DONOTHING = $4017 -ENGINE_WATERLEVEL_INCAIRTIMER = $3FF9 -ENGINE_WATERLEVEL_SPAWNBUBBLE = $4018 -ENGINE_WATERLEVEL_SPAWNCOUNTOBJ = $4010 -EXITGAME = $787E -EXITGAMEEND = $D278AE +ENGINE_UPDATESPRITEATTRIBSART = $0DA4 +ENGINE_UPDATEUNDERWATERFLAG = $412C +ENGINE_WAITFORINTERRUPT = $0592 +ENGINE_WATERLEVEL_DONOTHING = $407E +ENGINE_WATERLEVEL_INCAIRTIMER = $4060 +ENGINE_WATERLEVEL_SPAWNBUBBLE = $407F +ENGINE_WATERLEVEL_SPAWNCOUNTOBJ = $4077 +EVALGAMEPTR = $D0DFFC +EVALUATEGAME = $0673 +EXITGAME = $7944 +EXITGAMEEND = $7996 FGPALETTECONTROL = $D4E8 FGPALETTEINDEX = $D4E9 FLAGPOINTER = $D345 FRAME1PAGE = $D12A FRAME2PAGE = $D12B FRAMECOUNTER = $D12F -GAMEOVERSCREEN_DRAWSCREEN = $2006 -GAMEOVERSCREEN_LOADTILES = $6D90 -GAMESTATE_CHECKCONTINUE = $06A7 -GAMESTATE_DOCONTINUE = $068C -GAMESTATE_ENDSEQUENCE = $05E6 -GAMESTATE_GAMEOVER = $064F -GAMESTATE_KILLPLAYER = $0828 -GAMESTATE_NEXTACT = $0723 -GAMESTATE_NEXTZONE = $0799 -GAMESTATE_TITLECARD = $0878 -GETTILECOORDINATES = $D27B51 -GETTILEFLAGS = $D27B6B -GETTILEPOINTER = $D27B27 +GAMEOVERSCREEN_DRAWSCREEN = $2062 +GAMEOVERSCREEN_LOADTILES = $6DFE +GAMESTATE_CHECKCONTINUE = $06D1 +GAMESTATE_DOCONTINUE = $06B6 +GAMESTATE_ENDSEQUENCE = $061B +GAMESTATE_GAMEOVER = $067A +GAMESTATE_KILLPLAYER = $0846 +GAMESTATE_NEXTACT = $074A +GAMESTATE_NEXTZONE = $07BC +GAMESTATE_TITLECARD = $0894 +GETDATAPTR = $792D +GETTILECOORDINATES = $D27C4B +GETTILEFLAGS = $D27C65 +GETTILEPOINTER = $D27C21 GLOBALTRIGGERS = $D293 GT_0 = $0001 GT_1 = $0002 @@ -437,7 +447,7 @@ GT_TITLECARD_BIT = $0002 HASEMERALDTRG = $D2C6 HOLDTIME = $D46A IDLETIMER = $D3B4 -INCREMENTRINGCOUNTER = $1E2A +INCREMENTRINGCOUNTER = $1E84 KBD0 = $0001 KBD1 = $0002 KBD2 = $0002 @@ -543,315 +553,315 @@ KBITVARS = $0006 KBITWINDOW = $0003 KBITY = $0004 KBITZOOM = $0002 -LABEL_107C = $0CF6 -LABEL_1084 = $0CFE -LABEL_129C = $0D84 -LABEL_12C8 = $0DA8 -LABEL_13D2 = $0F5B -LABEL_19D7 = $1239 -LABEL_1A13 = $1275 -LABEL_1BF7 = $14B4 -LABEL_1CC4 = $153D -LABEL_1CCA = $1543 -LABEL_1CD0 = $1549 -LABEL_1D05 = $157E -LABEL_1D34 = $15AD -LABEL_1D4F = $15C8 -LABEL_1D60 = $15D9 -LABEL_1D6F = $15E8 -LABEL_1D7F = $15F8 -LABEL_1DAF = $1626 +LABEL_107C = $0D3A +LABEL_1084 = $0D42 +LABEL_129C = $0DCC +LABEL_12C8 = $0DF0 +LABEL_13D2 = $0FA3 +LABEL_19D7 = $1267 +LABEL_1A13 = $12A3 +LABEL_1BF7 = $14FE +LABEL_1CC4 = $1594 +LABEL_1CCA = $159A +LABEL_1CD0 = $15A0 +LABEL_1D05 = $15D5 +LABEL_1D34 = $1604 +LABEL_1D4F = $161F +LABEL_1D60 = $1630 +LABEL_1D6F = $163F +LABEL_1D7F = $164F +LABEL_1DAF = $167D LABEL_200 = $0200 -LABEL_20FB = $197E -LABEL_2416 = $1C91 -LABEL_242F_49 = $1CA6 -LABEL_2439_50 = $1CAF -LABEL_243C = $1CB2 -LABEL_2459_51 = $1CCA -LABEL_247B = $1CEB -LABEL_24BE_48 = $1D2E -LABEL_2530 = $1D9E -LABEL_2576 = $1DE4 -LABEL_259C = $1E05 -LABEL_25C3 = $1E2A -LABEL_2606 = $1E68 -LABEL_264E = $1E9F -LABEL_2849 = $2097 -LABEL_2FCB = $2796 -LABEL_3011 = $27CD -LABEL_3032 = $27F1 -LABEL_3054 = $2813 -LABEL_305F = $2821 -LABEL_3072 = $2846 -LABEL_307F = $2853 -LABEL_3092 = $2861 -LABEL_30A5 = $286F -LABEL_30C7 = $28A1 -LABEL_30D8 = $28B2 -LABEL_30FD = $28D2 -LABEL_3138 = $28EE -LABEL_3176 = $2927 -LABEL_318F = $2940 -LABEL_31BF = $2970 -LABEL_31F8 = $29A9 -LABEL_3222 = $29D3 -LABEL_3245 = $29F6 -LABEL_3267 = $2A18 -LABEL_3385 = $2B5E -LABEL_33A8 = $2B81 -LABEL_33B7 = $2B90 -LABEL_33EA = $2BC2 -LABEL_3467 = $2C3F -LABEL_3484 = $2C57 -LABEL_348F = $2C62 -LABEL_34A4 = $2C77 -LABEL_34A9 = $2C7C -LABEL_34DA = $2CAD -LABEL_34E1 = $2CB4 -LABEL_359B = $2D71 -LABEL_3638 = $2E0E -LABEL_365C = $2E32 -LABEL_3676 = $2E4C -LABEL_3681 = $2E57 -LABEL_36B2 = $2E88 -LABEL_36E1 = $2EB5 -LABEL_3702 = $2ED6 -LABEL_3703 = $2ED7 -LABEL_3725 = $2EF7 -LABEL_375F = $2F31 -LABEL_376E = $2F40 -LABEL_3796 = $2F67 -LABEL_384E = $3019 -LABEL_3A62 = $323D -LABEL_3ACA = $32AB -LABEL_4024 = $37CD -LABEL_4037 = $37E0 -LABEL_4044 = $37ED -LABEL_404F = $37F8 -LABEL_4064 = $380D -LABEL_4079 = $3822 -LABEL_408E = $3837 -LABEL_40B2 = $3859 -LABEL_40D6 = $387C -LABEL_40E0 = $3886 -LABEL_40F0 = $3896 -LABEL_4109 = $38AF -LABEL_4135 = $38DD -LABEL_4137 = $38DF -LABEL_415A = $3901 -LABEL_415F = $3906 -LABEL_4199 = $3940 -LABEL_41A6 = $394D -LABEL_41DD = $3984 -LABEL_41EA = $3991 -LABEL_4204 = $39AB -LABEL_4226 = $39CD -LABEL_424A = $39F2 -LABEL_42B7 = $3A5E -LABEL_42E8 = $3A8E -LABEL_4310 = $3AB8 -LABEL_4352 = $3AFA -LABEL_437A = $3B25 -LABEL_438A = $3B35 -LABEL_43AF = $3B59 -LABEL_43BF = $3B68 -LABEL_43C5 = $3B6E -LABEL_43F3 = $3B9C -LABEL_43F9 = $3BA2 -LABEL_4408 = $3BAC -LABEL_440E = $3BAC -LABEL_4414 = $3BB2 -LABEL_441A = $3BAC -LABEL_4420 = $3BB8 -LABEL_4440 = $3BD7 -LABEL_4446 = $3BDD -LABEL_4459 = $3BD7 -LABEL_445F = $3BF0 -LABEL_4476 = $3C07 -LABEL_447C = $3C0D -LABEL_4482 = $3C13 -LABEL_44A2 = $3C32 -LABEL_44A8 = $3C38 -LABEL_44BB = $3C5C -LABEL_44C1 = $3C4B -LABEL_44D8 = $3C45 -LABEL_44DE = $3C62 -LABEL_44E4 = $3C68 -LABEL_4504 = $3C62 -LABEL_450A = $3C87 -LABEL_451D = $3C62 -LABEL_4523 = $3C9A -LABEL_453A = $3C81 -LABEL_4540 = $3CB1 -LABEL_4546 = $3CB7 -LABEL_4566 = $3CFA -LABEL_456C = $3CD6 -LABEL_457F = $3CFA -LABEL_4585 = $3CE9 -LABEL_459C = $3D00 -LABEL_45A2 = $3D06 -LABEL_45A8 = $3D0C -LABEL_45BA = $3D1E -LABEL_45C6 = $3D2A -LABEL_45D8 = $3D3C -LABEL_45E4 = $3D48 -LABEL_45F6 = $3D5A -LABEL_4602 = $3D66 -LABEL_4614 = $3D78 -LABEL_4620 = $3D84 -LABEL_4623 = $3D87 -LABEL_4629 = $3D8D -LABEL_462F = $3D93 -LABEL_4637 = $3D9B -LABEL_4640 = $3DA4 -LABEL_464B = $3DAF -LABEL_464D = $3DB1 -LABEL_465D = $3DC1 -LABEL_466D = $3DD1 -LABEL_467D = $3DE1 -LABEL_468D = $3DF1 -LABEL_469D = $3E01 -LABEL_46BB = $3E1F -LABEL_46C0 = $3E24 -LABEL_46EA = $3E4E -LABEL_472 = $0443 -LABEL_4727 = $3E8B -LABEL_475F = $3EC3 -LABEL_4764 = $3EC8 -LABEL_47C9 = $3F2D -LABEL_483B = $3FA9 -LABEL_4845 = $3FB3 -LABEL_4884 = $3FE8 -LABEL_4887 = $3FEB -LABEL_48C4 = $4024 -LABEL_48D4 = $4034 -LABEL_48D5 = $4035 -LABEL_48F0 = $4050 -LABEL_4917 = $4077 -LABEL_4926 = $4084 -LABEL_4935 = $4091 -LABEL_4944 = $409E -LABEL_4951 = $40AB -LABEL_4960 = $40B8 -LABEL_498A = $40DE -LABEL_49CF = $4123 -LABEL_59E_218 = $058B -LABEL_5D93 = $54D9 -LABEL_5E24 = $556B -LABEL_5E42 = $558A -LABEL_5E62 = $55AA -LABEL_5EA1 = $55E9 -LABEL_5EE4 = $562C -LABEL_5EFD = $5643 -LABEL_5F29 = $566D -LABEL_5F3D = $5680 -LABEL_5F73 = $5693 -LABEL_60E9 = $5805 -LABEL_611D = $5839 -LABEL_6127 = $5843 -LABEL_6131 = $584D -LABEL_6139 = $5855 -LABEL_615C = $5876 -LABEL_617C = $5896 -LABEL_61C2 = $58DC -LABEL_61FA = $5914 -LABEL_620F = $5923 -LABEL_6212 = $592C -LABEL_623F = $5959 -LABEL_62A7 = $59C0 -LABEL_62FD = $5A16 -LABEL_6311 = $5A2A -LABEL_6313 = $5A2C -LABEL_631A = $5A33 -LABEL_6344 = $5A5D -LABEL_634C = $5A65 -LABEL_6355 = $5A6E -LABEL_635B = $5A74 -LABEL_636B = $5A84 -LABEL_63A9 = $5ABD -LABEL_63C0 = $5AD3 -LABEL_63E5 = $5AF2 -LABEL_6424 = $5B31 -LABEL_6425 = $5B32 -LABEL_643C = $5B49 -LABEL_6454 = $5B61 -LABEL_6483 = $5B90 -LABEL_64B1 = $5BBE -LABEL_64D4 = $5BE1 -LABEL_6544 = $5C51 -LABEL_656B = $5C78 -LABEL_6576 = $5C83 -LABEL_66FB = $5E01 -LABEL_670F = $5E15 -LABEL_677C = $5E82 -LABEL_6791 = $5E97 -LABEL_67B1 = $5EB7 -LABEL_6938 = $6025 -LABEL_6956 = $6043 -LABEL_697D = $606A -LABEL_698F = $607C -LABEL_69F5 = $60E0 -LABEL_6A25 = $610B -LABEL_6A7E = $6162 -LABEL_6ACD = $61AD -LABEL_6B17 = $61F6 -LABEL_6B47 = $6226 -LABEL_6B61 = $6240 -LABEL_6B85 = $6264 -LABEL_6B95 = $6274 -LABEL_6B96 = $6275 -LABEL_6B9B = $627A -LABEL_6BA7 = $6286 -LABEL_6BF2 = $62D1 -LABEL_6C01 = $62E0 -LABEL_6C21 = $62FF -LABEL_6C2D = $630B -LABEL_6C3C = $631A -LABEL_6C9C = $637A -LABEL_6C9D = $637A -LABEL_6CA0 = $637A -LABEL_6CA1 = $637A -LABEL_6CA2 = $637B -LABEL_6CAD = $6386 -LABEL_6CE2 = $63B6 -LABEL_6CF7 = $63CB -LABEL_6D0D = $63E1 -LABEL_6D49 = $641B -LABEL_6D52 = $6424 -LABEL_6D81 = $644D -LABEL_6DAA = $6475 -LABEL_6DCC = $6499 -LABEL_6DD5 = $64A0 -LABEL_6DED = $64B8 -LABEL_6E10 = $64D6 -LABEL_6E30 = $64F1 -LABEL_6E56 = $6517 -LABEL_6E8B = $654C -LABEL_6EB1 = $6572 -LABEL_6F3 = $0613 -LABEL_6F82 = $6631 -LABEL_6FCE = $667C -LABEL_708D = $6726 -LABEL_7172 = $6809 -LABEL_7314 = $69A7 -LABEL_7378 = $6A05 -LABEL_75C5 = $6C1A -LABEL_7614 = $6C31 -LABEL_761E = $6C3B -LABEL_7881 = $6E95 -LABEL_7F46 = $7551 -LABEL_7F74 = $757F -LABEL_7F7E = $7589 -LABEL_81D = $0720 -LABEL_8A4 = $07A2 -LABEL_91B = $0817 -LABEL_9C4 = $08BA -LABEL_A13 = $0903 -LABEL_A27 = $0912 -LABEL_A2C = $0917 -LABEL_F41 = $0BC1 -LABEL_FB9 = $0C38 -LANGUAGE = $0001 +LABEL_20FB = $19D5 +LABEL_2416 = $1CE9 +LABEL_242F_49 = $1CFE +LABEL_2439_50 = $1D07 +LABEL_243C = $1D0A +LABEL_2459_51 = $1D23 +LABEL_247B = $1D45 +LABEL_24BE_48 = $1D88 +LABEL_2530 = $1DF9 +LABEL_2576 = $1E40 +LABEL_259C = $1E5E +LABEL_25C3 = $1E84 +LABEL_2606 = $1EC2 +LABEL_264E = $1EFA +LABEL_2849 = $20F3 +LABEL_2FCB = $27F6 +LABEL_3011 = $282D +LABEL_3032 = $2851 +LABEL_3054 = $2873 +LABEL_305F = $2881 +LABEL_3072 = $28A6 +LABEL_307F = $28B3 +LABEL_3092 = $28C1 +LABEL_30A5 = $28CF +LABEL_30C7 = $2901 +LABEL_30D8 = $2912 +LABEL_30FD = $2932 +LABEL_3138 = $294E +LABEL_3176 = $2987 +LABEL_318F = $29A0 +LABEL_31BF = $29D0 +LABEL_31F8 = $2A09 +LABEL_3222 = $2A33 +LABEL_3245 = $2A56 +LABEL_3267 = $2A78 +LABEL_3385 = $2BC5 +LABEL_33A8 = $2BE8 +LABEL_33B7 = $2BF7 +LABEL_33EA = $2C29 +LABEL_3467 = $2CA6 +LABEL_3484 = $2CBE +LABEL_348F = $2CC9 +LABEL_34A4 = $2CDE +LABEL_34A9 = $2CE3 +LABEL_34DA = $2D14 +LABEL_34E1 = $2D1B +LABEL_359B = $2DD8 +LABEL_3638 = $2E75 +LABEL_365C = $2E99 +LABEL_3676 = $2EB3 +LABEL_3681 = $2EBE +LABEL_36B2 = $2EEF +LABEL_36E1 = $2F1C +LABEL_3702 = $2F3D +LABEL_3703 = $2F3E +LABEL_3725 = $2F5E +LABEL_375F = $2F98 +LABEL_376E = $2FA7 +LABEL_3796 = $2FCE +LABEL_384E = $3080 +LABEL_3A62 = $32A4 +LABEL_3ACA = $3312 +LABEL_4024 = $3834 +LABEL_4037 = $3847 +LABEL_4044 = $3854 +LABEL_404F = $385F +LABEL_4064 = $3874 +LABEL_4079 = $3889 +LABEL_408E = $389E +LABEL_40B2 = $38C0 +LABEL_40D6 = $38E3 +LABEL_40E0 = $38ED +LABEL_40F0 = $38FD +LABEL_4109 = $3916 +LABEL_4135 = $3944 +LABEL_4137 = $3946 +LABEL_415A = $3968 +LABEL_415F = $396D +LABEL_4199 = $39A7 +LABEL_41A6 = $39B4 +LABEL_41DD = $39EB +LABEL_41EA = $39F8 +LABEL_4204 = $3A12 +LABEL_4226 = $3A34 +LABEL_424A = $3A59 +LABEL_42B7 = $3AC5 +LABEL_42E8 = $3AF5 +LABEL_4310 = $3B1F +LABEL_4352 = $3B61 +LABEL_437A = $3B8C +LABEL_438A = $3B9C +LABEL_43AF = $3BC0 +LABEL_43BF = $3BCF +LABEL_43C5 = $3BD5 +LABEL_43F3 = $3C03 +LABEL_43F9 = $3C09 +LABEL_4408 = $3C13 +LABEL_440E = $3C13 +LABEL_4414 = $3C19 +LABEL_441A = $3C13 +LABEL_4420 = $3C1F +LABEL_4440 = $3C3E +LABEL_4446 = $3C44 +LABEL_4459 = $3C3E +LABEL_445F = $3C57 +LABEL_4476 = $3C6E +LABEL_447C = $3C74 +LABEL_4482 = $3C7A +LABEL_44A2 = $3C99 +LABEL_44A8 = $3C9F +LABEL_44BB = $3CC3 +LABEL_44C1 = $3CB2 +LABEL_44D8 = $3CAC +LABEL_44DE = $3CC9 +LABEL_44E4 = $3CCF +LABEL_4504 = $3CC9 +LABEL_450A = $3CEE +LABEL_451D = $3CC9 +LABEL_4523 = $3D01 +LABEL_453A = $3CE8 +LABEL_4540 = $3D18 +LABEL_4546 = $3D1E +LABEL_4566 = $3D61 +LABEL_456C = $3D3D +LABEL_457F = $3D61 +LABEL_4585 = $3D50 +LABEL_459C = $3D67 +LABEL_45A2 = $3D6D +LABEL_45A8 = $3D73 +LABEL_45BA = $3D85 +LABEL_45C6 = $3D91 +LABEL_45D8 = $3DA3 +LABEL_45E4 = $3DAF +LABEL_45F6 = $3DC1 +LABEL_4602 = $3DCD +LABEL_4614 = $3DDF +LABEL_4620 = $3DEB +LABEL_4623 = $3DEE +LABEL_4629 = $3DF4 +LABEL_462F = $3DFA +LABEL_4637 = $3E02 +LABEL_4640 = $3E0B +LABEL_464B = $3E16 +LABEL_464D = $3E18 +LABEL_465D = $3E28 +LABEL_466D = $3E38 +LABEL_467D = $3E48 +LABEL_468D = $3E58 +LABEL_469D = $3E68 +LABEL_46BB = $3E86 +LABEL_46C0 = $3E8B +LABEL_46EA = $3EB5 +LABEL_472 = $0457 +LABEL_4727 = $3EF2 +LABEL_475F = $3F2A +LABEL_4764 = $3F2F +LABEL_47C9 = $3F94 +LABEL_483B = $4010 +LABEL_4845 = $401A +LABEL_4884 = $404F +LABEL_4887 = $4052 +LABEL_48C4 = $408B +LABEL_48D4 = $409B +LABEL_48D5 = $409C +LABEL_48F0 = $40B7 +LABEL_4917 = $40DE +LABEL_4926 = $40EB +LABEL_4935 = $40F8 +LABEL_4944 = $4105 +LABEL_4951 = $4112 +LABEL_4960 = $411F +LABEL_498A = $4145 +LABEL_49CF = $418A +LABEL_59E_218 = $05B7 +LABEL_5D93 = $553F +LABEL_5E24 = $55D1 +LABEL_5E42 = $55F0 +LABEL_5E62 = $5610 +LABEL_5EA1 = $564F +LABEL_5EE4 = $5692 +LABEL_5EFD = $56A9 +LABEL_5F29 = $56D3 +LABEL_5F3D = $56E6 +LABEL_5F73 = $56F9 +LABEL_60E9 = $586B +LABEL_611D = $589F +LABEL_6127 = $58A9 +LABEL_6131 = $58B3 +LABEL_6139 = $58BB +LABEL_615C = $58DC +LABEL_617C = $58FC +LABEL_61C2 = $5942 +LABEL_61FA = $597A +LABEL_620F = $5989 +LABEL_6212 = $5992 +LABEL_623F = $59BF +LABEL_62A7 = $5A26 +LABEL_62FD = $5A7C +LABEL_6311 = $5A90 +LABEL_6313 = $5A92 +LABEL_631A = $5A99 +LABEL_6344 = $5AC3 +LABEL_634C = $5ACB +LABEL_6355 = $5AD4 +LABEL_635B = $5ADA +LABEL_636B = $5AEA +LABEL_63A9 = $5B23 +LABEL_63C0 = $5B39 +LABEL_63E5 = $5B58 +LABEL_6424 = $5B97 +LABEL_6425 = $5B98 +LABEL_643C = $5BAF +LABEL_6454 = $5BC7 +LABEL_6483 = $5BF6 +LABEL_64B1 = $5C24 +LABEL_64D4 = $5C47 +LABEL_6544 = $5CB7 +LABEL_656B = $5CDE +LABEL_6576 = $5CE9 +LABEL_66FB = $5E67 +LABEL_670F = $5E7B +LABEL_677C = $5EE8 +LABEL_6791 = $5EFD +LABEL_67B1 = $5F1D +LABEL_6938 = $608B +LABEL_6956 = $60A9 +LABEL_697D = $60D0 +LABEL_698F = $60E2 +LABEL_69F5 = $6146 +LABEL_6A25 = $6171 +LABEL_6A7E = $61C8 +LABEL_6ACD = $6213 +LABEL_6B17 = $625C +LABEL_6B47 = $628C +LABEL_6B61 = $62A6 +LABEL_6B85 = $62CA +LABEL_6B95 = $62DA +LABEL_6B96 = $62DB +LABEL_6B9B = $62E0 +LABEL_6BA7 = $62EC +LABEL_6BF2 = $6337 +LABEL_6C01 = $6346 +LABEL_6C21 = $6365 +LABEL_6C2D = $6371 +LABEL_6C3C = $6380 +LABEL_6C9C = $63E0 +LABEL_6C9D = $63E0 +LABEL_6CA0 = $63E0 +LABEL_6CA1 = $63E0 +LABEL_6CA2 = $63E1 +LABEL_6CAD = $63EC +LABEL_6CE2 = $641C +LABEL_6CF7 = $6431 +LABEL_6D0D = $6447 +LABEL_6D49 = $6481 +LABEL_6D52 = $648A +LABEL_6D81 = $64B3 +LABEL_6DAA = $64DB +LABEL_6DCC = $64FF +LABEL_6DD5 = $6506 +LABEL_6DED = $651E +LABEL_6E10 = $653C +LABEL_6E30 = $6557 +LABEL_6E56 = $657D +LABEL_6E8B = $65B2 +LABEL_6EB1 = $65D8 +LABEL_6F3 = $0637 +LABEL_6F82 = $6697 +LABEL_6FCE = $66E2 +LABEL_708D = $678C +LABEL_7172 = $686F +LABEL_7314 = $6A15 +LABEL_7378 = $6A73 +LABEL_75C5 = $6C88 +LABEL_7614 = $6C9F +LABEL_761E = $6CA9 +LABEL_7881 = $6F03 +LABEL_7F46 = $75BF +LABEL_7F74 = $75ED +LABEL_7F7E = $75F7 +LABEL_81D = $0747 +LABEL_8A4 = $07C5 +LABEL_91B = $0835 +LABEL_9C4 = $08D7 +LABEL_A13 = $0922 +LABEL_A27 = $0931 +LABEL_A2C = $0954 +LABEL_F41 = $0BFE +LABEL_FB9 = $0C75 +LANGUAGE = $0002 LASTBANKNUMBER = $001F LASTLEVEL = $0007 LASTTILEMAPTRIG = $D4C2 @@ -882,7 +892,7 @@ LEVELATTRIBUTES.VIEWPORTFLAGS = $D15E LEVELATTRIBUTES.WIDTH = $D16C LEVELATTRIBUTES.WIDTHNEG = $D16A LEVELDATASTART = $C001 -LEVELDEMOHEADERS = $1D7E +LEVELDEMOHEADERS = $1DD9 LEVELDESCRIPTOR.DATAOFFSET = $0010 LEVELDESCRIPTOR.IX01 = $0001 LEVELDESCRIPTOR.LAYOUTBANK = $0005 @@ -895,120 +905,122 @@ LEVELDESCRIPTOR.STRIDETABLE = $000A LEVELDESCRIPTOR.VIEWPORTFLAGS = $0000 LEVELDESCRIPTOR.WIDTH = $000E LEVELDESCRIPTOR.WIDTHNEG = $000C -LEVELHEADER_5803 = $4F25 -LEVELHEADER_5819 = $4F3B -LEVELHEADER_ALZ1 = $4DDB -LEVELHEADER_ALZ2 = $4DF1 -LEVELHEADER_ALZ3 = $4E07 -LEVELHEADER_CEZ1 = $4EE3 -LEVELHEADER_CEZ2 = $4EF9 -LEVELHEADER_CEZ3 = $4F0F -LEVELHEADER_GHZ1 = $4D57 -LEVELHEADER_GHZ2 = $4D6D -LEVELHEADER_GHZ3 = $4D83 -LEVELHEADER_GMZ1 = $4E5F -LEVELHEADER_GMZ2 = $4E75 -LEVELHEADER_GMZ3 = $4E8B -LEVELHEADER_INTRO = $4F51 -LEVELHEADER_SEZ1 = $4EA1 -LEVELHEADER_SEZ2 = $4EB7 -LEVELHEADER_SEZ3 = $4ECD -LEVELHEADER_SHZ1 = $4D99 -LEVELHEADER_SHZ2 = $4DAF -LEVELHEADER_SHZ3 = $4DC5 -LEVELHEADER_TITLE = $4F67 -LEVELHEADER_UGZ1 = $4E1D -LEVELHEADER_UGZ2 = $4E33 -LEVELHEADER_UGZ3 = $4E49 -LEVELHEADERS = $4D07 -LEVELHEADERS_ALZ = $4D27 -LEVELHEADERS_CEZ = $4D3F -LEVELHEADERS_GHZ = $4D2D -LEVELHEADERS_GMZ = $4D33 -LEVELHEADERS_INTRO_TITLE = $4D51 -LEVELHEADERS_SEZ = $4D39 -LEVELHEADERS_SHZ = $4D21 -LEVELHEADERS_UGZ = $4D1B -LEVELHEADERS_UNK1 = $4D45 -LEVELHEADERS_UNK2 = $4D4B +LEVELHEADER_5803 = $4F8B +LEVELHEADER_5819 = $4FA1 +LEVELHEADER_ALZ1 = $4E41 +LEVELHEADER_ALZ2 = $4E57 +LEVELHEADER_ALZ3 = $4E6D +LEVELHEADER_CEZ1 = $4F49 +LEVELHEADER_CEZ2 = $4F5F +LEVELHEADER_CEZ3 = $4F75 +LEVELHEADER_GHZ1 = $4DBD +LEVELHEADER_GHZ2 = $4DD3 +LEVELHEADER_GHZ3 = $4DE9 +LEVELHEADER_GMZ1 = $4EC5 +LEVELHEADER_GMZ2 = $4EDB +LEVELHEADER_GMZ3 = $4EF1 +LEVELHEADER_INTRO = $4FB7 +LEVELHEADER_SEZ1 = $4F07 +LEVELHEADER_SEZ2 = $4F1D +LEVELHEADER_SEZ3 = $4F33 +LEVELHEADER_SHZ1 = $4DFF +LEVELHEADER_SHZ2 = $4E15 +LEVELHEADER_SHZ3 = $4E2B +LEVELHEADER_TITLE = $4FCD +LEVELHEADER_UGZ1 = $4E83 +LEVELHEADER_UGZ2 = $4E99 +LEVELHEADER_UGZ3 = $4EAF +LEVELHEADERS = $4D6D +LEVELHEADERS_ALZ = $4D8D +LEVELHEADERS_CEZ = $4DA5 +LEVELHEADERS_GHZ = $4D93 +LEVELHEADERS_GMZ = $4D99 +LEVELHEADERS_INTRO_TITLE = $4DB7 +LEVELHEADERS_SEZ = $4D9F +LEVELHEADERS_SHZ = $4D87 +LEVELHEADERS_UGZ = $4D81 +LEVELHEADERS_UNK1 = $4DAB +LEVELHEADERS_UNK2 = $4DB1 LEVELLAYOUT = $C001 -LEVELLAYOUT_DATA_INITPOS = $4B24 -LEVELLAYOUT_DATA_INITPOS_ALZ = $4B44 -LEVELLAYOUT_DATA_INITPOS_ALZ1 = $4BA4 -LEVELLAYOUT_DATA_INITPOS_ALZ2 = $4BAC -LEVELLAYOUT_DATA_INITPOS_ALZ3 = $4BB4 -LEVELLAYOUT_DATA_INITPOS_CEZ = $4B5C -LEVELLAYOUT_DATA_INITPOS_CEZ1 = $4C04 -LEVELLAYOUT_DATA_INITPOS_CEZ2 = $4C0C -LEVELLAYOUT_DATA_INITPOS_CEZ3 = $4C14 -LEVELLAYOUT_DATA_INITPOS_GHZ = $4B4A -LEVELLAYOUT_DATA_INITPOS_GHZ1 = $4BBC -LEVELLAYOUT_DATA_INITPOS_GHZ2 = $4BC4 -LEVELLAYOUT_DATA_INITPOS_GHZ3 = $4BCC -LEVELLAYOUT_DATA_INITPOS_GMZ = $4B50 -LEVELLAYOUT_DATA_INITPOS_GMZ1 = $4BD4 -LEVELLAYOUT_DATA_INITPOS_GMZ2 = $4BDC -LEVELLAYOUT_DATA_INITPOS_GMZ3 = $4BE4 -LEVELLAYOUT_DATA_INITPOS_SEZ = $4B56 -LEVELLAYOUT_DATA_INITPOS_SEZ1 = $4BEC -LEVELLAYOUT_DATA_INITPOS_SEZ2 = $4BF4 -LEVELLAYOUT_DATA_INITPOS_SEZ3 = $4BFC -LEVELLAYOUT_DATA_INITPOS_SHZ = $4B3E -LEVELLAYOUT_DATA_INITPOS_SHZ1 = $4B8C -LEVELLAYOUT_DATA_INITPOS_SHZ2 = $4B94 -LEVELLAYOUT_DATA_INITPOS_SHZ3 = $4B9C -LEVELLAYOUT_DATA_INITPOS_UGZ = $4B38 -LEVELLAYOUT_DATA_INITPOS_UGZ1 = $4B74 -LEVELLAYOUT_DATA_INITPOS_UGZ2 = $4B7C -LEVELLAYOUT_DATA_INITPOS_UGZ3 = $4B84 -LEVELPALETTEVALUES = $72CC -LEVELSELECT_DRAWENTRIES = $0955 -LEVELSELECT_ENTRY1 = $0A9C -LEVELSELECT_ENTRY10 = $0AE4 -LEVELSELECT_ENTRY13 = $0AFC -LEVELSELECT_ENTRY16 = $0B14 -LEVELSELECT_ENTRY19 = $0B2C -LEVELSELECT_ENTRY4 = $0AB4 -LEVELSELECT_ENTRY7 = $0ACC -LEVELSELECT_FINISHSETUP = $099E -LEVELSELECT_LOADFONT = $6CEA -LEVELSELECT_MAINLOOP = $09F9 -LEVELSELECT_TEXTENTRIES = $0939 -LEVELSELECT_TITLE = $0A84 -LEVELSELECT_VALUES = $09CF -LEVELSELECT_VRAMENTRIES = $0947 -LEVELSELECTCHECK = $0468 -LEVELSELECTMENU = $0917 +LEVELLAYOUT_DATA_INITPOS = $4B8A +LEVELLAYOUT_DATA_INITPOS_ALZ = $4BAA +LEVELLAYOUT_DATA_INITPOS_ALZ1 = $4C0A +LEVELLAYOUT_DATA_INITPOS_ALZ2 = $4C12 +LEVELLAYOUT_DATA_INITPOS_ALZ3 = $4C1A +LEVELLAYOUT_DATA_INITPOS_CEZ = $4BC2 +LEVELLAYOUT_DATA_INITPOS_CEZ1 = $4C6A +LEVELLAYOUT_DATA_INITPOS_CEZ2 = $4C72 +LEVELLAYOUT_DATA_INITPOS_CEZ3 = $4C7A +LEVELLAYOUT_DATA_INITPOS_GHZ = $4BB0 +LEVELLAYOUT_DATA_INITPOS_GHZ1 = $4C22 +LEVELLAYOUT_DATA_INITPOS_GHZ2 = $4C2A +LEVELLAYOUT_DATA_INITPOS_GHZ3 = $4C32 +LEVELLAYOUT_DATA_INITPOS_GMZ = $4BB6 +LEVELLAYOUT_DATA_INITPOS_GMZ1 = $4C3A +LEVELLAYOUT_DATA_INITPOS_GMZ2 = $4C42 +LEVELLAYOUT_DATA_INITPOS_GMZ3 = $4C4A +LEVELLAYOUT_DATA_INITPOS_SEZ = $4BBC +LEVELLAYOUT_DATA_INITPOS_SEZ1 = $4C52 +LEVELLAYOUT_DATA_INITPOS_SEZ2 = $4C5A +LEVELLAYOUT_DATA_INITPOS_SEZ3 = $4C62 +LEVELLAYOUT_DATA_INITPOS_SHZ = $4BA4 +LEVELLAYOUT_DATA_INITPOS_SHZ1 = $4BF2 +LEVELLAYOUT_DATA_INITPOS_SHZ2 = $4BFA +LEVELLAYOUT_DATA_INITPOS_SHZ3 = $4C02 +LEVELLAYOUT_DATA_INITPOS_UGZ = $4B9E +LEVELLAYOUT_DATA_INITPOS_UGZ1 = $4BDA +LEVELLAYOUT_DATA_INITPOS_UGZ2 = $4BE2 +LEVELLAYOUT_DATA_INITPOS_UGZ3 = $4BEA +LEVELPALETTEVALUES = $733A +LEVELSELECT_DRAWENTRIES = $0992 +LEVELSELECT_ENTRY1 = $0AD9 +LEVELSELECT_ENTRY10 = $0B21 +LEVELSELECT_ENTRY13 = $0B39 +LEVELSELECT_ENTRY16 = $0B51 +LEVELSELECT_ENTRY19 = $0B69 +LEVELSELECT_ENTRY4 = $0AF1 +LEVELSELECT_ENTRY7 = $0B09 +LEVELSELECT_FINISHSETUP = $09DB +LEVELSELECT_LOADFONT = $6D58 +LEVELSELECT_MAINLOOP = $0A36 +LEVELSELECT_TEXTENTRIES = $0976 +LEVELSELECT_TITLE = $0AC1 +LEVELSELECT_VALUES = $0A0C +LEVELSELECT_VRAMENTRIES = $0984 +LEVELSELECTCHECK = $047D +LEVELSELECTMENU = $0954 LEVELSELECTTRG = $D12C -LEVELTILESETS = $701A +LEVELTILESETS = $7088 LEVELTIMER = $D2B9 +LEVELTIMERTABLE = $DC00 LEVELTIMERTRIGGER = $D2B8 LIFECOUNTER = $D298 LIVESONENTRY = $D297 -LOADBANKFROMRAM = $7870 -LOADCOMPRESSEDTILE = $1388 -LOADTILES = $1313 -LOADUNCOMPRESSEDTILE = $1379 -LOGIC_CHANGEDIRECTIONTOWARDSOBJECT = $5CA3 -LOGIC_CHANGEDIRECTIONTOWARDSPLAYER = $5C9F -LOGIC_CHECKDESTROYOBJECT = $5995 -LOGIC_CMD_CALL = $5DBA -LOGIC_CMD_DEALLOCATE = $5DB7 -LOGIC_CMD_DONOTHING = $5DD0 -LOGIC_CMD_PLAYSOUND = $5ECB -LOGIC_CMD_PROCESSLOGIC = $5DB1 -LOGIC_CMD_RESTARTSEQUENCE = $5DB4 -LOGIC_CMD_SETSPEED = $5DD1 -LOGIC_COMMANDVTABLE = $5D91 -LOGIC_MOVEHORIZONTALTOWARDSOBJECT = $5CBF -LOGIC_MOVEHORIZONTALTOWARDSPLAYERAT0400 = $5CB9 -LOGIC_MOVEVERTICALTOWARDSOBJECT = $5CF5 -LOGIC_POINTERS = $569E -LOGIC_PROCESSCOMMAND = $5D7B -LOGIC_SETOBJECTFACINGLEFT = $5EE0 -LOGIC_SETOBJECTFACINGRIGHT = $5EDB -LOGIC_TOGGLEOBJECTDIRECTION = $5EE5 -LOGIC_UPDATEOBJECTDIRECTIONFLAG = $5C88 +LOADBANKFROMRAM = $78E2 +LOADCOMPRESSEDTILE = $13D2 +LOADSHCSCREEN = $766C +LOADTILES = $135D +LOADUNCOMPRESSEDTILE = $13C3 +LOGIC_CHANGEDIRECTIONTOWARDSOBJECT = $5D09 +LOGIC_CHANGEDIRECTIONTOWARDSPLAYER = $5D05 +LOGIC_CHECKDESTROYOBJECT = $59FB +LOGIC_CMD_CALL = $5E20 +LOGIC_CMD_DEALLOCATE = $5E1D +LOGIC_CMD_DONOTHING = $5E36 +LOGIC_CMD_PLAYSOUND = $5F31 +LOGIC_CMD_PROCESSLOGIC = $5E17 +LOGIC_CMD_RESTARTSEQUENCE = $5E1A +LOGIC_CMD_SETSPEED = $5E37 +LOGIC_COMMANDVTABLE = $5DF7 +LOGIC_MOVEHORIZONTALTOWARDSOBJECT = $5D25 +LOGIC_MOVEHORIZONTALTOWARDSPLAYERAT0400 = $5D1F +LOGIC_MOVEVERTICALTOWARDSOBJECT = $5D5B +LOGIC_POINTERS = $5704 +LOGIC_PROCESSCOMMAND = $5DE1 +LOGIC_SETOBJECTFACINGLEFT = $5F46 +LOGIC_SETOBJECTFACINGRIGHT = $5F41 +LOGIC_TOGGLEOBJECTDIRECTION = $5F4B +LOGIC_UPDATEOBJECTDIRECTIONFLAG = $5CEE LVP_CAMERA_LOCKED = $0007 LVP_CAMERA_UPDATE_RQD = $0006 LVP_COL_UPDATE_PENDING = $0005 @@ -1017,12 +1029,12 @@ LVP_SCROLL_DOWN = $0001 LVP_SCROLL_LEFT = $0002 LVP_SCROLL_RIGHT = $0003 LVP_SCROLL_UP = $0000 -MINECART_LOOKINGAHEAD = $3F09 -MINECART_LOOKINGDOWN = $3F21 -MINECART_LOOKINGUP = $3F15 -MINECART_SETSPRITE = $3EE9 -MINECART_UPDATEANIMATION = $3EE8 -MONITOR_ART_POINTERS = $7008 +MINECART_LOOKINGAHEAD = $3F70 +MINECART_LOOKINGDOWN = $3F88 +MINECART_LOOKINGUP = $3F7C +MINECART_SETSPRITE = $3F50 +MINECART_UPDATEANIMATION = $3F4F +MONITOR_ART_POINTERS = $7076 MONITORTYPE_NONE0 = $0000 MONITORTYPE_NONE1 = $0001 MONITORTYPE_RINGS = $0002 @@ -1033,22 +1045,21 @@ MPLCDIMSC = $E3001C MPLCDPALETTE = $E30200 MPLCDRIS = $E30020 MPLCDTIMING1 = $E30004 -MULTTABLE_104 = $436E -MULTTABLE_120 = $430E -MULTTABLE_128 = $42AE -MULTTABLE_16 = $49EE -MULTTABLE_168 = $426E -MULTTABLE_24 = $488E -MULTTABLE_256 = $420E -MULTTABLE_32 = $476E -MULTTABLE_40 = $468E -MULTTABLE_56 = $45EE -MULTTABLE_64 = $454E -MULTTABLE_72 = $44CE -MULTTABLE_80 = $444E -MULTTABLE_96 = $43CE +MULTTABLE_104 = $43D5 +MULTTABLE_120 = $4375 +MULTTABLE_128 = $4315 +MULTTABLE_16 = $4A55 +MULTTABLE_168 = $42D5 +MULTTABLE_24 = $48F5 +MULTTABLE_256 = $4275 +MULTTABLE_32 = $47D5 +MULTTABLE_40 = $46F5 +MULTTABLE_56 = $4655 +MULTTABLE_64 = $45B5 +MULTTABLE_72 = $4535 +MULTTABLE_80 = $44B5 +MULTTABLE_96 = $4435 NEXTCONTROLBYTE = $D2D9 -NULLBANK = $796E OBJ_COL_BOTTOM = $0001 OBJ_COL_LEFT = $0003 OBJ_COL_RIGHT = $0002 @@ -1163,18 +1174,19 @@ OBJECT_UGZ_PINCERS = $004D OBJECT_UGZ_ROBOTNIK = $004B OBJECT_UGZFIREBALL = $000E OBJECT_WATERSPLASH = $000B -PALETTE_CALCULATEOFFSET = $7721 -PALETTE_FADETOBLACK = $76CA -PALETTE_FADETOCOLOUR = $7666 -PALETTE_RESET = $7656 -PALETTE_UPDATE = $7614 -PALETTE_UPDATECOLOURS = $7646 +PALETTE_CALCULATEOFFSET = $7791 +PALETTE_FADETOBLACK = $773A +PALETTE_FADETOCOLOUR = $76D6 +PALETTE_RESET = $76C6 +PALETTE_UPDATE = $7684 +PALETTE_UPDATECOLOURS = $76B6 PALETTE_UPDATETRIG = $D4EA -PALETTEFADEOUT = $0DA8 +PALETTEFADEOUT = $0DF0 PALETTEFADETIME = $D2C8 PALETTERESETTRG = $D131 PALETTES = $F680 PATTERNLOADCUE = $D3AB +PAUSEHANDLER_TRIG = $05F0 PIXELSHADOW = $D031F6 PLAYER = $D500 PLAYER.ACTVOBJIDX = $D53E @@ -1231,103 +1243,103 @@ PLAYER.X = $D511 PLAYER.Y = $D514 PLAYER_AIRTIMERHI = $D469 PLAYER_AIRTIMERLO = $D468 -PLAYER_ALZ_WATERBOUNCE = $6ACF -PLAYER_ANIM_CALCBALANCEFRAME = $30FB -PLAYER_ANIM_CALCBALANCEFRAME_USEINPUTFLAGS = $3159 -PLAYER_CALCACCEL = $33C0 -PLAYER_CALCACCEL_GETVALUE = $340F -PLAYER_CALCACCEL_NOBTNPRESS = $346C -PLAYER_CALCACCEL_UNDERWATER = $3443 -PLAYER_CALCGRAVITY = $334D -PLAYER_CALCGRAVITY_UNDERWATER = $337B -PLAYER_CALCULATEBALANCE = $3085 -PLAYER_CALCULATEBALANCE_LEFT = $30B0 -PLAYER_CALCULATEBALANCE_NONE = $30C2 -PLAYER_CALCULATEBALANCE_RIGHT = $30B9 -PLAYER_CALCULATELOOPFALLFRAME = $3175 -PLAYER_CALCULATELOOPFRAME = $31C2 -PLAYER_CHANGEFRAMEDISPLAYTIME = $30C7 -PLAYER_CHECKFINISHSKID = $2A9D -PLAYER_CHECKHORIZONTALLEVELCOLLISION = $679A -PLAYER_CHECKHORIZONTALLEVELCOLLISION_LEFT = $6809 -PLAYER_CHECKSKID = $2AFA -PLAYER_CHECKTOPLEVELCOLLISION = $694D -PLAYER_CLEARCOLLIDINGOBJECT = $3080 -PLAYER_COLLIDEBREAKABLEBLOCK_UPDATEMAPPINGS = $68AA -PLAYER_COLLIDEHORIZONTALWITHPIPEBLOCK = $67C7 -PLAYER_COLLIDELEFTBREAKABLEBLOCK = $6885 -PLAYER_COLLIDELEFTSOLIDBLOCK = $682B -PLAYER_COLLIDELEFTWITHSPIKEBLOCK = $691F -PLAYER_COLLIDERIGHTBREAKABLEBLOCK = $685F -PLAYER_COLLIDERIGHTWITHSOLIDBLOCK = $67D0 -PLAYER_COLLIDERIGHTWITHSPIKEBLOCK = $68FC -PLAYER_COLLIDESPIKEBLOCK_PLAYERHURT = $693F -PLAYER_COLLIDETOPSOLIDBLOCK = $6979 -PLAYER_COLLIDETOPVERTICALSPRING = $69AE -PLAYER_COLLIDETOPWITHSPIKEBLOCK = $69B7 -PLAYER_COLLIDEVERTICALWITHPIPEBLOCK = $69FC -PLAYER_COLLIDEWITHRINGBLOCK = $6A27 +PLAYER_ALZ_WATERBOUNCE = $6B3D +PLAYER_ANIM_CALCBALANCEFRAME = $3162 +PLAYER_ANIM_CALCBALANCEFRAME_USEINPUTFLAGS = $31C0 +PLAYER_CALCACCEL = $3427 +PLAYER_CALCACCEL_GETVALUE = $3476 +PLAYER_CALCACCEL_NOBTNPRESS = $34D3 +PLAYER_CALCACCEL_UNDERWATER = $34AA +PLAYER_CALCGRAVITY = $33B4 +PLAYER_CALCGRAVITY_UNDERWATER = $33E2 +PLAYER_CALCULATEBALANCE = $30EC +PLAYER_CALCULATEBALANCE_LEFT = $3117 +PLAYER_CALCULATEBALANCE_NONE = $3129 +PLAYER_CALCULATEBALANCE_RIGHT = $3120 +PLAYER_CALCULATELOOPFALLFRAME = $31DC +PLAYER_CALCULATELOOPFRAME = $3229 +PLAYER_CHANGEFRAMEDISPLAYTIME = $312E +PLAYER_CHECKFINISHSKID = $2B04 +PLAYER_CHECKHORIZONTALLEVELCOLLISION = $6800 +PLAYER_CHECKHORIZONTALLEVELCOLLISION_LEFT = $686F +PLAYER_CHECKSKID = $2B61 +PLAYER_CHECKTOPLEVELCOLLISION = $69BB +PLAYER_CLEARCOLLIDINGOBJECT = $30E7 +PLAYER_COLLIDEBREAKABLEBLOCK_UPDATEMAPPINGS = $6918 +PLAYER_COLLIDEHORIZONTALWITHPIPEBLOCK = $682D +PLAYER_COLLIDELEFTBREAKABLEBLOCK = $68F3 +PLAYER_COLLIDELEFTSOLIDBLOCK = $6891 +PLAYER_COLLIDELEFTWITHSPIKEBLOCK = $698D +PLAYER_COLLIDERIGHTBREAKABLEBLOCK = $68C5 +PLAYER_COLLIDERIGHTWITHSOLIDBLOCK = $6836 +PLAYER_COLLIDERIGHTWITHSPIKEBLOCK = $696A +PLAYER_COLLIDESPIKEBLOCK_PLAYERHURT = $69AD +PLAYER_COLLIDETOPSOLIDBLOCK = $69E7 +PLAYER_COLLIDETOPVERTICALSPRING = $6A1C +PLAYER_COLLIDETOPWITHSPIKEBLOCK = $6A25 +PLAYER_COLLIDEVERTICALWITHPIPEBLOCK = $6A6A +PLAYER_COLLIDEWITHRINGBLOCK = $6A95 PLAYER_DELTAVX = $D36F -PLAYER_ENTERPIPE = $6578 -PLAYER_ENTERPIPE_BOTTOM = $6597 -PLAYER_ENTERPIPE_LEFT = $65E6 -PLAYER_ENTERPIPE_RETURN = $6630 -PLAYER_ENTERPIPE_RIGHT = $660D -PLAYER_ENTERPIPE_TOP = $65BF +PLAYER_ENTERPIPE = $65DE +PLAYER_ENTERPIPE_BOTTOM = $65FD +PLAYER_ENTERPIPE_LEFT = $664C +PLAYER_ENTERPIPE_RETURN = $6696 +PLAYER_ENTERPIPE_RIGHT = $6673 +PLAYER_ENTERPIPE_TOP = $6625 PLAYER_FLASHCOUNTER = $D3A9 -PLAYER_FLASHOBJECT = $3053 -PLAYER_HANDLEBALANCE = $29A9 -PLAYER_HANDLECROUCHED = $2A18 -PLAYER_HANDLEDIAGONALSPRING = $2C16 -PLAYER_HANDLEENDOFLEVEL = $2CD0 -PLAYER_HANDLEENDOFLEVEL_EXITLEFT = $2D3A -PLAYER_HANDLEENDOFLEVEL_EXITRIGHT = $2D18 -PLAYER_HANDLEENDOFLEVEL_INCLEVEL = $2CFE -PLAYER_HANDLEFALLING = $2C2E -PLAYER_HANDLEIDLE = $29D3 -PLAYER_HANDLEJUMPING = $2BC2 -PLAYER_HANDLELOOKUP = $29F6 -PLAYER_HANDLEROLLING = $2B81 -PLAYER_HANDLERUNNING = $2B16 -PLAYER_HANDLESKIDLEFT = $2B5E -PLAYER_HANDLESKIDRIGHT = $2B3B -PLAYER_HANDLESPINDASH = $2A34 -PLAYER_HANDLESTANDING = $2970 -PLAYER_HANDLEVERTICALSPRING = $2BFC -PLAYER_HANDLEWALK = $2A58 +PLAYER_FLASHOBJECT = $30BA +PLAYER_HANDLEBALANCE = $2A09 +PLAYER_HANDLECROUCHED = $2A78 +PLAYER_HANDLEDIAGONALSPRING = $2C7D +PLAYER_HANDLEENDOFLEVEL = $2D37 +PLAYER_HANDLEENDOFLEVEL_EXITLEFT = $2DA1 +PLAYER_HANDLEENDOFLEVEL_EXITRIGHT = $2D7F +PLAYER_HANDLEENDOFLEVEL_INCLEVEL = $2D65 +PLAYER_HANDLEFALLING = $2C95 +PLAYER_HANDLEIDLE = $2A33 +PLAYER_HANDLEJUMPING = $2C29 +PLAYER_HANDLELOOKUP = $2A56 +PLAYER_HANDLEROLLING = $2BE8 +PLAYER_HANDLERUNNING = $2B7D +PLAYER_HANDLESKIDLEFT = $2BC5 +PLAYER_HANDLESKIDRIGHT = $2BA2 +PLAYER_HANDLESPINDASH = $2A94 +PLAYER_HANDLESTANDING = $29D0 +PLAYER_HANDLEVERTICALSPRING = $2C63 +PLAYER_HANDLEWALK = $2ABF PLAYER_HURTTRIGGER = $D3A8 PLAYER_KILLTRIGGER = $D49F PLAYER_MAXVELX = $D36D PLAYER_METATILEDELTAVX = $D371 -PLAYER_MINECART_HANDLE = $3EC8 -PLAYER_NOP = $2F30 -PLAYER_PLAYHURTANIMATION = $2FB6 -PLAYER_RAMPLAUNCH = $64B8 -PLAYER_ROLLINGCHECKSKID = $2ABD -PLAYER_SETSTATE_CROUCH = $2821 -PLAYER_SETSTATE_DEAD = $2FF0 -PLAYER_SETSTATE_DIAGONALSPRING = $28D2 -PLAYER_SETSTATE_FALLING = $2908 -PLAYER_SETSTATE_HORIZONTALSPRING = $28EE -PLAYER_SETSTATE_HURT = $2F81 -PLAYER_SETSTATE_JUMPFROMRAMP = $28A1 -PLAYER_SETSTATE_JUMPING = $3272 -PLAYER_SETSTATE_LOOKUP = $2813 -PLAYER_SETSTATE_MOVEBACK = $2E45 -PLAYER_SETSTATE_ROLL = $286F -PLAYER_SETSTATE_ROLL_SPINDASHRELEASE = $288B -PLAYER_SETSTATE_RUNNING = $2846 -PLAYER_SETSTATE_SKIDLEFT = $2861 -PLAYER_SETSTATE_SKIDRIGHT = $2853 -PLAYER_SETSTATE_SPINDASH = $2837 -PLAYER_SETSTATE_STANDING = $27CD -PLAYER_SETSTATE_VERTICALSPRING = $28B2 -PLAYER_SETSTATE_WALKING = $27F1 +PLAYER_MINECART_HANDLE = $3F2F +PLAYER_NOP = $2F97 +PLAYER_PLAYHURTANIMATION = $301D +PLAYER_RAMPLAUNCH = $651E +PLAYER_ROLLINGCHECKSKID = $2B24 +PLAYER_SETSTATE_CROUCH = $2881 +PLAYER_SETSTATE_DEAD = $3057 +PLAYER_SETSTATE_DIAGONALSPRING = $2932 +PLAYER_SETSTATE_FALLING = $2968 +PLAYER_SETSTATE_HORIZONTALSPRING = $294E +PLAYER_SETSTATE_HURT = $2FE8 +PLAYER_SETSTATE_JUMPFROMRAMP = $2901 +PLAYER_SETSTATE_JUMPING = $32D9 +PLAYER_SETSTATE_LOOKUP = $2873 +PLAYER_SETSTATE_MOVEBACK = $2EAC +PLAYER_SETSTATE_ROLL = $28CF +PLAYER_SETSTATE_ROLL_SPINDASHRELEASE = $28EB +PLAYER_SETSTATE_RUNNING = $28A6 +PLAYER_SETSTATE_SKIDLEFT = $28C1 +PLAYER_SETSTATE_SKIDRIGHT = $28B3 +PLAYER_SETSTATE_SPINDASH = $2897 +PLAYER_SETSTATE_STANDING = $282D +PLAYER_SETSTATE_VERTICALSPRING = $2912 +PLAYER_SETSTATE_WALKING = $2851 PLAYER_UNDERWATERFLAG = $D467 -PLAYER_UPDATEPLAYER.VELY = $332F -PLAYER_UPDATEPOSITIONX = $32C2 -PLAYER_UPDATEPOSITIONX_SETZERO = $3325 -PLAYER_UPDATEVPOS = $339C +PLAYER_UPDATEPLAYER.VELY = $3396 +PLAYER_UPDATEPOSITIONX = $3329 +PLAYER_UPDATEPOSITIONX_SETZERO = $338C +PLAYER_UPDATEVPOS = $3403 PLAYEROBJ = $D500 PLAYERSTATE_16 = $0010 PLAYERSTATE_ALZ_BUBBLE = $0024 @@ -1368,18 +1380,18 @@ PLAYERSTATE_WALKING = $0005 PLC_BANKNUMBER = $D3AC PLC_BYTECOUNT = $D3AD PLC_DESCRIPTOR = $D3B2 -PLC_ENDOFLEVELPATTERNS = $6F43 -PLC_EOL_ALZ_BOSS = $6F82 -PLC_EOL_GHZ_BOSS = $6F8F -PLC_EOL_GMZ_BOSS = $6F6E -PLC_EOL_PRISONCAPSULE = $6F59 -PLC_EOL_PRISONCAPSULEANIMALS = $6F60 -PLC_EOL_SEZ_BOSS = $6F9D -PLC_EOL_SHZ_BOSS = $6F7B -PLC_EOL_SIGNPOST = $6F67 -PLC_EOL_UGZ_BOSS = $6F96 -PLC_EOL_UNKNOWN_2 = $6FAA -PLC_EOL_UNKNOWN_3 = $6FAB +PLC_ENDOFLEVELPATTERNS = $6FB1 +PLC_EOL_ALZ_BOSS = $6FF0 +PLC_EOL_GHZ_BOSS = $6FFD +PLC_EOL_GMZ_BOSS = $6FDC +PLC_EOL_PRISONCAPSULE = $6FC7 +PLC_EOL_PRISONCAPSULEANIMALS = $6FCE +PLC_EOL_SEZ_BOSS = $700B +PLC_EOL_SHZ_BOSS = $6FE9 +PLC_EOL_SIGNPOST = $6FD5 +PLC_EOL_UGZ_BOSS = $7004 +PLC_EOL_UNKNOWN_2 = $7018 +PLC_EOL_UNKNOWN_3 = $7019 PLC_SOURCEADDR = $D3AE PLC_VRAMADDR = $D3B0 PLOTSSCREEN = $D09466 @@ -1391,94 +1403,99 @@ PORTS_VDP_CONTROL = $00BF PORTS_VDP_DATA = $00BE PORTS_VDP_HCOUNTER = $007F PORTS_VDP_VCOUNTER = $007E -PUTBANKINSLOT2 = $785F +PUTBANKINSLOT2 = $78D1 RAMSTART = $D00000 -READINPUT = $1297 +READINPUT = $12C5 RENDEREDSCREENMAP = $D52C00 -RENDERSCREENMAP = $D279A9 -RENDERSCREENMAP_NULLSCROLL = $D279F8 -RESTOREREGISTERS = $7842 -RINGARTPOINTERS = $1B57 -RINGARTPOINTERS_ALZ = $1B77 -RINGARTPOINTERS_ALZ1 = $1BDD -RINGARTPOINTERS_ALZ2 = $1BE7 -RINGARTPOINTERS_ALZ3 = $1BF1 -RINGARTPOINTERS_CEZ = $1B8F -RINGARTPOINTERS_CEZ1 = $1C55 -RINGARTPOINTERS_CEZ2 = $1C5F -RINGARTPOINTERS_CEZ3 = $1C69 -RINGARTPOINTERS_GHZ = $1B7D -RINGARTPOINTERS_GHZ1 = $1BA1 -RINGARTPOINTERS_GHZ2 = $1BAB -RINGARTPOINTERS_GHZ3 = $1BB5 -RINGARTPOINTERS_GMZ = $1B83 -RINGARTPOINTERS_GMZ1 = $1C19 -RINGARTPOINTERS_GMZ2 = $1C23 -RINGARTPOINTERS_GMZ3 = $1C2D -RINGARTPOINTERS_SEZ = $1B89 -RINGARTPOINTERS_SEZ1 = $1C37 -RINGARTPOINTERS_SEZ2 = $1C41 -RINGARTPOINTERS_SEZ3 = $1C4B -RINGARTPOINTERS_SHZ = $1B71 -RINGARTPOINTERS_SHZ1 = $1BBF -RINGARTPOINTERS_SHZ2 = $1BC9 -RINGARTPOINTERS_SHZ3 = $1BD3 -RINGARTPOINTERS_UGZ = $1B6B -RINGARTPOINTERS_UGZ1 = $1BFB -RINGARTPOINTERS_UGZ2 = $1C05 -RINGARTPOINTERS_UGZ3 = $1C0F +RENDERSCREENMAP = $D27AA3 +RENDERSCREENMAP_NULLSCROLL = $D27AF2 +RESTOREREGISTERS = $78B6 +RINGARTPOINTERS = $1BAF +RINGARTPOINTERS_ALZ = $1BCF +RINGARTPOINTERS_ALZ1 = $1C35 +RINGARTPOINTERS_ALZ2 = $1C3F +RINGARTPOINTERS_ALZ3 = $1C49 +RINGARTPOINTERS_CEZ = $1BE7 +RINGARTPOINTERS_CEZ1 = $1CAD +RINGARTPOINTERS_CEZ2 = $1CB7 +RINGARTPOINTERS_CEZ3 = $1CC1 +RINGARTPOINTERS_GHZ = $1BD5 +RINGARTPOINTERS_GHZ1 = $1BF9 +RINGARTPOINTERS_GHZ2 = $1C03 +RINGARTPOINTERS_GHZ3 = $1C0D +RINGARTPOINTERS_GMZ = $1BDB +RINGARTPOINTERS_GMZ1 = $1C71 +RINGARTPOINTERS_GMZ2 = $1C7B +RINGARTPOINTERS_GMZ3 = $1C85 +RINGARTPOINTERS_SEZ = $1BE1 +RINGARTPOINTERS_SEZ1 = $1C8F +RINGARTPOINTERS_SEZ2 = $1C99 +RINGARTPOINTERS_SEZ3 = $1CA3 +RINGARTPOINTERS_SHZ = $1BC9 +RINGARTPOINTERS_SHZ1 = $1C17 +RINGARTPOINTERS_SHZ2 = $1C21 +RINGARTPOINTERS_SHZ3 = $1C2B +RINGARTPOINTERS_UGZ = $1BC3 +RINGARTPOINTERS_UGZ1 = $1C53 +RINGARTPOINTERS_UGZ2 = $1C5D +RINGARTPOINTERS_UGZ3 = $1C67 RINGCOUNTER = $D299 -ROM_HEADER = $7604 +ROM_HEADER = $7674 ROMSTART = $D20000 SAT = $D64B00 SAVESP = $DE02 SAVESSCREEN = $D0EA1F SCORE = $D29C -SCORE_ADDBADNIKVALUE = $1531 -SCORE_ADDBOSSVALUE = $1537 -SCORE_ADDVALUE = $18FE -SCORE_BADNIKVALUE = $16F5 -SCORE_BOSSVALUE = $16F8 -SCORE_CALCULATEACTTIMESCORE = $1773 -SCORE_CALCULATEACTTIMESCORE_SEC = $1793 -SCORE_CONVERTBCDTOASCI = $16BC -SCORECARD_LOADMAPPINGS = $6DC9 -SCORECARD_MAPPINGS_BLANK = $16B4 -SCORECARD_MAPPINGS_NUMBERS = $168C -SCORECARD_UPDATESCORE = $14CF +SCORE_ADDBADNIKVALUE = $1588 +SCORE_ADDBOSSVALUE = $158E +SCORE_ADDVALUE = $1955 +SCORE_BADNIKVALUE = $174C +SCORE_BOSSVALUE = $174F +SCORE_CALCULATEACTTIMESCORE = $17CA +SCORE_CALCULATEACTTIMESCORE_SEC = $17EA +SCORE_CONVERTBCDTOASCI = $1713 +SCORECARD_LOADMAPPINGS = $6E37 +SCORECARD_MAPPINGS_BLANK = $170B +SCORECARD_MAPPINGS_NUMBERS = $16E3 +SCORECARD_UPDATESCORE = $1519 SCRAPMEM = $D02AD7 SCREENMAP = $D64400 -SCROLLADJUSTVALUES = $0597 -SCROLLINGTEXT_UPDATESPRITES = $20AB +SCROLLADJUSTVALUES = $05C3 +SCROLLINGTEXT_UPDATESPRITES = $210A SEGASP = $DE05 SEGATILECACHE = $D031F6 SEGATILEFLAGS = $D64C00 SEGAVRAM = $D60C00 -SETCACHEDTILE_DRAWINGGAP = $D27B0E -SETCACHEDTILE_DRAWINGGAPY = $D27AD0 -SETSCANLINESKIP = $D27C47 -SETSPRITECOORDS = $D27C12 -SETSPRITEPTR = $D27C26 -SETTILECACHEFLAGS = $1471 -SMS_PALETTE = $0DEB +SETCACHEDTILE_DRAWINGGAP = $D27C08 +SETCACHEDTILE_DRAWINGGAPY = $D27BCA +SETSCANLINESKIP = $D27D4A +SETSPRITECOORDS = $D27D05 +SETSPRITECOORDS_NOCLIP = $D27D0C +SETSPRITEPTR = $D27D29 +SETTILECACHEFLAGS = $14BB +SHCHEADER = $7A76 +SMS_PALETTE = $0E33 SOURCEPOINTER = $D348 SPECOBJ_HIDETIMERRINGS = $0006 SPRITEDEF.BANKNUM = $0000 SPRITEDEF.LINECOUNT = $0003 SPRITEDEF.SOURCEADDRESS = $0001 -STOREREGISTERS = $7826 +STOREBANKADDRESS = $7921 +STOREBANKPOINTERS = $78F0 +STOREREGISTERS = $789B TEMPSP = $D0053F +TEMPSPRITEBUFFER = $D0E100 TILECOUNT = $D342 -TILESET_ALZ = $7170 -TILESET_CEZ = $7250 -TILESET_CEZ3 = $728D -TILESET_GHZ = $71AD -TILESET_GMZ = $71DB -TILESET_INTRO = $72B7 -TILESET_SEZ = $7218 -TILESET_SHZ = $712E -TILESET_UGZ = $70EC -TILESET_UNK1 = $729D +TILESET_ALZ = $71DE +TILESET_CEZ = $72BE +TILESET_CEZ3 = $72FB +TILESET_GHZ = $721B +TILESET_GMZ = $7249 +TILESET_INTRO = $7325 +TILESET_SEZ = $7286 +TILESET_SHZ = $719C +TILESET_UGZ = $715A +TILESET_UNK1 = $730B TILESETENTRY.BANKNUM = $0000 TILESETENTRY.SOURCEADDRESS = $0003 TILESETENTRY.VRAMADDRESS = $0001 @@ -1489,46 +1506,47 @@ TILESETHEADER.VRAMADDRESS = $0001 TIME_1SECOND = $003C TIME_2SECONDS = $0078 TIME_3SECONDS = $00B4 -TITLECARD_LOADACTLOGOMAPPINGS = $1ED8 -TITLECARD_LOADANDDRAW = $1E68 -TITLECARD_LOADTEXT = $1E9F -TITLECARD_LOADTILES = $6CFF -TITLECARD_LOADZONETEXT = $1F02 -TITLECARD_MAPPINGS = $20BB -TITLECARD_PICTUREPOINTERS = $6D74 -TITLECARD_SCROLLACTLOGO = $1F75 -TITLECARD_SCROLLTEXTFROMLEFT = $1F34 -TITLESCREEN_CHANGEPRESSSTARTTEXT = $0CDB +TITLECARD_LOADACTLOGOMAPPINGS = $1F33 +TITLECARD_LOADANDDRAW = $1EC2 +TITLECARD_LOADTEXT = $1EFA +TITLECARD_LOADTILES = $6D6D +TITLECARD_LOADZONETEXT = $1F5D +TITLECARD_MAPPINGS = $211B +TITLECARD_PICTUREPOINTERS = $6DE2 +TITLECARD_SCROLLACTLOGO = $1FD1 +TITLECARD_SCROLLTEXTFROMLEFT = $1F8F +TITLESCREEN_CHANGEPRESSSTARTTEXT = $0D1F UNK_01 = $D001 UNK_02 = $D12D UNK_03 = $D130 UNK_04 = $D132 UNK_05 = $D176 UNK_06 = $D203 -UPDATECYCLINGPALETTE_CONVEYOR = $7428 -UPDATECYCLINGPALETTE_DONOTHING = $734E -UPDATECYCLINGPALETTE_DONOTHING2 = $735D -UPDATECYCLINGPALETTE_JUMPVECTORS = $732E -UPDATECYCLINGPALETTE_LAVA = $73C4 -UPDATECYCLINGPALETTE_LIGHTNING = $74E3 -UPDATECYCLINGPALETTE_LIGHTNING2 = $7513 -UPDATECYCLINGPALETTE_ORB = $74B4 -UPDATECYCLINGPALETTE_RAIN = $735E -UPDATECYCLINGPALETTE_SCROLLINGTEXT = $7530 -UPDATECYCLINGPALETTE_SHZ_LIGHTNING = $7390 -UPDATECYCLINGPALETTE_UNKNOWN2 = $745A -UPDATECYCLINGPALETTE_WALLLIGHTING = $7489 -UPDATECYCLINGPALETTE_WATER = $73F6 -UPDATECYCLINGPALETTEBANK = $731E +UPDATECYCLINGPALETTE_CONVEYOR = $7496 +UPDATECYCLINGPALETTE_DONOTHING = $73BC +UPDATECYCLINGPALETTE_DONOTHING2 = $73CB +UPDATECYCLINGPALETTE_JUMPVECTORS = $739C +UPDATECYCLINGPALETTE_LAVA = $7432 +UPDATECYCLINGPALETTE_LIGHTNING = $7551 +UPDATECYCLINGPALETTE_LIGHTNING2 = $7581 +UPDATECYCLINGPALETTE_ORB = $7522 +UPDATECYCLINGPALETTE_RAIN = $73CC +UPDATECYCLINGPALETTE_SCROLLINGTEXT = $759E +UPDATECYCLINGPALETTE_SHZ_LIGHTNING = $73FE +UPDATECYCLINGPALETTE_UNKNOWN2 = $74C8 +UPDATECYCLINGPALETTE_WALLLIGHTING = $74F7 +UPDATECYCLINGPALETTE_WATER = $7464 +UPDATECYCLINGPALETTEBANK = $738C UPDATEPALETTESONLY = $D4A3 VDP_224LINESELECTBIT = $0010 VDP_240LINESELECTBIT = $0008 -VDP_CLEARSAT = $1012 -VDP_CLEARSCREEN = $0FE3 -VDP_CLEARSCREENMAP = $0FCD -VDP_COPY = $0F03 +VDP_CLEARSAT = $105E +VDP_CLEARSCREEN = $102B +VDP_CLEARSCREENMAP = $1015 +VDP_CLEARTILECACHE = $104B +VDP_COPY = $0F4B VDP_DEFAULTTILEATTRIBS = $D2C7 -VDP_DISABLEFRAMEINTERRUPT = $0F33 +VDP_DISABLEFRAMEINTERRUPT = $0F7B VDP_DISPLAYVISIBLEBIT = $0040 VDP_DISPMODE_M1 = $0001 VDP_DISPMODE_M2 = $0002 @@ -1536,34 +1554,34 @@ VDP_DISPMODE_M3 = $0004 VDP_DISPMODE_M4 = $0008 VDP_DISPMODE_SMS_224 = $000B VDP_DISPMODE_SMS_240 = $000E -VDP_DRAWTEXT = $0F3B -VDP_ENABLEFRAMEINTERRUPT = $0F2B +VDP_DRAWTEXT = $0F83 +VDP_ENABLEFRAMEINTERRUPT = $0F73 VDP_EXTRAHEIGHTBIT = $0002 VDP_FRAMEINTERRUPTSBIT = $0020 VDP_HSCROLL = $D877 VDP_HSCROLLBIT = $0040 -VDP_INITREGISTERS = $0E6B +VDP_INITREGISTERS = $0EB3 VDP_LARGESPRITESBIT = $0002 VDP_LINEINTERRUPTSBIT = $0010 VDP_MASKCOLUMN0BIT = $0020 VDP_MODE4BIT = $0004 -VDP_READBYTE = $0EC3 -VDP_READSTATUS = $0E9A +VDP_READBYTE = $0F0B +VDP_READSTATUS = $0EE2 VDP_SATADDRESS = $D64B00 VDP_SATUPDATETRIG = $D134 VDP_SCREENMAP = $D64400 -VDP_SENDREAD = $0EAB -VDP_SETADDRESS = $0E9E -VDP_SETMODE2REG_DISPLAYOFF = $0F23 -VDP_SETMODE2REG_DISPLAYON = $0F1B -VDP_SETREGISTER = $0E83 +VDP_SENDREAD = $0EF3 +VDP_SETADDRESS = $0EE6 +VDP_SETMODE2REG_DISPLAYOFF = $0F6B +VDP_SETMODE2REG_DISPLAYON = $0F63 +VDP_SETREGISTER = $0ECB VDP_SPRITEDOUBLINGBIT = $0001 VDP_SPRITESHIFTBIT = $0008 VDP_SYNCENABLEBIT = $0001 VDP_TILECOLBUFFER = $D17F VDP_TILEROWBUFFER = $D1BB -VDP_UPDATESAT = $0F9A -VDP_UPDATESAT_ATTRIBUTES = $0FAB +VDP_UPDATESAT = $0FE2 +VDP_UPDATESAT_ATTRIBUTES = $0FF3 VDP_VIEWPORTX = $D179 VDP_VIEWPORTY = $D17C VDP_VSCROLL = $D878 @@ -1571,11 +1589,9 @@ VDP_VSCROLLBIT = $0080 VDP_WORKINGSAT = $DB00 VDP_WORKINGSAT_HPOS = $DB40 VDP_WORKINGSAT_VPOS = $DB00 -VDP_WRAPCOLUMNADDRESS = $121B -VDP_WRAPROWADDRESS = $122B -VDP_WRITE = $0EE4 -VDP_WRITEANDSKIP = $0ED1 -VDP_WRITEBYTE = $0EB6 +VDP_WRITE = $0F2C +VDP_WRITEANDSKIP = $0F19 +VDP_WRITEBYTE = $0EFE VDPREGISTER0 = $D11E VDPREGISTER1 = $D11F VDPREGISTER2 = $D120 @@ -1648,8 +1664,9 @@ VF_UPDATECYCLINGPALETTE_SCROLLINGTEXT = $02DE VRAM = $D40000 VRAMEND = $D65800 VRAMPOINTER = $DE00 +WAIT_1S = $05AF WORKINGCRAM = $D4C6 -WRITEBLANKTILE = $1414 -WRITEMIRROREDTILETOVRAM = $144F -WRITETILETOVRAM = $141F -XORDECODE = $13B9 +WRITEBLANKTILE = $145E +WRITEMIRROREDTILETOVRAM = $1499 +WRITETILETOVRAM = $1469 +XORDECODE = $1403 diff --git a/src/screen_drawing_routines.asm b/src/screen_drawing_routines.asm index 7d2fd32..b8386b1 100644 --- a/src/screen_drawing_routines.asm +++ b/src/screen_drawing_routines.asm @@ -8,6 +8,7 @@ DrawScreen: ld a, (DrawTilemapTrig) bit 0, a call.lil nz, DrawScreenMap + ld a, (DrawTilemapTrig) bit 1, a call.lil nz, RenderScreenMap @@ -17,8 +18,6 @@ DrawScreen: or a call.lil nz, DrawSAT - ld a, (DrawTilemapTrig) - ld (LastTilemapTrig), a xor a ld (DrawSATTrig), a ld (DrawTilemapTrig), a @@ -29,7 +28,7 @@ RenderScreenMap: ld hl, RenderedScreenMap ld de, VRAM+$1E20 ;first letter in letterbox ld bc, 0 - ld iyl, 192 ;length of SMS screen + ld iyl, 193 ;length of SMS screen ld.sis a, (VDP_VScroll) add a, h ;should HLU increment? jr nc, +_ ;jump if not @@ -169,6 +168,7 @@ DrawCachedTile: add hl, de ;HL = cached tile ptr pop de + bit 1, a ;do we flip the tile horizontally? jp nz, DrawCachedTile_FlippedX ;jump if we shouldn't @@ -348,18 +348,10 @@ _: ld h, (iy) cp h ;is the sprite's Y position 208? ret.sis z ;stop rendering SAT if so - ;is the sprite off-screen? - ld a, 175 - cp h - jr c, +_ ;skip this sprite - ld a, (ix) - or a - jr z, +_ ;check if the same applies to Y coords - cp $F8 - jr nc, +_ - ;draw the top half of the sprite + ld a, (ix) call SetSpriteCoords ;set sprite coordinates + jr nc, +_ ex de, hl ;HL now points to the tile's top-left corner ld l, (ix+1) call SetSpritePTR @@ -368,7 +360,8 @@ _: ld h, (iy) ld a, (iy) add a, 8 ld h, a - call SetSpriteCoords + ld a, (ix) + call SetSpriteCoords_NoClip ex de, hl ld l, (ix+1) inc l @@ -380,15 +373,32 @@ _: lea ix, ix+2 ;point IX and IY to the next entry ret.sis SetSpriteCoords: + ld e, a + call CheckSpriteOffscreen + ret nc + ld a, e +SetSpriteCoords_NoClip: ld l, 160 mlt hl add hl, hl ;HL now has the scanline to start on ld de, $0020 add hl, de ;move into the letterbox - ld e, (ix) + ld e, a add hl, de ;DE has the tile's coordinates ld de, VRAM+$1F40 ;first scanline to be updated add hl, de + scf + ret + +CheckSpriteOffscreen: + ;is the sprite off-screen? + or a + ret z + cp $F8 + ret nc + ld a, h + cp 177 + ret nc ;skip this sprite ret SetSpritePTR: diff --git a/src/sega_logo.asm b/src/sega_logo.asm index 4bfb328..976205b 100644 --- a/src/sega_logo.asm +++ b/src/sega_logo.asm @@ -1,5 +1,13 @@ ;SEGA logo routines SegaLogo: + call StatusScroll + + ;set up 4bpp mode with Vcomp interrupts + ld hl, mpLcdCtrl + ld (hl), $23 + inc hl + ld (hl), %00011101 + ;clear screen ld hl, VRAM ld de, VRAM+1 @@ -31,40 +39,29 @@ _: inc b jr nz, -_ ld b, 127 -_: call WaitAFrame - djnz -_ - ld b, 0 + call WaitSomeFrames + ld b, 4 ld a, b _: call FadePalette inc b ld a, b - cp 4 + cp 8 jr nz, -_ ld hl, mpLcdPalette ld de, mpLcdPalette+1 ld bc, 8 ld (hl), $00 ldir - - ;set up 8bpp mode with Vcomp interrupts - ld hl, mpLcdCtrl - ld (hl), $27 - inc hl - ld (hl), %00011001 ret FadePalette: ;fades the palette in and out - push af - ld c, 4 -_: call WaitAFrame - dec c - jr nz, -_ - pop af exx + ld b, 4 + call WaitSomeFrames ld l, a ld h, 8 mlt hl - ld de, LogoPalette + ld de, LightPalette add hl, de ld de, mpLcdPalette ld bc, 8 @@ -72,20 +69,49 @@ _: call WaitAFrame exx ret +WaitSomeFrames: + call WaitAFrame + djnz WaitSomeFrames + ret + WaitAFrame: ld hl, mpLcdRis - ld a, (hl) - bit 3, a + bit 3, (hl) jr z, WaitAFrame ld hl, mpLcdIcr set 3, (hl) ret +StatusScroll: + call ClrLCDFull + ld hl, mpLcdPalette + ld de, mpLcdPalette+1 + ld bc, 8 + ld (hl), $FF + ldir + + ld b, 15 +_: push bc + ld de, VRAM + ld hl, VRAM + (LcdWidth*4) + ld bc, lcdWidth*98 + ldir + pop bc + call WaitAFrame + djnz -_ + ret + LogoArt: #import "misc/sega_logo.bin" -LogoPalette: +LightPalette: .dw $81BF, $36DF, $CB5F, $FFFF ;brightness level 4 -.dw $80CF, $1D6F, $A5AF, $BDEF ;brightness level 3 -.dw $8068, $8CA8, $90C8, $2108 ;brightness level 2 -.dw $8024, $8844, $8864, $1084 ;brightness level 1 \ No newline at end of file +.dw $C2DF, $5B7F, $63BF, $FFFF ;brightness level 3 +.dw $5F7F, $EFBF, $F3DF, $FFFF ;brightness level 2 +.dw $EFBF, $F7DF, $77FF, $FFFF ;brightness level 1 + +DarkPalette: +.dw $81BF, $36DF, $CB5F, $FFFF ;darkness level 4 +.dw $80CF, $1D6F, $A5AF, $BDEF ;darkness level 3 +.dw $8068, $8CA8, $90C8, $2108 ;darkness level 2 +.dw $8024, $8844, $8864, $1084 ;darkness level 1 \ No newline at end of file diff --git a/src/vdp.asm b/src/vdp.asm index 36045b7..452b72a 100644 --- a/src/vdp.asm +++ b/src/vdp.asm @@ -564,10 +564,11 @@ VDP_ClearScreen: ;$17AC ld bc, $0380 ld de, $0100 call VDP_Write - +VDP_ClearTileCache: ld.lil hl, SegaTileFlags ;clear cache flags ld.lil de, SegaTileFlags+1 - ld c, $F0 + ld bc, $F0 + ld.lil (hl), b ldir.lil ;FALL THROUGH