; --------------------------------------------------------------------------- ; enum TitleCards Title_A: equ 4 Title_B: equ $404 Title_C: equ $804 Title_D: equ $C04 Title_F: equ $1004 Title_G: equ $1404 Title_H: equ $1804 Title_I: equ $1C02 Title_J: equ $1E04 Title_K: equ $2204 Title_L: equ $2604 Title_M: equ $2A06 Title_P: equ $3004 Title_Q: equ $3404 Title_R: equ $3804 Title_S: equ $3C04 Title_T: equ $4004 Title_U: equ $4404 Title_V: equ $4804 Title_W: equ $4C06 Title_X: equ $5204 Title_Y: equ $5604 ; --------------------------------------------------------------------------- ; enum opcodes jmp: equ $4EF9 ; --------------------------------------------------------------------------- ; enum ExternalReferences SK_ArtUnc_Knux: equ $1200E0 SK_Map_Knuckles: equ $14A8D6 SK_PLC_Knuckles: equ $14BD0A S2_ColCurveMap: equ $242D50 S2_ColArray: equ $242E50 S2_ColArray2: equ $243E50 S2_ColP_EHZHTZ: equ $244E50 S2_ColS_EHZHTZ: equ $244F40 S2_ColP_MTZ: equ $245040 S2_ColP_OOZ: equ $245100 S2_ColP_MCZ: equ $245200 S2_ColP_CNZ: equ $2452A0 S2_ColS_CNZ: equ $245330 S2_ColP_CPZDEZ: equ $2453C0 S2_ColS_CPZDEZ: equ $2454E0 S2_ColP_ARZ: equ $245610 S2_ColS_ARZ: equ $245760 S2_ColP_WFZSCZ: equ $2458C0 S2_ColS_WFZSCZ: equ $2459A0 S2_Off_Level: equ $245A80 S2_ArtUnc_HTZCliffs: equ $249A14 S2_ArtUnc_CNZSlotPics: equ $24EEFE S2_ArtUnc_Tails: equ $264320 S2_ArtUnc_Splash: equ $271FFC S2_ArtNem_SuperSonic_Stars: equ $27393C S2_MapRUnc_Tails: equ $27446C S2_MapEng_TitleScreen: equ $274DC6 S2_MapEng_TitleBack: equ $274E3A S2_MapEng_TitleLogo: equ $274E86 S2_MapEng_Title: equ $274F6C S2_ArtNem_Button: equ $278DAC S2_ArtNem_VrtclSpring: equ $278E84 S2_ArtNem_HrzntlSpring: equ $278FA0 S2_ArtNem_DignlSpring: equ $27906A S2_ArtNem_HUD: equ $27923E S2_ArtNem_Ring: equ $27945C S2_ArtNem_Powerups: equ $279550 S2_ArtNem_Spikes: equ $27995C S2_ArtNem_Numbers: equ $2799AC S2_ArtNem_Checkpoint: equ $279A86 S2_ArtNem_Signpost: equ $279BDE S2_ArtUnc_Signpost: equ $27A18A S2_ArtNem_LeverSpring: equ $27AB4A S2_ArtNem_HorizSpike: equ $27AC9A S2_ArtNem_BigBubbles: equ $27AD16 S2_ArtNem_Bubbles: equ $27AEE2 S2_ArtUnc_Countdown: equ $27AF80 S2_ArtNem_Game_Over: equ $27B400 S2_ArtNem_Explosion: equ $27B592 S2_ArtNem_MilesLife: equ $27B946 S2_ArtNem_Capsule: equ $27BA32 S2_ArtNem_ContinueTails: equ $27BDBE S2_ArtNem_TailsLife: equ $27C20C S2_ArtNem_MiniTails: equ $27C2F2 S2_ArtNem_FontStuff: equ $27C43A S2_ArtNem_MenuBack: equ $27CB80 S2_ArtNem_TitleCard: equ $27D22C S2_ArtNem_TitleCard2: equ $27D58A S2_ArtNem_MenuBox: equ $27D990 S2_ArtNem_LevelSelectPics: equ $27DA10 S2_ArtNem_ResultsText: equ $27E86A S2_ArtNem_SpecialStageResults: equ $27EB58 S2_ArtNem_Perfect: equ $27EEBE S2_ArtNem_Bird: equ $27EF60 S2_ArtNem_Squirrel: equ $27F0A2 S2_ArtNem_Mouse: equ $27F206 S2_ArtNem_Chicken: equ $27F340 S2_ArtNem_Beaver: equ $27F4A2 S2_ArtNem_Eagle: equ $27F5E2 S2_ArtNem_Pig: equ $27F710 S2_ArtNem_Seal: equ $27F846 S2_ArtNem_Penguin: equ $27F962 S2_ArtNem_Turtle: equ $27FADE S2_ArtNem_Bear: equ $27FC90 S2_ArtNem_Rabbit: equ $27FDD2 S2_ArtNem_WfzSwitch: equ $27FF2A S2_ArtNem_BreakPanels: equ $27FF98 S2_ArtNem_SpikyThing: equ $28007C S2_ArtNem_BurnerLid: equ $280274 S2_ArtNem_StripedBlocksVert: equ $28030A S2_ArtNem_Oilfall: equ $280376 S2_ArtNem_Oilfall2: equ $2804F2 S2_ArtNem_BallThing: equ $2805C0 S2_ArtNem_LaunchBall: equ $2806E0 S2_ArtNem_OOZPlatform: equ $2809D0 S2_ArtNem_PushSpring: equ $280C64 S2_ArtNem_OOZSwingPlat: equ $280E26 S2_ArtNem_StripedBlocksHoriz: equ $281048 S2_ArtNem_OOZElevator: equ $2810B8 S2_ArtNem_OOZFanHoriz: equ $281254 S2_ArtNem_OOZBurn: equ $281514 S2_ArtNem_CNZSnake: equ $281600 S2_ArtNem_CNZBonusSpike: equ $281668 S2_ArtNem_BigMovingBlock: equ $2816C8 S2_ArtNem_CNZElevator: equ $2817B4 S2_ArtNem_CNZCage: equ $281826 S2_ArtNem_CNZHexbumper: equ $281894 S2_ArtNem_CNZRoundBumper: equ $28191E S2_ArtNem_CNZDiagPlunger: equ $281AB0 S2_ArtNem_CNZVertPlunger: equ $281C96 S2_ArtNem_CNZMiniBumper: equ $281DCC S2_ArtNem_CNZFlipper: equ $281EF2 S2_ArtNem_CPZElevator: equ $282216 S2_ArtNem_WaterSurface: equ $282364 S2_ArtNem_CPZBooster: equ $2824D4 S2_ArtNem_CPZDroplet: equ $28253C S2_ArtNem_CPZMetalThings: equ $2825AE S2_ArtNem_CPZMetalBlock: equ $2827B8 S2_ArtNem_ConstructionStripes: equ $2827F8 S2_ArtNem_CPZAnimatedBits: equ $282864 S2_ArtNem_CPZStairBlock: equ $282A46 S2_ArtNem_CPZTubeSpring: equ $282C06 S2_ArtNem_WaterSurface2: equ $282E02 S2_ArtNem_Leaves: equ $282EE8 S2_ArtNem_ArrowAndShooter: equ $282F74 S2_ArtNem_ARZBarrierThing: equ $2830D2 S2_ArtNem_Buzzer: equ $28316A S2_ArtNem_Octus: equ $28336A S2_ArtNem_Aquis: equ $28368A S2_ArtNem_Masher: equ $2839EA S2_ArtNem_Eggpod: equ $283BF6 S2_ArtNem_CPZBoss: equ $284332 S2_ArtNem_FieryExplosion: equ $284890 S2_ArtNem_EggpodJets: equ $284F18 S2_ArtNem_BossSmoke: equ $284F96 S2_ArtNem_EHZBoss: equ $28507C S2_ArtNem_EggChoppers: equ $285868 S2_ArtNem_HTZBoss: equ $28595C S2_ArtNem_ARZBoss: equ $286128 S2_ArtNem_MCZBoss: equ $286B6E S2_ArtNem_CNZBoss: equ $287AAC S2_ArtNem_OOZBoss: equ $2882D6 S2_ArtNem_MTZBoss: equ $288DA6 S2_ArtNem_Whisp: equ $2895E4 S2_ArtNem_Grounder: equ $28970E S2_ArtNem_ChopChop: equ $289B9A S2_ArtNem_Rexon: equ $289DEC S2_ArtNem_Spiker: equ $289FAA S2_ArtNem_Nebula: equ $28A142 S2_ArtNem_Turtloid: equ $28A362 S2_ArtNem_Coconuts: equ $28A87A S2_ArtNem_Crawlton: equ $28AB36 S2_ArtNem_Flasher: equ $28AC5E S2_ArtNem_MtzMantis: equ $28AD80 S2_ArtNem_Crabmeat: equ $28B058 S2_ArtNem_MtzSupernova: equ $28B300 S2_ArtNem_Spiny: equ $28B430 S2_ArtNem_Grabber: equ $28B6B4 S2_ArtNem_WfzScratch: equ $28B9DC S2_ArtNem_Balkrie: equ $28BC16 S2_ArtNem_SilverSonic: equ $28BE12 S2_ArtNem_Tornado: equ $28CC44 S2_ArtNem_WfzWallTurret: equ $28D1A0 S2_ArtNem_WfzHook: equ $28D388 S2_ArtNem_WfzGunPlatform: equ $28D540 S2_ArtNem_ConveyorBeltWheel: equ $28D7D8 S2_ArtNem_WfzFloatingPlatform: equ $28D96E S2_ArtNem_VrtclLazer: equ $28DA6E S2_ArtNem_Clouds: equ $28DAFC S2_ArtNem_WfzHrzntlLazer: equ $28DC42 S2_ArtNem_WfzLaunchCatapult: equ $28DCA2 S2_ArtNem_WfzBeltPlatform: equ $28DD0C S2_ArtNem_WfzUnusedBadnik: equ $28DDF6 S2_ArtNem_WfzVrtclPrpllr: equ $28DEB8 S2_ArtNem_WfzHrzntlPrpllr: equ $28DEE8 S2_ArtNem_WfzTiltPlatforms: equ $28E010 S2_ArtNem_WfzThrust: equ $28E0C4 S2_ArtNem_WFZBoss: equ $28E138 S2_ArtNem_RobotnikUpper: equ $28E886 S2_ArtNem_RobotnikRunning: equ $28EA5A S2_ArtNem_RobotnikLower: equ $28EE52 S2_ArtNem_DEZWindow: equ $28EF96 S2_ArtNem_DEZBoss: equ $28F024 S2_ArtNem_Crawl: equ $2901A4 S2_ArtNem_TornadoThruster: equ $290520 S2_MapEng_Ending1: equ $2906E0 S2_MapEng_Ending2: equ $2906F8 S2_MapEng_Ending3: equ $290722 S2_MapEng_Ending4: equ $29073C S2_MapEng_Ending_TailsPlane: equ $29076E S2_ArtNem_EndingPics: equ $290992 S2_ArtNem_EndingFinalTornado: equ $291F3C S2_ArtNem_EndingMiniTornado: equ $2927E0 S2_ArtNem_EndingTitle: equ $294B28 S2_ArtKos_EHZ: equ $295C24 S2_ArtKoz_98AB4: equ $298AB4 S2_ArtKoz_C7EC4: equ $2C7EC4 S2_MapSpec_Rise1: equ $2CA904 S2_MapSpec_Rise2: equ $2CADA8 S2_MapSpec_Rise3: equ $2CB376 S2_MapSpec_Rise4: equ $2CB92E S2_MapSpec_Rise5: equ $2CBF92 S2_MapSpec_Rise6: equ $2CC5BE S2_MapSpec_Rise7: equ $2CCC7A S2_MapSpec_Rise8: equ $2CD282 S2_MapSpec_Rise9: equ $2CD7C0 S2_MapSpec_Rise10: equ $2CDD44 S2_MapSpec_Rise11: equ $2CE2BE S2_MapSpec_Rise12: equ $2CE7DE S2_MapSpec_Rise13: equ $2CEC52 S2_MapSpec_Rise14: equ $2CF0BC S2_MapSpec_Rise15: equ $2CF580 S2_MapSpec_Rise16: equ $2CFA00 S2_MapSpec_Rise17: equ $2CFE4A S2_MapSpec_Straight1: equ $2D028C S2_MapSpec_Straight2: equ $2D090A S2_MapSpec_Straight3: equ $2D0EA6 S2_MapSpec_Straight4: equ $2D1400 S2_MapSpec_Drop1: equ $2D19FC S2_MapSpec_Drop2: equ $2D1EAC S2_MapSpec_Drop3: equ $2D23AE S2_MapSpec_Drop4: equ $2D27C6 S2_MapSpec_Drop5: equ $2D2C14 S2_MapSpec_Drop6: equ $2D3092 S2_MapSpec_Drop7: equ $2D3522 S2_MapSpec_Drop8: equ $2D39EC S2_MapSpec_Drop9: equ $2D3F78 S2_MapSpec_Drop10: equ $2D4660 S2_MapSpec_Drop11: equ $2D4DA6 S2_MapSpec_Drop12: equ $2D53FC S2_MapSpec_Drop13: equ $2D5958 S2_MapSpec_Drop14: equ $2D5F02 S2_MapSpec_Drop15: equ $2D6596 S2_MapSpec_Drop16: equ $2D6BAA S2_MapSpec_Drop17: equ $2D702E S2_MapSpec_Turning1: equ $2D749C S2_MapSpec_Turning2: equ $2D7912 S2_MapSpec_Turning3: equ $2D7DAA S2_MapSpec_Turning4: equ $2D8250 S2_MapSpec_Turning5: equ $2D85F8 S2_MapSpec_Turning6: equ $2D89EC S2_MapSpec_Unturn1: equ $2D8E24 S2_MapSpec_Unturn2: equ $2D92B6 S2_MapSpec_Unturn3: equ $2D9778 S2_MapSpec_Unturn4: equ $2D9B80 S2_MapSpec_Unturn5: equ $2DA016 S2_MapSpec_Turn1: equ $2DA4CE S2_MapSpec_Turn2: equ $2DAB20 S2_MapSpec_Turn3: equ $2DB086 S2_MapSpec_Turn4: equ $2DB5AE S2_MapSpec_Turn5: equ $2DBB62 S2_MapSpec_Turn6: equ $2DC154 S2_MapSpec_Turn7: equ $2DC5E8 S2_ArtKoz_DCA38: equ $2DCA38 S2_ArtNem_SpecialBack: equ $2DCD68 S2_MapEng_SpecialBack: equ $2DD1DE S2_MapEng_SpecialBackBottom: equ $2DD30C S2_MapEng_SpecialHUD: equ $2DD48A S2_ArtNem_SpecialStart: equ $2DD790 S2_ArtNem_SpecialStars: equ $2DD8CE S2_ArtNem_SpecialPlayerVSPlayer: equ $2DD9C8 S2_ArtNem_SpecialRings: equ $2DDA7E S2_ArtNem_SpecialFlatShadow: equ $2DDFA4 S2_ArtNem_SpecialDiagShadow: equ $2DE05A S2_ArtNem_SpecialSideShadow: equ $2DE120 S2_ArtNem_SpecialExplosion: equ $2DE188 S2_ArtNem_SpecialBomb: equ $2DE4BC S2_ArtNem_SpecialEmerald: equ $2DE8AC S2_ArtNem_SpecialMessages: equ $2DEAF4 S2_ArtNem_SpecialTailsText: equ $2E247E S2_MiscKoz_SpecialPerspective: equ $2E24FE S2_MiscKoz_LevelLayout: equ $2E34EE S2_MiscKoz_SpecialObjectLocations: equ $2E35F2 S2_Off_Rings: equ $2E4300 S2_SoundDriverLoad: equ $2EC000 S2_ArtNem_Buzzer_Fireball: equ $2F0160 S2_ArtNem_Waterfall: equ $2F02D6 S2_ArtNem_HtzFireball: equ $2F03DC S2_ArtNem_EHZ_Bridge: equ $2F052A S2_ArtNem_HtzZipline: equ $2F0602 S2_ArtNem_HtzValveBarrier: equ $2F08F6 S2_ArtNem_HtzSeeSaw: equ $2F096E S2_ArtNem_HtzRock: equ $2F0C14 S2_ArtNem_Sol: equ $2F0D4A S2_ArtNem_MtzWheel: equ $2F0DB6 S2_ArtNem_MtzWheelIndent: equ $2F120E S2_ArtNem_MtzSpikeBlock: equ $2F12B6 S2_ArtNem_MtzSteam: equ $2F1384 S2_ArtNem_MtzSpike: equ $2F148E S2_ArtNem_MtzAsstBlocks: equ $2F1550 S2_ArtNem_MtzLavaBubble: equ $2F15C6 S2_ArtNem_LavaCup: equ $2F167C S2_ArtNem_BoltEnd_Rope: equ $2F16EC S2_ArtNem_MtzCog: equ $2F178E S2_ArtNem_MtzUnkBlocks: equ $2F1870 S2_ArtNem_Crate: equ $2F187C S2_ArtNem_MCZCollapsePlat: equ $2F1ABA S2_ArtNem_VineSwitch: equ $2F1C64 S2_ArtNem_VinePulley: equ $2F1D5C S2_ArtNem_MCZGateLog: equ $2F1E06 ; ; +-------------------------------------------------------------------------+ ; | This file is generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2007 by DataRescue sa/nv, | ; | Licensed to: Paul Ashton - Blue Lane Technologies (1-user Advanced 03/2006) | ; +-------------------------------------------------------------------------+ ; ; Input MD5 : 34424BB6B820F7E27EED34A6A810ADF6 ; --------------------------------------------------------------------------- ; File Name : C:\s2k\s2k.bin ; Format : Binary file ; Base Address: 0000h Range: 300000h - 340000h Loaded length: 40000h incbin sks2.bin ; Disassembly of "Knuckles in Sonic 2" (upmem) by Puto. ; Processor: 68000 ; Target Assembler: 680x0 Assembler in MRI compatible mode ; This file should be compiled with "as -M" ; =========================================================================== ; Segment type: Pure code ; segment "upmem" Entrypoint: ; Reload stack pointer lea ($FFFFFE00).w,sp move.w #jmp,($FFFFFFF0).w move.l #V_Int,($FFFFFFF2).w ; Load the code "jmp V_Int" to RAM address $FFF0; The V_Int and H_Int addresses are defined in RAM to allow for S&K to coexist with S2K. move.w #jmp,($FFFFFFF6).w move.l #H_Int,($FFFFFFF8).w ; Load the code "jmp H_Int" to RAM address $FFF6; Read comment for the above line for more info. btst #6,($A1000D).l beq.s loc_300036 cmp.l #'s2md',($FFFFFFFC).w beq.w loc_300080 loc_300036: ; ... move.l #$200,a0 move.l #$1A4,a1 move.l (a1),d0 moveq #0,d1 add.w (a0)+,d1 cmp.l a0,d0 nop nop move.l #$18E,a1 cmp.w (a1),d1 nop nop lea ($FFFFFE00).w,a6 moveq #0,d7 move.w #$7B,d6 loc_300064: ; ... move.l d7,(a6)+ dbf d6,loc_300064 move.b ($A10001).l,d0 and.b #$C0,d0 move.b d0,($FFFFFFD8).w move.l #'s2md',($FFFFFFFC).w loc_300080: ; ... bsr.w VDPSetupGame bsr.w JmpTo_SoundDriverLoad bsr.w JoypadInit move.b #0,($FFFFF600).w loc_300092: ; ... move.b ($FFFFF600).w,d0 and.w #$3C,d0 jsr GameModeArray(pc,d0.w) bra.s loc_300092 ; --------------------------------------------------------------------------- GameModeArray: bra.w SegaScreen ; --------------------------------------------------------------------------- bra.w TitleScreen ; --------------------------------------------------------------------------- bra.w Level ; --------------------------------------------------------------------------- bra.w Level ; --------------------------------------------------------------------------- bra.w SpecialStage ; --------------------------------------------------------------------------- bra.w ContinueScreen ; --------------------------------------------------------------------------- bra.w JmpTo_LevelSelect ; --------------------------------------------------------------------------- bra.w JmpTo_LevelSelect2P ; --------------------------------------------------------------------------- bra.w JmpTo_EndingSequence ; --------------------------------------------------------------------------- bra.w JmpTo_OptionsMenu ; --------------------------------------------------------------------------- bra.w JmpTo_LevelSelect ; --------------------------------------------------------------------------- JmpTo_LevelSelect2P: ; ... jmp MenuScreens ; --------------------------------------------------------------------------- JmpTo_EndingSequence: ; ... jmp EndingSequence ; --------------------------------------------------------------------------- JmpTo_OptionsMenu: ; ... jmp MenuScreens ; --------------------------------------------------------------------------- JmpTo_LevelSelect: ; ... jmp MenuScreens ; =============== S U B R O U T I N E ======================================= ChecksumError: move.l d1,-(sp) bsr.w VDPSetupGame move.l (sp)+,d1 move.l #$C0000000,($C00004).l moveq #$3F,d7 Checksum_Red: ; ... move.w #$E,($C00000).l dbf d7,Checksum_Red Checksum_Loop: ; ... bra.s Checksum_Loop ; End of function ChecksumError ; =============== S U B R O U T I N E ======================================= V_Int: ; ... nop movem.l d0-a6,-(sp) tst.b ($FFFFF62A).w beq.w VintSub0 loc_300114: ; ... move.w ($C00004).l,d0 and.w #8,d0 beq.s loc_300114 move.l #$40000010,($C00004).l move.l ($FFFFF616).w,($C00000).l btst #6,($FFFFFFD8).w beq.s loc_300142 move.w #$700,d0 loc_30013E: ; ... dbf d0,loc_30013E loc_300142: ; ... move.b ($FFFFF62A).w,d0 move.b #0,($FFFFF62A).w move.w #1,($FFFFF644).w and.w #$3E,d0 move.w Vint_SwitchTbl(pc,d0.w),d0 jsr Vint_SwitchTbl(pc,d0.w) VintRet: ; ... addq.l #1,($FFFFFE0C).w movem.l (sp)+,d0-a6 rte ; --------------------------------------------------------------------------- Vint_SwitchTbl: dc.w VintSub0-Vint_SwitchTbl ; 0 ; ... dc.w VintSub2-Vint_SwitchTbl ; 1 ; Should be a dc.w table dc.w VintSub4-Vint_SwitchTbl ; 2 dc.w VintSub6-Vint_SwitchTbl ; 3 dc.w VintSub8-Vint_SwitchTbl ; 4 dc.w VintSubA-Vint_SwitchTbl ; 5 dc.w VintSubC-Vint_SwitchTbl ; 6 dc.w VintSubE-Vint_SwitchTbl ; 7 dc.w VintSub10-Vint_SwitchTbl ; 8 dc.w VintSub12-Vint_SwitchTbl ; 9 dc.w VintSub14-Vint_SwitchTbl ; 10 dc.w VintSub16-Vint_SwitchTbl ; 11 dc.w VintSub18-Vint_SwitchTbl ; 12 dc.w VintSub1A-Vint_SwitchTbl ; 13 ; --------------------------------------------------------------------------- VintSub0: ; ... cmp.b #$88,($FFFFF600).w beq.s loc_3001C4 cmp.b #$8C,($FFFFF600).w beq.s loc_3001C4 cmp.b #8,($FFFFF600).w beq.s loc_3001C4 cmp.b #$C,($FFFFF600).w beq.s loc_3001C4 move.w #$100,($A11100).l loc_3001AC: ; ... btst #0,($A11100).l bne.s loc_3001AC bsr.w sndDriverInput move.w #0,($A11100).l bra.s VintRet ; --------------------------------------------------------------------------- loc_3001C4: ; ... tst.b ($FFFFF730).w beq.w Vint0_noWater move.w ($C00004).l,d0 btst #6,($FFFFFFD8).w beq.s loc_3001E2 move.w #$700,d0 loc_3001DE: ; ... dbf d0,loc_3001DE loc_3001E2: ; ... move.w #1,($FFFFF644).w move.w #$100,($A11100).l loc_3001F0: ; ... btst #0,($A11100).l bne.s loc_3001F0 tst.b ($FFFFF64E).w bne.s loc_300226 lea ($C00004).l,a5 move.l #$94009340,(a5) move.l #$96FD9580,(a5) move.w #$977F,(a5) move.w #$C000,(a5) move.w #$80,($FFFFF640).w move.w ($FFFFF640).w,(a5) bra.s loc_30024A ; --------------------------------------------------------------------------- loc_300226: ; ... lea ($C00004).l,a5 move.l #$94009340,(a5) move.l #$96F89540,(a5) move.w #$977F,(a5) move.w #$C000,(a5) move.w #$80,($FFFFF640).w move.w ($FFFFF640).w,(a5) loc_30024A: ; ... move.w ($FFFFF624).w,(a5) move.w #$8230,($C00004).l bsr.w sndDriverInput move.w #0,($A11100).l bra.w VintRet ; --------------------------------------------------------------------------- Vint0_noWater: ; ... move.w ($C00004).l,d0 move.l #$40000010,($C00004).l move.l ($FFFFF616).w,($C00000).l btst #6,($FFFFFFD8).w beq.s loc_30028E move.w #$700,d0 loc_30028A: ; ... dbf d0,loc_30028A loc_30028E: ; ... move.w #1,($FFFFF644).w move.w ($FFFFF624).w,($C00004).l move.w #$8230,($C00004).l move.l ($FFFFF61E).w,($FFFFEEEC).w move.w #$100,($A11100).l loc_3002B2: ; ... btst #0,($A11100).l bne.s loc_3002B2 lea ($C00004).l,a5 move.l #$94019340,(a5) move.l #$96FC9500,(a5) move.w #$977F,(a5) move.w #$7800,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) bsr.w sndDriverInput move.w #0,($A11100).l bra.w VintRet ; End of function V_Int ; =============== S U B R O U T I N E ======================================= VintSub2: ; ... bsr.w sub_300BA0 lea ($C00004).l,a5 move.l #$940193C0,(a5) move.l #$96F09500,(a5) move.w #$977F,(a5) move.w #$7C00,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) jsr sub_33343A tst.w ($FFFFF614).w beq.w return_30032A subq.w #1,($FFFFF614).w return_30032A: ; ... rts ; End of function VintSub2 ; =============== S U B R O U T I N E ======================================= VintSub14: ; ... move.b ($FFFFFE0F).w,d0 and.w #$F,d0 bne.s loc_300354 move.w #$100,($A11100).l loc_30033E: ; ... btst #0,($A11100).l bne.s loc_30033E bsr.w ReadJoypads move.w #0,($A11100).l loc_300354: ; ... tst.w ($FFFFF614).w beq.w return_300360 subq.w #1,($FFFFF614).w return_300360: ; ... rts ; End of function VintSub14 ; =============== S U B R O U T I N E ======================================= VintSub4: ; ... bsr.w sub_300BA0 bsr.w ProcessDPLC tst.w ($FFFFF614).w beq.w return_300376 subq.w #1,($FFFFF614).w return_300376: ; ... rts ; End of function VintSub4 ; =============== S U B R O U T I N E ======================================= VintSub6: ; ... bsr.w sub_300BA0 rts ; End of function VintSub6 ; =============== S U B R O U T I N E ======================================= VintSub10: ; ... ; FUNCTION CHUNK AT 00300506 SIZE 00000076 BYTES cmp.b #$10,($FFFFF600).w beq.w Vint10_specialStage VintSub8: ; ... move.w #$100,($A11100).l loc_300390: ; ... btst #0,($A11100).l bne.s loc_300390 bsr.w ReadJoypads tst.b ($FFFFF622).w beq.s loc_3003FA lea ($C00004).l,a5 tst.w ($FFFFF63A).w bne.w loc_30044A subq.b #1,($FFFFF622).w bne.s loc_3003BE move.b #0,($FFFFF623).w loc_3003BE: ; ... cmp.b #$10,($FFFFF622).w bcs.s loc_3003FA lea ($C00000).l,a6 move.l #$C0000000,($C00004).l move.w #$EEE,d0 move.w #$1F,d1 loc_3003DE: ; ... move.w d0,(a6) dbf d1,loc_3003DE move.l #$C0420000,($C00004).l move.w #$1F,d1 loc_3003F2: ; ... move.w d0,(a6) dbf d1,loc_3003F2 bra.s loc_30044A ; --------------------------------------------------------------------------- loc_3003FA: ; ... tst.b ($FFFFF64E).w bne.s loc_300426 lea ($C00004).l,a5 move.l #$94009340,(a5) move.l #$96FD9580,(a5) move.w #$977F,(a5) move.w #$C000,(a5) move.w #$80,($FFFFF640).w move.w ($FFFFF640).w,(a5) bra.s loc_30044A ; --------------------------------------------------------------------------- loc_300426: ; ... lea ($C00004).l,a5 move.l #$94009340,(a5) move.l #$96F89540,(a5) move.w #$977F,(a5) move.w #$C000,(a5) move.w #$80,($FFFFF640).w move.w ($FFFFF640).w,(a5) loc_30044A: ; ... move.w ($FFFFF624).w,(a5) move.w #$8230,($C00004).l lea ($C00004).l,a5 move.l #$940193C0,(a5) move.l #$96F09500,(a5) move.w #$977F,(a5) move.w #$7C00,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) lea ($C00004).l,a5 move.l #$94019340,(a5) move.l #$96FC9500,(a5) move.w #$977F,(a5) move.w #$7800,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) bsr.w ProcessDMAQueue bsr.w sndDriverInput move.w #0,($A11100).l movem.l ($FFFFEE00).w,d0-d7 movem.l d0-d7,($FFFFEE60).w movem.l ($FFFFEE20).w,d0-d7 movem.l d0-d7,($FFFFEE80).w movem.l ($FFFFEE50).w,d0-d3 movem.l d0-d3,($FFFFEEA0).w move.l ($FFFFF61E).w,($FFFFEEEC).w cmp.b #$5C,($FFFFF625).w bcc.s DemoTime move.b #1,($FFFFF64F).w rts ; End of function VintSub10 ; =============== S U B R O U T I N E ======================================= DemoTime: ; ... jsr LoadTilesAsYouMove jsr HudUpdate bsr.w ProcessDPLC2 tst.w ($FFFFF614).w beq.w return_300504 subq.w #1,($FFFFF614).w return_300504: ; ... rts ; End of function DemoTime ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR VintSub10 Vint10_specialStage: ; ... move.w #$100,($A11100).l loc_30050E: ; ... btst #0,($A11100).l bne.s loc_30050E bsr.w ReadJoypads jsr sndDriverInput tst.b ($FFFFDB11).w beq.s loc_30054E lea ($C00004).l,a5 move.l #$940193C0,(a5) move.l #$96EB9580,(a5) move.w #$977F,(a5) move.w #$7C00,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) bra.s loc_300572 ; --------------------------------------------------------------------------- loc_30054E: ; ... lea ($C00004).l,a5 move.l #$940193C0,(a5) move.l #$96F09500,(a5) move.w #$977F,(a5) move.w #$7C00,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) loc_300572: ; ... move.w #0,($A11100).l rts ; END OF FUNCTION CHUNK FOR VintSub10 ; =============== S U B R O U T I N E ======================================= VintSubA: ; ... move.w #$100,($A11100).l loc_300584: ; ... btst #0,($A11100).l bne.s loc_300584 bsr.w ReadJoypads bsr.w sub_3007EC lea ($C00004).l,a5 move.l #$94009340,(a5) move.l #$96FD9580,(a5) move.w #$977F,(a5) move.w #$C000,(a5) move.w #$80,($FFFFF640).w move.w ($FFFFF640).w,(a5) lea ($C00004).l,a5 move.l #$94019340,(a5) move.l #$96FC9500,(a5) move.w #$977F,(a5) move.w #$7800,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) tst.b ($FFFFDB0F).w beq.s loc_30060A lea ($C00004).l,a5 move.l #$940193C0,(a5) move.l #$96EB9580,(a5) move.w #$977F,(a5) move.w #$7C00,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) bra.s loc_30062E ; --------------------------------------------------------------------------- loc_30060A: ; ... lea ($C00004).l,a5 move.l #$940193C0,(a5) move.l #$96F09500,(a5) move.w #$977F,(a5) move.w #$7C00,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) loc_30062E: ; ... tst.b ($FFFFDB0E).w beq.s loc_300654 moveq #0,d0 move.b ($FFFFDB0D).w,d0 cmp.b #4,d0 bge.s loc_300654 add.b d0,d0 tst.b ($FFFFDB0C).w beq.s loc_30064C add.w #8,d0 loc_30064C: ; ... move.w unkIndex1(pc,d0.w),d0 ; off_97A in S2 jsr unkIndex1(pc,d0.w) loc_300654: ; ... bsr.w sub_300806 add.b #1,($FFFFDB0D).w move.b ($FFFFDB0D).w,d0 cmp.b d1,d0 blt.s loc_300698 move.b #0,($FFFFDB0D).w lea ($C00004).l,a6 tst.b ($FFFFDB0C).w beq.s loc_30068E move.w #$8230,(a6) bra.s loc_300692 ; --------------------------------------------------------------------------- unkIndex1: dc.w loc_300754-unkIndex1 ; 0 ; ... dc.w loc_30077A-unkIndex1 ; 1 dc.w loc_3007A0-unkIndex1 ; 2 dc.w loc_3007C6-unkIndex1 ; 3 dc.w sub_3006BC-unkIndex1 ; 4 dc.w sub_3006E2-unkIndex1 ; 5 dc.w loc_300708-unkIndex1 ; 6 dc.w loc_30072E-unkIndex1 ; 7 ; --------------------------------------------------------------------------- loc_30068E: ; ... move.w #$8220,(a6) loc_300692: ; ... eor.b #1,($FFFFDB0C).w loc_300698: ; ... bsr.w ProcessDMAQueue jsr sndDriverInput move.w #0,($A11100).l bsr.w ProcessDPLC2 tst.w ($FFFFF614).w beq.w return_3006BA subq.w #1,($FFFFF614).w return_3006BA: ; ... rts ; End of function VintSubA ; =============== S U B R O U T I N E ======================================= sub_3006BC: ; ... lea ($C00004).l,a5 move.l #$94039380,(a5) move.l #$96E89500,(a5) move.w #$977F,(a5) move.w #$4000,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) rts ; End of function sub_3006BC ; =============== S U B R O U T I N E ======================================= sub_3006E2: ; ... lea ($C00004).l,a5 move.l #$94039380,(a5) move.l #$96E89500,(a5) move.w #$977F,(a5) move.w #$4700,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) rts ; End of function sub_3006E2 ; --------------------------------------------------------------------------- loc_300708: ; ... lea ($C00004).l,a5 move.l #$94039380,(a5) move.l #$96E89500,(a5) move.w #$977F,(a5) move.w #$4E00,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) rts ; --------------------------------------------------------------------------- loc_30072E: ; ... lea ($C00004).l,a5 move.l #$94039380,(a5) move.l #$96E89500,(a5) move.w #$977F,(a5) move.w #$5500,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) rts ; --------------------------------------------------------------------------- loc_300754: ; ... lea ($C00004).l,a5 move.l #$94039380,(a5) move.l #$96E89500,(a5) move.w #$977F,(a5) move.w #$4000,(a5) move.w #$82,($FFFFF640).w move.w ($FFFFF640).w,(a5) rts ; --------------------------------------------------------------------------- loc_30077A: ; ... lea ($C00004).l,a5 move.l #$94039380,(a5) move.l #$96E89500,(a5) move.w #$977F,(a5) move.w #$4700,(a5) move.w #$82,($FFFFF640).w move.w ($FFFFF640).w,(a5) rts ; --------------------------------------------------------------------------- loc_3007A0: ; ... lea ($C00004).l,a5 move.l #$94039380,(a5) move.l #$96E89500,(a5) move.w #$977F,(a5) move.w #$4E00,(a5) move.w #$82,($FFFFF640).w move.w ($FFFFF640).w,(a5) rts ; --------------------------------------------------------------------------- loc_3007C6: ; ... lea ($C00004).l,a5 move.l #$94039380,(a5) move.l #$96E89500,(a5) move.w #$977F,(a5) move.w #$5500,(a5) move.w #$82,($FFFFF640).w move.w ($FFFFF640).w,(a5) rts ; =============== S U B R O U T I N E ======================================= sub_3007EC: ; ... move.w ($C00004).l,d0 move.l #$40000010,($C00004).l move.l ($FFFFF616).w,($C00000).l rts ; End of function sub_3007EC ; =============== S U B R O U T I N E ======================================= sub_300806: ; ... move.w ($FFFFDB16).w,d0 cmp.w ($FFFFDB12).w,d0 beq.s loc_30081C move.l ($FFFFDB12).w,($FFFFDB16).w move.b #0,($FFFFDB1F).w loc_30081C: ; ... sub.b #1,($FFFFDB1F).w bgt.s loc_300842 lea (byte_30084A).l,a0 move.w ($FFFFDB16).w,d0 lsr.w #1,d0 move.b (a0,d0.w),d1 move.b d1,($FFFFDB21).w move.b d1,($FFFFDB1F).w subq.b #1,($FFFFDB21).w rts ; --------------------------------------------------------------------------- loc_300842: ; ... move.b ($FFFFDB21).w,d1 addq.b #1,d1 rts ; End of function sub_300806 ; --------------------------------------------------------------------------- byte_30084A: dc.b $3C, $1E, $F, $A, 8, 6, 5, 0; 0 ; ... ; =============== S U B R O U T I N E ======================================= VintSub1A: ; ... move.w #$100,($A11100).l loc_30085A: ; ... btst #0,($A11100).l bne.s loc_30085A jsr ProcessDMAQueue move.w #0,($A11100).l rts ; End of function VintSub1A ; =============== S U B R O U T I N E ======================================= VintSubC: ; ... move.w #$100,($A11100).l loc_30087C: ; ... btst #0,($A11100).l bne.s loc_30087C bsr.w ReadJoypads tst.b ($FFFFF64E).w bne.s loc_3008B6 lea ($C00004).l,a5 move.l #$94009340,(a5) move.l #$96FD9580,(a5) move.w #$977F,(a5) move.w #$C000,(a5) move.w #$80,($FFFFF640).w move.w ($FFFFF640).w,(a5) bra.s loc_3008DA ; --------------------------------------------------------------------------- loc_3008B6: ; ... lea ($C00004).l,a5 move.l #$94009340,(a5) move.l #$96F89540,(a5) move.w #$977F,(a5) move.w #$C000,(a5) move.w #$80,($FFFFF640).w move.w ($FFFFF640).w,(a5) loc_3008DA: ; ... move.w ($FFFFF624).w,(a5) lea ($C00004).l,a5 move.l #$940193C0,(a5) move.l #$96F09500,(a5) move.w #$977F,(a5) move.w #$7C00,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) lea ($C00004).l,a5 move.l #$94019340,(a5) move.l #$96FC9500,(a5) move.w #$977F,(a5) move.w #$7800,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) bsr.w ProcessDMAQueue jsr sub_312116 jsr sndDriverInput move.w #0,($A11100).l movem.l ($FFFFEE00).w,d0-d7 movem.l d0-d7,($FFFFEE60).w movem.l ($FFFFEE50).w,d0-d1 movem.l d0-d1,($FFFFEEA0).w move.l ($FFFFF61E).w,($FFFFEEEC).w bsr.w ProcessDPLC rts ; End of function VintSubC ; =============== S U B R O U T I N E ======================================= VintSubE: ; ... bsr.w sub_300BA0 addq.b #1,($FFFFF628).w move.b #$E,($FFFFF62A).w rts ; End of function VintSubE ; =============== S U B R O U T I N E ======================================= VintSub12: ; ... bsr.w sub_300BA0 move.w ($FFFFF624).w,(a5) bra.w ProcessDPLC ; End of function VintSub12 ; =============== S U B R O U T I N E ======================================= VintSub18: ; ... move.w #$100,($A11100).l loc_300986: ; ... btst #0,($A11100).l bne.s loc_300986 bsr.w ReadJoypads lea ($C00004).l,a5 move.l #$94009340,(a5) move.l #$96FD9580,(a5) move.w #$977F,(a5) move.w #$C000,(a5) move.w #$80,($FFFFF640).w move.w ($FFFFF640).w,(a5) lea ($C00004).l,a5 move.l #$94019340,(a5) move.l #$96FC9500,(a5) move.w #$977F,(a5) move.w #$7800,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) lea ($C00004).l,a5 move.l #$940193C0,(a5) move.l #$96F09500,(a5) move.w #$977F,(a5) move.w #$7C00,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) bsr.w ProcessDMAQueue bsr.w sndDriverInput movem.l ($FFFFEE00).w,d0-d7 movem.l d0-d7,($FFFFEE60).w movem.l ($FFFFEE50).w,d0-d3 movem.l d0-d3,($FFFFEEA0).w jsr LoadTilesAsYouMove move.w #0,($A11100).l move.w ($FFFFF662).w,d0 beq.s return_300A40 clr.w ($FFFFF662).w move.w return_300A40(pc,d0.w),d0 jsr off_300A42(pc,d0.w) return_300A40: ; ... rts ; End of function VintSub18 ; --------------------------------------------------------------------------- off_300A42: dc.w sub_300A46-off_300A42,sub_300A76-off_300A42; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_300A46: ; ... lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$941F93FF,(a5) move.w #$9780,(a5) move.l #$40000083,(a5) move.w #0,($C00000).l loc_300A68: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_300A68 move.w #$8F02,(a5) rts ; End of function sub_300A46 ; =============== S U B R O U T I N E ======================================= sub_300A76: ; ... lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$941F93FF,(a5) move.w #$9780,(a5) move.l #$40000081,(a5) move.w #0,($C00000).l loc_300A98: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_300A98 move.w #$8F02,(a5) lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$941F93FF,(a5) move.w #$9780,(a5) move.l #$40000083,(a5) move.w #0,($C00000).l loc_300AC6: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_300AC6 move.w #$8F02,(a5) lea ($C00004).l,a6 move.w #$8B00,(a6) move.w #$8402,(a6) move.w #$9011,(a6) lea ($FFFF0000).l,a1 move.l #$50AC0003,d0 moveq #$16,d1 moveq #$E,d2 jsr ShowVDPGraphics rts ; End of function sub_300A76 ; =============== S U B R O U T I N E ======================================= VintSub16: ; ... move.w #$100,($A11100).l loc_300B04: ; ... btst #0,($A11100).l bne.s loc_300B04 bsr.w ReadJoypads lea ($C00004).l,a5 move.l #$94009340,(a5) move.l #$96FD9580,(a5) move.w #$977F,(a5) move.w #$C000,(a5) move.w #$80,($FFFFF640).w move.w ($FFFFF640).w,(a5) lea ($C00004).l,a5 move.l #$94019340,(a5) move.l #$96FC9500,(a5) move.w #$977F,(a5) move.w #$7800,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) lea ($C00004).l,a5 move.l #$940193C0,(a5) move.l #$96F09500,(a5) move.w #$977F,(a5) move.w #$7C00,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) bsr.w ProcessDMAQueue bsr.w sndDriverInput move.w #0,($A11100).l bsr.w ProcessDPLC tst.w ($FFFFF614).w beq.w return_300B9E subq.w #1,($FFFFF614).w return_300B9E: ; ... rts ; End of function VintSub16 ; =============== S U B R O U T I N E ======================================= sub_300BA0: ; ... move.w #$100,($A11100).l loc_300BA8: ; ... btst #0,($A11100).l bne.s loc_300BA8 bsr.w ReadJoypads tst.b ($FFFFF64E).w bne.s loc_300BE2 lea ($C00004).l,a5 move.l #$94009340,(a5) move.l #$96FD9580,(a5) move.w #$977F,(a5) move.w #$C000,(a5) move.w #$80,($FFFFF640).w move.w ($FFFFF640).w,(a5) bra.s loc_300C06 ; --------------------------------------------------------------------------- loc_300BE2: ; ... lea ($C00004).l,a5 move.l #$94009340,(a5) move.l #$96F89540,(a5) move.w #$977F,(a5) move.w #$C000,(a5) move.w #$80,($FFFFF640).w move.w ($FFFFF640).w,(a5) loc_300C06: ; ... lea ($C00004).l,a5 move.l #$94019340,(a5) move.l #$96FC9500,(a5) move.w #$977F,(a5) move.w #$7800,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) lea ($C00004).l,a5 move.l #$940193C0,(a5) move.l #$96F09500,(a5) move.w #$977F,(a5) move.w #$7C00,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) bsr.w sndDriverInput move.w #0,($A11100).l rts ; End of function sub_300BA0 ; END OF V-INT CODE ; =============== S U B R O U T I N E ======================================= H_Int: ; ... tst.w ($FFFFF644).w beq.w return_300D06 tst.w ($FFFFFFDC).w beq.w PalToCRAM move.w #0,($FFFFF644).w move.l a5,-(sp) move.l d0,-(sp) loc_300C76: ; ... move.w ($C00004).l,d0 and.w #4,d0 beq.s loc_300C76 move.w ($FFFFF60C).w,d0 and.b #$BF,d0 move.w d0,($C00004).l move.w #$8228,($C00004).l move.l #$40000010,($C00004).l move.l ($FFFFEEEC).w,($C00000).l move.w #$100,($A11100).l loc_300CB2: ; ... btst #0,($A11100).l bne.s loc_300CB2 lea ($C00004).l,a5 move.l #$94019340,(a5) move.l #$96EE9580,(a5) move.w #$977F,(a5) move.w #$7800,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) move.w #0,($A11100).l loc_300CE8: ; ... move.w ($C00004).l,d0 and.w #4,d0 beq.s loc_300CE8 move.w ($FFFFF60C).w,d0 or.b #$40,d0 move.w d0,($C00004).l move.l (sp)+,d0 move.l (sp)+,a5 return_300D06: ; ... rte ; --------------------------------------------------------------------------- ; - END OF H-INT - ; Start of game code PalToCRAM: ; ... move #$2700,sr move.w #0,($FFFFF644).w movem.l a0-a1,-(sp) lea ($C00000).l,a1 lea ($FFFFF080).w,a0 move.l #$C0000000,4(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.l (a0)+,(a1) move.w #$8ADF,4(a1) movem.l (sp)+,a0-a1 tst.b ($FFFFF64F).w bne.s loc_300D7A rte ; --------------------------------------------------------------------------- loc_300D7A: ; ... clr.b ($FFFFF64F).w movem.l d0-a6,-(sp) bsr.w DemoTime movem.l (sp)+,d0-a6 rte ; End of function H_Int ; =============== S U B R O U T I N E ======================================= sndDriverInput: ; ... lea ($FFFFE0).l,a0 lea ($A01B80).l,a1 cmp.b #$80,8(a1) bne.s loc_300DCC move.b 0(a0),d0 beq.s loc_300DAC clr.b 0(a0) bra.s loc_300DB6 ; --------------------------------------------------------------------------- loc_300DAC: ; ... move.b 4(a0),d0 beq.s loc_300DCC clr.b 4(a0) loc_300DB6: ; ... move.b d0,d1 sub.b #$FE,d1 bcs.s loc_300DC8 add.b #$7F,d1 move.b d1,3(a1) bra.s loc_300DCC ; --------------------------------------------------------------------------- loc_300DC8: ; ... move.b d0,8(a1) loc_300DCC: ; ... moveq #3,d1 loc_300DCE: ; ... move.b 1(a0,d1.w),d0 beq.s loc_300DE2 tst.b 9(a1,d1.w) bne.s loc_300DE2 clr.b 1(a0,d1.w) move.b d0,9(a1,d1.w) loc_300DE2: ; ... dbf d1,loc_300DCE rts ; End of function sndDriverInput ; =============== S U B R O U T I N E ======================================= JoypadInit: ; ... move.w #$100,($A11100).l loc_300DF0: ; ... btst #0,($A11100).l bne.s loc_300DF0 moveq #$40,d0 move.b d0,($A10009).l move.b d0,($A1000B).l move.b d0,($A1000D).l move.w #0,($A11100).l rts ; End of function JoypadInit ; =============== S U B R O U T I N E ======================================= ReadJoypads: ; ... lea ($FFFFF604).w,a0 lea ($A10003).l,a1 bsr.s Joypad_Read addq.w #2,a1 ; End of function ReadJoypads ; =============== S U B R O U T I N E ======================================= Joypad_Read: ; ... move.b #0,(a1) nop nop move.b (a1),d0 lsl.b #2,d0 and.b #$C0,d0 move.b #$40,(a1) nop nop move.b (a1),d1 and.b #$3F,d1 or.b d1,d0 not.b d0 move.b (a0),d1 eor.b d0,d1 move.b d0,(a0)+ and.b d0,d1 move.b d1,(a0)+ rts ; End of function Joypad_Read ; =============== S U B R O U T I N E ======================================= VDPSetupGame: ; ... lea ($C00004).l,a0 lea ($C00000).l,a1 lea (VDPSetupArray).l,a2 moveq #$12,d7 loc_300E68: ; ... move.w (a2)+,(a0) dbf d7,loc_300E68 move.w (VDPSetupArray+2).l,d0 move.w d0,($FFFFF60C).w move.w #$8ADF,($FFFFF624).w moveq #0,d0 move.l #$40000010,($C00004).l move.w d0,(a1) move.w d0,(a1) move.l #$C0000000,($C00004).l move.w #$3F,d7 loc_300E9C: ; ... move.w d0,(a1) dbf d7,loc_300E9C clr.l ($FFFFF616).w clr.l ($FFFFF61A).w move.l d1,-(sp) lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$94FF93FF,(a5) move.w #$9780,(a5) move.l #$40000080,(a5) move.w #0,($C00000).l loc_300ECE: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_300ECE move.w #$8F02,(a5) move.l (sp)+,d1 rts ; End of function VDPSetupGame ; --------------------------------------------------------------------------- VDPSetupArray: dc.w $8004,$8134,$8230,$8328,$8407,$857C,$8600,$8700,$8800; 0 ; ... dc.w $8900,$8A00,$8B00,$8C81,$8D3F,$8E00,$8F02,$9001,$9100; 9 dc.w $9200 ; 18 ; =============== S U B R O U T I N E ======================================= ClearScreen: ; ... move.w #$100,($A11100).l loc_300F0C: ; ... btst #0,($A11100).l bne.s loc_300F0C lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$9400933F,(a5) move.w #$9780,(a5) move.l #$40000080,(a5) move.w #0,($C00000).l loc_300F38: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_300F38 move.w #$8F02,(a5) lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$940F93FF,(a5) move.w #$9780,(a5) move.l #$40000083,(a5) move.w #0,($C00000).l loc_300F66: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_300F66 move.w #$8F02,(a5) lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$940F93FF,(a5) move.w #$9780,(a5) move.l #$60000083,(a5) move.w #0,($C00000).l loc_300F94: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_300F94 move.w #$8F02,(a5) tst.w ($FFFFFFDC).w beq.s loc_300FD4 lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$940F93FF,(a5) move.w #$9780,(a5) move.l #$60000082,(a5) move.w #0,($C00000).l loc_300FC8: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_300FC8 move.w #$8F02,(a5) loc_300FD4: ; ... clr.l ($FFFFF616).w clr.l ($FFFFF61A).w lea ($FFFFF800).w,a1 moveq #0,d0 move.w #$A0,d1 loc_300FE6: ; ... move.l d0,(a1)+ dbf d1,loc_300FE6 lea ($FFFFE000).w,a1 moveq #0,d0 move.w #$100,d1 loc_300FF6: ; ... move.l d0,(a1)+ dbf d1,loc_300FF6 move.w #0,($A11100).l rts ; End of function ClearScreen ; =============== S U B R O U T I N E ======================================= JmpTo_SoundDriverLoad: ; ... nop jsr S2_SoundDriverLoad ; Jump to Sonic 2's SoundDriverLoad move.w #$100,($A11100).l move.w #$100,($A11200).l lea ($A00000).l,a1 moveq #$73,d0 move.b d0,$A0(a1) ; Change certain addresses on the sound driver to point to $200000-based offsets instead move.b d0,$D8(a1) move.b d0,$632(a1) move.b d0,$700(a1) move.b d0,$981(a1) move.b d0,$C75(a1) move.b d0,$C85(a1) move.b d0,$F45(a1) move.w #0,($A11200).l nop nop nop nop move.w #$100,($A11200).l move.w #0,($A11100).l rts ; End of function JmpTo_SoundDriverLoad ; =============== S U B R O U T I N E ======================================= PlayMusic: ; ... tst.b ($FFFFFFE0).w bne.s loc_301074 move.b d0,($FFFFFFE0).w rts ; --------------------------------------------------------------------------- loc_301074: ; ... move.b d0,($FFFFFFE4).w rts ; End of function PlayMusic ; =============== S U B R O U T I N E ======================================= PlaySound: ; ... move.b d0,($FFFFFFE1).w rts ; End of function PlaySound ; =============== S U B R O U T I N E ======================================= PlaySoundStereo: ; ... move.b d0,($FFFFFFE2).w rts ; End of function PlaySoundStereo ; =============== S U B R O U T I N E ======================================= PlaySoundLocal: ; ... tst.b 1(a0) bpl.s return_301090 move.b d0,($FFFFFFE1).w return_301090: ; ... rts ; End of function PlaySoundLocal ; =============== S U B R O U T I N E ======================================= PauseGame: ; ... nop tst.b ($FFFFFE12).w beq.w Unpause tst.w ($FFFFF63A).w bne.s loc_3010B0 move.b ($FFFFF605).w,d0 or.b ($FFFFF607).w,d0 and.b #$80,d0 beq.s return_301108 loc_3010B0: ; ... move.w #1,($FFFFF63A).w move.b #$FE,($FFFFFFE0).w loc_3010BC: ; ... move.b #$10,($FFFFF62A).w bsr.w DelayProgram tst.b ($FFFFFF09).w beq.s Pause_ChkStart btst #6,($FFFFF605).w beq.s Pause_ChkBC move.b #4,($FFFFF600).w nop bra.s loc_3010FC ; --------------------------------------------------------------------------- Pause_ChkBC: ; ... btst #4,($FFFFF604).w bne.s Pause_SlowMo btst #5,($FFFFF605).w bne.s Pause_SlowMo Pause_ChkStart: ; ... move.b ($FFFFF605).w,d0 or.b ($FFFFF607).w,d0 and.b #$80,d0 beq.s loc_3010BC loc_3010FC: ; ... move.b #$FF,($FFFFFFE0).w Unpause: ; ... move.w #0,($FFFFF63A).w return_301108: ; ... rts ; --------------------------------------------------------------------------- Pause_SlowMo: ; ... move.w #1,($FFFFF63A).w move.b #$FF,($FFFFFFE0).w rts ; End of function PauseGame ; =============== S U B R O U T I N E ======================================= ShowVDPGraphics: ; ... lea ($C00000).l,a6 move.l #$800000,d4 loc_301124: ; ... move.l d0,4(a6) move.w d1,d3 loc_30112A: ; ... move.w (a1)+,(a6) dbf d3,loc_30112A add.l d4,d0 dbf d2,loc_301124 rts ; End of function ShowVDPGraphics ; =============== S U B R O U T I N E ======================================= ShowVDPGraphics2: ; ... lea ($C00000).l,a6 move.l #$1000000,d4 loc_301144: ; ... move.l d0,4(a6) move.w d1,d3 loc_30114A: ; ... move.w (a1)+,(a6) dbf d3,loc_30114A add.l d4,d0 dbf d2,loc_301144 rts ; End of function ShowVDPGraphics2 ; DMA_68KtoVRAM: Add_to_DMA_Queue: QueueVDPTransfer: ; =============== S U B R O U T I N E ======================================= QueueDMATransfer: ; ... move.l ($FFFFDCFC).w,a1 cmp.w #$DCFC,a1 beq.s return_3011B4 move.w #$9300,d0 move.b d3,d0 move.w d0,(a1)+ move.w #$9400,d0 lsr.w #8,d3 move.b d3,d0 move.w d0,(a1)+ move.w #$9500,d0 lsr.l #1,d1 move.b d1,d0 move.w d0,(a1)+ move.w #$9600,d0 lsr.l #8,d1 move.b d1,d0 move.w d0,(a1)+ move.w #$9700,d0 lsr.l #8,d1 move.b d1,d0 move.w d0,(a1)+ and.l #$FFFF,d2 lsl.l #2,d2 lsr.w #2,d2 swap d2 or.l #$40000080,d2 move.l d2,(a1)+ move.l a1,($FFFFDCFC).w cmp.w #$DCFC,a1 beq.s return_3011B4 move.w #0,(a1) return_3011B4: ; ... rts ; End of function QueueDMATransfer ; =============== S U B R O U T I N E ======================================= ProcessDMAQueue: ; ... lea ($C00004).l,a5 lea ($FFFFDC00).w,a1 loc_3011C0: ; ... move.w (a1)+,d0 beq.s loc_3011D8 move.w d0,(a5) move.w (a1)+,(a5) move.w (a1)+,(a5) move.w (a1)+,(a5) move.w (a1)+,(a5) move.w (a1)+,(a5) move.w (a1)+,(a5) cmp.w #$DCFC,a1 bne.s loc_3011C0 loc_3011D8: ; ... move.w #0,($FFFFDC00).w move.l #$FFFFDC00,($FFFFDCFC).w rts ; End of function ProcessDMAQueue ; =============== S U B R O U T I N E ======================================= NemDec: ; ... movem.l d0-a1/a3-a5,-(sp) lea (NemDec_WriteAndStay).l,a3 lea ($C00000).l,a4 bra.s NemDecMain ; --------------------------------------------------------------------------- NemDecToRAM: ; ... movem.l d0-a1/a3-a5,-(sp) lea (NemDec_WriteAndAdvance).l,a3 NemDecMain: ; ... lea ($FFFFAA00).w,a1 move.w (a0)+,d2 lsl.w #1,d2 bcc.s loc_301212 add.w #$A,a3 loc_301212: ; ... lsl.w #2,d2 move.w d2,a5 moveq #8,d3 moveq #0,d2 moveq #0,d4 bsr.w NemDecPrepare move.b (a0)+,d5 asl.w #8,d5 move.b (a0)+,d5 move.w #$10,d6 bsr.s NemDecRun movem.l (sp)+,d0-a1/a3-a5 rts ; End of function NemDec ; =============== S U B R O U T I N E ======================================= NemDecRun: ; ... move.w d6,d7 subq.w #8,d7 move.w d5,d1 lsr.w d7,d1 cmp.b #$FC,d1 bcc.s loc_30127E and.w #$FF,d1 add.w d1,d1 move.b (a1,d1.w),d0 ext.w d0 sub.w d0,d6 cmp.w #9,d6 bcc.s loc_30125A addq.w #8,d6 asl.w #8,d5 move.b (a0)+,d5 loc_30125A: ; ... move.b 1(a1,d1.w),d1 move.w d1,d0 and.w #$F,d1 and.w #$F0,d0 loc_301268: ; ... lsr.w #4,d0 loc_30126A: ; ... lsl.l #4,d4 or.b d1,d4 subq.w #1,d3 bne.s NemDec_WriteIter_Part2 jmp (a3) ; --------------------------------------------------------------------------- NemDec_WriteIter: ; ... moveq #0,d4 moveq #8,d3 NemDec_WriteIter_Part2: ; ... dbf d0,loc_30126A bra.s NemDecRun ; --------------------------------------------------------------------------- loc_30127E: ; ... subq.w #6,d6 cmp.w #9,d6 bcc.s loc_30128C addq.w #8,d6 asl.w #8,d5 move.b (a0)+,d5 loc_30128C: ; ... subq.w #7,d6 move.w d5,d1 lsr.w d6,d1 move.w d1,d0 and.w #$F,d1 and.w #$70,d0 cmp.w #9,d6 bcc.s loc_301268 addq.w #8,d6 asl.w #8,d5 move.b (a0)+,d5 bra.s loc_301268 ; End of function NemDecRun ; =============== S U B R O U T I N E ======================================= NemDec_WriteAndStay: ; ... move.l d4,(a4) subq.w #1,a5 move.w a5,d4 bne.s NemDec_WriteIter rts ; End of function NemDec_WriteAndStay ; =============== S U B R O U T I N E ======================================= NemDec_WriteAndStay_XOR: ; ... eor.l d4,d2 move.l d2,(a4) subq.w #1,a5 move.w a5,d4 bne.s NemDec_WriteIter rts ; End of function NemDec_WriteAndStay_XOR ; --------------------------------------------------------------------------- NemDec_WriteAndAdvance: ; ... move.l d4,(a4)+ subq.w #1,a5 move.w a5,d4 bne.s NemDec_WriteIter rts ; =============== S U B R O U T I N E ======================================= NemDec_WriteAndAdvance_XOR: eor.l d4,d2 move.l d2,(a4)+ subq.w #1,a5 move.w a5,d4 bne.s NemDec_WriteIter rts ; End of function NemDec_WriteAndAdvance_XOR ; =============== S U B R O U T I N E ======================================= NemDecPrepare: ; ... move.b (a0)+,d0 loc_3012D8: ; ... cmp.b #$FF,d0 bne.s loc_3012E0 rts ; --------------------------------------------------------------------------- loc_3012E0: ; ... move.w d0,d7 loc_3012E2: ; ... move.b (a0)+,d0 cmp.b #$80,d0 bcc.s loc_3012D8 move.b d0,d1 and.w #$F,d7 and.w #$70,d1 or.w d1,d7 and.w #$F,d0 move.b d0,d1 lsl.w #8,d1 or.w d1,d7 moveq #8,d1 sub.w d0,d1 bne.s loc_301310 move.b (a0)+,d0 add.w d0,d0 move.w d7,(a1,d0.w) bra.s loc_3012E2 ; --------------------------------------------------------------------------- loc_301310: ; ... move.b (a0)+,d0 lsl.w d1,d0 add.w d0,d0 moveq #1,d5 lsl.w d1,d5 subq.w #1,d5 loc_30131C: ; ... move.w d7,(a1,d0.w) addq.w #2,d0 dbf d5,loc_30131C bra.s loc_3012E2 ; End of function NemDecPrepare ; End of Nemesis decompression routine ; =============== S U B R O U T I N E ======================================= LoadPLC: ; ... movem.l a1-a2,-(sp) lea (ArtLoadCues).l,a1 add.w d0,d0 move.w (a1,d0.w),d0 lea (a1,d0.w),a1 lea ($FFFFF680).w,a2 loc_301340: ; ... tst.l (a2) beq.s loc_301348 addq.w #6,a2 bra.s loc_301340 ; --------------------------------------------------------------------------- loc_301348: ; ... move.w (a1)+,d0 bmi.s loc_301354 loc_30134C: ; ... move.l (a1)+,(a2)+ move.w (a1)+,(a2)+ dbf d0,loc_30134C loc_301354: ; ... movem.l (sp)+,a1-a2 rts ; End of function LoadPLC ; =============== S U B R O U T I N E ======================================= LoadPLC2: ; ... movem.l a1-a2,-(sp) lea (ArtLoadCues).l,a1 add.w d0,d0 move.w (a1,d0.w),d0 lea (a1,d0.w),a1 bsr.s ClearPLC lea ($FFFFF680).w,a2 move.w (a1)+,d0 bmi.s loc_301380 loc_301378: ; ... move.l (a1)+,(a2)+ move.w (a1)+,(a2)+ dbf d0,loc_301378 loc_301380: ; ... movem.l (sp)+,a1-a2 rts ; End of function LoadPLC2 ; =============== S U B R O U T I N E ======================================= ClearPLC: ; ... lea ($FFFFF680).w,a2 moveq #$1F,d0 loc_30138C: ; ... clr.l (a2)+ dbf d0,loc_30138C rts ; End of function ClearPLC ; =============== S U B R O U T I N E ======================================= RunPLC_RAM: ; ... tst.l ($FFFFF680).w beq.s return_3013EA tst.w ($FFFFF6F8).w bne.s return_3013EA move.l ($FFFFF680).w,a0 lea (NemDec_WriteAndStay).l,a3 nop lea ($FFFFAA00).w,a1 move.w (a0)+,d2 bpl.s loc_3013B8 add.w #NemDec_WriteAndStay_XOR-NemDec_WriteAndStay,a3 loc_3013B8: ; ... and.w #$7FFF,d2 move.w d2,($FFFFF6F8).w bsr.w NemDecPrepare move.b (a0)+,d5 asl.w #8,d5 move.b (a0)+,d5 moveq #$10,d6 moveq #0,d0 move.l a0,($FFFFF680).w move.l a3,($FFFFF6E0).w move.l d0,($FFFFF6E4).w move.l d0,($FFFFF6E8).w move.l d0,($FFFFF6EC).w move.l d5,($FFFFF6F0).w move.l d6,($FFFFF6F4).w return_3013EA: ; ... rts ; End of function RunPLC_RAM ; =============== S U B R O U T I N E ======================================= ProcessDPLC: ; ... tst.w ($FFFFF6F8).w beq.w return_301484 move.w #6,($FFFFF6FA).w moveq #0,d0 move.w ($FFFFF684).w,d0 add.w #$C0,($FFFFF684).w bra.s ProcessDPLC_Main ; --------------------------------------------------------------------------- ProcessDPLC2: ; ... tst.w ($FFFFF6F8).w beq.s return_301484 move.w #3,($FFFFF6FA).w moveq #0,d0 move.w ($FFFFF684).w,d0 add.w #$60,($FFFFF684).w ProcessDPLC_Main: ; ... lea ($C00004).l,a4 lsl.l #2,d0 lsr.w #2,d0 or.w #$4000,d0 swap d0 move.l d0,(a4) subq.w #4,a4 move.l ($FFFFF680).w,a0 move.l ($FFFFF6E0).w,a3 move.l ($FFFFF6E4).w,d0 move.l ($FFFFF6E8).w,d1 move.l ($FFFFF6EC).w,d2 move.l ($FFFFF6F0).w,d5 move.l ($FFFFF6F4).w,d6 lea ($FFFFAA00).w,a1 loc_301454: ; ... move.w #8,a5 bsr.w NemDec_WriteIter subq.w #1,($FFFFF6F8).w beq.s ProcessDPLC_Pop subq.w #1,($FFFFF6FA).w bne.s loc_301454 move.l a0,($FFFFF680).w move.l a3,($FFFFF6E0).w move.l d0,($FFFFF6E4).w move.l d1,($FFFFF6E8).w move.l d2,($FFFFF6EC).w move.l d5,($FFFFF6F0).w move.l d6,($FFFFF6F4).w return_301484: ; ... rts ; --------------------------------------------------------------------------- ProcessDPLC_Pop: ; ... lea ($FFFFF680).w,a0 moveq #$15,d0 loc_30148C: ; ... move.l 6(a0),(a0)+ dbf d0,loc_30148C rts ; End of function ProcessDPLC ; =============== S U B R O U T I N E ======================================= RunPLC_ROM: ; ... lea (ArtLoadCues).l,a1 add.w d0,d0 move.w (a1,d0.w),d0 lea (a1,d0.w),a1 move.w (a1)+,d1 loc_3014A8: ; ... move.l (a1)+,a0 moveq #0,d0 move.w (a1)+,d0 lsl.l #2,d0 lsr.w #2,d0 or.w #$4000,d0 swap d0 move.l d0,($C00004).l bsr.w NemDec dbf d1,loc_3014A8 rts ; End of function RunPLC_ROM ; Enigma decompression routine ; =============== S U B R O U T I N E ======================================= EniDec: ; ... movem.l d0-d7/a1-a5,-(sp) ; Enigma decompression routine move.w d0,a3 move.b (a0)+,d0 ext.w d0 move.w d0,a5 move.b (a0)+,d4 lsl.b #3,d4 move.w (a0)+,a2 add.w a3,a2 move.w (a0)+,a4 add.w a3,a4 move.b (a0)+,d5 asl.w #8,d5 move.b (a0)+,d5 moveq #$10,d6 loc_3014E8: ; ... moveq #7,d0 move.w d6,d7 sub.w d0,d7 move.w d5,d1 lsr.w d7,d1 and.w #$7F,d1 move.w d1,d2 cmp.w #$40,d1 bcc.s loc_301502 moveq #6,d0 lsr.w #1,d2 loc_301502: ; ... bsr.w sub_301636 and.w #$F,d2 lsr.w #4,d1 add.w d1,d1 jmp Enigma_JumpTable(pc,d1.w) ; End of function EniDec ; --------------------------------------------------------------------------- loc_301512: ; ... move.w a2,(a1)+ addq.w #1,a2 dbf d2,loc_301512 bra.s loc_3014E8 ; --------------------------------------------------------------------------- loc_30151C: ; ... move.w a4,(a1)+ dbf d2,loc_30151C bra.s loc_3014E8 ; --------------------------------------------------------------------------- loc_301524: ; ... bsr.w sub_301586 loc_301528: ; ... move.w d1,(a1)+ dbf d2,loc_301528 bra.s loc_3014E8 ; --------------------------------------------------------------------------- loc_301530: ; ... bsr.w sub_301586 loc_301534: ; ... move.w d1,(a1)+ addq.w #1,d1 dbf d2,loc_301534 bra.s loc_3014E8 ; --------------------------------------------------------------------------- loc_30153E: ; ... bsr.w sub_301586 loc_301542: ; ... move.w d1,(a1)+ subq.w #1,d1 dbf d2,loc_301542 bra.s loc_3014E8 ; --------------------------------------------------------------------------- loc_30154C: ; ... cmp.w #$F,d2 beq.s loc_30156E loc_301552: ; ... bsr.w sub_301586 move.w d1,(a1)+ dbf d2,loc_301552 bra.s loc_3014E8 ; --------------------------------------------------------------------------- Enigma_JumpTable: bra.s loc_301512 ; --------------------------------------------------------------------------- bra.s loc_301512 ; --------------------------------------------------------------------------- bra.s loc_30151C ; --------------------------------------------------------------------------- bra.s loc_30151C ; --------------------------------------------------------------------------- bra.s loc_301524 ; --------------------------------------------------------------------------- bra.s loc_301530 ; --------------------------------------------------------------------------- bra.s loc_30153E ; --------------------------------------------------------------------------- bra.s loc_30154C ; --------------------------------------------------------------------------- loc_30156E: ; ... subq.w #1,a0 cmp.w #$10,d6 bne.s loc_301578 subq.w #1,a0 loc_301578: ; ... move.w a0,d0 lsr.w #1,d0 bcc.s loc_301580 addq.w #1,a0 loc_301580: ; ... movem.l (sp)+,d0-d7/a1-a5 rts ; =============== S U B R O U T I N E ======================================= sub_301586: ; ... move.w a3,d3 move.b d4,d1 add.b d1,d1 bcc.s loc_301598 subq.w #1,d6 btst d6,d5 beq.s loc_301598 or.w #$8000,d3 loc_301598: ; ... add.b d1,d1 bcc.s loc_3015A6 subq.w #1,d6 btst d6,d5 beq.s loc_3015A6 add.w #$4000,d3 loc_3015A6: ; ... add.b d1,d1 bcc.s loc_3015B4 subq.w #1,d6 btst d6,d5 beq.s loc_3015B4 add.w #$2000,d3 loc_3015B4: ; ... add.b d1,d1 bcc.s loc_3015C2 subq.w #1,d6 btst d6,d5 beq.s loc_3015C2 or.w #$1000,d3 loc_3015C2: ; ... add.b d1,d1 bcc.s loc_3015D0 subq.w #1,d6 btst d6,d5 beq.s loc_3015D0 or.w #$800,d3 loc_3015D0: ; ... move.w d5,d1 move.w d6,d7 sub.w a5,d7 bcc.s loc_301600 move.w d7,d6 add.w #$10,d6 neg.w d7 lsl.w d7,d1 move.b (a0),d5 rol.b d7,d5 add.w d7,d7 and.w word_301616-2(pc,d7.w),d5 add.w d5,d1 loc_3015EE: ; ... move.w a5,d0 add.w d0,d0 and.w word_301616-2(pc,d0.w),d1 add.w d3,d1 move.b (a0)+,d5 lsl.w #8,d5 move.b (a0)+,d5 rts ; --------------------------------------------------------------------------- loc_301600: ; ... beq.s loc_301612 lsr.w d7,d1 move.w a5,d0 add.w d0,d0 and.w word_301616-2(pc,d0.w),d1 add.w d3,d1 move.w a5,d0 bra.s sub_301636 ; --------------------------------------------------------------------------- loc_301612: ; ... moveq #$10,d6 loc_301614: bra.s loc_3015EE ; End of function sub_301586 ; --------------------------------------------------------------------------- word_301616: dc.w 1, 3, 7, $F, $1F, $3F, $7F, $FF, $1FF; 0 ; ... dc.w $3FF, $7FF, $FFF,$1FFF,$3FFF,$7FFF,$FFFF; 9 ; =============== S U B R O U T I N E ======================================= sub_301636: ; ... sub.w d0,d6 cmp.w #9,d6 bcc.s return_301644 addq.w #8,d6 asl.w #8,d5 move.b (a0)+,d5 return_301644: ; ... rts ; End of function sub_301636 ; ; Kosinski/LZSS+ decompression routine ; ; =============== S U B R O U T I N E ======================================= KosDec: ; ... subq.l #2,sp move.b (a0)+,1(sp) move.b (a0)+,(sp) move.w (sp),d5 moveq #$F,d4 loc_301652: ; ... lsr.w #1,d5 move sr,d6 dbf d4,loc_301664 move.b (a0)+,1(sp) move.b (a0)+,(sp) move.w (sp),d5 moveq #$F,d4 loc_301664: ; ... move d6,ccr bcc.s loc_30166C move.b (a0)+,(a1)+ bra.s loc_301652 ; --------------------------------------------------------------------------- loc_30166C: ; ... moveq #0,d3 lsr.w #1,d5 move sr,d6 dbf d4,loc_301680 move.b (a0)+,1(sp) move.b (a0)+,(sp) move.w (sp),d5 moveq #$F,d4 loc_301680: ; ... move d6,ccr bcs.s loc_3016B0 lsr.w #1,d5 dbf d4,loc_301694 move.b (a0)+,1(sp) move.b (a0)+,(sp) move.w (sp),d5 moveq #$F,d4 loc_301694: ; ... roxl.w #1,d3 lsr.w #1,d5 dbf d4,loc_3016A6 move.b (a0)+,1(sp) move.b (a0)+,(sp) move.w (sp),d5 moveq #$F,d4 loc_3016A6: ; ... roxl.w #1,d3 addq.w #1,d3 moveq #-1,d2 move.b (a0)+,d2 bra.s loc_3016C6 ; --------------------------------------------------------------------------- loc_3016B0: ; ... move.b (a0)+,d0 move.b (a0)+,d1 moveq #-1,d2 move.b d1,d2 lsl.w #5,d2 move.b d0,d2 and.w #7,d1 beq.s loc_3016D2 move.b d1,d3 addq.w #1,d3 loc_3016C6: ; ... move.b (a1,d2.w),d0 move.b d0,(a1)+ dbf d3,loc_3016C6 bra.s loc_301652 ; --------------------------------------------------------------------------- loc_3016D2: ; ... move.b (a0)+,d1 beq.s loc_3016E2 cmp.b #1,d1 beq.w loc_301652 move.b d1,d3 bra.s loc_3016C6 ; --------------------------------------------------------------------------- loc_3016E2: ; ... addq.l #2,sp rts ; End of function KosDec ; =============== S U B R O U T I N E ======================================= PalCycle_Load: ; ... bsr.w PalCycle_SuperKnuckles moveq #0,d2 moveq #0,d0 move.b ($FFFFFE10).w,d0 add.w d0,d0 move.w PalCycle_Index(pc,d0.w),d0 jmp PalCycle_Index(pc,d0.w) ; End of function PalCycle_Load ; --------------------------------------------------------------------------- rts ; --------------------------------------------------------------------------- PalCycle_Index: dc.w PalCycle_EHZ-PalCycle_Index ; 0 ; ... dc.w PalCycle_Null-PalCycle_Index ; 1 dc.w PalCycle_Lv2-PalCycle_Index ; 2 dc.w PalCycle_Null-PalCycle_Index ; 3 dc.w PalCycle_MTZ-PalCycle_Index ; 4 dc.w PalCycle_MTZ-PalCycle_Index ; 5 dc.w PalCycle_WFZ-PalCycle_Index ; 6 dc.w PalCycle_HTZ-PalCycle_Index ; 7 dc.w PalCycle_HPZ-PalCycle_Index ; 8 dc.w PalCycle_Null-PalCycle_Index ; 9 dc.w PalCycle_OOZ-PalCycle_Index ; 10 dc.w PalCycle_MCZ-PalCycle_Index ; 11 dc.w PalCycle_CNZ-PalCycle_Index ; 12 dc.w PalCycle_CPZ-PalCycle_Index ; 13 dc.w PalCycle_CPZ-PalCycle_Index ; 14 dc.w PalCycle_ARZ-PalCycle_Index ; 15 dc.w PalCycle_WFZ-PalCycle_Index ; 16 ; =============== S U B R O U T I N E ======================================= PalCycle_Null: ; ... rts ; End of function PalCycle_Null ; =============== S U B R O U T I N E ======================================= PalCycle_EHZ: ; ... lea (RotPal_EHZARZ_Water).l,a0 subq.w #1,($FFFFF634).w bpl.s return_30174E move.w #7,($FFFFF634).w move.w ($FFFFF632).w,d0 addq.w #1,($FFFFF632).w and.w #3,d0 lsl.w #3,d0 move.l (a0,d0.w),($FFFFFB26).w move.l 4(a0,d0.w),($FFFFFB3C).w return_30174E: ; ... rts ; End of function PalCycle_EHZ ; =============== S U B R O U T I N E ======================================= PalCycle_Lv2: ; ... subq.w #1,($FFFFF634).w bpl.s return_30177E move.w #2,($FFFFF634).w lea (word_301C24).l,a0 move.w ($FFFFF632).w,d0 subq.w #2,($FFFFF632).w bcc.s loc_301772 move.w #6,($FFFFF632).w loc_301772: ; ... lea ($FFFFFB66).w,a1 move.l (a0,d0.w),(a1)+ move.l 4(a0,d0.w),(a1) return_30177E: ; ... rts ; End of function PalCycle_Lv2 ; =============== S U B R O U T I N E ======================================= PalCycle_MTZ: ; ... subq.w #1,($FFFFF634).w bpl.s loc_3017B0 move.w #$11,($FFFFF634).w lea (word_301C34).l,a0 move.w ($FFFFF632).w,d0 addq.w #2,($FFFFF632).w cmp.w #$C,($FFFFF632).w bcs.s loc_3017A8 move.w #0,($FFFFF632).w loc_3017A8: ; ... lea ($FFFFFB4A).w,a1 move.w (a0,d0.w),(a1) loc_3017B0: ; ... subq.w #1,($FFFFF666).w bpl.s loc_3017E4 move.w #2,($FFFFF666).w lea (word_301C40).l,a0 move.w ($FFFFF652).w,d0 addq.w #2,($FFFFF652).w cmp.w #6,($FFFFF652).w bcs.s loc_3017D8 move.w #0,($FFFFF652).w loc_3017D8: ; ... lea ($FFFFFB42).w,a1 move.l (a0,d0.w),(a1)+ move.w 4(a0,d0.w),(a1) loc_3017E4: ; ... subq.w #1,($FFFFF668).w bpl.s return_301814 move.w #9,($FFFFF668).w lea (word_301C4C).l,a0 move.w ($FFFFF654).w,d0 addq.w #2,($FFFFF654).w cmp.w #$14,($FFFFF654).w bcs.s loc_30180C move.w #0,($FFFFF654).w loc_30180C: ; ... lea ($FFFFFB5E).w,a1 move.w (a0,d0.w),(a1) return_301814: ; ... rts ; End of function PalCycle_MTZ ; --------------------------------------------------------------------------- PalCycle_HTZ: ; ... lea (RotPal_HTZ).l,a0 subq.w #1,($FFFFF634).w bpl.s return_301848 move.w #0,($FFFFF634).w move.w ($FFFFF632).w,d0 addq.w #1,($FFFFF632).w and.w #$F,d0 move.b byte_30184A(pc,d0.w),($FFFFF635).w lsl.w #3,d0 move.l (a0,d0.w),($FFFFFB26).w move.l 4(a0,d0.w),($FFFFFB3C).w return_301848: ; ... rts ; --------------------------------------------------------------------------- byte_30184A: dc.b $B, $B, $B, $A, 8, $A, $B, $B, $B, $B; 0 dc.b $D, $F, $D, $B, $B, $B; 10 ; --------------------------------------------------------------------------- PalCycle_HPZ: ; ... subq.w #1,($FFFFF634).w bpl.s return_30189A move.w #4,($FFFFF634).w lea (word_301C60).l,a0 move.w ($FFFFF632).w,d0 subq.w #2,($FFFFF632).w bcc.s loc_30187C move.w #6,($FFFFF632).w loc_30187C: ; ... lea ($FFFFFB72).w,a1 move.l (a0,d0.w),(a1)+ move.l 4(a0,d0.w),(a1) lea (word_301C70).l,a0 lea ($FFFFF0F2).w,a1 move.l (a0,d0.w),(a1)+ move.l 4(a0,d0.w),(a1) return_30189A: ; ... rts ; --------------------------------------------------------------------------- PalCycle_OOZ: ; ... subq.w #1,($FFFFF634).w bpl.s return_3018C8 move.w #7,($FFFFF634).w lea (word_301C80).l,a0 move.w ($FFFFF632).w,d0 addq.w #2,($FFFFF632).w and.w #6,($FFFFF632).w lea ($FFFFFB54).w,a1 move.l (a0,d0.w),(a1)+ move.l 4(a0,d0.w),(a1) return_3018C8: ; ... rts ; --------------------------------------------------------------------------- PalCycle_MCZ: ; ... tst.b ($FFFFF7AA).w bne.s return_3018F6 subq.w #1,($FFFFF634).w bpl.s return_3018F6 move.w #1,($FFFFF634).w lea (word_301C90).l,a0 move.w ($FFFFF632).w,d0 addq.w #2,($FFFFF632).w and.w #6,($FFFFF632).w move.w (a0,d0.w),($FFFFFB36).w return_3018F6: ; ... rts ; --------------------------------------------------------------------------- PalCycle_CNZ: ; ... subq.w #1,($FFFFF634).w bpl.w loc_301996 move.w #7,($FFFFF634).w lea (word_301C98).l,a0 move.w ($FFFFF632).w,d0 addq.w #2,($FFFFF632).w cmp.w #6,($FFFFF632).w bcs.s loc_301922 move.w #0,($FFFFF632).w loc_301922: ; ... lea (a0,d0.w),a0 lea ($FFFFFB00).w,a1 move.w 0(a0),$4A(a1) move.w 6(a0),$4C(a1) move.w $C(a0),$4E(a1) move.w $12(a0),$56(a1) move.w $18(a0),$58(a1) move.w $1E(a0),$5A(a1) lea (word_301CBC).l,a0 lea (a0,d0.w),a0 move.w 0(a0),$64(a1) move.w 6(a0),$66(a1) move.w $C(a0),$68(a1) lea (word_301CCE).l,a0 move.w ($FFFFF650).w,d0 addq.w #2,($FFFFF650).w cmp.w #$24,($FFFFF650).w bcs.s loc_301986 move.w #0,($FFFFF650).w loc_301986: ; ... lea ($FFFFFB72).w,a1 move.w 4(a0,d0.w),(a1)+ move.w 2(a0,d0.w),(a1)+ move.w (a0,d0.w),(a1)+ loc_301996: ; ... tst.b ($FFFFF7AA).w beq.w return_301A1E subq.w #1,($FFFFF666).w bpl.w return_301A1E move.w #3,($FFFFF666).w move.w ($FFFFF652).w,d0 addq.w #2,($FFFFF652).w cmp.w #6,($FFFFF652).w bcs.s loc_3019C2 move.w #0,($FFFFF652).w loc_3019C2: ; ... lea (word_301CF6).l,a0 lea (a0,d0.w),a0 lea ($FFFFFB00).w,a1 move.w 0(a0),$24(a1) move.w 6(a0),$26(a1) move.w $C(a0),$28(a1) lea (word_301D08).l,a0 move.w ($FFFFF654).w,d0 addq.w #2,($FFFFF654).w cmp.w #$14,($FFFFF654).w bcs.s loc_3019FE move.w #0,($FFFFF654).w loc_3019FE: ; ... move.w (a0,d0.w),$3C(a1) lea (word_301D1C).l,a0 move.w ($FFFFF656).w,d0 addq.w #2,($FFFFF656).w and.w #$E,($FFFFF656).w move.w (a0,d0.w),$3E(a1) return_301A1E: ; ... rts ; --------------------------------------------------------------------------- PalCycle_CPZ: ; ... subq.w #1,($FFFFF634).w bpl.s return_301A90 move.w #7,($FFFFF634).w lea (word_301D2C).l,a0 move.w ($FFFFF632).w,d0 addq.w #6,($FFFFF632).w cmp.w #$36,($FFFFF632).w bcs.s loc_301A48 move.w #0,($FFFFF632).w loc_301A48: ; ... lea ($FFFFFB78).w,a1 move.l (a0,d0.w),(a1)+ move.w 4(a0,d0.w),(a1) lea (word_301D62).l,a0 move.w ($FFFFF652).w,d0 addq.w #2,($FFFFF652).w cmp.w #$2A,($FFFFF652).w bcs.s loc_301A70 move.w #0,($FFFFF652).w loc_301A70: ; ... move.w (a0,d0.w),($FFFFFB7E).w lea (word_301D8C).l,a0 move.w ($FFFFF654).w,d0 addq.w #2,($FFFFF654).w and.w #$1E,($FFFFF654).w move.w (a0,d0.w),($FFFFFB5E).w return_301A90: ; ... rts ; --------------------------------------------------------------------------- PalCycle_ARZ: ; ... lea (RotPal_EHZARZ_Water).l,a0 subq.w #1,($FFFFF634).w bpl.s return_301ABE move.w #5,($FFFFF634).w move.w ($FFFFF632).w,d0 addq.w #1,($FFFFF632).w and.w #3,d0 lsl.w #3,d0 lea ($FFFFFB44).w,a1 move.l (a0,d0.w),(a1)+ move.l 4(a0,d0.w),(a1) return_301ABE: ; ... rts ; --------------------------------------------------------------------------- PalCycle_WFZ: ; ... subq.w #1,($FFFFF634).w bpl.s loc_301B06 move.w #1,($FFFFF634).w lea (word_301DAC).l,a0 tst.b ($FFFFF72E).w beq.s loc_301AE4 move.w #5,($FFFFF634).w lea (word_301DCC).l,a0 loc_301AE4: ; ... move.w ($FFFFF632).w,d0 addq.w #8,($FFFFF632).w cmp.w #$20,($FFFFF632).w bcs.s loc_301AFA move.w #0,($FFFFF632).w loc_301AFA: ; ... lea ($FFFFFB4E).w,a1 move.l (a0,d0.w),(a1)+ move.l 4(a0,d0.w),(a1) loc_301B06: ; ... subq.w #1,($FFFFF666).w bpl.s loc_301B34 move.w #3,($FFFFF666).w lea (word_301DEC).l,a0 move.w ($FFFFF652).w,d0 addq.w #2,($FFFFF652).w cmp.w #$44,($FFFFF652).w bcs.s loc_301B2E move.w #0,($FFFFF652).w loc_301B2E: ; ... move.w (a0,d0.w),($FFFFFB5C).w loc_301B34: ; ... subq.w #1,($FFFFF668).w bpl.s return_301B62 move.w #5,($FFFFF668).w lea (word_301E30).l,a0 move.w ($FFFFF654).w,d0 addq.w #2,($FFFFF654).w cmp.w #$18,($FFFFF654).w bcs.s loc_301B5C move.w #0,($FFFFF654).w loc_301B5C: ; ... move.w (a0,d0.w),($FFFFFB5E).w return_301B62: ; ... rts ; --------------------------------------------------------------------------- dc.w $C42, $E86, $ECA, $EEC, $EEC, $C42, $E86, $ECA, $ECA; 0 dc.w $EEC, $C42, $E86, $E86, $ECA, $EEC, $C42; 9 RotPal_EHZARZ_Water:dc.w $A86, $E86, $EA8, $ECA, $ECA, $A86, $E86, $EA8, $EA8; 0 ; ... dc.w $ECA, $A86, $E86, $E86, $EA8, $ECA, $A86; 9 RotPal_HTZ: dc.w $E, $6E, $AE, $EE, $EE, $E, $6E, $AE, $2CE; 0 ; ... dc.w $EE, $E, $6E, $6E, $4EE, $8EE, $2E, $4E, $8E; 9 dc.w $6EE, $AEE, $8EE, $2E, $6E, $4EE, $2CE, $EE, $E; 18 dc.w $6E, $6E, $2CE, $EE, $E, $E, $6E, $AE, $EE; 27 dc.w $CE, $C, $4E, $8E, $6E, $AC, $A, $2E, $C; 36 dc.w $4C, $8E, 8, $A, $2E, $6E, $AC, $CE, $C; 45 dc.w $4E, $8E, $AE, $EE, $E, $6E, $6E, $AE, $EE; 54 dc.w $E ; 63 word_301C24: dc.w $248, $46A, $48C, $6CE, $248, $46A, $48C, $6CE; 0 ; ... word_301C34: dc.w 6, 8, $A, $C, $A, 8; 0 ; ... word_301C40: dc.w $422, $866, $ECC, $422, $866, $ECC; 0 ; ... word_301C4C: dc.w $A0, 0, $EE, 0, $2E, 0, $E2E, 0, $E80; 0 ; ... dc.w 0 ; 9 word_301C60: dc.w $E44, $E82, $EA8, $EEE, $E44, $E82, $EA8, $EEE; 0 ; ... word_301C70: dc.w $E84, $EA6, $EC6, $EE6, $E84, $EA6, $EC6, $EE6; 0 ; ... word_301C80: dc.w $400, $602, $804, $806, $400, $602, $804, $806; 0 ; ... word_301C90: dc.w $C, $6E, $CE, $8EE ; 0 ; ... word_301C98: dc.w $E, $EE, $6E, $6E, $E, $EE, $EE, $6E, $E; 0 ; ... dc.w $EC, $80, $C4, $C4, $EC, $80, $80, $C4, $EC; 9 word_301CBC: dc.w $C06, $C0A, $C2E, $C0A, $C2E, $C06, $C2E, $C06, $C0A; 0 ; ... word_301CCE: dc.w $8E, $AE, $EC, $EEE, $EA, $E4, $6C0, $CC4, $E80; 0 ; ... dc.w $E40, $E04, $C08, $C2E, $80E, $40E, $E, $4E, $6E; 9 dc.w $8E, $AE ; 18 word_301CF6: dc.w $6E, $AE, $EE, $AE, $EE, $6E, $EE, $6E, $AE; 0 ; ... word_301D08: dc.w $A0E, $C0C, $EA0, $AE, $EA, $AE0, $EA, $AE, $EA0; 0 ; ... dc.w $C0C ; 9 word_301D1C: dc.w $E, $C, $A, 8, 6, 8, $A, $C; 0 ; ... word_301D2C: dc.w $E40, $C00, $C00, $E60, $C20, $C00, $E40, $E40, $C00; 0 ; ... dc.w $C20, $E60, $C20, $C00, $E40, $C40, $C00, $C20, $E40; 9 dc.w $C00, $C00, $E60, $C20, $C00, $E40, $E20, $C00, $C20; 18 word_301D62: dc.w $E0, $C2, $A4, $86, $68, $4A, $2C, $E, $20C; 0 ; ... dc.w $40A, $608, $806, $A04, $C02, $E00, $C20, $A40, $860; 9 dc.w $680, $4A0, $2C0 ; 18 word_301D8C: dc.w $E, $C, $A, 8, 6, 4, 2, 4, 6; 0 ; ... dc.w 8, $A, $C, $E, $2E, $4E, $2E; 9 word_301DAC: dc.w $4EE, $2AE, $6E, $2C, $EEE, $4EE, $2AE, $6E, $4EE; 0 ; ... dc.w $2AE, $6E, $2C, $2AE, $6E, $2C, $28; 9 word_301DCC: dc.w 0, $444, $444, $444, $444, 0, $444, $444, $444; 0 ; ... dc.w $444, 0, $444, $444, $444, $444, 0; 9 word_301DEC: dc.w $E0, $A0, $60, $20, 0, $200, $600, $A20, $E60; 0 ; ... dc.w $A20, $600, $200, 0, 2, 6, $A, $E, $4E; 9 dc.w $E, $A, 6, 2, 0, $22, $66, $AA, $EE; 18 dc.w $AA, $66, $22, 0, $20, $60, $A0; 27 word_301E30: dc.w $EC0, 0, $E0E, 0, $EE, 0, $E0, 0, $8E; 0 ; ... dc.w 0, $EEE, 0 ; 9 ; =============== S U B R O U T I N E ======================================= PalCycle_SuperKnuckles: ; ... move.b ($FFFFF65F).w,d0 beq.s return_301E74 bmi.w loc_301E8A subq.b #1,d0 bne.s loc_301E76 subq.b #1,($FFFFF65E).w bpl.s return_301E74 move.b #3,($FFFFF65E).w move.b #$FF,($FFFFF65F).w move.w #0,($FFFFF65C).w move.b #0,($FFFFB02A).w return_301E74: ; ... rts ; --------------------------------------------------------------------------- loc_301E76: ; ... moveq #0,d0 move.w d0,($FFFFF65C).w move.b d0,($FFFFF65F).w lea (Pal_KnucklesReds).l,a0 bra.w loc_301EBA ; --------------------------------------------------------------------------- loc_301E8A: ; ... subq.b #1,($FFFFF65E).w bpl.w return_301E74 move.b #2,($FFFFF65E).w lea (Pal_SuperKnuckles).l,a0 move.w ($FFFFF65C).w,d0 addq.w #6,($FFFFF65C).w cmp.w #$3C,($FFFFF65C).w bcs.s loc_301EBA move.w #0,($FFFFF65C).w move.b #$E,($FFFFF65E).w loc_301EBA: ; ... lea ($FFFFFB04).w,a1 move.l (a0,d0.w),(a1)+ move.w 4(a0,d0.w),2(a1) tst.b ($FFFFF730).w beq.w return_301E74 lea ($FFFFF084).w,a1 move.l (a0,d0.w),(a1)+ move.w 4(a0,d0.w),2(a1) rts ; End of function PalCycle_SuperKnuckles ; --------------------------------------------------------------------------- Pal_SuperKnuckles:dc.w $428, $64E, $A6E, $64A, $86E, $C8E, $86C, $A8E, $EAE; 0 ; ... dc.w $A8E, $CAE, $ECE, $CAE, $ECE, $EEE, $A8E, $CAE, $ECE; 9 dc.w $86C, $A8E, $EAE, $64A, $86E, $C8E, $428, $64E, $A6E; 18 dc.w $206, $40C, $84E ; 27 Pal_KnucklesReds:dc.w $206, $20C, $64E ; 0 ; ... ; =============== S U B R O U T I N E ======================================= Pal_FadeTo: ; ... move.w #$3F,($FFFFF626).w moveq #0,d0 lea ($FFFFFB00).w,a0 move.b ($FFFFF626).w,d0 add.w d0,a0 moveq #0,d1 move.b ($FFFFF627).w,d0 Pal_ToBlack: ; ... move.w d1,(a0)+ dbf d0,Pal_ToBlack move.w #$15,d4 loc_301F44: ; ... move.b #$12,($FFFFF62A).w bsr.w DelayProgram bsr.s Pal_FadeIn bsr.w RunPLC_RAM dbf d4,loc_301F44 rts ; End of function Pal_FadeTo ; =============== S U B R O U T I N E ======================================= Pal_FadeIn: ; ... moveq #0,d0 lea ($FFFFFB00).w,a0 lea ($FFFFFB80).w,a1 move.b ($FFFFF626).w,d0 add.w d0,a0 add.w d0,a1 move.b ($FFFFF627).w,d0 loc_301F70: ; ... bsr.s Pal_AddColor dbf d0,loc_301F70 tst.b ($FFFFF730).w beq.s return_301F98 moveq #0,d0 lea ($FFFFF080).w,a0 lea ($FFFFF000).w,a1 move.b ($FFFFF626).w,d0 add.w d0,a0 add.w d0,a1 move.b ($FFFFF627).w,d0 loc_301F92: ; ... bsr.s Pal_AddColor dbf d0,loc_301F92 return_301F98: ; ... rts ; End of function Pal_FadeIn ; =============== S U B R O U T I N E ======================================= Pal_AddColor: ; ... move.w (a1)+,d2 move.w (a0),d3 cmp.w d2,d3 beq.s loc_301FC2 move.w d3,d1 add.w #$200,d1 cmp.w d2,d1 bhi.s Pal_AddGreen move.w d1,(a0)+ rts ; --------------------------------------------------------------------------- Pal_AddGreen: ; ... move.w d3,d1 add.w #$20,d1 cmp.w d2,d1 bhi.s loc_301FBE move.w d1,(a0)+ rts ; --------------------------------------------------------------------------- loc_301FBE: ; ... addq.w #2,(a0)+ rts ; --------------------------------------------------------------------------- loc_301FC2: ; ... addq.w #2,a0 rts ; End of function Pal_AddColor ; =============== S U B R O U T I N E ======================================= Pal_FadeFrom: ; ... move.w #$3F,($FFFFF626).w move.w #$15,d4 loc_301FD0: ; ... move.b #$12,($FFFFF62A).w bsr.w DelayProgram bsr.s Pal_FadeOut bsr.w RunPLC_RAM dbf d4,loc_301FD0 rts ; End of function Pal_FadeFrom ; =============== S U B R O U T I N E ======================================= Pal_FadeOut: ; ... moveq #0,d0 lea ($FFFFFB00).w,a0 move.b ($FFFFF626).w,d0 add.w d0,a0 move.b ($FFFFF627).w,d0 loc_301FF6: ; ... bsr.s Pal_DecColor dbf d0,loc_301FF6 moveq #0,d0 lea ($FFFFF080).w,a0 move.b ($FFFFF626).w,d0 add.w d0,a0 move.b ($FFFFF627).w,d0 loc_30200C: ; ... bsr.s Pal_DecColor dbf d0,loc_30200C rts ; End of function Pal_FadeOut ; =============== S U B R O U T I N E ======================================= Pal_DecColor: ; ... move.w (a0),d2 beq.s loc_302040 move.w d2,d1 and.w #$E,d1 beq.s loc_302024 subq.w #2,(a0)+ rts ; --------------------------------------------------------------------------- loc_302024: ; ... move.w d2,d1 and.w #$E0,d1 beq.s loc_302032 sub.w #$20,(a0)+ rts ; --------------------------------------------------------------------------- loc_302032: ; ... move.w d2,d1 and.w #$E00,d1 beq.s loc_302040 sub.w #$200,(a0)+ rts ; --------------------------------------------------------------------------- loc_302040: ; ... addq.w #2,a0 rts ; End of function Pal_DecColor ; =============== S U B R O U T I N E ======================================= Pal_MakeWhite: ; ... move.w #$3F,($FFFFF626).w moveq #0,d0 lea ($FFFFFB00).w,a0 move.b ($FFFFF626).w,d0 add.w d0,a0 move.w #$EEE,d1 move.b ($FFFFF627).w,d0 loc_30205E: ; ... move.w d1,(a0)+ dbf d0,loc_30205E move.w #$15,d4 loc_302068: ; ... move.b #$12,($FFFFF62A).w bsr.w DelayProgram bsr.s Pal_WhiteToBlack bsr.w RunPLC_RAM dbf d4,loc_302068 rts ; End of function Pal_MakeWhite ; =============== S U B R O U T I N E ======================================= Pal_WhiteToBlack: ; ... moveq #0,d0 lea ($FFFFFB00).w,a0 lea ($FFFFFB80).w,a1 move.b ($FFFFF626).w,d0 add.w d0,a0 add.w d0,a1 move.b ($FFFFF627).w,d0 loc_302094: ; ... bsr.s Pal_DecColor2 dbf d0,loc_302094 tst.b ($FFFFF730).w beq.s return_3020BC moveq #0,d0 lea ($FFFFF080).w,a0 lea ($FFFFF000).w,a1 move.b ($FFFFF626).w,d0 add.w d0,a0 add.w d0,a1 move.b ($FFFFF627).w,d0 loc_3020B6: ; ... bsr.s Pal_DecColor2 dbf d0,loc_3020B6 return_3020BC: ; ... rts ; End of function Pal_WhiteToBlack ; =============== S U B R O U T I N E ======================================= Pal_DecColor2: ; ... move.w (a1)+,d2 move.w (a0),d3 cmp.w d2,d3 beq.s loc_3020EA move.w d3,d1 sub.w #$200,d1 bcs.s loc_3020D6 cmp.w d2,d1 bcs.s loc_3020D6 move.w d1,(a0)+ rts ; --------------------------------------------------------------------------- loc_3020D6: ; ... move.w d3,d1 sub.w #$20,d1 bcs.s loc_3020E6 cmp.w d2,d1 bcs.s loc_3020E6 move.w d1,(a0)+ rts ; --------------------------------------------------------------------------- loc_3020E6: ; ... subq.w #2,(a0)+ rts ; --------------------------------------------------------------------------- loc_3020EA: ; ... addq.w #2,a0 rts ; End of function Pal_DecColor2 ; =============== S U B R O U T I N E ======================================= Pal_MakeFlash: ; ... move.w #$3F,($FFFFF626).w move.w #$15,d4 loc_3020F8: ; ... move.b #$12,($FFFFF62A).w bsr.w DelayProgram bsr.s Pal_ToWhite bsr.w RunPLC_RAM dbf d4,loc_3020F8 rts ; End of function Pal_MakeFlash ; =============== S U B R O U T I N E ======================================= Pal_ToWhite: ; ... moveq #0,d0 lea ($FFFFFB00).w,a0 move.b ($FFFFF626).w,d0 add.w d0,a0 move.b ($FFFFF627).w,d0 loc_30211E: ; ... bsr.s Pal_AddColor2 dbf d0,loc_30211E moveq #0,d0 lea ($FFFFF080).w,a0 move.b ($FFFFF626).w,d0 add.w d0,a0 move.b ($FFFFF627).w,d0 loc_302134: ; ... bsr.s Pal_AddColor2 dbf d0,loc_302134 rts ; End of function Pal_ToWhite ; =============== S U B R O U T I N E ======================================= Pal_AddColor2: ; ... move.w (a0),d2 cmp.w #$EEE,d2 beq.s loc_302178 move.w d2,d1 and.w #$E,d1 cmp.w #$E,d1 beq.s loc_302154 addq.w #2,(a0)+ rts ; --------------------------------------------------------------------------- loc_302154: ; ... move.w d2,d1 and.w #$E0,d1 cmp.w #$E0,d1 beq.s loc_302166 add.w #$20,(a0)+ rts ; --------------------------------------------------------------------------- loc_302166: ; ... move.w d2,d1 and.w #$E00,d1 cmp.w #$E00,d1 beq.s loc_302178 add.w #$200,(a0)+ rts ; --------------------------------------------------------------------------- loc_302178: ; ... addq.w #2,a0 rts ; End of function Pal_AddColor2 ; --------------------------------------------------------------------------- S1PalCycle_SEGA: tst.b ($FFFFF635).w bne.s loc_3021DC lea ($FFFFFB20).w,a1 lea (Pal_SEGAOld).l,a0 moveq #5,d1 move.w ($FFFFF632).w,d0 loc_302192: ; ... bpl.s loc_30219C addq.w #2,a0 subq.w #1,d1 addq.w #2,d0 bra.s loc_302192 ; --------------------------------------------------------------------------- loc_30219C: ; ... move.w d0,d2 and.w #$1E,d2 bne.s loc_3021A6 addq.w #2,d0 loc_3021A6: ; ... cmp.w #$60,d0 bcc.s loc_3021B0 move.w (a0)+,(a1,d0.w) loc_3021B0: ; ... addq.w #2,d0 dbf d1,loc_30219C move.w ($FFFFF632).w,d0 addq.w #2,d0 move.w d0,d2 and.w #$1E,d2 bne.s loc_3021C6 addq.w #2,d0 loc_3021C6: ; ... cmp.w #$64,d0 blt.s loc_3021D4 move.w #$401,($FFFFF634).w moveq #$FFFFFFF4,d0 loc_3021D4: ; ... move.w d0,($FFFFF632).w moveq #1,d0 rts ; --------------------------------------------------------------------------- loc_3021DC: ; ... subq.b #1,($FFFFF634).w bpl.s loc_30222E move.b #4,($FFFFF634).w move.w ($FFFFF632).w,d0 add.w #$C,d0 cmp.w #$30,d0 bcs.s loc_3021FA moveq #0,d0 rts ; --------------------------------------------------------------------------- loc_3021FA: ; ... move.w d0,($FFFFF632).w lea (Pal_SEGAOld_2).l,a0 lea (a0,d0.w),a0 lea ($FFFFFB04).w,a1 move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.w (a0)+,(a1) lea ($FFFFFB20).w,a1 moveq #0,d0 moveq #$2C,d1 loc_30221A: ; ... move.w d0,d2 and.w #$1E,d2 bne.s loc_302224 addq.w #2,d0 loc_302224: ; ... move.w (a0),(a1,d0.w) addq.w #2,d0 dbf d1,loc_30221A loc_30222E: ; ... moveq #1,d0 rts ; --------------------------------------------------------------------------- Pal_SEGAOld: dc.w $EEE, $EEA, $EE4, $EC0, $EE4, $EEA; 0 ; ... Pal_SEGAOld_2: dc.w $EEC, $EEA, $EEA, $EEA, $EEA, $EEA, $EEC, $EEA, $EE4; 0 ; ... dc.w $EC0, $EC0, $EC0, $EEC, $EEA, $EE4, $EC0, $EA0, $E60; 9 dc.w $EEA, $EE4, $EC0, $EA0, $E80, $E00; 18 ; =============== S U B R O U T I N E ======================================= PalLoad1: ; ... lea (PalPointers).l,a1 lsl.w #3,d0 add.w d0,a1 move.l (a1)+,a2 move.w (a1)+,a3 add.w #$80,a3 move.w (a1)+,d7 loc_302282: ; ... move.l (a2)+,(a3)+ dbf d7,loc_302282 rts ; End of function PalLoad1 ; =============== S U B R O U T I N E ======================================= PalLoad2: ; ... lea (PalPointers).l,a1 lsl.w #3,d0 add.w d0,a1 move.l (a1)+,a2 move.w (a1)+,a3 move.w (a1)+,d7 loc_30229A: ; ... move.l (a2)+,(a3)+ dbf d7,loc_30229A rts ; End of function PalLoad2 ; =============== S U B R O U T I N E ======================================= PalLoad3_Water: ; ... lea (PalPointers).l,a1 lsl.w #3,d0 add.w d0,a1 move.l (a1)+,a2 move.w (a1)+,a3 suba.l #$A80,a3 move.w (a1)+,d7 loc_3022B8: ; ... move.l (a2)+,(a3)+ dbf d7,loc_3022B8 rts ; End of function PalLoad3_Water ; =============== S U B R O U T I N E ======================================= PalLoad4_Water: ; ... lea (PalPointers).l,a1 lsl.w #3,d0 add.w d0,a1 move.l (a1)+,a2 move.w (a1)+,a3 suba.l #$B00,a3 move.w (a1)+,d7 loc_3022D6: ; ... move.l (a2)+,(a3)+ dbf d7,loc_3022D6 rts ; End of function PalLoad4_Water ; --------------------------------------------------------------------------- PalPointers: dc.l Pal_SEGA ; ... dc.w $FB00 dc.w $1F dc.l Pal_Title dc.w $FB20 dc.w 7 dc.l Pal_UNK1 dc.w $FB00 dc.w $1F dc.l Pal_Knuckles ; Also known as Pal_BGND dc.w $FB00 dc.w $F dc.l Pal_EHZ dc.w $FB20 dc.w $17 dc.l Pal_EHZ dc.w $FB20 dc.w $17 dc.l Pal_WZ dc.w $FB20 dc.w $17 dc.l Pal_EHZ dc.w $FB20 dc.w $17 dc.l Pal_MTZ dc.w $FB20 dc.w $17 dc.l Pal_MTZ dc.w $FB20 dc.w $17 dc.l Pal_WFZ dc.w $FB20 dc.w $17 dc.l Pal_HTZ dc.w $FB20 dc.w $17 dc.l Pal_HPZ dc.w $FB20 dc.w $17 dc.l Pal_EHZ dc.w $FB20 dc.w $17 dc.l Pal_OOZ dc.w $FB20 dc.w $17 dc.l Pal_MCZ dc.w $FB20 dc.w $17 dc.l Pal_CNZ dc.w $FB20 dc.w $17 dc.l Pal_CPZ dc.w $FB20 dc.w $17 dc.l Pal_DEZ dc.w $FB20 dc.w $17 dc.l Pal_ARZ dc.w $FB20 dc.w $17 dc.l Pal_SCZ dc.w $FB20 dc.w $17 dc.l Pal_HPZ_U dc.w $FB00 dc.w $1F dc.l Pal_CPZ_U dc.w $FB00 dc.w $1F dc.l Pal_ARZ_U dc.w $FB00 dc.w $1F dc.l Pal_SS dc.w $FB00 dc.w $17 dc.l Pal_UNK2 dc.w $FB20 dc.w 7 dc.l Pal_UNK3 dc.w $FB20 dc.w 7 dc.l Pal_SS1 dc.w $FB60 dc.w 7 dc.l Pal_SS2 dc.w $FB60 dc.w 7 dc.l Pal_SS3 dc.w $FB60 dc.w 7 dc.l Pal_SS4 dc.w $FB60 dc.w 7 dc.l Pal_SS5 dc.w $FB60 dc.w 7 dc.l Pal_SS6 dc.w $FB60 dc.w 7 dc.l Pal_SS7 dc.w $FB60 dc.w 7 dc.l Pal_UNK4 dc.w $FB60 dc.w 7 dc.l Pal_UNK5 dc.w $FB60 dc.w 7 dc.l Pal_UNK6 dc.w $FB60 dc.w 7 dc.l Pal_OOZ_Boss dc.w $FB20 dc.w 7 dc.l Pal_Menu dc.w $FB00 dc.w $1F dc.l Pal_UNK7 dc.w $FB00 dc.w $1F Pal_SEGA: dc.w $EEE, $EEE, $EEE, $EEE, $EEE, $EEE, $EEE, $EEE, $EEE, $EEE, $EEE, $EEE, $EEE, $EEE, $EEE, $EEE; 0 ; ... dc.w $EEE, $EEC, $EC8, $EA6, $E84, $E62, $E60, $E60, $EEE, $EEC, $EC8, $EA6, $E84, $E62, $E60, $E60; 16 dc.w 0, 0, $A22, $C42, $E44, $E66, $EEE, $AAA, $888, $444, $8AE, $46A, $E, 8, $AE, $8E; 32 dc.w 0, 0, $60, $80, $A0, $44, $EEE, $AAA, $888, $444, $666, $48E, $EE, $88, $6AE, 0; 48 Pal_Title: dc.w $E20, 0, $222, $A66, $EA8, $ECA, $EEE, $AE, $8E, $6C, $8CE, $EEC, $4A, 6, 0, 0; 0 ; ... Pal_UNK1: dc.w 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, $EEE; 0 ; ... dc.w $C00, $24, $246, $468, $68A, $8AC, $ACE, $8AC, $68A, $468, $ACE, $ACE, $246, $24, 0, 0; 16 dc.w $C00, $24, $246, $468, $68A, $8AC, $ACE, $8AC, $68A, $468, $24, $246, $8AC, $68A, 0, $EE; 32 dc.w $C00, $24, $246, $468, $68A, $8AC, $ACE, $8AC, $68A, $468, $ACE, $ACE, $468, $246, 2, 0; 48 Pal_Knuckles: dc.w 0, 0, $206, $20C, $80, $64E, $EEE, $AAA, $888, $444, $8AE, $46A, $E, 8, $AE, $8E; 0 ; ... dc.w $C20, 0, $E62, $A86, $E86, $44, $EEE, $AAA, $888, $444, $666, $E86, $EE, $88, $EA8, $ECA; 16 ; Also known as Pal_BGND Pal_EHZ: dc.w $C20, 0, $E62, $A86, $E86, $44, $EEE, $AAA, $888, $444, $666, $E86, $EE, $88, $EA8, $ECA; 0 ; ... dc.w $C20, 2, $800, $26, $48, $6C, $8E, $AE, $4A0, $40, $60, $80, $A0, $6A4, $C6, $E8; 16 dc.w $C20, $800, 0, $E86, $ECA, $20A, $EEE, $E6E, $C4C, $A2A, $EEC, $80, $64E, $42C, $A0, $E8; 32 Pal_WZ: dc.w 2, 0, $E64, $A68, $E86, $44, $EEE, $AAA, $888, $444, $666, 0, $EE, $88, $EA8, $ECA; 0 ; ... dc.w $E88, $204, $26, $248, $46A, $48C, $6CE, 2, 0, $220, $40, $60, $80, $2A0, $6E0, $A0C; 16 dc.w $E88, $222, $424, $248, $46A, $48C, $6CE, $402, $200, $646, $60, $40, 0, $220, $240, $460; 32 Pal_MTZ: dc.w 0, 0, $262, $2A2, $8E4, $44, $EEE, $AAA, $888, $444, $666, $222, $EE, $88, $E, 0; 0 ; ... dc.w 0, $866, $ECC, $422, $48, 8, $ACE, 4, 8, $862, $642, $420, 6, $6E, $E, $A0; 16 dc.w 0, 0, $CE2, $8C0, $480, $260, $EEE, $4AC, $6A, $26, $48, 4, $40, $20, $4E, $E; 32 Pal_WFZ: dc.w 0, 0, $60, $80, $A0, $44, $EEE, $AAA, $888, $444, $666, 8, $EE, $88, $E, 0; 0 ; ... dc.w $E44, 0, $E64, $E86, $EA8, $ECA, $EEE, $4EE, $2AE, $6E, $2C, $444, $888, $AAA, $E0, $EC0; 16 dc.w $E44, 0, $244, $268, $48A, $4AC, $EEE, $CAA, $A88, $866, $22, 2, $26, $2A, $4E, $C; 32 Pal_HTZ: dc.w $E42, 0, $200, $E, $6E, $44, $EEE, $AAA, $888, $444, $666, $E86, $EE, $88, $AE, $EE; 0 ; ... dc.w $E42, $200, $E86, $640, $860, $A82, $CA4, $EC6, $24, $40, $62, $82, $A4, $6C, $C4, $E8; 16 dc.w $E42, 4, $E64, $E86, $EA8, $28, $EEC, $E6E, $C4C, $A2A, $ECA, $80, $26E, $4C, $A4, $E8; 32 Pal_HPZ: dc.w $800, 0, $242, $464, $686, $44, $EEE, $AAA, $888, $444, $8EA, $46A, $EE, $88, $44, $E; 0 ; ... dc.w $200, $402, $604, $806, $808, $602, $620, $202, $640, $26, $68, $28A, $6CE, $24, $46, $4AC; 16 dc.w $200, $20, $40, $60, $80, $C0, $4E6, $EEE, $602, $E44, $E82, $EA8, $EEE, $24, $46, $4AC; 32 Pal_HPZ_U: dc.w 0, $402, $A20, $A40, $C60, $E80, $ECA, $CA8, $A84, $860, $AA8, $884, $428, $424, $8AA, $88A; 0 ; ... dc.w 0, $202, $242, $464, $686, $442, $EAA, $D88, $D66, $A22, $666, $46A, $6CA, $484, $EEE, $E; 16 dc.w $400, $A20, $C22, $E26, $E28, $A22, $A40, $C22, $A60, $E28, $E4A, $E6A, $CAA, $E24, $E26, $E8A; 32 dc.w $400, $440, $660, $880, $8A0, $8C0, $AE4, $EEA, $A60, $E84, $EA6, $EC6, $EE6, $E6A, $E8A, $CAA; 48 Pal_OOZ: dc.w $6E, 0, $40A, $82E, $C8E, $44, $EEE, $AAA, $888, $444, $666, $48E, $EE, $88, $6AE, $8CE; 0 ; ... dc.w $6E, $200, $402, $602, $804, $824, $846, $A68, $C8A, $EEE, $400, $602, $804, $806, $400, $EE; 16 dc.w $6E, $202, $24, $26, $46, $68, $28A, $4AC, $6CE, $CEE, $20, $40, $60, $A0, $6E6, $E0E; 32 Pal_MCZ: dc.w 2, 0, $A22, $C42, $E64, $44, $EEE, $AAA, $888, $444, $666, $E, $EE, $88, $EA8, $ECA; 0 ; ... dc.w 0, $20, $6C, $4A, $26, $200, $CE6, $6C4, $482, $A60, $60, $6EE, $4CE, $AA, $C8E, $A6C; 16 dc.w 0, $8E, $6C, $4A, $26, $402, $C0, $60, $200, $604, $826, $A48, $EE0, $A60, 0, $EE; 32 Pal_CNZ: dc.w 0, 0, $A, $2E, $6C, $44, $EEE, $AAA, $888, $444, $666, 6, $EE, $88, $EA8, $C22; 0 ; ... dc.w 0, 0, $E20, $E62, $EC8, $E, $6E, $EE, $A20, $E, $EEE, $EC, $C4, $80, $26E, 8; 16 dc.w 0, 0, $C06, $C0A, $C2E, $68, $8A, $4AC, $2CE, $EC, $AE, $6E, $EEE, $22, $A20, $E; 32 Pal_CPZ: dc.w 2, 0, 8, $2C, $6E, $44, $EEE, $AAA, $888, $444, $666, 0, $EE, $88, $EA8, 0; 0 ; ... dc.w 2, 0, 6, $44, $86, $AA, $CC, $CE, $8E, $4E, $2C, $2A, 8, 4, $EEE, $E; 16 dc.w 2, 0, $222, $444, $888, $AAA, $EEE, $E40, $C00, $800, $CE, $28E, $E40, $C00, $C00, $E0; 32 Pal_CPZ_U: dc.w $802, $622, $A04, $E0A, $862, $E2A, $EEC, $EA8, $C86, $A42, $E8E, $848, $80C, $606, $8CC, $6A8; 0 ; ... dc.w $802, $802, $E2C, $E2C, $E4E, $A0A, $E8E, $E4E, $E2E, $E0A, $E0C, $C08, $A8E, $A2E, $A06, $A06; 16 dc.w $802, $802, $804, $802, $804, $808, $82A, $82C, $80C, $80C, $82A, $828, $806, $804, $C4C, $80C; 32 dc.w $802, $802, $C08, $E0A, $E2E, $E4E, $E8E, $E4E, $E0C, $C08, $A6E, $A2E, $E4E, $E4E, $E4E, $A86; 48 Pal_DEZ: dc.w $AEE, 0, $26, $4E, $6E, $44, $EEE, $AAA, $888, $444, $666, $2A, $EE, $88, $2E, 0; 0 ; ... dc.w 0, 0, 2, $24, $46, $68, $8A, $CE, $ECA, $EA6, $E80, $E64, $E40, $C00, $EEE, $E; 16 dc.w 0, 0, $642, $864, $A86, $CA8, $ECA, $E40, $C00, $800, $CE, $28E, $E40, $C00, $C00, $E0; 32 Pal_ARZ: dc.w $20, 0, $A22, $E42, $E86, $44, $EEE, $AAA, $888, $444, $666, 6, $EE, $88, $2E, $2A; 0 ; ... dc.w $20, $22, $A86, $E86, $EA8, $ECA, $6EE, $6CC, $2AA, $44, $66, $E8, $C4, $80, $40, 0; 16 dc.w $20, 2, $6E2, $2C0, $E, 8, $2AE, $8C, $6A, $24, $48, $E8, $C4, $80, $40, $800; 32 Pal_ARZ_U: dc.w $20, $622, $804, $A0A, $662, $A2C, $EEC, $EA8, $C86, $A42, $A8C, $648, $40A, $406, $4C8, $486; 0 ; ... dc.w $20, $200, $E22, $E42, $E86, $444, $EEE, $EAA, $C88, $844, $A66, $806, $4EE, $488, $82E, $A2A; 16 dc.w $20, $22, $CC8, $884, $A84, $CA6, $CE8, $AC8, $8A4, $240, $662, $4E8, $2C4, $80, $40, $60; 32 dc.w $20, 2, $6E8, $2C0, $60E, $408, $86C, $64A, $428, 4, $206, $4E8, $2C4, $80, $40, $800; 48 Pal_SCZ: dc.w 0, 0, $60, $80, $A0, $44, $EEE, $AAA, $888, $444, $666, $48E, $EE, $88, $6AE, 0; 0 ; ... dc.w $E44, 0, $E64, $E86, $EA8, $ECA, $EEE, $4EE, $2AE, $6E, $2C, $444, $888, $AAA, $E0, $EC0; 16 dc.w $E44, 0, $244, $268, $48A, $4AC, $EEE, $CAA, $A88, $866, $22, 2, $26, $2A, $4E, $C; 32 Pal_UNK2: dc.w 2, 0, $6C, $8E, $CE, $44, $EEE, $AAA, $888, $444, $666, 6, $EE, $88, $2E, $2A; 0 ; ... Pal_UNK3: dc.w 0, 0, $6E, $AE, $EE, $44, $EEE, $AAA, $888, $444, $666, $EC0, $EE, $88, $A0E, $E0; 0 ; ... Pal_OOZ_Boss: dc.w $6E, 0, $E80, $EC0, $EEA, $44, $EEE, $AAA, $888, $444, $666, $48E, $EE, $88, $6AE, $8CE; 0 ; ... Pal_Menu: dc.w $C20, 0, $A22, $C42, $E44, $E66, $EEE, $AAA, $888, $444, $8AE, $46A, $E, 8, $AE, $8E; 0 ; ... dc.w $C20, 0, $E62, $A86, $E86, $44, $EEE, $AAA, $888, $444, $666, $E86, $EE, $88, $EA8, $ECA; 16 dc.w $C20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 32 dc.w $C20, 0, $600, $C20, $A00, $EEE, $EE, 0, 0, 0, 0, 0, $E60, $800, $E, 8; 48 Pal_SS: dc.w 0, $EE, $E8, $E4, $C0, $6A0, $4A0, $640, $862, $A84, $CA6, $C8A, $CAE, $6EE, $EEE, $EEE; 0 ; ... dc.w $400, 0, 6, $A, $20E, $42E, $44E, $AE, $EEE, $AAA, $888, $444, $A0, $60, $8AE, $46A; 16 dc.w $400, 0, $26, $4A, $6C, $8E, $AE, $CE, $EEE, $ECA, $CA8, $864, $E, 8, $8AE, $46A; 32 Pal_SS1: dc.w 0, $CA0, $2AE, $A80, $28C, $26A, $860, $EE, $888, $444, $EEE, $EE, $88, $44, 4, $EEE; 0 ; ... Pal_SS2: dc.w 0, $80C, $8E, $60A, $6C, $4A, $408, $EE, $888, $444, $EEE, $EE, $88, $44, 4, $EEE; 0 ; ... Pal_SS3: dc.w 0, $4C, $2AE, $2A, $28C, $26A, $28, $EE, $888, $444, $EEE, $EE, $88, $44, 4, $EEE; 0 ; ... Pal_SS4: dc.w 0, $ACC, $2AE, $8AA, $28C, $26A, $688, $EE, $888, $444, $EEE, $EE, $88, $44, 4, $EEE; 0 ; ... Pal_SS5: dc.w 0, $8E, $4E0, $6C, $2A0, $80, $4A, $EE, $888, $444, $EEE, $EE, $88, $44, 4, $EEE; 0 ; ... Pal_SS6: dc.w 0, $A6, $2AE, $84, $28C, $26A, $64, $EE, $888, $444, $EEE, $EE, $88, $44, 4, $EEE; 0 ; ... Pal_SS7: dc.w 0, $888, $CAA, $666, $A88, $866, $444, $EE, $888, $444, $EEE, $EE, $88, $44, 4, $EEE; 0 ; ... Pal_UNK4: dc.w 0, $C08, $E2E, $A06, $C2C, $A2A, $804, $EE, $888, $444, $EEE, $EE, $88, $44, 4, $EEE; 0 ; ... Pal_UNK5: dc.w 0, $AC, $2AE, $6A, $28C, $26A, $48, $EE, $888, $444, $EEE, $EE, $88, $44, 4, $EEE; 0 ; ... Pal_UNK6: dc.w 0, $8C0, $EE2, $6A0, $CC2, $AA2, $680, $EE, $888, $444, $EEE, $EE, $88, $44, 4, $EEE; 0 ; ... Pal_UNK7: dc.w $EEE, $EEE, 0, 0, 0, 0, $E0E, $E0E, $E0E, 0, 0, 0, $E, 8, 0, 0; 0 ; ... dc.w $EEE, $4EE, 0, 0, 0, 0, $EEE, $CCC, $AAA, $888, 0, 0, $EC0, $EA0, 0, 0; 16 dc.w $EEE, $EEE, 0, $E80, $EC0, $EE8, $EEE, $EA, $C6, $82, $A6E, $E, $A, 0, 0, 0; 32 dc.w $EEE, $EEE, 0, $806, $C08, $E6E, $EEE, $AEE, $CE, $8A, $EAE, $E6E, $E4E, 0, 0, 0; 48 ; =============== S U B R O U T I N E ======================================= DelayProgram: ; ... move #$2300,sr loc_302EE2: ; ... tst.b ($FFFFF62A).w bne.s loc_302EE2 rts ; End of function DelayProgram ; =============== S U B R O U T I N E ======================================= RandomNumber: ; ... move.l ($FFFFF636).w,d1 bne.s loc_302EF6 move.l #$2A6D365A,d1 loc_302EF6: ; ... move.l d1,d0 asl.l #2,d1 add.l d0,d1 asl.l #3,d1 add.l d0,d1 move.w d1,d0 swap d1 add.w d1,d0 move.w d0,d1 swap d1 move.l d1,($FFFFF636).w rts ; End of function RandomNumber ; =============== S U B R O U T I N E ======================================= CalcSine: ; ... and.w #$FF,d0 add.w d0,d0 add.w #$80,d0 move.w Sine_Table(pc,d0.w),d1 sub.w #$80,d0 move.w Sine_Table(pc,d0.w),d0 rts ; End of function CalcSine ; --------------------------------------------------------------------------- Sine_Table: dc.w 0, 6, $C, $12, $19, $1F, $25, $2B, $31, $38, $3E, $44, $4A, $50, $56, $5C; 0 dc.w $61, $67, $6D, $73, $78, $7E, $83, $88, $8E, $93, $98, $9D, $A2, $A7, $AB, $B0; 16 dc.w $B5, $B9, $BD, $C1, $C5, $C9, $CD, $D1, $D4, $D8, $DB, $DE, $E1, $E4, $E7, $EA; 32 dc.w $EC, $EE, $F1, $F3, $F4, $F6, $F8, $F9, $FB, $FC, $FD, $FE, $FE, $FF, $FF, $FF; 48 dc.w $100, $FF, $FF, $FF, $FE, $FE, $FD, $FC, $FB, $F9, $F8, $F6, $F4, $F3, $F1, $EE; 64 dc.w $EC, $EA, $E7, $E4, $E1, $DE, $DB, $D8, $D4, $D1, $CD, $C9, $C5, $C1, $BD, $B9; 80 dc.w $B5, $B0, $AB, $A7, $A2, $9D, $98, $93, $8E, $88, $83, $7E, $78, $73, $6D, $67; 96 dc.w $61, $5C, $56, $50, $4A, $44, $3E, $38, $31, $2B, $25, $1F, $19, $12, $C, 6; 112 dc.w 0, -6, -$C, -$12, -$19, -$1F, -$25, -$2B, -$31, -$38, -$3E, -$44, -$4A, -$50, -$56, -$5C; 128 dc.w -$61, -$67, -$6D, -$75, -$78, -$7E, -$83, -$88, -$8E, -$93, -$98, -$9D, -$A2, -$A7, -$AB, -$B0; 144 dc.w -$B5, -$B9, -$BD, -$C1, -$C5, -$C9, -$CD, -$D1, -$D4, -$D8, -$DB, -$DE, -$E1, -$E4, -$E7, -$EA; 160 dc.w -$EC, -$EE, -$F1, -$F3, -$F4, -$F6, -$F8, -$F9, -$FB, -$FC, -$FD, -$FE, -$FE, -$FF, -$FF, -$FF; 176 dc.w -$100, -$FF, -$FF, -$FF, -$FE, -$FE, -$FD, -$FC, -$FB, -$F9, -$F8, -$F6, -$F4, -$F3, -$F1, -$EE; 192 dc.w -$EC, -$EA, -$E7, -$E4, -$E1, -$DE, -$DB, -$D8, -$D4, -$D1, -$CD, -$C9, -$C5, -$C1, -$BD, -$B9; 208 dc.w -$B5, -$B0, -$AB, -$A7, -$A2, -$9D, -$98, -$93, -$8E, -$88, -$83, -$7E, -$78, -$75, -$6D, -$67; 224 dc.w -$61, -$5C, -$56, -$50, -$4A, -$44, -$3E, -$38, -$31, -$2B, -$25, -$1F, -$19, -$12, -$C, -6; 240 dc.w 0, 6, $C, $12, $19, $1F, $25, $2B, $31, $38, $3E, $44, $4A, $50, $56, $5C; 256 dc.w $61, $67, $6D, $73, $78, $7E, $83, $88, $8E, $93, $98, $9D, $A2, $A7, $AB, $B0; 272 dc.w $B5, $B9, $BD, $C1, $C5, $C9, $CD, $D1, $D4, $D8, $DB, $DE, $E1, $E4, $E7, $EA; 288 dc.w $EC, $EE, $F1, $F3, $F4, $F6, $F8, $F9, $FB, $FC, $FD, $FE, $FE, $FF, $FF, $FF; 304 ; =============== S U B R O U T I N E ======================================= CalcAngle: ; ... movem.l d3-d4,-(sp) moveq #0,d3 moveq #0,d4 move.w d1,d3 move.w d2,d4 or.w d3,d4 beq.s loc_303204 move.w d2,d4 tst.w d3 bpl.w loc_3031C2 neg.w d3 loc_3031C2: ; ... tst.w d4 bpl.w loc_3031CA neg.w d4 loc_3031CA: ; ... cmp.w d3,d4 bcc.w loc_3031DC lsl.l #8,d4 divu.w d3,d4 moveq #0,d0 move.b Angle_Data(pc,d4.w),d0 bra.s loc_3031E6 ; --------------------------------------------------------------------------- loc_3031DC: ; ... lsl.l #8,d3 divu.w d4,d3 moveq #$40,d0 sub.b Angle_Data(pc,d3.w),d0 loc_3031E6: ; ... tst.w d1 bpl.w loc_3031F2 neg.w d0 add.w #$80,d0 loc_3031F2: ; ... tst.w d2 bpl.w loc_3031FE neg.w d0 add.w #$100,d0 loc_3031FE: ; ... movem.l (sp)+,d3-d4 rts ; --------------------------------------------------------------------------- loc_303204: ; ... move.w #$40,d0 movem.l (sp)+,d3-d4 rts ; End of function CalcAngle ; --------------------------------------------------------------------------- Angle_Data: dc.b 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2; 0 ; ... dc.b 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5; 16 dc.b 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7; 32 dc.b 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, $A, $A, $A; 48 dc.b $A, $A, $A, $A, $B, $B, $B, $B, $B, $B, $B, $C, $C, $C, $C, $C; 64 dc.b $C, $C, $D, $D, $D, $D, $D, $D, $D, $E, $E, $E, $E, $E, $E, $E; 80 dc.b $F, $F, $F, $F, $F, $F, $F,$10,$10,$10,$10,$10,$10,$10,$11,$11; 96 dc.b $11,$11,$11,$11,$11,$11,$12,$12,$12,$12,$12,$12,$12,$13,$13,$13; 112 dc.b $13,$13,$13,$13,$13,$14,$14,$14,$14,$14,$14,$14,$14,$15,$15,$15; 128 dc.b $15,$15,$15,$15,$15,$15,$16,$16,$16,$16,$16,$16,$16,$16,$17,$17; 144 dc.b $17,$17,$17,$17,$17,$17,$17,$18,$18,$18,$18,$18,$18,$18,$18,$18; 160 dc.b $19,$19,$19,$19,$19,$19,$19,$19,$19,$19,$1A,$1A,$1A,$1A,$1A,$1A; 176 dc.b $1A,$1A,$1A,$1B,$1B,$1B,$1B,$1B,$1B,$1B,$1B,$1B,$1B,$1C,$1C,$1C; 192 dc.b $1C,$1C,$1C,$1C,$1C,$1C,$1C,$1C,$1D,$1D,$1D,$1D,$1D,$1D,$1D,$1D; 208 dc.b $1D,$1D,$1D,$1E,$1E,$1E,$1E,$1E,$1E,$1E,$1E,$1E,$1E,$1E,$1F,$1F; 224 dc.b $1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$20,$20,$20,$20,$20,$20; 240 dc.b $20, 0 ; 256 ; --------------------------------------------------------------------------- SegaScreen: ; ... move.b #$FD,d0 bsr.w PlayMusic bsr.w ClearPLC bsr.w Pal_FadeFrom lea ($FFFFF700).w,a1 moveq #0,d0 move.w #$3F,d1 loc_30332A: ; ... move.l d0,(a1)+ dbf d1,loc_30332A lea ($FFFFB000).w,a1 moveq #0,d0 move.w #$7FF,d1 loc_30333A: ; ... move.l d0,(a1)+ dbf d1,loc_30333A lea ($C00004).l,a6 move.w #$8004,(a6) move.w #$8230,(a6) move.w #$8405,(a6) move.w #$8700,(a6) move.w #$8B03,(a6) move.w #$8C81,(a6) move.w #$9003,(a6) clr.b ($FFFFF64E).w clr.w ($FFFFFFDC).w move #$2700,sr move.w ($FFFFF60C).w,d0 and.b #$BF,d0 move.w d0,($C00004).l bsr.w ClearScreen lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$941F93FF,(a5) move.w #$9780,(a5) move.l #$40000083,(a5) move.w #0,($C00000).l loc_3033A2: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_3033A2 move.w #$8F02,(a5) move.l #$40200000,($C00004).l lea ($274876).l,a0 bsr.w NemDec move.l #$50000000,($C00004).l lea ($274CF6).l,a0 bsr.w NemDec move.l #$51000000,($C00004).l lea ($28BE12).l,a0 bsr.w NemDec lea ($FFFF0000).l,a1 lea ($274D0E).l,a0 move.w #0,d0 bsr.w EniDec lea ($FFFF0000).l,a1 move.l #$60000002,d0 moveq #$27,d1 moveq #$1B,d2 bsr.w ShowVDPGraphics_3 tst.b ($FFFFFFD8).w bmi.s SegaScreen_Continue lea ($FFFFB080).w,a1 move.b #$B1,(a1) move.b #$4E,$28(a1) SegaScreen_Continue: ; ... moveq #0,d0 bsr.w PalLoad2 move.w #$FFF6,($FFFFF632).w move.w #0,($FFFFF634).w move.w #0,($FFFFF662).w move.w #0,($FFFFF660).w lea ($FFFFB040).w,a1 move.b #$B0,(a1) move.b #$4C,$28(a1) move.w #$F0,($FFFFF614).w move.w ($FFFFF60C).w,d0 or.b #$40,d0 move.w d0,($C00004).l Sega_WaitPalette: ; ... move.b #2,($FFFFF62A).w bsr.w DelayProgram jsr RunObjects jsr BuildSprites tst.b ($FFFFF660).w beq.s Sega_WaitPalette move.b #$FA,d0 bsr.w PlaySound move.b #2,($FFFFF62A).w bsr.w DelayProgram move.w #$B4,($FFFFF614).w Sega_WaitEnd: ; ... move.b #$14,($FFFFF62A).w bsr.w DelayProgram tst.w ($FFFFF614).w beq.s Sega_GoToTitle move.b ($FFFFF605).w,d0 or.b ($FFFFF607).w,d0 and.b #$80,d0 beq.s Sega_WaitEnd Sega_GoToTitle: ; ... clr.w ($FFFFF660).w clr.w ($FFFFF662).w move.b #4,($FFFFF600).w rts ; =============== S U B R O U T I N E ======================================= ShowVDPGraphics_3: ; ... lea ($C00000).l,a6 move.l #$1000000,d4 loc_3034D4: ; ... move.l d0,4(a6) move.w d1,d3 loc_3034DA: ; ... move.w (a1)+,(a6) dbf d3,loc_3034DA add.l d4,d0 dbf d2,loc_3034D4 rts ; End of function ShowVDPGraphics_3 ; --------------------------------------------------------------------------- TitleScreen: nop nop move.b #$FD,d0 bsr.w PlayMusic bsr.w ClearPLC bsr.w Pal_FadeFrom move #$2700,sr lea ($C00004).l,a6 move.w #$8004,(a6) move.w #$8230,(a6) move.w #$8407,(a6) move.w #$9001,(a6) move.w #$9200,(a6) move.w #$8B03,(a6) move.w #$8720,(a6) clr.b ($FFFFF64E).w move.w #$8C81,(a6) bsr.w ClearScreen lea ($FFFFAC00).w,a1 moveq #0,d0 move.w #$FF,d1 loc_303534: ; ... move.l d0,(a1)+ dbf d1,loc_303534 lea ($FFFFB000).w,a1 moveq #0,d0 move.w #$7FF,d1 loc_303544: ; ... move.l d0,(a1)+ dbf d1,loc_303544 lea ($FFFFF700).w,a1 moveq #0,d0 move.w #$3F,d1 loc_303554: ; ... move.l d0,(a1)+ dbf d1,loc_303554 lea ($FFFFEE00).w,a1 moveq #0,d0 move.w #$3F,d1 loc_303564: ; ... move.l d0,(a1)+ dbf d1,loc_303564 move #$2700,sr move.l #$40000000,($C00004).l lea (S2_MapEng_Title).l,a0 ; NOTE: This name is misleading, as this is actually something using Nemesis compression... bsr.w NemDec move.l #$6A000000,($C00004).l lea (ArtNem_TitleSprites_1).l,a0 bsr.w NemDec move.l #$78000001,($C00004).l lea (ArtNem_TitleSprites_2).l,a0 bsr.w NemDec move.l #$79E00001,($C00004).l lea (ArtNem_TitleSprites_3).l,a0 bsr.w NemDec move.l #$7BA00001,($C00004).l lea (ArtNem_TitleSprites_4).l,a0 bsr.w NemDec move.l #$7FC00001,($C00004).l lea (ArtNem_TitleSprites_5).l,a0 bsr.w NemDec move.l #$51000002,($C00004).l lea (ArtNem_TitleSprites_6).l,a0 bsr.w NemDec move.l #$50000003,($C00004).l lea (S2_ArtNem_FontStuff).l,a0 ; S2_ArtNem_FontStuff bsr.w NemDec move.b #0,($FFFFFE30).w move.b #0,($FFFFFEE0).w move.w #0,($FFFFFE08).w move.w #0,($FFFFFFD0).w move.w #0,($FFFFF634).w move.w #0,($FFFFFFDC).w move.b #0,($FFFFF711).w lea ($FFFF0000).l,a1 lea (S2_MapEng_TitleScreen).l,a0 ; S2_MapEng_TitleScreen move.w #$4000,d0 bsr.w EniDec lea ($FFFF0000).l,a1 move.l #$60000003,d0 moveq #$27,d1 moveq #$1B,d2 jsr ShowVDPGraphics lea ($FFFF0000).l,a1 lea (S2_MapEng_TitleBack).l,a0 ; S2_MapEng_TitleBack move.w #$4000,d0 bsr.w EniDec lea ($FFFF0000).l,a1 move.l #$60500003,d0 moveq #$17,d1 moveq #$1B,d2 jsr ShowVDPGraphics lea ($FFFF0000).l,a1 lea (S2_MapEng_TitleLogo).l,a0 ; MapEng_TitleLogo move.w #$E000,d0 bsr.w EniDec lea ($FFFF0000).l,a1 move.l #$40000003,d0 moveq #$27,d1 moveq #$1B,d2 jsr ShowVDPGraphics lea ($FFFFFB00).w,a1 moveq #0,d0 move.w #$3F,d1 loc_3036C0: ; ... move.l d0,(a1)+ dbf d1,loc_3036C0 moveq #1,d0 bsr.w PalLoad1 move.b #0,($FFFFFFDA).w move.w #0,($FFFFFFDC).w move.w #$280,($FFFFF614).w clr.w ($FFFFF604).w clr.b ($FFFFF662).w move.b #$E,($FFFFB040).w move.b #2,($FFFFB068).w jsr RunObjects jsr BuildSprites moveq #0,d0 bsr.w LoadPLC2 move.w #0,($FFFFFF0C).w move.w #0,($FFFFFF0E).w nop nop nop nop nop nop move.w #4,($FFFFEED2).w move.w #0,($FFFFE500).w lea ($FFFFFF20).w,a1 moveq #$B,d0 loc_30372E: ; ... move.w #-1,(a1)+ dbf d0,loc_30372E move.w #-$280,($FFFFEE00).w move.w ($FFFFF60C).w,d0 or.b #$40,d0 move.w d0,($C00004).l bsr.w Pal_FadeTo TitleScreen_Loop: ; ... move.b #4,($FFFFF62A).w bsr.w DelayProgram jsr RunObjects jsr SwScrl_Title jsr BuildSprites lea ($FFFFF804).w,a1 moveq #0,d0 moveq #$4F,d6 loc_303772: ; ... tst.w (a1) bne.s loc_30377E bchg #2,d0 move.w d0,2(a1) loc_30377E: ; ... addq.w #8,a1 dbf d6,loc_303772 bsr.w RunPLC_RAM bsr.w Title_CheckCheat tst.w ($FFFFF614).w beq.w loc_303830 tst.b ($FFFFF662).w beq.w TitleScreen_Loop move.b ($FFFFF605).w,d0 or.b ($FFFFF607).w,d0 and.b #$80,d0 beq.w TitleScreen_Loop move.b #$C,($FFFFF600).w move.b #3,($FFFFFE12).w move.b #3,($FFFFFEC6).w moveq #0,d0 move.w d0,($FFFFFE20).w move.l d0,($FFFFFE22).w move.l d0,($FFFFFE26).w move.w d0,($FFFFFED0).w move.l d0,($FFFFFED2).w move.l d0,($FFFFFED6).w move.b d0,($FFFFFE18).w move.l #$1388,($FFFFFFC0).w move.l #$1388,($FFFFFFC4).w move.b #$F9,d0 bsr.w PlaySound move.w #1,($FFFFFF72).w moveq #0,d0 move.w d0,($FFFFFF8A).w move.w d0,($FFFFFFDC).w move.w d0,($FFFFFE10).w tst.b ($FFFFFF08).w beq.s loc_30381E btst #6,($FFFFF604).w beq.s loc_30381E move.b #$28,($FFFFF600).w rts ; --------------------------------------------------------------------------- loc_30381E: ; ... move.w d0,($FFFFFE16).w move.w d0,($FFFFFFB0).w move.l d0,($FFFFFFB2).w move.l d0,($FFFFFFB6).w rts ; --------------------------------------------------------------------------- loc_303830: ; ... move.b #$F9,d0 bsr.w PlaySound move.w ($FFFFFFD2).w,d0 and.w #7,d0 add.w d0,d0 move.w DemoLevels(pc,d0.w),d0 move.w d0,($FFFFFE10).w addq.w #1,($FFFFFFD2).w cmp.w #4,($FFFFFFD2).w bcs.s loc_30385C move.w #0,($FFFFFFD2).w loc_30385C: ; ... move.w #1,($FFFFFFD0).w move.b #8,($FFFFF600).w move.b #3,($FFFFFE12).w move.b #3,($FFFFFEC6).w moveq #0,d0 move.w d0,($FFFFFE20).w move.l d0,($FFFFFE22).w move.l d0,($FFFFFE26).w move.w d0,($FFFFFED0).w move.l d0,($FFFFFED2).w move.l d0,($FFFFFED6).w move.l #$1388,($FFFFFFC0).w move.l #$1388,($FFFFFFC4).w rts ; --------------------------------------------------------------------------- DemoLevels: dc.b 0, 0 ; 0 dc.b $D, 0 ; 2 dc.b $F, 0 ; 4 dc.b $C, 0 ; 6 ; =============== S U B R O U T I N E ======================================= Title_CheckCheat: ; ... lea (Cheat_Buttons).l,a0 move.w ($FFFFFF0C).w,d0 add.w d0,a0 move.b ($FFFFF605).w,d0 and.b #$F,d0 beq.s return_3038E0 cmp.b (a0),d0 bne.s loc_3038DA addq.w #1,($FFFFFF0C).w tst.b 1(a0) bne.s return_3038E0 move.w #$101,($FFFFFF08).w move.b #$B5,d0 bsr.w PlaySound loc_3038DA: ; ... move.w #0,($FFFFFF0C).w return_3038E0: ; ... rts ; End of function Title_CheckCheat ; --------------------------------------------------------------------------- Cheat_Buttons: dc.b 1, 1, 1, 2, 2, 2, 4, 8, 4, 8, 0, -1; 0 ; ... byte_3038EE: dc.b 0, $A,$80, 4, 9,$14, $A,$26,$3B,$34, 8,$74, $B,$81, 2, 0; 0 dc.b $25,$1B,$35,$1C,$47,$7C,$58,$FA,$78,$FB,$86, 6,$3D,$15,$18,$22; 16 dc.b 1,$46,$3A,$55,$19,$66,$3C,$87, 5,$1A,$FF,$B9,$FD,$B1, 9, 9; 32 dc.b 9, 9,$DF,$45,$7D,$5C,$E4,$94,$44,$4C,$92,$EE,$92,$39,$70,$90; 48 dc.b $90,$90,$90,$91,$E7,$D9,$75,$8D,$10,$9D,$FA,$63,$45,$74,$4F,$BB; 64 dc.b $C6,$8F,$4A,$77,$5C,$B4,$44,$49,$C1,$83,$B4,$84,$84,$8E,$5D,$78; 80 dc.b $3F,$3A,$29,$DD,$24,$79,$F6,$5E,$49,$44,$44,$C9,$28,$88,$F2,$79; 96 dc.b $79,$D7,$C4,$D7,$5A,$1F,$89,$1E,$7D,$96,$88,$88,$88,$89,$38,$30; 112 dc.b $76,$91,$BB,$8C,$8F,$D7,$45,$6D,$21,$32,$4F,$D5, 0, 0; 128 MusicList: dc.b $82,$82,$85,$84,$85,$85,$8F,$86,$90,$8D,$84,$8B,$89,$8E,$8A,$87,$8D, 0; 0 ; ... MusicList2P_Unused:dc.b $8C,$82,$85,$84,$85,$85,$8F,$86,$90,$8D,$84,$83,$88,$8E,$8A,$87,$8D, 0; 0 ; ... ; --------------------------------------------------------------------------- Level: ; ... bset #7,($FFFFF600).w tst.w ($FFFFFFD0).w bmi.s loc_3039B4 move.b #$F9,d0 bsr.w PlaySound loc_3039B4: ; ... bsr.w ClearPLC bsr.w Pal_FadeFrom tst.w ($FFFFFFD0).w bmi.s Level_ClrRam move #$2700,sr bsr.w ClearScreen jsr LoadTitleCard move #$2300,sr moveq #0,d0 move.w d0,($FFFFFE04).w move.b ($FFFFFE10).w,d0 add.w d0,d0 add.w d0,d0 move.w d0,d1 add.w d0,d0 add.w d1,d0 lea (LevelArtPointers).l,a2 lea (a2,d0.w),a2 moveq #0,d0 move.b (a2),d0 beq.s loc_3039FC bsr.w LoadPLC loc_3039FC: ; ... moveq #1,d0 bsr.w LoadPLC bsr.w sub_303F30 moveq #6,d0 tst.w ($FFFFFFDC).w bne.s loc_303A18 cmp.w #2,($FFFFFF70).w bne.s Level_ClrRam addq.w #1,d0 loc_303A18: ; ... tst.b ($FFFFFFD8).w bpl.s loc_303A20 addq.w #2,d0 loc_303A20: ; ... bsr.w LoadPLC Level_ClrRam: ; ... lea ($FFFFAC00).w,a1 moveq #0,d0 move.w #$FF,d1 loc_303A2E: ; ... move.l d0,(a1)+ dbf d1,loc_303A2E lea ($FFFFB000).w,a1 moveq #0,d0 move.w #$8FF,d1 loc_303A3E: ; ... move.l d0,(a1)+ dbf d1,loc_303A3E lea ($FFFFF628).w,a1 moveq #0,d0 move.w #$15,d1 loc_303A4E: ; ... move.l d0,(a1)+ dbf d1,loc_303A4E lea ($FFFFF700).w,a1 moveq #0,d0 move.w #$3F,d1 loc_303A5E: ; ... move.l d0,(a1)+ dbf d1,loc_303A5E lea ($FFFFFE60).w,a1 moveq #0,d0 move.w #$13,d1 loc_303A6E: ; ... move.l d0,(a1)+ dbf d1,loc_303A6E lea ($FFFFE700).w,a1 moveq #0,d0 move.w #$3F,d1 loc_303A7E: ; ... move.l d0,(a1)+ dbf d1,loc_303A7E cmp.w #$D01,($FFFFFE10).w beq.s Level_InitWater cmp.b #$F,($FFFFFE10).w beq.s Level_InitWater cmp.b #8,($FFFFFE10).w bne.s loc_303AA8 Level_InitWater: ; ... move.b #1,($FFFFF730).w move.w #0,($FFFFFFDC).w loc_303AA8: ; ... lea ($C00004).l,a6 move.w #$8B03,(a6) move.w #$8230,(a6) move.w #$8407,(a6) move.w #$857C,(a6) move.w #$9001,(a6) move.w #$8004,(a6) move.w #$8720,(a6) move.w #$8C81,(a6) tst.b ($FFFFFF0A).w beq.s loc_303AE2 btst #6,($FFFFF604).w beq.s loc_303AE2 move.b #1,($FFFFFFDA).w loc_303AE2: ; ... move.w #$8ADF,($FFFFF624).w tst.w ($FFFFFFDC).w beq.s loc_303AFC move.w #$8A6B,($FFFFF624).w move.w #$8014,(a6) move.w #$8C87,(a6) loc_303AFC: ; ... move.w ($FFFFF624).w,(a6) clr.w ($FFFFDC00).w move.l #$FFFFDC00,($FFFFDCFC).w ; Clear DMA Queue tst.b ($FFFFF730).w beq.s Level_LoadPal move.w #$8014,(a6) moveq #0,d0 move.w ($FFFFFE10).w,d0 sub.w #$800,d0 ror.b #1,d0 lsr.w #6,d0 and.w #%1111111111111110,d0 lea (WaterHeight).l,a1 move.w (a1,d0.w),d0 move.w d0,($FFFFF646).w move.w d0,($FFFFF648).w move.w d0,($FFFFF64A).w clr.b ($FFFFF64D).w clr.b ($FFFFF64E).w move.b #1,($FFFFF64C).w Level_LoadPal: ; ... moveq #3,d0 bsr.w PalLoad2 tst.b ($FFFFF730).w beq.s Level_GetBGM moveq #$15,d0 cmp.b #8,($FFFFFE10).w beq.s Level_WaterPal moveq #$16,d0 cmp.b #$D,($FFFFFE10).w beq.s Level_WaterPal moveq #$17,d0 Level_WaterPal: ; ... bsr.w PalLoad3_Water tst.b ($FFFFFE30).w beq.s Level_GetBGM move.b ($FFFFFE53).w,($FFFFF64E).w Level_GetBGM: ; ... tst.w ($FFFFFFD0).w bmi.s loc_303BE8 moveq #0,d0 move.b ($FFFFFE10).w,d0 lea (MusicList).l,a1 tst.w ($FFFFFFDC).w beq.s loc_303B9C lea (MusicList2P_Unused).l,a1 loc_303B9C: ; ... move.b (a1,d0.w),d0 move.w d0,($FFFFFF90).w bsr.w PlayMusic move.b #$34,($FFFFB080).w Level_TtlCard: ; ... move.b #$C,($FFFFF62A).w bsr.w DelayProgram jsr RunObjects jsr BuildSprites bsr.w RunPLC_RAM move.w ($FFFFB088).w,d0 cmp.w ($FFFFB0B0).w,d0 bne.s Level_TtlCard tst.l ($FFFFF680).w bne.s Level_TtlCard move.b #$C,($FFFFF62A).w bsr.w DelayProgram jsr HUD_Base loc_303BE8: ; ... moveq #3,d0 bsr.w PalLoad1 bsr.w LevelSizeLoad jsr DeformBgLayer clr.w ($FFFFF616).w move.w #-$E0,($FFFFF61E).w lea ($FFFFE000).w,a1 moveq #0,d0 move.w #$FF,d1 loc_303C0C: ; ... move.l d0,(a1)+ dbf d1,loc_303C0C bsr.w sub_304958 jsr LoadZoneBlockMaps jsr sub_338D80 jsr sub_30BE68 jsr FloorLog_Unk bsr.w LoadCollisionIndexes bsr.w WaterEffects bsr.w InitPlayers move.w #0,($FFFFF602).w move.w #0,($FFFFF66A).w move.w #0,($FFFFF604).w move.w #0,($FFFFF606).w move.b #1,($FFFFF7CC).w move.b #1,($FFFFF7CF).w move.b #0,($FFFFF711).w tst.b ($FFFFF730).w beq.s loc_303C82 move.b #4,($FFFFB380).w move.w #$60,($FFFFB388).w move.b #4,($FFFFB3C0).w move.w #$120,($FFFFB3C8).w loc_303C82: ; ... cmp.b #$D,($FFFFFE10).w bne.s loc_303C90 move.b #$7C,($FFFFB340).w loc_303C90: ; ... cmp.b #$A,($FFFFFE10).w bne.s Level_ClearHUD move.b #7,($FFFFB380).w Level_ClearHUD: ; ... moveq #0,d0 tst.b ($FFFFFE30).w bne.s Level_FromCheckpoint move.w d0,($FFFFFE20).w move.l d0,($FFFFFE22).w move.b d0,($FFFFFE1B).w move.w d0,($FFFFFED0).w move.l d0,($FFFFFED2).w move.b d0,($FFFFFEC7).w Level_FromCheckpoint: ; ... move.b d0,($FFFFFE1A).w move.b d0,($FFFFFECC).w move.b d0,($FFFFFF4E).w move.w d0,($FFFFFF4C).w move.w d0,($FFFFFE08).w move.w d0,($FFFFFE02).w move.b d0,($FFFFF622).w move.b d0,($FFFFF623).w move.w d0,($FFFFFEF0).w move.w d0,($FFFFFEF2).w move.w d0,($FFFFFEF4).w move.w d0,($FFFFFEF6).w move.w d0,($FFFFFEF8).w bsr.w OscillateNumInit move.b #1,($FFFFFE1F).w move.b #1,($FFFFFE1D).w move.b #1,($FFFFFE1E).w move.b #1,($FFFFFECA).w jsr ObjPosLoad jsr RingsManager jsr SpecialCNZBumpers jsr RunObjects jsr BuildSprites jsr sub_338770 bsr.w SetLevelEndType move.w #0,($FFFFF790).w move.w #0,($FFFFF732).w lea (DemoScriptPointers).l,a1 moveq #0,d0 move.b ($FFFFFE10).w,d0 lsl.w #2,d0 move.l (a1,d0.w),a1 tst.w ($FFFFFFD0).w bpl.s loc_303D6C lea (word_30444C).l,a1 move.w ($FFFFFFD4).w,d0 subq.w #1,d0 lsl.w #2,d0 move.l (a1,d0.w),a1 loc_303D6C: ; ... move.b 1(a1),($FFFFF792).w tst.b ($FFFFFE10).w bne.s loc_303D84 lea (Demo_EHZ_Tails).l,a1 move.b 1(a1),($FFFFF734).w loc_303D84: ; ... move.w #$668,($FFFFF614).w tst.w ($FFFFFFD0).w bpl.s loc_303DA4 move.w #$21C,($FFFFF614).w cmp.w #4,($FFFFFFD4).w bne.s loc_303DA4 move.w #$1FE,($FFFFF614).w loc_303DA4: ; ... tst.b ($FFFFF730).w beq.s loc_303DC4 moveq #$15,d0 cmp.b #8,($FFFFFE10).w beq.s loc_303DC0 moveq #$16,d0 cmp.b #$D,($FFFFFE10).w beq.s loc_303DC0 moveq #$17,d0 loc_303DC0: ; ... bsr.w PalLoad4_Water loc_303DC4: ; ... move.w #-1,($FFFFB0BE).w move.b #$E,($FFFFB1E4).w move.w #$A,($FFFFB1F4).w loc_303DD6: ; ... move.b #$C,($FFFFF62A).w bsr.w DelayProgram jsr RunObjects jsr BuildSprites bsr.w RunPLC_RAM tst.b ($FFFFB140).w bne.s loc_303DD6 lea ($FFFFB080).w,a1 move.b #$16,$24(a1) move.w #$2D,$1E(a1) move.b #$16,$64(a1) move.w #$2D,$5E(a1) tst.b $80(a1) beq.s loc_303E24 move.b #$16,$A4(a1) move.w #$2D,$9E(a1) loc_303E24: ; ... move.b #0,($FFFFF7CC).w move.b #0,($FFFFF7CF).w move.b #1,($FFFFF711).w bclr #7,($FFFFF600).w Level_MainLoop: ; ... bsr.w PauseGame move.b #8,($FFFFF62A).w bsr.w DelayProgram addq.w #1,($FFFFFE04).w bsr.w MoveKnucklesInDemo bsr.w WaterEffects jsr RunObjects tst.w ($FFFFFE02).w bne.w Level jsr DeformBgLayer bsr.w UpdateWaterSurface jsr RingsManager cmp.b #$C,($FFFFFE10).w bne.s loc_303E82 jsr SpecialCNZBumpers loc_303E82: ; ... jsr sub_338770 bsr.w PalCycle_Load bsr.w RunPLC_RAM bsr.w OscillateNumDo bsr.w ChangeRingFrame bsr.w CheckLoadSignpostArt jsr BuildSprites jsr ObjPosLoad cmp.b #8,($FFFFF600).w beq.s loc_303EBC cmp.b #$C,($FFFFF600).w beq.w Level_MainLoop rts ; --------------------------------------------------------------------------- loc_303EBC: ; ... tst.w ($FFFFFE02).w bne.s loc_303EDA tst.w ($FFFFF614).w beq.s loc_303EDA cmp.b #8,($FFFFF600).w beq.w Level_MainLoop move.b #0,($FFFFF600).w rts ; --------------------------------------------------------------------------- loc_303EDA: ; ... cmp.b #8,($FFFFF600).w bne.s loc_303EE8 move.b #0,($FFFFF600).w loc_303EE8: ; ... move.w #$3C,($FFFFF614).w move.w #$3F,($FFFFF626).w clr.w ($FFFFF794).w loc_303EF8: ; ... move.b #8,($FFFFF62A).w bsr.w DelayProgram bsr.w MoveKnucklesInDemo jsr RunObjects jsr BuildSprites jsr ObjPosLoad subq.w #1,($FFFFF794).w bpl.s loc_303F28 move.w #2,($FFFFF794).w bsr.w Pal_FadeOut loc_303F28: ; ... tst.w ($FFFFF614).w bne.s loc_303EF8 rts ; =============== S U B R O U T I N E ======================================= sub_303F30: ; ... cmp.b #$88,($FFFFF600).w beq.s loc_303F46 tst.w ($FFFFFFDC).w bne.s loc_303F46 move.w ($FFFFFF72).w,($FFFFFF70).w rts ; --------------------------------------------------------------------------- loc_303F46: ; ... move.w #1,($FFFFFF70).w rts ; End of function sub_303F30 ; =============== S U B R O U T I N E ======================================= InitPlayers: ; ... move.w ($FFFFFF70).w,d0 bne.s InitPlayers_KnucklesAlone InitPlayers_KnucklesAndTails: ; Note that due to the inexistance of the Tails object, this pretty much does the same thing as the "Knuckles Alone" mode. move.b #1,($FFFFB000).w move.b #8,($FFFFD100).w cmp.b #6,($FFFFFE10).w beq.s return_303F9C cmp.b #$E,($FFFFFE10).w beq.s return_303F9C cmp.b #$10,($FFFFFE10).w beq.s return_303F9C move.b #2,($FFFFB040).w move.w ($FFFFB008).w,($FFFFB048).w move.w ($FFFFB00C).w,($FFFFB04C).w sub.w #$20,($FFFFB048).w add.w #4,($FFFFB04C).w move.b #8,($FFFFD140).w return_303F9C: ; ... rts ; --------------------------------------------------------------------------- InitPlayers_KnucklesAlone: ; ... subq.w #1,d0 bne.s InitPlayers_TailsAlone_Unused move.b #1,($FFFFB000).w move.b #8,($FFFFD100).w rts ; --------------------------------------------------------------------------- InitPlayers_TailsAlone_Unused: ; ... move.b #2,($FFFFB000).w move.b #8,($FFFFD140).w add.w #4,($FFFFB00C).w rts ; End of function InitPlayers ; =============== S U B R O U T I N E ======================================= UpdateWaterSurface: ; ... tst.b ($FFFFF730).w beq.s return_303FEC move.w ($FFFFEE00).w,d1 btst #0,($FFFFFE05).w beq.s loc_303FDA add.w #$20,d1 loc_303FDA: ; ... move.w d1,d0 add.w #$60,d0 move.w d0,($FFFFB388).w add.w #$120,d1 move.w d1,($FFFFB3C8).w return_303FEC: ; ... rts ; End of function UpdateWaterSurface ; =============== S U B R O U T I N E ======================================= WaterEffects: ; ... tst.b ($FFFFF730).w beq.s loc_30404A tst.b ($FFFFEEDC).w bne.s MoveWater cmp.b #6,($FFFFB024).w bcc.s MoveWater bsr.w DynamicWater MoveWater: ; ... clr.b ($FFFFF64E).w moveq #0,d0 cmp.b #$F,($FFFFFE10).w beq.s loc_30401A move.b ($FFFFFE60).w,d0 lsr.w #1,d0 loc_30401A: ; ... add.w ($FFFFF648).w,d0 move.w d0,($FFFFF646).w move.w ($FFFFF646).w,d0 sub.w ($FFFFEE04).w,d0 bcc.s loc_30403C tst.w d0 bpl.s loc_30403C move.b #$DF,($FFFFF625).w move.b #1,($FFFFF64E).w loc_30403C: ; ... cmp.w #$DF,d0 bcs.s loc_304046 move.w #$DF,d0 loc_304046: ; ... move.b d0,($FFFFF625).w loc_30404A: ; ... cmp.b #$A,($FFFFFE10).w bne.s loc_304056 bsr.w OilSlides loc_304056: ; ... cmp.b #6,($FFFFFE10).w bne.s return_304062 bsr.w WindTunnel return_304062: ; ... rts ; End of function WaterEffects ; --------------------------------------------------------------------------- WaterHeight: dc.b 6, 0 ; 0 ; ... dc.b 6, 0 ; 2 dc.b 6, 0 ; 4 dc.b 6, 0 ; 6 dc.b 6, 0 ; 8 dc.b 6, 0 ; 10 dc.b 6, 0 ; 12 dc.b 6, 0 ; 14 dc.b 6, 0 ; 16 dc.b 6, 0 ; 18 dc.b 6, 0 ; 20 dc.b 7, $10 ; 22 dc.b 6, 0 ; 24 dc.b 6, 0 ; 26 dc.b 4, $10 ; 28 dc.b 5, $10 ; 30 ; =============== S U B R O U T I N E ======================================= DynamicWater: ; ... moveq #0,d0 move.w ($FFFFFE10).w,d0 sub.w #$800,d0 ror.b #1,d0 lsr.w #6,d0 and.w #$FFFE,d0 move.w Dynamic_Water_Routine_Table(pc,d0.w),d0 jsr Dynamic_Water_Routine_Table(pc,d0.w) moveq #0,d1 move.b ($FFFFF64C).w,d1 move.w ($FFFFF64A).w,d0 sub.w ($FFFFF648).w,d0 beq.s return_3040B6 bcc.s loc_3040B2 neg.w d1 loc_3040B2: ; ... add.w d1,($FFFFF648).w return_3040B6: ; ... rts ; End of function DynamicWater ; --------------------------------------------------------------------------- Dynamic_Water_Routine_Table:dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 0 ; ... dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 1 ; This should be a dc.w table... dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 2 dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 3 dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 4 dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 5 dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 6 dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 7 dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 8 dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 9 dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 10 dc.w DynamicWaterCPZ2-Dynamic_Water_Routine_Table; 11 dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 12 dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 13 dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 14 dc.w DynamicWaterNull-Dynamic_Water_Routine_Table; 15 ; --------------------------------------------------------------------------- DynamicWaterNull: ; ... rts ; --------------------------------------------------------------------------- DynamicWaterCPZ2: ; ... cmp.w #$1DE0,($FFFFEE00).w bcs.s return_3040E8 move.w #$510,($FFFFF64A).w return_3040E8: ; ... rts ; =============== S U B R O U T I N E ======================================= WindTunnel: ; ... tst.w ($FFFFFE08).w bne.w return_30419E lea (word_3041A0).l,a2 moveq #1,d1 lea ($FFFFB000).w,a1 loc_3040FE: ; ... move.w 8(a1),d0 cmp.w (a2),d0 bcs.w loc_304188 cmp.w 4(a2),d0 bcc.w loc_304188 move.w $C(a1),d2 cmp.w 2(a2),d2 bcs.w loc_304188 cmp.w 6(a2),d2 bcc.s loc_304188 tst.b ($FFFFF7C9).w bne.w return_30419E cmp.b #4,$24(a1) bcc.s loc_30419A move.b #1,($FFFFF7C7).w sub.w #4,8(a1) move.w #$FC00,$10(a1) move.w #0,$12(a1) move.b #$F,$1C(a1) bset #1,$22(a1) bclr #4,$22(a1) move.b #0,$21(a1) btst #0,($FFFFF604).w beq.s loc_30417A move.w $C(a1),d2 cmp.w 2(a2),d2 bls.w loc_30417A subq.w #1,$C(a1) loc_30417A: ; ... btst #1,($FFFFF604).w beq.s return_304186 addq.w #1,$C(a1) return_304186: ; ... rts ; --------------------------------------------------------------------------- loc_304188: ; ... addq.w #8,a2 dbf d1,loc_3040FE tst.b ($FFFFF7C7).w beq.s return_30419E move.b #0,$1C(a1) loc_30419A: ; ... clr.b ($FFFFF7C7).w return_30419E: ; ... rts ; End of function WindTunnel ; --------------------------------------------------------------------------- word_3041A0: dc.w $1510 ; ... dc.w $420 dc.w $1AF0 dc.w $580 dc.w $20F0 dc.w $618 dc.w $2500 dc.w $680 ; =============== S U B R O U T I N E ======================================= OilSlides: ; ... lea ($FFFFB000).w,a1 move.b ($FFFFF602).w,d2 bsr.s sub_3041C2 lea ($FFFFB040).w,a1 move.b ($FFFFF66A).w,d2 ; End of function OilSlides ; =============== S U B R O U T I N E ======================================= sub_3041C2: ; ... btst #1,$22(a1) bne.s loc_3041F6 move.w $C(a1),d0 add.w d0,d0 and.w #$F00,d0 move.w 8(a1),d1 lsr.w #7,d1 and.w #$7F,d1 add.w d1,d0 lea ($FFFF8000).w,a2 move.b (a2,d0.w),d0 lea MoveKnucklesInDemo(pc),a2 moveq #$1F,d1 loc_3041EE: ; ... cmp.b -(a2),d0 dbeq d1,loc_3041EE beq.s loc_30420A loc_3041F6: ; ... tst.b $2B(a1) bpl.s return_304208 move.w #5,$2E(a1) and.b #$7F,$2B(a1) return_304208: ; ... rts ; --------------------------------------------------------------------------- loc_30420A: ; ... lea (byte_3042D6).l,a2 move.b (a2,d1.w),d0 beq.s loc_304266 move.b $14(a1),d1 tst.b d0 bpl.s loc_30422A cmp.b d0,d1 ble.s loc_304234 sub.w #$40,$14(a1) bra.s loc_304234 ; --------------------------------------------------------------------------- loc_30422A: ; ... cmp.b d0,d1 bge.s loc_304234 add.w #$40,$14(a1) loc_304234: ; ... bclr #0,$22(a1) tst.b d1 bpl.s loc_304244 bset #0,$22(a1) loc_304244: ; ... move.b #$1B,$1C(a1) or.b #$80,$2B(a1) move.b ($FFFFFE0F).w,d0 and.b #$1F,d0 bne.s return_304264 move.w #$F0,d0 jsr PlaySound return_304264: ; ... rts ; --------------------------------------------------------------------------- loc_304266: ; ... move.w #4,d1 move.w $14(a1),d0 btst #2,d2 beq.s loc_304288 move.b #0,$1C(a1) bset #0,$22(a1) sub.w d1,d0 tst.w d0 bpl.s loc_304288 sub.w d1,d0 loc_304288: ; ... btst #3,d2 beq.s loc_3042A2 move.b #0,$1C(a1) bclr #0,$22(a1) add.w d1,d0 tst.w d0 bmi.s loc_3042A2 add.w d1,d0 loc_3042A2: ; ... move.w #4,d1 tst.w d0 beq.s loc_3042CA bmi.s loc_3042BC sub.w d1,d0 bhi.s loc_3042BA move.w #0,d0 move.b #5,$1C(a1) loc_3042BA: ; ... bra.s loc_3042CA ; --------------------------------------------------------------------------- loc_3042BC: ; ... add.w d1,d0 bhi.s loc_3042CA move.w #0,d0 move.b #5,$1C(a1) loc_3042CA: ; ... move.w d0,$14(a1) or.b #$80,$2B(a1) rts ; End of function sub_3041C2 ; --------------------------------------------------------------------------- byte_3042D6: dc.b $F8, $F8, $F8, 8, 8, 0, 0, 0, $F8, $F8, 0, 8, 8, 8; 0 ; ... dc.b 0, 8, 8, 8, 0, $F8, 0, 0, $F8, 8, $F8, $F8, $F8, 8; 14 dc.b 8, 8, $F8, $F8, $2F, $30, $31, $33, $35, $38, $3A; 28 dc.b $3C, $63, $64, $83, $90, $91, $93, $A1, $A3, $BD; 39 dc.b $C7, $C8, $CE, $D7, $D8, $E6, $EB, $EC, $ED, $F1; 49 dc.b $F2, $F3, $F4, $FA, $FD ; 59 ; =============== S U B R O U T I N E ======================================= MoveKnucklesInDemo: ; ... tst.w ($FFFFFFD0).w bne.w MoveDemo_On rts ; --------------------------------------------------------------------------- MoveDemo_Record_Unused: lea (DemoScriptPointers).l,a1 moveq #0,d0 move.b ($FFFFFE10).w,d0 lsl.w #2,d0 move.l (a1,d0.w),a1 move.w ($FFFFF790).w,d0 add.w d0,a1 move.b ($FFFFF604).w,d0 cmp.b (a1),d0 bne.s loc_30434E addq.b #1,1(a1) cmp.b #$FF,1(a1) beq.s loc_30434E bra.s MoveDemo_Record_P2 ; --------------------------------------------------------------------------- loc_30434E: ; ... move.b d0,2(a1) move.b #0,3(a1) addq.w #2,($FFFFF790).w and.w #$3FF,($FFFFF790).w MoveDemo_Record_P2: ; ... cmp.b #0,($FFFFFE10).w bne.s return_3043A0 lea ($FEC000).l,a1 move.w ($FFFFF732).w,d0 add.w d0,a1 move.b ($FFFFF606).w,d0 cmp.b (a1),d0 bne.s loc_30438C addq.b #1,1(a1) cmp.b #-1,1(a1) beq.s loc_30438C bra.s return_3043A0 ; --------------------------------------------------------------------------- loc_30438C: ; ... move.b d0,2(a1) move.b #0,3(a1) addq.w #2,($FFFFF732).w and.w #$3FF,($FFFFF732).w return_3043A0: ; ... rts ; --------------------------------------------------------------------------- MoveDemo_On: ; ... move.b ($FFFFF605).w,d0 or.b ($FFFFF607).w,d0 and.b #$80,d0 beq.s loc_3043BC tst.w ($FFFFFFD0).w bmi.s loc_3043BC move.b #4,($FFFFF600).w loc_3043BC: ; ... lea (DemoScriptPointers).l,a1 moveq #0,d0 move.b ($FFFFFE10).w,d0 cmp.b #$10,($FFFFF600).w bne.s MoveDemo_On_P1 moveq #6,d0 MoveDemo_On_P1: ; ... lsl.w #2,d0 move.l (a1,d0.w),a1 move.w ($FFFFF790).w,d0 add.w d0,a1 move.b (a1),d0 lea ($FFFFF604).w,a0 move.b d0,d1 moveq #0,d2 eor.b d2,d0 move.b d1,(a0)+ and.b d1,d0 move.b d0,(a0)+ subq.b #1,($FFFFF792).w bcc.s loc_304400 move.b 3(a1),($FFFFF792).w addq.w #2,($FFFFF790).w loc_304400: ; ... move.w #0,($FFFFF606).w rts ; End of function MoveKnucklesInDemo ; --------------------------------------------------------------------------- DemoScriptPointers:dc.l Demo_EHZ,Demo_EHZ,Demo_EHZ,Demo_EHZ,Demo_EHZ,Demo_EHZ; 0 ; ... dc.l Demo_EHZ,Demo_EHZ,Demo_EHZ,Demo_EHZ,Demo_EHZ,Demo_EHZ; 6 dc.l Demo_CNZ,Demo_CPZ,Demo_EHZ,Demo_ARZ,Demo_EHZ; 12 word_30444C: dc.w $8B, $837, $42, $85C, $6A, $85F, $2F, $82C, $21; 0 ; ... dc.w $803,$2830, $808, $2E, $815, $F, $846, $1A, $8FF; 9 dc.w $8CA, 0, 0, 0, 0, 0; 18 ; =============== S U B R O U T I N E ======================================= LoadCollisionIndexes: ; ... moveq #0,d0 move.b ($FFFFFE10).w,d0 lsl.w #2,d0 move.l #$FFFFD600,($FFFFF796).w move.w d0,-(sp) move.l Off_ColP(pc,d0.w),a0 lea ($FFFFD600).w,a1 bsr.w KosDec move.w (sp)+,d0 move.l Off_ColS(pc,d0.w),a0 lea ($FFFFD900).w,a1 bra.w KosDec ; End of function LoadCollisionIndexes ; --------------------------------------------------------------------------- Off_ColP: dc.l S2_ColP_EHZHTZ ; 0 ; S2_ColP_EHZHTZ dc.l S2_Off_Level ; 1 dc.l S2_ColP_MTZ ; 2 dc.l S2_Off_Level ; 3 dc.l S2_ColP_MTZ ; 4 dc.l S2_ColP_MTZ ; 5 dc.l S2_ColP_WFZSCZ ; 6 dc.l S2_ColP_EHZHTZ ; 7 dc.l S2_ColP_OOZ ; 8 dc.l S2_Off_Level ; 9 dc.l S2_ColP_OOZ ; 10 dc.l S2_ColP_MCZ ; 11 dc.l S2_ColP_CNZ ; 12 dc.l S2_ColP_CPZDEZ ; 13 dc.l S2_ColP_CPZDEZ ; 14 dc.l S2_ColP_ARZ ; 15 dc.l S2_ColP_WFZSCZ ; 16 Off_ColS: dc.l S2_ColS_EHZHTZ ; 0 dc.l S2_Off_Level ; 1 dc.l S2_ColP_MTZ ; 2 dc.l S2_Off_Level ; 3 dc.l S2_ColP_MTZ ; 4 dc.l S2_ColP_MTZ ; 5 dc.l S2_ColS_WFZSCZ ; 6 dc.l S2_ColS_EHZHTZ ; 7 dc.l S2_ColP_OOZ ; 8 dc.l S2_Off_Level ; 9 dc.l S2_ColP_OOZ ; 10 dc.l S2_ColP_MCZ ; 11 dc.l S2_ColS_CNZ ; 12 dc.l S2_ColS_CPZDEZ ; 13 dc.l S2_ColS_CPZDEZ ; 14 dc.l S2_ColS_ARZ ; 15 dc.l S2_ColS_WFZSCZ ; 16 ; =============== S U B R O U T I N E ======================================= OscillateNumInit: ; ... lea ($FFFFFE5E).w,a1 lea (Osc_Data).l,a2 moveq #$20,d1 loc_30453C: ; ... move.w (a2)+,(a1)+ dbf d1,loc_30453C rts ; End of function OscillateNumInit ; --------------------------------------------------------------------------- Osc_Data: dc.w $7D,$80 ; 0 ; ... dc.w 0,$80 ; 2 dc.w 0,$80 ; 4 dc.w 0,$80 ; 6 dc.w 0,$80 ; 8 dc.w 0,$80 ; 10 dc.w 0,$80 ; 12 dc.w 0,$80 ; 14 dc.w 0,$80 ; 16 dc.w 0,$3848 ; 18 dc.w $EE,$2080 ; 20 dc.w $B4,$3080 ; 22 dc.w $10E,$5080 ; 24 dc.w $1C2,$7080 ; 26 dc.w $276,$80 ; 28 dc.w 0,$4000 ; 30 dc.w $FE ; 32 ; =============== S U B R O U T I N E ======================================= OscillateNumDo: ; ... tst.w ($FFFFFFDC).w bne.s loc_304594 cmp.b #6,($FFFFB024).w bcc.s return_3045E2 loc_304594: ; ... lea ($FFFFFE5E).w,a1 lea (Osc_Data2).l,a2 move.w (a1)+,d3 moveq #$F,d1 loc_3045A2: ; ... move.w (a2)+,d2 move.w (a2)+,d4 btst d1,d3 bne.s loc_3045C2 move.w 2(a1),d0 add.w d2,d0 move.w d0,2(a1) add.w d0,0(a1) cmp.b 0(a1),d4 bhi.s loc_3045D8 bset d1,d3 bra.s loc_3045D8 ; --------------------------------------------------------------------------- loc_3045C2: ; ... move.w 2(a1),d0 sub.w d2,d0 move.w d0,2(a1) add.w d0,0(a1) cmp.b 0(a1),d4 bls.s loc_3045D8 bclr d1,d3 loc_3045D8: ; ... addq.w #4,a1 dbf d1,loc_3045A2 move.w d3,($FFFFFE5E).w return_3045E2: ; ... rts ; End of function OscillateNumDo ; --------------------------------------------------------------------------- Osc_Data2: dc.w 2,$10 ; 0 ; ... dc.w 2,$18 ; 2 dc.w 2,$20 ; 4 dc.w 2,$30 ; 6 dc.w 4,$20 ; 8 dc.w 8, 8 ; 10 dc.w 8,$40 ; 12 dc.w 4,$40 ; 14 dc.w 2,$38 ; 16 dc.w 2,$38 ; 18 dc.w 2,$20 ; 20 dc.w 3,$30 ; 22 dc.w 5,$50 ; 24 dc.w 7,$70 ; 26 dc.w 2,$40 ; 28 dc.w 2,$40 ; 30 ; =============== S U B R O U T I N E ======================================= ChangeRingFrame: ; ... subq.b #1,($FFFFFEA0).w bpl.s loc_30463A move.b #$B,($FFFFFEA0).w subq.b #1,($FFFFFEA1).w and.b #7,($FFFFFEA1).w loc_30463A: ; ... subq.b #1,($FFFFFEA2).w bpl.s loc_304650 move.b #7,($FFFFFEA2).w addq.b #1,($FFFFFEA3).w and.b #3,($FFFFFEA3).w loc_304650: ; ... subq.b #1,($FFFFFEA4).w bpl.s loc_30466E move.b #7,($FFFFFEA4).w addq.b #1,($FFFFFEA5).w cmp.b #6,($FFFFFEA5).w bcs.s loc_30466E move.b #0,($FFFFFEA5).w loc_30466E: ; ... tst.b ($FFFFFEA6).w beq.s return_304690 moveq #0,d0 move.b ($FFFFFEA6).w,d0 add.w ($FFFFFEA8).w,d0 move.w d0,($FFFFFEA8).w rol.w #7,d0 and.w #3,d0 move.b d0,($FFFFFEA7).w subq.b #1,($FFFFFEA6).w return_304690: ; ... rts ; End of function ChangeRingFrame ; =============== S U B R O U T I N E ======================================= SetLevelEndType: ; ... move.w #0,($FFFFFFC8).w tst.w ($FFFFFFDC).w bne.s LevelEnd_SetSignpost cmp.w #1,($FFFFFE10).w beq.w return_304706 cmp.w #$500,($FFFFFE10).w beq.w return_304706 cmp.w #$600,($FFFFFE10).w beq.w return_304706 cmp.w #$701,($FFFFFE10).w beq.w return_304706 cmp.w #$A01,($FFFFFE10).w beq.w return_304706 cmp.w #$B01,($FFFFFE10).w beq.s return_304706 cmp.w #$C01,($FFFFFE10).w beq.s return_304706 cmp.w #$D01,($FFFFFE10).w beq.s return_304706 cmp.w #$E00,($FFFFFE10).w beq.s return_304706 cmp.w #$F01,($FFFFFE10).w beq.s return_304706 cmp.w #$1000,($FFFFFE10).w beq.s return_304706 LevelEnd_SetSignpost: ; ... move.w #1,($FFFFFFC8).w return_304706: ; ... rts ; End of function SetLevelEndType ; =============== S U B R O U T I N E ======================================= CheckLoadSignpostArt: ; ... tst.w ($FFFFFFC8).w beq.s return_304766 tst.w ($FFFFFE08).w bne.s return_304766 move.w ($FFFFEE00).w,d0 move.w ($FFFFEECA).w,d1 sub.w #$100,d1 cmp.w d1,d0 blt.s SignpostUpdateTailsBounds_Useless tst.b ($FFFFFE1E).w beq.s SignpostUpdateTailsBounds_Useless cmp.w ($FFFFEEC8).w,d1 beq.s SignpostUpdateTailsBounds_Useless move.w d1,($FFFFEEC8).w tst.w ($FFFFFFDC).w bne.s return_304766 moveq #$27,d0 bra.w LoadPLC2 ; --------------------------------------------------------------------------- SignpostUpdateTailsBounds_Useless: ; ... tst.w ($FFFFFFDC).w beq.s return_304766 move.w ($FFFFEE20).w,d0 move.w ($FFFFEEFA).w,d1 sub.w #$100,d1 cmp.w d1,d0 blt.s return_304766 tst.b ($FFFFFECA).w beq.s return_304766 cmp.w ($FFFFEEF8).w,d1 beq.s return_304766 move.w d1,($FFFFEEF8).w return_304766: ; ... rts ; End of function CheckLoadSignpostArt ; --------------------------------------------------------------------------- Demo_EHZ: dc.b 0,$4B, 8,$44,$28, 8, 8,$3E,$28, 5, 8,$AF,$28; 0 ; ... dc.b 9, 8,$45, 0,$1D, 4, $E, 0, 4, 4, 4, 0, 8; 13 dc.b 4,$3E, 0, 4, 8,$66, 0,$61, 8,$11, 0,$21, 2; 26 dc.b 7,$22, 6, 2, $D, 0,$2B, 8,$19, 0,$1D, 2, 6; 39 dc.b $22, 6, 2, 1, 0, $E, 8,$FF, 8,$2E, 0,$22,$20; 52 dc.b 7,$28, $F, 8, 2, 0,$2F,$28,$23, 8,$BD, 0, $B; 65 dc.b 4,$13, 0,$16, 2, 2,$22, 6, 2, 2, 0,$63,$80; 78 dc.b 0,$40, 0, 0, 0 ; 91 Demo_EHZ_Tails: dc.b 0,$3B, 8, $F, 9,$43,$29, 6, 9, 6, 8,$C9, 0; 0 ; ... dc.b $11, 8, 1,$28, 8, 8,$52, 0,$11, 8, $A,$28, $E; 13 dc.b 8,$23, 0, $A,$20, 4, 0, $D, 8,$55, 0,$1E, 8; 26 dc.b $5A, 0,$10, 8,$FF, 8,$C0, 0,$20, 4, $D, 0, $D; 39 dc.b $20, 4,$28, $F,$20, 5, 0, $C, 4, 5, 0,$5E, 8; 52 dc.b $73, 0,$18, 4,$44, 0, 8, 2,$30, 0, 8, 8, $D; 65 dc.b 0,$23, 8,$27, 0, 4, 8, 0, 0, 0, 0, 0, 0; 78 dc.b 0, 0, 0, 0, 0 ; 91 Demo_CNZ: dc.b 0,$48, 8,$10, 9, 0, 8, 1, 9, 6, 8,$60,$28; 0 ; ... dc.b 5,$20, 1, 0, 8, 4, 2, 6, 3, 4, 1, 0,$19; 13 dc.b 8,$11,$28,$19,$20, 4,$28,$23, 8,$1A, 0, 7, 4; 26 dc.b $10, 0, $E, 8,$77,$28,$16,$20, 0, 0, $F, 4,$11; 39 dc.b 0, 7, 8,$52, 0,$6F, 8,$74, 0,$37, 8,$16, 0; 52 dc.b 4, 4,$26, 0, $C, 4,$12, 0,$69,$20,$10,$28, 2; 65 dc.b $2A, 5, $A,$14, 8, 5, 0, 5, 4, $C, 0,$48, 4; 78 dc.b 9, 0,$1E, 8, 6, 0,$2F, 4, 1, 0,$FF, 0,$4F; 91 dc.b 8, 0,$28, $B, 8,$2A, 0,$5E; 104 Demo_CPZ: dc.b 0,$46, 8,$1B,$28, 7, 8, 9, 0,$1B, 8, $D,$28; 0 ; ... dc.b $28, 8,$FF, 8,$E7, $A, 4, 2, 1, 4,$33, 6,$67; 13 dc.b 4, 0, 0,$15,$20, 0,$24, 7, 4, $E, 0,$17, 8; 26 dc.b 1, $A, 1, 8, $C, 0,$1F,$28, 6, 8, $A, 0,$1B; 39 dc.b 4, $D, 0,$1C, 4, 6, 0,$FF, 0,$DF, 8, $E, 0; 52 dc.b $1C, 4, 2, 0,$25, 8, 6, 0, 6,$20, 4, 0,$28; 65 dc.b 4,$11, 0,$17, 8,$19, 0,$10, 4,$2D, 0,$13,$80; 78 dc.b 0,$40, 0, 0, 0 ; 91 Demo_ARZ: dc.b 0,$42, 8,$4A,$28, 8, 8,$4F,$28, $B, 8, 5, 0; 0 ; ... dc.b $1A, 8,$60,$28,$14, 8,$54, 0,$40, 8, 4, 9, 0; 13 dc.b 8,$5B, 0,$46, 8,$3B,$28, 8, 8,$27, 0, $A, 8; 26 dc.b $92,$28,$32, 8,$22, 0,$22, 8,$4C, 0,$1E, 4, 1; 39 dc.b 5, 2, 4, 0, 0, $A, 4, $C, 0,$10, 8, 5, 0; 52 dc.b $61, 8, 3,$28, 5, 8,$16, 0,$1B, 8,$56,$28, $A; 65 dc.b 8,$16, 0,$15, 8, $C, 0,$2B,$20, 1,$28,$1A, 8; 78 dc.b $82, 0, $B,$80, 0 ; 91 ; =============== S U B R O U T I N E ======================================= sub_304958: ; ... moveq #0,d0 move.b ($FFFFFE10).w,d0 add.w d0,d0 add.w d0,d0 move.w d0,d1 add.w d0,d0 add.w d1,d0 lea (LevelArtPointers).l,a2 lea (a2,d0.w),a2 move.l (a2)+,d0 and.l #$FFFFFF,d0 move.l d0,a0 lea ($FFFF0000).l,a1 bsr.w KosDec move.w a1,d3 cmp.b #7,($FFFFFE10).w bne.s loc_3049A4 lea (S2_ArtKoz_98AB4).l,a0 ; S2_ArtKoz_98AB4 lea ($FFFF3F80).l,a1 bsr.w KosDec move.w #$6FC0,d3 loc_3049A4: ; ... cmp.b #6,($FFFFFE10).w bne.s loc_3049C0 lea (S2_ArtKoz_C7EC4).l,a0 ; S2_ArtKoz_C7EC4 lea ($FFFF60E0).l,a1 bsr.w KosDec move.w #$6F20,d3 loc_3049C0: ; ... cmp.b #$E,($FFFFFE10).w bne.s loc_3049CC move.w #$64C0,d3 loc_3049CC: ; ... move.w d3,d7 and.w #$FFF,d3 lsr.w #1,d3 rol.w #4,d7 and.w #$F,d7 loc_3049DA: ; ... move.w d7,d2 lsl.w #7,d2 lsl.w #5,d2 move.l #$FFFFFF,d1 move.w d2,d1 jsr QueueDMATransfer move.w d7,-(sp) move.b #$C,($FFFFF62A).w bsr.w DelayProgram bsr.w RunPLC_RAM move.w (sp)+,d7 move.w #$800,d3 dbf d7,loc_3049DA rts ; End of function sub_304958 ; --------------------------------------------------------------------------- SpecialStage: ; ... cmp.b #7,($FFFFFE16).w bcs.s loc_304A18 move.b #0,($FFFFFE16).w loc_304A18: ; ... move.w #$CA,d0 bsr.w PlaySound move.b #$F9,d0 bsr.w PlayMusic bsr.w Pal_MakeFlash tst.w ($FFFFFFDC).w beq.s loc_304A3E move.w #0,($FFFFFFDC).w st ($FFFFFE00).w bra.s loc_304A42 ; --------------------------------------------------------------------------- loc_304A3E: ; ... sf ($FFFFFE00).w loc_304A42: ; ... move #$2700,sr lea ($C00004).l,a6 move.w #$8B03,(a6) move.w #$8004,(a6) move.w #$8ADF,($FFFFF624).w move.w #$8230,(a6) move.w #$8405,(a6) move.w #$8C08,(a6) move.w #$9003,(a6) move.w #$8700,(a6) move.w #$8D3F,(a6) move.w #$857C,(a6) move.w ($FFFFF60C).w,d0 and.b #$BF,d0 move.w d0,($C00004).l lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$941F93FF,(a5) move.w #$9780,(a5) move.l #$40000082,(a5) move.w #0,($C00000).l loc_304AA6: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_304AA6 move.w #$8F02,(a5) lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$941F93FF,(a5) move.w #$9780,(a5) move.l #$40000083,(a5) move.w #0,($C00000).l loc_304AD4: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_304AD4 move.w #$8F02,(a5) lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$941F93FF,(a5) move.w #$9780,(a5) move.l #$60000082,(a5) move.w #0,($C00000).l loc_304B02: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_304B02 move.w #$8F02,(a5) lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$9403937F,(a5) move.w #$9780,(a5) move.l #$7C000083,(a5) move.w #0,($C00000).l loc_304B30: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_304B30 move.w #$8F02,(a5) clr.l ($FFFFF616).w clr.l ($FFFFF61A).w clr.b ($FFFFDB23).w lea ($FFFFF800).w,a1 moveq #0,d0 move.w #$A0,d1 loc_304B52: ; ... move.l d0,(a1)+ dbf d1,loc_304B52 lea ($FFFFE000).w,a1 moveq #0,d0 move.w #$100,d1 loc_304B62: ; ... move.l d0,(a1)+ dbf d1,loc_304B62 lea ($FFFFD000).w,a1 moveq #0,d0 move.w #$300,d1 loc_304B72: ; ... move.l d0,(a1)+ dbf d1,loc_304B72 lea ($FFFFAC00).w,a1 moveq #0,d0 move.w #$FF,d1 loc_304B82: ; ... move.l d0,(a1)+ dbf d1,loc_304B82 lea ($FFFFB000).w,a1 moveq #0,d0 move.w #$7FF,d1 loc_304B92: ; ... move.l d0,(a1)+ dbf d1,loc_304B92 move #$2300,sr lea ($C00004).l,a6 move.w #$8F02,(a6) bsr.w ssInitTableBuffers bsr.w ssLoadCompressedData move.w #0,($FFFFDB0A).w moveq #$3C,d0 bsr.w RunPLC_ROM clr.b ($FFFFF711).w move.l #0,($FFFFEE00).w move.l #0,($FFFFEE04).w move.l #0,($FFFFEEF0).w move.l #0,($FFFFEEF4).w cmp.w #1,($FFFFFF70).w bgt.s loc_304BF2 move.b #9,($FFFFB000).w tst.w ($FFFFFF70).w bne.s loc_304BF8 loc_304BF2: ; ... move.b #$10,($FFFFB040).w loc_304BF8: ; ... move.b #$5E,($FFFFB080).w move.b #$5F,($FFFFB0C0).w move.b #$87,($FFFFB100).w move.w #$80,($FFFFF73E).w move.w #$36,($FFFFF740).w bsr.w sub_306800 bsr.w sub_30688A bsr.w loc_307202 move.l #$C0000,($FFFFDB12).w clr.w ($FFFFF602).w clr.w ($FFFFF66A).w loc_304C32: ; ... move.b #$A,($FFFFF62A).w bsr.w DelayProgram move.b ($FFFFDB0D).w,d0 bne.s loc_304C32 bsr.w sub_3050AE loc_304C46: ; ... move.b #$A,($FFFFF62A).w bsr.w DelayProgram bsr.w sub_3050AE bsr.w sub_304FBE bsr.w sub_304FDE move.b ($FFFFDB1F).w,d0 subq.w #1,d0 bne.s loc_304C46 jsr sub_32E5A6 bsr.w sub_30689A jsr RunObjects jsr BuildSprites bsr.w RunPLC_RAM move.b #$1A,($FFFFF62A).w bsr.w DelayProgram move.w #$92,d0 bsr.w PlayMusic move.w ($FFFFF60C).w,d0 or.b #$40,d0 move.w d0,($C00004).l bsr.w Pal_MakeWhite SpecialStage_MainLoop: ; ... bsr.w PauseGame move.w ($FFFFF604).w,($FFFFF602).w move.w ($FFFFF606).w,($FFFFF66A).w cmp.b #$10,($FFFFF600).w bne.w loc_304EC4 move.b #$A,($FFFFF62A).w bsr.w DelayProgram bsr.w sub_3050AE bsr.w sub_3070CC bsr.w sub_304FBE bsr.w sub_304FDE bsr.w sub_30689A jsr RunObjects jsr BuildSprites bsr.w RunPLC_RAM tst.b ($FFFFDB23).w beq.s SpecialStage_MainLoop moveq #$3D,d0 bsr.w LoadPLC loc_304CF6: ; ... bsr.w PauseGame cmp.b #$10,($FFFFF600).w bne.w loc_304EC4 move.b #$A,($FFFFF62A).w bsr.w DelayProgram bsr.w sub_3050AE bsr.w sub_3070CC bsr.w sub_304FBE bsr.w sub_304FDE bsr.w sub_30689A bsr.w sub_304EE4 tst.b ($FFFFDB87).w beq.s loc_304D46 move.w ($FFFFF604).w,d0 and.w #$8080,d0 move.w d0,($FFFFF602).w move.w ($FFFFF606).w,d0 and.w #$8080,d0 move.w d0,($FFFFF66A).w bra.s loc_304D52 ; --------------------------------------------------------------------------- loc_304D46: ; ... move.w ($FFFFF604).w,($FFFFF602).w move.w ($FFFFF606).w,($FFFFF66A).w loc_304D52: ; ... jsr RunObjects tst.b ($FFFFDB86).w bne.s loc_304D6A jsr BuildSprites bsr.w RunPLC_RAM bra.s loc_304CF6 ; --------------------------------------------------------------------------- loc_304D6A: ; ... and.b #7,($FFFFFFB1).w tst.b ($FFFFFE00).w beq.s loc_304D88 lea ($FFFFFFA0).w,a0 move.w (a0)+,d0 add.w (a0)+,d0 add.w (a0)+,d0 add.w (a0)+,d0 add.w (a0)+,d0 add.w (a0)+,d0 bra.s loc_304D90 ; --------------------------------------------------------------------------- loc_304D88: ; ... move.w ($FFFFFE20).w,d0 add.w ($FFFFFED0).w,d0 loc_304D90: ; ... cmp.w ($FFFFDB9A).w,d0 bne.s loc_304D9A st ($FFFFFF42).w loc_304D9A: ; ... bsr.w Pal_MakeFlash tst.w ($FFFFFF8A).w bne.w loc_304EB6 move #$2700,sr lea ($C00004).l,a6 move.w #$8230,(a6) move.w #$8407,(a6) move.w #$9001,(a6) move.w #$8C81,(a6) bsr.w ClearScreen jsr HUD_Base clr.w ($FFFFDC00).w move.l #$FFFFDC00,($FFFFDCFC).w move #$2300,sr moveq #$27,d0 bsr.w PalLoad2 moveq #0,d0 bsr.w LoadPLC2 move.l #$40400000,d0 lea word_307284(pc),a0 jsr sub_312336 move.l #$72000002,($C00004).l lea (S2_ArtNem_SpecialStageResults).l,a0 ; S2_ArtNem_SpecialStageResults bsr.w NemDec move.w ($FFFFFF70).w,d0 beq.s loc_304E1E subq.w #1,d0 beq.s loc_304E1A clr.w ($FFFFFE20).w bra.s loc_304E1E ; --------------------------------------------------------------------------- loc_304E1A: ; ... clr.w ($FFFFFED0).w loc_304E1E: ; ... move.w ($FFFFFE20).w,($FFFFF7D2).w move.w ($FFFFFED0).w,($FFFFF7D4).w clr.w ($FFFFFF8E).w tst.b ($FFFFFFB0).w beq.s loc_304E3A move.w #$3E8,($FFFFFF8E).w loc_304E3A: ; ... move.b #1,($FFFFFE1F).w move.b #1,($FFFFF7D6).w move.w #$9A,d0 jsr PlaySound lea ($FFFFAC00).w,a1 moveq #0,d0 move.w #$FF,d1 loc_304E5A: ; ... move.l d0,(a1)+ dbf d1,loc_304E5A lea ($FFFFB000).w,a1 moveq #0,d0 move.w #$7FF,d1 loc_304E6A: ; ... move.l d0,(a1)+ dbf d1,loc_304E6A move.b #$6F,($FFFFB800).w loc_304E76: ; ... move.b #8,($FFFFF62A).w bsr.w DelayProgram jsr RunObjects jsr BuildSprites bsr.w RunPLC_RAM tst.w ($FFFFFE02).w beq.s loc_304E76 tst.l ($FFFFF680).w bne.s loc_304E76 move.w #$CA,d0 bsr.w PlaySound bsr.w Pal_MakeFlash tst.w ($FFFFFF8A).w bne.s loc_304EB6 move.b #$C,($FFFFF600).w rts ; --------------------------------------------------------------------------- loc_304EB6: ; ... move.w #3,($FFFFFF10).w move.b #$18,($FFFFF600).w rts ; --------------------------------------------------------------------------- loc_304EC4: ; ... move.b #$FF,($FFFFFFE0).w move.b #8,($FFFFF62A).w bra.w DelayProgram ; --------------------------------------------------------------------------- Pal_SpecialStageStars:dc.w $EEE,$CCC,$AAA,$888,$888,$AAA,$CCC,$EEE; 0 ; =============== S U B R O U T I N E ======================================= sub_304EE4: ; ... move.b ($FFFFFE0F).w,d0 and.b #3,d0 bne.s loc_304F1A move.b ($FFFFDB9E).w,d0 add.b #1,($FFFFDB9E).w and.w #7,d0 add.w d0,d0 move.w Pal_SpecialStageStars(pc,d0.w),($FFFFFB1C).w move.b ($FFFFDB9F).w,d0 add.b #1,($FFFFDB9F).w and.w #7,d0 add.w d0,d0 move.w Pal_SpecialStageStars(pc,d0.w),($FFFFFB1E).w loc_304F1A: ; ... cmp.b #6,($FFFFFE16).w bne.s loc_304F2C cmp.b #3,($FFFFFE17).w beq.w loc_304F86 loc_304F2C: ; ... tst.b ($FFFFDB98).w beq.s return_304F64 move.b ($FFFFFE0F).w,d0 and.b #7,d0 bne.s return_304F64 move.b ($FFFFDB99).w,d0 add.b #1,($FFFFDB99).w and.b #3,d0 add.w d0,d0 move.w d0,d1 add.w d0,d0 add.w d1,d0 move.w word_304F6E(pc,d0.w),($FFFFFB76).w move.w word_304F70(pc,d0.w),($FFFFFB78).w move.w word_304F72(pc,d0.w),($FFFFFB7A).w return_304F64: ; ... rts ; --------------------------------------------------------------------------- dc.w $EE,$C0,$EE,$C0 ; 0 word_304F6E: dc.w $EE word_304F70: dc.w $CC word_304F72: dc.w $88,$E0,$C0,$80,$EE0,$CC0,$880,$E0E,$C0C,$808; 0 ; --------------------------------------------------------------------------- loc_304F86: ; ... tst.b ($FFFFDB87).w beq.s loc_304F2C moveq #0,d0 move.b ($FFFFFE0F).w,d0 and.b #1,d0 bne.w loc_304F2C move.w ($FFFFFE20).w,d2 add.w ($FFFFFED0).w,d2 cmp.w ($FFFFDB8C).w,d2 blt.w loc_304F2C lea ($FFFFFB02).w,a0 move.l a0,a1 move.w (a0)+,d0 moveq #$B,d1 loc_304FB4: ; ... move.w (a0)+,(a1)+ dbf d1,loc_304FB4 move.w d0,(a1) rts ; End of function sub_304EE4 ; =============== S U B R O U T I N E ======================================= sub_304FBE: ; ... cmp.b #4,($FFFFDB0D).w bne.s return_304FDC move.l #$FFFF6A60,a0 moveq #0,d0 move.b ($FFFFDB10).w,d0 add.w d0,d0 add.w (a0,d0.w),a0 move.l a0,($FFFFDB82).w return_304FDC: ; ... rts ; End of function sub_304FBE ; =============== S U B R O U T I N E ======================================= sub_304FDE: ; ... cmp.b #4,($FFFFDB0D).w bne.w return_305086 moveq #0,d0 move.b ($FFFFDB0A).w,d0 cmp.b ($FFFFDB4C).w,d0 beq.w return_305086 move.b d0,($FFFFDB4C).w move.l ($FFFFDB8E).w,a1 move.b (a1,d0.w),d3 and.w #$7F,d3 lea (byte_3050A8).l,a0 move.b (a0,d3.w),d3 add.w d3,d3 add.w d3,d3 move.l ($FFFFDB88).w,a0 loc_305018: ; ... bsr.w SpecialStageObjectLoad bne.s return_305086 moveq #0,d0 move.b (a0)+,d0 bmi.s loc_30505C move.b d0,d1 and.b #$40,d1 bne.s loc_305044 addq.w #1,($FFFFDB9A).w move.b #$60,(a1) add.w d0,d0 add.w d0,d0 add.w d3,d0 move.w d0,$30(a1) move.b (a0)+,$26(a1) bra.s loc_305018 ; --------------------------------------------------------------------------- loc_305044: ; ... and.w #$3F,d0 move.b #$61,(a1) add.w d0,d0 add.w d0,d0 add.w d3,d0 move.w d0,$30(a1) move.b (a0)+,$26(a1) bra.s loc_305018 ; --------------------------------------------------------------------------- loc_30505C: ; ... move.l a0,($FFFFDB88).w addq.b #1,d0 beq.s return_305086 addq.b #1,d0 beq.s loc_305082 addq.b #1,d0 beq.s loc_305076 st ($FFFFDB95).w sf ($FFFFDBA0).w bra.s loc_305082 ; --------------------------------------------------------------------------- loc_305076: ; ... tst.b ($FFFFFE00).w bne.s loc_305082 move.b #$59,(a1) rts ; --------------------------------------------------------------------------- loc_305082: ; ... move.b #$5A,(a1) return_305086: ; ... rts ; End of function sub_304FDE ; --------------------------------------------------------------------------- dword_305088: dc.l $40000002,$47000002,$4E000002,$55000002,$40000003,$47000003,$4E000003,$55000003; 0 ; ... byte_3050A8: dc.b $18,$18,$C,$10,$B, 0 ; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_3050AE: ; ... moveq #0,d0 move.b ($FFFFDB0D).w,d0 cmp.b #4,d0 bge.w sub_3066B8 add.w d0,d0 add.w d0,d0 bne.w loc_30517E move.l ($FFFFDB2C).w,($FFFFDB28).w move.b ($FFFFDB10).w,($FFFFDB39).w moveq #0,d1 moveq #0,d2 moveq #0,d3 moveq #0,d4 move.b ($FFFFDB0A).w,d1 move.b ($FFFFDB0B).w,d2 move.l ($FFFFDB8E).w,a1 move.b (a1,d1.w),d3 and.b #$7F,d3 move.b d3,($FFFFDB08).w move.w d3,d1 add.w d3,d3 lea (Ani_SpecialStageTrack).l,a1 add.w (a1,d3.w),a1 add.w d2,a1 moveq #0,d4 move.b (a1),d4 move.b d4,($FFFFDB10).w lsl.w #2,d4 lea (Map_SpecialStageTrack).l,a1 move.l (a1,d4.w),a0 move.l a0,a1 moveq #0,d2 move.b (a0)+,d2 move.b (a0)+,d2 move.b (a0)+,d2 lsl.w #8,d2 move.b (a0)+,d2 addq.w #4,d2 add.w d2,a1 move.l a1,a2 moveq #0,d2 move.b (a1)+,d2 move.b (a1)+,d2 move.b (a1)+,d2 lsl.w #8,d2 move.b (a1)+,d2 addq.w #4,d2 add.w d2,a2 move.b (a2)+,d2 move.b (a2)+,d2 move.b (a2)+,d2 move.b (a2)+,d2 move.l a0,($FFFFDB00).w move.l a0,($FFFFDB2C).w move.l a1,($FFFFDB04).w move.l a2,($FFFFDB3A).w lea (byte_3050A8).l,a4 move.b (a4,d1.w),d2 move.b ($FFFFDB0B).w,($FFFFDB09).w add.b #1,($FFFFDB0B).w cmp.b ($FFFFDB0B).w,d2 bne.s loc_30517E move.b #0,($FFFFDB0B).w move.b ($FFFFDB0A).w,($FFFFDB22).w add.b #1,($FFFFDB0A).w loc_30517E: ; ... tst.b ($FFFFDB0C).w beq.s loc_305188 add.w #$10,d0 loc_305188: ; ... lea (dword_305088).l,a3 move.l (a3,d0.w),a3 move.l a3,($C00004).l lea ($C00000).l,a6 bsr.w sub_3066B8 move.l ($FFFFDB00).w,a0 move.l ($FFFFDB04).w,a1 move.l ($FFFFDB3A).w,a2 lea ($FFFFDB3E).w,a3 movem.w (a3)+,d2-d7 lea (word_305FCC).l,a3 lea (byte_306494).l,a4 move.w #-8,a5 moveq #0,d0 tst.b ($FFFFDB0E).w bne.w loc_305838 loc_3051D0: ; ... add.w #1,a5 cmp.w #0,a5 beq.w loc_305806 loc_3051DC: ; ... moveq #0,d1 subq.w #1,d7 bpl.s loc_3051E6 move.b (a0)+,d6 moveq #7,d7 loc_3051E6: ; ... add.b d6,d6 bcc.s loc_305236 subq.b #1,d5 bpl.s loc_3051F2 move.b (a1)+,d4 moveq #7,d5 loc_3051F2: ; ... add.b d4,d4 bcc.s loc_305216 moveq #$A,d0 sub.b d5,d0 subq.b #3,d0 add.w d0,d0 move.w off_305206(pc,d0.w),d0 jmp off_305206(pc,d0.w) ; --------------------------------------------------------------------------- off_305206: dc.w loc_3053AC-off_305206 ; 0 ; ... dc.w loc_305382-off_305206 ; 1 dc.w loc_305358-off_305206 ; 2 dc.w loc_30532E-off_305206 ; 3 dc.w loc_305304-off_305206 ; 4 dc.w loc_3052E4-off_305206 ; 5 dc.w loc_3052B4-off_305206 ; 6 dc.w loc_30528C-off_305206 ; 7 ; --------------------------------------------------------------------------- loc_305216: ; ... moveq #6,d0 sub.b d5,d0 addq.b #1,d0 add.w d0,d0 move.w off_305226(pc,d0.w),d0 jmp off_305226(pc,d0.w) ; --------------------------------------------------------------------------- off_305226: dc.w loc_3054C8-off_305226 ; 0 ; ... dc.w loc_3054B0-off_305226 ; 1 dc.w loc_30548A-off_305226 ; 2 dc.w loc_305464-off_305226 ; 3 dc.w loc_30543E-off_305226 ; 4 dc.w loc_305418-off_305226 ; 5 dc.w loc_3053F2-off_305226 ; 6 dc.w loc_3053D6-off_305226 ; 7 ; --------------------------------------------------------------------------- loc_305236: ; ... subq.b #1,d3 bpl.s loc_30524A move.b (a2)+,d2 cmp.b #-1,d2 bne.s loc_305248 moveq #0,d3 bra.w loc_3051D0 ; --------------------------------------------------------------------------- loc_305248: ; ... moveq #7,d3 loc_30524A: ; ... add.b d2,d2 bcc.s loc_30526C moveq #7,d0 sub.b d3,d0 add.b d0,d0 move.w off_30525C(pc,d0.w),d0 jmp off_30525C(pc,d0.w) ; --------------------------------------------------------------------------- off_30525C: dc.w loc_30567C-off_30525C ; 0 ; ... dc.w loc_305640-off_30525C ; 1 dc.w loc_305604-off_30525C ; 2 dc.w loc_3055C8-off_30525C ; 3 dc.w loc_30558C-off_30525C ; 4 dc.w loc_305550-off_30525C ; 5 dc.w loc_305514-off_30525C ; 6 dc.w loc_3054E2-off_30525C ; 7 ; --------------------------------------------------------------------------- loc_30526C: ; ... moveq #6,d0 sub.b d3,d0 addq.b #1,d0 add.b d0,d0 move.w off_30527C(pc,d0.w),d0 jmp off_30527C(pc,d0.w) ; --------------------------------------------------------------------------- off_30527C: dc.w loc_3057E2-off_30527C ; 0 ; ... dc.w loc_3057C0-off_30527C ; 1 dc.w loc_305790-off_30527C ; 2 dc.w loc_305760-off_30527C ; 3 dc.w loc_305730-off_30527C ; 4 dc.w loc_305700-off_30527C ; 5 dc.w loc_3056D0-off_30527C ; 6 dc.w loc_3056AA-off_30527C ; 7 ; --------------------------------------------------------------------------- loc_30528C: ; ... moveq #0,d0 move.b (a1)+,d0 lsl.w #2,d0 move.b (a1)+,d4 rol.b #2,d4 move.b d4,d1 and.b #3,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #6,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3052B4: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$200,d0 move.b (a1)+,d1 lsl.w #1,d1 or.w d1,d0 move.b (a1)+,d4 rol.b #1,d4 move.b d4,d1 and.b #1,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #7,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3052E4: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$300,d0 move.b (a1)+,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #0,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305304: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$380,d0 move.b (a1)+,d4 ror.b #1,d4 move.b d4,d1 and.b #$7F,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #1,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_30532E: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$3C0,d0 move.b (a1)+,d4 ror.b #2,d4 move.b d4,d1 and.b #$3F,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #2,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305358: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$3E0,d0 move.b (a1)+,d4 ror.b #3,d4 move.b d4,d1 and.b #$1F,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #3,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305382: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$3F0,d0 move.b (a1)+,d4 ror.b #4,d4 move.b d4,d1 and.b #$F,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #4,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3053AC: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$3F8,d0 move.b (a1)+,d4 rol.b #3,d4 move.b d4,d1 and.b #7,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #5,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3053D6: ; ... move.b (a1)+,d4 ror.b #2,d4 move.b d4,d0 and.w #$3F,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #2,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3053F2: ; ... move.b d4,d0 lsr.b #2,d0 and.w #$20,d0 move.b (a1)+,d4 ror.b #3,d4 move.b d4,d1 and.b #$1F,d1 or.b d1,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #3,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305418: ; ... move.b d4,d0 lsr.b #2,d0 and.w #$30,d0 move.b (a1)+,d4 ror.b #4,d4 move.b d4,d1 and.b #$F,d1 or.b d1,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #4,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_30543E: ; ... move.b d4,d0 lsr.b #2,d0 and.w #$38,d0 move.b (a1)+,d4 rol.b #3,d4 move.b d4,d1 and.b #7,d1 or.b d1,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #5,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305464: ; ... move.b d4,d0 lsr.b #2,d0 and.w #$3C,d0 move.b (a1)+,d4 rol.b #2,d4 move.b d4,d1 and.b #3,d1 or.b d1,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #6,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_30548A: ; ... move.b d4,d0 lsr.b #2,d0 and.w #$3E,d0 move.b (a1)+,d4 rol.b #1,d4 move.b d4,d1 and.b #1,d1 or.b d1,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #7,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3054B0: ; ... lsr.b #2,d4 and.w #$3F,d4 add.w d4,d4 move.w (a3,d4.w),d4 or.w #$6000,d4 move.w d4,(a6) moveq #0,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3054C8: ; ... ror.b #2,d4 move.b d4,d0 and.w #$3F,d0 add.w d0,d0 move.w (a3,d0.w),d0 or.w #$6000,d0 move.w d0,(a6) moveq #1,d5 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3054E2: ; ... move.b (a2)+,d2 ror.b #1,d2 move.b d2,d0 and.w #$7F,d0 moveq #1,d3 cmp.b #$7F,d0 beq.w loc_3051D0 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_30550A: ; ... move.w d1,(a6) dbf d0,loc_30550A bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305514: ; ... move.b d2,d1 lsr.b #1,d1 and.b #$40,d1 move.b (a2)+,d2 ror.b #2,d2 move.b d2,d0 and.w #$3F,d0 or.b d1,d0 moveq #2,d3 cmp.b #$7F,d0 beq.w loc_3051D0 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_305546: ; ... move.w d1,(a6) dbf d0,loc_305546 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305550: ; ... move.b d2,d1 lsr.b #1,d1 and.b #$60,d1 move.b (a2)+,d2 ror.b #3,d2 move.b d2,d0 and.w #$1F,d0 or.b d1,d0 moveq #3,d3 cmp.b #$7F,d0 beq.w loc_3051D0 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_305582: ; ... move.w d1,(a6) dbf d0,loc_305582 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_30558C: ; ... move.b d2,d1 lsr.b #1,d1 and.b #$70,d1 move.b (a2)+,d2 ror.b #4,d2 move.b d2,d0 and.w #$F,d0 or.b d1,d0 moveq #4,d3 cmp.b #$7F,d0 beq.w loc_3051D0 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_3055BE: ; ... move.w d1,(a6) dbf d0,loc_3055BE bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3055C8: ; ... move.b d2,d1 lsr.b #1,d1 and.b #$78,d1 move.b (a2)+,d2 rol.b #3,d2 move.b d2,d0 and.w #7,d0 or.b d1,d0 moveq #5,d3 cmp.b #$7F,d0 beq.w loc_3051D0 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_3055FA: ; ... move.w d1,(a6) dbf d0,loc_3055FA bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305604: ; ... move.b d2,d1 lsr.b #1,d1 and.b #$7C,d1 move.b (a2)+,d2 rol.b #2,d2 move.b d2,d0 and.w #3,d0 or.b d1,d0 moveq #6,d3 cmp.b #$7F,d0 beq.w loc_3051D0 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_305636: ; ... move.w d1,(a6) dbf d0,loc_305636 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305640: ; ... move.b d2,d1 lsr.b #1,d1 and.b #$7E,d1 move.b (a2)+,d2 rol.b #1,d2 move.b d2,d0 and.w #1,d0 or.b d1,d0 moveq #7,d3 cmp.b #$7F,d0 beq.w loc_3051D0 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_305672: ; ... move.w d1,(a6) dbf d0,loc_305672 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_30567C: ; ... lsr.b #1,d2 and.w #$7F,d2 moveq #0,d3 cmp.b #$7F,d2 beq.w loc_3051D0 add.w #$40,d2 add.w d2,d2 add.w d2,d2 move.w (a4,d2.w),d1 move.w 2(a4,d2.w),d0 or.w #$E000,d1 loc_3056A0: ; ... move.w d1,(a6) dbf d0,loc_3056A0 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3056AA: ; ... move.b (a2)+,d2 ror.b #2,d2 move.b d2,d0 and.w #$3F,d0 add.w d0,d0 add.w d0,d0 moveq #2,d3 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_3056C6: ; ... move.w d1,(a6) dbf d0,loc_3056C6 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3056D0: ; ... move.b d2,d0 lsr.b #2,d0 and.w #$20,d0 move.b (a2)+,d2 ror.b #3,d2 move.b d2,d1 and.b #$1F,d1 or.b d1,d0 moveq #3,d3 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_3056F6: ; ... move.w d1,(a6) dbf d0,loc_3056F6 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305700: ; ... move.b d2,d0 lsr.b #2,d0 and.w #$30,d0 move.b (a2)+,d2 ror.b #4,d2 move.b d2,d1 and.b #$F,d1 or.b d1,d0 add.w d0,d0 add.w d0,d0 moveq #4,d3 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_305726: ; ... move.w d1,(a6) dbf d0,loc_305726 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305730: ; ... move.b d2,d0 lsr.b #2,d0 and.w #$38,d0 move.b (a2)+,d2 rol.b #3,d2 move.b d2,d1 and.b #7,d1 or.b d1,d0 add.w d0,d0 add.w d0,d0 moveq #5,d3 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_305756: ; ... move.w d1,(a6) dbf d0,loc_305756 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305760: ; ... move.b d2,d0 lsr.b #2,d0 and.w #$3C,d0 move.b (a2)+,d2 rol.b #2,d2 move.b d2,d1 and.b #3,d1 or.b d1,d0 add.w d0,d0 add.w d0,d0 moveq #6,d3 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_305786: ; ... move.w d1,(a6) dbf d0,loc_305786 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305790: ; ... move.b d2,d0 lsr.b #2,d0 and.w #$3E,d0 move.b (a2)+,d2 rol.b #1,d2 move.b d2,d1 and.b #1,d1 or.b d1,d0 add.w d0,d0 add.w d0,d0 moveq #7,d3 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_3057B6: ; ... move.w d1,(a6) dbf d0,loc_3057B6 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3057C0: ; ... lsr.b #2,d2 and.w #$3F,d2 add.w d2,d2 add.w d2,d2 moveq #0,d3 move.w (a4,d2.w),d1 move.w 2(a4,d2.w),d0 or.w #$E000,d1 loc_3057D8: ; ... move.w d1,(a6) dbf d0,loc_3057D8 bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_3057E2: ; ... ror.b #2,d2 move.b d2,d0 and.w #$3F,d0 add.w d0,d0 add.w d0,d0 moveq #1,d3 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #$E000,d1 loc_3057FC: ; ... move.w d1,(a6) dbf d0,loc_3057FC bra.w loc_3051DC ; --------------------------------------------------------------------------- loc_305806: ; ... cmp.b #3,($FFFFDB0D).w beq.s loc_305824 move.l a0,($FFFFDB00).w move.l a1,($FFFFDB04).w move.l a2,($FFFFDB3A).w lea ($FFFFDB4A).w,a3 movem.w d2-d7,-(a3) rts ; --------------------------------------------------------------------------- loc_305824: ; ... lea ($FFFFDB3E).w,a2 moveq #0,d0 move.w d0,(a2)+ move.w d0,(a2)+ move.w d0,(a2)+ move.w d0,(a2)+ move.w d0,(a2)+ move.w d0,(a2)+ rts ; --------------------------------------------------------------------------- loc_305838: ; ... add.w #1,a5 cmp.w #0,a5 beq.w loc_305806 lea ($FFFFD000).w,a6 swap d0 add.w #%100000000,d0 and.w #%111100000000,d0 add.w d0,a6 swap d0 loc_305856: ; ... moveq #0,d1 subq.w #1,d7 bpl.s loc_305860 move.b (a0)+,d6 moveq #7,d7 loc_305860: ; ... add.b d6,d6 bcc.s loc_3058B4 subq.b #1,d5 bpl.s loc_30586C move.b (a1)+,d4 moveq #7,d5 loc_30586C: ; ... add.b d4,d4 bcc.s loc_305892 move.w #$A,d0 sub.b d5,d0 subq.b #3,d0 add.w d0,d0 move.w off_305882(pc,d0.w),d0 jmp off_305882(pc,d0.w) ; --------------------------------------------------------------------------- off_305882: dc.w loc_305A30-off_305882 ; 0 ; ... dc.w loc_305A06-off_305882 ; 1 dc.w loc_3059DC-off_305882 ; 2 dc.w loc_3059B2-off_305882 ; 3 dc.w loc_305988-off_305882 ; 4 dc.w loc_305968-off_305882 ; 5 dc.w loc_305938-off_305882 ; 6 dc.w loc_30590E-off_305882 ; 7 ; --------------------------------------------------------------------------- loc_305892: ; ... move.w #6,d0 sub.b d5,d0 addq.b #1,d0 add.w d0,d0 move.w off_3058A4(pc,d0.w),d0 jmp off_3058A4(pc,d0.w) ; --------------------------------------------------------------------------- off_3058A4: dc.w loc_305B4C-off_3058A4 ; 0 ; ... dc.w loc_305B34-off_3058A4 ; 1 ; This should be a dc.w table... dc.w loc_305B0E-off_3058A4 ; 2 dc.w loc_305AE8-off_3058A4 ; 3 dc.w loc_305AC2-off_3058A4 ; 4 dc.w loc_305A9C-off_3058A4 ; 5 dc.w loc_305A76-off_3058A4 ; 6 dc.w loc_305A5A-off_3058A4 ; 7 ; --------------------------------------------------------------------------- loc_3058B4: ; ... subq.b #1,d3 bpl.s loc_3058C8 move.b (a2)+,d2 cmp.b #$FF,d2 bne.s loc_3058C6 moveq #0,d3 bra.w loc_305838 ; --------------------------------------------------------------------------- loc_3058C6: ; ... moveq #7,d3 loc_3058C8: ; ... add.b d2,d2 bcc.s loc_3058EC move.w #7,d0 sub.b d3,d0 add.b d0,d0 move.w off_3058DC(pc,d0.w),d0 jmp off_3058DC(pc,d0.w) ; --------------------------------------------------------------------------- off_3058DC: dc.w loc_305D00-off_3058DC ; 0 ; ... dc.w loc_305CC4-off_3058DC ; 1 ; This should be a dc.w table... dc.w loc_305C88-off_3058DC ; 2 dc.w loc_305C4C-off_3058DC ; 3 dc.w loc_305C10-off_3058DC ; 4 dc.w loc_305BD4-off_3058DC ; 5 dc.w loc_305B98-off_3058DC ; 6 dc.w loc_305B66-off_3058DC ; 7 ; --------------------------------------------------------------------------- loc_3058EC: ; ... move.w #6,d0 sub.b d3,d0 addq.b #1,d0 add.b d0,d0 move.w off_3058FE(pc,d0.w),d0 jmp off_3058FE(pc,d0.w) ; End of function sub_3050AE ; --------------------------------------------------------------------------- off_3058FE: dc.w loc_305E66-off_3058FE ; 0 ; ... dc.w loc_305E44-off_3058FE ; 1 ; This should be a dc.w table... dc.w loc_305E14-off_3058FE ; 2 dc.w loc_305DE4-off_3058FE ; 3 dc.w loc_305DB4-off_3058FE ; 4 dc.w loc_305D84-off_3058FE ; 5 dc.w loc_305D54-off_3058FE ; 6 dc.w loc_305D2E-off_3058FE ; 7 ; --------------------------------------------------------------------------- loc_30590E: ; ... move.w #0,d0 move.b (a1)+,d0 lsl.w #2,d0 move.b (a1)+,d4 rol.b #2,d4 move.b d4,d1 and.b #3,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #6,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305938: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$200,d0 move.b (a1)+,d1 lsl.w #1,d1 or.w d1,d0 move.b (a1)+,d4 rol.b #1,d4 move.b d4,d1 and.b #1,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #7,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305968: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$300,d0 move.b (a1)+,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #0,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305988: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$380,d0 move.b (a1)+,d4 ror.b #1,d4 move.b d4,d1 and.b #$7F,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #1,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_3059B2: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$3C0,d0 move.b (a1)+,d4 ror.b #2,d4 move.b d4,d1 and.b #$3F,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #2,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_3059DC: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$3E0,d0 move.b (a1)+,d4 ror.b #3,d4 move.b d4,d1 and.b #$1F,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #3,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305A06: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$3F0,d0 move.b (a1)+,d4 ror.b #4,d4 move.b d4,d1 and.b #$F,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #4,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305A30: ; ... move.b d4,d0 lsl.w #2,d0 and.w #$3F8,d0 move.b (a1)+,d4 rol.b #3,d4 move.b d4,d1 and.b #7,d1 or.b d1,d0 add.w #$40,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #5,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305A5A: ; ... move.b (a1)+,d4 ror.b #2,d4 move.b d4,d0 and.w #$3F,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #2,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305A76: ; ... move.b d4,d0 lsr.b #2,d0 and.w #$20,d0 move.b (a1)+,d4 ror.b #3,d4 move.b d4,d1 and.b #$1F,d1 or.b d1,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #3,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305A9C: ; ... move.b d4,d0 lsr.b #2,d0 and.w #$30,d0 move.b (a1)+,d4 ror.b #4,d4 move.b d4,d1 and.b #$F,d1 or.b d1,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #4,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305AC2: ; ... move.b d4,d0 lsr.b #2,d0 and.w #$38,d0 move.b (a1)+,d4 rol.b #3,d4 move.b d4,d1 and.b #7,d1 or.b d1,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #5,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305AE8: ; ... move.b d4,d0 lsr.b #2,d0 and.w #$3C,d0 move.b (a1)+,d4 rol.b #2,d4 move.b d4,d1 and.b #3,d1 or.b d1,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #6,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305B0E: ; ... move.b d4,d0 lsr.b #2,d0 and.w #$3E,d0 move.b (a1)+,d4 rol.b #1,d4 move.b d4,d1 and.b #1,d1 or.b d1,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #7,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305B34: ; ... lsr.b #2,d4 and.w #$3F,d4 add.w d4,d4 move.w (a3,d4.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #0,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305B4C: ; ... ror.b #2,d4 move.b d4,d0 and.w #$3F,d0 add.w d0,d0 move.w (a3,d0.w),d0 eor.w #%110100000000000,d0 move.w d0,-(a6) moveq #1,d5 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305B66: ; ... move.b (a2)+,d2 ror.b #1,d2 move.b d2,d0 and.w #$7F,d0 moveq #1,d3 cmp.b #$7F,d0 beq.w loc_305838 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305B8E: ; ... move.w d1,-(a6) dbf d0,loc_305B8E bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305B98: ; ... move.b d2,d1 lsr.b #1,d1 and.b #$40,d1 move.b (a2)+,d2 ror.b #2,d2 move.b d2,d0 and.w #$3F,d0 or.b d1,d0 moveq #2,d3 cmp.b #$7F,d0 beq.w loc_305838 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305BCA: ; ... move.w d1,-(a6) dbf d0,loc_305BCA bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305BD4: ; ... move.b d2,d1 lsr.b #1,d1 and.b #$60,d1 move.b (a2)+,d2 ror.b #3,d2 move.b d2,d0 and.w #$1F,d0 or.b d1,d0 moveq #3,d3 cmp.b #$7F,d0 beq.w loc_305838 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305C06: ; ... move.w d1,-(a6) dbf d0,loc_305C06 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305C10: ; ... move.b d2,d1 lsr.b #1,d1 and.b #$70,d1 move.b (a2)+,d2 ror.b #4,d2 move.b d2,d0 and.w #$F,d0 or.b d1,d0 moveq #4,d3 cmp.b #$7F,d0 beq.w loc_305838 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305C42: ; ... move.w d1,-(a6) dbf d0,loc_305C42 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305C4C: ; ... move.b d2,d1 lsr.b #1,d1 and.b #$78,d1 move.b (a2)+,d2 rol.b #3,d2 move.b d2,d0 and.w #7,d0 or.b d1,d0 moveq #5,d3 cmp.b #$7F,d0 beq.w loc_305838 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305C7E: ; ... move.w d1,-(a6) dbf d0,loc_305C7E bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305C88: ; ... move.b d2,d1 lsr.b #1,d1 and.b #$7C,d1 move.b (a2)+,d2 rol.b #2,d2 move.b d2,d0 and.w #3,d0 or.b d1,d0 moveq #6,d3 cmp.b #$7F,d0 beq.w loc_305838 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305CBA: ; ... move.w d1,-(a6) dbf d0,loc_305CBA bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305CC4: ; ... move.b d2,d1 lsr.b #1,d1 and.b #$7E,d1 move.b (a2)+,d2 rol.b #1,d2 move.b d2,d0 and.w #1,d0 or.b d1,d0 moveq #7,d3 cmp.b #$7F,d0 beq.w loc_305838 add.w #$40,d0 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305CF6: ; ... move.w d1,-(a6) dbf d0,loc_305CF6 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305D00: ; ... lsr.b #1,d2 and.w #$7F,d2 moveq #0,d3 cmp.b #$7F,d2 beq.w loc_305838 add.w #$40,d2 add.w d2,d2 add.w d2,d2 move.w (a4,d2.w),d1 move.w 2(a4,d2.w),d0 or.w #%1110000000000000,d1 loc_305D24: ; ... move.w d1,-(a6) dbf d0,loc_305D24 bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305D2E: ; ... move.b (a2)+,d2 ror.b #2,d2 move.b d2,d0 and.w #$3F,d0 add.w d0,d0 add.w d0,d0 moveq #2,d3 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305D4A: ; ... move.w d1,-(a6) dbf d0,loc_305D4A bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305D54: ; ... move.b d2,d0 lsr.b #2,d0 and.w #$20,d0 move.b (a2)+,d2 ror.b #3,d2 move.b d2,d1 and.b #$1F,d1 or.b d1,d0 moveq #3,d3 add.w d0,d0 add.w d0,d0 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305D7A: ; ... move.w d1,-(a6) dbf d0,loc_305D7A bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305D84: ; ... move.b d2,d0 lsr.b #2,d0 and.w #$30,d0 move.b (a2)+,d2 ror.b #4,d2 move.b d2,d1 and.b #$F,d1 or.b d1,d0 add.w d0,d0 add.w d0,d0 moveq #4,d3 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305DAA: ; ... move.w d1,-(a6) dbf d0,loc_305DAA bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305DB4: ; ... move.b d2,d0 lsr.b #2,d0 and.w #$38,d0 move.b (a2)+,d2 rol.b #3,d2 move.b d2,d1 and.b #7,d1 or.b d1,d0 add.w d0,d0 add.w d0,d0 moveq #5,d3 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305DDA: ; ... move.w d1,-(a6) dbf d0,loc_305DDA bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305DE4: ; ... move.b d2,d0 lsr.b #2,d0 and.w #$3C,d0 move.b (a2)+,d2 rol.b #2,d2 move.b d2,d1 and.b #3,d1 or.b d1,d0 add.w d0,d0 add.w d0,d0 moveq #6,d3 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305E0A: ; ... move.w d1,-(a6) dbf d0,loc_305E0A bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305E14: ; ... move.b d2,d0 lsr.b #2,d0 and.w #$3E,d0 move.b (a2)+,d2 rol.b #1,d2 move.b d2,d1 and.b #1,d1 or.b d1,d0 add.w d0,d0 add.w d0,d0 moveq #7,d3 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305E3A: ; ... move.w d1,-(a6) dbf d0,loc_305E3A bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305E44: ; ... lsr.b #2,d2 and.w #$3F,d2 add.w d2,d2 add.w d2,d2 moveq #0,d3 move.w (a4,d2.w),d1 move.w 2(a4,d2.w),d0 or.w #%1110000000000000,d1 loc_305E5C: ; ... move.w d1,-(a6) dbf d0,loc_305E5C bra.w loc_305856 ; --------------------------------------------------------------------------- loc_305E66: ; ... ror.b #2,d2 move.b d2,d0 and.w #$3F,d0 add.w d0,d0 add.w d0,d0 moveq #1,d3 move.w (a4,d0.w),d1 move.w 2(a4,d0.w),d0 or.w #%1110000000000000,d1 loc_305E80: ; ... move.w d1,-(a6) dbf d0,loc_305E80 bra.w loc_305856 ; --------------------------------------------------------------------------- Ani_SpecialStageTrack:dc.w byte_305E94-Ani_SpecialStageTrack; 0 ; ... dc.w byte_305EAC-Ani_SpecialStageTrack; 1 dc.w byte_305EC4-Ani_SpecialStageTrack; 2 dc.w byte_305ED0-Ani_SpecialStageTrack; 3 dc.w byte_305EE0-Ani_SpecialStageTrack; 4 byte_305E94: dc.b $26, $27, $28, $29, $2A, $2B, $26, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, $A, $B, $C, $D, $E, $F, $10; 0 ; ... byte_305EAC: dc.b $26, $27, $28, $29, $2A, $2B, $26, $15, $16, $17, $18, $19, $1A, $1B, $1C, $1D, $1E, $1F, $20, $21, $22, $23, $24, $25; 0 ; ... byte_305EC4: dc.b $26, $27, $28, $29, $2A, $2B, $26, $2C, $2D, $2E, $2F, $30; 0 ; ... byte_305ED0: dc.b $11, $12, $13, $14, $11, $12, $13, $14, $11, $12, $13, $14, $11, $12, $13, $14; 0 ; ... byte_305EE0: dc.b $11, $12, $13, $14, $31, $32, $33, $34, $35, $36, $37, 0; 0 ; ... ; pointers to the mappings for each frame of the special stage track ; indexed into by the numbers used in the above animations Map_SpecialStageTrack:dc.l S2_MapSpec_Rise1 ; 0 ; ... dc.l S2_MapSpec_Rise2 ; 1 dc.l S2_MapSpec_Rise3 ; 2 dc.l S2_MapSpec_Rise4 ; 3 dc.l S2_MapSpec_Rise5 ; 4 dc.l S2_MapSpec_Rise6 ; 5 dc.l S2_MapSpec_Rise7 ; 6 dc.l S2_MapSpec_Rise8 ; 7 dc.l S2_MapSpec_Rise9 ; 8 dc.l S2_MapSpec_Rise10 ; 9 dc.l S2_MapSpec_Rise11 ; 10 dc.l S2_MapSpec_Rise12 ; 11 dc.l S2_MapSpec_Rise13 ; 12 dc.l S2_MapSpec_Rise14 ; 13 dc.l S2_MapSpec_Rise15 ; 14 dc.l S2_MapSpec_Rise16 ; 15 dc.l S2_MapSpec_Rise17 ; 16 dc.l S2_MapSpec_Straight1 ; 17 dc.l S2_MapSpec_Straight2 ; 18 dc.l S2_MapSpec_Straight3 ; 19 dc.l S2_MapSpec_Straight4 ; 20 dc.l S2_MapSpec_Drop1 ; 21 dc.l S2_MapSpec_Drop2 ; 22 dc.l S2_MapSpec_Drop3 ; 23 dc.l S2_MapSpec_Drop4 ; 24 dc.l S2_MapSpec_Drop5 ; 25 dc.l S2_MapSpec_Drop6 ; 26 dc.l S2_MapSpec_Drop7 ; 27 dc.l S2_MapSpec_Drop8 ; 28 dc.l S2_MapSpec_Drop9 ; 29 dc.l S2_MapSpec_Drop10 ; 30 dc.l S2_MapSpec_Drop11 ; 31 dc.l S2_MapSpec_Drop12 ; 32 dc.l S2_MapSpec_Drop13 ; 33 dc.l S2_MapSpec_Drop14 ; 34 dc.l S2_MapSpec_Drop15 ; 35 dc.l S2_MapSpec_Drop16 ; 36 dc.l S2_MapSpec_Drop17 ; 37 dc.l S2_MapSpec_Turning1 ; 38 dc.l S2_MapSpec_Turning2 ; 39 dc.l S2_MapSpec_Turning3 ; 40 dc.l S2_MapSpec_Turning4 ; 41 dc.l S2_MapSpec_Turning5 ; 42 dc.l S2_MapSpec_Turning6 ; 43 dc.l S2_MapSpec_Unturn1 ; 44 dc.l S2_MapSpec_Unturn2 ; 45 dc.l S2_MapSpec_Unturn3 ; 46 dc.l S2_MapSpec_Unturn4 ; 47 dc.l S2_MapSpec_Unturn5 ; 48 dc.l S2_MapSpec_Turn1 ; 49 dc.l S2_MapSpec_Turn2 ; 50 dc.l S2_MapSpec_Turn3 ; 51 dc.l S2_MapSpec_Turn4 ; 52 dc.l S2_MapSpec_Turn5 ; 53 dc.l S2_MapSpec_Turn6 ; 54 dc.l S2_MapSpec_Turn7 ; 55 word_305FCC: dc.w $8001,$8007,$802C,$800B,$8024,$8824,$8039,$882B,$805D,$885D,$802B,$804A,$8049,$8037,$8849,$8045; 0 ; ... dc.w $8845,$883A,$8048,$8850,$8036,$8837,$803A,$8050,$8842,$8042,$8815,$801D,$804B,$8817,$8848,$8836; 16 dc.w $8038,$884B,$8015,$8021,$8017,$8033,$801A,$802A,$805E,$8028,$8030,$8821,$8838,$881A,$8025,$885E; 32 dc.w $8825,$8833,$8003,$8814,$8014,$8004,$804E,$8803,$800C,$882A,$8002,$8051,$8040,$803D,$8019,$8052; 48 dc.w $8009,$805A,$8830,$884E,$8852,$8851,$8809,$8840,$802F,$885A,$8818,$8034,$8819,$882F,$883D,$803E; 64 dc.w $8018,$880C,$8012,$8804,$8026,$8834,$8805,$803B,$883E,$883B,$8000,$8802,$8005,$800D,$8055,$80AF; 80 dc.w $801C,$801B,$880D,$8016,$8812,$801F,$8832,$8013,$8092,$8826,$8010,$804D,$8047,$8892,$8800,$8062; 96 dc.w $8066,$8090,$8008,$887C,$8867,$88F7,$800E,$8060,$8032,$8094,$881C,$8905,$88B0,$8059,$800F,$8067; 112 dc.w $8068,$8894,$807C,$80B0,$80B1,$8006,$8841,$8087,$8093,$80CC,$881F,$8868,$8041,$808F,$8890,$80C2; 128 dc.w $8813,$88C2,$805C,$8064,$80D8,$881B,$88CC,$8811,$8855,$88E2,$88F3,$8044,$88D8,$8085,$80A1,$80C1; 144 dc.w $8119,$8889,$880A,$8822,$803F,$805B,$807F,$8886,$8808,$8080,$8866,$88E0,$88C1,$8020,$8022,$8054; 160 dc.w $80D2,$8859,$88B1,$8860,$8919,$88A4,$888F,$800A,$8061,$8075,$8095,$80B6,$80E0,$8810,$8898,$885B; 176 dc.w $88D2,$8816,$8053,$8091,$8096,$80A4,$80DD,$80E6,$887A,$884D,$88E6,$8011,$8057,$807A,$8086,$809E; 192 dc.w $80DA,$8058,$80DC,$80E3,$8863,$803C,$8056,$8069,$807E,$80AE,$80B5,$80B8,$80CD,$80FB,$80FF,$885C; 208 dc.w $88CD,$8874,$88EA,$88FF,$88B5,$8043,$806C,$8074,$8077,$8089,$8097,$809F,$80A0,$8113,$811B,$8878; 224 dc.w $880F,$88E1,$88FB,$8928,$8063,$8084,$808D,$80CB,$80D7,$80E9,$8128,$8138,$88AE,$88EC,$8031,$804C; 240 dc.w $80E2,$80EA,$8864,$8029,$802D,$806D,$8078,$8088,$80B4,$80BE,$80CF,$80E1,$80E4,$8854,$88D6,$88D7; 256 dc.w $8861,$892B,$8847,$8035,$806A,$8072,$8073,$8098,$80D5,$80D6,$8116,$811E,$8126,$8127,$812F,$815D; 272 dc.w $8869,$8888,$8875,$8897,$88B4,$88D1,$88D4,$88D5,$88CB,$88E4,$8891,$8862,$8806,$88B8,$8065,$806E; 288 dc.w $8071,$807D,$80D1,$80E7,$80F9,$8108,$812E,$814B,$8881,$8885,$8877,$887E,$8895,$88DF,$8887,$886C; 304 dc.w $88F5,$8908,$8879,$886D,$892A,$88AA,$801E,$8027,$8046,$805F,$8070,$8079,$809A,$80AA,$80C3,$80D3; 320 dc.w $80D4,$80DE,$80DF,$80F8,$8100,$8101,$812B,$8133,$8136,$8143,$8151,$882E,$889E,$8899,$88D3,$88DD; 336 dc.w $88DE,$88E9,$88EF,$88F0,$88F8,$8927,$88BE,$8896,$804F,$806F,$8081,$808B,$808E,$809C,$80A3,$80B3; 352 dc.w $80C0,$80CE,$80F0,$80F1,$80F5,$80F7,$8102,$8104,$8105,$8109,$810C,$8114,$8118,$8120,$8124,$8125; 368 dc.w $812A,$8130,$8132,$8137,$8159,$8165,$883F,$886B,$8880,$8853,$88C6,$88CF,$88D9,$88DC,$8856,$88B6; 384 dc.w $88F9,$8902,$8904,$8915,$886A,$8913,$8872,$8835,$8938,$895D,$8943,$8023,$8076,$807B,$808A,$809D; 400 dc.w $80A6,$80A8,$80AC,$80B2,$80B7,$80BB,$80BC,$80BD,$80C6,$80E5,$80E8,$80EE,$80F4,$810A,$810D,$8111; 416 dc.w $8115,$811A,$811F,$8122,$8123,$8139,$813A,$813C,$8142,$8144,$8147,$8148,$815E,$815F,$8163,$8168; 432 dc.w $816A,$816C,$8170,$88E5,$88CE,$88EE,$88F1,$8884,$88FD,$8900,$88B9,$8917,$8871,$8909,$890D,$8865; 448 dc.w $8925,$8922,$8831,$883C,$890F,$88C5,$8933,$8937,$891F,$802E,$806B,$8082,$8083,$808C,$8099,$809B; 464 dc.w $80A2,$80A5,$80A7,$80A9,$80AB,$80AD,$80B9,$80BA,$80BF,$80C4,$80C5,$80C7,$80C8,$80C9,$80CA,$80D0; 480 dc.w $80D9,$80DB,$80EB,$80EC,$80ED,$80EF,$80F2,$80F3,$80F6,$80FA,$80FC,$80FD,$80FE,$8103,$8106,$8107; 496 dc.w $810B,$810E,$810F,$8110,$8112,$8117,$811C,$811D,$8121,$8129,$812C,$812D,$8131,$8134,$8135,$813B; 512 dc.w $813D,$813E,$813F,$8140,$8141,$8145,$8146,$8149,$814A,$814C,$814D,$814E,$814F,$8150,$8152,$8153; 528 dc.w $8154,$8155,$8156,$8157,$8158,$815A,$815B,$815C,$8160,$8161,$8162,$8164,$8166,$8167,$8169,$816B; 544 dc.w $816D,$816E,$816F,$8171,$8172,$8173,$886E,$887D,$88C3,$88DB,$88E7,$88E8,$88EB,$88ED,$88F2,$88F6; 560 dc.w $88FA,$88FC,$88FE,$882D,$8903,$8906,$8907,$890B,$8873,$889A,$8929,$892C,$892D,$8911,$893C,$8920; 576 dc.w $8946,$88A9,$889C,$8916,$894F,$894C,$886F,$8958,$8956,$8959,$895A,$8961,$887B,$8966,$891C,$8918; 592 dc.w $88A0,$88A3,$8967,$88A1 ; 608 byte_306494: dc.b 0, 7, 0, 1, 0, 1, 0, 1, 0,$4A, 0, 1, 0,$39, 0, 3; 0 ; ... dc.b 0, 1, 0, 5, 0,$28, 0, 7, 0,$2C, 0, 1, 0, 1, 0, 2; 16 dc.b 0,$28, 0, 5, 0,$39, 0, 1, 0,$28, 0, 9, 0, 1, 0, 4; 32 dc.b 0,$28, 0, 6, 0,$28, 0, 3, 0,$4A, 0, 2, 0, 1, 0, 3; 48 dc.b 0,$28, 0, 4, 0,$39, 0, 2, 0,$39, 0, 4, 0, 1, 0, 6; 64 dc.b 0, 7, 0, 2, 0,$2C, 0, 2, 0,$28, 0, 1, 0,$1D, 0, 1; 80 dc.b 0,$28, 0, 8, 0,$28, 0, 2, 0, 7, 0, 3, 0, 1, 0, 7; 96 dc.b 0,$28, 0, $B, 0,$39, 0, 5, 0,$1D, 0, 3, 0,$1D, 0, 4; 112 dc.b 0,$1D, 0, 2, 0,$1D, 0, 5, 0,$28, 0, $D, 0, $B, 0, 1; 128 dc.b 0,$28, 0, $A, 0,$39, 0, 6, 0,$39, 0, 7, 0,$2C, 0, 3; 144 dc.b 0,$1D, 0, 9, 0,$4A, 0, 3, 0,$1D, 0, 7, 0,$28, 0, $F; 160 dc.b 0,$1D, 0, $B, 0,$1D, 0,$11, 0,$1D, 0, $D, 0,$1D, 0, 8; 176 dc.b 0,$28, 0,$11, 0,$1D, 0, 6, 0, $B, 0, 2, 0,$1D, 0,$15; 192 dc.b 0,$28, 0, $C, 0,$1D, 0, $A, 0,$28, 0, $E, 0, 1, 0, 8; 208 dc.b 0,$1D, 0, $F, 0,$28, 0,$10, 0, 7, 0, 6, 0,$1D, 0,$13; 224 dc.b 0,$4A, 0, 4, 0,$1D, 0,$17, 0, 7, 0, 4, 0, $B, 0, 3; 240 dc.b 0,$1D, 0,$1B, 0,$4A, 0, 6, 0,$1D, 0,$1D, 0,$4A, 0, 5; 256 dc.b 0, 1, 0, 9, 0, 7, 0, 5, 0,$1D, 0,$1E, 0,$1D, 0,$19; 272 dc.b 0, 1, 0,$11, 0,$1D, 0, $C, 0,$1D, 0,$7F, 0,$2C, 0, 4; 288 dc.b 0,$1D, 0, $E, 0,$1D, 0,$1C, 0,$4A, 0, $A, 0,$1D, 0,$1A; 304 dc.b 0,$4A, 0, 7, 0,$1D, 0,$18, 0, $B, 0, 4, 0,$1D, 0,$12; 320 dc.b 0,$1D, 0,$10, 0, 1, 0, $F, 0, $B, 0, 5, 0, 1, 0, $D; 336 dc.b 0, 1, 0,$13, 0,$4A, 0, 9, 0,$4A, 0, $B, 0,$4A, 0, $C; 352 dc.b 0,$2C, 0, 5, 0,$1D, 0,$14, 0, $B, 0, 7, 0,$1D, 0,$16; 368 dc.b 0, 1, 0, $C, 0, 1, 0, $E, 0,$4A, 0, 8, 0,$1D, 0,$5F; 384 dc.b 0, 1, 0, $A, 0, $B, 0, 6, 0, $B, 0, 8, 0, $B, 0, $A; 400 dc.b 0,$39, 0, 8, 0, $B, 0, 9, 0,$2C, 0, 6, 0, 1, 0,$10; 416 dc.b 0, $B, 0, $C, 0, 1, 0, $B, 0, 1, 0,$12, 0, 7, 0, 7; 432 dc.b 0,$1D, 0,$1F, 0,$28, 0,$12, 0, $B, 0, $B, 0,$2C, 0, 7; 448 dc.b 0,$2C, 0, $B, 0,$1D, 0,$23, 0, 1, 0,$15, 0,$2C, 0, 8; 464 dc.b 0,$1D, 0,$2E, 0,$1D, 0,$3F, 0, 1, 0,$14, 0, $B, 0, $D; 480 dc.b 0,$2C, 0, 9, 0,$2C, 0, $A, 0,$1D, 0,$25, 0,$1D, 0,$55; 496 dc.b 0,$1D, 0,$71, 0,$1D, 0,$7C, 0,$4A, 0, $D, 0,$2C, 0, $C; 512 dc.b 0,$2C, 0, $F, 0,$2C, 0,$10,$FF,$FB,$FF,$FB,$FF,$FA,$FF,$FA; 528 dc.b $FF,$FA,$FF,$FA ; 544 ; =============== S U B R O U T I N E ======================================= sub_3066B8: ; ... move.b ($FFFFDB0F).w,($FFFFDB11).w moveq #0,d1 move.l ($FFFFDB00).w,a0 cmp.l #S2_MapSpec_Straight2,a0 ; S2_MapSpec_Straight2 blt.s loc_3066F8 cmp.l #S2_MapSpec_Straight3,a0 ; S2_MapSpec_Straight3 bge.s loc_3066F8 move.l ($FFFFDB8E).w,a5 move.b ($FFFFDB0A).w,d1 move.b (a5,d1.w),d1 bpl.s loc_306736 loc_3066E2: ; ... st ($FFFFDB0E).w move.b ($FFFFDB0D).w,d0 cmp.b ($FFFFDB21).w,d0 blt.w return_306748 st ($FFFFDB0F).w rts ; --------------------------------------------------------------------------- loc_3066F8: ; ... cmp.l #S2_MapSpec_Rise14,a0 ; S2_MapSpec_Rise14 blt.s loc_306718 cmp.l #S2_MapSpec_Rise15,a0 ; S2_MapSpec_Rise15 bge.s loc_306718 move.l ($FFFFDB8E).w,a5 move.b ($FFFFDB0A).w,d1 move.b (a5,d1.w),d1 bpl.s loc_306736 bra.s loc_3066E2 ; --------------------------------------------------------------------------- loc_306718: ; ... cmp.l #S2_MapSpec_Drop6,a0 ; S2_MapSpec_Drop6 blt.s return_306748 cmp.l #S2_MapSpec_Drop7,a0 ; S2_MapSpec_Drop7 bge.s return_306748 move.l ($FFFFDB8E).w,a5 move.b ($FFFFDB0A).w,d1 move.b (a5,d1.w),d1 bmi.s loc_3066E2 loc_306736: ; ... sf ($FFFFDB0E).w move.b ($FFFFDB0D).w,d0 cmp.b ($FFFFDB21).w,d0 blt.s return_306748 sf ($FFFFDB0F).w return_306748: ; ... rts ; End of function sub_3066B8 ; =============== S U B R O U T I N E ======================================= ssInitTableBuffers: ; ... lea ($FFFFE000).w,a1 lea ($FFFFD700).w,a2 moveq #0,d0 moveq #0,d1 moveq #0,d2 moveq #0,d3 move.w #-$100,d1 move.w #-$200,d2 move.w #-$300,d3 swap d1 swap d2 swap d3 moveq #$1F,d4 loc_30676E: ; ... move.l d0,(a1)+ move.l d0,(a1)+ move.l d1,(a1)+ move.l d1,(a1)+ move.l d2,(a1)+ move.l d2,(a1)+ move.l d3,(a1)+ move.l d3,(a1)+ move.l d3,(a2)+ move.l d3,(a2)+ move.l d2,(a2)+ move.l d2,(a2)+ move.l d1,(a2)+ move.l d1,(a2)+ move.l d0,(a2)+ move.l d0,(a2)+ dbf d4,loc_30676E rts ; End of function ssInitTableBuffers ; =============== S U B R O U T I N E ======================================= ssLoadCompressedData: ; ... lea (S2_ArtKoz_DCA38).l,a0 ; S2_ArtKoz_DCA38 lea ($FFFF0000).l,a1 bsr.w KosDec move.l #$40000000,($C00004).l lea ($C00000).l,a1 move.l #$FFFF0000,a0 move.w (a0)+,d0 subq.w #1,d0 loc_3067BE: ; ... move.l (a0),(a1) move.l (a0),(a1) move.l (a0),(a1) move.l (a0),(a1) move.l (a0),(a1) move.l (a0),(a1) move.l (a0),(a1) move.l (a0)+,(a1) dbf d0,loc_3067BE lea (S2_MiscKoz_SpecialPerspective).l,a0 ; S2_MiscKoz_SpecialPerspective lea ($FFFF6A60).l,a1 bsr.w KosDec lea (S2_MiscKoz_LevelLayout).l,a0 ; Misleading label; seems to be Nemesis-compressed data, not Kosinski... lea ($FFFF855C).w,a4 bsr.w NemDecToRAM lea (S2_MiscKoz_SpecialObjectLocations).l,a0 lea ($FFFF8778).w,a1 ; S2_MiscKoz_SpecialObjectLocations bsr.w KosDec rts ; End of function ssLoadCompressedData ; =============== S U B R O U T I N E ======================================= sub_306800: ; ... move #$2700,sr move.l #$FFFF0000,a1 lea (S2_MapEng_SpecialBackBottom).l,a0 ; S2_MapEng_SpecialBackBottom move.w #$700,d0 bsr.w EniDec move.l #$FFFF0400,a1 lea (S2_MapEng_SpecialBack).l,a0 ; S2_MapEng_SpecialBack move.w #$700,d0 bsr.w EniDec lea ($FFFF0000).l,a1 move.l #$60000002,d0 moveq #$1F,d1 moveq #$1F,d2 jsr ShowVDPGraphics2 lea ($FFFF0000).l,a1 move.l #$60400002,d0 moveq #$1F,d1 moveq #$1F,d2 jsr ShowVDPGraphics2 lea ($FFFF0000).l,a1 move.l #$60800002,d0 moveq #$1F,d1 moveq #$1F,d2 jsr ShowVDPGraphics2 lea ($FFFF0000).l,a1 move.l #$60C00002,d0 moveq #$1F,d1 moveq #$1F,d2 jsr ShowVDPGraphics2 move #$2300,sr rts ; End of function sub_306800 ; =============== S U B R O U T I N E ======================================= sub_30688A: ; ... lea (ArtNem_SSKnuckles).l,a0 lea ($FF0000).l,a4 bra.w NemDecToRAM ; End of function sub_30688A ; =============== S U B R O U T I N E ======================================= sub_30689A: ; ... bsr.w sub_3068F2 bsr.w sub_306998 rts ; End of function sub_30689A ; --------------------------------------------------------------------------- SSBGScroll_Data:dc.w byte_3068BA-SSBGScroll_Data ; 0 ; ... dc.w byte_3068BF-SSBGScroll_Data ; 1 ; dc.w byte_3068C4-SSBGScroll_Data ; 2 ; dc.w byte_3068C9-SSBGScroll_Data ; 3 dc.w byte_3068CE-SSBGScroll_Data ; 4 dc.w byte_3068D3-SSBGScroll_Data ; 5 dc.w byte_3068D8-SSBGScroll_Data ; 6 dc.w byte_3068DD-SSBGScroll_Data ; 7 dc.w byte_3068E2-SSBGScroll_Data ; 8 dc.w byte_3068E7-SSBGScroll_Data ; 9 dc.w byte_3068EC-SSBGScroll_Data ; 10 byte_3068BA: dc.b 2, 2, 2, 2, 2 ; 0 ; ... byte_3068BF: dc.b 4, 4, 5, 4, 5 ; 0 ; ... byte_3068C4: dc.b $B, $B, $B, $B, $C ; 0 ; ... byte_3068C9: dc.b 0, 0, 1, 0, 0 ; 0 ; ... byte_3068CE: dc.b 1, 1, 1, 1, 1 ; 0 ; ... byte_3068D3: dc.b 9, 9, 8, 9, 9 ; 0 ; ... byte_3068D8: dc.b 9, 9, 9, 9, $A ; 0 ; ... byte_3068DD: dc.b 7, 7, 6, 7, 7 ; 0 ; ... byte_3068E2: dc.b 0, 1, 1, 1, 0 ; 0 ; ... byte_3068E7: dc.b 4, 3, 3, 3, 4 ; 0 ; ... byte_3068EC: dc.b 0, 0,$FF, 0, 0, 0 ; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_3068F2: ; ... moveq #0,d7 moveq #0,d6 moveq #0,d0 move.b ($FFFFDB09).w,d2 move.b ($FFFFDB08).w,d0 add.w d0,d0 move.w off_30690A(pc,d0.w),d0 jmp off_30690A(pc,d0.w) ; End of function sub_3068F2 ; --------------------------------------------------------------------------- off_30690A: dc.w loc_306914-off_30690A ; 0 ; ... dc.w loc_306914-off_30690A ; 1 dc.w loc_306914-off_30690A ; 2 dc.w return_30693C-off_30690A ; 3 dc.w return_30693C-off_30690A ; 4 ; --------------------------------------------------------------------------- loc_306914: ; ... moveq #0,d1 cmp.b #1,d2 blt.s loc_30693E moveq #2,d1 cmp.b #2,d2 blt.s loc_30693E moveq #4,d1 cmp.b #$A,d2 blt.s loc_30693E moveq #2,d1 cmp.b #$B,d2 blt.s loc_30693E moveq #0,d1 cmp.b #$C,d2 blt.s loc_30693E return_30693C: ; ... rts ; --------------------------------------------------------------------------- loc_30693E: ; ... moveq #0,d0 moveq #0,d2 move.b ($FFFFDB0D).w,d0 lea (SSBGScroll_Data).l,a0 add.w (a0,d1.w),a0 move.b (a0,d0.w),d2 tst.b ($FFFFDB11).w bne.s loc_306962 tst.b ($FFFFDB0F).w beq.s loc_306976 bra.s loc_30696E ; --------------------------------------------------------------------------- loc_306962: ; ... tst.b ($FFFFDB0F).w bne.s loc_306976 lea ($FFFFE002).w,a1 bra.s loc_306986 ; --------------------------------------------------------------------------- loc_30696E: ; ... lea ($FFFFD702).w,a1 neg.w d2 bra.s loc_306986 ; --------------------------------------------------------------------------- loc_306976: ; ... lea ($FFFFE002).w,a1 tst.b ($FFFFDB0F).w beq.s loc_306986 lea ($FFFFD702).w,a1 neg.w d2 loc_306986: ; ... move.w #$FF,d0 loc_30698A: ; ... sub.w d2,(a1)+ add.l #2,a1 dbf d0,loc_30698A rts ; =============== S U B R O U T I N E ======================================= sub_306998: ; ... move.w ($FFFFF618).w,($FFFFDB34).w moveq #0,d7 moveq #0,d0 moveq #0,d2 move.b ($FFFFDB09).w,d2 move.b ($FFFFDB08).w,d0 add.w d0,d0 move.w off_3069B6(pc,d0.w),d0 jmp off_3069B6(pc,d0.w) ; End of function sub_306998 ; --------------------------------------------------------------------------- off_3069B6: dc.w loc_3069C2-off_3069B6 ; 0 ; ... dc.w loc_3069E2-off_3069B6 ; 1 dc.w return_3069C0-off_3069B6 ; 2 dc.w loc_306A04-off_3069B6 ; 3 dc.w return_3069C0-off_3069B6 ; 4 ; --------------------------------------------------------------------------- return_3069C0: ; ... rts ; --------------------------------------------------------------------------- loc_3069C2: ; ... move.b byte_3069CA(pc,d2.w),d1 bpl.s loc_306A22 rts ; --------------------------------------------------------------------------- byte_3069CA: dc.b -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 8, 2, 4, 4, 4; 0 ; ... dc.b 4, 4, 4, $A, $C, $E, $12, $10; 16 ; --------------------------------------------------------------------------- loc_3069E2: ; ... st d7 move.b byte_3069EC(pc,d2.w),d1 bpl.s loc_306A22 rts ; --------------------------------------------------------------------------- byte_3069EC: dc.b -1 ; ... dc.l -1 dword_3069F1: dc.l -1 dc.b -1, -1, $10, $12, $E, $C, $A, 4, 4, 4, 4, 4, 4, 2, 0; 0 ; --------------------------------------------------------------------------- loc_306A04: ; ... tst.b ($FFFFDB87).w bne.s return_306A10 loc_306A0A: move.b byte_306A12(pc,d2.w),d1 bpl.s loc_306A22 return_306A10: ; ... rts ; --------------------------------------------------------------------------- byte_306A12: dc.b 6, 6, $14, $14, 6, 6, $14, $14, 6, 6, $14, $14, 6, 6, $14, $14; 0 ; ... ; --------------------------------------------------------------------------- loc_306A22: ; ... moveq #0,d0 moveq #0,d2 move.b ($FFFFDB0D).w,d0 lea (SSBGScroll_Data).l,a0 add.w (a0,d1.w),a0 move.b (a0,d0.w),d2 tst.b d7 bpl.s loc_306A42 add.w d2,($FFFFF618).w rts ; --------------------------------------------------------------------------- loc_306A42: ; ... sub.w d2,($FFFFF618).w rts ; =============== S U B R O U T I N E ======================================= SpecialStageObjectLoad: ; ... lea ($FFFFB200).w,a1 ; This is sub_6F8E in S2 move.w #$76,d5 loc_306A50: ; ... tst.b (a1) beq.s return_306A5C lea $40(a1),a1 dbf d5,loc_306A50 return_306A5C: ; ... rts ; End of function SpecialStageObjectLoad ; =============== S U B R O U T I N E ======================================= sub_306A5E: ; ... move.l a0,a1 move.w #$CFC0,d5 sub.w a0,d5 lsr.w #6,d5 subq.w #1,d5 bcs.s return_306A78 loc_306A6C: ; ... tst.b (a1) beq.s return_306A78 lea $40(a1),a1 dbf d5,loc_306A6C return_306A78: ; ... rts ; End of function sub_306A5E ; --------------------------------------------------------------------------- ; Object 5E - HUD from special stage ; --------------------------------------------------------------------------- ; =============== S U B R O U T I N E ======================================= Obj5E: ; ... move.b $24(a0),d0 bne.w JmpTo_DisplaySprite move.l #Map_Obj5E,4(a0) move.w #$1FA,2(a0) move.b #4,1(a0) move.b #0,$18(a0) move.b #1,$24(a0) bset #6,1(a0) moveq #0,d1 tst.b ($FFFFFE00).w beq.s loc_306ABC addq.w #6,d1 tst.b ($FFFFFFD8).w bpl.s loc_306ACC addq.w #1,d1 bra.s loc_306ACC ; --------------------------------------------------------------------------- loc_306ABC: ; ... move.w ($FFFFFF70).w,d1 and.w #3,d1 tst.b ($FFFFFFD8).w bpl.s loc_306ACC addq.w #3,d1 loc_306ACC: ; ... add.w d1,d1 moveq #0,d2 moveq #0,d3 lea (off_306AFC).l,a1 lea $10(a0),a2 add.w (a1,d1.w),a1 move.b (a1)+,d3 move.b d3,$F(a0) subq.w #1,d3 moveq #0,d0 move.b (a1)+,d0 loc_306AEC: ; ... move.w d0,(a2,d2.w) move.b (a1)+,5(a2,d2.w) addq.w #6,d2 dbf d3,loc_306AEC rts ; --------------------------------------------------------------------------- off_306AFC: dc.w byte_306B0C-off_306AFC ; 0 ; ... dc.w byte_306B11-off_306AFC ; 1 ; dc.w byte_306B14-off_306AFC ; 2 ; dc.w byte_306B17-off_306AFC ; 3 dc.w byte_306B1C-off_306AFC ; 4 dc.w byte_306B1F-off_306AFC ; 5 dc.w byte_306B22-off_306AFC ; 6 dc.w byte_306B26-off_306AFC ; 7 byte_306B0C: dc.b 3,$80, 0, 1, 3 ; 0 ; ... byte_306B11: dc.b 1,$D4, 0 ; 0 ; ... byte_306B14: dc.b 1,$38, 1 ; 0 ; ... byte_306B17: dc.b 3,$80, 0, 2, 3 ; 0 ; ... byte_306B1C: dc.b 1,$D4, 0 ; 0 ; ... byte_306B1F: dc.b 1,$38, 2 ; 0 ; ... byte_306B22: dc.b 2,$80, 0, 1 ; 0 ; ... byte_306B26: dc.b 2,$80, 0, 2 ; 0 ; ... Map_Obj5E: dc.w byte_306B32-Map_Obj5E ; 0 ; ... dc.w byte_306B40-Map_Obj5E ; 1 dc.w byte_306B5A-Map_Obj5E ; 2 dc.w byte_306B74-Map_Obj5E ; 3 byte_306B32: dc.b 0, 2,$18, $D,$C0, $A,$FF,$98,$18, 1,$C0,$3C,$FF,$B8; 0 ; ... byte_306B40: dc.b 0, 4,$10, $C,$C0, 5, 0,$38,$10, 0,$C0, 9, 0,$58,$18, $D,$C0, $A, 0,$30,$18, 1,$C0,$3C, 0,$50; 0 ; ... byte_306B5A: dc.b 0, 4,$10, $C,$C5,$AA, 0,$38,$10, 0,$C5,$AE, 0,$58,$18, $D,$C0, $A, 0,$30,$18, 1,$C0,$3C, 0,$50; 0 ; ... byte_306B74: dc.b 0, 2,$10, $F,$C0,$26,$FF,$EC,$10, 3,$C0,$36, 0, $C; 0 ; ... ; --------------------------------------------------------------------------- ; --------------------------------------------------------------------------- ; Object 5F - Start banner / Ending controller from Special Stage ; --------------------------------------------------------------------------- Obj5F: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_306B90(pc,d0.w),d1 jmp off_306B90(pc,d1.w) ; --------------------------------------------------------------------------- off_306B90: dc.w loc_306BE4-off_306B90 ; 0 ; ... dc.w loc_306C26-off_306B90 ; 1 dc.w sub_306C54-off_306B90 ; 2 dc.w loc_306B9C-off_306B90 ; 3 dc.w return_306CE2-off_306B90 ; 4 dc.w loc_306CB6-off_306B90 ; 5 ; --------------------------------------------------------------------------- loc_306B9C: ; ... moveq #0,d0 move.b $26(a0),d0 bsr.w CalcSine muls.w $14(a0),d0 muls.w $14(a0),d1 asr.w #8,d0 asr.w #8,d1 add.w d1,8(a0) add.w d0,$C(a0) cmp.w #0,8(a0) blt.w JmpTo_DeleteObject cmp.w #$100,8(a0) bgt.w JmpTo_DeleteObject cmp.w #0,$C(a0) blt.w JmpTo_DeleteObject jmp DisplaySprite ; --------------------------------------------------------------------------- JmpTo_DeleteObject: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_306BE4: ; ... tst.b ($FFFFFE00).w beq.s loc_306BF4 move.w #8,d0 jsr sub_32ED58 loc_306BF4: ; ... move.w #$80,8(a0) move.w #-$40,$C(a0) move.w #$100,$12(a0) move.l #Map_Obj5F,4(a0) move.w #$38A,2(a0) move.b #4,1(a0) move.b #1,$18(a0) move.b #2,$24(a0) loc_306C26: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 cmp.w #$48,$C(a0) blt.w JmpTo_DisplaySprite move.w #0,$12(a0) move.w #$48,$C(a0) move.b #4,$24(a0) move.b #$F,$2A(a0) JmpTo_DisplaySprite: ; ... jmp DisplaySprite ; End of function Obj5E ; =============== S U B R O U T I N E ======================================= sub_306C54: ; ... sub.b #1,$2A(a0) bne.s JmpTo_DisplaySprite moveq #6,d6 lea (byte_306D22).l,a2 moveq #2,d3 move.w #8,$14(a0) move.b #6,$24(a0) loc_306C72: ; ... bsr.w SpecialStageObjectLoad bne.s loc_306CA4 moveq #0,d0 move.w #$F,d1 loc_306C7E: ; ... move.l (a0,d0.w),(a1,d0.w) addq.w #4,d0 dbf d1,loc_306C7E move.b d3,$1A(a1) addq.w #1,d3 move.w #-$28,d2 move.w 8(a2),d1 bsr.w CalcAngle move.b d0,$26(a1) lea $A(a2),a2 loc_306CA4: ; ... dbf d6,loc_306C72 move.b #$A,$24(a0) move.w #$1E,$2A(a0) rts ; End of function sub_306C54 ; --------------------------------------------------------------------------- loc_306CB6: ; ... sub.w #1,$2A(a0) bpl.s return_306CE0 tst.b ($FFFFFE00).w beq.s loc_306CD0 move.w #$A,d0 jsr sub_32ED58 bra.s loc_306CD6 ; --------------------------------------------------------------------------- loc_306CD0: ; ... jsr sub_32EC8E loc_306CD6: ; ... st ($FFFFDB23).w jmp DeleteObject ; --------------------------------------------------------------------------- return_306CE0: ; ... rts ; --------------------------------------------------------------------------- return_306CE2: ; ... rts ; --------------------------------------------------------------------------- Map_Obj5F: dc.w byte_306CF6-Map_Obj5F ; 0 ; ... dc.w byte_306D22-Map_Obj5F ; 1 ; This should be a dc.w index... dc.w byte_306D22-Map_Obj5F ; 2 dc.w byte_306D2A-Map_Obj5F ; 3 dc.w byte_306D32-Map_Obj5F ; 4 dc.w byte_306D3A-Map_Obj5F ; 5 dc.w byte_306D42-Map_Obj5F ; 6 dc.w byte_306D4A-Map_Obj5F ; 7 dc.w byte_306D52-Map_Obj5F ; 8 byte_306CF6: dc.b 0, 7, 0, $F,$A0, 0,$FF,$B8, 0, 7,$A0,$10,$FF,$D8, 0, 7,$A0,$18,$FF,$E8, 0, 7,$A0,$20,$FF,$F8, 0, 7,$A0,$28, 0, 8, 0, 7,$A0,$18, 0,$18, 0, $F,$A8, 0, 0,$28; 0 ; ... byte_306D22: dc.b 0, 1, 0, $F,$A0, 0,$FF,$B8; 0 ; ... byte_306D2A: dc.b 0, 1, 0, 7,$A0,$10,$FF,$D8; 0 ; ... byte_306D32: dc.b 0, 1, 0, 7,$A0,$18,$FF,$E8; 0 ; ... byte_306D3A: dc.b 0, 1, 0, 7,$A0,$20,$FF,$F8; 0 ; ... byte_306D42: dc.b 0, 1, 0, 7,$A0,$28, 0, 8; 0 ; ... byte_306D4A: dc.b 0, 1, 0, 7,$A0,$18, 0,$18; 0 ; ... byte_306D52: dc.b 0, 1, 0, $F,$A8, 0, 0,$28; 0 ; ... Map_Obj5F_B: dc.w byte_306D70-Map_Obj5F_B ; 0 ; ... dc.w byte_306D78-Map_Obj5F_B ; 1 ; This should be a dc.w index... dc.w byte_306D80-Map_Obj5F_B ; 2 dc.w byte_306D88-Map_Obj5F_B ; 3 dc.w byte_306D90-Map_Obj5F_B ; 4 dc.w byte_306D98-Map_Obj5F_B ; 5 dc.w byte_306DA0-Map_Obj5F_B ; 6 dc.w byte_306DA8-Map_Obj5F_B ; 7 dc.w byte_306DB0-Map_Obj5F_B ; 8 dc.w byte_306DB8-Map_Obj5F_B ; 9 dc.w byte_306DC0-Map_Obj5F_B ; 10 byte_306D70: dc.b 0, 1,$F8, 1,$80,$12,$FF,$FC; 0 ; ... byte_306D78: dc.b 0, 1,$F8, 1,$80,$14,$FF,$FC; 0 ; ... byte_306D80: dc.b 0, 1,$F8, 1,$80,$16,$FF,$FC; 0 ; ... byte_306D88: dc.b 0, 1,$F8, 1,$80,$18,$FF,$FC; 0 ; ... byte_306D90: dc.b 0, 1,$F8, 1,$80,$1A,$FF,$FC; 0 ; ... byte_306D98: dc.b 0, 1,$F8, 1,$80,$1C,$FF,$FC; 0 ; ... byte_306DA0: dc.b 0, 1,$F8, 1,$80,$1E,$FF,$FC; 0 ; ... byte_306DA8: dc.b 0, 1,$F8, 1,$80,$20,$FF,$FC; 0 ; ... byte_306DB0: dc.b 0, 1,$F8, 1,$80,$22,$FF,$FC; 0 ; ... byte_306DB8: dc.b 0, 1,$F8, 1,$80,$24,$FF,$FC; 0 ; ... byte_306DC0: dc.b 0, 1,$FC, 4,$80,$3A,$FF,$F8; 0 ; ... ; --------------------------------------------------------------------------- ; --------------------------------------------------------------------------- ; Object 87 - Number of Rings in special stage ; --------------------------------------------------------------------------- Obj87: ; ... moveq #0,d0 move.b $A(a0),d0 move.w Obj87_Index(pc,d0.w),d1 jmp Obj87_Index(pc,d1.w) ; --------------------------------------------------------------------------- Obj87_Index: dc.w loc_306DDE-Obj87_Index ; 0 ; ... dc.w loc_306EF2-Obj87_Index ; 1 dc.w loc_306FB2-Obj87_Index ; 2 dc.w loc_307058-Obj87_Index ; 3 ; --------------------------------------------------------------------------- loc_306DDE: ; ... move.b #2,$A(a0) move.l #Map_Obj5F_B,4(a0) move.w #$41FA,2(a0) move.b #4,1(a0) bset #6,1(a0) move.b #2,$F(a0) move.w #$20,d0 moveq #0,d1 lea $10(a0),a1 move.w #$48,(a1) move.w d0,2(a1) move.w d1,4(a1) move.w #$E0,6(a1) move.w d0,8(a1) move.w d1,$A(a1) move.w d0,$E(a1) move.w d0,$14(a1) move.w d0,$1A(a1) move.w d0,$20(a1) tst.b ($FFFFFE00).w bne.s loc_306E9C cmp.w #0,($FFFFFF70).w beq.s loc_306E52 sub.b #1,$F(a0) move.w #$94,(a1) rts ; --------------------------------------------------------------------------- loc_306E52: ; ... bsr.w SpecialStageObjectLoad bne.s return_306E9A move.b #$87,(a1) move.b #4,$A(a1) move.l #Map_Obj5F_B,4(a1) move.w #$41FA,2(a1) move.b #4,1(a1) bset #6,1(a1) move.b #1,$F(a1) lea $10(a1),a2 move.w #$80,(a2) move.w d0,2(a2) move.w d1,4(a2) move.w d0,8(a2) move.w d0,$E(a2) return_306E9A: ; ... rts ; --------------------------------------------------------------------------- loc_306E9C: ; ... bsr.w SpecialStageObjectLoad bne.s return_306E9A move.b #$87,(a1) move.b #6,$A(a1) move.l #Map_Obj5F_B,4(a1) move.w #$41FA,2(a1) move.b #4,1(a1) bset #6,1(a1) move.b #0,$F(a1) lea $10(a1),a2 move.w #$2C,d0 move.w #$A,d1 move.w d0,2(a2) move.w d1,4(a2) move.w d0,8(a2) move.w d1,$A(a2) move.w d0,$E(a2) move.w d1,$10(a2) rts ; --------------------------------------------------------------------------- loc_306EF2: ; ... moveq #0,d0 moveq #0,d3 moveq #0,d5 lea $10(a0),a1 move.l a1,a2 addq.w #5,a2 cmp.w #2,($FFFFFF70).w beq.s loc_306F5C move.b ($FFFFB03C).w,d0 beq.s loc_306F16 addq.w #1,d3 move.b d0,(a2) lea 6(a2),a2 loc_306F16: ; ... move.b ($FFFFB03D).w,d0 tst.b d3 bne.s loc_306F22 tst.b d0 beq.s loc_306F2A loc_306F22: ; ... addq.w #1,d3 move.b d0,(a2) lea 6(a2),a2 loc_306F2A: ; ... addq.w #1,d3 move.b ($FFFFB03E).w,(a2) lea 6(a2),a2 move.w d3,d4 subq.w #1,d4 move.w #$48,d1 tst.w ($FFFFFF70).w beq.s loc_306F46 add.w #$54,d1 loc_306F46: ; ... move.w d1,(a1,d5.w) add.w #8,d1 addq.w #6,d5 dbf d4,loc_306F46 cmp.w #1,($FFFFFF70).w beq.s loc_306FA8 loc_306F5C: ; ... moveq #0,d0 moveq #0,d4 move.b ($FFFFB07C).w,d0 beq.s loc_306F6E addq.w #1,d4 move.b d0,(a2) lea 6(a2),a2 loc_306F6E: ; ... move.b ($FFFFB07D).w,d0 tst.b d4 bne.s loc_306F7A tst.b d0 beq.s loc_306F82 loc_306F7A: ; ... addq.w #1,d4 move.b d0,(a2) lea 6(a2),a2 loc_306F82: ; ... move.b ($FFFFB07E).w,(a2) addq.w #1,d4 add.w d4,d3 subq.w #1,d4 move.w #$E0,d1 tst.w ($FFFFFF70).w beq.s loc_306F9A sub.w #$44,d1 loc_306F9A: ; ... move.w d1,(a1,d5.w) add.w #8,d1 addq.w #6,d5 dbf d4,loc_306F9A loc_306FA8: ; ... move.b d3,$F(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_306FB2: ; ... moveq #0,d0 moveq #0,d1 moveq #0,d2 moveq #1,d3 move.b ($FFFFB03E).w,d0 add.b ($FFFFB07E).w,d0 move.b ($FFFFB03D).w,d1 add.b ($FFFFB07D).w,d1 move.b ($FFFFB03C).w,d2 add.b ($FFFFB07C).w,d2 cmp.b #$A,d0 bcs.s loc_306FDE addq.w #1,d1 sub.b #$A,d0 loc_306FDE: ; ... tst.b d1 beq.s loc_306FFA cmp.b #$A,d1 bcs.s loc_306FF0 add.b #1,d2 sub.b #$A,d1 loc_306FF0: ; ... addq.w #1,d3 tst.b d2 beq.s loc_307000 addq.w #1,d3 bra.s loc_307000 ; --------------------------------------------------------------------------- loc_306FFA: ; ... tst.b d2 beq.s loc_307000 addq.w #2,d3 loc_307000: ; ... lea $10(a0),a1 move.b d3,$F(a0) cmp.b #2,d3 blt.s loc_307032 beq.s loc_307040 move.w #$78,(a1) move.b d2,5(a1) move.w #$80,6(a1) move.b d1,$B(a1) move.w #$88,$C(a1) move.b d0,$11(a1) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_307032: ; ... move.w #$80,(a1) move.b d0,5(a1) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_307040: ; ... move.w #$7C,(a1) move.b d1,5(a1) move.w #$84,6(a1) move.b d0,$B(a1) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_307058: ; ... move.b ($FFFFDB93).w,d0 bne.s loc_307060 rts ; --------------------------------------------------------------------------- loc_307060: ; ... lea $10(a0),a1 moveq #0,d2 move.b d0,d1 and.b #$F0,d0 beq.s loc_307096 addq.w #1,d2 move.w #$20,(a1) lea 6(a1),a1 sub.b #$10,d0 beq.s loc_307096 addq.w #1,d2 move.w #$30,(a1) lea 6(a1),a1 sub.b #$10,d0 beq.s loc_307096 addq.w #1,d2 move.w #$40,(a1) bra.s loc_3070C2 ; --------------------------------------------------------------------------- loc_307096: ; ... and.b #$F,d1 beq.s loc_3070C2 addq.w #1,d2 move.w #$B8,(a1) lea 6(a1),a1 sub.b #1,d1 beq.s loc_3070C2 addq.w #1,d2 move.w #$C8,(a1) lea 6(a1),a1 sub.b #1,d1 beq.s loc_3070C2 addq.w #1,d2 move.w #$D8,(a1) loc_3070C2: ; ... move.b d2,$F(a0) jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_3070CC: ; ... move.b ($FFFFDB0D).w,d0 cmp.b ($FFFFDB21).w,d0 beq.s loc_3070D8 rts ; --------------------------------------------------------------------------- loc_3070D8: ; ... moveq #0,d0 move.b ($FFFFDB10).w,d0 add.w d0,d0 lea SSCurveOffsets(pc,d0.w),a2 move.b (a2)+,d0 tst.b ($FFFFDB0E).w beq.s loc_3070EE neg.b d0 loc_3070EE: ; ... ext.w d0 add.w #$80,d0 move.w d0,($FFFFF73E).w move.b (a2),d0 ext.w d0 add.w #$36,d0 move.w d0,($FFFFF740).w rts ; End of function sub_3070CC ; --------------------------------------------------------------------------- SSCurveOffsets: dc.b $13, 0,$13, 0,$13, 0,$13, 0, 9,$F6, 0,$E4, 0,$E4, 0,$E0; 0 dc.b 0,$DC, 0,$D6, 0,$F0, 0, 6, 0, $E, 0,$10, 0,$12, 0,$12; 16 dc.b 9,$12, 0, 0, 0, 0, 0, 0, 0, 0,$13, 0,$13, 0,$13, 0; 32 dc.b $13, 0, $B, $C, 0, $C, 0,$12, 0, $A, 0, 8, 0, 2, 0,$10; 48 dc.b 0,$E0, 0,$E1, 0,$E2, 0,$E5, 0,$E8, 0,$F2,$13, 0,$13, 0; 64 dc.b $13, 0,$13, 0,$13, 0,$13, 0,$13, 0,$13, 0,$13, 0,$13, 0; 80 dc.b $B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0; 96 ; =============== S U B R O U T I N E ======================================= sub_307176: ; ... moveq #0,d1 moveq #1,d2 move.w ($FFFFFE16).w,d0 move.b d0,d1 lsr.w #8,d0 add.w d0,d0 add.w d0,d0 add.w d1,d0 tst.w ($FFFFFF70).w bne.s loc_307194 move.b SpecialStage_RingObjectives(pc,d0.w),d1 bra.s loc_307198 ; --------------------------------------------------------------------------- loc_307194: ; ... move.b SpecialStage_RingObjectives(pc,d0.w),d1 loc_307198: ; ... move.w d1,($FFFFDB8C).w moveq #0,d0 cmp.w #$64,d1 blt.s loc_3071BC addq.w #1,d2 sub.w #$64,d1 move.w #$100,d0 cmp.w #$64,d1 blt.s loc_3071BC sub.w #$64,d1 add.w #$100,d0 loc_3071BC: ; ... divu.w #$A,d1 lsl.w #4,d1 or.b d1,d0 swap d1 or.b d1,d0 move.w d0,d1 add.w #1,($FFFFFE16).w rts ; End of function sub_307176 ; --------------------------------------------------------------------------- SpecialStage_RingObjectives:dc.b 30, 70,130,110, 50, 90,130,130, 50,100,140,160, 40, 90,140,150, 40, 80,130,130, 70,130,170,170, 50,100,140,140; 0 ; ... SpecialStage_PaletteTable:dc.w $1B, $1C, $1D, $1E, $1F, $20, $21, $22, $23, $24; 0 ; ... ; --------------------------------------------------------------------------- loc_307202: ; ... clr.b ($FFFFFE17).w move.b #-1,($FFFFDB4C).w move.w #0,($FFFFFE20).w move.w #0,($FFFFFED0).w move.b #0,($FFFFFF42).w move.b #0,($FFFFFFB0).w move.b #4,($FFFFDB9F).w lea ($FFFFFFA0).w,a2 moveq #0,d0 move.w d0,(a2)+ move.w d0,(a2)+ move.w d0,(a2)+ move.w d0,(a2)+ move.w d0,(a2)+ move.w d0,(a2)+ moveq #$18,d0 bsr.w PalLoad1 lea (SpecialStage_PaletteTable).l,a1 moveq #0,d0 move.b ($FFFFFE16).w,d0 add.w d0,d0 move.w d0,d1 tst.b ($FFFFFE00).w beq.s loc_307262 cmp.b #4,d0 bcs.s loc_307262 add.w #6,d0 loc_307262: ; ... move.w (a1,d0.w),d0 bsr.w PalLoad1 lea ($FFFF8778).w,a0 add.w (a0,d1.w),a0 move.l a0,($FFFFDB88).w lea ($FFFF855C).w,a0 add.w (a0,d1.w),a0 move.l a0,($FFFFDB8E).w rts ; --------------------------------------------------------------------------- word_307284: dc.w 4,$804,$C04,$1404,$1804,$1C02,$2604,$2A06,$3004,$3804,$3C04,$4004,$4404,$4C06,$5A02,$2204,$FFFF; 0 ; ... ; --------------------------------------------------------------------------- ContinueScreen: ; ... bsr.w Pal_FadeFrom move #$2700,sr move.w ($FFFFF60C).w,d0 and.b #$BF,d0 move.w d0,($C00004).l lea ($C00004).l,a6 move.w #$8004,(a6) move.w #$8700,(a6) bsr.w ClearScreen lea ($FFFFB000).w,a1 moveq #0,d0 move.w #$7FF,d1 loc_3072D8: ; ... move.l d0,(a1)+ dbf d1,loc_3072D8 bsr.w sub_30742E move.l #$60000002,($C00004).l lea (S2_ArtNem_ContinueTails).l,a0 ; S2_ArtNem_ContinueTails bsr.w NemDec move.l #$64800002,($C00004).l lea (ArtNem_MiniKnuckles).l,a0 cmp.w #2,($FFFFFF70).w bne.s loc_307314 lea (S2_ArtNem_MiniTails).l,a0 ; S2_ArtNem_MiniTails loc_307314: ; ... bsr.w NemDec moveq #$A,d1 jsr ContScrCounter moveq #$1B,d0 bsr.w PalLoad1 move.w #0,($FFFFFB80).w move.b #$9C,d0 bsr.w PlayMusic move.w #$293,($FFFFF614).w clr.b ($FFFFF711).w clr.l ($FFFFEEF0).w move.l #$1000000,($FFFFEEF4).w move.b #$DB,($FFFFB000).w move.b #$DA,($FFFFB080).w move.b #$DA,($FFFFB0C0).w move.b #4,($FFFFB0E4).w jsr RunObjects jsr BuildSprites move.b #$16,($FFFFF62A).w bsr.w DelayProgram move.w ($FFFFF60C).w,d0 or.b #$40,d0 move.w d0,($C00004).l bsr.w Pal_FadeTo loc_30738A: ; ... move.b #$16,($FFFFF62A).w bsr.w DelayProgram cmp.b #4,($FFFFB024).w bcc.s loc_3073B8 move #$2700,sr move.w ($FFFFF614).w,d1 divu.w #$3C,d1 and.l #$F,d1 jsr ContScrCounter move #$2300,sr loc_3073B8: ; ... jsr RunObjects jsr BuildSprites cmp.w #$180,($FFFFB008).w bcc.s loc_3073E4 cmp.b #4,($FFFFB024).w bcc.s loc_30738A tst.w ($FFFFF614).w bne.w loc_30738A move.b #0,($FFFFF600).w rts ; --------------------------------------------------------------------------- loc_3073E4: ; ... move.b #$C,($FFFFF600).w move.b #3,($FFFFFE12).w move.b #3,($FFFFFEC6).w moveq #0,d0 move.w d0,($FFFFFE20).w move.l d0,($FFFFFE22).w move.l d0,($FFFFFE26).w move.b d0,($FFFFFE30).w move.w d0,($FFFFFED0).w move.l d0,($FFFFFED2).w move.l d0,($FFFFFED6).w move.b d0,($FFFFFEE0).w move.l #$1388,($FFFFFFC0).w move.l #$1388,($FFFFFFC4).w subq.b #1,($FFFFFE18).w rts ; =============== S U B R O U T I N E ======================================= sub_30742E: ; ... move.l #$70000002,($C00004).l lea (S2_ArtNem_TitleCard).l,a0 ; S2_ArtNem_TitleCard bsr.w NemDec lea ($FFFF8000).w,a4 lea (S2_ArtNem_TitleCard2).l,a0 ; S2_ArtNem_TitleCard2 bsr.w NemDecToRAM lea (word_307488).l,a0 move.l #$72000002,($C00004).l lea ($FFFF8000).w,a1 lea ($C00000).l,a6 loc_30746A: ; ... moveq #0,d0 move.b (a0)+,d0 bmi.s return_307486 lsl.w #5,d0 lea (a1,d0.w),a2 moveq #0,d1 move.b (a0)+,d1 lsl.w #3,d1 subq.w #1,d1 loc_30747E: ; ... move.l (a2)+,(a6) dbf d1,loc_30747E bra.s loc_30746A ; --------------------------------------------------------------------------- return_307486: ; ... rts ; End of function sub_30742E ; --------------------------------------------------------------------------- word_307488: dc.w $804,$4004,$1C02,$4404,$FFFF ; 0 ; ... ; --------------------------------------------------------------------------- ; --------------------------------------------------------------------------- ; Object DA - Continue Text ; --------------------------------------------------------------------------- ObjDA: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3074A0(pc,d0.w),d1 jmp off_3074A0(pc,d1.w) ; --------------------------------------------------------------------------- off_3074A0: dc.w loc_3074A8-off_3074A0 ; 0 ; ... dc.w loc_3074D8-off_3074A0 ; 1 dc.w loc_3074FC-off_3074A0 ; 2 dc.w loc_307576-off_3074A0 ; 3 ; --------------------------------------------------------------------------- loc_3074A8: ; ... addq.b #2,$24(a0) move.l #Map_ObjDA,4(a0) move.w #$8500,2(a0) jsr Adjust2PArtPointer2_Useless move.b #0,1(a0) move.b #$3C,$19(a0) move.w #$120,8(a0) move.w #$C0,$A(a0) loc_3074D8: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- word_3074DE: dc.w $116,$12A,$102,$13E,$EE,$152,$DA,$166,$C6,$17A,$B2,$18E,$9E,$1A2,$8A; 0 ; ... ; --------------------------------------------------------------------------- loc_3074FC: ; ... move.l a0,a1 lea (word_3074DE).l,a2 moveq #0,d1 move.b ($FFFFFE18).w,d1 subq.b #2,d1 bcc.s loc_307514 jmp DeleteObject ; --------------------------------------------------------------------------- loc_307514: ; ... moveq #1,d3 cmp.b #$E,d1 bcs.s loc_307520 moveq #0,d3 moveq #$E,d1 loc_307520: ; ... move.b d1,d2 and.b #1,d2 loc_307526: ; ... move.b #$DA,0(a1) move.w (a2)+,8(a1) tst.b d2 beq.s loc_30753A sub.w #$A,8(a1) loc_30753A: ; ... move.w #$D0,$A(a1) move.b #4,$1A(a1) move.b #6,$24(a1) move.l #Map_ObjDA,4(a1) move.w #$8524,2(a1) jsr Adjust2PArtPointer_Useless move.b #0,1(a1) lea $40(a1),a1 dbf d1,loc_307526 lea -$40(a1),a1 move.b d3,$28(a1) loc_307576: ; ... tst.b $28(a0) beq.s loc_307596 cmp.b #4,($FFFFB024).w bcs.s loc_307596 move.b ($FFFFFE0F).w,d0 and.b #1,d0 bne.s loc_307596 tst.w ($FFFFB010).w bne.s loc_3075AC rts ; --------------------------------------------------------------------------- loc_307596: ; ... move.b ($FFFFFE0F).w,d0 and.b #$F,d0 bne.s loc_3075A6 bchg #0,$1A(a0) loc_3075A6: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3075AC: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- ; --------------------------------------------------------------------------- ; Object DB - Knuckles on the continue screen ; --------------------------------------------------------------------------- ObjDB: ; ... moveq #0,d0 move.b $24(a0),d0 move.w ObjDB_Index(pc,d0.w),d1 jsr ObjDB_Index(pc,d1.w) jmp DisplaySprite ; --------------------------------------------------------------------------- ObjDB_Index: dc.w ObjDB_Knuckles_Init-ObjDB_Index; 0 ; ... dc.w ObjDB_Knuckles_Wait-ObjDB_Index; 1 dc.w ObjDB_Knuckles_Run-ObjDB_Index; 2 ; --------------------------------------------------------------------------- ObjDB_Knuckles_Init: ; ... addq.b #2,$24(a0) move.w #$9C,8(a0) move.w #$19C,$C(a0) move.l #$14A8D6,4(a0) ; SK_Map_Knuckles move.w #$780,2(a0) move.b #4,1(a0) move.b #2,$18(a0) move.b #$24,$1C(a0) ObjDB_Knuckles_Wait: ; ... tst.b ($FFFFF605).w bmi.s ObjDB_Knuckles_StartRunning jsr Knuckles_Animate jmp LoadKnucklesDynPLC ; --------------------------------------------------------------------------- ObjDB_Knuckles_StartRunning: ; ... addq.b #2,$24(a0) move.b #0,$1C(a0) clr.w $14(a0) move.b #$E0,d0 bsr.w PlaySound ObjDB_Knuckles_Run: ; ... cmp.w #$800,$14(a0) bne.s loc_307634 move.w #$1000,$10(a0) bra.s loc_30763A ; --------------------------------------------------------------------------- loc_307634: ; ... add.w #$20,$14(a0) loc_30763A: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jsr Knuckles_Animate jmp LoadKnucklesDynPLC ; --------------------------------------------------------------------------- off_30764C: dc.w byte_30764E-off_30764C ; ... byte_30764E: dc.b 9, 2, 3,$FF ; 0 ; ... Map_ObjDA: dc.w byte_30765E-Map_ObjDA ; 0 ; ... dc.w byte_30765E-Map_ObjDA ; 1 dc.w byte_3076A2-Map_ObjDA ; 2 dc.w byte_3076AA-Map_ObjDA ; 3 dc.w byte_3076B2-Map_ObjDA ; 4 dc.w byte_3076BA-Map_ObjDA ; 5 byte_30765E: dc.b 0,$B,$F8, 5, 0,$90,$FF,$C4,$F8, 5, 0,$88,$FF,$D4,$F8, 5, 0,$84,$FF,$E4,$F8, 5, 0,$94,$FF,$F4,$F8, 1, 0,$98, 0, 4,$F8, 5, 0,$84, 0,$C,$F8, 5, 0,$9A, 0,$1C,$F8, 5, 0,$80, 0,$2C,$38, 5,$20,$20,$FF,$E8,$38, 5,$20,$20, 0, 8,$36, 5, 1,$FC,$FF,$F8; 0 ; ... byte_3076A2: dc.b 0, 1,$F0,$F, 0, 0,$FF,$F0 ; 0 ; ... byte_3076AA: dc.b 0, 1,$F0,$F, 0,$10,$FF,$F0 ; 0 ; ... byte_3076B2: dc.b 0, 1, 0, 6, 0, 0, 0, 0 ; 0 ; ... byte_3076BA: dc.b 0, 1, 0, 6, 0, 6, 0, 0 ; 0 ; ... ; --------------------------------------------------------------------------- MenuScreens: ; ... bsr.w Pal_FadeFrom move #$2700,sr move.w ($FFFFF60C).w,d0 and.b #$BF,d0 move.w d0,($C00004).l bsr.w ClearScreen lea ($C00004).l,a6 move.w #$8004,(a6) move.w #$8230,(a6) move.w #$8407,(a6) move.w #$8230,(a6) move.w #$8700,(a6) move.w #$8C81,(a6) move.w #$9001,(a6) lea ($FFFFAC00).w,a1 moveq #0,d0 move.w #$FF,d1 loc_307708: ; ... move.l d0,(a1)+ dbf d1,loc_307708 lea ($FFFFB000).w,a1 moveq #0,d0 move.w #$7FF,d1 loc_307718: ; ... move.l d0,(a1)+ dbf d1,loc_307718 clr.w ($FFFFDC00).w move.l #$FFFFDC00,($FFFFDCFC).w move.l #$42000000,($C00004).l lea (S2_ArtNem_FontStuff).l,a0 ; S2_ArtNem_FontStuff bsr.w NemDec move.l #$4E000000,($C00004).l lea (S2_ArtNem_MenuBox).l,a0 ; S2_ArtNem_MenuBox bsr.w NemDec move.l #$52000000,($C00004).l lea (S2_ArtNem_LevelSelectPics).l,a0 ; S2_ArtNem_LevelSelectPics bsr.w NemDec lea ($FFFF0000).l,a1 lea (S2_ArtNem_MenuBack).l,a0 ; S2_MapEng_MenuBack move.w #$6000,d0 bsr.w EniDec lea ($FFFF0000).l,a1 move.l #$60000003,d0 moveq #$27,d1 moveq #$1B,d2 jsr ShowVDPGraphics lea ($FFFF0000).l,a1 lea (MapEng_LevSel).l,a0 move.w #0,d0 bsr.w EniDec lea ($FFFF0000).l,a1 move.l #$40000003,d0 moveq #$27,d1 moveq #$1B,d2 jsr ShowVDPGraphics moveq #0,d3 bsr.w sub_307B10 lea ($FFFF08C0).l,a1 lea (MapEng_LevSelIcon).l,a0 move.w #$90,d0 bsr.w EniDec bsr.w sub_307B3E clr.w ($FFFFFF70).w clr.w ($FFFFFF10).w clr.b ($FFFFF711).w clr.w ($FFFFF7F0).w lea (byte_307FF2).l,a2 jsr Dynamic_Normal moveq #$26,d0 bsr.w PalLoad1 lea ($FFFFFB40).w,a1 lea ($FFFFFBC0).w,a2 moveq #7,d1 loc_307804: ; ... move.l (a1),(a2)+ clr.l (a1)+ dbf d1,loc_307804 move.b #$91,d0 jsr PlayMusic moveq #0,d0 bsr.w LoadPLC2 move.w #$707,($FFFFF614).w move.w #1,($FFFFFF72).w clr.w ($FFFFFFDC).w clr.l ($FFFFEE00).w clr.l ($FFFFEE04).w clr.w ($FFFFFF0C).w clr.w ($FFFFFF0E).w move.b #$16,($FFFFF62A).w bsr.w DelayProgram move.w ($FFFFF60C).w,d0 or.b #$40,d0 move.w d0,($C00004).l bsr.w Pal_FadeTo loc_307858: ; ... move.b #$16,($FFFFF62A).w bsr.w DelayProgram move #$2700,sr moveq #0,d3 bsr.w sub_307A6E bsr.w LevSelControls move.w #$6000,d3 bsr.w sub_307A6E bsr.w sub_307B3E move #$2300,sr lea (byte_307FF2).l,a2 jsr Dynamic_Normal bsr.w RunPLC_RAM move.b ($FFFFF605).w,d0 or.b ($FFFFF607).w,d0 and.b #$80,d0 bne.s loc_3078A2 bra.w loc_307858 ; --------------------------------------------------------------------------- loc_3078A2: ; ... move.w ($FFFFFF82).w,d0 add.w d0,d0 move.w LevelSelect_LevelOrder(pc,d0.w),d0 bmi.w loc_3078FE cmp.w #$4000,d0 bne.s loc_307932 move.b #$10,($FFFFF600).w clr.w ($FFFFFE10).w move.b #3,($FFFFFE12).w move.b #3,($FFFFFEC6).w moveq #0,d0 move.w d0,($FFFFFE20).w move.l d0,($FFFFFE22).w move.l d0,($FFFFFE26).w move.w d0,($FFFFFED0).w move.l d0,($FFFFFED2).w move.l d0,($FFFFFED6).w move.l #$1388,($FFFFFFC0).w move.l #$1388,($FFFFFFC4).w move.w ($FFFFFF72).w,($FFFFFF70).w rts ; --------------------------------------------------------------------------- loc_3078FE: ; ... move.b #0,($FFFFF600).w rts ; --------------------------------------------------------------------------- LevelSelect_LevelOrder:dc.w 0, 1,$D00,$D01,$F00,$F01,$C00,$C01,$700,$701,$B00,$B01,$A00,$A01,$400,$401,$500,$1000,$600,$E00,$4000,$FFFF; 0 ; --------------------------------------------------------------------------- loc_307932: ; ... and.w #$3FFF,d0 move.w d0,($FFFFFE10).w move.b #$C,($FFFFF600).w move.b #3,($FFFFFE12).w move.b #3,($FFFFFEC6).w moveq #0,d0 move.w d0,($FFFFFE20).w move.l d0,($FFFFFE22).w move.l d0,($FFFFFE26).w move.w d0,($FFFFFED0).w move.l d0,($FFFFFED2).w move.l d0,($FFFFFED6).w move.b d0,($FFFFFE18).w move.l #5000,($FFFFFFC0).w move.l #5000,($FFFFFFC4).w move.b #$F9,d0 jsr PlaySound moveq #0,d0 move.w d0,($FFFFFF8A).w move.w d0,($FFFFFFDC).w rts ; =============== S U B R O U T I N E ======================================= LevSelControls: ; ... move.b ($FFFFF605).w,d1 and.b #3,d1 bne.s loc_3079A0 subq.w #1,($FFFFFF80).w bpl.s loc_3079D6 loc_3079A0: ; ... move.w #$B,($FFFFFF80).w move.b ($FFFFF604).w,d1 and.b #3,d1 beq.s loc_3079D6 move.w ($FFFFFF82).w,d0 btst #0,d1 beq.s loc_3079C0 subq.w #1,d0 bcc.s loc_3079C0 moveq #$15,d0 loc_3079C0: ; ... btst #1,d1 beq.s loc_3079D0 addq.w #1,d0 cmp.w #$16,d0 bcs.s loc_3079D0 moveq #0,d0 loc_3079D0: ; ... move.w d0,($FFFFFF82).w rts ; --------------------------------------------------------------------------- loc_3079D6: ; ... cmp.w #$15,($FFFFFF82).w bne.s loc_307A40 move.w ($FFFFFF84).w,d0 move.b ($FFFFF605).w,d1 btst #2,d1 beq.s loc_3079F2 subq.b #1,d0 bcc.s loc_3079F2 moveq #$7F,d0 loc_3079F2: ; ... btst #3,d1 beq.s loc_307A02 addq.b #1,d0 cmp.w #$80,d0 bcs.s loc_307A02 moveq #0,d0 loc_307A02: ; ... btst #6,d1 beq.s loc_307A10 add.b #$10,d0 and.b #$7F,d0 loc_307A10: ; ... move.w d0,($FFFFFF84).w and.w #$30,d1 beq.s return_307A3E move.w ($FFFFFF84).w,d0 add.w #$80,d0 jsr PlayMusic lea (Cheat_Debug).l,a0 lea (Cheat_SuperKnuckles).l,a2 lea ($FFFFFF0A).w,a1 moveq #1,d2 bsr.w byte_307BA6+$58 return_307A3E: ; ... rts ; --------------------------------------------------------------------------- loc_307A40: ; ... move.b ($FFFFF605).w,d1 and.b #$C,d1 beq.s return_307A56 move.w ($FFFFFF82).w,d0 move.b byte_307A58(pc,d0.w),d0 move.w d0,($FFFFFF82).w return_307A56: ; ... rts ; End of function LevSelControls ; --------------------------------------------------------------------------- byte_307A58: dc.b $E, $F,$11,$11,$12,$12,$13,$13,$14,$14,$15,$15, $C, $D, 0, 1, 1, 2, 4, 6, 8, $A; 0 ; =============== S U B R O U T I N E ======================================= sub_307A6E: ; ... lea ($FFFF0000).l,a4 lea (byte_307BA6).l,a5 lea ($C00000).l,a6 moveq #0,d0 move.w ($FFFFFF82).w,d0 lsl.w #2,d0 lea (a5,d0.w),a3 moveq #0,d0 move.b (a3),d0 mulu.w #$50,d0 moveq #0,d1 move.b 1(a3),d1 add.w d1,d0 lea (a4,d0.w),a1 moveq #0,d1 move.b (a3),d1 lsl.w #7,d1 add.b 1(a3),d1 add.w #-$4000,d1 lsl.l #2,d1 lsr.w #2,d1 or.w #$4000,d1 swap d1 move.l d1,4(a6) moveq #$D,d2 loc_307ABE: ; ... move.w (a1)+,d0 add.w d3,d0 move.w d0,(a6) dbf d2,loc_307ABE addq.w #2,a3 moveq #0,d0 move.b (a3),d0 beq.s loc_307B02 mulu.w #$50,d0 moveq #0,d1 move.b 1(a3),d1 add.w d1,d0 lea (a4,d0.w),a1 moveq #0,d1 move.b (a3),d1 lsl.w #7,d1 add.b 1(a3),d1 add.w #-$4000,d1 lsl.l #2,d1 lsr.w #2,d1 or.w #$4000,d1 swap d1 move.l d1,4(a6) move.w (a1)+,d0 add.w d3,d0 move.w d0,(a6) loc_307B02: ; ... cmp.w #$15,($FFFFFF82).w bne.s return_307B0E bsr.w sub_307B10 return_307B0E: ; ... rts ; End of function sub_307A6E ; =============== S U B R O U T I N E ======================================= sub_307B10: ; ... move.l #$49440003,($C00004).l move.w ($FFFFFF84).w,d0 move.b d0,d2 lsr.b #4,d0 bsr.s sub_307B26 move.b d2,d0 ; End of function sub_307B10 ; =============== S U B R O U T I N E ======================================= sub_307B26: ; ... and.w #$F,d0 cmp.b #$A,d0 bcs.s loc_307B34 add.b #4,d0 loc_307B34: ; ... add.b #$10,d0 add.w d3,d0 move.w d0,(a6) rts ; End of function sub_307B26 ; =============== S U B R O U T I N E ======================================= sub_307B3E: ; ... move.w ($FFFFFF82).w,d0 lea (byte_307B90).l,a3 lea (a3,d0.w),a3 lea ($FFFF08C0).l,a1 moveq #0,d0 move.b (a3),d0 lsl.w #3,d0 move.w d0,d1 add.w d0,d0 add.w d1,d0 lea (a1,d0.w),a1 move.l #$4B360003,d0 moveq #3,d1 moveq #2,d2 jsr ShowVDPGraphics lea (word_307C8C).l,a1 moveq #0,d0 move.b (a3),d0 lsl.w #5,d0 lea (a1,d0.w),a1 lea ($FFFFFB40).w,a2 moveq #7,d1 loc_307B88: ; ... move.l (a1)+,(a2)+ dbf d1,loc_307B88 rts ; End of function sub_307B3E ; --------------------------------------------------------------------------- byte_307B90: dcb.b 2, 0 ; 0 ; ... dcb.b 2, 7 ; 2 dcb.b 2, 8 ; 4 dcb.b 2, 6 ; 6 dcb.b 2, 2 ; 8 dcb.b 2, 5 ; 10 dcb.b 2, 4 ; 12 dcb.b 3, 1 ; 14 dc.b 9,$A ; 17 dc.b $B,$C ; 19 dc.b $E ; 21 byte_307BA6: dc.b 3, 6, 3,$24, 3, 6, 4,$24, 6, 6, 6,$24, 6, 6, 7,$24; 0 ; ... dc.b 9, 6, 9,$24, 9, 6,$A,$24,$C, 6,$C,$24,$C, 6,$D,$24; 16 dc.b $F, 6,$F,$24,$F, 6,$10,$24,$12, 6,$12,$24,$12, 6; 32 dc.b $13,$24,$15, 6,$15,$24,$15, 6,$16,$24, 3,$2C, 3,$48; 46 dc.b 3,$2C, 4,$48, 3,$2C, 5,$48, 6,$2C, 0, 0, 9,$2C, 0; 60 dc.b 0,$C,$2C, 0, 0,$F,$2C, 0, 0,$12,$2C,$12,$48,$30; 75 dc.b $38,$FF,$C ; 89 ; --------------------------------------------------------------------------- add.w d0,a0 move.w ($FFFFFF84).w,d0 cmp.b (a0),d0 bne.s loc_307C24 addq.w #1,($FFFFFF0C).w tst.b 1(a0) bpl.s loc_307C2A move.w #$101,(a1) move.b #$B5,d0 jsr PlaySound loc_307C24: ; ... move.w #0,($FFFFFF0C).w loc_307C2A: ; ... move.w ($FFFFFF0E).w,d0 add.w d0,a2 move.w ($FFFFFF84).w,d0 cmp.b (a2),d0 bne.s loc_307C68 addq.w #1,($FFFFFF0E).w tst.b 1(a2) bpl.s return_307C6E tst.w d2 bne.s loc_307C58 move.b #$F,($FFFFFE18).w move.b #$BF,d0 jsr PlayMusic bra.s loc_307C68 ; --------------------------------------------------------------------------- loc_307C58: ; ... move.w #7,($FFFFFFB0).w move.b #$9D,d0 jsr PlayMusic loc_307C68: ; ... move.w #0,($FFFFFF0E).w return_307C6E: ; ... rts ; --------------------------------------------------------------------------- Cheat_LevelSelect_unused:dc.b $19,$65, 9,$17,$FF ; 0 dc.b 1, 1, 2, 4,$FF ; 0 Cheat_Debug: dc.b 1, 9, 9, 4, 1, 0, 1, 8,$FF ; 0 ; ... Cheat_SuperKnuckles:dc.b 1, 6, 7, 7, 7, 2, 1, 6,$FF ; 0 ; ... word_307C8C: dc.w 0, 0,$48,$6A,$8E,$CE,$EEE,$E0,$A4,$82,$62, 0,$E86; 0 ; ... dc.w $26,$E42,$C00, 0, 0,$CE2, 0,$480,$240,$EEE,$4AC,$6A; 13 dc.w $26,$842,$620,$400, 0, 0, 0, 0, 0,$A26,$C48,$E8C; 25 dc.w $CE,$C4,$80,$C00, 0,$EEE,$EEA,$EC8,$6E,$4A,$28, 0; 37 dc.w 0,$48,$6A,$8E,$CE,$EEE,$E0,$A4,$82,$62,$808,$A4A; 49 dc.w $26,$626,$404, 0, 0,$48,$6A,$8E,$CE,$EEE,$E0,$A4; 61 dc.w $82,$62,$400,$E86,$6E,$E42,$C00, 0, 0,$CE2,$8C0,$480; 73 dc.w $240,$EEE,$2AC,$6A,$26,$AA6, 0,$60A,$408,$204, 0; 85 dc.w 0, 0,$C06,$C0A,$C6E,$68,$8A, 0,$2CE,$EC,$AE,$6E; 96 dc.w $EEE, 0,$E,$C4, 0, 0,$EEE,$AAA, 0,$666,$444,$E40; 108 dc.w $C00,$800,$CE,$28E,$E,$84,$62,$20, 0, 0,$6CE,$4AC; 120 dc.w $28A,$68,$46,$E8,$C4,$80,$40,$EEE,$C00,$EC0,$860; 132 dc.w 0, 0, 0,$EEE,$ECA,$E86,$E64,$E42,$6AE,$48A,$268; 143 dc.w $246,$24,$888,$444,$E, 8, 0, 0,$EEE,$ECA,$E86,$E64; 154 dc.w $E42,$6AE,$48A,$268,$246,$24,$888,$444,$E, 8, 0, 0; 166 dc.w $E64,$E86,$EA8,$ECA,$EEE, 0,$AE,$6E,$E22,$E0, 0, 0; 178 dc.w 0, 0, 0,$E20,$4E,$6E,$48,$8C,$CE,$8EE,$800,$400; 190 dc.w 0,$EE8,$E80,$E60, 0, 0, 0, 0,$A22,$C42, 0,$E66,$EEE; 202 dc.w $AAA,$888,$444,$8AE,$46A,$E, 0,$EE, 0, 0, 0,$A22; 215 dc.w $C42, 0,$E66,$EEE,$AAA,$888,$444,$8AE,$46A,$E, 0; 227 dc.w $EE, 0 ; 238 MapEng_LevSel: dc.l $70D0010,$40007DF7,$DF7DF7DA,$F6110541,$105E0F05; 0 ; ... dc.l $210C0012,$84C14852,$9700452F,$21504418,$85E1605A; 5 dc.l $16052130,$609F0045,$F538024F,$A1C0127D,$F5B8026A; 10 dc.l $FE080250,$882A0982, $782980, $2D0A41E, $AC31803; 15 dc.l $80229780,$C0280DA0, $802507,$830089F6,$B8024FBE; 20 dc.l $FBFEC1E0,$B8320783,$10982080, $2F0C826, $AD2E008; 25 dc.l $A5F03409,$82B09200, $8C2C0BC,$310BC220,$C0307D6E; 30 dc.l $93EFBE,$FFB0801E, $C0260AC,$2C8002B0,$98240943; 35 dc.l $14B80229,$51087B03,$C1884B00, $4412048,$FB5C0127; 40 dc.l $DF7DFA21,$2C10A50E,$41885816,$ADC0114B,$E0601684; 45 dc.l $41004C0F, $5300060,$1883C120,$44FADC01,$27DF7DFF; 50 dc.l $41506C18, $6213041, $400F0,$661127C0,$114BD860; 55 dc.l $16064158,$43000621,$106018C0, $D01C41, $69F538; 60 dc.l $24FBEE4,$2C028E9B,$87CE8580,$31E02C09,$8298002C; 65 dc.l $8022078,$2B54052A,$69F93D37,$D7014A7A,$A42D5F17; 70 dc.l $ACFBB4B5,$887ABE2F,$69F7696B,$70F57C5E,$EBEEF0C0; 75 dc.l $2B6BDC7D,$EC01F760,$E014B65C,$5F3C1C01,$F7DDFE00; 80 MapEng_LevSelIcon:dc.l $8090092,$4050BF00,$5F842FC4,$17E30BF2, $237E51B; 0 ; ... dc.l $F30D59C7,$9CD73BCD,$B375F9E2,$AD11878D,$A34761E3; 5 dc.l $E8D21879,$12EDD3DF ; 10 dc.b $C0 ; À dc.b 0 byte_307FF2: dc.b 0, 0,$FF,$27,$CD,$2C, 0,$20, 6, $A, 0,$C7, $A; 0 ; ... dc.b 5,$14, 5,$1E,$C7,$14, 5, $A, 5; 13 ; --------------------------------------------------------------------------- EndingSequence: ; ... lea ($FFFFB000).w,a1 moveq #0,d0 move.w #$7FF,d1 loc_308012: ; ... move.l d0,(a1)+ dbf d1,loc_308012 lea ($FFFFF700).w,a1 moveq #0,d0 move.w #$3F,d1 loc_308022: ; ... move.l d0,(a1)+ dbf d1,loc_308022 lea ($FFFFEE00).w,a1 moveq #0,d0 move.w #$3F,d1 loc_308032: ; ... move.l d0,(a1)+ dbf d1,loc_308032 move #$2700,sr move.w ($FFFFF60C).w,d0 and.b #$BF,d0 move.w d0,($C00004).l move.w #$100,($A11100).l loc_308052: ; ... btst #0,($A11100).l bne.s loc_308052 lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$940F93FF,(a5) move.w #$9780,(a5) move.l #$40000083,(a5) move.w #0,($C00000).l loc_30807E: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_30807E move.w #$8F02,(a5) clr.l ($FFFFF616).w clr.l ($FFFFF61A).w move.w #0,($A11100).l lea ($C00004).l,a6 move.w #$8B03,(a6) move.w #$8230,(a6) move.w #$8407,(a6) move.w #$857C,(a6) move.w #$9001,(a6) move.w #$8004,(a6) move.w #$8720,(a6) move.w #$8ADF,($FFFFF624).w move.w ($FFFFF624).w,(a6) clr.b ($FFFFFE19).w cmp.b #7,($FFFFFFB1).w bne.s loc_3080F0 cmp.w #2,($FFFFFF70).w beq.s loc_3080F0 st ($FFFFFE19).w move.b #$FF,($FFFFF65F).w move.b #$F,($FFFFF65E).w move.w #$30,($FFFFF65C).w loc_3080F0: ; ... clr.w ($FFFFF7AE).w bsr.w sub_309062 bsr.w sub_309078 move.l #$6AC00000,($C00004).l lea (S2_ArtNem_EndingFinalTornado).l,a0 ; S2_ArtNem_EndingFinalTornado jsr NemDec move.l #$65000001,($C00004).l lea (S2_ArtNem_EndingPics).l,a0 ; S2_ArtNem_EndingPics jsr NemDec move.l #$52600002,($C00004).l lea (S2_ArtNem_EndingMiniTornado).l,a0 ; S2_ArtNem_EndingMiniTornado jsr NemDec move.l #$60000002,($C00004).l lea (S2_ArtNem_Tornado).l,a0 ; S2_ArtNem_Tornado jsr NemDec move.l #$69E00002,($C00004).l ; S2_ArtNem_Clouds lea (S2_ArtNem_Clouds).l,a0 jsr NemDec move.w #$E00,($FFFFFE10).w move #$2300,sr moveq #-$6B,d0 jsr PlayMusic move.l #$EEE0EEE,d1 lea ($FFFFFB00).w,a1 moveq #$1F,d0 loc_308188: ; ... move.l d1,(a1)+ dbf d0,loc_308188 lea (Pal_3090BC).l,a1 lea ($FFFFFB80).w,a2 moveq #$1F,d0 loc_30819A: ; ... move.l (a1)+,(a2)+ dbf d0,loc_30819A clr.b ($FFFFEEBD).w moveq #0,d0 move.w d0,($FFFFFE08).w move.w d0,($FFFFFE02).w move.w d0,($FFFFFE04).w move.w d0,($FFFFEE00).w move.w d0,($FFFFEE04).w move.w d0,($FFFFEEF0).w move.w d0,($FFFFEEF4).w move.w d0,($FFFFEE08).w move.w #$C8,($FFFFEE0C).w move.l d0,($FFFFF616).w move.b d0,($FFFFEE42).w move.b d0,($FFFFEE43).w move.w d0,($FFFFF662).w move.w d0,($FFFFF660).w lea ($FFFFE000).w,a1 moveq #0,d0 move.w #$100,d1 loc_3081EA: ; ... move.l d0,(a1)+ dbf d1,loc_3081EA move.w #$7FFF,($FFFFF634).w lea ($FFFFB100).w,a1 move.b #$CA,(a1) move.b #6,$24(a1) move.w #$60,$3C(a1) move.w #1,$30(a1) cmp.w #4,($FFFFF7AE).w bne.s loc_308224 move.w #$10,$2E(a1) move.w #$100,$3C(a1) loc_308224: ; ... move.b #$18,($FFFFF62A).w bsr.w DelayProgram move.w ($FFFFF60C).w,d0 or.b #%1000000,d0 move.w d0,($C00004).l loc_30823C: ; ... move.b #$18,($FFFFF62A).w bsr.w DelayProgram addq.w #1,($FFFFFE04).w jsr RandomNumber jsr RunObjects jsr BuildSprites tst.b ($FFFFF661).w beq.s loc_308268 jsr PalCycle_Load loc_308268: ; ... bsr.w sub_308276 tst.w ($FFFFFE02).w beq.w loc_30823C rts ; =============== S U B R O U T I N E ======================================= sub_308276: ; ... tst.b ($FFFFF660).w beq.w return_3084DE bsr.w Pal_FadeFrom lea ($C00004).l,a6 move.w #$8004,(a6) move.w #$8230,(a6) move.w #$8407,(a6) move.w #$9001,(a6) move.w #$9200,(a6) move.w #$8B03,(a6) move.w #$8700,(a6) clr.b ($FFFFF64E).w move.w #$8C81,(a6) jsr ClearScreen lea ($FFFFAC00).w,a1 moveq #0,d0 move.w #$FF,d1 loc_3082BC: ; ... move.l d0,(a1)+ dbf d1,loc_3082BC lea ($FFFFB000).w,a1 moveq #0,d0 move.w #$7FF,d1 loc_3082CC: ; ... move.l d0,(a1)+ dbf d1,loc_3082CC lea ($FFFFF700).w,a1 moveq #0,d0 move.w #$3F,d1 loc_3082DC: ; ... move.l d0,(a1)+ dbf d1,loc_3082DC lea ($FFFFEE00).w,a1 moveq #0,d0 move.w #$3F,d1 loc_3082EC: ; ... move.l d0,(a1)+ dbf d1,loc_3082EC clr.b ($FFFFEEBD).w moveq #0,d0 move.w d0,($FFFFFE02).w move.w d0,($FFFFFE04).w move.w d0,($FFFFEE00).w move.w d0,($FFFFEE04).w move.w d0,($FFFFEEF0).w move.w d0,($FFFFEEF4).w move.w d0,($FFFFEE08).w move.w d0,($FFFFEE0C).w move.l d0,($FFFFF616).w move.b d0,($FFFFEE42).w move.b d0,($FFFFEE43).w move.w d0,($FFFFF662).w move.w d0,($FFFFF660).w lea ($FFFFE000).w,a1 moveq #0,d0 move.w #$100,d1 loc_308336: ; ... move.l d0,(a1)+ dbf d1,loc_308336 moveq #-$62,d0 ; $9E jsr PlaySound ; Play credits music clr.w ($FFFFFB80).w move.w #$EEE,($FFFFFB8C).w move.w #$EE,($FFFFFBAC).w move.l #$40200000,($C00004).l lea (ArtNem_CreditText).l,a0 jsr NemDec clr.w ($FFFFFF4C).w loc_30836E: ; ... jsr ClearScreen bsr.w sub_30955E bsr.w Pal_FadeTo move.w #$18E,d0 btst #6,($FFFFFFD8).w beq.s loc_30838C move.w #$144,d0 loc_30838C: ; ... move.b #$18,($FFFFF62A).w bsr.w DelayProgram dbf d0,loc_30838C bsr.w Pal_FadeFrom lea (Credits_Pointers).l,a1 addq.w #1,($FFFFFF4C).w move.w ($FFFFFF4C).w,d0 lsl.w #2,d0 move.l (a1,d0.w),d0 bpl.s loc_30836E bsr.w Pal_FadeFrom jsr ClearScreen move.l #$40000000,($C00004).l lea (S2_ArtNem_EndingTitle).l,a0 ; S2_ArtNem_EndingTitle jsr NemDec move.l #$7BA00001,($C00004).l lea (ArtNem_TitleSprites_4).l,a0 bsr.w NemDec move.l #$7FC00001,($C00004).l lea (ArtNem_TitleSprites_5).l,a0 bsr.w NemDec move.l #$51000002,($C00004).l lea (ArtNem_TitleSprites_6).l,a0 bsr.w NemDec lea (byte_309536).l,a0 lea ($FFFF0000).l,a1 move.w #0,d0 jsr EniDec lea ($FFFF0000).l,a1 move.l #$47980003,d0 moveq #$F,d1 moveq #5,d2 jsr ShowVDPGraphics lea ($FFFFB000).w,a1 move.b #$E,(a1) move.b #$16,$28(a1) tst.b ($FFFFFFD8).w bpl.s loc_30845E lea ($FFFFB040).w,a1 move.b #$E,(a1) move.b #$18,$28(a1) loc_30845E: ; ... clr.w ($FFFFFF4C).w bsr.w sub_3084E0 lea byte_3085F6(pc),a1 lea ($FFFFFB60).w,a2 moveq #7,d0 loc_308470: ; ... move.l (a1)+,(a2)+ dbf d0,loc_308470 move.w #$3B,($FFFFF660).w loc_30847C: ; ... move.b #$18,($FFFFF62A).w bsr.w DelayProgram jsr RunObjects jsr BuildSprites subq.w #1,($FFFFF660).w bpl.s loc_30847C move.w #$257,($FFFFF660).w loc_30849E: ; ... move.b #$18,($FFFFF62A).w bsr.w DelayProgram jsr RunObjects jsr BuildSprites addq.w #1,($FFFFFF4C).w bsr.w sub_3084E0 cmp.w #$5E,($FFFFFF4C).w bcs.s loc_30849E move.b ($FFFFF605).w,d1 and.b #$F0,d1 bne.s loc_3084D4 subq.w #1,($FFFFF660).w bpl.s loc_30849E loc_3084D4: ; ... st ($FFFFFE02).w move.b #0,($FFFFF600).w return_3084DE: ; ... rts ; End of function sub_308276 ; =============== S U B R O U T I N E ======================================= sub_3084E0: ; ... lea ($FFFFFB02).w,a2 move.w ($FFFFFF4C).w,d0 cmp.w #$24,d0 bcc.s return_3084DE btst #0,d0 bne.s return_3084DE lsr.w #1,d0 move.b byte_30850C(pc,d0.w),d0 mulu.w #$18,d0 lea RotPal_Ending(pc,d0.w),a1 moveq #5,d0 loc_308504: ; ... move.l (a1)+,(a2)+ dbf d0,loc_308504 rts ; End of function sub_3084E0 ; --------------------------------------------------------------------------- byte_30850C: dc.b 0, 1, 2, 3, 4, 3, 2, 1, 0, 5, 6, 7, 8, 7, 6, 5, 0, 0; 0 RotPal_Ending: dc.w 0,$26,$4E, 0, 0,$EEE, 0,$EC8,$EA6,$E40, 0, 0, 0,$26,$4E, 0, 0,$EEE, 0,$EC8,$EA6,$E60,$600, 0; 0 dc.b 0, 0, 0,$26, 0,$4E, 0, 0, 0, 0,$E,$EE, 0, 0,$E,$C8,$E,$A6,$E,$80,$A, 0, 4, 0, 0, 0, 0,$26, 0,$4E, 0, 0, 0, 0,$E,$EE, 0, 0,$E,$C8,$E,$A6,$E,$A0,$E, 0, 8, 0, 0, 0, 0,$26, 0,$4E, 0, 0, 0, 0,$E,$EE, 0, 0,$E,$C8,$E,$A6,$E,$C0,$E,$60,$E, 0, 0, 0, 0,$26, 0,$6E, 0, 0, 0, 0,$E,$EE, 0, 0,$E,$C8,$E,$A6,$E,$40, 0, 0, 0, 0, 0, 0, 0,$26, 0,$8E, 0, 0, 0, 0,$E,$EE, 0, 0,$E,$C8,$E,$A6,$E,$40, 0, 0, 0, 0, 0, 0, 0,$46, 0,$CE, 0, 0, 0, 0,$E,$EE, 0, 0,$E,$C8,$E,$A6,$E,$40, 0, 0, 0, 0, 0, 0, 0,$8E, 6,$EE, 0, 0, 0, 0,$E,$EE, 0, 0,$E,$C8,$E,$A6,$E,$40, 0, 0, 0, 0; 0 byte_3085F6: dc.b $C, 0, 0, 0,$C, 0,$E,$44,$E,$66,$E,$88, 0,$EE, 0,$AE, 0,$6A, 0,$26,$E,$EE,$E,$AA, 0,$C, 0, 6, 0, 2, 0,$E8; 0 ; ... ; --------------------------------------------------------------------------- ; --------------------------------------------------------------------------- ; Object CA - Cut scene at end of game ; --------------------------------------------------------------------------- ObjCA: ; ... addq.w #1,$32(a0) cmp.w #4,($FFFFF7AE).w beq.s loc_30863A cmp.w #2,($FFFFF7AE).w bne.s loc_30863A st ($FFFFFE19).w move.w #$100,($FFFFFE20).w move.b #$FF,($FFFFF65F).w loc_30863A: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_308648(pc,d0.w),d1 jmp off_308648(pc,d1.w) ; --------------------------------------------------------------------------- off_308648: dc.w loc_308658-off_308648 ; 0 ; ... dc.w loc_308680-off_308648 ; 1 dc.w loc_30868E-off_308648 ; 2 dc.w loc_308680-off_308648 ; 3 dc.w loc_308696-off_308648 ; 4 dc.w loc_30874E-off_308648 ; 5 dc.w loc_308790-off_308648 ; 6 dc.w loc_3087D2-off_308648 ; 7 ; --------------------------------------------------------------------------- loc_308658: ; ... moveq #4,d0 move.w #$180,d1 btst #6,($FFFFFFD8).w beq.s sub_30866A move.w #$100,d1 ; =============== S U B R O U T I N E ======================================= sub_30866A: ; ... lea ($FFFFB0C0).w,a1 move.b #$C9,(a1) move.b d0,$28(a1) addq.b #2,$24(a0) move.w d1,$3C(a0) rts ; End of function sub_30866A ; --------------------------------------------------------------------------- loc_308680: ; ... subq.w #1,$3C(a0) bmi.s loc_308688 rts ; --------------------------------------------------------------------------- loc_308688: ; ... addq.b #2,$24(a0) rts ; --------------------------------------------------------------------------- loc_30868E: ; ... moveq #6,d0 move.w #$80,d1 bra.s sub_30866A ; --------------------------------------------------------------------------- loc_308696: ; ... move.w $2E(a0),d0 cmp.w #$10,d0 bcc.s loc_3086F0 addq.w #4,$2E(a0) clr.b $24(a0) move.l a0,-(sp) move.l dword_3086E0(pc,d0.w),a0 lea ($FFFF0000).l,a1 move.w #$328,d0 jsr EniDec move #$2700,sr lea ($FFFF0000).l,a1 move.l #$441C0003,d0 moveq #$B,d1 moveq #8,d2 jsr ShowVDPGraphics move #$2300,sr move.l (sp)+,a0 rts ; --------------------------------------------------------------------------- dword_3086E0: dc.l S2_MapEng_Ending1,S2_MapEng_Ending2,S2_MapEng_Ending3,S2_MapEng_Ending4; 0 ; ... ; --------------------------------------------------------------------------- loc_3086F0: ; ... move.w #2,($FFFFF662).w st ($FFFFF7CC).w st ($FFFFF661).w lea ($FFFFB000).w,a1 move.w ($FFFFF7AE).w,d0 move.w off_30871E(pc,d0.w),d0 jsr off_30871E(pc,d0.w) move.w #$80,d1 bsr.w sub_30866A move.w #$40,$3C(a0) rts ; --------------------------------------------------------------------------- off_30871E: dc.w loc_308724-off_30871E ; 0 ; ... dc.w loc_308732-off_30871E ; 1 dc.w loc_308736-off_30871E ; 2 ; --------------------------------------------------------------------------- loc_308724: ; ... moveq #8,d0 loc_308726: ; ... move.b #1,(a1) move.b #$81,$2A(a1) rts ; --------------------------------------------------------------------------- loc_308732: ; ... moveq #$C,d0 bra.s loc_308726 ; --------------------------------------------------------------------------- loc_308736: ; ... moveq #$E,d0 move.b #2,(a1) move.b #$81,$2A(a1) move.b #5,($FFFFB080).w move.w a1,($FFFFB0BE).w rts ; --------------------------------------------------------------------------- loc_30874E: ; ... subq.w #1,$3C(a0) bpl.s loc_308764 moveq #$A,d0 move.w #$80,d1 bsr.w sub_30866A move.w #$C0,$3C(a0) loc_308764: ; ... lea ($FFFFB000).w,a1 move.b #$F,$1C(a1) move.w #$A0,8(a1) move.w #$50,$C(a1) cmp.w #2,($FFFFF7AE).w bne.s return_30878E move.b #0,$1C(a1) move.w #$1000,$14(a1) return_30878E: ; ... rts ; --------------------------------------------------------------------------- loc_308790: ; ... subq.w #1,$3C(a0) bmi.s loc_3087AA moveq #0,d4 moveq #0,d5 move.w #0,($FFFFEEB0).w move.w #$100,($FFFFEEB2).w bra.w SwScrl_DEZ ; --------------------------------------------------------------------------- loc_3087AA: ; ... addq.b #2,$24(a0) move.w #$100,$3C(a0) cmp.w #4,($FFFFF7AE).w bne.s return_3087D0 move.w #$880,$3C(a0) btst #6,($FFFFFFD8).w beq.s return_3087D0 move.w #$660,$3C(a0) ; START OF FUNCTION CHUNK FOR sub_3089DE return_3087D0: ; ... rts ; END OF FUNCTION CHUNK FOR sub_3089DE ; --------------------------------------------------------------------------- loc_3087D2: ; ... btst #6,($FFFFFFD8).w beq.s loc_3087E6 cmp.w #$E40,$32(a0) beq.s loc_308804 bra.w loc_3087EE ; --------------------------------------------------------------------------- loc_3087E6: ; ... cmp.w #$1140,$32(a0) beq.s loc_308804 loc_3087EE: ; ... subq.w #1,$3C(a0) bne.s loc_308800 lea (dword_3091A0).l,a2 jsr sub_32F6A0 loc_308800: ; ... bra.w loc_309018 ; --------------------------------------------------------------------------- loc_308804: ; ... addq.b #2,$24(a0) st ($FFFFF660).w rts ; --------------------------------------------------------------------------- ; Object CC - Trigger for rescue plane and birds from ending sequence ; --------------------------------------------------------------------------- ObjCC: ; ... jsr sub_333D66 moveq #0,d0 move.b $24(a0),d0 move.w off_308822(pc,d0.w),d1 jmp off_308822(pc,d1.w) ; --------------------------------------------------------------------------- off_308822: dc.w loc_308826-off_308822 ; 0 ; ... dc.w loc_3088A4-off_308822 ; 1 ; --------------------------------------------------------------------------- loc_308826: ; ... lea (ObjB2_SubObjData).l,a1 jsr LoadSubObject_Part3 cmp.w #2,($FFFFFF70).w bne.s loc_308846 move.b #4,$1A(a0) move.b #1,$1C(a0) loc_308846: ; ... move.w #-$10,8(a0) move.w #$C0,$C(a0) move.w #$100,$10(a0) move.w #-$80,$12(a0) move.b #$14,$35(a0) move.b #3,$18(a0) move.w #4,($FFFFF662).w move.l a0,-(sp) lea (S2_MapEng_Ending_TailsPlane).l,a0 ; S2_MapEng_Ending_TailsPlane cmp.w #4,($FFFFF7AE).w bne.s loc_308886 lea ($2907C0).l,a0 ; S2_MapEng_Ending_SonicPlane loc_308886: ; ... lea ($FFFF0000).l,a1 move.w #$8156,d0 jsr EniDec move.l (sp)+,a0 move.w #$C00,($FFFFFB40).w jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3088A4: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3088B8(pc,d0.w),d1 jsr off_3088B8(pc,d1.w) jmp DisplaySprite ; --------------------------------------------------------------------------- off_3088B8: dc.w loc_3088C4-off_3088B8 ; 0 ; ... dc.w loc_30890A-off_3088B8 ; 1 dc.w loc_3089F8-off_3088B8 ; 2 dc.w loc_308B18-off_3088B8 ; 3 dc.w loc_308C34-off_3088B8 ; 4 dc.w loc_308C94-off_3088B8 ; 5 ; --------------------------------------------------------------------------- loc_3088C4: ; ... cmp.w #$A0,8(a0) beq.s loc_3088DE jsr ObjectMove ; AKA SpeedToPos in Sonic 1 loc_3088D2: ; ... lea (Ani_ObjCC).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- loc_3088DE: ; ... addq.b #2,$25(a0) move.w #$480,$3C(a0) btst #6,($FFFFFFD8).w beq.s loc_3088F6 move.w #$3D0,$3C(a0) loc_3088F6: ; ... move.w #$40,$32(a0) st ($FFFFB134).w clr.w $10(a0) clr.w $12(a0) bra.s loc_3088D2 ; --------------------------------------------------------------------------- loc_30890A: ; ... bsr.w sub_309038 bsr.w loc_308978 subq.w #1,$3C(a0) bmi.s loc_30891A bra.s loc_3088D2 ; --------------------------------------------------------------------------- loc_30891A: ; ... addq.b #2,$25(a0) move.w #2,$3C(a0) clr.w $32(a0) clr.b $1A(a0) cmp.w #2,($FFFFF7AE).w beq.s loc_308948 move.b #7,$1A(a0) cmp.w #4,($FFFFF7AE).w bne.s loc_308948 move.b #$18,$1A(a0) loc_308948: ; ... clr.b $1C(a0) clr.b $1B(a0) clr.b $1E(a0) move.l #Map_ObjCF,4(a0) move.w #0,2(a0) jsr Adjust2PArtPointer2_Useless sub.w #$14,8(a0) add.w #$14,$C(a0) bra.w sub_3089DE ; --------------------------------------------------------------------------- loc_308978: ; ... lea ($FFFFB000).w,a1 move.w ($FFFFF7AE).w,d0 move.w off_308988(pc,d0.w),d0 jmp off_308988(pc,d0.w) ; --------------------------------------------------------------------------- off_308988: dc.w loc_30898E-off_308988 ; 0 ; ... dc.w loc_3089AE-off_308988 ; 1 dc.w loc_3089D4-off_308988 ; 2 ; --------------------------------------------------------------------------- loc_30898E: ; ... move.w $C(a0),d0 sub.w #$1C,d0 loc_308996: ; ... move.w d0,$C(a1) move.w 8(a0),8(a1) move.w #$500,$1C(a1) move.w #$100,$1E(a1) rts ; --------------------------------------------------------------------------- loc_3089AE: ; ... tst.w $32(a0) beq.s loc_3089C6 subq.w #1,$32(a0) add.l #$8000,8(a1) addq.w #1,$C(a1) rts ; --------------------------------------------------------------------------- loc_3089C6: ; ... move.w #$C0,8(a1) move.w #$90,$C(a1) rts ; --------------------------------------------------------------------------- loc_3089D4: ; ... move.w $C(a0),d0 sub.w #$18,d0 bra.s loc_308996 ; =============== S U B R O U T I N E ======================================= sub_3089DE: ; ... ; FUNCTION CHUNK AT 003087D0 SIZE 00000002 BYTES tst.b ($FFFFFE19).w bne.w return_3087D0 loc_3089E6: ; ... lea ($FFFFB000).w,a1 move.w #$200,8(a1) move.w #0,$C(a1) rts ; End of function sub_3089DE ; --------------------------------------------------------------------------- loc_3089F8: ; ... bsr.s sub_3089DE subq.w #1,$3C(a0) bpl.s return_308A38 move.w #2,$3C(a0) move.w $32(a0),d0 cmp.w #$1C,d0 bcc.s loc_308A3A addq.w #1,$32(a0) move.w ($FFFFF7AE).w,d1 move.w off_308A4E(pc,d1.w),d1 lea off_308A4E(pc,d1.w),a1 move.b (a1,d0.w),$1A(a0) add.w d0,d0 add.w d0,d0 move.l dword_308AA8(pc,d0.w),d1 move.w d1,$C(a0) swap d1 move.w d1,8(a0) return_308A38: ; ... rts ; --------------------------------------------------------------------------- loc_308A3A: ; ... addq.b #2,$25(a0) move.w #$60,$3C(a0) clr.b $31(a0) clr.w $32(a0) rts ; --------------------------------------------------------------------------- off_308A4E: dc.w byte_308A54-off_308A4E ; 0 ; ... dc.w byte_308A70-off_308A4E ; 1 dc.w byte_308A8C-off_308A4E ; 2 byte_308A54: dcb.b 4, 7 ; 0 ; ... dcb.b 7, 8 ; 4 dcb.b 3, 9 ; 11 dcb.b 3,$A ; 14 dcb.b $B,$B ; 17 byte_308A70: dcb.b 4, 0 ; 0 ; ... dcb.b 7, 1 ; 4 dcb.b 3, 2 ; 11 dcb.b 3, 3 ; 14 dcb.b $B, 4 ; 17 byte_308A8C: dcb.b 4,$18 ; 0 ; ... dcb.b 7,$19 ; 4 dcb.b 3, 9 ; 11 dcb.b 3,$A ; 14 dcb.b $B,$B ; 17 dword_308AA8: dc.l $A00070 ; 0 ; ... dc.l $B00070 ; 1 dc.l $B60071 ; 2 dc.l $BC0072 ; 3 dc.l $C40074 ; 4 dc.l $C80075 ; 5 dc.l $CA0076 ; 6 dc.l $CC0077 ; 7 dc.l $CE0078 ; 8 dc.l $D00079 ; 9 dc.l $D2007A ; 10 dc.l $D4007B ; 11 dc.l $D6007C ; 12 dc.l $D9007E ; 13 dc.l $DC0081 ; 14 dc.l $DE0084 ; 15 dc.l $E10087 ; 16 dc.l $E4008B ; 17 dc.l $E7008F ; 18 dc.l $EC0094 ; 19 dc.l $F00099 ; 20 dc.l $F5009D ; 21 dc.l $F900A4 ; 22 dc.l $10000AC ; 23 dc.l $10800B8 ; 24 dc.l $11200C4 ; 25 dc.l $11F00D3 ; 26 dc.l $12C00FA ; 27 ; --------------------------------------------------------------------------- loc_308B18: ; ... subq.w #1,$3C(a0) bmi.s loc_308B72 tst.b ($FFFFFE19).w beq.s return_308B5C subq.b #1,$31(a0) bpl.s return_308B5C addq.b #3,$31(a0) move.w $32(a0),d0 addq.w #4,$32(a0) cmp.w #$78,d0 bcc.s return_308B5C cmp.w #$C,d0 bcs.s loc_308B5E bsr.w loc_3089E6 move.l dword_308BBC(pc,d0.w),d1 move.w d1,$C(a0) swap d1 move.w d1,8(a0) lsr.w #2,d0 move.b byte_308B9E(pc,d0.w),$1A(a0) return_308B5C: ; ... rts ; --------------------------------------------------------------------------- loc_308B5E: ; ... move.l dword_308BBC(pc,d0.w),d0 lea ($FFFFB000).w,a1 move.w d0,$C(a1) swap d0 move.w d0,8(a1) rts ; --------------------------------------------------------------------------- loc_308B72: ; ... addq.b #2,$25(a0) clr.w $3C(a0) clr.w $32(a0) lea (dword_3091AC).l,a2 jsr sub_32F6A0 tst.b ($FFFFFE19).w bne.w return_3087D0 lea (dword_3091A8).l,a2 jmp sub_32F6A0 ; --------------------------------------------------------------------------- byte_308B9E: dcb.b 7,$12 ; 0 ; ... dcb.b 6,$13 ; 7 dcb.b 4,$14 ; 13 dcb.b 3,$15 ; 17 dcb.b 9,$16 ; 20 dc.b 0 dword_308BBC: dc.l $C00090 ; 0 ; ... dc.l $B00091 ; 1 dc.l $A80092 ; 2 dc.l $9B0096 ; 3 dc.l $990098 ; 4 dc.l $980099 ; 5 dc.l $99009A ; 6 dc.l $9B009C ; 7 dc.l $9F009E ; 8 dc.l $A400A0 ; 9 dc.l $AC00A2 ; 10 dc.l $B700A5 ; 11 dc.l $C400A8 ; 12 dc.l $D300AB ; 13 dc.l $DE00AE ; 14 dc.l $E800B0 ; 15 dc.l $EF00B2 ; 16 dc.l $F400B5 ; 17 dc.l $F900B8 ; 18 dc.l $FC00BB ; 19 dc.l $FE00BE ; 20 dc.l $FF00C0 ; 21 dc.l $10000C2 ; 22 dc.l $10100C5 ; 23 dc.l $10200C8 ; 24 dc.l $10200CC ; 25 dc.l $10100D1 ; 26 dc.l $FD00D7 ; 27 dc.l $F900DE ; 28 dc.l $F90118 ; 29 ; --------------------------------------------------------------------------- loc_308C34: ; ... bsr.w loc_3089E6 subq.w #1,$3C(a0) bpl.s return_308C62 move.w #2,$3C(a0) move.w $32(a0),d0 cmp.w #$1C,d0 bcc.s loc_308C64 addq.w #4,$32(a0) lea word_308C78(pc,d0.w),a1 move.w (a1)+,d0 add.w d0,($FFFFE000).w move.w (a1)+,d0 add.w d0,($FFFFF616).w return_308C62: ; ... rts ; --------------------------------------------------------------------------- loc_308C64: ; ... addq.b #2,$25(a0) bset #3,$22(a0) clr.b $31(a0) clr.w $32(a0) rts ; --------------------------------------------------------------------------- word_308C78: dc.w -$3A ; 0 ; ... dc.w $88 ; 1 dc.w -$C ; 2 dc.w $22 ; 3 dc.w -8 ; 4 dc.w $10 ; 5 dc.w -4 ; 6 dc.w 8 ; 7 dc.w -2 ; 8 dc.w 4 ; 9 dc.w -1 ; 10 dc.w 2 ; 11 dc.w -1 ; 12 dc.w 2 ; 13 ; --------------------------------------------------------------------------- loc_308C94: ; ... tst.b ($FFFFFE19).w beq.w return_3087D0 move.b #$17,$1A(a0) subq.b #1,$31(a0) bpl.s return_308CC8 addq.b #3,$31(a0) move.w $32(a0),d0 cmp.w #$20,d0 bcc.s return_308CC8 addq.w #4,$32(a0) move.l dword_308CCA(pc,d0.w),d1 move.w d1,$C(a0) swap d1 move.w d1,8(a0) return_308CC8: ; ... rts ; --------------------------------------------------------------------------- dword_308CCA: dc.l $600088,$500068,$440046,$3C0036,$36002A,$330024,$310020,$30001E; 0 ; ... ; --------------------------------------------------------------------------- ; Object CE - Knuckles jumping off the plane from ending sequence ; --------------------------------------------------------------------------- ObjCE: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_308CF8(pc,d0.w),d1 jmp off_308CF8(pc,d1.w) ; --------------------------------------------------------------------------- off_308CF8: dc.w loc_308D00-off_308CF8 ; 0 ; ... dc.w loc_308D5A-off_308CF8 ; 1 dc.w loc_308D92-off_308CF8 ; 2 dc.w JmpTo_DisplaySprite_0-off_308CF8; 3 ; --------------------------------------------------------------------------- loc_308D00: ; ... lea (ObjB3_SubData).l,a1 jsr LoadSubObject_Part3 move.l #Map_ObjCF,4(a0) move.w #$8000,2(a0) move.b #1,$18(a0) jsr Adjust2PArtPointer2_Useless move.b #$C,$1A(a0) cmp.w #4,($FFFFF7AE).w bne.s loc_308D40 move.b #$F,$1A(a0) move.w #$A000,2(a0) loc_308D40: ; ... move.w #$E8,d0 move.w d0,8(a0) move.w d0,$30(a0) move.w #$118,d0 move.w d0,$C(a0) move.w d0,$32(a0) rts ; --------------------------------------------------------------------------- loc_308D5A: ; ... move.w $2C(a0),a1 btst #3,$22(a1) bne.s loc_308D84 loc_308D66: ; ... move.w $30(a0),d0 add.w ($FFFFE000).w,d0 move.w d0,8(a0) move.w $32(a0),d0 sub.w ($FFFFF616).w,d0 move.w d0,$C(a0) JmpTo_DisplaySprite_0: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_308D84: ; ... addq.b #2,$24(a0) clr.w $3C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_308D92: ; ... subq.w #1,$3C(a0) bpl.s loc_308DD0 move.w #4,$3C(a0) move.w $34(a0),d0 cmp.w #4,d0 bcc.s loc_308DD6 addq.w #2,$34(a0) lea byte_308DE0(pc,d0.w),a1 cmp.w #2,($FFFFF7AE).w bne.s loc_308DBC lea byte_308DE4(pc,d0.w),a1 loc_308DBC: ; ... move.b (a1)+,d0 ext.w d0 add.w d0,8(a0) move.b (a1)+,d0 ext.w d0 add.w d0,$C(a0) addq.b #1,$1A(a0) loc_308DD0: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_308DD6: ; ... addq.b #2,$24(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- byte_308DE0: dc.b $F8, 0,$BC,$C8 ; 0 ; ... byte_308DE4: dc.b $F8, 0,$B0,$C0 ; 0 ; ... ; --------------------------------------------------------------------------- ; Object CF - "Plane's helixes" from ending sequence ; --------------------------------------------------------------------------- ObjCF: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_308DF6(pc,d0.w),d1 jmp off_308DF6(pc,d1.w) ; --------------------------------------------------------------------------- off_308DF6: dc.w loc_308DFA-off_308DF6 ; 0 ; ... dc.w loc_308E46-off_308DF6 ; 1 ; --------------------------------------------------------------------------- loc_308DFA: ; ... lea (ObjB3_SubData).l,a1 jsr LoadSubObject_Part3 move.l #Map_ObjCF,4(a0) move.w #$8000,2(a0) move.b #3,$18(a0) jsr Adjust2PArtPointer2_Useless move.b #5,$1A(a0) move.b #2,$1C(a0) move.w #$10F,d0 move.w d0,8(a0) move.w d0,$30(a0) move.w #$15E,d0 move.w d0,$C(a0) move.w d0,$32(a0) rts ; --------------------------------------------------------------------------- loc_308E46: ; ... lea (Ani_ObjCF).l,a1 jsr AnimateSprite bra.w loc_308D66 ; --------------------------------------------------------------------------- ; Object CB - Background clouds from ending sequence ; --------------------------------------------------------------------------- ObjCB: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_308E64(pc,d0.w),d1 jmp off_308E64(pc,d1.w) ; --------------------------------------------------------------------------- off_308E64: dc.w loc_308E6A-off_308E64 ; 0 ; ... dc.w loc_308EDC-off_308E64 ; 1 dc.w loc_308EF0-off_308E64 ; 2 ; --------------------------------------------------------------------------- loc_308E6A: ; ... lea (ObjB3_SubData).l,a1 jsr LoadSubObject_Part3 move.w 2(a0),d0 and.w #$1FFF,d0 or.w #$6000,d0 move.w d0,2(a0) move.b #$30,$19(a0) move.l ($FFFFF636).w,d0 ror.l #1,d0 move.l d0,($FFFFF636).w move.w d0,d1 and.w #3,d0 move.b byte_308ED0(pc,d0.w),$1A(a0) add.w d0,d0 move.w word_308ED4(pc,d0.w),$12(a0) tst.b ($FFFFB134).w beq.s loc_308EC0 and.w #$FF,d1 move.w d1,$C(a0) move.w #$150,8(a0) rts ; --------------------------------------------------------------------------- loc_308EC0: ; ... and.w #$1FF,d1 move.w d1,8(a0) move.w #$100,$C(a0) rts ; --------------------------------------------------------------------------- byte_308ED0: dc.b 0 ; ... dc.b 1 dc.b 2 dc.b 0 word_308ED4: dc.w $FD00 ; 0 ; ... dc.w $FE00 ; 1 dc.w $FF00 ; 2 dc.w $FD00 ; 3 ; --------------------------------------------------------------------------- loc_308EDC: ; ... tst.b ($FFFFB134).w beq.s loc_308EF0 addq.b #2,$24(a0) move.w $12(a0),$10(a0) clr.w $12(a0) loc_308EF0: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 tst.b ($FFFFB134).w beq.s loc_308F0C cmp.w #$FFE0,8(a0) blt.w JmpTo_DeleteObject_0 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_308F0C: ; ... tst.w $C(a0) bmi.w JmpTo_DeleteObject_0 jmp DisplaySprite ; --------------------------------------------------------------------------- JmpTo_DeleteObject_0: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- ; Object CD - Birds from ending sequence ; ---------------------------------------------------------------------------- ObjCD: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_308F2E(pc,d0.w),d1 jmp off_308F2E(pc,d1.w) ; --------------------------------------------------------------------------- off_308F2E: dc.w loc_308F32-off_308F2E ; 0 ; ... dc.w loc_308F82-off_308F2E ; 1 ; --------------------------------------------------------------------------- loc_308F32: ; ... lea (off_3091B0).l,a1 jsr LoadSubObject_Part3 move.l ($FFFFF636).w,d0 ror.l #3,d0 move.l d0,($FFFFF636).w move.l d0,d1 and.w #$7F,d0 move.w #-$A0,d2 add.w d0,d2 move.w d2,8(a0) ror.l #3,d1 and.w #$FF,d1 moveq #8,d2 add.w d1,d2 move.w d2,$C(a0) move.w #$100,$10(a0) moveq #$20,d0 cmp.w #$20,d1 bcs.s loc_308F76 neg.w d0 loc_308F76: ; ... move.w d0,$12(a0) move.w #$C0,$3C(a0) rts ; --------------------------------------------------------------------------- loc_308F82: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_308FA8(pc,d0.w),d1 jsr off_308FA8(pc,d1.w) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (unk_3091BA).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- off_308FA8: dc.w loc_308FAE-off_308FA8 ; 0 ; ... dc.w loc_308FD6-off_308FA8 ; 1 dc.w loc_309008-off_308FA8 ; 2 ; --------------------------------------------------------------------------- loc_308FAE: ; ... subq.w #1,$3C(a0) bpl.s return_308FD4 addq.b #2,$25(a0) move.w $12(a0),$2E(a0) clr.w $10(a0) move.w $C(a0),$32(a0) move.w #$80,$12(a0) move.w #$180,$3C(a0) return_308FD4: ; ... rts ; --------------------------------------------------------------------------- loc_308FD6: ; ... subq.w #1,$3C(a0) bmi.s loc_308FF0 move.w $C(a0),d0 moveq #$FFFFFFFC,d1 cmp.w $32(a0),d0 bcc.s loc_308FEA neg.w d1 loc_308FEA: ; ... add.w d1,$12(a0) rts ; --------------------------------------------------------------------------- loc_308FF0: ; ... addq.b #2,$25(a0) move.w #$FF00,$10(a0) move.w $2E(a0),$12(a0) move.w #$C0,$3C(a0) rts ; --------------------------------------------------------------------------- loc_309008: ; ... subq.w #1,$3C(a0) bmi.s loc_309010 rts ; --------------------------------------------------------------------------- loc_309010: ; ... addq.w #4,sp jmp DeleteObject ; --------------------------------------------------------------------------- loc_309018: ; ... subq.w #1,$30(a0) bpl.s return_309036 move.l ($FFFFF636).w,d0 and.w #$1F,d0 move.w d0,$30(a0) lea (dword_30919C).l,a2 jsr sub_32F6A0 return_309036: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_309038: ; ... subq.w #1,$30(a0) bpl.s return_309060 tst.b $35(a0) beq.s return_309060 subq.b #1,$35(a0) move.l ($FFFFF636).w,d0 and.w #$F,d0 move.w d0,$30(a0) lea (dword_3091A4).l,a2 jsr sub_32F6A0 return_309060: ; ... rts ; End of function sub_309038 ; =============== S U B R O U T I N E ======================================= sub_309062: ; ... move.l #$43200000,($C00004).l lea ($DEA00).l,a0 ; SK_ArtNem_EndingKnuckles jmp NemDec ; End of function sub_309062 ; =============== S U B R O U T I N E ======================================= sub_309078: ; ... moveq #0,d0 cmp.b #7,($FFFFFFB1).w bne.s loc_309084 moveq #2,d0 loc_309084: ; ... move.w off_30908C(pc,d0.w),d0 jmp off_30908C(pc,d0.w) ; End of function sub_309078 ; --------------------------------------------------------------------------- off_30908C: dc.w loc_309090-off_30908C ; 0 ; ... dc.w loc_3090A6-off_30908C ; 1 ; --------------------------------------------------------------------------- loc_309090: ; ... move.l #$72800002,($C00004).l lea ($27EF60).l,a0 ; S2_ArtNem_Flicky jmp NemDec ; --------------------------------------------------------------------------- loc_3090A6: ; ... move.l #$72800002,($C00004).l lea (S2_ArtNem_Eagle).l,a0 ; S2_ArtNem_Penguin jmp NemDec ; --------------------------------------------------------------------------- Pal_3090BC: dc.w 0, 0, $206, $20C, $80, $64E, $EEE, $AAA, $888, $444, $8AE, $46A, $E, 8, $AE, $8E; 0 ; ... dc.w 0, 0, $206, $20C, $80, $64E, $EEE, $AAA, $888, $444, $8AE, $46A, $E, 8, $AE, $8E; 16 dc.w $AEE, 0, $6C, $8E, $AE, $8CE, $EEE, $ECA, $EA8, $A66, $46A, $EEC, $E, 6, 0, 0; 32 dc.w 0, 0, 2, $24, $46, $68, $8A, $CE, $ECA, $EA6, $E80, $E64, $E40, $C00, $EEE, $E; 48 dc.w $E44, 0, $E64, $E86, $EA8, $ECA, $EEE, $4EE, $2AE, $6E, $2C, $444, $888, $AAA, $E0, $EC0; 64 dc.w $EEE, 0, $222, $444, $666, $888, $AAA, $CCC, $EEE, 0, 0, 0, 0, 0, 0, 0; 80 dc.w $EEE, 0, $4CC, $AEC, $EEE, $EEE, $EEE, $AAA, $888, $444, $8AE, $46A, $E, 8, $AE, $8E; 96 dword_30919C: dc.l $3ECB00 ; ... dword_3091A0: dc.l $3ECC00 ; ... dword_3091A4: dc.l $3ECD00 ; ... dword_3091A8: dc.l $3ECE00 ; ... dword_3091AC: dc.l $3ECF00 ; ... off_3091B0: dc.l Map_Obj28 ; ... dc.w $594 dc.b 4, 2, 8, 0 ; 0 unk_3091BA: dc.b 0 ; ... dc.b 2 dc.b 5 dc.b 0 dc.b 1 dc.b $FF Ani_ObjCF: dc.w byte_3091C6-Ani_ObjCF ; 0 ; ... dc.w byte_3091CC-Ani_ObjCF ; 1 dc.w byte_3091DC-Ani_ObjCF ; 2 byte_3091C6: dc.b 3, 0, 0, 1,$FA, 0 ; 0 ; ... byte_3091CC: dc.b 3, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 4,$FA, 0; 0 ; ... byte_3091DC: dc.b 1, 5, 6,$FF ; 0 ; ... Map_ObjCF: dc.w byte_309214-Map_ObjCF ; 0 ; ... dc.w byte_309240-Map_ObjCF ; 1 dc.w byte_30925A-Map_ObjCF ; 2 dc.w byte_309268-Map_ObjCF ; 3 dc.w byte_309276-Map_ObjCF ; 4 dc.w byte_30928A-Map_ObjCF ; 5 dc.w byte_3092B0-Map_ObjCF ; 6 dc.w byte_3092D6-Map_ObjCF ; 7 dc.w byte_309308-Map_ObjCF ; 8 dc.w byte_309328-Map_ObjCF ; 9 dc.w byte_30933C-Map_ObjCF ; 10 dc.w byte_309350-Map_ObjCF ; 11 dc.w byte_30936A-Map_ObjCF ; 12 dc.w byte_309378-Map_ObjCF ; 13 dc.w byte_309386-Map_ObjCF ; 14 dc.w byte_3093B8-Map_ObjCF ; 15 dc.w byte_3093D2-Map_ObjCF ; 16 dc.w byte_3093E6-Map_ObjCF ; 17 dc.w byte_30945A-Map_ObjCF ; 18 dc.w byte_309468-Map_ObjCF ; 19 dc.w byte_309470-Map_ObjCF ; 20 dc.w byte_309478-Map_ObjCF ; 21 dc.w byte_309480-Map_ObjCF ; 22 dc.w byte_309488-Map_ObjCF ; 23 dc.w byte_3094E4-Map_ObjCF ; 24 dc.w byte_309516-Map_ObjCF ; 25 byte_309214: dc.b 0, 7,$F0, 4, 4,$93,$FF,$E0,$F8, 9, 4,$95,$FF,$E0,$F0, 5, 4,$9B,$FF,$F8, 0, 4, 4,$9F,$FF,$F8,$F0, 4, 4,$A1, 0, 8,$F8, 9, 4,$A3, 0, 8, 8, 0, 4,$A9, 0, 8; 0 ; ... byte_309240: dc.b 0, 4,$F4, 5, 4,$AA,$FF,$E8,$F4, 5, 4,$AE,$FF,$F8, 4, 4, 4,$B2,$FF,$F8,$F4, 6, 4,$B4, 0, 8; 0 ; ... byte_30925A: dc.b 0, 2,$F4, $E, 4,$BA,$FF,$EC,$F4, 2, 4,$C6, 0, $C; 0 ; ... byte_309268: dc.b 0, 2,$F4, $E, 4,$C9,$FF,$EC,$F4, 0, 4,$D5, 0, $C; 0 ; ... byte_309276: dc.b 0, 3,$FC, 5, 4,$D6,$FF,$EC,$F4, 9, 4,$DA,$FF,$FC, 4, 4, 4,$E0,$FF,$FC; 0 ; ... byte_30928A: dc.b 0, 6,$F8, 0, 4,$E2,$FF,$F0, 0, 4, 4,$E3,$FF,$F0, 8, 8, 4,$E5,$FF,$F0,$F0, 8, 4,$E8,$FF,$F8,$F8, 4, 4,$EB, 0, 0, 0, 0, 4,$ED, 0, 8; 0 ; ... byte_3092B0: dc.b 0, 6, 0, 0,$1C,$E2, 0, 8,$F8, 4,$1C,$E3, 0, 0,$F0, 8,$1C,$E5,$FF,$F8, 8, 8,$1C,$E8,$FF,$F0, 0, 4,$1C,$EB,$FF,$F0,$F8, 0,$1C,$ED,$FF,$F0; 0 ; ... byte_3092D6: dc.b 0, 8,$E0, 6, 0,$19, 0, 6,$F0, 4, 4,$93,$FF,$E0,$F8, 9, 4,$95,$FF,$E0,$F0, 5, 4,$9B,$FF,$F8, 0, 4, 4,$9F,$FF,$F8,$F0, 4, 4,$A1, 0, 8,$F8, 9, 4,$A3, 0, 8, 8, 0, 4,$A9, 0, 8; 0 ; ... byte_309308: dc.b 0, 5,$E7, 1, 0,$1F, 0, 4,$F4, 5, 4,$AA,$FF,$E8,$F4, 5, 4,$AE,$FF,$F8, 4, 4, 4,$B2,$FF,$F8,$F4, 6, 4,$B4, 0, 8; 0 ; ... byte_309328: dc.b 0, 3,$ED, 5, 0,$21,$FF,$FB,$F4, $E, 4,$BA,$FF,$EC,$F4, 2, 4,$C6, 0, $C; 0 ; ... byte_30933C: dc.b 0, 3,$ED, 5, 0,$25,$FF,$F8,$F4, $E, 4,$C9,$FF,$EC,$F4, 0, 4,$D5, 0, $C; 0 ; ... byte_309350: dc.b 0, 4,$F1, 5, 0,$29,$FF,$F7,$FC, 5, 4,$D6,$FF,$EC,$F4, 9, 4,$DA,$FF,$FC, 4, 4, 4,$E0,$FF,$FC; 0 ; ... byte_30936A: dc.b 0, 2, 0, $F, 0,$2D, 0, 0,$20, 4, 0,$3D, 0, 8; 0 ; ... byte_309378: dc.b 0, 2, 8, $F, 0,$3F, 0, 0,$28, 4, 0,$4F, 0,$10; 0 ; ... byte_309386: dc.b 0, 8, 0, $F, 0,$51, 0,$28, 0, 5, 0,$61, 0,$18,$10, $F, 0,$65, 0, 8,$20, $D, 0,$75, 0,$28,$30, $F, 0,$7D, 0, 8,$30, 6, 0,$8D, 0,$28,$48, 9, 0,$93, 0,$28,$50, 6, 0,$99, 0,$18; 0 ; ... byte_3093B8: dc.b 0, 4, 0, 4, 0,$2B, 0, 8, 8, 1, 0,$2D, 0, 0, 8, $A, 0,$2F, 0, 8,$20, 4, 0,$38, 0, 8; 0 ; ... byte_3093D2: dc.b 0, 3, 8, 8, 0,$3A, 0, 8,$10, $E, 0,$3D, 0, 0,$28, 8, 0,$49, 0, 8; 0 ; ... byte_3093E6: dc.b 0,$13, 0, 8, 0,$4C, 0,$30, 8, $F, 0,$4F, 0,$28,$18, 8, 0,$5F, 0,$48,$20, $F, 0,$62, 0,$48,$18, 3, 0,$72, 0,$68,$38, 3, 0,$76, 0,$68,$40, $F, 0,$7A, 0,$48,$10, 0, 0,$8A, 0, 0,$20, 0, 0,$8B, 0, 0,$10, $E, 0,$8C, 0, 8,$28, 0, 0,$98, 0, 8,$38, 2, 0,$99, 0, 0,$28, $F, 0,$9C, 0,$28,$28, 5, 0,$AC, 0,$18,$38, 9, 0,$B0, 0,$10,$40, 2, 0,$B6, 0, 8,$48, $A, 0,$B9, 0,$10,$48, 5, 0,$C2, 0,$28,$48, 7, 0,$C6, 0,$38; 0 ; ... byte_30945A: dc.b 0, 2,$F8, 4, 0,$19,$FF,$FC, 0, 8, 0,$1B,$FF,$F4; 0 ; ... byte_309468: dc.b 0, 1,$F8, 5, 0,$1E,$FF,$F8; 0 ; ... byte_309470: dc.b 0, 1,$F8, 5, 0,$22,$FF,$F8; 0 ; ... byte_309478: dc.b 0, 1,$F8, 5, 0,$26,$FF,$F8; 0 ; ... byte_309480: dc.b 0, 1,$F8, 5, 0,$2A,$FF,$F8; 0 ; ... byte_309488: dc.b 0, $F, 0, 0,$80,$2E, 0,$28, 8, 8,$80,$2F, 0,$20,$10, $F,$80,$32, 0,$18,$10, 5,$80,$42, 0,$38,$20, $B,$80,$46, 0,$38,$28, $F,$80,$52, 0,$50,$30, $F,$80,$62, 0,$18,$40, 8,$80,$72, 0,$38,$48, $A,$80,$75, 0, 0,$50, 4,$80,$7E, 0,$18,$58, 0,$80,$80, 0,$18,$48, $C,$80,$81, 0,$38,$50, 5,$80,$85, 0,$30,$50, 8,$80,$89, 0,$40,$58, 4,$80,$8C, 0,$48; 0 ; ... byte_3094E4: dc.b 0, 8,$E0, 6,$20,$19, 0, 6,$F0, 4, 4,$93,$FF,$E0,$F8, 9, 4,$EE,$FF,$E0,$F0, 5, 4,$F4,$FF,$F8, 0, 4, 4,$9F,$FF,$F8,$F0, 4, 4,$A1, 0, 8,$F8, 9, 4,$A3, 0, 8, 8, 0, 4,$A9, 0, 8; 0 ; ... byte_309516: dc.b 0, 5,$E7, 1,$20,$1F, 0, 4,$F4, 5, 4,$F8,$FF,$E8,$F4, 5, 4,$FC,$FF,$F8, 4, 4, 4,$B2,$FF,$F8,$F4, 6, 4,$B4, 0, 8; 0 ; ... byte_309536: dc.b 7, 1, 0, 1, 0, 1, $A, 0,$18,$10, 0,$C1,$80, 6, $A,$81,$40, $B, 2, 0,$58,$88, 3,$86,$4C,$A4, 1,$C3,$40,$52, 1,$C0,$14,$21,$13,$C2,$80,$97,$FC, 0; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_30955E: ; ... lea Credits_Pointers(pc),a1 move.w ($FFFFFF4C).w,d0 lsl.w #2,d0 move.l (a1,d0.w),d0 move.l d0,a1 move #$2700,sr lea ($C00000).l,a6 loc_309578: ; ... move.l (a1)+,d0 bmi.s loc_309594 move.l d0,a2 move.w (a1)+,d0 bsr.s sub_30959A move.l d0,4(a6) move.b (a2)+,d0 lsl.w #8,d0 loc_30958A: ; ... move.b (a2)+,d0 bmi.s loc_309592 move.w d0,(a6) bra.s loc_30958A ; --------------------------------------------------------------------------- loc_309592: ; ... bra.s loc_309578 ; --------------------------------------------------------------------------- loc_309594: ; ... move #$2300,sr rts ; End of function sub_30955E ; =============== S U B R O U T I N E ======================================= sub_30959A: ; ... and.l #%1111111111111111,d0 lsl.l #2,d0 lsr.w #2,d0 or.w #%100000000000000,d0 swap d0 rts ; End of function sub_30959A ; --------------------------------------------------------------------------- dc.l byte_30A016 dc.w $C49E dc.l byte_309FEA dc.w $C622 dc.l byte_309FF2 dc.w $C786 dc.l byte_309FE5 dc.w $C924 dc.w $FFFF Credits_Pointers:dc.l off_30961E ; ... dc.l off_309632 dc.l off_309646 dc.l off_309654 dc.l off_309662 dc.l off_309670 dc.l off_309684 dc.l off_3096A4 dc.l off_3096BE dc.l off_3096D8 dc.l off_3096EC dc.l off_309718 dc.l off_309732 dc.l off_30974C dc.l off_30975A dc.l off_30978C dc.l off_3097AC dc.l off_3097C0 dc.l off_3097EC dc.l off_309818 dc.l off_309844 dc.l -1 off_30961E: dc.l byte_309F42 ; ... dc.w $C59C dc.l byte_309F4D dc.w $C5B0 dc.l byte_309F51 dc.w $C784 dc.w $FFFF off_309632: dc.l byte_309858 ; ... dc.w $C586 dc.l byte_30986B dc.w $C5AC dc.l byte_30987D dc.w $C78C dc.w $FFFF off_309646: dc.l byte_30986B ; ... dc.w $C598 dc.l byte_30989B dc.w $C78E dc.w $FFFF off_309654: dc.l byte_3098B8 ; ... dc.w $C598 dc.l byte_3098C9 dc.w $C78C dc.w $FFFF off_309662: dc.l byte_3098E7 ; ... dc.w $C58A dc.l byte_309908 dc.w $C78E dc.w $FFFF off_309670: dc.l byte_309924 ; ... dc.w $C510 dc.l byte_30993E dc.w $C708 dc.l byte_309961 dc.w $C814 dc.w $FFFF off_309684: dc.l byte_309977 ; ... dc.w $C408 dc.l byte_309998 dc.w $C522 dc.l byte_3099A0 dc.w $C612 dc.l byte_3099B8 dc.w $C808 dc.l byte_3099DA dc.w $C910 dc.w $FFFF off_3096A4: dc.l byte_3099F4 ; ... dc.w $C496 dc.l byte_309A07 dc.w $C592 dc.l byte_309A1F dc.w $C794 dc.l byte_309A34 dc.w $C886 dc.w $FFFF off_3096BE: dc.l byte_309A58 ; ... dc.w $C488 dc.l byte_30993E dc.w $C688 dc.l byte_309A7A dc.w $C78E dc.l byte_309A95 dc.w $C88E dc.w $FFFF off_3096D8: dc.l byte_309AB1 ; ... dc.w $C510 dc.l byte_309A58 dc.w $C608 dc.l byte_309A95 dc.w $C80E dc.w $FFFF off_3096EC: dc.l byte_309AEE ; ... dc.w $C312 dc.l byte_3099B8 dc.w $C508 dc.l byte_309B07 dc.w $C614 dc.l byte_309B1D dc.w $C712 dc.l byte_309B35 dc.w $C80E dc.l byte_309B51 dc.w $C916 dc.l byte_309B65 dc.w $CA16 dc.w $FFFF off_309718: dc.l byte_309AB1 ; ... dc.w $C492 dc.l byte_309B79 dc.w $C594 dc.l byte_309B8F dc.w $C796 dc.l byte_309BA4 dc.w $C88E dc.b $FF dc.b $FF off_309732: dc.l byte_309BC1 ; ... dc.w $C48C dc.l byte_309BDE dc.w $C68A dc.l byte_309BFE dc.w $C786 dc.l byte_309C0B dc.w $C888 dc.b $FF dc.b $FF off_30974C: dc.l byte_309C2E ; ... dc.w $C588 dc.l byte_309C50 dc.w $C78A dc.b $FF dc.b $FF off_30975A: dc.l byte_309C70 ; ... dc.w $C288 dc.l byte_309C91 dc.w $C49E dc.l byte_309C9D dc.w $C59E dc.l byte_309CA9 dc.w $C69E dc.l byte_309CB4 dc.w $C7A0 dc.l byte_309CBD dc.w $C8A2 dc.l byte_309CC4 dc.w $C9A2 dc.l byte_309CCC dc.w $CA9E dc.w $FFFF off_30978C: dc.l byte_309CD7 ; ... dc.w $C406 dc.l byte_309CFC dc.w $C610 dc.l byte_309D17 dc.w $C70C dc.l byte_309D36 dc.w $C812 dc.l byte_309D4E dc.w $C914 dc.w $FFFF off_3097AC: dc.l byte_309D65 ; ... dc.w $C512 dc.l byte_309D7D dc.w $C70A dc.l byte_309ACA dc.w $C806 dc.w $FFFF off_3097C0: dc.l byte_309858 ; ... dc.w $C316 dc.l byte_309D9E dc.w $C414 dc.l byte_309DB4 dc.w $C606 dc.l byte_309DD8 dc.w $C70E dc.l byte_309DF3 dc.w $C80A dc.l byte_309E12 dc.w $C90E dc.l byte_309E2E dc.w $CA04 dc.w $FFFF off_3097EC: dc.l byte_309E54 ; ... dc.w $C30C dc.l byte_309E71 dc.w $C424 dc.l byte_309E77 dc.w $C60C dc.l byte_309F9B dc.w $C70A dc.l byte_309ED4 dc.w $C810 dc.l byte_309EEE dc.w $C910 dc.l byte_309F08 dc.w $CA12 dc.w $FFFF off_309818: dc.l byte_309E54 ; ... dc.w $C30C dc.l byte_309E71 dc.w $C424 dc.l byte_309E94 dc.w $C606 dc.l byte_309EB8 dc.w $C70E dc.l byte_309FBA dc.w $C80E dc.l byte_309FD5 dc.w $C91A dc.l byte_309F21 dc.w $CA08 dc.b $FF dc.b $FF off_309844: dc.l byte_309F77 ; ... dc.w $C496 dc.l byte_309F8B dc.w $C6A4 dc.l byte_309F91 dc.w $C8A0 dc.w $FFFF byte_309858: dc.b $20, $A, $B,$2F,$30, $A, $B, 6, 7,$29,$2A,$27,$28,$12,$2B,$2C, $A, $B,$FF; 0 ; ... byte_30986B: dc.b $20,$1F,$20,$23,$24,$1D,$1E, 8, 9,$29,$2A, 6, 7, $A, $B,$23,$24,$FF; 0 ; ... byte_30987D: dc.b 0,$10,$11, 2, 3,$31,$32, 2, 3,$1D,$1E, 0, 0,$1B,$1C, 2, 3,$15,$16, 2, 3,$31,$32, 2, 3,$19,$1A, 2, 3,$FF; 0 ; ... byte_30989B: dc.b 0,$25,$26,$10,$11,$12,$1B,$1C,$1D,$1E, 4, 5,$29,$2A, 0, 0,$27,$28,$1D,$1E,$31,$32,$1D,$1E, 8, 9, 2, 3,$FF; 0 ; ... byte_3098B8: dc.b $20, 8, 9,$12,$23,$24, $A, $B, 6, 7,$27,$28,$1D,$1E,$23,$24,$FF; 0 ; ... byte_3098C9: dc.b 0,$19,$1A, 2, 3,$25,$26, 2, 3,$10,$11, 2, 3,$23,$24,$29,$2A, 0, 0,$31,$32,$1D,$1E,$25,$26,$10,$11,$12,$12,$FF; 0 ; ... byte_3098E7: dc.b $20, 6, 7,$10,$11,$12, $A, $B, $C, $D, 0, 0,$1F,$20,$23,$24,$1D,$1E, $E, $F,$23,$24, 2, 3,$19,$1A,$19,$1A, $A, $B,$23,$24,$FF; 0 ; ... byte_309908: dc.b 0,$31,$32,$29,$2A,$13,$14,$12, 0, 0,$1B,$1C, 2, 3,$15,$16, 2, 3, 0,$37,$31,$32,$29,$2A,$35,$36,$38,$FF; 0 ; ... byte_309924: dc.b $20, $E, $F, 2, 3,$19,$1A, $A, $B, 0, 0,$1F,$20,$17,$18, 2, 3,$1B,$1C,$1B,$1C, $A, $B,$23,$24,$FF; 0 ; ... byte_30993E: dc.b 0,$10,$11,$12,$23,$24,$1D,$1E,$15,$16, 2, 3,$33,$34,$29,$2A, 0, 0,$31,$32, 2, 3,$25,$26,$29,$2A,$10,$11, 2, 3,$23,$24, 2, 3,$FF; 0 ; ... byte_309961: dc.b 0,$37, 6, 7, 2, 3,$23,$24,$1D,$1E,$17,$18, 0, 0,$31,$32, 2, 3,$25,$26,$38,$FF; 0 ; ... byte_309977: dc.b $20, 6, 7,$10,$11, 2, 3,$23,$24, 2, 3, 6, 7,$27,$28, $A, $B,$23,$24, 0, 0, 8, 9, $A, $B,$25,$26,$12, $E, $F,$1B,$1C,$FF; 0 ; ... byte_309998: dc.b $20, 2, 3,$1B,$1C, 8, 9,$FF; 0 ; ... byte_3099A0: dc.b $20, 6, 7,$10,$11,$12, $A, $B, $C, $D, 0, 0, 2, 3,$23,$24,$27,$28,$12,$25,$26,$27,$28,$FF; 0 ; ... byte_3099B8: dc.b 0,$31,$32, 2, 3,$25,$26,$29,$2A,$25,$26,$10,$11,$12, 0, 0,$31,$32, 2, 3,$19,$1A, 2, 3, $E, $F,$29,$2A, 6, 7,$10,$11,$12,$FF; 0 ; ... byte_3099DA: dc.b 0,$37,$13,$14,$29,$2A, 8, 9,$31,$32, 0, 0,$27,$28,$1D,$1E,$27,$28,$1D,$1E,$31,$32, 2, 3,$38,$FF; 0 ; ... byte_3099F4: dc.b $20, 2, 3,$25,$26,$25,$26,$12,$25,$26,$27,$28, 2, 3,$1B,$1C,$27,$28,$FF; 0 ; ... byte_309A07: dc.b $20,$1F,$20,$23,$24,$1D,$1E, $E, $F,$23,$24, 2, 3,$19,$1A,$19,$1A, $A, $B,$23,$24,$25,$26,$FF; 0 ; ... byte_309A1F: dc.b 0, 4, 5,$12,$17,$18,$17,$18, 0, 0,$2D,$2E,$12,$17,$18,$17,$18,$12,$25,$26,$FF; 0 ; ... byte_309A34: dc.b 0,$19,$1A, 2, 3,$25,$26, 2, 3,$1B,$1C,$1D,$1E, 4, 5,$29,$2A, 0, 0,$31,$32, 2, 3,$19,$1A, 2, 3,$19,$1A,$1D,$1E,$27,$28,$1D,$1E,$FF; 0 ; ... byte_309A58: dc.b $20,$1D,$1E, 4, 5,$13,$14, $A, $B, 6, 7,$27,$28, 0, 0,$1F,$20,$17,$18, 2, 3, 6, 7, $A, $B,$19,$1A, $A, $B,$1B,$1C,$27,$28,$FF; 0 ; ... byte_309A7A: dc.b 0,$27,$28, 2, 3,$15,$16, 2, 3,$10,$11,$12,$23,$24,$1D,$1E, 0, 0, 2, 3,$1B,$1C,$27,$28,$1D,$1E,$FF; 0 ; ... byte_309A95: dc.b 0,$31,$32,$29,$2A,$27,$28, 2, 3,$15,$16, 2, 3, 0, 0,$25,$26,$29,$2A, $E, $F, 2, 3,$1B,$1C,$1D,$1E,$FF; 0 ; ... byte_309AB1: dc.b $20,$25,$26,$1F,$20, $A, $B, 6, 7,$12, 2, 3,$17,$18,$25,$26,$27,$28, 2, 3, $E, $F, $A, $B,$FF; 0 ; ... byte_309ACA: dc.b 0, 6, 7, 2, 3,$23,$24,$1D,$1E,$17,$18, 0, 0, 2, 3,$1B,$1C,$1B,$1C, 0, 0,$10,$11, 2, 3,$1B,$1C,$25,$26,$10,$11, 2, 3,$2D,$2E,$FF; 0 ; ... byte_309AEE: dc.b $20,$33,$34,$1D,$1E,$1B,$1C, $A, $B, 0, 0, 2, 3,$23,$24,$27,$28,$12,$25,$26,$27,$28,$25,$26,$FF; 0 ; ... byte_309B07: dc.b 0, 6, 7,$23,$24, 2, 3,$12, $E, $F, 0, 0,$25,$26,$27,$28,$12,$27,$28,$27,$28,$FF; 0 ; ... byte_309B1D: dc.b 0, 4, 5,$23,$24, $A, $B,$1B,$1C, 8, 9, 2, 3, 0, 0,$23,$24,$1D,$1E,$25,$26,$25,$26,$FF; 0 ; ... byte_309B35: dc.b 0,$13,$14,$12,$1B,$1C, 2, 3, 0, 0,$12,$25,$26,$10,$11,$12,$2D,$2E, 2, 3,$27,$28, 2, 3,$23,$24,$12,$FF; 0 ; ... byte_309B51: dc.b 0,$27,$28,$1D,$1E,$19,$1A, 0, 0,$1F,$20, 2, 3,$31,$32,$1B,$1C, $A, $B,$FF; 0 ; ... byte_309B65: dc.b 0,$1F,$20,$10,$11, $A, $B,$1B,$1C,$12,$2F,$30, 0, 0,$23,$24,$12, $A, $B,$FF; 0 ; ... byte_309B79: dc.b $20, 2, 3,$23,$24,$27,$28, 0, 0, 2, 3,$1B,$1C, 8, 9, 0, 0, 6, 7, $E, $F,$FF; 0 ; ... byte_309B8F: dc.b 0,$27,$28,$12,$19,$1A, 0, 0,$25,$26,$15,$16, $A, $B,$17,$18,$17,$18,$31,$32,$FF; 0 ; ... byte_309BA4: dc.b 0,$1F,$20, $A, $B,$27,$28, $A, $B,$23,$24, 0, 0,$19,$1A,$1D,$1E,$23,$24, 2, 3,$2D,$2E,$12, $A, $B, 6, 7,$FF; 0 ; ... byte_309BC1: dc.b $20,$19,$1A,$29,$2A,$25,$26,$12, 6, 7, 0, 0, 6, 7,$1D,$1E,$19,$1A,$1F,$20,$1D,$1E,$25,$26, $A, $B,$23,$24,$FF; 0 ; ... byte_309BDE: dc.b 0,$19,$1A, 2, 3,$25,$26, 2, 3,$27,$28,$1D,$1E, 0, 0,$1B,$1C, 2, 3,$15,$16, 2, 3,$19,$1A,$29,$2A,$23,$24, 2, 3,$FF; 0 ; ... byte_309BFE: dc.b 0,$37, 0,$3B,$3C,$3D,$3E,$3F,$3E,$3F,$35,$36,$FF; 0 ; ... byte_309C0B: dc.b 0, 8, 9,$23,$24, $A, $B, 2, 3,$19,$1A,$25,$26, 0, 0, 6, 7,$1D,$1E,$19,$1A, $A, $B, 0, 0,$27,$28,$23,$24,$29,$2A, $A, $B,$38,$FF; 0 ; ... byte_309C2E: dc.b $20,$25,$26,$1D,$1E,$29,$2A,$1B,$1C, 8, 9, 0, 0,$1F,$20,$23,$24,$1D,$1E, $E, $F,$23,$24, 2, 3,$19,$1A,$19,$1A, $A, $B,$23,$24,$FF; 0 ; ... byte_309C50: dc.b 0,$27,$28,$1D,$1E,$19,$1A,$1D,$1E,$31,$32,$29,$2A,$15,$16,$12, 0, 0,$25,$26,$10,$11,$12,$19,$1A, 2, 3, 8, 9, 2, 3,$FF; 0 ; ... byte_309C70: dc.b $20,$25,$26,$1D,$1E,$29,$2A,$1B,$1C, 8, 9, 0, 0, 2, 3,$25,$26,$25,$26,$12,$25,$26,$27,$28, 2, 3,$1B,$1C,$27,$28,$25,$26,$FF; 0 ; ... byte_309C91: dc.b 0,$19,$1A, 2, 3, 6, 7,$15,$16,$31,$32,$FF; 0 ; ... byte_309C9D: dc.b 0,$13,$14,$12,$19,$1A,$12,$27,$28, 2, 3,$FF; 0 ; ... byte_309CA9: dc.b 0,$19,$1A,$12,$17,$18,$1F,$20,$1D,$1E,$FF; 0 ; ... byte_309CB4: dc.b 0,$12,$1F,$20,$1F,$20,$1D,$1E,$FF; 0 ; ... byte_309CBD: dc.b 0,$25,$26,$3A,$1D,$1E,$FF ; 0 ; ... byte_309CC4: dc.b 0,$1D,$1E,$31,$32,$33,$34,$FF; 0 ; ... byte_309CCC: dc.b 0,$1B,$1C,$3A, $E, $F, $A, $B, $A, $B,$FF; 0 ; ... byte_309CD7: dc.b $20,$1F,$20,$23,$24,$1D,$1E,$13,$14, $A, $B, 6, 7,$27,$28, 0, 0, 2, 3,$25,$26,$25,$26,$12,$25,$26,$27,$28, 2, 3,$1B,$1C,$27,$28,$25,$26,$FF; 0 ; ... byte_309CFC: dc.b 0,$25,$26,$31,$32,$29,$2A,$12, 6, 7,$10,$11,$12, 0, 0,$15,$16, 2, 3,$27,$28, 2, 3, $E, $F,$12,$FF; 0 ; ... byte_309D17: dc.b 0,$27,$28, 2, 3,$15,$16, 2, 3,$10,$11,$12,$23,$24,$1D,$1E, 0, 0,$10,$11, 2, 3,$19,$1A, 2, 3,$1B,$1C,$1D,$1E,$FF; 0 ; ... byte_309D36: dc.b 0,$31,$32,$1D,$1E,$25,$26,$10,$11,$12,$15,$16,$12, 0, 0,$1D,$1E,$1D,$1E,$15,$16, 2, 3,$FF; 0 ; ... byte_309D4E: dc.b 0,$25,$26,$27,$28, $A, $B,$2B,$2C, $A, $B, 0, 0,$2D,$2E,$1D,$1E,$12,$27,$28, 2, 3,$FF; 0 ; ... byte_309D65: dc.b $20, $E, $F, 2, 3,$19,$1A, $A, $B, 0, 0,$19,$1A, 2, 3,$1B,$1C,$29,$2A, 2, 3,$17,$18,$FF; 0 ; ... byte_309D7D: dc.b 0,$31,$32,$1D,$1E,$29,$2A,$12, 6, 7,$10,$11,$12, 0, 0,$27,$28, 2, 3,$15,$16, 2, 3,$10,$11, 2, 3,$25,$26,$10,$11,$12,$FF; 0 ; ... byte_309D9E: dc.b $20,$25,$26,$29,$2A,$1F,$20,$1F,$20,$1D,$1E,$23,$24,$27,$28, $A, $B,$23,$24,$25,$26,$FF; 0 ; ... byte_309DB4: dc.b 0, 8, 9, 2, 3,$12,$33,$34, 2, 3, 4, 5,$29,$2A,$23,$24,$1D,$1E,$29,$2A, 0, 0,$25,$26, 2, 3,$15,$16,$29,$2A,$23,$24, 2, 3,$12,$FF; 0 ; ... byte_309DD8: dc.b 0,$10,$11,$12,$25,$26, 2, 3,$25,$26,$10,$11,$12, 0, 0,$25,$26,$29,$2A,$33,$34,$29,$2A,$15,$16,$12,$FF; 0 ; ... byte_309DF3: dc.b 0,$27,$28,$10,$11,$1D,$1E,$19,$1A, 2, 3,$25,$26, 0, 0,$15,$16, 2, 3,$17,$18,$12,$1B,$1C,$25,$26,$15,$16, $A, $B,$FF; 0 ; ... byte_309E12: dc.b 0, $C, $D,$29,$2A,$13,$14,$12,$1D,$1E, 0, 0,$19,$1A,$12,$1B,$1C, $A, $B, $E, $F,$12,$25,$26,$10,$11,$12,$FF; 0 ; ... byte_309E2E: dc.b 0,$27,$28, 2, 3,$15,$16, 2, 3,$10,$11, 2, 3,$23,$24,$29,$2A, 0,$29,$2A,$27,$28,$25,$26,$29,$2A,$1B,$1C,$1D,$1E,$19,$1A,$12,$31,$32, 2, 3,$FF; 0 ; ... byte_309E54: dc.b $20,$25,$26,$1F,$20, $A, $B, 6, 7,$12, 2, 3,$17,$18, 0, 0,$27,$28,$10,$11, 2, 3,$1B,$1C,$15,$16,$25,$26,$FF; 0 ; ... byte_309E71: dc.b $20,$27,$28,$1D,$1E,$FF ; 0 ; ... byte_309E77: dc.b 0, 6, 7,$12,$1B,$1C, 8, 9,$31,$32, 0, 0, 6, 7,$17,$18, 2, 3,$2B,$2C, $A, $B,$23,$24, 2, 3,$1B,$1C,$FF; 0 ; ... byte_309E94: dc.b 0, 8, 9, $A, $B, 4, 5,$1D,$1E,$23,$24, 2, 3,$10,$11, 0, 0,$19,$1A, 6, 7, 6, 7,$23,$24, 2, 3, 6, 7,$15,$16, $A, $B,$1B,$1C,$FF; 0 ; ... byte_309EB8: dc.b 0,$27,$28, 2, 3,$27,$28,$25,$26,$29,$2A,$1D,$1E, 0, 0,$31,$32, 2, 3,$19,$1A, 2, 3, 8, 9, 2, 3,$FF; 0 ; ... byte_309ED4: dc.b 0, 8, 9, 2, 3,$12,$25,$26,$29,$2A,$15,$16, $A, $B, 0, 0,$25,$26, 2, 3,$12,$27,$28,$1D,$1E,$FF; 0 ; ... byte_309EEE: dc.b 0,$15,$16,$29,$2A,$1B,$1C,$12,$27,$28, 2, 3,$15,$16, $A, $B, 0, 0, 2, 3,$1D,$1E,$15,$16,$12,$FF; 0 ; ... byte_309F08: dc.b 0,$27,$28,$25,$26,$29,$2A,$1B,$1C, $A, $B,$15,$16,$1D,$1E, 0, 0, 2, 3,$1D,$1E,$15,$16,$12,$FF; 0 ; ... byte_309F21: dc.b 0,$19,$1A, 2, 3,$25,$26, 2, 3, 2, 3,$15,$16,$12, 0, 0,$15,$16, 2, 3,$2D,$2E, 2, 3,$19,$1A,$29,$2A,$23,$24, 2, 3,$FF; 0 ; ... byte_309F42: dc.b 0,$25,$26,$1D,$1E,$1B,$1C,$12, 6, 7,$FF; 0 ; ... byte_309F4D: dc.b $20,$35,$36,$FF ; 0 ; ... byte_309F51: dc.b 0, 6, 7, 2, 3,$25,$26,$27,$28, 0, 0,$1D,$1E, $C, $D, 0, 0, 6, 7,$10,$11, 2, 3,$23,$24, 2, 3, 6, 7,$27,$28, $A, $B,$23,$24,$25,$26,$FF; 0 ; ... byte_309F77: dc.b 0,$1F,$20,$23,$24, $A, $B,$25,$26, $A, $B,$1B,$1C,$27,$28, $A, $B, 8, 9,$FF; 0 ; ... byte_309F8B: dc.b 0, 4, 5,$31,$32,$FF ; 0 ; ... byte_309F91: dc.b 0,$25,$26, $A, $B, $E, $F, 2, 3,$FF; 0 ; ... byte_309F9B: dc.b 0, $C, $D,$23,$24, 2, 3,$1B,$1C, 6, 7, $A, $B, 0, 0,$27,$28, 2, 3,$1B,$1C,$27,$28,$12, 2, 3, 8, 9,$1D,$1E,$FF; 0 ; ... byte_309FBA: dc.b 0,$23,$24,$12, 6, 7,$15,$16, 0, 0,$19,$1A, 2, 3, 6, 7, 2, 3,$23,$24, 2, 3, $A, $B, $E, $F,$FF; 0 ; ... byte_309FD5: dc.b 0,$17,$18,$1D,$1E, 6, 7,$15,$16,$31,$32, 0, 0,$1F,$20,$FF; 0 ; ... byte_309FE5: dc.b 5,$11,$1A,$1B,$FF ; 0 ; ... byte_309FEA: dc.b 5, 1, 2,$1A,$1B, 7, 8,$FF; 0 ; ... byte_309FF2: dc.b 5,$18,$19,$11,$16,$17, 9, $A,$24,$25, 0,$38,$26,$27, 1, 2,$11,$16,$17,$24,$25,$38, 0,$1E,$1F,$22,$23,$1C,$1D,$2C,$2D, 9, $A,$22,$23,$FF; 0 ; ... byte_30A016: dc.b 5,$24,$25,$1C,$1D,$1A,$1B,$11, 5, 6,$FF, 0; 0 ; ... ArtNem_CreditText:dc.l $80408004, $A130323, $4351A44, $C551B67,$7C730186; 0 ; ... dc.l $3001302,$277D340B,$451C551D,$651EFF24,$9249D5E7; 5 dc.l $D88B0D18,$2944EE94,$FB5F4A80,$C4C7C515, $AB341F7; 10 dc.l $6B6B6B68,$BF6BD418,$82089889,$8304BA0D,$4FB42B8C; 15 dc.l $4449622A,$15E9EA0C,$41AB3AB8,$2097418D,$7D7DDA24; 20 dc.l $ED3F6BD4,$18809304,$12E831AF,$AFBB5B5B,$5B45FB3D; 25 dc.l $393ED27F,$693E19C8,$313EED6D,$6D7C05DB,$182B9393; 30 dc.l $ED27F72C,$9DF68571,$888FC1F0,$31150AF4,$F50620D5; 35 dc.l $CE41F16C,$57D8304B,$3436B6BE, $2ED8C0E,$CC1F0126; 40 dc.l $E035F492,$4E7D349F,$6BAC1B3A,$10315ED7,$B6BE2274; 45 dc.l $3150D077,$2E87C1B0,$7E021DD2,$C15CF8B5,$F7015F13; 50 dc.l $E4182592,$4D0DA7DA,$F124F5F2,$720C12E8,$6C10701D; 55 dc.l $7B5F6AE0,$2483BE45,$A4F8413B, $43E1E98, $93F3916; 60 dc.l $950AE311,$12588A85,$7A7A8310,$1260825D, $635F5F7; 65 dc.l $68ED6D7C, $ED8D2AB,$A0C40608,$25D07C39,$DA15C622; 70 dc.l $3B5B4C45,$42BD3D41,$880C1F04,$14283FAF,$AC3103EE; 75 dc.l $D1DADA2E,$D8D7A831, $181FDCF,$AC1B8B4A,$85718898; 80 dc.l $8ABD4BE7,$6BFEC27F,$D83EBBA0,$C4060825,$D0635F5F; 85 dc.l $5DCB249A,$F57B5796,$4963E0AE,$4B249A0C,$4542BDA5; 90 dc.l $56493041,$2E831A52,$E2313460,$88F9AABF,$8982D1C5; 95 dc.l $A5B0D527,$D2693068,$19DC15C2,$741A25DE,$869315C6; 100 dc.l $BE260C4C,$3582BB82,$AE862C47,$6BE29741,$8C0C571A; 105 dc.l $F898D224,$FABB4316,$2C44E0F8,$2BAFAF8E,$E862C58B; 110 dc.l $5773B43,$162C582A,$DF2722D2,$A15C6227,$79C6343E; 115 dc.l $7ED7A86,$C1F825D0,$7D7C8B41,$DD0A4D62,$3B51352E; 120 dc.l $831A0C55,$C4D4476B,$13542AE8,$30C31018,$207F6BE9; 125 dc.l $249265E2,$3B475DA5,$5C76756D,$572BB2CA,$F83E0DA2; 130 dc.l $4F5F0C04,$93716950,$AE311311,$50AE5734,$22A15E9E; 135 dc.l $A0C4107C, $7E0825D, $6A0C5B5,$967578B6; 140 dc.b $A0 ;   dc.b 0 ; =============== S U B R O U T I N E ======================================= LevelSizeLoad: ; ... clr.w ($FFFFEE50).w clr.w ($FFFFEE52).w clr.w ($FFFFEE54).w clr.w ($FFFFEE56).w clr.w ($FFFFEE58).w clr.w ($FFFFEE5A).w clr.w ($FFFFEE5C).w clr.w ($FFFFEE5E).w clr.w ($FFFFEEA0).w clr.w ($FFFFEEA2).w clr.w ($FFFFEEA4).w clr.w ($FFFFEEA6).w clr.w ($FFFFEEA8).w clr.w ($FFFFEEAA).w clr.w ($FFFFEEAC).w clr.w ($FFFFEEAE).w clr.b ($FFFFEEDC).w clr.b ($FFFFEEBC).w clr.b ($FFFFEEBD).w clr.b ($FFFFEEBE).w clr.b ($FFFFEEBF).w moveq #0,d0 move.b d0,($FFFFEEDF).w move.w d0,($FFFFF660).w move.w d0,($FFFFF662).w move.w d0,($FFFFEEE2).w move.w d0,($FFFFEEE4).w move.w ($FFFFFE10).w,d0 ror.b #1,d0 lsr.w #4,d0 lea WordArray_LevelSize(pc,d0.w),a0 move.l (a0)+,d0 move.l d0,($FFFFEEC8).w move.l d0,($FFFFEEC0).w move.l d0,($FFFFEEF8).w move.l (a0)+,d0 move.l d0,($FFFFEECC).w move.l d0,($FFFFEEC4).w move.l d0,($FFFFEEFC).w move.w #$1010,($FFFFEE40).w move.w #$60,($FFFFEED8).w move.w #$60,($FFFFEEDA).w bra.w loc_30A41C ; --------------------------------------------------------------------------- WordArray_LevelSize: dc.w 0, $29A0, 0, $320 ; 0 dc.w 0, $2940, 0, $420 ; 4 dc.w 0, $3FFF, 0, $720 ; 8 dc.w 0, $3FFF, 0, $720 ; 12 dc.w 0, $3FFF, 0, $720 ; 16 dc.w 0, $3FFF, 0, $720 ; 20 dc.w 0, $3FFF, 0, $720 ; 24 dc.w 0, $3FFF, 0, $720 ; 28 dc.w 0, $2280, -$100, $800 ; 32 dc.w 0, $1E80, -$100, $800 ; 36 dc.w 0, $2A80, -$100, $800 ; 40 dc.w 0, $3FFF, -$100, $800 ; 44 dc.w 0, $3FFF, 0, $720 ; 48 dc.w 0, $3FFF, 0, $720 ; 52 dc.w 0, $2800, 0, $720 ; 56 dc.w 0, $3280, 0, $720 ; 60 dc.w 0, $3FFF, 0, $720 ; 64 dc.w 0, $3FFF, 0, $720 ; 68 dc.w 0, $3FFF, 0, $720 ; 72 dc.w 0, $3FFF, 0, $720 ; 76 dc.w 0, $2F80, 0, $680 ; 80 dc.w 0, $2D00, 0, $680 ; 84 dc.w 0, $2380, $3C0, $720 ; 88 dc.w 0, $3FFF, $60, $720 ; 92 dc.w 0, $27A0, 0, $720 ; 96 dc.w 0, $2A80, 0, $720 ; 100 dc.w 0, $2780, 0, $720 ; 104 dc.w 0, $2A80, 0, $720 ; 108 dc.w 0, $1000, $C8, $C8 ; 112 dc.w 0, $1000, $C8, $C8 ; 116 dc.w 0, $28C0, $200, $600 ; 120 dc.w 0, $3FFF, $180, $710 ; 124 dc.w 0, $3FFF, 0, 0 ; 128 dc.w 0, $3FFF, 0, $720 ; 132 ; --------------------------------------------------------------------------- loc_30A41C: ; ... tst.b ($FFFFFE30).w beq.s loc_30A432 jsr Obj79_LoadData move.w ($FFFFB008).w,d1 move.w ($FFFFB00C).w,d0 bra.s loc_30A44E ; --------------------------------------------------------------------------- loc_30A432: ; ... move.w ($FFFFFE10).w,d0 ror.b #1,d0 lsr.w #5,d0 lea WordArray_StartLocation(pc,d0.w),a1 moveq #0,d1 move.w (a1)+,d1 move.w d1,($FFFFB008).w moveq #0,d0 move.w (a1),d0 move.w d0,($FFFFB00C).w loc_30A44E: ; ... sub.w #$A0,d1 bcc.s loc_30A456 moveq #0,d1 loc_30A456: ; ... move.w ($FFFFEECA).w,d2 cmp.w d2,d1 bcs.s loc_30A460 move.w d2,d1 loc_30A460: ; ... move.w d1,($FFFFEE00).w move.w d1,($FFFFEE20).w sub.w #$60,d0 bcc.s loc_30A470 moveq #0,d0 loc_30A470: ; ... cmp.w ($FFFFEECE).w,d0 blt.s loc_30A47A move.w ($FFFFEECE).w,d0 loc_30A47A: ; ... move.w d0,($FFFFEE04).w move.w d0,($FFFFEE24).w bsr.w sub_30A510 rts ; End of function LevelSizeLoad ; --------------------------------------------------------------------------- WordArray_StartLocation:dc.w $60, $28F ; 0 dc.w $60, $2AF ; 2 dc.w $60, $28F ; 4 dc.w $60, $2AF ; 6 dc.w $60, $1AC ; 8 dc.w $60, $1AC ; 10 dc.w $60, $28F ; 12 dc.w $60, $2AF ; 14 dc.w $60, $28C ; 16 dc.w $60, $5EC ; 18 dc.w $60, $20C ; 20 dc.w $60, $2AF ; 22 dc.w $60, $4CC ; 24 dc.w $1E0, $4CC ; 26 dc.w $60, $3EF ; 28 dc.w $60, $6AF ; 30 dc.w $230, $1AC ; 32 dc.w $230, $1AC ; 34 dc.w $60, $28F ; 36 dc.w $60, $2AF ; 38 dc.w $60, $6AC ; 40 dc.w $60, $56C ; 42 dc.w $60, $6AC ; 44 dc.w $60, $5AC ; 46 dc.w $60, $2AC ; 48 dc.w $60, $58C ; 50 dc.w $60, $1EC ; 52 dc.w $60, $12C ; 54 dc.w $60, $12D ; 56 dc.w $60, $12D ; 58 dc.w $60, $37E ; 60 dc.w $60, $37E ; 62 dc.w $120, $70 ; 64 dc.w $140, $70 ; 66 ; =============== S U B R O U T I N E ======================================= sub_30A510: ; ... tst.b ($FFFFFE30).w bne.s loc_30A53E move.w d0,($FFFFEE0C).w move.w d0,($FFFFEE14).w move.w d1,($FFFFEE08).w move.w d1,($FFFFEE10).w move.w d1,($FFFFEE18).w move.w d0,($FFFFEE2C).w move.w d0,($FFFFEE34).w move.w d1,($FFFFEE28).w move.w d1,($FFFFEE30).w move.w d1,($FFFFEE38).w loc_30A53E: ; ... moveq #0,d2 move.b ($FFFFFE10).w,d2 add.w d2,d2 ; End of function sub_30A510 move.w off_30A54E(pc,d2.w),d2 jmp off_30A54E(pc,d2.w) ; --------------------------------------------------------------------------- off_30A54E: dc.w loc_30A570-off_30A54E ; 0 ; ... dc.w loc_30A59C-off_30A54E ; 1 dc.w loc_30A59C-off_30A54E ; 2 dc.w loc_30A59C-off_30A54E ; 3 dc.w loc_30A59C-off_30A54E ; 4 dc.w loc_30A59C-off_30A54E ; 5 dc.w return_30A5AA-off_30A54E ; 6 dc.w loc_30A5AC-off_30A54E ; 7 dc.w return_30A5D8-off_30A54E ; 8 dc.w return_30A5D8-off_30A54E ; 9 dc.w loc_30A5DA-off_30A54E ; 10 dc.w loc_30A5EA-off_30A54E ; 11 dc.w loc_30A61C-off_30A54E ; 12 dc.w loc_30A62A-off_30A54E ; 13 dc.w return_30A642-off_30A54E ; 14 dc.w loc_30A644-off_30A54E ; 15 dc.w loc_30A67E-off_30A54E ; 16 ; --------------------------------------------------------------------------- loc_30A570: ; ... clr.l ($FFFFEE08).w clr.l ($FFFFEE0C).w clr.l ($FFFFEE14).w clr.l ($FFFFEE1C).w lea ($FFFFA800).w,a2 clr.l (a2)+ clr.l (a2)+ clr.l (a2)+ clr.l ($FFFFEE28).w clr.l ($FFFFEE2C).w clr.l ($FFFFEE34).w clr.l ($FFFFEE3C).w rts ; --------------------------------------------------------------------------- loc_30A59C: ; ... asr.w #2,d0 move.w d0,($FFFFEE0C).w asr.w #3,d1 move.w d1,($FFFFEE08).w rts ; --------------------------------------------------------------------------- return_30A5AA: ; ... rts ; --------------------------------------------------------------------------- loc_30A5AC: ; ... clr.l ($FFFFEE08).w clr.l ($FFFFEE0C).w clr.l ($FFFFEE14).w clr.l ($FFFFEE1C).w lea ($FFFFA800).w,a2 clr.l (a2)+ clr.l (a2)+ clr.l (a2)+ clr.l ($FFFFEE28).w clr.l ($FFFFEE2C).w clr.l ($FFFFEE34).w clr.l ($FFFFEE3C).w rts ; --------------------------------------------------------------------------- return_30A5D8: ; ... rts ; --------------------------------------------------------------------------- loc_30A5DA: ; ... lsr.w #3,d0 add.w #$50,d0 move.w d0,($FFFFEE0C).w clr.l ($FFFFEE08).w rts ; --------------------------------------------------------------------------- loc_30A5EA: ; ... clr.l ($FFFFEE08).w clr.l ($FFFFEE28).w tst.b ($FFFFFE11).w bne.s loc_30A60A divu.w #3,d0 sub.w #$140,d0 move.w d0,($FFFFEE0C).w move.w d0,($FFFFEE2C).w rts ; --------------------------------------------------------------------------- loc_30A60A: ; ... divu.w #6,d0 sub.w #$10,d0 move.w d0,($FFFFEE0C).w move.w d0,($FFFFEE2C).w rts ; --------------------------------------------------------------------------- loc_30A61C: ; ... clr.l ($FFFFEE08).w clr.l ($FFFFEE0C).w clr.l ($FFFFEE2C).w rts ; --------------------------------------------------------------------------- loc_30A62A: ; ... lsr.w #2,d0 move.w d0,($FFFFEE0C).w move.w d0,($FFFFEE2C).w lsr.w #1,d1 move.w d1,($FFFFEE10).w lsr.w #2,d1 move.w d1,($FFFFEE08).w rts ; --------------------------------------------------------------------------- return_30A642: ; ... rts ; --------------------------------------------------------------------------- loc_30A644: ; ... tst.b ($FFFFFE11).w beq.s loc_30A656 sub.w #$E0,d0 lsr.w #1,d0 move.w d0,($FFFFEE0C).w bra.s loc_30A65E ; --------------------------------------------------------------------------- loc_30A656: ; ... sub.w #$180,d0 move.w d0,($FFFFEE0C).w loc_30A65E: ; ... muls.w #$119,d1 asr.l #8,d1 move.w d1,($FFFFEE08).w move.w d1,($FFFFF672).w clr.w ($FFFFEE0A).w clr.w ($FFFFF674).w clr.l ($FFFFEE14).w clr.l ($FFFFEE1C).w rts ; --------------------------------------------------------------------------- loc_30A67E: ; ... clr.l ($FFFFEE08).w clr.l ($FFFFEE0C).w rts ; Background layer deformation code ; =============== S U B R O U T I N E ======================================= DeformBgLayer: ; ... tst.b ($FFFFEEDC).w beq.s loc_30A690 rts ; --------------------------------------------------------------------------- loc_30A690: ; ... clr.w ($FFFFEE50).w clr.w ($FFFFEE52).w clr.w ($FFFFEE54).w clr.w ($FFFFEE56).w clr.w ($FFFFEE58).w clr.w ($FFFFEE5A).w clr.w ($FFFFEE5C).w clr.w ($FFFFEE5E).w clr.w ($FFFFEEB0).w clr.w ($FFFFEEB2).w clr.w ($FFFFEEB8).w clr.w ($FFFFEEBA).w cmp.b #$10,($FFFFFE10).w bne.w loc_30A6D2 tst.w ($FFFFFE08).w beq.w loc_30A738 loc_30A6D2: ; ... tst.b ($FFFFEEBE).w bne.s loc_30A738 lea ($FFFFB000).w,a0 lea ($FFFFEE00).w,a1 lea ($FFFFEEC8).w,a2 lea ($FFFFEE50).w,a3 lea ($FFFFEEB0).w,a4 lea ($FFFFEED0).w,a5 lea ($FFFFE500).w,a6 cmp.w #2,($FFFFFF70).w bne.s loc_30A704 lea ($FFFFEED4).w,a5 lea ($FFFFE600).w,a6 loc_30A704: ; ... bsr.w ScrollHorizontal lea ($FFFFEE40).w,a2 bsr.w SwScrl_HPZ_Continued lea ($FFFFEE04).w,a1 lea ($FFFFEEC8).w,a2 lea ($FFFFEEB2).w,a4 move.w ($FFFFEED8).w,d3 cmp.w #2,($FFFFFF70).w bne.s loc_30A72C move.w ($FFFFEEDA).w,d3 loc_30A72C: ; ... bsr.w sub_30B4F0 lea ($FFFFEE41).w,a2 bsr.w sub_30B5EE loc_30A738: ; ... bsr.w RunDynamicLevelEvents move.w ($FFFFEE04).w,($FFFFF616).w move.w ($FFFFEE0C).w,($FFFFF618).w move.l ($FFFFEE00).w,($FFFFEEF0).w move.l ($FFFFEE04).w,($FFFFEEF4).w moveq #0,d0 move.b ($FFFFFE10).w,d0 add.w d0,d0 move.w JumpTable_SwScrollManager(pc,d0.w),d0 jmp JumpTable_SwScrollManager(pc,d0.w) ; End of function DeformBgLayer ; --------------------------------------------------------------------------- JumpTable_SwScrollManager:dc.w SwScrl_EHZ-JumpTable_SwScrollManager; 0 ; ... dc.w SwScrl_Minimal-JumpTable_SwScrollManager; 1 dc.w SwScrl_Lev2-JumpTable_SwScrollManager; 2 dc.w SwScrl_Minimal-JumpTable_SwScrollManager; 3 dc.w SwScrl_MTZ-JumpTable_SwScrollManager; 4 dc.w SwScrl_MTZ-JumpTable_SwScrollManager; 5 dc.w SwScrl_WFZ-JumpTable_SwScrollManager; 6 dc.w SwScrl_HTZ-JumpTable_SwScrollManager; 7 dc.w SwScrl_HPZ-JumpTable_SwScrollManager; 8 dc.w SwScrl_Minimal-JumpTable_SwScrollManager; 9 dc.w SwScrl_OOZ-JumpTable_SwScrollManager; 10 dc.w SwScrl_MCZ-JumpTable_SwScrollManager; 11 dc.w SwScrl_CNZ-JumpTable_SwScrollManager; 12 dc.w SwScrl_CPZ-JumpTable_SwScrollManager; 13 dc.w SwScrl_DEZ-JumpTable_SwScrollManager; 14 dc.w SwScrl_ARZ-JumpTable_SwScrollManager; 15 dc.w SwScrl_SCZ-JumpTable_SwScrollManager; 16 ; =============== S U B R O U T I N E ======================================= SwScrl_Title: ; ... move.w ($FFFFEE0C).w,($FFFFF618).w addq.w #1,($FFFFEE00).w move.w ($FFFFEE00).w,d2 neg.w d2 asr.w #2,d2 lea ($FFFFE000).w,a1 moveq #0,d0 move.w #$9F,d1 loc_30A7A2: ; ... move.l d0,(a1)+ dbf d1,loc_30A7A2 move.w d2,d0 move.w #$1F,d1 loc_30A7AE: ; ... move.l d0,(a1)+ dbf d1,loc_30A7AE move.w d0,d3 move.b ($FFFFFE0F).w,d1 and.w #7,d1 bne.s loc_30A7C4 subq.w #1,($FFFFA800).w loc_30A7C4: ; ... move.w ($FFFFA800).w,d1 and.w #$1F,d1 lea SwScrl_RippleData(pc),a2 lea (a2,d1.w),a2 move.w #$F,d1 loc_30A7D8: ; ... move.b (a2)+,d0 ext.w d0 add.w d3,d0 move.l d0,(a1)+ dbf d1,loc_30A7D8 rts ; End of function SwScrl_Title ; =============== S U B R O U T I N E ======================================= SwScrl_EHZ: ; ... move.w ($FFFFEE0C).w,($FFFFF618).w lea ($FFFFE000).w,a1 move.w ($FFFFEE00).w,d0 neg.w d0 move.w d0,d2 swap d0 move.w #0,d0 move.w #$15,d1 loc_30A802: ; ... move.l d0,(a1)+ dbf d1,loc_30A802 move.w d2,d0 asr.w #6,d0 move.w #$39,d1 loc_30A810: ; ... move.l d0,(a1)+ dbf d1,loc_30A810 move.w d0,d3 move.b ($FFFFFE0F).w,d1 and.w #7,d1 bne.s loc_30A826 subq.w #1,($FFFFA800).w loc_30A826: ; ... move.w ($FFFFA800).w,d1 and.w #$1F,d1 lea (SwScrl_RippleData).l,a2 lea (a2,d1.w),a2 move.w #$14,d1 loc_30A83C: ; ... move.b (a2)+,d0 ext.w d0 add.w d3,d0 move.l d0,(a1)+ dbf d1,loc_30A83C move.w #0,d0 move.w #$A,d1 loc_30A850: ; ... move.l d0,(a1)+ dbf d1,loc_30A850 move.w d2,d0 asr.w #4,d0 move.w #$F,d1 loc_30A85E: ; ... move.l d0,(a1)+ dbf d1,loc_30A85E move.w d2,d0 asr.w #4,d0 move.w d0,d1 asr.w #1,d1 add.w d1,d0 move.w #$F,d1 loc_30A872: ; ... move.l d0,(a1)+ dbf d1,loc_30A872 move.l d0,d4 swap d4 move.w d2,d0 asr.w #1,d0 move.w d2,d1 asr.w #3,d1 sub.w d1,d0 ext.l d0 asl.l #8,d0 divs.w #$30,d0 ext.l d0 asl.l #8,d0 moveq #0,d3 move.w d2,d3 asr.w #3,d3 move.w #$E,d1 loc_30A89C: ; ... move.w d4,(a1)+ move.w d3,(a1)+ swap d3 add.l d0,d3 swap d3 dbf d1,loc_30A89C move.w #8,d1 loc_30A8AE: ; ... move.w d4,(a1)+ move.w d3,(a1)+ move.w d4,(a1)+ move.w d3,(a1)+ swap d3 add.l d0,d3 add.l d0,d3 swap d3 dbf d1,loc_30A8AE move.w #$E,d1 loc_30A8C6: ; ... move.w d4,(a1)+ move.w d3,(a1)+ move.w d4,(a1)+ move.w d3,(a1)+ move.w d4,(a1)+ move.w d3,(a1)+ swap d3 add.l d0,d3 add.l d0,d3 add.l d0,d3 swap d3 dbf d1,loc_30A8C6 move.w d4,(a1)+ move.w d3,(a1)+ move.w d4,(a1)+ move.w d3,(a1)+ rts ; End of function SwScrl_EHZ ; --------------------------------------------------------------------------- SwScrl_RippleData:dc.b 1, 2, 1, 3, 1, 2, 2, 1, 2, 3; 0 ; ... dc.b 1, 2, 1, 2, 0, 0, 2, 0, 3, 2; 10 dc.b 2, 3, 2, 2, 1, 3, 0, 0, 1, 0; 20 dc.b 1, 3, 1, 2, 1, 3, 1, 2, 2, 1; 30 dc.b 2, 3, 1, 2, 1, 2, 0, 0, 2, 0; 40 dc.b 3, 2, 2, 3, 2, 2, 1, 3, 0, 0; 50 dc.b 1, 0, 1, 3, 1, 2; 60 ; --------------------------------------------------------------------------- SwScrl_Lev2: ; ... rts ; --------------------------------------------------------------------------- SwScrl_MTZ: ; ... move.w ($FFFFEEB0).w,d4 ext.l d4 asl.l #5,d4 move.w ($FFFFEEB2).w,d5 ext.l d5 asl.l #6,d5 bsr.w sub_30B610 move.w ($FFFFEE0C).w,($FFFFF618).w lea ($FFFFE000).w,a1 move.w #$DF,d1 move.w ($FFFFEE00).w,d0 neg.w d0 swap d0 move.w ($FFFFEE08).w,d0 neg.w d0 loc_30A95E: ; ... move.l d0,(a1)+ dbf d1,loc_30A95E rts ; --------------------------------------------------------------------------- SwScrl_WFZ: ; ... move.w ($FFFFEEB4).w,d4 ext.l d4 asl.l #8,d4 moveq #2,d6 bsr.w sub_30B67A move.w ($FFFFEEB6).w,d5 ext.l d5 lsl.l #8,d5 moveq #6,d6 bsr.w sub_30B6AE move.w ($FFFFEE0C).w,($FFFFF618).w move.l ($FFFFEE08).w,d0 move.l d0,d1 lea ($FFFFA800).w,a2 move.l d0,(a2)+ move.l d1,(a2)+ add.l #$8000,(a2)+ add.l #$4000,(a2)+ add.l #$2000,(a2)+ lea (byte_30AA06).l,a3 cmp.w #$2700,($FFFFEE00).w bcc.s loc_30A9BC lea (byte_30AA52).l,a3 loc_30A9BC: ; ... lea ($FFFFA800).w,a2 lea ($FFFFE000).w,a1 move.w ($FFFFEE0C).w,d1 and.w #$7FF,d1 moveq #0,d0 moveq #0,d3 loc_30A9D0: ; ... move.b (a3)+,d0 addq.w #1,a3 sub.w d0,d1 bcc.s loc_30A9D0 neg.w d1 move.w #$DF,d2 move.w ($FFFFEE00).w,d0 neg.w d0 swap d0 move.b -1(a3),d3 move.w (a2,d3.w),d0 neg.w d0 loc_30A9F0: ; ... move.l d0,(a1)+ subq.w #1,d1 bne.s loc_30AA00 move.b (a3)+,d1 move.b (a3)+,d3 move.w (a2,d3.w),d0 neg.w d0 loc_30AA00: ; ... dbf d2,loc_30A9F0 rts ; --------------------------------------------------------------------------- byte_30AA06: dc.b -$40, 0,-$40, 0,-$80, 0, $20, 8, $30, $C; 0 ; ... dc.b $30, $10, $20, 8, $30, $C, $30, $10, $20, 8; 10 dc.b $30, $C, $30, $10, $20, 8, $30, $C, $30, $10; 20 dc.b $20, 8, $30, $C, $30, $10, $20, 8, $30, $C; 30 dc.b $30, $10, $20, 8, $30, $C, $30, $10,-$80, 4; 40 dc.b -$80, 4, $20, 8, $30, $C, $30, $10, $20, 8; 50 dc.b $30, $C, $30, $10, $20, 8, $30, $C, $30, $10; 60 dc.b -$40, 0,-$40, 0,-$80, 0; 70 byte_30AA52: dc.b -$40, 0,-$40, 0,-$80, 0, $20, 8, $30, $C; 0 ; ... dc.b $30, $10, $20, 8, $30, $C, $30, $10, $20, 8; 10 dc.b $30, $C, $30, $10, $20, 8, $30, $C, $30, $10; 20 dc.b $20, 8, $30, $C, $30, $10, $20, 8, $30, $C; 30 dc.b $30, $10, $20, 8, $30, $C, $30, $10, $20, 8; 40 dc.b $30, $C, $30, $10, $20, 8, $30, $C, $30, $10; 50 dc.b $20, 8, $30, $C, $30, $10, $20, 8, $30, $C; 60 dc.b $30, $10,-$40, 0,-$40, 0,-$80, 0; 70 ; --------------------------------------------------------------------------- SwScrl_HTZ: ; ... tst.b ($FFFFEEBC).w bne.w loc_30ABC6 move.w ($FFFFEE0C).w,($FFFFF618).w lea ($FFFFE000).w,a1 move.w ($FFFFEE00).w,d0 neg.w d0 move.w d0,d2 swap d0 move.w d2,d0 asr.w #3,d0 move.w #$7F,d1 loc_30AAC4: ; ... move.l d0,(a1)+ dbf d1,loc_30AAC4 move.l d0,d4 move.w ($FFFFA822).w,d0 addq.w #4,($FFFFA822).w sub.w d0,d2 move.w d2,d0 move.w d0,d1 asr.w #1,d0 asr.w #4,d1 sub.w d1,d0 ext.l d0 asl.l #8,d0 divs.w #$70,d0 ext.l d0 asl.l #8,d0 lea ($FFFFA800).w,a2 moveq #0,d3 move.w d1,d3 swap d3 add.l d0,d3 swap d3 move.w d3,(a2)+ swap d3 add.l d0,d3 swap d3 move.w d3,(a2)+ swap d3 add.l d0,d3 swap d3 move.w d3,(a2)+ move.w d3,(a2)+ swap d3 add.l d0,d3 add.l d0,d3 swap d3 moveq #3,d1 loc_30AB18: ; ... move.w d3,(a2)+ move.w d3,(a2)+ move.w d3,(a2)+ swap d3 add.l d0,d3 add.l d0,d3 add.l d0,d3 swap d3 dbf d1,loc_30AB18 add.l d0,d0 add.l d0,d0 move.w d3,d4 move.l d4,(a1)+ move.l d4,(a1)+ move.l d4,(a1)+ swap d3 add.l d0,d3 swap d3 move.w d3,d4 move.l d4,(a1)+ move.l d4,(a1)+ move.l d4,(a1)+ move.l d4,(a1)+ move.l d4,(a1)+ swap d3 add.l d0,d3 swap d3 move.w d3,d4 move.w #6,d1 loc_30AB56: ; ... move.l d4,(a1)+ dbf d1,loc_30AB56 swap d3 add.l d0,d3 add.l d0,d3 swap d3 move.w d3,d4 move.w #7,d1 loc_30AB6A: ; ... move.l d4,(a1)+ dbf d1,loc_30AB6A swap d3 add.l d0,d3 add.l d0,d3 swap d3 move.w d3,d4 move.w #9,d1 loc_30AB7E: ; ... move.l d4,(a1)+ dbf d1,loc_30AB7E swap d3 add.l d0,d3 add.l d0,d3 add.l d0,d3 swap d3 move.w d3,d4 move.w #$E,d1 loc_30AB94: ; ... move.l d4,(a1)+ dbf d1,loc_30AB94 swap d3 add.l d0,d3 add.l d0,d3 add.l d0,d3 swap d3 move.w #2,d2 loc_30ABA8: ; ... move.w d3,d4 move.w #$F,d1 loc_30ABAE: ; ... move.l d4,(a1)+ dbf d1,loc_30ABAE swap d3 add.l d0,d3 add.l d0,d3 add.l d0,d3 add.l d0,d3 swap d3 dbf d2,loc_30ABA8 rts ; --------------------------------------------------------------------------- loc_30ABC6: ; ... move.w ($FFFFEEB4).w,d4 ext.l d4 lsl.l #8,d4 moveq #2,d6 bsr.w sub_30B67A move.w ($FFFFEEB6).w,d5 ext.l d5 lsl.l #8,d5 moveq #0,d6 bsr.w sub_30B6AE move.w ($FFFFEE0C).w,($FFFFF618).w move.w ($FFFFEE04).w,($FFFFF616).w move.w ($FFFFEE0C).w,($FFFFF618).w moveq #0,d2 tst.b ($FFFFEEBD).w beq.s loc_30AC24 move.w ($FFFFFE04).w,d0 and.w #$3F,d0 lea (SwScrl_RippleData).l,a1 lea (a1,d0.w),a1 moveq #0,d0 move.b (a1)+,d0 add.w d0,($FFFFF616).w add.w d0,($FFFFF618).w add.w d0,($FFFFEEF4).w move.b (a1)+,d2 add.w d2,($FFFFEEF0).w loc_30AC24: ; ... lea ($FFFFE000).w,a1 move.w #$DF,d1 move.w ($FFFFEE00).w,d0 add.w d2,d0 neg.w d0 swap d0 move.w ($FFFFEE08).w,d0 add.w d2,d0 neg.w d0 loc_30AC3E: ; ... move.l d0,(a1)+ dbf d1,loc_30AC3E rts ; --------------------------------------------------------------------------- SwScrl_HPZ: ; ... move.w ($FFFFEEB0).w,d4 ext.l d4 asl.l #6,d4 moveq #2,d6 bsr.w sub_30B67A move.w ($FFFFEEB2).w,d5 ext.l d5 asl.l #7,d5 moveq #6,d6 bsr.w sub_30B6AE move.w ($FFFFEE0C).w,($FFFFF618).w lea ($FFFFA800).w,a1 move.w ($FFFFEE00).w,d2 neg.w d2 move.w d2,d0 asr.w #1,d0 move.w #7,d1 loc_30AC7A: ; ... move.w d0,(a1)+ dbf d1,loc_30AC7A move.w d2,d0 asr.w #3,d0 sub.w d2,d0 ext.l d0 asl.l #3,d0 divs.w #8,d0 ext.l d0 asl.l #4,d0 asl.l #8,d0 moveq #0,d3 move.w d2,d3 asr.w #1,d3 lea ($FFFFA860).w,a2 swap d3 add.l d0,d3 swap d3 move.w d3,(a1)+ move.w d3,(a1)+ move.w d3,(a1)+ move.w d3,-(a2) move.w d3,-(a2) move.w d3,-(a2) swap d3 add.l d0,d3 swap d3 move.w d3,(a1)+ move.w d3,(a1)+ move.w d3,-(a2) move.w d3,-(a2) swap d3 add.l d0,d3 swap d3 move.w d3,(a1)+ move.w d3,-(a2) swap d3 add.l d0,d3 swap d3 move.w d3,(a1)+ move.w d3,-(a2) move.w ($FFFFEE08).w,d0 neg.w d0 move.w #$19,d1 loc_30ACDC: ; ... move.w d0,(a1)+ dbf d1,loc_30ACDC add.w #$E,a1 move.w d2,d0 asr.w #1,d0 move.w #$17,d1 loc_30ACEE: ; ... move.w d0,(a1)+ dbf d1,loc_30ACEE lea ($FFFFA800).w,a2 move.w ($FFFFEE0C).w,d0 move.w d0,d2 and.w #$3F0,d0 lsr.w #3,d0 lea (a2,d0.w),a2 bra.w loc_30B414 ; --------------------------------------------------------------------------- SwScrl_OOZ: ; ... move.w ($FFFFEEB0).w,d0 ext.l d0 asl.l #5,d0 add.l d0,($FFFFEE08).w move.w ($FFFFEEB2).w,d0 ext.l d0 asl.l #5,d0 move.l ($FFFFEE0C).w,d3 add.l d3,d0 moveq #4,d6 bsr.w loc_30B6B6 move.w ($FFFFEE0C).w,($FFFFF618).w lea ($FFFFE380).w,a1 move.w ($FFFFEE00).w,d0 neg.w d0 swap d0 move.w ($FFFFEE08).w,d7 neg.w d7 move.w ($FFFFEE0C).w,d1 sub.w #$50,d1 bcc.s loc_30AD50 moveq #0,d1 loc_30AD50: ; ... sub.w #$B0,d1 bcs.s loc_30AD58 moveq #0,d1 loc_30AD58: ; ... move.w #$DF,d6 add.w d6,d1 move.w d7,d0 bsr.s sub_30ADC2 bsr.s sub_30ADB6 bsr.s sub_30ADBC bsr.s sub_30ADB0 move.w d7,d0 asr.w #4,d0 moveq #6,d1 bsr.s sub_30ADC2 move.b ($FFFFFE0F).w,d1 and.w #7,d1 bne.s loc_30AD7E subq.w #1,($FFFFA800).w loc_30AD7E: ; ... move.w ($FFFFA800).w,d1 and.w #$1F,d1 lea SwScrl_RippleData(pc),a2 lea (a2,d1.w),a2 moveq #$20,d1 loc_30AD90: ; ... move.b (a2)+,d0 ext.w d0 move.l d0,-(a1) subq.w #1,d6 bmi.s return_30ADAE dbf d1,loc_30AD90 bsr.s sub_30ADB6 bsr.s sub_30ADBC bsr.s sub_30ADB0 bsr.s sub_30ADBC bsr.s sub_30ADB6 move.w d7,d0 moveq #$47,d1 bsr.s sub_30ADC2 return_30ADAE: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_30ADB0: ; ... move.w d7,d0 asr.w #2,d0 bra.s loc_30ADC0 ; End of function sub_30ADB0 ; =============== S U B R O U T I N E ======================================= sub_30ADB6: ; ... move.w d7,d0 asr.w #3,d0 bra.s loc_30ADC0 ; End of function sub_30ADB6 ; =============== S U B R O U T I N E ======================================= sub_30ADBC: ; ... move.w d7,d0 asr.w #4,d0 loc_30ADC0: ; ... moveq #7,d1 ; End of function sub_30ADBC ; =============== S U B R O U T I N E ======================================= sub_30ADC2: ; ... move.l d0,-(a1) subq.w #1,d6 bmi.s loc_30ADCE dbf d1,sub_30ADC2 rts ; --------------------------------------------------------------------------- loc_30ADCE: ; ... addq.l #4,sp rts ; End of function sub_30ADC2 ; --------------------------------------------------------------------------- SwScrl_MCZ: ; ... move.w ($FFFFEE04).w,d0 move.l ($FFFFEE0C).w,d3 tst.b ($FFFFFE11).w bne.s loc_30ADEA divu.w #3,d0 sub.w #$140,d0 bra.s loc_30ADF2 ; --------------------------------------------------------------------------- loc_30ADEA: ; ... divu.w #6,d0 sub.w #$10,d0 loc_30ADF2: ; ... swap d0 moveq #6,d6 bsr.w loc_30B6B6 move.w ($FFFFEE0C).w,($FFFFF618).w moveq #0,d2 tst.b ($FFFFEEBD).w beq.s loc_30AE30 move.w ($FFFFFE04).w,d0 and.w #$3F,d0 lea (SwScrl_RippleData).l,a1 lea (a1,d0.w),a1 moveq #0,d0 move.b (a1)+,d0 add.w d0,($FFFFF616).w add.w d0,($FFFFF618).w add.w d0,($FFFFEEF4).w move.b (a1)+,d2 add.w d2,($FFFFEEF0).w loc_30AE30: ; ... lea ($FFFFA800).w,a2 lea $1E(a2),a3 move.w ($FFFFEE00).w,d0 ext.l d0 asl.l #4,d0 divs.w #$A,d0 ext.l d0 asl.l #4,d0 asl.l #8,d0 move.l d0,d1 swap d1 move.w d1,(a3)+ move.w d1,$E(a2) swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ move.w d1,$C(a2) swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ move.w d1,$A(a2) swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ move.w d1,8(a2) swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ move.w d1,6(a2) move.w d1,$10(a2) move.w d1,$1C(a2) swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ move.w d1,4(a2) move.w d1,$12(a2) move.w d1,$1A(a2) swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ move.w d1,2(a2) move.w d1,$14(a2) move.w d1,$18(a2) swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ move.w d1,(a2) move.w d1,$16(a2) lea (byte_30AF0C).l,a3 lea ($FFFFA800).w,a2 lea ($FFFFE000).w,a1 move.w ($FFFFEE0C).w,d1 moveq #0,d0 loc_30AEDE: ; ... move.b (a3)+,d0 addq.w #2,a2 sub.w d0,d1 bcc.s loc_30AEDE neg.w d1 subq.w #2,a2 move.w #$DF,d2 move.w ($FFFFEE00).w,d0 neg.w d0 swap d0 move.w (a2)+,d0 neg.w d0 loc_30AEFA: ; ... move.l d0,(a1)+ subq.w #1,d1 bne.s loc_30AF06 move.b (a3)+,d1 move.w (a2)+,d0 neg.w d0 loc_30AF06: ; ... dbf d2,loc_30AEFA rts ; --------------------------------------------------------------------------- byte_30AF0C: dc.b $25, $17, $12, 7, 7, 2, 2, $30, $D, $13; 0 ; ... dc.b $20, $40, $20, $13, $D, $30, 2, 2, 7, 7; 10 dc.b $20, $12, $17, $25 ; 20 ; --------------------------------------------------------------------------- SwScrl_CNZ: ; ... move.w ($FFFFEE04).w,d0 lsr.w #6,d0 move.w d0,($FFFFEE0C).w move.w ($FFFFEE0C).w,($FFFFF618).w move.w ($FFFFEE00).w,d2 bsr.w sub_30AFB8 lea (byte_30AFAE).l,a3 lea ($FFFFA800).w,a2 lea ($FFFFE000).w,a1 move.w ($FFFFEE0C).w,d1 moveq #0,d0 loc_30AF50: ; ... move.b (a3)+,d0 addq.w #2,a2 sub.w d0,d1 bcc.s loc_30AF50 neg.w d1 subq.w #2,a2 move.w #$DF,d2 move.w ($FFFFEE00).w,d0 neg.w d0 swap d0 move.w (a2)+,d0 neg.w d0 loc_30AF6C: ; ... move.l d0,(a1)+ subq.w #1,d1 bne.s loc_30AF7A loc_30AF72: ; ... move.w (a2)+,d0 neg.w d0 move.b (a3)+,d1 beq.s loc_30AF80 loc_30AF7A: ; ... dbf d2,loc_30AF6C rts ; --------------------------------------------------------------------------- loc_30AF80: ; ... move.w #$F,d1 move.w d0,d3 move.b ($FFFFFE0F).w,d0 lsr.w #3,d0 neg.w d0 and.w #$1F,d0 lea (SwScrl_RippleData).l,a4 lea (a4,d0.w),a4 loc_30AF9C: ; ... move.b (a4)+,d0 ext.w d0 add.w d3,d0 move.l d0,(a1)+ dbf d1,loc_30AF9C sub.w #$10,d2 bra.s loc_30AF72 ; --------------------------------------------------------------------------- byte_30AFAE: dcb.b 8,$10 ; 0 ; ... dc.b 0,$F0 ; 8 ; =============== S U B R O U T I N E ======================================= sub_30AFB8: ; ... lea ($FFFFA800).w,a1 move.w d2,d0 asr.w #3,d0 sub.w d2,d0 ext.l d0 asl.l #5,d0 asl.l #8,d0 moveq #0,d3 move.w d2,d3 move.w #6,d1 loc_30AFD0: ; ... move.w d3,(a1)+ swap d3 add.l d0,d3 swap d3 dbf d1,loc_30AFD0 move.w d2,d0 asr.w #3,d0 move.w d0,4(a1) asr.w #1,d0 move.w d0,(a1)+ move.w d0,(a1)+ rts ; End of function sub_30AFB8 ; --------------------------------------------------------------------------- SwScrl_CPZ: ; ... move.w ($FFFFEEB0).w,d4 ext.l d4 asl.l #5,d4 move.w ($FFFFEEB2).w,d5 ext.l d5 asl.l #6,d5 bsr.w sub_30B610 move.w ($FFFFEEB0).w,d4 ext.l d4 asl.l #7,d4 moveq #4,d6 bsr.w sub_30B73E move.w ($FFFFEE0C).w,d0 move.w d0,($FFFFEE14).w move.w d0,($FFFFF618).w move.b ($FFFFEE52).w,d0 or.b ($FFFFEE54).w,d0 move.b d0,($FFFFEE56).w clr.b ($FFFFEE52).w clr.b ($FFFFEE54).w move.b ($FFFFFE0F).w,d1 and.w #7,d1 bne.s loc_30B03C subq.w #1,($FFFFA800).w loc_30B03C: ; ... lea (byte_30BACB).l,a0 move.w ($FFFFEE0C).w,d0 move.w d0,d2 and.w #$3F0,d0 lsr.w #4,d0 lea (a0,d0.w),a0 move.w d0,d4 lea ($FFFFE000).w,a1 move.w #$E,d1 move.w ($FFFFEE00).w,d0 neg.w d0 swap d0 and.w #$F,d2 move.w ($FFFFEE08).w,d0 cmp.b #$12,d4 beq.s loc_30B0BA bcs.s loc_30B078 move.w ($FFFFEE10).w,d0 loc_30B078: ; ... neg.w d0 add.w d2,d2 jmp loc_30B092(pc,d2.w) ; --------------------------------------------------------------------------- loc_30B080: ; ... move.w ($FFFFEE08).w,d0 cmp.b #$12,d4 beq.s loc_30B0C4 bcs.s loc_30B090 move.w ($FFFFEE10).w,d0 loc_30B090: ; ... neg.w d0 loc_30B092: ; ... move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ addq.b #1,d4 dbf d1,loc_30B080 rts ; --------------------------------------------------------------------------- loc_30B0BA: ; ... move.w #$F,d0 sub.w d2,d0 move.w d0,d2 bra.s loc_30B0C8 ; --------------------------------------------------------------------------- loc_30B0C4: ; ... move.w #$F,d2 loc_30B0C8: ; ... move.w ($FFFFEE08).w,d3 neg.w d3 move.w ($FFFFA800).w,d0 and.w #$1F,d0 lea (SwScrl_RippleData).l,a2 lea (a2,d0.w),a2 loc_30B0E0: ; ... move.b (a2)+,d0 ext.w d0 add.w d3,d0 move.l d0,(a1)+ dbf d2,loc_30B0E0 addq.b #1,d4 dbf d1,loc_30B080 rts ; --------------------------------------------------------------------------- SwScrl_DEZ: ; ... move.w ($FFFFEEB0).w,d4 ext.l d4 asl.l #8,d4 move.w ($FFFFEEB2).w,d5 ext.l d5 asl.l #8,d5 bsr.w sub_30B610 move.w ($FFFFEE0C).w,($FFFFF618).w move.w ($FFFFEE00).w,d4 lea ($FFFFA800).w,a2 move.w d4,(a2)+ addq.w #3,(a2)+ addq.w #2,(a2)+ addq.w #4,(a2)+ addq.w #1,(a2)+ addq.w #2,(a2)+ addq.w #4,(a2)+ addq.w #3,(a2)+ addq.w #4,(a2)+ addq.w #2,(a2)+ addq.w #6,(a2)+ addq.w #3,(a2)+ addq.w #4,(a2)+ addq.w #1,(a2)+ addq.w #2,(a2)+ addq.w #4,(a2)+ addq.w #3,(a2)+ addq.w #2,(a2)+ addq.w #3,(a2)+ addq.w #4,(a2)+ addq.w #1,(a2)+ addq.w #3,(a2)+ addq.w #4,(a2)+ addq.w #2,(a2)+ addq.w #1,(a2) move.w (a2)+,d0 moveq #0,d1 move.w d0,d1 lsr.w #1,d0 move.w d0,(a2)+ addq.w #3,(a2)+ addq.w #2,(a2)+ addq.w #4,(a2)+ swap d1 move.l d1,d0 lsr.l #3,d1 sub.l d1,d0 swap d0 move.w d0,4(a2) swap d0 sub.l d1,d0 swap d0 move.w d0,2(a2) swap d0 sub.l d1,d0 swap d0 move.w d0,(a2)+ addq.w #4,a2 addq.w #1,(a2)+ move.w d4,(a2)+ move.w d4,(a2)+ move.w d4,(a2)+ lea (byte_30B1FE).l,a3 lea ($FFFFA800).w,a2 lea ($FFFFE000).w,a1 move.w ($FFFFEE0C).w,d1 moveq #0,d0 loc_30B196: ; ... move.b (a3)+,d0 addq.w #2,a2 sub.w d0,d1 bcc.s loc_30B196 neg.w d1 subq.w #2,a2 move.w #$DF,d2 move.w ($FFFFEE00).w,d0 neg.w d0 swap d0 move.w (a2)+,d0 neg.w d0 loc_30B1B2: ; ... move.l d0,(a1)+ subq.w #1,d1 bne.s loc_30B1BE move.b (a3)+,d1 move.w (a2)+,d0 neg.w d0 loc_30B1BE: ; ... dbf d2,loc_30B1B2 moveq #0,d2 tst.b ($FFFFEEBD).w beq.s return_30B1FC subq.w #1,($FFFFF660).w bpl.s loc_30B1D4 clr.b ($FFFFEEBD).w loc_30B1D4: ; ... move.w ($FFFFFE04).w,d0 and.w #$3F,d0 lea (SwScrl_RippleData).l,a1 lea (a1,d0.w),a1 moveq #0,d0 move.b (a1)+,d0 add.w d0,($FFFFF616).w add.w d0,($FFFFF618).w add.w d0,($FFFFEEF4).w move.b (a1)+,d2 add.w d2,($FFFFEEF0).w return_30B1FC: ; ... rts ; --------------------------------------------------------------------------- byte_30B1FE: dc.b $80 ; 0 ; ... dcb.b $1C, 8 ; 0 dc.b 3, 5, 8,$10 ; 0 dcb.b 3,$80 ; 0 ; --------------------------------------------------------------------------- SwScrl_ARZ: ; ... move.w ($FFFFEEB0).w,d4 ext.l d4 muls.w #$119,d4 moveq #2,d6 bsr.w sub_30B6E2 move.w ($FFFFEEB2).w,d5 ext.l d5 asl.l #7,d5 tst.b ($FFFFFE11).w bne.s loc_30B242 asl.l #1,d5 loc_30B242: ; ... moveq #6,d6 bsr.w sub_30B6AE move.w ($FFFFEE0C).w,($FFFFF618).w moveq #0,d2 tst.b ($FFFFEEBD).w beq.s loc_30B27E move.w ($FFFFFE04).w,d0 and.w #$3F,d0 lea (SwScrl_RippleData).l,a1 lea (a1,d0.w),a1 moveq #0,d0 move.b (a1)+,d0 add.w d0,($FFFFF616).w add.w d0,($FFFFF618).w add.w d0,($FFFFEEF4).w move.b (a1)+,d2 add.w d2,($FFFFEEF0).w loc_30B27E: ; ... lea ($FFFFA800).w,a2 lea 6(a2),a3 move.w ($FFFFEE00).w,d0 ext.l d0 asl.l #4,d0 divs.w #$A,d0 ext.l d0 asl.l #4,d0 asl.l #8,d0 move.l d0,d1 swap d1 move.w d1,(a3)+ swap d1 add.l d1,d1 add.l d0,d1 swap d1 move.w d1,(a3)+ swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ swap d1 add.l d0,d1 swap d1 move.w d1,(a3)+ move.w d1,(a2) move.w d1,4(a2) move.w ($FFFFEE08).w,d0 move.w d0,2(a2) move.w d0,$16(a2) move.w d0,0(a2) move.w d0,4(a2) move.w d0,$18(a2) move.w d0,$1A(a2) move.w d0,$1C(a2) move.w d0,$1E(a2) lea (byte_30B344).l,a3 lea ($FFFFA800).w,a2 lea ($FFFFE000).w,a1 move.w ($FFFFEE0C).w,d1 moveq #0,d0 loc_30B316: ; ... move.b (a3)+,d0 addq.w #2,a2 sub.w d0,d1 bcc.s loc_30B316 neg.w d1 subq.w #2,a2 move.w #$DF,d2 move.w ($FFFFEE00).w,d0 neg.w d0 swap d0 move.w (a2)+,d0 neg.w d0 loc_30B332: ; ... move.l d0,(a1)+ subq.w #1,d1 bne.s loc_30B33E move.b (a3)+,d1 move.w (a2)+,d0 neg.w d0 loc_30B33E: ; ... dbf d2,loc_30B332 rts ; --------------------------------------------------------------------------- byte_30B344: dc.b $B0,$70,$30,$60,$15, $C, $E, 6, $C,$1F,$30,$C0,$F0; 0 ; ... dcb.b 3,$F0 ; 0 ; --------------------------------------------------------------------------- SwScrl_SCZ: ; ... tst.w ($FFFFFE08).w bne.w SwScrl_Minimal lea ($FFFFEE00).w,a1 lea ($FFFFEE50).w,a3 lea ($FFFFEEB0).w,a4 move.w ($FFFFF736).w,d0 move.w (a1),d4 add.w (a1),d0 move.w d0,d1 sub.w (a1),d1 asl.w #8,d1 move.w d0,(a1) move.w d1,(a4) lea ($FFFFEE40).w,a2 bsr.w SwScrl_HPZ_Continued lea ($FFFFEE04).w,a1 lea ($FFFFEEB2).w,a4 move.w ($FFFFF738).w,d0 move.w (a1),d4 add.w (a1),d0 move.w d0,d1 sub.w (a1),d1 asl.w #8,d1 move.w d0,(a1) move.w d1,(a4) lea ($FFFFEE41).w,a2 bsr.w sub_30B5EE move.w ($FFFFEEB0).w,d4 beq.s loc_30B3AE move.w #$100,d4 loc_30B3AE: ; ... ext.l d4 asl.l #7,d4 moveq #0,d5 bsr.w sub_30B610 move.w ($FFFFEE0C).w,($FFFFF618).w lea ($FFFFE000).w,a1 move.w #$DF,d1 move.w ($FFFFEE00).w,d0 neg.w d0 swap d0 move.w ($FFFFEE08).w,d0 neg.w d0 loc_30B3D4: ; ... move.l d0,(a1)+ dbf d1,loc_30B3D4 rts ; --------------------------------------------------------------------------- SwScrl_Minimal: ; ... move.w ($FFFFEEB0).w,d4 ext.l d4 asl.l #5,d4 move.w ($FFFFEEB2).w,d5 ext.l d5 asl.l #6,d5 bsr.w sub_30B610 move.w ($FFFFEE0C).w,($FFFFF618).w lea ($FFFFE000).w,a1 move.w #$DF,d1 move.w ($FFFFEE00).w,d0 neg.w d0 swap d0 move.w ($FFFFEE08).w,d0 neg.w d0 loc_30B40C: ; ... move.l d0,(a1)+ dbf d1,loc_30B40C rts ; --------------------------------------------------------------------------- loc_30B414: ; ... lea ($FFFFE000).w,a1 move.w #$E,d1 move.w ($FFFFEE00).w,d0 neg.w d0 swap d0 and.w #$F,d2 add.w d2,d2 move.w (a2)+,d0 jmp loc_30B432(pc,d2.w) ; --------------------------------------------------------------------------- loc_30B430: ; ... move.w (a2)+,d0 loc_30B432: ; ... move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ move.l d0,(a1)+ dbf d1,loc_30B430 rts ; =============== S U B R O U T I N E ======================================= SwScrl_HPZ_Continued: ; ... move.w (a1),d0 and.w #$10,d0 move.b (a2),d1 eor.b d1,d0 bne.s return_30B478 eor.b #$10,(a2) move.w (a1),d0 sub.w d4,d0 bpl.s loc_30B474 bset #2,(a3) rts ; --------------------------------------------------------------------------- loc_30B474: ; ... bset #3,(a3) return_30B478: ; ... rts ; End of function SwScrl_HPZ_Continued ; =============== S U B R O U T I N E ======================================= ScrollHorizontal: ; ... move.w (a1),d4 tst.b ($FFFFF623).w bne.s return_30B4B8 move.w (a5),d1 beq.s ScrollHorizontal2 loc_30B486: sub.w #$100,d1 move.w d1,(a5) moveq #0,d1 move.b (a5),d1 lsl.b #2,d1 addq.b #4,d1 move.w 2(a5),d0 sub.b d1,d0 move.w (a6,d0.w),d0 and.w #$3FFF,d0 bra.s loc_30B4A8 ; --------------------------------------------------------------------------- ScrollHorizontal2: ; ... move.w 8(a0),d0 loc_30B4A8: ; ... sub.w (a1),d0 sub.w #$90,d0 blt.s loc_30B4BA sub.w #$10,d0 bge.s loc_30B4CE clr.w (a4) return_30B4B8: ; ... rts ; --------------------------------------------------------------------------- loc_30B4BA: ; ... cmp.w #$FFF0,d0 bgt.s loc_30B4C4 move.w #$FFF0,d0 loc_30B4C4: ; ... add.w (a1),d0 cmp.w (a2),d0 bgt.s loc_30B4E4 move.w (a2),d0 bra.s loc_30B4E4 ; --------------------------------------------------------------------------- loc_30B4CE: ; ... cmp.w #$10,d0 bcs.s loc_30B4D8 move.w #$10,d0 loc_30B4D8: ; ... add.w (a1),d0 cmp.w 2(a2),d0 blt.s loc_30B4E4 move.w 2(a2),d0 loc_30B4E4: ; ... move.w d0,d1 sub.w (a1),d1 asl.w #8,d1 move.w d0,(a1) move.w d1,(a4) rts ; End of function ScrollHorizontal ; =============== S U B R O U T I N E ======================================= sub_30B4F0: ; ... moveq #0,d1 move.w $C(a0),d0 sub.w (a1),d0 cmp.w #$FF00,($FFFFEECC).w bne.s loc_30B504 and.w #$7FF,d0 loc_30B504: ; ... btst #2,$22(a0) beq.s loc_30B50E subq.w #5,d0 loc_30B50E: ; ... btst #1,$22(a0) beq.s loc_30B52C add.w #$20,d0 sub.w d3,d0 bcs.s loc_30B572 sub.w #$40,d0 bcc.s loc_30B572 tst.b ($FFFFEEDE).w bne.s loc_30B584 bra.s loc_30B536 ; --------------------------------------------------------------------------- loc_30B52C: ; ... sub.w d3,d0 bne.s loc_30B53A tst.b ($FFFFEEDE).w bne.s loc_30B584 loc_30B536: ; ... clr.w (a4) rts ; --------------------------------------------------------------------------- loc_30B53A: ; ... cmp.w #$60,d3 bne.s loc_30B560 move.w $14(a0),d1 bpl.s loc_30B548 neg.w d1 loc_30B548: ; ... cmp.w #$800,d1 bcc.s loc_30B572 move.w #$600,d1 cmp.w #6,d0 bgt.s loc_30B5C0 cmp.w #$FFFA,d0 blt.s loc_30B59A bra.s loc_30B58A ; --------------------------------------------------------------------------- loc_30B560: ; ... move.w #$200,d1 cmp.w #2,d0 bgt.s loc_30B5C0 cmp.w #$FFFE,d0 blt.s loc_30B59A bra.s loc_30B58A ; --------------------------------------------------------------------------- loc_30B572: ; ... move.w #$1000,d1 cmp.w #$10,d0 bgt.s loc_30B5C0 cmp.w #$FFF0,d0 blt.s loc_30B59A bra.s loc_30B58A ; --------------------------------------------------------------------------- loc_30B584: ; ... moveq #0,d0 move.b d0,($FFFFEEDE).w loc_30B58A: ; ... moveq #0,d1 move.w d0,d1 add.w (a1),d1 tst.w d0 bpl.w loc_30B5C8 bra.w loc_30B5A4 ; --------------------------------------------------------------------------- loc_30B59A: ; ... neg.w d1 ext.l d1 asl.l #8,d1 add.l (a1),d1 swap d1 loc_30B5A4: ; ... cmp.w 4(a2),d1 bgt.s loc_30B5DE cmp.w #$FF00,d1 bgt.s loc_30B5BA and.w #$7FF,d1 and.w #$7FF,(a1) bra.s loc_30B5DE ; --------------------------------------------------------------------------- loc_30B5BA: ; ... move.w 4(a2),d1 bra.s loc_30B5DE ; --------------------------------------------------------------------------- loc_30B5C0: ; ... ext.l d1 asl.l #8,d1 add.l (a1),d1 swap d1 loc_30B5C8: ; ... cmp.w 6(a2),d1 blt.s loc_30B5DE sub.w #$800,d1 bcs.s loc_30B5DA sub.w #$800,(a1) bra.s loc_30B5DE ; --------------------------------------------------------------------------- loc_30B5DA: ; ... move.w 6(a2),d1 loc_30B5DE: ; ... move.w (a1),d4 swap d1 move.l d1,d3 sub.l (a1),d3 ror.l #8,d3 move.w d3,(a4) move.l d1,(a1) rts ; End of function sub_30B4F0 ; =============== S U B R O U T I N E ======================================= sub_30B5EE: ; ... move.w (a1),d0 and.w #$10,d0 move.b (a2),d1 eor.b d1,d0 bne.s return_30B60E eor.b #$10,(a2) move.w (a1),d0 sub.w d4,d0 bpl.s loc_30B60A bset #0,(a3) rts ; --------------------------------------------------------------------------- loc_30B60A: ; ... bset #1,(a3) return_30B60E: ; ... rts ; End of function sub_30B5EE ; =============== S U B R O U T I N E ======================================= sub_30B610: ; ... move.l ($FFFFEE08).w,d2 move.l d2,d0 add.l d4,d0 move.l d0,($FFFFEE08).w move.l d0,d1 swap d1 and.w #$10,d1 move.b ($FFFFEE42).w,d3 eor.b d3,d1 bne.s loc_30B644 eor.b #$10,($FFFFEE42).w sub.l d2,d0 bpl.s loc_30B63E bset #2,($FFFFEE52).w bra.s loc_30B644 ; --------------------------------------------------------------------------- loc_30B63E: ; ... bset #3,($FFFFEE52).w loc_30B644: ; ... move.l ($FFFFEE0C).w,d3 move.l d3,d0 add.l d5,d0 move.l d0,($FFFFEE0C).w move.l d0,d1 swap d1 and.w #$10,d1 move.b ($FFFFEE43).w,d2 eor.b d2,d1 bne.s return_30B678 eor.b #$10,($FFFFEE43).w sub.l d3,d0 bpl.s loc_30B672 bset #0,($FFFFEE52).w rts ; --------------------------------------------------------------------------- loc_30B672: ; ... bset #1,($FFFFEE52).w return_30B678: ; ... rts ; End of function sub_30B610 ; =============== S U B R O U T I N E ======================================= sub_30B67A: ; ... move.l ($FFFFEE08).w,d2 move.l d2,d0 add.l d4,d0 move.l d0,($FFFFEE08).w move.l d0,d1 swap d1 and.w #$10,d1 move.b ($FFFFEE42).w,d3 eor.b d3,d1 bne.s return_30B6AC eor.b #$10,($FFFFEE42).w sub.l d2,d0 bpl.s loc_30B6A6 bset d6,($FFFFEE52).w bra.s return_30B6AC ; --------------------------------------------------------------------------- loc_30B6A6: ; ... addq.b #1,d6 bset d6,($FFFFEE52).w return_30B6AC: ; ... rts ; End of function sub_30B67A ; =============== S U B R O U T I N E ======================================= sub_30B6AE: ; ... move.l ($FFFFEE0C).w,d3 move.l d3,d0 add.l d5,d0 loc_30B6B6: ; ... move.l d0,($FFFFEE0C).w move.l d0,d1 swap d1 and.w #$10,d1 move.b ($FFFFEE43).w,d2 eor.b d2,d1 bne.s return_30B6E0 eor.b #$10,($FFFFEE43).w sub.l d3,d0 bpl.s loc_30B6DA bset d6,($FFFFEE52).w rts ; --------------------------------------------------------------------------- loc_30B6DA: ; ... addq.b #1,d6 bset d6,($FFFFEE52).w return_30B6E0: ; ... rts ; End of function sub_30B6AE ; =============== S U B R O U T I N E ======================================= sub_30B6E2: ; ... move.l ($FFFFF672).w,d0 add.l d4,d0 move.l d0,($FFFFF672).w lea ($FFFFEE08).w,a1 move.w (a1),d2 move.w ($FFFFF672).w,d0 sub.w d2,d0 bcs.s loc_30B6FE bhi.s loc_30B70A rts ; --------------------------------------------------------------------------- loc_30B6FE: ; ... cmp.w #$FFF0,d0 bgt.s loc_30B714 move.w #$FFF0,d0 bra.s loc_30B714 ; --------------------------------------------------------------------------- loc_30B70A: ; ... cmp.w #$10,d0 bcs.s loc_30B714 move.w #$10,d0 loc_30B714: ; ... add.w (a1),d0 move.w d0,(a1) move.w d0,d1 and.w #$10,d1 move.b ($FFFFEE42).w,d3 eor.b d3,d1 bne.s return_30B73C eor.b #$10,($FFFFEE42).w sub.w d2,d0 bpl.s loc_30B736 bset d6,($FFFFEE52).w bra.s return_30B73C ; --------------------------------------------------------------------------- loc_30B736: ; ... addq.b #1,d6 bset d6,($FFFFEE52).w return_30B73C: ; ... rts ; End of function sub_30B6E2 ; =============== S U B R O U T I N E ======================================= sub_30B73E: ; ... move.l ($FFFFEE10).w,d2 move.l d2,d0 add.l d4,d0 move.l d0,($FFFFEE10).w move.l d0,d1 swap d1 and.w #$10,d1 move.b ($FFFFEE44).w,d3 eor.b d3,d1 bne.s return_30B770 eor.b #$10,($FFFFEE44).w sub.l d2,d0 bpl.s loc_30B76A bset d6,($FFFFEE54).w bra.s return_30B770 ; --------------------------------------------------------------------------- loc_30B76A: ; ... addq.b #1,d6 bset d6,($FFFFEE54).w return_30B770: ; ... rts ; End of function sub_30B73E ; --------------------------------------------------------------------------- move.l ($FFFFEE18).w,d2 move.l d2,d0 add.l d4,d0 move.l d0,($FFFFEE18).w move.l d0,d1 swap d1 and.w #$10,d1 move.b ($FFFFEE46).w,d3 eor.b d3,d1 bne.s return_30B7A4 eor.b #$10,($FFFFEE46).w sub.l d2,d0 bpl.s loc_30B79E bset d6,($FFFFEE56).w bra.s return_30B7A4 ; --------------------------------------------------------------------------- loc_30B79E: ; ... addq.b #1,d6 bset d6,($FFFFEE56).w return_30B7A4: ; ... rts ; --------------------------------------------------------------------------- lea ($C00004).l,a5 lea ($C00000).l,a6 lea ($FFFFEE52).w,a2 lea ($FFFFEE08).w,a3 lea ($FFFF8080).w,a4 move.w #$6000,d2 bsr.w sub_30B8B8 lea ($FFFFEE54).w,a2 lea ($FFFFEE10).w,a3 bra.w sub_30B988 ; =============== S U B R O U T I N E ======================================= LoadTilesAsYouMove: ; ... lea ($C00004).l,a5 lea ($C00000).l,a6 lea ($FFFFEEA2).w,a2 lea ($FFFFEE68).w,a3 lea ($FFFF8080).w,a4 move.w #$6000,d2 bsr.w sub_30B8B8 lea ($FFFFEEA4).w,a2 lea ($FFFFEE70).w,a3 bsr.w sub_30B988 lea ($FFFFEEA6).w,a2 lea ($FFFFEE78).w,a3 bsr.w sub_30BA7C lea ($FFFFEEA0).w,a2 lea ($FFFFEE60).w,a3 lea ($FFFF8000).w,a4 move.w #$4000,d2 tst.b ($FFFFF72C).w beq.s Draw_FG ; Comment this line out to disable 'blast processing'. move.b #0,($FFFFF72C).w moveq #-$10,d4 moveq #$F,d6 Draw_All: ; ... movem.l d4-d6,-(sp) moveq #-$10,d5 move.w d4,d1 bsr.w Calc_VRAM_Pos move.w d1,d4 moveq #-$10,d5 bsr.w DrawTiles_Vertical1 movem.l (sp)+,d4-d6 add.w #$10,d4 dbf d6,Draw_All move.b #0,($FFFFEEA0).w rts ; --------------------------------------------------------------------------- Draw_FG: ; ... tst.b (a2) beq.s return_30B8B6 bclr #0,(a2) beq.s loc_30B86C moveq #-$10,d4 moveq #-$10,d5 bsr.w Calc_VRAM_Pos moveq #-$10,d4 moveq #-$10,d5 bsr.w DrawTiles_Vertical1 loc_30B86C: ; ... bclr #1,(a2) beq.s loc_30B886 move.w #$E0,d4 moveq #-$10,d5 bsr.w Calc_VRAM_Pos move.w #$E0,d4 moveq #-$10,d5 bsr.w DrawTiles_Vertical1 loc_30B886: ; ... bclr #2,(a2) beq.s loc_30B89C moveq #-$10,d4 moveq #-$10,d5 bsr.w Calc_VRAM_Pos moveq #-$10,d4 moveq #-$10,d5 bsr.w sub_30BBC0 loc_30B89C: ; ... bclr #3,(a2) beq.s return_30B8B6 moveq #-$10,d4 move.w #$140,d5 bsr.w Calc_VRAM_Pos moveq #-$10,d4 move.w #$140,d5 bsr.w sub_30BBC0 return_30B8B6: ; ... rts ; End of function LoadTilesAsYouMove ; =============== S U B R O U T I N E ======================================= sub_30B8B8: ; ... tst.b (a2) beq.w return_30B986 bclr #0,(a2) beq.s loc_30B8D4 moveq #-$10,d4 moveq #-$10,d5 bsr.w Calc_VRAM_Pos moveq #-$10,d4 moveq #-$10,d5 bsr.w DrawTiles_Vertical1 loc_30B8D4: ; ... bclr #1,(a2) beq.s loc_30B8EE move.w #$E0,d4 moveq #-$10,d5 bsr.w Calc_VRAM_Pos move.w #$E0,d4 moveq #-$10,d5 bsr.w DrawTiles_Vertical1 loc_30B8EE: ; ... bclr #2,(a2) beq.s loc_30B904 moveq #-$10,d4 moveq #-$10,d5 bsr.w Calc_VRAM_Pos moveq #-$10,d4 moveq #-$10,d5 bsr.w sub_30BBC0 loc_30B904: ; ... bclr #3,(a2) beq.s loc_30B91E moveq #-$10,d4 move.w #$140,d5 bsr.w Calc_VRAM_Pos moveq #-$10,d4 move.w #$140,d5 bsr.w sub_30BBC0 loc_30B91E: ; ... bclr #4,(a2) beq.s loc_30B936 moveq #-$10,d4 moveq #0,d5 bsr.w loc_30BE32 moveq #-$10,d4 moveq #0,d5 moveq #$1F,d6 bsr.w DrawTiles_Vertical2 loc_30B936: ; ... bclr #5,(a2) beq.s loc_30B952 move.w #$E0,d4 moveq #0,d5 bsr.w loc_30BE32 move.w #$E0,d4 moveq #0,d5 moveq #$1F,d6 bsr.w DrawTiles_Vertical2 loc_30B952: ; ... bclr #6,(a2) beq.s loc_30B96A moveq #-$10,d4 moveq #-$10,d5 bsr.w Calc_VRAM_Pos moveq #-$10,d4 moveq #-$10,d5 moveq #$1F,d6 bsr.w DrawTiles_Vertical loc_30B96A: ; ... bclr #7,(a2) beq.s return_30B986 move.w #$E0,d4 moveq #-$10,d5 bsr.w Calc_VRAM_Pos move.w #$E0,d4 moveq #-$10,d5 moveq #$1F,d6 bsr.w DrawTiles_Vertical return_30B986: ; ... rts ; End of function sub_30B8B8 ; =============== S U B R O U T I N E ======================================= sub_30B988: ; ... tst.b (a2) beq.w return_30B9CA bclr #0,(a2) beq.s loc_30B9AA move.w #$70,d4 moveq #-$10,d5 bsr.w Calc_VRAM_Pos move.w #$70,d4 moveq #-$10,d5 moveq #2,d6 bsr.w sub_30BBC2 loc_30B9AA: ; ... bclr #1,(a2) beq.s return_30B9CA move.w #$70,d4 move.w #$140,d5 bsr.w Calc_VRAM_Pos move.w #$70,d4 move.w #$140,d5 moveq #2,d6 bsr.w sub_30BBC2 return_30B9CA: ; ... rts ; End of function sub_30B988 ; --------------------------------------------------------------------------- unk_30B9CC: dc.b 0 ; ... byte_30B9CD: dcb.b 4, 0 ; 0 ; ... dcb.b $A, 6 ; 4 dcb.b 7, 4 ; 14 dcb.b $B, 2 ; 21 dc.b 0 ; 32 ; --------------------------------------------------------------------------- moveq #-$10,d4 bclr #0,(a2) bne.s loc_30BA00 bclr #1,(a2) beq.s loc_30BA4A move.w #$E0,d4 loc_30BA00: ; ... lea (byte_30B9CD).l,a0 move.w ($FFFFEE0C).w,d0 add.w d4,d0 and.w #$1F0,d0 lsr.w #4,d0 move.b (a0,d0.w),d0 lea (word_30BB7C).l,a3 move.w (a3,d0.w),a3 beq.s loc_30BA36 moveq #-$10,d5 movem.l d4-d5,-(sp) bsr.w Calc_VRAM_Pos movem.l (sp)+,d4-d5 bsr.w DrawTiles_Vertical1 bra.s loc_30BA4A ; --------------------------------------------------------------------------- loc_30BA36: ; ... moveq #0,d5 movem.l d4-d5,-(sp) bsr.w loc_30BE32 movem.l (sp)+,d4-d5 moveq #$1F,d6 bsr.w DrawTiles_Vertical2 loc_30BA4A: ; ... tst.b (a2) bne.s loc_30BA50 rts ; --------------------------------------------------------------------------- loc_30BA50: ; ... moveq #-$10,d4 moveq #-$10,d5 move.b (a2),d0 and.b #$A8,d0 beq.s loc_30BA64 lsr.b #1,d0 move.b d0,(a2) move.w #$140,d5 loc_30BA64: ; ... lea (unk_30B9CC).l,a0 move.w ($FFFFEE0C).w,d0 and.w #$1F0,d0 lsr.w #4,d0 lea (a0,d0.w),a0 bra.w loc_30BB84 ; =============== S U B R O U T I N E ======================================= sub_30BA7C: ; ... tst.b (a2) beq.w return_30BAC8 cmp.b #$D,($FFFFFE10).w beq.w loc_30BB0C bclr #0,(a2) beq.s loc_30BAA8 move.w #$40,d4 moveq #$FFFFFFF0,d5 bsr.w Calc_VRAM_Pos move.w #$40,d4 moveq #$FFFFFFF0,d5 moveq #2,d6 bsr.w sub_30BBC2 loc_30BAA8: ; ... bclr #1,(a2) beq.s return_30BAC8 move.w #$40,d4 move.w #$140,d5 bsr.w Calc_VRAM_Pos move.w #$40,d4 move.w #$140,d5 moveq #2,d6 bsr.w sub_30BBC2 return_30BAC8: ; ... rts ; --------------------------------------------------------------------------- unk_30BACA: dc.b 2 ; ... byte_30BACB: dcb.b $13, 2 ; 0 ; ... dcb.b $2D, 4 ; 19 dc.b 0 ; 64 ; --------------------------------------------------------------------------- loc_30BB0C: ; ... moveq #-$10,d4 bclr #0,(a2) bne.s loc_30BB1E bclr #1,(a2) beq.s loc_30BB4A move.w #$E0,d4 loc_30BB1E: ; ... lea (byte_30BACB).l,a0 move.w ($FFFFEE0C).w,d0 add.w d4,d0 and.w #$3F0,d0 lsr.w #4,d0 move.b (a0,d0.w),d0 move.w word_30BB7C(pc,d0.w),a3 moveq #-$10,d5 movem.l d4-d5,-(sp) bsr.w Calc_VRAM_Pos movem.l (sp)+,d4-d5 bsr.w DrawTiles_Vertical1 loc_30BB4A: ; ... tst.b (a2) bne.s loc_30BB50 rts ; --------------------------------------------------------------------------- loc_30BB50: ; ... moveq #-$10,d4 moveq #-$10,d5 move.b (a2),d0 and.b #$A8,d0 beq.s loc_30BB64 lsr.b #1,d0 move.b d0,(a2) move.w #$140,d5 loc_30BB64: ; ... lea (unk_30BACA).l,a0 move.w ($FFFFEE0C).w,d0 and.w #$7F0,d0 lsr.w #4,d0 lea (a0,d0.w),a0 bra.w loc_30BB84 ; --------------------------------------------------------------------------- word_30BB7C: dc.w $EE68 ; ... dc.w $EE68 dc.w $EE70 dc.w $EE78 ; --------------------------------------------------------------------------- loc_30BB84: ; ... moveq #$F,d6 move.l #$800000,d7 loc_30BB8C: ; ... moveq #0,d0 move.b (a0)+,d0 btst d0,(a2) beq.s loc_30BBB4 move.w word_30BB7C(pc,d0.w),a3 movem.l d4-d5/a0,-(sp) movem.l d4-d5,-(sp) bsr.w sub_30BDEE movem.l (sp)+,d4-d5 bsr.w Calc_VRAM_Pos bsr.w sub_30BD68 movem.l (sp)+,d4-d5/a0 loc_30BBB4: ; ... add.w #$10,d4 dbf d6,loc_30BB8C clr.b (a2) rts ; End of function sub_30BA7C ; =============== S U B R O U T I N E ======================================= sub_30BBC0: ; ... moveq #$F,d6 ; End of function sub_30BBC0 ; =============== S U B R O U T I N E ======================================= sub_30BBC2: ; ... add.w (a3),d5 add.w 4(a3),d4 move.l #$800000,d7 move.l d0,d1 bsr.w sub_30BC92 loc_30BBD4: ; ... move.w (a0),d3 and.w #$3FF,d3 lsl.w #3,d3 lea ($FFFF9000).w,a1 add.w d3,a1 move.l d1,d0 bsr.w sub_30BD68 add.w #$10,a0 add.w #$100,d1 and.w #$FFF,d1 add.w #$10,d4 move.w d4,d0 and.w #$70,d0 bne.s loc_30BC04 bsr.w sub_30BC92 loc_30BC04: ; ... dbf d6,loc_30BBD4 rts ; End of function sub_30BBC2 ; =============== S U B R O U T I N E ======================================= DrawTiles_Vertical: ; ... add.w (a3),d5 add.w 4(a3),d4 bra.s DrawTiles_Vertical3 ; --------------------------------------------------------------------------- DrawTiles_Vertical1: ; ... moveq #$15,d6 add.w (a3),d5 DrawTiles_Vertical2: ; ... add.w 4(a3),d4 DrawTiles_Vertical3: ; ... move.l a2,-(sp) move.w d6,-(sp) lea ($FFFFEF00).w,a2 move.l d0,d1 or.w d2,d1 swap d1 move.l d1,-(sp) move.l d1,(a5) swap d1 bsr.w sub_30BC92 loc_30BC32: ; ... move.w (a0),d3 and.w #$3FF,d3 lsl.w #3,d3 lea ($FFFF9000).w,a1 add.w d3,a1 bsr.w sub_30BCC8 addq.w #2,a0 addq.b #4,d1 bpl.s loc_30BC54 and.b #$7F,d1 swap d1 move.l d1,(a5) swap d1 loc_30BC54: ; ... add.w #$10,d5 move.w d5,d0 and.w #$70,d0 bne.s loc_30BC64 bsr.w sub_30BC92 loc_30BC64: ; ... dbf d6,loc_30BC32 move.l (sp)+,d1 add.l #$800000,d1 lea ($FFFFEF00).w,a2 move.l d1,(a5) swap d1 move.w (sp)+,d6 loc_30BC7A: ; ... move.l (a2)+,(a6) addq.b #4,d1 bmi.s loc_30BC8A or.b #$80,d1 swap d1 move.l d1,(a5) swap d1 loc_30BC8A: ; ... dbf d6,loc_30BC7A move.l (sp)+,a2 rts ; End of function DrawTiles_Vertical ; =============== S U B R O U T I N E ======================================= sub_30BC92: ; ... movem.l d4-d5,-(sp) move.w d4,d3 add.w d3,d3 and.w #$F00,d3 lsr.w #3,d5 move.w d5,d0 lsr.w #4,d0 and.w #$7F,d0 add.w d3,d0 moveq #-1,d3 clr.w d3 move.b (a4,d0.w),d3 lsl.w #7,d3 and.w #$70,d4 and.w #$E,d5 add.w d4,d3 add.w d5,d3 move.l d3,a0 movem.l (sp)+,d4-d5 rts ; End of function sub_30BC92 ; =============== S U B R O U T I N E ======================================= sub_30BCC8: ; ... btst #3,(a0) bne.s loc_30BCF4 btst #2,(a0) bne.s loc_30BCDA move.l (a1)+,(a6) move.l (a1)+,(a2)+ rts ; --------------------------------------------------------------------------- loc_30BCDA: ; ... move.l (a1)+,d3 eor.l #$8000800,d3 swap d3 move.l d3,(a6) move.l (a1)+,d3 eor.l #$8000800,d3 swap d3 move.l d3,(a2)+ rts ; --------------------------------------------------------------------------- loc_30BCF4: ; ... btst #2,(a0) bne.s loc_30BD10 move.l (a1)+,d0 move.l (a1)+,d3 eor.l #$10001000,d3 move.l d3,(a6) eor.l #$10001000,d0 move.l d0,(a2)+ rts ; --------------------------------------------------------------------------- loc_30BD10: ; ... move.l (a1)+,d0 move.l (a1)+,d3 eor.l #$18001800,d3 swap d3 move.l d3,(a6) eor.l #$18001800,d0 swap d0 move.l d0,(a2)+ rts ; End of function sub_30BCC8 ; --------------------------------------------------------------------------- btst #3,(a0) bne.s loc_30BD48 btst #2,(a0) bne.s loc_30BD3A move.l (a1)+,(a6) rts ; --------------------------------------------------------------------------- loc_30BD3A: ; ... move.l (a1)+,d3 eor.l #$8000800,d3 swap d3 move.l d3,(a6) rts ; --------------------------------------------------------------------------- loc_30BD48: ; ... btst #2,(a0) bne.s loc_30BD5A move.l (a1)+,d3 eor.l #$10001000,d3 move.l d3,(a6) rts ; --------------------------------------------------------------------------- loc_30BD5A: ; ... move.l (a1)+,d3 eor.l #$18001800,d3 swap d3 move.l d3,(a6) rts ; =============== S U B R O U T I N E ======================================= sub_30BD68: ; ... or.w d2,d0 swap d0 btst #3,(a0) bne.s loc_30BDA4 btst #2,(a0) bne.s loc_30BD84 move.l d0,(a5) move.l (a1)+,(a6) add.l d7,d0 move.l d0,(a5) move.l (a1)+,(a6) rts ; --------------------------------------------------------------------------- loc_30BD84: ; ... move.l d0,(a5) move.l (a1)+,d3 eor.l #$8000800,d3 swap d3 move.l d3,(a6) add.l d7,d0 move.l d0,(a5) move.l (a1)+,d3 eor.l #$8000800,d3 swap d3 move.l d3,(a6) rts ; --------------------------------------------------------------------------- loc_30BDA4: ; ... btst #2,(a0) bne.s loc_30BDCA move.l d5,-(sp) move.l d0,(a5) move.l (a1)+,d5 move.l (a1)+,d3 eor.l #$10001000,d3 move.l d3,(a6) add.l d7,d0 move.l d0,(a5) eor.l #$10001000,d5 move.l d5,(a6) move.l (sp)+,d5 rts ; --------------------------------------------------------------------------- loc_30BDCA: ; ... move.l d5,-(sp) move.l d0,(a5) move.l (a1)+,d5 move.l (a1)+,d3 eor.l #$18001800,d3 swap d3 move.l d3,(a6) add.l d7,d0 move.l d0,(a5) eor.l #$18001800,d5 swap d5 move.l d5,(a6) move.l (sp)+,d5 rts ; End of function sub_30BD68 ; =============== S U B R O U T I N E ======================================= sub_30BDEE: ; ... add.w (a3),d5 add.w 4(a3),d4 lea ($FFFF9000).w,a1 move.w d4,d3 add.w d3,d3 and.w #$F00,d3 lsr.w #3,d5 move.w d5,d0 lsr.w #4,d0 and.w #$7F,d0 add.w d3,d0 moveq #-1,d3 clr.w d3 move.b (a4,d0.w),d3 lsl.w #7,d3 and.w #$70,d4 and.w #$E,d5 add.w d4,d3 add.w d5,d3 move.l d3,a0 move.w (a0),d3 and.w #$3FF,d3 lsl.w #3,d3 add.w d3,a1 rts ; End of function sub_30BDEE ; =============== S U B R O U T I N E ======================================= Calc_VRAM_Pos: ; ... add.w (a3),d5 loc_30BE32: ; ... add.w 4(a3),d4 and.w #$F0,d4 and.w #$1F0,d5 lsl.w #4,d4 lsr.w #2,d5 add.w d5,d4 moveq #3,d0 swap d0 move.w d4,d0 rts ; End of function Calc_VRAM_Pos ; =============== S U B R O U T I N E ======================================= sub_30BE4C: ; ... add.w 4(a3),d4 add.w (a3),d5 and.w #$F0,d4 and.w #$1F0,d5 lsl.w #4,d4 lsr.w #2,d5 add.w d5,d4 moveq #2,d0 swap d0 move.w d4,d0 rts ; End of function sub_30BE4C ; =============== S U B R O U T I N E ======================================= sub_30BE68: ; ... lea ($C00004).l,a5 lea ($C00000).l,a6 lea ($FFFFEE08).w,a3 lea ($FFFF8080).w,a4 move.w #$6000,d2 moveq #0,d4 cmp.b #$C,($FFFFFE10).w beq.w loc_30BE8E moveq #-$10,d4 loc_30BE8E: ; ... moveq #$F,d6 loc_30BE90: ; ... movem.l d4-d6,-(sp) moveq #0,d5 move.w d4,d1 bsr.w Calc_VRAM_Pos move.w d1,d4 moveq #0,d5 moveq #$1F,d6 move #$2700,sr bsr.w DrawTiles_Vertical move #$2300,sr movem.l (sp)+,d4-d6 add.w #$10,d4 dbf d6,loc_30BE90 rts ; End of function sub_30BE68 ; --------------------------------------------------------------------------- moveq #-$10,d4 moveq #$F,d6 loc_30BEC0: ; ... movem.l d4-d6,-(sp) moveq #0,d5 move.w d4,d1 bsr.w sub_30BE4C move.w d1,d4 moveq #0,d5 moveq #$1F,d6 move #$2700,sr bsr.w DrawTiles_Vertical move #$2300,sr movem.l (sp)+,d4-d6 add.w #$10,d4 dbf d6,loc_30BEC0 rts ; =============== S U B R O U T I N E ======================================= LoadZoneBlockMaps: ; ... moveq #0,d0 move.b ($FFFFFE10).w,d0 add.w d0,d0 add.w d0,d0 move.w d0,d1 add.w d0,d0 add.w d1,d0 lea (LevelArtPointers).l,a2 lea (a2,d0.w),a2 move.l a2,-(sp) addq.w #4,a2 move.l (a2)+,d0 and.l #$FFFFFF,d0 move.l d0,a0 lea ($FFFF9000).w,a1 jsr KosDec cmp.b #7,($FFFFFE10).w bne.s loc_30BF36 lea ($FFFF9980).w,a1 lea ($2985A4).l,a0 jsr KosDec loc_30BF36: ; ... move.l (a2)+,d0 and.l #$FFFFFF,d0 move.l d0,a0 lea ($FFFF0000).l,a1 jsr KosDec bsr.w LoadLevelLayout move.l (sp)+,a2 addq.w #4,a2 moveq #0,d0 move.b (a2),d0 beq.s loc_30BF60 jsr LoadPLC loc_30BF60: ; ... addq.w #4,a2 moveq #0,d0 move.b (a2),d0 jsr PalLoad2 rts ; End of function LoadZoneBlockMaps ; =============== S U B R O U T I N E ======================================= LoadLevelLayout: ; ... moveq #0,d0 move.w ($FFFFFE10).w,d0 ror.b #1,d0 lsr.w #6,d0 lea (S2_Off_Level).l,a0 ; S2_Off_Level move.w (a0,d0.w),d0 lea (a0,d0.l),a0 lea ($FFFF8000).w,a1 jmp KosDec ; End of function LoadLevelLayout ; =============== S U B R O U T I N E ======================================= RunDynamicLevelEvents: ; ... moveq #0,d0 move.b ($FFFFFE10).w,d0 add.w d0,d0 move.w DynamicLevelEvents_Index(pc,d0.w),d0 jsr DynamicLevelEvents_Index(pc,d0.w) moveq #2,d1 move.w ($FFFFEEC6).w,d0 sub.w ($FFFFEECE).w,d0 beq.s return_30BFCE bcc.s loc_30BFD0 neg.w d1 move.w ($FFFFEE04).w,d0 cmp.w ($FFFFEEC6).w,d0 bls.s loc_30BFC4 move.w d0,($FFFFEECE).w and.w #$FFFE,($FFFFEECE).w loc_30BFC4: ; ... add.w d1,($FFFFEECE).w move.b #1,($FFFFEEDE).w return_30BFCE: ; ... rts ; --------------------------------------------------------------------------- loc_30BFD0: ; ... move.w ($FFFFEE04).w,d0 add.w #8,d0 cmp.w ($FFFFEECE).w,d0 bcs.s loc_30BFEA btst #1,($FFFFB022).w beq.s loc_30BFEA add.w d1,d1 add.w d1,d1 loc_30BFEA: ; ... add.w d1,($FFFFEECE).w move.b #1,($FFFFEEDE).w rts ; End of function RunDynamicLevelEvents ; --------------------------------------------------------------------------- DynamicLevelEvents_Index:dc.w LevelEvents_EHZ-DynamicLevelEvents_Index; 0 ; ... dc.w LevelEvents_001-DynamicLevelEvents_Index; 1 dc.w LevelEvents_002-DynamicLevelEvents_Index; 2 dc.w LevelEvents_003-DynamicLevelEvents_Index; 3 dc.w LevelEvents_MTZ-DynamicLevelEvents_Index; 4 dc.w LevelEvents_MZ3-DynamicLevelEvents_Index; 5 dc.w LevelEvents_WFZ-DynamicLevelEvents_Index; 6 dc.w LevelEvents_HTZ-DynamicLevelEvents_Index; 7 dc.w LevelEvents_HPZ-DynamicLevelEvents_Index; 8 dc.w LevelEvents_009-DynamicLevelEvents_Index; 9 dc.w LevelEvents_OOZ-DynamicLevelEvents_Index; 10 dc.w LevelEvents_MCZ-DynamicLevelEvents_Index; 11 dc.w LevelEvents_CNZ-DynamicLevelEvents_Index; 12 dc.w LevelEvents_CPZ-DynamicLevelEvents_Index; 13 dc.w LevelEvents_DEZ-DynamicLevelEvents_Index; 14 dc.w LevelEvents_ARZ-DynamicLevelEvents_Index; 15 dc.w LevelEvents_SCZ-DynamicLevelEvents_Index; 16 ; --------------------------------------------------------------------------- LevelEvents_EHZ: ; ... tst.b ($FFFFFE11).w bne.s LevelEvents_EHZ2 rts ; --------------------------------------------------------------------------- LevelEvents_EHZ2: ; ... moveq #0,d0 move.b ($FFFFEEDF).w,d0 move.w LevelEvents_EHZ2_Index(pc,d0.w),d0 jmp LevelEvents_EHZ2_Index(pc,d0.w) ; --------------------------------------------------------------------------- LevelEvents_EHZ2_Index:dc.w loc_30C036-LevelEvents_EHZ2_Index; 0 ; ... dc.w loc_30C070-LevelEvents_EHZ2_Index; 1 dc.w loc_30C0B2-LevelEvents_EHZ2_Index; 2 dc.w loc_30C100-LevelEvents_EHZ2_Index; 3 ; --------------------------------------------------------------------------- loc_30C036: ; ... tst.w ($FFFFFFDC).w bne.s loc_30C062 cmp.w #$2780,($FFFFEE00).w bcs.s return_30C060 move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEE00).w,($FFFFEEF8).w move.w #$390,($FFFFEEC6).w move.w #$390,($FFFFEEFE).w addq.b #2,($FFFFEEDF).w return_30C060: ; ... rts ; --------------------------------------------------------------------------- loc_30C062: ; ... move.w #$2920,($FFFFEECA).w move.w #$2920,($FFFFEEFA).w rts ; --------------------------------------------------------------------------- loc_30C070: ; ... cmp.w #$28F0,($FFFFEE00).w bcs.s return_30C0B0 move.w #$28F0,($FFFFEEC8).w move.w #$2940,($FFFFEECA).w move.w #$28F0,($FFFFEEF8).w move.w #$2940,($FFFFEEFA).w addq.b #2,($FFFFEEDF).w move.w #$F9,d0 jsr PlayMusic clr.b ($FFFFF73A).w move.b #2,($FFFFF7AA).w moveq #$29,d0 jsr LoadPLC return_30C0B0: ; ... rts ; --------------------------------------------------------------------------- loc_30C0B2: ; ... cmp.w #$388,($FFFFEE04).w bcs.s loc_30C0C6 move.w #$388,($FFFFEECC).w move.w #$388,($FFFFEEFC).w loc_30C0C6: ; ... addq.b #1,($FFFFF73A).w cmp.b #$5A,($FFFFF73A).w bcs.s return_30C0FE jsr SingleObjLoad bne.s loc_30C0F0 move.b #$56,(a1) move.b #$81,$28(a1) move.w #$29D0,8(a1) move.w #$426,$C(a1) loc_30C0F0: ; ... addq.b #2,($FFFFEEDF).w move.w #$93,d0 jsr PlayMusic return_30C0FE: ; ... rts ; --------------------------------------------------------------------------- loc_30C100: ; ... tst.b ($FFFFF7A7).w beq.s return_30C118 move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEECA).w,($FFFFEEFA).w move.w ($FFFFEE00).w,($FFFFEEF8).w return_30C118: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_001: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_002: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_003: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_MTZ: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_MZ3: ; ... moveq #0,d0 move.b ($FFFFEEDF).w,d0 move.w LevelEvents_MZ3_Index(pc,d0.w),d0 jmp LevelEvents_MZ3_Index(pc,d0.w) ; --------------------------------------------------------------------------- LevelEvents_MZ3_Index:dc.w loc_30C13A-LevelEvents_MZ3_Index; 0 ; ... dc.w loc_30C15A-LevelEvents_MZ3_Index; 1 dc.w loc_30C180-LevelEvents_MZ3_Index; 2 dc.w loc_30C1C2-LevelEvents_MZ3_Index; 3 dc.w loc_30C1FE-LevelEvents_MZ3_Index; 4 ; --------------------------------------------------------------------------- loc_30C13A: ; ... cmp.w #$2530,($FFFFEE00).w bcs.s return_30C158 move.w #$500,($FFFFEECE).w move.w #$450,($FFFFEEC6).w move.w #$450,($FFFFEEFE).w addq.b #2,($FFFFEEDF).w return_30C158: ; ... rts ; --------------------------------------------------------------------------- loc_30C15A: ; ... cmp.w #$2980,($FFFFEE00).w bcs.s return_30C17E move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEE00).w,($FFFFEEF8).w move.w #$400,($FFFFEEC6).w move.w #$400,($FFFFEEFE).w addq.b #2,($FFFFEEDF).w return_30C17E: ; ... rts ; --------------------------------------------------------------------------- loc_30C180: ; ... cmp.w #$2A80,($FFFFEE00).w bcs.s return_30C1C0 move.w #$2AB0,($FFFFEEC8).w move.w #$2AB0,($FFFFEECA).w move.w #$2AB0,($FFFFEEF8).w move.w #$2AB0,($FFFFEEFA).w addq.b #2,($FFFFEEDF).w move.w #$F9,d0 jsr PlayMusic clr.b ($FFFFF73A).w move.b #7,($FFFFF7AA).w moveq #$2E,d0 jsr LoadPLC return_30C1C0: ; ... rts ; --------------------------------------------------------------------------- loc_30C1C2: ; ... cmp.w #$400,($FFFFEE04).w bcs.s loc_30C1D6 move.w #$400,($FFFFEECC).w move.w #$400,($FFFFEEFC).w loc_30C1D6: ; ... addq.b #1,($FFFFF73A).w cmp.b #$5A,($FFFFF73A).w bcs.s return_30C1FC jsr SingleObjLoad bne.s loc_30C1EE move.b #$54,(a1) loc_30C1EE: ; ... addq.b #2,($FFFFEEDF).w move.w #$93,d0 jsr PlayMusic return_30C1FC: ; ... rts ; --------------------------------------------------------------------------- loc_30C1FE: ; ... move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEECA).w,($FFFFEEFA).w move.w ($FFFFEE00).w,($FFFFEEF8).w rts ; --------------------------------------------------------------------------- LevelEvents_WFZ: ; ... moveq #0,d0 move.b ($FFFFEEDF).w,d0 move.w LevelEvents_WFZ_Index2(pc,d0.w),d0 jsr LevelEvents_WFZ_Index2(pc,d0.w) move.w ($FFFFF660).w,d0 move.w LevelEvents_WFZ_Index1(pc,d0.w),d0 jmp LevelEvents_WFZ_Index1(pc,d0.w) ; --------------------------------------------------------------------------- LevelEvents_WFZ_Index1:dc.w loc_30C31A-LevelEvents_WFZ_Index1; 0 ; ... dc.w loc_30C33E-LevelEvents_WFZ_Index1; 1 dc.w return_30C358-LevelEvents_WFZ_Index1; 2 LevelEvents_WFZ_Index2:dc.w loc_30C23A-LevelEvents_WFZ_Index2; 0 ; ... dc.w loc_30C25E-LevelEvents_WFZ_Index2; 1 dc.w loc_30C290-LevelEvents_WFZ_Index2; 2 dc.w loc_30C2D4-LevelEvents_WFZ_Index2; 3 ; --------------------------------------------------------------------------- loc_30C23A: ; ... move.l ($FFFFEE00).w,($FFFFEE08).w move.l ($FFFFEE04).w,($FFFFEE0C).w moveq #0,d0 move.w d0,($FFFFEEB4).w move.w d0,($FFFFEEB6).w move.w d0,($FFFFEEE2).w move.w d0,($FFFFEEE4).w addq.b #2,($FFFFEEDF).w rts ; --------------------------------------------------------------------------- loc_30C25E: ; ... cmp.w #$2BC0,($FFFFEE00).w bcs.s loc_30C278 cmp.w #$580,($FFFFEE04).w bcs.s loc_30C278 addq.b #2,($FFFFEEDF).w move.w #0,($FFFFF662).w loc_30C278: ; ... move.w ($FFFFEEB0).w,($FFFFEEB4).w move.w ($FFFFEEB2).w,($FFFFEEB6).w move.w ($FFFFEE00).w,d0 move.w ($FFFFEE04).w,d1 bra.w sub_30C54C ; --------------------------------------------------------------------------- loc_30C290: ; ... cmp.w #$800,($FFFFEEE2).w beq.s loc_30C29C addq.w #2,($FFFFEEE2).w loc_30C29C: ; ... cmp.w #$600,($FFFFEEE2).w blt.s loc_30C2BC move.w ($FFFFF662).w,d0 moveq #4,d1 cmp.w #$840,d0 bcc.s loc_30C2B6 add.w d1,d0 move.w d0,($FFFFF662).w loc_30C2B6: ; ... lsr.w #8,d0 add.w d0,($FFFFEEE4).w loc_30C2BC: ; ... move.w ($FFFFEEB0).w,($FFFFEEB4).w move.w ($FFFFEEB2).w,($FFFFEEB6).w move.w ($FFFFEE00).w,d0 move.w ($FFFFEE04).w,d1 bra.w sub_30C54C ; --------------------------------------------------------------------------- loc_30C2D4: ; ... cmp.w #$FD40,($FFFFEEE2).w beq.s loc_30C302 sub.w #2,($FFFFEEE2).w cmp.w #$1B81,($FFFFEEE4).w beq.s loc_30C302 move.w ($FFFFF662).w,d0 beq.s loc_30C2FC moveq #4,d1 neg.w d1 add.w d1,d0 move.w d0,($FFFFF662).w lsr.w #8,d0 loc_30C2FC: ; ... addq.w #1,d0 add.w d0,($FFFFEEE4).w loc_30C302: ; ... move.w ($FFFFEEB0).w,($FFFFEEB4).w move.w ($FFFFEEB2).w,($FFFFEEB6).w move.w ($FFFFEE00).w,d0 move.w ($FFFFEE04).w,d1 bra.w sub_30C54C ; --------------------------------------------------------------------------- loc_30C31A: ; ... cmp.w #$2880,($FFFFEE00).w bcs.s return_30C33C cmp.w #$400,($FFFFEE04).w bcs.s return_30C33C addq.w #2,($FFFFF660).w moveq #$3E,d0 jsr LoadPLC move.w #$2880,($FFFFEEC8).w return_30C33C: ; ... rts ; --------------------------------------------------------------------------- loc_30C33E: ; ... cmp.w #$500,($FFFFEE04).w bcs.s return_30C356 addq.w #2,($FFFFF660).w st ($FFFFF7CC).w moveq #$3F,d0 jsr LoadPLC return_30C356: ; ... rts ; --------------------------------------------------------------------------- return_30C358: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_HTZ: ; ... tst.b ($FFFFFE11).w bne.w LevelEvents_HTZ2 moveq #0,d0 move.b ($FFFFEEDF).w,d0 move.w off_30C370(pc,d0.w),d0 jmp off_30C370(pc,d0.w) ; --------------------------------------------------------------------------- off_30C370: dc.w loc_30C376-off_30C370 ; 0 ; ... dc.w loc_30C3E2-off_30C370 ; 1 dc.w loc_30C4E8-off_30C370 ; 2 ; --------------------------------------------------------------------------- loc_30C376: ; ... cmp.w #$400,($FFFFEE04).w bcs.s loc_30C3BE cmp.w #$1800,($FFFFEE00).w bcs.s loc_30C3BE move.b #1,($FFFFEEBC).w move.l ($FFFFEE00).w,($FFFFEE08).w move.l ($FFFFEE04).w,($FFFFEE0C).w moveq #0,d0 move.w d0,($FFFFEEB4).w move.w d0,($FFFFEEB6).w move.w d0,($FFFFEEE2).w move.w #$140,($FFFFEEE4).w sub.w #$100,($FFFFEE0C).w move.w #0,($FFFFEEE6).w addq.b #2,($FFFFEEDF).w return_30C3BC: ; ... rts ; --------------------------------------------------------------------------- loc_30C3BE: ; ... tst.b ($FFFFEEBC).w beq.s return_30C3BC move.w #$200,d0 moveq #0,d1 move.w d1,($FFFFEEB4).w loc_30C3CE: move.w d1,($FFFFEEB6).w bsr.w sub_30C54C or.w d0,d1 bne.s return_30C3BC move.b #0,($FFFFEEBC).w rts ; --------------------------------------------------------------------------- loc_30C3E2: ; ... cmp.w #$1978,($FFFFEE00).w bcs.w loc_30C474 cmp.w #$1E00,($FFFFEE00).w bcs.s loc_30C3FC move.b #0,($FFFFEEBD).w bra.s loc_30C474 ; --------------------------------------------------------------------------- loc_30C3FC: ; ... tst.b ($FFFFEEE8).w bne.s loc_30C42C cmp.w #$140,($FFFFEEE4).w beq.s loc_30C456 move.w ($FFFFFE04).w,d0 move.w d0,d1 and.w #3,d0 bne.s loc_30C474 addq.w #1,($FFFFEEE4).w and.w #$3F,d1 bne.s loc_30C474 move.w #$E1,d0 jsr PlaySound bra.s loc_30C474 ; --------------------------------------------------------------------------- loc_30C42C: ; ... cmp.w #$E0,($FFFFEEE4).w beq.s loc_30C456 move.w ($FFFFFE04).w,d0 move.w d0,d1 and.w #3,d0 bne.s loc_30C474 subq.w #1,($FFFFEEE4).w and.w #$3F,d1 bne.s loc_30C474 move.w #$E1,d0 jsr PlaySound bra.s loc_30C474 ; --------------------------------------------------------------------------- loc_30C456: ; ... move.b #0,($FFFFEEBD).w subq.w #1,($FFFFEEE6).w bpl.s loc_30C474 move.w #$78,($FFFFEEE6).w eor.b #1,($FFFFEEE8).w move.b #1,($FFFFEEBD).w loc_30C474: ; ... cmp.w #$1800,($FFFFEE00).w bcs.s loc_30C49C cmp.w #$1F00,($FFFFEE00).w bcc.s loc_30C4C2 move.w ($FFFFEEB0).w,($FFFFEEB4).w move.w ($FFFFEEB2).w,($FFFFEEB6).w move.w ($FFFFEE00).w,d0 move.w ($FFFFEE04).w,d1 bra.w sub_30C54C ; --------------------------------------------------------------------------- loc_30C49C: ; ... move.l #$4000000,($FFFFEE08).w moveq #0,d0 move.l d0,($FFFFEE0C).w move.l d0,($FFFFEEE2).w move.b d0,($FFFFEEE8).w subq.b #2,($FFFFEEDF).w move.w #$F8,d0 jsr PlaySound rts ; --------------------------------------------------------------------------- loc_30C4C2: ; ... move.l #$4000000,($FFFFEE08).w moveq #0,d0 move.l d0,($FFFFEE0C).w move.l d0,($FFFFEEE2).w move.b d0,($FFFFEEE8).w addq.b #2,($FFFFEEDF).w move.w #$F8,d0 jsr PlaySound rts ; --------------------------------------------------------------------------- loc_30C4E8: ; ... cmp.w #$1F00,($FFFFEE00).w bcc.s loc_30C528 move.b #1,($FFFFEEBC).w move.l ($FFFFEE00).w,($FFFFEE08).w move.l ($FFFFEE04).w,($FFFFEE0C).w moveq #0,d0 move.w d0,($FFFFEEB4).w move.w d0,($FFFFEEB6).w move.w d0,($FFFFEEE2).w move.w #$140,($FFFFEEE4).w sub.w #$100,($FFFFEE0C).w move.w #0,($FFFFEEE6).w subq.b #2,($FFFFEEDF).w return_30C526: ; ... rts ; --------------------------------------------------------------------------- loc_30C528: ; ... tst.b ($FFFFEEBC).w beq.s return_30C526 move.w #$200,d0 moveq #0,d1 move.w d1,($FFFFEEB4).w move.w d1,($FFFFEEB6).w bsr.w sub_30C54C or.w d0,d1 bne.s return_30C526 move.b #0,($FFFFEEBC).w rts ; =============== S U B R O U T I N E ======================================= sub_30C54C: ; ... sub.w ($FFFFEE08).w,d0 sub.w ($FFFFEEE2).w,d0 bpl.s loc_30C562 cmp.w #$FFF0,d0 bgt.s loc_30C560 move.w #$FFF0,d0 loc_30C560: ; ... bra.s loc_30C56C ; --------------------------------------------------------------------------- loc_30C562: ; ... cmp.w #$10,d0 bcs.s loc_30C56C move.w #$10,d0 loc_30C56C: ; ... move.b d0,($FFFFEEB4).w sub.w ($FFFFEE0C).w,d1 sub.w ($FFFFEEE4).w,d1 bpl.s loc_30C586 cmp.w #$FFF0,d1 bgt.s loc_30C584 move.w #$FFF0,d1 loc_30C584: ; ... bra.s loc_30C590 ; --------------------------------------------------------------------------- loc_30C586: ; ... cmp.w #$10,d1 bcs.s loc_30C590 move.w #$10,d1 loc_30C590: ; ... move.b d1,($FFFFEEB6).w rts ; End of function sub_30C54C ; --------------------------------------------------------------------------- btst #0,($FFFFF606).w beq.s loc_30C5A8 tst.w ($FFFFEEE4).w beq.s loc_30C5A8 subq.w #1,($FFFFEEE4).w loc_30C5A8: ; ... btst #1,($FFFFF606).w beq.s return_30C5BC cmp.w #$700,($FFFFEEE4).w beq.s return_30C5BC addq.w #1,($FFFFEEE4).w return_30C5BC: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_HTZ2: ; ... bsr.w LevelEvents_HTZ2_Prepare moveq #0,d0 move.b ($FFFFEEDF).w,d0 move.w off_30C5D0(pc,d0.w),d0 jmp off_30C5D0(pc,d0.w) ; --------------------------------------------------------------------------- off_30C5D0: dc.w loc_30C5E2-off_30C5D0 ; 0 ; ... dc.w loc_30C664-off_30C5D0 ; 1 dc.w loc_30C76A-off_30C5D0 ; 2 dc.w loc_30C7CE-off_30C5D0 ; 3 dc.w loc_30C8CC-off_30C5D0 ; 4 dc.w sub_30C958-off_30C5D0 ; 5 dc.w loc_30C97E-off_30C5D0 ; 6 dc.w loc_30C9C0-off_30C5D0 ; 7 dc.w loc_30C9FC-off_30C5D0 ; 8 ; --------------------------------------------------------------------------- loc_30C5E2: ; ... cmp.w #$14C0,($FFFFEE00).w bcs.s loc_30C640 move.b #1,($FFFFEEBC).w move.l ($FFFFEE00).w,($FFFFEE08).w move.l ($FFFFEE04).w,($FFFFEE0C).w moveq #0,d0 move.w d0,($FFFFEEB4).w move.w d0,($FFFFEEB6).w move.w d0,($FFFFEEE2).w move.w #$2C0,($FFFFEEE4).w sub.w #$100,($FFFFEE0C).w move.w #0,($FFFFEEE6).w addq.b #2,($FFFFEEDF).w cmp.w #$380,($FFFFEE04).w bcs.s return_30C63E move.w #$F980,($FFFFEEE2).w add.w #$480,($FFFFEE08).w move.w #$300,($FFFFEEE4).w addq.b #6,($FFFFEEDF).w return_30C63E: ; ... rts ; --------------------------------------------------------------------------- loc_30C640: ; ... tst.b ($FFFFEEBC).w beq.s return_30C63E move.w #$200,d0 moveq #0,d1 move.w d1,($FFFFEEB4).w move.w d1,($FFFFEEB6).w bsr.w sub_30C54C or.w d0,d1 bne.s return_30C63E move.b #0,($FFFFEEBC).w rts ; --------------------------------------------------------------------------- loc_30C664: ; ... cmp.w #$1678,($FFFFEE00).w bcs.w loc_30C6F6 cmp.w #$1A00,($FFFFEE00).w bcs.s loc_30C67E move.b #0,($FFFFEEBD).w bra.s loc_30C6F6 ; --------------------------------------------------------------------------- loc_30C67E: ; ... tst.b ($FFFFEEE8).w bne.s loc_30C6AE cmp.w #$2C0,($FFFFEEE4).w beq.s loc_30C6D8 move.w ($FFFFFE04).w,d0 move.w d0,d1 and.w #3,d0 bne.s loc_30C6F6 addq.w #1,($FFFFEEE4).w and.w #$3F,d1 bne.s loc_30C6F6 move.w #$E1,d0 jsr PlaySound bra.s loc_30C6F6 ; --------------------------------------------------------------------------- loc_30C6AE: ; ... cmp.w #0,($FFFFEEE4).w beq.s loc_30C6D8 move.w ($FFFFFE04).w,d0 move.w d0,d1 and.w #3,d0 bne.s loc_30C6F6 subq.w #1,($FFFFEEE4).w and.w #$3F,d1 bne.s loc_30C6F6 move.w #$E1,d0 jsr PlaySound bra.s loc_30C6F6 ; --------------------------------------------------------------------------- loc_30C6D8: ; ... move.b #0,($FFFFEEBD).w subq.w #1,($FFFFEEE6).w bpl.s loc_30C6F6 move.w #$78,($FFFFEEE6).w eor.b #1,($FFFFEEE8).w move.b #1,($FFFFEEBD).w loc_30C6F6: ; ... cmp.w #$14C0,($FFFFEE00).w bcs.s loc_30C71E cmp.w #$1B00,($FFFFEE00).w bcc.s loc_30C744 loc_30C706: move.w ($FFFFEEB0).w,($FFFFEEB4).w move.w ($FFFFEEB2).w,($FFFFEEB6).w move.w ($FFFFEE00).w,d0 move.w ($FFFFEE04).w,d1 bra.w sub_30C54C ; --------------------------------------------------------------------------- loc_30C71E: ; ... move.l #$4000000,($FFFFEE08).w moveq #0,d0 move.l d0,($FFFFEE0C).w move.l d0,($FFFFEEE2).w move.b d0,($FFFFEEE8).w subq.b #2,($FFFFEEDF).w move.w #$F8,d0 jsr PlaySound rts ; --------------------------------------------------------------------------- loc_30C744: ; ... move.l #$4000000,($FFFFEE08).w moveq #0,d0 move.l d0,($FFFFEE0C).w move.l d0,($FFFFEEE2).w move.b d0,($FFFFEEE8).w addq.b #2,($FFFFEEDF).w move.w #$F8,d0 jsr PlaySound rts ; --------------------------------------------------------------------------- loc_30C76A: ; ... cmp.w #$1B00,($FFFFEE00).w bcc.s loc_30C7AA move.b #1,($FFFFEEBC).w move.l ($FFFFEE00).w,($FFFFEE08).w move.l ($FFFFEE04).w,($FFFFEE0C).w moveq #0,d0 move.w d0,($FFFFEEB4).w move.w d0,($FFFFEEB6).w move.w d0,($FFFFEEE2).w move.w #$2C0,($FFFFEEE4).w sub.w #$100,($FFFFEE0C).w move.w #0,($FFFFEEE6).w subq.b #2,($FFFFEEDF).w return_30C7A8: ; ... rts ; --------------------------------------------------------------------------- loc_30C7AA: ; ... tst.b ($FFFFEEBC).w beq.s return_30C7A8 move.w #$200,d0 moveq #0,d1 move.w d1,($FFFFEEB4).w move.w d1,($FFFFEEB6).w bsr.w sub_30C54C or.w d0,d1 bne.s return_30C7A8 move.b #0,($FFFFEEBC).w rts ; --------------------------------------------------------------------------- loc_30C7CE: ; ... cmp.w #$15F0,($FFFFEE00).w bcs.w loc_30C858 cmp.w #$1AC0,($FFFFEE00).w bcc.s loc_30C858 tst.b ($FFFFEEE8).w bne.s loc_30C810 cmp.w #$300,($FFFFEEE4).w beq.s loc_30C83A move.w ($FFFFFE04).w,d0 move.w d0,d1 and.w #3,d0 bne.s loc_30C858 addq.w #1,($FFFFEEE4).w and.w #$3F,d1 bne.s loc_30C858 move.w #$E1,d0 jsr PlaySound bra.s loc_30C858 ; --------------------------------------------------------------------------- loc_30C810: ; ... cmp.w #0,($FFFFEEE4).w beq.s loc_30C83A move.w ($FFFFFE04).w,d0 move.w d0,d1 and.w #3,d0 bne.s loc_30C858 subq.w #1,($FFFFEEE4).w and.w #$3F,d1 bne.s loc_30C858 move.w #$E1,d0 jsr PlaySound bra.s loc_30C858 ; --------------------------------------------------------------------------- loc_30C83A: ; ... move.b #0,($FFFFEEBD).w subq.w #1,($FFFFEEE6).w bpl.s loc_30C858 move.w #$78,($FFFFEEE6).w eor.b #1,($FFFFEEE8).w move.b #1,($FFFFEEBD).w loc_30C858: ; ... cmp.w #$14C0,($FFFFEE00).w bcs.s loc_30C880 cmp.w #$1B00,($FFFFEE00).w bcc.s loc_30C8A6 move.w ($FFFFEEB0).w,($FFFFEEB4).w move.w ($FFFFEEB2).w,($FFFFEEB6).w move.w ($FFFFEE00).w,d0 move.w ($FFFFEE04).w,d1 bra.w sub_30C54C ; --------------------------------------------------------------------------- loc_30C880: ; ... move.l #$4000000,($FFFFEE08).w moveq #0,d0 move.l d0,($FFFFEE0C).w move.l d0,($FFFFEEE2).w move.b d0,($FFFFEEE8).w subq.b #6,($FFFFEEDF).w move.w #$F8,d0 jsr PlaySound rts ; --------------------------------------------------------------------------- loc_30C8A6: ; ... move.l #$4000000,($FFFFEE08).w moveq #0,d0 move.l d0,($FFFFEE0C).w move.l d0,($FFFFEEE2).w move.b d0,($FFFFEEE8).w addq.b #2,($FFFFEEDF).w move.w #$F8,d0 jsr PlaySound rts ; --------------------------------------------------------------------------- loc_30C8CC: ; ... cmp.w #$1B00,($FFFFEE00).w bcc.s loc_30C914 move.b #1,($FFFFEEBC).w move.l ($FFFFEE00).w,($FFFFEE08).w move.l ($FFFFEE04).w,($FFFFEE0C).w moveq #0,d0 move.w d0,($FFFFEEB4).w move.w d0,($FFFFEEB6).w move.w #$F980,($FFFFEEE2).w add.w #$480,($FFFFEE08).w move.w #$300,($FFFFEEE4).w sub.w #$100,($FFFFEE0C).w move.w #0,($FFFFEEE6).w subq.b #2,($FFFFEEDF).w return_30C912: ; ... rts ; --------------------------------------------------------------------------- loc_30C914: ; ... tst.b ($FFFFEEBC).w beq.s return_30C912 move.w #$200,d0 moveq #0,d1 move.w d1,($FFFFEEB4).w move.w d1,($FFFFEEB6).w bsr.w sub_30C54C or.w d0,d1 bne.s return_30C912 move.b #0,($FFFFEEBC).w rts ; --------------------------------------------------------------------------- rts ; =============== S U B R O U T I N E ======================================= LevelEvents_HTZ2_Prepare: ; ... cmp.w #$2B00,($FFFFEE00).w bcs.s return_30C956 cmp.b #$A,($FFFFEEDF).w bge.s return_30C956 move.b #$A,($FFFFEEDF).w move.b #0,($FFFFEEBC).w return_30C956: ; ... rts ; End of function LevelEvents_HTZ2_Prepare ; =============== S U B R O U T I N E ======================================= sub_30C958: ; ... cmp.w #$2C50,($FFFFEE00).w bcs.s return_30C97C move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEE00).w,($FFFFEEF8).w move.w #$480,($FFFFEEC6).w move.w #$480,($FFFFEEFE).w addq.b #2,($FFFFEEDF).w return_30C97C: ; ... rts ; End of function sub_30C958 ; --------------------------------------------------------------------------- loc_30C97E: ; ... cmp.w #$2EDF,($FFFFEE00).w bcs.s return_30C9BE move.w #$2EE0,($FFFFEEC8).w move.w #$2F5E,($FFFFEECA).w move.w #$2EE0,($FFFFEEF8).w move.w #$2F5E,($FFFFEEFA).w addq.b #2,($FFFFEEDF).w move.w #$F9,d0 jsr PlayMusic clr.b ($FFFFF73A).w move.b #3,($FFFFF7AA).w moveq #$2A,d0 jmp LoadPLC ; --------------------------------------------------------------------------- return_30C9BE: ; ... rts ; --------------------------------------------------------------------------- loc_30C9C0: ; ... cmp.w #$478,($FFFFEE04).w bcs.s loc_30C9D4 move.w #$478,($FFFFEECC).w move.w #$478,($FFFFEEFC).w loc_30C9D4: ; ... addq.b #1,($FFFFF73A).w cmp.b #$5A,($FFFFF73A).w bcs.s return_30C9FA jsr SingleObjLoad bne.s loc_30C9EC move.b #$52,(a1) loc_30C9EC: ; ... addq.b #2,($FFFFEEDF).w move.w #$93,d0 jsr PlayMusic return_30C9FA: ; ... rts ; --------------------------------------------------------------------------- loc_30C9FC: ; ... tst.b ($FFFFF7A7).w beq.s return_30CA34 move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEECA).w,($FFFFEEFA).w move.w ($FFFFEE00).w,($FFFFEEF8).w cmp.w #$30E0,($FFFFEE00).w bcs.s return_30CA34 cmp.w #$428,($FFFFEECC).w bcs.s loc_30CA28 subq.w #2,($FFFFEECC).w loc_30CA28: ; ... cmp.w #$430,($FFFFEEC6).w bcs.s return_30CA34 subq.w #2,($FFFFEEC6).w return_30CA34: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_HPZ: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_009: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_OOZ: ; ... tst.b ($FFFFFE11).w bne.s loc_30CA42 rts ; --------------------------------------------------------------------------- loc_30CA42: ; ... moveq #0,d0 move.b ($FFFFEEDF).w,d0 move.w off_30CA50(pc,d0.w),d0 jmp off_30CA50(pc,d0.w) ; --------------------------------------------------------------------------- off_30CA50: dc.w loc_30CA58-off_30CA50 ; 0 ; ... dc.w loc_30CA84-off_30CA50 ; 1 dc.w loc_30CACE-off_30CA50 ; 2 dc.w loc_30CB0A-off_30CA50 ; 3 ; --------------------------------------------------------------------------- loc_30CA58: ; ... cmp.w #$2668,($FFFFEE00).w bcs.s return_30CA82 move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEE00).w,($FFFFEEF8).w move.w #$2D8,($FFFFB38C).w move.w #$1E0,($FFFFEEC6).w move.w #$1E0,($FFFFEEFE).w addq.b #2,($FFFFEEDF).w return_30CA82: ; ... rts ; --------------------------------------------------------------------------- loc_30CA84: ; ... cmp.w #$2880,($FFFFEE00).w bcs.s return_30CACC move.w #$2880,($FFFFEEC8).w move.w #$28C0,($FFFFEECA).w move.w #$2880,($FFFFEEF8).w move.w #$28C0,($FFFFEEFA).w addq.b #2,($FFFFEEDF).w move.w #$F9,d0 jsr PlayMusic clr.b ($FFFFF73A).w move.b #8,($FFFFF7AA).w moveq #$2F,d0 jsr LoadPLC moveq #$25,d0 jsr PalLoad2 return_30CACC: ; ... rts ; --------------------------------------------------------------------------- loc_30CACE: ; ... cmp.w #$1D8,($FFFFEE04).w bcs.s loc_30CAE2 move.w #$1D8,($FFFFEECC).w move.w #$1D8,($FFFFEEFC).w loc_30CAE2: ; ... addq.b #1,($FFFFF73A).w cmp.b #$5A,($FFFFF73A).w bcs.s return_30CB08 jsr SingleObjLoad bne.s loc_30CAFA move.b #$55,(a1) loc_30CAFA: ; ... addq.b #2,($FFFFEEDF).w move.w #$93,d0 jsr PlayMusic return_30CB08: ; ... rts ; --------------------------------------------------------------------------- loc_30CB0A: ; ... tst.b ($FFFFF7A7).w beq.s return_30CB22 move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEECA).w,($FFFFEEFA).w move.w ($FFFFEE00).w,($FFFFEEF8).w return_30CB22: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_MCZ: ; ... tst.b ($FFFFFE11).w bne.s loc_30CB2C rts ; --------------------------------------------------------------------------- loc_30CB2C: ; ... moveq #0,d0 move.b ($FFFFEEDF).w,d0 move.w off_30CB3A(pc,d0.w),d0 jmp off_30CB3A(pc,d0.w) ; --------------------------------------------------------------------------- off_30CB3A: dc.w loc_30CB42-off_30CB3A ; 0 ; ... dc.w loc_30CB7C-off_30CB3A ; 1 dc.w loc_30CBF2-off_30CB3A ; 2 dc.w loc_30CC2E-off_30CB3A ; 3 ; --------------------------------------------------------------------------- loc_30CB42: ; ... tst.w ($FFFFFFDC).w bne.s loc_30CB6E cmp.w #$2080,($FFFFEE00).w bcs.s return_30CB6C move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEE00).w,($FFFFEEF8).w move.w #$5D0,($FFFFEEC6).w move.w #$5D0,($FFFFEEFE).w addq.b #2,($FFFFEEDF).w return_30CB6C: ; ... rts ; --------------------------------------------------------------------------- loc_30CB6E: ; ... move.w #$2100,($FFFFEECA).w move.w #$2100,($FFFFEEFA).w rts ; --------------------------------------------------------------------------- loc_30CB7C: ; ... cmp.w #$20F0,($FFFFEE00).w bcs.s return_30CBF0 move.w #$20F0,($FFFFEECA).w move.w #$20F0,($FFFFEEC8).w move.w #$20F0,($FFFFEEFA).w move.w #$20F0,($FFFFEEF8).w addq.b #2,($FFFFEEDF).w move.w #$F9,d0 jsr PlayMusic clr.b ($FFFFF73A).w move.l #$6C000002,($C00004).l lea ($C00000).l,a6 lea ($2894E4).l,a2 moveq #7,d0 loc_30CBC6: ; ... move.l (a2)+,(a6) move.l (a2)+,(a6) move.l (a2)+,(a6) move.l (a2)+,(a6) move.l (a2)+,(a6) move.l (a2)+,(a6) move.l (a2)+,(a6) move.l (a2)+,(a6) dbf d0,loc_30CBC6 move.b #5,($FFFFF7AA).w moveq #$2C,d0 jsr LoadPLC moveq #$19,d0 jsr PalLoad2 return_30CBF0: ; ... rts ; --------------------------------------------------------------------------- loc_30CBF2: ; ... cmp.w #$5C8,($FFFFEE04).w bcs.s loc_30CC06 move.w #$5C8,($FFFFEECC).w move.w #$5C8,($FFFFEEFC).w loc_30CC06: ; ... addq.b #1,($FFFFF73A).w cmp.b #$5A,($FFFFF73A).w bcs.s return_30CC2C jsr SingleObjLoad bne.s loc_30CC1E move.b #$57,(a1) loc_30CC1E: ; ... addq.b #2,($FFFFEEDF).w move.w #$93,d0 jsr PlayMusic return_30CC2C: ; ... rts ; --------------------------------------------------------------------------- loc_30CC2E: ; ... tst.b ($FFFFEEBD).w beq.s loc_30CC48 move.w ($FFFFFE04).w,d0 and.w #$1F,d0 bne.s loc_30CC48 move.w #$E1,d0 jsr PlaySound loc_30CC48: ; ... move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEECA).w,($FFFFEEFA).w move.w ($FFFFEE00).w,($FFFFEEF8).w rts ; --------------------------------------------------------------------------- LevelEvents_CNZ: ; ... jsr SlotMachine tst.b ($FFFFFE11).w bne.s loc_30CC6A rts ; --------------------------------------------------------------------------- loc_30CC6A: ; ... moveq #0,d0 move.b ($FFFFEEDF).w,d0 move.w off_30CC78(pc,d0.w),d0 jmp off_30CC78(pc,d0.w) ; --------------------------------------------------------------------------- off_30CC78: dc.w loc_30CC80-off_30CC78 ; 0 ; ... dc.w loc_30CCC0-off_30CC78 ; 1 dc.w loc_30CD10-off_30CC78 ; 2 dc.w loc_30CD4C-off_30CC78 ; 3 ; --------------------------------------------------------------------------- loc_30CC80: ; ... tst.w ($FFFFFFDC).w bne.s loc_30CCB2 cmp.w #$27C0,($FFFFEE00).w bcs.s return_30CCB0 move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEE00).w,($FFFFEEF8).w move.w #$62E,($FFFFEEC6).w move.w #$62E,($FFFFEEFE).w move.b #$F9,($FFFF8C54).w addq.b #2,($FFFFEEDF).w return_30CCB0: ; ... rts ; --------------------------------------------------------------------------- loc_30CCB2: ; ... move.w #$26A0,($FFFFEECA).w move.w #$26A0,($FFFFEEFA).w rts ; --------------------------------------------------------------------------- loc_30CCC0: ; ... cmp.w #$2890,($FFFFEE00).w bcs.s return_30CD0E move.b #$F9,($FFFF8C50).w move.w #$2860,($FFFFEEC8).w move.w #$28E0,($FFFFEECA).w move.w #$2860,($FFFFEEF8).w move.w #$28E0,($FFFFEEFA).w addq.b #2,($FFFFEEDF).w move.w #$F9,d0 jsr PlayMusic clr.b ($FFFFF73A).w move.b #6,($FFFFF7AA).w moveq #$2D,d0 jsr LoadPLC moveq #$1A,d0 jsr PalLoad2 return_30CD0E: ; ... rts ; --------------------------------------------------------------------------- loc_30CD10: ; ... cmp.w #$4E0,($FFFFEE04).w bcs.s loc_30CD24 move.w #$4E0,($FFFFEECC).w move.w #$4E0,($FFFFEEFC).w loc_30CD24: ; ... addq.b #1,($FFFFF73A).w cmp.b #$5A,($FFFFF73A).w bcs.s return_30CD4A jsr SingleObjLoad bne.s loc_30CD3C move.b #$51,(a1) loc_30CD3C: ; ... addq.b #2,($FFFFEEDF).w move.w #$93,d0 jsr PlayMusic return_30CD4A: ; ... rts ; --------------------------------------------------------------------------- loc_30CD4C: ; ... cmp.w #$2A00,($FFFFEE00).w bcs.s return_30CD72 move.w #$5D0,($FFFFEEC6).w move.w #$5D0,($FFFFEEFE).w move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEECA).w,($FFFFEEFA).w move.w ($FFFFEE00).w,($FFFFEEF8).w return_30CD72: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_CPZ: ; ... tst.b ($FFFFFE11).w bne.s loc_30CD7C rts ; --------------------------------------------------------------------------- loc_30CD7C: ; ... moveq #0,d0 move.b ($FFFFEEDF).w,d0 move.w off_30CD8A(pc,d0.w),d0 jmp off_30CD8A(pc,d0.w) ; --------------------------------------------------------------------------- off_30CD8A: dc.w loc_30CD92-off_30CD8A ; 0 ; ... dc.w loc_30CDB8-off_30CD8A ; 1 dc.w loc_30CDFA-off_30CD8A ; 2 dc.w loc_30CE36-off_30CD8A ; 3 ; --------------------------------------------------------------------------- loc_30CD92: ; ... cmp.w #$2680,($FFFFEE00).w bcs.s return_30CDB6 move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEE00).w,($FFFFEEF8).w move.w #$450,($FFFFEEC6).w move.w #$450,($FFFFEEFE).w addq.b #2,($FFFFEEDF).w return_30CDB6: ; ... rts ; --------------------------------------------------------------------------- loc_30CDB8: ; ... cmp.w #$2A20,($FFFFEE00).w bcs.s return_30CDF8 move.w #$2A20,($FFFFEEC8).w move.w #$2A20,($FFFFEECA).w move.w #$2A20,($FFFFEEF8).w move.w #$2A20,($FFFFEEFA).w addq.b #2,($FFFFEEDF).w move.w #$F9,d0 jsr PlayMusic clr.b ($FFFFF73A).w move.b #1,($FFFFF7AA).w moveq #$28,d0 jmp LoadPLC ; --------------------------------------------------------------------------- return_30CDF8: ; ... rts ; --------------------------------------------------------------------------- loc_30CDFA: ; ... cmp.w #$448,($FFFFEE04).w bcs.s loc_30CE0E move.w #$448,($FFFFEECC).w move.w #$448,($FFFFEEFC).w loc_30CE0E: ; ... addq.b #1,($FFFFF73A).w cmp.b #$5A,($FFFFF73A).w bcs.s return_30CE34 jsr SingleObjLoad bne.s loc_30CE26 move.b #$5D,(a1) loc_30CE26: ; ... addq.b #2,($FFFFEEDF).w move.w #$93,d0 jsr PlayMusic return_30CE34: ; ... rts ; --------------------------------------------------------------------------- loc_30CE36: ; ... move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEECA).w,($FFFFEEFA).w move.w ($FFFFEE00).w,($FFFFEEF8).w rts ; --------------------------------------------------------------------------- LevelEvents_DEZ: ; ... moveq #0,d0 move.b ($FFFFEEDF).w,d0 move.w off_30CE58(pc,d0.w),d0 jmp off_30CE58(pc,d0.w) ; --------------------------------------------------------------------------- off_30CE58: dc.w loc_30CE62-off_30CE58 ; 0 ; ... dc.w return_30CE98-off_30CE58 ; 1 dc.w loc_30CE9A-off_30CE58 ; 2 dc.w loc_30CEB6-off_30CE58 ; 3 dc.w return_30CED8-off_30CE58 ; 4 ; --------------------------------------------------------------------------- loc_30CE62: ; ... move.w #$140,d0 cmp.w ($FFFFEE00).w,d0 bhi.s return_30CE96 addq.b #2,($FFFFEEDF).w jsr SingleObjLoad bne.s return_30CE96 move.b #$AF,(a1) move.b #$48,$28(a1) move.w #$348,8(a1) move.w #$A0,$C(a1) moveq #$30,d0 jmp LoadPLC ; --------------------------------------------------------------------------- return_30CE96: ; ... rts ; --------------------------------------------------------------------------- return_30CE98: ; ... rts ; --------------------------------------------------------------------------- loc_30CE9A: ; ... move.w ($FFFFEE00).w,($FFFFEEC8).w cmp.w #$300,($FFFFEE00).w bcs.s return_30CEB4 addq.b #2,($FFFFEEDF).w moveq #$31,d0 jmp LoadPLC ; --------------------------------------------------------------------------- return_30CEB4: ; ... rts ; --------------------------------------------------------------------------- loc_30CEB6: ; ... move.w ($FFFFEE00).w,($FFFFEEC8).w move.w #$680,d0 cmp.w ($FFFFEE00).w,d0 bhi.s return_30CED6 addq.b #2,($FFFFEEDF).w move.w d0,($FFFFEEC8).w add.w #$C0,d0 move.w d0,($FFFFEECA).w return_30CED6: ; ... rts ; --------------------------------------------------------------------------- return_30CED8: ; ... rts ; --------------------------------------------------------------------------- LevelEvents_ARZ: ; ... tst.b ($FFFFFE11).w bne.s loc_30CEE2 rts ; --------------------------------------------------------------------------- loc_30CEE2: ; ... moveq #0,d0 move.b ($FFFFEEDF).w,d0 move.w off_30CEF0(pc,d0.w),d0 jmp off_30CEF0(pc,d0.w) ; --------------------------------------------------------------------------- off_30CEF0: dc.w loc_30CEF8-off_30CEF0 ; 0 ; ... dc.w loc_30CF2C-off_30CEF0 ; 1 dc.w loc_30CF6C-off_30CEF0 ; 2 dc.w loc_30CF9C-off_30CEF0 ; 3 ; --------------------------------------------------------------------------- loc_30CEF8: ; ... cmp.w #$2810,($FFFFEE00).w bcs.s return_30CF2A move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEE00).w,($FFFFEEF8).w move.w #$400,($FFFFEEC6).w move.w #$400,($FFFFEEFE).w addq.b #2,($FFFFEEDF).w move.b #4,($FFFFF7AA).w moveq #$2B,d0 jsr LoadPLC return_30CF2A: ; ... rts ; --------------------------------------------------------------------------- loc_30CF2C: ; ... cmp.w #$2A40,($FFFFEE00).w bcs.s return_30CF6A move.w #$2A40,($FFFFEECA).w move.w #$2A40,($FFFFEEC8).w move.w #$2A40,($FFFFEEFA).w move.w #$2A40,($FFFFEEF8).w addq.b #2,($FFFFEEDF).w move.w #$F9,d0 jsr PlayMusic clr.b ($FFFFF73A).w jsr SingleObjLoad bne.s return_30CF6A move.b #$89,(a1) return_30CF6A: ; ... rts ; --------------------------------------------------------------------------- loc_30CF6C: ; ... cmp.w #$3F8,($FFFFEE04).w bcs.s loc_30CF80 move.w #$3F8,($FFFFEECC).w move.w #$3F8,($FFFFEEFC).w loc_30CF80: ; ... addq.b #1,($FFFFF73A).w cmp.b #$5A,($FFFFF73A).w bcs.s return_30CF9A addq.b #2,($FFFFEEDF).w move.w #$93,d0 jsr PlayMusic return_30CF9A: ; ... rts ; --------------------------------------------------------------------------- loc_30CF9C: ; ... move.w ($FFFFEE00).w,($FFFFEEC8).w move.w ($FFFFEECA).w,($FFFFEEFA).w move.w ($FFFFEE00).w,($FFFFEEF8).w rts ; --------------------------------------------------------------------------- LevelEvents_SCZ: ; ... tst.b ($FFFFFE11).w bne.w return_30D036 moveq #0,d0 move.b ($FFFFEEDF).w,d0 move.w off_30CFC6(pc,d0.w),d0 jmp off_30CFC6(pc,d0.w) ; --------------------------------------------------------------------------- off_30CFC6: dc.w loc_30CFD0-off_30CFC6 ; 0 ; ... dc.w loc_30CFE2-off_30CFC6 ; 1 dc.w loc_30D002-off_30CFC6 ; 2 dc.w loc_30D01C-off_30CFC6 ; 3 dc.w return_30D034-off_30CFC6 ; 4 ; --------------------------------------------------------------------------- loc_30CFD0: ; ... move.w #1,($FFFFF736).w move.w #0,($FFFFF738).w addq.b #2,($FFFFEEDF).w rts ; --------------------------------------------------------------------------- loc_30CFE2: ; ... cmp.w #$1180,($FFFFEE00).w bcs.s return_30D000 move.w #$FFFF,($FFFFF736).w move.w #1,($FFFFF738).w move.w #$500,($FFFFEEC6).w addq.b #2,($FFFFEEDF).w return_30D000: ; ... rts ; --------------------------------------------------------------------------- loc_30D002: ; ... cmp.w #$500,($FFFFEE04).w bcs.s return_30D01A move.w #1,($FFFFF736).w move.w #0,($FFFFF738).w addq.b #2,($FFFFEEDF).w return_30D01A: ; ... rts ; --------------------------------------------------------------------------- loc_30D01C: ; ... cmp.w #$1400,($FFFFEE00).w bcs.s return_30D034 move.w #0,($FFFFF736).w move.w #0,($FFFFF738).w addq.b #2,($FFFFEEDF).w return_30D034: ; ... rts ; --------------------------------------------------------------------------- return_30D036: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_30D038: ; ... move.w ($FFFFFF90).w,d0 jmp PlayMusic ; End of function sub_30D038 ; =============== S U B R O U T I N E ======================================= sub_30D042: ; ... moveq #0,d0 move.b ($FFFFFE10).w,d0 lea (byte_310F8E).l,a2 move.b (a2,d0.w),d0 jsr LoadPLC moveq #$41,d0 jsr LoadPLC rts ; End of function sub_30D042 ; --------------------------------------------------------------------------- ; Object 11 - Bridge in Emerald Hill Zone and Hidden Palace Zone ; --------------------------------------------------------------------------- Obj11: ; ... btst #6,1(a0) bne.w loc_30D07A moveq #0,d0 move.b $24(a0),d0 move.w off_30D082(pc,d0.w),d1 jmp off_30D082(pc,d1.w) ; --------------------------------------------------------------------------- loc_30D07A: ; ... move.w #$180,d0 bra.w loc_312DBC ; --------------------------------------------------------------------------- off_30D082: dc.w loc_30D08A-off_30D082 ; 0 ; ... dc.w Obj11_Action-off_30D082 ; 1 dc.w loc_30D204-off_30D082 ; 2 dc.w Obj11_Action_HPZ-off_30D082 ; 3 ; --------------------------------------------------------------------------- loc_30D08A: ; ... addq.b #2,$24(a0) move.l #Map_Obj11_HPZ,4(a0) move.w #$43B6,2(a0) move.b #3,$18(a0) cmp.b #8,($FFFFFE10).w bne.s loc_30D0BC addq.b #4,$24(a0) move.l #Map_Obj11_EHZ,4(a0) move.w #$6300,2(a0) loc_30D0BC: ; ... bsr.w Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$80,$19(a0) move.w $C(a0),d2 move.w d2,$3C(a0) move.w 8(a0),d3 lea $28(a0),a2 moveq #0,d1 move.b (a2),d1 move.w d1,d0 lsr.w #1,d0 lsl.w #4,d0 sub.w d0,d3 swap d1 move.w #8,d1 bsr.s Obj11_MakeBridgeSegment move.w $28(a1),d0 subq.w #8,d0 move.w d0,8(a1) move.l a1,$30(a0) swap d1 subq.w #8,d1 bls.s loc_30D11C move.w d1,d4 bsr.s Obj11_MakeBridgeSegment move.l a1,$34(a0) move.w d4,d0 add.w d0,d0 add.w d4,d0 move.w $10(a1,d0.w),d0 subq.w #8,d0 move.w d0,8(a1) loc_30D11C: ; ... bra.s Obj11_Action ; =============== S U B R O U T I N E ======================================= Obj11_MakeBridgeSegment: ; ... jsr SingleObjLoad2 bne.s return_30D170 move.b 0(a0),0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.b 1(a0),1(a1) bset #6,1(a1) move.b #$40,$E(a1) move.b d1,$F(a1) subq.b #1,d1 lea $10(a1),a2 loc_30D160: ; ... move.w d3,(a2)+ move.w d2,(a2)+ move.w #0,(a2)+ add.w #$10,d3 dbf d1,loc_30D160 return_30D170: ; ... rts ; End of function Obj11_MakeBridgeSegment ; --------------------------------------------------------------------------- Obj11_Action: ; ... move.b $22(a0),d0 and.b #$18,d0 bne.s loc_30D188 tst.b $3E(a0) beq.s loc_30D1B4 subq.b #4,$3E(a0) bra.s loc_30D1B0 ; --------------------------------------------------------------------------- loc_30D188: ; ... and.b #$10,d0 beq.s loc_30D1A4 move.b $3F(a0),d0 sub.b $3B(a0),d0 beq.s loc_30D1A4 bcc.s loc_30D1A0 addq.b #1,$3F(a0) bra.s loc_30D1A4 ; --------------------------------------------------------------------------- loc_30D1A0: ; ... subq.b #1,$3F(a0) loc_30D1A4: ; ... cmp.b #$40,$3E(a0) beq.s loc_30D1B0 addq.b #4,$3E(a0) loc_30D1B0: ; ... bsr.w Obj11_Depress loc_30D1B4: ; ... moveq #0,d1 move.b $28(a0),d1 lsl.w #3,d1 move.w d1,d2 addq.w #8,d1 add.w d2,d2 moveq #8,d3 move.w 8(a0),d4 bsr.w sub_30D26A loc_30D1CC: ; ... tst.w ($FFFFFFDC).w beq.s loc_30D1D4 rts ; --------------------------------------------------------------------------- loc_30D1D4: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s loc_30D1E8 rts ; --------------------------------------------------------------------------- loc_30D1E8: ; ... move.l $30(a0),a1 bsr.w DeleteObject2 cmp.b #8,$28(a0) bls.s loc_30D200 move.l $34(a0),a1 bsr.w DeleteObject2 loc_30D200: ; ... bra.w DeleteObject ; --------------------------------------------------------------------------- loc_30D204: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- Obj11_Action_HPZ: ; ... move.b $22(a0),d0 and.b #$18,d0 bne.s loc_30D21E tst.b $3E(a0) beq.s loc_30D24A subq.b #4,$3E(a0) bra.s loc_30D246 ; --------------------------------------------------------------------------- loc_30D21E: ; ... and.b #$10,d0 beq.s loc_30D23A move.b $3F(a0),d0 sub.b $3B(a0),d0 beq.s loc_30D23A bcc.s loc_30D236 addq.b #1,$3F(a0) bra.s loc_30D23A ; --------------------------------------------------------------------------- loc_30D236: ; ... subq.b #1,$3F(a0) loc_30D23A: ; ... cmp.b #$40,$3E(a0) beq.s loc_30D246 addq.b #4,$3E(a0) loc_30D246: ; ... bsr.w Obj11_Depress loc_30D24A: ; ... moveq #0,d1 move.b $28(a0),d1 lsl.w #3,d1 move.w d1,d2 addq.w #8,d1 add.w d2,d2 moveq #8,d3 move.w 8(a0),d4 bsr.w sub_30D26A bsr.w sub_30D30C bra.w loc_30D1CC ; =============== S U B R O U T I N E ======================================= sub_30D26A: ; ... lea ($FFFFB040).w,a1 moveq #4,d6 moveq #$3B,d5 movem.l d1-d4,-(sp) bsr.s sub_30D284 movem.l (sp)+,d1-d4 lea ($FFFFB000).w,a1 subq.b #1,d6 moveq #$3F,d5 ; End of function sub_30D26A ; =============== S U B R O U T I N E ======================================= sub_30D284: ; ... btst d6,$22(a0) beq.s loc_30D2E8 btst #1,$22(a1) bne.s loc_30D2A4 moveq #0,d0 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.s loc_30D2A4 cmp.w d2,d0 bcs.s loc_30D2B2 loc_30D2A4: ; ... bclr #3,$22(a1) bclr d6,$22(a0) moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_30D2B2: ; ... lsr.w #4,d0 move.b d0,(a0,d5.w) move.l $30(a0),a2 cmp.w #8,d0 bcs.s loc_30D2CA move.l $34(a0),a2 sub.w #8,d0 loc_30D2CA: ; ... add.w d0,d0 move.w d0,d1 add.w d0,d0 add.w d1,d0 move.w $12(a2,d0.w),d0 subq.w #8,d0 moveq #0,d1 move.b $16(a1),d1 sub.w d1,d0 move.w d0,$C(a1) moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_30D2E8: ; ... move.w d1,-(sp) jsr sub_3151BA move.w (sp)+,d1 btst d6,$22(a0) beq.s return_30D30A moveq #0,d0 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 lsr.w #4,d0 move.b d0,(a0,d5.w) return_30D30A: ; ... rts ; End of function sub_30D284 ; =============== S U B R O U T I N E ======================================= sub_30D30C: ; ... moveq #0,d0 tst.w ($FFFFB010).w bne.s loc_30D31E move.b ($FFFFFE0F).w,d0 and.w #$1C,d0 lsr.w #1,d0 loc_30D31E: ; ... moveq #0,d2 move.b byte_30D34A+1(pc,d0.w),d2 swap d2 move.b byte_30D34A(pc,d0.w),d2 moveq #0,d0 tst.w ($FFFFB050).w bne.s loc_30D33C move.b ($FFFFFE0F).w,d0 and.w #$1C,d0 lsr.w #1,d0 loc_30D33C: ; ... moveq #0,d6 move.b byte_30D34A+1(pc,d0.w),d6 swap d6 move.b byte_30D34A(pc,d0.w),d6 bra.s loc_30D35A ; --------------------------------------------------------------------------- byte_30D34A: dc.b 1, 2, 1, 2, 1, 2, 1, 2, 0, 1; 0 ; ... dcb.b 5, 0 ; 0 dc.b 1 ; 5 ; --------------------------------------------------------------------------- loc_30D35A: ; ... moveq #-2,d3 moveq #-2,d4 move.b $22(a0),d0 and.b #8,d0 beq.s loc_30D36C move.b $3F(a0),d3 loc_30D36C: ; ... move.b $22(a0),d0 and.b #$10,d0 beq.s loc_30D37A move.b $3B(a0),d4 loc_30D37A: ; ... move.l $30(a0),a1 lea $45(a1),a2 lea $15(a1),a1 moveq #0,d1 move.b $28(a0),d1 subq.b #1,d1 moveq #0,d5 loc_30D390: ; ... moveq #0,d0 subq.w #1,d3 cmp.b d3,d5 bne.s loc_30D39A move.w d2,d0 loc_30D39A: ; ... addq.w #2,d3 cmp.b d3,d5 bne.s loc_30D3A2 move.w d2,d0 loc_30D3A2: ; ... subq.w #1,d3 subq.w #1,d4 cmp.b d4,d5 bne.s loc_30D3AC move.w d6,d0 loc_30D3AC: ; ... addq.w #2,d4 cmp.b d4,d5 bne.s loc_30D3B4 move.w d6,d0 loc_30D3B4: ; ... subq.w #1,d4 cmp.b d3,d5 bne.s loc_30D3C0 swap d2 move.w d2,d0 swap d2 loc_30D3C0: ; ... cmp.b d4,d5 bne.s loc_30D3CA swap d6 move.w d6,d0 swap d6 loc_30D3CA: ; ... move.b d0,(a1) addq.w #1,d5 addq.w #6,a1 cmp.w a2,a1 bne.s loc_30D3DC move.l $34(a0),a1 lea $15(a1),a1 loc_30D3DC: ; ... dbf d1,loc_30D390 rts ; End of function sub_30D30C ; =============== S U B R O U T I N E ======================================= Obj11_Depress: ; ... move.b $3E(a0),d0 jsr CalcSine move.w d0,d4 lea (byte_30D524).l,a4 moveq #0,d0 move.b $28(a0),d0 lsl.w #4,d0 moveq #0,d3 move.b $3F(a0),d3 move.w d3,d2 add.w d0,d3 moveq #0,d5 lea (Obj11_Depression_Offsets-$80).l,a5 move.b (a5,d3.w),d5 and.w #$F,d3 lsl.w #4,d3 lea (a4,d3.w),a3 move.l $30(a0),a1 lea $42(a1),a2 lea $12(a1),a1 loc_30D428: ; ... moveq #0,d0 move.b (a3)+,d0 addq.w #1,d0 mulu.w d5,d0 mulu.w d4,d0 swap d0 add.w $3C(a0),d0 move.w d0,(a1) addq.w #6,a1 cmp.w a2,a1 bne.s loc_30D448 move.l $34(a0),a1 lea $12(a1),a1 loc_30D448: ; ... dbf d2,loc_30D428 moveq #0,d0 move.b $28(a0),d0 moveq #0,d3 move.b $3F(a0),d3 addq.b #1,d3 sub.b d0,d3 neg.b d3 bmi.s return_30D492 move.w d3,d2 lsl.w #4,d3 lea (a4,d3.w),a3 add.w d2,a3 subq.w #1,d2 bcs.s return_30D492 loc_30D46E: ; ... moveq #0,d0 move.b -(a3),d0 addq.w #1,d0 mulu.w d5,d0 mulu.w d4,d0 swap d0 add.w $3C(a0),d0 move.w d0,(a1) addq.w #6,a1 cmp.w a2,a1 bne.s loc_30D48E move.l $34(a0),a1 lea $12(a1),a1 loc_30D48E: ; ... dbf d2,loc_30D46E return_30D492: ; ... rts ; End of function Obj11_Depress ; --------------------------------------------------------------------------- Obj11_Depression_Offsets:dc.b 2, 4, 6, 8, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0; 0 dc.b 2, 4, 6, 8, $A, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0; 16 dc.b 2, 4, 6, 8, $A, $A, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0; 32 dc.b 2, 4, 6, 8, $A, $C, $A, 8, 6, 4, 2, 0, 0, 0, 0, 0; 48 dc.b 2, 4, 6, 8, $A, $C, $C, $A, 8, 6, 4, 2, 0, 0, 0, 0; 64 dc.b 2, 4, 6, 8, $A, $C, $E, $C, $A, 8, 6, 4, 2, 0, 0, 0; 80 dc.b 2, 4, 6, 8, $A, $C, $E, $E, $C, $A, 8, 6, 4, 2, 0, 0; 96 dc.b 2, 4, 6, 8, $A, $C, $E,$10, $E, $C, $A, 8, 6, 4, 2, 0; 112 dc.b 2, 4, 6, 8, $A, $C, $E,$10,$10, $E, $C, $A, 8, 6, 4, 2; 128 byte_30D524: dc.b $FF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 0 ; ... dc.b $B5,$FF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 16 dc.b $7E,$DB,$FF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 32 dc.b $61,$B5,$EC,$FF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 48 dc.b $4A,$93,$CD,$F3,$FF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 64 dc.b $3E,$7E,$B0,$DB,$F6,$FF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 80 dc.b $38,$6D,$9D,$C5,$E4,$F8,$FF, 0, 0, 0, 0, 0, 0, 0, 0, 0; 96 dc.b $31,$61,$8E,$B5,$D4,$EC,$FB,$FF, 0, 0, 0, 0, 0, 0, 0, 0; 112 dc.b $2B,$56,$7E,$A2,$C1,$DB,$EE,$FB,$FF, 0, 0, 0, 0, 0, 0, 0; 128 dc.b $25,$4A,$73,$93,$B0,$CD,$E1,$F3,$FC,$FF, 0, 0, 0, 0, 0, 0; 144 dc.b $1F,$44,$67,$88,$A7,$BD,$D4,$E7,$F4,$FD,$FF, 0, 0, 0, 0, 0; 160 dc.b $1F,$3E,$5C,$7E,$98,$B0,$C9,$DB,$EA,$F6,$FD,$FF, 0, 0, 0, 0; 176 dc.b $19,$38,$56,$73,$8E,$A7,$BD,$D1,$E1,$EE,$F8,$FE,$FF, 0, 0, 0; 192 dc.b $19,$38,$50,$6D,$83,$9D,$B0,$C5,$D8,$E4,$F1,$F8,$FE,$FF, 0, 0; 208 dc.b $19,$31,$4A,$67,$7E,$93,$A7,$BD,$CD,$DB,$E7,$F3,$F9,$FE,$FF, 0; 224 dc.b $19,$31,$4A,$61,$78,$8E,$A2,$B5,$C5,$D4,$E1,$EC,$F4,$FB,$FE,$FF; 240 Map_Obj11_EHZ: dc.w byte_30D630-Map_Obj11_EHZ ; 0 ; ... dc.w byte_30D638-Map_Obj11_EHZ ; 1 dc.w byte_30D640-Map_Obj11_EHZ ; 2 dc.w byte_30D648-Map_Obj11_EHZ ; 3 dc.w byte_30D650-Map_Obj11_EHZ ; 4 dc.w byte_30D658-Map_Obj11_EHZ ; 5 byte_30D630: dc.b 0, 1,$F8, 5, 0, 0,$FF,$F8; 0 ; ... byte_30D638: dc.b 0, 1,$F8, 5, 0, 4,$FF,$F8; 0 ; ... byte_30D640: dc.b 0, 1,$F8, 5, 0, 8,$FF,$F8; 0 ; ... byte_30D648: dc.b 0, 1,$F4, 2, 0, $C,$FF,$FC; 0 ; ... byte_30D650: dc.b 0, 1,$F4, 2, 0, $F,$FF,$FC; 0 ; ... byte_30D658: dc.b 0, 1,$F4, 2, 0,$12,$FF,$FC; 0 ; ... Map_Obj11_HPZ: dc.w byte_30D664-Map_Obj11_HPZ ; 0 ; ... dc.w byte_30D66C-Map_Obj11_HPZ ; 1 byte_30D664: dc.b 0, 1,$F8, 5, 0, 4,$FF,$F8; 0 ; ... byte_30D66C: dc.b 0, 1,$F8, 5, 0, 0,$FF,$F8; 0 ; ... ; --------------------------------------------------------------------------- ; Object 15 - Swinging platform from Aquatic Ruin Zone ; --------------------------------------------------------------------------- Obj15: ; ... btst #6,1(a0) bne.w loc_30D68C moveq #0,d0 move.b $24(a0),d0 move.w off_30D694(pc,d0.w),d1 jmp off_30D694(pc,d1.w) ; --------------------------------------------------------------------------- loc_30D68C: ; ... move.w #$200,d0 bra.w loc_312DBC ; --------------------------------------------------------------------------- off_30D694: dc.w loc_30D6A2-off_30D694 ; 0 ; ... dc.w loc_30D82A-off_30D694 ; 1 dc.w loc_30DA18-off_30D694 ; 2 dc.w loc_30DA1C-off_30D694 ; 3 dc.w loc_30DAD8-off_30D694 ; 4 dc.w loc_30DAE0-off_30D694 ; 5 dc.w loc_30DB48-off_30D694 ; 6 ; --------------------------------------------------------------------------- loc_30D6A2: ; ... addq.b #2,$24(a0) move.l #Map_Obj15,4(a0) move.w #$43E3,2(a0) move.b #4,1(a0) move.b #3,$18(a0) move.b #$20,$19(a0) move.b #$10,$16(a0) move.w $C(a0),$38(a0) move.w 8(a0),$3A(a0) cmp.b #$B,($FFFFFE10).w bne.s loc_30D6FA move.l #Map_Obj15_Obj7A,4(a0) move.w #0,2(a0) move.b #$18,$19(a0) move.b #8,$16(a0) loc_30D6FA: ; ... cmp.b #$F,($FFFFFE10).w bne.s loc_30D71C move.l #Map_Obj15_Obj83,4(a0) move.w #0,2(a0) move.b #$20,$19(a0) move.b #8,$16(a0) loc_30D71C: ; ... bsr.w Adjust2PArtPointer2_Useless moveq #0,d1 move.b $28(a0),d1 bpl.s loc_30D72C addq.b #4,$24(a0) loc_30D72C: ; ... move.b d1,d4 and.b #$70,d4 and.w #$F,d1 move.w 8(a0),d2 move.w $C(a0),d3 jsr SingleObjLoad2 bne.w loc_30D7FE move.b 0(a0),0(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.b #4,1(a1) cmp.b #$20,d4 bne.s loc_30D7A0 move.b #4,$24(a1) move.b #4,$18(a1) move.b #$10,$19(a1) move.b #$50,$16(a1) bset #4,1(a1) move.b #3,$1A(a1) move.w d2,8(a1) add.w #$40,d3 move.w d3,$C(a1) add.w #$48,d3 move.w d3,$C(a0) bra.s loc_30D7FA ; --------------------------------------------------------------------------- loc_30D7A0: ; ... bset #6,1(a1) move.b #$48,$E(a1) move.b d1,$F(a1) subq.b #1,d1 lea $10(a1),a2 loc_30D7B6: ; ... move.w d2,(a2)+ move.w d3,(a2)+ move.w #1,(a2)+ add.w #$10,d3 dbf d1,loc_30D7B6 move.b #2,$15(a1) move.w $28(a1),8(a1) move.w $2A(a1),$C(a1) move.w d2,$28(a1) move.w d3,$2A(a1) move.b #1,$B(a1) add.w #8,d3 move.w d3,$C(a0) move.b #$50,$14(a1) bset #4,1(a1) loc_30D7FA: ; ... move.l a1,$30(a0) loc_30D7FE: ; ... move.w #$8000,$26(a0) move.w #0,$3E(a0) move.b $28(a0),d1 and.w #$70,d1 move.b d1,$28(a0) cmp.b #$40,d1 bne.s loc_30D82A move.l #Map_Obj15_B,4(a0) move.b #$A7,$20(a0) loc_30D82A: ; ... move.w 8(a0),-(sp) bsr.w sub_30D84C moveq #0,d1 move.b $19(a0),d1 moveq #0,d3 move.b $16(a0),d3 addq.b #1,d3 move.w (sp)+,d4 jsr sub_315120 bra.w loc_30D9EA ; =============== S U B R O U T I N E ======================================= sub_30D84C: ; ... moveq #0,d0 moveq #0,d1 move.b ($FFFFFE78).w,d0 move.b $28(a0),d1 beq.s loc_30D89E cmp.b #$10,d1 bne.s loc_30D87A cmp.b #$3F,d0 beq.s loc_30D86C bcc.s loc_30D89E moveq #$40,d0 bra.s loc_30D89E ; --------------------------------------------------------------------------- loc_30D86C: ; ... move.w #$D7,d0 jsr PlaySoundLocal moveq #$40,d0 bra.s loc_30D89E ; --------------------------------------------------------------------------- loc_30D87A: ; ... cmp.b #$20,d1 beq.w return_30D94A cmp.b #$30,d1 bne.s loc_30D894 cmp.b #$41,d0 beq.s loc_30D86C bcs.s loc_30D89E moveq #$40,d0 bra.s loc_30D89E ; --------------------------------------------------------------------------- loc_30D894: ; ... cmp.b #$40,d1 bne.s loc_30D89E bsr.w sub_30D94C loc_30D89E: ; ... move.b $2E(a0),d1 cmp.b d0,d1 beq.w return_30D94A move.b d0,$2E(a0) move.w #$80,d1 btst #0,$22(a0) beq.s loc_30D8BC neg.w d0 add.w d1,d0 loc_30D8BC: ; ... jsr CalcSine move.w $38(a0),d2 move.w $3A(a0),d3 moveq #0,d6 move.l $30(a0),a1 move.b $F(a1),d6 subq.w #1,d6 bcs.s return_30D94A swap d0 swap d1 asr.l #4,d0 asr.l #4,d1 moveq #0,d4 moveq #0,d5 lea $10(a1),a2 loc_30D8E8: ; ... movem.l d4-d5,-(sp) swap d4 swap d5 add.w d2,d4 add.w d3,d5 move.w d5,(a2)+ move.w d4,(a2)+ movem.l (sp)+,d4-d5 add.l d0,d4 add.l d1,d5 addq.w #2,a2 dbf d6,loc_30D8E8 movem.l d4-d5,-(sp) swap d4 swap d5 add.w d2,d4 add.w d3,d5 move.w $28(a1),d2 move.w $2A(a1),d3 move.w d5,$28(a1) move.w d4,$2A(a1) move.w d2,8(a1) move.w d3,$C(a1) movem.l (sp)+,d4-d5 asr.l #1,d0 asr.l #1,d1 add.l d0,d4 add.l d1,d5 swap d4 swap d5 add.w $38(a0),d4 add.w $3A(a0),d5 move.w d4,$C(a0) move.w d5,8(a0) return_30D94A: ; ... rts ; End of function sub_30D84C ; =============== S U B R O U T I N E ======================================= sub_30D94C: ; ... tst.w $36(a0) beq.s loc_30D95A subq.w #1,$36(a0) bra.w loc_30D9E4 ; --------------------------------------------------------------------------- loc_30D95A: ; ... tst.b $34(a0) bne.s loc_30D980 move.w ($FFFFB008).w,d0 sub.w $3A(a0),d0 add.w #$20,d0 cmp.w #$40,d0 bcc.s loc_30D9E4 tst.w ($FFFFFE08).w bne.w loc_30D9E4 move.b #1,$34(a0) loc_30D980: ; ... tst.b $3D(a0) beq.s loc_30D9B6 move.w $3E(a0),d0 add.w #8,d0 move.w d0,$3E(a0) add.w d0,$26(a0) cmp.w #$200,d0 bne.s loc_30D9E4 move.w #0,$3E(a0) move.w #$8000,$26(a0) move.b #0,$3D(a0) move.w #$3C,$36(a0) bra.s loc_30D9E4 ; --------------------------------------------------------------------------- loc_30D9B6: ; ... move.w $3E(a0),d0 sub.w #8,d0 move.w d0,$3E(a0) add.w d0,$26(a0) cmp.w #$FE00,d0 bne.s loc_30D9E4 move.w #0,$3E(a0) move.w #$4000,$26(a0) move.b #1,$3D(a0) move.w #$3C,$36(a0) loc_30D9E4: ; ... move.b $26(a0),d0 rts ; End of function sub_30D94C ; --------------------------------------------------------------------------- loc_30D9EA: ; ... tst.w ($FFFFFFDC).w beq.s loc_30D9F4 bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30D9F4: ; ... move.w $3A(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_30DA0C bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30DA0C: ; ... move.l $30(a0),a1 bsr.w DeleteObject2 bra.w DeleteObject ; --------------------------------------------------------------------------- loc_30DA18: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30DA1C: ; ... move.w 8(a0),-(sp) bsr.w sub_30D84C moveq #0,d1 move.b $19(a0),d1 moveq #0,d3 move.b $16(a0),d3 addq.b #1,d3 move.w (sp)+,d4 jsr sub_315120 move.b $22(a0),d0 and.b #$18,d0 beq.w loc_30DAD4 tst.b ($FFFFFE78).w bne.w loc_30DAD4 bsr.w SingleObjLoad2 bne.s loc_30DAC4 moveq #0,d0 move.w #$F,d1 loc_30DA5A: ; ... move.l (a0,d0.w),(a1,d0.w) addq.w #4,d0 dbf d1,loc_30DA5A move.b #$A,$24(a1) cmp.b #$F,($FFFFFE10).w bne.s loc_30DA78 addq.b #2,$24(a1) loc_30DA78: ; ... move.w #$200,$10(a1) btst #0,$22(a0) beq.s loc_30DA8A neg.w $10(a1) loc_30DA8A: ; ... bset #1,$22(a1) move.w a0,d0 sub.w #$B000,d0 lsr.w #6,d0 and.w #$7F,d0 move.w a1,d1 sub.w #$B000,d1 lsr.w #6,d1 and.w #$7F,d1 lea ($FFFFB000).w,a1 cmp.b $3D(a1),d0 bne.s loc_30DAB6 move.b d1,$3D(a1) loc_30DAB6: ; ... lea ($FFFFB040).w,a1 cmp.b $3D(a1),d0 bne.s loc_30DAC4 move.b d1,$3D(a1) loc_30DAC4: ; ... move.b #3,$1A(a0) addq.b #2,$24(a0) and.b #$E7,$22(a0) loc_30DAD4: ; ... bra.w loc_30D9EA ; --------------------------------------------------------------------------- loc_30DAD8: ; ... bsr.w sub_30D84C bra.w loc_30D9EA ; --------------------------------------------------------------------------- loc_30DAE0: ; ... move.w 8(a0),-(sp) btst #1,$22(a0) beq.s loc_30DB1E bsr.w ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) cmp.w #$720,$C(a0) bcs.s loc_30DB2E move.w #$720,$C(a0) bclr #1,$22(a0) move.w #0,$10(a0) move.w #0,$12(a0) move.w $C(a0),$38(a0) bra.s loc_30DB2E ; --------------------------------------------------------------------------- loc_30DB1E: ; ... moveq #0,d0 move.b ($FFFFFE74).w,d0 lsr.w #1,d0 add.w $38(a0),d0 move.w d0,$C(a0) loc_30DB2E: ; ... moveq #0,d1 move.b $19(a0),d1 moveq #0,d3 move.b $16(a0),d3 addq.b #1,d3 move.w (sp)+,d4 jsr sub_315120 bra.w MarkObjGone ; --------------------------------------------------------------------------- loc_30DB48: ; ... move.w 8(a0),-(sp) bsr.w ObjectMove ; AKA SpeedToPos in Sonic 1 btst #1,$22(a0) beq.s loc_30DB84 add.w #$18,$12(a0) move.w ($FFFFF648).w,d0 cmp.w $C(a0),d0 bhi.s loc_30DBB4 move.w d0,$C(a0) move.w d0,$38(a0) bclr #1,$22(a0) move.w #$100,$10(a0) move.w #0,$12(a0) bra.s loc_30DBB4 ; --------------------------------------------------------------------------- loc_30DB84: ; ... moveq #0,d0 move.b ($FFFFFE74).w,d0 lsr.w #1,d0 add.w $38(a0),d0 move.w d0,$C(a0) tst.w $10(a0) beq.s loc_30DBB4 moveq #0,d3 move.b $19(a0),d3 jsr ObjCheckLeftWallDist tst.w d1 bpl.s loc_30DBB4 add.w d1,8(a0) move.w #0,$10(a0) loc_30DBB4: ; ... moveq #0,d1 move.b $19(a0),d1 moveq #0,d3 move.b $16(a0),d3 addq.b #1,d3 move.w (sp)+,d4 jsr sub_315120 bra.w MarkObjGone ; --------------------------------------------------------------------------- Map_Obj15: dc.w byte_30DBD6-Map_Obj15 ; 0 ; ... dc.w byte_30DBF0-Map_Obj15 ; 1 dc.w byte_30DBF0-Map_Obj15 ; 2 dc.w byte_30DBF8-Map_Obj15 ; 3 byte_30DBD6: dc.b 0, 4,$F0, $D,$20, 4,$FF,$E0,$F0, $D,$20, $C, 0, 0, 0, $D,$20,$14,$FF,$E0, 0, $D,$28,$14, 0, 0; 0 ; ... byte_30DBF0: dc.b 0, 1,$F8, 5, 0, 0,$FF,$F8; 0 ; ... byte_30DBF8: dc.b 0, 0 ; 0 ; ... Map_Obj15_Obj83:dc.w byte_30DC02-Map_Obj15_Obj83 ; 0 ; ... dc.w byte_30DC10-Map_Obj15_Obj83 ; 1 dc.w byte_30DC18-Map_Obj15_Obj83 ; 2 dc.w byte_30DC26-Map_Obj15_Obj83 ; 3 byte_30DC02: dc.b 0, 2,$F8, $D,$60,$55,$FF,$E0,$F8, $D,$60,$55, 0, 0; 0 ; ... byte_30DC10: dc.b 0, 1,$F8, 5,$20,$51,$FF,$F8; 0 ; ... byte_30DC18: dc.b 0, 2,$F0, $E,$40,$45,$FF,$F0,$F8, 5,$20,$51,$FF,$F8; 0 ; ... byte_30DC26: dc.b 0, 0 ; 0 ; ... Map_Obj15_Obj7A:dc.w byte_30DC30-Map_Obj15_Obj7A ; 0 ; ... dc.w byte_30DC3E-Map_Obj15_Obj7A ; 1 dc.w byte_30DC46-Map_Obj15_Obj7A ; 2 dc.w byte_30DC54-Map_Obj15_Obj7A ; 3 byte_30DC30: dc.b 0, 2,$F8, 9,$60,$60,$FF,$E8,$F8, 9,$68,$60, 0, 0; 0 ; ... byte_30DC3E: dc.b 0, 1,$F8, 5,$60,$66,$FF,$F8; 0 ; ... byte_30DC46: dc.b 0, 2,$E8, 5,$40,$6A,$FF,$F4,$F8, $B,$40,$6E,$FF,$F4; 0 ; ... byte_30DC54: dc.b 0, $A,$A8, 5,$40,$6A,$FF,$F4,$B8, $B,$40,$6E,$FF; 0 ; ... dc.b $F4,$C8, 5,$60,$66,$FF,$F8,$D8, 5,$60,$66,$FF,$F8; 13 dc.b $E8, 5,$60,$66,$FF,$F8,$F8, 5,$60,$66,$FF,$F8, 8; 26 dc.b 5,$60,$66,$FF,$F8,$18, 5,$60,$66,$FF,$F8,$28, 5; 39 dc.b $60,$66,$FF,$F8,$38, 5,$60,$66,$FF,$F8; 52 Map_Obj15_B: dc.w byte_30DC98-Map_Obj15_B ; 0 ; ... dc.w byte_30DC3E-Map_Obj15_B dc.w byte_30DC46-Map_Obj15_B byte_30DC98: dc.b 0, 2,$F8, $D,$60,$58,$FF,$E0,$F8, $D,$68,$58, 0, 0; 0 ; ... ; --------------------------------------------------------------------------- ; Object 17 - GHZ rotating log helix spikes (from Sonic 1, unused) ; the programming of this was modified somewhat between Sonic 1 and Sonic 2 ; --------------------------------------------------------------------------- Obj17_Unused: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30DCB4(pc,d0.w),d1 jmp off_30DCB4(pc,d1.w) ; --------------------------------------------------------------------------- off_30DCB4: dc.w loc_30DCBA-off_30DCB4 ; 0 ; ... dc.w loc_30DD7E-off_30DCB4 ; 1 dc.w loc_30DDE0-off_30DCB4 ; 2 ; --------------------------------------------------------------------------- loc_30DCBA: ; ... addq.b #2,$24(a0) move.l #Map_Obj17,4(a0) move.w #$4398,2(a0) bsr.w Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #3,$18(a0) move.b #8,$19(a0) move.w $C(a0),d2 move.w 8(a0),d3 move.b 0(a0),d4 lea $28(a0),a2 moveq #0,d1 move.b (a2),d1 move.b #0,(a2)+ move.w d1,d0 lsr.w #1,d0 lsl.w #4,d0 sub.w d0,d3 subq.b #2,d1 bcs.s loc_30DD7E moveq #0,d6 loc_30DD08: ; ... bsr.w SingleObjLoad2 bne.s loc_30DD7E addq.b #1,$28(a0) move.w a1,d5 sub.w #$B000,d5 lsr.w #6,d5 and.w #$7F,d5 move.b d5,(a2)+ move.b #4,$24(a1) move.b d4,0(a1) move.w d2,$C(a1) move.w d3,8(a1) move.l 4(a0),4(a1) move.w #$4398,2(a1) bsr.w Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #3,$18(a1) move.b #8,$19(a1) move.b d6,$3E(a1) addq.b #1,d6 and.b #7,d6 add.w #$10,d3 cmp.w 8(a0),d3 bne.s loc_30DD7A move.b d6,$3E(a0) addq.b #1,d6 and.b #7,d6 add.w #$10,d3 addq.b #1,$28(a0) loc_30DD7A: ; ... dbf d1,loc_30DD08 loc_30DD7E: ; ... bsr.w sub_30DDC0 move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_30DD9A bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30DD9A: ; ... moveq #0,d2 lea $28(a0),a2 move.b (a2)+,d2 subq.b #2,d2 bcs.s loc_30DDBC loc_30DDA6: ; ... moveq #0,d0 move.b (a2)+,d0 lsl.w #6,d0 add.l #-$5000,d0 move.l d0,a1 bsr.w DeleteObject2 dbf d2,loc_30DDA6 loc_30DDBC: ; ... bra.w DeleteObject ; =============== S U B R O U T I N E ======================================= sub_30DDC0: ; ... move.b ($FFFFFEA1).w,d0 move.b #0,$20(a0) add.b $3E(a0),d0 and.b #7,d0 move.b d0,$1A(a0) bne.s return_30DDDE move.b #%10000100,$20(a0) return_30DDDE: ; ... rts ; End of function sub_30DDC0 ; --------------------------------------------------------------------------- loc_30DDE0: ; ... bsr.w sub_30DDC0 bra.w DisplaySprite ; --------------------------------------------------------------------------- Map_Obj17: dc.w byte_30DDF8-Map_Obj17 ; 0 ; ... dc.w byte_30DE00-Map_Obj17 ; 1 dc.w byte_30DE08-Map_Obj17 ; 2 dc.w byte_30DE10-Map_Obj17 ; 3 dc.w byte_30DE18-Map_Obj17 ; 4 dc.w byte_30DE20-Map_Obj17 ; 5 dc.w byte_30DE30-Map_Obj17 ; 6 dc.w byte_30DE28-Map_Obj17 ; 7 byte_30DDF8: dc.b 0, 1,$F0, 1, 0, 0,$FF,$FC; 0 ; ... byte_30DE00: dc.b 0, 1,$F5, 5, 0, 2,$FF,$F8; 0 ; ... byte_30DE08: dc.b 0, 1,$F8, 5, 0, 6,$FF,$F8; 0 ; ... byte_30DE10: dc.b 0, 1,$FB, 5, 0, $A,$FF,$F8; 0 ; ... byte_30DE18: dc.b 0, 1, 0, 1, 0, $E,$FF,$FC; 0 ; ... byte_30DE20: dc.b 0, 1, 4, 0, 0,$10,$FF,$FD; 0 ; ... byte_30DE28: dc.b 0, 1,$F4, 0, 0,$11,$FF,$FD; 0 ; ... byte_30DE30: dc.b 0, 0 ; 0 ; ... ; --------------------------------------------------------------------------- Obj18: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30DE40(pc,d0.w),d1 jmp off_30DE40(pc,d1.w) ; --------------------------------------------------------------------------- off_30DE40: dc.w loc_30DE54-off_30DE40 ; 0 ; ... dc.w loc_30DEF0-off_30DE40 ; 1 dc.w loc_30DF58-off_30DE40 ; 2 dc.w loc_30DF30-off_30DE40 ; 3 dc.w loc_30DF5C-off_30DE40 ; 4 word_30DE4A: dc.w $2000,$2001,$2002,$4003,$3004; 0 ; --------------------------------------------------------------------------- loc_30DE54: ; ... addq.b #2,$24(a0) moveq #0,d0 loc_30DE5A: move.b $28(a0),d0 lsr.w #3,d0 and.w #$E,d0 lea word_30DE4A(pc,d0.w),a2 move.b (a2)+,$19(a0) move.b (a2)+,$1A(a0) move.l #Map_Obj18_A,4(a0) move.w #$4000,2(a0) cmp.b #$F,($FFFFFE10).w bne.s loc_30DE94 move.l #Map_Obj18_B,4(a0) move.w #$4000,2(a0) loc_30DE94: ; ... bsr.w Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #4,$18(a0) move.w $C(a0),$2C(a0) move.w $C(a0),$34(a0) move.w 8(a0),$32(a0) move.w #$80,$26(a0) tst.b $28(a0) bpl.s loc_30DEEA addq.b #6,$24(a0) and.b #$F,$28(a0) move.b #$30,$16(a0) cmp.b #$F,($FFFFFE10).w bne.s loc_30DEE0 move.b #$28,$16(a0) loc_30DEE0: ; ... bset #4,1(a0) bra.w loc_30DF5C ; --------------------------------------------------------------------------- loc_30DEEA: ; ... and.b #$F,$28(a0) loc_30DEF0: ; ... move.b $22(a0),d0 and.b #$18,d0 bne.s loc_30DF06 tst.b $38(a0) beq.s loc_30DF12 subq.b #4,$38(a0) bra.s loc_30DF12 ; --------------------------------------------------------------------------- loc_30DF06: ; ... cmp.b #$40,$38(a0) beq.s loc_30DF12 addq.b #4,$38(a0) loc_30DF12: ; ... move.w 8(a0),-(sp) bsr.w loc_30DFC4 bsr.w sub_30DFA8 moveq #0,d1 move.b $19(a0),d1 moveq #8,d3 move.w (sp)+,d4 jsr PlatformObject bra.s loc_30DF38 ; --------------------------------------------------------------------------- loc_30DF30: ; ... bsr.w loc_30DFC4 bsr.w sub_30DFA8 loc_30DF38: ; ... tst.w ($FFFFFFDC).w beq.s loc_30DF42 bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30DF42: ; ... move.w $32(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s loc_30DF58 bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30DF58: ; ... bra.w DeleteObject ; --------------------------------------------------------------------------- loc_30DF5C: ; ... move.b $22(a0),d0 and.b #$18,d0 bne.s loc_30DF72 tst.b $38(a0) beq.s loc_30DF7E subq.b #4,$38(a0) bra.s loc_30DF7E ; --------------------------------------------------------------------------- loc_30DF72: ; ... cmp.b #$40,$38(a0) beq.s loc_30DF7E addq.b #4,$38(a0) loc_30DF7E: ; ... move.w 8(a0),-(sp) bsr.w loc_30DFC4 bsr.w sub_30DFA8 moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 move.w (sp)+,d4 jsr SolidObject bra.s loc_30DF38 ; =============== S U B R O U T I N E ======================================= sub_30DFA8: ; ... move.b $38(a0),d0 jsr CalcSine move.w #$400,d1 muls.w d1,d0 swap d0 add.w $2C(a0),d0 move.w d0,$C(a0) rts ; End of function sub_30DFA8 ; --------------------------------------------------------------------------- loc_30DFC4: ; ... moveq #0,d0 move.b $28(a0),d0 and.w #$F,d0 add.w d0,d0 move.w off_30DFD8(pc,d0.w),d1 jmp off_30DFD8(pc,d1.w) ; --------------------------------------------------------------------------- off_30DFD8: dc.w return_30DFF4-off_30DFD8 ; 0 ; ... dc.w loc_30E006-off_30DFD8 ; 1 dc.w loc_30E04C-off_30DFD8 ; 2 dc.w loc_30E064-off_30DFD8 ; 3 dc.w loc_30E08E-off_30DFD8 ; 4 dc.w loc_30DFF6-off_30DFD8 ; 5 dc.w loc_30E03C-off_30DFD8 ; 6 dc.w loc_30E104-off_30DFD8 ; 7 dc.w loc_30E130-off_30DFD8 ; 8 dc.w return_30DFF4-off_30DFD8 ; 9 dc.w loc_30E148-off_30DFD8 ; 10 dc.w loc_30E162-off_30DFD8 ; 11 dc.w loc_30E02E-off_30DFD8 ; 12 dc.w loc_30E01E-off_30DFD8 ; 13 ; --------------------------------------------------------------------------- return_30DFF4: ; ... rts ; --------------------------------------------------------------------------- loc_30DFF6: ; ... move.w $32(a0),d0 move.b $26(a0),d1 neg.b d1 add.b #$40,d1 bra.s loc_30E012 ; --------------------------------------------------------------------------- loc_30E006: ; ... move.w $32(a0),d0 move.b $26(a0),d1 sub.b #$40,d1 loc_30E012: ; ... ext.w d1 add.w d1,d0 move.w d0,8(a0) bra.w loc_30E17A ; --------------------------------------------------------------------------- loc_30E01E: ; ... move.w $34(a0),d0 move.b ($FFFFFE6C).w,d1 neg.b d1 add.b #$30,d1 bra.s loc_30E058 ; --------------------------------------------------------------------------- loc_30E02E: ; ... move.w $34(a0),d0 move.b ($FFFFFE6C).w,d1 sub.b #$30,d1 bra.s loc_30E058 ; --------------------------------------------------------------------------- loc_30E03C: ; ... move.w $34(a0),d0 move.b $26(a0),d1 neg.b d1 add.b #$40,d1 bra.s loc_30E058 ; --------------------------------------------------------------------------- loc_30E04C: ; ... move.w $34(a0),d0 move.b $26(a0),d1 sub.b #$40,d1 loc_30E058: ; ... ext.w d1 add.w d1,d0 move.w d0,$2C(a0) bra.w loc_30E17A ; --------------------------------------------------------------------------- loc_30E064: ; ... tst.w $3A(a0) bne.s loc_30E07C move.b $22(a0),d0 and.b #$18,d0 beq.s return_30E07A move.w #$1E,$3A(a0) return_30E07A: ; ... rts ; --------------------------------------------------------------------------- loc_30E07C: ; ... subq.w #1,$3A(a0) bne.s return_30E07A move.w #$20,$3A(a0) addq.b #1,$28(a0) rts ; --------------------------------------------------------------------------- loc_30E08E: ; ... tst.w $3A(a0) beq.s loc_30E0BC subq.w #1,$3A(a0) bne.s loc_30E0BC bclr #3,$22(a0) beq.s loc_30E0A8 lea ($FFFFB000).w,a1 bsr.s sub_30E0EA loc_30E0A8: ; ... bclr #4,$22(a0) beq.s loc_30E0B6 lea ($FFFFB040).w,a1 bsr.s sub_30E0EA loc_30E0B6: ; ... move.b #6,$24(a0) loc_30E0BC: ; ... move.l $2C(a0),d3 move.w $12(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d3,$2C(a0) add.w #$38,$12(a0) move.w ($FFFFEECE).w,d0 add.w #$120,d0 cmp.w $2C(a0),d0 bcc.s return_30E0E8 move.b #4,$24(a0) return_30E0E8: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_30E0EA: ; ... bset #1,$22(a1) bclr #3,$22(a1) move.b #2,$24(a1) move.w $12(a0),$12(a1) rts ; End of function sub_30E0EA ; --------------------------------------------------------------------------- loc_30E104: ; ... tst.w $3A(a0) bne.s loc_30E124 lea ($FFFFF7E0).w,a2 moveq #0,d0 move.b $28(a0),d0 lsr.w #4,d0 tst.b (a2,d0.w) beq.s return_30E122 move.w #$3C,$3A(a0) return_30E122: ; ... rts ; --------------------------------------------------------------------------- loc_30E124: ; ... subq.w #1,$3A(a0) bne.s return_30E122 addq.b #1,$28(a0) rts ; --------------------------------------------------------------------------- loc_30E130: ; ... subq.w #2,$2C(a0) move.w $34(a0),d0 sub.w #$200,d0 cmp.w $2C(a0),d0 bne.s return_30E146 clr.b $28(a0) return_30E146: ; ... rts ; --------------------------------------------------------------------------- loc_30E148: ; ... move.w $34(a0),d0 move.b $26(a0),d1 sub.b #$40,d1 ext.w d1 asr.w #1,d1 add.w d1,d0 move.w d0,$2C(a0) bra.w loc_30E17A ; --------------------------------------------------------------------------- loc_30E162: ; ... move.w $34(a0),d0 move.b $26(a0),d1 neg.b d1 add.b #$40,d1 ext.w d1 asr.w #1,d1 add.w d1,d0 move.w d0,$2C(a0) loc_30E17A: ; ... move.b ($FFFFFE78).w,$26(a0) rts ; --------------------------------------------------------------------------- Map_Obj18_A: dc.w byte_30E186-Map_Obj18_A,byte_30E194-Map_Obj18_A; 0 ; ... byte_30E186: dc.b 0, 2,$F4, $F, 0,$56,$FF,$E0,$F4, $F, 8,$56, 0, 0; 0 ; ... byte_30E194: dc.b 0, 8,$CC, 7, 0, $A,$FF,$E0,$CC, $D, 0,$12,$FF,$F0,$DC, $D, 0,$1A,$FF,$F0,$CC, 7, 0,$22, 0,$10,$EC, $F, 0,$2A,$FF,$E0,$EC, $F, 8,$2A, 0, 0, $C, $F, 0,$3A,$FF,$E0, $C, $F, 8,$3A, 0, 0; 0 ; ... Map_Obj18_B: dc.w byte_30E1CA-Map_Obj18_B,byte_30E1E4-Map_Obj18_B; 0 ; ... byte_30E1CA: dc.b 0, 4,$F0, $E, 0, 1,$FF,$E0,$F0, $E, 8, 1, 0, 0, 8, $E, 0,$2D,$FF,$E0, 8, $E, 0,$39, 0, 0; 0 ; ... byte_30E1E4: dc.b 0, 6,$D0, $E, 0, 1,$FF,$E0,$D0, $E, 8, 1, 0, 0,$E8, $F, 0, $D,$FF,$E0,$E8, $F, 0,$1D, 0, 0, 8, $F, 0, $D,$FF,$E0, 8, $F, 0,$1D, 0, 0; 0 ; ... ; --------------------------------------------------------------------------- Obj1A: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30E218(pc,d0.w),d1 jmp off_30E218(pc,d1.w) ; --------------------------------------------------------------------------- off_30E218: dc.w loc_30E21E-off_30E218 ; 0 ; ... dc.w loc_30E2CA-off_30E218 ; 1 dc.w loc_30E304-off_30E218 ; 2 ; --------------------------------------------------------------------------- loc_30E21E: ; ... addq.b #2,$24(a0) move.l #Map_Obj1A,4(a0) move.w #$4000,2(a0) bsr.w Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #4,$18(a0) move.b #7,$38(a0) move.b $28(a0),$1A(a0) move.l #byte_30E544,$34(a0) cmp.b #8,($FFFFFE10).w bne.s loc_30E286 move.l #byte_30E89A,4(a0) move.w #$434A,2(a0) bsr.w Adjust2PArtPointer2_Useless move.b #$30,$19(a0) move.l #byte_30E86A,$3C(a0) move.l #byte_30E55D,$34(a0) bra.s loc_30E2CA ; --------------------------------------------------------------------------- loc_30E286: ; ... cmp.b #$A,($FFFFFE10).w bne.s loc_30E2B0 move.l #Map_Obj1F_B,4(a0) move.w #$639D,2(a0) bsr.w Adjust2PArtPointer2_Useless move.b #$40,$19(a0) move.l #byte_30E85A,$3C(a0) bra.s loc_30E2CA ; --------------------------------------------------------------------------- loc_30E2B0: ; ... move.l #byte_30E58E,$3C(a0) move.b #$34,$19(a0) move.b #$38,$16(a0) bset #4,1(a0) loc_30E2CA: ; ... tst.b $3A(a0) beq.s loc_30E2DC tst.b $38(a0) beq.w loc_30E4BA subq.b #1,$38(a0) loc_30E2DC: ; ... move.b $22(a0),d0 and.b #$18,d0 beq.s sub_30E2EC move.b #1,$3A(a0) ; =============== S U B R O U T I N E ======================================= sub_30E2EC: ; ... moveq #0,d1 move.b $19(a0),d1 move.l $3C(a0),a2 move.w 8(a0),d4 jsr SlopeObject bra.w MarkObjGone ; End of function sub_30E2EC ; --------------------------------------------------------------------------- loc_30E304: ; ... tst.b $38(a0) beq.s loc_30E348 tst.b $3A(a0) bne.s loc_30E318 subq.b #1,$38(a0) bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30E318: ; ... bsr.w sub_30E2EC subq.b #1,$38(a0) bne.s return_30E346 lea ($FFFFB000).w,a1 bsr.s sub_30E32C lea ($FFFFB040).w,a1 ; =============== S U B R O U T I N E ======================================= sub_30E32C: ; ... btst #3,$22(a1) beq.s return_30E346 bclr #3,$22(a1) bclr #5,$22(a1) move.b #1,$1D(a1) return_30E346: ; ... rts ; End of function sub_30E32C ; --------------------------------------------------------------------------- loc_30E348: ; ... bsr.w ObjectMoveAndFall tst.b 1(a0) bpl.w DeleteObject bra.w DisplaySprite ; --------------------------------------------------------------------------- Obj1F: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30E366(pc,d0.w),d1 jmp off_30E366(pc,d1.w) ; --------------------------------------------------------------------------- off_30E366: dc.w loc_30E36C-off_30E366 ; 0 ; ... dc.w loc_30E426-off_30E366 ; 1 dc.w loc_30E460-off_30E366 ; 2 ; --------------------------------------------------------------------------- loc_30E36C: ; ... addq.b #2,$24(a0) move.l #Map_Obj1F,4(a0) move.w #$42B8,2(a0) or.b #4,1(a0) move.b #4,$18(a0) move.b #7,$38(a0) move.b #$44,$19(a0) lea (byte_30E569).l,a4 btst #0,$28(a0) beq.s loc_30E3AA lea (byte_30E571).l,a4 loc_30E3AA: ; ... move.l a4,$34(a0) cmp.b #$A,($FFFFFE10).w bne.s loc_30E3D6 move.l #Map_Obj1F_B,4(a0) move.w #$639D,2(a0) bsr.w Adjust2PArtPointer2_Useless move.b #$40,$19(a0) move.l #byte_30E579,$34(a0) loc_30E3D6: ; ... cmp.b #$B,($FFFFFE10).w bne.s loc_30E3FE move.l #Map_Obj1F_C,4(a0) move.w #$63F4,2(a0) bsr.w Adjust2PArtPointer2_Useless move.b #$20,$19(a0) move.l #byte_30E580,$34(a0) loc_30E3FE: ; ... cmp.b #$F,($FFFFFE10).w bne.s loc_30E426 move.l #Map_Obj1F_D,4(a0) move.w #$4000,2(a0) bsr.w Adjust2PArtPointer2_Useless move.b #$20,$19(a0) move.l #byte_30E586,$34(a0) loc_30E426: ; ... tst.b $3A(a0) beq.s loc_30E438 tst.b $38(a0) beq.w loc_30E4B4 subq.b #1,$38(a0) loc_30E438: ; ... move.b $22(a0),d0 and.b #$18,d0 beq.s sub_30E448 move.b #1,$3A(a0) ; =============== S U B R O U T I N E ======================================= sub_30E448: ; ... moveq #0,d1 move.b $19(a0),d1 move.w #$10,d3 move.w 8(a0),d4 jsr PlatformObject bra.w MarkObjGone ; End of function sub_30E448 ; --------------------------------------------------------------------------- loc_30E460: ; ... tst.b $38(a0) beq.s loc_30E4A4 tst.b $3A(a0) bne.s loc_30E474 subq.b #1,$38(a0) bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30E474: ; ... bsr.w sub_30E448 subq.b #1,$38(a0) bne.s return_30E4A2 lea ($FFFFB000).w,a1 bsr.s sub_30E488 lea ($FFFFB040).w,a1 ; =============== S U B R O U T I N E ======================================= sub_30E488: ; ... btst #3,$22(a1) beq.s return_30E4A2 bclr #3,$22(a1) bclr #5,$22(a1) move.b #1,$1D(a1) return_30E4A2: ; ... rts ; End of function sub_30E488 ; --------------------------------------------------------------------------- loc_30E4A4: ; ... bsr.w ObjectMoveAndFall tst.b 1(a0) bpl.w DeleteObject bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30E4B4: ; ... addq.b #1,$1A(a0) bra.s loc_30E4BE ; --------------------------------------------------------------------------- loc_30E4BA: ; ... addq.b #2,$1A(a0) loc_30E4BE: ; ... move.l $34(a0),a4 moveq #0,d0 move.b $1A(a0),d0 add.w d0,d0 move.l 4(a0),a3 add.w (a3,d0.w),a3 move.w (a3)+,d1 subq.w #1,d1 bset #5,1(a0) move.b 0(a0),d4 move.b 1(a0),d5 move.l a0,a1 bra.s loc_30E4F0 ; --------------------------------------------------------------------------- loc_30E4E8: ; ... bsr.w SingleObjLoad bne.s loc_30E536 addq.w #6,a3 loc_30E4F0: ; ... move.b #4,$24(a1) move.b d4,0(a1) move.l a3,4(a1) move.b d5,1(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w 2(a0),2(a1) move.b $18(a0),$18(a1) move.b $19(a0),$19(a1) move.b $16(a0),$16(a1) move.b (a4)+,$38(a1) cmp.l a0,a1 bcc.s loc_30E532 bsr.w DisplaySprite2 loc_30E532: ; ... dbf d1,loc_30E4E8 loc_30E536: ; ... bsr.w DisplaySprite move.w #$B9,d0 jmp PlaySound ; --------------------------------------------------------------------------- byte_30E544: dc.b $1C,$18,$14,$10,$1A,$16,$12, $E, $A, 6,$18,$14,$10, $C, 8, 4,$16,$12, $E, $A, 6, 2,$14,$10, $C; 0 ; ... byte_30E55D: dc.b $18,$1C,$20,$1E,$1A,$16, 6, $E,$14,$12, $A, 2; 0 ; ... byte_30E569: dc.b $1E,$16, $E, 6,$1A,$12, $A, 2; 0 ; ... byte_30E571: dc.b $16,$1E,$1A,$12, 6, $E, $A, 2; 0 ; ... byte_30E579: dc.b $1A,$12, $A, 2,$16, $E, 6 ; 0 ; ... byte_30E580: dc.b $1A,$16,$12, $E, $A, 2 ; 0 ; ... byte_30E586: dc.b $16,$1A,$18,$12, 6, $E, $A, 2; 0 ; ... byte_30E58E: dcb.b 8,$20 ; 0 ; ... dcb.b 2,$21 ; 8 dcb.b 2,$22 ; 10 dcb.b 2,$23 ; 12 dcb.b 2,$24 ; 14 dcb.b 2,$25 ; 16 dcb.b 2,$26 ; 18 dcb.b 2,$27 ; 20 dcb.b 2,$28 ; 22 dcb.b 2,$29 ; 24 dcb.b 2,$2A ; 26 dcb.b 2,$2B ; 28 dcb.b 2,$2C ; 30 dcb.b 2,$2D ; 32 dcb.b 2,$2E ; 34 dcb.b 2,$2F ; 36 dcb.b $A,$30 ; 38 Map_Obj1A: dc.w byte_30E5C6-Map_Obj1A,byte_30E628-Map_Obj1A,byte_30E68A-Map_Obj1A,byte_30E722-Map_Obj1A; 0 ; ... byte_30E5C6: dc.b 0,$10,$C8, $E, 0,$57, 0,$10,$D0, $D, 0,$63,$FF,$F0,$E0, $D, 0,$6B, 0,$10,$E0, $D, 0,$73,$FF,$F0,$D8, 6, 0,$7B,$FF,$E0,$D8, 6, 0,$81,$FF,$D0,$F0, $D, 0,$87, 0,$10,$F0, $D, 0,$8F,$FF,$F0,$F0, 5, 0,$97,$FF,$E0,$F0, 5, 0,$9B,$FF,$D0, 0, $D, 0,$9F, 0,$10, 0, 5, 0,$A7, 0, 0, 0, $D, 0,$AB,$FF,$E0, 0, 5, 0,$B3,$FF,$D0,$10, $D, 0,$AB, 0,$10,$10, 5, 0,$B7, 0, 0; 0 ; ... byte_30E628: dc.b 0,$10,$C8, $E, 0,$57, 0,$10,$D0, $D, 0,$63,$FF,$F0,$E0, $D, 0,$6B, 0,$10,$E0, $D, 0,$73,$FF,$F0,$D8, 6, 0,$7B,$FF,$E0,$D8, 6, 0,$BB,$FF,$D0,$F0, $D, 0,$87, 0,$10,$F0, $D, 0,$8F,$FF,$F0,$F0, 5, 0,$97,$FF,$E0,$F0, 5, 0,$C1,$FF,$D0, 0, $D, 0,$9F, 0,$10, 0, 5, 0,$A7, 0, 0, 0, $D, 0,$AB,$FF,$E0, 0, 5, 0,$B7,$FF,$D0,$10, $D, 0,$AB, 0,$10,$10, 5, 0,$B7, 0, 0; 0 ; ... byte_30E68A: dc.b 0,$19,$C8, 6, 0,$5D, 0,$20,$C8, 6, 0,$57, 0,$10,$D0, 5, 0,$67, 0, 0,$D0, 5, 0,$63,$FF,$F0,$E0, 5, 0,$6F, 0,$20,$E0, 5, 0,$6B, 0,$10,$E0, 5, 0,$77, 0, 0,$E0, 5, 0,$73,$FF,$F0,$D8, 6, 0,$7B,$FF,$E0,$D8, 6, 0,$81,$FF,$D0,$F0, 5, 0,$8B, 0,$20,$F0, 5, 0,$87, 0,$10,$F0, 5, 0,$93, 0, 0,$F0, 5, 0,$8F,$FF,$F0,$F0, 5, 0,$97,$FF,$E0,$F0, 5, 0,$9B,$FF,$D0, 0, 5, 0,$8B, 0,$20, 0, 5, 0,$8B, 0,$10, 0, 5, 0,$A7, 0, 0, 0, 5, 0,$AB,$FF,$F0, 0, 5, 0,$AB,$FF,$E0, 0, 5, 0,$B3,$FF,$D0,$10, 5, 0,$AB, 0,$20,$10, 5, 0,$AB, 0,$10,$10, 5, 0,$B7, 0, 0; 0 ; ... byte_30E722: dc.b 0,$19,$C8, 6, 0,$5D, 0,$20,$C8, 6, 0,$57, 0,$10,$D0, 5, 0,$67, 0, 0,$D0, 5, 0,$63,$FF,$F0,$E0, 5, 0,$6F, 0,$20,$E0, 5, 0,$6B, 0,$10,$E0, 5, 0,$77, 0, 0,$E0, 5, 0,$73,$FF,$F0,$D8, 6, 0,$7B,$FF,$E0,$D8, 6, 0,$BB,$FF,$D0,$F0, 5, 0,$8B, 0,$20,$F0, 5, 0,$87, 0,$10,$F0, 5, 0,$93, 0, 0,$F0, 5, 0,$8F,$FF,$F0,$F0, 5, 0,$97,$FF,$E0,$F0, 5, 0,$C1,$FF,$D0, 0, 5, 0,$8B, 0,$20, 0, 5, 0,$8B, 0,$10, 0, 5, 0,$A7, 0, 0, 0, 5, 0,$AB,$FF,$F0, 0, 5, 0,$AB,$FF,$E0, 0, 5, 0,$B7,$FF,$D0,$10, 5, 0,$AB, 0,$20,$10, 5, 0,$AB, 0,$10,$10, 5, 0,$B7, 0, 0; 0 ; ... Map_Obj1F: dc.w byte_30E7C2-Map_Obj1F,byte_30E7DC-Map_Obj1F,byte_30E80E-Map_Obj1F,byte_30E828-Map_Obj1F; 0 ; ... byte_30E7C2: dc.b 0, 4,$F8, $D, 0, 0,$FF,$E0, 8, $D, 0, 0,$FF,$E0,$F8, $D, 0, 0, 0, 0, 8, $D, 0, 0, 0, 0; 0 ; ... byte_30E7DC: dc.b 0, 8,$F8, 5, 0, 0,$FF,$E0,$F8, 5, 0, 0,$FF,$F0,$F8, 5, 0, 0, 0, 0,$F8, 5, 0, 0, 0,$10, 8, 5, 0, 0,$FF,$E0, 8, 5, 0, 0,$FF,$F0, 8, 5, 0, 0, 0, 0, 8, 5, 0, 0, 0,$10; 0 ; ... byte_30E80E: dc.b 0, 4,$F8, $D, 0, 0,$FF,$E0, 8, $D, 0, 8,$FF,$E0,$F8, $D, 0, 0, 0, 0, 8, $D, 0, 8, 0, 0; 0 ; ... byte_30E828: dc.b 0, 8,$F8, 5, 0, 0,$FF,$E0,$F8, 5, 0, 4,$FF,$F0,$F8, 5, 0, 0, 0, 0,$F8, 5, 0, 4, 0,$10, 8, 5, 0, 8,$FF,$E0, 8, 5, 0, $C,$FF,$F0, 8, 5, 0, 8, 0, 0, 8, 5, 0, $C, 0,$10; 0 ; ... byte_30E85A: dcb.b $10,$10 ; 0 ; ... byte_30E86A: dcb.b $30,$10 ; 0 ; ... byte_30E89A: dc.b 0, 6, 0,$38, 0,$38, 0, 8,$F0, $D, 0, 0,$FF,$D0, 0, $D, 0, 8,$FF,$D0,$F0, 5, 0, 4,$FF,$F0,$F0, 5, 8, 4, 0, 0, 0, 5, 0, $C,$FF,$F0, 0, 5, 8, $C, 0, 0,$F0, $D, 8, 0, 0,$10, 0, $D, 8, 8, 0,$10, 0, $C,$F0, 5, 0, 0,$FF,$D0,$F0, 5, 0, 4,$FF,$E0,$F0, 5, 0, 4,$FF,$F0,$F0, 5, 8, 4, 0, 0,$F0, 5, 8, 4, 0,$10,$F0, 5, 8, 0, 0,$20, 0, 5, 0, 8,$FF,$D0, 0, 5, 0, $C,$FF,$E0, 0, 5, 0, $C,$FF,$F0, 0, 5, 8, $C, 0, 0, 0, 5, 8, $C, 0,$10, 0, 5, 8, 8, 0,$20; 0 ; ... Map_Obj1F_B: dc.w byte_30E922-Map_Obj1F_B,byte_30E922-Map_Obj1F_B,byte_30E922-Map_Obj1F_B; 0 ; ... byte_30E922: dc.b 0, 7,$F0, $F, 8,$10,$FF,$C0,$F0, $F, 8,$10,$FF,$E0,$F0, $F, 8,$10, 0, 0,$F0, $F, 8, 0, 0,$20,$10, $D, 8,$20,$FF,$C0,$10, $D, 8,$20,$FF,$E0,$10, $D, 8,$20, 0, 0; 0 ; ... Map_Obj1F_C: dc.w byte_30E952-Map_Obj1F_C,byte_30E96C-Map_Obj1F_C; 0 ; ... byte_30E952: dc.b 0, 4,$F0, $D, 0, 0,$FF,$E0,$F0, $D, 8, 0, 0, 0, 0, 9, 0, 8,$FF,$F0, 0, $B, 0, $E, 0, 8; 0 ; ... byte_30E96C: dc.b 0, 6,$F0, 5, 0, 0,$FF,$E0,$F0, 5, 0, 4,$FF,$F0,$F0, 5, 8, 4, 0, 0,$F0, 5, 8, 0, 0,$10, 0, 9, 0, 8,$FF,$F0, 0, $B, 0, $E, 0, 8; 0 ; ... Map_Obj1F_D: dc.w byte_30E996-Map_Obj1F_D,byte_30E9B0-Map_Obj1F_D; 0 ; ... byte_30E996: dc.b 0, 4,$F0, $D, 0,$55,$FF,$E0,$F0, $D, 8,$55, 0, 0, 0, $D, 0,$A3,$FF,$E0, 0, $D, 8,$A3, 0, 0; 0 ; ... byte_30E9B0: dc.b 0, 8,$F0, 5, 0,$55,$FF,$E0,$F0, 5, 0,$59,$FF,$F0,$F0, 5, 8,$59, 0, 0,$F0, 5, 8,$55, 0,$10, 0, 5, 0,$A3,$FF,$E0, 0, 5, 0,$A7,$FF,$F0, 0, 5, 8,$A7, 0, 0, 0, 5, 8,$A3, 0,$10; 0 ; ... ; --------------------------------------------------------------------------- Obj1C: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30E9F0(pc,d0.w),d1 jmp off_30E9F0(pc,d1.w) ; --------------------------------------------------------------------------- off_30E9F0: dc.w loc_30EAB2-off_30E9F0 ; 0 ; ... dc.w BraTo_MarkObjGone-off_30E9F0 ; 1 off_30E9F4: dc.l Map_Obj1C ; ... dc.w $43FD dc.b 4 dc.b 6 dc.l Map_Obj1C+$1000000 dc.w $43FD dc.b 4 dc.b 6 dc.l Map_Obj11_HPZ+$1000000 dc.w $43B6 dc.b 4 dc.b 1 dc.l Map_Obj1C+$2000000 dc.w $23FD dc.b $10 dc.b 6 dc.l Map_Obj16+$3000000 dc.w $43E6 dc.b 8 dc.b 4 dc.l Map_Obj16+$4000000 dc.w $43E6 dc.b 8 dc.b 4 dc.l Map_Obj16+$1000000 dc.w $43E6 dc.b $20 dc.b 1 dc.l Map_Obj1C_B dc.w $4000 dc.b 8 dc.b 1 dc.l Map_Obj1C_B+$1000000 dc.w $4000 dc.b 8 dc.b 1 dc.l Map_Obj1C_C dc.w $4428 dc.b 4 dc.b 4 dc.l Map_Obj1C_D dc.w $4346 dc.b 4 dc.b 4 dc.l Map_Obj1C_D+$1000000 dc.w $4346 dc.b 4 dc.b 4 dc.l Map_Obj1C_D+$2000000 dc.w $4346 dc.b 4 dc.b 4 dc.l Map_Obj1C_D+$3000000 dc.w $4346 dc.b 4 dc.b 4 dc.l Map_Obj1C_D+$4000000 dc.w $4346 dc.b 4 dc.b 4 dc.l Map_Obj1C_D+$5000000 dc.w $4346 dc.b 4 dc.b 4 dc.l Map_Obj1C_E dc.w $4346 dc.b $18 dc.b 4 dc.l Map_Obj1C_E+$1000000 dc.w $4346 dc.b $18 dc.b 4 dc.l Map_Obj1C_E+$2000000 dc.w $4346 dc.b 8 dc.b 4 dc.l Map_Obj1C_E+$3000000 dc.w $4346 dc.b 8 dc.b 4 dc.l Map_Obj1C_E+$4000000 dc.b $43 ; C dc.b $46 ; F dc.b 8 dc.b 4 byte_30EA9C: dcb.b $D, 0 ; 0 ; ... dc.b $30,$40,$60, 0, 0,$30,$40,$50, 0; 0 ; --------------------------------------------------------------------------- loc_30EAB2: ; ... addq.b #2,$24(a0) moveq #0,d0 move.b $28(a0),d0 move.w d0,d1 lsl.w #3,d0 lea off_30E9F4(pc),a1 lea (a1,d0.w),a1 move.b (a1),$1A(a0) move.l (a1)+,4(a0) move.w (a1)+,2(a0) bsr.w Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b (a1)+,$19(a0) move.b (a1)+,$18(a0) lea byte_30EA9C(pc),a1 move.b (a1,d1.w),d1 beq.s BraTo_MarkObjGone move.b d1,$16(a0) bset #4,1(a0) BraTo_MarkObjGone: ; ... bra.w MarkObjGone ; --------------------------------------------------------------------------- Obj71: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30EB0C(pc,d0.w),d1 jmp off_30EB0C(pc,d1.w) ; --------------------------------------------------------------------------- off_30EB0C: dc.w loc_30EB28-off_30EB0C ; 0 ; ... dc.w loc_30EB6A-off_30EB0C ; 1 off_30EB10: dc.l Map_Obj11_EHZ+$3000000 ; ... dc.w $6300 dc.b 4 dc.b 1 dc.l Map_Obj71_A dc.w $E35A dc.b $10 dc.b 1 dc.l Map_Obj71_B dc.w $4536 dc.b $10 dc.b 1 ; --------------------------------------------------------------------------- loc_30EB28: ; ... addq.b #2,$24(a0) move.b $28(a0),d0 and.w #$F,d0 lsl.w #3,d0 lea off_30EB10(pc),a1 lea (a1,d0.w),a1 move.b (a1),$1A(a0) move.l (a1)+,4(a0) move.w (a1)+,2(a0) bsr.w Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b (a1)+,$19(a0) move.b (a1)+,$18(a0) move.b $28(a0),d0 and.w #$F0,d0 lsr.b #4,d0 move.b d0,$1C(a0) loc_30EB6A: ; ... lea (Ani_Obj71).l,a1 bsr.w AnimateSprite bra.w MarkObjGone ; --------------------------------------------------------------------------- Ani_Obj71: dc.w byte_30EB80-Ani_Obj71 ; 0 ; ... dc.w byte_30EB88-Ani_Obj71 ; 1 dc.w byte_30EB97-Ani_Obj71 ; 2 dc.w byte_30EBA0-Ani_Obj71 ; 3 byte_30EB80: dc.b 8, 3, 3, 4, 5, 5, 4,$FF; 0 ; ... byte_30EB88: dc.b 5, 0, 0, 0, 1, 2, 3, 3, 2, 1, 2, 3, 3, 1,$FF; 0 ; ... byte_30EB97: dc.b $B, 0, 1, 2, 3, 4, 5,$FD, 3; 0 ; ... byte_30EBA0: dc.b $7F, 6,$FD, 2 ; 0 ; ... Map_Obj71_A: dc.w byte_30EBAC-Map_Obj71_A,byte_30EBB4-Map_Obj71_A,byte_30EBBC-Map_Obj71_A,byte_30EBCA-Map_Obj71_A; 0 ; ... byte_30EBAC: dc.b 0, 1,$F4, $A, 0, 0,$FF,$F4; 0 ; ... byte_30EBB4: dc.b 0, 1,$F4, $A, 0, 9,$FF,$F4; 0 ; ... byte_30EBBC: dc.b 0, 2,$F0, $D, 0,$12,$FF,$F0, 0, $D,$18,$12,$FF,$F0; 0 ; ... byte_30EBCA: dc.b 0, 2,$F0, $D, 0,$1A,$FF,$F0, 0, $D,$18,$1A,$FF,$F0; 0 ; ... Map_Obj1C_B: dc.w byte_30EBDC-Map_Obj1C_B,byte_30EBE4-Map_Obj1C_B; 0 ; ... byte_30EBDC: dc.b 0, 1,$F8, 5, 0, 2,$FF,$F8; 0 ; ... byte_30EBE4: dc.b 0, 1,$F8, 5, 0, 6,$FF,$F8; 0 ; ... Map_Obj1C_C: dc.w byte_30EBF0-Map_Obj1C_C,byte_30EBF8-Map_Obj1C_C; 0 ; ... byte_30EBF0: dc.b 0, 1,$F8, 1, 0, 0,$FF,$FC; 0 ; ... byte_30EBF8: dc.b 0, 1,$F8, 1, 0, 2,$FF,$FC; 0 ; ... Map_Obj1C_D: dc.w byte_30EC0C-Map_Obj1C_D,byte_30EC14-Map_Obj1C_D,byte_30EC1C-Map_Obj1C_D,byte_30EC2A-Map_Obj1C_D,byte_30EC3E-Map_Obj1C_D,byte_30EC58-Map_Obj1C_D; 0 ; ... byte_30EC0C: dc.b 0, 1,$F8, 1, 0, 0,$FF,$FC; 0 ; ... byte_30EC14: dc.b 0, 1,$F0, 3, 0, 0,$FF,$FC; 0 ; ... byte_30EC1C: dc.b 0, 2,$E8, 1, 0, 0,$FF,$FC,$F8, 3, 0, 0,$FF,$FC; 0 ; ... byte_30EC2A: dc.b 0, 3,$D0, 3, 0, 0,$FF,$FC,$F0, 3, 0, 0,$FF,$FC,$10, 3, 0, 0,$FF,$FC; 0 ; ... byte_30EC3E: dc.b 0, 4,$C0, 3, 0, 0,$FF,$FC,$E0, 3, 0, 0,$FF,$FC, 0, 3, 0, 0,$FF,$FC,$20, 3, 0, 0,$FF,$FC; 0 ; ... byte_30EC58: dc.b 0, 7,$98, 0, 0, 4,$FF,$FC,$A0, 3, 0, 0,$FF,$FC,$C0, 3, 0, 0,$FF,$FC,$E0, 3, 0, 0,$FF,$FC, 0, 3, 0, 0,$FF,$FC,$20, 3, 0, 0,$FF,$FC,$40, 3, 0, 0,$FF,$FC; 0 ; ... Map_Obj1C_E: dc.w byte_30EC8E-Map_Obj1C_E,byte_30EC9C-Map_Obj1C_E,byte_30ECB6-Map_Obj1C_E,byte_30ECCA-Map_Obj1C_E,byte_30ECE4-Map_Obj1C_E; 0 ; ... byte_30EC8E: dc.b 0, 2,$F0, 7, 0, 5,$FF,$E8,$F0, 7, 0, 5, 0, 8; 0 ; ... byte_30EC9C: dc.b 0, 4,$E0, 7, 0, 5,$FF,$E8,$E0, 7, 0, 5, 0, 8, 0, 7, 0, 5,$FF,$E8, 0, 7, 0, 5, 0, 8; 0 ; ... byte_30ECB6: dc.b 0, 3,$D0, 7, 0, 5,$FF,$F8,$F0, 7, 0, 5,$FF,$F8,$10, 7, 0, 5,$FF,$F8; 0 ; ... byte_30ECCA: dc.b 0, 4,$C0, 7, 0, 5,$FF,$F8,$E0, 7, 0, 5,$FF,$F8, 0, 7, 0, 5,$FF,$F8,$20, 7, 0, 5,$FF,$F8; 0 ; ... byte_30ECE4: dc.b 0, 5,$B0, 7, 0, 5,$FF,$F8,$D0, 7, 0, 5,$FF,$F8,$F0, 7, 0, 5,$FF,$F8,$10, 7, 0, 5,$FF,$F8,$30, 7, 0, 5,$FF,$F8; 0 ; ... Map_Obj1C: dc.w byte_30ED0A-Map_Obj1C,byte_30ED12-Map_Obj1C,byte_30ED1A-Map_Obj1C; 0 ; ... byte_30ED0A: dc.b 0, 1,$F8, 1, 0, 4,$FF,$FC; 0 ; ... byte_30ED12: dc.b 0, 1,$F8, 1, 0, 6,$FF,$FC; 0 ; ... byte_30ED1A: dc.b 0, 1,$FC, $C, 0, 0,$FF,$F0; 0 ; ... Map_Obj71_B: dc.w byte_30ED30-Map_Obj71_B,byte_30ED38-Map_Obj71_B,byte_30ED40-Map_Obj71_B,byte_30ED48-Map_Obj71_B,byte_30ED50-Map_Obj71_B,byte_30ED58-Map_Obj71_B,byte_30ED60-Map_Obj71_B; 0 ; ... byte_30ED30: dc.b 0, 1, 2, 4, 0, 0,$FF,$F8; 0 ; ... byte_30ED38: dc.b 0, 1, 0, 4, 0, 0,$FF,$F8; 0 ; ... byte_30ED40: dc.b 0, 1,$FE, 4, 0, 0,$FF,$F8; 0 ; ... byte_30ED48: dc.b 0, 1,$FC, 4, 0, 0,$FF,$F8; 0 ; ... byte_30ED50: dc.b 0, 1,$FC, 8, 0, 2,$FF,$F4; 0 ; ... byte_30ED58: dc.b 0, 1,$FC, $C, 0, 5,$FF,$F0; 0 ; ... byte_30ED60: dc.b 0, 0 ; 0 ; ... ; --------------------------------------------------------------------------- Obj2A: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30ED70(pc,d0.w),d1 jmp off_30ED70(pc,d1.w) ; --------------------------------------------------------------------------- off_30ED70: dc.w loc_30ED74-off_30ED70,loc_30EDAE-off_30ED70; 0 ; ... ; --------------------------------------------------------------------------- loc_30ED74: ; ... addq.b #2,$24(a0) move.l #Map_Obj2A,4(a0) move.w #$4000,2(a0) bsr.w Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) move.w $C(a0),$32(a0) move.b #$50,$16(a0) bset #4,1(a0) loc_30EDAE: ; ... tst.b $25(a0) bne.s loc_30EDC8 addq.w #1,$30(a0) cmp.w #$60,$30(a0) bne.s loc_30EDDA move.b #2,$25(a0) bra.s loc_30EDDA ; --------------------------------------------------------------------------- loc_30EDC8: ; ... subq.w #8,$30(a0) bhi.s loc_30EDDA move.w #0,$30(a0) move.b #0,$25(a0) loc_30EDDA: ; ... move.w $32(a0),d0 sub.w $30(a0),d0 move.w d0,$C(a0) moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 move.w #$40,d2 move.w d2,d3 addq.w #1,d3 move.w 8(a0),d4 jsr SolidObject bra.w MarkObjGone ; --------------------------------------------------------------------------- Map_Obj2A: dc.w byte_30EE08-Map_Obj2A ; ... byte_30EE08: dc.b 0, 6,$B0, 9, 0,$1A,$FF,$F0,$C0, $F, 0,$20,$FF,$F0,$E0, $F, 0,$30,$FF,$F0, 0, $F,$10,$30,$FF,$F0,$20, $F,$10,$20,$FF,$F0,$40, 9,$10,$1A,$FF,$F0; 0 ; ... ; --------------------------------------------------------------------------- Obj2D: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30EE3C(pc,d0.w),d1 jmp off_30EE3C(pc,d1.w) ; --------------------------------------------------------------------------- off_30EE3C: dc.w loc_30EE40-off_30EE3C,loc_30EEF2-off_30EE3C; 0 ; ... ; --------------------------------------------------------------------------- loc_30EE40: ; ... addq.b #2,$24(a0) move.l #Map_Obj2D,4(a0) move.w #$2426,2(a0) move.b #8,$19(a0) cmp.b #4,($FFFFFE10).w beq.s loc_30EE68 cmp.b #5,($FFFFFE10).w bne.s loc_30EE74 loc_30EE68: ; ... move.w #$6000,2(a0) move.b #$C,$19(a0) loc_30EE74: ; ... cmp.b #$D,($FFFFFE10).w bne.s loc_30EE88 move.w #$2394,2(a0) move.b #8,$19(a0) loc_30EE88: ; ... cmp.b #$E,($FFFFFE10).w bne.s loc_30EE9C move.w #$2328,2(a0) move.b #8,$19(a0) loc_30EE9C: ; ... cmp.b #$F,($FFFFFE10).w bne.s loc_30EEB0 move.w #$23F8,2(a0) move.b #8,$19(a0) loc_30EEB0: ; ... bsr.w Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #4,$18(a0) move.w $C(a0),$32(a0) move.b $28(a0),$1A(a0) move.w 8(a0),d2 move.w d2,d3 sub.w #$200,d2 add.w #$18,d3 btst #0,$22(a0) beq.s loc_30EEEA sub.w #$FE18,d2 add.w #$1E8,d3 loc_30EEEA: ; ... move.w d2,$38(a0) move.w d3,$3A(a0) loc_30EEF2: ; ... btst #0,$22(a0) bne.s loc_30EF0E move.w $38(a0),d2 move.w 8(a0),d3 tst.b $25(a0) beq.s loc_30EF20 move.w $3A(a0),d3 bra.s loc_30EF20 ; --------------------------------------------------------------------------- loc_30EF0E: ; ... move.w 8(a0),d2 move.w $3A(a0),d3 tst.b $25(a0) beq.s loc_30EF20 move.w $38(a0),d2 loc_30EF20: ; ... move.w $32(a0),d4 move.w d4,d5 sub.w #$20,d4 add.w #$20,d5 move.b #0,$25(a0) lea ($FFFFB000).w,a1 bsr.s sub_30EF88 lea ($FFFFB040).w,a1 bsr.s sub_30EF88 tst.b $25(a0) beq.s loc_30EF54 cmp.w #$40,$30(a0) beq.s loc_30EF6A addq.w #8,$30(a0) bra.s loc_30EF5E ; --------------------------------------------------------------------------- loc_30EF54: ; ... tst.w $30(a0) beq.s loc_30EF6A subq.w #8,$30(a0) loc_30EF5E: ; ... move.w $32(a0),d0 sub.w $30(a0),d0 move.w d0,$C(a0) loc_30EF6A: ; ... moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 move.w #$20,d2 move.w d2,d3 addq.w #1,d3 move.w 8(a0),d4 bsr.w SolidObject bra.w MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_30EF88: ; ... move.w 8(a1),d0 cmp.w d2,d0 blt.w return_30EFB4 cmp.w d3,d0 bcc.w return_30EFB4 move.w $C(a1),d0 cmp.w d4,d0 bcs.w return_30EFB4 cmp.w d5,d0 bcc.w return_30EFB4 tst.b $2A(a1) bmi.s return_30EFB4 move.b #2,$25(a0) return_30EFB4: ; ... rts ; End of function sub_30EF88 ; --------------------------------------------------------------------------- Map_Obj2D: dc.w byte_30EFBE-Map_Obj2D,byte_30EFD8-Map_Obj2D,byte_30EFE6-Map_Obj2D,byte_30EFF4-Map_Obj2D; 0 ; ... byte_30EFBE: dc.b 0, 4,$E0, 5, 0, 0,$FF,$F8,$F0, 5, 0, 0,$FF,$F8, 0, 5, 0, 0,$FF,$F8,$10, 5, 0, 0,$FF,$F8; 0 ; ... byte_30EFD8: dc.b 0, 2,$E0, $B, 0,$5F,$FF,$F4, 0, $B, 0,$5F,$FF,$F4; 0 ; ... byte_30EFE6: dc.b 0, 2,$E0, 7, 0, 0,$FF,$F8, 0, 7, 0, 0,$FF,$F8; 0 ; ... byte_30EFF4: dc.b 0, 2,$E0, 7, 0, 0,$FF,$F8, 0, 7, 0, 0,$FF,$F8; 0 ; ... ; --------------------------------------------------------------------------- Obj28: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30F010(pc,d0.w),d1 jmp off_30F010(pc,d1.w) ; --------------------------------------------------------------------------- off_30F010: dc.w loc_30F134-off_30F010,loc_30F256-off_30F010; 0 ; ... dc.w loc_30F2B0-off_30F010,loc_30F2EC-off_30F010; 2 dc.w loc_30F2B0-off_30F010,loc_30F2B0-off_30F010; 4 dc.w loc_30F2B0-off_30F010,loc_30F2EC-off_30F010; 6 dc.w loc_30F2B0-off_30F010,loc_30F2EC-off_30F010; 8 dc.w loc_30F2B0-off_30F010,loc_30F2B0-off_30F010; 10 dc.w loc_30F2B0-off_30F010,loc_30F2B0-off_30F010; 12 dc.w loc_30F36C-off_30F010,loc_30F38C-off_30F010; 14 dc.w loc_30F38C-off_30F010,loc_30F3AC-off_30F010; 16 dc.w loc_30F3E6-off_30F010,loc_30F440-off_30F010; 18 dc.w loc_30F45E-off_30F010,loc_30F440-off_30F010; 20 dc.w loc_30F45E-off_30F010,loc_30F440-off_30F010; 22 dc.w loc_30F49C-off_30F010,loc_30F402-off_30F010; 24 byte_30F044: dc.b 6, 5, 6, 5, 6, 5, 6, 5, 9, 7, 9, 7, 9, 7, 9, 7, 8, 3, 8, 3, 2, 3, 8, 1, $B, 5, 0, 7, 4, 1, 2, 5, $A, 1; 0 ; ... word_30F066: dc.w $FE00 ; ... dc.w $FC00 dc.l Map_Obj28_B dc.w $FE00 dc.w $FD00 dc.l Map_Obj28 dc.w $FE80 dc.w $FD00 dc.l Map_Obj28_B dc.w $FEC0 dc.w $FE80 dc.l Map_Obj28_C dc.w $FE40 dc.w $FD00 dc.l Map_Obj28_D dc.w $FD00 dc.w $FC00 dc.l Map_Obj28 dc.w $FD80 dc.w $FC80 dc.l Map_Obj28_E dc.w $FD80 dc.w $FD00 dc.l Map_Obj28 dc.w $FE00 dc.w $FC80 dc.l Map_Obj28_E dc.w $FD40 dc.w $FD00 dc.l Map_Obj28_E dc.w $FEC0 dc.w $FE00 dc.l Map_Obj28_E dc.w $FE00 dc.w $FD00 dc.l Map_Obj28_E word_30F0C6: dc.w -$440, -$400, -$440, -$400, -$440, -$400, -$300, -$400, -$300, -$400, -$180, -$300, -$180, -$300, -$140, -$180, -$1C0, -$300, -$200, -$300, -$280, -$380; 0 ; ... off_30F0F2: dc.l Map_Obj28 ; 0 ; ... dc.l Map_Obj28 dc.l Map_Obj28 dc.l Map_Obj28_B dc.l Map_Obj28_B dc.l Map_Obj28_B dc.l Map_Obj28_B dc.l Map_Obj28_C dc.l Map_Obj28_D dc.l Map_Obj28 dc.l Map_Obj28_E word_30F11E: dcb.w 3, $5A5 ; 0 ; ... dcb.w 2, $553 ; 3 dcb.w 2, $573 ; 5 dc.w $585, $593, $565, $5B3 ; 7 ; --------------------------------------------------------------------------- loc_30F134: ; ... tst.b $28(a0) beq.w loc_30F1A2 moveq #0,d0 move.b $28(a0),d0 add.w d0,d0 move.b d0,$24(a0) sub.w #$14,d0 move.w word_30F11E(pc,d0.w),2(a0) add.w d0,d0 move.l off_30F0F2(pc,d0.w),4(a0) lea word_30F0C6(pc),a1 move.w (a1,d0.w),$32(a0) move.w (a1,d0.w),$10(a0) move.w 2(a1,d0.w),$34(a0) move.w 2(a1,d0.w),$12(a0) bsr.w Adjust2PArtPointer2_Useless move.b #$C,$16(a0) move.b #4,1(a0) bset #0,1(a0) move.b #6,$18(a0) move.b #8,$19(a0) move.b #7,$1E(a0) bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30F1A2: ; ... addq.b #2,$24(a0) jsr RandomNumber move.w #$580,2(a0) and.w #1,d0 beq.s loc_30F1BE move.w #$594,2(a0) loc_30F1BE: ; ... moveq #0,d1 move.b ($FFFFFE10).w,d1 add.w d1,d1 add.w d0,d1 lea byte_30F044(pc),a1 move.b (a1,d1.w),d0 move.b d0,$30(a0) lsl.w #3,d0 lea word_30F066(pc),a1 add.w d0,a1 move.w (a1)+,$32(a0) move.w (a1)+,$34(a0) move.l (a1)+,4(a0) bsr.w Adjust2PArtPointer2_Useless move.b #$C,$16(a0) move.b #4,1(a0) bset #0,1(a0) move.b #6,$18(a0) move.b #8,$19(a0) move.b #7,$1E(a0) move.b #2,$1A(a0) move.w #$FC00,$12(a0) tst.b $38(a0) bne.s loc_30F248 bsr.w SingleObjLoad bne.s BraTo_DisplaySprite move.b #$29,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w $3E(a0),d0 lsr.w #1,d0 move.b d0,$1A(a1) BraTo_DisplaySprite: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30F248: ; ... move.b #$1C,$24(a0) clr.w $10(a0) bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30F256: ; ... tst.b 1(a0) bpl.w DeleteObject bsr.w ObjectMoveAndFall tst.w $12(a0) bmi.s BraTo_DisplaySprite_0 jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s BraTo_DisplaySprite_0 add.w d1,$C(a0) move.w $32(a0),$10(a0) move.w $34(a0),$12(a0) move.b #1,$1A(a0) move.b $30(a0),d0 add.b d0,d0 addq.b #4,d0 move.b d0,$24(a0) tst.b $38(a0) beq.s BraTo_DisplaySprite_0 btst #4,($FFFFFE0F).w beq.s BraTo_DisplaySprite_0 neg.w $10(a0) bchg #0,1(a0) BraTo_DisplaySprite_0: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30F2B0: ; ... bsr.w ObjectMoveAndFall move.b #1,$1A(a0) tst.w $12(a0) bmi.s loc_30F2DA move.b #0,$1A(a0) jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_30F2DA add.w d1,$C(a0) move.w $34(a0),$12(a0) loc_30F2DA: ; ... tst.b $28(a0) bne.s loc_30F350 tst.b 1(a0) bpl.w DeleteObject bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30F2EC: ; ... bsr.w ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) tst.w $12(a0) bmi.s loc_30F328 jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_30F328 add.w d1,$C(a0) move.w $34(a0),$12(a0) tst.b $28(a0) beq.s loc_30F328 cmp.b #$A,$28(a0) beq.s loc_30F328 neg.w $10(a0) bchg #0,1(a0) loc_30F328: ; ... subq.b #1,$1E(a0) bpl.s loc_30F33E move.b #1,$1E(a0) addq.b #1,$1A(a0) and.b #1,$1A(a0) loc_30F33E: ; ... tst.b $28(a0) bne.s loc_30F350 tst.b 1(a0) bpl.w DeleteObject bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30F350: ; ... move.w 8(a0),d0 sub.w ($FFFFB008).w,d0 bcs.s loc_30F368 sub.w #$180,d0 bpl.s loc_30F368 tst.b 1(a0) bpl.w DeleteObject loc_30F368: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30F36C: ; ... tst.b 1(a0) bpl.w DeleteObject subq.w #1,$36(a0) bne.w BraTo_DisplaySprite_1 move.b #2,$24(a0) move.b #1,$18(a0) BraTo_DisplaySprite_1: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30F38C: ; ... bsr.w sub_30F530 bcc.s loc_30F3A8 move.w $32(a0),$10(a0) move.w $34(a0),$12(a0) move.b #$E,$24(a0) bra.w loc_30F2EC ; --------------------------------------------------------------------------- loc_30F3A8: ; ... bra.w loc_30F350 ; --------------------------------------------------------------------------- loc_30F3AC: ; ... bsr.w sub_30F530 bpl.s loc_30F3E2 clr.w $10(a0) clr.w $32(a0) bsr.w ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) bsr.w sub_30F4F0 bsr.w sub_30F518 subq.b #1,$1E(a0) bpl.s loc_30F3E2 move.b #1,$1E(a0) addq.b #1,$1A(a0) and.b #1,$1A(a0) loc_30F3E2: ; ... bra.w loc_30F350 ; --------------------------------------------------------------------------- loc_30F3E6: ; ... bsr.w sub_30F530 bpl.s loc_30F43C move.w $32(a0),$10(a0) move.w $34(a0),$12(a0) move.b #4,$24(a0) bra.w loc_30F2B0 ; --------------------------------------------------------------------------- loc_30F402: ; ... bsr.w ObjectMoveAndFall move.b #1,$1A(a0) tst.w $12(a0) bmi.s loc_30F43C move.b #0,$1A(a0) jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_30F43C not.b $29(a0) bne.s loc_30F432 neg.w $10(a0) bchg #0,1(a0) loc_30F432: ; ... add.w d1,$C(a0) move.w $34(a0),$12(a0) loc_30F43C: ; ... bra.w loc_30F350 ; --------------------------------------------------------------------------- loc_30F440: ; ... bsr.w sub_30F530 bpl.s loc_30F45A clr.w $10(a0) clr.w $32(a0) bsr.w ObjectMoveAndFall bsr.w sub_30F4F0 bsr.w sub_30F518 loc_30F45A: ; ... bra.w loc_30F350 ; --------------------------------------------------------------------------- loc_30F45E: ; ... bsr.w sub_30F530 bpl.s loc_30F498 bsr.w ObjectMoveAndFall move.b #1,$1A(a0) tst.w $12(a0) bmi.s loc_30F498 move.b #0,$1A(a0) jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_30F498 neg.w $10(a0) bchg #0,1(a0) add.w d1,$C(a0) move.w $34(a0),$12(a0) loc_30F498: ; ... bra.w loc_30F350 ; --------------------------------------------------------------------------- loc_30F49C: ; ... bsr.w sub_30F530 bpl.s loc_30F4EC bsr.w ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) tst.w $12(a0) bmi.s loc_30F4D6 jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_30F4D6 not.b $29(a0) bne.s loc_30F4CC neg.w $10(a0) bchg #0,1(a0) loc_30F4CC: ; ... add.w d1,$C(a0) move.w $34(a0),$12(a0) loc_30F4D6: ; ... subq.b #1,$1E(a0) bpl.s loc_30F4EC move.b #1,$1E(a0) addq.b #1,$1A(a0) and.b #1,$1A(a0) loc_30F4EC: ; ... bra.w loc_30F350 ; =============== S U B R O U T I N E ======================================= sub_30F4F0: ; ... move.b #1,$1A(a0) tst.w $12(a0) bmi.s return_30F516 move.b #0,$1A(a0) jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s return_30F516 add.w d1,$C(a0) move.w $34(a0),$12(a0) return_30F516: ; ... rts ; End of function sub_30F4F0 ; =============== S U B R O U T I N E ======================================= sub_30F518: ; ... bset #0,1(a0) move.w 8(a0),d0 sub.w ($FFFFB008).w,d0 bcc.s return_30F52E bclr #0,1(a0) return_30F52E: ; ... rts ; End of function sub_30F518 ; =============== S U B R O U T I N E ======================================= sub_30F530: ; ... move.w ($FFFFB008).w,d0 sub.w 8(a0),d0 sub.w #$B8,d0 rts ; End of function sub_30F530 ; --------------------------------------------------------------------------- Obj29: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30F54C(pc,d0.w),d1 jmp off_30F54C(pc,d1.w) ; --------------------------------------------------------------------------- off_30F54C: dc.w loc_30F550-off_30F54C,loc_30F57E-off_30F54C; 0 ; ... ; --------------------------------------------------------------------------- loc_30F550: ; ... addq.b #2,$24(a0) move.l #Map_Obj29,4(a0) move.w #$84AC,2(a0) bsr.w Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #1,$18(a0) move.b #8,$19(a0) move.w #$FD00,$12(a0) loc_30F57E: ; ... tst.w $12(a0) bpl.w DeleteObject bsr.w ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) bra.w DisplaySprite ; --------------------------------------------------------------------------- Map_Obj28: dc.w byte_30F5A2-Map_Obj28,byte_30F5AA-Map_Obj28; 0 ; ... dc.b 0, 6, 0, 1,-$14, 7, 0, 0, -1, -8; 0 byte_30F5A2: dc.b 0, 1,$F8, 5, 0, 8,$FF,$F8; 0 ; ... byte_30F5AA: dc.b 0, 1,$F8, 5, 0, $C,$FF,$F8; 0 ; ... Map_Obj28_E: dc.w byte_30F5C0-Map_Obj28_E,byte_30F5C8-Map_Obj28_E; 0 ; ... dc.b 0, 6, 0, 1,$EC, 7, 0, 0,$FF,$F8; 0 byte_30F5C0: dc.b 0, 1,$F8, 9 ; 0 ; ... dc.b 0, 8,$FF,$F4 ; 0 byte_30F5C8: dc.b 0, 1,$F8, 9, 0, $E,$FF,$F4; 0 ; ... Map_Obj28_D: dc.w byte_30F5DE-Map_Obj28_D,byte_30F5E6-Map_Obj28_D; 0 ; ... dc.b 0, 6, 0, 1,$F4, 6, 0, 0,$FF,$F8; 0 byte_30F5DE: dc.b 0, 1,$F8, 9, 0, 6,$FF,$F4; 0 ; ... byte_30F5E6: dc.b 0, 1,$F8, 9, 0, $C,$FF,$F4; 0 ; ... Map_Obj28_C: dc.w byte_30F5FC-Map_Obj28_C,byte_30F604-Map_Obj28_C; 0 ; ... dc.b 0, 6, 0, 1,$F4, 6, 0, 0,$FF,$F8; 0 byte_30F5FC: dc.b 0, 1,$F8, 5, 0, 6,$FF,$F8; 0 ; ... byte_30F604: dc.b 0, 1,$F8, 5, 0, $A,$FF,$F8; 0 ; ... Map_Obj28_B: dc.w byte_30F61A-Map_Obj28_B,byte_30F622-Map_Obj28_B; 0 ; ... dc.b 0, 6, 0, 1,$F4, 6, 0, 0,$FF,$F8; 0 byte_30F61A: dc.b 0, 1,$F4, 6, 0, 6,$FF,$F8; 0 ; ... byte_30F622: dc.b 0, 1,$F4, 6, 0, $C,$FF,$F8; 0 ; ... Map_Obj29: dc.w byte_30F638-Map_Obj29,byte_30F640-Map_Obj29; 0 ; ... dc.b 0,$1E, 0,$26, 0,$34, 0,$3C, 0,$4A; 0 byte_30F638: dc.b 0, 1,$F8, 5, 0, 2,$FF,$F8; 0 ; ... byte_30F640: dc.b 0, 1,$F8, 5, 0, 6,$FF,$F8; 0 ; ... dc.b 0, 1,$F8, 5, 0, $A,$FF,$F8; 0 dc.b 0, 2,$F8, 1, 0, 0,$FF,$F8,$F8, 5, 0, $E, 0, 0; 0 dc.b 0, 1,$F8, 1, 0, 0,$FF,$FC; 0 dc.b 0, 2,$F8, 5, 0, 2,$FF,$F0,$F8, 5, 0, $E, 0, 0; 0 dc.b 0, 2,$F8, 5, 0, $A,$FF,$F0,$F8, 5, 0, $E, 0, 0; 0 ; --------------------------------------------------------------------------- Obj25: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30F690(pc,d0.w),d1 jmp off_30F690(pc,d1.w) ; --------------------------------------------------------------------------- off_30F690: dc.w loc_30F69A-off_30F690,loc_30F6CE-off_30F690; 0 ; ... dc.w loc_30F6DC-off_30F690,loc_30F6EE-off_30F690; 2 dc.w BraTo_DeleteObject-off_30F690; 4 ; --------------------------------------------------------------------------- loc_30F69A: ; ... addq.b #2,$24(a0) move.w 8(a0),$32(a0) move.l #Map_Ring,4(a0) move.w #$26BC,2(a0) bsr.w Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #2,$18(a0) move.b #$47,$20(a0) move.b #8,$19(a0) loc_30F6CE: ; ... move.b ($FFFFFEA3).w,$1A(a0) move.w $32(a0),d0 bra.w MarkObjGone2 ; --------------------------------------------------------------------------- loc_30F6DC: ; ... addq.b #2,$24(a0) move.b #0,$20(a0) move.b #1,$18(a0) bsr.s CollectRing loc_30F6EE: ; ... lea (Ani_DroppedRing).l,a1 bsr.w AnimateSprite bra.w DisplaySprite ; --------------------------------------------------------------------------- BraTo_DeleteObject: ; ... bra.w DeleteObject ; =============== S U B R O U T I N E ======================================= CollectRing: ; ... cmp.w #999,($FFFFFEF0).w bcc.s loc_30F70C addq.w #1,($FFFFFEF0).w loc_30F70C: ; ... move.w #$B5,d0 cmp.w #999,($FFFFFE20).w bcc.s JmpTo_PlaySoundStereo addq.w #1,($FFFFFE20).w or.b #1,($FFFFFE1D).w cmp.w #100,($FFFFFE20).w bcs.s JmpTo_PlaySoundStereo bset #1,($FFFFFE1B).w beq.s loc_30F742 cmp.w #200,($FFFFFE20).w bcs.s JmpTo_PlaySoundStereo bset #2,($FFFFFE1B).w bne.s JmpTo_PlaySoundStereo loc_30F742: ; ... addq.b #1,($FFFFFE12).w addq.b #1,($FFFFFE1C).w move.w #$98,d0 JmpTo_PlaySoundStereo: ; ... jmp PlaySoundStereo ; End of function CollectRing ; --------------------------------------------------------------------------- rts ; --------------------------------------------------------------------------- Obj37: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30F764(pc,d0.w),d1 jmp off_30F764(pc,d1.w) ; --------------------------------------------------------------------------- off_30F764: dc.w loc_30F76E-off_30F764,loc_30F858-off_30F764; 0 ; ... dc.w loc_30F8BA-off_30F764,loc_30F8CE-off_30F764; 2 dc.w BraTo_DeleteObject_0-off_30F764; 4 ; --------------------------------------------------------------------------- loc_30F76E: ; ... move.l a0,a1 moveq #0,d5 move.w ($FFFFFE20).w,d5 tst.b $3F(a0) beq.s loc_30F780 move.w ($FFFFFED0).w,d5 loc_30F780: ; ... moveq #$20,d0 cmp.w d0,d5 bcs.s loc_30F788 move.w d0,d5 loc_30F788: ; ... subq.w #1,d5 move.w #$288,d4 bra.s loc_30F798 ; --------------------------------------------------------------------------- loc_30F790: ; ... bsr.w SingleObjLoad bne.w loc_30F822 loc_30F798: ; ... move.b #$37,0(a1) addq.b #2,$24(a1) move.b #8,$16(a1) move.b #8,$17(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.l #Map_Ring,4(a1) move.w #$26BC,2(a1) bsr.w Adjust2PArtPointer_Useless move.b #$84,1(a1) move.b #3,$18(a1) move.b #$47,$20(a1) move.b #8,$19(a1) move.b #$FF,($FFFFFEA6).w tst.w d4 bmi.s loc_30F812 move.w d4,d0 jsr CalcSine move.w d4,d2 lsr.w #8,d2 asl.w d2,d0 asl.w d2,d1 move.w d0,d2 move.w d1,d3 add.b #$10,d4 bcc.s loc_30F812 sub.w #$80,d4 bcc.s loc_30F812 move.w #$288,d4 loc_30F812: ; ... move.w d2,$10(a1) move.w d3,$12(a1) neg.w d2 neg.w d4 dbf d5,loc_30F790 loc_30F822: ; ... move.w #$C6,d0 jsr PlaySoundStereo tst.b $3F(a0) bne.s loc_30F846 move.w #0,($FFFFFE20).w move.b #$80,($FFFFFE1D).w move.b #0,($FFFFFE1B).w bra.s loc_30F858 ; --------------------------------------------------------------------------- loc_30F846: ; ... move.w #0,($FFFFFED0).w move.b #$80,($FFFFFEC9).w move.b #0,($FFFFFEC7).w loc_30F858: ; ... move.b ($FFFFFEA7).w,$1A(a0) bsr.w ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) bmi.s loc_30F898 move.b ($FFFFFE0F).w,d0 add.b d7,d0 and.b #7,d0 bne.s loc_30F898 tst.b 1(a0) bpl.s loc_30F8B0 jsr RingCheckFloorDist tst.w d1 bpl.s loc_30F898 add.w d1,$C(a0) move.w $12(a0),d0 asr.w #2,d0 sub.w d0,$12(a0) neg.w $12(a0) loc_30F898: ; ... tst.b ($FFFFFEA6).w beq.s BraTo_DeleteObject_0 move.w ($FFFFEECE).w,d0 add.w #$E0,d0 cmp.w $C(a0),d0 bcs.s BraTo_DeleteObject_0 bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30F8B0: ; ... tst.w ($FFFFFFDC).w bne.w BraTo_DeleteObject_0 bra.s loc_30F898 ; --------------------------------------------------------------------------- loc_30F8BA: ; ... addq.b #2,$24(a0) move.b #0,$20(a0) move.b #1,$18(a0) bsr.w CollectRing loc_30F8CE: ; ... lea (Ani_DroppedRing).l,a1 bsr.w AnimateSprite bra.w DisplaySprite ; --------------------------------------------------------------------------- BraTo_DeleteObject_0: ; ... bra.w DeleteObject ; --------------------------------------------------------------------------- Ani_DroppedRing:dc.w byte_30F8E2-Ani_DroppedRing ; ... byte_30F8E2: dc.b 5, 4, 5, 6, 7,$FC ; 0 ; ... Map_Ring: dc.w byte_30F8FA-Map_Ring,byte_30F902-Map_Ring,byte_30F90A-Map_Ring; 0 ; ... dc.w byte_30F912-Map_Ring,byte_30F91A-Map_Ring,byte_30F922-Map_Ring; 3 dc.w byte_30F92A-Map_Ring,byte_30F932-Map_Ring,byte_30F93A-Map_Ring; 6 byte_30F8FA: dc.b 0, 1,$F8, 5, 0, 0,$FF,$F8; 0 ; ... byte_30F902: dc.b 0, 1,$F8, 5, 0, 4,$FF,$F8; 0 ; ... byte_30F90A: dc.b 0, 1,$F8, 1, 0, 8,$FF,$FC; 0 ; ... byte_30F912: dc.b 0, 1,$F8, 5, 8, 4,$FF,$F8; 0 ; ... byte_30F91A: dc.b 0, 1,$F8, 5, 0, $A,$FF,$F8; 0 ; ... byte_30F922: dc.b 0, 1,$F8, 5,$18, $A,$FF,$F8; 0 ; ... byte_30F92A: dc.b 0, 1,$F8, 5, 8, $A,$FF,$F8; 0 ; ... byte_30F932: dc.b 0, 1,$F8, 5,$10, $A,$FF,$F8; 0 ; ... byte_30F93A: dc.b 0, 0 ; 0 ; ... ; --------------------------------------------------------------------------- ObjDC: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30F94A(pc,d0.w),d1 jmp off_30F94A(pc,d1.w) ; --------------------------------------------------------------------------- off_30F94A: dc.w loc_30F950-off_30F94A,loc_30F9A4-off_30F94A; 0 ; ... dc.w BraTo_DeleteObject_1-off_30F94A; 2 ; --------------------------------------------------------------------------- loc_30F950: ; ... moveq #0,d1 move.w $38(a0),d1 swap d1 move.l $30(a0),d0 sub.l d1,d0 asr.l #4,d0 sub.l d0,$30(a0) move.w $30(a0),8(a0) moveq #0,d1 move.w $3A(a0),d1 swap d1 move.l $34(a0),d0 sub.l d1,d0 asr.l #4,d0 sub.l d0,$34(a0) move.w $34(a0),$C(a0) lea Ani_CNZSlotRing(pc),a1 bsr.w AnimateSprite subq.w #1,$3C(a0) bne.w DisplaySprite move.l $2A(a0),a1 subq.w #1,(a1) bsr.w CollectRing add.b #2,$24(a0) loc_30F9A4: ; ... lea Ani_DroppedRing(pc),a1 bsr.w AnimateSprite bra.w DisplaySprite ; --------------------------------------------------------------------------- BraTo_DeleteObject_1: ; ... bra.w DeleteObject ; --------------------------------------------------------------------------- Ani_CNZSlotRing:dc.w byte_30F9B6-Ani_CNZSlotRing ; ... byte_30F9B6: dc.b 1, 0, 1, 2, 3,$FF ; 0 ; ... ; --------------------------------------------------------------------------- Obj26: ; ... moveq #0,d0 move.b $24(a0),d0 move.w Obj26_Index(pc,d0.w),d1 jmp Obj26_Index(pc,d1.w) ; --------------------------------------------------------------------------- Obj26_Index: dc.w loc_30F9D4-Obj26_Index,loc_30FA38-Obj26_Index; 0 ; ... dc.w loc_30FAE8-Obj26_Index,loc_30FA86-Obj26_Index; 2 dc.w BraTo_MarkObjGone_0-Obj26_Index; 4 ; --------------------------------------------------------------------------- loc_30F9D4: ; ... addq.b #2,$24(a0) move.b #$E,$16(a0) move.b #$E,$17(a0) move.l #Map_Monitors,4(a0) move.w #$680,2(a0) move.b #4,1(a0) move.b #3,$18(a0) move.b #$F,$19(a0) lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_30FA2C bclr #7,2(a2,d0.w) btst #0,2(a2,d0.w) beq.s loc_30FA2C move.b #8,$24(a0) move.b #$B,$1A(a0) rts ; --------------------------------------------------------------------------- loc_30FA2C: ; ... move.b #$46,$20(a0) move.b $28(a0),$1C(a0) loc_30FA38: ; ... move.b $25(a0),d0 beq.s SolidObject_Monitor bsr.w ObjectMoveAndFall jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.w SolidObject_Monitor add.w d1,$C(a0) clr.w $12(a0) clr.b $25(a0) SolidObject_Monitor: ; ... move.w #$1A,d1 move.w #$F,d2 move.w d2,d3 addq.w #1,d3 move.w 8(a0),d4 lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) bsr.w SolidObject_Monitor_Knuckles movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 moveq #4,d6 bsr.w SolidObject_Monitor_Tails_Useless loc_30FA86: ; ... lea (Ani_Obj26).l,a1 bsr.w AnimateSprite BraTo_MarkObjGone_0: ; ... bra.w MarkObjGone ; =============== S U B R O U T I N E ======================================= SolidObject_Monitor_Knuckles: ; ... btst d6,$22(a0) bne.s ExitPlatform cmp.b #2,$1C(a1) bne.w loc_314E36 rts ; End of function SolidObject_Monitor_Knuckles ; =============== S U B R O U T I N E ======================================= SolidObject_Monitor_Tails_Useless: ; ... btst d6,$22(a0) beq.w loc_314E36 ExitPlatform: ; ... move.w d1,d2 add.w d2,d2 btst #1,$22(a1) bne.s loc_30FACA move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.s loc_30FACA cmp.w d2,d0 bcs.s loc_30FADE loc_30FACA: ; ... bclr #3,$22(a1) bset #1,$22(a1) bclr d6,$22(a0) moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_30FADE: ; ... move.w d4,d2 bsr.w MvSonicOnPtfm moveq #0,d4 rts ; End of function SolidObject_Monitor_Tails_Useless ; --------------------------------------------------------------------------- loc_30FAE8: ; ... move.b $22(a0),d0 and.b #%1111000,d0 beq.s loc_30FB18 move.b d0,d1 and.b #%101000,d1 beq.s loc_30FB06 and.b #$D7,($FFFFB022).w or.b #2,($FFFFB022).w loc_30FB06: ; ... and.b #%1010000,d0 beq.s loc_30FB18 and.b #%11010111,($FFFFB062).w or.b #2,($FFFFB062).w loc_30FB18: ; ... clr.b $22(a0) addq.b #2,$24(a0) move.b #0,$20(a0) bsr.w SingleObjLoad bne.s loc_30FB4A move.b #$2E,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b $1C(a0),$1C(a1) move.w $3E(a0),$3E(a1) loc_30FB4A: ; ... bsr.w SingleObjLoad bne.s loc_30FB66 move.b #$27,0(a1) addq.b #2,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) loc_30FB66: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 bset #0,2(a2,d0.w) move.b #$A,$1C(a0) bra.w DisplaySprite ; --------------------------------------------------------------------------- ; Object 2E - Monitors' contents. ; --------------------------------------------------------------------------- Obj2E: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30FB8E(pc,d0.w),d1 jmp off_30FB8E(pc,d1.w) ; --------------------------------------------------------------------------- off_30FB8E: dc.w loc_30FB94-off_30FB8E,loc_30FBD4-off_30FB8E; 0 ; ... dc.w loc_30FD30-off_30FB8E ; 2 ; --------------------------------------------------------------------------- loc_30FB94: ; ... addq.b #2,$24(a0) move.w #$8680,2(a0) move.b #$24,1(a0) move.b #3,$18(a0) move.b #8,$19(a0) move.w #$FD00,$12(a0) moveq #0,d0 move.b $1C(a0),d0 addq.b #1,d0 move.b d0,$1A(a0) move.l #Map_Monitors,a1 add.b d0,d0 add.w (a1,d0.w),a1 addq.w #2,a1 move.l a1,4(a0) loc_30FBD4: ; ... bsr.s loc_30FBDA bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30FBDA: ; ... tst.w $12(a0) bpl.w loc_30FBEE bsr.w ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) rts ; --------------------------------------------------------------------------- loc_30FBEE: ; ... addq.b #2,$24(a0) move.w #$1D,$1E(a0) move.w $3E(a0),a1 lea ($FFFFFEF4).w,a2 cmp.w #$B000,a1 beq.s loc_30FC0A lea ($FFFFFEF6).w,a2 loc_30FC0A: ; ... moveq #0,d0 move.b $1C(a0),d0 add.w d0,d0 move.w Monitor_Actions(pc,d0.w),d0 jmp Monitor_Actions(pc,d0.w) ; --------------------------------------------------------------------------- Monitor_Actions:dc.w Eggman_Monitor-Monitor_Actions; 0 ; ... dc.w Knuckles1up_Monitor-Monitor_Actions; 1 dc.w Knuckles1up_Monitor-Monitor_Actions; 2 dc.w Eggman_Monitor-Monitor_Actions; 3 dc.w TenRings_Monitor-Monitor_Actions; 4 dc.w SpeedShoes_Monitor-Monitor_Actions; 5 dc.w Shield_Monitor-Monitor_Actions; 6 dc.w Invincibility_Monitor-Monitor_Actions; 7 dc.w Teleport_Monitor-Monitor_Actions; 8 dc.w Teleport_Monitor-Monitor_Actions; 9 ; --------------------------------------------------------------------------- Eggman_Monitor: ; ... addq.w #1,(a2) bra.w Touch_ChkHurt2 ; --------------------------------------------------------------------------- Knuckles1up_Monitor: ; ... addq.w #1,($FFFFFEF4).w addq.b #1,($FFFFFE12).w addq.b #1,($FFFFFE1C).w move.w #$98,d0 jmp PlayMusic ; --------------------------------------------------------------------------- TenRings_Monitor: ; ... addq.w #1,(a2) lea ($FFFFFE20).w,a2 lea ($FFFFFE1D).w,a3 lea ($FFFFFE1B).w,a4 lea ($FFFFFEF0).w,a5 add.w #$A,(a5) cmp.w #999,(a5) bcs.s loc_30FC6A move.w #999,(a5) loc_30FC6A: ; ... add.w #$A,(a2) cmp.w #999,(a2) bcs.s loc_30FC78 move.w #999,(a2) loc_30FC78: ; ... or.b #1,(a3) cmp.w #100,(a2) bcs.s loc_30FC94 bset #1,(a4) beq.s loc_30FC9E cmp.w #200,(a2) bcs.s loc_30FC94 bset #2,(a4) beq.s loc_30FC9E loc_30FC94: ; ... move.w #$B5,d0 jmp PlayMusic ; --------------------------------------------------------------------------- loc_30FC9E: ; ... cmp.w #$B000,a1 beq.w Knuckles1up_Monitor ; What the fuck? This is completely useless. bra.w Knuckles1up_Monitor ; --------------------------------------------------------------------------- SpeedShoes_Monitor: ; ... addq.w #1,(a2) bset #2,$2B(a1) move.w #$4B0,$34(a1) move.w #$C00,($FFFFF760).w move.w #$18,($FFFFF762).w move.w #$80,($FFFFF764).w move.w #$FB,d0 jmp PlayMusic ; --------------------------------------------------------------------------- Shield_Monitor: ; ... addq.w #1,(a2) bset #0,$2B(a1) move.w #$AF,d0 jsr PlayMusic move.b #$38,($FFFFD180).w move.w a1,($FFFFD1BE).w rts ; --------------------------------------------------------------------------- Invincibility_Monitor: ; ... addq.w #1,(a2) tst.b ($FFFFFE19).w bne.s return_30FD2A bset #1,$2B(a1) move.w #$4B0,$32(a1) tst.b ($FFFFF7AA).w bne.s loc_30FD1E cmp.b #$C,$28(a1) bls.s loc_30FD1E move.w #$97,d0 jsr PlayMusic loc_30FD1E: ; ... move.b #$35,($FFFFD200).w move.w a1,($FFFFD23E).w rts ; --------------------------------------------------------------------------- return_30FD2A: ; ... rts ; --------------------------------------------------------------------------- Teleport_Monitor: ; ... addq.w #1,(a2) rts ; --------------------------------------------------------------------------- loc_30FD30: ; ... subq.w #1,$1E(a0) bmi.w DeleteObject bra.w DisplaySprite ; --------------------------------------------------------------------------- Ani_Obj26: dc.w byte_30FD52-Ani_Obj26 ; 0 ; ... dc.w byte_30FD56-Ani_Obj26 ; 1 dc.w byte_30FD5E-Ani_Obj26 ; 2 dc.w byte_30FD66-Ani_Obj26 ; 3 dc.w byte_30FD6E-Ani_Obj26 ; 4 dc.w byte_30FD76-Ani_Obj26 ; 5 dc.w byte_30FD7E-Ani_Obj26 ; 6 dc.w byte_30FD86-Ani_Obj26 ; 7 dc.w byte_30FD8E-Ani_Obj26 ; 8 dc.w byte_30FD96-Ani_Obj26 ; 9 dc.w byte_30FD9E-Ani_Obj26 ; 10 byte_30FD52: dc.b 1, 0, 1,$FF ; 0 ; ... byte_30FD56: dc.b 1, 0, 2, 2, 1, 2, 2,$FF; 0 ; ... byte_30FD5E: dc.b 1, 0, 3, 3, 1, 3, 3,$FF; 0 ; ... byte_30FD66: dc.b 1, 0, 4, 4, 1, 4, 4,$FF; 0 ; ... byte_30FD6E: dc.b 1, 0, 5, 5, 1, 5, 5,$FF; 0 ; ... byte_30FD76: dc.b 1, 0, 6, 6, 1, 6, 6,$FF; 0 ; ... byte_30FD7E: dc.b 1, 0, 7, 7, 1, 7, 7,$FF; 0 ; ... byte_30FD86: dc.b 1, 0, 8, 8, 1, 8, 8,$FF; 0 ; ... byte_30FD8E: dc.b 1, 0, 9, 9, 1, 9, 9,$FF; 0 ; ... byte_30FD96: dc.b 1, 0, $A, $A, 1, $A, $A,$FF; 0 ; ... byte_30FD9E: dc.b 2, 0, 1, $B,$FE, 1 ; 0 ; ... Map_Monitors: dc.w byte_30FDBC-Map_Monitors,byte_30FDC4-Map_Monitors,byte_30FDD2-Map_Monitors,byte_30FDE0-Map_Monitors,byte_30FDEE-Map_Monitors,byte_30FDFC-Map_Monitors,byte_30FE0A-Map_Monitors,byte_30FE18-Map_Monitors,byte_30FE26-Map_Monitors,byte_30FE34-Map_Monitors,byte_30FE42-Map_Monitors,byte_30FE50-Map_Monitors; 0 ; ... byte_30FDBC: dc.b 0, 1,$EF, $F, 0, 0,$FF,$F0; 0 ; ... byte_30FDC4: dc.b 0, 2,$F5, 5, 0,$18,$FF,$F8,$EF, $F, 0, 0,$FF,$F0; 0 ; ... byte_30FDD2: dc.b 0, 2,$F5, 5, 1,$54,$FF,$F8,$EF, $F, 0, 0,$FF,$F0; 0 ; ... byte_30FDE0: dc.b 0, 2,$F5, 5, 0,$1C,$FF,$F8,$EF, $F, 0, 0,$FF,$F0; 0 ; ... byte_30FDEE: dc.b 0, 2,$F5, 5, 0,$20,$FF,$F8,$EF, $F, 0, 0,$FF,$F0; 0 ; ... byte_30FDFC: dc.b 0, 2,$F5, 5,$20,$24,$FF,$F8,$EF, $F, 0, 0,$FF,$F0; 0 ; ... byte_30FE0A: dc.b 0, 2,$F5, 5, 0,$28,$FF,$F8,$EF, $F, 0, 0,$FF,$F0; 0 ; ... byte_30FE18: dc.b 0, 2,$F5, 5, 0,$2C,$FF,$F8,$EF, $F, 0, 0,$FF,$F0; 0 ; ... byte_30FE26: dc.b 0, 2,$F5, 5, 0,$30,$FF,$F8,$EF, $F, 0, 0,$FF,$F0; 0 ; ... byte_30FE34: dc.b 0, 2,$F5, 5, 0,$38,$FF,$F8,$EF, $F, 0, 0,$FF,$F0; 0 ; ... byte_30FE42: dc.b 0, 2,$F5, 5, 0,$34,$FF,$F8,$EF, $F, 0, 0,$FF,$F0; 0 ; ... byte_30FE50: dc.b 0, 1,$FF, $D, 0,$10,$FF,$F0; 0 ; ... ; --------------------------------------------------------------------------- Obj0E: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_30FE66(pc,d0.w),d1 jmp off_30FE66(pc,d1.w) ; --------------------------------------------------------------------------- off_30FE66: dc.w loc_30FE80-off_30FE66,loc_30FE98-off_30FE66,loc_3100B8-off_30FE66; 0 ; ... dc.w loc_310124-off_30FE66,loc_3101E4-off_30FE66,loc_3102A4-off_30FE66; 3 dc.w loc_3103BC-off_30FE66,loc_310196-off_30FE66,loc_310374-off_30FE66; 6 dc.w loc_310434-off_30FE66,loc_310474-off_30FE66,loc_31052A-off_30FE66; 9 dc.w loc_31056A-off_30FE66 ; 12 ; --------------------------------------------------------------------------- loc_30FE80: ; ... addq.b #2,$24(a0) move.w #$150,2(a0) move.b #4,$18(a0) move.b $28(a0),$24(a0) bra.s Obj0E ; --------------------------------------------------------------------------- loc_30FE98: ; ... addq.w #1,$34(a0) cmp.w #$120,$34(a0) bcc.s loc_30FEA8 bsr.w sub_310778 loc_30FEA8: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_30FEB6(pc,d0.w),d1 jmp off_30FEB6(pc,d1.w) ; --------------------------------------------------------------------------- off_30FEB6: dc.w loc_30FEC8-off_30FEB6 ; 0 ; ... dc.w loc_30FF1E-off_30FEB6 ; 1 dc.w loc_30FF46-off_30FEB6 ; 2 dc.w loc_30FF76-off_30FEB6 ; 3 dc.w loc_30FFD0-off_30FEB6 ; 4 dc.w loc_30FFDE-off_30FEB6 ; 5 dc.w loc_310000-off_30FEB6 ; 6 dc.w loc_310040-off_30FEB6 ; 7 dc.w loc_310082-off_30FEB6 ; 8 ; --------------------------------------------------------------------------- loc_30FEC8: ; ... addq.b #2,$25(a0) move.l #Map_Obj0E,4(a0) move.w #$8150,2(a0) move.b #0,$1A(a0) move.w #$110,8(a0) move.w #$E0,$A(a0) lea ($FFFFB0C0).w,a1 move.b #$E,(a1) move.b #8,$28(a1) lea ($FFFFB140).w,a1 move.b #$E,(a1) move.b #6,$28(a1) lea ($FFFFB480).w,a1 move.b #$E,(a1) move.b #$12,$28(a1) moveq #-$59,d0 jmp PlaySound ; --------------------------------------------------------------------------- loc_30FF1E: ; ... cmp.w #$38,$34(a0) bcc.s loc_30FF28 rts ; --------------------------------------------------------------------------- loc_30FF28: ; ... addq.b #2,$25(a0) lea ($FFFFB100).w,a1 move.b #$C9,(a1) move.b #0,$28(a1) st $30(a0) moveq #-$67,d0 jmp PlayMusic ; --------------------------------------------------------------------------- loc_30FF46: ; ... cmp.w #$80,$34(a0) bcc.s loc_30FF50 rts ; --------------------------------------------------------------------------- loc_30FF50: ; ... addq.b #2,$25(a0) lea (Pal_TitleKnuckles).l,a1 lea ($FFFFFB00).w,a2 moveq #$F,d6 loc_30FF60: ; ... move.w (a1)+,(a2)+ dbf d6,loc_30FF60 lea ($FFFFB180).w,a1 move.b #$E,(a1) move.b #$E,$28(a1) rts ; --------------------------------------------------------------------------- loc_30FF76: ; ... moveq #$24,d2 lea (word_30FFB0).l,a1 loc_30FF7E: ; ... move.w $2A(a0),d0 addq.w #1,d0 move.w d0,$2A(a0) and.w #3,d0 bne.s BraTo_DisplaySprite_2 move.w $2C(a0),d1 addq.w #4,d1 cmp.w d2,d1 bcc.w loc_3103A0 move.w d1,$2C(a0) move.l -4(a1,d1.w),d0 move.w d0,$A(a0) swap d0 move.w d0,8(a0) BraTo_DisplaySprite_2: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- word_30FFB0: dc.w $F4, $D0, $F8, $C0, $FC, $B2, $100, $A6, $104, $9E, $FE, $98, $F8, $94, $F4, $92; 0 ; ... ; --------------------------------------------------------------------------- loc_30FFD0: ; ... lea (Ani_Obj0E).l,a1 bsr.w AnimateSprite bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_30FFDE: ; ... addq.b #2,$25(a0) move.b #4,$1A(a0) move.w $A(a0),$2A(a0) lea ($FFFFB1C0).w,a1 move.b #$E,(a1) move.b #$A,$28(a1) bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_310000: ; ... cmp.w #$120,$34(a0) bcs.s loc_310038 addq.b #2,$25(a0) clr.w $2C(a0) st ($FFFFF662).w lea ($FFFFFB40).w,a1 move.w #$EEE,d0 moveq #$F,d6 loc_31001E: ; ... move.w d0,(a1)+ dbf d6,loc_31001E lea ($FFFFB240).w,a1 move.b #$C9,(a1) move.b #2,$28(a1) move.b #$F,($FFFFB400).w loc_310038: ; ... bsr.w sub_31017E bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_310040: ; ... btst #6,($FFFFFFD8).w beq.s loc_310058 cmp.w #$190,$34(a0) beq.s loc_310068 bsr.w sub_31017E bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_310058: ; ... cmp.w #$1D0,$34(a0) beq.s loc_310068 bsr.w sub_31017E bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_310068: ; ... lea ($FFFFB440).w,a1 move.b #$E,(a1) move.b #$C,$28(a1) addq.b #2,$25(a0) bsr.w sub_31017E bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_310082: ; ... move.b ($FFFFFE0F).w,d0 and.b #7,d0 bne.s loc_3100A4 move.w $2C(a0),d0 addq.w #2,d0 cmp.w #$C,d0 bcs.s loc_31009A moveq #0,d0 loc_31009A: ; ... move.w d0,$2C(a0) move.w word_3100AC(pc,d0.w),($FFFFFB4A).w loc_3100A4: ; ... bsr.w sub_31017E bra.w DisplaySprite ; --------------------------------------------------------------------------- word_3100AC: dc.w $E64, $E86, $E64, $EA8, $E64, $ECA; 0 ; ... ; --------------------------------------------------------------------------- loc_3100B8: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3100C6(pc,d0.w),d1 jmp off_3100C6(pc,d1.w) ; --------------------------------------------------------------------------- off_3100C6: dc.w loc_3100CA-off_3100C6,return_310122-off_3100C6; 0 ; ... ; --------------------------------------------------------------------------- loc_3100CA: ; ... subq.w #1,$2A(a0) bpl.s return_3100F6 move.w #1,$2A(a0) move.w $2C(a0),d0 move.w word_3100F8(pc,d0.w),d1 move.w d1,($FFFFF616).w move.w d1,($FFFFF660).w addq.w #2,d0 move.w d0,$2C(a0) cmp.w #$2A,d0 bcs.s return_3100F6 addq.b #2,$25(a0) return_3100F6: ; ... rts ; --------------------------------------------------------------------------- word_3100F8: dc.w 0, -1, -3, -6, -$A, -$10, -$18; 0 ; ... dc.w -$14, -$12, -$E, -$D, -$C, -$D, -$E; 7 dc.w -$10, -$14, -$18, -$16, -$15, -$16, -$18; 14 ; --------------------------------------------------------------------------- return_310122: ; ... rts ; --------------------------------------------------------------------------- loc_310124: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_310136(pc,d0.w),d1 jsr off_310136(pc,d1.w) bra.w DisplaySprite ; --------------------------------------------------------------------------- off_310136: dc.w loc_31013C-off_310136 ; 0 ; ... dc.w sub_31017E-off_310136 ; 1 dc.w return_3101E2-off_310136 ; 2 ; --------------------------------------------------------------------------- loc_31013C: ; ... addq.b #2,$25(a0) lea ($FFFFB140).w,a1 ; =============== S U B R O U T I N E ======================================= sub_310144: ; ... move.l #Map_Obj0E_0,4(a1) move.w #0,2(a1) move.b #1,$1A(a1) tst.b ($FFFFFFD8).w bmi.s loc_310164 move.b #0,$1A(a1) loc_310164: ; ... move.b #2,$18(a1) move.w #$120,8(a1) move.w #$E8,d0 move.w d0,$A(a1) move.w d0,$2A(a1) rts ; End of function sub_310144 ; =============== S U B R O U T I N E ======================================= sub_31017E: ; ... tst.b ($FFFFF662).w bne.s return_310194 move.w ($FFFFF660).w,d0 neg.w d0 move.w $2A(a0),d1 add.w d0,d1 move.w d1,$A(a0) return_310194: ; ... rts ; End of function sub_31017E ; --------------------------------------------------------------------------- loc_310196: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3101A8(pc,d0.w),d1 jsr off_3101A8(pc,d1.w) bra.w DisplaySprite ; --------------------------------------------------------------------------- off_3101A8: dc.w loc_3101AE-off_3101A8 ; 0 ; ... dc.w sub_31017E-off_3101A8 dc.w return_3101E2-off_3101A8 ; --------------------------------------------------------------------------- loc_3101AE: ; ... addq.b #2,$25(a0) lea ($FFFFB180).w,a1 ; =============== S U B R O U T I N E ======================================= sub_3101B6: ; ... move.l #Map_Obj0E_0,4(a1) move.w #0,2(a1) move.b #2,$1A(a1) move.b #2,$18(a1) move.w #$100,8(a1) move.w #$F0,d0 move.w d0,$A(a1) move.w d0,$2A(a1) return_3101E2: ; ... rts ; End of function sub_3101B6 ; --------------------------------------------------------------------------- loc_3101E4: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3101F2(pc,d0.w),d1 jmp off_3101F2(pc,d1.w) ; --------------------------------------------------------------------------- off_3101F2: dc.w loc_3101FA-off_3101F2 ; ... dc.w loc_30FFD0-off_3101F2 dc.w loc_310232-off_3101F2 dc.w loc_310240-off_3101F2 ; --------------------------------------------------------------------------- loc_3101FA: ; ... addq.b #2,$25(a0) move.b #0,$1A(a0) move.l #Map_Obj0E_1,4(a0) move.w #$A3C0,2(a0) move.b #2,$1C(a0) move.b #1,$18(a0) move.w #$100,8(a0) move.w #$A8,$A(a0) move.w #4,$2A(a0) rts ; --------------------------------------------------------------------------- loc_310232: ; ... subq.w #1,$2A(a0) bmi.s loc_31023A rts ; --------------------------------------------------------------------------- loc_31023A: ; ... addq.b #2,$25(a0) rts ; --------------------------------------------------------------------------- loc_310240: ; ... move.b #2,$25(a0) move.b #0,$1B(a0) move.b #0,$1E(a0) move.w #6,$2A(a0) move.w $2C(a0),d0 addq.w #4,d0 cmp.w #$28,d0 bcc.w DeleteObject move.w d0,$2C(a0) move.l word_310280-4(pc,d0),d0 move.w d0,$A(a0) swap d0 move.w d0,8(a0) moveq #-$59,d0 loc_31027A: jmp PlaySound ; --------------------------------------------------------------------------- word_310280: dc.w $DA, $F2, $170, $F8, $132, $131, $19E, $A2, $C0, $E3, $180, $E0, $10D, $13B, $C0, $AB, $165, $107; 0 ; ... ; --------------------------------------------------------------------------- loc_3102A4: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3102B6(pc,d0.w),d1 jsr off_3102B6(pc,d1.w) bra.w DisplaySprite ; --------------------------------------------------------------------------- off_3102B6: dc.w loc_3102C6-off_3102B6 ; 0 ; ... dc.w sub_310306-off_3102B6 dc.w loc_30FFD0-off_3102B6 dc.w sub_310322-off_3102B6 dc.w sub_310346-off_3102B6 dc.w loc_30FFD0-off_3102B6 dc.w sub_31035E-off_3102B6 dc.w nullsub_2-off_3102B6 ; --------------------------------------------------------------------------- loc_3102C6: ; ... addq.b #2,$25(a0) move.w #3,$2A(a0) ; =============== S U B R O U T I N E ======================================= sub_3102D0: ; ... lea ($FFFFB1C0).w,a1 move.l #Map_Obj0E,4(a1) move.w #$8150,2(a1) move.b #5,$1A(a1) move.b #3,$18(a1) lea ($FFFFB040).w,a2 move.w 8(a2),8(a1) move.w $A(a2),d0 add.w #$30,d0 move.w d0,$A(a1) rts ; End of function sub_3102D0 ; =============== S U B R O U T I N E ======================================= sub_310306: ; ... subq.w #2,$A(a0) subq.w #1,$2A(a0) bpl.s return_310320 addq.b #2,$25(a0) move.b #4,$1C(a0) move.w #3,$2A(a0) return_310320: ; ... rts ; End of function sub_310306 ; =============== S U B R O U T I N E ======================================= sub_310322: ; ... addq.w #2,$A(a0) subq.w #1,$2A(a0) bpl.s return_310344 addq.b #2,$25(a0) move.w $A(a0),$2A(a0) lea ($FFFFB000).w,a1 move.b #$E,(a1) move.b #4,$28(a1) return_310344: ; ... rts ; End of function sub_310322 ; =============== S U B R O U T I N E ======================================= sub_310346: ; ... bsr.w sub_31017E cmp.w #$125,($FFFFB074).w bne.s return_31035C addq.b #2,$25(a0) move.w #$400,$1C(a0) return_31035C: ; ... rts ; End of function sub_310346 ; =============== S U B R O U T I N E ======================================= sub_31035E: ; ... addq.b #2,$25(a0) lea ($FFFFB4C0).w,a1 move.b #$E,(a1) move.b #$14,$28(a1) rts ; End of function sub_31035E ; =============== S U B R O U T I N E ======================================= nullsub_2: ; ... rts ; End of function nullsub_2 ; --------------------------------------------------------------------------- loc_310374: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_310382(pc,d0.w),d1 jmp off_310382(pc,d1.w) ; --------------------------------------------------------------------------- off_310382: dc.w loc_310388-off_310382 ; 0 ; ... dc.w loc_3103A8-off_310382 ; 1 dc.w loc_3103A4-off_310382 ; 2 ; --------------------------------------------------------------------------- loc_310388: ; ... move.b #$13,$1A(a0) move.b #3,$18(a0) move.w #$10F,8(a0) move.w #$D5,$A(a0) loc_3103A0: ; ... addq.b #2,$25(a0) loc_3103A4: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_3103A8: ; ... moveq #$C,d2 lea (loc_3103B4).l,a1 bra.w loc_30FF7E ; --------------------------------------------------------------------------- loc_3103B4: ; ... movep.w $D0(a4),d0 movep.w $D1(a5),d0 loc_3103BC: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3103CA(pc,d0.w),d1 jmp off_3103CA(pc,d1.w) ; --------------------------------------------------------------------------- off_3103CA: dc.w loc_3103CE-off_3103CA ; 0 ; ... dc.w loc_310408-off_3103CA ; 1 ; --------------------------------------------------------------------------- loc_3103CE: ; ... addq.b #2,$25(a0) move.l #Map_Obj0E_1,4(a0) move.w #$23C0,2(a0) move.b #0,$1A(a0) move.b #5,$18(a0) move.w #$170,8(a0) move.w #$80,$A(a0) move.b #3,$1C(a0) move.w #$8C,$2A(a0) bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_310408: ; ... subq.w #1,$2A(a0) bmi.w DeleteObject cmp.w #$3C,$2A(a0) bne.s loc_31041E move.b #1,$18(a0) loc_31041E: ; ... subq.w #2,8(a0) addq.w #1,$A(a0) lea (Ani_Obj0E).l,a1 bsr.w AnimateSprite bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_310434: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_310442(pc,d0.w),d1 jmp off_310442(pc,d1.w) ; --------------------------------------------------------------------------- off_310442: dc.w loc_310446-off_310442 ; 0 ; ... dc.w loc_310470-off_310442 ; 1 ; --------------------------------------------------------------------------- loc_310446: ; ... addq.b #2,$25(a0) move.l #Map_Obj0E_2,4(a0) move.w #$E3DD,2(a0) move.b #1,$1A(a0) move.b #1,$18(a0) move.w #$160,8(a0) move.w #$148,$A(a0) loc_310470: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_310474: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_310486(pc,d0.w),d1 jsr off_310486(pc,d1.w) bra.w DisplaySprite ; --------------------------------------------------------------------------- off_310486: dc.w loc_31048C-off_310486 ; 0 ; ... dc.w sub_3104CC-off_310486 ; 1 dc.w byte_3201E2-off_310486 ; 2 ; --------------------------------------------------------------------------- loc_31048C: ; ... addq.b #2,$25(a0) move.w #$200,$12(a0) lea ($FFFFB4C0).w,a1 ; =============== S U B R O U T I N E ======================================= sub_31049A: ; ... move.l #Map_Obj0E_3,4(a1) move.w #$8000,2(a1) clr.b $1A(a1) move.b #1,$18(a1) move.w #$120,d0 move.w d0,8(a1) move.w d0,$2A(a1) move.w #$68,d0 move.w d0,$A(a1) move.w d0,$2E(a1) rts ; End of function sub_31049A ; =============== S U B R O U T I N E ======================================= sub_3104CC: ; ... move.l $2A(a0),d2 move.l $2E(a0),d3 move.w $10(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a0),d0 add.w #$38,$12(a0) ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,$2A(a0) move.l d3,$2E(a0) swap d2 swap d3 move.w d2,8(a0) move.w d3,$A(a0) move.w $12(a0),d0 bmi.s return_310528 move.w #$A4,d1 cmp.w $A(a0),d1 bhi.s return_310528 move.w d1,$A(a0) asr.w #2,d0 neg.w d0 move.w d0,$12(a0) cmp.w #$FF00,d0 blt.s return_310528 addq.b #2,$25(a0) return_310528: ; ... rts ; End of function sub_3104CC ; --------------------------------------------------------------------------- loc_31052A: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_31053C(pc,d0.w),d1 jsr off_31053C(pc,d1.w) bra.w DisplaySprite ; --------------------------------------------------------------------------- off_31053C: dc.w loc_310540-off_31053C ; 0 ; ... dc.w byte_3201E2-off_31053C ; 1 ; --------------------------------------------------------------------------- loc_310540: ; ... addq.b #2,$25(a0) move.l #Map_Obj0E_3,4(a0) move.w #$8000,2(a0) clr.b $1A(a0) move.b #1,$18(a0) move.w #$120,8(a0) move.w #$C4,$A(a0) rts ; --------------------------------------------------------------------------- loc_31056A: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_31057C(pc,d0.w),d1 jsr off_31057C(pc,d1.w) bra.w DisplaySprite ; --------------------------------------------------------------------------- off_31057C: dc.w loc_310580-off_31057C ; 0 ; ... dc.w return_3101E2-off_31057C ; --------------------------------------------------------------------------- loc_310580: ; ... addq.b #2,$25(a0) move.l #Map_Obj0E_2,4(a0) move.w #$E3DD,2(a0) move.b #2,$1A(a0) move.b #1,$18(a0) move.w #$1A4,8(a0) move.w #$B0,$A(a0) rts ; --------------------------------------------------------------------------- ObjC9: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3105BA(pc,d0.w),d1 jmp off_3105BA(pc,d1.w) ; --------------------------------------------------------------------------- off_3105BA: dc.w loc_3105BE-off_3105BA ; ... dc.w loc_310600-off_3105BA ; --------------------------------------------------------------------------- loc_3105BE: ; ... addq.b #2,$24(a0) moveq #0,d0 move.b $28(a0),d0 lea (PaletteChangerDataIndex).l,a1 add.w (a1,d0.w),a1 move.l (a1)+,$3A(a0) move.l (a1)+,a2 move.b (a1)+,d0 move.w d0,$34(a0) lea ($FFFFFB80).w,a3 add.w d0,a3 move.b (a1)+,d0 move.w d0,$36(a0) loc_3105EA: ; ... move.w (a2)+,(a3)+ dbf d0,loc_3105EA move.b (a1)+,d0 move.b d0,$30(a0) move.b d0,$31(a0) move.b (a1)+,$32(a0) rts ; --------------------------------------------------------------------------- loc_310600: ; ... subq.b #1,$30(a0) bpl.s return_310636 move.b $31(a0),$30(a0) subq.b #1,$32(a0) bmi.w DeleteObject move.l $3A(a0),a2 move.l a0,a3 move.w $36(a0),d0 move.w $34(a0),d1 lea ($FFFFFB00).w,a0 add.w d1,a0 lea ($FFFFFB80).w,a1 add.w d1,a1 loc_31062E: ; ... jsr (a2) dbf d0,loc_31062E move.l a3,a0 return_310636: ; ... rts ; --------------------------------------------------------------------------- PaletteChangerDataIndex:dc.w off_310648-PaletteChangerDataIndex; 0 ; ... dc.w off_310654-PaletteChangerDataIndex; 1 dc.w off_310660-PaletteChangerDataIndex; 2 dc.w off_31066C-PaletteChangerDataIndex; 3 dc.w off_310678-PaletteChangerDataIndex; 4 dc.w off_310684-PaletteChangerDataIndex; 5 dc.w off_310690-PaletteChangerDataIndex; 6 dc.w off_31069C-PaletteChangerDataIndex; 7 off_310648: dc.l Pal_AddColor ; ... dc.l Pal_TitleEmblem dc.l $600F0215 off_310654: dc.l loc_310708 ; ... dc.l Pal_TitleBackground dc.l $400F0407 off_310660: dc.l loc_310708 ; ... dc.l Pal_3090BC+$A0 dc.l $F0807 off_31066C: dc.l loc_310746 ; ... dc.l Pal_3090BC+$A0 dc.l $F0807 off_310678: dc.l loc_310708 ; ... dc.l Pal_3090BC dc.l $1F0407 off_310684: dc.l loc_310708 ; ... dc.l Pal_3090BC+$60 dc.l $401F0407 off_310690: dc.l loc_310708 ; ... dc.l Pal_3090BC+$C0 dc.l $F0407 off_31069C: dc.l loc_310708 ; ... dc.l Pal_3090BC+$20 dc.l $1F0407 Pal_TitleKnuckles:dc.w $E20, 0, $A, $82E, $40E, $E, 8, $868, $68A; 0 ; ... dc.w $ACE, $AA8, $EEE, 0, $24A, $8AE, 0; 9 Pal_TitleBackground:dc.w $E20, $E42, $E64, $EA6, $ECA, $E64, $EEE, $EA, $C6; 0 ; ... dc.w $A2, $280, $8CE, $6AE, $8C, $468, 0; 9 Pal_TitleEmblem:dc.w $C00, 0, $C00, $E44, $E66, $E88, $EE, $AE, $6A; 0 ; ... dc.w $26, $EEE, $EAA, $C, 6, 2, $E8; 9 ; --------------------------------------------------------------------------- loc_310708: ; ... move.b (a1)+,d2 and.b #$E,d2 move.b (a0),d3 cmp.b d2,d3 bls.s loc_310718 subq.b #2,d3 move.b d3,(a0) loc_310718: ; ... addq.w #1,a0 move.b (a1)+,d2 move.b d2,d3 and.b #$E0,d2 and.b #$E,d3 move.b (a0),d4 move.b d4,d5 and.b #$E0,d4 and.b #$E,d5 cmp.b d2,d4 bls.s loc_31073A sub.b #$20,d4 loc_31073A: ; ... cmp.b d3,d5 bls.s loc_310740 subq.b #2,d5 loc_310740: ; ... or.b d4,d5 move.b d5,(a0)+ rts ; --------------------------------------------------------------------------- loc_310746: ; ... moveq #$E,d2 move.b (a0),d3 and.b d2,d3 cmp.b d2,d3 bcc.s loc_310754 addq.b #2,d3 move.b d3,(a0) loc_310754: ; ... addq.w #1,a0 move.b (a0),d3 move.b d3,d4 and.b #$E0,d3 and.b #$E,d4 cmp.b #$E0,d3 bcc.s loc_31076C add.b #$20,d3 loc_31076C: ; ... cmp.b d2,d4 bcc.s loc_310772 addq.b #2,d4 loc_310772: ; ... or.b d3,d4 move.b d4,(a0)+ rts ; =============== S U B R O U T I N E ======================================= sub_310778: ; ... tst.b ($FFFFF662).w bne.w return_31089E move.b ($FFFFF605).w,d0 or.b ($FFFFF607).w,d0 and.b #$7F,($FFFFF605).w and.b #$7F,($FFFFF607).w and.b #$80,d0 beq.w return_31089E st ($FFFFF662).w move.w #$FFE8,($FFFFF616).w lea ($FFFFB000).w,a1 jsr DeleteObject2 move.b #$E,$25(a0) move.b #4,$1A(a0) move.w #$F4,8(a0) move.w #$AA,$A(a0) lea ($FFFFB1C0).w,a1 move.b #$E,(a1) move.b #$A,$24(a1) bsr.w sub_3102D0 move.b #$E,$25(a1) lea ($FFFFB140).w,a1 move.b #$E,(a1) move.b #6,d0 move.b d0,$28(a1) move.b d0,$24(a1) bsr.w sub_310144 add.w #$18,$A(a1) move.b #4,$25(a1) lea ($FFFFB180).w,a1 move.b #$E,(a1) move.b #$E,d0 move.b d0,$28(a1) move.b d0,$24(a1) bsr.w sub_3101B6 add.w #$18,$A(a1) move.b #4,$25(a1) lea ($FFFFB4C0).w,a1 move.b #$E,(a1) move.b #$14,d0 move.b d0,$28(a1) move.b d0,$24(a1) bsr.w sub_31049A add.w #$38,$A(a1) move.b #4,$25(a1) move.b #$F,($FFFFB400).w lea ($FFFFB0C0).w,a1 bsr.w DeleteObject2 lea (Pal_TitleEmblem).l,a1 lea ($FFFFFB60).w,a2 moveq #7,d6 loc_310866: ; ... move.l (a1)+,(a2)+ dbf d6,loc_310866 lea (Pal_TitleBackground).l,a1 lea ($FFFFFB40).w,a2 moveq #7,d6 loc_310878: ; ... move.l (a1)+,(a2)+ dbf d6,loc_310878 lea (Pal_TitleKnuckles).l,a1 lea ($FFFFFB00).w,a2 moveq #7,d6 loc_31088A: ; ... move.l (a1)+,(a2)+ dbf d6,loc_31088A tst.b $30(a0) bne.s return_31089E moveq #-$67,d0 jsr PlayMusic return_31089E: ; ... rts ; End of function sub_310778 ; --------------------------------------------------------------------------- ; Obj0F - Sonic 2 Title Screen Menu (unused and incomplete) ; --------------------------------------------------------------------------- Obj0F: ; ... moveq #0,d0 move.b $24(a0),d0 move.w Obj0F_States(pc,d0.w),d1 jsr Obj0F_States(pc,d1.w) bra.w DisplaySprite ; --------------------------------------------------------------------------- Obj0F_States: dc.w Obj0F_Init-Obj0F_States ; 0 ; ... dc.w Obj0F_Main-Obj0F_States ; 1 ; --------------------------------------------------------------------------- Obj0F_Init: ; ... addq.b #2,$24(a0) move.w #$120,8(a0) move.w #$144,$A(a0) move.l #Map_Obj0E_2,4(a0) move.w #$E3DD,2(a0) bsr.w Adjust2PArtPointer2_Useless move.b #0,($FFFFFF86).w move.b ($FFFFFF86).w,$1A(a0) Obj0F_Main: ; ... rts ; --------------------------------------------------------------------------- Ani_Obj0E: dc.w byte_3108F0-Ani_Obj0E ; 0 ; ... dc.w byte_3108F6-Ani_Obj0E ; 1 dc.w byte_3108FE-Ani_Obj0E ; 2 dc.w byte_310906-Ani_Obj0E ; 3 dc.w byte_31090A-Ani_Obj0E ; 4 byte_3108F0: dc.b 3, 0, 1, 2, 3,$FA ; 0 ; ... byte_3108F6: dc.b 1, 0, 1, 2, 3, 4,$FA, 0; 0 ; ... byte_3108FE: dc.b 1, 0, 1, 2, 1, 0,$FA, 0; 0 ; ... byte_310906: dc.b 3, 0, 3,$FF ; 0 ; ... byte_31090A: dc.b 3, 5, 6, 7, 7, 6, 5,$FA; 0 ; ... Map_Obj0E_1: dc.w byte_31091A-Map_Obj0E_1,byte_310922-Map_Obj0E_1,byte_31092A-Map_Obj0E_1,byte_310932-Map_Obj0E_1; 0 ; ... byte_31091A: dc.b 0, 1,$FC, 0, 0, 0,$FF,$FC; 0 ; ... byte_310922: dc.b 0, 1,$F8, 5, 0, 1,$FF,$F8; 0 ; ... byte_31092A: dc.b 0, 1,$F4, $A, 0, 5,$FF,$F4; 0 ; ... byte_310932: dc.b 0, 1,$FC, 0, 0, $E,$FF,$FC; 0 ; ... Map_Obj0E_0: dc.b 0, 6, 0,$2C, 0,$58, 0, 6, 0, $C,$E3,$CF,$FF,$B0, 0, 8,$E3,$D3,$FF,$D0, 0, $C,$E3,$D6, 0,$18, 0, 8,$E3,$DA, 0,$38, 0, $C, 0,$10,$FF,$E8, 0, 4, 0,$10, 0, 8, 0, 7, 0, $C,$E3,$CF,$FF,$B0, 0, 8,$E3,$D3,$FF,$D0, 0, $C,$E3,$D6, 0,$18, 0, 8,$E3,$DA, 0,$38, 0, $C, 0,$10,$FF,$E8, 0, 4, 0,$10, 0, 8, 8, 4,$E3,$FC, 0,$58, 0, 6, 0, 3, 0, 0, 0, 8, 0, 3, 0, 0, 0, 0,$20, 3, 0, 0, 0, 8,$20, 3, 0, 0, 0, 0,$40, 3, 0, 0, 0, 8,$40, 3, 0, 0, 0, 0; 0 ; ... Map_Obj0E: dc.w byte_3109C8-Map_Obj0E,byte_310A0C-Map_Obj0E; 0 ; ... dc.w byte_310A5C-Map_Obj0E,byte_310AAC-Map_Obj0E; 2 dc.w byte_310AEA-Map_Obj0E,byte_310B28-Map_Obj0E; 4 dc.w byte_310B42-Map_Obj0E,byte_310B5C-Map_Obj0E; 6 byte_3109C8: dc.b 0, $B,$18, $F, 0, 0, 0,$48,$38, $F, 0,$10, 0,$48,$38, $F, 0,$20, 0,$28,$18, $F, 0,$30, 0,$28,$10, 4, 0,$40, 0,$50, 8, 9, 0,$42, 0,$38,$10, $C, 0,$48, 0,$18,$18, $D, 0,$4C, 0, 8,$30, 5, 0,$54, 0, 0,$30, 0, 0,$58, 0,$20,$38, $B, 0,$59, 0,$10; 0 ; ... byte_310A0C: dc.b 0, $D,$10, $F, 0,$65, 0,$40,$30, $F, 0,$75, 0,$40,$10, $F, 0,$85, 0,$20,$30, $F, 0,$95, 0,$20, 8, $C, 0,$A5, 0,$20, 8, 8, 0,$A9, 0,$40,$10, $A, 0,$AC, 0, 8,$20, 3, 0,$B5, 0, 0,$28, 0, 0,$B9, 0,$18,$30, $A, 0,$BA, 0, 8,$48, 5, 0,$C3, 0,$10,$50, $C, 0,$C7, 0,$20,$50, 8, 0,$CB, 0,$40; 0 ; ... byte_310A5C: dc.b 0, $D,$40, 6, 0,$CE, 0,$60,$38, $F, 0,$D4, 0,$40,$18, $F, 0,$E4, 0,$40,$18, $F, 0,$F4, 0,$20,$38, $F, 1, 4, 0,$20, 8, 5, 1,$14, 0,$48, 0, $A, 1,$18, 0,$30, 8, 5, 1,$21, 0,$20,$10, 9, 1,$25, 0, 8,$20, $C, 1,$2B, 0, 0,$28, 7, 1,$2F, 0,$10,$30, 6, 1,$37, 0, 0,$48, 9, 1,$3D, 0, 8; 0 ; ... byte_310AAC: dc.b 0, $A,$38, $F, 1,$43, 0, 0,$18, $F, 1,$53, 0, 0,$18, $F, 1,$63, 0,$20,$38, $F, 1,$73, 0,$20, 8, 9, 1,$83, 0, 8, 0, $E, 1,$89, 0,$20, 8, 7, 1,$95, 0,$40,$28, 5, 1,$9D, 0,$40,$38, $F, 1,$A1, 0,$40,$48, 1, 1,$B1, 0,$60; 0 ; ... byte_310AEA: dc.b 0, $A, 8, 7, 1,$B3, 0,$40,$28, 6, 1,$BB, 0,$40,$40, $E, 1,$C1, 0,$40, 0, $F, 1,$CD, 0,$20,$20, $F, 1,$DD, 0,$20,$40, $E, 1,$ED, 0,$20, 0, $A, 1,$F9, 0, 8,$18, $F, 2, 2, 0, 0,$38, $D, 2,$12, 0, 0,$48, 9, 2,$1A, 0, 8; 0 ; ... byte_310B28: dc.b 0, 4,$10, $F, 2,$20, 0, 8, 0, 9, 2,$30, 0,$10, 8, 3, 2,$36, 0,$28,$10, 0, 2,$3A, 0,$30; 0 ; ... byte_310B42: dc.b 0, 4, 0, 0, 2,$3B, 0,$18, 8, $F, 2,$3C, 0,$10,$10, 2, 2,$4C, 0, 8,$28, $D, 2,$4F, 0, 8; 0 ; ... byte_310B5C: dc.b 0, 4, 8, $F, 2,$57, 0, 8, 8, 3, 2,$67, 0,$28,$28, $C, 2,$6B, 0, 8,$28, 0, 2,$6F, 0,$28; 0 ; ... Map_Obj0E_3: dc.w byte_310B78-Map_Obj0E_3 ; ... byte_310B78: dc.b 0,$1F,$E8, 2,$63,$FE,$FF,$84, 0, 2,$64, 1,$FF,$84,$E8, $C,$64, 4,$FF,$8C,$F0, $F,$64, 8,$FF,$8C,$10, $C,$64,$18,$FF,$8C,$E8, $C,$64, 4,$FF,$AC,$F0, $F,$64,$1C,$FF,$AC,$10, $C,$64,$18,$FF,$AC,$E8, $C,$64, 4,$FF,$CC,$F0, $F,$64,$2C,$FF,$CC,$10, $C,$64,$18,$FF,$CC,$E8, $C,$64, 4,$FF,$EC,$F0, $F,$64,$3C,$FF,$EC,$10, $C,$64,$18,$FF,$EC,$E8, $C,$64, 4, 0, $C,$F0, $F,$64,$4C, 0, $C,$10, $C,$64,$18, 0, $C,$E8, $C,$64, 4, 0,$2C,$F0, $F,$64,$5C, 0,$2C,$10, $C,$64,$18, 0,$2C,$E8, $C,$64, 4, 0,$4C,$F0, $F,$64,$6C, 0,$4C,$10, $C,$64,$18, 0,$4C,$E8, 2,$64,$7C, 0,$6C, 0, 2,$64,$7F, 0,$6C,$E8, 2,$64,$82, 0,$74, 0, 2,$64,$85, 0,$74,$18, 9,$64,$88,$FF,$A8,$18, $D,$64,$8E,$FF,$C8,$18, 9,$64,$96,$FF,$E8,$18, $A,$64,$9C, 0,$28; 0 ; ... Map_Obj0E_2: dc.w byte_310C3A-Map_Obj0E_2,byte_310C4E-Map_Obj0E_2,byte_310C62-Map_Obj0E_2; 0 ; ... byte_310C3A: dc.b 0, 3,$FC, $C, 0, 0,$FF,$D4,$FC, 8, 0, 4,$FF,$F4,$FC, $C, 0, 7, 0, $C; 0 ; ... byte_310C4E: dc.b 0, 3, 0, $D, 0, $B, 0, 0, 0, 9, 0,$13, 0,$20, 0, 9, 0,$19, 0,$38; 0 ; ... byte_310C62: dc.b 0, 1, 0, 4, 0,$1F, 0, 0; 0 ; ... ; --------------------------------------------------------------------------- ; Object 34 - level title card (screen with red, yellow, and green) ; ---------------------------------------------------------------------------- Obj34: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_310C78(pc,d0.w),d1 jmp off_310C78(pc,d1.w) ; --------------------------------------------------------------------------- off_310C78: dc.w loc_310C90-off_310C78 ; 0 ; ... dc.w loc_310D44-off_310C78 ; 1 dc.w loc_310D7A-off_310C78 ; 2 dc.w loc_310DC8-off_310C78 ; 3 dc.w loc_310DFE-off_310C78 ; 4 dc.w loc_310E0A-off_310C78 ; 5 dc.w loc_310E10-off_310C78 ; 6 dc.w loc_310E6A-off_310C78 ; 7 dc.w loc_310EAC-off_310C78 ; 8 dc.w loc_310F0E-off_310C78 ; 9 dc.w loc_310F26-off_310C78 ; 10 dc.w loc_310F40-off_310C78 ; 11 ; --------------------------------------------------------------------------- loc_310C90: ; ... lea (a0),a1 loc_310C92: lea Obj34_TitleCardData(pc),a2 moveq #5,d1 loc_310C98: ; ... move.b #$34,0(a1) move.b (a2)+,$24(a1) move.l #Map_Obj34,4(a1) move.b (a2)+,$1A(a1) move.b (a2)+,$19(a1) move.b (a2)+,$1E(a1) move.w (a2),8(a1) move.w (a2)+,$32(a1) move.w (a2)+,$30(a1) move.w (a2)+,$A(a1) move.b #0,1(a1) lea $40(a1),a1 dbf d1,loc_310C98 move.w #$26,($FFFFB1B4).w clr.w ($FFFFF616).w move.w #-$E0,($FFFFF61E).w lea ($FFFFE000).w,a1 moveq #0,d0 move.w #$FF,d1 loc_310CEE: ; ... move.l d0,(a1)+ dbf d1,loc_310CEE rts ; --------------------------------------------------------------------------- Obj34_TitleCardData:dc.b 8, 0,$80,$1B ; 0 ; ... dc.b 2,$40, 1,$20 ; 4 dc.b 0,$B8, $A,$11 ; 8 dc.b $40,$1C, 0,$28 ; 12 dc.b 1,$48, 0,$D0 ; 16 dc.b $C,$12,$18,$1C ; 20 dc.b 0,$68, 1,$88 ; 24 dc.b 0,$D0, 2, 0 ; 28 dc.b 0, 0, 0, 0 ; 32 dc.b 0, 0, 0, 0 ; 36 dc.b 4,$15,$48, 8 ; 40 dc.b 2,$A8, 1,$68 ; 44 dc.b 1,$20, 6,$16 ; 48 dc.b 8,$15, 0,$80 ; 52 dc.b 0,$F0, 0,$F0 ; 56 ; =============== S U B R O U T I N E ======================================= sub_310D32: ; ... subq.b #1,$1E(a0) bne.s loc_310D40 move.b #1,$1E(a0) rts ; --------------------------------------------------------------------------- loc_310D40: ; ... addq.w #4,sp rts ; --------------------------------------------------------------------------- loc_310D44: ; ... moveq #$10,d0 moveq #8,d1 tst.w ($FFFFFFDC).w sne d6 beq.s loc_310D54 moveq #$20,d0 moveq #7,d1 loc_310D54: ; ... move.w $34(a0),d2 cmp.w d0,d2 beq.s return_310D78 lsl.w d1,d2 move.w #-$4000,d0 add.w d2,d0 move.w d0,$36(a0) tst.b d6 beq.s loc_310D74 add.w #-$6000,d2 move.w d2,$38(a0) loc_310D74: ; ... addq.w #1,$34(a0) return_310D78: ; ... rts ; --------------------------------------------------------------------------- loc_310D7A: ; ... jsr sub_310D32(pc) move.w $34(a0),d0 bmi.w loc_310E3E add.w d0,d0 move.w #$500,d1 tst.w ($FFFFFFDC).w sne d6 bne.s loc_310D96 add.w d1,d1 loc_310D96: ; ... move.w #-$4000,d2 add.w d0,d2 add.w d1,d2 move.w d2,$36(a0) tst.b d6 beq.s loc_310DB0 add.w #-$6000,d1 add.w d0,d1 move.w d1,$38(a0) loc_310DB0: ; ... subq.w #2,$34(a0) move.w $34(a0),$3A(a0) cmp.w #6,$34(a0) seq $34(a0) bra.w loc_310E3E ; --------------------------------------------------------------------------- loc_310DC8: ; ... jsr sub_310D32(pc) tst.w $34(a0) bmi.w loc_310E3E move.w #$C000,$36(a0) tst.w ($FFFFFFDC).w beq.s loc_310DE6 move.w #$A000,$38(a0) loc_310DE6: ; ... addq.w #2,$34(a0) move.w $34(a0),$3A(a0) cmp.w #$E,$34(a0) seq $34(a0) bra.w loc_310E3E ; --------------------------------------------------------------------------- loc_310DFE: ; ... jsr sub_310D32(pc) move.b ($FFFFFE10).w,$1A(a0) bra.s loc_310E3E ; --------------------------------------------------------------------------- loc_310E0A: ; ... jsr sub_310D32(pc) bra.s loc_310E3E ; --------------------------------------------------------------------------- loc_310E10: ; ... jsr sub_310D32(pc) move.b ($FFFFFE10).w,d0 cmp.b #$10,d0 beq.s BraTo_DeleteObject_2 cmp.b #6,d0 beq.s BraTo_DeleteObject_2 cmp.b #$E,d0 beq.s BraTo_DeleteObject_2 move.b ($FFFFFE11).w,d1 add.b #$12,d1 cmp.b #5,d0 bne.s loc_310E3A moveq #$14,d1 loc_310E3A: ; ... move.b d1,$1A(a0) loc_310E3E: ; ... moveq #$10,d0 move.w 8(a0),d1 cmp.w $30(a0),d1 beq.s loc_310E5A bgt.s loc_310E4E neg.w d0 loc_310E4E: ; ... sub.w d0,8(a0) cmp.w #$200,8(a0) bgt.s return_310E64 loc_310E5A: ; ... cmp.w #$50,8(a0) bgt.w DisplaySprite return_310E64: ; ... rts ; --------------------------------------------------------------------------- BraTo_DeleteObject_2: ; ... bra.w DeleteObject ; --------------------------------------------------------------------------- loc_310E6A: ; ... move.w $34(a0),d0 bpl.s loc_310E7C move.b #$10,-$1C(a0) clr.w -$C(a0) bra.s BraTo_DeleteObject_2 ; --------------------------------------------------------------------------- loc_310E7C: ; ... add.w d0,d0 move.w #-$4000,$36(a0) add.w d0,$36(a0) tst.w ($FFFFFFDC).w beq.s loc_310E98 move.w #$A000,$38(a0) add.w d0,$38(a0) loc_310E98: ; ... subq.w #4,$34(a0) cmp.w #-2,$34(a0) bne.s loc_310EA8 clr.w $34(a0) loc_310EA8: ; ... bra.w loc_310EEC ; --------------------------------------------------------------------------- loc_310EAC: ; ... move.w $34(a0),d0 cmp.w #$28,d0 bne.s loc_310EBE move.b #$12,-$1C(a0) bra.s BraTo_DeleteObject_2 ; --------------------------------------------------------------------------- loc_310EBE: ; ... add.w d0,d0 move.w #$500,d1 tst.w ($FFFFFFDC).w sne d6 bne.s loc_310ECE add.w d1,d1 loc_310ECE: ; ... move.w #$C000,d2 add.w d0,d2 add.w d1,d2 move.w d2,$36(a0) tst.b d6 beq.s loc_310EE8 add.w #-$6000,d1 add.w d0,d1 move.w d1,$38(a0) loc_310EE8: ; ... addq.w #4,$34(a0) loc_310EEC: ; ... moveq #$20,d0 move.w 8(a0),d1 cmp.w $32(a0),d1 beq.s return_310F0C bhi.s loc_310EFC neg.w d0 loc_310EFC: ; ... sub.w d0,8(a0) cmp.w #$200,8(a0) bhi.s return_310F0C bra.w DisplaySprite ; --------------------------------------------------------------------------- return_310F0C: ; ... rts ; --------------------------------------------------------------------------- loc_310F0E: ; ... move.l a0,-(sp) move.l d7,-(sp) bsr.w DeformBgLayer move.l (sp)+,d7 move.l (sp)+,a0 add.b #2,$24(a0) move.w #$F0,$34(a0) loc_310F26: ; ... move.w $34(a0),d0 sub.w #$20,d0 cmp.w #-$30,d0 beq.w BraTo_DeleteObject_2 move.w d0,$34(a0) move.w d0,$36(a0) rts ; --------------------------------------------------------------------------- loc_310F40: ; ... tst.w $1E(a0) beq.s loc_310F4C subq.w #1,$1E(a0) bra.s loc_310F68 ; --------------------------------------------------------------------------- loc_310F4C: ; ... moveq #$20,d0 move.w 8(a0),d1 cmp.w $32(a0),d1 beq.s loc_310F6C bhi.s loc_310F5C neg.w d0 loc_310F5C: ; ... sub.w d0,8(a0) cmp.w #$200,8(a0) bhi.s loc_310F6C loc_310F68: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_310F6C: ; ... cmp.w #$B080,a0 bne.s loc_310F8A moveq #2,d0 jsr LoadPLC moveq #0,d0 move.b ($FFFFFE10).w,d0 move.b byte_310F8E(pc,d0.w),d0 jsr LoadPLC loc_310F8A: ; ... bra.w DeleteObject ; --------------------------------------------------------------------------- byte_310F8E: dc.b $32 ; ... dc.b $32 ; 2 dc.b $32 ; 2 dc.b $32 ; 2 dc.b $34 ; 4 dc.b $34 ; 4 dc.b $34 ; 4 dc.b $34 ; 4 dc.b $36 ; 6 dc.b $36 ; 6 dc.b $37 ; 7 dc.b $33 ; 3 dc.b $39 ; 9 dc.b $3A ; : dc.b $35 ; 5 dc.b $3B ; ; dc.b $38 ; 8 dc.b $38 ; 8 ; End of function sub_310D32 ; --------------------------------------------------------------------------- Obj39: ; ... moveq #0,d0 ; Game Over / Time Over text move.b $24(a0),d0 move.w off_310FAE(pc,d0.w),d1 jmp off_310FAE(pc,d1.w) ; --------------------------------------------------------------------------- off_310FAE: dc.w loc_310FB4-off_310FAE ; 0 ; ... dc.w loc_310FF8-off_310FAE ; 1 dc.w loc_31101A-off_310FAE ; 2 ; --------------------------------------------------------------------------- loc_310FB4: ; ... tst.l ($FFFFF680).w beq.s loc_310FBC rts ; --------------------------------------------------------------------------- loc_310FBC: ; ... addq.b #2,$24(a0) move.w #$50,8(a0) btst #0,$1A(a0) beq.s loc_310FD4 move.w #$1F0,8(a0) loc_310FD4: ; ... move.w #$F0,$A(a0) move.l #Map_Obj39,4(a0) move.w #$84DE,2(a0) bsr.w Adjust2PArtPointer2_Useless move.b #0,1(a0) move.b #0,$18(a0) loc_310FF8: ; ... moveq #$10,d1 cmp.w #$120,8(a0) beq.s loc_31100E bcs.s loc_311006 neg.w d1 loc_311006: ; ... add.w d1,8(a0) bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_31100E: ; ... move.w #$2D0,$1E(a0) addq.b #2,$24(a0) rts ; --------------------------------------------------------------------------- loc_31101A: ; ... btst #0,$1A(a0) bne.w BraTo_DisplaySprite_3 move.b ($FFFFF605).w,d0 or.b ($FFFFF607).w,d0 and.b #$70,d0 bne.s loc_311040 tst.w $1E(a0) beq.s loc_311040 subq.w #1,$1E(a0) bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_311040: ; ... tst.b ($FFFFFE1A).w bne.s loc_311060 tst.b ($FFFFFECC).w bne.s loc_311060 move.b #$14,($FFFFF600).w tst.b ($FFFFFE18).w bne.s BraTo_DisplaySprite_3 move.b #0,($FFFFF600).w bra.s BraTo_DisplaySprite_3 ; --------------------------------------------------------------------------- loc_311060: ; ... clr.l ($FFFFFE38).w move.w #1,($FFFFFE02).w BraTo_DisplaySprite_3: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- Obj3A: ; ... moveq #0,d0 ; Act Clear Results move.b $24(a0),d0 move.w off_31107C(pc,d0.w),d1 jmp off_31107C(pc,d1.w) ; --------------------------------------------------------------------------- off_31107C: dc.w loc_311094-off_31107C ; 0 ; ... dc.w loc_31110C-off_31107C ; 1 dc.w loc_31114C-off_31107C ; 2 dc.w loc_311150-off_31107C ; 3 dc.w loc_311172-off_31107C ; 4 dc.w loc_3111A6-off_31107C ; 5 dc.w loc_3111B4-off_31107C ; 6 dc.w loc_3111A6-off_31107C ; 7 dc.w loc_31127A-off_31107C ; 8 dc.w loc_3112B0-off_31107C ; 9 dc.w loc_3112CC-off_31107C ; 10 dc.w loc_311144-off_31107C ; 11 ; --------------------------------------------------------------------------- loc_311094: ; ... tst.l ($FFFFF680).w beq.s loc_31109C rts ; --------------------------------------------------------------------------- loc_31109C: ; ... move #$2700,sr move.l #$78C00002,($C00004).l lea byte_312096(pc),a1 moveq #$1F,d0 loc_3110B0: ; ... move.l (a1)+,($C00000).l dbf d0,loc_3110B0 move #$2300,sr move.l a0,a1 lea word_31133C(pc),a2 moveq #7,d1 loc_3110C6: ; ... move.b 0(a1),d0 beq.s loc_3110D8 cmp.b #$3A,d0 beq.s loc_3110D8 lea $40(a1),a1 bra.s loc_3110C6 ; --------------------------------------------------------------------------- loc_3110D8: ; ... move.b #$3A,0(a1) move.w (a2)+,8(a1) move.w (a2)+,$30(a1) move.w (a2)+,$A(a1) move.b (a2)+,$24(a1) move.b (a2)+,$1A(a1) move.l #Map_Obj3A,4(a1) bsr.w Adjust2PArtPointer_Useless move.b #0,1(a1) lea $40(a1),a1 dbf d1,loc_3110C6 loc_31110C: ; ... moveq #0,d0 cmp.w #2,($FFFFFF70).w bne.s loc_311122 addq.w #1,d0 btst #7,($FFFFFFD8).w beq.s loc_311122 addq.w #1,d0 loc_311122: ; ... move.b d0,$1A(a0) bsr.w loc_310E3E move.w 8(a0),d0 cmp.w $30(a0),d0 bne.w return_311142 move.b #$A,$24(a0) move.w #$B4,$1E(a0) return_311142: ; ... rts ; --------------------------------------------------------------------------- loc_311144: ; ... tst.w ($FFFFFF40).w bne.w DeleteObject loc_31114C: ; ... bra.w loc_310E3E ; --------------------------------------------------------------------------- loc_311150: ; ... move.b ($FFFFFE10).w,d0 cmp.b #$10,d0 beq.s loc_311168 cmp.b #6,d0 beq.s loc_311168 cmp.b #$E,d0 bne.w loc_310E3E loc_311168: ; ... move.b #5,$1A(a0) bra.w loc_310E3E ; --------------------------------------------------------------------------- loc_311172: ; ... move.b ($FFFFFE10).w,d0 cmp.b #$10,d0 beq.w BraTo_DeleteObject_2 cmp.b #6,d0 beq.w BraTo_DeleteObject_2 cmp.b #$E,d0 beq.w BraTo_DeleteObject_2 cmp.b #5,d0 bne.s loc_311198 moveq #8,d0 bra.s loc_31119E ; --------------------------------------------------------------------------- loc_311198: ; ... move.b ($FFFFFE11).w,d0 addq.b #6,d0 loc_31119E: ; ... move.b d0,$1A(a0) bra.w loc_310E3E ; --------------------------------------------------------------------------- loc_3111A6: ; ... subq.w #1,$1E(a0) bne.s BraTo_DisplaySprite_4 addq.b #2,$24(a0) BraTo_DisplaySprite_4: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_3111B4: ; ... bsr.w DisplaySprite move.b #1,($FFFFF7D6).w moveq #0,d0 tst.w ($FFFFF7D2).w beq.s loc_3111D0 add.w #$A,d0 sub.w #$A,($FFFFF7D2).w loc_3111D0: ; ... tst.w ($FFFFF7D4).w beq.s loc_3111E0 add.w #$A,d0 sub.w #$A,($FFFFF7D4).w loc_3111E0: ; ... tst.w ($FFFFFF92).w beq.s loc_3111F0 add.w #$A,d0 sub.w #$A,($FFFFFF92).w loc_3111F0: ; ... add.w d0,($FFFFFF8E).w tst.w d0 bne.s loc_311260 move.w #$C5,d0 jsr PlaySound addq.b #2,$24(a0) move.w #$B4,$1E(a0) cmp.w #1000,($FFFFFF8E).w bcs.s return_31125E move.w #$12C,$1E(a0) lea $40(a0),a1 loc_31121E: ; ... tst.b 0(a1) beq.s loc_31122A lea $40(a1),a1 bra.s loc_31121E ; --------------------------------------------------------------------------- loc_31122A: ; ... move.b #$3A,0(a1) move.b #$12,$24(a1) move.w #$188,8(a1) move.w #$118,$A(a1) move.l #Map_Obj3A,4(a1) bsr.w Adjust2PArtPointer_Useless move.b #0,1(a1) move.w #$3C,$1E(a1) addq.b #1,($FFFFFE18).w return_31125E: ; ... rts ; --------------------------------------------------------------------------- loc_311260: ; ... jsr AddPoints2 move.b ($FFFFFE0F).w,d0 and.b #3,d0 bne.s return_31125E move.w #$CD,d0 jmp PlaySound ; --------------------------------------------------------------------------- loc_31127A: ; ... moveq #0,d0 move.b ($FFFFFE10).w,d0 add.w d0,d0 add.b ($FFFFFE11).w,d0 add.w d0,d0 lea Level_Order(pc),a1 move.w (a1,d0.w),d0 tst.w d0 bpl.s loc_31129C move.b #0,($FFFFF600).w rts ; --------------------------------------------------------------------------- loc_31129C: ; ... move.w d0,($FFFFFE10).w clr.b ($FFFFFE30).w clr.b ($FFFFFEE0).w move.w #1,($FFFFFE02).w rts ; --------------------------------------------------------------------------- loc_3112B0: ; ... tst.w $1E(a0) beq.s loc_3112BC subq.w #1,$1E(a0) rts ; --------------------------------------------------------------------------- loc_3112BC: ; ... add.b #2,$24(a0) move.w #$BF,d0 jsr PlaySound loc_3112CC: ; ... subq.w #1,$1E(a0) bpl.s loc_3112E2 move.w #$13,$1E(a0) addq.b #1,$1B(a0) and.b #1,$1B(a0) loc_3112E2: ; ... moveq #$C,d0 add.b $1B(a0),d0 move.b d0,$1A(a0) btst #4,($FFFFFE05).w bne.w DisplaySprite rts ; --------------------------------------------------------------------------- Level_Order: dc.w 1, $D00 ; 0 ; ... dc.w 0, 0 ; 2 dc.w $201, $400 ; 4 dc.w 0, 0 ; 6 dc.w $401, $500 ; 8 dc.w $1000, 0 ; 10 dc.w $E00, 0 ; 12 dc.w $701, $B00 ; 14 dc.w $801, $A00 ; 16 dc.w 0, 0 ; 18 dc.w $A01, $400 ; 20 dc.w $B01, $A00 ; 22 dc.w $C01, $700 ; 24 dc.w $D01, $F00 ; 26 dc.w $FFFF, 0 ; 28 dc.w $F01, $C00 ; 30 dc.w $600, 0 ; 32 word_31133C: dc.w $28, $138, $B8, $200, $200, $100, $CA, $403, $240, $140, $CA, $604, $278, $178, $BE, $806, $350, $120, $120, $409, $320, $120, $F0, $40A, $330, $120, $100, $40B, $340, $120, $110,$160E; 0 ; ... ; --------------------------------------------------------------------------- ; Object 6F - End of special stage results screen Obj6F: ; ... moveq #0,d0 moveq #0,d6 move.b $24(a0),d0 move.w off_31138C(pc,d0.w),d1 jmp off_31138C(pc,d1.w) ; --------------------------------------------------------------------------- off_31138C: dc.w loc_3113C4-off_31138C,loc_31140E-off_31138C; 0 ; ... dc.w loc_311442-off_31138C,loc_311480-off_31138C; 2 ; Check for all emeralds dc.w loc_31147E-off_31138C,loc_31147C-off_31138C; 4 dc.w loc_31147A-off_31138C,loc_311478-off_31138C; 6 dc.w loc_311476-off_31138C,loc_311474-off_31138C; 8 dc.w loc_311522-off_31138C,loc_3114BE-off_31138C; 10 dc.w loc_31149A-off_31138C,loc_311526-off_31138C; 12 dc.w loc_311530-off_31138C,loc_31153E-off_31138C; 14 dc.w loc_311530-off_31138C,loc_3115D2-off_31138C; 16 dc.w loc_311530-off_31138C,loc_311530-off_31138C; 18 dc.w loc_3115DC-off_31138C,loc_311640-off_31138C; 20 dc.w loc_311530-off_31138C,loc_3115D2-off_31138C; 22 dc.w loc_311654-off_31138C,loc_3116D0-off_31138C; 24 dc.w loc_3116F2-off_31138C,loc_311710-off_31138C; 26 ; --------------------------------------------------------------------------- loc_3113C4: ; ... tst.l ($FFFFF680).w beq.s loc_3113CC rts ; --------------------------------------------------------------------------- loc_3113CC: ; ... move.l a0,a1 lea word_31178E(pc),a2 moveq #$D,d1 loc_3113D4: ; ... move.b 0(a0),0(a1) move.w (a2),8(a1) move.w (a2)+,$32(a1) move.w (a2)+,$30(a1) move.w (a2)+,$A(a1) move.b (a2)+,$24(a1) move.b (a2)+,$1A(a1) move.l #Map_Obj6F,4(a1) move.b #$78,$19(a1) move.b #0,1(a1) lea $40(a1),a1 dbf d1,loc_3113D4 loc_31140E: ; ... tst.b ($FFFFFFB0).w beq.s loc_31141A move.b #4,$1A(a0) loc_31141A: ; ... cmp.b #7,($FFFFFFB1).w bne.s loc_311428 move.b #$19,$1A(a0) loc_311428: ; ... move.w $30(a0),d0 cmp.w 8(a0),d0 bne.s loc_31143E move.b #$1C,$24(a0) move.w #$B4,$1E(a0) loc_31143E: ; ... bra.w loc_310E3E ; --------------------------------------------------------------------------- loc_311442: ; ... cmp.b #7,($FFFFFFB1).w ; Check for all emeralds bne.s loc_31144E moveq #$16,d0 bra.s loc_311458 ; --------------------------------------------------------------------------- loc_31144E: ; ... tst.b ($FFFFFFB0).w beq.w DeleteObject moveq #1,d0 loc_311458: ; ... cmp.w #2,($FFFFFF70).w bne.s loc_31146C addq.w #1,d0 btst #7,($FFFFFFD8).w beq.s loc_31146C addq.w #1,d0 loc_31146C: ; ... move.b d0,$1A(a0) bra.w loc_310E3E ; --------------------------------------------------------------------------- loc_311474: ; ... addq.w #1,d6 loc_311476: ; ... addq.w #1,d6 loc_311478: ; ... addq.w #1,d6 loc_31147A: ; ... addq.w #1,d6 loc_31147C: ; ... addq.w #1,d6 loc_31147E: ; ... addq.w #1,d6 loc_311480: ; ... lea ($FFFFFFB2).w,a1 tst.b (a1,d6.w) beq.w DeleteObject btst #0,($FFFFFE0F).w beq.s return_311498 bsr.w DisplaySprite return_311498: ; ... rts ; --------------------------------------------------------------------------- loc_31149A: ; ... tst.w ($FFFFFF70).w bne.w DeleteObject cmp.b #$26,($FFFFB824).w beq.w DeleteObject moveq #$E,d0 btst #7,($FFFFFFD8).w beq.s loc_3114B8 addq.w #1,d0 loc_3114B8: ; ... lea ($FFFFF7D4).w,a1 bra.s loc_311518 ; --------------------------------------------------------------------------- loc_3114BE: ; ... cmp.b #$26,($FFFFB824).w bne.s loc_3114F0 move.w #5000,($FFFFF7D2).w move.b #$2A,$24(a0) move.w #$120,$A(a0) st ($FFFFF7D6).w move.w #$CF,d0 jsr PlaySound move.w #$5A,($FFFFB81E).w bra.w loc_311640 ; --------------------------------------------------------------------------- loc_3114F0: ; ... move.w ($FFFFFF70).w,d0 beq.s loc_311512 move.w #$120,$A(a0) subq.w #1,d0 beq.s loc_311512 moveq #$E,d0 btst #7,($FFFFFFD8).w beq.s loc_31150C addq.w #1,d0 loc_31150C: ; ... lea ($FFFFF7D4).w,a1 bra.s loc_311518 ; --------------------------------------------------------------------------- loc_311512: ; ... moveq #$D,d0 lea ($FFFFF7D2).w,a1 loc_311518: ; ... tst.w (a1) bne.s loc_31151E addq.w #5,d0 loc_31151E: ; ... move.b d0,$1A(a0) loc_311522: ; ... bra.w loc_310E3E ; --------------------------------------------------------------------------- loc_311526: ; ... tst.b ($FFFFFFB0).w beq.w DeleteObject bra.s loc_311522 ; --------------------------------------------------------------------------- loc_311530: ; ... subq.w #1,$1E(a0) bne.s BraTo_DisplaySprite_5 addq.b #2,$24(a0) BraTo_DisplaySprite_5: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_31153E: ; ... bsr.w DisplaySprite move.b #1,($FFFFF7D6).w moveq #0,d0 tst.w ($FFFFF7D2).w beq.s loc_311558 add.w #$A,d0 subq.w #1,($FFFFF7D2).w loc_311558: ; ... tst.w ($FFFFF7D4).w beq.s loc_311566 add.w #$A,d0 subq.w #1,($FFFFF7D4).w loc_311566: ; ... tst.w ($FFFFFF8E).w beq.s loc_311576 add.w #$A,d0 sub.w #$A,($FFFFFF8E).w loc_311576: ; ... tst.w d0 bne.s loc_3115B8 move.w #$C5,d0 jsr PlaySound addq.b #2,$24(a0) move.w #120,$1E(a0) tst.w ($FFFFFF42).w bne.s loc_3115AA tst.b ($FFFFFFB0).w beq.s return_3115B6 cmp.b #7,($FFFFFFB1).w bne.s return_3115B6 move.b #$30,$24(a0) rts ; --------------------------------------------------------------------------- loc_3115AA: ; ... move.b #36,$24(a0) move.w #90,$1E(a0) return_3115B6: ; ... rts ; --------------------------------------------------------------------------- loc_3115B8: ; ... jsr AddPoints2 move.b ($FFFFFE0F).w,d0 and.b #3,d0 bne.s return_3115B6 move.w #$CD,d0 jmp PlaySound ; --------------------------------------------------------------------------- loc_3115D2: ; ... move.w #1,($FFFFFE02).w bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_3115DC: ; ... bsr.w DisplaySprite move.b #1,($FFFFF7D6).w moveq #0,d0 tst.w ($FFFFF7D2).w beq.s loc_3115F8 add.w #$14,d0 sub.w #$14,($FFFFF7D2).w loc_3115F8: ; ... tst.w d0 beq.s loc_311616 jsr AddPoints2 move.b ($FFFFFE0F).w,d0 and.b #3,d0 bne.s return_31163E move.w #$CD,d0 jmp PlaySound ; --------------------------------------------------------------------------- loc_311616: ; ... move.w #$C5,d0 jsr PlaySound addq.b #4,$24(a0) move.w #120,$1E(a0) tst.b ($FFFFFFB0).w beq.s return_31163E cmp.b #7,($FFFFFFB1).w bne.s return_31163E move.b #$30,$24(a0) return_31163E: ; ... rts ; --------------------------------------------------------------------------- loc_311640: ; ... moveq #$11,d0 btst #3,($FFFFFE0F).w beq.s loc_31164C moveq #$15,d0 loc_31164C: ; ... move.b d0,$1A(a0) bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_311654: ; ... move.b #$32,$64(a0) move.w 8(a0),d0 cmp.w $32(a0),d0 bne.s loc_3116D0 move.b #20,$64(a0) subq.w #8,$4A(a0) move.b #$1A,$5A(a0) sub.w #4,$48(a0) move.w #$120,$70(a0) move.b #$34,$24(a0) subq.w #8,$A(a0) move.b #$1B,$1A(a0) lea ($FFFFBB80).w,a1 move.b 0(a0),0(a1) move.w #-$50,8(a1) move.w #$120,$30(a1) move.w #180,$A(a1) move.b #20,$24(a1) move.b #$1C,$1A(a1) move.l #Map_Obj6F,4(a1) move.b #$78,$19(a1) move.b #0,1(a1) bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_3116D0: ; ... moveq #$20,d0 move.w 8(a0),d1 cmp.w $32(a0),d1 beq.s loc_3116EC bhi.s loc_3116E0 neg.w d0 loc_3116E0: ; ... sub.w d0,8(a0) cmp.w #$200,8(a0) bhi.s return_3116F0 loc_3116EC: ; ... bra.w DisplaySprite ; --------------------------------------------------------------------------- return_3116F0: ; ... rts ; --------------------------------------------------------------------------- loc_3116F2: ; ... move.w 8(a0),d0 cmp.w $30(a0),d0 bne.w loc_310E3E move.w #$B4,$1E(a0) move.b #$20,$24(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_311710: ; ... cmp.b #$30,($FFFFB824).w bcs.s loc_31172C sub.w #$20,8(a0) cmp.w #$20,8(a0) bhi.w DisplaySprite bra.w DeleteObject ; --------------------------------------------------------------------------- loc_31172C: ; ... tst.b $2E(a0) bne.s loc_31175C tst.b ($FFFFFFB0).w beq.s loc_31178A cmp.b #7,($FFFFFFB1).w bcs.s loc_31175C moveq #$2C,d0 sub.w d0,8(a0) sub.w d0,$30(a0) sub.w d0,$32(a0) moveq #$C,d0 sub.w d0,-$2F8(a0) sub.w d0,-$2D0(a0) sub.w d0,-$2CE(a0) loc_31175C: ; ... st $2E(a0) moveq #$10,d0 move.w 8(a0),d1 cmp.w $30(a0),d1 beq.s loc_31177C bgt.s loc_311770 neg.w d0 loc_311770: ; ... sub.w d0,8(a0) cmp.w #$200,8(a0) bgt.s return_311788 loc_31177C: ; ... cmp.w #$50,8(a0) blt.s return_311788 bra.w DisplaySprite ; --------------------------------------------------------------------------- return_311788: ; ... rts ; --------------------------------------------------------------------------- loc_31178A: ; ... bra.w DeleteObject ; --------------------------------------------------------------------------- word_31178E: dc.w $240, $120, $AA, $200, $50, $170, $98, $401, $118, 0, $C4, $605, $130, 0, $D0, $806, $130, 0, $E8, $A07, $118, 0, $F4, $C08, $100, 0, $E8, $E09, $100, 0, $D0,$100A, $118, 0, $DC,$120B, $330, $120, $108,$140C, $340, $120, $118,$160D, $350, $120, $128,$180E, $360, $120, $138,$1A10, 8, $128, $98,$361D; 0 ; ... Map_Obj34: dc.w byte_31182C-Map_Obj34,byte_31182C-Map_Obj34,byte_31182C-Map_Obj34,byte_31182C-Map_Obj34,byte_311870-Map_Obj34,byte_311870-Map_Obj34,byte_311A9E-Map_Obj34,byte_3118AE-Map_Obj34,byte_3118DA-Map_Obj34,byte_31182C-Map_Obj34,byte_311924-Map_Obj34,byte_311956-Map_Obj34,byte_311994-Map_Obj34,byte_3119D8-Map_Obj34,byte_311AE8-Map_Obj34,byte_311A28-Map_Obj34,byte_311A6C-Map_Obj34,byte_311B1A-Map_Obj34,byte_311B34-Map_Obj34,byte_311B3C-Map_Obj34,byte_311B44-Map_Obj34,byte_311B4C-Map_Obj34,byte_311B6C-Map_Obj34; 0 ; ... byte_31182C: dc.b 0, $B, 0, 5,$85,$80,$FF,$C3, 0, 9,$85,$DE,$FF,$D0, 0, 5,$85,$80,$FF,$E8, 0, 5,$85,$E4,$FF,$F8, 0, 5,$85,$E8, 0, 8, 0, 5,$85,$EC, 0,$18, 0, 5,$85,$F0, 0,$28, 0, 5,$85,$F4, 0,$48, 0, 1,$85,$F8, 0,$58, 0, 5,$85,$EC, 0,$60, 0, 5,$85,$EC, 0,$70; 0 ; ... byte_311870: dc.b 0, $A, 0, 9,$85,$DE,$FF,$E0, 0, 5,$85,$80,$FF,$F8, 0, 5,$85,$E4, 0, 8, 0, 5,$85,$E8, 0,$18, 0, 5,$85,$88, 0,$28, 0, 5,$85,$EC, 0,$38, 0, 5,$85,$88, 0,$48, 0, 5,$85,$F0, 0,$58, 0, 1,$85,$F4, 0,$68, 0, 5,$85,$F6, 0,$70; 0 ; ... byte_3118AE: dc.b 0, 7, 0, 5,$85,$DE, 0, 8, 0, 1,$85,$E2, 0,$18, 0, 5,$85,$E4, 0,$20, 0, 5,$85,$E4, 0,$30, 0, 5,$85,$E8, 0,$51, 0, 5,$85,$88, 0,$60, 0, 5,$85,$EC, 0,$70; 0 ; ... byte_3118DA: dc.b 0, $C, 0, 5,$85,$DE,$FF,$B8, 0, 1,$85,$E2,$FF,$C8, 0, 5,$85,$E4,$FF,$D0, 0, 5,$85,$E4,$FF,$E0, 0, 5,$85,$80,$FF,$F0, 0, 5,$85,$84, 0, 0, 0, 5,$85,$E8, 0,$20, 0, 5,$85,$EC, 0,$30, 0, 5,$85,$F0, 0,$40, 0, 5,$85,$EC, 0,$50, 0, 5,$85,$F4, 0,$60, 0, 5,$85,$80, 0,$70; 0 ; ... byte_311924: dc.b 0, 8, 0, 5,$85,$88,$FF,$FB, 0, 1,$85,$DE, 0, $B, 0, 5,$85,$E0, 0,$13, 0, 5,$85,$88, 0,$33, 0, 5,$85,$E4, 0,$43, 0, 5,$85,$80, 0,$53, 0, 5,$85,$E8, 0,$60, 0, 5,$85,$84, 0,$70; 0 ; ... byte_311956: dc.b 0, $A, 0, 9,$85,$DE,$FF,$D0, 0, 5,$85,$E4,$FF,$E8, 0, 5,$85,$E8,$FF,$F8, 0, 5,$85,$EC, 0, 8, 0, 1,$85,$F0, 0,$18, 0, 5,$85,$F2, 0,$20, 0, 5,$85,$F2, 0,$41, 0, 5,$85,$F6, 0,$50, 0, 5,$85,$FA, 0,$60, 0, 5,$85,$80, 0,$70; 0 ; ... byte_311994: dc.b 0, $B, 0, 5,$85,$DE,$FF,$D1, 0, 5,$85,$E2,$FF,$E0, 0, 5,$85,$E6,$FF,$F0, 0, 1,$85,$EA, 0, 0, 0, 5,$85,$84, 0, 8, 0, 5,$85,$88, 0,$18, 0, 5,$85,$84, 0,$38, 0, 1,$85,$EA, 0,$48, 0, 5,$85,$EC, 0,$50, 0, 5,$85,$F0, 0,$60, 0, 5,$85,$F4, 0,$70; 0 ; ... byte_3119D8: dc.b 0, $D, 0, 5,$85,$DE,$FF,$A4, 0, 5,$85,$E2,$FF,$B4, 0, 5,$85,$80,$FF,$C4, 0, 9,$85,$E6,$FF,$D1, 0, 1,$85,$EC,$FF,$E9, 0, 5,$85,$DE,$FF,$F1, 0, 5,$85,$EE, 0, 0, 0, 5,$85,$F2, 0,$10, 0, 5,$85,$F6, 0,$31, 0, 5,$85,$F2, 0,$41, 0, 5,$85,$EE, 0,$50, 0, 5,$85,$84, 0,$60, 0, 5,$85,$FA, 0,$70; 0 ; ... byte_311A28: dc.b 0, $B, 0, 5,$85,$DE,$FF,$D2, 0, 5,$85,$E2,$FF,$E2, 0, 5,$85,$E6,$FF,$F2, 0, 5,$85,$DE, 0, 0, 0, 5,$85,$EA, 0,$10, 0, 1,$85,$EE, 0,$20, 0, 5,$85,$F0, 0,$28, 0, 5,$85,$F4, 0,$48, 0, 5,$85,$E6, 0,$58, 0, 1,$85,$EE, 0,$68, 0, 5,$85,$84, 0,$70; 0 ; ... byte_311A6C: dc.b 0, 8, 0, 5,$85,$DE,$FF,$F0, 0, 5,$85,$E2, 0, 0, 0, 5,$85,$E6, 0,$10, 0, 5,$85,$EA, 0,$30, 0, 5,$85,$EE, 0,$40, 0, 5,$85,$F2, 0,$50, 0, 5,$85,$DE, 0,$60, 0, 5,$85,$80, 0,$70; 0 ; ... byte_311A9E: dc.b 0, $C, 0, 9,$85,$DE,$FF,$B1, 0, 1,$85,$E4,$FF,$C8, 0, 5,$85,$84,$FF,$D0, 0, 5,$85,$E6,$FF,$E0, 0, 5,$85,$EA, 0, 1, 0, 5,$85,$88, 0,$10, 0, 5,$85,$EE, 0,$20, 0, 5,$85,$F2, 0,$30, 0, 5,$85,$EE, 0,$40, 0, 5,$85,$80, 0,$50, 0, 5,$85,$F6, 0,$5F, 0, 5,$85,$F6, 0,$6F; 0 ; ... byte_311AE8: dc.b 0, 8, 0, 5,$85,$DE,$FF,$F2, 0, 5,$85,$80, 0, 2, 0, 5,$85,$E2, 0,$10, 0, 5,$85,$E6, 0,$20, 0, 5,$85,$EA, 0,$30, 0, 5,$85,$80, 0,$51, 0, 5,$85,$EE, 0,$60, 0, 5,$85,$EE, 0,$70; 0 ; ... byte_311B1A: dc.b 0, 4, 0, 5,$85,$8C, 0, 1, 0, 5,$85,$88, 0,$10, 0, 5,$85,$84, 0,$20, 0, 5,$85,$80, 0,$30; 0 ; ... byte_311B34: dc.b 0, 1, 0, 7,$A5,$90, 0, 0; 0 ; ... byte_311B3C: dc.b 0, 1, 0, $B,$A5,$98, 0, 0; 0 ; ... byte_311B44: dc.b 0, 1, 0, $B,$A5,$A4, 0, 0; 0 ; ... byte_311B4C: dc.b 0, 5, 0, $D,$85,$B0,$FF,$B8, 0, $D,$85,$B8,$FF,$D8, 0, $D,$85,$C0,$FF,$F8, 0, $D,$85,$C8, 0,$18, 0, 5,$85,$D0, 0,$38; 0 ; ... byte_311B6C: dc.b 0, 7,$90, 3,$85,$D4, 0, 0,$B0, 3,$85,$D4, 0, 0,$D0, 3,$85,$D4, 0, 0,$F0, 3,$85,$D4, 0, 0,$10, 3,$85,$D4, 0, 0,$30, 3,$85,$D4, 0, 0,$50, 3,$85,$D4, 0, 0; 0 ; ... Map_Obj39: dc.w byte_311BA0-Map_Obj39,byte_311BAE-Map_Obj39,byte_311BBC-Map_Obj39,byte_311BCA-Map_Obj39; 0 ; ... byte_311BA0: dc.b 0, 2,$F8, $D, 0, 0,$FF,$B8,$F8, $D, 0, 8,$FF,$D8; 0 ; ... byte_311BAE: dc.b 0, 2,$F8, $D, 0,$14, 0, 8,$F8, $D, 0, $C, 0,$28; 0 ; ... byte_311BBC: dc.b 0, 2,$F8, 9, 0,$1C,$FF,$C4,$F8, $D, 0, 8,$FF,$DC; 0 ; ... byte_311BCA: dc.b 0, 2,$F8, $D, 0,$14, 0, $C,$F8, $D, 0, $C, 0,$2C; 0 ; ... Map_Obj3A: dc.w byte_311BF6-Map_Obj3A ; 0 ; ... dc.w byte_311C3A-Map_Obj3A dc.w byte_311C3A-Map_Obj3A dc.w byte_311C3A-Map_Obj3A dc.w byte_311C66-Map_Obj3A dc.w byte_311B1A-Map_Obj3A dc.w byte_311B34-Map_Obj3A dc.w byte_311B3C-Map_Obj3A dc.w byte_311B44-Map_Obj3A dc.w byte_311C7A-Map_Obj3A dc.w byte_311C9A-Map_Obj3A dc.w byte_311CC0-Map_Obj3A dc.w byte_311CE6-Map_Obj3A dc.w byte_311CEE-Map_Obj3A dc.w byte_311CF6-Map_Obj3A byte_311BF6: dc.b 0, $B, 0, 5,$85,$C6,$FF,$88, 0, 5,$85,$84,$FF,$98, 0, 5,$85,$D8,$FF,$A8, 0, 5,$85,$B4,$FF,$B8, 0, 5,$85,$C6,$FF,$C8, 0, 5,$85,$C2,$FF,$D8, 0, 5,$85,$80,$FF,$E8, 0, 5,$85,$D0,$FF,$F8, 0, 5,$85,$B8, 0,$10, 0, 5,$85,$88, 0,$20, 0, 5,$85,$D4, 0,$2F; 0 ; ... byte_311C3A: dc.b 0, 7, 0, 5,$85,$D4,$FF,$C8, 0, 5,$85,$BC,$FF,$D8, 0, 5,$85,$CC,$FF,$E8, 0, 5,$85,$88,$FF,$F8, 0, 5,$85,$D8, 0, 8, 0, 5,$85,$B8, 0,$18, 0, 5,$85,$BC, 0,$28; 0 ; ... byte_311C66: dc.b 0, 3, 0, 5,$85,$B0, 0, 0, 0, 5,$85,$B4, 0,$10, 0, 5,$85,$D4, 0,$1F; 0 ; ... byte_311C7A: dc.b 0, 5, 0, 9,$A5,$E6,$FF,$B8, 0, 5,$A5,$EC,$FF,$D0, 0, 5,$85,$F0,$FF,$D4, 0, $D,$85,$20, 0,$38, 0, 1,$86,$F0, 0,$58; 0 ; ... byte_311C9A: dc.b 0, 6, 0, $D,$A6,$DA,$FF,$A4, 0, $D,$A5,$DE,$FF,$CC, 0, 1,$A6,$CA,$FF,$EC, 0, 5,$85,$F0,$FF,$E8, 0, $D,$85,$28, 0,$38, 0, 1,$86,$F0, 0,$58; 0 ; ... byte_311CC0: dc.b 0, 6, 0, $D,$A6,$D2,$FF,$A4, 0, $D,$A5,$DE,$FF,$CC, 0, 1,$A6,$CA,$FF,$EC, 0, 5,$85,$F0,$FF,$E8, 0, $D,$85,$30, 0,$38, 0, 1,$86,$F0, 0,$58; 0 ; ... byte_311CE6: dc.b 0, 1, 0, 6,$85,$F4, 0, 0; 0 ; ... byte_311CEE: dc.b 0, 1, 0, 6,$85,$FA, 0, 0; 0 ; ... byte_311CF6: dc.b 0, 7, 0, $D,$A5,$40,$FF,$98, 0, 9,$A5,$48,$FF,$B8, 0, $D,$A5,$DE,$FF,$D8, 0, 1,$A6,$CA,$FF,$F8, 0, 5,$85,$F0,$FF,$F4, 0, $D,$85,$38, 0,$38, 0, 1,$86,$F0, 0,$58; 0 ; ... Map_Obj6F: dc.w byte_311D5E-Map_Obj6F,byte_311DA8-Map_Obj6F,byte_311DC2-Map_Obj6F,byte_311DC2-Map_Obj6F; 0 ; ... dc.w byte_311DC2-Map_Obj6F,byte_311E0C-Map_Obj6F,byte_311E14-Map_Obj6F,byte_311E1C-Map_Obj6F; 4 dc.w byte_311E24-Map_Obj6F,byte_311E2C-Map_Obj6F,byte_311E34-Map_Obj6F,byte_311E3C-Map_Obj6F; 8 dc.w byte_311E44-Map_Obj6F,byte_311E64-Map_Obj6F,byte_311E98-Map_Obj6F,byte_311E98-Map_Obj6F; 12 dc.w byte_311E98-Map_Obj6F,byte_311EBE-Map_Obj6F,byte_311E7E-Map_Obj6F,byte_311E98-Map_Obj6F; 16 dc.w byte_311E98-Map_Obj6F,byte_311EEA-Map_Obj6F,byte_311EF8-Map_Obj6F,byte_311F30-Map_Obj6F; 20 dc.w byte_311F30-Map_Obj6F,byte_311F30-Map_Obj6F,byte_311F80-Map_Obj6F,byte_311FD6-Map_Obj6F; 24 dc.w byte_312014-Map_Obj6F,byte_312064-Map_Obj6F; 28 byte_311D5E: dc.b 0, $C, 0, 5,$80,$2A,$FF,$A0, 0, 5,$80,$22,$FF; 0 ; ... dc.b $B0, 0, 5,$85,$80,$FF,$C0, 0, 5,$80, 6,$FF,$D0; 13 dc.b 0, 1,$80,$16,$FF,$E0, 0, 5,$80, 2,$FF,$E8, 0; 26 dc.b 5,$80,$18,$FF,$F8, 0, 5,$80,$2A, 0,$10, 0, 5; 39 dc.b $80,$2E, 0,$20, 0, 5,$80, 2, 0,$2C, 0, 5,$80; 52 dc.b $E, 0,$3C, 0, 5,$85,$80, 0,$4C; 65 byte_311DA8: dc.b 0, 4, 0, 5,$80, $E,$FF,$D0, 0, 5,$85,$88,$FF; 0 ; ... dc.b $E0, 0, 5,$80,$2E,$FF,$F0, 0, 5,$80, 2, 0, 8; 13 byte_311DC2: dc.b 0, $C, 0, 5,$80, 6,$FF,$98, 0, 5,$80,$12,$FF; 0 ; ... dc.b $A8, 0, 5,$80, 2,$FF,$B8, 0, 5,$85,$88,$FF,$C8; 13 dc.b 0, 5,$80,$2A,$FF,$D8, 0, 5,$85,$80,$FF,$F3, 0; 26 dc.b 9,$80,$1C, 0, 0, 0, 5,$85,$80, 0,$18, 0, 5; 39 dc.b $80,$26, 0,$28, 0, 5,$80, 2, 0,$38, 0, 5,$80; 52 dc.b $18, 0,$48, 0, 5,$80, $A, 0,$58; 65 byte_311E0C: dc.b 0, 1, 0, 5,$C5,$A4, 0, 0; 0 ; ... byte_311E14: dc.b 0, 1, 0, 5,$E5,$A4, 0, 0; 0 ; ... byte_311E1C: dc.b 0, 1, 0, 5,$C5,$AC, 0, 0; 0 ; ... byte_311E24: dc.b 0, 1, 0, 5,$E5,$AC, 0, 0; 0 ; ... byte_311E2C: dc.b 0, 1, 0, 5,$E5,$A8, 0, 0; 0 ; ... byte_311E34: dc.b 0, 1, 0, 5,$C5,$A8, 0, 0; 0 ; ... byte_311E3C: dc.b 0, 1, 0, 5,$A5,$A8, 0, 0; 0 ; ... byte_311E44: dc.b 0, 5, 0, $D,$A6,$CA,$FF,$A0, 0, 1,$A6,$E0,$FF; 0 ; ... dc.b $C0, 0, 5,$85,$A0,$FF,$BC, 0, 9,$86,$E4, 0,$28; 13 dc.b 0, $D,$86,$EA, 0,$40 ; 26 byte_311E64: dc.b 0, 4, 0, $D,$A6,$D2,$FF,$A0, 0, 1,$A6,$CA,$FF; 0 ; ... dc.b $C0, 0, 5,$85,$A0,$FF,$BC, 0, $D,$85,$28, 0,$40; 13 byte_311E7E: dc.b 0, 4, 0, $D,$A6,$D2,$FF,$A0, 0, 1,$A6,$CA,$FF; 0 ; ... dc.b $C0, 0, 5,$85,$A0,$FF,$BC, 0, 1,$86,$F0, 0,$58; 13 byte_311E98: dc.b 0, 6, 0, $D,$A5,$98,$FF,$A0, 0, $D,$A5,$90,$FF; 0 ; ... dc.b $C8, 0, 1,$A6,$CA,$FF,$E8, 0, 5,$85,$A0,$FF,$E4; 13 dc.b 0, $D,$85,$20, 0,$38, 0, 1,$86,$F0, 0,$58; 26 byte_311EBE: dc.b 0, 7, 0, $D,$A5,$C0,$FF,$88, 0, 9,$A5,$C8,$FF; 0 ; ... dc.b $A8, 0, $D,$A5,$90,$FF,$C8, 0, 1,$A6,$CA,$FF,$E8; 13 dc.b 0, 5,$85,$A0,$FF,$E4, 0, $D,$85,$28, 0,$38, 0; 26 dc.b 1,$86,$F0, 0,$58 ; 39 byte_311EEA: dc.b 0, 2, 0, $D,$85,$28, 0,$38, 0, 1,$86,$F0, 0; 0 ; ... dc.b $58 ; 13 byte_311EF8: dc.b 0, 9, 0, 5,$80,$12,$FF,$B0, 0, 5,$80, 2,$FF; 0 ; ... dc.b $C0, 0, 5,$80,$2A,$FF,$D0, 0, 5,$80, 2,$FF,$E8; 13 dc.b 0, 5,$80,$18,$FF,$F8, 0, 5,$80,$18, 0, 8, 0; 26 dc.b 5,$80,$2E, 0,$20, 0, 5,$80,$12, 0,$30, 0, 5; 39 dc.b $85,$80, 0,$40 ; 52 byte_311F30: dc.b 0, $D, 0, 5,$80, 6,$FF,$90, 0, 5,$80,$12,$FF; 0 ; ... dc.b $A0, 0, 5,$80, 2,$FF,$B0, 0, 5,$85,$88,$FF,$C0; 13 dc.b 0, 5,$80,$2A,$FF,$D0, 0, 5,$85,$80,$FF,$EB, 0; 26 dc.b 9,$80,$1C,$FF,$F8, 0, 5,$85,$80, 0,$10, 0, 5; 39 dc.b $80,$26, 0,$20, 0, 5,$80, 2, 0,$30, 0, 5,$80; 52 dc.b $18, 0,$40, 0, 5,$80, $A, 0,$50, 0, 5,$80,$2A; 65 dc.b 0,$60 ; 78 byte_311F80: dc.b 0, $E, 0, 5,$85,$84,$FF,$84, 0, 5,$85,$88,$FF; 0 ; ... dc.b $94, 0, 9,$80,$36,$FF,$A4, 0, 5,$80,$3E,$FF,$C4; 13 dc.b 0, 5,$85,$84,$FF,$D4, 0, 5,$80,$32,$FF,$E4, 0; 26 dc.b 5,$80, 6,$FF,$F4, 0, 5,$80,$3E, 0, 4, 0, 5; 39 dc.b $80,$18, 0,$14, 0, 5,$85,$80, 0,$24, 0, 5,$80; 52 dc.b $2A, 0,$34, 0, 5,$80, 6, 0,$4C, 0, 5,$80, 2; 65 dc.b 0,$5C, 0, 5,$85,$84, 0,$6C; 78 byte_311FD6: dc.b 0, $A, 0, 5,$80, 6,$FF,$B0, 0, 5,$80,$12,$FF; 0 ; ... dc.b $C0, 0, 5,$80, 2,$FF,$D0, 0, 5,$85,$84,$FF,$E0; 13 dc.b 0, 5,$80, $E,$FF,$F0, 0, 5,$85,$80, 0, 0, 0; 26 dc.b 1,$80,$16, 0,$18, 0, 5,$85,$84, 0,$20, 0, 5; 39 dc.b $80,$2E, 0,$30, 0, 5,$85,$88, 0,$40; 52 byte_312014: dc.b 0, $D, 0, 5,$80,$2A,$FF,$94, 0, 5,$80,$32,$FF; 0 ; ... dc.b $A4, 0, 5,$80,$22,$FF,$B4, 0, 5,$85,$80,$FF,$C4; 13 dc.b 0, 5,$80,$26,$FF,$D4, 0, 5,$80,$3E,$FF,$EC, 0; 26 dc.b 5,$85,$84,$FF,$FC, 0, 5,$80,$32, 0, $C, 0, 5; 39 dc.b $80, 6, 0,$1C, 0, 5,$80,$3E, 0,$2C, 0, 5,$80; 52 dc.b $18, 0,$3C, 0, 5,$85,$80, 0,$4C, 0, 5,$80,$2A; 65 dc.b 0,$5C ; 78 byte_312064: dc.b 0, 8, 0, 5,$80,$3E,$FF,$90, 0, 5,$85,$84,$FF; 0 ; ... dc.b $A0, 0, 5,$80,$32,$FF,$B0, 0, 5,$80, 6,$FF,$C0; 13 dc.b 0, 5,$80,$3E,$FF,$D0, 0, 5,$80,$18,$FF,$E0, 0; 26 dc.b 5,$85,$80,$FF,$F0, 0, 5,$80,$2A, 0, 0; 39 byte_312096: dc.b $66,$66, 0, 0,$66,$66, 0, 0,$66,$66,$11, 0,$66; 0 ; ... dc.b $66,$11, 6,$66,$66,$11,$66,$66,$66,$16,$66,$66,$66; 13 dc.b $16,$66,$66,$66,$16,$66,$66,$66,$16,$66,$66,$66,$16; 26 dc.b $66,$66,$66,$16, 6,$66,$66,$16, 1,$66,$66,$16, 1; 39 dc.b $66,$66,$16, 1, 0,$11,$11, 1, 0,$11,$11, 1, 0; 52 dc.b $66,$66, 0, 6,$66,$60, 0,$66,$66,$11,$11,$66,$61; 65 dc.b $11,$10,$66,$11,$11, 0,$61,$11,$10, 0,$11,$11, 0; 78 dc.b 0,$11,$10, 0, 0,$61, 0, 0, 0,$66, 0, 0, 0; 91 dc.b $66,$60, 0, 0,$66,$66, 0, 0, 6,$66,$60, 0, 0; 104 dc.b $66,$66, 0, 0, 1,$11,$10, 0, 0,$11,$11; 117 ; =============== S U B R O U T I N E ======================================= sub_312116: ; ... lea ($C00000).l,a6 tst.w ($FFFFB0BE).w bne.w loc_312202 moveq #$3F,d5 move.l #$85DA85DA,d6 tst.w ($FFFFFFDC).w beq.s loc_31213A moveq #$1F,d5 move.l #$82ED82ED,d6 loc_31213A: ; ... lea ($FFFFB176).w,a0 moveq #1,d7 loc_312140: ; ... move.w (a0)+,d0 beq.s loc_312158 clr.w -2(a0) jsr cocks_312324(pc) move.l d0,4(a6) move.w d5,d4 loc_312152: ; ... move.l d6,(a6) dbf d4,loc_312152 loc_312158: ; ... dbf d7,loc_312140 moveq #$26,d1 sub.w ($FFFFB1BA).w,d1 lsr.w #1,d1 subq.w #1,d1 moveq #7,d5 move.l #$A5DCA5DC,d6 tst.w ($FFFFFFDC).w beq.s loc_31217C moveq #3,d5 move.l #$A2EEA2EE,d6 loc_31217C: ; ... lea ($FFFFB1B6).w,a0 moveq #1,d7 loc_312182: ; ... move.w (a0)+,d0 beq.s loc_3121A6 clr.w -2(a0) jsr cocks_312324(pc) move.w d5,d4 loc_312190: ; ... move.l d0,4(a6) move.w d1,d3 loc_312196: ; ... move.l d6,(a6) dbf d3,loc_312196 add.l #$800000,d0 dbf d4,loc_312190 loc_3121A6: ; ... dbf d7,loc_312182 move.w ($FFFFB1FA).w,d1 subq.w #1,d1 moveq #$D,d5 move.l #$85D885D8,d6 tst.w ($FFFFFFDC).w beq.s loc_3121C6 moveq #6,d5 move.l #$82EC82EC,d6 loc_3121C6: ; ... lea ($FFFFB1F6).w,a0 moveq #1,d7 move.w #$8F80,4(a6) loc_3121D2: ; ... move.w (a0)+,d0 beq.s loc_3121F6 clr.w -2(a0) jsr cocks_312324(pc) move.w d1,d4 loc_3121E0: ; ... move.l d0,4(a6) move.w d5,d3 loc_3121E6: ; ... move.l d6,(a6) dbf d3,loc_3121E6 add.l #$20000,d0 dbf d4,loc_3121E0 loc_3121F6: ; ... dbf d7,loc_3121D2 move.w #$8F02,4(a6) rts ; --------------------------------------------------------------------------- loc_312202: ; ... moveq #9,d3 moveq #3,d4 move.l #$85DA85DA,d5 move.l #$A5DCA5DC,d6 tst.w ($FFFFFFDC).w beq.s loc_312228 moveq #4,d3 moveq #1,d4 move.l #$82ED82ED,d5 move.l #$A2EEA2EE,d6 loc_312228: ; ... lea ($FFFFB1F6).w,a0 moveq #1,d7 move.w #$8F80,4(a6) loc_312234: ; ... move.w (a0)+,d0 beq.s loc_312260 clr.w -2(a0) jsr cocks_312324(pc) moveq #3,d2 loc_312242: ; ... move.l d0,4(a6) move.w d3,d1 loc_312248: ; ... move.l d5,(a6) dbf d1,loc_312248 move.w d4,d1 loc_312250: ; ... move.l d6,(a6) dbf d1,loc_312250 add.l #$20000,d0 dbf d2,loc_312242 loc_312260: ; ... dbf d7,loc_312234 move.w #$8F02,4(a6) moveq #7,d5 move.l #$85DA85DA,d6 tst.w ($FFFFFFDC).w beq.s loc_312280 moveq #3,d5 move.l #$82ED82ED,d6 loc_312280: ; ... lea ($FFFFB1B6).w,a0 moveq #1,d7 loc_312286: ; ... move.w (a0)+,d0 beq.s loc_3122A6 clr.w -2(a0) jsr cocks_312324(pc) move.w d5,d4 loc_312294: ; ... move.l d0,4(a6) move.l d6,(a6) move.l d6,(a6) add.l #$800000,d0 dbf d4,loc_312294 loc_3122A6: ; ... dbf d7,loc_312286 move.w ($FFFFB176).w,d4 beq.s loc_31231E lea 4(a6),a5 tst.w ($FFFFFFDC).w beq.s loc_3122EA lea ($FFFFEE20).w,a3 lea ($FFFF8000).w,a4 move.w #$6000,d2 moveq #1,d6 loc_3122C8: ; ... movem.l d4-d6,-(sp) moveq #-$10,d5 move.w d4,d1 bsr.w sub_30BE4C move.w d1,d4 moveq #-$10,d5 moveq #$1F,d6 bsr.w DrawTiles_Vertical movem.l (sp)+,d4-d6 add.w #$10,d4 dbf d6,loc_3122C8 loc_3122EA: ; ... lea ($FFFFEE00).w,a3 lea ($FFFF8000).w,a4 move.w #$4000,d2 move.w ($FFFFB176).w,d4 moveq #1,d6 loc_3122FC: ; ... movem.l d4-d6,-(sp) moveq #-$10,d5 move.w d4,d1 bsr.w Calc_VRAM_Pos move.w d1,d4 moveq #-$10,d5 moveq #$1F,d6 bsr.w DrawTiles_Vertical movem.l (sp)+,d4-d6 add.w #$10,d4 dbf d6,loc_3122FC loc_31231E: ; ... clr.w ($FFFFB176).w rts ; End of function sub_312116 ; =============== S U B R O U T I N E ======================================= cocks_312324: ; ... and.l #%1111111111111111,d0 lsl.l #2,d0 lsr.w #2,d0 or.w #$4000,d0 swap d0 rts ; End of function cocks_312324 ; =============== S U B R O U T I N E ======================================= sub_312336: ; ... movem.l d0/a0,-(sp) bsr.s LoadTitleCard0 movem.l (sp)+,d0/a0 bra.s loc_31239C ; End of function sub_312336 ; =============== S U B R O U T I N E ======================================= LoadTitleCard0: ; ... move.l #$70000002,($C00004).l lea (S2_ArtNem_TitleCard).l,a0 ; S2_ArtNem_TitleCard jsr NemDec move.l #$7B400002,($C00004).l moveq #$F,d0 loc_312364: ; ... move.l #$44444444,($C00000).l dbf d0,loc_312364 lea ($FFFF8000).w,a4 lea (S2_ArtNem_TitleCard2).l,a0 ; S2_ArtNem_TitleCard2 jmp NemDecToRAM ; End of function LoadTitleCard0 ; =============== S U B R O U T I N E ======================================= LoadTitleCard: ; ... bsr.s LoadTitleCard0 moveq #0,d0 move.b ($FFFFFE10).w,d0 move.b TitleCardData(pc,d0.w),d0 lea EHZ_TitleCard(pc),a0 lea (a0,d0.w),a0 move.l #$7BC00002,d0 loc_31239C: ; ... move #$2700,sr lea ($FFFF8000).w,a1 lea ($C00000).l,a6 move.l d0,4(a6) loc_3123AE: ; ... moveq #0,d0 move.b (a0)+,d0 bmi.s loc_3123CA lsl.w #5,d0 lea (a1,d0.w),a2 moveq #0,d1 move.b (a0)+,d1 lsl.w #3,d1 subq.w #1,d1 loc_3123C2: ; ... move.l (a2)+,(a6) dbf d1,loc_3123C2 bra.s loc_3123AE ; --------------------------------------------------------------------------- loc_3123CA: ; ... move #$2300,sr rts ; End of function LoadTitleCard ; --------------------------------------------------------------------------- TitleCardData: dc.b EHZ_TitleCard-EHZ_TitleCard ; 0 dc.b EHZ_TitleCard-EHZ_TitleCard ; 1 dc.b EHZ_TitleCard-EHZ_TitleCard ; 2 dc.b EHZ_TitleCard-EHZ_TitleCard ; 3 dc.b MTZ_TitleCard-EHZ_TitleCard ; 4 dc.b MTZ_TitleCard-EHZ_TitleCard ; 5 dc.b WFZ_TitleCard-EHZ_TitleCard ; 6 dc.b HTZ_TitleCard-EHZ_TitleCard ; 7 dc.b HPZ_TitleCard-EHZ_TitleCard ; 8 dc.b EHZ_TitleCard-EHZ_TitleCard ; 9 dc.b OOZ_TitleCard-EHZ_TitleCard ; 10 dc.b MCZ_TitleCard-EHZ_TitleCard ; 11 dc.b CNZ_TitleCard-EHZ_TitleCard ; 12 dc.b CPZ_TitleCard-EHZ_TitleCard ; 13 dc.b DEZ_TitleCard-EHZ_TitleCard ; 14 dc.b ARZ_TitleCard-EHZ_TitleCard ; 15 dc.b SCZ_TitleCard-EHZ_TitleCard ; 16 dc.b EHZ_TitleCard-EHZ_TitleCard ; 17 EHZ_TitleCard: dc.w Title_M,Title_R,Title_A,Title_L,Title_D,Title_H,Title_I; 0 ; ... dc.w -1 ; 7 MTZ_TitleCard: dc.w Title_M,Title_T,Title_R,Title_P,Title_L,Title_I,Title_S; 0 ; ... dc.w -1 ; 7 HTZ_TitleCard: dc.w Title_H,Title_I,Title_L,Title_T,Title_P,-1; 0 ; ... HPZ_TitleCard: dc.w Title_H,Title_I,Title_D,Title_P,Title_A,Title_L,Title_C; 0 ; ... dc.w -1 ; 7 OOZ_TitleCard: dc.w Title_I,Title_L,Title_C,Title_A,-1; 0 ; ... MCZ_TitleCard: dc.w Title_M,Title_Y,Title_S,Title_T,Title_I,Title_C,Title_A; 0 ; ... dc.w Title_V,-1 ; 7 CNZ_TitleCard: dc.w Title_C,Title_A,Title_S,Title_I,Title_G,Title_H,Title_T; 0 ; ... dc.w -1 ; 7 CPZ_TitleCard: dc.w Title_C,Title_H,Title_M,Title_I,Title_A,Title_L,Title_P; 0 ; ... dc.w Title_T,-1 ; 7 ARZ_TitleCard: dc.w Title_A,Title_Q,Title_U,Title_T,Title_I,Title_C,Title_R; 0 ; ... dc.w -1 ; 7 SCZ_TitleCard: dc.w Title_S,Title_K,Title_Y,Title_C,Title_H,Title_A,-1; 0 ; ... WFZ_TitleCard: dc.w Title_W,Title_I,Title_G,Title_F,Title_R,Title_T,Title_S; 0 ; ... dc.w -1 ; 7 DEZ_TitleCard: dc.w Title_D,Title_A,Title_T,Title_H,Title_G,-1; 0 ; ... ; --------------------------------------------------------------------------- Obj36: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3124A4(pc,d0.w),d1 jmp off_3124A4(pc,d1.w) ; --------------------------------------------------------------------------- off_3124A4: dc.w loc_3124BC-off_3124A4 ; 0 ; ... dc.w loc_31252E-off_3124A4 ; 1 dc.w loc_31257E-off_3124A4 ; 2 dc.w loc_3125DA-off_3124A4 ; 3 unk_3124AC: dc.b $10 ; ... dc.b $10 dc.b $20 dc.b $10 dc.b $30 ; 0 dc.b $10 dc.b $40 ; @ dc.b $10 dc.b $10 dc.b $10 dc.b $10 dc.b $20 dc.b $10 dc.b $30 ; 0 dc.b $10 dc.b $40 ; @ ; --------------------------------------------------------------------------- loc_3124BC: ; ... addq.b #2,$24(a0) move.l #Map_Obj36,4(a0) move.w #$2434,2(a0) or.b #4,1(a0) move.b #4,$18(a0) move.b $28(a0),d0 and.b #$F,$28(a0) and.w #$F0,d0 lea (unk_3124AC).l,a1 lsr.w #3,d0 add.w d0,a1 move.b (a1)+,$19(a0) move.b (a1)+,$16(a0) lsr.w #1,d0 move.b d0,$1A(a0) cmp.b #4,d0 bcs.s loc_312510 addq.b #2,$24(a0) move.w #$242C,2(a0) loc_312510: ; ... btst #1,$22(a0) beq.s loc_31251E move.b #6,$24(a0) loc_31251E: ; ... move.w 8(a0),$30(a0) move.w $C(a0),$32(a0) bra.w Adjust2PArtPointer2_Useless ; --------------------------------------------------------------------------- loc_31252E: ; ... bsr.w loc_31265E moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 move.w 8(a0),d4 bsr.w SolidObject move.b $22(a0),d6 and.b #$18,d6 beq.s loc_312576 move.b d6,d0 and.b #8,d0 beq.s loc_312568 lea ($FFFFB000).w,a1 bsr.w Touch_ChkHurt2 loc_312568: ; ... and.b #$10,d6 beq.s loc_312576 lea ($FFFFB040).w,a1 bsr.w Touch_ChkHurt2 loc_312576: ; ... move.w $30(a0),d0 bra.w MarkObjGone2 ; --------------------------------------------------------------------------- loc_31257E: ; ... move.w 8(a0),-(sp) bsr.w loc_31265E moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 move.w (sp)+,d4 bsr.w SolidObject swap d6 and.w #3,d6 beq.s loc_3125D2 move.b d6,d0 and.b #1,d0 beq.s loc_3125BE lea ($FFFFB000).w,a1 bsr.w Touch_ChkHurt2 bclr #5,$22(a0) loc_3125BE: ; ... and.b #2,d6 beq.s loc_3125D2 lea ($FFFFB040).w,a1 bsr.w Touch_ChkHurt2 bclr #6,$22(a0) loc_3125D2: ; ... move.w $30(a0),d0 bra.w MarkObjGone2 ; --------------------------------------------------------------------------- loc_3125DA: ; ... bsr.w loc_31265E moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 move.w 8(a0),d4 bsr.w SolidObject swap d6 and.w #$C,d6 beq.s loc_312620 move.b d6,d0 and.b #4,d0 beq.s loc_312612 lea ($FFFFB000).w,a1 bsr.w Touch_ChkHurt2 loc_312612: ; ... and.b #8,d6 beq.s loc_312620 lea ($FFFFB040).w,a1 bsr.w Touch_ChkHurt2 loc_312620: ; ... move.w $30(a0),d0 bra.w MarkObjGone2 ; =============== S U B R O U T I N E ======================================= Touch_ChkHurt2: ; ... btst #1,$2B(a1) bne.s return_31265C tst.w $30(a1) bne.s return_31265C cmp.b #4,$24(a1) bcc.s return_31265C move.l $C(a1),d3 move.w $12(a1),d0 ext.l d0 asl.l #8,d0 sub.l d0,d3 move.l d3,$C(a1) move.l a0,a2 move.l a1,a0 jsr HurtKnuckles move.l a2,a0 return_31265C: ; ... rts ; End of function Touch_ChkHurt2 ; --------------------------------------------------------------------------- loc_31265E: ; ... moveq #0,d0 move.b $28(a0),d0 add.w d0,d0 move.w off_31266E(pc,d0.w),d1 jmp off_31266E(pc,d1.w) ; --------------------------------------------------------------------------- off_31266E: dc.w return_312674-off_31266E ; 0 ; ... dc.w loc_312676-off_31266E ; 1 dc.w loc_31268A-off_31266E ; 2 ; --------------------------------------------------------------------------- return_312674: ; ... rts ; --------------------------------------------------------------------------- loc_312676: ; ... bsr.w sub_31269E moveq #0,d0 move.b $34(a0),d0 add.w $32(a0),d0 move.w d0,$C(a0) rts ; --------------------------------------------------------------------------- loc_31268A: ; ... bsr.w sub_31269E moveq #0,d0 move.b $34(a0),d0 add.w $30(a0),d0 move.w d0,8(a0) rts ; =============== S U B R O U T I N E ======================================= sub_31269E: ; ... tst.w $38(a0) beq.s loc_3126BC subq.w #1,$38(a0) bne.s return_3126FE tst.b 1(a0) bpl.s return_3126FE move.w #$B6,d0 jsr PlaySound bra.s return_3126FE ; --------------------------------------------------------------------------- loc_3126BC: ; ... tst.w $36(a0) beq.s loc_3126DE sub.w #$800,$34(a0) bcc.s return_3126FE move.w #0,$34(a0) move.w #0,$36(a0) move.w #$3C,$38(a0) bra.s return_3126FE ; --------------------------------------------------------------------------- loc_3126DE: ; ... add.w #$800,$34(a0) cmp.w #$2000,$34(a0) bcs.s return_3126FE move.w #$2000,$34(a0) move.w #1,$36(a0) move.w #$3C,$38(a0) return_3126FE: ; ... rts ; End of function sub_31269E ; --------------------------------------------------------------------------- Map_Obj36: dc.w byte_312710-Map_Obj36 ; 0 ; ... dc.w byte_31271E-Map_Obj36 ; 1 dc.w byte_312738-Map_Obj36 ; 2 dc.w byte_31275E-Map_Obj36 ; 3 dc.w byte_312790-Map_Obj36 ; 4 dc.w byte_31279E-Map_Obj36 ; 5 dc.w byte_3127B8-Map_Obj36 ; 6 dc.w byte_3127DE-Map_Obj36 ; 7 byte_312710: dc.b 0, 2,$F0, 7, 0, 0,$FF,$F0,$F0, 7, 0, 0, 0; 0 ; ... dc.b 0 ; 13 byte_31271E: dc.b 0, 4,$F0, 7, 0, 0,$FF,$E0,$F0, 7, 0, 0,$FF; 0 ; ... dc.b $F0,$F0, 7, 0, 0, 0, 0,$F0, 7, 0, 0, 0,$10; 13 byte_312738: dc.b 0, 6,$F0, 7, 0, 0,$FF,$D0,$F0, 7, 0, 0,$FF; 0 ; ... dc.b $E0,$F0, 7, 0, 0,$FF,$F0,$F0, 7, 0, 0, 0, 0; 13 dc.b $F0, 7, 0, 0, 0,$10,$F0, 7, 0, 0, 0,$20; 26 byte_31275E: dc.b 0, 8,$F0, 7, 0, 0,$FF,$C0,$F0, 7, 0, 0,$FF; 0 ; ... dc.b $D0,$F0, 7, 0, 0,$FF,$E0,$F0, 7, 0, 0,$FF,$F0; 13 dc.b $F0, 7, 0, 0, 0, 0,$F0, 7, 0, 0, 0,$10,$F0; 26 dc.b 7, 0, 0, 0,$20,$F0, 7, 0, 0, 0,$30; 39 byte_312790: dc.b 0, 2,$F0, $D, 0, 0,$FF,$F0, 0, $D, 0, 0,$FF; 0 ; ... dc.b $F0 ; 13 byte_31279E: dc.b 0, 4,$E0, $D, 0, 0,$FF,$F0,$F0, $D, 0, 0,$FF; 0 ; ... dc.b $F0, 0, $D, 0, 0,$FF,$F0,$10, $D, 0, 0,$FF,$F0; 13 byte_3127B8: dc.b 0, 6,$D0, $D, 0, 0,$FF,$F0,$E0, $D, 0, 0,$FF; 0 ; ... dc.b $F0,$F0, $D, 0, 0,$FF,$F0, 0, $D, 0, 0,$FF,$F0; 13 dc.b $10, $D, 0, 0,$FF,$F0,$20, $D, 0, 0,$FF,$F0; 26 byte_3127DE: dc.b 0, 8,$C0, $D, 0, 0,$FF,$F0,$D0, $D, 0, 0,$FF; 0 ; ... dc.b $F0,$E0, $D, 0, 0,$FF,$F0,$F0, $D, 0, 0,$FF,$F0; 13 dc.b 0, $D, 0, 0,$FF,$F0,$10, $D, 0, 0,$FF,$F0,$20; 26 dc.b $D, 0, 0,$FF,$F0,$30, $D, 0, 0,$FF,$F0; 39 ; --------------------------------------------------------------------------- Obj3B: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31281E(pc,d0.w),d1 jmp off_31281E(pc,d1.w) ; --------------------------------------------------------------------------- off_31281E: dc.w loc_312822-off_31281E ; 0 ; ... dc.w loc_31284A-off_31281E ; 1 ; --------------------------------------------------------------------------- loc_312822: ; ... addq.b #2,$24(a0) move.l #Map_Obj3B,4(a0) move.w #$66C0,2(a0) bsr.w Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$13,$19(a0) move.b #4,$18(a0) loc_31284A: ; ... move.w #$1B,d1 move.w #$10,d2 move.w #$10,d3 move.w 8(a0),d4 bsr.w SolidObject move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w DeleteObject bra.w DisplaySprite ; --------------------------------------------------------------------------- Map_Obj3B: dc.w byte_312878-Map_Obj3B ; ... byte_312878: dc.b 0, 2,$F0, $B, 0, 0,$FF,$E8,$F0, $B, 0, $C, 0, 0,$60, 0, 3,$E2; 0 ; ... ; =============== S U B R O U T I N E ======================================= RunObjects: ; ... ; FUNCTION CHUNK AT 003128D4 SIZE 0000000C BYTES tst.b ($FFFFF623).w bne.s return_3128D2 lea ($FFFFB000).w,a0 moveq #$7F,d7 moveq #0,d0 cmp.b #8,($FFFFF600).w beq.s loc_3128A8 cmp.b #$C,($FFFFF600).w bne.s sub_3128BA loc_3128A8: ; ... move.w #$8F,d7 tst.w ($FFFFFFDC).w bne.s sub_3128BA cmp.b #6,($FFFFB024).w bcc.s loc_3128D4 ; End of function RunObjects ; =============== S U B R O U T I N E ======================================= sub_3128BA: ; ... move.b (a0),d0 beq.s loc_3128CA add.w d0,d0 add.w d0,d0 move.l Obj_Index-4(pc,d0.w),a1 jsr (a1) moveq #0,d0 loc_3128CA: ; ... lea $40(a0),a0 dbf d7,sub_3128BA return_3128D2: ; ... rts ; End of function sub_3128BA ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR RunObjects loc_3128D4: ; ... moveq #$F,d7 bsr.s sub_3128BA moveq #$6F,d7 bsr.s sub_3128E0 moveq #$F,d7 bra.s sub_3128BA ; END OF FUNCTION CHUNK FOR RunObjects ; =============== S U B R O U T I N E ======================================= sub_3128E0: ; ... moveq #0,d0 move.b (a0),d0 beq.s loc_3128F0 tst.b 1(a0) bpl.s loc_3128F0 bsr.w DisplaySprite loc_3128F0: ; ... lea $40(a0),a0 loc_3128F4: dbf d7,sub_3128E0 rts ; End of function sub_3128E0 ; --------------------------------------------------------------------------- Obj_Index: dc.l Obj01 ; 0 ; ... dc.l ObjNull ; 1 ; Knuckles object dc.l Obj03 ; 2 dc.l Obj04 ; 3 dc.l ObjNull ; 4 dc.l Obj06 ; 5 dc.l Obj07 ; 6 dc.l Obj08 ; 7 dc.l Obj09 ; 8 dc.l Obj0A ; 9 dc.l Obj0B ; 10 dc.l Obj0C ; 11 dc.l Obj0D ; 12 dc.l Obj0E ; 13 dc.l Obj0F ; 14 dc.l Obj10 ; 15 dc.l Obj11 ; 16 dc.l Obj12 ; 17 dc.l Obj13 ; 18 dc.l Obj14 ; 19 dc.l Obj15 ; 20 dc.l Obj16 ; 21 dc.l Obj17_Unused ; 22 dc.l Obj18 ; 23 dc.l Obj19 ; 24 dc.l Obj1A ; 25 dc.l Obj1B ; 26 dc.l Obj1C ; 27 dc.l Obj1D ; 28 dc.l Obj1E ; 29 dc.l Obj1F ; 30 dc.l Obj20 ; 31 dc.l ObjNull ; 32 dc.l Obj22 ; 33 dc.l Obj23 ; 34 dc.l Obj24 ; 35 dc.l Obj25 ; 36 dc.l Obj26 ; 37 dc.l Obj27 ; 38 dc.l Obj28 ; 39 dc.l Obj29 ; 40 dc.l Obj2A ; 41 dc.l Obj2B ; 42 dc.l Obj2C ; 43 dc.l Obj2D ; 44 dc.l Obj2E ; 45 dc.l Obj2F ; 46 dc.l Obj30 ; 47 dc.l Obj31 ; 48 dc.l Obj32 ; 49 dc.l Obj33 ; 50 dc.l Obj34 ; 51 dc.l Obj35 ; 52 dc.l Obj36 ; 53 dc.l Obj37 ; 54 dc.l Obj38 ; 55 dc.l Obj39 ; 56 dc.l Obj3A ; 57 dc.l Obj3B ; 58 dc.l ObjNull ; 59 dc.l Obj3D ; 60 dc.l Obj3E ; 61 dc.l Obj3F ; 62 dc.l Obj40 ; 63 dc.l Obj41 ; 64 dc.l Obj42 ; 65 dc.l Obj43 ; 66 dc.l Obj44 ; 67 dc.l Obj45 ; 68 dc.l Obj46 ; 69 dc.l Obj47 ; 70 dc.l Obj48 ; 71 dc.l Obj49 ; 72 dc.l Obj4A ; 73 dc.l Obj4B ; 74 dc.l ObjNull ; 75 dc.l ObjNull ; 76 dc.l ObjNull ; 77 dc.l ObjNull ; 78 dc.l Obj50 ; 79 dc.l Obj51 ; 80 dc.l Obj52 ; 81 dc.l Obj53 ; 82 dc.l Obj54 ; 83 dc.l Obj55 ; 84 dc.l Obj56 ; 85 dc.l Obj57 ; 86 dc.l Obj58 ; 87 dc.l Obj59 ; 88 dc.l Obj5A ; 89 dc.l Obj5B ; 90 dc.l Obj5C ; 91 dc.l Obj5D ; 92 dc.l Obj5E ; 93 dc.l Obj5F ; 94 dc.l Obj60 ; 95 dc.l Obj61 ; 96 dc.l ObjNull ; 97 dc.l Obj63 ; 98 dc.l Obj64 ; 99 dc.l Obj65 ; 100 dc.l Obj66 ; 101 dc.l Obj67 ; 102 dc.l Obj68 ; 103 dc.l Obj69 ; 104 dc.l Obj6A ; 105 dc.l Obj6B ; 106 dc.l Obj6C ; 107 dc.l Obj6D ; 108 dc.l Obj6E ; 109 dc.l Obj6F ; 110 dc.l Obj70 ; 111 dc.l Obj71 ; 112 dc.l Obj72 ; 113 dc.l Obj73 ; 114 dc.l Obj74 ; 115 dc.l Obj75 ; 116 dc.l Obj76 ; 117 dc.l Obj77 ; 118 dc.l Obj78 ; 119 dc.l Obj79 ; 120 dc.l Obj7A ; 121 dc.l Obj7B ; 122 dc.l Obj7C ; 123 dc.l Obj7D ; 124 dc.l Obj7E ; 125 dc.l Obj7F ; 126 dc.l Obj80 ; 127 dc.l Obj81 ; 128 dc.l Obj82 ; 129 dc.l Obj83 ; 130 dc.l Obj84 ; 131 dc.l Obj85 ; 132 dc.l Obj86 ; 133 dc.l Obj87 ; 134 dc.l Obj88 ; 135 dc.l Obj89 ; 136 dc.l Obj8A ; 137 dc.l Obj8B ; 138 dc.l Obj8C ; 139 dc.l Obj8D ; 140 dc.l Obj8D ; 141 dc.l Obj8F ; 142 dc.l Obj90 ; 143 dc.l Obj91 ; 144 dc.l Obj92 ; 145 dc.l Obj93 ; 146 dc.l Obj94 ; 147 dc.l Obj95 ; 148 dc.l Obj94 ; 149 dc.l Obj97 ; 150 dc.l Obj98 ; 151 dc.l Obj99 ; 152 dc.l Obj9A ; 153 dc.l Obj9B ; 154 dc.l Obj9C ; 155 dc.l Obj9D ; 156 dc.l Obj9E ; 157 dc.l Obj9F ; 158 dc.l ObjA0 ; 159 dc.l ObjA1 ; 160 dc.l ObjA2 ; 161 dc.l ObjA3 ; 162 dc.l ObjA4 ; 163 dc.l ObjA5 ; 164 dc.l ObjA6 ; 165 dc.l ObjA7 ; 166 dc.l ObjA8 ; 167 dc.l ObjA9 ; 168 dc.l ObjAA ; 169 dc.l ObjAB ; 170 dc.l ObjAC ; 171 dc.l ObjAD ; 172 dc.l ObjAE ; 173 dc.l ObjAF ; 174 dc.l ObjB0 ; 175 dc.l ObjB1 ; 176 dc.l ObjB2 ; 177 dc.l ObjB3 ; 178 dc.l ObjB4 ; 179 dc.l ObjB5 ; 180 dc.l ObjB6 ; 181 dc.l ObjB7 ; 182 dc.l ObjB8 ; 183 dc.l ObjB9 ; 184 dc.l ObjBA ; 185 dc.l ObjBB ; 186 dc.l ObjBC ; 187 dc.l ObjBD ; 188 dc.l ObjBE ; 189 dc.l ObjBF ; 190 dc.l ObjC0 ; 191 dc.l ObjC1 ; 192 dc.l ObjC2 ; 193 dc.l ObjC3 ; 194 dc.l ObjC3 ; 195 dc.l ObjC5 ; 196 dc.l ObjC6 ; 197 dc.l ObjC7 ; 198 dc.l ObjC8 ; 199 dc.l ObjC9 ; 200 dc.l ObjCA ; 201 dc.l ObjCB ; 202 dc.l ObjCC ; 203 dc.l ObjCD ; 204 dc.l ObjCE ; 205 dc.l ObjCF ; 206 dc.l ObjNull ; 207 dc.l ObjNull ; 208 dc.l ObjD2 ; 209 dc.l ObjD3 ; 210 dc.l ObjD4 ; 211 dc.l ObjD5 ; 212 dc.l ObjD6 ; 213 dc.l ObjD7 ; 214 dc.l ObjD8 ; 215 dc.l ObjD9 ; 216 dc.l ObjDA ; 217 dc.l ObjDB ; 218 dc.l ObjDC ; 219 ; =============== S U B R O U T I N E ======================================= ; Attributes: thunk ObjNull: ; ... bra.w DeleteObject ; End of function ObjNull ; =============== S U B R O U T I N E ======================================= ObjectMoveAndFall: ; ... move.l 8(a0),d2 move.l $C(a0),d3 move.w $10(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a0),d0 add.w #$38,$12(a0) ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,8(a0) move.l d3,$C(a0) rts ; End of function ObjectMoveAndFall ; =============== S U B R O U T I N E ======================================= ; AKA SpeedToPos in Sonic 1 ObjectMove: ; ... move.l 8(a0),d2 move.l $C(a0),d3 move.w $10(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,8(a0) move.l d3,$C(a0) rts ; End of function ObjectMove ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR Obj03 MarkObjGone: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_312CD8 bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_312CD8: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_312CEA bclr #7,2(a2,d0.w) loc_312CEA: ; ... bra.w DeleteObject ; END OF FUNCTION CHUNK FOR Obj03 ; --------------------------------------------------------------------------- MarkObjGone2: ; ... and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_312D02 bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_312D02: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_312D14 bclr #7,2(a2,d0.w) loc_312D14: ; ... bra.w DeleteObject ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR Obj03 MarkObjGone3: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_312D2E rts ; --------------------------------------------------------------------------- loc_312D2E: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_312D40 bclr #7,2(a2,d0.w) loc_312D40: ; ... bra.w DeleteObject ; END OF FUNCTION CHUNK FOR Obj03 ; --------------------------------------------------------------------------- loc_312D44: ; ... move.w 8(a0),d0 and.w #-$80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_312D5C bra.w DisplaySprite ; --------------------------------------------------------------------------- loc_312D5C: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_312D6E bclr #7,2(a2,d0.w) loc_312D6E: ; ... bra.w *+4 ; =============== S U B R O U T I N E ======================================= DeleteObject: ; ... move.l a0,a1 ; End of function DeleteObject ; =============== S U B R O U T I N E ======================================= DeleteObject2: ; ... moveq #0,d1 moveq #$F,d0 loc_312D78: ; ... move.l d1,(a1)+ dbf d0,loc_312D78 rts ; End of function DeleteObject2 ; =============== S U B R O U T I N E ======================================= DisplaySprite: ; ... lea ($FFFFAC00).w,a1 move.w $18(a0),d0 lsr.w #1,d0 and.w #$380,d0 add.w d0,a1 cmp.w #$7E,(a1) bcc.s return_312D9C addq.w #2,(a1) add.w (a1),a1 move.w a0,(a1) return_312D9C: ; ... rts ; End of function DisplaySprite ; =============== S U B R O U T I N E ======================================= DisplaySprite2: ; ... lea ($FFFFAC00).w,a2 move.w $18(a1),d0 lsr.w #1,d0 and.w #$380,d0 add.w d0,a2 cmp.w #$7E,(a2) bcc.s return_312DBA addq.w #2,(a2) add.w (a2),a2 move.w a1,(a2) return_312DBA: ; ... rts ; End of function DisplaySprite2 ; --------------------------------------------------------------------------- loc_312DBC: ; ... lea ($FFFFAC00).w,a1 add.w d0,a1 cmp.w #$7E,(a1) bcc.s return_312DCE addq.w #2,(a1) add.w (a1),a1 move.w a0,(a1) return_312DCE: ; ... rts ; =============== S U B R O U T I N E ======================================= AnimateSprite: ; ... moveq #0,d0 move.b $1C(a0),d0 cmp.b $1D(a0),d0 beq.s loc_312DEC move.b d0,$1D(a0) move.b #0,$1B(a0) move.b #0,$1E(a0) loc_312DEC: ; ... subq.b #1,$1E(a0) bpl.s return_312E26 add.w d0,d0 add.w (a1,d0.w),a1 move.b (a1),$1E(a0) moveq #0,d1 move.b $1B(a0),d1 move.b 1(a1,d1.w),d0 bmi.s loc_312E28 loc_312E08: ; ... and.b #$7F,d0 move.b d0,$1A(a0) move.b $22(a0),d1 and.b #3,d1 and.b #$FC,1(a0) or.b d1,1(a0) addq.b #1,$1B(a0) return_312E26: ; ... rts ; --------------------------------------------------------------------------- loc_312E28: ; ... addq.b #1,d0 bne.s loc_312E38 move.b #0,$1B(a0) move.b 1(a1),d0 bra.s loc_312E08 ; --------------------------------------------------------------------------- loc_312E38: ; ... addq.b #1,d0 bne.s loc_312E4C move.b 2(a1,d1.w),d0 sub.b d0,$1B(a0) sub.b d0,d1 move.b 1(a1,d1.w),d0 bra.s loc_312E08 ; --------------------------------------------------------------------------- loc_312E4C: ; ... addq.b #1,d0 bne.s loc_312E58 move.b 2(a1,d1.w),$1C(a0) rts ; --------------------------------------------------------------------------- loc_312E58: ; ... addq.b #1,d0 bne.s loc_312E6C addq.b #2,$24(a0) move.b #0,$1E(a0) addq.b #1,$1B(a0) rts ; --------------------------------------------------------------------------- loc_312E6C: ; ... addq.b #1,d0 bne.s loc_312E7C move.b #0,$1B(a0) clr.b $25(a0) rts ; --------------------------------------------------------------------------- loc_312E7C: ; ... addq.b #1,d0 bne.s loc_312E86 addq.b #2,$25(a0) rts ; --------------------------------------------------------------------------- loc_312E86: ; ... addq.b #1,d0 bne.s return_312E8E addq.b #2,$2A(a0) return_312E8E: ; ... rts ; End of function AnimateSprite ; =============== S U B R O U T I N E ======================================= BuildSprites: ; ... lea ($FFFFF800).w,a2 moveq #0,d5 moveq #0,d4 tst.b ($FFFFF711).w beq.s loc_312EA8 jsr sub_3392AA bsr.w sub_3133B4 loc_312EA8: ; ... lea ($FFFFAC00).w,a4 moveq #7,d7 loc_312EAE: ; ... tst.w (a4) beq.w loc_312F80 moveq #2,d6 loc_312EB6: ; ... move.w (a4,d6.w),a0 tst.b (a0) beq.w loc_312F78 and.b #$7F,1(a0) move.b 1(a0),d0 move.b d0,d4 btst #6,d0 bne.w loc_312FA2 and.w #$C,d0 beq.s loc_312F2C lea ($FFFFEEF0).w,a1 moveq #0,d0 move.b $19(a0),d0 move.w 8(a0),d3 sub.w (a1),d3 move.w d3,d1 add.w d0,d1 bmi.w loc_312F78 move.w d3,d1 sub.w d0,d1 cmp.w #$140,d1 bge.w loc_312F78 add.w #$80,d3 btst #4,d4 beq.s loc_312F36 moveq #0,d0 move.b $16(a0),d0 move.w $C(a0),d2 sub.w 4(a1),d2 move.w d2,d1 add.w d0,d1 bmi.s loc_312F78 move.w d2,d1 sub.w d0,d1 cmp.w #$E0,d1 bge.s loc_312F78 add.w #$80,d2 bra.s loc_312F52 ; --------------------------------------------------------------------------- loc_312F2C: ; ... move.w $A(a0),d2 move.w 8(a0),d3 bra.s loc_312F52 ; --------------------------------------------------------------------------- loc_312F36: ; ... move.w $C(a0),d2 sub.w 4(a1),d2 add.w #$80,d2 and.w #$7FF,d2 cmp.w #$60,d2 bcs.s loc_312F78 cmp.w #$180,d2 bcc.s loc_312F78 loc_312F52: ; ... move.l 4(a0),a1 moveq #0,d1 btst #5,d4 bne.s loc_312F6E move.b $1A(a0),d1 add.w d1,d1 add.w (a1,d1.w),a1 move.w (a1)+,d1 subq.w #1,d1 bmi.s loc_312F72 loc_312F6E: ; ... bsr.w sub_313098 loc_312F72: ; ... or.b #$80,1(a0) loc_312F78: ; ... addq.w #2,d6 subq.w #2,(a4) bne.w loc_312EB6 loc_312F80: ; ... lea $80(a4),a4 dbf d7,loc_312EAE move.b d5,($FFFFF62C).w cmp.b #$50,d5 beq.s loc_312F9A move.l #0,(a2) rts ; --------------------------------------------------------------------------- loc_312F9A: ; ... move.b #0,-5(a2) rts ; --------------------------------------------------------------------------- loc_312FA2: ; ... move.l a4,-(sp) lea ($FFFFEE00).w,a4 move.w 2(a0),a3 move.l 4(a0),a5 moveq #0,d0 move.b $E(a0),d0 move.w 8(a0),d3 sub.w (a4),d3 move.w d3,d1 add.w d0,d1 bmi.w loc_31308A move.w d3,d1 sub.w d0,d1 cmp.w #$140,d1 bge.w loc_31308A add.w #$80,d3 btst #4,d4 beq.s loc_313002 moveq #0,d0 move.b $14(a0),d0 move.w $C(a0),d2 sub.w 4(a4),d2 move.w d2,d1 add.w d0,d1 bmi.w loc_31308A move.w d2,d1 sub.w d0,d1 cmp.w #$E0,d1 bge.w loc_31308A add.w #$80,d2 bra.s loc_31301E ; --------------------------------------------------------------------------- loc_313002: ; ... move.w $C(a0),d2 sub.w 4(a4),d2 add.w #$80,d2 and.w #$7FF,d2 cmp.w #$60,d2 bcs.s loc_31308A cmp.w #$180,d2 bcc.s loc_31308A loc_31301E: ; ... moveq #0,d1 move.b $B(a0),d1 beq.s loc_31303C add.w d1,d1 move.l a5,a1 add.w (a1,d1.w),a1 move.w (a1)+,d1 subq.w #1,d1 bmi.s loc_31303C move.w d4,-(sp) bsr.w sub_313090 move.w (sp)+,d4 loc_31303C: ; ... or.b #$80,1(a0) lea $10(a0),a6 moveq #0,d0 move.b $F(a0),d0 subq.w #1,d0 bcs.s loc_31308A loc_313050: ; ... swap d0 move.w (a6)+,d3 sub.w (a4),d3 add.w #$80,d3 move.w (a6)+,d2 sub.w 4(a4),d2 add.w #$80,d2 and.w #$7FF,d2 addq.w #1,a6 moveq #0,d1 move.b (a6)+,d1 add.w d1,d1 move.l a5,a1 add.w (a1,d1.w),a1 move.w (a1)+,d1 subq.w #1,d1 bmi.s loc_313084 move.w d4,-(sp) bsr.w sub_313090 move.w (sp)+,d4 loc_313084: ; ... swap d0 dbf d0,loc_313050 loc_31308A: ; ... move.l (sp)+,a4 bra.w loc_312F78 ; End of function BuildSprites ; =============== S U B R O U T I N E ======================================= sub_313090: ; ... cmp.b #$50,d5 bcs.s loc_3130A2 rts ; End of function sub_313090 ; =============== S U B R O U T I N E ======================================= sub_313098: ; ... ; FUNCTION CHUNK AT 003130D8 SIZE 0000003E BYTES ; FUNCTION CHUNK AT 00313136 SIZE 00000036 BYTES ; FUNCTION CHUNK AT 0031317C SIZE 00000040 BYTES move.w 2(a0),a3 cmp.b #$50,d5 bcc.s return_3130D6 loc_3130A2: ; ... btst #0,d4 bne.s loc_3130D8 btst #1,d4 bne.w loc_313136 ; End of function sub_313098 ; =============== S U B R O U T I N E ======================================= sub_3130B0: ; ... move.b (a1)+,d0 ext.w d0 add.w d2,d0 move.w d0,(a2)+ move.b (a1)+,(a2)+ addq.b #1,d5 move.b d5,(a2)+ move.w (a1)+,d0 add.w a3,d0 move.w d0,(a2)+ move.w (a1)+,d0 add.w d3,d0 and.w #$1FF,d0 bne.s loc_3130D0 addq.w #1,d0 loc_3130D0: ; ... move.w d0,(a2)+ dbf d1,sub_3130B0 return_3130D6: ; ... rts ; End of function sub_3130B0 ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_313098 loc_3130D8: ; ... btst #1,d4 bne.w loc_31317C loc_3130E0: ; ... move.b (a1)+,d0 ext.w d0 add.w d2,d0 move.w d0,(a2)+ move.b (a1)+,d4 move.b d4,(a2)+ addq.b #1,d5 move.b d5,(a2)+ move.w (a1)+,d0 add.w a3,d0 eor.w #$800,d0 move.w d0,(a2)+ move.w (a1)+,d0 neg.w d0 move.b byte_313116(pc,d4.w),d4 sub.w d4,d0 add.w d3,d0 and.w #$1FF,d0 bne.s loc_31310E addq.w #1,d0 loc_31310E: ; ... move.w d0,(a2)+ dbf d1,loc_3130E0 rts ; END OF FUNCTION CHUNK FOR sub_313098 ; --------------------------------------------------------------------------- byte_313116: dc.b 8, 8, 8, 8,$10,$10,$10,$10,$18,$18,$18,$18,$20,$20,$20,$20; 0 byte_313126: dc.b 8,$10,$18,$20, 8,$10,$18,$20, 8,$10,$18,$20, 8,$10,$18,$20; 0 ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_313098 loc_313136: ; ... move.b (a1)+,d0 move.b (a1),d4 ext.w d0 neg.w d0 move.b byte_313126(pc,d4.w),d4 sub.w d4,d0 add.w d2,d0 move.w d0,(a2)+ move.b (a1)+,(a2)+ addq.b #1,d5 move.b d5,(a2)+ move.w (a1)+,d0 add.w a3,d0 eor.w #$1000,d0 move.w d0,(a2)+ move.w (a1)+,d0 add.w d3,d0 and.w #$1FF,d0 bne.s loc_313164 addq.w #1,d0 loc_313164: ; ... move.w d0,(a2)+ dbf d1,loc_313136 rts ; END OF FUNCTION CHUNK FOR sub_313098 ; --------------------------------------------------------------------------- byte_31316C: dc.b 8,$10,$18,$20, 8,$10,$18,$20, 8,$10,$18,$20, 8,$10,$18,$20; 0 ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_313098 loc_31317C: ; ... move.b (a1)+,d0 move.b (a1),d4 ext.w d0 neg.w d0 move.b byte_31316C(pc,d4.w),d4 sub.w d4,d0 add.w d2,d0 move.w d0,(a2)+ move.b (a1)+,d4 move.b d4,(a2)+ addq.b #1,d5 move.b d5,(a2)+ move.w (a1)+,d0 add.w a3,d0 eor.w #%1100000000000,d0 move.w d0,(a2)+ move.w (a1)+,d0 neg.w d0 move.b byte_3131BC(pc,d4.w),d4 sub.w d4,d0 add.w d3,d0 and.w #$1FF,d0 bne.s loc_3131B4 addq.w #1,d0 loc_3131B4: ; ... move.w d0,(a2)+ dbf d1,loc_31317C rts ; END OF FUNCTION CHUNK FOR sub_313098 ; --------------------------------------------------------------------------- byte_3131BC: dc.b 8, 8, 8, 8,$10,$10,$10,$10,$18,$18,$18,$18,$20,$20,$20,$20; 0 ; =============== S U B R O U T I N E ======================================= Adjust2PArtPointer2_Useless: ; ... rts ; End of function Adjust2PArtPointer2_Useless ; =============== S U B R O U T I N E ======================================= Adjust2PArtPointer_Useless: ; ... rts ; End of function Adjust2PArtPointer_Useless ; --------------------------------------------------------------------------- move.w 8(a0),d0 sub.w ($FFFFEE00).w,d0 bmi.s loc_3131F4 cmp.w #$140,d0 bge.s loc_3131F4 move.w $C(a0),d1 sub.w ($FFFFEE04).w,d1 bmi.s loc_3131F4 cmp.w #$E0,d1 bge.s loc_3131F4 moveq #0,d0 rts ; --------------------------------------------------------------------------- loc_3131F4: ; ... moveq #1,d0 rts ; --------------------------------------------------------------------------- moveq #0,d1 move.b $19(a0),d1 move.w 8(a0),d0 sub.w ($FFFFEE00).w,d0 add.w d1,d0 bmi.s loc_313228 add.w d1,d1 sub.w d1,d0 cmp.w #$140,d0 bge.s loc_313228 move.w $C(a0),d1 sub.w ($FFFFEE04).w,d1 bmi.s loc_313228 cmp.w #$E0,d1 bge.s loc_313228 moveq #0,d0 rts ; --------------------------------------------------------------------------- loc_313228: ; ... moveq #1,d0 rts ; =============== S U B R O U T I N E ======================================= RingsManager: ; ... moveq #0,d0 move.b ($FFFFF710).w,d0 move.w off_31323A(pc,d0.w),d0 jmp off_31323A(pc,d0.w) ; End of function RingsManager ; --------------------------------------------------------------------------- off_31323A: dc.w loc_31323E-off_31323A,loc_313282-off_31323A; 0 ; ... ; --------------------------------------------------------------------------- loc_31323E: ; ... addq.b #2,($FFFFF710).w bsr.w sub_313432 lea ($FFFFE800).w,a1 move.w ($FFFFEE00).w,d4 subq.w #8,d4 bhi.s loc_31325A moveq #1,d4 bra.s loc_31325A ; --------------------------------------------------------------------------- loc_313256: ; ... lea 6(a1),a1 loc_31325A: ; ... cmp.w 2(a1),d4 bhi.s loc_313256 move.w a1,($FFFFF712).w move.w a1,($FFFFF716).w add.w #$150,d4 bra.s loc_313272 ; --------------------------------------------------------------------------- loc_31326E: ; ... lea 6(a1),a1 loc_313272: ; ... cmp.w 2(a1),d4 bhi.s loc_31326E move.w a1,($FFFFF714).w move.w a1,($FFFFF718).w rts ; --------------------------------------------------------------------------- loc_313282: ; ... lea ($FFFFEF80).w,a2 move.w (a2)+,d1 subq.w #1,d1 bcs.s loc_3132B8 loc_31328C: ; ... move.w (a2)+,d0 beq.s loc_31328C move.w d0,a1 subq.b #1,(a1) bne.s loc_3132B4 move.b #6,(a1) addq.b #1,1(a1) cmp.b #8,1(a1) bne.s loc_3132B4 move.w #$FFFF,(a1) move.w #0,-2(a2) subq.w #1,($FFFFEF80).w loc_3132B4: ; ... dbf d1,loc_31328C loc_3132B8: ; ... move.w ($FFFFF712).w,a1 move.w ($FFFFEE00).w,d4 subq.w #8,d4 bhi.s loc_3132CC moveq #1,d4 bra.s loc_3132CC ; --------------------------------------------------------------------------- loc_3132C8: ; ... lea 6(a1),a1 loc_3132CC: ; ... cmp.w 2(a1),d4 bhi.s loc_3132C8 bra.s loc_3132D6 ; --------------------------------------------------------------------------- loc_3132D4: ; ... subq.w #6,a1 loc_3132D6: ; ... cmp.w -4(a1),d4 bls.s loc_3132D4 move.w a1,($FFFFF712).w move.w ($FFFFF714).w,a2 add.w #$150,d4 bra.s loc_3132EE ; --------------------------------------------------------------------------- loc_3132EA: ; ... lea 6(a2),a2 loc_3132EE: ; ... cmp.w 2(a2),d4 bhi.s loc_3132EA bra.s loc_3132F8 ; --------------------------------------------------------------------------- loc_3132F6: ; ... subq.w #6,a2 loc_3132F8: ; ... cmp.w -4(a2),d4 bls.s loc_3132F6 move.w a2,($FFFFF714).w move.w a1,($FFFFF716).w move.w a2,($FFFFF718).w rts ; =============== S U B R O U T I N E ======================================= sub_31330C: ; ... move.w ($FFFFF712).w,a1 move.w ($FFFFF714).w,a2 cmp.l a1,a2 beq.w return_3133AA cmp.w #$5A,$30(a0) bcc.w return_3133AA move.w 8(a0),d2 move.w $C(a0),d3 sub.w #8,d2 moveq #0,d5 move.b $16(a0),d5 subq.b #3,d5 sub.w d5,d3 cmp.b #$9C,$1A(a0) bne.s loc_313348 add.w #$C,d3 moveq #$A,d5 loc_313348: ; ... move.w #6,d1 move.w #$C,d6 move.w #$10,d4 add.w d5,d5 loc_313356: ; ... tst.w (a1) bne.w loc_3133A0 move.w 2(a1),d0 sub.w d1,d0 sub.w d2,d0 bcc.s loc_31336E add.w d6,d0 bcs.s loc_313374 bra.w loc_3133A0 ; --------------------------------------------------------------------------- loc_31336E: ; ... cmp.w d4,d0 bhi.w loc_3133A0 loc_313374: ; ... move.w 4(a1),d0 sub.w d1,d0 sub.w d3,d0 bcc.s loc_313386 add.w d6,d0 bcs.s loc_31338C bra.w loc_3133A0 ; --------------------------------------------------------------------------- loc_313386: ; ... cmp.w d5,d0 bhi.w loc_3133A0 loc_31338C: ; ... move.w #$604,(a1) bsr.s sub_3133AC lea ($FFFFEF82).w,a3 loc_313396: ; ... tst.w (a3)+ bne.s loc_313396 move.w a1,-(a3) addq.w #1,($FFFFEF80).w loc_3133A0: ; ... lea 6(a1),a1 cmp.l a1,a2 bne.w loc_313356 return_3133AA: ; ... rts ; End of function sub_31330C ; =============== S U B R O U T I N E ======================================= sub_3133AC: ; ... subq.w #1,($FFFFFF40).w bra.w CollectRing ; End of function sub_3133AC ; =============== S U B R O U T I N E ======================================= sub_3133B4: ; ... move.w ($FFFFF712).w,a0 move.w ($FFFFF714).w,a4 cmp.l a0,a4 bne.s loc_3133C2 rts ; --------------------------------------------------------------------------- loc_3133C2: ; ... lea ($FFFFEE00).w,a3 loc_3133C6: ; ... tst.w (a0) bmi.w loc_313426 move.w 2(a0),d3 sub.w (a3),d3 add.w #$80,d3 move.w 4(a0),d2 sub.w 4(a3),d2 and.w #$7FF,d2 add.w #8,d2 bmi.s loc_313426 cmp.w #$F0,d2 bge.s loc_313426 add.w #$78,d2 lea (word_3134F8).l,a1 moveq #0,d1 move.b 1(a0),d1 bne.s loc_313404 move.b ($FFFFFEA3).w,d1 loc_313404: ; ... add.w d1,d1 add.w (a1,d1.w),a1 move.b (a1)+,d0 ext.w d0 add.w d2,d0 move.w d0,(a2)+ move.b (a1)+,(a2)+ addq.b #1,d5 move.b d5,(a2)+ move.w (a1)+,d0 add.w #$26BC,d0 move.w d0,(a2)+ move.w (a1)+,d0 add.w d3,d0 move.w d0,(a2)+ loc_313426: ; ... lea 6(a0),a0 cmp.l a0,a4 bne.w loc_3133C6 rts ; End of function sub_3133B4 ; =============== S U B R O U T I N E ======================================= sub_313432: ; ... lea ($FFFFE800).w,a1 moveq #0,d0 move.w #$17F,d1 loc_31343C: ; ... move.l d0,(a1)+ dbf d1,loc_31343C lea ($FFFFEF80).w,a1 move.w #$F,d1 loc_31344A: ; ... move.l d0,(a1)+ dbf d1,loc_31344A moveq #0,d5 moveq #0,d0 move.w ($FFFFFE10).w,d0 ror.b #1,d0 lsr.w #6,d0 lea (S2_Off_Rings).l,a1 move.w (a1,d0.w),d0 lea (a1,d0.w),a1 lea ($FFFFE806).w,a2 loc_31346E: ; ... move.w (a1)+,d2 bmi.s loc_3134B6 move.w (a1)+,d3 bmi.s loc_313496 move.w d3,d0 rol.w #4,d0 and.w #7,d0 and.w #$FFF,d3 loc_313482: ; ... move.w #0,(a2)+ move.w d2,(a2)+ move.w d3,(a2)+ add.w #$18,d2 addq.w #1,d5 dbf d0,loc_313482 bra.s loc_31346E ; --------------------------------------------------------------------------- loc_313496: ; ... move.w d3,d0 rol.w #4,d0 and.w #7,d0 and.w #$FFF,d3 loc_3134A2: ; ... move.w #0,(a2)+ move.w d2,(a2)+ move.w d3,(a2)+ add.w #$18,d3 addq.w #1,d5 dbf d0,loc_3134A2 bra.s loc_31346E ; --------------------------------------------------------------------------- loc_3134B6: ; ... move.w d5,($FFFFFF40).w move.w #0,($FFFFFF42).w moveq #$FFFFFFFF,d0 move.l d0,(a2)+ lea ($FFFFE802).w,a1 move.w #$FE,d3 loc_3134CC: ; ... move.w d3,d4 lea 6(a1),a2 move.w (a1),d0 loc_3134D4: ; ... tst.w (a2) beq.s loc_3134E6 cmp.w (a2),d0 bls.s loc_3134E6 move.l (a1),d1 move.l (a2),d0 move.l d0,(a1) move.l d1,(a2) swap d0 loc_3134E6: ; ... lea 6(a2),a2 dbf d4,loc_3134D4 lea 6(a1),a1 dbf d3,loc_3134CC rts ; End of function sub_313432 ; --------------------------------------------------------------------------- word_3134F8: dc.w $10, $16, $1C, $22, $28; 0 ; ... dc.w $2E, $34, $3A, -$7FB, 0; 5 dc.w -8, -$7FB, 4, -8, -$7FF; 10 dc.w 8, -4, -$7FB, $804, -8; 15 dc.w -$7FB, $A, -8, -$7FB, $180A; 20 dc.w -8, -$7FB, $80A, -8, -$7FB; 25 dc.w $100A, -8 ; 30 ; =============== S U B R O U T I N E ======================================= SpecialCNZBumpers: ; ... moveq #0,d0 move.b ($FFFFF71A).w,d0 move.w off_313546(pc,d0.w),d0 jmp off_313546(pc,d0.w) ; End of function SpecialCNZBumpers ; --------------------------------------------------------------------------- off_313546: dc.w loc_31354A-off_313546,loc_31359E-off_313546; 0 ; ... ; --------------------------------------------------------------------------- loc_31354A: ; ... addq.b #2,($FFFFF71A).w lea (byte_313926).l,a1 tst.b ($FFFFFE11).w beq.s loc_313560 lea (byte_313A70).l,a1 loc_313560: ; ... move.w ($FFFFEE00).w,d4 subq.w #8,d4 bhi.s loc_313570 moveq #1,d4 bra.s loc_313570 ; --------------------------------------------------------------------------- loc_31356C: ; ... lea 6(a1),a1 loc_313570: ; ... cmp.w 2(a1),d4 bhi.s loc_31356C move.l a1,($FFFFF71C).w move.l a1,($FFFFF724).w add.w #$150,d4 bra.s loc_313588 ; --------------------------------------------------------------------------- loc_313584: ; ... lea 6(a1),a1 loc_313588: ; ... cmp.w 2(a1),d4 bhi.s loc_313584 move.l a1,($FFFFF720).w move.l a1,($FFFFF728).w move.b #1,($FFFFF71B).w rts ; --------------------------------------------------------------------------- loc_31359E: ; ... move.l ($FFFFF71C).w,a1 move.w ($FFFFEE00).w,d4 subq.w #8,d4 bhi.s loc_3135B2 moveq #1,d4 bra.s loc_3135B2 ; --------------------------------------------------------------------------- loc_3135AE: ; ... lea 6(a1),a1 loc_3135B2: ; ... cmp.w 2(a1),d4 bhi.s loc_3135AE bra.s loc_3135BC ; --------------------------------------------------------------------------- loc_3135BA: ; ... subq.w #6,a1 loc_3135BC: ; ... cmp.w -4(a1),d4 bls.s loc_3135BA move.l a1,($FFFFF71C).w move.l ($FFFFF720).w,a2 add.w #$150,d4 bra.s loc_3135D4 ; --------------------------------------------------------------------------- loc_3135D0: ; ... lea 6(a2),a2 loc_3135D4: ; ... cmp.w 2(a2),d4 bhi.s loc_3135D0 bra.s loc_3135DE ; --------------------------------------------------------------------------- loc_3135DC: ; ... subq.w #6,a2 loc_3135DE: ; ... cmp.w -4(a2),d4 bls.s loc_3135DC move.l a2,($FFFFF720).w move.l a1,($FFFFF724).w move.l a2,($FFFFF728).w rts ; =============== S U B R O U T I N E ======================================= sub_3135F2: ; ... move.l ($FFFFF71C).w,a1 move.l ($FFFFF720).w,a2 cmp.l a1,a2 beq.w return_313694 move.w 8(a0),d2 move.w $C(a0),d3 sub.w #9,d2 moveq #0,d5 move.b $16(a0),d5 subq.b #3,d5 sub.w d5,d3 cmp.b #$9C,$1A(a0) bne.s loc_313624 add.w #$C,d3 moveq #$A,d5 loc_313624: ; ... move.w #$12,d4 add.w d5,d5 loc_31362A: ; ... move.w (a1),d0 and.w #$E,d0 lea byte_313674(pc,d0.w),a3 moveq #0,d1 move.b (a3)+,d1 move.w 2(a1),d0 sub.w d1,d0 sub.w d2,d0 bcc.s loc_31364C add.w d1,d1 add.w d1,d0 bcs.s loc_313652 bra.w loc_31368A ; --------------------------------------------------------------------------- loc_31364C: ; ... cmp.w d4,d0 bhi.w loc_31368A loc_313652: ; ... moveq #0,d1 move.b (a3)+,d1 move.w 4(a1),d0 sub.w d1,d0 sub.w d3,d0 bcc.s loc_31366C add.w d1,d1 add.w d1,d0 bcs.w loc_313680 bra.w loc_31368A ; --------------------------------------------------------------------------- loc_31366C: ; ... cmp.w d5,d0 bhi.w loc_31368A bra.s loc_313680 ; --------------------------------------------------------------------------- byte_313674: dc.b $20, $20, $20, $20, $40 ; 0 dc.b 8, $40, 8, 8, $40 ; 5 dc.b 8, $40 ; 10 ; --------------------------------------------------------------------------- loc_313680: ; ... move.w (a1),d0 move.w off_313696(pc,d0.w),d0 jmp off_313696(pc,d0.w) ; --------------------------------------------------------------------------- loc_31368A: ; ... lea 6(a1),a1 cmp.l a1,a2 bne.w loc_31362A return_313694: ; ... rts ; End of function sub_3135F2 ; --------------------------------------------------------------------------- off_313696: dc.w loc_3136A2-off_313696,sub_313744-off_313696,loc_3137AA-off_313696; 0 ; ... dc.w loc_313802-off_313696,loc_313858-off_313696,loc_3138B0-off_313696; 3 ; --------------------------------------------------------------------------- loc_3136A2: ; ... move.w 4(a1),d0 sub.w $C(a0),d0 neg.w d0 cmp.w #$20,d0 blt.s loc_3136BC move.w #$A00,$12(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_3136BC: ; ... move.w 2(a1),d0 sub.w 8(a0),d0 neg.w d0 cmp.w #$20,d0 blt.s loc_3136D6 move.w #$A00,$10(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_3136D6: ; ... move.w 2(a1),d0 sub.w 8(a0),d0 cmp.w #$20,d0 blt.s loc_3136E8 move.w #$20,d0 loc_3136E8: ; ... add.w 4(a1),d0 subq.w #8,d0 move.w $C(a0),d1 add.w #$E,d1 sub.w d1,d0 bcc.s return_313704 move.w #$20,d3 bsr.s sub_313706 bra.w loc_313906 ; --------------------------------------------------------------------------- return_313704: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_313706: ; ... move.w $10(a0),d1 move.w $12(a0),d2 jsr CalcAngle sub.w d3,d0 move.w d0,d1 bpl.s loc_31371C neg.w d1 loc_31371C: ; ... neg.w d0 add.w d3,d0 cmp.b #$38,d1 bcs.s loc_313728 move.w d3,d0 loc_313728: ; ... jsr CalcSine muls.w #$F600,d1 asr.l #8,d1 move.w d1,$10(a0) muls.w #$F600,d0 asr.l #8,d0 move.w d0,$12(a0) rts ; End of function sub_313706 ; =============== S U B R O U T I N E ======================================= sub_313744: ; ... move.w 4(a1),d0 sub.w $C(a0),d0 neg.w d0 cmp.w #$20,d0 blt.s loc_31375E move.w #$A00,$12(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_31375E: ; ... move.w 2(a1),d0 sub.w 8(a0),d0 cmp.w #$20,d0 blt.s loc_313776 move.w #$F600,$10(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_313776: ; ... move.w 2(a1),d0 sub.w 8(a0),d0 neg.w d0 cmp.w #$20,d0 blt.s loc_31378A move.w #$20,d0 loc_31378A: ; ... add.w 4(a1),d0 subq.w #8,d0 move.w $C(a0),d1 add.w #$E,d1 sub.w d1,d0 bcc.s return_3137A8 move.w #$60,d3 bsr.w sub_313706 bra.w loc_313906 ; --------------------------------------------------------------------------- return_3137A8: ; ... rts ; --------------------------------------------------------------------------- loc_3137AA: ; ... move.w 4(a1),d0 sub.w $C(a0),d0 neg.w d0 cmp.w #8,d0 blt.s loc_3137C4 move.w #$A00,$12(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_3137C4: ; ... move.w 2(a1),d0 sub.w 8(a0),d0 cmp.w #$40,d0 blt.s loc_3137DC move.w #$F600,$10(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_3137DC: ; ... neg.w d0 cmp.w #$40,d0 blt.s loc_3137EE move.w #$A00,$10(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_3137EE: ; ... move.w #$38,d3 tst.w d0 bmi.s loc_3137FA move.w #$48,d3 loc_3137FA: ; ... bsr.w sub_313706 bra.w loc_313906 ; --------------------------------------------------------------------------- loc_313802: ; ... move.w 4(a1),d0 sub.w $C(a0),d0 cmp.w #8,d0 blt.s loc_31381A move.w #-$A00,$12(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_31381A: ; ... move.w 2(a1),d0 sub.w 8(a0),d0 cmp.w #$40,d0 blt.s loc_313832 move.w #-$A00,$10(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_313832: ; ... neg.w d0 cmp.w #$40,d0 blt.s loc_313844 move.w #$A00,$10(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_313844: ; ... move.w #$C8,d3 tst.w d0 bmi.s loc_313850 move.w #$B8,d3 loc_313850: ; ... bsr.w sub_313706 bra.w loc_313906 ; --------------------------------------------------------------------------- loc_313858: ; ... move.w 2(a1),d0 sub.w 8(a0),d0 neg.w d0 cmp.w #8,d0 blt.s loc_313872 move.w #$A00,$10(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_313872: ; ... move.w 4(a1),d0 sub.w $C(a0),d0 cmp.w #$40,d0 blt.s loc_31388A move.w #$F600,$12(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_31388A: ; ... neg.w d0 cmp.w #$40,d0 blt.s loc_31389C move.w #$A00,$10(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_31389C: ; ... move.w #8,d3 tst.w d0 bmi.s loc_3138A8 move.w #$F8,d3 loc_3138A8: ; ... bsr.w sub_313706 bra.w loc_313906 ; --------------------------------------------------------------------------- loc_3138B0: ; ... move.w 2(a1),d0 sub.w 8(a0),d0 cmp.w #8,d0 blt.s loc_3138C8 move.w #$A00,$10(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_3138C8: ; ... move.w 4(a1),d0 sub.w $C(a0),d0 cmp.w #$40,d0 blt.s loc_3138E0 move.w #$F600,$12(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_3138E0: ; ... neg.w d0 cmp.w #$40,d0 blt.s loc_3138F2 move.w #$A00,$10(a0) bra.w loc_313906 ; --------------------------------------------------------------------------- loc_3138F2: ; ... move.w #$78,d3 tst.w d0 bmi.s loc_3138FE move.w #$88,d3 loc_3138FE: ; ... bsr.w sub_313706 bra.w *+4 loc_313906: ; ... bset #1,$22(a0) bclr #4,$22(a0) bclr #5,$22(a0) clr.b $3C(a0) move.w #$D9,d0 jmp PlaySound ; End of function sub_313744 ; --------------------------------------------------------------------------- byte_313926: dc.b 0, 0, 0, 0, 0 ; 0 ; ... dc.b 0, 0, $A, 4, $10 ; 5 dc.b 5, $40, 0, 0, 5 ; 10 dc.b $60, 5, $20, 0, $A ; 15 dc.b 8, $10, 4, 0, 0 ; 20 dc.b 8, 8,-$10, 4, 0 ; 25 dc.b 0, 4, $C, $40, 1 ; 30 dc.b -$20, 0, 4, $C,-$40 ; 35 dc.b 1,-$20, 0, 4, $D ; 40 dc.b $40, 1,-$20, 0, 4 ; 45 dc.b $D,-$40, 1,-$20, 0 ; 50 dc.b 4, $E, $40, 1,-$20 ; 55 dc.b 0, 4, $E, $40, 4 ; 60 dc.b $60, 0, 4, $E,-$40 ; 65 dc.b 4, $60, 0, 4, $F ; 70 dc.b $40, 4, $60, 0, 4 ; 75 dc.b $F,-$40, 4, $60, 0 ; 80 dc.b 6, $11,-$40, 1, $20 ; 85 dc.b 0, 4, $11,-$40, 1 ; 90 dc.b -$20, 0, 6, $12, $40 ; 95 dc.b 1, $20, 0, 4, $12 ; 100 dc.b $40, 1,-$20, 0, 6 ; 105 dc.b $12,-$40, 1, $20, 0 ; 110 dc.b 6, $14, $40, 3, $20 ; 115 dc.b 0, 4, $14, $40, 3 ; 120 dc.b -$20, 0, 6, $14, $40 ; 125 dc.b 4, $20, 0, 6, $14 ; 130 dc.b -$40, 3, $20, 0, $A ; 135 dc.b $15,-$70, 6, $40, 0 ; 140 dc.b 6, $15,-$40, 4, $20 ; 145 dc.b 0, 8, $15,-$10, 6 ; 150 dc.b -$40, 0, $A, $16, $10 ; 155 dc.b 6,-$40, 0, 6, $16 ; 160 dc.b $40, 4, $20, 0, 8 ; 165 dc.b $16, $70, 6, $40, 0 ; 170 dc.b 6, $19,-$40, 2, $20 ; 175 dc.b 0, 0, $19,-$20, 3 ; 180 dc.b $60, 0, 6, $1A, $40 ; 185 dc.b 2, $20, 0, 2, $1A ; 190 dc.b $60, 3, $20, 0, 2 ; 195 dc.b $1A,-$60, 6,-$20, 0 ; 200 dc.b 4, $1A,-$40, 3, $60 ; 205 dc.b 0, 6, $1A,-$40, 6 ; 210 dc.b $20, 0, 4, $1A,-$40 ; 215 dc.b 7, $60, 0, 4, $1B ; 220 dc.b $40, 3, $60, 0, 6 ; 225 dc.b $1B, $40, 6, $20, 0 ; 230 dc.b 4, $1B, $40, 7, $60 ; 235 dc.b 0, 4, $1B,-$40, 3 ; 240 dc.b $60, 0, 6, $1B,-$40 ; 245 dc.b 6, $20, 0, 4, $1B ; 250 dc.b -$40, 7, $60, 0, 4 ; 255 dc.b $1C, $40, 7, $60, 0 ; 260 dc.b 4, $1C,-$40, 7, $60 ; 265 dc.b 0, 0, $1C,-$20, 3 ; 270 dc.b $60, 0, 0, $1D, $20 ; 275 dc.b 3, $20, 0, 2, $1F ; 280 dc.b $60, 6, $20, 0, 0 ; 285 dc.b $20, $60, 6, $20, 0 ; 290 dc.b 0, $20,-$60, 4,-$60 ; 295 dc.b 0, 2, $21,-$20, 1 ; 300 dc.b -$60, 0, 2, $22, $60 ; 305 dc.b 4,-$20, 0, 8, $22 ; 310 dc.b -$10, 1,-$40, 0, 8 ; 315 dc.b $23,-$10, 3,-$40, 0 ; 320 dc.b 0, -1, -1, 0, 0 ; 325 byte_313A70: dc.b 0, 0, 0, 0, 0 ; 0 ; ... dc.b 0, 0, 2, $D,-$60 ; 5 dc.b 5,-$60, 0, 0, $E ; 10 dc.b -$20, 5,-$60, 0, 2 ; 15 dc.b $13, $20, 3, $20, 0 ; 20 dc.b 0, $13, $60, 2,-$60 ; 25 dc.b 0, 4, $15, $40, 1 ; 30 dc.b -$20, 0, 6, $15, $40 ; 35 dc.b 2, $20, 0, 4, $15 ; 40 dc.b -$40, 1,-$20, 0, 6 ; 45 dc.b $15,-$40, 2, $20, 0 ; 50 dc.b 4, $16, $40, 1,-$20 ; 55 dc.b 0, 6, $16, $40, 2 ; 60 dc.b $20, 0, 6, $17, $40 ; 65 dc.b 7, $20, 0, 4, $17 ; 70 dc.b $40, 7,-$20, 0, 6 ; 75 dc.b $17,-$40, 7, $20, 0 ; 80 dc.b 4, $17,-$40, 7,-$20 ; 85 dc.b 0, $A, $18, $10, 2 ; 90 dc.b $40, 0, 6, $18, $40 ; 95 dc.b 7, $20, 0, 4, $18 ; 100 dc.b $40, 7,-$20, 0, 6 ; 105 dc.b $18,-$40, 7, $20, 0 ; 110 dc.b 4, $18,-$40, 7,-$20 ; 115 dc.b 0, $A, $18,-$70, 3 ; 120 dc.b -$40, 0, 8, $19, $30 ; 125 dc.b 2, $40, 0, 6, $19 ; 130 dc.b $40, 7, $20, 0, 4 ; 135 dc.b $19, $40, 7,-$20, 0 ; 140 dc.b 6, $19,-$40, 7, $20 ; 145 dc.b 0, 4, $19,-$40, 7 ; 150 dc.b -$20, 0, 6, $1A, $40 ; 155 dc.b 7, $20, 0, 4, $1A ; 160 dc.b $40, 7,-$20, 0, 6 ; 165 dc.b $1A,-$40, 7, $20, 0 ; 170 dc.b 4, $1A,-$40, 7,-$20 ; 175 dc.b 0, $A, $1C,-$70, 2 ; 180 dc.b $40, 0, 2, $1C,-$60 ; 185 dc.b 3, $60, 0, 2, $1D ; 190 dc.b $20, 3,-$20, 0, 4 ; 195 dc.b $1D,-$40, 1,-$20, 0 ; 200 dc.b 6, $1D,-$40, 2, $20 ; 205 dc.b 0, 4, $1E, $40, 1 ; 210 dc.b -$20, 0, 6, $1E, $40 ; 215 dc.b 2, $20, 0, 8, $1E ; 220 dc.b $70, 3,-$80, 0, 4 ; 225 dc.b $1E,-$40, 5,-$20, 0 ; 230 dc.b 6, $1F,-$80, 5,-$70 ; 235 dc.b 0, 2, $22, $20, 1 ; 240 dc.b -$60, 0, 2, $22, $60 ; 245 dc.b 1,-$20, 0, 2, $22 ; 250 dc.b -$60, 2, $20, 0, 2 ; 255 dc.b $22,-$20, 2, $60, 0 ; 260 dc.b 2, $23,-$60, 4,-$20 ; 265 dc.b 0, 0, $25, $20, 5 ; 270 dc.b $20, 0, 8, $25, $30 ; 275 dc.b 1,-$40, 0, 8, $25 ; 280 dc.b $30, 2,-$40, 0, 8 ; 285 dc.b $25, $30, 3, $40, 0 ; 290 dc.b 8, $25, $30, 3,-$40 ; 295 dc.b 0, 8, $25, $30, 4 ; 300 dc.b -$40, 0, 0, $25,-$60 ; 305 dc.b 3, $60, 0, 0, $25 ; 310 dc.b -$20, 3, $20, 0, 0 ; 315 dc.b -1, -1, 0, 0 ; 320 ; =============== S U B R O U T I N E ======================================= ObjPosLoad: ; ... moveq #0,d0 move.b ($FFFFF76C).w,d0 move.w off_313BC2(pc,d0.w),d0 jmp off_313BC2(pc,d0.w) ; End of function ObjPosLoad ; --------------------------------------------------------------------------- off_313BC2: dc.w loc_313BC6-off_313BC2 ; ... dc.w loc_313C62-off_313BC2 ; --------------------------------------------------------------------------- loc_313BC6: ; ... addq.b #2,($FFFFF76C).w move.w ($FFFFFE10).w,d0 ror.b #1,d0 lsr.w #5,d0 lea ($DF370).l,a0 move.l (a0,d0.w),a0 move.l a0,($FFFFF770).w move.l a0,($FFFFF774).w move.l a0,($FFFFF778).w move.l a0,($FFFFF77C).w lea ($FFFFFC00).w,a2 move.w #$101,(a2)+ move.w #$5E,d0 loc_313BF8: ; ... clr.l (a2)+ dbf d0,loc_313BF8 lea ($FFFFFC00).w,a2 moveq #0,d2 move.w ($FFFFEE00).w,d6 sub.w #$80,d6 bcc.s loc_313C10 moveq #0,d6 loc_313C10: ; ... and.w #$FF80,d6 move.l ($FFFFF770).w,a0 loc_313C18: ; ... cmp.w (a0),d6 bls.s loc_313C2A tst.b 2(a0) bpl.s loc_313C26 move.b (a2),d2 addq.b #1,(a2) loc_313C26: ; ... addq.w #6,a0 bra.s loc_313C18 ; --------------------------------------------------------------------------- loc_313C2A: ; ... move.l a0,($FFFFF770).w move.l a0,($FFFFF778).w move.l ($FFFFF774).w,a0 sub.w #$80,d6 bcs.s loc_313C4E loc_313C3C: ; ... cmp.w (a0),d6 bls.s loc_313C4E tst.b 2(a0) bpl.s loc_313C4A addq.b #1,1(a2) loc_313C4A: ; ... addq.w #6,a0 bra.s loc_313C3C ; --------------------------------------------------------------------------- loc_313C4E: ; ... move.l a0,($FFFFF774).w move.l a0,($FFFFF77C).w move.w #-1,($FFFFF76E).w move.w #-1,($FFFFF78C).w loc_313C62: ; ... move.w ($FFFFEE00).w,d1 sub.w #$80,d1 and.w #$FF80,d1 move.w d1,($FFFFF7DA).w lea ($FFFFFC00).w,a2 moveq #0,d2 move.w ($FFFFEE00).w,d6 and.w #$FF80,d6 cmp.w ($FFFFF76E).w,d6 beq.w return_313D2C bge.s loc_313CE8 move.w d6,($FFFFF76E).w move.l ($FFFFF774).w,a0 sub.w #$80,d6 bcs.s loc_313CC4 loc_313C98: ; ... cmp.w -6(a0),d6 bge.s loc_313CC4 subq.w #6,a0 tst.b 2(a0) bpl.s loc_313CAE subq.b #1,1(a2) move.b 1(a2),d2 loc_313CAE: ; ... bsr.w sub_313D2E bne.s loc_313CB8 subq.w #6,a0 bra.s loc_313C98 ; --------------------------------------------------------------------------- loc_313CB8: ; ... tst.b 2(a0) bpl.s loc_313CC2 addq.b #1,1(a2) loc_313CC2: ; ... addq.w #6,a0 loc_313CC4: ; ... move.l a0,($FFFFF774).w move.l ($FFFFF770).w,a0 add.w #$300,d6 loc_313CD0: ; ... cmp.w -6(a0),d6 bgt.s loc_313CE2 tst.b -4(a0) bpl.s loc_313CDE subq.b #1,(a2) loc_313CDE: ; ... subq.w #6,a0 bra.s loc_313CD0 ; --------------------------------------------------------------------------- loc_313CE2: ; ... move.l a0,($FFFFF770).w rts ; --------------------------------------------------------------------------- loc_313CE8: ; ... move.w d6,($FFFFF76E).w move.l ($FFFFF770).w,a0 add.w #$280,d6 loc_313CF4: ; ... cmp.w (a0),d6 bls.s loc_313D08 tst.b 2(a0) bpl.s loc_313D02 move.b (a2),d2 addq.b #1,(a2) loc_313D02: ; ... bsr.w sub_313D2E beq.s loc_313CF4 loc_313D08: ; ... move.l a0,($FFFFF770).w move.l ($FFFFF774).w,a0 sub.w #$300,d6 bcs.s loc_313D28 loc_313D16: ; ... cmp.w (a0),d6 bls.s loc_313D28 tst.b 2(a0) bpl.s loc_313D24 addq.b #1,1(a2) loc_313D24: ; ... addq.w #6,a0 bra.s loc_313D16 ; --------------------------------------------------------------------------- loc_313D28: ; ... move.l a0,($FFFFF774).w return_313D2C: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_313D2E: ; ... tst.b 2(a0) bpl.s loc_313D42 bset #7,2(a2,d2.w) beq.s loc_313D42 addq.w #6,a0 moveq #0,d0 rts ; --------------------------------------------------------------------------- loc_313D42: ; ... bsr.w SingleObjLoad bne.s return_313D76 move.w (a0)+,8(a1) move.w (a0)+,d0 bpl.s loc_313D54 move.b d2,$23(a1) loc_313D54: ; ... move.w d0,d1 and.w #%111111111111,d0 move.w d0,$C(a1) rol.w #3,d1 and.b #3,d1 move.b d1,1(a1) move.b d1,$22(a1) move.b (a0)+,0(a1) move.b (a0)+,$28(a1) moveq #0,d0 return_313D76: ; ... rts ; End of function sub_313D2E ; =============== S U B R O U T I N E ======================================= SingleObjLoad: ; ... lea ($FFFFB400).w,a1 move.w #$6F,d0 loc_313D80: ; ... tst.b (a1) beq.s return_313D8C lea $40(a1),a1 dbf d0,loc_313D80 return_313D8C: ; ... rts ; End of function SingleObjLoad ; =============== S U B R O U T I N E ======================================= SingleObjLoad2: ; ... move.l a0,a1 move.w #$D000,d0 sub.w a0,d0 lsr.w #6,d0 subq.w #1,d0 bcs.s return_313DA8 loc_313D9C: ; ... tst.b (a1) beq.s return_313DA8 lea $40(a1),a1 dbf d0,loc_313D9C return_313DA8: ; ... rts ; End of function SingleObjLoad2 ; --------------------------------------------------------------------------- move.l a3,a1 move.w #$B,d0 loc_313DB0: ; ... tst.b (a1) beq.s return_313DBC lea $40(a1),a1 dbf d0,loc_313DB0 return_313DBC: ; ... rts ; --------------------------------------------------------------------------- Obj41: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_313DD2(pc,d0.w),d1 jsr off_313DD2(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_313DD2: dc.w loc_313DDE-off_313DD2,loc_313EB6-off_313DD2,sub_313FA6-off_313DD2; 0 ; ... dc.w sub_3141B6-off_313DD2,sub_3142A0-off_313DD2,sub_3143D4-off_313DD2; 3 ; --------------------------------------------------------------------------- loc_313DDE: ; ... addq.b #2,$24(a0) move.l #Map_Obj41,4(a0) move.w #$45C,2(a0) or.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) move.b $28(a0),d0 lsr.w #3,d0 and.w #$E,d0 move.w off_313E14(pc,d0.w),d0 jmp off_313E14(pc,d0.w) ; --------------------------------------------------------------------------- off_313E14: dc.w loc_313E8A-off_313E14,loc_313E1E-off_313E14,loc_313E3E-off_313E14; 0 ; ... dc.w loc_313E52-off_313E14,loc_313E6C-off_313E14; 3 ; --------------------------------------------------------------------------- loc_313E1E: ; ... move.b #4,$24(a0) move.b #2,$1C(a0) move.b #3,$1A(a0) move.w #$470,2(a0) move.b #8,$19(a0) bra.s loc_313E8A ; --------------------------------------------------------------------------- loc_313E3E: ; ... move.b #6,$24(a0) move.b #6,$1A(a0) bset #1,$22(a0) bra.s loc_313E8A ; --------------------------------------------------------------------------- loc_313E52: ; ... move.b #8,$24(a0) move.b #4,$1C(a0) move.b #7,$1A(a0) move.w #$43C,2(a0) bra.s loc_313E8A ; --------------------------------------------------------------------------- loc_313E6C: ; ... move.b #$A,$24(a0) move.b #4,$1C(a0) move.b #$A,$1A(a0) move.w #$43C,2(a0) bset #1,$22(a0) loc_313E8A: ; ... move.b $28(a0),d0 and.w #2,d0 move.w word_313EB2(pc,d0.w),$30(a0) btst #1,d0 beq.s loc_313EAC bset #5,2(a0) move.l #byte_314568,4(a0) loc_313EAC: ; ... bsr.w Adjust2PArtPointer2_Useless rts ; --------------------------------------------------------------------------- word_313EB2: dc.w -$1000 ; ... dc.w -$A00 ; --------------------------------------------------------------------------- loc_313EB6: ; ... move.w #$1B,d1 move.w #8,d2 move.w #$10,d3 move.w 8(a0),d4 lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) bsr.w loc_314C04 btst #3,$22(a0) beq.s loc_313EDE bsr.s sub_313F00 loc_313EDE: ; ... movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 moveq #4,d6 bsr.w loc_314C04 btst #4,$22(a0) beq.s loc_313EF6 bsr.s sub_313F00 loc_313EF6: ; ... lea (Ani_Obj41).l,a1 bra.w AnimateSprite ; =============== S U B R O U T I N E ======================================= sub_313F00: ; ... move.w #$100,$1C(a0) addq.w #8,$C(a1) move.w $30(a0),$12(a1) bset #1,$22(a1) bclr #3,$22(a1) move.b #$10,$1C(a1) move.b #2,$24(a1) move.b $28(a0),d0 bpl.s loc_313F34 move.w #0,$10(a1) loc_313F34: ; ... btst #0,d0 beq.s loc_313F74 move.w #1,$14(a1) move.b #1,$27(a1) move.b #0,$1C(a1) move.b #0,$2C(a1) move.b #4,$2D(a1) btst #1,d0 bne.s loc_313F64 move.b #1,$2C(a1) loc_313F64: ; ... btst #0,$22(a1) beq.s loc_313F74 neg.b $27(a1) neg.w $14(a1) loc_313F74: ; ... and.b #$C,d0 cmp.b #4,d0 bne.s loc_313F8A move.b #$C,$3E(a1) move.b #$D,$3F(a1) loc_313F8A: ; ... cmp.b #8,d0 bne.s loc_313F9C move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_313F9C: ; ... move.w #$CC,d0 jmp PlaySound ; End of function sub_313F00 ; =============== S U B R O U T I N E ======================================= sub_313FA6: ; ... move.w #$13,d1 move.w #$E,d2 move.w #$F,d3 move.w 8(a0),d4 lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) bsr.w loc_314C04 btst #5,$22(a0) beq.s loc_313FE6 move.b $22(a0),d1 move.w 8(a0),d0 sub.w 8(a1),d0 bcs.s loc_313FDE eor.b #1,d1 loc_313FDE: ; ... and.b #1,d1 bne.s loc_313FE6 bsr.s sub_314024 loc_313FE6: ; ... movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 moveq #4,d6 bsr.w loc_314C04 btst #6,$22(a0) beq.s loc_314016 move.b $22(a0),d1 move.w 8(a0),d0 sub.w 8(a1),d0 bcs.s loc_31400E eor.b #1,d1 loc_31400E: ; ... and.b #1,d1 bne.s loc_314016 bsr.s sub_314024 loc_314016: ; ... bsr.w sub_3140FC lea (Ani_Obj41).l,a1 bra.w AnimateSprite ; End of function sub_313FA6 ; =============== S U B R O U T I N E ======================================= sub_314024: ; ... move.w #$300,$1C(a0) move.w $30(a0),$10(a1) addq.w #8,8(a1) bset #0,$22(a1) btst #0,$22(a0) bne.s loc_314052 bclr #0,$22(a1) sub.w #$10,8(a1) neg.w $10(a1) loc_314052: ; ... move.w #$F,$2E(a1) move.w $10(a1),$14(a1) btst #2,$22(a1) bne.s loc_31406C move.b #0,$1C(a1) loc_31406C: ; ... move.b $28(a0),d0 bpl.s loc_314078 move.w #0,$12(a1) loc_314078: ; ... btst #0,d0 beq.s loc_3140B8 move.w #1,$14(a1) move.b #1,$27(a1) move.b #0,$1C(a1) move.b #1,$2C(a1) move.b #8,$2D(a1) btst #1,d0 bne.s loc_3140A8 move.b #3,$2C(a1) loc_3140A8: ; ... btst #0,$22(a1) beq.s loc_3140B8 neg.b $27(a1) neg.w $14(a1) loc_3140B8: ; ... and.b #$C,d0 cmp.b #4,d0 bne.s loc_3140CE move.b #$C,$3E(a1) move.b #$D,$3F(a1) loc_3140CE: ; ... cmp.b #8,d0 bne.s loc_3140E0 move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_3140E0: ; ... bclr #5,$22(a0) bclr #6,$22(a0) bclr #5,$22(a1) move.w #$CC,d0 jmp PlaySound ; End of function sub_314024 ; =============== S U B R O U T I N E ======================================= sub_3140FC: ; ... cmp.b #3,$1C(a0) beq.w return_3141B4 move.w 8(a0),d0 move.w d0,d1 add.w #$28,d1 btst #0,$22(a0) beq.s loc_31411E move.w d0,d1 sub.w #$28,d0 loc_31411E: ; ... move.w $C(a0),d2 move.w d2,d3 sub.w #$18,d2 add.w #$18,d3 lea ($FFFFB000).w,a1 btst #1,$22(a1) bne.s loc_314172 move.w $14(a1),d4 btst #0,$22(a0) beq.s loc_314146 neg.w d4 loc_314146: ; ... tst.w d4 bmi.s loc_314172 move.w 8(a1),d4 cmp.w d0,d4 bcs.w loc_314172 cmp.w d1,d4 bcc.w loc_314172 move.w $C(a1),d4 cmp.w d2,d4 bcs.w loc_314172 cmp.w d3,d4 bcc.w loc_314172 move.w d0,-(sp) bsr.w sub_314024 move.w (sp)+,d0 loc_314172: ; ... lea ($FFFFB040).w,a1 btst #1,$22(a1) bne.s return_3141B4 move.w $14(a1),d4 btst #0,$22(a0) beq.s loc_31418C neg.w d4 loc_31418C: ; ... tst.w d4 bmi.s return_3141B4 move.w 8(a1),d4 cmp.w d0,d4 bcs.w return_3141B4 cmp.w d1,d4 bcc.w return_3141B4 move.w $C(a1),d4 cmp.w d2,d4 bcs.w return_3141B4 cmp.w d3,d4 bcc.w return_3141B4 bsr.w sub_314024 return_3141B4: ; ... rts ; End of function sub_3140FC ; =============== S U B R O U T I N E ======================================= sub_3141B6: ; ... move.w #$1B,d1 move.w #8,d2 move.w #$10,d3 move.w 8(a0),d4 lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) bsr.w loc_314C04 cmp.w #-2,d4 bne.s loc_3141DC bsr.s sub_3141FC loc_3141DC: ; ... movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 moveq #4,d6 bsr.w loc_314C04 cmp.w #-2,d4 bne.s loc_3141F2 bsr.s sub_3141FC loc_3141F2: ; ... lea (Ani_Obj41).l,a1 bra.w AnimateSprite ; End of function sub_3141B6 ; =============== S U B R O U T I N E ======================================= sub_3141FC: ; ... move.w #$100,$1C(a0) subq.w #8,$C(a1) move.w $30(a0),$12(a1) neg.w $12(a1) move.b $28(a0),d0 bpl.s loc_31421C move.w #0,$10(a1) loc_31421C: ; ... btst #0,d0 beq.s loc_31425C move.w #1,$14(a1) move.b #1,$27(a1) move.b #0,$1C(a1) move.b #0,$2C(a1) move.b #4,$2D(a1) btst #1,d0 bne.s loc_31424C move.b #1,$2C(a1) loc_31424C: ; ... btst #0,$22(a1) beq.s loc_31425C neg.b $27(a1) neg.w $14(a1) loc_31425C: ; ... and.b #$C,d0 cmp.b #4,d0 bne.s loc_314272 move.b #$C,$3E(a1) move.b #$D,$3F(a1) loc_314272: ; ... cmp.b #8,d0 bne.s loc_314284 move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_314284: ; ... bset #1,$22(a1) bclr #3,$22(a1) move.b #2,$24(a1) move.w #$CC,d0 jmp PlaySound ; End of function sub_3141FC ; =============== S U B R O U T I N E ======================================= sub_3142A0: ; ... move.w #$1B,d1 move.w #$10,d2 move.w 8(a0),d4 lea byte_3144E0(pc),a2 lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) bsr.w loc_314C4C btst #3,$22(a0) beq.s loc_3142C8 bsr.s sub_3142EA loc_3142C8: ; ... movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 moveq #4,d6 bsr.w loc_314C4C btst #4,$22(a0) beq.s loc_3142E0 bsr.s sub_3142EA loc_3142E0: ; ... lea (Ani_Obj41).l,a1 bra.w AnimateSprite ; End of function sub_3142A0 ; =============== S U B R O U T I N E ======================================= sub_3142EA: ; ... btst #0,$22(a0) bne.s loc_314300 move.w 8(a0),d0 subq.w #4,d0 cmp.w 8(a1),d0 bcs.s loc_31430E rts ; --------------------------------------------------------------------------- loc_314300: ; ... move.w 8(a0),d0 addq.w #4,d0 cmp.w 8(a1),d0 bcc.s loc_31430E rts ; --------------------------------------------------------------------------- loc_31430E: ; ... move.w #$500,$1C(a0) move.w $30(a0),$12(a1) move.w $30(a0),$10(a1) addq.w #6,$C(a1) addq.w #6,8(a1) bset #0,$22(a1) btst #0,$22(a0) bne.s loc_314346 bclr #0,$22(a1) sub.w #$C,8(a1) neg.w $10(a1) loc_314346: ; ... bset #1,$22(a1) bclr #3,$22(a1) move.b #$10,$1C(a1) move.b #2,$24(a1) move.b $28(a0),d0 btst #0,d0 beq.s loc_3143A2 move.w #1,$14(a1) move.b #1,$27(a1) move.b #0,$1C(a1) move.b #1,$2C(a1) move.b #8,$2D(a1) btst #1,d0 bne.s loc_314392 move.b #3,$2C(a1) loc_314392: ; ... btst #0,$22(a1) beq.s loc_3143A2 neg.b $27(a1) neg.w $14(a1) loc_3143A2: ; ... and.b #$C,d0 cmp.b #4,d0 bne.s loc_3143B8 move.b #$C,$3E(a1) move.b #$D,$3F(a1) loc_3143B8: ; ... cmp.b #8,d0 bne.s loc_3143CA move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_3143CA: ; ... move.w #$CC,d0 jmp PlaySound ; End of function sub_3142EA ; =============== S U B R O U T I N E ======================================= sub_3143D4: ; ... move.w #$1B,d1 move.w #$10,d2 move.w 8(a0),d4 lea byte_3144FC(pc),a2 lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) bsr.w loc_314C4C cmp.w #-2,d4 bne.s loc_3143FA bsr.s sub_31441C loc_3143FA: ; ... movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 moveq #4,d6 bsr.w loc_314C4C cmp.w #-2,d4 bne.s loc_314410 bsr.s sub_31441C loc_314410: ; ... lea (Ani_Obj41).l,a1 bra.w AnimateSprite ; End of function sub_3143D4 ; --------------------------------------------------------------------------- rts ; =============== S U B R O U T I N E ======================================= sub_31441C: ; ... move.w #$500,$1C(a0) move.w $30(a0),$12(a1) neg.w $12(a1) move.w $30(a0),$10(a1) subq.w #6,$C(a1) addq.w #6,8(a1) bset #0,$22(a1) btst #0,$22(a0) bne.s loc_314458 bclr #0,$22(a1) sub.w #$C,8(a1) neg.w $10(a1) loc_314458: ; ... bset #1,$22(a1) bclr #3,$22(a1) move.b #2,$24(a1) move.b $28(a0),d0 btst #0,d0 beq.s loc_3144AE move.w #1,$14(a1) move.b #1,$27(a1) move.b #0,$1C(a1) move.b #1,$2C(a1) move.b #8,$2D(a1) btst #1,d0 bne.s loc_31449E move.b #3,$2C(a1) loc_31449E: ; ... btst #0,$22(a1) beq.s loc_3144AE neg.b $27(a1) neg.w $14(a1) loc_3144AE: ; ... and.b #$C,d0 cmp.b #4,d0 bne.s loc_3144C4 move.b #$C,$3E(a1) move.b #$D,$3F(a1) loc_3144C4: ; ... cmp.b #8,d0 bne.s loc_3144D6 move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_3144D6: ; ... move.w #$CC,d0 jmp PlaySound ; End of function sub_31441C ; --------------------------------------------------------------------------- byte_3144E0: dc.b $10, $10, $10, $10, $10 ; 0 ; ... dc.b $10, $10, $10, $10, $10 ; 5 dc.b $10, $10, $E, $C, $A ; 10 dc.b 8, 6, 4, 2, 0 ; 15 dc.b -2, -4, -4, -4, -4 ; 20 dc.b -4, -4, -4 ; 25 byte_3144FC: dc.b -$C,-$10,-$10,-$10,-$10 ; 0 ; ... dc.b -$10,-$10,-$10,-$10,-$10 ; 5 dc.b -$10,-$10, -$E, -$C, -$A ; 10 dc.b -8, -6, -4, -2, 0 ; 15 dc.b 2, 4, 4, 4, 4 ; 20 dc.b 4, 4, 4 ; 25 Ani_Obj41: dc.w byte_314524-Ani_Obj41,byte_314527-Ani_Obj41,byte_314533-Ani_Obj41; 0 ; ... dc.w byte_314536-Ani_Obj41,byte_314542-Ani_Obj41,byte_314545-Ani_Obj41; 3 byte_314524: dc.b $F, 0, -1 ; 0 ; ... byte_314527: dc.b 0, 1, 0, 0, 2, 2, 2, 2, 2, 2, -3, 0; 0 ; ... byte_314533: dc.b $F, 3, -1 ; 0 ; ... byte_314536: dc.b 0, 4, 3, 3, 5, 5, 5, 5, 5, 5, -3, 2; 0 ; ... byte_314542: dc.b $F, 7, -1 ; 0 ; ... byte_314545: dc.b 0, 8, 7, 7, 9, 9, 9, 9, 9, 9, -3, 4, 0; 0 ; ... Map_Obj41: dc.w byte_31457E-Map_Obj41,byte_31458C-Map_Obj41; 0 ; ... dc.w byte_314594-Map_Obj41,byte_3145A2-Map_Obj41; 2 dc.w byte_3145B0-Map_Obj41,byte_3145B8-Map_Obj41; 4 dc.w byte_3145C6-Map_Obj41,byte_3145D4-Map_Obj41; 6 dc.w byte_3145EE-Map_Obj41,byte_314602-Map_Obj41; 8 dc.w byte_31461C-Map_Obj41 ; 10 byte_314568: dc.b 0, $16, 0, $24, 0, $2C, 0, $3A, 0, $48; 0 ; ... dc.b 0, $50, 0, $5E, 0,-$32, 0,-$18, 0, -4; 10 dc.b 1, $16 ; 20 byte_31457E: dc.b 0, 2,-$10, $D, 0, 0, -1,-$10, 0, 5; 0 ; ... dc.b 0, 8, -1, -8 ; 10 byte_31458C: dc.b 0, 1, -8, $D, 0, 0, -1,-$10; 0 ; ... byte_314594: dc.b 0, 2,-$20, $D, 0, 0, -1,-$10,-$10, 7, 0, $C, -1, -8; 0 ; ... byte_3145A2: dc.b 0, 2,-$10, 3, 0, 0, 0, 0, -8, 1, 0, 4, -1, -8; 0 ; ... byte_3145B0: dc.b 0, 1,-$10, 3, 0, 0, -1, -8; 0 ; ... byte_3145B8: dc.b 0, 2,-$10, 3, 0, 0, 0, $10, -8, 9, 0, 6, -1, -8; 0 ; ... byte_3145C6: dc.b 0, 2, 0, $D, $10, 0, -1,-$10,-$10, 5; 0 ; ... dc.b $10, 8, -1, -8 ; 10 byte_3145D4: dc.b 0, 4,-$10, $D, 0, 0, -1,-$10, 0, 5; 0 ; ... dc.b 0, 8, 0, 0, -5, 5, 0, $C, -1, -$A; 10 dc.b 0, 5, $20, $1C, -1,-$10; 20 byte_3145EE: dc.b 0, 3, -$A, $D, 0, 0, -1,-$16, 6, 5; 0 ; ... dc.b 0, 8, -1, -6, 0, 5, $20, $1C, -1,-$10; 10 byte_314602: dc.b 0, 4,-$1A, $D, 0, 0, -1, -5, -$A, 5; 0 ; ... dc.b 0, 8, 0, $B, -$D, $B, 0, $10, -1, -$A; 10 dc.b 0, 5, $20, $1C, -1,-$10; 20 byte_31461C: dc.b 0, 4, 0, $D, $10, 0, -1,-$10,-$10, 5; 0 ; ... dc.b $10, 8, 0, 0, -$B, 5, $10, $C, -1, -$A; 10 dc.b -$10, 5, $30, $1C, -1,-$10, 0, 4,-$10, $D; 20 dc.b 0, 0, -1,-$10, 0, 5, 0, 8, 0, 0; 30 dc.b -5, 5, 0, $C, -1, -$A, 0, 5, 0, $1C; 40 dc.b -1,-$10, 0, 3, -$A, $D, 0, 0, -1,-$16; 50 dc.b 6, 5, 0, 8, -1, -6, 0, 5, 0, $1C; 60 dc.b -1,-$10, 0, 4,-$1A, $D, 0, 0, -1, -5; 70 dc.b -$A, 5, 0, 8, 0, $B, -$D, $B, 0, $10; 80 dc.b -1, -$A, 0, 5, 0, $1C, -1,-$10, 0, 4; 90 dc.b 0, $D, $10, 0, -1,-$10,-$10, 5, $10, 8; 100 dc.b 0, 0, -$B, 5, $10, $C, -1, -$A,-$10, 5; 110 dc.b $10, $1C, -1,-$10 ; 120 ; --------------------------------------------------------------------------- Obj0D: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3146B8(pc,d0.w),d1 jsr off_3146B8(pc,d1.w) lea (off_314A6E).l,a1 bsr.w AnimateSprite bsr.w sub_314A14 bra.w MarkObjGone ; --------------------------------------------------------------------------- off_3146B8: dc.w loc_3146BC-off_3146B8,loc_31472C-off_3146B8; 0 ; ... ; --------------------------------------------------------------------------- loc_3146BC: ; ... tst.w ($FFFFFFDC).w beq.s loc_3146E8 move.l #Map_Obj0D,4(a0) move.w #$5E8,2(a0) move.b #-1,($FFFFFFCA).w moveq #0,d1 move.w #$1020,d1 move.w #$FF80,d4 moveq #0,d5 bsr.w loc_314A44 bra.s loc_31470C ; --------------------------------------------------------------------------- loc_3146E8: ; ... cmp.w #$401,($FFFFFE10).w beq.s loc_3146FE tst.b ($FFFFFE11).w beq.s loc_3146FE move.w #0,8(a0) rts ; --------------------------------------------------------------------------- loc_3146FE: ; ... move.l #Map_Obj0D_0,4(a0) move.w #$434,2(a0) loc_31470C: ; ... addq.b #2,$24(a0) bsr.w Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$18,$19(a0) move.b #4,$18(a0) move.w #$3C3C,($FFFFFEF8).w loc_31472C: ; ... tst.b ($FFFFFE1E).w beq.w loc_3147B6 lea ($FFFFB000).w,a1 move.w 8(a1),d0 sub.w 8(a0),d0 bcs.s loc_3147B6 cmp.w #$20,d0 bcc.s loc_3147B6 move.w #$CF,d0 jsr PlayMusic clr.b ($FFFFFE1E).w move.w #1,$1C(a0) move.w #0,$30(a0) move.w ($FFFFEECA).w,($FFFFEEC8).w move.b #2,$25(a0) cmp.b #$C,($FFFFFEF8).w bhi.s loc_314780 move.w ($FFFFFF90).w,d0 jsr PlayMusic loc_314780: ; ... tst.b $36(a0) bne.w loc_314830 move.b #3,$36(a0) cmp.w #2,($FFFFFF70).w bne.s loc_31479C move.b #4,$36(a0) loc_31479C: ; ... tst.w ($FFFFFFDC).w beq.w loc_314830 move.w #$3C3C,($FFFFFEF8).w move.w #$D3,d0 jsr PlaySound bra.s loc_314830 ; --------------------------------------------------------------------------- loc_3147B6: ; ... tst.w ($FFFFFFDC).w beq.s loc_314830 tst.b ($FFFFFECA).w beq.s loc_314830 lea ($FFFFB040).w,a1 move.w 8(a1),d0 sub.w 8(a0),d0 bcs.s loc_314830 cmp.w #$20,d0 bcc.s loc_314830 move.w #$CF,d0 jsr PlayMusic clr.b ($FFFFFECA).w move.w #1,$1C(a0) move.w #0,$30(a0) move.w ($FFFFEEFA).w,($FFFFEEF8).w move.b #2,$25(a0) cmp.b #$C,($FFFFFEF8).w bhi.s loc_31480E move.w ($FFFFFF90).w,d0 jsr PlayMusic loc_31480E: ; ... tst.b $36(a0) bne.s loc_314830 move.b #4,$36(a0) tst.w ($FFFFFFDC).w beq.s loc_314830 move.w #$3C3C,($FFFFFEF8).w move.w #$D3,d0 jsr PlaySound loc_314830: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_31483E(pc,d0.w),d1 jmp off_31483E(pc,d1.w) ; --------------------------------------------------------------------------- off_31483E: dc.w return_314846-off_31483E,loc_314848-off_31483E,loc_3148F8-off_31483E,loc_3149DC-off_31483E; 0 ; ... ; --------------------------------------------------------------------------- return_314846: ; ... rts ; --------------------------------------------------------------------------- loc_314848: ; ... subq.w #1,$30(a0) bpl.s loc_314878 move.w #$3C,$30(a0) addq.b #1,$1C(a0) cmp.b #3,$1C(a0) bne.s loc_314878 move.b #4,$25(a0) move.b $36(a0),$1C(a0) tst.w ($FFFFFFDC).w beq.s loc_314878 move.b #6,$25(a0) loc_314878: ; ... subq.w #1,$32(a0) bpl.s return_3148E6 move.w #$B,$32(a0) moveq #0,d0 move.b $34(a0),d0 addq.b #2,$34(a0) and.b #$E,$34(a0) lea byte_3148E8(pc,d0.w),a2 bsr.w SingleObjLoad bne.s return_3148E6 move.b #$25,0(a1) move.b #6,$24(a1) move.b (a2)+,d0 ext.w d0 add.w 8(a0),d0 move.w d0,8(a1) move.b (a2)+,d0 ext.w d0 add.w $C(a0),d0 move.w d0,$C(a1) move.l #Map_Ring,4(a1) move.w #$26BC,2(a1) bsr.w Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #2,$18(a1) move.b #8,$19(a1) return_3148E6: ; ... rts ; --------------------------------------------------------------------------- byte_3148E8: dc.b -$18,-$10, 8, 8,-$10, 0, $18, -8, 0, -8, $10, 0,-$18, 8, $18, $10; 0 ; ... ; --------------------------------------------------------------------------- loc_3148F8: ; ... tst.w ($FFFFFE08).w bne.w return_3149B0 btst #1,($FFFFB022).w bne.s loc_314914 move.b #1,($FFFFF7CC).w move.w #$800,($FFFFF602).w loc_314914: ; ... tst.b ($FFFFB000).w beq.s loc_31492C move.w ($FFFFB008).w,d0 move.w ($FFFFEECA).w,d1 add.w #$128,d1 cmp.w d1,d0 bcs.w return_3149B0 loc_31492C: ; ... move.b #0,$25(a0) ; =============== S U B R O U T I N E ======================================= sub_314932: ; ... lea ($FFFFB000).w,a1 clr.b $2B(a1) clr.b ($FFFFFE1E).w bsr.w SingleObjLoad bne.s loc_314948 move.b #$3A,(a1) loc_314948: ; ... moveq #$26,d0 cmp.w #2,($FFFFFF70).w bne.s loc_314954 moveq #$42,d0 loc_314954: ; ... jsr LoadPLC2 move.b #1,($FFFFF7D6).w moveq #0,d0 move.b ($FFFFFE23).w,d0 mulu.w #$3C,d0 moveq #0,d1 move.b ($FFFFFE24).w,d1 add.w d1,d0 divu.w #$F,d0 moveq #$14,d1 cmp.w d1,d0 bcs.s loc_31497E move.w d1,d0 loc_31497E: ; ... add.w d0,d0 move.w byte_3149B2(pc,d0.w),($FFFFF7D2).w move.w ($FFFFFE20).w,d0 mulu.w #$A,d0 move.w d0,($FFFFF7D4).w clr.w ($FFFFFF8E).w clr.w ($FFFFFF92).w tst.w ($FFFFFF40).w bne.s loc_3149A6 move.w #$1388,($FFFFFF92).w loc_3149A6: ; ... move.w #$9A,d0 jsr PlayMusic return_3149B0: ; ... rts ; End of function sub_314932 ; --------------------------------------------------------------------------- byte_3149B2: dc.b $13,-$78, $13,-$78, 3,-$18, 1, -$C, 1,-$70; 0 ; ... dc.b 1,-$70, 1, $2C, 1, $2C, 0,-$38, 0,-$38; 10 dc.b 0,-$38, 0,-$38, 0, $64, 0, $64, 0, $64; 20 dc.b 0, $64, 0, $32, 0, $32, 0, $32, 0, $32; 30 dc.b 0, 0 ; 40 ; --------------------------------------------------------------------------- loc_3149DC: ; ... subq.w #1,$30(a0) bpl.s return_314A12 tst.b ($FFFFFE1A).w bne.s return_314A12 tst.b ($FFFFFECC).w bne.s return_314A12 tst.b ($FFFFFE1E).w bne.s return_314A12 tst.b ($FFFFFECA).w bne.s return_314A12 move.b #0,($FFFFFE30).w move.b #0,($FFFFFEE0).w move.b #$18,($FFFFF600).w move.w #0,($FFFFFF10).w return_314A12: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_314A14: ; ... tst.w ($FFFFFFDC).w beq.s return_314A6C moveq #0,d0 move.b $1A(a0),d0 cmp.b ($FFFFFFCA).w,d0 beq.s return_314A6C move.b d0,($FFFFFFCA).w lea (SignpostDynPLC).l,a2 add.w d0,d0 add.w (a2,d0.w),a2 move.w (a2)+,d5 subq.w #1,d5 bmi.s return_314A6C move.w #$BD00,d4 loc_314A40: ; ... moveq #0,d1 move.w (a2)+,d1 loc_314A44: ; ... move.w d1,d3 lsr.w #8,d3 and.w #$F0,d3 add.w #$10,d3 and.w #$FFF,d1 lsl.l #5,d1 add.l #S2_ArtUnc_Signpost,d1 move.w d4,d2 add.w d3,d4 add.w d3,d4 jsr QueueDMATransfer dbf d5,loc_314A40 return_314A6C: ; ... rts ; End of function sub_314A14 ; --------------------------------------------------------------------------- off_314A6E: dc.w byte_314A78-off_314A6E,byte_314A7B-off_314A6E,byte_314A89-off_314A6E,byte_314A97-off_314A6E,byte_314A9A-off_314A6E; 0 ; ... byte_314A78: dc.b $F, 2, -1 ; 0 ; ... byte_314A7B: dc.b 1, 2, 3, 4, 5, 1, 3, 4, 5, 0, 3, 4, 5, -1; 0 ; ... byte_314A89: dc.b 1, 2, 3, 4, 5, 1, 3, 4, 5, 0, 3, 4, 5, -1; 0 ; ... byte_314A97: dc.b $F, 0, -1 ; 0 ; ... byte_314A9A: dc.b $F, 1, -1, 0 ; 0 ; ... Map_Obj0D_0: dc.w byte_314AAA-Map_Obj0D_0,byte_314ABE-Map_Obj0D_0,byte_314AD8-Map_Obj0D_0; 0 ; ... dc.w byte_314AEC-Map_Obj0D_0,byte_314AFA-Map_Obj0D_0,byte_314B08-Map_Obj0D_0; 3 byte_314AAA: dc.b 0, 3,-$10, $B, 0, $22, -1,-$18,-$10, $B; 0 ; ... dc.b 0, $2E, 0, 0, $10, 1, 0, $20, -1, -4; 10 byte_314ABE: dc.b 0, 4,-$10, 3, 0, $3A, -1,-$18,-$10, $F; 0 ; ... dc.b 0, $3E, -1,-$10,-$10, 3, 8, $3A, 0, $10; 10 dc.b $10, 1, 0, $20, -1, -4; 20 byte_314AD8: dc.b 0, 3,-$10, $B, 0, 0, -1,-$18,-$10, $B; 0 ; ... dc.b 8, 0, 0, 0, $10, 1, 0, $20, -1, -4; 10 byte_314AEC: dc.b 0, 2,-$10, $F, 0, $C, -1,-$10, $10, 1; 0 ; ... dc.b 0, $20, -1, -4 ; 10 byte_314AFA: dc.b 0, 2,-$10, 3, 0, $1C, -1, -4, $10, 1; 0 ; ... dc.b 0, $20, -1, -4 ; 10 byte_314B08: dc.b 0, 2,-$10, $F, 8, $C, -1,-$10, $10, 1; 0 ; ... dc.b 0, $20, -1, -4 ; 10 Map_Obj0D: dc.w byte_314B22-Map_Obj0D,byte_314B36-Map_Obj0D,byte_314B50-Map_Obj0D; 0 ; ... dc.w byte_314B64-Map_Obj0D,byte_314B72-Map_Obj0D,byte_314B80-Map_Obj0D; 3 byte_314B22: dc.b 0, 3,-$10, $B, 0, 0, -1,-$18,-$10, $B; 0 ; ... dc.b 0, $C, 0, 0, $10, 1, 2, $14, -1, -4; 10 byte_314B36: dc.b 0, 4,-$10, 3, 0, 0, -1,-$18,-$10, $F; 0 ; ... dc.b 0, 4, -1,-$10,-$10, 3, 8, $14, 0, $10; 10 dc.b $10, 1, 2, $14, -1, -4; 20 byte_314B50: dc.b 0, 3,-$10, $B, 0, 0, -1,-$18,-$10, $B; 0 ; ... dc.b 8, 0, 0, 0, $10, 1, 2, $14, -1, -4; 10 byte_314B64: dc.b 0, 2,-$10, $F, 0, 0, -1,-$10, $10, 1; 0 ; ... dc.b 2, $14, -1, -4 ; 10 byte_314B72: dc.b 0, 2,-$10, 3, 0, 0, -1, -4, $10, 1; 0 ; ... dc.b 2, $14, -1, -4 ; 10 byte_314B80: dc.b 0, 2,-$10, $F, 8, 0, -1,-$10, $10, 1; 0 ; ... dc.b 2, $14, -1, -4 ; 10 SignpostDynPLC: dc.w byte_314B9A-SignpostDynPLC,byte_314BA0-SignpostDynPLC; 0 ; ... dc.w byte_314BA8-SignpostDynPLC,byte_314BAE-SignpostDynPLC; 2 dc.w byte_314BB2-SignpostDynPLC,byte_314BAE-SignpostDynPLC; 4 byte_314B9A: dc.b 0, 2,-$50, $22,-$50, $2E; 0 ; ... byte_314BA0: dc.b 0, 3, $30, $3A,-$10, $3E, $30, $3A; 0 ; ... byte_314BA8: dc.b 0, 2,-$50, 0,-$50, 0; 0 ; ... byte_314BAE: dc.b 0, 1,-$10, $C ; 0 ; ... byte_314BB2: dc.b 0, 1, $30, $1C ; 0 ; ... ; =============== S U B R O U T I N E ======================================= SolidObject: ; ... ; FUNCTION CHUNK AT 00314F36 SIZE 000000BA BYTES lea ($FFFFB000).w,a1 moveq #3,d6 btst d6,$22(a0) beq.w loc_314E2E move.w d1,d2 add.w d2,d2 btst #1,$22(a1) bne.s loc_314BE0 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.s loc_314BE0 cmp.w d2,d0 bcs.s loc_314BF4 loc_314BE0: ; ... bclr #3,$22(a1) bset #1,$22(a1) bclr d6,$22(a0) moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_314BF4: ; ... move.w d4,d2 bsr.w MvSonicOnPtfm moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_314BFE: ; ... lea ($FFFFB000).w,a1 moveq #3,d6 loc_314C04: ; ... btst d6,$22(a0) beq.w loc_314E36 move.w d1,d2 add.w d2,d2 btst #1,$22(a1) bne.s loc_314C28 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.s loc_314C28 cmp.w d2,d0 bcs.s loc_314C3C loc_314C28: ; ... bclr #3,$22(a1) bset #1,$22(a1) bclr d6,$22(a0) moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_314C3C: ; ... move.w d4,d2 bsr.w MvSonicOnPtfm moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_314C46: ; ... lea ($FFFFB000).w,a1 moveq #3,d6 loc_314C4C: ; ... btst d6,$22(a0) beq.w loc_314D74 move.w d1,d2 add.w d2,d2 btst #1,$22(a1) bne.s loc_314C70 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.s loc_314C70 cmp.w d2,d0 bcs.s loc_314C84 loc_314C70: ; ... bclr #3,$22(a1) bset #1,$22(a1) bclr d6,$22(a0) moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_314C84: ; ... move.w d4,d2 bsr.w sub_31502A moveq #0,d4 rts ; --------------------------------------------------------------------------- lea ($FFFFB000).w,a1 moveq #3,d6 btst d6,$22(a0) beq.w loc_314DCE move.w d1,d2 add.w d2,d2 btst #1,$22(a1) bne.s loc_314CB8 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.s loc_314CB8 cmp.w d2,d0 bcs.s loc_314CCC loc_314CB8: ; ... bclr #3,$22(a1) bset #1,$22(a1) bclr d6,$22(a0) moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_314CCC: ; ... move.w d4,d2 bsr.w sub_31506C moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_314CD6: ; ... lea ($FFFFB000).w,a1 moveq #3,d6 btst d6,$22(a0) beq.w loc_314D32 btst #1,$22(a1) bne.s loc_314CFE move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.s loc_314CFE add.w d1,d1 cmp.w d1,d0 bcs.s loc_314D12 loc_314CFE: ; ... bclr #3,$22(a1) bset #1,$22(a1) bclr d6,$22(a0) moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_314D12: ; ... move.w $C(a0),d0 sub.w d2,d0 add.w d3,d0 moveq #0,d1 move.b $16(a1),d1 sub.w d1,d0 move.w d0,$C(a1) sub.w 8(a0),d4 sub.w d4,8(a1) moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_314D32: ; ... move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.w loc_314F0C move.w d1,d4 add.w d4,d4 cmp.w d4,d0 bhi.w loc_314F0C move.w $C(a0),d5 add.w d3,d5 move.b $16(a1),d3 ext.w d3 add.w d3,d2 move.w $C(a1),d3 sub.w d5,d3 addq.w #4,d3 add.w d2,d3 bmi.w loc_314F0C move.w d2,d4 add.w d4,d4 cmp.w d4,d3 bcc.w loc_314F0C bra.w loc_314E74 ; --------------------------------------------------------------------------- loc_314D74: ; ... move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.w loc_314F0C move.w d1,d3 add.w d3,d3 cmp.w d3,d0 bhi.w loc_314F0C move.w d0,d5 btst #0,1(a0) beq.s loc_314D9A not.w d5 add.w d3,d5 loc_314D9A: ; ... lsr.w #1,d5 move.b (a2,d5.w),d3 sub.b (a2),d3 ext.w d3 move.w $C(a0),d5 sub.w d3,d5 move.b $16(a1),d3 ext.w d3 add.w d3,d2 move.w $C(a1),d3 sub.w d5,d3 addq.w #4,d3 add.w d2,d3 bmi.w loc_314F0C move.w d2,d4 add.w d4,d4 cmp.w d4,d3 bcc.w loc_314F0C bra.w loc_314E74 ; --------------------------------------------------------------------------- loc_314DCE: ; ... move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.w loc_314F0C move.w d1,d3 add.w d3,d3 cmp.w d3,d0 bhi.w loc_314F0C move.w d0,d5 btst #0,1(a0) beq.s loc_314DF4 not.w d5 add.w d3,d5 loc_314DF4: ; ... and.w #-2,d5 move.b (a2,d5.w),d3 move.b 1(a2,d5.w),d2 ext.w d2 ext.w d3 move.w $C(a0),d5 sub.w d3,d5 move.w $C(a1),d3 sub.w d5,d3 move.b $16(a1),d5 ext.w d5 add.w d5,d3 addq.w #4,d3 bmi.w loc_314F0C add.w d5,d2 move.w d2,d4 add.w d5,d4 cmp.w d4,d3 bcc.w loc_314F0C bra.w loc_314E74 ; --------------------------------------------------------------------------- loc_314E2E: ; ... tst.b 1(a0) bpl.w loc_314F0C loc_314E36: ; ... move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.w loc_314F0C move.w d1,d3 add.w d3,d3 cmp.w d3,d0 bhi.w loc_314F0C move.b $16(a1),d3 ext.w d3 add.w d3,d2 move.w $C(a1),d3 sub.w $C(a0),d3 addq.w #4,d3 add.w d2,d3 bmi.w loc_314F0C and.w #$7FF,d3 move.w d2,d4 add.w d4,d4 cmp.w d4,d3 bcc.w loc_314F0C loc_314E74: ; ... tst.b $2A(a1) bmi.w loc_314F0C cmp.b #6,$24(a1) bcc.w loc_314F32 tst.w ($FFFFFE08).w bne.w loc_314F32 move.w d0,d5 cmp.w d0,d1 bcc.s loc_314E9C add.w d1,d1 sub.w d1,d0 move.w d0,d5 neg.w d5 loc_314E9C: ; ... move.w d3,d1 cmp.w d3,d2 bcc.s loc_314EAA subq.w #4,d3 sub.w d4,d3 move.w d3,d1 neg.w d1 loc_314EAA: ; ... cmp.w d1,d5 bhi.w loc_314F36 cmp.w #4,d1 bls.w loc_314F36 loc_314EB8: ; ... tst.w d0 beq.s loc_314ED8 bmi.s loc_314EC6 tst.w $10(a1) bmi.s loc_314ED8 bra.s loc_314ECC ; --------------------------------------------------------------------------- loc_314EC6: ; ... tst.w $10(a1) bpl.s loc_314ED8 loc_314ECC: ; ... move.w #0,$14(a1) move.w #0,$10(a1) loc_314ED8: ; ... sub.w d0,8(a1) btst #1,$22(a1) bne.s loc_314EFE move.l d6,d4 addq.b #2,d4 bset d4,$22(a0) bset #5,$22(a1) move.w d6,d4 add.b #$D,d4 bset d4,d6 moveq #1,d4 rts ; --------------------------------------------------------------------------- loc_314EFE: ; ... bsr.s sub_314F24 move.w d6,d4 add.b #$D,d4 bset d4,d6 moveq #1,d4 rts ; --------------------------------------------------------------------------- loc_314F0C: ; ... move.l d6,d4 addq.b #2,d4 btst d4,$22(a0) beq.s loc_314F32 cmp.b #2,$1C(a1) beq.s sub_314F24 move.w #1,$1C(a1) ; End of function SolidObject ; =============== S U B R O U T I N E ======================================= sub_314F24: ; ... move.l d6,d4 addq.b #2,d4 bclr d4,$22(a0) bclr #5,$22(a1) loc_314F32: ; ... moveq #0,d4 rts ; End of function sub_314F24 ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR SolidObject loc_314F36: ; ... tst.w d3 bmi.s loc_314F4E cmp.w #$10,d3 bcs.s loc_314FB4 cmp.b #$85,(a0) bne.s loc_314F0C cmp.w #$14,d3 bcs.s loc_314FB4 bra.s loc_314F0C ; --------------------------------------------------------------------------- loc_314F4E: ; ... btst #1,$22(a1) bne.s loc_314F6A cmp.b #$23,(a0) beq.s loc_314F86 tst.w $12(a1) beq.s loc_314F86 bpl.s loc_314F7A tst.w d3 bpl.s loc_314F7A bra.s loc_314F70 ; --------------------------------------------------------------------------- loc_314F6A: ; ... move.w #0,$14(a1) loc_314F70: ; ... sub.w d3,$C(a1) move.w #0,$12(a1) loc_314F7A: ; ... move.w d6,d4 add.b #$F,d4 bset d4,d6 moveq #-2,d4 rts ; --------------------------------------------------------------------------- loc_314F86: ; ... btst #1,$22(a1) bne.s loc_314F7A move.w d0,d4 bpl.s loc_314F94 neg.w d4 loc_314F94: ; ... cmp.w #$10,d4 bcs.w loc_314EB8 move.l a0,-(sp) move.l a1,a0 jsr KillCharacter move.l (sp)+,a0 move.w d6,d4 add.b #$F,d4 bset d4,d6 moveq #-2,d4 rts ; --------------------------------------------------------------------------- loc_314FB4: ; ... subq.w #4,d3 moveq #0,d1 move.b $19(a0),d1 move.w d1,d2 add.w d2,d2 add.w 8(a1),d1 sub.w 8(a0),d1 bmi.s loc_314FEC cmp.w d2,d1 bcc.s loc_314FEC tst.w $12(a1) bmi.s loc_314FEC sub.w d3,$C(a1) subq.w #1,$C(a1) bsr.w loc_315232 move.w d6,d4 add.b #$11,d4 bset d4,d6 moveq #-1,d4 rts ; --------------------------------------------------------------------------- loc_314FEC: ; ... moveq #0,d4 rts ; END OF FUNCTION CHUNK FOR SolidObject ; =============== S U B R O U T I N E ======================================= MvSonicOnPtfm: ; ... move.w $C(a0),d0 sub.w d3,d0 bra.s loc_315000 ; --------------------------------------------------------------------------- move.w $C(a0),d0 sub.w #9,d0 loc_315000: ; ... tst.b $2A(a1) bmi.s return_315028 cmp.b #6,$24(a1) bcc.s return_315028 tst.w ($FFFFFE08).w bne.s return_315028 moveq #0,d1 move.b $16(a1),d1 sub.w d1,d0 move.w d0,$C(a1) sub.w 8(a0),d2 sub.w d2,8(a1) return_315028: ; ... rts ; End of function MvSonicOnPtfm ; =============== S U B R O U T I N E ======================================= sub_31502A: ; ... btst #3,$22(a1) beq.s return_31506A move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 lsr.w #1,d0 btst #0,1(a0) beq.s loc_31504A not.w d0 add.w d1,d0 loc_31504A: ; ... move.b (a2,d0.w),d1 ext.w d1 move.w $C(a0),d0 sub.w d1,d0 moveq #0,d1 move.b $16(a1),d1 sub.w d1,d0 move.w d0,$C(a1) sub.w 8(a0),d2 sub.w d2,8(a1) return_31506A: ; ... rts ; End of function sub_31502A ; =============== S U B R O U T I N E ======================================= sub_31506C: ; ... btst #3,$22(a1) beq.s return_31506A move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 btst #0,1(a0) beq.s loc_31508A not.w d0 add.w d1,d0 loc_31508A: ; ... and.w #-2,d0 bra.s loc_31504A ; End of function sub_31506C ; =============== S U B R O U T I N E ======================================= PlatformObject: ; ... lea ($FFFFB000).w,a1 moveq #3,d6 PlatformObject_SingleCharacter: ; ... btst d6,$22(a0) beq.w loc_3151D8 move.w d1,d2 add.w d2,d2 btst #1,$22(a1) bne.s loc_3150BA move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.s loc_3150BA cmp.w d2,d0 bcs.s loc_3150CE loc_3150BA: ; ... bclr #3,$22(a1) bset #1,$22(a1) bclr d6,$22(a0) moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_3150CE: ; ... move.w d4,d2 bsr.w MvSonicOnPtfm moveq #0,d4 rts ; End of function PlatformObject ; =============== S U B R O U T I N E ======================================= SlopeObject: ; ... ; FUNCTION CHUNK AT 00315296 SIZE 00000038 BYTES lea ($FFFFB000).w,a1 moveq #3,d6 btst d6,$22(a0) beq.w loc_315296 move.w d1,d2 add.w d2,d2 btst #1,$22(a1) bne.s loc_315102 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.s loc_315102 cmp.w d2,d0 bcs.s loc_315116 loc_315102: ; ... bclr #3,$22(a1) bset #1,$22(a1) bclr d6,$22(a0) moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_315116: ; ... move.w d4,d2 bsr.w sub_31502A moveq #0,d4 rts ; End of function SlopeObject ; =============== S U B R O U T I N E ======================================= sub_315120: ; ... ; FUNCTION CHUNK AT 003152CE SIZE 00000028 BYTES lea ($FFFFB000).w,a1 moveq #3,d6 btst d6,$22(a0) beq.w loc_3152CE move.w d1,d2 add.w d2,d2 btst #1,$22(a1) bne.s loc_31514A move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.s loc_31514A cmp.w d2,d0 bcs.s loc_31515E loc_31514A: ; ... bclr #3,$22(a1) bset #1,$22(a1) bclr d6,$22(a0) moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_31515E: ; ... move.w d4,d2 bsr.w MvSonicOnPtfm moveq #0,d4 rts ; End of function sub_315120 ; =============== S U B R O U T I N E ======================================= sub_315168: ; ... lea ($FFFFB000).w,a1 moveq #3,d6 btst d6,$22(a0) bne.s loc_315180 btst #3,$22(a1) bne.s loc_3151AC bra.w loc_3151D8 ; --------------------------------------------------------------------------- loc_315180: ; ... move.w d1,d2 add.w d2,d2 btst #1,$22(a1) bne.s loc_31519C move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.s loc_31519C cmp.w d2,d0 bcs.s loc_3151B0 loc_31519C: ; ... bclr #3,$22(a1) bset #1,$22(a1) bclr d6,$22(a0) loc_3151AC: ; ... moveq #0,d4 rts ; --------------------------------------------------------------------------- loc_3151B0: ; ... move.w d4,d2 bsr.w MvSonicOnPtfm moveq #0,d4 rts ; End of function sub_315168 ; =============== S U B R O U T I N E ======================================= sub_3151BA: ; ... tst.w $12(a1) bmi.w return_315294 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.w return_315294 cmp.w d2,d0 bcc.w return_315294 bra.s loc_3151F6 ; --------------------------------------------------------------------------- loc_3151D8: ; ... tst.w $12(a1) bmi.w return_315294 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.w return_315294 add.w d1,d1 cmp.w d1,d0 bcc.w return_315294 loc_3151F6: ; ... move.w $C(a0),d0 sub.w d3,d0 loc_3151FC: ; ... move.w $C(a1),d2 move.b $16(a1),d1 ext.w d1 add.w d2,d1 addq.w #4,d1 sub.w d1,d0 bhi.w return_315294 cmp.w #$FFF0,d0 bcs.w return_315294 tst.b $2A(a1) bmi.w return_315294 cmp.b #6,$24(a1) bcc.w return_315294 add.w d0,d2 addq.w #3,d2 move.w d2,$C(a1) loc_315232: ; ... btst #3,$22(a1) beq.s loc_31524E moveq #0,d0 move.b $3D(a1),d0 lsl.w #6,d0 add.l #-$5000,d0 move.l d0,a3 bclr d6,$22(a3) loc_31524E: ; ... move.w a0,d0 sub.w #$B000,d0 lsr.w #6,d0 and.w #$7F,d0 move.b d0,$3D(a1) move.b #0,$26(a1) move.w #0,$12(a1) move.w $10(a1),$14(a1) btst #1,$22(a1) beq.s loc_315284 move.l a0,-(sp) move.l a1,a0 jsr Knuckles_ResetOnFloor_Part2 move.l (sp)+,a0 loc_315284: ; ... bset #3,$22(a1) bclr #1,$22(a1) bset d6,$22(a0) return_315294: ; ... rts ; End of function sub_3151BA ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR SlopeObject loc_315296: ; ... tst.w $12(a1) bmi.w return_315294 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.s return_315294 add.w d1,d1 cmp.w d1,d0 bcc.s return_315294 btst #0,1(a0) beq.s loc_3152BC not.w d0 add.w d1,d0 loc_3152BC: ; ... lsr.w #1,d0 move.b (a2,d0.w),d3 ext.w d3 move.w $C(a0),d0 sub.w d3,d0 bra.w loc_3151FC ; END OF FUNCTION CHUNK FOR SlopeObject ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_315120 loc_3152CE: ; ... tst.w $12(a1) bmi.w return_315294 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d1,d0 bmi.w return_315294 add.w d1,d1 cmp.w d1,d0 bcc.w return_315294 move.w $C(a0),d0 sub.w d3,d0 bra.w loc_3151FC ; END OF FUNCTION CHUNK FOR sub_315120 ; =============== S U B R O U T I N E ======================================= sub_3152F6: ; ... lea ($FFFFB000).w,a1 btst #3,$22(a0) beq.s loc_315324 jsr sub_3190B0 tst.w d1 beq.s loc_31530E bpl.s loc_315324 loc_31530E: ; ... lea ($FFFFB000).w,a1 bclr #3,$22(a1) bset #1,$22(a1) bclr #3,$22(a0) loc_315324: ; ... moveq #0,d4 rts ; End of function sub_3152F6 ; =============== S U B R O U T I N E ======================================= ; Knuckles object Obj01: ; ... ; FUNCTION CHUNK AT 0033A066 SIZE 0000000E BYTES tst.w ($FFFFFE08).w beq.s Obj01_Normal jmp DebugMode ; --------------------------------------------------------------------------- Obj01_Normal: ; ... moveq #0,d0 move.b $24(a0),d0 move.w Obj01_Index(pc,d0.w),d1 jmp Obj01_Index(pc,d1.w) ; End of function Obj01 ; --------------------------------------------------------------------------- Obj01_Index: dc.w Obj01_Init-Obj01_Index ; 0 ; ... dc.w Obj01_Control-Obj01_Index ; 1 dc.w Obj01_Hurt-Obj01_Index ; 2 dc.w Obj01_Dead-Obj01_Index ; 3 dc.w Obj01_Gone-Obj01_Index ; 4 dc.w Obj01_Respawning-Obj01_Index ; 5 ; --------------------------------------------------------------------------- Obj01_Init: ; ... addq.b #2,$24(a0) move.b #$13,$16(a0) move.b #9,$17(a0) move.l #SK_Map_Knuckles,4(a0) ; SK_Map_Knuckles move.b #2,$18(a0) move.b #$18,$19(a0) move.b #4,1(a0) move.w #$600,($FFFFF760).w move.w #$C,($FFFFF762).w move.w #$80,($FFFFF764).w tst.b ($FFFFFE30).w bne.s Obj01_Init_Continued move.w #$780,2(a0) bsr.w Adjust2PArtPointer2_Useless move.b #$C,$3E(a0) move.b #$D,$3F(a0) move.w 8(a0),($FFFFFE32).w move.w $C(a0),($FFFFFE34).w move.w 2(a0),($FFFFFE3C).w move.w $3E(a0),($FFFFFE3E).w Obj01_Init_Continued: ; ... move.b #0,$2C(a0) move.b #4,$2D(a0) move.b #0,($FFFFFE19).w move.b #$1E,$28(a0) sub.w #$20,8(a0) add.w #4,$C(a0) move.w #0,($FFFFEED2).w move.w #$3F,d2 loc_3153EC: ; ... bsr.w Knuckles_RecordPositions subq.w #4,a1 move.l #0,(a1) dbf d2,loc_3153EC add.w #$20,8(a0) sub.w #4,$C(a0) Obj01_Control: ; ... tst.w ($FFFFFFDA).w beq.s loc_315422 btst #4,($FFFFF605).w beq.s loc_315422 move.w #1,($FFFFFE08).w clr.b ($FFFFF7CC).w rts ; --------------------------------------------------------------------------- loc_315422: ; ... tst.b ($FFFFF7CC).w bne.s loc_31542E move.w ($FFFFF604).w,($FFFFF602).w loc_31542E: ; ... btst #0,$2A(a0) beq.s loc_31543E move.b #0,$21(a0) bra.s loc_315450 ; --------------------------------------------------------------------------- loc_31543E: ; ... moveq #0,d0 move.b $22(a0),d0 and.w #6,d0 move.w Obj01_Modes(pc,d0.w),d1 jsr Obj01_Modes(pc,d1.w) loc_315450: ; ... cmp.w #$FF00,($FFFFEECC).w bne.s loc_31545E and.w #$7FF,$C(a0) loc_31545E: ; ... bsr.s Knuckles_Display bsr.w Knuckles_Super bsr.w Knuckles_RecordPositions bsr.w Knuckles_Water move.b ($FFFFF768).w,$36(a0) move.b ($FFFFF76A).w,$37(a0) tst.b ($FFFFF7C7).w beq.s loc_31548A tst.b $1C(a0) bne.s loc_31548A move.b $1D(a0),$1C(a0) loc_31548A: ; ... bsr.w Knuckles_Animate tst.b $2A(a0) bmi.s loc_31549A jsr TouchResponse loc_31549A: ; ... bra.w LoadKnucklesDynPLC ; --------------------------------------------------------------------------- Obj01_Modes: dc.w Obj01_MdNormal-Obj01_Modes ; 0 ; ... dc.w Obj01_MdAir-Obj01_Modes ; 1 dc.w Obj01_MdRoll-Obj01_Modes ; 2 dc.w Obj01_MdJump-Obj01_Modes ; 3 ; =============== S U B R O U T I N E ======================================= Knuckles_Display: ; ... move.w $30(a0),d0 beq.s Obj01_Display subq.w #1,$30(a0) lsr.w #3,d0 bcc.s Obj01_CheckInvincibility Obj01_Display: ; ... jsr DisplaySprite Obj01_CheckInvincibility: ; ... btst #1,$2B(a0) beq.s Obj01_CheckSpeedShoes tst.w $32(a0) beq.s Obj01_CheckSpeedShoes subq.w #1,$32(a0) bne.s Obj01_CheckSpeedShoes tst.b ($FFFFF7AA).w bne.s Obj01_RemoveInvincibility cmp.b #$C,$28(a0) bcs.s Obj01_RemoveInvincibility move.w ($FFFFFF90).w,d0 jsr PlayMusic Obj01_RemoveInvincibility: ; ... bclr #1,$2B(a0) Obj01_CheckSpeedShoes: ; ... btst #2,$2B(a0) beq.s Obj01_ExitCheck tst.w $34(a0) beq.s Obj01_ExitCheck subq.w #1,$34(a0) bne.s Obj01_ExitCheck move.w #$600,($FFFFF760).w move.w #$C,($FFFFF762).w move.w #$80,($FFFFF764).w tst.b ($FFFFFE19).w beq.s Obj01_RemoveSpeedShoes move.w #$800,($FFFFF760).w move.w #$18,($FFFFF762).w move.w #$C0,($FFFFF764).w Obj01_RemoveSpeedShoes: ; ... bclr #2,$2B(a0) move.w #$FC,d0 jmp PlayMusic ; --------------------------------------------------------------------------- Obj01_ExitCheck: ; ... rts ; End of function Knuckles_Display ; =============== S U B R O U T I N E ======================================= Knuckles_RecordPositions: ; ... move.w ($FFFFEED2).w,d0 lea ($FFFFE500).w,a1 lea (a1,d0.w),a1 move.w 8(a0),(a1)+ move.w $C(a0),(a1)+ addq.b #4,($FFFFEED3).w lea ($FFFFE400).w,a1 lea (a1,d0.w),a1 move.w ($FFFFF602).w,(a1)+ move.w $22(a0),(a1)+ rts ; End of function Knuckles_RecordPositions ; =============== S U B R O U T I N E ======================================= Knuckles_Water: ; ... tst.b ($FFFFF730).w bne.s Obj01_InWater return_31556C: ; ... rts ; --------------------------------------------------------------------------- Obj01_InWater: ; ... move.w ($FFFFF646).w,d0 cmp.w $C(a0),d0 bge.s Obj01_OutWater bset #6,$22(a0) bne.s return_31556C move.l a0,a1 bsr.w ResumeMusic move.b #$A,($FFFFD080).w move.b #$81,($FFFFD0A8).w move.l a0,($FFFFD0BC).w move.w #$300,($FFFFF760).w move.w #6,($FFFFF762).w move.w #$40,($FFFFF764).w tst.b ($FFFFFE19).w beq.s loc_3155C0 move.w #$400,($FFFFF760).w move.w #$C,($FFFFF762).w move.w #$60,($FFFFF764).w loc_3155C0: ; ... asr $10(a0) asr $12(a0) asr $12(a0) beq.s return_31556C move.w #$100,($FFFFD11C).w move.w #$AA,d0 jmp PlaySound ; --------------------------------------------------------------------------- Obj01_OutWater: ; ... bclr #6,$22(a0) beq.s return_31556C move.l a0,a1 bsr.w ResumeMusic move.w #$600,($FFFFF760).w move.w #$C,($FFFFF762).w move.w #$80,($FFFFF764).w tst.b ($FFFFFE19).w beq.s loc_315616 move.w #$800,($FFFFF760).w move.w #$18,($FFFFF762).w move.w #$C0,($FFFFF764).w loc_315616: ; ... cmp.b #4,$24(a0) beq.s loc_315622 asl $12(a0) loc_315622: ; ... tst.w $12(a0) beq.w return_31556C move.w #$100,($FFFFD11C).w move.l a0,a1 bsr.w ResumeMusic cmp.w #$F000,$12(a0) bgt.s loc_315644 move.w #$F000,$12(a0) loc_315644: ; ... move.w #$AA,d0 jmp PlaySound ; End of function Knuckles_Water ; =============== S U B R O U T I N E ======================================= Obj01_MdNormal: ; ... bsr.w Knuckles_Spindash bsr.w Knuckles_Jump bsr.w Knuckles_SlopeResist bsr.w Knuckles_Move bsr.w Knuckles_Roll bsr.w Knuckles_LevelBoundaries jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bsr.w AnglePos bsr.w Knuckles_SlopeRepel rts ; End of function Obj01_MdNormal ; =============== S U B R O U T I N E ======================================= Obj01_MdAir: ; ... tst.b $21(a0) bne.s Obj01_MdAir_Gliding bsr.w Knuckles_JumpHeight bsr.w Knuckles_ChgJumpDir bsr.w Knuckles_LevelBoundaries jsr ObjectMoveAndFall btst #6,$22(a0) beq.s loc_31569C sub.w #$28,$12(a0) loc_31569C: ; ... bsr.w Knuckles_JumpAngle bsr.w Knuckles_DoLevelCollision rts ; --------------------------------------------------------------------------- Obj01_MdAir_Gliding: ; ... bsr.w Knuckles_GlideSpeedControl bsr.w Knuckles_LevelBoundaries jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bsr.w Knuckles_GlideControl return_3156B8: ; ... rts ; End of function Obj01_MdAir ; =============== S U B R O U T I N E ======================================= Knuckles_GlideControl: ; ... ; FUNCTION CHUNK AT 00315C40 SIZE 0000003C BYTES move.b $21(a0),d0 beq.s return_3156B8 cmp.b #2,d0 beq.w Knuckles_FallingFromGlide cmp.b #3,d0 beq.w Knuckles_Sliding cmp.b #4,d0 beq.w Knuckles_Climbing_Wall cmp.b #5,d0 beq.w Knuckles_Climbing_Up Knuckles_NormalGlide: move.b #$A,$16(a0) move.b #$A,$17(a0) bsr.w Knuckles_DoLevelCollision2 btst #5,($FFFFF7AC).w bne.w Knuckles_BeginClimb move.b #$13,$16(a0) move.b #9,$17(a0) btst #1,($FFFFF7AC).w beq.s Knuckles_BeginSlide move.b ($FFFFF602).w,d0 and.b #$70,d0 bne.s loc_31574C move.b #2,$21(a0) move.b #$21,$1C(a0) bclr #0,$22(a0) tst.w $10(a0) bpl.s loc_315736 bset #0,$22(a0) loc_315736: ; ... asr $10(a0) asr $10(a0) move.b #$13,$16(a0) move.b #9,$17(a0) rts ; --------------------------------------------------------------------------- loc_31574C: ; ... bra.w sub_315C7C ; --------------------------------------------------------------------------- Knuckles_BeginSlide: ; ... bclr #0,$22(a0) tst.w $10(a0) bpl.s loc_315762 bset #0,$22(a0) loc_315762: ; ... move.b $26(a0),d0 add.b #$20,d0 and.b #$C0,d0 beq.s loc_315780 move.w $14(a0),$10(a0) move.w #0,$12(a0) bra.w Knuckles_ResetOnFloor_Part2 ; --------------------------------------------------------------------------- loc_315780: ; ... move.b #3,$21(a0) move.b #$CC,$1A(a0) move.b #$7F,$1E(a0) move.b #0,$1B(a0) cmp.b #$C,$28(a0) bcs.s return_3157AC move.b #6,($FFFFD124).w move.b #$15,($FFFFD11A).w return_3157AC: ; ... rts ; --------------------------------------------------------------------------- Knuckles_BeginClimb: ; ... tst.b ($FFFFF7AD).w bmi.w loc_31587A move.b $3F(a0),d5 move.b $1F(a0),d0 add.b #$40,d0 bpl.s loc_3157D8 bset #0,$22(a0) bsr.w CheckLeftCeilingDist or.w d0,d1 bne.s Knuckles_FallFromGlide addq.w #1,8(a0) bra.s loc_3157E8 ; --------------------------------------------------------------------------- loc_3157D8: ; ... bclr #0,$22(a0) bsr.w CheckRightCeilingDist or.w d0,d1 bne.w loc_31586A loc_3157E8: ; ... move.b #$13,$16(a0) move.b #9,$17(a0) tst.b ($FFFFFE19).w beq.s loc_315804 cmp.w #$480,$14(a0) bcs.s loc_315804 nop loc_315804: ; ... move.w #0,$14(a0) move.w #0,$10(a0) move.w #0,$12(a0) move.b #4,$21(a0) move.b #$B7,$1A(a0) move.b #$7F,$1E(a0) move.b #0,$1B(a0) move.b #3,$1F(a0) move.w 8(a0),$A(a0) rts ; --------------------------------------------------------------------------- Knuckles_FallFromGlide: ; ... move.w 8(a0),d3 move.b $16(a0),d0 ext.w d0 sub.w d0,d3 subq.w #1,d3 loc_31584A: ; ... move.w $C(a0),d2 sub.w #$B,d2 jsr ChkFloorEdge_Part2 tst.w d1 bmi.s loc_31587A cmp.w #$C,d1 bcc.s loc_31587A add.w d1,$C(a0) bra.w loc_3157E8 ; --------------------------------------------------------------------------- loc_31586A: ; ... move.w 8(a0),d3 move.b $16(a0),d0 ext.w d0 add.w d0,d3 addq.w #1,d3 bra.s loc_31584A ; --------------------------------------------------------------------------- loc_31587A: ; ... move.b #2,$21(a0) move.b #$21,$1C(a0) move.b #$13,$16(a0) move.b #9,$17(a0) bset #1,($FFFFF7AC).w rts ; --------------------------------------------------------------------------- Knuckles_FallingFromGlide: ; ... bsr.w Knuckles_ChgJumpDir add.w #$38,$12(a0) btst #6,$22(a0) beq.s loc_3158B2 sub.w #$28,$12(a0) loc_3158B2: ; ... bsr.w Knuckles_DoLevelCollision2 btst #1,($FFFFF7AC).w bne.s return_315900 move.w #0,$14(a0) move.w #0,$10(a0) move.w #0,$12(a0) move.b $16(a0),d0 sub.b #$13,d0 ext.w d0 add.w d0,$C(a0) move.b $26(a0),d0 add.b #$20,d0 and.b #$C0,d0 beq.s loc_3158F0 bra.w Knuckles_ResetOnFloor_Part2 ; --------------------------------------------------------------------------- loc_3158F0: ; ... bsr.w Knuckles_ResetOnFloor_Part2 move.w #$F,$2E(a0) move.b #$23,$1C(a0) return_315900: ; ... rts ; --------------------------------------------------------------------------- Knuckles_Sliding: ; ... move.b ($FFFFF602).w,d0 and.b #$70,d0 beq.s loc_315926 tst.w $10(a0) bpl.s loc_31591E add.w #$20,$10(a0) bmi.s loc_31591C bra.s loc_315926 ; --------------------------------------------------------------------------- loc_31591C: ; ... bra.s loc_315958 ; --------------------------------------------------------------------------- loc_31591E: ; ... sub.w #$20,$10(a0) bpl.s loc_315958 loc_315926: ; ... move.w #0,$14(a0) move.w #0,$10(a0) move.w #0,$12(a0) move.b $16(a0),d0 sub.b #$13,d0 ext.w d0 add.w d0,$C(a0) bsr.w Knuckles_ResetOnFloor_Part2 move.w #$F,$2E(a0) move.b #$22,$1C(a0) rts ; --------------------------------------------------------------------------- loc_315958: ; ... move.b #$A,$16(a0) move.b #$A,$17(a0) bsr.w Knuckles_DoLevelCollision2 bsr.w Player_CheckFloor cmp.w #$E,d1 bge.s loc_315988 add.w d1,$C(a0) move.b d3,$26(a0) move.b #$13,$16(a0) move.b #9,$17(a0) rts ; --------------------------------------------------------------------------- loc_315988: ; ... move.b #2,$21(a0) move.b #$21,$1C(a0) move.b #$13,$16(a0) move.b #9,$17(a0) bset #1,($FFFFF7AC).w rts ; --------------------------------------------------------------------------- Knuckles_Climbing_Wall: ; ... tst.b ($FFFFF7AD).w bmi.w loc_315BAE move.w 8(a0),d0 cmp.w $A(a0),d0 bne.w loc_315BAE btst #3,$22(a0) bne.w loc_315BAE move.w #0,$14(a0) move.w #0,$10(a0) move.w #0,$12(a0) move.l #$FFFFD600,($FFFFF796).w cmp.b #$D,$3F(a0) beq.s loc_3159F0 move.l #$FFFFD900,($FFFFF796).w loc_3159F0: ; ... move.b $3F(a0),d5 move.b #$A,$16(a0) move.b #$A,$17(a0) moveq #0,d1 btst #0,($FFFFF602).w beq.w loc_315A76 move.w $C(a0),d2 sub.w #$B,d2 bsr.w sub_315C22 cmp.w #4,d1 bge.w Knuckles_ClimbUp ; Climb onto the floor above you tst.w d1 bne.w loc_315B30 move.b $3F(a0),d5 move.w $C(a0),d2 subq.w #8,d2 move.w 8(a0),d3 bsr.w sub_3192E6 ; Doesn't exist in S2 tst.w d1 bpl.s loc_315A46 sub.w d1,$C(a0) moveq #1,d1 bra.w loc_315B04 ; --------------------------------------------------------------------------- loc_315A46: ; ... subq.w #1,$C(a0) tst.b ($FFFFFE19).w beq.s loc_315A54 subq.w #1,$C(a0) loc_315A54: ; ... moveq #1,d1 move.w ($FFFFEECC).w,d0 cmp.w #-$100,d0 beq.w loc_315B04 add.w #$10,d0 cmp.w $C(a0),d0 ble.w loc_315B04 move.w d0,$C(a0) bra.w loc_315B04 ; --------------------------------------------------------------------------- loc_315A76: ; ... btst #1,($FFFFF602).w beq.w loc_315B04 cmp.b #$BD,$1A(a0) bne.s loc_315AA2 move.b #$B7,$1A(a0) addq.w #3,$C(a0) subq.w #3,8(a0) btst #0,$22(a0) beq.s loc_315AA2 addq.w #6,8(a0) loc_315AA2: ; ... move.w $C(a0),d2 add.w #$B,d2 bsr.w sub_315C22 tst.w d1 bne.w loc_315BAE move.b $3E(a0),d5 move.w $C(a0),d2 add.w #9,d2 move.w 8(a0),d3 bsr.w sub_318FF6 tst.w d1 bpl.s loc_315AF4 add.w d1,$C(a0) move.b ($FFFFF768).w,$26(a0) move.w #0,$14(a0) move.w #0,$10(a0) move.w #0,$12(a0) bsr.w Knuckles_ResetOnFloor_Part2 move.b #5,$1C(a0) rts ; --------------------------------------------------------------------------- loc_315AF4: ; ... addq.w #1,$C(a0) tst.b ($FFFFFE19).w beq.s loc_315B02 addq.w #1,$C(a0) loc_315B02: ; ... moveq #-1,d1 loc_315B04: ; ... tst.w d1 beq.s loc_315B30 subq.b #1,$1F(a0) bpl.s loc_315B30 move.b #3,$1F(a0) add.b $1A(a0),d1 cmp.b #$B7,d1 bcc.s loc_315B22 move.b #$BC,d1 loc_315B22: ; ... cmp.b #$BC,d1 bls.s loc_315B2C move.b #$B7,d1 loc_315B2C: ; ... move.b d1,$1A(a0) loc_315B30: ; ... move.b #$20,$1E(a0) move.b #0,$1B(a0) move.b #$13,$16(a0) move.b #9,$17(a0) move.w ($FFFFF602).w,d0 and.w #$70,d0 beq.s return_315B94 move.w #$FC80,$12(a0) move.w #$400,$10(a0) bchg #0,$22(a0) bne.s loc_315B6A neg.w $10(a0) loc_315B6A: ; ... bset #1,$22(a0) move.b #1,$3C(a0) move.b #$E,$16(a0) move.b #7,$17(a0) move.b #2,$1C(a0) bset #2,$22(a0) move.b #0,$21(a0) return_315B94: ; ... rts ; --------------------------------------------------------------------------- Knuckles_ClimbUp: ; ... move.b #5,$21(a0) ; Climb up to the floor above you cmp.b #$BD,$1A(a0) beq.s return_315BAC move.b #0,$1F(a0) bsr.s sub_315BDA return_315BAC: ; ... rts ; --------------------------------------------------------------------------- loc_315BAE: ; ... move.b #2,$21(a0) move.w #$2121,$1C(a0) move.b #$CB,$1A(a0) move.b #7,$1E(a0) move.b #1,$1B(a0) move.b #$13,$16(a0) move.b #9,$17(a0) rts ; End of function Knuckles_GlideControl ; =============== S U B R O U T I N E ======================================= sub_315BDA: ; ... moveq #0,d0 move.b $1F(a0),d0 lea word_315C12(pc,d0.w),a1 move.b (a1)+,$1A(a0) move.b (a1)+,d0 ext.w d0 btst #0,$22(a0) beq.s loc_315BF6 neg.w d0 loc_315BF6: ; ... add.w d0,8(a0) move.b (a1)+,d1 ext.w d1 add.w d1,$C(a0) move.b (a1)+,$1E(a0) addq.b #4,$1F(a0) move.b #0,$1B(a0) rts ; End of function sub_315BDA ; --------------------------------------------------------------------------- word_315C12: dc.w $BD03,$FD06,$BE08,$F606,$BFF8,$F406,$D208,$FB06; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_315C22: ; ... ; FUNCTION CHUNK AT 00319208 SIZE 00000020 BYTES ; FUNCTION CHUNK AT 003193D2 SIZE 00000024 BYTES move.b $3F(a0),d5 btst #0,$22(a0) bne.s loc_315C36 move.w 8(a0),d3 bra.w loc_319208 ; --------------------------------------------------------------------------- loc_315C36: ; ... move.w 8(a0),d3 subq.w #1,d3 bra.w loc_3193D2 ; End of function sub_315C22 ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR Knuckles_GlideControl Knuckles_Climbing_Up: ; ... tst.b $1E(a0) bne.s return_315C7A bsr.w sub_315BDA cmp.b #$10,$1F(a0) bne.s return_315C7A move.w #0,$14(a0) move.w #0,$10(a0) move.w #0,$12(a0) btst #0,$22(a0) beq.s loc_315C70 subq.w #1,8(a0) loc_315C70: ; ... bsr.w Knuckles_ResetOnFloor_Part2 move.b #5,$1C(a0) return_315C7A: ; ... rts ; END OF FUNCTION CHUNK FOR Knuckles_GlideControl ; =============== S U B R O U T I N E ======================================= sub_315C7C: ; ... move.b #$20,$1E(a0) move.b #0,$1B(a0) move.w #$2020,$1C(a0) bclr #5,$22(a0) bclr #0,$22(a0) moveq #0,d0 move.b $1F(a0),d0 add.b #$10,d0 lsr.w #5,d0 move.b byte_315CC2(pc,d0.w),d1 move.b d1,$1A(a0) cmp.b #$C4,d1 bne.s return_315CC0 bset #0,$22(a0) move.b #$C0,$1A(a0) return_315CC0: ; ... rts ; End of function sub_315C7C ; --------------------------------------------------------------------------- byte_315CC2: dc.b $C0,$C1,$C2,$C3,$C4,$C3,$C2,$C1; 0 ; ... ; =============== S U B R O U T I N E ======================================= Knuckles_GlideSpeedControl: ; ... cmp.b #1,$21(a0) bne.w loc_315D88 move.w $14(a0),d0 cmp.w #$400,d0 bcc.s loc_315CE2 addq.w #8,d0 bra.s loc_315CFC ; --------------------------------------------------------------------------- loc_315CE2: ; ... cmp.w #$1800,d0 bcc.s loc_315CFC move.b $1F(a0),d1 and.b #$7F,d1 bne.s loc_315CFC addq.w #4,d0 tst.b ($FFFFFE19).w beq.s loc_315CFC addq.w #8,d0 loc_315CFC: ; ... move.w d0,$14(a0) move.b $1F(a0),d0 btst #2,($FFFFF602).w beq.s loc_315D1C cmp.b #$80,d0 beq.s loc_315D1C tst.b d0 bpl.s loc_315D18 neg.b d0 loc_315D18: ; ... addq.b #2,d0 bra.s loc_315D3A ; --------------------------------------------------------------------------- loc_315D1C: ; ... btst #3,($FFFFF602).w beq.s loc_315D30 tst.b d0 beq.s loc_315D30 bmi.s loc_315D2C neg.b d0 loc_315D2C: ; ... addq.b #2,d0 bra.s loc_315D3A ; --------------------------------------------------------------------------- loc_315D30: ; ... move.b d0,d1 and.b #$7F,d1 beq.s loc_315D3A addq.b #2,d0 loc_315D3A: ; ... move.b d0,$1F(a0) move.b $1F(a0),d0 jsr CalcSine muls.w $14(a0),d1 asr.l #8,d1 move.w d1,$10(a0) cmp.w #$80,$12(a0) blt.s loc_315D62 sub.w #$20,$12(a0) bra.s loc_315D68 ; --------------------------------------------------------------------------- loc_315D62: ; ... add.w #$20,$12(a0) loc_315D68: ; ... move.w ($FFFFEECC).w,d0 cmp.w #$FF00,d0 beq.w loc_315D88 add.w #$10,d0 cmp.w $C(a0),d0 ble.w loc_315D88 asr $10(a0) asr $14(a0) loc_315D88: ; ... cmp.w #$60,($FFFFEED8).w beq.s return_315D9A bcc.s loc_315D96 addq.w #4,($FFFFEED8).w loc_315D96: ; ... subq.w #2,($FFFFEED8).w return_315D9A: ; ... rts ; End of function Knuckles_GlideSpeedControl ; --------------------------------------------------------------------------- Obj01_MdRoll: ; ... tst.b $39(a0) bne.s loc_315DA6 bsr.w Knuckles_Jump loc_315DA6: ; ... bsr.w Knuckles_RollRepel bsr.w Knuckles_RollSpeed bsr.w Knuckles_LevelBoundaries jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bsr.w AnglePos bsr.w Knuckles_SlopeRepel rts ; --------------------------------------------------------------------------- Obj01_MdJump: ; ... bsr.w Knuckles_JumpHeight bsr.w Knuckles_ChgJumpDir bsr.w Knuckles_LevelBoundaries jsr ObjectMoveAndFall btst #6,$22(a0) beq.s loc_315DE2 sub.w #$28,$12(a0) loc_315DE2: ; ... bsr.w Knuckles_JumpAngle bsr.w Knuckles_DoLevelCollision rts ; =============== S U B R O U T I N E ======================================= Knuckles_Move: ; ... move.w ($FFFFF760).w,d6 move.w ($FFFFF762).w,d5 move.w ($FFFFF764).w,d4 tst.b $2B(a0) bmi.w Obj01_Traction tst.w $2E(a0) bne.w Obj01_ResetScreen btst #2,($FFFFF602).w beq.s Obj01_NotLeft bsr.w Knuckles_MoveLeft Obj01_NotLeft: ; ... btst #3,($FFFFF602).w beq.s Obj01_NotRight bsr.w Knuckles_MoveRight Obj01_NotRight: ; ... move.b $26(a0),d0 add.b #$20,d0 and.b #$C0,d0 bne.w Obj01_ResetScreen tst.w $14(a0) bne.w Obj01_ResetScreen bclr #5,$22(a0) move.b #5,$1C(a0) btst #3,$22(a0) beq.w Knuckles_Balance moveq #0,d0 move.b $3D(a0),d0 lsl.w #6,d0 lea ($FFFFB000).w,a1 lea (a1,d0.w),a1 tst.b $22(a1) bmi.w Knuckles_LookUp moveq #0,d1 move.b $19(a1),d1 move.w d1,d2 add.w d2,d2 subq.w #2,d2 add.w 8(a0),d1 sub.w 8(a1),d1 cmp.w #2,d1 blt.s Knuckles_BalanceOnObjLeft cmp.w d2,d1 bge.s Knuckles_BalanceOnObjRight bra.w Knuckles_LookUp ; --------------------------------------------------------------------------- Knuckles_BalanceOnObjRight: ; ... btst #0,$22(a0) bne.s loc_315E9A move.b #6,$1C(a0) bra.w Obj01_ResetScreen ; --------------------------------------------------------------------------- loc_315E9A: ; ... bclr #0,$22(a0) move.b #0,$1E(a0) move.b #4,$1B(a0) move.w #$606,$1C(a0) bra.w Obj01_ResetScreen ; --------------------------------------------------------------------------- Knuckles_BalanceOnObjLeft: ; ... btst #0,$22(a0) beq.s loc_315EC8 move.b #6,$1C(a0) bra.w Obj01_ResetScreen ; --------------------------------------------------------------------------- loc_315EC8: ; ... bset #0,$22(a0) move.b #0,$1E(a0) move.b #4,$1B(a0) move.w #$606,$1C(a0) bra.w Obj01_ResetScreen ; --------------------------------------------------------------------------- Knuckles_Balance: ; ... jsr ChkFloorEdge cmp.w #$C,d1 blt.w Knuckles_LookUp cmp.b #3,$36(a0) bne.s Knuckles_BalanceLeft btst #0,$22(a0) bne.s loc_315F0C move.b #6,$1C(a0) bra.w Obj01_ResetScreen ; --------------------------------------------------------------------------- loc_315F0C: ; ... bclr #0,$22(a0) move.b #0,$1E(a0) move.b #4,$1B(a0) move.w #$606,$1C(a0) bra.w Obj01_ResetScreen ; --------------------------------------------------------------------------- Knuckles_BalanceLeft: ; ... cmp.b #3,$37(a0) bne.s Knuckles_LookUp btst #0,$22(a0) beq.s loc_315F42 move.b #6,$1C(a0) bra.w Obj01_ResetScreen ; --------------------------------------------------------------------------- loc_315F42: ; ... bset #0,$22(a0) move.b #0,$1E(a0) move.b #4,$1B(a0) move.w #$606,$1C(a0) bra.w Obj01_ResetScreen ; --------------------------------------------------------------------------- Knuckles_LookUp: ; ... btst #0,($FFFFF602).w beq.s Knuckles_Duck move.b #7,$1C(a0) addq.w #1,($FFFFF66C).w cmp.w #$78,($FFFFF66C).w bcs.s Obj01_ResetScreen_Part2 move.w #$78,($FFFFF66C).w cmp.w #$C8,($FFFFEED8).w beq.s Obj01_UpdateSpeedOnGround addq.w #2,($FFFFEED8).w bra.s Obj01_UpdateSpeedOnGround ; --------------------------------------------------------------------------- Knuckles_Duck: ; ... btst #1,($FFFFF602).w beq.s Obj01_ResetScreen move.b #8,$1C(a0) addq.w #1,($FFFFF66C).w cmp.w #$78,($FFFFF66C).w bcs.s Obj01_ResetScreen_Part2 move.w #$78,($FFFFF66C).w cmp.w #8,($FFFFEED8).w beq.s Obj01_UpdateSpeedOnGround subq.w #2,($FFFFEED8).w bra.s Obj01_UpdateSpeedOnGround ; --------------------------------------------------------------------------- Obj01_ResetScreen: ; ... move.w #0,($FFFFF66C).w Obj01_ResetScreen_Part2: ; ... cmp.w #$60,($FFFFEED8).w beq.s Obj01_UpdateSpeedOnGround bcc.s loc_315FCE addq.w #4,($FFFFEED8).w loc_315FCE: ; ... subq.w #2,($FFFFEED8).w Obj01_UpdateSpeedOnGround: ; ... tst.b ($FFFFFE19).w beq.s loc_315FDC move.w #$C,d5 loc_315FDC: ; ... move.b ($FFFFF602).w,d0 and.b #$C,d0 bne.s Obj01_Traction move.w $14(a0),d0 beq.s Obj01_Traction bmi.s Obj01_SettleLeft sub.w d5,d0 bcc.s loc_315FF6 move.w #0,d0 loc_315FF6: ; ... move.w d0,$14(a0) bra.s Obj01_Traction ; --------------------------------------------------------------------------- Obj01_SettleLeft: ; ... add.w d5,d0 bcc.s loc_316004 move.w #0,d0 loc_316004: ; ... move.w d0,$14(a0) Obj01_Traction: ; ... move.b $26(a0),d0 jsr CalcSine muls.w $14(a0),d1 asr.l #8,d1 move.w d1,$10(a0) muls.w $14(a0),d0 asr.l #8,d0 move.w d0,$12(a0) Obj01_CheckWallsOnGround: ; ... move.b $26(a0),d0 add.b #$40,d0 bmi.s return_3160A6 move.b #$40,d1 tst.w $14(a0) beq.s return_3160A6 bmi.s loc_31603E neg.w d1 loc_31603E: ; ... move.b $26(a0),d0 add.b d1,d0 move.w d0,-(sp) bsr.w CalcRoomInFront ; Also known as Sonic_WalkSpeed in Sonic 1 move.w (sp)+,d0 tst.w d1 bpl.s return_3160A6 asl.w #8,d1 add.b #$20,d0 and.b #$C0,d0 beq.s loc_3160A2 cmp.b #$40,d0 beq.s loc_316088 cmp.b #$80,d0 beq.s loc_316082 add.w d1,$10(a0) move.w #0,$14(a0) btst #0,$22(a0) bne.s return_316080 bset #5,$22(a0) return_316080: ; ... rts ; --------------------------------------------------------------------------- loc_316082: ; ... sub.w d1,$12(a0) rts ; --------------------------------------------------------------------------- loc_316088: ; ... sub.w d1,$10(a0) move.w #0,$14(a0) btst #0,$22(a0) beq.s return_316080 bset #5,$22(a0) rts ; --------------------------------------------------------------------------- loc_3160A2: ; ... add.w d1,$12(a0) return_3160A6: ; ... rts ; End of function Knuckles_Move ; =============== S U B R O U T I N E ======================================= Knuckles_MoveLeft: ; ... move.w $14(a0),d0 beq.s loc_3160B0 bpl.s Knuckles_TurnLeft loc_3160B0: ; ... bset #0,$22(a0) bne.s loc_3160C4 bclr #5,$22(a0) move.b #1,$1D(a0) loc_3160C4: ; ... sub.w d5,d0 move.w d6,d1 neg.w d1 cmp.w d1,d0 bgt.s loc_3160D6 add.w d5,d0 cmp.w d1,d0 ble.s loc_3160D6 move.w d1,d0 loc_3160D6: ; ... move.w d0,$14(a0) move.b #0,$1C(a0) rts ; --------------------------------------------------------------------------- Knuckles_TurnLeft: ; ... sub.w d4,d0 bcc.s loc_3160EA move.w #-$80,d0 loc_3160EA: ; ... move.w d0,$14(a0) move.b $26(a0),d1 add.b #$20,d1 and.b #$C0,d1 bne.s return_31612C cmp.w #$400,d0 blt.s return_31612C move.b #$D,$1C(a0) bclr #0,$22(a0) move.w #$A4,d0 jsr PlaySound cmp.b #$C,$28(a0) bcs.s return_31612C move.b #6,($FFFFD124).w move.b #$15,($FFFFD11A).w return_31612C: ; ... rts ; End of function Knuckles_MoveLeft ; =============== S U B R O U T I N E ======================================= Knuckles_MoveRight: ; ... move.w $14(a0),d0 bmi.s Knuckles_TurnRight bclr #0,$22(a0) beq.s loc_316148 bclr #5,$22(a0) move.b #1,$1D(a0) loc_316148: ; ... add.w d5,d0 cmp.w d6,d0 blt.s loc_316156 sub.w d5,d0 cmp.w d6,d0 bge.s loc_316156 move.w d6,d0 loc_316156: ; ... move.w d0,$14(a0) move.b #0,$1C(a0) rts ; --------------------------------------------------------------------------- Knuckles_TurnRight: ; ... add.w d4,d0 bcc.s loc_31616A move.w #$80,d0 loc_31616A: ; ... move.w d0,$14(a0) move.b $26(a0),d1 add.b #$20,d1 and.b #$C0,d1 bne.s return_3161AC cmp.w #$FC00,d0 bgt.s return_3161AC move.b #$D,$1C(a0) bset #0,$22(a0) move.w #$A4,d0 jsr PlaySound cmp.b #$C,$28(a0) bcs.s return_3161AC move.b #6,($FFFFD124).w move.b #$15,($FFFFD11A).w return_3161AC: ; ... rts ; End of function Knuckles_MoveRight ; =============== S U B R O U T I N E ======================================= Knuckles_RollSpeed: ; ... move.w ($FFFFF760).w,d6 asl.w #1,d6 move.w ($FFFFF762).w,d5 asr.w #1,d5 move.w #$20,d4 tst.b $2B(a0) bmi.w Obj01_Roll_ResetScreen tst.w $2E(a0) bne.s Knuckles_Apply_RollSpeed btst #2,($FFFFF602).w beq.s loc_3161D8 bsr.w Knuckles_RollLeft loc_3161D8: ; ... btst #3,($FFFFF602).w beq.s Knuckles_Apply_RollSpeed bsr.w Knuckles_RollRight Knuckles_Apply_RollSpeed: ; ... move.w $14(a0),d0 beq.s Knuckles_CheckRollStop bmi.s Knuckles_ApplyRollSpeedLeft sub.w d5,d0 bcc.s loc_3161F4 move.w #0,d0 loc_3161F4: ; ... move.w d0,$14(a0) bra.s Knuckles_CheckRollStop ; --------------------------------------------------------------------------- Knuckles_ApplyRollSpeedLeft: ; ... add.w d5,d0 bcc.s loc_316202 move.w #0,d0 loc_316202: ; ... move.w d0,$14(a0) Knuckles_CheckRollStop: ; ... tst.w $14(a0) bne.s Obj01_Roll_ResetScreen tst.b $39(a0) bne.s Knuckles_KeepRolling bclr #2,$22(a0) move.b #$13,$16(a0) move.b #9,$17(a0) move.b #5,$1C(a0) subq.w #5,$C(a0) bra.s Obj01_Roll_ResetScreen ; --------------------------------------------------------------------------- ; magically gives Knuckles an extra push if he's going to stop rolling where it's not allowed ; (such as in an S-curve in HTZ or a stopper chamber in CNZ) Knuckles_KeepRolling: ; ... move.w #$400,$14(a0) btst #0,$22(a0) beq.s Obj01_Roll_ResetScreen neg.w $14(a0) Obj01_Roll_ResetScreen: ; ... cmp.w #$60,($FFFFEED8).w beq.s Knuckles_SetRollSpeeds bcc.s loc_316250 addq.w #4,($FFFFEED8).w loc_316250: ; ... subq.w #2,($FFFFEED8).w Knuckles_SetRollSpeeds: ; ... move.b $26(a0),d0 jsr CalcSine muls.w $14(a0),d0 asr.l #8,d0 move.w d0,$12(a0) muls.w $14(a0),d1 asr.l #8,d1 cmp.w #$1000,d1 ble.s loc_316278 move.w #$1000,d1 loc_316278: ; ... cmp.w #-$1000,d1 bge.s loc_316282 move.w #-$1000,d1 loc_316282: ; ... move.w d1,$10(a0) bra.w Obj01_CheckWallsOnGround ; End of function Knuckles_RollSpeed ; =============== S U B R O U T I N E ======================================= Knuckles_RollLeft: ; ... move.w $14(a0),d0 beq.s loc_316292 bpl.s Knuckles_BrakeRollingRight loc_316292: ; ... bset #0,$22(a0) move.b #2,$1C(a0) rts ; --------------------------------------------------------------------------- Knuckles_BrakeRollingRight: ; ... sub.w d4,d0 bcc.s loc_3162A8 move.w #-$80,d0 loc_3162A8: ; ... move.w d0,$14(a0) rts ; End of function Knuckles_RollLeft ; =============== S U B R O U T I N E ======================================= Knuckles_RollRight: ; ... move.w $14(a0),d0 bmi.s Knuckles_BrakeRollingLeft bclr #0,$22(a0) move.b #2,$1C(a0) rts ; --------------------------------------------------------------------------- Knuckles_BrakeRollingLeft: ; ... add.w d4,d0 bcc.s loc_3162CA move.w #$80,d0 loc_3162CA: ; ... move.w d0,$14(a0) rts ; End of function Knuckles_RollRight ; --------------------------------------------------------------------------- ; Subroutine for moving Knuckles left or right when he's in the air ; --------------------------------------------------------------------------- ; =============== S U B R O U T I N E ======================================= Knuckles_ChgJumpDir: ; ... move.w ($FFFFF760).w,d6 move.w ($FFFFF762).w,d5 asl.w #1,d5 btst #4,$22(a0) bne.s Obj01_Jump_ResetScreen move.w $10(a0),d0 btst #2,($FFFFF602).w beq.s loc_31630E bset #0,$22(a0) sub.w d5,d0 move.w d6,d1 neg.w d1 cmp.w d1,d0 bgt.s loc_31630E tst.w ($FFFFFFD0).w bne.w loc_31630C add.w d5,d0 cmp.w d1,d0 ble.s loc_31630E loc_31630C: ; ... move.w d1,d0 loc_31630E: ; ... btst #3,($FFFFF602).w beq.s loc_316332 bclr #0,$22(a0) add.w d5,d0 cmp.w d6,d0 blt.s loc_316332 tst.w ($FFFFFFD0).w bne.w loc_316330 sub.w d5,d0 cmp.w d6,d0 bge.s loc_316332 loc_316330: ; ... move.w d6,d0 loc_316332: ; ... move.w d0,$10(a0) Obj01_Jump_ResetScreen: ; ... cmp.w #$60,($FFFFEED8).w beq.s Knuckles_JumpPeakDecelerate bcc.s loc_316344 addq.w #4,($FFFFEED8).w loc_316344: ; ... subq.w #2,($FFFFEED8).w Knuckles_JumpPeakDecelerate: ; ... cmp.w #-$400,$12(a0) bcs.s return_316376 move.w $10(a0),d0 move.w d0,d1 asr.w #5,d1 beq.s return_316376 bmi.s Knuckles_JumpPeakDecelerateLeft sub.w d1,d0 bcc.s loc_316364 move.w #0,d0 loc_316364: ; ... move.w d0,$10(a0) rts ; --------------------------------------------------------------------------- Knuckles_JumpPeakDecelerateLeft: ; ... sub.w d1,d0 bcs.s loc_316372 move.w #0,d0 loc_316372: ; ... move.w d0,$10(a0) return_316376: ; ... rts ; End of function Knuckles_ChgJumpDir ; =============== S U B R O U T I N E ======================================= Knuckles_LevelBoundaries: ; ... move.l 8(a0),d1 move.w $10(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d1 swap d1 move.w ($FFFFEEC8).w,d0 add.w #$10,d0 cmp.w d1,d0 bhi.s Knuckles_Boundary_Sides move.w ($FFFFEECA).w,d0 add.w #$128,d0 tst.b ($FFFFF7AA).w bne.s loc_3163A6 add.w #$40,d0 loc_3163A6: ; ... cmp.w d1,d0 bls.s Knuckles_Boundary_Sides Knuckles_Boundary_CheckBottom: ; ... move.w ($FFFFEECE).w,d0 add.w #$E0,d0 cmp.w $C(a0),d0 blt.s Knuckles_Boundary_Bottom rts ; --------------------------------------------------------------------------- Knuckles_Boundary_Bottom: ; ... jmp KillCharacter ; --------------------------------------------------------------------------- Knuckles_Boundary_Sides: ; ... move.w d0,8(a0) move.w #0,$A(a0) move.w #0,$10(a0) move.w #0,$14(a0) bra.s Knuckles_Boundary_CheckBottom ; End of function Knuckles_LevelBoundaries ; =============== S U B R O U T I N E ======================================= Knuckles_Roll: ; ... tst.b $2B(a0) bmi.s Obj01_NoRoll move.w $14(a0),d0 bpl.s loc_3163E6 neg.w d0 loc_3163E6: ; ... cmp.w #$80,d0 bcs.s Obj01_NoRoll move.b ($FFFFF602).w,d0 and.b #$C,d0 bne.s Obj01_NoRoll btst #1,($FFFFF602).w bne.s Obj01_ChkRoll Obj01_NoRoll: ; ... rts ; --------------------------------------------------------------------------- Obj01_ChkRoll: ; ... btst #2,$22(a0) beq.s Obj01_DoRoll rts ; --------------------------------------------------------------------------- Obj01_DoRoll: ; ... bset #2,$22(a0) move.b #$E,$16(a0) move.b #7,$17(a0) move.b #2,$1C(a0) addq.w #5,$C(a0) move.w #$BE,d0 jsr PlaySound tst.w $14(a0) bne.s return_31643C move.w #$200,$14(a0) return_31643C: ; ... rts ; End of function Knuckles_Roll ; =============== S U B R O U T I N E ======================================= Knuckles_Jump: ; ... move.b ($FFFFF603).w,d0 and.b #$70,d0 beq.w return_3164EC moveq #0,d0 move.b $26(a0),d0 add.b #$80,d0 bsr.w CalcRoomOverHead cmp.w #6,d1 blt.w return_3164EC move.w #$600,d2 btst #6,$22(a0) beq.s loc_316470 move.w #$300,d2 loc_316470: ; ... tst.w ($FFFFFFD0).w ; Check for demo mode (note: in normal Sonic 2, this is the level select flag!) beq.s loc_31647A add.w #$80,d2 ; Set the jump height to Sonic's height in Demo mode because Sonic Team were too lazy to record new demos for S2&K. loc_31647A: ; ... moveq #0,d0 move.b $26(a0),d0 sub.b #$40,d0 jsr CalcSine muls.w d2,d1 asr.l #8,d1 add.w d1,$10(a0) muls.w d2,d0 asr.l #8,d0 add.w d0,$12(a0) bset #1,$22(a0) bclr #5,$22(a0) addq.l #4,sp move.b #1,$3C(a0) clr.b $38(a0) loc_3164B2: move.w #$A0,d0 jsr PlaySound move.b #$13,$16(a0) move.b #9,$17(a0) btst #2,$22(a0) bne.s Knuckles_RollJump move.b #$E,$16(a0) move.b #7,$17(a0) move.b #2,$1C(a0) bset #2,$22(a0) addq.w #5,$C(a0) return_3164EC: ; ... rts ; --------------------------------------------------------------------------- Knuckles_RollJump: ; ... bset #4,$22(a0) rts ; End of function Knuckles_Jump ; =============== S U B R O U T I N E ======================================= Knuckles_JumpHeight: ; ... tst.b $3C(a0) beq.s Knuckles_UpwardsVelocityCap move.w #-$400,d1 btst #6,$22(a0) beq.s loc_31650C move.w #-$200,d1 loc_31650C: ; ... cmp.w $12(a0),d1 ble.w Knuckles_CheckGlide ; Check if Knuckles should begin a glide move.b ($FFFFF602).w,d0 and.b #$70,d0 bne.s return_316522 move.w d1,$12(a0) return_316522: ; ... rts ; --------------------------------------------------------------------------- Knuckles_UpwardsVelocityCap: ; ... tst.b $39(a0) bne.s return_316538 cmp.w #-$FC0,$12(a0) bge.s return_316538 move.w #-$FC0,$12(a0) return_316538: ; ... rts ; --------------------------------------------------------------------------- Knuckles_CheckGlide: ; ... tst.w ($FFFFFFD0).w ; Don't glide on demos bne.w return_3165D2 tst.b $21(a0) bne.w return_3165D2 move.b ($FFFFF603).w,d0 and.b #$70,d0 beq.w return_3165D2 tst.b ($FFFFFE19).w bne.s Knuckles_BeginGlide cmp.b #7,($FFFFFFB1).w bcs.s Knuckles_BeginGlide cmp.w #50,($FFFFFE20).w bcs.s Knuckles_BeginGlide tst.b ($FFFFFE1E).w bne.s Knuckles_TurnSuper Knuckles_BeginGlide: ; ... bclr #2,$22(a0) move.b #$A,$16(a0) move.b #$A,$17(a0) bclr #4,$22(a0) move.b #1,$21(a0) add.w #$200,$12(a0) bpl.s loc_31659E move.w #0,$12(a0) loc_31659E: ; ... moveq #0,d1 move.w #$400,d0 move.w d0,$14(a0) btst #0,$22(a0) beq.s loc_3165B4 neg.w d0 moveq #-$80,d1 loc_3165B4: ; ... move.w d0,$10(a0) move.b d1,$1F(a0) move.w #0,$26(a0) move.b #0,($FFFFF7AC).w bset #1,($FFFFF7AC).w bsr.w sub_315C7C return_3165D2: ; ... rts ; --------------------------------------------------------------------------- Knuckles_TurnSuper: ; ... move.b #1,($FFFFF65F).w move.b #$F,($FFFFF65E).w move.b #1,($FFFFFE19).w move.w #60,($FFFFF670).w move.b #$81,$2A(a0) move.b #$1F,$1C(a0) move.b #$7E,($FFFFD040).w move.w #$800,($FFFFF760).w move.w #$18,($FFFFF762).w move.w #$C0,($FFFFF764).w move.w #0,$32(a0) bset #1,$2B(a0) move.w #$DF,d0 jsr PlaySound move.w #$96,d0 jmp PlayMusic ; End of function Knuckles_JumpHeight ; --------------------------------------------------------------------------- rts ; =============== S U B R O U T I N E ======================================= Knuckles_Super: ; ... tst.b ($FFFFFE19).w beq.w return_3166C8 tst.b ($FFFFFE1E).w beq.s loc_31667E subq.w #1,($FFFFF670).w bpl.w return_3166C8 move.w #60,($FFFFF670).w tst.w ($FFFFFE20).w beq.s loc_31667E or.b #1,($FFFFFE1D).w cmp.w #1,($FFFFFE20).w beq.s loc_316672 cmp.w #10,($FFFFFE20).w beq.s loc_316672 cmp.w #100,($FFFFFE20).w bne.s loc_316678 loc_316672: ; ... or.b #%10000000,($FFFFFE1D).w loc_316678: ; ... subq.w #1,($FFFFFE20).w bne.s return_3166C8 loc_31667E: ; ... move.b #2,($FFFFF65F).w move.w #40,($FFFFF65C).w move.b #0,($FFFFFE19).w move.b #1,$1D(a0) move.w #1,$32(a0) move.w #$600,($FFFFF760).w move.w #$C,($FFFFF762).w move.w #$80,($FFFFF764).w btst #6,$22(a0) beq.s return_3166C8 move.w #$300,($FFFFF760).w move.w #6,($FFFFF762).w move.w #$40,($FFFFF764).w return_3166C8: ; ... rts ; End of function Knuckles_Super ; =============== S U B R O U T I N E ======================================= Knuckles_Spindash: ; ... tst.b $39(a0) bne.s Knuckles_UpdateSpindash cmp.b #8,$1C(a0) bne.s return_316718 move.b ($FFFFF603).w,d0 and.b #$70,d0 beq.w return_316718 move.b #9,$1C(a0) move.w #$E0,d0 jsr PlaySound addq.l #4,sp move.b #1,$39(a0) move.w #0,$3A(a0) cmp.b #$C,$28(a0) bcs.s loc_316710 move.b #2,($FFFFD11C).w loc_316710: ; ... bsr.w Knuckles_LevelBoundaries bsr.w AnglePos return_316718: ; ... rts ; --------------------------------------------------------------------------- Knuckles_UpdateSpindash: ; ... move.b ($FFFFF602).w,d0 btst #1,d0 bne.w Knuckles_ChargingSpindash move.b #$E,$16(a0) move.b #7,$17(a0) move.b #2,$1C(a0) addq.w #5,$C(a0) move.b #0,$39(a0) moveq #0,d0 move.b $3A(a0),d0 add.w d0,d0 move.w Spindash_Speeds(pc,d0.w),$14(a0) tst.b ($FFFFFE19).w beq.s loc_31675C move.w Super_Spindash_Speeds(pc,d0.w),$14(a0) loc_31675C: ; ... move.w $14(a0),d0 sub.w #$800,d0 add.w d0,d0 and.w #$1F00,d0 neg.w d0 add.w #$2000,d0 move.w d0,($FFFFEED0).w ; Lock camera for a certain number of frames btst #0,$22(a0) beq.s loc_316780 neg.w $14(a0) loc_316780: ; ... bset #2,$22(a0) move.b #0,($FFFFD11C).w move.w #$BC,d0 jsr PlaySound bra.s Obj01_Spindash_ResetScreen ; --------------------------------------------------------------------------- Spindash_Speeds: ; ... dc.w $800, $880, $900, $980, $A00, $A80, $B00, $B80, $C00; 0 Super_Spindash_Speeds: ; ... dc.w $B00, $B80, $C00, $C80, $D00, $D80, $E00, $E80, $F00; 0 ; --------------------------------------------------------------------------- Knuckles_ChargingSpindash: ; ... tst.w $3A(a0) beq.s loc_3167D4 move.w $3A(a0),d0 lsr.w #5,d0 sub.w d0,$3A(a0) bcc.s loc_3167D4 move.w #0,$3A(a0) loc_3167D4: ; ... move.b ($FFFFF603).w,d0 and.b #$70,d0 beq.w Obj01_Spindash_ResetScreen move.w #$900,$1C(a0) move.w #$E0,d0 jsr PlaySound add.w #$200,$3A(a0) cmp.w #$800,$3A(a0) bcs.s Obj01_Spindash_ResetScreen move.w #$800,$3A(a0) Obj01_Spindash_ResetScreen: ; ... addq.l #4,sp cmp.w #$60,($FFFFEED8).w beq.s loc_316818 bcc.s loc_316814 addq.w #4,($FFFFEED8).w loc_316814: ; ... subq.w #2,($FFFFEED8).w loc_316818: ; ... bsr.w Knuckles_LevelBoundaries bsr.w AnglePos rts ; End of function Knuckles_Spindash ; =============== S U B R O U T I N E ======================================= Knuckles_SlopeResist: ; ... move.b $26(a0),d0 add.b #$60,d0 cmp.b #$C0,d0 bcc.s return_316856 move.b $26(a0),d0 jsr CalcSine muls.w #$20,d0 asr.l #8,d0 tst.w $14(a0) beq.s return_316856 bmi.s loc_316852 tst.w d0 beq.s return_316850 add.w d0,$14(a0) return_316850: ; ... rts ; --------------------------------------------------------------------------- loc_316852: ; ... add.w d0,$14(a0) return_316856: ; ... rts ; End of function Knuckles_SlopeResist ; =============== S U B R O U T I N E ======================================= Knuckles_RollRepel: ; ... move.b $26(a0),d0 add.b #$60,d0 cmp.b #$C0,d0 bcc.s return_316892 move.b $26(a0),d0 jsr CalcSine muls.w #$50,d0 asr.l #8,d0 tst.w $14(a0) bmi.s loc_316888 tst.w d0 bpl.s loc_316882 asr.l #2,d0 loc_316882: ; ... add.w d0,$14(a0) rts ; --------------------------------------------------------------------------- loc_316888: ; ... tst.w d0 bmi.s loc_31688E asr.l #2,d0 loc_31688E: ; ... add.w d0,$14(a0) return_316892: ; ... rts ; End of function Knuckles_RollRepel ; =============== S U B R O U T I N E ======================================= Knuckles_SlopeRepel: ; ... nop tst.b $38(a0) bne.s return_3168CE tst.w $2E(a0) bne.s loc_3168D0 move.b $26(a0),d0 add.b #$20,d0 and.b #$C0,d0 beq.s return_3168CE move.w $14(a0),d0 bpl.s loc_3168B8 neg.w d0 loc_3168B8: ; ... cmp.w #$280,d0 bcc.s return_3168CE clr.w $14(a0) bset #1,$22(a0) move.w #$1E,$2E(a0) return_3168CE: ; ... rts ; --------------------------------------------------------------------------- loc_3168D0: ; ... subq.w #1,$2E(a0) rts ; End of function Knuckles_SlopeRepel ; =============== S U B R O U T I N E ======================================= Knuckles_JumpAngle: ; ... move.b $26(a0),d0 beq.s Knuckles_JumpFlip bpl.s loc_3168E6 addq.b #2,d0 bcc.s BraTo_Knuckles_JumpAngleSet moveq #0,d0 BraTo_Knuckles_JumpAngleSet: ; ... bra.s Knuckles_JumpAngleSet ; --------------------------------------------------------------------------- loc_3168E6: ; ... subq.b #2,d0 bcc.s Knuckles_JumpAngleSet moveq #0,d0 Knuckles_JumpAngleSet: ; ... move.b d0,$26(a0) Knuckles_JumpFlip: ; ... move.b $27(a0),d0 beq.s return_316934 tst.w $14(a0) bmi.s Knuckles_JumpLeftFlip Knuckles_JumpRightFlip: ; ... move.b $2D(a0),d1 add.b d1,d0 bcc.s BraTo_Knuckles_JumpFlipSet subq.b #1,$2C(a0) bcc.s BraTo_Knuckles_JumpFlipSet move.b #0,$2C(a0) moveq #0,d0 BraTo_Knuckles_JumpFlipSet: ; ... bra.s Knuckles_JumpFlipSet ; --------------------------------------------------------------------------- Knuckles_JumpLeftFlip: ; ... tst.b $29(a0) bne.s Knuckles_JumpRightFlip move.b $2D(a0),d1 sub.b d1,d0 bcc.s Knuckles_JumpFlipSet subq.b #1,$2C(a0) bcc.s Knuckles_JumpFlipSet move.b #0,$2C(a0) moveq #0,d0 Knuckles_JumpFlipSet: ; ... move.b d0,$27(a0) return_316934: ; ... rts ; End of function Knuckles_JumpAngle ; =============== S U B R O U T I N E ======================================= Knuckles_DoLevelCollision2: ; ... move.l #$FFFFD600,($FFFFF796).w cmp.b #$C,$3E(a0) beq.s loc_31694E move.l #$FFFFD900,($FFFFF796).w loc_31694E: ; ... move.b $3F(a0),d5 move.w $10(a0),d1 move.w $12(a0),d2 jsr CalcAngle sub.b #$20,d0 and.b #$C0,d0 cmp.b #$40,d0 beq.w Knuckles_HitLeftWall2 cmp.b #$80,d0 beq.w Knuckles_HitCeilingAndWalls2 cmp.b #$C0,d0 beq.w Knuckles_HitRightWall2 bsr.w CheckLeftWallDist tst.w d1 bpl.s loc_316998 sub.w d1,8(a0) move.w #0,$10(a0) bset #5,($FFFFF7AC).w loc_316998: ; ... bsr.w CheckRightWallDist tst.w d1 bpl.s loc_3169B0 add.w d1,8(a0) move.w #0,$10(a0) bset #5,($FFFFF7AC).w loc_3169B0: ; ... bsr.w Player_CheckFloor tst.w d1 bpl.s return_3169CC add.w d1,$C(a0) move.b d3,$26(a0) move.w #0,$12(a0) bclr #1,($FFFFF7AC).w return_3169CC: ; ... rts ; --------------------------------------------------------------------------- Knuckles_HitLeftWall2: ; ... bsr.w CheckLeftWallDist tst.w d1 bpl.s Knuckles_HitCeilingAlt sub.w d1,8(a0) move.w #0,$10(a0) bset #5,($FFFFF7AC).w Knuckles_HitCeilingAlt: ; ... bsr.w CheckCeilingDist tst.w d1 bpl.s Knuckles_HitFloor neg.w d1 cmp.w #$14,d1 bcc.s loc_316A08 add.w d1,$C(a0) tst.w $12(a0) bpl.s return_316A06 move.w #0,$12(a0) return_316A06: ; ... rts ; --------------------------------------------------------------------------- loc_316A08: ; ... bsr.w CheckRightWallDist tst.w d1 bpl.s return_316A20 add.w d1,8(a0) move.w #0,$10(a0) bset #5,($FFFFF7AC).w return_316A20: ; ... rts ; --------------------------------------------------------------------------- Knuckles_HitFloor: ; ... tst.w $12(a0) bmi.s return_316A44 bsr.w Player_CheckFloor tst.w d1 bpl.s return_316A44 add.w d1,$C(a0) move.b d3,$26(a0) move.w #0,$12(a0) bclr #1,($FFFFF7AC).w return_316A44: ; ... rts ; --------------------------------------------------------------------------- Knuckles_HitCeilingAndWalls2: ; ... bsr.w CheckLeftWallDist tst.w d1 bpl.s loc_316A5E sub.w d1,8(a0) move.w #0,$10(a0) bset #5,($FFFFF7AC).w loc_316A5E: ; ... bsr.w CheckRightWallDist tst.w d1 bpl.s loc_316A76 add.w d1,8(a0) move.w #0,$10(a0) bset #5,($FFFFF7AC).w loc_316A76: ; ... bsr.w CheckCeilingDist tst.w d1 bpl.s return_316A88 sub.w d1,$C(a0) move.w #0,$12(a0) return_316A88: ; ... rts ; --------------------------------------------------------------------------- Knuckles_HitRightWall2: ; ... bsr.w CheckRightWallDist tst.w d1 bpl.s loc_316AA2 add.w d1,8(a0) move.w #0,$10(a0) bset #5,($FFFFF7AC).w loc_316AA2: ; ... bsr.w CheckCeilingDist tst.w d1 bpl.s loc_316ABC sub.w d1,$C(a0) tst.w $12(a0) bpl.s return_316ABA move.w #0,$12(a0) return_316ABA: ; ... rts ; --------------------------------------------------------------------------- loc_316ABC: ; ... tst.w $12(a0) bmi.s return_316ADE bsr.w Player_CheckFloor tst.w d1 bpl.s return_316ADE add.w d1,$C(a0) move.b d3,$26(a0) move.w #0,$12(a0) bclr #1,($FFFFF7AC).w return_316ADE: ; ... rts ; End of function Knuckles_DoLevelCollision2 ; =============== S U B R O U T I N E ======================================= Knuckles_DoLevelCollision: ; ... move.l #$FFFFD600,($FFFFF796).w cmp.b #$C,$3E(a0) beq.s loc_316AF8 move.l #$FFFFD900,($FFFFF796).w loc_316AF8: ; ... move.b $3F(a0),d5 move.w $10(a0),d1 move.w $12(a0),d2 jsr CalcAngle sub.b #$20,d0 and.b #$C0,d0 cmp.b #$40,d0 beq.w Knuckles_HitLeftWall cmp.b #$80,d0 beq.w Knuckles_HitCeilingAndWalls cmp.b #$C0,d0 beq.w Knuckles_HitRightWall bsr.w CheckLeftWallDist tst.w d1 bpl.s loc_316B3C sub.w d1,8(a0) move.w #0,$10(a0) loc_316B3C: ; ... bsr.w CheckRightWallDist tst.w d1 bpl.s loc_316B4E add.w d1,8(a0) move.w #0,$10(a0) loc_316B4E: ; ... bsr.w Player_CheckFloor tst.w d1 bpl.s return_316BC0 move.b $12(a0),d2 addq.b #8,d2 neg.b d2 cmp.b d2,d1 bge.s loc_316B66 cmp.b d2,d0 blt.s return_316BC0 loc_316B66: ; ... add.w d1,$C(a0) move.b d3,$26(a0) bsr.w Knuckles_ResetOnFloor move.b d3,d0 add.b #$20,d0 and.b #$40,d0 bne.s loc_316B9E move.b d3,d0 add.b #$10,d0 and.b #$20,d0 beq.s loc_316B90 asr $12(a0) bra.s loc_316BB2 ; --------------------------------------------------------------------------- loc_316B90: ; ... move.w #0,$12(a0) move.w $10(a0),$14(a0) rts ; --------------------------------------------------------------------------- loc_316B9E: ; ... move.w #0,$10(a0) cmp.w #$FC0,$12(a0) ble.s loc_316BB2 move.w #$FC0,$12(a0) loc_316BB2: ; ... move.w $12(a0),$14(a0) tst.b d3 bpl.s return_316BC0 neg.w $14(a0) return_316BC0: ; ... rts ; --------------------------------------------------------------------------- Knuckles_HitLeftWall: ; ... bsr.w CheckLeftWallDist tst.w d1 bpl.s Knuckles_HitCeiling sub.w d1,8(a0) move.w #0,$10(a0) move.w $12(a0),$14(a0) rts ; --------------------------------------------------------------------------- Knuckles_HitCeiling: ; ... bsr.w CheckCeilingDist tst.w d1 bpl.s Knuckles_HitFloor_0 sub.w d1,$C(a0) tst.w $12(a0) bpl.s return_316BF4 move.w #0,$12(a0) return_316BF4: ; ... rts ; --------------------------------------------------------------------------- Knuckles_HitFloor_0: ; ... tst.w $12(a0) bmi.s return_316C1C bsr.w Player_CheckFloor tst.w d1 bpl.s return_316C1C add.w d1,$C(a0) move.b d3,$26(a0) bsr.w Knuckles_ResetOnFloor move.w #0,$12(a0) move.w $10(a0),$14(a0) return_316C1C: ; ... rts ; --------------------------------------------------------------------------- Knuckles_HitCeilingAndWalls: ; ... bsr.w CheckLeftWallDist tst.w d1 bpl.s loc_316C30 sub.w d1,8(a0) move.w #0,$10(a0) loc_316C30: ; ... bsr.w CheckRightWallDist tst.w d1 bpl.s loc_316C42 add.w d1,8(a0) move.w #0,$10(a0) loc_316C42: ; ... bsr.w CheckCeilingDist tst.w d1 bpl.s return_316C78 sub.w d1,$C(a0) move.b d3,d0 add.b #$20,d0 and.b #$40,d0 bne.s loc_316C62 move.w #0,$12(a0) rts ; --------------------------------------------------------------------------- loc_316C62: ; ... move.b d3,$26(a0) bsr.w Knuckles_ResetOnFloor move.w $12(a0),$14(a0) tst.b d3 bpl.s return_316C78 neg.w $14(a0) return_316C78: ; ... rts ; --------------------------------------------------------------------------- Knuckles_HitRightWall: ; ... bsr.w CheckRightWallDist tst.w d1 bpl.s Knuckles_HitCeiling2 add.w d1,8(a0) move.w #0,$10(a0) move.w $12(a0),$14(a0) rts ; --------------------------------------------------------------------------- Knuckles_HitCeiling2: ; ... bsr.w CheckCeilingDist tst.w d1 bpl.s Knuckles_HitFloor2 sub.w d1,$C(a0) tst.w $12(a0) bpl.s return_316CAC move.w #0,$12(a0) return_316CAC: ; ... rts ; --------------------------------------------------------------------------- Knuckles_HitFloor2: ; ... tst.w $12(a0) bmi.s return_316CD4 bsr.w Player_CheckFloor tst.w d1 bpl.s return_316CD4 add.w d1,$C(a0) move.b d3,$26(a0) bsr.w Knuckles_ResetOnFloor move.w #0,$12(a0) move.w $10(a0),$14(a0) return_316CD4: ; ... rts ; End of function Knuckles_DoLevelCollision ; =============== S U B R O U T I N E ======================================= Knuckles_ResetOnFloor: ; ... tst.b $39(a0) bne.s Knuckles_ResetOnFloor_Part3 move.b #0,$1C(a0) ; End of function Knuckles_ResetOnFloor ; =============== S U B R O U T I N E ======================================= Knuckles_ResetOnFloor_Part2: ; ... move.b $16(a0),d0 move.b #$13,$16(a0) move.b #9,$17(a0) btst #2,$22(a0) beq.s Knuckles_ResetOnFloor_Part3 bclr #2,$22(a0) move.b #0,$1C(a0) sub.b #$13,d0 ext.w d0 add.w d0,$C(a0) Knuckles_ResetOnFloor_Part3: ; ... bclr #1,$22(a0) bclr #5,$22(a0) bclr #4,$22(a0) move.b #0,$3C(a0) move.w #0,($FFFFF7D0).w move.b #0,$27(a0) move.b #0,$29(a0) move.b #0,$2C(a0) move.w #0,($FFFFF66C).w move.b #0,$21(a0) cmp.b #$20,$1C(a0) bcc.s loc_316D5C cmp.b #$14,$1C(a0) bne.s return_316D62 loc_316D5C: ; ... move.b #0,$1C(a0) return_316D62: ; ... rts ; End of function Knuckles_ResetOnFloor_Part2 ; =============== S U B R O U T I N E ======================================= Obj01_Hurt: ; ... ; FUNCTION CHUNK AT 00316E14 SIZE 0000001C BYTES tst.w ($FFFFFFDA).w beq.s Obj01_Hurt_Normal btst #4,($FFFFF605).w beq.s Obj01_Hurt_Normal move.w #1,($FFFFFE08).w clr.b ($FFFFF7CC).w rts ; --------------------------------------------------------------------------- Obj01_Hurt_Normal: ; ... tst.b $25(a0) bmi.w Knuckles_HurtInstantRecover jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$30,$12(a0) btst #6,$22(a0) beq.s loc_316DA0 sub.w #$20,$12(a0) loc_316DA0: ; ... cmp.w #$FF00,($FFFFEECC).w bne.s loc_316DAE and.w #$7FF,$C(a0) loc_316DAE: ; ... bsr.w Knuckles_HurtStop bsr.w Knuckles_LevelBoundaries bsr.w Knuckles_RecordPositions bsr.w Knuckles_Animate bsr.w LoadKnucklesDynPLC jmp DisplaySprite ; End of function Obj01_Hurt ; =============== S U B R O U T I N E ======================================= Knuckles_HurtStop: ; ... move.w ($FFFFEECE).w,d0 add.w #$E0,d0 cmp.w $C(a0),d0 blt.w JmpTo_KillCharacter bsr.w Knuckles_DoLevelCollision btst #1,$22(a0) bne.s return_316E0C moveq #0,d0 move.w d0,$12(a0) move.w d0,$10(a0) move.w d0,$14(a0) move.b d0,$2A(a0) move.b #0,$1C(a0) subq.b #2,$24(a0) move.w #$78,$30(a0) move.b #0,$39(a0) return_316E0C: ; ... rts ; --------------------------------------------------------------------------- JmpTo_KillCharacter: ; ... jmp KillCharacter ; End of function Knuckles_HurtStop ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR Obj01_Hurt Knuckles_HurtInstantRecover: ; ... subq.b #2,$24(a0) move.b #0,$25(a0) bsr.w Knuckles_RecordPositions bsr.w Knuckles_Animate bsr.w LoadKnucklesDynPLC jmp DisplaySprite ; END OF FUNCTION CHUNK FOR Obj01_Hurt ; =============== S U B R O U T I N E ======================================= Obj01_Dead: ; ... tst.w ($FFFFFFDA).w beq.s loc_316E4A btst #4,($FFFFF605).w beq.s loc_316E4A move.w #1,($FFFFFE08).w clr.b ($FFFFF7CC).w rts ; --------------------------------------------------------------------------- loc_316E4A: ; ... bsr.w CheckGameOver jsr ObjectMoveAndFall bsr.w Knuckles_RecordPositions bsr.w Knuckles_Animate bsr.w LoadKnucklesDynPLC jmp DisplaySprite ; End of function Obj01_Dead ; =============== S U B R O U T I N E ======================================= CheckGameOver: ; ... move.b #1,($FFFFEEBE).w move.b #0,$39(a0) move.w ($FFFFEECE).w,d0 add.w #$100,d0 cmp.w $C(a0),d0 bge.w return_316F64 move.b #8,$24(a0) move.w #$3C,$3A(a0) addq.b #1,($FFFFFE1C).w subq.b #1,($FFFFFE12).w bne.s Obj01_ResetLevel move.w #0,$3A(a0) move.b #$39,($FFFFB080).w move.b #$39,($FFFFB0C0).w move.b #1,($FFFFB0DA).w move.w a0,($FFFFB0BE).w clr.b ($FFFFFE1A).w Obj01_Finished: ; ... clr.b ($FFFFFE1E).w clr.b ($FFFFFECA).w move.b #8,$24(a0) move.w #$9B,d0 jsr PlayMusic moveq #3,d0 jmp LoadPLC ; --------------------------------------------------------------------------- Obj01_ResetLevel: ; ... tst.b ($FFFFFE1A).w beq.s Obj01_ResetLevel_Part2 move.w #0,$3A(a0) move.b #$39,($FFFFB080).w move.b #$39,($FFFFB0C0).w move.b #2,($FFFFB09A).w move.b #3,($FFFFB0DA).w move.w a0,($FFFFB0BE).w bra.s Obj01_Finished ; --------------------------------------------------------------------------- Obj01_ResetLevel_Part2: ; ... tst.w ($FFFFFFDC).w beq.s return_316F64 move.b #0,($FFFFEEBE).w move.b #$A,$24(a0) move.w ($FFFFFE32).w,8(a0) move.w ($FFFFFE34).w,$C(a0) move.w ($FFFFFE3C).w,2(a0) move.w ($FFFFFE3E).w,$3E(a0) clr.w ($FFFFFE20).w clr.b ($FFFFFE1B).w move.b #0,$2A(a0) move.b #5,$1C(a0) move.w #0,$10(a0) move.w #0,$12(a0) move.w #0,$14(a0) move.b #2,$22(a0) move.w #0,$2E(a0) move.w #0,$3A(a0) return_316F64: ; ... rts ; End of function CheckGameOver ; =============== S U B R O U T I N E ======================================= Obj01_Gone: ; ... tst.w $3A(a0) beq.s return_316F78 subq.w #1,$3A(a0) bne.s return_316F78 move.w #1,($FFFFFE02).w return_316F78: ; ... rts ; End of function Obj01_Gone ; --------------------------------------------------------------------------- Obj01_Respawning: ; ... tst.w ($FFFFEEB0).w bne.s loc_316F8C tst.w ($FFFFEEB2).w bne.s loc_316F8C move.b #2,$24(a0) loc_316F8C: ; ... bsr.w Knuckles_Animate bsr.w LoadKnucklesDynPLC jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= Knuckles_Animate: ; ... lea (KnucklesAniData).l,a1 moveq #0,d0 move.b $1C(a0),d0 cmp.b $1D(a0),d0 beq.s KAnim_Do move.b d0,$1D(a0) move.b #0,$1B(a0) move.b #0,$1E(a0) bclr #5,$22(a0) KAnim_Do: ; ... add.w d0,d0 add.w (a1,d0.w),a1 move.b (a1),d0 bmi.s KAnim_WalkRun move.b $22(a0),d1 and.b #1,d1 and.b #$FC,1(a0) or.b d1,1(a0) subq.b #1,$1E(a0) bpl.s KAnim_Delay move.b d0,$1E(a0) KAnim_Do2: ; ... moveq #0,d1 move.b $1B(a0),d1 move.b 1(a1,d1.w),d0 cmp.b #$FC,d0 bcc.s KAnim_End_FF KAnim_Next: ; ... move.b d0,$1A(a0) addq.b #1,$1B(a0) KAnim_Delay: ; ... rts ; --------------------------------------------------------------------------- KAnim_End_FF: ; ... addq.b #1,d0 bne.s KAnim_End_FE move.b #0,$1B(a0) move.b 1(a1),d0 bra.s KAnim_Next ; --------------------------------------------------------------------------- KAnim_End_FE: ; ... addq.b #1,d0 bne.s KAnim_End_FD move.b 2(a1,d1.w),d0 sub.b d0,$1B(a0) sub.b d0,d1 move.b 1(a1,d1.w),d0 bra.s KAnim_Next ; --------------------------------------------------------------------------- KAnim_End_FD: ; ... addq.b #1,d0 bne.s KAnim_End move.b 2(a1,d1.w),$1C(a0) KAnim_End: ; ... rts ; --------------------------------------------------------------------------- KAnim_WalkRun: ; ... addq.b #1,d0 bne.w KAnim_Roll moveq #0,d0 move.b $27(a0),d0 bne.w KAnim_Tumble moveq #0,d1 move.b $26(a0),d0 bmi.s loc_31704E beq.s loc_31704E subq.b #1,d0 loc_31704E: ; ... move.b $22(a0),d2 and.b #1,d2 bne.s loc_31705A not.b d0 loc_31705A: ; ... add.b #$10,d0 bpl.s loc_317062 moveq #3,d1 loc_317062: ; ... and.b #$FC,1(a0) eor.b d1,d2 or.b d2,1(a0) btst #5,$22(a0) bne.w KAnim_Push lsr.b #4,d0 and.b #6,d0 move.w $14(a0),d2 bpl.s loc_317086 neg.w d2 loc_317086: ; ... tst.b $2B(a0) bpl.w loc_317090 add.w d2,d2 loc_317090: ; ... lea (KnucklesAni_Run).l,a1 cmp.w #$600,d2 bcc.s loc_3170A4 lea (KnucklesAni_Walk).l,a1 add.b d0,d0 loc_3170A4: ; ... add.b d0,d0 move.b d0,d3 moveq #0,d1 move.b $1B(a0),d1 move.b 1(a1,d1.w),d0 cmp.b #$FF,d0 bne.s loc_3170C2 move.b #0,$1B(a0) move.b 1(a1),d0 loc_3170C2: ; ... move.b d0,$1A(a0) add.b d3,$1A(a0) subq.b #1,$1E(a0) bpl.s return_3170E4 neg.w d2 add.w #$800,d2 bpl.s loc_3170DA moveq #0,d2 loc_3170DA: ; ... lsr.w #8,d2 move.b d2,$1E(a0) addq.b #1,$1B(a0) return_3170E4: ; ... rts ; --------------------------------------------------------------------------- KAnim_Tumble: ; ... move.b $27(a0),d0 moveq #0,d1 move.b $22(a0),d2 and.b #1,d2 bne.s KAnim_Tumble_Left and.b #$FC,1(a0) add.b #$B,d0 divu.w #$16,d0 add.b #$31,d0 move.b d0,$1A(a0) move.b #0,$1E(a0) rts ; --------------------------------------------------------------------------- KAnim_Tumble_Left: ; ... and.b #$FC,1(a0) tst.b $29(a0) beq.s loc_31712C or.b #1,1(a0) add.b #$B,d0 bra.s loc_317138 ; --------------------------------------------------------------------------- loc_31712C: ; ... or.b #3,1(a0) neg.b d0 add.b #-$71,d0 loc_317138: ; ... divu.w #$16,d0 add.b #$31,d0 move.b d0,$1A(a0) move.b #0,$1E(a0) rts ; --------------------------------------------------------------------------- KAnim_Roll: ; ... subq.b #1,$1E(a0) bpl.w KAnim_Delay addq.b #1,d0 bne.s KAnim_Push move.w $14(a0),d2 bpl.s loc_317160 neg.w d2 loc_317160: ; ... lea (KnucklesAni_Roll2).l,a1 cmp.w #$600,d2 bcc.s loc_317172 lea (KnucklesAni_Roll).l,a1 loc_317172: ; ... neg.w d2 add.w #$400,d2 bpl.s loc_31717C moveq #0,d2 loc_31717C: ; ... lsr.w #8,d2 move.b d2,$1E(a0) move.b $22(a0),d1 and.b #1,d1 and.b #$FC,1(a0) or.b d1,1(a0) bra.w KAnim_Do2 ; --------------------------------------------------------------------------- KAnim_Push: ; ... subq.b #1,$1E(a0) bpl.w KAnim_Delay move.w $14(a0),d2 bmi.s loc_3171A8 neg.w d2 loc_3171A8: ; ... add.w #$800,d2 bpl.s loc_3171B0 moveq #0,d2 loc_3171B0: ; ... lsr.w #8,d2 move.b d2,$1E(a0) lea (KnucklesAni_Push).l,a1 move.b $22(a0),d1 and.b #1,d1 and.b #$FC,1(a0) or.b d1,1(a0) bra.w KAnim_Do2 ; End of function Knuckles_Animate ; --------------------------------------------------------------------------- KnucklesAniData:dc.w KnucklesAni_Walk-KnucklesAniData; 0 ; ... dc.w KnucklesAni_Run-KnucklesAniData; 1 dc.w KnucklesAni_Roll-KnucklesAniData; 2 dc.w KnucklesAni_Roll2-KnucklesAniData; 3 dc.w KnucklesAni_Push-KnucklesAniData; 4 dc.w KnucklesAni_Wait-KnucklesAniData; 5 dc.w KnucklesAni_Balance-KnucklesAniData; 6 dc.w KnucklesAni_LookUp-KnucklesAniData; 7 dc.w KnucklesAni_Duck-KnucklesAniData; 8 dc.w KnucklesAni_Spindash-KnucklesAniData; 9 dc.w KnucklesAni_Unused-KnucklesAniData; 10 dc.w KnucklesAni_Pull-KnucklesAniData; 11 dc.w KnucklesAni_Balance2-KnucklesAniData; 12 dc.w KnucklesAni_Stop-KnucklesAniData; 13 dc.w KnucklesAni_Float-KnucklesAniData; 14 dc.w KnucklesAni_Float2-KnucklesAniData; 15 dc.w KnucklesAni_Spring-KnucklesAniData; 16 dc.w KnucklesAni_Hang-KnucklesAniData; 17 dc.w KnucklesAni_Unused_0-KnucklesAniData; 18 dc.w KnucklesAni_S3EndingPose-KnucklesAniData; 19 dc.w KnucklesAni_WFZHang-KnucklesAniData; 20 dc.w KnucklesAni_Bubble-KnucklesAniData; 21 dc.w KnucklesAni_DeathBW-KnucklesAniData; 22 dc.w KnucklesAni_Drown-KnucklesAniData; 23 dc.w KnucklesAni_Death-KnucklesAniData; 24 dc.w KnucklesAni_OilSlide-KnucklesAniData; 25 dc.w KnucklesAni_Hurt-KnucklesAniData; 26 dc.w KnucklesAni_OilSlide_0-KnucklesAniData; 27 dc.w KnucklesAni_Blank-KnucklesAniData; 28 dc.w KnucklesAni_Unused_1-KnucklesAniData; 29 dc.w KnucklesAni_Unused_2-KnucklesAniData; 30 dc.w KnucklesAni_Transform-KnucklesAniData; 31 dc.w KnucklesAni_Gliding-KnucklesAniData; 32 dc.w KnucklesAni_FallFromGlide-KnucklesAniData; 33 dc.w KnucklesAni_GetUp-KnucklesAniData; 34 dc.w KnucklesAni_HardFall-KnucklesAniData; 35 dc.w KnucklesAni_Badass-KnucklesAniData; 36 KnucklesAni_Walk:dc.b $FF, 7, 8, 1, 2, 3, 4, 5, 6,$FF; 0 ; ... KnucklesAni_Run:dc.b $FF,$21,$22,$23,$24,$FF,$FF,$FF,$FF,$FF; 0 ; ... KnucklesAni_Roll:dc.b $FE,$9A,$96,$9A,$97,$9A,$98,$9A,$99,$FF; 0 ; ... KnucklesAni_Roll2:dc.b $FE,$9A,$96,$9A,$97,$9A,$98,$9A,$99,$FF; 0 ; ... KnucklesAni_Push:dc.b $FD,$CE,$CF,$D0,$D1,$FF,$FF,$FF,$FF,$FF; 0 ; ... KnucklesAni_Wait:dc.b 5,$56,$56,$56,$56,$56,$56,$56,$56,$56,$56,$56,$56; 0 ; ... dc.b $56,$56,$56,$56,$56,$56,$56,$56,$56,$56,$56,$56,$56; 13 dc.b $56,$56,$56,$56,$56,$56,$56,$56,$56,$56,$56,$56,$56; 26 dc.b $56,$56,$56,$56,$56,$56,$56,$56,$56,$56,$56,$56,$D2; 39 dc.b $D2,$D2,$D3,$D3,$D3,$D2,$D2,$D2,$D3,$D3,$D3,$D2,$D2; 52 dc.b $D2,$D3,$D3,$D3,$D2,$D2,$D2,$D3,$D3,$D3,$D2,$D2,$D2; 65 dc.b $D3,$D3,$D3,$D2,$D2,$D2,$D3,$D3,$D3,$D2,$D2,$D2,$D3; 78 dc.b $D3,$D3,$D2,$D2,$D2,$D3,$D3,$D3,$D2,$D2,$D2,$D3,$D3; 91 dc.b $D3,$D4,$D4,$D4,$D4,$D4,$D7,$D8,$D9,$DA,$DB,$D8,$D9; 104 dc.b $DA,$DB,$D8,$D9,$DA,$DB,$D8,$D9,$DA,$DB,$D8,$D9,$DA; 117 dc.b $DB,$D8,$D9,$DA,$DB,$D8,$D9,$DA,$DB,$D8,$D9,$DA,$DB; 130 dc.b $DC,$DD,$DC,$DD,$DE,$DE,$D8,$D7,$FF; 143 KnucklesAni_Balance:dc.b 3,$9F,$9F,$A0,$A0,$A1,$A1,$A2,$A2,$A3,$A3,$A4,$A4; 0 ; ... dc.b $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5; 13 dc.b $A5,$A5,$A6,$A6,$A6,$A7,$A7,$A7,$A8,$A8,$A9,$A9,$AA; 26 dc.b $AA,$FE, 6 ; 39 KnucklesAni_LookUp:dc.b 5,$D5,$D6,$FE, 1 ; 0 ; ... KnucklesAni_Duck:dc.b 5,$9B,$9C,$FE, 1 ; 0 ; ... KnucklesAni_Spindash:dc.b 0,$86,$87,$86,$88,$86,$89,$86,$8A,$86,$8B,$FF; 0 ; ... KnucklesAni_Unused:dc.b 9,$BA,$C5,$C6,$C6,$C6,$C6,$C6,$C6,$C7,$C7,$C7,$C7; 0 ; ... dc.b $C7,$C7,$C7,$C7,$C7,$C7,$C7,$C7,$FD, 0; 13 KnucklesAni_Pull:dc.b $F,$8F,$FF ; 0 ; ... KnucklesAni_Balance2:dc.b 3,$A1,$A1,$A2,$A2,$A3,$A3,$A4,$A4,$A5,$A5,$A5,$A5; 0 ; ... dc.b $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$A6,$A6; 13 dc.b $A6,$A7,$A7,$A7,$A8,$A8,$A9,$A9,$AA,$AA,$FE; 26 dc.b 6 KnucklesAni_Stop:dc.b 3,$9D,$9E,$9F,$A0,$FD, 0 ; 0 ; ... KnucklesAni_Float:dc.b 7,$C0,$FF ; 0 ; ... KnucklesAni_Float2:dc.b 5,$C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$FF; 0 ; ... KnucklesAni_Spring:dc.b $2F,$8E,$FD, 0 ; 0 ; ... KnucklesAni_Hang:dc.b 1,$AE,$AF,$FF ; 0 ; ... KnucklesAni_Unused_0:dc.b $F,$43,$43,$43,$FE, 1 ; 0 ; ... KnucklesAni_S3EndingPose:dc.b 5,$B1,$B2,$B2,$B2,$B3,$B4,$FE, 1, 7,$B1,$B3,$B3; 0 ; ... dc.b $B3,$B3,$B3,$B3,$B2,$B3,$B4,$B3,$FE, 4; 13 KnucklesAni_WFZHang:dc.b $13,$91,$FF ; 0 ; ... KnucklesAni_Bubble:dc.b $B,$B0,$B0, 3, 4,$FD, 0 ; 0 ; ... KnucklesAni_DeathBW:dc.b $20,$AC,$FF ; 0 ; ... KnucklesAni_Drown:dc.b $20,$AD,$FF ; 0 ; ... KnucklesAni_Death:dc.b $20,$AB,$FF ; 0 ; ... KnucklesAni_OilSlide:dc.b 9,$8C,$FF ; 0 ; ... KnucklesAni_Hurt:dc.b $40,$8D,$FF ; 0 ; ... KnucklesAni_OilSlide_0:dc.b 9,$8C,$FF ; 0 ; ... KnucklesAni_Blank:dc.b $77, 0,$FF ; 0 ; ... KnucklesAni_Unused_1:dc.b $13,$D0,$D1,$FF ; 0 ; ... KnucklesAni_Unused_2:dc.b 3,$CF,$C8,$C9,$CA,$CB,$FE ; 0 ; ... dc.b 4 KnucklesAni_Gliding:dc.b $1F,$C0,$FF ; 0 ; ... KnucklesAni_FallFromGlide:dc.b 7,$CA,$CB,$FE, 1 ; 0 ; ... KnucklesAni_GetUp:dc.b $F,$CD,$FD, 0 ; 0 ; ... KnucklesAni_HardFall:dc.b $F,$9C,$FD, 0 ; 0 ; ... KnucklesAni_Badass:dc.b 5,$D8,$D9,$DA,$DB,$D8,$D9,$DA,$DB,$D8,$D9,$DA,$DB; 0 ; ... dc.b $D8,$D9,$DA,$DB,$D8,$D9,$DA,$DB,$D8,$D9,$DA,$DB,$D8; 13 dc.b $D9,$DA,$DB,$D8,$D9,$DA,$DB,$DC,$DD,$DC,$DD,$DE,$DE; 26 dc.b $FF ; 39 KnucklesAni_Transform:dc.b 2,$EB,$EB,$EC,$ED,$EC,$ED,$EC,$ED,$EC,$ED,$EC,$ED; 0 ; ... dc.b $FD, 0, 0 ; 13 ; =============== S U B R O U T I N E ======================================= LoadKnucklesDynPLC: ; ... moveq #0,d0 move.b $1A(a0),d0 ; End of function LoadKnucklesDynPLC ; START OF FUNCTION CHUNK FOR sub_333D66 LoadKnucklesDynPLC_Part2: ; ... cmp.b ($FFFFF766).w,d0 beq.w return_31753E move.b d0,($FFFFF766).w lea (SK_PLC_Knuckles).l,a2 ; SK_PLC_Knuckles add.w d0,d0 add.w (a2,d0.w),a2 move.w (a2)+,d5 subq.w #1,d5 bmi.w return_31753E moveq #0,d3 lea ($FFFFF100).w,a3 ; RAM address where the converted art will be stored lea ArtConvTable(pc),a4 ; Load art-conversion table KPLC_ReadEntry: ; ... moveq #0,d0 moveq #0,d1 move.w (a2)+,d1 move.w d1,d4 rol.w #4,d4 and.w #$F,d4 addq.w #1,d3 add.w d4,d3 and.w #$FFF,d1 lsl.l #5,d1 lea (SK_ArtUnc_Knux).l,a1 ; SK_ArtUnc_Knux add.l d1,a1 KPLC_ConvertArtFromS3K: ; ... move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ move.b (a1)+,d0 move.b (a4,d0.w),(a3)+ ; Repeated $20 times dbf d4,KPLC_ConvertArtFromS3K dbf d5,KPLC_ReadEntry move.l #$FFF100,d1 ; RAM address where the converted art was stored move.w #$F000,d2 ; VRAM address for Knuckles' art lsl.w #4,d3 jmp QueueDMATransfer ; --------------------------------------------------------------------------- return_31753E: ; ... rts ; END OF FUNCTION CHUNK FOR sub_333D66 ; --------------------------------------------------------------------------- ; This table converts art using palette indexes set for S&K to palette indexes set for S2. ; Format: The rightmost nybble of entry X in any row = the new index that replaces color X. ; Similarly, the leftmost nybble of entry X in any column = the new index that replaces color X. ; ; Specific replacements: ; ; $0 -> $0 ; $1 -> $6 ; $2 -> $5 ; $3 -> $3 ; $4 -> $2 ; $5 -> $4 ; $6 -> $C ; $7 -> $D ; $8 -> $E ; $9 -> $F ; $A -> $A ; $B -> $B ; $C -> $7 ; $D -> $8 ; $E -> $9 ; $F -> $1 ; --------------------------------------------------------------------------- ArtConvTable: dc.b $00,$06,$05,$03,$02,$04,$0C,$0D,$0E,$0F,$0A,$0B,$07,$08,$09,$01; 0 ; ... dc.b $60,$66,$65,$63,$62,$64,$6C,$6D,$6E,$6F,$6A,$6B,$67,$68,$69,$61; 16 dc.b $50,$56,$55,$53,$52,$54,$5C,$5D,$5E,$5F,$5A,$5B,$57,$58,$59,$51; 32 dc.b $30,$36,$35,$33,$32,$34,$3C,$3D,$3E,$3F,$3A,$3B,$37,$38,$39,$31; 48 dc.b $20,$26,$25,$23,$22,$24,$2C,$2D,$2E,$2F,$2A,$2B,$27,$28,$29,$21; 64 dc.b $40,$46,$45,$43,$42,$44,$4C,$4D,$4E,$4F,$4A,$4B,$47,$48,$49,$41; 80 dc.b $C0,$C6,$C5,$C3,$C2,$C4,$CC,$CD,$CE,$CF,$CA,$CB,$C7,$C8,$C9,$C1; 96 dc.b $D0,$D6,$D5,$D3,$D2,$D4,$DC,$DD,$DE,$DF,$DA,$DB,$D7,$D8,$D9,$D1; 112 dc.b $E0,$E6,$E5,$E3,$E2,$E4,$EC,$ED,$EE,$EF,$EA,$EB,$E7,$E8,$E9,$E1; 128 dc.b $F0,$F6,$F5,$F3,$F2,$F4,$FC,$FD,$FE,$FF,$FA,$FB,$F7,$F8,$F9,$F1; 144 dc.b $A0,$A6,$A5,$A3,$A2,$A4,$AC,$AD,$AE,$AF,$AA,$AB,$A7,$A8,$A9,$A1; 160 dc.b $B0,$B6,$B5,$B3,$B2,$B4,$BC,$BD,$BE,$BF,$BA,$BB,$B7,$B8,$B9,$B1; 176 dc.b $70,$76,$75,$73,$72,$74,$7C,$7D,$7E,$7F,$7A,$7B,$77,$78,$79,$71; 192 dc.b $80,$86,$85,$83,$82,$84,$8C,$8D,$8E,$8F,$8A,$8B,$87,$88,$89,$81; 208 dc.b $90,$96,$95,$93,$92,$94,$9C,$9D,$9E,$9F,$9A,$9B,$97,$98,$99,$91; 224 dc.b $10,$16,$15,$13,$12,$14,$1C,$1D,$1E,$1F,$1A,$1B,$17,$18,$19,$11; 240 ; --------------------------------------------------------------------------- ; ; Tails dynamic PLC routine. Used by Tails in the Tornado in Wing Fortress and Sky Chase, I believe... ; ; START OF FUNCTION CHUNK FOR sub_333D66 LoadTailsDynPLC: ; ... cmp.b ($FFFFF7DE).w,d0 beq.s return_31768C move.b d0,($FFFFF7DE).w lea (S2_MapRUnc_Tails).l,a2 ; S2_MapRUnc_Tails (TailsDynPLC) add.w d0,d0 add.w (a2,d0.w),a2 move.w (a2)+,d5 subq.w #1,d5 bmi.s return_31768C move.w #$F400,d4 TPLC_ReadEntry: ; ... moveq #0,d1 move.w (a2)+,d1 move.w d1,d3 lsr.w #8,d3 and.w #$F0,d3 add.w #$10,d3 and.w #$FFF,d1 lsl.l #5,d1 add.l #S2_ArtUnc_Tails,d1 ; S2_ArtUnc_Tails move.w d4,d2 add.w d3,d4 add.w d3,d4 jsr QueueDMATransfer dbf d5,TPLC_ReadEntry return_31768C: ; ... rts ; END OF FUNCTION CHUNK FOR sub_333D66 ; --------------------------------------------------------------------------- Obj0A: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31769C(pc,d0.w),d1 jmp off_31769C(pc,d1.w) ; --------------------------------------------------------------------------- off_31769C: dc.w loc_3176AE-off_31769C ; 0 ; ... dc.w loc_317706-off_31769C ; 1 dc.w loc_317712-off_31769C ; 2 dc.w loc_317788-off_31769C ; 3 dc.w loc_31779C-off_31769C ; 4 dc.w loc_317974-off_31769C ; 5 dc.w loc_3177A2-off_31769C ; 6 dc.w loc_31777C-off_31769C ; 7 dc.w loc_31779C-off_31769C ; 8 ; --------------------------------------------------------------------------- loc_3176AE: ; ... addq.b #2,$24(a0) move.l #Map_Obj24,4(a0) tst.b $3F(a0) beq.s loc_3176C8 move.l #Map_Obj24_0,4(a0) loc_3176C8: ; ... move.w #$855B,2(a0) move.b #$84,1(a0) move.b #$10,$19(a0) move.b #1,$18(a0) move.b $28(a0),d0 bpl.s loc_3176F6 addq.b #8,$24(a0) and.w #$7F,d0 move.b d0,$33(a0) bra.w loc_317974 ; --------------------------------------------------------------------------- loc_3176F6: ; ... move.b d0,$1C(a0) move.w 8(a0),$30(a0) move.w #-$88,$12(a0) loc_317706: ; ... lea (Ani_Obj0A).l,a1 jsr AnimateSprite loc_317712: ; ... move.w ($FFFFF646).w,d0 cmp.w $C(a0),d0 bcs.s loc_317738 move.b #6,$24(a0) addq.b #7,$1C(a0) cmp.b #$D,$1C(a0) beq.s loc_317788 bcs.s loc_317788 move.b #$D,$1C(a0) bra.s loc_317788 ; --------------------------------------------------------------------------- loc_317738: ; ... tst.b ($FFFFF7C7).w beq.s loc_317742 addq.w #4,$30(a0) loc_317742: ; ... move.b $26(a0),d0 addq.b #1,$26(a0) and.w #$7F,d0 lea (Obj0A_WobbleData).l,a1 move.b (a1,d0.w),d0 ext.w d0 add.w $30(a0),d0 move.w d0,8(a0) bsr.s sub_3177E2 jsr ObjectMove ; AKA SpeedToPos in Sonic 1 tst.b 1(a0) bpl.s loc_317776 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_317776: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_31777C: ; ... move.l $3C(a0),a2 cmp.b #$C,$28(a2) bhi.s loc_31779C loc_317788: ; ... bsr.s sub_3177E2 lea (Ani_Obj0A).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_31779C: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_3177A2: ; ... move.l $3C(a0),a2 cmp.b #$C,$28(a2) bhi.s loc_3177DC subq.w #1,$38(a0) bne.s loc_3177C0 move.b #$E,$24(a0) addq.b #7,$1C(a0) bra.s loc_317788 ; --------------------------------------------------------------------------- loc_3177C0: ; ... lea (Ani_Obj0A).l,a1 jsr AnimateSprite bsr.w sub_31792E tst.b 1(a0) bpl.s loc_3177DC jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3177DC: ; ... jmp DeleteObject ; =============== S U B R O U T I N E ======================================= sub_3177E2: ; ... tst.w $38(a0) beq.s return_31782C subq.w #1,$38(a0) bne.s return_31782C cmp.b #7,$1C(a0) bcc.s return_31782C move.w #$F,$38(a0) clr.w $12(a0) move.b #$80,1(a0) move.w 8(a0),d0 sub.w ($FFFFEE00).w,d0 add.w #$80,d0 move.w d0,8(a0) move.w $C(a0),d0 sub.w ($FFFFEE04).w,d0 add.w #$80,d0 move.w d0,$A(a0) move.b #$C,$24(a0) return_31782C: ; ... rts ; End of function sub_3177E2 ; --------------------------------------------------------------------------- Obj0A_WobbleData:dc.b 0, 0, 0, 0, 0, 0; 0 ; ... dc.b 1, 1, 1, 1, 1, 2; 6 dc.b 2, 2, 2, 2, 2, 2; 12 dc.b 3, 3, 3, 3, 3, 3; 18 dc.b 3, 3, 3, 3, 3, 3; 24 dc.b 3, 3, 3, 3, 3, 3; 30 dc.b 3, 3, 3, 3, 3, 3; 36 dc.b 3, 3, 3, 3, 3, 2; 42 dc.b 2, 2, 2, 2, 2, 2; 48 dc.b 1, 1, 1, 1, 1, 0; 54 dc.b 0, 0, 0, 0, 0, -1; 60 dc.b -1, -1, -1, -1, -2, -2; 66 dc.b -2, -2, -2, -3, -3, -3; 72 dc.b -3, -3, -3, -3, -4, -4; 78 dc.b -4, -4, -4, -4, -4, -4; 84 dc.b -4, -4, -4, -4, -4, -4; 90 dc.b -4, -4, -4, -4, -4, -4; 96 dc.b -4, -4, -4, -4, -4, -4; 102 dc.b -4, -4, -4, -3, -3, -3; 108 dc.b -3, -3, -3, -3, -2, -2; 114 dc.b -2, -2, -2, -1, -1, -1; 120 dc.b -1, -1, 0, 0, 0, 0; 126 dc.b 0, 0, 1, 1, 1, 1; 132 dc.b 1, 2, 2, 2, 2, 2; 138 dc.b 2, 2, 3, 3, 3, 3; 144 dc.b 3, 3, 3, 3, 3, 3; 150 dc.b 3, 3, 3, 3, 3, 3; 156 dc.b 3, 3, 3, 3, 3, 3; 162 dc.b 3, 3, 3, 3, 3, 3; 168 dc.b 3, 2, 2, 2, 2, 2; 174 dc.b 2, 2, 1, 1, 1, 1; 180 dc.b 1, 0, 0, 0, 0, 0; 186 dc.b 0, -1, -1, -1, -1, -1; 192 dc.b -2, -2, -2, -2, -2, -3; 198 dc.b -3, -3, -3, -3, -3, -3; 204 dc.b -4, -4, -4, -4, -4, -4; 210 dc.b -4, -4, -4, -4, -4, -4; 216 dc.b -4, -4, -4, -4, -4, -4; 222 dc.b -4, -4, -4, -4, -4, -4; 228 dc.b -4, -4, -4, -4, -4, -3; 234 dc.b -3, -3, -3, -3, -3, -3; 240 dc.b -2, -2, -2, -2, -2, -1; 246 dc.b -1, -1, -1, -1 ; 252 ; =============== S U B R O U T I N E ======================================= sub_31792E: ; ... moveq #0,d1 move.b $1A(a0),d1 cmp.b #8,d1 bcs.s return_317972 cmp.b #$E,d1 bcc.s return_317972 cmp.b $2E(a0),d1 beq.s return_317972 move.b d1,$2E(a0) subq.w #8,d1 move.w d1,d0 add.w d1,d1 add.w d0,d1 lsl.w #6,d1 add.l #S2_ArtUnc_Countdown,d1 move.w #$9380,d2 tst.b $3F(a0) beq.s loc_317968 move.w #$9180,d2 loc_317968: ; ... move.w #$60,d3 jsr QueueDMATransfer return_317972: ; ... rts ; End of function sub_31792E ; --------------------------------------------------------------------------- loc_317974: ; ... move.l $3C(a0),a2 tst.w $2C(a0) bne.w loc_317A76 cmp.b #6,$24(a2) bcc.w return_317B8A btst #6,$22(a2) beq.w return_317B8A subq.w #1,$38(a0) bpl.w loc_317A9A move.w #$3B,$38(a0) move.w #1,$36(a0) jsr RandomNumber and.w #1,d0 move.b d0,$34(a0) moveq #0,d0 move.b $28(a2),d0 cmp.w #$19,d0 beq.s loc_3179FA cmp.w #$14,d0 beq.s loc_3179FA cmp.w #$F,d0 beq.s loc_3179FA cmp.w #$C,d0 bhi.s loc_317A0A bne.s loc_3179E6 tst.b $3F(a0) bne.s loc_3179E6 move.w #$9F,d0 jsr PlayMusic loc_3179E6: ; ... subq.b #1,$32(a0) bpl.s loc_317A0A move.b $33(a0),$32(a0) bset #7,$36(a0) bra.s loc_317A0A ; --------------------------------------------------------------------------- loc_3179FA: ; ... tst.b $3F(a0) bne.s loc_317A0A move.w #$C2,d0 jsr PlaySound loc_317A0A: ; ... subq.b #1,$28(a2) bcc.w loc_317A98 move.b #$81,$2A(a2) move.w #$B2,d0 jsr PlaySound move.b #$A,$34(a0) move.w #1,$36(a0) move.w #$78,$2C(a0) move.l a2,a1 bsr.w ResumeMusic move.l a0,-(sp) move.l a2,a0 bsr.w Knuckles_ResetOnFloor_Part2 move.b #$17,$1C(a0) bset #1,$22(a0) bset #7,2(a0) move.w #0,$12(a0) move.w #0,$10(a0) move.w #0,$14(a0) move.l (sp)+,a0 cmp.w #$B000,a2 bne.s return_317A74 move.b #1,($FFFFEEDC).w return_317A74: ; ... rts ; --------------------------------------------------------------------------- loc_317A76: ; ... subq.w #1,$2C(a0) bne.s loc_317A84 move.b #6,$24(a2) rts ; --------------------------------------------------------------------------- loc_317A84: ; ... move.l a0,-(sp) move.l a2,a0 jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$10,$12(a0) move.l (sp)+,a0 bra.s loc_317A9A ; --------------------------------------------------------------------------- loc_317A98: ; ... bra.s loc_317AAA ; --------------------------------------------------------------------------- loc_317A9A: ; ... tst.w $36(a0) beq.w return_317B8A subq.w #1,$3A(a0) bpl.w return_317B8A loc_317AAA: ; ... jsr RandomNumber and.w #$F,d0 addq.w #8,d0 move.w d0,$3A(a0) jsr SingleObjLoad bne.w return_317B8A move.b 0(a0),0(a1) move.w 8(a2),8(a1) moveq #6,d0 btst #0,$22(a2) beq.s loc_317AE2 neg.w d0 move.b #$40,$26(a1) loc_317AE2: ; ... add.w d0,8(a1) move.w $C(a2),$C(a1) move.l $3C(a0),$3C(a1) move.b #6,$28(a1) tst.w $2C(a0) beq.w loc_317B34 and.w #7,$3A(a0) add.w #0,$3A(a0) move.w $C(a2),d0 sub.w #$C,d0 move.w d0,$C(a1) jsr RandomNumber move.b d0,$26(a1) move.w ($FFFFFE04).w,d0 and.b #3,d0 bne.s loc_317B80 move.b #$E,$28(a1) bra.s loc_317B80 ; --------------------------------------------------------------------------- loc_317B34: ; ... btst #7,$36(a0) beq.s loc_317B80 moveq #0,d2 move.b $28(a2),d2 cmp.b #$C,d2 bcc.s loc_317B80 lsr.w #1,d2 jsr RandomNumber and.w #3,d0 bne.s loc_317B68 bset #6,$36(a0) bne.s loc_317B80 move.b d2,$28(a1) move.w #$1C,$38(a1) loc_317B68: ; ... tst.b $34(a0) bne.s loc_317B80 bset #6,$36(a0) bne.s loc_317B80 move.b d2,$28(a1) move.w #$1C,$38(a1) loc_317B80: ; ... subq.b #1,$34(a0) bpl.s return_317B8A clr.w $36(a0) return_317B8A: ; ... rts ; =============== S U B R O U T I N E ======================================= ResumeMusic: ; ... cmp.b #$C,$28(a1) bhi.s loc_317BC6 cmp.w #$B000,a1 bne.s loc_317BC6 move.w ($FFFFFF90).w,d0 btst #1,$2B(a1) beq.s loc_317BAA move.w #$97,d0 loc_317BAA: ; ... tst.b ($FFFFFE19).w beq.w loc_317BB6 move.w #$96,d0 loc_317BB6: ; ... tst.b ($FFFFF7AA).w beq.s loc_317BC0 move.w #$93,d0 loc_317BC0: ; ... jsr PlayMusic loc_317BC6: ; ... move.b #$1E,$28(a1) rts ; End of function ResumeMusic ; --------------------------------------------------------------------------- Ani_Obj0A: dc.w byte_317BEC-Ani_Obj0A ; 0 ; ... dc.w byte_317BF5-Ani_Obj0A ; 1 dc.w byte_317BFE-Ani_Obj0A ; 2 dc.w byte_317C07-Ani_Obj0A ; 3 dc.w byte_317C10-Ani_Obj0A ; 4 dc.w byte_317C19-Ani_Obj0A ; 5 dc.w byte_317C22-Ani_Obj0A ; 6 dc.w byte_317C27-Ani_Obj0A ; 7 dc.w byte_317C2F-Ani_Obj0A ; 8 dc.w byte_317C37-Ani_Obj0A ; 9 dc.w byte_317C3F-Ani_Obj0A ; 10 dc.w byte_317C47-Ani_Obj0A ; 11 dc.w byte_317C4F-Ani_Obj0A ; 12 dc.w byte_317C57-Ani_Obj0A ; 13 dc.w byte_317C59-Ani_Obj0A ; 14 byte_317BEC: dc.b 5, 0, 1, 2, 3, 4, 8, 8, -4; 0 ; ... byte_317BF5: dc.b 5, 0, 1, 2, 3, 4, 9, 9, -4; 0 ; ... byte_317BFE: dc.b 5, 0, 1, 2, 3, 4, $A, $A, -4; 0 ; ... byte_317C07: dc.b 5, 0, 1, 2, 3, 4, $B, $B, -4; 0 ; ... byte_317C10: dc.b 5, 0, 1, 2, 3, 4, $C, $C, -4; 0 ; ... byte_317C19: dc.b 5, 0, 1, 2, 3, 4, $D, $D, -4; 0 ; ... byte_317C22: dc.b $E, 0, 1, 2, -4 ; 0 ; ... byte_317C27: dc.b 7, $10, 8, $10, 8, $10, 8, -4; 0 ; ... byte_317C2F: dc.b 7, $10, 9, $10, 9, $10, 9, -4; 0 ; ... byte_317C37: dc.b 7, $10, $A, $10, $A, $10, $A, -4; 0 ; ... byte_317C3F: dc.b 7, $10, $B, $10, $B, $10, $B, -4; 0 ; ... byte_317C47: dc.b 7, $10, $C, $10, $C, $10, $C, -4; 0 ; ... byte_317C4F: dc.b 7, $10, $D, $10, $D, $10, $D, -4; 0 ; ... byte_317C57: dc.b $E, -4 ; 0 ; ... byte_317C59: dc.b $E, 1, 2, 3, 4, -4, 0; 0 ; ... ; --------------------------------------------------------------------------- Obj38: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_317C6E(pc,d0.w),d1 jmp off_317C6E(pc,d1.w) ; --------------------------------------------------------------------------- off_317C6E: dc.w loc_317C72-off_317C6E,loc_317C9A-off_317C6E; 0 ; ... ; --------------------------------------------------------------------------- loc_317C72: ; ... addq.b #2,$24(a0) move.l #Map_Obj38,4(a0) move.b #4,1(a0) move.b #1,$18(a0) move.b #$18,$19(a0) move.w #$4BE,2(a0) bsr.w Adjust2PArtPointer2_Useless loc_317C9A: ; ... move.w $3E(a0),a2 btst #1,$2B(a2) bne.s return_317CE4 btst #0,$2B(a2) beq.s loc_317CE6 move.w 8(a2),8(a0) move.w $C(a2),$C(a0) move.b $22(a2),$22(a0) and.w #$7FFF,2(a0) tst.w 2(a2) bpl.s loc_317CD2 or.w #$8000,2(a0) loc_317CD2: ; ... lea (Ani_Obj38).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- return_317CE4: ; ... rts ; --------------------------------------------------------------------------- loc_317CE6: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- ; Object 35 - Invincibility Stars Obj35: ; ... moveq #0,d0 move.b $A(a0),d0 move.w off_317CFA(pc,d0.w),d1 jmp off_317CFA(pc,d1.w) ; --------------------------------------------------------------------------- off_317CFA: dc.w loc_317D12-off_317CFA ; 0 ; ... dc.w loc_317D7A-off_317CFA ; 1 dc.w loc_317DEE-off_317CFA ; 2 dc.l byte_317EFD dc.w $B dc.l byte_317F12 dc.w $160D dc.l byte_317F2B dc.w $2C0D ; --------------------------------------------------------------------------- loc_317D12: ; ... moveq #0,d2 lea off_317CFA(pc),a2 lea (a0),a1 moveq #3,d1 loc_317D1C: ; ... move.b 0(a0),0(a1) move.b #4,$A(a1) loc_317D28: move.l #Map_Obj35,4(a1) move.w #$4DE,2(a1) bsr.w Adjust2PArtPointer_Useless move.b #4,1(a1) bset #6,1(a1) move.b #$10,$E(a1) move.b #2,$F(a1) move.w $3E(a0),$3E(a1) move.b d2,$36(a1) addq.w #1,d2 move.l (a2)+,$30(a1) move.w (a2)+,$34(a1) lea $40(a1),a1 dbf d1,loc_317D1C move.b #2,$A(a0) move.b #4,$34(a0) loc_317D7A: ; ... move.w $3E(a0),a1 btst #1,$2B(a1) beq.w DeleteObject move.w 8(a1),d0 move.w d0,8(a0) move.w $C(a1),d1 move.w d1,$C(a0) lea $10(a0),a2 lea byte_317EF0(pc),a3 moveq #0,d5 loc_317DA2: ; ... move.w $38(a0),d2 move.b (a3,d2.w),d5 bpl.s loc_317DB2 clr.w $38(a0) bra.s loc_317DA2 ; --------------------------------------------------------------------------- loc_317DB2: ; ... addq.w #1,$38(a0) lea word_317EB0(pc),a6 move.b $34(a0),d6 jsr routine_317E9A(pc) move.w d2,(a2)+ move.w d3,(a2)+ move.w d5,(a2)+ add.w #$20,d6 jsr routine_317E9A(pc) move.w d2,(a2)+ move.w d3,(a2)+ move.w d5,(a2)+ moveq #$12,d0 btst #0,$22(a1) beq.s loc_317DE2 neg.w d0 loc_317DE2: ; ... add.b d0,$34(a0) move.w #$80,d0 bra.w loc_312DBC ; --------------------------------------------------------------------------- loc_317DEE: ; ... move.w $3E(a0),a1 btst #1,$2B(a1) beq.w DeleteObject cmp.w #2,($FFFFFF70).w beq.s loc_317E12 lea ($FFFFEED2).w,a5 lea ($FFFFE500).w,a6 tst.b $3F(a0) beq.s loc_317E1A loc_317E12: ; ... lea ($FFFFEED6).w,a5 lea ($FFFFE600).w,a6 loc_317E1A: ; ... move.b $36(a0),d1 lsl.b #2,d1 move.w d1,d2 add.w d1,d1 add.w d2,d1 move.w (a5),d0 sub.b d1,d0 lea (a6,d0.w),a2 move.w (a2)+,d0 move.w (a2)+,d1 move.w d0,8(a0) move.w d1,$C(a0) lea $10(a0),a2 move.l $30(a0),a3 loc_317E42: ; ... move.w $38(a0),d2 move.b (a3,d2.w),d5 bpl.s loc_317E52 clr.w $38(a0) bra.s loc_317E42 ; --------------------------------------------------------------------------- loc_317E52: ; ... swap d5 add.b $35(a0),d2 move.b (a3,d2.w),d5 addq.w #1,$38(a0) lea word_317EB0(pc),a6 move.b $34(a0),d6 jsr routine_317E9A(pc) move.w d2,(a2)+ move.w d3,(a2)+ move.w d5,(a2)+ add.w #$20,d6 swap d5 jsr routine_317E9A(pc) move.w d2,(a2)+ move.w d3,(a2)+ move.w d5,(a2)+ moveq #2,d0 btst #0,$22(a1) beq.s loc_317E8E neg.w d0 loc_317E8E: ; ... add.b d0,$34(a0) move.w #$80,d0 bra.w loc_312DBC ; =============== S U B R O U T I N E ======================================= routine_317E9A: ; ... and.w #$3E,d6 move.b (a6,d6.w),d2 move.b 1(a6,d6.w),d3 ext.w d2 ext.w d3 add.w d0,d2 add.w d1,d3 rts ; End of function routine_317E9A ; --------------------------------------------------------------------------- word_317EB0: dc.w $F00, $F03, $E06, $D08, $B0B, $80D, $60E; 0 ; ... dc.w $30F, $10, -$3F1, -$6F2, -$8F3, -$BF5, -$DF8; 7 dc.w -$EFA, -$FFD,-$1000, -$F04, -$E07, -$D09, -$B0C; 14 dc.w -$80E, -$60F, -$310, -$10, $3F0, $6F1, $8F2; 21 dc.w $BF4, $DF7, $EF9, $FFC ; 28 byte_317EF0: dc.b 8, 5, 7, 6, 6, 7, 5, 8, 6, 7; 0 ; ... dc.b 7, 6, -1 ; 10 byte_317EFD: dc.b 8, 7, 6, 5, 4, 3, 4, 5, 6, 7; 0 ; ... dc.b -1, 3, 4, 5, 6, 7, 8, 7, 6, 5; 10 dc.b 4 ; 20 byte_317F12: dc.b 8, 7, 6, 5, 4, 3, 2, 3, 4, 5; 0 ; ... dc.b 6, 7, -1, 2, 3, 4, 5, 6, 7, 8; 10 dc.b 7, 6, 5, 4, 3 ; 20 byte_317F2B: dc.b 7, 6, 5, 4, 3, 2, 1, 2, 3, 4; 0 ; ... dc.b 5, 6, -1, 1, 2, 3, 4, 5, 6, 7; 10 dc.b 6, 5, 4, 3, 2 ; 20 Ani_Obj38: dc.w byte_317F46-Ani_Obj38 ; ... byte_317F46: dc.b 0, 5, 0, 5, 1, 5, 2, 5, 3, 5; 0 ; ... dc.b 4, -1 ; 10 Map_Obj38: dc.w byte_317F5E-Map_Obj38 ; 0 ; ... dc.w byte_317F78-Map_Obj38 ; 1 dc.w byte_317F92-Map_Obj38 ; 2 dc.w byte_317FAC-Map_Obj38 ; 3 dc.w byte_317FC6-Map_Obj38 ; 4 dc.w byte_317FE0-Map_Obj38 ; 5 byte_317F5E: dc.b 0, 4,-$10, 5, 0, 0, -1,-$10,-$10, 5; 0 ; ... dc.b 8, 0, 0, 0, 0, 5, $10, 0, -1,-$10; 10 dc.b 0, 5, $18, 0, 0, 0; 20 byte_317F78: dc.b 0, 4,-$10, 5, 0, 4, -1,-$10,-$10, 5; 0 ; ... dc.b 8, 4, 0, 0, 0, 5, $10, 4, -1,-$10; 10 dc.b 0, 5, $18, 4, 0, 0; 20 byte_317F92: dc.b 0, 4,-$10, 5, 0, 8, -1,-$10,-$10, 5; 0 ; ... dc.b 8, 8, 0, 0, 0, 5, $10, 8, -1,-$10; 10 dc.b 0, 5, $18, 8, 0, 0; 20 byte_317FAC: dc.b 0, 4,-$10, 5, 0, $C, -1,-$10,-$10, 5; 0 ; ... dc.b 8, $C, 0, 0, 0, 5, $10, $C, -1,-$10; 10 dc.b 0, 5, $18, $C, 0, 0; 20 byte_317FC6: dc.b 0, 4,-$10, 5, 0, $10, -1,-$10,-$10, 5; 0 ; ... dc.b 8, $10, 0, 0, 0, 5, $10, $10, -1,-$10; 10 dc.b 0, 5, $18, $10, 0, 0; 20 byte_317FE0: dc.b 0, 4,-$20, $B, 0, $14, -1,-$18,-$20, $B; 0 ; ... dc.b 8, $14, 0, 0, 0, $B, $10, $14, -1,-$18; 10 dc.b 0, $B, $18, $14, 0, 0; 20 Map_Obj35: dc.w byte_31800C-Map_Obj35 ; 0 ; ... dc.w byte_31800E-Map_Obj35 ; 1 dc.w byte_318016-Map_Obj35 ; 2 dc.w byte_31801E-Map_Obj35 ; 3 dc.w byte_318026-Map_Obj35 ; 4 dc.w byte_31802E-Map_Obj35 ; 5 dc.w byte_318036-Map_Obj35 ; 6 dc.w byte_31803E-Map_Obj35 ; 7 dc.w byte_318046-Map_Obj35 ; 8 byte_31800C: dc.b 0, 0 ; 0 ; ... byte_31800E: dc.b 0, 1, -8, 1, 0, 0, -1, -4; 0 ; ... byte_318016: dc.b 0, 1, -8, 1, 0, 2, -1, -4; 0 ; ... byte_31801E: dc.b 0, 1, -8, 1, 0, 4, -1, -4; 0 ; ... byte_318026: dc.b 0, 1, -8, 1, 0, 6, -1, -4; 0 ; ... byte_31802E: dc.b 0, 1, -8, 1, 0, 8, -1, -4; 0 ; ... byte_318036: dc.b 0, 1, -8, 5, 0, $A, -1, -8; 0 ; ... byte_31803E: dc.b 0, 1, -8, 5, 0, $E, -1, -8; 0 ; ... byte_318046: dc.b 0, 1,-$10, $F, 0, $12, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- ; ---------------------------------------------------- ; Obj08 - Water Splash, Spindash dust, Skidding dust ; ---------------------------------------------------- Obj08: ; ... moveq #0,d0 move.b $24(a0),d0 move.w Obj08_Index(pc,d0.w),d1 jmp Obj08_Index(pc,d1.w) ; --------------------------------------------------------------------------- Obj08_Index: dc.w Obj08_Init-Obj08_Index ; 0 ; ... dc.w Obj08_Main-Obj08_Index ; 1 dc.w Obj08_Delete-Obj08_Index ; 2 dc.w Obj08_CheckSkid-Obj08_Index ; 3 ; --------------------------------------------------------------------------- Obj08_Init: ; ... addq.b #2,$24(a0) move.l #Map_Obj08,4(a0) or.b #4,1(a0) move.b #1,$18(a0) move.b #$10,$19(a0) move.w #$49C,2(a0) move.w #$B000,$3E(a0) move.w #$9380,$3C(a0) cmp.w #$D100,a0 beq.s loc_3180BA move.b #1,$34(a0) cmp.w #2,($FFFFFF70).w beq.s loc_3180BA move.w #$48C,2(a0) move.w #$B040,$3E(a0) move.w #$9180,$3C(a0) loc_3180BA: ; ... bsr.w Adjust2PArtPointer2_Useless Obj08_Main: ; ... move.w $3E(a0),a2 moveq #0,d0 move.b $1C(a0),d0 add.w d0,d0 move.w Obj08_DisplayModes(pc,d0.w),d1 jmp Obj08_DisplayModes(pc,d1.w) ; --------------------------------------------------------------------------- Obj08_DisplayModes:dc.w Obj08_Display-Obj08_DisplayModes; 0 ; ... dc.w Obj08_MdSplash-Obj08_DisplayModes; 1 dc.w Obj08_MdSpindash-Obj08_DisplayModes; 2 dc.w Obj08_MdSkidding-Obj08_DisplayModes; 3 ; --------------------------------------------------------------------------- Obj08_MdSplash: ; ... move.w ($FFFFF646).w,$C(a0) tst.b $1D(a0) bne.s Obj08_Display move.w 8(a2),8(a0) move.b #0,$22(a0) and.w #$7FFF,2(a0) bra.s Obj08_Display ; --------------------------------------------------------------------------- Obj08_MdSpindash: ; ... cmp.b #$C,$28(a2) bcs.s Obj08_ResetDisplayMode cmp.b #4,$24(a2) bcc.s Obj08_ResetDisplayMode tst.b $39(a2) beq.s Obj08_ResetDisplayMode move.w 8(a2),8(a0) move.w $C(a2),$C(a0) move.b $22(a2),$22(a0) and.b #1,$22(a0) tst.b $34(a0) beq.s loc_318134 sub.w #4,$C(a0) loc_318134: ; ... tst.b $1D(a0) bne.s Obj08_Display and.w #$7FFF,2(a0) tst.w 2(a2) bpl.s Obj08_Display or.w #$8000,2(a0) bra.s Obj08_Display ; --------------------------------------------------------------------------- Obj08_MdSkidding: ; ... cmp.b #$C,$28(a2) bcs.s Obj08_ResetDisplayMode Obj08_Display: ; ... lea (Ani_Obj08).l,a1 jsr AnimateSprite bsr.w Obj08_LoadDPLC jmp DisplaySprite ; --------------------------------------------------------------------------- Obj08_ResetDisplayMode: ; ... move.b #0,$1C(a0) rts ; --------------------------------------------------------------------------- Obj08_Delete: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Obj08_CheckSkid: ; ... move.w $3E(a0),a2 moveq #$10,d1 cmp.b #$D,$1C(a2) beq.s Obj08_SkidDust moveq #6,d1 cmp.b #3,$21(a2) beq.s Obj08_SkidDust move.b #2,$24(a0) move.b #0,$32(a0) rts ; --------------------------------------------------------------------------- Obj08_SkidDust: ; ... subq.b #1,$32(a0) bpl.s loc_318216 move.b #3,$32(a0) bsr.w SingleObjLoad bne.s loc_318216 move.b 0(a0),0(a1) move.w 8(a2),8(a1) move.w $C(a2),$C(a1) tst.b $34(a0) beq.s loc_3181CC subq.w #4,d1 loc_3181CC: ; ... add.w d1,$C(a1) move.b #0,$22(a1) move.b #3,$1C(a1) addq.b #2,$24(a1) move.l 4(a0),4(a1) move.b 1(a0),1(a1) move.b #1,$18(a1) move.b #4,$19(a1) move.w 2(a0),2(a1) move.w $3E(a0),$3E(a1) and.w #$7FFF,2(a1) tst.w 2(a2) bpl.s loc_318216 or.w #$8000,2(a1) loc_318216: ; ... bsr.s Obj08_LoadDPLC rts ; =============== S U B R O U T I N E ======================================= Obj08_LoadDPLC: ; ... moveq #0,d0 move.b $1A(a0),d0 cmp.b $30(a0),d0 beq.s return_31826C move.b d0,$30(a0) lea (DPLC_SplashDust).l,a2 add.w d0,d0 add.w (a2,d0.w),a2 move.w (a2)+,d5 subq.w #1,d5 bmi.s return_31826C move.w $3C(a0),d4 loc_318240: ; ... moveq #0,d1 move.w (a2)+,d1 move.w d1,d3 lsr.w #8,d3 and.w #$F0,d3 add.w #$10,d3 and.w #$FFF,d1 lsl.l #5,d1 add.l #S2_ArtUnc_Splash,d1 ; S2_ArtUnc_Splash move.w d4,d2 add.w d3,d4 add.w d3,d4 jsr QueueDMATransfer dbf d5,loc_318240 return_31826C: ; ... rts ; End of function Obj08_LoadDPLC ; --------------------------------------------------------------------------- Ani_Obj08: dc.w Obj08Ani_Null-Ani_Obj08 ; 0 ; ... dc.w Obj08Ani_Splash-Ani_Obj08 ; 1 dc.w Obj08Ani_Spindash-Ani_Obj08 ; 2 dc.w Obj08Ani_Skid-Ani_Obj08 ; 3 Obj08Ani_Null: dc.b $1F, 0,$FF ; 0 ; ... Obj08Ani_Splash:dc.b 3, 1, 2, 3, 4, 5, 6, 7, 8, 9,$FD, 0; 0 ; ... Obj08Ani_Spindash:dc.b 1, $A, $B, $C, $D, $E, $F,$10,$FF; 0 ; ... Obj08Ani_Skid: dc.b 3,$11,$12,$13,$14,$FC ; 0 ; ... Map_Obj08: dc.w word_3182C0-Map_Obj08 ; 0 ; ... dc.w byte_3182C2-Map_Obj08 ; 1 dc.w byte_3182CA-Map_Obj08 ; 2 dc.w byte_3182D2-Map_Obj08 ; 3 dc.w byte_3182DA-Map_Obj08 ; 4 dc.w byte_3182E2-Map_Obj08 ; 5 dc.w byte_3182EA-Map_Obj08 ; 6 dc.w byte_3182F2-Map_Obj08 ; 7 dc.w byte_3182FA-Map_Obj08 ; 8 dc.w byte_318302-Map_Obj08 ; 9 dc.w byte_31830A-Map_Obj08 ; 10 dc.w byte_318312-Map_Obj08 ; 11 dc.w byte_31831A-Map_Obj08 ; 12 dc.w byte_318322-Map_Obj08 ; 13 dc.w byte_318330-Map_Obj08 ; 14 dc.w byte_31833E-Map_Obj08 ; 15 dc.w byte_31834C-Map_Obj08 ; 16 dc.w byte_31835A-Map_Obj08 ; 17 dc.w byte_318362-Map_Obj08 ; 18 dc.w byte_31836A-Map_Obj08 ; 19 dc.w byte_318372-Map_Obj08 ; 20 dc.w word_3182C0-Map_Obj08 ; 21 word_3182C0: dc.w 0 ; ... byte_3182C2: dc.b 0, 1, -$E, $D, 0, 0, -1,-$10; 0 ; ... byte_3182CA: dc.b 0, 1,-$1E, $F, 0, 0, -1,-$10; 0 ; ... byte_3182D2: dc.b 0, 1,-$1E, $F, 0, 0, -1,-$10; 0 ; ... byte_3182DA: dc.b 0, 1,-$1E, $F, 0, 0, -1,-$10; 0 ; ... byte_3182E2: dc.b 0, 1,-$1E, $F, 0, 0, -1,-$10; 0 ; ... byte_3182EA: dc.b 0, 1,-$1E, $F, 0, 0, -1,-$10; 0 ; ... byte_3182F2: dc.b 0, 1, -$E, $D, 0, 0, -1,-$10; 0 ; ... byte_3182FA: dc.b 0, 1, -$E, $D, 0, 0, -1,-$10; 0 ; ... byte_318302: dc.b 0, 1, -$E, $D, 0, 0, -1,-$10; 0 ; ... byte_31830A: dc.b 0, 1, 4, $D, 0, 0, -1,-$20; 0 ; ... byte_318312: dc.b 0, 1, 4, $D, 0, 0, -1,-$20; 0 ; ... byte_31831A: dc.b 0, 1, 4, $D, 0, 0, -1,-$20; 0 ; ... byte_318322: dc.b 0, 2, -$C, 1, 0, 0, -1,-$18, 4, $D; 0 ; ... dc.b 0, 2, -1,-$20 ; 10 byte_318330: dc.b 0, 2, -$C, 5, 0, 0, -1,-$18, 4, $D; 0 ; ... dc.b 0, 4, -1,-$20 ; 10 byte_31833E: dc.b 0, 2, -$C, 9, 0, 0, -1,-$20, 4, $D; 0 ; ... dc.b 0, 6, -1,-$20 ; 10 byte_31834C: dc.b 0, 2, -$C, 9, 0, 0, -1,-$20, 4, $D; 0 ; ... dc.b 0, 6, -1,-$20 ; 10 byte_31835A: dc.b 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... byte_318362: dc.b 0, 1, -8, 5, 0, 4, -1, -8; 0 ; ... byte_31836A: dc.b 0, 1, -8, 5, 0, 8, -1, -8; 0 ; ... byte_318372: dc.b 0, 1, -8, 5, 0, $C, -1, -8; 0 ; ... DPLC_SplashDust:dc.w byte_3183A6-DPLC_SplashDust ; 0 ; ... dc.w byte_3183A8-DPLC_SplashDust ; 1 dc.w byte_3183AC-DPLC_SplashDust ; 2 dc.w byte_3183B0-DPLC_SplashDust ; 3 dc.w byte_3183B4-DPLC_SplashDust ; 4 dc.w byte_3183B8-DPLC_SplashDust ; 5 dc.w byte_3183BC-DPLC_SplashDust ; 6 dc.w byte_3183C0-DPLC_SplashDust ; 7 dc.w byte_3183C4-DPLC_SplashDust ; 8 dc.w byte_3183C8-DPLC_SplashDust ; 9 dc.w byte_3183CC-DPLC_SplashDust ; 10 dc.w byte_3183D0-DPLC_SplashDust ; 11 dc.w byte_3183D4-DPLC_SplashDust ; 12 dc.w byte_3183D8-DPLC_SplashDust ; 13 dc.w byte_3183DE-DPLC_SplashDust ; 14 dc.w byte_3183E4-DPLC_SplashDust ; 15 dc.w byte_3183EA-DPLC_SplashDust ; 16 dc.w byte_3183F0-DPLC_SplashDust ; 17 dc.w byte_3183F0-DPLC_SplashDust ; 18 dc.w byte_3183F0-DPLC_SplashDust ; 19 dc.w byte_3183F0-DPLC_SplashDust ; 20 dc.w byte_3183F2-DPLC_SplashDust ; 21 byte_3183A6: dc.b 0, 0 ; 0 ; ... byte_3183A8: dc.b 0, 1, $70, 0 ; 0 ; ... byte_3183AC: dc.b 0, 1,-$10, 8 ; 0 ; ... byte_3183B0: dc.b 0, 1,-$10, $18 ; 0 ; ... byte_3183B4: dc.b 0, 1,-$10, $28 ; 0 ; ... byte_3183B8: dc.b 0, 1,-$10, $38 ; 0 ; ... byte_3183BC: dc.b 0, 1,-$10, $48 ; 0 ; ... byte_3183C0: dc.b 0, 1, $70, $58 ; 0 ; ... byte_3183C4: dc.b 0, 1, $70, $60 ; 0 ; ... byte_3183C8: dc.b 0, 1, $70, $68 ; 0 ; ... byte_3183CC: dc.b 0, 1, $70, $70 ; 0 ; ... byte_3183D0: dc.b 0, 1, $70, $78 ; 0 ; ... byte_3183D4: dc.b 0, 1, $70,-$80 ; 0 ; ... byte_3183D8: dc.b 0, 2, $10,-$78, $70,-$76; 0 ; ... byte_3183DE: dc.b 0, 2, $30,-$6E, $70,-$6A; 0 ; ... byte_3183E4: dc.b 0, 2, $50,-$62, $70,-$5C; 0 ; ... byte_3183EA: dc.b 0, 2, $50,-$54, $70,-$4E; 0 ; ... byte_3183F0: dc.b 0, 0 ; 0 ; ... byte_3183F2: dc.b 0, 1,-$10,-$46 ; 0 ; ... ; --------------------------------------------------------------------------- ; ---------------------------------------------- ; Object 7E - Super Knuckles' stars ; ---------------------------------------------- Obj7E: ; ... moveq #0,d0 move.b $24(a0),d0 move.w Obj7E_States(pc,d0.w),d1 jmp Obj7E_States(pc,d1.w) ; --------------------------------------------------------------------------- Obj7E_States: dc.w Obj7E_Init-Obj7E_States,Obj7E_Main-Obj7E_States; 0 ; ... ; --------------------------------------------------------------------------- Obj7E_Init: ; ... addq.b #2,$24(a0) move.l #Map_Obj7E,4(a0) move.b #4,1(a0) move.b #1,$18(a0) move.b #$18,$19(a0) move.w #$5F2,2(a0) bsr.w Adjust2PArtPointer2_Useless btst #7,($FFFFB002).w beq.s Obj7E_Main bset #7,2(a0) Obj7E_Main: ; ... tst.b ($FFFFFE19).w beq.s Obj7E_Delete tst.b $30(a0) beq.s loc_31848E subq.b #1,$1E(a0) bpl.s loc_318476 move.b #1,$1E(a0) addq.b #1,$1A(a0) cmp.b #6,$1A(a0) bcs.s loc_318476 move.b #0,$1A(a0) move.b #0,$30(a0) move.b #1,$31(a0) rts ; --------------------------------------------------------------------------- loc_318476: ; ... tst.b $31(a0) bne.s Obj7E_Display loc_31847C: ; ... move.w ($FFFFB008).w,8(a0) move.w ($FFFFB00C).w,$C(a0) Obj7E_Display: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_31848E: ; ... tst.b ($FFFFB02A).w bne.s loc_3184B0 move.w ($FFFFB014).w,d0 bpl.s loc_31849C neg.w d0 loc_31849C: ; ... cmp.w #$800,d0 bcs.s loc_3184B0 move.b #0,$1A(a0) move.b #1,$30(a0) bra.s loc_31847C ; --------------------------------------------------------------------------- loc_3184B0: ; ... move.b #0,$30(a0) move.b #0,$31(a0) rts ; --------------------------------------------------------------------------- Obj7E_Delete: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Map_Obj7E: dc.w byte_3184D0-Map_Obj7E ; 0 ; ... dc.w byte_3184EA-Map_Obj7E ; 1 dc.w byte_318504-Map_Obj7E ; 2 dc.w byte_3184EA-Map_Obj7E ; 3 dc.w byte_3184D0-Map_Obj7E ; 4 dc.w byte_31851E-Map_Obj7E ; 5 byte_3184D0: dc.b 0, 4, -8, 0, 0, 0, -1, -8, -8, 0; 0 ; ... dc.b 8, 0, 0, 0, 0, 0, $10, 0, -1, -8; 10 dc.b 0, 0, $18, 0, 0, 0; 20 byte_3184EA: dc.b 0, 4,-$10, 5, 0, 1, -1,-$10,-$10, 5; 0 ; ... dc.b 8, 1, 0, 0, 0, 5, $10, 1, -1,-$10; 10 dc.b 0, 5, $18, 1, 0, 0; 20 byte_318504: dc.b 0, 4,-$18, $A, 0, 5, -1,-$18,-$18, $A; 0 ; ... dc.b 8, 5, 0, 0, 0, $A, $10, 5, -1,-$18; 10 dc.b 0, $A, $18, 5, 0, 0; 20 byte_31851E: dc.b 0, 0 ; 0 ; ... ; =============== S U B R O U T I N E ======================================= AnglePos: ; ... ; FUNCTION CHUNK AT 0031867E SIZE 00000204 BYTES move.l #$FFFFD600,($FFFFF796).w cmp.b #$C,$3E(a0) beq.s loc_318538 move.l #$FFFFD900,($FFFFF796).w loc_318538: ; ... move.b $3E(a0),d5 btst #3,$22(a0) beq.s loc_318550 moveq #0,d0 move.b d0,($FFFFF768).w move.b d0,($FFFFF76A).w rts ; --------------------------------------------------------------------------- loc_318550: ; ... moveq #3,d0 move.b d0,($FFFFF768).w move.b d0,($FFFFF76A).w move.b $26(a0),d0 add.b #$20,d0 bpl.s loc_318572 move.b $26(a0),d0 bpl.s loc_31856C subq.b #1,d0 loc_31856C: ; ... add.b #$20,d0 bra.s loc_31857E ; --------------------------------------------------------------------------- loc_318572: ; ... move.b $26(a0),d0 bpl.s loc_31857A addq.b #1,d0 loc_31857A: ; ... add.b #$1F,d0 loc_31857E: ; ... and.b #$C0,d0 cmp.b #$40,d0 beq.w loc_3187D4 cmp.b #$80,d0 beq.w loc_318726 cmp.b #$C0,d0 beq.w Player_WalkVertR move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $16(a0),d0 ext.w d0 add.w d0,d2 move.b $17(a0),d0 ext.w d0 add.w d0,d3 lea ($FFFFF768).w,a4 move.w #$10,a3 move.w #0,d6 bsr.w FindFloor move.w d1,-(sp) move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $16(a0),d0 ext.w d0 add.w d0,d2 move.b $17(a0),d0 ext.w d0 neg.w d0 add.w d0,d3 lea ($FFFFF76A).w,a4 move.w #$10,a3 move.w #0,d6 bsr.w FindFloor move.w (sp)+,d0 bsr.w Player_Angle tst.w d1 beq.s return_318608 bpl.s loc_31860A cmp.w #-$E,d1 blt.s return_318608 add.w d1,$C(a0) return_318608: ; ... rts ; --------------------------------------------------------------------------- loc_31860A: ; ... move.b $10(a0),d0 bpl.s loc_318612 neg.b d0 loc_318612: ; ... addq.b #4,d0 cmp.b #$E,d0 bcs.s loc_31861E move.b #$E,d0 loc_31861E: ; ... cmp.b d0,d1 bgt.s loc_318628 loc_318622: ; ... add.w d1,$C(a0) rts ; --------------------------------------------------------------------------- loc_318628: ; ... tst.b $38(a0) bne.s loc_318622 bset #1,$22(a0) bclr #5,$22(a0) move.b #1,$1D(a0) rts ; End of function AnglePos ; Subroutine to change the player's angle as he walks along the floor ; =============== S U B R O U T I N E ======================================= Player_Angle: ; ... move.b ($FFFFF76A).w,d2 cmp.w d0,d1 ble.s loc_318650 move.b ($FFFFF768).w,d2 move.w d0,d1 loc_318650: ; ... btst #0,d2 bne.s loc_31866C move.b d2,d0 sub.b $26(a0),d0 bpl.s loc_318660 neg.b d0 loc_318660: ; ... cmp.b #$20,d0 bcc.s loc_31866C move.b d2,$26(a0) rts ; --------------------------------------------------------------------------- loc_31866C: ; ... move.b $26(a0),d2 add.b #$20,d2 and.b #$C0,d2 move.b d2,$26(a0) rts ; End of function Player_Angle ; --------------------------------------------------------------------------- ; --------------------------------------------------------------------------- ; Subroutine allowing the player to walk up a vertical slope/wall to his right ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR AnglePos Player_WalkVertR: ; ... move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $17(a0),d0 ext.w d0 neg.w d0 add.w d0,d2 move.b $16(a0),d0 ext.w d0 add.w d0,d3 lea ($FFFFF768).w,a4 move.w #$10,a3 move.w #0,d6 bsr.w FindWall move.w d1,-(sp) move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $17(a0),d0 ext.w d0 add.w d0,d2 move.b $16(a0),d0 ext.w d0 add.w d0,d3 lea ($FFFFF76A).w,a4 move.w #$10,a3 move.w #0,d6 bsr.w FindWall move.w (sp)+,d0 bsr.w Player_Angle tst.w d1 beq.s return_3186EC bpl.s loc_3186EE cmp.w #-$E,d1 blt.s return_3186EC add.w d1,8(a0) return_3186EC: ; ... rts ; --------------------------------------------------------------------------- loc_3186EE: ; ... move.b $12(a0),d0 bpl.s loc_3186F6 neg.b d0 loc_3186F6: ; ... addq.b #4,d0 cmp.b #$E,d0 bcs.s loc_318702 move.b #$E,d0 loc_318702: ; ... cmp.b d0,d1 bgt.s loc_31870C loc_318706: ; ... add.w d1,8(a0) rts ; --------------------------------------------------------------------------- loc_31870C: ; ... tst.b $38(a0) bne.s loc_318706 bset #1,$22(a0) bclr #5,$22(a0) move.b #1,$1D(a0) rts ; --------------------------------------------------------------------------- loc_318726: ; ... move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $16(a0),d0 ext.w d0 sub.w d0,d2 eor.w #$F,d2 move.b $17(a0),d0 ext.w d0 add.w d0,d3 lea ($FFFFF768).w,a4 move.w #-$10,a3 move.w #$800,d6 bsr.w FindFloor move.w d1,-(sp) move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $16(a0),d0 ext.w d0 sub.w d0,d2 eor.w #$F,d2 move.b $17(a0),d0 ext.w d0 sub.w d0,d3 lea ($FFFFF76A).w,a4 move.w #$FFF0,a3 move.w #$800,d6 bsr.w FindFloor move.w (sp)+,d0 bsr.w Player_Angle tst.w d1 beq.s return_31879A bpl.s loc_31879C cmp.w #-$E,d1 blt.s return_31879A sub.w d1,$C(a0) return_31879A: ; ... rts ; --------------------------------------------------------------------------- loc_31879C: ; ... move.b $10(a0),d0 bpl.s loc_3187A4 neg.b d0 loc_3187A4: ; ... addq.b #4,d0 cmp.b #$E,d0 bcs.s loc_3187B0 move.b #$E,d0 loc_3187B0: ; ... cmp.b d0,d1 bgt.s loc_3187BA loc_3187B4: ; ... sub.w d1,$C(a0) rts ; --------------------------------------------------------------------------- loc_3187BA: ; ... tst.b $38(a0) bne.s loc_3187B4 bset #1,$22(a0) bclr #5,$22(a0) move.b #1,$1D(a0) rts ; --------------------------------------------------------------------------- loc_3187D4: ; ... move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $17(a0),d0 ext.w d0 sub.w d0,d2 move.b $16(a0),d0 ext.w d0 sub.w d0,d3 eor.w #$F,d3 lea ($FFFFF768).w,a4 move.w #$FFF0,a3 move.w #$400,d6 bsr.w FindWall move.w d1,-(sp) move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $17(a0),d0 ext.w d0 add.w d0,d2 move.b $16(a0),d0 ext.w d0 sub.w d0,d3 eor.w #$F,d3 lea ($FFFFF76A).w,a4 move.w #$FFF0,a3 move.w #$400,d6 bsr.w FindWall move.w (sp)+,d0 bsr.w Player_Angle tst.w d1 beq.s return_318848 bpl.s loc_31884A cmp.w #$FFF2,d1 blt.s return_318848 sub.w d1,8(a0) return_318848: ; ... rts ; --------------------------------------------------------------------------- loc_31884A: ; ... move.b $12(a0),d0 bpl.s loc_318852 neg.b d0 loc_318852: ; ... addq.b #4,d0 cmp.b #$E,d0 bcs.s loc_31885E move.b #$E,d0 loc_31885E: ; ... cmp.b d0,d1 bgt.s loc_318868 loc_318862: ; ... sub.w d1,8(a0) rts ; --------------------------------------------------------------------------- loc_318868: ; ... tst.b $38(a0) bne.s loc_318862 bset #1,$22(a0) bclr #5,$22(a0) move.b #1,$1D(a0) rts ; END OF FUNCTION CHUNK FOR AnglePos ; =============== S U B R O U T I N E ======================================= Floor_ChkTile: ; ... move.w d2,d0 add.w d0,d0 and.w #$F00,d0 move.w d3,d1 lsr.w #3,d1 move.w d1,d4 lsr.w #4,d1 and.w #$7F,d1 add.w d1,d0 moveq #-1,d1 clr.w d1 lea ($FFFF8000).w,a1 move.b (a1,d0.w),d1 add.w d1,d1 move.w word_3188BC(pc,d1.w),d1 move.w d2,d0 and.w #$70,d0 add.w d0,d1 and.w #$E,d4 add.w d4,d1 move.l d1,a1 rts ; End of function Floor_ChkTile ; --------------------------------------------------------------------------- ; =========================================================================== ; precalculated values for Floor_ChkTile ; (Sonic 1 calculated it every time instead of using a table) word_3188BC: dc.w 0, $80, $100, $180 ; 0 ; ... dc.w $200, $280, $300, $380 ; 4 dc.w $400, $480, $500, $580 ; 8 dc.w $600, $680, $700, $780 ; 12 dc.w $800, $880, $900, $980 ; 16 dc.w $A00, $A80, $B00, $B80 ; 20 dc.w $C00, $C80, $D00, $D80 ; 24 dc.w $E00, $E80, $F00, $F80 ; 28 dc.w $1000, $1080, $1100, $1180 ; 32 dc.w $1200, $1280, $1300, $1380 ; 36 dc.w $1400, $1480, $1500, $1580 ; 40 dc.w $1600, $1680, $1700, $1780 ; 44 dc.w $1800, $1880, $1900, $1980 ; 48 dc.w $1A00, $1A80, $1B00, $1B80 ; 52 dc.w $1C00, $1C80, $1D00, $1D80 ; 56 dc.w $1E00, $1E80, $1F00, $1F80 ; 60 dc.w $2000, $2080, $2100, $2180 ; 64 dc.w $2200, $2280, $2300, $2380 ; 68 dc.w $2400, $2480, $2500, $2580 ; 72 dc.w $2600, $2680, $2700, $2780 ; 76 dc.w $2800, $2880, $2900, $2980 ; 80 dc.w $2A00, $2A80, $2B00, $2B80 ; 84 dc.w $2C00, $2C80, $2D00, $2D80 ; 88 dc.w $2E00, $2E80, $2F00, $2F80 ; 92 dc.w $3000, $3080, $3100, $3180 ; 96 dc.w $3200, $3280, $3300, $3380 ; 100 dc.w $3400, $3480, $3500, $3580 ; 104 dc.w $3600, $3680, $3700, $3780 ; 108 dc.w $3800, $3880, $3900, $3980 ; 112 dc.w $3A00, $3A80, $3B00, $3B80 ; 116 dc.w $3C00, $3C80, $3D00, $3D80 ; 120 dc.w $3E00, $3E80, $3F00, $3F80 ; 124 dc.w $4000, $4080, $4100, $4180 ; 128 dc.w $4200, $4280, $4300, $4380 ; 132 dc.w $4400, $4480, $4500, $4580 ; 136 dc.w $4600, $4680, $4700, $4780 ; 140 dc.w $4800, $4880, $4900, $4980 ; 144 dc.w $4A00, $4A80, $4B00, $4B80 ; 148 dc.w $4C00, $4C80, $4D00, $4D80 ; 152 dc.w $4E00, $4E80, $4F00, $4F80 ; 156 dc.w $5000, $5080, $5100, $5180 ; 160 dc.w $5200, $5280, $5300, $5380 ; 164 dc.w $5400, $5480, $5500, $5580 ; 168 dc.w $5600, $5680, $5700, $5780 ; 172 dc.w $5800, $5880, $5900, $5980 ; 176 dc.w $5A00, $5A80, $5B00, $5B80 ; 180 dc.w $5C00, $5C80, $5D00, $5D80 ; 184 dc.w $5E00, $5E80, $5F00, $5F80 ; 188 dc.w $6000, $6080, $6100, $6180 ; 192 dc.w $6200, $6280, $6300, $6380 ; 196 dc.w $6400, $6480, $6500, $6580 ; 200 dc.w $6600, $6680, $6700, $6780 ; 204 dc.w $6800, $6880, $6900, $6980 ; 208 dc.w $6A00, $6A80, $6B00, $6B80 ; 212 dc.w $6C00, $6C80, $6D00, $6D80 ; 216 dc.w $6E00, $6E80, $6F00, $6F80 ; 220 dc.w $7000, $7080, $7100, $7180 ; 224 dc.w $7200, $7280, $7300, $7380 ; 228 dc.w $7400, $7480, $7500, $7580 ; 232 dc.w $7600, $7680, $7700, $7780 ; 236 dc.w $7800, $7880, $7900, $7980 ; 240 dc.w $7A00, $7A80, $7B00, $7B80 ; 244 dc.w $7C00, $7C80, $7D00, $7D80 ; 248 dc.w $7E00, $7E80, $7F00, $7F80 ; 252 ; =============== S U B R O U T I N E ======================================= FindFloor: ; ... bsr.w Floor_ChkTile move.w (a1),d0 move.w d0,d4 and.w #$3FF,d0 beq.s loc_318ACE btst d5,d4 bne.s loc_318ADC loc_318ACE: ; ... add.w a3,d2 bsr.w FindFloor2 sub.w a3,d2 add.w #$10,d1 rts ; --------------------------------------------------------------------------- loc_318ADC: ; ... move.l ($FFFFF796).w,a2 move.b (a2,d0.w),d0 and.w #$FF,d0 beq.s loc_318ACE lea (S2_ColCurveMap).l,a2 move.b (a2,d0.w),(a4) lsl.w #4,d0 move.w d3,d1 btst #$A,d4 beq.s loc_318B02 not.w d1 neg.b (a4) loc_318B02: ; ... btst #$B,d4 beq.s loc_318B12 add.b #$40,(a4) neg.b (a4) sub.b #$40,(a4) loc_318B12: ; ... and.w #$F,d1 add.w d0,d1 lea (S2_ColArray).l,a2 move.b (a2,d1.w),d0 ext.w d0 eor.w d6,d4 btst #$B,d4 beq.s loc_318B2E neg.w d0 loc_318B2E: ; ... tst.w d0 beq.s loc_318ACE bmi.s loc_318B4A cmp.b #$10,d0 beq.s loc_318B56 move.w d2,d1 and.w #$F,d1 add.w d1,d0 move.w #$F,d1 sub.w d0,d1 rts ; --------------------------------------------------------------------------- loc_318B4A: ; ... move.w d2,d1 and.w #$F,d1 add.w d1,d0 bpl.w loc_318ACE loc_318B56: ; ... sub.w a3,d2 bsr.w FindFloor2 add.w a3,d2 sub.w #$10,d1 rts ; End of function FindFloor ; =============== S U B R O U T I N E ======================================= FindFloor2: ; ... bsr.w Floor_ChkTile move.w (a1),d0 move.w d0,d4 and.w #$3FF,d0 beq.s loc_318B76 btst d5,d4 bne.s loc_318B84 loc_318B76: ; ... move.w #$F,d1 move.w d2,d0 and.w #$F,d0 sub.w d0,d1 rts ; --------------------------------------------------------------------------- loc_318B84: ; ... move.l ($FFFFF796).w,a2 move.b (a2,d0.w),d0 and.w #$FF,d0 beq.s loc_318B76 lea (S2_ColCurveMap).l,a2 move.b (a2,d0.w),(a4) lsl.w #4,d0 move.w d3,d1 btst #$A,d4 beq.s loc_318BAA not.w d1 neg.b (a4) loc_318BAA: ; ... btst #$B,d4 beq.s loc_318BBA add.b #$40,(a4) neg.b (a4) sub.b #$40,(a4) loc_318BBA: ; ... and.w #$F,d1 add.w d0,d1 lea (S2_ColArray).l,a2 move.b (a2,d1.w),d0 ext.w d0 eor.w d6,d4 btst #$B,d4 beq.s loc_318BD6 neg.w d0 loc_318BD6: ; ... tst.w d0 beq.s loc_318B76 bmi.s loc_318BEC move.w d2,d1 and.w #$F,d1 add.w d1,d0 move.w #$F,d1 sub.w d0,d1 rts ; --------------------------------------------------------------------------- loc_318BEC: ; ... move.w d2,d1 and.w #$F,d1 add.w d1,d0 bpl.w loc_318B76 not.w d1 rts ; End of function FindFloor2 ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR RingCheckFloorDist Obj_CheckInFloor: ; ... bsr.w Floor_ChkTile move.w (a1),d0 move.w d0,d4 and.w #$3FF,d0 beq.s loc_318C0E btst d5,d4 bne.s loc_318C14 loc_318C0E: ; ... move.w #$10,d1 rts ; --------------------------------------------------------------------------- loc_318C14: ; ... move.l ($FFFFF796).w,a2 move.b (a2,d0.w),d0 and.w #$FF,d0 beq.s loc_318C0E lea (S2_ColCurveMap).l,a2 move.b (a2,d0.w),(a4) lsl.w #4,d0 move.w d3,d1 btst #$A,d4 beq.s loc_318C3A not.w d1 neg.b (a4) loc_318C3A: ; ... btst #$B,d4 beq.s loc_318C4A add.b #$40,(a4) neg.b (a4) sub.b #$40,(a4) loc_318C4A: ; ... and.w #$F,d1 add.w d0,d1 lea (S2_ColArray).l,a2 move.b (a2,d1.w),d0 ext.w d0 eor.w d6,d4 btst #$B,d4 beq.s loc_318C66 neg.w d0 loc_318C66: ; ... tst.w d0 beq.s loc_318C0E bmi.s loc_318C82 cmp.b #$10,d0 beq.s loc_318C8E move.w d2,d1 and.w #$F,d1 add.w d1,d0 move.w #$F,d1 sub.w d0,d1 rts ; --------------------------------------------------------------------------- loc_318C82: ; ... move.w d2,d1 and.w #$F,d1 add.w d1,d0 bpl.w loc_318C0E loc_318C8E: ; ... sub.w a3,d2 bsr.w FindFloor2 add.w a3,d2 sub.w #$10,d1 rts ; END OF FUNCTION CHUNK FOR RingCheckFloorDist ; =============== S U B R O U T I N E ======================================= FindWall: ; ... bsr.w Floor_ChkTile move.w (a1),d0 move.w d0,d4 and.w #$3FF,d0 beq.s loc_318CAE btst d5,d4 bne.s loc_318CBC loc_318CAE: ; ... add.w a3,d3 bsr.w FindWall2 sub.w a3,d3 add.w #$10,d1 rts ; --------------------------------------------------------------------------- loc_318CBC: ; ... move.l ($FFFFF796).w,a2 move.b (a2,d0.w),d0 and.w #$FF,d0 beq.s loc_318CAE lea (S2_ColCurveMap).l,a2 move.b (a2,d0.w),(a4) lsl.w #4,d0 move.w d2,d1 btst #$B,d4 beq.s loc_318CEA not.w d1 add.b #$40,(a4) neg.b (a4) sub.b #$40,(a4) loc_318CEA: ; ... btst #$A,d4 beq.s loc_318CF2 neg.b (a4) loc_318CF2: ; ... and.w #$F,d1 add.w d0,d1 lea (S2_ColArray2).l,a2 move.b (a2,d1.w),d0 ext.w d0 eor.w d6,d4 btst #$A,d4 beq.s loc_318D0E neg.w d0 loc_318D0E: ; ... tst.w d0 beq.s loc_318CAE bmi.s loc_318D2A cmp.b #$10,d0 beq.s loc_318D36 move.w d3,d1 and.w #$F,d1 add.w d1,d0 move.w #$F,d1 sub.w d0,d1 rts ; --------------------------------------------------------------------------- loc_318D2A: ; ... move.w d3,d1 and.w #$F,d1 add.w d1,d0 bpl.w loc_318CAE loc_318D36: ; ... sub.w a3,d3 bsr.w FindWall2 add.w a3,d3 sub.w #$10,d1 rts ; End of function FindWall ; =============== S U B R O U T I N E ======================================= FindWall2: ; ... bsr.w Floor_ChkTile move.w (a1),d0 move.w d0,d4 and.w #$3FF,d0 beq.s loc_318D56 btst d5,d4 bne.s loc_318D64 loc_318D56: ; ... move.w #$F,d1 move.w d3,d0 and.w #$F,d0 sub.w d0,d1 rts ; --------------------------------------------------------------------------- loc_318D64: ; ... move.l ($FFFFF796).w,a2 move.b (a2,d0.w),d0 and.w #$FF,d0 beq.s loc_318D56 lea (S2_ColCurveMap).l,a2 move.b (a2,d0.w),(a4) lsl.w #4,d0 move.w d2,d1 btst #$B,d4 beq.s loc_318D92 not.w d1 add.b #$40,(a4) neg.b (a4) sub.b #$40,(a4) loc_318D92: ; ... btst #$A,d4 beq.s loc_318D9A neg.b (a4) loc_318D9A: ; ... and.w #$F,d1 add.w d0,d1 lea (S2_ColArray2).l,a2 move.b (a2,d1.w),d0 ext.w d0 eor.w d6,d4 btst #$A,d4 beq.s loc_318DB6 neg.w d0 loc_318DB6: ; ... tst.w d0 beq.s loc_318D56 bmi.s loc_318DCC move.w d3,d1 and.w #$F,d1 add.w d1,d0 move.w #$F,d1 sub.w d0,d1 rts ; --------------------------------------------------------------------------- loc_318DCC: ; ... move.w d3,d1 and.w #$F,d1 add.w d1,d0 bpl.w loc_318D56 not.w d1 rts ; End of function FindWall2 ; --------------------------------------------------------------------------- ; Unused floor/wall subroutine - logs something to do with collision ; --------------------------------------------------------------------------- ; =============== S U B R O U T I N E ======================================= FloorLog_Unk: ; ... rts ; End of function FloorLog_Unk ; --------------------------------------------------------------------------- lea (S2_ColArray).l,a1 lea (S2_ColArray).l,a2 move.w #$FF,d3 loc_318DEE: ; ... moveq #$10,d5 move.w #$F,d2 loc_318DF4: ; ... moveq #0,d4 move.w #$F,d1 loc_318DFA: ; ... move.w (a1)+,d0 lsr.l d5,d0 addx.w d4,d4 dbf d1,loc_318DFA move.w d4,(a2)+ suba.w #$20,a1 subq.w #1,d5 dbf d2,loc_318DF4 add.w #$20,a1 dbf d3,loc_318DEE lea (S2_ColArray).l,a1 lea (S2_ColArray2).l,a2 bsr.s FloorLog_Unk2 lea (S2_ColArray).l,a1 lea (S2_ColArray).l,a2 ; =============== S U B R O U T I N E ======================================= FloorLog_Unk2: ; ... move.w #$FFF,d3 loc_318E36: ; ... moveq #0,d2 move.w #$F,d1 move.w (a1)+,d0 beq.s loc_318E64 bmi.s loc_318E4E loc_318E42: ; ... lsr.w #1,d0 bcc.s loc_318E48 addq.b #1,d2 loc_318E48: ; ... dbf d1,loc_318E42 bra.s loc_318E66 ; --------------------------------------------------------------------------- loc_318E4E: ; ... cmp.w #$FFFF,d0 beq.s loc_318E60 loc_318E54: ; ... lsl.w #1,d0 bcc.s loc_318E5A subq.b #1,d2 loc_318E5A: ; ... dbf d1,loc_318E54 bra.s loc_318E66 ; --------------------------------------------------------------------------- loc_318E60: ; ... move.w #$10,d0 loc_318E64: ; ... move.w d0,d2 loc_318E66: ; ... move.b d2,(a2)+ dbf d3,loc_318E36 rts ; End of function FloorLog_Unk2 ; --------------------------------------------------------------------------- ; Subroutine to calculate how much space is in front of Sonic or Tails on the ground ; d0 = some input angle ; d1 = output about how many pixels (up to some high enough amount) ; --------------------------------------------------------------------------- ; =============== S U B R O U T I N E ======================================= ; Also known as Sonic_WalkSpeed in Sonic 1 CalcRoomInFront: ; ... ; FUNCTION CHUNK AT 00318FD0 SIZE 00000018 BYTES ; FUNCTION CHUNK AT 003192C6 SIZE 00000020 BYTES move.l #$FFFFD600,($FFFFF796).w cmp.b #$C,$3E(a0) beq.s loc_318E86 move.l #$FFFFD900,($FFFFF796).w loc_318E86: ; ... move.b $3F(a0),d5 move.l 8(a0),d3 move.l $C(a0),d2 move.w $10(a0),d1 ext.l d1 asl.l #8,d1 add.l d1,d3 move.w $12(a0),d1 ext.l d1 asl.l #8,d1 add.l d1,d2 swap d2 swap d3 move.b d0,($FFFFF768).w move.b d0,($FFFFF76A).w move.b d0,d1 add.b #$20,d0 bpl.s loc_318EC6 move.b d1,d0 bpl.s loc_318EC0 subq.b #1,d0 loc_318EC0: ; ... add.b #$20,d0 bra.s loc_318ED0 ; --------------------------------------------------------------------------- loc_318EC6: ; ... move.b d1,d0 bpl.s loc_318ECC addq.b #1,d0 loc_318ECC: ; ... add.b #$1F,d0 loc_318ED0: ; ... and.b #$C0,d0 beq.w loc_318FD0 cmp.b #$80,d0 beq.w CheckSlopeDist and.b #$38,d1 bne.s loc_318EE8 addq.w #8,d2 loc_318EE8: ; ... cmp.b #$40,d0 beq.w CheckLeftWallDist_Part2 bra.w CheckRightWallDist_Part2 ; End of function CalcRoomInFront ; =============== S U B R O U T I N E ======================================= CalcRoomOverHead: ; ... move.l #$FFFFD600,($FFFFF796).w cmp.b #$C,$3E(a0) beq.s loc_318F0C move.l #$FFFFD900,($FFFFF796).w loc_318F0C: ; ... move.b $3F(a0),d5 move.b d0,($FFFFF768).w move.b d0,($FFFFF76A).w add.b #$20,d0 and.b #$C0,d0 cmp.b #$40,d0 beq.w CheckLeftCeilingDist cmp.b #$80,d0 beq.w CheckCeilingDist cmp.b #$C0,d0 beq.w CheckRightCeilingDist ; End of function CalcRoomOverHead ; =============== S U B R O U T I N E ======================================= Player_CheckFloor: ; ... move.l #$FFFFD600,($FFFFF796).w cmp.b #$C,$3E(a0) beq.s loc_318F50 move.l #$FFFFD900,($FFFFF796).w loc_318F50: ; ... move.b $3E(a0),d5 move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $16(a0),d0 ext.w d0 add.w d0,d2 move.b $17(a0),d0 ext.w d0 add.w d0,d3 lea ($FFFFF768).w,a4 move.w #$10,a3 move.w #0,d6 bsr.w FindFloor move.w d1,-(sp) move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $16(a0),d0 ext.w d0 add.w d0,d2 move.b $17(a0),d0 ext.w d0 sub.w d0,d3 lea ($FFFFF76A).w,a4 move.w #$10,a3 move.w #0,d6 bsr.w FindFloor move.w (sp)+,d0 move.b #0,d2 loc_318FB0: ; ... move.b ($FFFFF76A).w,d3 cmp.w d0,d1 ble.s loc_318FBE move.b ($FFFFF768).w,d3 exg d0,d1 loc_318FBE: ; ... btst #0,d3 beq.s return_318FC6 move.b d2,d3 ; Some unused code here... return_318FC6: ; ... rts ; End of function Player_CheckFloor ; --------------------------------------------------------------------------- move.w $C(a0),d2 move.w 8(a0),d3 ; START OF FUNCTION CHUNK FOR CalcRoomInFront loc_318FD0: ; ... add.w #$A,d2 lea ($FFFFF768).w,a4 move.w #$10,a3 move.w #0,d6 bsr.w FindFloor move.b #0,d2 ; END OF FUNCTION CHUNK FOR CalcRoomInFront ; START OF FUNCTION CHUNK FOR CheckRightWallDist loc_318FE8: ; ... move.b ($FFFFF768).w,d3 btst #0,d3 beq.s return_318FF4 move.b d2,d3 return_318FF4: ; ... rts ; END OF FUNCTION CHUNK FOR CheckRightWallDist ; =============== S U B R O U T I N E ======================================= sub_318FF6: ; ... move.b $17(a0),d0 ext.w d0 add.w d0,d2 lea ($FFFFF768).w,a4 move.w #$10,a3 move.w #0,d6 bsr.w FindFloor move.b #0,d2 bra.s loc_318FE8 ; End of function sub_318FF6 ; --------------------------------------------------------------------------- ; More unused code move.w 8(a0),d3 move.w $C(a0),d2 subq.w #4,d2 move.l #$FFFFD600,($FFFFF796).w cmp.b #$D,$3F(a0) beq.s loc_319036 move.l #$FFFFD900,($FFFFF796).w loc_319036: ; ... lea ($FFFFF768).w,a4 move.b #0,(a4) move.w #$10,a3 move.w #0,d6 move.b $3F(a0),d5 bsr.w FindFloor move.b ($FFFFF768).w,d3 btst #0,d3 beq.s return_31905C move.b #0,d3 return_31905C: ; ... rts ; =============== S U B R O U T I N E ======================================= ChkFloorEdge: ; ... move.w 8(a0),d3 move.w $C(a0),d2 moveq #0,d0 move.b $16(a0),d0 ext.w d0 add.w d0,d2 ChkFloorEdge_Part2: ; ... move.l #$FFFFD600,($FFFFF796).w cmp.b #$C,$3E(a0) beq.s loc_319088 move.l #$FFFFD900,($FFFFF796).w loc_319088: ; ... lea ($FFFFF768).w,a4 move.b #0,(a4) move.w #$10,a3 move.w #0,d6 move.b $3E(a0),d5 bsr.w FindFloor move.b ($FFFFF768).w,d3 btst #0,d3 beq.s return_3190AE move.b #0,d3 return_3190AE: ; ... rts ; End of function ChkFloorEdge ; =============== S U B R O U T I N E ======================================= sub_3190B0: ; ... move.w 8(a1),d3 move.w $C(a1),d2 moveq #0,d0 move.b $16(a1),d0 ext.w d0 add.w d0,d2 move.l #$FFFFD600,($FFFFF796).w cmp.b #$C,$3E(a1) beq.s loc_3190DA move.l #$FFFFD900,($FFFFF796).w loc_3190DA: ; ... lea ($FFFFF768).w,a4 move.b #0,(a4) move.w #$10,a3 move.w #0,d6 move.b $3E(a1),d5 bsr.w FindFloor move.b ($FFFFF768).w,d3 btst #0,d3 beq.s return_319100 move.b #0,d3 return_319100: ; ... rts ; End of function sub_3190B0 ; =============== S U B R O U T I N E ======================================= ; Also known as ObjHitFloor in Sonic 1 ObjCheckFloorDist: ; ... move.w 8(a0),d3 move.w $C(a0),d2 move.b $16(a0),d0 ext.w d0 add.w d0,d2 lea ($FFFFF768).w,a4 move.b #0,(a4) move.w #$10,a3 move.w #0,d6 moveq #$C,d5 bsr.w FindFloor move.b ($FFFFF768).w,d3 btst #0,d3 beq.s return_319136 move.b #0,d3 return_319136: ; ... rts ; End of function ObjCheckFloorDist ; =============== S U B R O U T I N E ======================================= FireCheckFloorDist: ; ... move.w 8(a1),d3 move.w $C(a1),d2 move.b $16(a1),d0 ext.w d0 add.w d0,d2 lea ($FFFFF768).w,a4 move.b #0,(a4) move.w #$10,a3 move.w #0,d6 moveq #$C,d5 bra.w FindFloor ; End of function FireCheckFloorDist ; =============== S U B R O U T I N E ======================================= RingCheckFloorDist: ; ... ; FUNCTION CHUNK AT 00318BFC SIZE 000000A0 BYTES move.w 8(a0),d3 move.w $C(a0),d2 move.b $16(a0),d0 ext.w d0 add.w d0,d2 lea ($FFFFF768).w,a4 move.b #0,(a4) move.w #$10,a3 move.w #0,d6 moveq #$C,d5 bra.w Obj_CheckInFloor ; End of function RingCheckFloorDist ; =============== S U B R O U T I N E ======================================= CheckRightCeilingDist: ; ... move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $17(a0),d0 ext.w d0 sub.w d0,d2 move.b $16(a0),d0 ext.w d0 add.w d0,d3 lea ($FFFFF768).w,a4 move.w #$10,a3 move.w #0,d6 bsr.w FindWall move.w d1,-(sp) move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $17(a0),d0 ext.w d0 add.w d0,d2 move.b $16(a0),d0 ext.w d0 add.w d0,d3 lea ($FFFFF76A).w,a4 move.w #$10,a3 move.w #0,d6 bsr.w FindWall move.w (sp)+,d0 move.b #$C0,d2 bra.w loc_318FB0 ; End of function CheckRightCeilingDist ; =============== S U B R O U T I N E ======================================= CheckRightWallDist: ; ... ; FUNCTION CHUNK AT 00318FE8 SIZE 0000000E BYTES move.w $C(a0),d2 move.w 8(a0),d3 CheckRightWallDist_Part2: ; ... add.w #$A,d3 lea ($FFFFF768).w,a4 move.w #$10,a3 move.w #0,d6 bsr.w FindWall move.b #$C0,d2 bra.w loc_318FE8 ; End of function CheckRightWallDist ; --------------------------------------------------------------------------- ; This doesn't exist in S2... ; START OF FUNCTION CHUNK FOR sub_315C22 loc_319208: ; ... move.b $17(a0),d0 ext.w d0 add.w d0,d3 lea ($FFFFF768).w,a4 move.w #$10,a3 move.w #0,d6 bsr.w FindWall move.b #$C0,d2 bra.w loc_318FE8 ; END OF FUNCTION CHUNK FOR sub_315C22 ; =============== S U B R O U T I N E ======================================= ObjCheckLeftWallDist: ; ... add.w 8(a0),d3 move.w $C(a0),d2 lea ($FFFFF768).w,a4 move.b #0,(a4) move.w #$10,a3 move.w #0,d6 moveq #$D,d5 bsr.w FindWall move.b ($FFFFF768).w,d3 btst #0,d3 beq.s return_319254 move.b #$C0,d3 return_319254: ; ... rts ; End of function ObjCheckLeftWallDist ; =============== S U B R O U T I N E ======================================= CheckCeilingDist: ; ... move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $16(a0),d0 ext.w d0 sub.w d0,d2 eor.w #$F,d2 move.b $17(a0),d0 ext.w d0 add.w d0,d3 lea ($FFFFF768).w,a4 move.w #$FFF0,a3 move.w #$800,d6 bsr.w FindFloor move.w d1,-(sp) move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $16(a0),d0 ext.w d0 sub.w d0,d2 eor.w #$F,d2 move.b $17(a0),d0 ext.w d0 sub.w d0,d3 lea ($FFFFF76A).w,a4 move.w #$FFF0,a3 move.w #$800,d6 bsr.w FindFloor move.w (sp)+,d0 move.b #$80,d2 bra.w loc_318FB0 ; End of function CheckCeilingDist ; --------------------------------------------------------------------------- move.w $C(a0),d2 move.w 8(a0),d3 ; START OF FUNCTION CHUNK FOR CalcRoomInFront CheckSlopeDist: ; ... sub.w #$A,d2 eor.w #$F,d2 lea ($FFFFF768).w,a4 move.w #-$10,a3 move.w #$800,d6 bsr.w FindFloor move.b #$80,d2 bra.w loc_318FE8 ; END OF FUNCTION CHUNK FOR CalcRoomInFront ; =============== S U B R O U T I N E ======================================= ; Doesn't exist in S2 sub_3192E6: ; ... move.b $17(a0),d0 ext.w d0 sub.w d0,d2 eor.w #$F,d2 lea ($FFFFF768).w,a4 move.w #-$10,a3 move.w #$800,d6 bsr.w FindFloor move.b #$80,d2 loc_319306: bra.w loc_318FE8 ; End of function sub_3192E6 ; =============== S U B R O U T I N E ======================================= ; Also known as ObjHitCeiling in S1 ObjCheckCeilingDist: ; ... move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $16(a0),d0 ext.w d0 sub.w d0,d2 eor.w #$F,d2 lea ($FFFFF768).w,a4 move.w #-$10,a3 move.w #$800,d6 moveq #$D,d5 bsr.w FindFloor move.b ($FFFFF768).w,d3 btst #0,d3 beq.s return_319340 move.b #$80,d3 return_319340: ; ... rts ; End of function ObjCheckCeilingDist ; =============== S U B R O U T I N E ======================================= CheckLeftCeilingDist: ; ... move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $17(a0),d0 ext.w d0 sub.w d0,d2 move.b $16(a0),d0 ext.w d0 sub.w d0,d3 eor.w #$F,d3 lea ($FFFFF768).w,a4 move.w #-$10,a3 move.w #$400,d6 bsr.w FindWall move.w d1,-(sp) move.w $C(a0),d2 move.w 8(a0),d3 moveq #0,d0 move.b $17(a0),d0 ext.w d0 add.w d0,d2 move.b $16(a0),d0 ext.w d0 sub.w d0,d3 eor.w #$F,d3 lea ($FFFFF76A).w,a4 move.w #-$10,a3 move.w #$400,d6 bsr.w FindWall move.w (sp)+,d0 move.b #$40,d2 bra.w loc_318FB0 ; End of function CheckLeftCeilingDist ; =============== S U B R O U T I N E ======================================= CheckLeftWallDist: ; ... move.w $C(a0),d2 move.w 8(a0),d3 CheckLeftWallDist_Part2: ; ... sub.w #$A,d3 eor.w #$F,d3 lea ($FFFFF768).w,a4 move.w #$FFF0,a3 move.w #$400,d6 bsr.w FindWall move.b #$40,d2 bra.w loc_318FE8 ; End of function CheckLeftWallDist ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_315C22 loc_3193D2: ; ... move.b $17(a0),d0 ext.w d0 sub.w d0,d3 eor.w #$F,d3 lea ($FFFFF768).w,a4 move.w #$FFF0,a3 move.w #$400,d6 bsr.w FindWall move.b #$40,d2 bra.w loc_318FE8 ; END OF FUNCTION CHUNK FOR sub_315C22 ; =============== S U B R O U T I N E ======================================= ObjCheckRightWallDist: ; ... add.w 8(a0),d3 move.w $C(a0),d2 lea ($FFFFF768).w,a4 move.b #0,(a4) move.w #$FFF0,a3 move.w #$400,d6 moveq #$D,d5 bsr.w FindWall move.b ($FFFFF768).w,d3 btst #0,d3 beq.s return_319422 move.b #$40,d3 return_319422: ; ... rts ; End of function ObjCheckRightWallDist ; --------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; Object 79 - Star pole / starpost / checkpoint ; ---------------------------------------------------------------------------- Obj79: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_319432(pc,d0.w),d1 jmp off_319432(pc,d1.w) ; --------------------------------------------------------------------------- off_319432: dc.w loc_31943C-off_319432,loc_31949E-off_319432; 0 ; ... dc.w loc_3195A2-off_319432,loc_3195B4-off_319432; 2 dc.w loc_319882-off_319432 ; 4 ; --------------------------------------------------------------------------- loc_31943C: ; ... addq.b #2,$24(a0) move.l #Map_Obj79,4(a0) move.w #$47C,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #8,$19(a0) move.b #5,$18(a0) lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 bclr #7,2(a2,d0.w) btst #0,2(a2,d0.w) bne.s loc_319492 move.b ($FFFFFE30).w,d1 and.b #$7F,d1 move.b $28(a0),d2 and.b #$7F,d2 cmp.b d2,d1 bcs.s loc_31949E loc_319492: ; ... bset #0,2(a2,d0.w) move.b #2,$1C(a0) loc_31949E: ; ... tst.w ($FFFFFE08).w bne.w loc_3195A2 lea ($FFFFB000).w,a3 move.b ($FFFFFE30).w,d1 bsr.s sub_3194C6 tst.w ($FFFFFFDC).w beq.w loc_3195A2 lea ($FFFFB040).w,a3 move.b ($FFFFFEE0).w,d1 bsr.s sub_3194C6 bra.w loc_3195A2 ; =============== S U B R O U T I N E ======================================= sub_3194C6: ; ... and.b #$7F,d1 move.b $28(a0),d2 and.b #$7F,d2 cmp.b d2,d1 bcc.w loc_319594 move.w 8(a3),d0 sub.w 8(a0),d0 add.w #8,d0 cmp.w #$10,d0 bcc.w return_319592 move.w $C(a3),d0 sub.w $C(a0),d0 add.w #$40,d0 cmp.w #$68,d0 bcc.w return_319592 move.w #$A1,d0 jsr PlaySound jsr SingleObjLoad bne.s loc_319578 move.b #$79,0(a1) move.b #6,$24(a1) move.w 8(a0),$30(a1) move.w $C(a0),$32(a1) sub.w #$14,$32(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.b #4,1(a1) move.b #8,$19(a1) move.b #4,$18(a1) move.b #2,$1A(a1) move.w #$20,$36(a1) move.w a0,$3E(a1) tst.w ($FFFFFFDC).w bne.s loc_319578 cmp.b #7,($FFFFFFB1).w beq.s loc_319578 cmp.w #$32,($FFFFFE20).w bcs.s loc_319578 bsr.w Obj79_MakeSpecialStars loc_319578: ; ... move.b #1,$1C(a0) bsr.w sub_31960C lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 bset #0,2(a2,d0.w) return_319592: ; ... rts ; --------------------------------------------------------------------------- loc_319594: ; ... tst.b $1C(a0) bne.s return_3195A0 move.b #2,$1C(a0) return_3195A0: ; ... rts ; End of function sub_3194C6 ; --------------------------------------------------------------------------- loc_3195A2: ; ... lea (Ani_Obj79).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3195B4: ; ... subq.w #1,$36(a0) bpl.s loc_3195D6 move.w $3E(a0),a1 cmp.b #$79,(a1) bne.s loc_3195D0 move.b #2,$1C(a1) move.b #0,$1A(a1) loc_3195D0: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_3195D6: ; ... move.b $26(a0),d0 sub.b #$10,$26(a0) sub.b #$40,d0 jsr CalcSine muls.w #$C00,d1 swap d1 add.w $30(a0),d1 move.w d1,8(a0) muls.w #$C00,d0 swap d0 add.w $32(a0),d0 move.w d0,$C(a0) jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_31960C: ; ... cmp.w #$B000,a3 bne.w loc_31969A move.b $28(a0),($FFFFFE30).w move.b ($FFFFFE30).w,($FFFFFE31).w move.w 8(a0),($FFFFFE32).w move.w $C(a0),($FFFFFE34).w move.w ($FFFFB002).w,($FFFFFE3C).w move.w ($FFFFB03E).w,($FFFFFE3E).w move.w ($FFFFFE20).w,($FFFFFE36).w move.b ($FFFFFE1B).w,($FFFFFE54).w move.l ($FFFFFE22).w,($FFFFFE38).w move.b ($FFFFEEDF).w,($FFFFFE58).w move.w ($FFFFEECE).w,($FFFFFE56).w move.w ($FFFFEE00).w,($FFFFFE40).w move.w ($FFFFEE04).w,($FFFFFE42).w move.w ($FFFFEE08).w,($FFFFFE44).w move.w ($FFFFEE0C).w,($FFFFFE46).w move.w ($FFFFEE10).w,($FFFFFE48).w move.w ($FFFFEE14).w,($FFFFFE4A).w move.w ($FFFFEE18).w,($FFFFFE4C).w move.w ($FFFFEE1C).w,($FFFFFE4E).w move.w ($FFFFF648).w,($FFFFFE50).w move.b ($FFFFF64D).w,($FFFFFE52).w move.b ($FFFFF64E).w,($FFFFFE53).w rts ; --------------------------------------------------------------------------- loc_31969A: ; ... move.b $28(a0),($FFFFFEE0).w move.b ($FFFFFEE0).w,($FFFFFEE1).w move.w 8(a0),($FFFFFEE2).w move.w $C(a0),($FFFFFEE4).w move.w ($FFFFB042).w,($FFFFFEEC).w move.w ($FFFFB07E).w,($FFFFFEEE).w move.w ($FFFFFED0).w,($FFFFFEE6).w move.b ($FFFFFEC7).w,($FFFFFE55).w move.l ($FFFFFED2).w,($FFFFFEE8).w rts ; End of function sub_31960C ; =============== S U B R O U T I N E ======================================= Obj79_LoadData: ; ... move.b ($FFFFFE31).w,($FFFFFE30).w move.w ($FFFFFE32).w,($FFFFB008).w move.w ($FFFFFE34).w,($FFFFB00C).w move.w ($FFFFFE36).w,($FFFFFE20).w move.b ($FFFFFE54).w,($FFFFFE1B).w move.l ($FFFFFE38).w,($FFFFFE22).w move.b #$3B,($FFFFFE25).w subq.b #1,($FFFFFE24).w move.w ($FFFFFE3C).w,($FFFFB002).w move.w ($FFFFFE3E).w,($FFFFB03E).w move.b ($FFFFFE58).w,($FFFFEEDF).w move.b ($FFFFFE52).w,($FFFFF64D).w move.w ($FFFFFE56).w,($FFFFEECE).w move.w ($FFFFFE56).w,($FFFFEEC6).w move.w ($FFFFFE40).w,($FFFFEE00).w move.w ($FFFFFE42).w,($FFFFEE04).w move.w ($FFFFFE44).w,($FFFFEE08).w move.w ($FFFFFE46).w,($FFFFEE0C).w move.w ($FFFFFE48).w,($FFFFEE10).w move.w ($FFFFFE4A).w,($FFFFEE14).w move.w ($FFFFFE4C).w,($FFFFEE18).w move.w ($FFFFFE4E).w,($FFFFEE1C).w tst.b ($FFFFF730).w beq.s loc_31976C move.w ($FFFFFE50).w,($FFFFF648).w move.b ($FFFFFE52).w,($FFFFF64D).w move.b ($FFFFFE53).w,($FFFFF64E).w loc_31976C: ; ... tst.b ($FFFFFE30).w bpl.s return_31977E move.w ($FFFFFE32).w,d0 sub.w #$A0,d0 move.w d0,($FFFFEEC8).w return_31977E: ; ... rts ; End of function Obj79_LoadData ; --------------------------------------------------------------------------- Ani_Obj79: dc.w byte_319786-Ani_Obj79,byte_319789-Ani_Obj79; 0 ; ... dc.w byte_31978C-Ani_Obj79 ; 2 byte_319786: dc.b $F, 0, -1 ; 0 ; ... byte_319789: dc.b $F, 1, -1 ; 0 ; ... byte_31978C: dc.b 3, 0, 4, -1 ; 0 ; ... Map_Obj79: dc.w byte_31979A-Map_Obj79,byte_3197B4-Map_Obj79,byte_3197C8-Map_Obj79; 0 ; ... dc.w byte_3197D0-Map_Obj79,byte_3197D8-Map_Obj79; 3 byte_31979A: dc.b 0, 4,-$18, 1, $20, 4, -1, -4, -8, 3; 0 ; ... dc.b $20, 6, -1, -8, -8, 3, $28, 6, 0, 0; 10 dc.b -$28, 5, 0, 0, -1, -8; 20 byte_3197B4: dc.b 0, 3,-$18, 1, $20, 4, -1, -4, -8, 3; 0 ; ... dc.b $20, 6, -1, -8, -8, 3, $28, 6, 0, 0; 10 byte_3197C8: dc.b 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... byte_3197D0: dc.b 0, 1, -8, 5, $20, 0, -1, -8; 0 ; ... byte_3197D8: dc.b 0, 4,-$18, 1, $20, 4, -1, -4, -8, 3; 0 ; ... dc.b $20, 6, -1, -8, -8, 3, $28, 6, 0, 0; 10 dc.b -$28, 5, $20, 0, -1, -8; 20 Map_Obj79_B: dc.w byte_3197F8-Map_Obj79_B,byte_319800-Map_Obj79_B,byte_319808-Map_Obj79_B; 0 ; ... byte_3197F8: dc.b 0, 1, -8, 5, 0, $A, -1, -8; 0 ; ... byte_319800: dc.b 0, 1, -4, 0, 0, $E, -1, -4; 0 ; ... byte_319808: dc.b 0, 1, -4, 0, 0, $F, -1, -4; 0 ; ... ; =============== S U B R O U T I N E ======================================= Obj79_MakeSpecialStars: ; ... moveq #3,d1 moveq #0,d2 loc_319814: ; ... bsr.w SingleObjLoad2 bne.s return_319880 move.b 0(a0),0(a1) move.l #Map_Obj79_B,4(a1) move.w #$47C,2(a1) move.b #4,1(a1) move.b #8,$24(a1) move.w 8(a0),d0 move.w d0,8(a1) move.w d0,$30(a1) move.w $C(a0),d0 sub.w #$30,d0 move.w d0,$C(a1) move.w d0,$32(a1) move.b $18(a0),$18(a1) move.b #8,$19(a1) move.b #1,$1A(a1) move.w #$FC00,$10(a1) move.w #0,$12(a1) move.w d2,$34(a1) add.w #$40,d2 dbf d1,loc_319814 return_319880: ; ... rts ; End of function Obj79_MakeSpecialStars ; --------------------------------------------------------------------------- loc_319882: ; ... move.b $21(a0),d0 beq.w loc_3198A0 and.b #1,d0 beq.s loc_31989C move.b #1,($FFFFF7CD).w move.b #$10,($FFFFF600).w ; Set Screen mode to special stage loc_31989C: ; ... clr.b $21(a0) loc_3198A0: ; ... add.w #$A,$34(a0) move.w $34(a0),d0 and.w #$FF,d0 jsr CalcSine asr.w #5,d0 asr.w #3,d1 move.w d1,d3 move.w $34(a0),d2 and.w #$3E0,d2 lsr.w #5,d2 moveq #2,d5 moveq #0,d4 cmp.w #$10,d2 ble.s loc_3198D0 neg.w d1 loc_3198D0: ; ... and.w #$F,d2 cmp.w #8,d2 ble.s loc_3198E0 neg.w d2 and.w #7,d2 loc_3198E0: ; ... lsr.w #1,d2 beq.s loc_3198E6 add.w d1,d4 loc_3198E6: ; ... asl.w #1,d1 dbf d5,loc_3198E0 asr.w #4,d4 add.w d4,d0 addq.w #1,$36(a0) move.w $36(a0),d1 cmp.w #$80,d1 beq.s loc_31990A bgt.s loc_319910 loc_319900: ; ... muls.w d1,d0 muls.w d1,d3 asr.w #7,d0 asr.w #7,d3 bra.s loc_319922 ; --------------------------------------------------------------------------- loc_31990A: ; ... move.b #$D8,$20(a0) loc_319910: ; ... cmp.w #$180,d1 ble.s loc_319922 neg.w d1 add.w #$200,d1 bmi.w j_DeleteObject bra.s loc_319900 ; --------------------------------------------------------------------------- loc_319922: ; ... move.w $30(a0),d2 add.w d3,d2 move.w d2,8(a0) move.w $32(a0),d2 add.w d0,d2 move.w d2,$C(a0) addq.b #1,$1B(a0) move.b $1B(a0),d0 and.w #6,d0 lsr.w #1,d0 cmp.b #3,d0 bne.s loc_31994C moveq #1,d0 loc_31994C: ; ... move.b d0,$1A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- j_DeleteObject: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- ; --------------------------------------------------------- ; Object 7D - Points at the end of an act (S1 leftover) ; (Note: They'll look screwed up due to Knuckles' palette) ; --------------------------------------------------------- Obj7D: ; ... moveq #0,d0 move.b $24(a0),d0 move.w Obj7D_States(pc,d0.w),d1 jmp Obj7D_States(pc,d1.w) ; --------------------------------------------------------------------------- Obj7D_States: dc.w Obj7D_Init-Obj7D_States,Obj7D_Main-Obj7D_States; 0 ; ... ; --------------------------------------------------------------------------- Obj7D_Init: ; ... moveq #$10,d2 move.w d2,d3 add.w d3,d3 lea ($FFFFB000).w,a1 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d2,d0 cmp.w d3,d0 bcc.s Obj7D_NoAdd move.w $C(a1),d1 sub.w $C(a0),d1 add.w d2,d1 cmp.w d3,d1 bcc.s Obj7D_NoAdd tst.w ($FFFFFE08).w bne.s Obj7D_NoAdd tst.b ($FFFFF7CD).w bne.s Obj7D_NoAdd addq.b #2,$24(a0) move.l #Map_Obj7D,4(a0) move.w #$84B6,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #0,$18(a0) move.b #$10,$19(a0) move.b $28(a0),$1A(a0) move.w #$77,$30(a0) move.w #$C9,d0 jsr PlaySound moveq #0,d0 move.b $28(a0),d0 add.w d0,d0 move.w Obj7D_Points(pc,d0.w),d0 jsr AddPoints2 Obj7D_NoAdd: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s loc_319A06 rts ; --------------------------------------------------------------------------- loc_319A06: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Obj7D_Points: dc.w 0 ; ... dc.w $3E8 dc.w $64 dc.w 1 ; --------------------------------------------------------------------------- Obj7D_Main: ; ... subq.w #1,$30(a0) bmi.s j_DeleteObject_0 move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s j_DeleteObject_0 jmp DisplaySprite ; --------------------------------------------------------------------------- j_DeleteObject_0: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Map_Obj7D: dc.w byte_319A40-Map_Obj7D,byte_319A42-Map_Obj7D,byte_319A4A-Map_Obj7D; 0 ; ... dc.w byte_319A52-Map_Obj7D ; 3 byte_319A40: dc.b 0, 0 ; 0 ; ... byte_319A42: dc.b 0, 1, -$C, $E, 0, 0, -1,-$10; 0 ; ... byte_319A4A: dc.b 0, 1, -$C, $E, 0, $C, -1,-$10; 0 ; ... byte_319A52: dc.b 0, 1, -$C, $E, 0, $18, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- ; -------------------------------------------- ; Object 44 - Bumper from CNZ ; -------------------------------------------- Obj44: ; ... moveq #0,d0 move.b $24(a0),d0 move.w Obj44_States(pc,d0.w),d1 jmp Obj44_States(pc,d1.w) ; --------------------------------------------------------------------------- Obj44_States: dc.w Obj44_Init-Obj44_States,Obj44_Main-Obj44_States; 0 ; ... ; --------------------------------------------------------------------------- Obj44_Init: ; ... addq.b #2,$24(a0) move.l #Map_Obj44,4(a0) move.w #$439A,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$10,$19(a0) move.b #1,$18(a0) move.b #$D7,$20(a0) Obj44_Main: ; ... move.b $21(a0),d0 beq.w loc_319B6C lea ($FFFFB000).w,a1 bclr #0,$21(a0) beq.s loc_319AB2 bsr.s Obj44_BumpCharacter loc_319AB2: ; ... lea ($FFFFB040).w,a1 bclr #1,$21(a0) beq.s loc_319AC0 bsr.s Obj44_BumpCharacter loc_319AC0: ; ... clr.b $21(a0) bra.w loc_319B6C ; =============== S U B R O U T I N E ======================================= Obj44_BumpCharacter: ; ... move.w 8(a0),d1 move.w $C(a0),d2 sub.w 8(a1),d1 sub.w $C(a1),d2 jsr CalcAngle move.b ($FFFFFE04).w,d1 and.w #3,d1 add.w d1,d0 jsr CalcSine muls.w #$F900,d1 asr.l #8,d1 move.w d1,$10(a1) muls.w #$F900,d0 asr.l #8,d0 move.w d0,$12(a1) bset #1,$22(a1) bclr #4,$22(a1) bclr #5,$22(a1) clr.b $3C(a1) move.b #1,$1C(a0) move.w #$B4,d0 jsr PlaySound lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_319B40 cmp.b #$8A,2(a2,d0.w) bcc.s return_319B6A addq.b #1,2(a2,d0.w) loc_319B40: ; ... moveq #1,d0 move.w a1,a3 jsr AddPoints2 jsr SingleObjLoad bne.s return_319B6A move.b #$29,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b #4,$1A(a1) return_319B6A: ; ... rts ; End of function Obj44_BumpCharacter ; --------------------------------------------------------------------------- loc_319B6C: ; ... lea (Ani_Obj44).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- Ani_Obj44: dc.w byte_319B82-Ani_Obj44,byte_319B85-Ani_Obj44; 0 ; ... byte_319B82: dc.b $F, 0, -1 ; 0 ; ... byte_319B85: dc.b 3, 1, 0, 1, -3, 0, 0; 0 ; ... Map_Obj44: dc.w byte_319B90-Map_Obj44,byte_319B9E-Map_Obj44; 0 ; ... byte_319B90: dc.b 0, 2,-$10, 7, 0, 0, -1,-$10,-$10, 7; 0 ; ... dc.b 8, 0, 0, 0 ; 10 byte_319B9E: dc.b 0, 4,-$14, $B, 0, 8, -1,-$18,-$14, $B; 0 ; ... dc.b 8, 8, 0, 0, $C, 5, 0, $14, -1,-$10; 10 dc.b $C, 5, 8, $14, 0, 0; 20 ; --------------------------------------------------------------------------- ; ----------------------------------------- ; Object 24 - Underwater bubbles (ARZ) ; ----------------------------------------- Obj24: ; ... moveq #0,d0 move.b $24(a0),d0 move.w Obj24_States(pc,d0.w),d1 jmp Obj24_States(pc,d1.w) ; --------------------------------------------------------------------------- Obj24_States: dc.w loc_319BD2-Obj24_States,loc_319C36-Obj24_States,loc_319C50-Obj24_States; 0 ; ... dc.w loc_319CB2-Obj24_States,j_DeleteObject_3-Obj24_States; 3 dc.w loc_319CD6-Obj24_States ; 5 ; --------------------------------------------------------------------------- loc_319BD2: ; ... addq.b #2,$24(a0) move.l #Map_Obj24,4(a0) move.w #$855B,2(a0) jsr Adjust2PArtPointer2_Useless move.b #$84,1(a0) move.b #$10,$19(a0) move.b #1,$18(a0) move.b $28(a0),d0 bpl.s loc_319C1C addq.b #8,$24(a0) and.w #$7F,d0 move.b d0,$32(a0) move.b d0,$33(a0) move.b #6,$1C(a0) bra.w loc_319CD6 ; --------------------------------------------------------------------------- loc_319C1C: ; ... move.b d0,$1C(a0) move.w 8(a0),$30(a0) move.w #$FF78,$12(a0) jsr RandomNumber move.b d0,$26(a0) loc_319C36: ; ... lea (Ani_Obj24).l,a1 jsr AnimateSprite cmp.b #6,$1A(a0) bne.s loc_319C50 move.b #1,$2E(a0) loc_319C50: ; ... move.w ($FFFFF646).w,d0 cmp.w $C(a0),d0 bcs.s loc_319C68 move.b #6,$24(a0) addq.b #3,$1C(a0) bra.w loc_319CB2 ; --------------------------------------------------------------------------- loc_319C68: ; ... move.b $26(a0),d0 addq.b #1,$26(a0) and.w #$7F,d0 lea (Obj0A_WobbleData).l,a1 move.b (a1,d0.w),d0 ext.w d0 add.w $30(a0),d0 move.w d0,8(a0) tst.b $2E(a0) beq.s loc_319C9A bsr.w sub_319E26 cmp.b #6,$24(a0) beq.s loc_319CB2 loc_319C9A: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 tst.b 1(a0) bpl.s j_DeleteObject_2 jmp DisplaySprite ; --------------------------------------------------------------------------- j_DeleteObject_2: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_319CB2: ; ... lea (Ani_Obj24).l,a1 jsr AnimateSprite tst.b 1(a0) bpl.s j_DeleteObject_1 jmp DisplaySprite ; --------------------------------------------------------------------------- j_DeleteObject_1: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- j_DeleteObject_3: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_319CD6: ; ... tst.w $36(a0) bne.s loc_319D38 move.w ($FFFFF646).w,d0 cmp.w $C(a0),d0 bcc.w loc_319DE6 tst.b 1(a0) bpl.w loc_319DE6 subq.w #1,$38(a0) bpl.w loc_319DDA move.w #1,$36(a0) loc_319CFE: ; ... jsr RandomNumber move.w d0,d1 and.w #7,d0 cmp.w #6,d0 bcc.s loc_319CFE move.b d0,$34(a0) and.w #$C,d1 lea (unk_319E14).l,a1 add.w d1,a1 move.l a1,$3C(a0) subq.b #1,$32(a0) bpl.s loc_319D36 move.b $33(a0),$32(a0) bset #7,$36(a0) loc_319D36: ; ... bra.s loc_319D40 ; --------------------------------------------------------------------------- loc_319D38: ; ... subq.w #1,$38(a0) bpl.w loc_319DDA loc_319D40: ; ... jsr RandomNumber and.w #$1F,d0 move.w d0,$38(a0) jsr SingleObjLoad bne.s loc_319DBE move.b 0(a0),0(a1) move.w 8(a0),8(a1) jsr RandomNumber and.w #$F,d0 subq.w #8,d0 add.w d0,8(a1) move.w $C(a0),$C(a1) moveq #0,d0 move.b $34(a0),d0 move.l $3C(a0),a2 move.b (a2,d0.w),$28(a1) btst #7,$36(a0) beq.s loc_319DBE jsr RandomNumber and.w #3,d0 bne.s loc_319DAA bset #6,$36(a0) bne.s loc_319DBE move.b #2,$28(a1) loc_319DAA: ; ... tst.b $34(a0) bne.s loc_319DBE bset #6,$36(a0) bne.s loc_319DBE move.b #2,$28(a1) loc_319DBE: ; ... subq.b #1,$34(a0) bpl.s loc_319DDA jsr RandomNumber and.w #$7F,d0 add.w #$80,d0 add.w d0,$38(a0) clr.w $36(a0) loc_319DDA: ; ... lea (Ani_Obj24).l,a1 jsr AnimateSprite loc_319DE6: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_319E08 move.w ($FFFFF646).w,d0 cmp.w $C(a0),d0 bcs.w loc_319E0E rts ; --------------------------------------------------------------------------- loc_319E08: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_319E0E: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- unk_319E14: dc.b 0 ; ... dc.b 1 dc.b 0 dc.b 0 dc.b 0 dc.b 0 dc.b 1 dc.b 0 dc.b 0 dc.b 0 dc.b 0 dc.b 1 dc.b 0 dc.b 1 dc.b 0 dc.b 0 dc.b 1 dc.b 0 ; =============== S U B R O U T I N E ======================================= sub_319E26: ; ... lea ($FFFFB000).w,a1 bsr.s sub_319E30 lea ($FFFFB040).w,a1 ; End of function sub_319E26 ; =============== S U B R O U T I N E ======================================= sub_319E30: ; ... tst.b $2A(a1) bmi.w return_319EEE move.w 8(a1),d0 move.w 8(a0),d1 sub.w #$10,d1 cmp.w d0,d1 bcc.w return_319EEE add.w #$20,d1 cmp.w d0,d1 bcs.w return_319EEE move.w $C(a1),d0 move.w $C(a0),d1 cmp.w d0,d1 bcc.w return_319EEE add.w #$10,d1 cmp.w d0,d1 bcs.w return_319EEE bsr.w ResumeMusic move.w #$AD,d0 jsr PlaySound clr.w $10(a1) clr.w $12(a1) clr.w $14(a1) move.b #$15,$1C(a1) move.w #$23,$2E(a1) move.b #0,$3C(a1) bclr #5,$22(a1) bclr #4,$22(a1) btst #2,$22(a1) beq.w loc_319EDC cmp.b #1,(a1) bne.s loc_319ECC bclr #2,$22(a1) move.b #$13,$16(a1) move.b #9,$17(a1) subq.w #5,$C(a1) bra.s loc_319EDC ; --------------------------------------------------------------------------- loc_319ECC: ; ... move.b #$F,$16(a1) move.b #9,$17(a1) subq.w #1,$C(a1) loc_319EDC: ; ... cmp.b #6,$24(a0) beq.s return_319EEE move.b #6,$24(a0) addq.b #3,$1C(a0) return_319EEE: ; ... rts ; End of function sub_319E30 ; --------------------------------------------------------------------------- Ani_Obj24: dc.w byte_319EFE-Ani_Obj24,byte_319F03-Ani_Obj24,byte_319F09-Ani_Obj24; 0 ; ... dc.w byte_319F10-Ani_Obj24,byte_319F10-Ani_Obj24,byte_319F12-Ani_Obj24; 3 dc.w byte_319F16-Ani_Obj24 ; 6 byte_319EFE: dc.b $E, 0, 1, 2, -4 ; 0 ; ... byte_319F03: dc.b $E, 1, 2, 3, 4, -4; 0 ; ... byte_319F09: dc.b $E, 2, 3, 4, 5, 6, -4; 0 ; ... byte_319F10: dc.b 4, -4 ; 0 ; ... byte_319F12: dc.b 4, 6, 7, -4 ; 0 ; ... byte_319F16: dc.b $F, $E, $F, -1 ; 0 ; ... Map_Obj24: dc.w byte_319F5E-Map_Obj24,byte_319F66-Map_Obj24,byte_319F66-Map_Obj24; 0 ; ... dc.w byte_319F6E-Map_Obj24,byte_319F76-Map_Obj24,byte_319F7E-Map_Obj24; 3 dc.w byte_319F86-Map_Obj24,byte_319F8E-Map_Obj24,byte_319FA8-Map_Obj24; 6 dc.w byte_319FA8-Map_Obj24,byte_319FA8-Map_Obj24,byte_319FA8-Map_Obj24; 9 dc.w byte_319FA8-Map_Obj24,byte_319FA8-Map_Obj24,byte_319FB0-Map_Obj24; 12 dc.w byte_319FB8-Map_Obj24,byte_319FC0-Map_Obj24; 15 Map_Obj24_0: dc.w byte_319F5E-Map_Obj24_0,byte_319F66-Map_Obj24_0,byte_319F66-Map_Obj24_0; 0 ; ... dc.w byte_319F6E-Map_Obj24_0,byte_319F76-Map_Obj24_0,byte_319F7E-Map_Obj24_0; 3 dc.w byte_319F86-Map_Obj24_0,byte_319F8E-Map_Obj24_0,byte_319FC2-Map_Obj24_0; 6 dc.w byte_319FC2-Map_Obj24_0,byte_319FC2-Map_Obj24_0,byte_319FC2-Map_Obj24_0; 9 dc.w byte_319FC2-Map_Obj24_0,byte_319FC2-Map_Obj24_0,byte_319FB0-Map_Obj24_0; 12 dc.w byte_319FB8-Map_Obj24_0,byte_319FC0-Map_Obj24_0; 15 byte_319F5E: dc.b 0, 1, -4, 0, 0,-$73, -1, -4; 0 ; ... byte_319F66: dc.b 0, 1, -4, 0, 0,-$72, -1, -4; 0 ; ... byte_319F6E: dc.b 0, 1, -8, 5, 0,-$71, -1, -8; 0 ; ... byte_319F76: dc.b 0, 1, -8, 5, 0,-$6D, -1, -8; 0 ; ... byte_319F7E: dc.b 0, 1, -$C, $A, 0, $1C, -1, -$C; 0 ; ... byte_319F86: dc.b 0, 1,-$10, $F, 0, 8, -1,-$10; 0 ; ... byte_319F8E: dc.b 0, 4,-$10, 5, 0, $18, -1,-$10,-$10, 5; 0 ; ... dc.b 8, $18, 0, 0, 0, 5, $10, $18, -1,-$10; 10 dc.b 0, 5, $18, $18, 0, 0; 20 byte_319FA8: dc.b 0, 1, -$C, 6, $1F, $41, -1, -8; 0 ; ... byte_319FB0: dc.b 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... byte_319FB8: dc.b 0, 1, -8, 5, 0, 4, -1, -8; 0 ; ... byte_319FC0: dc.b 0, 0 ; 0 ; ... byte_319FC2: dc.b 0, 1, -$C, 6, $1F, $31, -1, -8; 0 ; ... ; ----------------------------------------- ; Object 03 - Plane switcher ; ----------------------------------------- ; =============== S U B R O U T I N E ======================================= Obj03: ; ... ; FUNCTION CHUNK AT 00312CC0 SIZE 0000002E BYTES ; FUNCTION CHUNK AT 00312D18 SIZE 0000002C BYTES moveq #0,d0 move.b $24(a0),d0 move.w Obj03_States(pc,d0.w),d1 jsr Obj03_States(pc,d1.w) tst.w ($FFFFFFDA).w beq.s loc_319FE4 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_319FE4: ; ... jmp MarkObjGone3 ; End of function Obj03 ; --------------------------------------------------------------------------- Obj03_States: dc.w Obj03_Init-Obj03_States,Obj03_MainX-Obj03_States; 0 ; ... dc.w Obj03_MainY-Obj03_States ; 2 ; --------------------------------------------------------------------------- Obj03_Init: ; ... addq.b #2,$24(a0) move.l #Map_Obj03,4(a0) move.w #$26BC,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$10,$19(a0) move.b #5,$18(a0) move.b $28(a0),d0 btst #2,d0 beq.s Obj03_Init_CheckX addq.b #2,$24(a0) and.w #7,d0 move.b d0,$1A(a0) and.w #3,d0 add.w d0,d0 move.w word_31A064(pc,d0.w),$32(a0) move.w $C(a0),d1 lea ($FFFFB000).w,a1 cmp.w $C(a1),d1 bcc.s loc_31A050 move.b #1,$34(a0) loc_31A050: ; ... lea ($FFFFB040).w,a1 cmp.w $C(a1),d1 bcc.s loc_31A060 move.b #1,$35(a0) loc_31A060: ; ... bra.w Obj03_MainY ; --------------------------------------------------------------------------- word_31A064: dc.w $20 ; ... dc.w $40 dc.w $80 dc.w $100 ; --------------------------------------------------------------------------- Obj03_Init_CheckX: ; ... and.w #3,d0 move.b d0,$1A(a0) add.w d0,d0 move.w word_31A064(pc,d0.w),$32(a0) move.w 8(a0),d1 lea ($FFFFB000).w,a1 cmp.w 8(a1),d1 bcc.s loc_31A090 move.b #1,$34(a0) loc_31A090: ; ... lea ($FFFFB040).w,a1 cmp.w 8(a1),d1 bcc.s Obj03_MainX move.b #1,$35(a0) Obj03_MainX: ; ... tst.w ($FFFFFE08).w bne.w return_31A1A8 move.w 8(a0),d1 lea $34(a0),a2 lea ($FFFFB000).w,a1 bsr.s sub_31A0BA lea ($FFFFB040).w,a1 ; =============== S U B R O U T I N E ======================================= sub_31A0BA: ; ... tst.b (a2)+ bne.s Obj03_MainX_Alt cmp.w 8(a1),d1 bhi.w return_31A1A8 move.b #1,-1(a2) move.w $C(a0),d2 move.w d2,d3 move.w $32(a0),d4 sub.w d4,d2 add.w d4,d3 move.w $C(a1),d4 cmp.w d2,d4 blt.w return_31A1A8 cmp.w d3,d4 bge.w return_31A1A8 move.b $28(a0),d0 bpl.s loc_31A0FA btst #1,$22(a1) bne.w return_31A1A8 loc_31A0FA: ; ... btst #0,1(a0) bne.s loc_31A120 move.b #$C,$3E(a1) move.b #$D,$3F(a1) btst #3,d0 beq.s loc_31A120 move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_31A120: ; ... and.w #$7FFF,2(a1) btst #5,d0 beq.s return_31A1A8 or.w #$8000,2(a1) bra.s return_31A1A8 ; --------------------------------------------------------------------------- Obj03_MainX_Alt: ; ... cmp.w 8(a1),d1 bls.w return_31A1A8 move.b #0,-1(a2) move.w $C(a0),d2 move.w d2,d3 move.w $32(a0),d4 sub.w d4,d2 add.w d4,d3 move.w $C(a1),d4 cmp.w d2,d4 blt.w return_31A1A8 cmp.w d3,d4 bge.w return_31A1A8 move.b $28(a0),d0 bpl.s loc_31A170 btst #1,$22(a1) bne.w return_31A1A8 loc_31A170: ; ... btst #0,1(a0) bne.s loc_31A196 move.b #$C,$3E(a1) move.b #$D,$3F(a1) btst #4,d0 beq.s loc_31A196 move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_31A196: ; ... and.w #$7FFF,2(a1) btst #6,d0 beq.s return_31A1A8 or.w #$8000,2(a1) return_31A1A8: ; ... rts ; End of function sub_31A0BA ; --------------------------------------------------------------------------- Obj03_MainY: ; ... tst.w ($FFFFFE08).w bne.w return_31A2B2 move.w $C(a0),d1 lea $34(a0),a2 lea ($FFFFB000).w,a1 bsr.s sub_31A1C4 lea ($FFFFB040).w,a1 ; =============== S U B R O U T I N E ======================================= sub_31A1C4: ; ... tst.b (a2)+ bne.s Obj03_MainY_Alt cmp.w $C(a1),d1 bhi.w return_31A2B2 move.b #1,-1(a2) move.w 8(a0),d2 move.w d2,d3 move.w $32(a0),d4 sub.w d4,d2 add.w d4,d3 move.w 8(a1),d4 cmp.w d2,d4 blt.w return_31A2B2 cmp.w d3,d4 bge.w return_31A2B2 move.b $28(a0),d0 bpl.s loc_31A204 btst #1,$22(a1) bne.w return_31A2B2 loc_31A204: ; ... btst #0,1(a0) bne.s loc_31A22A move.b #$C,$3E(a1) move.b #$D,$3F(a1) btst #3,d0 beq.s loc_31A22A move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_31A22A: ; ... and.w #$7FFF,2(a1) btst #5,d0 beq.s return_31A2B2 or.w #$8000,2(a1) bra.s return_31A2B2 ; --------------------------------------------------------------------------- Obj03_MainY_Alt: ; ... cmp.w $C(a1),d1 bls.w return_31A2B2 move.b #0,-1(a2) move.w 8(a0),d2 move.w d2,d3 move.w $32(a0),d4 sub.w d4,d2 add.w d4,d3 move.w 8(a1),d4 cmp.w d2,d4 blt.w return_31A2B2 cmp.w d3,d4 bge.w return_31A2B2 move.b $28(a0),d0 bpl.s loc_31A27A btst #1,$22(a1) bne.w return_31A2B2 loc_31A27A: ; ... btst #0,1(a0) bne.s loc_31A2A0 move.b #$C,$3E(a1) move.b #$D,$3F(a1) btst #4,d0 beq.s loc_31A2A0 move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_31A2A0: ; ... and.w #$7FFF,2(a1) btst #6,d0 beq.s return_31A2B2 or.w #$8000,2(a1) return_31A2B2: ; ... rts ; End of function sub_31A1C4 ; --------------------------------------------------------------------------- Map_Obj03: dc.w byte_31A2C4-Map_Obj03,byte_31A2DE-Map_Obj03,byte_31A2F8-Map_Obj03; 0 ; ... dc.w byte_31A2F8-Map_Obj03,byte_31A312-Map_Obj03,byte_31A32C-Map_Obj03; 3 dc.w byte_31A346-Map_Obj03,byte_31A346-Map_Obj03; 6 byte_31A2C4: dc.b 0, 4,-$20, 5, 0, 0, -1, -8,-$10, 5; 0 ; ... dc.b 0, 0, -1, -8, 0, 5, 0, 0, -1, -8; 10 dc.b $10, 5, 0, 0, -1, -8; 20 byte_31A2DE: dc.b 0, 4,-$40, 5, 0, 0, -1, -8,-$20, 5; 0 ; ... dc.b 0, 0, -1, -8, 0, 5, 0, 0, -1, -8; 10 dc.b $30, 5, 0, 0, -1, -8; 20 byte_31A2F8: dc.b 0, 4,-$80, 5, 0, 0, -1, -8,-$20, 5; 0 ; ... dc.b 0, 0, -1, -8, 0, 5, 0, 0, -1, -8; 10 dc.b $70, 5, 0, 0, -1, -8; 20 byte_31A312: dc.b 0, 4, -8, 5, 0, 0, -1,-$20, -8, 5; 0 ; ... dc.b 0, 0, -1,-$10, -8, 5, 0, 0, 0, 0; 10 dc.b -8, 5, 0, 0, 0, $10; 20 byte_31A32C: dc.b 0, 4, -8, 5, 0, 0, -1,-$40, -8, 5; 0 ; ... dc.b 0, 0, -1,-$20, -8, 5, 0, 0, 0, 0; 10 dc.b -8, 5, 0, 0, 0, $30; 20 byte_31A346: dc.b 0, 4, -8, 5, 0, 0, -1,-$80, -8, 5; 0 ; ... dc.b 0, 0, -1,-$20, -8, 5, 0, 0, 0, 0; 10 dc.b -8, 5, 0, 0, 0, $70; 20 ; --------------------------------------------------------------------------- ; ------------------------------------------------------- ; Object 0B - Section of pipe that tips you off from CPZ ; ------------------------------------------------------- Obj0B: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31A36E(pc,d0.w),d1 jmp off_31A36E(pc,d1.w) ; --------------------------------------------------------------------------- off_31A36E: dc.w loc_31A374-off_31A36E,loc_31A3CA-off_31A36E,loc_31A3D8-off_31A36E; 0 ; ... ; --------------------------------------------------------------------------- loc_31A374: ; ... addq.b #2,$24(a0) move.l #Map_Obj0B,4(a0) move.w #$E3B0,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) moveq #0,d0 move.b $28(a0),d0 and.w #$F0,d0 add.w #$10,d0 move.w d0,d1 subq.w #1,d0 move.w d0,$30(a0) move.w d0,$32(a0) moveq #0,d0 move.b $28(a0),d0 and.w #$F,d0 addq.w #1,d0 lsl.w #4,d0 move.b d0,$36(a0) loc_31A3CA: ; ... move.b ($FFFFFE0F).w,d0 add.b $36(a0),d0 bne.s loc_31A402 addq.b #2,$24(a0) loc_31A3D8: ; ... subq.w #1,$30(a0) bpl.s loc_31A3F6 move.w #$7F,$30(a0) tst.b $1C(a0) beq.s loc_31A3F0 move.w $32(a0),$30(a0) loc_31A3F0: ; ... bchg #0,$1C(a0) loc_31A3F6: ; ... lea (Ani_Obj0B).l,a1 jsr AnimateSprite loc_31A402: ; ... tst.b $1A(a0) bne.s loc_31A41E moveq #0,d1 move.b $19(a0),d1 moveq #$11,d3 move.w 8(a0),d4 bsr.w PlatformObject jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31A41E: ; ... move.b $22(a0),d0 and.b #$18,d0 beq.s loc_31A450 bclr #3,$22(a0) beq.s loc_31A43C bclr #3,($FFFFB022).w bset #1,($FFFFB022).w loc_31A43C: ; ... bclr #4,$22(a0) beq.s loc_31A450 bclr #3,($FFFFB062).w bset #1,($FFFFB062).w loc_31A450: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- Ani_Obj0B: dc.w byte_31A45A-Ani_Obj0B,byte_31A462-Ani_Obj0B; 0 ; ... byte_31A45A: dc.b 7, 0, 1, 2, 3, 4, -2, 1; 0 ; ... byte_31A462: dc.b 7, 4, 3, 2, 1, 0, -2, 1; 0 ; ... Map_Obj0B: dc.w byte_31A474-Map_Obj0B,byte_31A482-Map_Obj0B,byte_31A490-Map_Obj0B; 0 ; ... dc.w byte_31A49E-Map_Obj0B,byte_31A4AC-Map_Obj0B; 3 byte_31A474: dc.b 0, 2,-$10, $C, 0, 0, -1,-$10, -8, $E; 0 ; ... dc.b 0, $24, -1,-$10 ; 10 byte_31A482: dc.b 0, 2,-$18, $F, 0, 4, -1,-$10, -8, $E; 0 ; ... dc.b 0, $24, -1,-$10 ; 10 byte_31A490: dc.b 0, 2, -$C, $F, 0, $14, -1,-$10, -8, $E; 0 ; ... dc.b 0, $24, -1,-$10 ; 10 byte_31A49E: dc.b 0, 2, 0, $F, $10, 4, -1,-$10, -8, $E; 0 ; ... dc.b 0, $24, -1,-$10 ; 10 byte_31A4AC: dc.b 0, 2, $10, $C, $10, 0, -1,-$10, -8, $E; 0 ; ... dc.b 0, $24, -1,-$10 ; 10 ; --------------------------------------------------------------------------- ; ------------------------------------------------------- ; Object 0C - Small floating platform (unused) ; ------------------------------------------------------- Obj0C: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31A4C8(pc,d0.w),d1 jmp off_31A4C8(pc,d1.w) ; --------------------------------------------------------------------------- off_31A4C8: dc.w loc_31A4CC-off_31A4C8 ; ... dc.w loc_31A52E-off_31A4C8 ; --------------------------------------------------------------------------- loc_31A4CC: ; ... addq.b #2,$24(a0) move.l #Map_Obj0C,4(a0) move.w #$E418,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) move.w $C(a0),d0 sub.w #$10,d0 move.w d0,$3A(a0) moveq #0,d0 move.b $28(a0),d0 and.w #$F0,d0 add.w #$10,d0 move.w d0,d1 subq.w #1,d0 move.w d0,$30(a0) move.w d0,$32(a0) moveq #0,d0 move.b $28(a0),d0 and.w #$F,d0 move.b d0,$3E(a0) move.b d0,$3F(a0) loc_31A52E: ; ... move.b $3C(a0),d0 beq.s loc_31A56E cmp.b #$80,d0 bne.s loc_31A57E move.b $3D(a0),d1 bne.s loc_31A54E subq.b #1,$3E(a0) bpl.s loc_31A54E move.b $3F(a0),$3E(a0) bra.s loc_31A57E ; --------------------------------------------------------------------------- loc_31A54E: ; ... addq.b #1,$3D(a0) move.b d1,d0 jsr CalcSine add.w #8,d0 asr.w #6,d0 sub.w #$10,d0 add.w $3A(a0),d0 move.w d0,$C(a0) bra.s loc_31A596 ; --------------------------------------------------------------------------- loc_31A56E: ; ... move.w ($FFFFFE0E).w,d1 and.w #$3FF,d1 bne.s loc_31A582 move.b #1,$3D(a0) loc_31A57E: ; ... addq.b #1,$3C(a0) loc_31A582: ; ... jsr CalcSine add.w #8,d1 asr.w #4,d1 add.w $3A(a0),d1 move.w d1,$C(a0) loc_31A596: ; ... moveq #0,d1 move.b $19(a0),d1 moveq #9,d3 move.w 8(a0),d4 bsr.w PlatformObject jmp MarkObjGone ; --------------------------------------------------------------------------- Map_Obj0C: dc.w byte_31A5AE-Map_Obj0C ; 0 ; ... byte_31A5AE: dc.b 0, 1, -8, $D, 0, 0, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- ; ---------------------------------------------------- ; Object 12 - 'Master' Emerald from HPZ (aka 'gem08') ; ---------------------------------------------------- Obj12: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31A5C4(pc,d0.w),d1 jmp off_31A5C4(pc,d1.w) ; --------------------------------------------------------------------------- off_31A5C4: dc.w loc_31A5C8-off_31A5C4,loc_31A5F2-off_31A5C4; 0 ; ... ; --------------------------------------------------------------------------- loc_31A5C8: ; ... addq.b #2,$24(a0) move.l #Map_Obj12,4(a0) move.w #$6392,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$20,$19(a0) move.b #4,$18(a0) loc_31A5F2: ; ... move.w #$20,d1 move.w #$10,d2 move.w #$10,d3 move.w 8(a0),d4 bsr.w SolidObject move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w Map_Obj12 jmp DisplaySprite ; --------------------------------------------------------------------------- Map_Obj12: dc.w byte_31A622-Map_Obj12 ; ... byte_31A622: dc.b 0, 2,-$10, $F, 0, 0, -1,-$20,-$10, $F; 0 ; ... dc.b 0, $10, 0, 0 ; 10 ; --------------------------------------------------------------------------- ; --------------------------------------------- ; Object 13 - Hidden Palace waterfall ; --------------------------------------------- Obj13: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31A63E(pc,d0.w),d1 jmp off_31A63E(pc,d1.w) ; --------------------------------------------------------------------------- off_31A63E: dc.w loc_31A644-off_31A63E,loc_31A70E-off_31A63E,loc_31A7A0-off_31A63E; 0 ; ... ; --------------------------------------------------------------------------- loc_31A644: ; ... addq.b #2,$24(a0) move.l #Map_Obj13,4(a0) move.w #$E315,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$10,$19(a0) move.b #1,$18(a0) move.b #$12,$1A(a0) bsr.s sub_31A6AE move.b #$A0,$16(a1) bset #4,1(a1) move.l a1,$38(a0) move.w $C(a0),$34(a0) move.w $C(a0),$36(a0) cmp.b #$10,$28(a0) bcs.s loc_31A6F4 bsr.s sub_31A6AE move.l a1,$3C(a0) move.w $C(a0),$C(a1) add.w #$98,$C(a1) bra.s loc_31A6F4 ; =============== S U B R O U T I N E ======================================= sub_31A6AE: ; ... jsr SingleObjLoad2 bne.s return_31A6F2 move.b #$13,0(a1) addq.b #4,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.l #Map_Obj13,4(a1) move.w #$E315,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #$10,$19(a1) move.b #1,$18(a1) return_31A6F2: ; ... rts ; End of function sub_31A6AE ; --------------------------------------------------------------------------- loc_31A6F4: ; ... moveq #0,d1 move.b $28(a0),d1 move.w $34(a0),d0 sub.w #$78,d0 lsl.w #4,d1 add.w d1,d0 move.w d0,$C(a0) move.w d0,$34(a0) loc_31A70E: ; ... move.l $38(a0),a1 move.b #$12,$1A(a0) move.w $34(a0),d0 move.w ($FFFFF646).w,d1 cmp.w d0,d1 bcc.s loc_31A726 move.w d1,d0 loc_31A726: ; ... move.w d0,$C(a0) sub.w $36(a0),d0 add.w #$80,d0 bmi.s loc_31A77A lsr.w #4,d0 move.w d0,d1 cmp.w #$F,d0 bcs.s loc_31A740 moveq #$F,d0 loc_31A740: ; ... move.b d0,$1A(a1) cmp.b #$10,$28(a0) bcs.s loc_31A760 move.l $3C(a0),a1 sub.w #$F,d1 bcc.s loc_31A758 moveq #0,d1 loc_31A758: ; ... add.w #$13,d1 move.b d1,$1A(a1) loc_31A760: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_31A79A jmp DisplaySprite ; --------------------------------------------------------------------------- loc_31A77A: ; ... moveq #$13,d0 move.b d0,$1A(a0) move.b d0,$1A(a1) move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_31A79A rts ; --------------------------------------------------------------------------- loc_31A79A: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_31A7A0: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_31A79A jmp DisplaySprite ; --------------------------------------------------------------------------- Map_Obj13: dc.w byte_31A7F4-Map_Obj13,byte_31A7FC-Map_Obj13,byte_31A80A-Map_Obj13; 0 ; ... dc.w byte_31A818-Map_Obj13,byte_31A82C-Map_Obj13,byte_31A840-Map_Obj13; 3 dc.w byte_31A85A-Map_Obj13,byte_31A874-Map_Obj13,byte_31A894-Map_Obj13; 6 dc.w byte_31A8B4-Map_Obj13,byte_31A8DA-Map_Obj13,byte_31A900-Map_Obj13; 9 dc.w byte_31A92C-Map_Obj13,byte_31A958-Map_Obj13,byte_31A98A-Map_Obj13; 12 dc.w byte_31A9BC-Map_Obj13,byte_31A9F4-Map_Obj13,byte_31A9F4-Map_Obj13; 15 dc.w byte_31A9F4-Map_Obj13,byte_31A7F2-Map_Obj13,byte_31AA02-Map_Obj13; 18 dc.w byte_31AA0A-Map_Obj13,byte_31AA12-Map_Obj13,byte_31AA20-Map_Obj13; 21 dc.w byte_31AA2E-Map_Obj13,byte_31AA42-Map_Obj13,byte_31AA56-Map_Obj13; 24 dc.w byte_31AA70-Map_Obj13 ; 27 byte_31A7F2: dc.b 0, 0 ; 0 ; ... byte_31A7F4: dc.b 0, 1,-$80, $C, 0, $10, -1,-$10; 0 ; ... byte_31A7FC: dc.b 0, 2,-$80, $C, 0, $10, -1,-$10,-$78, $D; 0 ; ... dc.b 0, $2D, -1,-$10 ; 10 byte_31A80A: dc.b 0, 2,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10 ; 10 byte_31A818: dc.b 0, 3,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $D, 0, $2D, -1,-$10; 10 byte_31A82C: dc.b 0, 3,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $F, 0, 0, -1,-$10; 10 byte_31A840: dc.b 0, 4,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $F, 0, 0, -1,-$10; 10 dc.b -$38, $D, 0, $2D, -1,-$10; 20 byte_31A85A: dc.b 0, 4,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $F, 0, 0, -1,-$10; 10 dc.b -$38, $F, 0, 0, -1,-$10; 20 byte_31A874: dc.b 0, 5,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $F, 0, 0, -1,-$10; 10 dc.b -$38, $F, 0, 0, -1,-$10,-$18, $D, 0, $2D; 20 dc.b -1,-$10 ; 30 byte_31A894: dc.b 0, 5,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $F, 0, 0, -1,-$10; 10 dc.b -$38, $F, 0, 0, -1,-$10,-$18, $F, 0, 0; 20 dc.b -1,-$10 ; 30 byte_31A8B4: dc.b 0, 6,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $F, 0, 0, -1,-$10; 10 dc.b -$38, $F, 0, 0, -1,-$10,-$18, $F, 0, 0; 20 dc.b -1,-$10, 8, $D, 0, $2D, -1,-$10; 30 byte_31A8DA: dc.b 0, 6,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $F, 0, 0, -1,-$10; 10 dc.b -$38, $F, 0, 0, -1,-$10,-$18, $F, 0, 0; 20 dc.b -1,-$10, 8, $F, 0, 0, -1,-$10; 30 byte_31A900: dc.b 0, 7,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $F, 0, 0, -1,-$10; 10 dc.b -$38, $F, 0, 0, -1,-$10,-$18, $F, 0, 0; 20 dc.b -1,-$10, 8, $F, 0, 0, -1,-$10, $28, $D; 30 dc.b 0, $2D, -1,-$10 ; 40 byte_31A92C: dc.b 0, 7,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $F, 0, 0, -1,-$10; 10 dc.b -$38, $F, 0, 0, -1,-$10,-$18, $F, 0, 0; 20 dc.b -1,-$10, 8, $F, 0, 0, -1,-$10, $28, $F; 30 dc.b 0, 0, -1,-$10 ; 40 byte_31A958: dc.b 0, 8,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $F, 0, 0, -1,-$10; 10 dc.b -$38, $F, 0, 0, -1,-$10,-$18, $F, 0, 0; 20 dc.b -1,-$10, 8, $F, 0, 0, -1,-$10, $28, $F; 30 dc.b 0, 0, -1,-$10, $48, $D, 0, $2D, -1,-$10; 40 byte_31A98A: dc.b 0, 8,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $F, 0, 0, -1,-$10; 10 dc.b -$38, $F, 0, 0, -1,-$10,-$18, $F, 0, 0; 20 dc.b -1,-$10, 8, $F, 0, 0, -1,-$10, $28, $F; 30 dc.b 0, 0, -1,-$10, $48, $F, 0, 0, -1,-$10; 40 byte_31A9BC: dc.b 0, 9,-$80, $C, 0, $10, -1,-$10,-$78, $F; 0 ; ... dc.b 0, 0, -1,-$10,-$58, $F, 0, 0, -1,-$10; 10 dc.b -$38, $F, 0, 0, -1,-$10,-$18, $F, 0, 0; 20 dc.b -1,-$10, 8, $F, 0, 0, -1,-$10, $28, $F; 30 dc.b 0, 0, -1,-$10, $48, $F, 0, 0, -1,-$10; 40 dc.b $68, $D, 0, $2D, -1,-$10; 50 byte_31A9F4: dc.b 0, 2,-$10, $A, 0, $18, -1,-$18,-$10, $A; 0 ; ... dc.b 8, $18, 0, 0 ; 10 byte_31AA02: dc.b 0, 1,-$20, $D, 0, $2D, -1,-$10; 0 ; ... byte_31AA0A: dc.b 0, 1,-$20, $F, 0, 0, -1,-$10; 0 ; ... byte_31AA12: dc.b 0, 2,-$20, $F, 0, 0, -1,-$10, 0, $D; 0 ; ... dc.b 0, $2D, -1,-$10 ; 10 byte_31AA20: dc.b 0, 2,-$20, $F, 0, 0, -1,-$10, 0, $F; 0 ; ... dc.b 0, 0, -1,-$10 ; 10 byte_31AA2E: dc.b 0, 3,-$20, $F, 0, 0, -1,-$10, 0, $F; 0 ; ... dc.b 0, 0, -1,-$10, $20, $D, 0, $2D, -1,-$10; 10 byte_31AA42: dc.b 0, 3,-$20, $F, 0, 0, -1,-$10, 0, $F; 0 ; ... dc.b 0, 0, -1,-$10, $20, $F, 0, 0, -1,-$10; 10 byte_31AA56: dc.b 0, 4,-$20, $F, 0, 0, -1,-$10, 0, $F; 0 ; ... dc.b 0, 0, -1,-$10, $20, $F, 0, 0, -1,-$10; 10 dc.b $40, $D, 0, $2D, -1,-$10; 20 byte_31AA70: dc.b 0, 4,-$20, $F, 0, 0, -1,-$10, 0, $F; 0 ; ... dc.b 0, 0, -1,-$10, $20, $F, 0, 0, -1,-$10; 10 dc.b $40, $F, 0, 0, -1,-$10; 20 ; --------------------------------------------------------------------------- ; -------------------------------------- ; Object 04 - Water surface ; -------------------------------------- Obj04: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31AA98(pc,d0.w),d1 jmp off_31AA98(pc,d1.w) ; --------------------------------------------------------------------------- off_31AA98: dc.w loc_31AA9E-off_31AA98,loc_31AAE0-off_31AA98,loc_31AB74-off_31AA98; 0 ; ... ; --------------------------------------------------------------------------- loc_31AA9E: ; ... addq.b #2,$24(a0) move.l #Map_Obj04,4(a0) move.w #$8400,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$80,$19(a0) move.w 8(a0),$30(a0) cmp.b #$F,($FFFFFE10).w bne.s loc_31AAE0 addq.b #2,$24(a0) move.l #Map_Obj04_0,4(a0) bra.w loc_31AB74 ; --------------------------------------------------------------------------- loc_31AAE0: ; ... move.w ($FFFFF646).w,d1 move.w d1,$C(a0) tst.b $32(a0) bne.s loc_31AB02 btst #7,($FFFFF605).w beq.s loc_31AB12 addq.b #3,$1A(a0) move.b #1,$32(a0) bra.s loc_31AB12 ; --------------------------------------------------------------------------- loc_31AB02: ; ... tst.w ($FFFFF63A).w bne.s loc_31AB12 move.b #0,$32(a0) subq.b #3,$1A(a0) loc_31AB12: ; ... lea (Ani_Obj04).l,a1 moveq #0,d1 move.b $1B(a0),d1 move.b (a1,d1.w),$1A(a0) addq.b #1,$1B(a0) and.b #$3F,$1B(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- Ani_Obj04: dc.b 0, 1, 0, 1, 0, 1, 0, 1, 0, 1; 0 ; ... dc.b 0, 1, 0, 1, 0, 1, 1, 2, 1, 2; 10 ; Custom animation format for this object; Doesn't use the normal AnimateSprite function dc.b 1, 2, 1, 2, 1, 2, 1, 2, 1, 2; 20 dc.b 1, 2, 2, 1, 2, 1, 2, 1, 2, 1; 30 dc.b 2, 1, 2, 1, 2, 1, 2, 1, 1, 0; 40 dc.b 1, 0, 1, 0, 1, 0, 1, 0, 1, 0; 50 dc.b 1, 0, 1, 0 ; 60 ; --------------------------------------------------------------------------- loc_31AB74: ; ... move.w ($FFFFF646).w,d1 move.w d1,$C(a0) tst.b $32(a0) bne.s loc_31AB96 btst #7,($FFFFF605).w beq.s loc_31ABA6 addq.b #2,$1A(a0) move.b #1,$32(a0) bra.s loc_31ABBC ; --------------------------------------------------------------------------- loc_31AB96: ; ... tst.w ($FFFFF63A).w bne.s loc_31ABBC move.b #0,$32(a0) subq.b #2,$1A(a0) loc_31ABA6: ; ... subq.b #1,$1E(a0) bpl.s loc_31ABBC move.b #5,$1E(a0) addq.b #1,$1A(a0) and.b #1,$1A(a0) loc_31ABBC: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- Map_Obj04: dc.w byte_31ABCE-Map_Obj04,byte_31ABE2-Map_Obj04,byte_31ABF6-Map_Obj04; 0 ; ... dc.w byte_31AC0A-Map_Obj04,byte_31AC30-Map_Obj04,byte_31AC56-Map_Obj04; 3 byte_31ABCE: dc.b 0, 3, -8, $D, 0, 0, -1,-$60, -8, $D; 0 ; ... dc.b 0, 0, -1,-$20, -8, $D, 0, 0, 0, $20; 10 byte_31ABE2: dc.b 0, 3, -8, $D, 0, 8, -1,-$60, -8, $D; 0 ; ... dc.b 0, 8, -1,-$20, -8, $D, 0, 8, 0, $20; 10 byte_31ABF6: dc.b 0, 3, -8, $D, 0, $10, -1,-$60, -8, $D; 0 ; ... dc.b 0, $10, -1,-$20, -8, $D, 0, $10, 0, $20; 10 byte_31AC0A: dc.b 0, 6, -8, $D, 0, 0, -1,-$60, -8, $D; 0 ; ... dc.b 0, 8, -1,-$40, -8, $D, 0, 0, -1,-$20; 10 dc.b -8, $D, 0, 8, 0, 0, -8, $D, 0, 0; 20 dc.b 0, $20, -8, $D, 0, 8, 0, $40; 30 byte_31AC30: dc.b 0, 6, -8, $D, 0, 8, -1,-$60, -8, $D; 0 ; ... dc.b 0, $10, -1,-$40, -8, $D, 0, 8, -1,-$20; 10 dc.b -8, $D, 0, $10, 0, 0, -8, $D, 0, 8; 20 dc.b 0, $20, -8, $D, 0, $10, 0, $40; 30 byte_31AC56: dc.b 0, 6, -8, $D, 0, $10, -1,-$60, -8, $D; 0 ; ... dc.b 0, 8, -1,-$40, -8, $D, 0, $10, -1,-$20; 10 dc.b -8, $D, 0, 8, 0, 0, -8, $D, 0, $10; 20 dc.b 0, $20, -8, $D, 0, 8, 0, $40; 30 Map_Obj04_0: dc.w byte_31AC84-Map_Obj04_0,byte_31AC98-Map_Obj04_0,byte_31ACAC-Map_Obj04_0; 0 ; ... dc.w byte_31ACD2-Map_Obj04_0 ; 3 byte_31AC84: dc.b 0, 3, -4, $D, 0, 0, -1,-$60, -4, $D; 0 ; ... dc.b 0, 0, -1,-$20, -4, $D, 0, 0, 0, $20; 10 byte_31AC98: dc.b 0, 3, -4, $D, 0, 8, -1,-$60, -4, $D; 0 ; ... dc.b 0, 8, -1,-$20, -4, $D, 0, 8, 0, $20; 10 byte_31ACAC: dc.b 0, 6, -4, $D, 0, 0, -1,-$60, -4, $D; 0 ; ... dc.b 0, 0, -1,-$40, -4, $D, 0, 0, -1,-$20; 10 dc.b -4, $D, 0, 0, 0, 0, -4, $D, 0, 0; 20 dc.b 0, $20, -4, $D, 0, 0, 0, $40; 30 byte_31ACD2: dc.b 0, 6, -4, $D, 0, 8, -1,-$60, -4, $D; 0 ; ... dc.b 0, 8, -1,-$40, -4, $D, 0, 8, -1,-$20; 10 dc.b -4, $D, 0, 8, 0, 0, -4, $D, 0, 8; 20 dc.b 0, $20, -4, $D, 0, 8, 0, $40; 30 ; --------------------------------------------------------------------------- ; --------------------------------------------------- ; Object 49 - Waterfall (EHZ) ; --------------------------------------------------- Obj49: ; ... moveq #0,d0 move.b $24(a0),d0 move.w Obj49_Index(pc,d0.w),d1 jmp Obj49_Index(pc,d1.w) ; --------------------------------------------------------------------------- Obj49_Index: dc.w Obj49_Main-Obj49_Index,Obj49_ChkDel-Obj49_Index; 0 ; ... ; --------------------------------------------------------------------------- Obj49_Main: ; ... addq.b #2,$24(a0) move.l #Map_Obj49,4(a0) move.w #$239E,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$20,$19(a0) move.w 8(a0),$30(a0) move.b #0,$18(a0) move.b #$80,$16(a0) bset #4,1(a0) Obj49_ChkDel: ; ... tst.w ($FFFFFFDC).w bne.s loc_31AD60 move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_31AF6E loc_31AD60: ; ... move.w 8(a0),d1 move.w d1,d2 sub.w #$40,d1 add.w #$40,d2 move.b $28(a0),d3 move.b #0,$1A(a0) move.w ($FFFFB008).w,d0 cmp.w d1,d0 bcs.s loc_31AD94 cmp.w d2,d0 bcc.s loc_31AD94 move.b #1,$1A(a0) add.b d3,$1A(a0) loc_31AD8E: jmp DisplaySprite ; --------------------------------------------------------------------------- loc_31AD94: ; ... move.w ($FFFFB048).w,d0 cmp.w d1,d0 bcs.s Obj49_Display cmp.w d2,d0 bcc.s Obj49_Display move.b #1,$1A(a0) Obj49_Display: ; ... add.b d3,$1A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- Map_Obj49: dc.w byte_31ADC0-Map_Obj49,byte_31ADCE-Map_Obj49,byte_31AE3C-Map_Obj49; 0 ; ... dc.w byte_31AE3E-Map_Obj49,byte_31AE3C-Map_Obj49,byte_31AE58-Map_Obj49; 3 dc.w byte_31ADC0-Map_Obj49,byte_31AE96-Map_Obj49; 6 byte_31ADC0: dc.b 0, 2,-$80, $D, 0, 0, -1,-$20,-$80, $D; 0 ; ... dc.b 0, 0, 0, 0 ; 10 byte_31ADCE: dc.b 0, $12,-$80, $D, 0, 0, -1,-$20,-$80, $D; 0 ; ... dc.b 0, 0, 0, 0,-$80, $F, 0, 8, -1,-$20; 10 dc.b -$80, $F, 0, 8, 0, 0,-$60, $F, 0, 8; 20 dc.b -1,-$20,-$60, $F, 0, 8, 0, 0,-$40, $F; 30 dc.b 0, 8, -1,-$20,-$40, $F, 0, 8, 0, 0; 40 dc.b -$20, $F, 0, 8, -1,-$20,-$20, $F, 0, 8; 50 dc.b 0, 0, 0, $F, 0, 8, -1,-$20, 0, $F; 60 dc.b 0, 8, 0, 0, $20, $F, 0, 8, -1,-$20; 70 dc.b $20, $F, 0, 8, 0, 0, $40, $F, 0, 8; 80 dc.b -1,-$20, $40, $F, 0, 8, 0, 0, $60, $F; 90 dc.b 0, 8, -1,-$20, $60, $F, 0, 8, 0, 0; 100 byte_31AE3C: dc.b 0, 0 ; 0 ; ... byte_31AE3E: dc.b 0, 4,-$20, $F, 0, 8, -1,-$20,-$20, $F; 0 ; ... dc.b 0, 8, 0, 0, 0, $F, 0, 8, -1,-$20; 10 dc.b 0, $F, 0, 8, 0, 0; 20 byte_31AE58: dc.b 0, $A,-$40, $F, 0, 8, -1,-$20,-$40, $F; 0 ; ... dc.b 0, 8, 0, 0,-$20, $F, 0, 8, -1,-$20; 10 dc.b -$20, $F, 0, 8, 0, 0, 0, $F, 0, 8; 20 dc.b -1,-$20, 0, $F, 0, 8, 0, 0, $20, $F; 30 dc.b 0, 8, -1,-$20, $20, $F, 0, 8, 0, 0; 40 dc.b $40, $F, 0, 8, -1,-$20, $40, $F, 0, 8; 50 dc.b 0, 0 ; 60 byte_31AE96: dc.b 0, $E,-$80, $D, 0, 0, -1,-$20,-$80, $D; 0 ; ... dc.b 0, 0, 0, 0,-$80, $F, 0, 8, -1,-$20; 10 dc.b -$80, $F, 0, 8, 0, 0,-$60, $F, 0, 8; 20 dc.b -1,-$20,-$60, $F, 0, 8, 0, 0,-$40, $F; 30 dc.b 0, 8, -1,-$20,-$40, $F, 0, 8, 0, 0; 40 dc.b -$20, $F, 0, 8, -1,-$20,-$20, $F, 0, 8; 50 dc.b 0, 0, 0, $F, 0, 8, -1,-$20, 0, $F; 60 dc.b 0, 8, 0, 0, $20, $F, 0, 8, -1,-$20; 70 dc.b $20, $F, 0, 8, 0, 0; 80 ; --------------------------------------------------------------------------- ; ----------------------------------------------- ; Object 31 - Lava collision marker ; ----------------------------------------------- Obj31: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31AEFA(pc,d0.w),d1 jmp off_31AEFA(pc,d1.w) ; --------------------------------------------------------------------------- off_31AEFA: dc.w loc_31AF02-off_31AEFA,loc_31AF46-off_31AEFA; 0 ; ... ; -------------------------------------- unk_31AEFE: dc.b $96 ; – dc.b $94 ; ” dc.b $95 ; • dc.b 0 ; --------------------------------------------------------------------------- loc_31AF02: ; ... addq.b #2,$24(a0) moveq #0,d0 move.b $28(a0),d0 move.b unk_31AEFE(pc,d0.w),$20(a0) move.l #Map_Obj31,4(a0) tst.w ($FFFFFE08).w beq.s loc_31AF28 move.l #Map_Obj31_0,4(a0) loc_31AF28: ; ... move.w #$8680,2(a0) move.b #$84,1(a0) move.b #$80,$19(a0) move.b #4,$18(a0) move.b $28(a0),$1A(a0) loc_31AF46: ; ... tst.w ($FFFFFFDC).w bne.s loc_31AF60 move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_31AF6E loc_31AF60: ; ... tst.w ($FFFFFE08).w beq.s return_31AF6C jsr DisplaySprite return_31AF6C: ; ... rts ; --------------------------------------------------------------------------- loc_31AF6E: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Map_Obj31: dc.w byte_31AF7A-Map_Obj31,byte_31AF7A-Map_Obj31,byte_31AF7A-Map_Obj31; 0 ; ... byte_31AF7A: dc.b 0, 0 ; 0 ; ... Map_Obj31_0: dc.w byte_31AF82-Map_Obj31_0,byte_31AF9C-Map_Obj31_0,byte_31AFB6-Map_Obj31_0; 0 ; ... byte_31AF82: dc.b 0, 4,-$20, 5, 0, $34, -1,-$20,-$20, 5; 0 ; ... dc.b 0, $34, 0, $10, $10, 5, 0, $34, -1,-$20; 10 dc.b $10, 5, 0, $34, 0, $10; 20 byte_31AF9C: dc.b 0, 4,-$20, 5, 0, $34, -1,-$40,-$20, 5; 0 ; ... dc.b 0, $34, 0, $30, $10, 5, 0, $34, -1,-$40; 10 dc.b $10, 5, 0, $34, 0, $30; 20 byte_31AFB6: dc.b 0, 4,-$20, 5, 0, $34, -1,-$80,-$20, 5; 0 ; ... dc.b 0, $34, 0, $70, $10, 5, 0, $34, -1,-$80; 10 dc.b $10, 5, 0, $34, 0, $70; 20 ; --------------------------------------------------------------------------- ; --------------------------------------------- ; Object 74 - Invisible solid block ; --------------------------------------------- Obj74: ; ... moveq #0,d0 move.b $24(a0),d0 move.w Obj74_States(pc,d0.w),d1 jmp Obj74_States(pc,d1.w) ; --------------------------------------------------------------------------- Obj74_States: dc.w Obj74_Init-Obj74_States,Obj74_Main-Obj74_States; 0 ; ... ; --------------------------------------------------------------------------- Obj74_Init: ; ... addq.b #2,$24(a0) move.l #Map_Obj74,4(a0) move.w #$8680,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b $28(a0),d0 move.b d0,d1 and.w #$F0,d0 add.w #$10,d0 lsr.w #1,d0 move.b d0,$19(a0) and.w #$F,d1 addq.w #1,d1 lsl.w #3,d1 move.b d1,$16(a0) Obj74_Main: ; ... moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 move.w 8(a0),d4 jsr loc_314BFE tst.w ($FFFFFFDC).w bne.s loc_31B058 move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_31AF6E loc_31B058: ; ... tst.w ($FFFFFE08).w beq.s return_31B064 jmp DisplaySprite ; --------------------------------------------------------------------------- return_31B064: ; ... rts ; --------------------------------------------------------------------------- Map_Obj74: dc.w byte_31B06C-Map_Obj74,byte_31B086-Map_Obj74,byte_31B0A0-Map_Obj74; 0 ; ... byte_31B06C: dc.b 0, 4,-$10, 5, 0, $1C, -1,-$10,-$10, 5; 0 ; ... dc.b 0, $1C, 0, 0, 0, 5, 0, $1C, -1,-$10; 10 dc.b 0, 5, 0, $1C, 0, 0; 20 byte_31B086: dc.b 0, 4,-$20, 5, 0, $1C, -1,-$40,-$20, 5; 0 ; ... dc.b 0, $1C, 0, $30, $10, 5, 0, $1C, -1,-$40; 10 dc.b $10, 5, 0, $1C, 0, $30; 20 byte_31B0A0: dc.b 0, 4,-$20, 5, 0, $1C, -1,-$80,-$20, 5; 0 ; ... dc.b 0, $1C, 0, $70, $10, 5, 0, $1C, -1,-$80; 10 dc.b $10, 5, 0, $1C, 0, $70; 20 ; --------------------------------------------------------------------------- ; --------------------------------------------------- ; Object 7C - Big pylon in the foreground (CPZ) ; --------------------------------------------------- Obj7C: ; ... moveq #0,d0 move.b $24(a0),d0 move.w Obj7C_States(pc,d0.w),d1 jmp Obj7C_States(pc,d1.w) ; --------------------------------------------------------------------------- Obj7C_States: dc.w Obj7C_Init-Obj7C_States,Obj7C_Main-Obj7C_States; 0 ; ... ; --------------------------------------------------------------------------- Obj7C_Init: ; ... addq.b #2,$24(a0) move.l #Map_Obj7C,4(a0) move.w #$C373,2(a0) jsr Adjust2PArtPointer2_Useless move.b #$10,$19(a0) move.b #7,$18(a0) Obj7C_Main: ; ... move.w ($FFFFEE00).w,d1 and.w #$3FF,d1 cmp.w #$2E0,d1 bcc.s return_31B126 asr.w #1,d1 move.w d1,d0 asr.w #1,d1 add.w d1,d0 neg.w d0 move.w d0,8(a0) move.w ($FFFFEE04).w,d1 asr.w #1,d1 and.w #$3F,d1 neg.w d1 add.w #$100,d1 move.w d1,$A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- return_31B126: ; ... rts ; --------------------------------------------------------------------------- Map_Obj7C: dc.w byte_31B12A-Map_Obj7C ; ... byte_31B12A: dc.b 0, 9,-$80, $F,-$60, 0, -1,-$10,-$60, $F; 0 ; ... dc.b -$50, 0, -1,-$10,-$40, $F,-$60, 0, -1,-$10; 10 dc.b -$20, $F,-$50, 0, -1,-$10, 0, $F,-$60, 0; 20 dc.b -1,-$10, $20, $F,-$50, 0, -1,-$10, $40, $F; 30 dc.b -$60, 0, -1,-$10, $60, $F,-$50, 0, -1,-$10; 40 dc.b $7F, $F,-$60, 0, -1,-$10; 50 ; --------------------------------------------------------------------------- Obj27: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31B170(pc,d0.w),d1 jmp off_31B170(pc,d1.w) ; --------------------------------------------------------------------------- off_31B170: dc.w loc_31B176-off_31B170,loc_31B19A-off_31B170,loc_31B1E0-off_31B170; 0 ; ... ; --------------------------------------------------------------------------- loc_31B176: ; ... addq.b #2,$24(a0) jsr SingleObjLoad bne.s loc_31B19A move.b #$28,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w $3E(a0),$3E(a1) loc_31B19A: ; ... addq.b #2,$24(a0) move.l #Map_Obj27,4(a0) move.w #$5A4,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #1,$18(a0) move.b #0,$20(a0) move.b #$C,$19(a0) move.b #3,$1E(a0) move.b #0,$1A(a0) move.w #$C1,d0 jsr PlaySound loc_31B1E0: ; ... subq.b #1,$1E(a0) bpl.s loc_31B1FA move.b #7,$1E(a0) addq.b #1,$1A(a0) cmp.b #5,$1A(a0) beq.w loc_31AF6E loc_31B1FA: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- Map_Obj27: dc.w byte_31B20A-Map_Obj27,byte_31B212-Map_Obj27,byte_31B21A-Map_Obj27; 0 ; ... dc.w byte_31B222-Map_Obj27,byte_31B22A-Map_Obj27; 3 byte_31B20A: dc.b 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... byte_31B212: dc.b 0, 1,-$10, $F, $20, 4, -1,-$10; 0 ; ... byte_31B21A: dc.b 0, 1,-$10, $F, $20, $14, -1,-$10; 0 ; ... byte_31B222: dc.b 0, 1,-$10, $F, $20, $24, -1,-$10; 0 ; ... byte_31B22A: dc.b 0, 1,-$10, $F, $20, $34, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- ; --------------------------------------------- ; Object 84 - Pinball mode enable/disable ; --------------------------------------------- Obj84: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31B246(pc,d0.w),d1 jsr off_31B246(pc,d1.w) jmp MarkObjGone3 ; --------------------------------------------------------------------------- off_31B246: dc.w loc_31B24C-off_31B246,loc_31B2FC-off_31B246,loc_31B3CE-off_31B246; 0 ; ... ; --------------------------------------------------------------------------- loc_31B24C: ; ... addq.b #2,$24(a0) move.l #Map_Obj03,4(a0) move.w #$6BC,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$10,$19(a0) move.b #5,$18(a0) move.b $28(a0),d0 btst #2,d0 beq.s loc_31B2C8 addq.b #2,$24(a0) and.w #7,d0 move.b d0,$1A(a0) and.w #3,d0 add.w d0,d0 move.w word_31B2C0(pc,d0.w),$32(a0) move.w $C(a0),d1 lea ($FFFFB000).w,a1 cmp.w $C(a1),d1 bcc.s loc_31B2AC move.b #1,$34(a0) loc_31B2AC: ; ... lea ($FFFFB040).w,a1 cmp.w $C(a1),d1 bcc.s loc_31B2BC move.b #1,$35(a0) loc_31B2BC: ; ... bra.w loc_31B3CE ; --------------------------------------------------------------------------- word_31B2C0: dc.w $20 ; ... dc.w $40 dc.w $80 dc.w $100 ; --------------------------------------------------------------------------- loc_31B2C8: ; ... and.w #3,d0 move.b d0,$1A(a0) add.w d0,d0 move.w word_31B2C0(pc,d0.w),$32(a0) move.w 8(a0),d1 lea ($FFFFB000).w,a1 cmp.w 8(a1),d1 bcc.s loc_31B2EC move.b #1,$34(a0) loc_31B2EC: ; ... lea ($FFFFB040).w,a1 cmp.w 8(a1),d1 bcc.s loc_31B2FC move.b #1,$35(a0) loc_31B2FC: ; ... tst.w ($FFFFFE08).w bne.s return_31B35C move.w 8(a0),d1 lea $34(a0),a2 lea ($FFFFB000).w,a1 bsr.s sub_31B31C lea ($FFFFB040).w,a1 cmp.w #4,($FFFFF708).w beq.s return_31B35C ; =============== S U B R O U T I N E ======================================= sub_31B31C: ; ... tst.b (a2)+ bne.s loc_31B35E cmp.w 8(a1),d1 bhi.s return_31B35C move.b #1,-1(a2) move.w $C(a0),d2 move.w d2,d3 move.w $32(a0),d4 sub.w d4,d2 add.w d4,d3 move.w $C(a1),d4 cmp.w d2,d4 bcs.s return_31B35C cmp.w d3,d4 bcc.s return_31B35C btst #0,1(a0) bne.s loc_31B356 move.b #1,$39(a1) bra.s loc_31B39C ; --------------------------------------------------------------------------- loc_31B356: ; ... move.b #0,$39(a1) return_31B35C: ; ... rts ; --------------------------------------------------------------------------- loc_31B35E: ; ... cmp.w 8(a1),d1 bls.s return_31B35C move.b #0,-1(a2) move.w $C(a0),d2 move.w d2,d3 move.w $32(a0),d4 sub.w d4,d2 add.w d4,d3 move.w $C(a1),d4 cmp.w d2,d4 bcs.s return_31B35C cmp.w d3,d4 bcc.s return_31B35C btst #0,1(a0) beq.s loc_31B394 move.b #1,$39(a1) bra.s loc_31B39C ; --------------------------------------------------------------------------- loc_31B394: ; ... move.b #0,$39(a1) rts ; --------------------------------------------------------------------------- loc_31B39C: ; ... btst #2,$22(a1) beq.s loc_31B3A6 rts ; --------------------------------------------------------------------------- loc_31B3A6: ; ... bset #2,$22(a1) move.b #$E,$16(a1) move.b #7,$17(a1) move.b #2,$1C(a1) addq.w #5,$C(a1) move.w #$BE,d0 jsr PlaySound rts ; End of function sub_31B31C ; --------------------------------------------------------------------------- loc_31B3CE: ; ... tst.w ($FFFFFE08).w bne.s return_31B428 move.w $C(a0),d1 lea $34(a0),a2 lea ($FFFFB000).w,a1 bsr.s sub_31B3E6 lea ($FFFFB040).w,a1 ; =============== S U B R O U T I N E ======================================= sub_31B3E6: ; ... tst.b (a2)+ bne.s loc_31B42A cmp.w $C(a1),d1 bhi.s return_31B428 move.b #1,-1(a2) move.w 8(a0),d2 move.w d2,d3 move.w $32(a0),d4 sub.w d4,d2 add.w d4,d3 move.w 8(a1),d4 cmp.w d2,d4 bcs.s return_31B428 cmp.w d3,d4 bcc.s return_31B428 btst #0,1(a0) bne.s loc_31B422 move.b #1,$39(a1) bra.w loc_31B39C ; --------------------------------------------------------------------------- loc_31B422: ; ... move.b #0,$39(a1) return_31B428: ; ... rts ; --------------------------------------------------------------------------- loc_31B42A: ; ... cmp.w $C(a1),d1 bls.s return_31B428 move.b #0,-1(a2) move.w 8(a0),d2 move.w d2,d3 move.w $32(a0),d4 sub.w d4,d2 add.w d4,d3 move.w 8(a1),d4 cmp.w d2,d4 bcs.s return_31B428 cmp.w d3,d4 bcc.s return_31B428 btst #0,1(a0) beq.s loc_31B462 move.b #1,$39(a1) bra.w loc_31B39C ; --------------------------------------------------------------------------- loc_31B462: ; ... move.b #0,$39(a1) rts ; End of function sub_31B3E6 ; --------------------------------------------------------------------------- ; ------------------------------------------------- ; Object 8B - Cycling Palette Switcher (WFZ) ; ------------------------------------------------- Obj8B: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31B47E(pc,d0.w),d1 jsr off_31B47E(pc,d1.w) jmp MarkObjGone3 ; --------------------------------------------------------------------------- off_31B47E: dc.w loc_31B48A-off_31B47E,loc_31B4EC-off_31B47E; 0 ; ... word_31B482: dc.w $20 dc.w $40 dc.w $80 dc.w $100 ; --------------------------------------------------------------------------- loc_31B48A: ; ... addq.b #2,$24(a0) move.l #Map_Obj03,4(a0) move.w #$6BC,2(a0) loc_31B49C: jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$10,$19(a0) move.b #5,$18(a0) move.b $28(a0),d0 and.w #3,d0 loc_31B4BC: move.b d0,$1A(a0) add.w d0,d0 move.w word_31B482(pc,d0.w),$32(a0) move.w 8(a0),d1 lea ($FFFFB000).w,a1 cmp.w 8(a1),d1 bcc.s loc_31B4DC move.b #1,$34(a0) loc_31B4DC: ; ... lea ($FFFFB040).w,a1 cmp.w 8(a1),d1 bcc.s loc_31B4EC move.b #1,$35(a0) loc_31B4EC: ; ... tst.w ($FFFFFE08).w bne.s return_31B544 move.w 8(a0),d1 lea $34(a0),a2 lea ($FFFFB000).w,a1 bsr.s sub_31B504 lea ($FFFFB040).w,a1 ; =============== S U B R O U T I N E ======================================= sub_31B504: ; ... tst.b (a2)+ bne.s loc_31B546 cmp.w 8(a1),d1 bhi.s return_31B544 move.b #1,-1(a2) move.w $C(a0),d2 move.w d2,d3 move.w $32(a0),d4 sub.w d4,d2 add.w d4,d3 move.w $C(a1),d4 cmp.w d2,d4 bcs.s return_31B544 cmp.w d3,d4 bcc.s return_31B544 btst #0,1(a0) bne.s loc_31B53E move.b #1,($FFFFF72E).w rts ; --------------------------------------------------------------------------- loc_31B53E: ; ... move.b #0,($FFFFF72E).w return_31B544: ; ... rts ; --------------------------------------------------------------------------- loc_31B546: ; ... cmp.w 8(a1),d1 bls.s return_31B544 move.b #0,-1(a2) move.w $C(a0),d2 move.w d2,d3 move.w $32(a0),d4 sub.w d4,d2 add.w d4,d3 move.w $C(a1),d4 cmp.w d2,d4 bcs.s return_31B544 cmp.w d3,d4 bcc.s return_31B544 btst #0,1(a0) beq.s loc_31B57C move.b #1,($FFFFF72E).w rts ; --------------------------------------------------------------------------- loc_31B57C: ; ... move.b #0,($FFFFF72E).w rts ; End of function sub_31B504 ; ----------------------------------------------------------- ; Rotating Cylinder in Metropolis, corkscrew path in EHZ ; ----------------------------------------------------------- ; =============== S U B R O U T I N E ======================================= Obj06: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31B5B4(pc,d0.w),d1 jsr off_31B5B4(pc,d1.w) tst.w ($FFFFFFDC).w beq.s loc_31B59A rts ; --------------------------------------------------------------------------- loc_31B59A: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s loc_31B5AE rts ; --------------------------------------------------------------------------- loc_31B5AE: ; ... jmp DeleteObject ; End of function Obj06 ; --------------------------------------------------------------------------- off_31B5B4: dc.w loc_31B5BA-off_31B5B4,loc_31B5D2-off_31B5B4,Obj06_Cylinder-off_31B5B4; 0 ; ... ; --------------------------------------------------------------------------- loc_31B5BA: ; ... addq.b #2,$24(a0) move.b #$D0,$19(a0) tst.b $28(a0) bpl.s loc_31B5D2 addq.b #2,$24(a0) bra.w Obj06_Cylinder ; --------------------------------------------------------------------------- loc_31B5D2: ; ... lea ($FFFFB000).w,a1 moveq #3,d6 bsr.s sub_31B5E0 lea ($FFFFB040).w,a1 addq.b #1,d6 ; =============== S U B R O U T I N E ======================================= sub_31B5E0: ; ... btst d6,$22(a0) bne.w loc_31B684 btst #1,$22(a1) bne.w return_31B682 btst #3,$22(a1) bne.s loc_31B642 move.w 8(a1),d0 sub.w 8(a0),d0 tst.w $10(a1) bmi.s loc_31B616 cmp.w #$FF40,d0 bgt.s return_31B682 cmp.w #$FF30,d0 blt.s return_31B682 bra.s loc_31B622 ; --------------------------------------------------------------------------- loc_31B616: ; ... cmp.w #$C0,d0 blt.s return_31B682 cmp.w #$D0,d0 bgt.s return_31B682 loc_31B622: ; ... move.w $C(a1),d1 sub.w $C(a0),d1 sub.w #$10,d1 cmp.w #$30,d1 bcc.s return_31B682 tst.b $2A(a1) bne.s return_31B682 jsr loc_315232 rts ; --------------------------------------------------------------------------- loc_31B642: ; ... move.w 8(a1),d0 sub.w 8(a0),d0 tst.w $10(a1) bmi.s loc_31B65E cmp.w #$FF50,d0 bgt.s return_31B682 cmp.w #$FF40,d0 blt.s return_31B682 bra.s loc_31B66A ; --------------------------------------------------------------------------- loc_31B65E: ; ... cmp.w #$B0,d0 blt.s return_31B682 cmp.w #$C0,d0 bgt.s return_31B682 loc_31B66A: ; ... move.w $C(a1),d1 sub.w $C(a0),d1 sub.w #$10,d1 cmp.w #$30,d1 bcc.s return_31B682 jsr loc_315232 return_31B682: ; ... rts ; --------------------------------------------------------------------------- loc_31B684: ; ... move.w $14(a1),d0 bpl.s loc_31B68C neg.w d0 loc_31B68C: ; ... cmp.w #$600,d0 bcs.s loc_31B6AE btst #1,$22(a1) bne.s loc_31B6AE move.w 8(a1),d0 sub.w 8(a0),d0 add.w #$D0,d0 bmi.s loc_31B6AE cmp.w #$1A0,d0 bcs.s loc_31B6C6 loc_31B6AE: ; ... bclr #3,$22(a1) bclr d6,$22(a0) move.b #0,$2C(a1) move.b #4,$2D(a1) rts ; --------------------------------------------------------------------------- loc_31B6C6: ; ... btst #3,$22(a1) beq.s return_31B682 move.b Obj06_CosineTable(pc,d0.w),d1 ext.w d1 move.w $C(a0),d2 add.w d1,d2 moveq #0,d1 move.b $16(a1),d1 sub.w #$13,d1 sub.w d1,d2 move.w d2,$C(a1) lsr.w #3,d0 and.w #$3F,d0 move.b Obj06_FlipAngleTable(pc,d0.w),$27(a1) rts ; End of function sub_31B5E0 ; --------------------------------------------------------------------------- Obj06_FlipAngleTable:dc.b 0, 0, 1, 1, $16, $16, $16, $16, $2C, $2C; 0 ; ... dc.b $2C, $2C, $42, $42, $42, $42, $58, $58, $58, $58; 10 dc.b $6E, $6E, $6E, $6E,-$7C,-$7C,-$7C,-$7C,-$66,-$66; 20 dc.b -$66,-$66,-$50,-$50,-$50,-$50,-$3A,-$3A,-$3A,-$3A; 30 dc.b -$24,-$24,-$24,-$24, -$E, -$E, -$E, -$E, 1, 1; 40 dc.b 0, 0 ; 50 Obj06_CosineTable:dc.b $20, $20, $20, $20, $20, $20, $20, $20, $20, $20; 0 ; ... dc.b $20, $20, $20, $20, $20, $20, $20, $20, $20, $20; 10 dc.b $20, $20, $20, $20, $20, $20, $20, $20, $20, $20; 20 dc.b $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F; 30 dc.b $1F, $1F, $1F, $1F, $1F, $1E, $1E, $1E, $1E, $1E; 40 dc.b $1E, $1E, $1E, $1E, $1D, $1D, $1D, $1D, $1D, $1C; 50 dc.b $1C, $1C, $1C, $1B, $1B, $1B, $1B, $1A, $1A, $1A; 60 dc.b $19, $19, $19, $18, $18, $18, $17, $17, $16, $16; 70 dc.b $15, $15, $14, $14, $13, $12, $12, $11, $10, $10; 80 dc.b $F, $E, $E, $D, $C, $C, $B, $A, $A, 9; 90 dc.b 8, 8, 7, 6, 6, 5, 4, 4, 3, 2; 100 dc.b 2, 1, 0, -1, -2, -2, -3, -4, -4, -5; 110 dc.b -6, -7, -7, -8, -9, -9, -$A, -$A, -$B, -$B; 120 dc.b -$C, -$C, -$D, -$E, -$E, -$F, -$F,-$10,-$10,-$11; 130 dc.b -$11,-$12,-$12,-$13,-$13,-$13,-$14,-$15,-$15,-$16; 140 dc.b -$16,-$17,-$17,-$18,-$18,-$19,-$19,-$1A,-$1A,-$1B; 150 dc.b -$1B,-$1C,-$1C,-$1C,-$1D,-$1D,-$1E,-$1E,-$1E,-$1F; 160 dc.b -$1F,-$1F,-$20,-$20,-$20,-$21,-$21,-$21,-$21,-$22; 170 dc.b -$22,-$22,-$23,-$23,-$23,-$23,-$23,-$23,-$23,-$23; 180 dc.b -$24,-$24,-$24,-$24,-$24,-$24,-$24,-$24,-$24,-$25; 190 dc.b -$25,-$25,-$25,-$25,-$25,-$25,-$25,-$25,-$25,-$25; 200 dc.b -$25,-$25,-$25,-$25,-$25,-$25,-$25,-$25,-$25,-$25; 210 dc.b -$25,-$25,-$25,-$25,-$25,-$25,-$25,-$25,-$24,-$24; 220 dc.b -$24,-$24,-$24,-$24,-$24,-$23,-$23,-$23,-$23,-$23; 230 dc.b -$23,-$23,-$23,-$22,-$22,-$22,-$21,-$21,-$21,-$21; 240 dc.b -$20,-$20,-$20,-$1F,-$1F,-$1F,-$1E,-$1E,-$1E,-$1D; 250 dc.b -$1D,-$1C,-$1C,-$1C,-$1B,-$1B,-$1A,-$1A,-$19,-$19; 260 dc.b -$18,-$18,-$17,-$17,-$16,-$16,-$15,-$15,-$14,-$13; 270 dc.b -$13,-$12,-$12,-$11,-$10,-$10, -$F, -$E, -$E, -$D; 280 dc.b -$C, -$B, -$B, -$A, -9, -8, -7, -7, -6, -5; 290 dc.b -4, -3, -2, -1, 0, 1, 2, 3, 4, 5; 300 dc.b 6, 7, 8, 8, 9, $A, $A, $B, $C, $D; 310 dc.b $D, $E, $E, $F, $F, $10, $10, $11, $11, $12; 320 dc.b $12, $13, $13, $14, $14, $15, $15, $16, $16, $17; 330 dc.b $17, $18, $18, $18, $19, $19, $19, $19, $1A, $1A; 340 dc.b $1A, $1A, $1B, $1B, $1B, $1B, $1C, $1C, $1C, $1C; 350 dc.b $1C, $1C, $1D, $1D, $1D, $1D, $1D, $1D, $1D, $1E; 360 dc.b $1E, $1E, $1E, $1E, $1E, $1E, $1F, $1F, $1F, $1F; 370 dc.b $1F, $1F, $1F, $1F, $1F, $1F, $20, $20, $20, $20; 380 dc.b $20, $20, $20, $20, $20, $20, $20, $20, $20, $20; 390 dc.b $20, $20, $20, $20, $20, $20, $20, $20, $20, $20; 400 dc.b $20, $20, $20, $20, $20, $20; 410 ; --------------------------------------------------------------------------- Obj06_Cylinder: ; ... lea ($FFFFB000).w,a1 lea ($FFFFF7B2).w,a2 moveq #3,d6 bsr.s sub_31B8E2 lea ($FFFFB040).w,a1 lea ($FFFFF7B3).w,a2 addq.b #1,d6 ; =============== S U B R O U T I N E ======================================= sub_31B8E2: ; ... btst d6,$22(a0) bne.w loc_31B952 move.w 8(a1),d0 sub.w 8(a0),d0 cmp.w #$FF40,d0 blt.s return_31B950 cmp.w #$C0,d0 bge.s return_31B950 move.w $C(a0),d0 add.w #$3C,d0 move.w $C(a1),d2 move.b $16(a1),d1 ext.w d1 add.w d2,d1 addq.w #4,d1 sub.w d1,d0 bhi.s return_31B950 cmp.w #$FFF0,d0 bcs.s return_31B950 cmp.b #6,$24(a1) bcc.s return_31B950 add.w d0,d2 addq.w #3,d2 move.w d2,$C(a1) move.b #1,$29(a1) jsr loc_315232 move.w #1,$1C(a1) move.b #0,(a2) tst.w $14(a1) bne.s return_31B950 move.w #1,$14(a1) return_31B950: ; ... rts ; --------------------------------------------------------------------------- loc_31B952: ; ... btst #1,$22(a1) bne.s loc_31B98C move.w 8(a1),d0 sub.w 8(a0),d0 add.w #$C0,d0 bmi.s loc_31B96E cmp.w #$180,d0 bcs.s loc_31B9A6 loc_31B96E: ; ... bclr #3,$22(a1) bclr d6,$22(a0) move.b #0,$2C(a1) move.b #4,$2D(a1) bset #1,$22(a1) rts ; --------------------------------------------------------------------------- loc_31B98C: ; ... move.b (a2),d0 add.b #$20,d0 cmp.b #$40,d0 bcc.s loc_31B99E asr $12(a1) bra.s loc_31B96E ; --------------------------------------------------------------------------- loc_31B99E: ; ... move.w #0,$12(a1) bra.s loc_31B96E ; --------------------------------------------------------------------------- loc_31B9A6: ; ... btst #3,$22(a1) beq.s return_31B950 move.b (a2),d0 jsr CalcSine muls.w #$2800,d1 swap d1 move.w $C(a0),d2 add.w d1,d2 moveq #0,d1 move.b $16(a1),d1 sub.w #$13,d1 sub.w d1,d2 move.w d2,$C(a1) move.b (a2),d0 move.b d0,$27(a1) addq.b #4,(a2) tst.w $14(a1) bne.s return_31B9E6 move.w #1,$14(a1) return_31B9E6: ; ... rts ; End of function sub_31B8E2 ; --------------------------------------------------------------------------- ; --------------------------------------------------- ; Object 14 - see-saw from HTZ (aka 'sisoo') ; --------------------------------------------------- Obj14: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31BA00(pc,d0.w),d1 jsr off_31BA00(pc,d1.w) move.w $30(a0),d0 jmp MarkObjGone2 ; --------------------------------------------------------------------------- off_31BA00: dc.w loc_31BA0C-off_31BA00,loc_31BA7E-off_31BA00,return_31BB3C-off_31BA00; 0 ; ... dc.w loc_31BB6A-off_31BA00,loc_31BBC6-off_31BA00,loc_31BC5E-off_31BA00; 3 ; --------------------------------------------------------------------------- loc_31BA0C: ; ... addq.b #2,$24(a0) move.l #Map_Obj14,4(a0) move.w #$3C6,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #4,$18(a0) move.b #$30,$19(a0) move.w 8(a0),$30(a0) tst.b $28(a0) bne.s loc_31BA6A jsr SingleObjLoad2 bne.s loc_31BA6A move.b #$14,0(a1) addq.b #6,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b $22(a0),$22(a1) move.l a0,$3C(a1) loc_31BA6A: ; ... btst #0,$22(a0) beq.s loc_31BA78 move.b #2,$1A(a0) loc_31BA78: ; ... move.b $1A(a0),$3A(a0) loc_31BA7E: ; ... move.b $3A(a0),d1 btst #3,$22(a0) beq.s loc_31BAD8 moveq #2,d1 lea ($FFFFB000).w,a1 move.w 8(a0),d0 sub.w 8(a1),d0 bcc.s loc_31BA9E neg.w d0 moveq #0,d1 loc_31BA9E: ; ... cmp.w #8,d0 bcc.s loc_31BAA6 moveq #1,d1 loc_31BAA6: ; ... btst #4,$22(a0) beq.s loc_31BB10 moveq #2,d2 lea ($FFFFB040).w,a1 move.w 8(a0),d0 sub.w 8(a1),d0 bcc.s loc_31BAC2 neg.w d0 moveq #0,d2 loc_31BAC2: ; ... cmp.w #8,d0 bcc.s loc_31BACA moveq #1,d2 loc_31BACA: ; ... add.w d2,d1 cmp.w #3,d1 bne.s loc_31BAD4 addq.w #1,d1 loc_31BAD4: ; ... lsr.w #1,d1 bra.s loc_31BB10 ; --------------------------------------------------------------------------- loc_31BAD8: ; ... btst #4,$22(a0) beq.s loc_31BAFE moveq #2,d1 lea ($FFFFB040).w,a1 move.w 8(a0),d0 sub.w 8(a1),d0 bcc.s loc_31BAF4 neg.w d0 moveq #0,d1 loc_31BAF4: ; ... cmp.w #8,d0 bcc.s loc_31BB10 moveq #1,d1 bra.s loc_31BB10 ; --------------------------------------------------------------------------- loc_31BAFE: ; ... move.w ($FFFFB012).w,d0 move.w ($FFFFB052).w,d2 cmp.w d0,d2 blt.s loc_31BB0C move.w d2,d0 loc_31BB0C: ; ... move.w d0,$38(a0) loc_31BB10: ; ... bsr.w sub_31BB3E lea (byte_31BD5E).l,a2 btst #0,$1A(a0) beq.s loc_31BB28 lea (byte_31BD8F).l,a2 loc_31BB28: ; ... move.w 8(a0),-(sp) moveq #0,d1 move.b $19(a0),d1 moveq #8,d3 move.w (sp)+,d4 jmp SlopeObject ; --------------------------------------------------------------------------- return_31BB3C: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_31BB3E: ; ... move.b $1A(a0),d0 cmp.b d1,d0 beq.s return_31BB68 bcc.s loc_31BB4A addq.b #2,d0 loc_31BB4A: ; ... subq.b #1,d0 move.b d0,$1A(a0) move.b d1,$3A(a0) bclr #0,1(a0) btst #1,$1A(a0) beq.s return_31BB68 bset #0,1(a0) return_31BB68: ; ... rts ; End of function sub_31BB3E ; --------------------------------------------------------------------------- loc_31BB6A: ; ... addq.b #2,$24(a0) move.l #Map_Obj14_0,4(a0) move.w #$3DE,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #4,$18(a0) move.b #$8B,$20(a0) move.b #$C,$19(a0) move.w 8(a0),$30(a0) add.w #$28,8(a0) add.w #$10,$C(a0) move.w $C(a0),$34(a0) btst #0,$22(a0) beq.s loc_31BBC6 sub.w #$50,8(a0) move.b #2,$3A(a0) loc_31BBC6: ; ... bsr.w sub_31BD36 move.l $3C(a0),a1 moveq #0,d0 move.b $3A(a0),d0 sub.b $3A(a1),d0 beq.s loc_31BC20 bcc.s loc_31BBDE neg.b d0 loc_31BBDE: ; ... move.w #$F7E8,d1 move.w #$FEEC,d2 cmp.b #1,d0 beq.s loc_31BC04 move.w #$F510,d1 move.w #$FF34,d2 cmp.w #$A00,$38(a1) blt.s loc_31BC04 move.w #$F200,d1 move.w #$FF60,d2 loc_31BC04: ; ... move.w d1,$12(a0) move.w d2,$10(a0) move.w 8(a0),d0 sub.w $30(a0),d0 bcc.s loc_31BC1A neg.w $10(a0) loc_31BC1A: ; ... addq.b #2,$24(a0) bra.s loc_31BC5E ; --------------------------------------------------------------------------- loc_31BC20: ; ... lea (Obj14_YOffsets).l,a2 moveq #0,d0 move.b $1A(a1),d0 move.w #$28,d2 move.w 8(a0),d1 sub.w $30(a0),d1 bcc.s loc_31BC3E neg.w d2 addq.w #2,d0 loc_31BC3E: ; ... add.w d0,d0 move.w $34(a0),d1 add.w (a2,d0.w),d1 move.w d1,$C(a0) add.w $30(a0),d2 move.w d2,8(a0) clr.w $E(a0) clr.w $A(a0) rts ; --------------------------------------------------------------------------- loc_31BC5E: ; ... bsr.w sub_31BD36 tst.w $12(a0) bpl.s loc_31BC84 jsr ObjectMoveAndFall move.w $34(a0),d0 sub.w #$2F,d0 cmp.w $C(a0),d0 bgt.s return_31BC82 jsr ObjectMoveAndFall return_31BC82: ; ... rts ; --------------------------------------------------------------------------- loc_31BC84: ; ... jsr ObjectMoveAndFall move.l $3C(a0),a1 lea (Obj14_YOffsets).l,a2 moveq #0,d0 move.b $1A(a1),d0 move.w 8(a0),d1 sub.w $30(a0),d1 bcc.s loc_31BCA6 addq.w #2,d0 loc_31BCA6: ; ... add.w d0,d0 move.w $34(a0),d1 add.w (a2,d0.w),d1 cmp.w $C(a0),d1 bgt.s return_31BCFA move.l $3C(a0),a1 moveq #2,d1 tst.w $10(a0) bmi.s loc_31BCC4 moveq #0,d1 loc_31BCC4: ; ... move.b d1,$3A(a1) move.b d1,$3A(a0) cmp.b $1A(a1),d1 beq.s loc_31BCEE lea ($FFFFB000).w,a2 bclr #3,$22(a1) beq.s loc_31BCE0 bsr.s sub_31BCFC loc_31BCE0: ; ... lea ($FFFFB040).w,a2 bclr #4,$22(a1) beq.s loc_31BCEE bsr.s sub_31BCFC loc_31BCEE: ; ... clr.w $10(a0) clr.w $12(a0) subq.b #2,$24(a0) return_31BCFA: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_31BCFC: ; ... move.w $12(a0),$12(a2) neg.w $12(a2) bset #1,$22(a2) bclr #3,$22(a2) clr.b $3C(a2) move.b #$10,$1C(a2) move.b #2,$24(a2) move.w #$CC,d0 jmp PlaySound ; End of function sub_31BCFC ; --------------------------------------------------------------------------- Obj14_YOffsets: dc.w -8, -$1C, -$2F, -$1C, -8; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_31BD36: ; ... move.b ($FFFFFE05).w,d0 and.b #3,d0 bne.s loc_31BD46 bchg #5,2(a0) loc_31BD46: ; ... and.b #$FE,1(a0) move.w ($FFFFB008).w,d0 sub.w 8(a0),d0 bcs.s return_31BD5C or.b #1,1(a0) return_31BD5C: ; ... rts ; End of function sub_31BD36 ; --------------------------------------------------------------------------- byte_31BD5E: dc.b $14, $14, $16, $18, $1A, $1C, $1A, $18, $16, $14; 0 ; ... dc.b $13, $12, $11, $10, $F, $E, $D, $C, $B, $A; 10 dc.b 9, 8, 7, 6, 5, 4, 3, 2, 1, 0; 20 dc.b -1, -2, -3, -4, -5, -6, -7, -8, -9, -$A; 30 dc.b -$B, -$C, -$D, -$E, -$E, -$E, -$E, -$E, -$E; 40 byte_31BD8F: dcb.b $30, 5 ; 0 ; ... dc.b 0 ; 48 Map_Obj14: dc.w byte_31BDC8-Map_Obj14,byte_31BDFA-Map_Obj14,byte_31BDC8-Map_Obj14; 0 ; ... dc.w byte_31BDFA-Map_Obj14 ; 3 byte_31BDC8: dc.b 0, 8, -4, 5, $40, $14, -1, -8, $C, 1; 0 ; ... dc.b $20, $12, -1, -4,-$1C, 5, $40, 6, -1,-$30; 10 dc.b -$14, 5, $40, $A, -1,-$20, -$C, 5, $40, $A; 20 dc.b -1,-$10, -4, 5, $40, $A, 0, 0, 4, 5; 30 dc.b $40, $A, 0, $10, $C, 5, $40, $E, 0, $20; 40 byte_31BDFA: dc.b 0, 8, -4, 5, $40, $14, -1, -8, $C, 1; 0 ; ... dc.b $20, $12, -1, -4, -$C, 5, $40, 0, -1,-$30; 10 dc.b -$C, 5, $40, 2, -1,-$20, -$C, 5, $40, 2; 20 dc.b -1,-$10, -$C, 5, $40, 2, 0, 0, -$C, 5; 30 dc.b $40, 2, 0, $10, -$C, 5, $48, 0, 0, $20; 40 Map_Obj14_0: dc.w byte_31BE30-Map_Obj14_0,byte_31BE38-Map_Obj14_0; 0 ; ... byte_31BE30: dc.b 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... byte_31BE38: dc.b 0, 1, -8, 5, $20, 0, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- ; ----------------------------------------------- ; Object 16 - Elevator (HTZ) ; ----------------------------------------------- Obj16: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31BE4E(pc,d0.w),d1 jmp off_31BE4E(pc,d1.w) ; --------------------------------------------------------------------------- off_31BE4E: dc.w loc_31BE52-off_31BE4E,loc_31BEA6-off_31BE4E; 0 ; ... ; --------------------------------------------------------------------------- loc_31BE52: ; ... addq.b #2,$24(a0) move.l #Map_Obj16,4(a0) move.w #$43E6,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$20,$19(a0) move.b #0,$1A(a0) move.b #1,$18(a0) move.w 8(a0),$30(a0) move.w $C(a0),$32(a0) move.b #$40,$16(a0) bset #4,1(a0) moveq #0,d0 move.b $28(a0),d0 lsl.w #3,d0 move.w d0,$34(a0) loc_31BEA6: ; ... move.w 8(a0),-(sp) bsr.w loc_31BEC6 moveq #0,d1 move.b $19(a0),d1 move.w #$FFD8,d3 move.w (sp)+,d4 jsr PlatformObject jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31BEC6: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_31BED4(pc,d0.w),d1 jmp off_31BED4(pc,d1.w) ; --------------------------------------------------------------------------- off_31BED4: dc.w loc_31BEDA-off_31BED4,loc_31BF02-off_31BED4,loc_31BF60-off_31BED4; 0 ; ... ; --------------------------------------------------------------------------- loc_31BEDA: ; ... move.b $22(a0),d0 and.b #$18,d0 beq.s return_31BF00 addq.b #2,$25(a0) move.w #$200,$10(a0) btst #0,$22(a0) beq.s loc_31BEFA neg.w $10(a0) loc_31BEFA: ; ... move.w #$100,$12(a0) return_31BF00: ; ... rts ; --------------------------------------------------------------------------- loc_31BF02: ; ... move.w ($FFFFFE04).w,d0 and.w #$F,d0 bne.s loc_31BF16 move.w #$E4,d0 jsr PlaySound loc_31BF16: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 subq.w #1,$34(a0) bne.s return_31BF5E addq.b #2,$25(a0) move.b #2,$1A(a0) move.w #0,$10(a0) move.w #0,$12(a0) jsr SingleObjLoad2 bne.s return_31BF5E move.b #$1C,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b 1(a0),1(a1) move.b #6,$28(a1) return_31BF5E: ; ... rts ; --------------------------------------------------------------------------- loc_31BF60: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$38,$12(a0) move.w ($FFFFEECE).w,d0 add.w #$E0,d0 cmp.w $C(a0),d0 bcc.s return_31BFB2 move.b $22(a0),d0 and.b #$18,d0 beq.s loc_31BFAC bclr #3,$22(a0) beq.s loc_31BF98 bclr #3,($FFFFB022).w bset #1,($FFFFB022).w loc_31BF98: ; ... bclr #4,$22(a0) beq.s loc_31BFAC bclr #3,($FFFFB062).w bset #1,($FFFFB062).w loc_31BFAC: ; ... move.w #$4000,8(a0) return_31BFB2: ; ... rts ; --------------------------------------------------------------------------- Map_Obj16: dc.w byte_31BFBE-Map_Obj16,byte_31BFFC-Map_Obj16,byte_31C02E-Map_Obj16; 0 ; ... dc.w byte_31C03C-Map_Obj16,byte_31C050-Map_Obj16; 3 byte_31BFBE: dc.b 0, $A,-$3F, 5, 0, 0, -1,-$1C,-$30, 3; 0 ; ... dc.b 0, 4, -1,-$1A,-$10, 3, 0, 4, -1,-$1A; 10 dc.b $10, 1, 0, 8, -1,-$19,-$2B, 5, 0, $A; 20 dc.b 0, $C,-$20, 3, 0, $E, 0, $11, $10, 1; 30 dc.b 0, $12, 0, $11, 0, 3, 0, $E, 0, $11; 40 dc.b $20, $D, 0, $14, -1,-$20, $20, $D, 8, $14; 50 dc.b 0, 0 ; 60 byte_31BFFC: dc.b 0, 8,-$3F, 5, 0, 0, -1,-$1C,-$30, 3; 0 ; ... dc.b 0, 4, -1,-$1A,-$10, 3, 0, 4, -1,-$1A; 10 dc.b $10, 1, 0, $2C, -1,-$1A,-$2B, 5, 0, $A; 20 dc.b 0, $C,-$20, 3, 0, $E, 0, $11, $18, 1; 30 dc.b 0, $2E, 0, $11, 0, 3, 0, $E, 0, $11; 40 byte_31C02E: dc.b 0, 2, $20, $D, 0, $14, -1,-$20, $20, $D; 0 ; ... dc.b 8, $14, 0, 0 ; 10 byte_31C03C: dc.b 0, 3,-$28, 5, 0, $1C, -1, -8,-$18, 7; 0 ; ... dc.b 0, $20, -1, -8, 8, 7, 0, $20, -1, -8; 10 byte_31C050: dc.b 0, 3,-$28, 5, 0, $28, -1, -8,-$18, 7; 0 ; ... dc.b 8, $20, -1, -8, 8, 7, 8, $20, -1, -8; 10 ; --------------------------------------------------------------------------- ; --------------------------------------------- ; Object 19 - Platform (CPZ, OOZ, WFZ) ; --------------------------------------------- Obj19: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31C072(pc,d0.w),d1 jmp off_31C072(pc,d1.w) ; --------------------------------------------------------------------------- off_31C072: dc.w loc_31C07E-off_31C072,loc_31C106-off_31C072; 0 ; ... Obj19_SubtypeProperties:dc.b $20, 0 ; 0 dc.b $18, 1 ; 2 dc.b $40, 2 ; 4 dc.b $20, 3 ; 6 ; --------------------------------------------------------------------------- loc_31C07E: ; ... addq.b #2,$24(a0) move.l #Map_Obj19,4(a0) move.w #$63A0,2(a0) cmp.b #$A,($FFFFFE10).w bne.s loc_31C09E move.w #$62F4,2(a0) loc_31C09E: ; ... cmp.b #6,($FFFFFE10).w bne.s loc_31C0AC move.w #$A46D,2(a0) loc_31C0AC: ; ... jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) moveq #0,d0 move.b $28(a0),d0 lsr.w #3,d0 and.w #$1E,d0 lea Obj19_SubtypeProperties(pc,d0.w),a2 move.b (a2)+,$19(a0) move.b (a2)+,$1A(a0) move.b #4,$18(a0) move.w 8(a0),$30(a0) move.w $C(a0),$32(a0) and.b #$F,$28(a0) cmp.b #3,$28(a0) bne.s loc_31C0F8 btst #0,$22(a0) bne.s loc_31C100 loc_31C0F8: ; ... cmp.b #7,$28(a0) bne.s loc_31C106 loc_31C100: ; ... sub.w #$C0,$C(a0) loc_31C106: ; ... move.w 8(a0),-(sp) bsr.w loc_31C140 moveq #0,d1 move.b $19(a0),d1 move.w #$11,d3 move.w (sp)+,d4 jsr PlatformObject move.w $30(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_31C13A jmp DisplaySprite ; --------------------------------------------------------------------------- loc_31C13A: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_31C140: ; ... moveq #0,d0 move.b $28(a0),d0 and.w #$F,d0 add.w d0,d0 move.w off_31C154(pc,d0.w),d1 jmp off_31C154(pc,d1.w) ; --------------------------------------------------------------------------- off_31C154: dc.w loc_31C174-off_31C154,loc_31C17E-off_31C154,loc_31C19E-off_31C154; 0 ; ... dc.w loc_31C1BE-off_31C154,loc_31C1CE-off_31C154,return_31C1F0-off_31C154; 3 dc.w loc_31C1F2-off_31C154,loc_31C1F2-off_31C154,loc_31C210-off_31C154; 6 dc.w loc_31C210-off_31C154,loc_31C210-off_31C154,loc_31C210-off_31C154; 9 dc.w loc_31C24A-off_31C154,loc_31C24A-off_31C154,loc_31C24A-off_31C154; 12 dc.w loc_31C24A-off_31C154 ; 15 ; --------------------------------------------------------------------------- loc_31C174: ; ... move.b ($FFFFFE68).w,d0 move.w #$40,d1 bra.s loc_31C186 ; --------------------------------------------------------------------------- loc_31C17E: ; ... move.b ($FFFFFE6C).w,d0 move.w #$60,d1 loc_31C186: ; ... btst #0,$22(a0) beq.s loc_31C192 neg.w d0 add.w d1,d0 loc_31C192: ; ... move.w $30(a0),d1 sub.w d0,d1 move.w d1,8(a0) rts ; --------------------------------------------------------------------------- loc_31C19E: ; ... move.b ($FFFFFE7C).w,d0 move.w #$80,d1 btst #0,$22(a0) beq.s loc_31C1B2 neg.w d0 add.w d1,d0 loc_31C1B2: ; ... move.w $32(a0),d1 sub.w d0,d1 move.w d1,$C(a0) rts ; --------------------------------------------------------------------------- loc_31C1BE: ; ... move.b $22(a0),d0 and.b #$18,d0 beq.s return_31C1CC addq.b #1,$28(a0) return_31C1CC: ; ... rts ; --------------------------------------------------------------------------- loc_31C1CE: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 moveq #8,d1 move.w $32(a0),d0 sub.w #$60,d0 cmp.w $C(a0),d0 bcc.s loc_31C1E6 neg.w d1 loc_31C1E6: ; ... add.w d1,$12(a0) bne.s return_31C1F0 addq.b #1,$28(a0) return_31C1F0: ; ... rts ; --------------------------------------------------------------------------- loc_31C1F2: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 moveq #8,d1 move.w $32(a0),d0 sub.w #$60,d0 cmp.w $C(a0),d0 bcc.s loc_31C20A neg.w d1 loc_31C20A: ; ... add.w d1,$12(a0) rts ; --------------------------------------------------------------------------- loc_31C210: ; ... move.b ($FFFFFE98).w,d1 sub.b #$40,d1 ext.w d1 move.b ($FFFFFE9C).w,d2 sub.b #$40,d2 ext.w d2 btst #2,d0 beq.s loc_31C22E neg.w d1 neg.w d2 loc_31C22E: ; ... btst #1,d0 beq.s loc_31C238 neg.w d1 exg d1,d2 loc_31C238: ; ... add.w $30(a0),d1 move.w d1,8(a0) add.w $32(a0),d2 move.w d2,$C(a0) rts ; --------------------------------------------------------------------------- loc_31C24A: ; ... move.b ($FFFFFE98).w,d1 sub.b #$40,d1 ext.w d1 move.b ($FFFFFE9C).w,d2 sub.b #$40,d2 ext.w d2 btst #2,d0 beq.s loc_31C268 neg.w d1 neg.w d2 loc_31C268: ; ... btst #1,d0 beq.s loc_31C272 neg.w d1 exg d1,d2 loc_31C272: ; ... neg.w d1 add.w $30(a0),d1 move.w d1,8(a0) add.w $32(a0),d2 move.w d2,$C(a0) rts ; --------------------------------------------------------------------------- Map_Obj19: dc.w byte_31C28E-Map_Obj19,byte_31C29C-Map_Obj19,byte_31C2AA-Map_Obj19; 0 ; ... dc.w byte_31C2C4-Map_Obj19 ; 3 byte_31C28E: dc.b 0, 2,-$10, $F, 0, 0, -1,-$20,-$10, $F; 0 ; ... dc.b 8, 0, 0, 0 ; 10 byte_31C29C: dc.b 0, 2,-$10, $B, 0, 0, -1,-$18,-$10, $B; 0 ; ... dc.b 8, 0, 0, 0 ; 10 byte_31C2AA: dc.b 0, 4,-$10, $E, 0, 0, -1,-$40,-$10, $E; 0 ; ... dc.b 0, $C, -1,-$20,-$10, $E, 8, $C, 0, 0; 10 dc.b -$10, $E, 8, 0, 0, $20; 20 byte_31C2C4: dc.b 0, 2,-$10, $E, 0, 0, -1,-$20,-$10, $E; 0 ; ... dc.b 8, 0, 0, 0 ; 10 ; --------------------------------------------------------------------------- ; --------------------------------------------- ; Object 1B - Dash Panel (CPZ) ; --------------------------------------------- Obj1B: ; ... moveq #0,d0 move.b $24(a0),d0 move.w Obj1B_Index(pc,d0.w),d1 jmp Obj1B_Index(pc,d1.w) ; --------------------------------------------------------------------------- Obj1B_Index: dc.w Obj1B_Init-Obj1B_Index,Obj1B_Main-Obj1B_Index; 0 ; ... Obj1B_Speeds: dc.w $1000 dc.w $A00 ; --------------------------------------------------------------------------- Obj1B_Init: ; ... addq.b #2,$24(a0) move.l #Map_Obj1B,4(a0) move.w #$E39C,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$20,$19(a0) move.b #1,$18(a0) move.b $28(a0),d0 and.w #2,d0 move.w Obj1B_Speeds(pc,d0.w),$30(a0) Obj1B_Main: ; ... move.b ($FFFFFE05).w,d0 and.b #2,d0 move.b d0,$1A(a0) move.w 8(a0),d0 move.w d0,d1 sub.w #$10,d0 add.w #$10,d1 move.w $C(a0),d2 move.w d2,d3 sub.w #$10,d2 add.w #$10,d3 lea ($FFFFB000).w,a1 btst #1,$22(a1) bne.s loc_31C37C move.w 8(a1),d4 cmp.w d0,d4 bcs.w loc_31C37C cmp.w d1,d4 bcc.w loc_31C37C move.w $C(a1),d4 cmp.w d2,d4 bcs.w loc_31C37C cmp.w d3,d4 bcc.w loc_31C37C move.w d0,-(sp) bsr.w sub_31C3B2 move.w (sp)+,d0 loc_31C37C: ; ... lea ($FFFFB040).w,a1 btst #1,$22(a1) bne.s loc_31C3AC move.w 8(a1),d4 cmp.w d0,d4 bcs.w loc_31C3AC cmp.w d1,d4 bcc.w loc_31C3AC move.w $C(a1),d4 cmp.w d2,d4 bcs.w loc_31C3AC cmp.w d3,d4 bcc.w loc_31C3AC bsr.w sub_31C3B2 loc_31C3AC: ; ... jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_31C3B2: ; ... move.w $10(a1),d0 btst #0,$22(a0) beq.s loc_31C3C0 neg.w d0 loc_31C3C0: ; ... cmp.w #$1000,d0 bge.s loc_31C402 move.w $30(a0),$10(a1) bclr #0,$22(a1) btst #0,$22(a0) beq.s loc_31C3E4 bset #0,$22(a1) neg.w $10(a1) loc_31C3E4: ; ... move.w #$F,$2E(a1) move.w $10(a1),$14(a1) bclr #5,$22(a0) bclr #6,$22(a0) bclr #5,$22(a1) loc_31C402: ; ... move.w #$CC,d0 jmp PlaySound ; End of function sub_31C3B2 ; --------------------------------------------------------------------------- Map_Obj1B: dc.w byte_31C412-Map_Obj1B,byte_31C412-Map_Obj1B,byte_31C420-Map_Obj1B; 0 ; ... byte_31C412: dc.b 0, 2, -8, 5, 0, 0, -1,-$18, -8, 5; 0 ; ... dc.b 0, 0, 0, 8 ; 10 byte_31C420: dc.b 0, 0 ; 0 ; ... ; --------------------------------------------------------------------------- ; ------------------------------------------------- ; Object 1D - Blue balls (CPZ) ; ------------------------------------------------- Obj1D: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31C430(pc,d0.w),d1 jmp off_31C430(pc,d1.w) ; --------------------------------------------------------------------------- off_31C430: dc.w loc_31C442-off_31C430,loc_31C4F4-off_31C430,loc_31C514-off_31C430; 0 ; ... dc.w loc_31C4F4-off_31C430,loc_31C54C-off_31C430; 3 dc.w -$480, -$500, -$600, -$700 ; 0 ; --------------------------------------------------------------------------- loc_31C442: ; ... addq.b #2,$24(a0) move.w #$FB80,$12(a0) moveq #0,d1 move.b $28(a0),d1 move.b d1,d0 and.b #$F,d1 moveq #2,d5 and.b #$F0,d0 beq.s loc_31C462 moveq #6,d5 loc_31C462: ; ... move.b $22(a0),d4 moveq #0,d2 move.l a0,a1 bra.s loc_31C474 ; --------------------------------------------------------------------------- loc_31C46C: ; ... jsr SingleObjLoad2 bne.s loc_31C4EE loc_31C474: ; ... move.b 0(a0),0(a1) move.b d5,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.l #Map_Obj1D,4(a1) move.w #$643C,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #3,$18(a1) move.b #$8B,$20(a1) move.w 8(a1),$38(a1) move.w $C(a1),$30(a1) move.w $12(a0),$12(a1) move.w $12(a1),$34(a1) move.b #8,$19(a1) move.w #$60,$3A(a1) move.w #$B,$36(a1) and.b #1,d4 beq.s loc_31C4E8 neg.w $36(a1) neg.w $3A(a1) loc_31C4E8: ; ... move.w d2,$32(a1) addq.w #3,d2 loc_31C4EE: ; ... dbf d1,loc_31C46C rts ; --------------------------------------------------------------------------- loc_31C4F4: ; ... subq.w #1,$32(a0) bpl.s loc_31C50E addq.b #2,$24(a0) move.w #$3B,$32(a0) move.w #$DA,d0 jsr PlaySoundLocal loc_31C50E: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31C514: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 move.w $36(a0),d0 add.w d0,$10(a0) add.w #$18,$12(a0) bne.s loc_31C52E neg.w $36(a0) loc_31C52E: ; ... move.w $30(a0),d0 cmp.w $C(a0),d0 bhi.s loc_31C546 move.w $34(a0),$12(a0) clr.w $10(a0) subq.b #2,$24(a0) loc_31C546: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31C54C: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) bne.s loc_31C566 move.w $3A(a0),d0 add.w $38(a0),d0 move.w d0,8(a0) loc_31C566: ; ... cmp.w #$180,$12(a0) bne.s loc_31C578 move.w #$DA,d0 jsr PlaySoundLocal loc_31C578: ; ... move.w $30(a0),d0 cmp.w $C(a0),d0 bhi.s loc_31C598 move.w $34(a0),$12(a0) move.w $38(a0),8(a0) move.w #$DA,d0 jsr PlaySoundLocal loc_31C598: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- Map_Obj1D: dc.w byte_31C5A0-Map_Obj1D ; 0 ; ... byte_31C5A0: dc.b 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- ; --------------------------------------------------- ; Object 1E - Spin Tube (CPZ) ; --------------------------------------------------- Obj1E: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31C5C8(pc,d0.w),d1 jsr off_31C5C8(pc,d1.w) move.b $2C(a0),d0 add.b $36(a0),d0 beq.s loc_31C5C2 rts ; --------------------------------------------------------------------------- loc_31C5C2: ; ... jmp MarkObjGone3 ; --------------------------------------------------------------------------- off_31C5C8: dc.w loc_31C5D2-off_31C5C8,loc_31C5E6-off_31C5C8; 0 ; ... word_31C5CC: dc.w $A0 dc.w $100 dc.w $120 ; --------------------------------------------------------------------------- loc_31C5D2: ; ... addq.b #2,$24(a0) move.b $28(a0),d0 add.w d0,d0 and.w #6,d0 move.w word_31C5CC(pc,d0.w),$2A(a0) loc_31C5E6: ; ... lea ($FFFFB000).w,a1 lea $2C(a0),a4 bsr.s loc_31C5F8 lea ($FFFFB040).w,a1 lea $36(a0),a4 loc_31C5F8: ; ... moveq #0,d0 move.b (a4),d0 move.w off_31C604(pc,d0.w),d0 jmp off_31C604(pc,d0.w) ; --------------------------------------------------------------------------- off_31C604: dc.w loc_31C60C-off_31C604,loc_31C72A-off_31C604,loc_31C80E-off_31C604; 0 ; ... dc.w loc_31C87A-off_31C604 ; 3 ; --------------------------------------------------------------------------- loc_31C60C: ; ... tst.w ($FFFFFE08).w bne.w return_31C728 move.w $2A(a0),d2 move.w 8(a1),d0 sub.w 8(a0),d0 cmp.w d2,d0 bcc.w return_31C728 move.w $C(a1),d1 sub.w $C(a0),d1 cmp.w #$80,d1 bcc.w return_31C728 cmp.b #$20,$1C(a1) beq.w return_31C728 moveq #0,d3 cmp.w #$A0,d2 beq.s loc_31C658 moveq #8,d3 cmp.w #$120,d2 beq.s loc_31C658 moveq #4,d3 neg.w d0 add.w #$100,d0 loc_31C658: ; ... cmp.w #$80,d0 bcs.s loc_31C68E moveq #0,d2 move.b $28(a0),d0 lsr.w #2,d0 loc_31C666: and.w #$F,d0 move.b byte_31C67E(pc,d0.w),d2 cmp.b #2,d2 bne.s loc_31C698 move.b ($FFFFFE24).w,d2 and.b #1,d2 bra.s loc_31C698 ; --------------------------------------------------------------------------- byte_31C67E: dc.b 2, 2, 2, 2, 2, 2, 2, 2, 2, 2; 0 ; ... dc.b 0, 2, 0, 1, 2, 1; 10 ; --------------------------------------------------------------------------- loc_31C68E: ; ... moveq #2,d2 cmp.w #$40,d1 bcc.s loc_31C698 moveq #3,d2 loc_31C698: ; ... move.b d2,1(a4) add.w d3,d2 add.w d2,d2 and.w #$1E,d2 lea off_31C990(pc),a2 add.w (a2,d2.w),a2 move.w (a2)+,4(a4) subq.w #4,4(a4) move.w (a2)+,d4 add.w 8(a0),d4 move.w d4,8(a1) move.w (a2)+,d5 add.w $C(a0),d5 move.w d5,$C(a1) move.l a2,6(a4) move.w (a2)+,d4 add.w 8(a0),d4 move.w (a2)+,d5 add.w $C(a0),d5 addq.b #2,(a4) move.b #$81,$2A(a1) move.b #2,$1C(a1) loc_31C6E6: move.w #$800,$14(a1) move.w #0,$10(a1) move.w #0,$12(a1) bclr #5,$22(a0) bclr #5,$22(a1) bset #1,$22(a1) move.b #0,$3C(a1) bclr #7,2(a1) move.w #$800,d2 bsr.w sub_31C912 move.w #$BE,d0 jsr PlaySound return_31C728: ; ... rts ; --------------------------------------------------------------------------- loc_31C72A: ; ... subq.b #1,2(a4) bpl.s loc_31C76E move.l 6(a4),a2 move.w (a2)+,d4 add.w 8(a0),d4 move.w d4,8(a1) move.w (a2)+,d5 add.w $C(a0),d5 move.w d5,$C(a1) tst.b 1(a4) bpl.s loc_31C750 subq.w #8,a2 loc_31C750: ; ... move.l a2,6(a4) subq.w #4,4(a4) beq.s loc_31C794 move.w (a2)+,d4 add.w 8(a0),d4 move.w (a2)+,d5 add.w $C(a0),d5 move.w #$800,d2 bra.w sub_31C912 ; --------------------------------------------------------------------------- loc_31C76E: ; ... move.l 8(a1),d2 move.l $C(a1),d3 move.w $10(a1),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a1),d0 ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,8(a1) move.l d3,$C(a1) rts ; --------------------------------------------------------------------------- loc_31C794: ; ... cmp.b #4,1(a4) bcc.s loc_31C7B6 move.b $28(a0),d0 and.w #$FC,d0 add.b 1(a4),d0 move.b #4,1(a4) move.b byte_31C7CE(pc,d0.w),d0 bne.w loc_31C8A2 loc_31C7B6: ; ... and.w #$7FF,$C(a1) move.b #6,(a4) clr.b $2A(a1) move.w #$BC,d0 jmp PlaySound ; --------------------------------------------------------------------------- byte_31C7CE: dc.b 2, 1, 0, 0, -1, 3, 0, 0, 4, -2; 0 ; ... dc.b 0, 0, -3, -4, 0, 0, -5, -5, 0, 0; 10 dc.b 7, 6, 0, 0, -7, -6, 0, 0, 8, 9; 20 dc.b 0, 0, -8, -9, 0, 0, $B, $A, 0, 0; 30 dc.b $C, 0, 0, 0, -$B, -$A, 0, 0, -$C, 0; 40 dc.b 0, 0, 0, $D, 0, 0, -$D, $E, 0, 0; 50 dc.b 0, -$E, 0, 0 ; 60 ; --------------------------------------------------------------------------- loc_31C80E: ; ... subq.b #1,2(a4) bpl.s loc_31C842 move.l 6(a4),a2 move.w (a2)+,d4 move.w d4,8(a1) move.w (a2)+,d5 move.w d5,$C(a1) tst.b 1(a4) bpl.s loc_31C82C subq.w #8,a2 loc_31C82C: ; ... move.l a2,6(a4) subq.w #4,4(a4) beq.s loc_31C868 move.w (a2)+,d4 move.w (a2)+,d5 move.w #$800,d2 bra.w sub_31C912 ; --------------------------------------------------------------------------- loc_31C842: ; ... move.l 8(a1),d2 move.l $C(a1),d3 move.w $10(a1),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a1),d0 ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,8(a1) move.l d3,$C(a1) rts ; --------------------------------------------------------------------------- loc_31C868: ; ... and.w #$7FF,$C(a1) clr.b (a4) move.w #$BC,d0 jmp PlaySound ; --------------------------------------------------------------------------- loc_31C87A: ; ... move.w $2A(a0),d2 move.w 8(a1),d0 sub.w 8(a0),d0 cmp.w d2,d0 bcc.w loc_31C89E move.w $C(a1),d1 sub.w $C(a0),d1 cmp.w #$80,d1 bcc.w loc_31C89E rts ; --------------------------------------------------------------------------- loc_31C89E: ; ... clr.b (a4) rts ; --------------------------------------------------------------------------- loc_31C8A2: ; ... bpl.s loc_31C8D4 neg.b d0 move.b #$FC,1(a4) add.w d0,d0 lea (word_31CE98).l,a2 add.w (a2,d0.w),a2 move.w (a2)+,d0 subq.w #4,d0 move.w d0,4(a4) lea (a2,d0.w),a2 move.w (a2)+,d4 move.w d4,8(a1) move.w (a2)+,d5 move.w d5,$C(a1) subq.w #8,a2 bra.s loc_31C8F4 ; --------------------------------------------------------------------------- loc_31C8D4: ; ... add.w d0,d0 lea (word_31CE98).l,a2 add.w (a2,d0.w),a2 move.w (a2)+,4(a4) subq.w #4,4(a4) move.w (a2)+,d4 move.w d4,8(a1) move.w (a2)+,d5 move.w d5,$C(a1) loc_31C8F4: ; ... move.l a2,6(a4) move.w (a2)+,d4 move.w (a2)+,d5 move.w #$800,d2 bsr.w sub_31C912 move.w #$BE,d0 jsr PlaySound addq.b #2,(a4) rts ; =============== S U B R O U T I N E ======================================= sub_31C912: ; ... moveq #0,d0 move.w d2,d3 move.w d4,d0 sub.w 8(a1),d0 bge.s loc_31C922 neg.w d0 neg.w d2 loc_31C922: ; ... moveq #0,d1 move.w d5,d1 sub.w $C(a1),d1 bge.s loc_31C930 neg.w d1 neg.w d3 loc_31C930: ; ... cmp.w d0,d1 bcs.s loc_31C962 moveq #0,d1 move.w d5,d1 sub.w $C(a1),d1 swap d1 divs.w d3,d1 moveq #0,d0 move.w d4,d0 sub.w 8(a1),d0 beq.s loc_31C94E swap d0 divs.w d1,d0 loc_31C94E: ; ... move.w d0,$10(a1) move.w d3,$12(a1) tst.w d1 bpl.s loc_31C95C neg.w d1 loc_31C95C: ; ... move.w d1,2(a4) rts ; --------------------------------------------------------------------------- loc_31C962: ; ... moveq #0,d0 move.w d4,d0 sub.w 8(a1),d0 swap d0 divs.w d2,d0 moveq #0,d1 move.w d5,d1 sub.w $C(a1),d1 beq.s loc_31C97C swap d1 divs.w d0,d1 loc_31C97C: ; ... move.w d1,$12(a1) move.w d2,$10(a1) tst.w d0 bpl.s loc_31C98A neg.w d0 loc_31C98A: ; ... move.w d0,2(a4) rts ; End of function sub_31C912 ; --------------------------------------------------------------------------- off_31C990: dc.w word_31C9A8-off_31C990,word_31CA1E-off_31C990,word_31CA7C-off_31C990; 0 ; ... dc.w word_31CAF2-off_31C990,word_31CB50-off_31C990,word_31CBC2-off_31C990; 3 dc.w word_31CC20-off_31C990,word_31CC92-off_31C990,word_31CCF0-off_31C990; 6 dc.w word_31CD66-off_31C990,word_31CDC4-off_31C990,word_31CE3A-off_31C990; 9 word_31C9A8: dc.w $74, $90, $10, $90, $70, $40, $70; 0 ; ... dc.w $35, $6F, $28, $6A, $1E, $62, $15; 7 dc.w $58, $11, $4A, $10, $40, $11, $35; 14 dc.w $15, $27, $1E, $1E, $28, $15, $35; 21 dc.w $11, $40, $10, $50, $10, $5E, $12; 28 dc.w $68, $18, $6D, $24, $70, $30, $6D; 35 dc.w $3D, $68, $48, $5E, $4E, $50, $50; 42 dc.w $30, $50, $22, $52, $17, $5A, $11; 49 dc.w $63, $10, $70 ; 56 word_31CA1E: dc.w $5C, $90, $10, $90, $70, $40, $70; 0 ; ... dc.w $2E, $6E, $1D, $62, $13, $53, $10; 7 dc.w $40, $13, $2D, $1D, $1E, $2E, $13; 14 dc.w $40, $10, $58, $10, $64, $14, $6C; 21 dc.w $1A, $70, $28, $6C, $36, $64, $3C; 28 dc.w $58, $40, $4B, $3D, $40, $38, $36; 35 dc.w $32, $28, $30, $10, $30; 42 word_31CA7C: dc.w $74, $10, $70, $11, $63, $17, $5A; 0 ; ... dc.w $22, $52, $30, $50, $50, $50, $5E; 7 dc.w $4E, $68, $48, $6D, $3D, $70, $30; 14 dc.w $6D, $24, $68, $18, $5E, $12, $50; 21 dc.w $10, $40, $10, $35, $11, $28, $15; 28 dc.w $1E, $1E, $15, $27, $11, $35, $10; 35 dc.w $40, $11, $4A, $15, $58, $1E, $62; 42 dc.w $28, $6A, $35, $6F, $40, $70, $90; 49 dc.w $70, $90, $10 ; 56 word_31CAF2: dc.w $5C, $10, $30, $28, $30, $36, $32; 0 ; ... dc.w $40, $38, $4B, $3D, $58, $40, $64; 7 dc.w $3C, $6C, $36, $70, $28, $6C, $1A; 14 dc.w $64, $14, $58, $10, $40, $10, $2E; 21 dc.w $13, $1D, $1E, $13, $2D, $10, $40; 28 dc.w $13, $53, $1D, $62, $2E, $6E, $40; 35 dc.w $70, $90, $70, $90, $10; 42 word_31CB50: dc.w $70, $10, $10, $10, $70, $C0, $70; 0 ; ... dc.w $CA, $6F, $D4, $6C, $DB, $68, $E3; 7 dc.w $62, $E8, $5A, $ED, $52, $EF, $48; 14 dc.w $F0, $40, $EF, $36, $ED, $2E, $E8; 21 dc.w $26, $E3, $1E, $DB, $17, $D4, $14; 28 dc.w $CA, $12, $C0, $10, $B7, $11, $AF; 35 dc.w $12, $A6, $17, $9E, $1E, $97, $26; 42 dc.w $93, $2E, $91, $36, $90, $40, $90; 49 dc.w $70 ; 56 word_31CBC2: dc.w $5C, $10, $10, $10, $70, $C0, $70; 0 ; ... dc.w $D2, $6E, $E3, $62, $ED, $53, $F0; 7 dc.w $40, $ED, $2D, $E3, $1E, $D2, $13; 14 dc.w $C0, $10, $A8, $10, $9C, $14, $94; 21 dc.w $1A, $90, $28, $94, $36, $9C, $3C; 28 dc.w $A8, $40, $B5, $3D, $C0, $38, $CA; 35 dc.w $32, $D8, $30, $F0, $30; 42 word_31CC20: dc.w $70, $90, $70, $90, $40, $91, $36; 0 ; ... dc.w $93, $2E, $97, $26, $9E, $1E, $A6; 7 dc.w $17, $AF, $12, $B7, $11, $C0, $10; 14 dc.w $CA, $12, $D4, $14, $DB, $17, $E3; 21 dc.w $1E, $E8, $26, $ED, $2E, $EF, $36; 28 dc.w $F0, $40, $EF, $48, $ED, $52, $E8; 35 dc.w $5A, $E3, $62, $DB, $68, $D4, $6C; 42 dc.w $CA, $6F, $C0, $70, $10, $70, $10; 49 dc.w $10 ; 56 word_31CC92: dc.w $5C, $F0, $30, $D8, $30, $CA, $32; 0 ; ... dc.w $C0, $38, $B5, $3D, $A8, $40, $9C; 7 dc.w $3C, $94, $36, $90, $28, $94, $1A; 14 dc.w $9C, $14, $A8, $10, $C0, $10, $D2; 21 dc.w $13, $E3, $1E, $ED, $2D, $F0, $40; 28 dc.w $ED, $53, $E3, $62, $D2, $6E, $C0; 35 dc.w $70, $10, $70, $10, $10; 42 word_31CCF0: dc.w $74, $110, $10, $110, $70, $40, $70; 0 ; ... dc.w $35, $6F, $28, $6A, $1E, $62, $15; 7 dc.w $58, $11, $4A, $10, $40, $11, $35; 14 dc.w $15, $27, $1E, $1E, $28, $15, $35; 21 dc.w $11, $40, $10, $50, $10, $5E, $12; 28 dc.w $68, $18, $6D, $24, $70, $30, $6D; 35 dc.w $3D, $68, $48, $5E, $4E, $50, $50; 42 dc.w $30, $50, $22, $52, $17, $5A, $11; 49 dc.w $63, $10, $70 ; 56 word_31CD66: dc.w $5C, $110, $10, $110, $70, $40, $70; 0 ; ... dc.w $2E, $6E, $1D, $62, $13, $53, $10; 7 dc.w $40, $13, $2D, $1D, $1E, $2E, $13; 14 dc.w $40, $10, $58, $10, $64, $14, $6C; 21 dc.w $1A, $70, $28, $6C, $36, $64, $3C; 28 dc.w $58, $40, $4B, $3D, $40, $38, $36; 35 dc.w $32, $28, $30, $10, $30; 42 word_31CDC4: dc.w $74, $10, $70, $11, $63, $17, $5A; 0 ; ... dc.w $22, $52, $30, $50, $50, $50, $5E; 7 dc.w $4E, $68, $48, $6D, $3D, $70, $30; 14 dc.w $6D, $24, $68, $18, $5E, $12, $50; 21 dc.w $10, $40, $10, $35, $11, $28, $15; 28 dc.w $1E, $1E, $15, $27, $11, $35, $10; 35 dc.w $40, $11, $4A, $15, $58, $1E, $62; 42 dc.w $28, $6A, $35, $6F, $40, $70, $110; 49 dc.w $70, $110, $10 ; 56 word_31CE3A: dc.w $5C, $10, $30, $28, $30, $36, $32; 0 ; ... dc.w $40, $38, $4B, $3D, $58, $40, $64; 7 dc.w $3C, $6C, $36, $70, $28, $6C, $1A; 14 dc.w $64, $14, $58, $10, $40, $10, $2E; 21 dc.w $13, $1D, $1E, $13, $2D, $10, $40; 28 dc.w $13, $53, $1D, $62, $2E, $6E, $40; 35 dc.w $70, $110, $70, $110, $10; 42 word_31CE98: dc.w $1E, $1E, $34, $5E, $74, $8A, $A0; 0 ; ... dc.w $B2, $CC, $E6, $F8, $10A, $124, $13A; 7 dc.w $148, $14, $790, $3B0, $710, $3B0, $710; 14 dc.w $6B0, $A90, $6B0, $A90, $670, $28, $790; 21 dc.w $3F0, $790, $4B0, $A00, $4B0, $C10, $4B0; 28 dc.w $C10, $330, $D90, $330, $D90, $1B0, $F10; 35 dc.w $1B0, $F10, $2B0, $F90, $2B0, $14, $AF0; 42 dc.w $630, $E90, $630, $E90, $6B0, $F90, $6B0; 49 dc.w $F90, $670, $14, $F90, $2F0, $F90, $4B0; 56 dc.w $F10, $4B0, $F10, $630, $F90, $630, $14; 63 dc.w $1410, $530, $1190, $530, $1190, $6B0, $1410; 70 dc.w $6B0, $1410, $570, $10, $1AF0, $530, $1B90; 77 dc.w $530, $1B90, $330, $1E10, $330, $18, $1A90; 84 dc.w $570, $1A90, $5B0, $1C10, $5B0, $1C10, $430; 91 dc.w $1E10, $430, $1E10, $370, $18, $2490, $370; 98 dc.w $2490, $3D0, $2390, $3D0, $2390, $5D0, $2510; 105 dc.w $5D0, $2510, $570, $10, $24F0, $330, $2590; 112 dc.w $330, $2590, $530, $2570, $530, $10, $310; 119 dc.w $330, $290, $330, $290, $230, $490, $230; 126 dc.w $18, $310, $370, $310, $3B0, $410, $3B0; 133 dc.w $410, $2B0, $490, $2B0, $490, $270, $14; 140 dc.w $490, $6F0, $490, $730, $690, $730, $890; 147 dc.w $730, $890, $6F0, $C, $BF0, $330, $D90; 154 dc.w $330, $D90, $2F0, $1C, $D90, $2B0, $C90; 161 dc.w $2B0, $C90, $B0, $E80, $B0, $1110, $B0; 168 dc.w $1110, $230, $10F0, $230 ; 175 ; --------------------------------------------------------------------------- ; -------------------------------------------------------- ; Object 20 - Lava bubble (HTZ, Boss Weapon) ; -------------------------------------------------------- Obj20: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31D00C(pc,d0.w),d1 jmp off_31D00C(pc,d1.w) ; --------------------------------------------------------------------------- off_31D00C: dc.w loc_31D01A-off_31D00C,loc_31D07E-off_31D00C,loc_31D090-off_31D00C; 0 ; ... dc.w loc_31D132-off_31D00C,loc_31D15C-off_31D00C,loc_31D1F2-off_31D00C; 3 dc.w j_DeleteObject_4-off_31D00C ; 6 ; --------------------------------------------------------------------------- loc_31D01A: ; ... addq.b #2,$24(a0) move.b #8,$16(a0) move.b #8,$17(a0) move.l #Map_Obj20,4(a0) move.w #$8416,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #3,$18(a0) move.b #8,$19(a0) move.w $C(a0),$30(a0) moveq #0,d0 move.b $28(a0),d0 lsl.w #3,d0 and.w #$780,d0 neg.w d0 move.w d0,$10(a0) move.w d0,$12(a0) move.b $28(a0),d0 and.w #$F,d0 lsl.w #4,d0 move.w d0,$32(a0) move.w d0,$34(a0) loc_31D07E: ; ... lea (Ani_Obj20).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31D090: ; ... cmp.b #5,$1E(a0) bne.s loc_31D0C4 jsr SingleObjLoad2 bne.s loc_31D0B6 bsr.s sub_31D0D6 jsr SingleObjLoad2 bne.s loc_31D0B6 bsr.s sub_31D0D6 neg.w $10(a1) bset #0,1(a1) loc_31D0B6: ; ... move.w #$AE,d0 jsr PlaySound addq.b #2,$24(a0) loc_31D0C4: ; ... lea (Ani_Obj20).l,a1 jsr AnimateSprite jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_31D0D6: ; ... move.b #$20,0(a1) move.b #8,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w $10(a0),$10(a1) move.w $12(a0),$12(a1) move.b #8,$16(a1) move.b #8,$17(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) or.b #4,1(a1) move.b #3,$18(a1) move.b #8,$19(a1) move.b #$8B,$20(a1) move.w $C(a1),$30(a1) rts ; End of function sub_31D0D6 ; --------------------------------------------------------------------------- loc_31D132: ; ... subq.w #1,$32(a0) bpl.s loc_31D14A move.w $34(a0),$32(a0) move.b #2,$24(a0) move.w #1,$1C(a0) loc_31D14A: ; ... lea (Ani_Obj20).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31D15C: ; ... subq.b #1,$1E(a0) bpl.s loc_31D172 move.b #7,$1E(a0) addq.b #1,$1A(a0) and.b #1,$1A(a0) loc_31D172: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) move.w ($FFFFEECE).w,d0 add.w #$E0,d0 cmp.w $C(a0),d0 bcc.s loc_31D192 jmp DeleteObject ; --------------------------------------------------------------------------- loc_31D192: ; ... bclr #1,1(a0) tst.w $12(a0) bmi.s loc_31D1EC bset #1,1(a0) bsr.w ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_31D1EC add.w d1,$C(a0) addq.b #2,$24(a0) move.b #2,$1C(a0) move.b #4,$1A(a0) move.w #0,$12(a0) move.l #Map_Obj20_0,4(a0) move.w #$839E,2(a0) jsr Adjust2PArtPointer2_Useless move.b #0,$1A(a0) move.w #9,$32(a0) move.b #3,$36(a0) loc_31D1EC: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31D1F2: ; ... subq.w #1,$32(a0) bpl.s loc_31D246 move.w #$7F,$32(a0) subq.b #1,$36(a0) bmi.s loc_31D246 jsr SingleObjLoad2 bne.s loc_31D246 moveq #0,d0 move.w #$F,d1 loc_31D212: ; ... move.l (a0,d0.w),(a1,d0.w) addq.w #4,d0 dbf d1,loc_31D212 move.w #9,$32(a1) move.w #$200,$1C(a1) move.w #$E,d0 tst.w $10(a1) bpl.s loc_31D236 neg.w d0 loc_31D236: ; ... add.w d0,8(a1) move.l a1,-(sp) bsr.w FireCheckFloorDist move.l (sp)+,a1 add.w d1,$C(a1) loc_31D246: ; ... lea (Ani_Obj20).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- j_DeleteObject_4: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Ani_Obj20: dc.w byte_31D264-Ani_Obj20,byte_31D26B-Ani_Obj20,byte_31D26E-Ani_Obj20; 0 ; ... byte_31D264: dc.b $B, 2, 3, -4, 4, -3, 1; 0 ; ... byte_31D26B: dc.b $7F, 5, -1 ; 0 ; ... byte_31D26E: dc.b 5, 4, 5, 2, 3, 0, 1, 0, 1, 2; 0 ; ... dc.b 3, 4, 5, -4 ; 10 Map_Obj20: dc.w byte_31D288-Map_Obj20,byte_31D290-Map_Obj20,byte_31D298-Map_Obj20; 0 ; ... dc.w byte_31D2A0-Map_Obj20,byte_31D2A8-Map_Obj20,byte_31D2B0-Map_Obj20; 3 byte_31D288: dc.b 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... byte_31D290: dc.b 0, 1, -8, 5, 0, 4, -1, -8; 0 ; ... byte_31D298: dc.b 0, 1, -7, 5, 0, 8, -1, -8; 0 ; ... byte_31D2A0: dc.b 0, 1, -$A, 5, 0, 8, -1, -8; 0 ; ... byte_31D2A8: dc.b 0, 1, -$A, 5, 0, $C, -1, -8; 0 ; ... byte_31D2B0: dc.b 0, 0 ; 0 ; ... Map_Obj20_0: dc.w byte_31D2BE-Map_Obj20_0,byte_31D2C6-Map_Obj20_0,byte_31D2CE-Map_Obj20_0; 0 ; ... dc.w byte_31D2D6-Map_Obj20_0,byte_31D2DE-Map_Obj20_0,byte_31D2E6-Map_Obj20_0; 3 byte_31D2BE: dc.b 0, 1,-$10, 7, 0, 0, -1, -8; 0 ; ... byte_31D2C6: dc.b 0, 1,-$10, 7, 8, 0, -1, -8; 0 ; ... byte_31D2CE: dc.b 0, 1,-$10, 7, 0, 8, -1, -8; 0 ; ... byte_31D2D6: dc.b 0, 1,-$10, 7, 8, 8, -1, -8; 0 ; ... byte_31D2DE: dc.b 0, 1, 0, 5, 0, $10, -1, -8; 0 ; ... byte_31D2E6: dc.b 0, 1, 0, 5, 8, $10, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- ; ------------------------------------------------------- ; Object 2F - Smashable ground (HTZ) ; ------------------------------------------------------- Obj2F: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31D2FC(pc,d0.w),d1 jmp off_31D2FC(pc,d1.w) ; --------------------------------------------------------------------------- off_31D2FC: dc.w loc_31D30C-off_31D2FC,loc_31D358-off_31D2FC,loc_31D4D2-off_31D2FC; 0 ; ... unk_31D302: dc.b $24 ; $ dc.b 0 dc.b $20 dc.b 2 dc.b $18 dc.b 4 dc.b $10 dc.b 6 dc.b 8 dc.b 8 ; --------------------------------------------------------------------------- loc_31D30C: ; ... addq.b #2,$24(a0) move.l #Map_Obj2F,4(a0) move.w #$C000,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) moveq #0,d0 move.b $28(a0),d0 and.w #$1E,d0 lea unk_31D302(pc,d0.w),a2 move.b (a2)+,$16(a0) move.b (a2)+,$1A(a0) move.b #$20,$16(a0) bset #4,1(a0) loc_31D358: ; ... move.w ($FFFFF7D0).w,$38(a0) move.b ($FFFFB01C).w,$32(a0) move.b ($FFFFB05C).w,$33(a0) moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 move.w 8(a0),d4 jsr SolidObject move.b $22(a0),d0 and.b #$18,d0 bne.s loc_31D398 loc_31D392: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31D398: ; ... cmp.b #$18,d0 bne.s loc_31D3FC cmp.b #2,$32(a0) bne.s loc_31D3B4 tst.b $28(a0) bmi.s loc_31D3E4 cmp.b #$E,($FFFFB03E).w beq.s loc_31D3E4 loc_31D3B4: ; ... move.b #$C,($FFFFB03E).w move.b #$D,($FFFFB03F).w cmp.b #2,$33(a0) bne.s loc_31D3D6 tst.b $28(a0) bmi.s loc_31D3E4 cmp.b #$E,($FFFFB07E).w beq.s loc_31D3E4 loc_31D3D6: ; ... move.b #$C,($FFFFB07E).w move.b #$D,($FFFFB07F).w bra.s loc_31D392 ; --------------------------------------------------------------------------- loc_31D3E4: ; ... lea ($FFFFB000).w,a1 move.b $32(a0),d0 bsr.s sub_31D432 lea ($FFFFB040).w,a1 move.b $33(a0),d0 bsr.s sub_31D432 bra.w loc_31D498 ; --------------------------------------------------------------------------- loc_31D3FC: ; ... move.b d0,d1 and.b #8,d1 beq.s loc_31D464 cmp.b #2,$32(a0) bne.s loc_31D41A tst.b $28(a0) bmi.s loc_31D42A cmp.b #$E,($FFFFB03E).w beq.s loc_31D42A loc_31D41A: ; ... move.b #$C,($FFFFB03E).w move.b #$D,($FFFFB03F).w bra.w loc_31D392 ; --------------------------------------------------------------------------- loc_31D42A: ; ... lea ($FFFFB000).w,a1 bsr.s sub_31D438 bra.s loc_31D498 ; =============== S U B R O U T I N E ======================================= sub_31D432: ; ... cmp.b #2,d0 bne.s loc_31D450 ; End of function sub_31D432 ; =============== S U B R O U T I N E ======================================= sub_31D438: ; ... bset #2,$22(a1) move.b #$E,$16(a1) move.b #7,$17(a1) move.b #2,$1C(a1) loc_31D450: ; ... bset #1,$22(a1) bclr #3,$22(a1) move.b #2,$24(a1) rts ; End of function sub_31D438 ; --------------------------------------------------------------------------- loc_31D464: ; ... and.b #$10,d0 beq.w loc_31D392 cmp.b #2,$33(a0) bne.s loc_31D482 tst.b $28(a0) bmi.s loc_31D492 cmp.b #$E,($FFFFB07E).w beq.s loc_31D492 loc_31D482: ; ... move.b #$C,($FFFFB07E).w move.b #$D,($FFFFB07F).w bra.w loc_31D392 ; --------------------------------------------------------------------------- loc_31D492: ; ... lea ($FFFFB040).w,a1 bsr.s sub_31D438 loc_31D498: ; ... move.w $38(a0),($FFFFF7D0).w and.b #$E7,$22(a0) lea (unk_31D4EC).l,a4 moveq #0,d0 move.b $1A(a0),d0 addq.b #1,$1A(a0) move.l d0,d1 add.w d0,d0 add.w d0,d0 lea (a4,d0.w),a4 neg.w d1 add.w #9,d1 move.w #$18,d2 jsr sub_31D708 bsr.w sub_31D6B4 loc_31D4D2: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) tst.b 1(a0) bpl.w loc_31D686 jmp DisplaySprite ; --------------------------------------------------------------------------- unk_31D4EC: dc.b $FF ; ... dc.b 0 dc.b $F8 ; ø dc.b 0 dc.b 1 dc.b 0 dc.b $F8 ; ø dc.b 0 dc.b $FF dc.b $20 dc.b $F9 ; ù dc.b 0 dc.b 0 dc.b $E0 ; à dc.b $F9 ; ù dc.b 0 dc.b $FF dc.b $40 ; @ dc.b $FA ; ú dc.b 0 dc.b 0 dc.b $C0 ; À dc.b $FA ; ú dc.b 0 dc.b $FF dc.b $60 ; ` dc.b $FB ; û dc.b 0 dc.b 0 dc.b $A0 ;   dc.b $FB ; û dc.b 0 dc.b $FF dc.b $80 ; € dc.b $FC ; ü dc.b 0 dc.b 0 dc.b $80 ; € dc.b $FC ; ü dc.b 0 ; --------------------------------------------------------------------------- ; ------------------------------------------------------- ; Object 32 - Breakable rock/block (CPZ/HTZ) ; ------------------------------------------------------- Obj32: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31D522(pc,d0.w),d1 jmp off_31D522(pc,d1.w) ; --------------------------------------------------------------------------- off_31D522: dc.w loc_31D528-off_31D522,loc_31D57E-off_31D522,loc_31D66C-off_31D522; 0 ; ... ; --------------------------------------------------------------------------- loc_31D528: ; ... addq.b #2,$24(a0) move.l #Map_Obj32,4(a0) move.w #$43B2,2(a0) move.b #$18,$19(a0) move.l #byte_31D68C,$3C(a0) cmp.b #$D,($FFFFFE10).w bne.s loc_31D56C move.l #Map_Obj32_CPZ,4(a0) move.w #$6430,2(a0) move.b #$10,$19(a0) move.l #byte_31D6A4,$3C(a0) loc_31D56C: ; ... jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #4,$18(a0) loc_31D57E: ; ... move.w ($FFFFF7D0).w,$38(a0) move.b ($FFFFB01C).w,$32(a0) move.b ($FFFFB05C).w,$33(a0) moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 move.w #$10,d2 move.w #$11,d3 move.w 8(a0),d4 jsr SolidObject move.b $22(a0),d0 and.b #$18,d0 bne.s loc_31D5BC loc_31D5B6: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31D5BC: ; ... cmp.b #$18,d0 bne.s loc_31D5EA cmp.b #2,$32(a0) beq.s loc_31D5D2 cmp.b #2,$33(a0) bne.s loc_31D5B6 loc_31D5D2: ; ... lea ($FFFFB000).w,a1 move.b $32(a0),d0 bsr.s sub_31D602 lea ($FFFFB040).w,a1 move.b $33(a0),d0 bsr.s sub_31D602 bra.w loc_31D652 ; --------------------------------------------------------------------------- loc_31D5EA: ; ... move.b d0,d1 and.b #8,d1 beq.s loc_31D63A cmp.b #2,$32(a0) bne.s loc_31D5B6 lea ($FFFFB000).w,a1 bsr.s sub_31D608 bra.s loc_31D652 ; =============== S U B R O U T I N E ======================================= sub_31D602: ; ... cmp.b #2,d0 bne.s loc_31D626 ; End of function sub_31D602 ; =============== S U B R O U T I N E ======================================= sub_31D608: ; ... bset #2,$22(a1) move.b #$E,$16(a1) move.b #7,$17(a1) move.b #2,$1C(a1) move.w #$FD00,$12(a1) loc_31D626: ; ... bset #1,$22(a1) bclr #3,$22(a1) move.b #2,$24(a1) rts ; End of function sub_31D608 ; --------------------------------------------------------------------------- loc_31D63A: ; ... and.b #$10,d0 beq.w loc_31D5B6 cmp.b #2,$33(a0) bne.w loc_31D5B6 lea ($FFFFB040).w,a1 bsr.s sub_31D608 loc_31D652: ; ... move.w $38(a0),($FFFFF7D0).w and.b #$E7,$22(a0) move.l $3C(a0),a4 jsr sub_31D708 bsr.w sub_31D6B4 loc_31D66C: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) tst.b 1(a0) bpl.w loc_31D686 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_31D686: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- byte_31D68C: dc.b -2, 0, -2, 0, 0, 0, -3,-$80, 2, 0; 0 ; ... dc.b -2, 0, -2, $40, -2, $40, 0, 0, -2, 0; 10 dc.b 1,-$40, -2, $40 ; 20 byte_31D6A4: dc.b -1, 0, -2, 0, 1, 0, -2, 0, -1, $40; 0 ; ... dc.b -2, $40, 0,-$40, -2, $40; 10 ; =============== S U B R O U T I N E ======================================= sub_31D6B4: ; ... jsr SingleObjLoad bne.s return_31D6FE move.b #$29,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w ($FFFFF7D0).w,d2 addq.w #2,($FFFFF7D0).w cmp.w #6,d2 bcs.s loc_31D6DE moveq #6,d2 loc_31D6DE: ; ... moveq #0,d0 move.w word_31D700(pc,d2.w),d0 cmp.w #$20,($FFFFF7D0).w bcs.s loc_31D6F2 move.w #$3E8,d0 moveq #$A,d2 loc_31D6F2: ; ... jsr AddPoints2 lsr.w #1,d2 move.b d2,$1A(a1) return_31D6FE: ; ... rts ; End of function sub_31D6B4 ; --------------------------------------------------------------------------- word_31D700: dc.w $A ; ... dc.w $14 dc.w $32 dc.w $64 ; =============== S U B R O U T I N E ======================================= sub_31D708: ; ... moveq #0,d0 move.b $1A(a0),d0 add.w d0,d0 move.l 4(a0),a3 add.w (a3,d0.w),a3 move.w (a3)+,d1 subq.w #1,d1 bset #5,1(a0) move.b 0(a0),d4 move.b 1(a0),d5 move.l a0,a1 bra.s loc_31D738 ; --------------------------------------------------------------------------- loc_31D72E: ; ... jsr SingleObjLoad2 bne.s loc_31D774 addq.w #6,a3 loc_31D738: ; ... move.b #4,$24(a1) move.b d4,0(a1) move.l a3,4(a1) move.b d5,1(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w 2(a0),2(a1) move.b $18(a0),$18(a1) move.b $19(a0),$19(a1) move.w (a4)+,$10(a1) move.w (a4)+,$12(a1) dbf d1,loc_31D72E loc_31D774: ; ... move.w #$CB,d0 jmp PlaySound ; End of function sub_31D708 ; --------------------------------------------------------------------------- Map_Obj2F: dc.w byte_31D792-Map_Obj2F,byte_31D7CA-Map_Obj2F,byte_31D808-Map_Obj2F; 0 ; ... dc.w byte_31D808-Map_Obj2F,byte_31D83A-Map_Obj2F,byte_31D83A-Map_Obj2F; 3 dc.w byte_31D860-Map_Obj2F,byte_31D860-Map_Obj2F,byte_31D87A-Map_Obj2F; 6 dc.w byte_31D87A-Map_Obj2F ; 9 byte_31D792: dc.b 0, 9,-$28, $D, 0, $12, -1,-$10,-$18, 5; 0 ; ... dc.b 0, $4A, -1,-$10,-$18, 5, 0, $4A, 0, 0; 10 dc.b -8, 5, 0, $4E, -1,-$10, -8, 5, 0, $4E; 20 dc.b 0, 0, 8, 5, 0, $52, -1,-$10, 8, 5; 30 dc.b 0, $52, 0, 0, $18, 5, 0, $52, -1,-$10; 40 dc.b $18, 5, 0, $52, 0, 0; 50 byte_31D7CA: dc.b 0, $A,-$28, 5, 0, $12, -1,-$10,-$28, 5; 0 ; ... dc.b 0, $16, 0, 0,-$18, 5, 0, $4A, -1,-$10; 10 dc.b -$18, 5, 0, $4A, 0, 0, -8, 5, 0, $4E; 20 dc.b -1,-$10, -8, 5, 0, $4E, 0, 0, 8, 5; 30 dc.b 0, $52, -1,-$10, 8, 5, 0, $52, 0, 0; 40 dc.b $18, 5, 0, $52, -1,-$10, $18, 5, 0, $52; 50 dc.b 0, 0 ; 60 byte_31D808: dc.b 0, 8,-$20, 5, 0, $4A, -1,-$10,-$20, 5; 0 ; ... dc.b 0, $4A, 0, 0,-$10, 5, 0, $4E, -1,-$10; 10 dc.b -$10, 5, 0, $4E, 0, 0, 0, 5, 0, $52; 20 dc.b -1,-$10, 0, 5, 0, $52, 0, 0, $10, 5; 30 dc.b 0, $52, -1,-$10, $10, 5, 0, $52, 0, 0; 40 byte_31D83A: dc.b 0, 6,-$18, 5, 0, $4E, -1,-$10,-$18, 5; 0 ; ... dc.b 0, $4E, 0, 0, -8, 5, 0, $52, -1,-$10; 10 dc.b -8, 5, 0, $52, 0, 0, 8, 5, 0, $52; 20 dc.b -1,-$10, 8, 5, 0, $52, 0, 0; 30 byte_31D860: dc.b 0, 4,-$10, 5, 0, $52, -1,-$10,-$10, 5; 0 ; ... dc.b 0, $52, 0, 0, 0, 5, 0, $52, -1,-$10; 10 dc.b 0, 5, 0, $52, 0, 0; 20 byte_31D87A: dc.b 0, 2, -8, 5, 0, $52, -1,-$10, -8, 5; 0 ; ... dc.b 0, $52, 0, 0 ; 10 Map_Obj32: dc.w byte_31D88A-Map_Obj32 ; 0 ; ... byte_31D88A: dc.b 0, 6,-$10, 5, 0, 0, -1,-$18,-$10, 5; 0 ; ... dc.b 0, 4, -1, -8,-$10, 5, 0, 8, 0, 8; 10 dc.b 0, 5, 0, $C, -1,-$18, 0, 5, 0, $10; 20 dc.b -1, -8, 0, 5, 0, $10, 0, 8; 30 Map_Obj32_CPZ: dc.w byte_31D8B2-Map_Obj32_CPZ ; 0 ; ... byte_31D8B2: dc.b 0, 4,-$10, 5, 0, 0, -1,-$10,-$10, 5; 0 ; ... dc.b 8, 0, 0, 0, 0, 5, 0, 0, -1,-$10; 10 dc.b 0, 5, 8, 0, 0, 0; 20 ; --------------------------------------------------------------------------- ; ------------------------------------------------------ ; Object 30 - Large rising lava during earthquake (HTZ) ; ------------------------------------------------------ Obj30: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31D8DA(pc,d0.w),d1 jmp off_31D8DA(pc,d1.w) ; --------------------------------------------------------------------------- off_31D8DA: dc.w loc_31D8E8-off_31D8DA,loc_31D936-off_31D8DA; 0 ; ... unk_31D8DE: dc.b $C0 ; À dc.b 0 dc.b $C0 ; À dc.b 0 dc.b $C0 ; À dc.b 0 dc.b $E0 ; à dc.b 0 dc.b $C0 ; À dc.b 0 ; --------------------------------------------------------------------------- loc_31D8E8: ; ... addq.b #2,$24(a0) move.w $C(a0),$32(a0) move.w 8(a0),$30(a0) moveq #0,d0 move.b $28(a0),d0 move.b unk_31D8DE(pc,d0.w),$19(a0) cmp.b #6,d0 bcs.s loc_31D936 bne.s loc_31D916 cmp.w #$380,($FFFFEE04).w bcc.s loc_31D936 bra.s loc_31D91E ; --------------------------------------------------------------------------- loc_31D916: ; ... cmp.w #$380,($FFFFEE04).w bcs.s loc_31D936 loc_31D91E: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_31D930 bclr #7,2(a2,d0.w) loc_31D930: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_31D936: ; ... move.w $32(a0),d0 add.w ($FFFFEEE4).w,d0 move.w d0,$C(a0) moveq #0,d0 move.b $28(a0),d0 move.w off_31D95E(pc,d0.w),d1 jsr off_31D95E(pc,d1.w) tst.b ($FFFFEEBC).w beq.s loc_31D958 rts ; --------------------------------------------------------------------------- loc_31D958: ; ... jmp MarkObjGone3 ; --------------------------------------------------------------------------- off_31D95E: dc.w loc_31D968-off_31D95E,loc_31D968-off_31D95E,loc_31D984-off_31D95E; 0 ; ... dc.w loc_31D9D2-off_31D95E,loc_31D9F0-off_31D95E; 3 ; --------------------------------------------------------------------------- loc_31D968: ; ... move.w #$CB,d1 move.w #$80,d2 move.w #$81,d3 move.w 8(a0),d4 jsr loc_314BFE jmp sub_3152F6 ; --------------------------------------------------------------------------- loc_31D984: ; ... move.w #$CB,d1 move.w #$78,d2 move.w #$79,d3 move.w 8(a0),d4 jsr loc_314BFE jsr sub_3152F6 loc_31D9A0: ; ... btst #3,$22(a0) beq.s loc_31D9B8 move.l a0,-(sp) move.l a0,a1 lea ($FFFFB000).w,a0 jsr Touch_ChkHurt move.l (sp)+,a0 loc_31D9B8: ; ... btst #4,$22(a0) beq.s return_31D9D0 move.l a0,-(sp) move.l a0,a1 lea ($FFFFB040).w,a0 jsr Touch_ChkHurt move.l (sp)+,a0 return_31D9D0: ; ... rts ; --------------------------------------------------------------------------- loc_31D9D2: ; ... move.w #$EB,d1 move.w #$78,d2 move.w #$79,d3 move.w 8(a0),d4 jsr loc_314BFE jsr sub_3152F6 bra.s loc_31D9A0 ; --------------------------------------------------------------------------- loc_31D9F0: ; ... move.w #$CB,d1 move.w #$2E,d2 move.w 8(a0),d4 lea (byte_31DA0E).l,a2 jsr loc_314C46 jmp sub_3152F6 ; --------------------------------------------------------------------------- byte_31DA0E: dc.b $30, $30, $30, $30, $30, $30, $30, $30, $2F, $2F; 0 ; ... dc.b $2E, $2E, $2D, $2D, $2C, $2C, $2B, $2B, $2A, $2A; 10 dc.b $29, $29, $28, $28, $27, $27, $26, $26, $25, $25; 20 dc.b $24, $24, $23, $23, $22, $22, $21, $21, $20, $20; 30 dc.b $1F, $1F, $1E, $1E, $1D, $1D, $1C, $1C, $1B, $1B; 40 dc.b $1A, $1A, $19, $19, $18, $18, $17, $17, $16, $16; 50 dc.b $15, $15, $14, $14, $13, $13, $12, $12, $11, $11; 60 dc.b $10, $10, $F, $F, $E, $E, $D, $D, $C, $C; 70 dc.b $B, $B, $A, $A, 9, 9, 8, 8, 7, 7; 80 dc.b 6, 6, 5, 5, 4, 4, 3, 3, 2, 2; 90 dc.b 1, 1, 0, 0, -1, -1, -2, -2, -3, -3; 100 dc.b -4, -4, -5, -5, -6, -6, -7, -7, -8, -8; 110 dc.b -9, -9, -$A, -$A, -$B, -$B, -$C, -$C, -$D, -$D; 120 dc.b -$E, -$E, -$F, -$F,-$10,-$10,-$11,-$11,-$12,-$12; 130 dc.b -$13,-$13,-$14,-$14,-$15,-$15,-$16,-$16,-$17,-$17; 140 dc.b -$18,-$18,-$19,-$19,-$1A,-$1A,-$1B,-$1B,-$1C,-$1C; 150 dc.b -$1D,-$1D,-$1E,-$1E,-$1F,-$1F,-$20,-$20,-$21,-$21; 160 dc.b -$22,-$22,-$23,-$23,-$24,-$24,-$25,-$25,-$26,-$26; 170 dc.b -$27,-$27,-$28,-$28,-$29,-$29,-$2A,-$2A,-$2B,-$2B; 180 dc.b -$2C,-$2C,-$2D,-$2D,-$2E,-$2E,-$2F,-$2F,-$30,-$30; 190 dc.b -$30,-$30,-$30,-$30 ; 200 ; --------------------------------------------------------------------------- ; ------------------------------------------ ; Object 33 - Green platform from OOZ ; ------------------------------------------ Obj33: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31DAE8(pc,d0.w),d1 jmp off_31DAE8(pc,d1.w) ; --------------------------------------------------------------------------- off_31DAE8: dc.w loc_31DAEE-off_31DAE8,loc_31DB78-off_31DAE8,loc_31DD86-off_31DAE8; 0 ; ... ; --------------------------------------------------------------------------- loc_31DAEE: ; ... addq.b #2,$24(a0) move.l #Map_Obj33,4(a0) move.w #$632C,2(a0) loc_31DB00: move.b #4,1(a0) move.b #3,$18(a0) move.b #$18,$19(a0) move.w $C(a0),$30(a0) addq.b #2,$25(a0) move.w #$78,$36(a0) tst.b $28(a0) beq.s loc_31DB2E move.b #4,$25(a0) loc_31DB2E: ; ... jsr SingleObjLoad2 bne.s loc_31DB78 move.b 0(a0),0(a1) move.b #4,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) sub.w #$10,$C(a1) move.l #Map_Obj33_0,4(a1) move.w #$62E2,2(a1) move.b #4,1(a1) move.b #4,$18(a1) move.b #$10,$19(a1) move.l a0,$3C(a1) loc_31DB78: ; ... move.w 8(a0),-(sp) moveq #0,d0 move.b $25(a0),d0 move.w off_31DBA8(pc,d0.w),d1 jsr off_31DBA8(pc,d1.w) move.w (sp)+,d4 moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #8,d2 move.w d2,d3 addq.w #1,d3 jsr SolidObject jmp MarkObjGone ; --------------------------------------------------------------------------- off_31DBA8: dc.w loc_31DBB2-off_31DBA8,loc_31DBD6-off_31DBA8,loc_31DC12-off_31DBA8; 0 ; ... dc.w loc_31DD0C-off_31DBA8,return_31DD84-off_31DBA8; 3 ; --------------------------------------------------------------------------- loc_31DBB2: ; ... subq.w #1,$36(a0) bpl.s return_31DBD4 move.w #$78,$36(a0) move.l #$FFF69800,$32(a0) addq.b #2,$25(a0) move.w #$D4,d0 jsr PlaySoundLocal return_31DBD4: ; ... rts ; --------------------------------------------------------------------------- loc_31DBD6: ; ... move.l $C(a0),d1 add.l $32(a0),d1 move.l d1,$C(a0) add.l #$3800,$32(a0) swap d1 cmp.w $30(a0),d1 bcs.s return_31DC10 move.l $32(a0),d0 cmp.l #$10000,d0 bcc.s loc_31DC02 subq.b #2,$25(a0) loc_31DC02: ; ... lsr.l #2,d0 neg.l d0 move.l d0,$32(a0) move.w $30(a0),$C(a0) return_31DC10: ; ... rts ; --------------------------------------------------------------------------- loc_31DC12: ; ... move.w 8(a0),d2 move.w d2,d3 sub.w #$10,d2 add.w #$10,d3 move.b $22(a0),d0 and.b #$18,d0 beq.s return_31DC8A cmp.b #$18,d0 beq.s loc_31DC8C lea ($FFFFB000).w,a1 moveq #3,d6 bsr.s sub_31DC3E lea ($FFFFB040).w,a1 addq.b #1,d6 ; =============== S U B R O U T I N E ======================================= sub_31DC3E: ; ... btst d6,$22(a0) beq.s return_31DC8A loc_31DC44: move.w 8(a1),d0 cmp.w d2,d0 bcs.s return_31DC8A cmp.w d3,d0 bcc.s return_31DC8A move.b #1,$2A(a1) move.w #0,$14(a1) move.w #0,$10(a1) move.w #0,$12(a1) bclr #5,$22(a1) bclr #7,2(a1) move.l #$FFF69800,$32(a0) addq.b #2,$25(a0) move.w #$D4,d0 jsr PlaySoundLocal return_31DC8A: ; ... rts ; End of function sub_31DC3E ; --------------------------------------------------------------------------- loc_31DC8C: ; ... lea ($FFFFB000).w,a1 move.w 8(a1),d0 cmp.w d2,d0 bcs.s return_31DD0A cmp.w d3,d0 bcc.s return_31DD0A lea ($FFFFB040).w,a2 move.w 8(a2),d0 cmp.w d2,d0 bcs.s return_31DD0A cmp.w d3,d0 bcc.s return_31DD0A move.b #1,$2A(a1) move.w #0,$14(a1) move.w #0,$10(a1) move.w #0,$12(a1) bclr #5,$22(a1) bclr #7,2(a1) move.b #1,$2A(a2) move.w #0,$14(a2) move.w #0,$10(a2) move.w #0,$12(a2) bclr #5,$22(a2) bclr #7,2(a2) move.l #$FFF69800,$32(a0) addq.b #2,$25(a0) move.w #$D4,d0 jsr PlaySoundLocal return_31DD0A: ; ... rts ; --------------------------------------------------------------------------- loc_31DD0C: ; ... move.l $C(a0),d1 add.l $32(a0),d1 move.l d1,$C(a0) add.l #$3800,$32(a0) swap d1 move.w $30(a0),d0 sub.w #$7D,d0 cmp.w d0,d1 bne.s return_31DD82 addq.b #2,$25(a0) lea ($FFFFB000).w,a1 move.b $22(a0),d0 and.b #8,d0 bsr.s sub_31DD4C lea ($FFFFB040).w,a1 move.b $22(a0),d0 and.b #$10,d0 ; =============== S U B R O U T I N E ======================================= sub_31DD4C: ; ... beq.s return_31DD82 move.w 8(a0),8(a1) move.b #2,$1C(a1) move.w #$800,$14(a1) bset #1,$22(a1) move.w #$F000,$12(a1) bclr #3,$22(a1) move.b #0,$2A(a1) move.w #$CC,d0 jsr PlaySoundLocal return_31DD82: ; ... rts ; End of function sub_31DD4C ; --------------------------------------------------------------------------- return_31DD84: ; ... rts ; --------------------------------------------------------------------------- loc_31DD86: ; ... move.l $3C(a0),a1 move.w $C(a0),d0 sub.w $C(a1),d0 cmp.w #$14,d0 blt.s loc_31DDB0 move.b #$9B,$20(a0) lea (Ani_Obj33).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31DDB0: ; ... move.b #0,$20(a0) move.b #0,$1B(a0) rts ; --------------------------------------------------------------------------- Ani_Obj33: dc.w byte_31DDC0-Ani_Obj33 ; ... byte_31DDC0: dc.b 2, 2, 0, 2, 0, 2, 0, 1, -1, 0; 0 ; ... Map_Obj33: dc.w byte_31DDCC-Map_Obj33 ; ... byte_31DDCC: dc.b 0, 2, -8, 9, 0, 0, -1,-$18, -8, 9; 0 ; ... dc.b 8, 0, 0, 0 ; 10 Map_Obj33_0: dc.w byte_31DDE0-Map_Obj33_0,byte_31DDEE-Map_Obj33_0,byte_31DDFC-Map_Obj33_0; 0 ; ... byte_31DDE0: dc.b 0, 2, -8, 6, 0, 0, -1,-$10, -8, 6; 0 ; ... dc.b 8, 0, 0, 0 ; 10 byte_31DDEE: dc.b 0, 2,-$10, 7, 0, 6, -1,-$10,-$10, 7; 0 ; ... dc.b 8, 6, 0, 0 ; 10 byte_31DDFC: dc.b 0, 2, 0, 5, 0, $E, -1,-$10, 0, 5; 0 ; ... dc.b 8, $E, 0, 0 ; 10 ; --------------------------------------------------------------------------- ; ------------------------------------------------------ ; Object 43 - Sliding spike obstacle thing (OOZ) ; ------------------------------------------------------ Obj43: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31DE18(pc,d0.w),d1 jmp off_31DE18(pc,d1.w) ; --------------------------------------------------------------------------- off_31DE18: dc.w loc_31DE30-off_31DE18,loc_31DED8-off_31DE18,loc_31DF2A-off_31DE18; 0 ; ... unk_31DE1E: dc.b 0 ; ... dc.b $68 ; h dc.b 0 dc.b 0 dc.b 0 dc.b 0 dc.b 1 dc.b $E8 ; è dc.b $FF dc.b $E8 ; è dc.b 0 dc.b $18 dc.b 1 dc.b $A8 ; ¨ dc.b $FF dc.b $A8 ; ¨ dc.b $FF dc.b $D8 ; Ø ; --------------------------------------------------------------------------- loc_31DE30: ; ... addq.b #2,$24(a0) move.w #$C30C,2(a0) jsr Adjust2PArtPointer2_Useless moveq #0,d1 move.b $28(a0),d1 lea unk_31DE1E(pc,d1.w),a2 move.b (a2)+,d1 move.l a0,a1 bra.s loc_31DE76 ; --------------------------------------------------------------------------- loc_31DE50: ; ... jsr SingleObjLoad2 bne.s loc_31DEA2 move.b 0(a0),0(a1) move.b #4,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b #1,$36(a1) loc_31DE76: ; ... move.l #Map_Obj43,4(a1) move.w 2(a0),2(a1) move.b #4,1(a1) move.b #4,$18(a1) move.b #$18,$19(a1) move.b #$A5,$20(a1) move.w 8(a1),$30(a1) loc_31DEA2: ; ... dbf d1,loc_31DE50 move.l a0,$3C(a1) move.l a1,$3C(a0) moveq #0,d1 move.b (a2)+,d1 move.w $30(a0),d0 sub.w d1,d0 move.w d0,$32(a0) move.w d0,$32(a1) add.w d1,d0 add.w d1,d0 move.w d0,$34(a0) move.w d0,$34(a1) move.w (a2)+,d0 add.w d0,8(a0) move.w (a2)+,d0 add.w d0,8(a1) loc_31DED8: ; ... bsr.s sub_31DF34 move.w $32(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bls.s loc_31DEFE move.w $34(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s loc_31DF04 loc_31DEFE: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_31DF04: ; ... move.l $3C(a0),a1 cmp.l a0,a1 beq.s loc_31DF12 jsr DeleteObject2 loc_31DF12: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_31DF24 bclr #7,2(a2,d0.w) loc_31DF24: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_31DF2A: ; ... bsr.s sub_31DF34 bsr.s sub_31DF7E jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_31DF34: ; ... tst.b $36(a0) bne.s loc_31DF5C move.w 8(a0),d1 subq.w #1,d1 cmp.w $32(a0),d1 bne.s loc_31DF56 move.b #1,$36(a0) move.w #$D5,d0 jsr PlaySoundLocal loc_31DF56: ; ... move.w d1,8(a0) rts ; --------------------------------------------------------------------------- loc_31DF5C: ; ... move.w 8(a0),d1 addq.w #1,d1 cmp.w $34(a0),d1 bne.s loc_31DF78 move.b #0,$36(a0) move.w #$D5,d0 jsr PlaySoundLocal loc_31DF78: ; ... move.w d1,8(a0) rts ; End of function sub_31DF34 ; =============== S U B R O U T I N E ======================================= sub_31DF7E: ; ... move.l $3C(a0),a1 move.w 8(a0),d0 sub.w #$18,d0 move.w 8(a1),d2 add.w #$18,d2 cmp.w d0,d2 bne.s return_31DFAC eor.b #1,$36(a0) eor.b #1,$36(a1) move.w #$D5,d0 jsr PlaySoundLocal return_31DFAC: ; ... rts ; End of function sub_31DF7E ; --------------------------------------------------------------------------- Map_Obj43: dc.w byte_31DFB0-Map_Obj43 ; ... byte_31DFB0: dc.b 0, 6,-$20, 5, 0, 0, -1,-$18,-$28, $F; 0 ; ... dc.b 0, 4, -1, -8, -8, 9, 0, $14, -1,-$18; 10 dc.b -8, 9, 0, $1A, 0, 0, $10, 5, $10, 0; 20 dc.b -1,-$18, 8, $F, $10, 4, -1, -8; 30 ; --------------------------------------------------------------------------- ; --------------------------------------------- ; Object 07 - Oil (OOZ) ; --------------------------------------------- Obj07: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31DFE4(pc,d0.w),d1 jmp off_31DFE4(pc,d1.w) ; --------------------------------------------------------------------------- off_31DFE4: dc.w Obj07_Init-off_31DFE4,Obj07_Main-off_31DFE4; 0 ; ... ; --------------------------------------------------------------------------- Obj07_Init: ; ... addq.b #2,$24(a0) move.w #$758,$C(a0) move.b #$20,$19(a0) move.w $C(a0),$30(a0) move.b #$30,$38(a0) bset #7,$22(a0) Obj07_Main: ; ... tst.w ($FFFFFE08).w bne.w return_31E0A4 lea ($FFFFB000).w,a1 moveq #8,d1 move.b $22(a0),d0 and.b d1,d0 bne.s Obj07_CheckKillChar cmp.b #$30,$38(a0) beq.s Obj07_CheckSupportChar addq.b #1,$38(a0) bra.s Obj07_CheckSupportChar ; --------------------------------------------------------------------------- Obj07_CheckKillChar: ; ... tst.b $38(a0) beq.s Obj07_SuffocateChar subq.b #1,$38(a0) Obj07_CheckSupportChar: ; ... moveq #$20,d1 moveq #0,d3 move.b $38(a0),d3 moveq #3,d6 move.w 8(a1),d4 move.w d4,8(a0) jsr PlatformObject_SingleCharacter lea ($FFFFB040).w,a1 moveq #$10,d1 move.b $22(a0),d0 and.b d1,d0 bne.s Obj07_CheckKillChar_0 cmp.b #$30,$3A(a0) beq.s Obj07_CheckSupportChar_0 addq.b #1,$3A(a0) bra.s Obj07_CheckSupportChar_0 ; --------------------------------------------------------------------------- Obj07_CheckKillChar_0: ; ... tst.b $3A(a0) beq.s Obj07_SuffocateChar subq.b #1,$3A(a0) Obj07_CheckSupportChar_0: ; ... moveq #$20,d1 moveq #0,d3 move.b $3A(a0),d3 moveq #4,d6 move.w 8(a1),d4 move.w d4,8(a0) jsr PlatformObject_SingleCharacter rts ; --------------------------------------------------------------------------- Obj07_SuffocateChar: ; ... not.b d1 and.b d1,$22(a0) move.l a0,-(sp) move.l a0,a2 move.l a1,a0 jsr KillCharacter move.l (sp)+,a0 return_31E0A4: ; ... rts ; --------------------------------------------------------------------------- ; -------------------------------------------------------------- ; Object 45 - Pressure spring from OOZ ; -------------------------------------------------------------- Obj45: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31E0BA(pc,d0.w),d1 jsr off_31E0BA(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_31E0BA: dc.w loc_31E0C0-off_31E0BA,loc_31E138-off_31E0BA,loc_31E22E-off_31E0BA; 0 ; ... ; --------------------------------------------------------------------------- loc_31E0C0: ; ... addq.b #2,$24(a0) move.l #Map_Obj45,4(a0) move.w #$43C5,2(a0) or.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) move.b $28(a0),d0 lsr.w #3,d0 and.w #$E,d0 move.w off_31E0F6(pc,d0.w),d0 jmp off_31E0F6(pc,d0.w) ; --------------------------------------------------------------------------- off_31E0F6: dc.w loc_31E11E-off_31E0F6,loc_31E0FA-off_31E0F6; 0 ; ... ; --------------------------------------------------------------------------- loc_31E0FA: ; ... move.b #4,$24(a0) move.b #1,$1C(a0) move.b #$A,$1A(a0) move.w #$43C5,2(a0) move.b #$14,$19(a0) move.w 8(a0),$34(a0) loc_31E11E: ; ... move.b $28(a0),d0 and.w #2,d0 move.w word_31E134(pc,d0.w),$30(a0) jsr Adjust2PArtPointer2_Useless rts ; --------------------------------------------------------------------------- word_31E134: dc.w -$1000, -$A00 ; 0 ; ... ; --------------------------------------------------------------------------- loc_31E138: ; ... move.b $22(a0),d0 and.b #$18,d0 bne.s loc_31E14E tst.b $32(a0) beq.s loc_31E15A subq.b #1,$32(a0) bra.s loc_31E15A ; --------------------------------------------------------------------------- loc_31E14E: ; ... cmp.b #9,$32(a0) beq.s loc_31E17A addq.b #1,$32(a0) loc_31E15A: ; ... moveq #0,d3 move.b $32(a0),d3 move.b d3,$1A(a0) add.w d3,d3 move.w #$1B,d1 move.w #$14,d2 move.w 8(a0),d4 jsr loc_314CD6 rts ; --------------------------------------------------------------------------- loc_31E17A: ; ... lea ($FFFFB000).w,a1 moveq #3,d6 bsr.s sub_31E188 lea ($FFFFB040).w,a1 moveq #4,d6 ; =============== S U B R O U T I N E ======================================= sub_31E188: ; ... bclr d6,$22(a0) beq.w return_31E22C move.w $30(a0),$12(a1) loc_31E196: bset #1,$22(a1) bclr #3,$22(a1) move.b #$10,$1C(a1) move.b #2,$24(a1) move.b $28(a0),d0 bpl.s loc_31E1BA loc_31E1B4: move.w #0,$10(a1) loc_31E1BA: ; ... btst #0,d0 beq.s loc_31E1FA move.w #1,$14(a1) move.b #1,$27(a1) move.b #0,$1C(a1) move.b #0,$2C(a1) move.b #4,$2D(a1) btst #1,d0 bne.s loc_31E1EA move.b #1,$2C(a1) loc_31E1EA: ; ... btst #0,$22(a1) beq.s loc_31E1FA neg.b $27(a1) neg.w $14(a1) loc_31E1FA: ; ... and.b #$C,d0 cmp.b #4,d0 bne.s loc_31E210 move.b #$C,$3E(a1) move.b #$D,$3F(a1) loc_31E210: ; ... cmp.b #8,d0 bne.s loc_31E222 move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_31E222: ; ... move.w #$CC,d0 jmp PlaySound ; --------------------------------------------------------------------------- return_31E22C: ; ... rts ; End of function sub_31E188 ; --------------------------------------------------------------------------- loc_31E22E: ; ... move.b #0,$36(a0) move.w #$1F,d1 move.w #$C,d2 move.w #$D,d3 move.w 8(a0),d4 lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) jsr loc_314C04 cmp.w #1,d4 bne.s loc_31E276 move.b $22(a0),d1 move.w 8(a0),d2 sub.w 8(a1),d2 bcs.s loc_31E26C eor.b #1,d1 loc_31E26C: ; ... and.b #1,d1 bne.s loc_31E276 bsr.w sub_31E2F4 loc_31E276: ; ... movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 moveq #4,d6 jsr loc_314C04 cmp.w #1,d4 bne.s loc_31E2A6 move.b $22(a0),d1 move.w 8(a0),d2 sub.w 8(a1),d2 bcs.s loc_31E29E eor.b #1,d1 loc_31E29E: ; ... and.b #1,d1 bne.s loc_31E2A6 bsr.s sub_31E2F4 loc_31E2A6: ; ... tst.b $36(a0) bne.s return_31E2F2 move.w $34(a0),d0 cmp.w 8(a0),d0 beq.s return_31E2F2 bcc.s loc_31E2D4 subq.b #4,$1A(a0) subq.w #4,8(a0) cmp.w 8(a0),d0 bcs.s loc_31E2EE move.b #$A,$1A(a0) move.w $34(a0),8(a0) bra.s loc_31E2EE ; --------------------------------------------------------------------------- loc_31E2D4: ; ... subq.b #4,$1A(a0) addq.w #4,8(a0) cmp.w 8(a0),d0 bcc.s loc_31E2EE move.b #$A,$1A(a0) move.w $34(a0),8(a0) loc_31E2EE: ; ... bsr.w sub_31E388 return_31E2F2: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_31E2F4: ; ... btst #0,$22(a0) beq.s loc_31E330 btst #0,$22(a1) bne.w return_31E386 tst.w d0 bne.w loc_31E316 tst.w $14(a1) beq.s return_31E386 bpl.s loc_31E380 bra.s return_31E386 ; --------------------------------------------------------------------------- loc_31E316: ; ... move.w $34(a0),d0 add.w #$12,d0 cmp.w 8(a0),d0 beq.s loc_31E380 addq.w #1,8(a0) moveq #1,d0 move.w #$40,d1 bra.s loc_31E35E ; --------------------------------------------------------------------------- loc_31E330: ; ... btst #0,$22(a1) beq.s return_31E386 tst.w d0 bne.w loc_31E346 tst.w $14(a1) bmi.s loc_31E380 bra.s return_31E386 ; --------------------------------------------------------------------------- loc_31E346: ; ... move.w $34(a0),d0 sub.w #$12,d0 cmp.w 8(a0),d0 beq.s loc_31E380 subq.w #1,8(a0) moveq #-1,d0 move.w #$FFC0,d1 loc_31E35E: ; ... add.w d0,8(a1) move.w d1,$14(a1) move.w #0,$10(a1) move.w $34(a0),d0 sub.w 8(a0),d0 bcc.s loc_31E378 neg.w d0 loc_31E378: ; ... add.w #$A,d0 move.b d0,$1A(a0) loc_31E380: ; ... move.b #1,$36(a0) return_31E386: ; ... rts ; End of function sub_31E2F4 ; =============== S U B R O U T I N E ======================================= sub_31E388: ; ... move.b $22(a0),d0 and.b #$60,d0 beq.w return_31E488 lea ($FFFFB000).w,a1 moveq #5,d6 bsr.s sub_31E3A2 lea ($FFFFB040).w,a1 moveq #6,d6 ; End of function sub_31E388 ; =============== S U B R O U T I N E ======================================= sub_31E3A2: ; ... bclr d6,$22(a0) beq.w return_31E488 move.w $34(a0),d0 sub.w 8(a0),d0 bcc.s loc_31E3B6 neg.w d0 loc_31E3B6: ; ... add.w #$A,d0 lsl.w #7,d0 neg.w d0 move.w d0,$10(a1) subq.w #4,8(a1) bset #0,$22(a1) btst #0,$22(a0) bne.s loc_31E3E4 bclr #0,$22(a1) add.w #8,8(a1) neg.w $10(a1) loc_31E3E4: ; ... move.w #$F,$2E(a1) move.w $10(a1),$14(a1) btst #2,$22(a1) bne.s loc_31E3FE move.b #0,$1C(a1) loc_31E3FE: ; ... move.b $28(a0),d0 bpl.s loc_31E40A move.w #0,$12(a1) loc_31E40A: ; ... btst #0,d0 beq.s loc_31E44A move.w #1,$14(a1) move.b #1,$27(a1) move.b #0,$1C(a1) move.b #1,$2C(a1) move.b #8,$2D(a1) btst #1,d0 bne.s loc_31E43A move.b #3,$2C(a1) loc_31E43A: ; ... btst #0,$22(a1) beq.s loc_31E44A neg.b $27(a1) neg.w $14(a1) loc_31E44A: ; ... and.b #$C,d0 cmp.b #4,d0 bne.s loc_31E460 move.b #$C,$3E(a1) move.b #$D,$3F(a1) loc_31E460: ; ... cmp.b #8,d0 bne.s loc_31E472 move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_31E472: ; ... bclr #5,$22(a1) move.b #1,$1D(a1) move.w #$CC,d0 jmp PlaySound ; --------------------------------------------------------------------------- return_31E488: ; ... rts ; End of function sub_31E3A2 ; --------------------------------------------------------------------------- off_31E48A: dc.w byte_31E48E-off_31E48A,byte_31E4B0-off_31E48A; 0 ; ... byte_31E48E: dc.b 0, 0, 1, 2, 3, 4, 5, 6, 7, 8; 0 ; ... dc.b 9, 9, 9, 9, 9, 9, 9, 9, 8, 7; 10 dc.b 6, 5, 4, 3, 2, 1, 0, 0, 0, 0; 20 dc.b 0, 0, 0, -1 ; 30 byte_31E4B0: dc.b 0, $A, $B, $C, $D, $E, $F, $10, $11, $12; 0 ; ... dc.b $13, $13, $13, $13, $13, $13, $13, $13, $12, $11; 10 dc.b $10, $F, $E, $D, $C, $B, $A, $A, $A, $A; 20 dc.b $A, $A, $A, -1 ; 30 Map_Obj45: dc.w byte_31E50C-Map_Obj45,byte_31E52C-Map_Obj45,byte_31E54C-Map_Obj45; 0 ; ... dc.w byte_31E56C-Map_Obj45,byte_31E58C-Map_Obj45,byte_31E5AC-Map_Obj45; 3 dc.w byte_31E5CC-Map_Obj45,byte_31E5EC-Map_Obj45,byte_31E60C-Map_Obj45; 6 dc.w byte_31E62C-Map_Obj45,byte_31E64C-Map_Obj45,byte_31E66C-Map_Obj45; 9 dc.w byte_31E68C-Map_Obj45,byte_31E6AC-Map_Obj45,byte_31E6CC-Map_Obj45; 12 dc.w byte_31E6EC-Map_Obj45,byte_31E70C-Map_Obj45,byte_31E72C-Map_Obj45; 15 dc.w byte_31E74C-Map_Obj45,byte_31E76C-Map_Obj45,byte_31E78C-Map_Obj45; 18 dc.w byte_31E7AC-Map_Obj45,byte_31E7CC-Map_Obj45,byte_31E7EC-Map_Obj45; 21 dc.w byte_31E80C-Map_Obj45,byte_31E82C-Map_Obj45,byte_31E84C-Map_Obj45; 24 dc.w byte_31E86C-Map_Obj45,byte_31E88C-Map_Obj45; 27 byte_31E50C: dc.b 0, 5,-$14, $C, $30, 0, -1,-$10, $C, 8; 0 ; ... dc.b $30, 4, -1, -$C, 4, 8, $10, 7, -1, -$C; 10 dc.b -4, 8, $30, $A, -1, -$C, -$C, 4, $10, $D; 20 dc.b -1, -8 ; 30 byte_31E52C: dc.b 0, 5,-$12, $C, $30, 0, -1,-$10, $C, 8; 0 ; ... dc.b $30, 4, -1, -$C, 4, 8, $10, 7, -1, -$C; 10 dc.b -4, 8, $30, $A, -1, -$C, -$A, 4, $10, $D; 20 dc.b -1, -8 ; 30 byte_31E54C: dc.b 0, 5,-$10, $C, $30, 0, -1,-$10, $C, 8; 0 ; ... dc.b $30, 4, -1, -$C, 4, 8, $10, 7, -1, -$C; 10 dc.b -2, 8, $30, $A, -1, -$C, -8, 4, $10, $D; 20 dc.b -1, -8 ; 30 byte_31E56C: dc.b 0, 5, -$E, $C, $30, 0, -1,-$10, $C, 8; 0 ; ... dc.b $30, 4, -1, -$C, 6, 8, $10, 7, -1, -$C; 10 dc.b 0, 8, $30, $A, -1, -$C, -6, 4, $10, $D; 20 dc.b -1, -8 ; 30 byte_31E58C: dc.b 0, 5, -$C, $C, $30, 0, -1,-$10, $C, 8; 0 ; ... dc.b $30, 4, -1, -$C, 6, 8, $10, 7, -1, -$C; 10 dc.b 0, 8, $30, $A, -1, -$C, -4, 4, $10, $D; 20 dc.b -1, -8 ; 30 byte_31E5AC: dc.b 0, 5, -$A, $C, $30, 0, -1,-$10, $C, 8; 0 ; ... dc.b $30, 4, -1, -$C, 6, 8, $10, 7, -1, -$C; 10 dc.b 2, 8, $30, $A, -1, -$C, -2, 4, $10, $D; 20 dc.b -1, -8 ; 30 byte_31E5CC: dc.b 0, 5, -8, $C, $30, 0, -1,-$10, $C, 8; 0 ; ... dc.b $30, 4, -1, -$C, 8, 8, $10, 7, -1, -$C; 10 dc.b 4, 8, $30, $A, -1, -$C, 0, 4, $10, $D; 20 dc.b -1, -8 ; 30 byte_31E5EC: dc.b 0, 5, -6, $C, $30, 0, -1,-$10, $C, 8; 0 ; ... dc.b $30, 4, -1, -$C, 8, 8, $10, 7, -1, -$C; 10 dc.b 4, 8, $30, $A, -1, -$C, 2, 4, $10, $D; 20 dc.b -1, -8 ; 30 byte_31E60C: dc.b 0, 5, -4, $C, $30, 0, -1,-$10, $C, 8; 0 ; ... dc.b $30, 4, -1, -$C, 8, 8, $10, 7, -1, -$C; 10 dc.b 6, 8, $30, $A, -1, -$C, 4, 4, $10, $D; 20 dc.b -1, -8 ; 30 byte_31E62C: dc.b 0, 5, -2, $C, $30, 0, -1,-$10, $C, 8; 0 ; ... dc.b $30, 4, -1, -$C, $A, 8, $10, 7, -1, -$C; 10 dc.b 8, 8, $30, $A, -1, -$C, 6, 4, $10, $D; 20 dc.b -1, -8 ; 30 byte_31E64C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1,-$14, -$C, 2, 0, $16, -1, -$C; 10 dc.b -$C, 2, $20, $19, -1, -4, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E66C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1,-$13, -$C, 2, 0, $16, -1, -$B; 10 dc.b -$C, 2, $20, $19, -1, -3, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E68C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1,-$12, -$C, 2, 0, $16, -1, -$A; 10 dc.b -$C, 2, $20, $19, -1, -2, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E6AC: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1,-$11, -$C, 2, 0, $16, -1, -9; 10 dc.b -$C, 2, $20, $19, -1, -1, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E6CC: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1,-$10, -$C, 2, 0, $16, -1, -8; 10 dc.b -$C, 2, $20, $19, -1, -2, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E6EC: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -$F, -$C, 2, 0, $16, -1, -7; 10 dc.b -$C, 2, $20, $19, -1, -1, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E70C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -$E, -$C, 2, 0, $16, -1, -8; 10 dc.b -$C, 2, $20, $19, -1, -2, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E72C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -$D, -$C, 2, 0, $16, -1, -7; 10 dc.b -$C, 2, $20, $19, -1, -1, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E74C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -$C, -$C, 2, 0, $16, -1, -6; 10 dc.b -$C, 2, $20, $19, 0, 0, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E76C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -$B, -$C, 2, 0, $16, -1, -5; 10 dc.b -$C, 2, $20, $19, 0, 1, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E78C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -$A, -$C, 2, 0, $16, -1, -4; 10 dc.b -$C, 2, $20, $19, 0, 0, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E7AC: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -9, -$C, 2, 0, $16, -1, -3; 10 dc.b -$C, 2, $20, $19, 0, 1, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E7CC: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -8, -$C, 2, 0, $16, -1, -4; 10 dc.b -$C, 2, $20, $19, 0, 0, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E7EC: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -7, -$C, 2, 0, $16, -1, -3; 10 dc.b -$C, 2, $20, $19, 0, 1, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E80C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -6, -$C, 2, 0, $16, -1, -2; 10 dc.b -$C, 2, $20, $19, 0, 2, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E82C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -5, -$C, 2, 0, $16, -1, -1; 10 dc.b -$C, 2, $20, $19, 0, 3, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E84C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -4, -$C, 2, 0, $16, 0, 0; 10 dc.b -$C, 2, $20, $19, 0, 2, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E86C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -3, -$C, 2, 0, $16, 0, 1; 10 dc.b -$C, 2, $20, $19, 0, 3, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 byte_31E88C: dc.b 0, 5,-$10, 3, $20, $F, 0, $C, -$C, 2; 0 ; ... dc.b $20, $13, -1, -2, -$C, 2, 0, $16, 0, 0; 10 dc.b -$C, 2, $20, $19, 0, 2, -8, 1, 0, $1C; 20 dc.b 0, 4 ; 30 ; --------------------------------------------------------------------------- ; -------------------------------------------------------- ; Object 46 - Rolling Ball (OOZ, unused, S2 beta leftover) ; -------------------------------------------------------- Obj46: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31E8BA(pc,d0.w),d1 jmp off_31E8BA(pc,d1.w) ; --------------------------------------------------------------------------- off_31E8BA: dc.w loc_31E8C2-off_31E8BA,loc_31E984-off_31E8BA,loc_31E9D4-off_31E8BA; 0 ; ... dc.w loc_31EA80-off_31E8BA ; 3 ; --------------------------------------------------------------------------- loc_31E8C2: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_31E8DE bclr #7,2(a2,d0.w) bset #0,2(a2,d0.w) bne.w loc_31EA7A loc_31E8DE: ; ... addq.b #2,$24(a0) move.b #$F,$16(a0) move.b #$F,$17(a0) move.l #Map_Obj46,4(a0) move.w #$6354,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #3,$18(a0) move.w 8(a0),$34(a0) move.w $C(a0),$36(a0) move.b #$10,$19(a0) move.b #0,$1A(a0) move.w #0,$14(a0) move.b #1,$1F(a0) jsr SingleObjLoad bne.s loc_31E980 move.b #$46,0(a1) addq.b #6,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #$12,$C(a1) move.l #Map_Obj45,4(a1) move.w #$43C5,2(a1) or.b #4,1(a1) move.b #$10,$19(a1) move.b #4,$18(a1) move.b #9,$1A(a1) move.l a0,$3C(a1) loc_31E980: ; ... move.l a1,$3C(a0) loc_31E984: ; ... btst #6,($FFFFF607).w bne.s loc_31E99E lea ($FFFFF7E0).w,a2 moveq #0,d0 move.b $28(a0),d0 lsr.w #4,d0 tst.b (a2,d0.w) beq.s loc_31E9CA loc_31E99E: ; ... addq.b #2,$24(a0) bset #1,$22(a0) move.w #$FD00,$12(a0) move.w #$100,$14(a0) move.l $3C(a0),a1 move.b #1,$30(a1) btst #0,$22(a0) beq.s loc_31E9CA neg.w $14(a0) loc_31E9CA: ; ... bsr.w sub_31EA96 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31E9D4: ; ... move.w 8(a0),-(sp) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 btst #1,$22(a0) beq.s loc_31EA2A add.w #$18,$12(a0) bmi.s loc_31EA28 move.w ($FFFFEECE).w,d0 loc_31E9F2: add.w #$E0,d0 cmp.w $C(a0),d0 bcs.s loc_31EA66 jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.w loc_31EA28 add.w d1,$C(a0) clr.w $12(a0) loc_31EA10: bclr #1,$22(a0) move.w #$100,$10(a0) btst #0,$22(a0) beq.s loc_31EA28 neg.w $10(a0) loc_31EA28: ; ... bra.s loc_31EA42 ; --------------------------------------------------------------------------- loc_31EA2A: ; ... jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 cmp.w #8,d1 blt.s loc_31EA3E bset #1,$22(a0) bra.s loc_31EA42 ; --------------------------------------------------------------------------- loc_31EA3E: ; ... add.w d1,$C(a0) loc_31EA42: ; ... moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 move.w #$10,d2 move.w #$11,d3 move.w (sp)+,d4 jsr SolidObject bsr.w sub_31EA96 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31EA66: ; ... move.w (sp)+,d4 lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_31EA7A bclr #7,2(a2,d0.w) loc_31EA7A: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_31EA80: ; ... tst.b $30(a0) beq.s loc_31EA90 subq.b #1,$1A(a0) bne.s loc_31EA90 clr.b $30(a0) loc_31EA90: ; ... jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_31EA96: ; ... tst.b $1A(a0) beq.s loc_31EAA4 move.b #0,$1A(a0) rts ; --------------------------------------------------------------------------- loc_31EAA4: ; ... move.b $14(a0),d0 beq.s loc_31EAD0 bmi.s loc_31EAD8 subq.b #1,$1E(a0) bpl.s loc_31EAD0 neg.b d0 addq.b #8,d0 bcs.s loc_31EABA moveq #0,d0 loc_31EABA: ; ... move.b d0,$1E(a0) move.b $1F(a0),d0 addq.b #1,d0 cmp.b #4,d0 bne.s loc_31EACC moveq #1,d0 loc_31EACC: ; ... move.b d0,$1F(a0) loc_31EAD0: ; ... move.b $1F(a0),$1A(a0) rts ; --------------------------------------------------------------------------- loc_31EAD8: ; ... subq.b #1,$1E(a0) bpl.s loc_31EAD0 addq.b #8,d0 bcs.s loc_31EAE4 moveq #0,d0 loc_31EAE4: ; ... move.b d0,$1E(a0) move.b $1F(a0),d0 subq.b #1,d0 bne.s loc_31EAF2 moveq #3,d0 loc_31EAF2: ; ... move.b d0,$1F(a0) bra.s loc_31EAD0 ; End of function sub_31EA96 ; --------------------------------------------------------------------------- Map_Obj46: dc.w byte_31EB00-Map_Obj46,byte_31EB1A-Map_Obj46,byte_31EB34-Map_Obj46; 0 ; ... dc.w byte_31EB42-Map_Obj46 ; 3 byte_31EB00: dc.b 0, 4,-$10, 5, 0, 0, -1,-$10,-$10, 5; 0 ; ... dc.b 0, 4, 0, 0, 0, 5, $18, 4, -1,-$10; 10 dc.b 0, 5, $10, 4, 0, 0; 20 byte_31EB1A: dc.b 0, 4,-$10, 5, 0, 8, -1,-$10,-$10, 5; 0 ; ... dc.b 8, 8, 0, 0, 0, 5, $10, 8, -1,-$10; 10 dc.b 0, 5, $18, 8, 0, 0; 20 byte_31EB34: dc.b 0, 2,-$10, $D, 0, $C, -1,-$10, 0, $D; 0 ; ... dc.b $18, $C, -1,-$10 ; 10 byte_31EB42: dc.b 0, 2,-$10, $D, 8, $C, -1,-$10, 0, $D; 0 ; ... dc.b $10, $C, -1,-$10 ; 10 ; --------------------------------------------------------------------------- ; --------------------------------------------------- ; Object 47 - Button (Metropolis-only?) ; --------------------------------------------------- Obj47: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31EB5E(pc,d0.w),d1 jmp off_31EB5E(pc,d1.w) ; --------------------------------------------------------------------------- off_31EB5E: dc.w loc_31EB62-off_31EB5E,loc_31EB90-off_31EB5E; 0 ; ... ; --------------------------------------------------------------------------- loc_31EB62: ; ... addq.b #2,$24(a0) move.l #Map_Obj47,4(a0) move.w #$424,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) addq.w #4,$C(a0) loc_31EB90: ; ... tst.b 1(a0) bpl.s loc_31EBF2 move.w #$1B,d1 move.w #4,d2 move.w #5,d3 move.w 8(a0),d4 jsr SolidObject move.b #0,$1A(a0) move.b $28(a0),d0 and.w #$F,d0 lea ($FFFFF7E0).w,a3 lea (a3,d0.w),a3 moveq #0,d3 btst #6,$28(a0) beq.s loc_31EBCE moveq #7,d3 loc_31EBCE: ; ... move.b $22(a0),d0 and.b #$18,d0 bne.s loc_31EBDC bclr d3,(a3) bra.s loc_31EBF2 ; --------------------------------------------------------------------------- loc_31EBDC: ; ... tst.b (a3) bne.s loc_31EBEA move.w #$CD,d0 jsr PlaySound loc_31EBEA: ; ... bset d3,(a3) move.b #1,$1A(a0) loc_31EBF2: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- Map_Obj47: dc.w byte_31EBFE-Map_Obj47,byte_31EC06-Map_Obj47,byte_31EC0E-Map_Obj47; 0 ; ... byte_31EBFE: dc.b 0, 1, -$C, $D, 0, 0, -1,-$10; 0 ; ... byte_31EC06: dc.b 0, 1, -$C, $D, 0, 8, -1,-$10; 0 ; ... byte_31EC0E: dc.b 0, 1, -8, $D, 0, 0, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- ; ----------------------------------------------------------------------------------- ; Object 3D - Shooter (OOZ) ; (This is the thing that shoots you to those balls that fire you around quickly) ; ----------------------------------------------------------------------------------- Obj3D: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31EC24(pc,d0.w),d1 jmp off_31EC24(pc,d1.w) ; --------------------------------------------------------------------------- off_31EC24: dc.w loc_31EC2C-off_31EC24,loc_31EC6E-off_31EC24,loc_31ED8C-off_31EC24; 0 ; ... dc.w loc_31EDB2-off_31EC24 ; 3 ; --------------------------------------------------------------------------- loc_31EC2C: ; ... addq.b #2,$24(a0) move.l #Map_Obj3D,4(a0) move.w #$6332,2(a0) tst.b $28(a0) beq.s loc_31EC50 move.w #$63FF,2(a0) move.b #2,$1A(a0) loc_31EC50: ; ... jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$10,$19(a0) bset #7,$22(a0) move.b #4,$18(a0) loc_31EC6E: ; ... move.b ($FFFFB01C).w,$32(a0) move.b ($FFFFB05C).w,$33(a0) move.w ($FFFFB012).w,$34(a0) move.w ($FFFFB052).w,$36(a0) move.w #$1B,d1 move.w #$10,d2 move.w #$11,d3 move.w 8(a0),d4 jsr SolidObject move.b $22(a0),d0 and.b #$18,d0 bne.s loc_31ECAC loc_31ECA6: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31ECAC: ; ... cmp.b #$18,d0 bne.s loc_31ECE2 cmp.b #2,$32(a0) beq.s loc_31ECC2 cmp.b #2,$33(a0) bne.s loc_31ECA6 loc_31ECC2: ; ... lea ($FFFFB000).w,a1 move.b $32(a0),d0 move.w $34(a0),d1 bsr.s sub_31ECFE lea ($FFFFB040).w,a1 move.b $33(a0),d0 move.w $36(a0),d1 bsr.s sub_31ECFE bra.w loc_31ED50 ; --------------------------------------------------------------------------- loc_31ECE2: ; ... move.b d0,d1 and.b #8,d1 beq.s loc_31ED34 cmp.b #2,$32(a0) bne.s loc_31ECA6 lea ($FFFFB000).w,a1 move.w $34(a0),d1 bsr.s sub_31ED04 bra.s loc_31ED50 ; =============== S U B R O U T I N E ======================================= sub_31ECFE: ; ... cmp.b #2,d0 bne.s loc_31ED20 ; End of function sub_31ECFE ; =============== S U B R O U T I N E ======================================= sub_31ED04: ; ... bset #2,$22(a1) move.b #$E,$16(a1) move.b #7,$17(a1) move.b #2,$1C(a1) move.w d1,$12(a1) loc_31ED20: ; ... bset #1,$22(a1) bclr #3,$22(a1) move.b #2,$24(a1) rts ; End of function sub_31ED04 ; --------------------------------------------------------------------------- loc_31ED34: ; ... and.b #$10,d0 beq.w loc_31ECA6 cmp.b #2,$33(a0) bne.w loc_31ECA6 lea ($FFFFB040).w,a1 move.w $36(a0),d1 bsr.s sub_31ED04 loc_31ED50: ; ... and.b #$E7,$22(a0) jsr SingleObjLoad2 bne.s loc_31ED76 moveq #0,d0 move.w #$A,d1 loc_31ED64: ; ... move.l (a0,d0.w),(a1,d0.w) addq.w #4,d0 dbf d1,loc_31ED64 move.b #6,$24(a1) loc_31ED76: ; ... lea (word_31EEDA).l,a4 addq.b #1,$1A(a0) moveq #$F,d1 move.w #$18,d2 jsr sub_31D708 loc_31ED8C: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) tst.b 1(a0) bpl.w j_DeleteObject_5 jmp DisplaySprite ; --------------------------------------------------------------------------- j_DeleteObject_5: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- j_MarkObjGone3: ; ... jmp MarkObjGone3 ; --------------------------------------------------------------------------- loc_31EDB2: ; ... lea ($FFFFB000).w,a1 lea $2C(a0),a4 bsr.s loc_31EDD4 lea ($FFFFB040).w,a1 lea $36(a0),a4 bsr.s loc_31EDD4 move.b $2C(a0),d0 add.b $36(a0),d0 beq.w j_MarkObjGone3 rts ; --------------------------------------------------------------------------- loc_31EDD4: ; ... moveq #0,d0 move.b (a4),d0 move.w off_31EDE0(pc,d0.w),d0 jmp off_31EDE0(pc,d0.w) ; --------------------------------------------------------------------------- off_31EDE0: dc.w loc_31EDE4-off_31EDE0,loc_31EE96-off_31EDE0; 0 ; ... ; --------------------------------------------------------------------------- loc_31EDE4: ; ... move.w 8(a1),d0 sub.w 8(a0),d0 add.w #$10,d0 cmp.w #$20,d0 bcc.w return_31EE94 move.w $C(a1),d1 sub.w $C(a0),d1 tst.b $28(a0) beq.s loc_31EE0A add.w #$10,d1 loc_31EE0A: ; ... cmp.w #$10,d1 bcc.w return_31EE94 cmp.w #$B040,a1 bne.s loc_31EE22 cmp.w #4,($FFFFF708).w beq.w return_31EE94 loc_31EE22: ; ... addq.b #2,(a4) move.b #$81,$2A(a1) move.b #2,$1C(a1) move.w #$800,$14(a1) tst.b $28(a0) beq.s loc_31EE50 move.w 8(a0),8(a1) move.w #0,$10(a1) move.w #$F800,$12(a1) bra.s loc_31EE62 ; --------------------------------------------------------------------------- loc_31EE50: ; ... move.w $C(a0),$C(a1) move.w #$800,$10(a1) move.w #0,$12(a1) loc_31EE62: ; ... bclr #5,$22(a0) bclr #5,$22(a1) bset #1,$22(a1) bset #3,$22(a1) move.w a0,d0 sub.w #$B000,d0 lsr.w #6,d0 and.w #$7F,d0 move.b d0,$3D(a1) move.w #$BE,d0 jsr PlaySound return_31EE94: ; ... rts ; --------------------------------------------------------------------------- loc_31EE96: ; ... tst.b 1(a1) bmi.s loc_31EEB4 move.b #0,$2A(a1) bset #1,$22(a1) bclr #3,$22(a1) move.b #0,(a4) rts ; --------------------------------------------------------------------------- loc_31EEB4: ; ... move.l 8(a1),d2 move.l $C(a1),d3 move.w $10(a1),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a1),d0 ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,8(a1) move.l d3,$C(a1) rts ; --------------------------------------------------------------------------- word_31EEDA: dc.w -$400, -$400, -$200, -$400, $200, -$400, $400; 0 ; ... dc.w -$400, -$3C0, -$200, -$1C0, -$200, $1C0, -$200; 7 dc.w $3C0, -$200, -$380, $200, -$180, $200, $180; 14 dc.w $200, $380, $200, -$340, $400, -$140, $400; 21 dc.w $140, $400, $340, $400 ; 28 Map_Obj3D: dc.w byte_31EF22-Map_Obj3D,byte_31EF3C-Map_Obj3D,byte_31EF9E-Map_Obj3D; 0 ; ... dc.w byte_31EFB8-Map_Obj3D ; 3 byte_31EF22: dc.b 0, 4,-$10, 3, 0, 0, -1,-$10,-$10, 3; 0 ; ... dc.b 0, 0, -1, -8,-$10, 3, 0, 0, 0, 0; 10 dc.b -$10, 3, 0, 0, 0, 8; 20 byte_31EF3C: dc.b 0, $10,-$10, 0, 0, 0, -1,-$10,-$10, 0; 0 ; ... dc.b 0, 0, -1, -8,-$10, 0, 0, 0, 0, 0; 10 dc.b -$10, 0, 0, 0, 0, 8, -8, 0, 0, 1; 20 dc.b -1,-$10, -8, 0, 0, 1, -1, -8, -8, 0; 30 dc.b 0, 1, 0, 0, -8, 0, 0, 1, 0, 8; 40 dc.b 0, 0, 0, 2, -1,-$10, 0, 0, 0, 2; 50 dc.b -1, -8, 0, 0, 0, 2, 0, 0, 0, 0; 60 dc.b 0, 2, 0, 8, 8, 0, 0, 3, -1,-$10; 70 dc.b 8, 0, 0, 3, -1, -8, 8, 0, 0, 3; 80 dc.b 0, 0, 8, 0, 0, 3, 0, 8; 90 byte_31EF9E: dc.b 0, 4,-$10, $C, 0, 0, -1,-$10, -8, $C; 0 ; ... dc.b 0, 0, -1,-$10, 0, $C, 0, 0, -1,-$10; 10 dc.b 8, $C, 0, 0, -1,-$10; 20 byte_31EFB8: dc.b 0, $10,-$10, 0, 0, 0, -1,-$10,-$10, 0; 0 ; ... dc.b 0, 1, -1, -8,-$10, 0, 0, 2, 0, 0; 10 dc.b -$10, 0, 0, 3, 0, 8, -8, 0, 0, 0; 20 dc.b -1,-$10, -8, 0, 0, 1, -1, -8, -8, 0; 30 dc.b 0, 2, 0, 0, -8, 0, 0, 3, 0, 8; 40 dc.b 0, 0, 0, 0, -1,-$10, 0, 0, 0, 1; 50 dc.b -1, -8, 0, 0, 0, 2, 0, 0, 0, 0; 60 dc.b 0, 3, 0, 8, 8, 0, 0, 0, -1,-$10; 70 dc.b 8, 0, 0, 1, -1, -8, 8, 0, 0, 2; 80 dc.b 0, 0, 8, 0, 0, 3, 0, 8; 90 ; --------------------------------------------------------------------------- ; ------------------------------------------------------------------------- ; Object 48 - Round ball that shoots you to some direction at a high speed ; ------------------------------------------------------------------------- Obj48: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31F040(pc,d0.w),d1 jsr off_31F040(pc,d1.w) move.b $2C(a0),d0 add.b $36(a0),d0 beq.w loc_31F03A jmp DisplaySprite ; --------------------------------------------------------------------------- loc_31F03A: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- off_31F040: dc.w loc_31F054-off_31F040,loc_31F0A6-off_31F040; 0 ; ... byte_31F044: dc.b 4, 0, 6, 7, 7, 0, 5, 7, 5, 0; 0 ; ... dc.b 4, 7, 6, 0, 7, 7; 10 ; --------------------------------------------------------------------------- loc_31F054: ; ... addq.b #2,$24(a0) move.l #Map_Obj48,4(a0) move.w #$6368,2(a0) jsr Adjust2PArtPointer2_Useless move.b $28(a0),d0 and.w #$F,d0 btst #0,$22(a0) beq.s loc_31F07E addq.w #4,d0 loc_31F07E: ; ... add.w d0,d0 move.b byte_31F044(pc,d0.w),1(a0) move.b byte_31F044+1(pc,d0.w),$3F(a0) beq.s loc_31F094 move.b #1,$3E(a0) loc_31F094: ; ... move.b $3F(a0),$1A(a0) move.b #$28,$19(a0) move.b #1,$18(a0) loc_31F0A6: ; ... lea ($FFFFB000).w,a1 lea $2C(a0),a4 moveq #$2C,d2 bsr.s loc_31F0BC lea ($FFFFB040).w,a1 lea $36(a0),a4 moveq #$36,d2 loc_31F0BC: ; ... moveq #0,d0 move.b (a4),d0 move.w off_31F0C8(pc,d0.w),d0 jmp off_31F0C8(pc,d0.w) ; --------------------------------------------------------------------------- off_31F0C8: dc.w loc_31F0D0-off_31F0C8,loc_31F1A6-off_31F0C8,loc_31F254-off_31F0C8; 0 ; ... dc.w loc_31F2D2-off_31F0C8 ; 3 ; --------------------------------------------------------------------------- loc_31F0D0: ; ... tst.w ($FFFFFE08).w bne.w return_31F1A4 move.w 8(a1),d0 sub.w 8(a0),d0 add.w #$10,d0 cmp.w #$20,d0 bcc.w return_31F1A4 move.w $C(a1),d1 sub.w $C(a0),d1 add.w #$10,d1 cmp.w #$20,d1 bcc.w return_31F1A4 cmp.w #$B040,a1 bne.s loc_31F110 cmp.w #4,($FFFFF708).w beq.w return_31F1A4 loc_31F110: ; ... cmp.b #6,$24(a1) bcc.w return_31F1A4 tst.w ($FFFFFE08).w bne.w return_31F1A4 btst #3,$22(a1) beq.s loc_31F140 moveq #0,d0 move.b $3D(a1),d0 lsl.w #6,d0 add.l #-$5000,d0 move.l d0,a3 move.b #0,(a3,d2.w) loc_31F140: ; ... move.w a0,d0 sub.w #$B000,d0 lsr.w #6,d0 and.w #$7F,d0 move.b d0,$3D(a1) addq.b #2,(a4) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b #$81,$2A(a1) move.b #2,$1C(a1) move.w #$1000,$14(a1) move.w #0,$10(a1) move.w #0,$12(a1) bclr #5,$22(a0) bclr #5,$22(a1) bset #1,$22(a1) bset #3,$22(a1) move.b $3F(a0),$1A(a0) move.w #$BE,d0 jsr PlaySound return_31F1A4: ; ... rts ; --------------------------------------------------------------------------- loc_31F1A6: ; ... tst.b $3E(a0) bne.s loc_31F1CE cmp.b #7,$1A(a0) beq.s loc_31F1E8 subq.w #1,$1E(a0) bpl.s return_31F1CC move.w #7,$1E(a0) addq.b #1,$1A(a0) cmp.b #7,$1A(a0) beq.s loc_31F1E8 return_31F1CC: ; ... rts ; --------------------------------------------------------------------------- loc_31F1CE: ; ... tst.b $1A(a0) beq.s loc_31F1E8 subq.w #1,$1E(a0) bpl.s return_31F1CC move.w #7,$1E(a0) subq.b #1,$1A(a0) beq.s loc_31F1E8 rts ; --------------------------------------------------------------------------- loc_31F1E8: ; ... addq.b #2,(a4) move.b $28(a0),d0 addq.b #1,d0 btst #0,$22(a0) beq.s loc_31F1FA subq.b #2,d0 loc_31F1FA: ; ... and.w #3,d0 add.w d0,d0 add.w d0,d0 move.w word_31F244(pc,d0.w),$10(a1) move.w word_31F244+2(pc,d0.w),$12(a1) move.w #3,$1E(a0) tst.b $28(a0) bpl.s return_31F242 move.b #0,$2A(a1) bset #1,$22(a1) bclr #3,$22(a1) move.b #0,$3C(a1) move.b #2,$24(a1) move.b #6,(a4) move.w #7,$3C(a0) return_31F242: ; ... rts ; --------------------------------------------------------------------------- word_31F244: dc.w 0,-$1000, $1000, 0, 0, $1000,-$1000; 0 ; ... dc.w 0 ; 7 ; --------------------------------------------------------------------------- loc_31F254: ; ... tst.b 1(a1) bmi.s loc_31F272 move.b #0,$2A(a1) bset #1,$22(a1) bclr #3,$22(a1) move.b #0,(a4) rts ; --------------------------------------------------------------------------- loc_31F272: ; ... cmp.b #2,$2C(a0) beq.s loc_31F2AC cmp.b #2,$36(a0) beq.s loc_31F2AC subq.w #1,$1E(a0) bpl.s loc_31F2AC move.w #1,$1E(a0) tst.b $3E(a0) beq.s loc_31F2A2 cmp.b #7,$1A(a0) beq.s loc_31F2AC addq.b #1,$1A(a0) bra.s loc_31F2AC ; --------------------------------------------------------------------------- loc_31F2A2: ; ... tst.b $1A(a0) beq.s loc_31F2AC subq.b #1,$1A(a0) loc_31F2AC: ; ... move.l 8(a1),d2 move.l $C(a1),d3 move.w $10(a1),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a1),d0 ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,8(a1) move.l d3,$C(a1) rts ; --------------------------------------------------------------------------- loc_31F2D2: ; ... subq.w #1,$3C(a0) bpl.s return_31F2DC move.b #0,(a4) return_31F2DC: ; ... rts ; --------------------------------------------------------------------------- Map_Obj48: dc.w byte_31F2EE-Map_Obj48,byte_31F320-Map_Obj48,byte_31F346-Map_Obj48; 0 ; ... dc.w byte_31F360-Map_Obj48,byte_31F37A-Map_Obj48,byte_31F394-Map_Obj48; 3 dc.w byte_31F3AE-Map_Obj48,byte_31F3D4-Map_Obj48; 6 byte_31F2EE: dc.b 0, 8,-$28, 4, 0, 0, -1,-$10,-$28, 4; 0 ; ... dc.b 8, 0, 0, 0,-$20, 4; 10 dc.b 0, 2, -1,-$10,-$20, 4, 8, 2, 0, 0; 0 dc.b -$18, $A, 0, $11, -1,-$18,-$18, $A, 8, $11; 10 dc.b 0, 0, 0, $A, $10, 8, -1,-$18, 0, $A; 20 dc.b $18, 8, 0, 0 ; 30 byte_31F320: dc.b 0, 6,-$20, 4, 0, 0, -1,-$10,-$20, 4; 0 ; ... dc.b 8, 0, 0, 0,-$18, $A, 0, $11, -1,-$18; 10 dc.b -$18, $A, 8, $11, 0, 0, 0, $A, $10, 8; 20 dc.b -1,-$18, 0, $A, $18, 8, 0, 0; 30 byte_31F346: dc.b 0, 4,-$18, $A, 0, $11, -1,-$18,-$18, $A; 0 ; ... dc.b 8, $11, 0, 0, 0, $A, $10, 8, -1,-$18; 10 dc.b 0, $A, $18, 8, 0, 0; 20 byte_31F360: dc.b 0, 4,-$18, $A, 0, $1A, -1,-$18,-$18, $A; 0 ; ... dc.b $18, $23, 0, 0, 0, $A, 0, $23, -1,-$18; 10 dc.b 0, $A, $18, $1A, 0, 0; 20 byte_31F37A: dc.b 0, 4,-$18, $A, $10, $23, -1,-$18,-$18, $A; 0 ; ... dc.b 8, $1A, 0, 0, 0, $A, $10, $1A, -1,-$18; 10 dc.b 0, $A, 8, $23, 0, 0; 20 byte_31F394: dc.b 0, 4,-$18, $A, 0, 8, -1,-$18,-$18, $A; 0 ; ... dc.b $10, $2C, 0, 0, 0, $A, $10, 8, -1,-$18; 10 dc.b 0, $A, 0, $2C, 0, 0; 20 byte_31F3AE: dc.b 0, 6,-$18, $A, 0, 8, -1,-$18,-$18, $A; 0 ; ... dc.b $10, $2C, 0, 0, 0, $A, $10, 8, -1,-$18; 10 dc.b 0, $A, 0, $2C, 0, 0,-$10, 1, 0, 6; 20 dc.b 0, $18, 0, 1, $10, 6, 0, $18; 30 byte_31F3D4: dc.b 0, 8,-$18, $A, 0, 8, -1,-$18,-$18, $A; 0 ; ... dc.b $10, $2C, 0, 0, 0, $A, $10, 8, -1,-$18; 10 dc.b 0, $A, 0, $2C, 0, 0,-$10, 1, 0, 4; 20 dc.b 0, $18, 0, 1, $10, 4, 0, $18,-$10, 1; 30 dc.b 0, 6, 0, $20, 0, 1, $10, 6, 0, $20; 40 ; --------------------------------------------------------------------------- ; --------------------------------------------------- ; Object 22 - Arrow shooter (ARZ) ; --------------------------------------------------- Obj22: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31F414(pc,d0.w),d1 jmp off_31F414(pc,d1.w) ; --------------------------------------------------------------------------- off_31F414: dc.w loc_31F41E-off_31F414,loc_31F454-off_31F414,loc_31F4A2-off_31F414; 0 ; ... dc.w loc_31F4F8-off_31F414,loc_31F53C-off_31F414; 3 ; --------------------------------------------------------------------------- loc_31F41E: ; ... addq.b #2,$24(a0) move.l #Map_Obj22,4(a0) move.w #$417,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #3,$18(a0) move.b #$10,$19(a0) move.b #1,$1A(a0) and.b #$F,$28(a0) loc_31F454: ; ... cmp.b #2,$1C(a0) beq.s loc_31F47A moveq #0,d2 lea ($FFFFB000).w,a1 bsr.s sub_31F48C lea ($FFFFB040).w,a1 bsr.s sub_31F48C tst.b d2 bne.s loc_31F476 tst.b $1C(a0) beq.s loc_31F476 moveq #2,d2 loc_31F476: ; ... move.b d2,$1C(a0) loc_31F47A: ; ... lea (Ani_Obj22).l,a1 jsr AnimateSprite jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_31F48C: ; ... move.w 8(a0),d0 sub.w 8(a1),d0 bcc.s loc_31F498 neg.w d0 loc_31F498: ; ... cmp.w #$40,d0 bcc.s return_31F4A0 moveq #1,d2 return_31F4A0: ; ... rts ; End of function sub_31F48C ; --------------------------------------------------------------------------- loc_31F4A2: ; ... jsr SingleObjLoad bne.s loc_31F4E2 move.b 0(a0),0(a1) addq.b #6,$24(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b 1(a0),1(a1) move.b $22(a0),$22(a1) move.w #$DB,d0 jsr PlaySound loc_31F4E2: ; ... subq.b #2,$24(a0) lea (Ani_Obj22).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31F4F8: ; ... addq.b #2,$24(a0) move.b #8,$16(a0) move.b #$10,$17(a0) move.b #4,$18(a0) move.b #$9B,$20(a0) move.b #8,$19(a0) move.b #0,$1A(a0) move.w #$400,$10(a0) btst #0,$22(a0) beq.s loc_31F532 neg.w $10(a0) loc_31F532: ; ... move.w #$AE,d0 jsr PlaySound loc_31F53C: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 btst #0,$22(a0) bne.s loc_31F562 moveq #-8,d3 bsr.w ObjCheckRightWallDist tst.w d1 bmi.w loc_31F55C jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31F55C: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_31F562: ; ... moveq #8,d3 bsr.w ObjCheckLeftWallDist tst.w d1 bmi.w loc_31F55C jmp MarkObjGone ; --------------------------------------------------------------------------- Ani_Obj22: dc.w byte_31F57A-Ani_Obj22,byte_31F57D-Ani_Obj22,byte_31F581-Ani_Obj22; 0 ; ... byte_31F57A: dc.b $1F, 1, -1 ; 0 ; ... byte_31F57D: dc.b 3, 1, 2, -1 ; 0 ; ... byte_31F581: dc.b 7, 3, 4, -4, 4, 3, 1, -3, 0; 0 ; ... Map_Obj22: dc.w byte_31F594-Map_Obj22,byte_31F59C-Map_Obj22,byte_31F5AA-Map_Obj22; 0 ; ... dc.w byte_31F5BE-Map_Obj22,byte_31F5CC-Map_Obj22; 3 byte_31F594: dc.b 0, 1, -4, $C, $20, 0, -1,-$10; 0 ; ... byte_31F59C: dc.b 0, 2, -8, 9, $20, 4, -1,-$10, -8, 1; 0 ; ... dc.b $20, $B, 0, 8 ; 10 byte_31F5AA: dc.b 0, 3, -4, 0, 0, $A, -1, -4, -8, 9; 0 ; ... dc.b $20, 4, -1,-$10, -8, 1, $20, $B, 0, 8; 10 byte_31F5BE: dc.b 0, 2, -8, 9, $20, 4, -1,-$10, -8, 1; 0 ; ... dc.b $20, $D, 0, 8 ; 0 byte_31F5CC: dc.b 0, 2, -8, 9, $20, 4, -1,-$10, -8, 1; 0 ; ... dc.b $20, $F, 0, 8 ; 10 ; --------------------------------------------------------------------------- ; ------------------------------------------------------- ; Object 23 - Pillar that drops its lower part (ARZ) ; ------------------------------------------------------- Obj23: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31F5E8(pc,d0.w),d1 loc_31F5E4: jmp off_31F5E8(pc,d1.w) ; --------------------------------------------------------------------------- off_31F5E8: dc.w loc_31F5EC-off_31F5E8,loc_31F674-off_31F5E8; 0 ; ... ; --------------------------------------------------------------------------- loc_31F5EC: ; ... addq.b #2,$24(a0) move.l #Map_Obj23,4(a0) move.w #$2000,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$10,$19(a0) move.b #$20,$16(a0) move.b #4,$18(a0) jsr SingleObjLoad2 bne.s loc_31F674 move.b 0(a0),0(a1) addq.b #2,$24(a1) addq.b #2,$25(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.w 8(a0),8(a1) move.w 8(a0),$30(a1) move.w $C(a0),$C(a1) add.w #$30,$C(a1) move.b 1(a0),1(a1) move.b #$10,$19(a1) move.b #$10,$16(a1) move.b #4,$18(a1) move.b #1,$1A(a1) loc_31F674: ; ... move.w 8(a0),-(sp) bsr.w loc_31F69E moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 move.w (sp)+,d4 jsr SolidObject jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31F69E: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_31F6AC(pc,d0.w),d1 jmp off_31F6AC(pc,d1.w) ; --------------------------------------------------------------------------- off_31F6AC: dc.w return_31F6E2-off_31F6AC,loc_31F6B4-off_31F6AC,loc_31F6E4-off_31F6AC; 0 ; ... dc.w loc_31F70E-off_31F6AC ; 3 ; --------------------------------------------------------------------------- loc_31F6B4: ; ... tst.w ($FFFFFE08).w bne.s return_31F6E2 lea ($FFFFB000).w,a1 bsr.s sub_31F6C4 lea ($FFFFB040).w,a1 ; =============== S U B R O U T I N E ======================================= sub_31F6C4: ; ... move.w 8(a0),d0 sub.w 8(a1),d0 bcc.s loc_31F6D0 neg.w d0 loc_31F6D0: ; ... cmp.w #$80,d0 bcc.s return_31F6E2 move.b #4,$25(a0) move.w #8,$34(a0) return_31F6E2: ; ... rts ; End of function sub_31F6C4 ; --------------------------------------------------------------------------- loc_31F6E4: ; ... move.w $34(a0),d0 subq.w #1,d0 bcc.s loc_31F6F2 addq.b #2,$25(a0) rts ; --------------------------------------------------------------------------- loc_31F6F2: ; ... move.w d0,$34(a0) move.b unk_31F706(pc,d0.w),d0 ext.w d0 add.w $30(a0),d0 move.w d0,8(a0) rts ; --------------------------------------------------------------------------- unk_31F706: dc.b 0 ; ... dc.b 1 dc.b $FF dc.b 1 dc.b 0 dc.b $FF dc.b 0 dc.b 1 ; --------------------------------------------------------------------------- loc_31F70E: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$38,$12(a0) bsr.w ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.w return_31F73C add.w d1,$C(a0) clr.w $12(a0) move.w $C(a0),$32(a0) move.b #2,$1A(a0) clr.b $25(a0) return_31F73C: ; ... rts ; --------------------------------------------------------------------------- Map_Obj23: dc.w byte_31F744-Map_Obj23,byte_31F76A-Map_Obj23,byte_31F77E-Map_Obj23; 0 ; ... byte_31F744: dc.b 0, 6,-$20, 5, 0, $5D, -1,-$20,-$20, 5; 0 ; ... dc.b 8, $5D, 0, $10,-$20, $D, 0, $61, -1,-$10; 10 dc.b -$10, $D, 0, $69, -1,-$10, 0, $D, 0, $69; 20 dc.b -1,-$10, $10, $D, 0, $71, -1,-$10; 30 byte_31F76A: dc.b 0, 3,-$10, $D, 0, $69, -1,-$10, 0, $D; 0 ; ... dc.b 0, $79, -1,-$10, $10, 4, 0,-$7F, -1,-$10; 10 byte_31F77E: dc.b 0, 4, 9, $D, $20,-$75, -1,-$10,-$10, $D; 0 ; ... dc.b 0, $69, -1,-$10, 0, $D, 0, $79, -1,-$10; 10 dc.b $10, 4, 0,-$7F, -1,-$10; 20 ; --------------------------------------------------------------------------- ; ----------------------------------------------------------------- ; Object 2B - Rising pillar (ARZ) ; ----------------------------------------------------------------- Obj2B: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31F7A6(pc,d0.w),d1 jmp off_31F7A6(pc,d1.w) ; --------------------------------------------------------------------------- off_31F7A6: dc.w loc_31F7AC-off_31F7A6,loc_31F7DC-off_31F7A6,loc_31F8D2-off_31F7A6; 0 ; ... ; --------------------------------------------------------------------------- loc_31F7AC: ; ... addq.b #2,$24(a0) move.l #Map_Obj2B,4(a0) move.w #$2000,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$10,$19(a0) move.b #$18,$16(a0) move.b #4,$18(a0) loc_31F7DC: ; ... move.w 8(a0),-(sp) bsr.w loc_31F86C moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 move.w (sp)+,d4 jsr SolidObject move.b $22(a0),d0 and.b #$18,d0 bne.w loc_31F812 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_31F812: ; ... lea (word_31F90C).l,a4 lea (unk_31F8FE).l,a2 addq.b #7,$1A(a0) bsr.w sub_31F944 lea ($FFFFB000).w,a1 moveq #3,d6 bsr.s sub_31F83A lea ($FFFFB040).w,a1 addq.b #1,d6 bsr.s sub_31F83A bra.w loc_31F8D2 ; =============== S U B R O U T I N E ======================================= sub_31F83A: ; ... bclr d6,$22(a0) beq.s return_31F86A bset #2,$22(a1) move.b #$E,$16(a1) move.b #7,$17(a1) move.b #2,$1C(a1) bset #1,$22(a1) bclr #3,$22(a1) move.b #2,$24(a1) return_31F86A: ; ... rts ; End of function sub_31F83A ; --------------------------------------------------------------------------- loc_31F86C: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_31F87A(pc,d0.w),d1 jmp off_31F87A(pc,d1.w) ; --------------------------------------------------------------------------- off_31F87A: dc.w loc_31F880-off_31F87A,loc_31F8AA-off_31F87A,return_31F8A8-off_31F87A; 0 ; ... ; --------------------------------------------------------------------------- loc_31F880: ; ... tst.w ($FFFFFE08).w bne.s return_31F8A8 lea ($FFFFB000).w,a1 bsr.s sub_31F890 lea ($FFFFB040).w,a1 ; =============== S U B R O U T I N E ======================================= sub_31F890: ; ... move.w 8(a0),d0 sub.w 8(a1),d0 bcc.s loc_31F89C neg.w d0 loc_31F89C: ; ... cmp.w #$40,d0 bcc.s return_31F8A8 move.b #2,$25(a0) return_31F8A8: ; ... rts ; End of function sub_31F890 ; --------------------------------------------------------------------------- loc_31F8AA: ; ... subq.w #1,$34(a0) bcc.s return_31F8D0 move.w #3,$34(a0) subq.w #4,$C(a0) addq.b #4,$16(a0) addq.b #1,$1A(a0) cmp.b #6,$1A(a0) bne.s return_31F8D0 move.b #4,$25(a0) return_31F8D0: ; ... rts ; --------------------------------------------------------------------------- loc_31F8D2: ; ... tst.b $3F(a0) beq.s loc_31F8DE subq.b #1,$3F(a0) bra.s loc_31F8EA ; --------------------------------------------------------------------------- loc_31F8DE: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) loc_31F8EA: ; ... tst.b 1(a0) bpl.w loc_31F8F8 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_31F8F8: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- unk_31F8FE: dc.b 0 ; ... dc.b 0 dc.b 0 dc.b 0 dc.b 4 dc.b 4 dc.b 8 dc.b 8 dc.b $C dc.b $C dc.b $10 dc.b $10 dc.b $14 dc.b $14 word_31F90C: dc.w -$200, -$200, $200, -$200, -$1C0, -$1C0, $1C0; 0 ; ... dc.w -$1C0, -$180, -$180, $180, -$180, -$140, -$140; 7 dc.w $140, -$140, -$100, -$100, $100, -$100, -$C0; 14 dc.w -$C0, $C0, -$C0, -$80, -$80, $80, -$80; 21 ; =============== S U B R O U T I N E ======================================= sub_31F944: ; ... moveq #0,d0 move.b $1A(a0),d0 add.w d0,d0 move.l 4(a0),a3 add.w (a3,d0.w),a3 move.w (a3)+,d1 subq.w #1,d1 bset #5,1(a0) move.b 0(a0),d4 move.b 1(a0),d5 move.l a0,a1 bra.s loc_31F974 ; --------------------------------------------------------------------------- loc_31F96A: ; ... jsr SingleObjLoad2 bne.s loc_31F9B4 addq.w #6,a3 loc_31F974: ; ... move.b #4,$24(a1) move.b d4,0(a1) move.l a3,4(a1) move.b d5,1(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w 2(a0),2(a1) move.b $18(a0),$18(a1) move.b $19(a0),$19(a1) move.w (a4)+,$10(a1) move.w (a4)+,$12(a1) move.b (a2)+,$3F(a1) dbf d1,loc_31F96A loc_31F9B4: ; ... move.w #$CB,d0 jmp PlaySound ; End of function sub_31F944 ; --------------------------------------------------------------------------- Map_Obj2B: dc.w byte_31F9DA-Map_Obj2B,byte_31FA00-Map_Obj2B,byte_31FA2C-Map_Obj2B; 0 ; ... dc.w byte_31FA58-Map_Obj2B,byte_31FA8A-Map_Obj2B,byte_31FABC-Map_Obj2B; 3 dc.w byte_31FAF4-Map_Obj2B,byte_31FB2C-Map_Obj2B,byte_31FB5E-Map_Obj2B; 6 dc.w byte_31FB9C-Map_Obj2B,byte_31FBDA-Map_Obj2B,byte_31FC24-Map_Obj2B; 9 dc.w byte_31FC6E-Map_Obj2B,byte_31FCC4-Map_Obj2B; 12 byte_31F9DA: dc.b 0, 6, $10, $D, $20,-$75, -1,-$10,-$18, 5; 0 ; ... dc.b 0, $5D, -1,-$20,-$18, 5, 8, $5D, 0, $10; 10 dc.b -$18, $D, 0, $61, -1,-$10, -8, $D, 0, $69; 20 dc.b -1,-$10, 8, $D, 0,-$7D, -1,-$10; 30 byte_31FA00: dc.b 0, 7, $14, $D, $20,-$75, -1,-$10,-$1C, 5; 0 ; ... dc.b 0, $5D, -1,-$20,-$1C, 5, 8, $5D, 0, $10; 10 dc.b -$1C, $D, 0, $61, -1,-$10, -$C, $D, 0, $69; 20 dc.b -1,-$10, -4, $D, 0, $69, -1,-$10, $C, $D; 30 dc.b 0,-$7D, -1,-$10 ; 40 byte_31FA2C: dc.b 0, 7, $18, $D, $20,-$75, -1,-$10,-$20, 5; 0 ; ... dc.b 0, $5D, -1,-$20,-$20, 5, 8, $5D, 0, $10; 10 dc.b -$20, $D, 0, $61, -1,-$10,-$10, $D, 0, $69; 20 dc.b -1,-$10, 0, $D, 0, $69, -1,-$10, $10, $D; 30 dc.b 0,-$7D, -1,-$10 ; 40 byte_31FA58: dc.b 0, 8, $1C, $D, $20,-$75, -1,-$10,-$24, 5; 0 ; ... dc.b 0, $5D, -1,-$20,-$24, 5, 8, $5D, 0, $10; 10 dc.b -$24, $D, 0, $61, -1,-$10,-$14, $D, 0, $69; 20 dc.b -1,-$10, -4, $D, 0, $69, -1,-$10, 4, $D; 30 dc.b 0, $69, -1,-$10, $14, $D, 0,-$7D, -1,-$10; 40 byte_31FA8A: dc.b 0, 8, $20, $D, $20,-$75, -1,-$10,-$28, 5; 0 ; ... dc.b 0, $5D, -1,-$20,-$28, 5, 8, $5D, 0, $10; 10 dc.b -$28, $D, 0, $61, -1,-$10,-$18, $D, 0, $69; 20 dc.b -1,-$10, -8, $D, 0, $69, -1,-$10, 8, $D; 30 dc.b 0, $69, -1,-$10, $18, $D, 0,-$7D, -1,-$10; 40 byte_31FABC: dc.b 0, 9, $24, $D, $20,-$75, -1,-$10,-$2C, 5; 0 ; ... dc.b 0, $5D, -1,-$20,-$2C, 5, 8, $5D, 0, $10; 10 dc.b -$2C, $D, 0, $61, -1,-$10,-$1C, $D, 0, $69; 20 dc.b -1,-$10, -$C, $D, 0, $69, -1,-$10, 4, $D; 30 dc.b 0, $69, -1,-$10, $C, $D, 0, $69, -1,-$10; 40 dc.b $1C, $D, 0,-$7D, -1,-$10; 50 byte_31FAF4: dc.b 0, 9, $28, $D, $20,-$75, -1,-$10,-$30, 5; 0 ; ... dc.b 0, $5D, -1,-$20,-$30, 5, 8, $5D, 0, $10; 10 dc.b -$30, $D, 0, $61, -1,-$10,-$20, $D, 0, $69; 20 dc.b -1,-$10,-$10, $D, 0, $69, -1,-$10, 0, $D; 30 dc.b 0, $69, -1,-$10, $10, $D, 0, $69, -1,-$10; 40 dc.b $20, $D, 0,-$7D, -1,-$10; 50 byte_31FB2C: dc.b 0, 8,-$18, 5, 0, $5D, -1,-$20,-$18, 5; 0 ; ... dc.b 8, $5D, 0, $10,-$18, 5, 0, $61, -1,-$10; 10 dc.b -$18, 5, 0, $65, 0, 0, -8, 5, 0, $69; 20 dc.b -1,-$10, -8, 5, 0, $6D, 0, 0, 8, 5; 30 dc.b 0,-$7D, -1,-$10, 8, 5, 0,-$79, 0, 0; 40 byte_31FB5E: dc.b 0, $A,-$1C, 5, 0, $5D, -1,-$20,-$1C, 5; 0 ; ... dc.b 8, $5D, 0, $10,-$1C, 5, 0, $61, -1,-$10; 10 dc.b -$1C, 5, 0, $65, 0, 0, -$C, 5, 0, $69; 20 dc.b -1,-$10, -$C, 5, 0, $6D, 0, 0, -4, 5; 30 dc.b 0, $69, -1,-$10, -4, 5, 0, $6D, 0, 0; 40 dc.b $C, 5, 0,-$7D, -1,-$10, $C, 5, 0,-$79; 50 dc.b 0, 0 ; 60 byte_31FB9C: dc.b 0, $A,-$20, 5, 0, $5D, -1,-$20,-$20, 5; 0 ; ... dc.b 8, $5D, 0, $10,-$20, 5, 0, $61, -1,-$10; 10 dc.b -$20, 5, 0, $65, 0, 0,-$10, 5, 0, $69; 20 dc.b -1,-$10,-$10, 5, 0, $6D, 0, 0, 0, 5; 30 dc.b 0, $69, -1,-$10, 0, 5, 0, $6D, 0, 0; 40 dc.b $10, 5, 0,-$7D, -1,-$10, $10, 5, 0,-$79; 50 dc.b 0, 0 ; 60 byte_31FBDA: dc.b 0, $C,-$24, 5, 0, $5D, -1,-$20,-$24, 5; 0 ; ... dc.b 8, $5D, 0, $10,-$24, 5, 0, $61, -1,-$10; 10 dc.b -$24, 5, 0, $65, 0, 0,-$14, 5, 0, $69; 20 dc.b -1,-$10,-$14, 5, 0, $6D, 0, 0, -4, 5; 30 dc.b 0, $69, -1,-$10, -4, 5, 0, $6D, 0, 0; 40 dc.b 4, 5, 0, $69, -1,-$10, 4, 5, 0, $6D; 50 dc.b 0, 0, $14, 5, 0,-$7D, -1,-$10, $14, 5; 60 dc.b 0,-$79, 0, 0 ; 70 byte_31FC24: dc.b 0, $C,-$28, 5, 0, $5D, -1,-$20,-$28, 5; 0 ; ... dc.b 8, $5D, 0, $10,-$28, 5, 0, $61, -1,-$10; 10 dc.b -$28, 5, 0, $65, 0, 0,-$18, 5, 0, $69; 20 dc.b -1,-$10,-$18, 5, 0, $6D, 0, 0, -8, 5; 30 dc.b 0, $69, -1,-$10, -8, 5, 0, $6D, 0, 0; 40 dc.b 8, 5, 0, $69, -1,-$10, 8, 5, 0, $6D; 50 dc.b 0, 0, $18, 5, 0,-$7D, -1,-$10, $18, 5; 60 dc.b 0,-$79, 0, 0 ; 70 byte_31FC6E: dc.b 0, $E,-$2C, 5, 0, $5D, -1,-$20,-$2C, 5; 0 ; ... dc.b 8, $5D, 0, $10,-$2C, 5, 0, $61, -1,-$10; 10 dc.b -$2C, 5, 0, $65, 0, 0,-$1C, 5, 0, $69; 20 dc.b -1,-$10,-$1C, 5, 0, $6D, 0, 0, -$C, 5; 30 dc.b 0, $69, -1,-$10, -$C, 5, 0, $6D, 0, 0; 40 dc.b 4, 5, 0, $69, -1,-$10, 4, 5, 0, $6D; 50 dc.b 0, 0, $C, 5, 0, $69, -1,-$10, $C, 5; 60 dc.b 0, $6D, 0, 0, $1C, 5, 0,-$7D, -1,-$10; 70 dc.b $1C, 5, 0,-$79, 0, 0; 80 byte_31FCC4: dc.b 0, $E,-$30, 5, 0, $5D, -1,-$20,-$30, 5; 0 ; ... dc.b 8, $5D, 0, $10,-$30, 5, 0, $61, -1,-$10; 10 dc.b -$30, 5, 0, $65, 0, 0,-$20, 5, 0, $69; 20 dc.b -1,-$10,-$20, 5, 0, $6D, 0, 0,-$10, 5; 30 dc.b 0, $69, -1,-$10,-$10, 5, 0, $6D, 0, 0; 40 dc.b 0, 5, 0, $69, -1,-$10, 0, 5, 0, $6D; 50 dc.b 0, 0, $10, 5, 0, $69, -1,-$10, $10, 5; 60 dc.b 0, $6D, 0, 0, $20, 5, 0,-$7D, -1,-$10; 70 dc.b $20, 5, 0,-$79, 0, 0; 80 ; --------------------------------------------------------------------------- ; -------------------------------------------------------------------------- ; Object 2C - Sprite that makes leaves fall off it when you hit it (ARZ) ; -------------------------------------------------------------------------- Obj2C: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31FD28(pc,d0.w),d1 jmp off_31FD28(pc,d1.w) ; --------------------------------------------------------------------------- off_31FD28: dc.w loc_31FD32-off_31FD28,loc_31FD68-off_31FD28,loc_31FEB0-off_31FD28; 0 ; ... unk_31FD2E: dc.b $D6 ; Ö dc.b $D4 ; Ô dc.b $D5 ; Õ dc.b 0 ; --------------------------------------------------------------------------- loc_31FD32: ; ... addq.b #2,$24(a0) moveq #0,d0 move.b $28(a0),d0 move.b unk_31FD2E(pc,d0.w),$20(a0) move.l #Map_Obj31_0,4(a0) move.w #$8680,2(a0) move.b #$84,1(a0) move.b #$80,$19(a0) move.b #4,$18(a0) move.b $28(a0),$1A(a0) loc_31FD68: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w j_DeleteObject_6 move.b $21(a0),d0 beq.s loc_31FDD8 move.w $2E(a0),d0 beq.s loc_31FD92 add.b ($FFFFFE05).w,d0 and.w #$F,d0 bne.s loc_31FDAE loc_31FD92: ; ... lea ($FFFFB000).w,a2 bclr #0,$21(a0) beq.s loc_31FDD2 bsr.s sub_31FDDE tst.w $2E(a0) bne.s loc_31FDD2 move.w ($FFFFFE04).w,$2E(a0) bra.s loc_31FDD2 ; --------------------------------------------------------------------------- loc_31FDAE: ; ... add.w #8,d0 and.w #$F,d0 bne.s loc_31FDD2 lea ($FFFFB040).w,a2 bclr #1,$21(a0) beq.s loc_31FDD2 bsr.s sub_31FDDE tst.w $2E(a0) bne.s loc_31FDD2 move.w ($FFFFFE04).w,$2E(a0) loc_31FDD2: ; ... clr.b $21(a0) rts ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_31FDDE loc_31FDD8: ; ... clr.w $2E(a0) rts ; END OF FUNCTION CHUNK FOR sub_31FDDE ; =============== S U B R O U T I N E ======================================= sub_31FDDE: ; ... ; FUNCTION CHUNK AT 0031FDD8 SIZE 00000006 BYTES move.w $10(a2),d0 bpl.s loc_31FDE6 neg.w d0 loc_31FDE6: ; ... cmp.w #$200,d0 bcc.s loc_31FDFA move.w $12(a2),d0 bpl.s loc_31FDF4 neg.w d0 loc_31FDF4: ; ... cmp.w #$200,d0 bcs.s loc_31FDD8 loc_31FDFA: ; ... lea (word_31FEA0).l,a3 moveq #3,d6 loc_31FE02: ; ... jsr SingleObjLoad bne.w loc_31FE92 move.b #$2C,0(a1) move.b #4,$24(a1) move.w 8(a2),8(a1) move.w $C(a2),$C(a1) jsr RandomNumber and.w #$F,d0 subq.w #8,d0 add.w d0,8(a1) swap d0 and.w #$F,d0 subq.w #8,d0 add.w d0,$C(a1) move.w (a3)+,$10(a1) move.w (a3)+,$12(a1) btst #0,$22(a2) beq.s loc_31FE54 neg.w $10(a1) loc_31FE54: ; ... move.w 8(a1),$30(a1) move.w $C(a1),$34(a1) and.b #1,d0 move.b d0,$1A(a1) move.l #Map_Obj2C,4(a1) move.w #$E410,2(a1) move.b #$84,1(a1) move.b #8,$19(a1) move.b #1,$18(a1) move.b #4,$38(a1) move.b d1,$26(a0) loc_31FE92: ; ... dbf d6,loc_31FE02 move.w #$E5,d0 jmp PlaySound ; End of function sub_31FDDE ; --------------------------------------------------------------------------- word_31FEA0: dc.w -$80, -$80, $C0, -$40, -$C0, $40, $80; 0 ; ... dc.w $80 ; 7 ; --------------------------------------------------------------------------- loc_31FEB0: ; ... move.b $38(a0),d0 add.b d0,$26(a0) add.b ($FFFFFE0F).w,d0 and.w #$1F,d0 bne.s loc_31FECE add.b d7,d0 and.b #1,d0 beq.s loc_31FECE neg.b $38(a0) loc_31FECE: ; ... move.l $30(a0),d2 move.l $34(a0),d3 move.w $10(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,$30(a0) move.l d3,$34(a0) swap d2 and.w #3,d3 addq.w #4,d3 add.w d3,$12(a0) move.b $26(a0),d0 jsr CalcSine asr.w #6,d0 add.w $30(a0),d0 move.w d0,8(a0) asr.w #6,d1 add.w $34(a0),d1 move.w d1,$C(a0) subq.b #1,$1E(a0) bpl.s loc_31FF2E move.b #$B,$1E(a0) bchg #1,$1A(a0) loc_31FF2E: ; ... tst.b 1(a0) bpl.w j_DeleteObject_6 jmp DisplaySprite ; --------------------------------------------------------------------------- j_DeleteObject_6: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Map_Obj2C: dc.w byte_31FF4A-Map_Obj2C,byte_31FF52-Map_Obj2C,byte_31FF5A-Map_Obj2C; 0 ; ... dc.w byte_31FF62-Map_Obj2C ; 3 byte_31FF4A: dc.b 0, 1, -4, 0, 0, 0, -1, -4; 0 ; ... byte_31FF52: dc.b 0, 1, -4, 4, 0, 1, -1, -8; 0 ; ... byte_31FF5A: dc.b 0, 1, -4, 4, 0, 3, -1, -8; 0 ; ... byte_31FF62: dc.b 0, 1, -4, 4, 0, 5, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- ; -------------------------------------------------------- ; Object 40 - Pressure springboard (ARZ, MCZ, CPZ) ; -------------------------------------------------------- Obj40: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_31FF7E(pc,d0.w),d1 jsr off_31FF7E(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_31FF7E: dc.w loc_31FF88-off_31FF7E,loc_31FFC6-off_31FF7E; 0 ; ... word_31FF82: dc.w $FC00 dc.w $F600 dc.w $F800 ; --------------------------------------------------------------------------- loc_31FF88: ; ... addq.b #2,$24(a0) move.l #Map_Obj40,4(a0) move.w #$440,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$1C,$19(a0) move.b #4,$18(a0) bset #7,$22(a0) move.b $28(a0),d0 and.w #2,d0 move.w word_31FF82(pc,d0.w),$30(a0) loc_31FFC6: ; ... lea (Ani_Obj40).l,a1 loc_31FFCC: jsr AnimateSprite move.w #$27,d1 move.w #8,d2 move.w 8(a0),d4 lea byte_32019C(pc),a2 tst.b $1A(a0) beq.s loc_31FFEC lea byte_3201C4(pc),a2 loc_31FFEC: ; ... lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) jsr loc_314C4C btst #3,$22(a0) beq.s loc_320006 bsr.s sub_320022 loc_320006: ; ... movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 moveq #4,d6 jsr loc_314C4C btst #4,$22(a0) beq.s return_320020 bsr.s sub_320022 return_320020: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_320022: ; ... btst #0,$22(a0) bne.s loc_32003A move.w 8(a0),d0 sub.w #$10,d0 cmp.w 8(a1),d0 bcs.s loc_32004A rts ; --------------------------------------------------------------------------- loc_32003A: ; ... move.w 8(a0),d0 add.w #$10,d0 cmp.w 8(a1),d0 bcc.s loc_32004A rts ; --------------------------------------------------------------------------- loc_32004A: ; ... cmp.b #1,$1C(a0) beq.s loc_32005A move.w #$100,$1C(a0) rts ; --------------------------------------------------------------------------- loc_32005A: ; ... tst.b $1A(a0) beq.s loc_320062 rts ; --------------------------------------------------------------------------- loc_320062: ; ... move.w 8(a0),d0 sub.w #$1C,d0 sub.w 8(a1),d0 neg.w d0 btst #0,$22(a0) beq.s loc_32007E not.w d0 add.w #$27,d0 loc_32007E: ; ... tst.w d0 bpl.s loc_320084 moveq #0,d0 loc_320084: ; ... lea (byte_320154).l,a3 move.b (a3,d0.w),d0 move.w #-$400,$12(a1) sub.b d0,$12(a1) bset #0,$22(a1) btst #0,$22(a0) bne.s loc_3200AE bclr #0,$22(a1) neg.b d0 loc_3200AE: ; ... move.w $10(a1),d1 bpl.s loc_3200B6 neg.w d1 loc_3200B6: ; ... cmp.w #$400,d1 bcs.s loc_3200C0 sub.b d0,$10(a1) loc_3200C0: ; ... bset #1,$22(a1) bclr #3,$22(a1) move.b #$10,$1C(a1) move.b #2,$24(a1) move.b #0,$39(a1) move.b $28(a0),d0 btst #0,d0 beq.s loc_320122 move.w #1,$14(a1) move.b #1,$27(a1) move.b #0,$1C(a1) move.b #1,$2C(a1) move.b #8,$2D(a1) btst #1,d0 bne.s loc_320112 move.b #3,$2C(a1) loc_320112: ; ... btst #0,$22(a1) beq.s loc_320122 neg.b $27(a1) neg.w $14(a1) loc_320122: ; ... and.b #$C,d0 cmp.b #4,d0 bne.s loc_320138 move.b #$C,$3E(a1) move.b #$D,$3F(a1) loc_320138: ; ... cmp.b #8,d0 bne.s loc_32014A move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_32014A: ; ... move.w #$CC,d0 jmp PlaySound ; End of function sub_320022 ; --------------------------------------------------------------------------- byte_320154: dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 0 ; ... dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 10 dc.b 0, 0, 0, 0, 1, 1, 1, 1, 1, 1; 20 dc.b 1, 1, 1, 1, 1, 1, 1, 1, 1, 1; 30 dc.b 2, 2 ; 40 dc.b 2, 2, 2, 2, 2, 2, 3, 3, 3, 3; 0 dc.b 3, 3, 4, 4, 0, 0, 0, 0, 0, 0; 10 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 20 byte_32019C: dc.b 8, 8, 8, 8, 8, 8, 8, 9, $A, $B; 0 ; ... dc.b $C, $D, $E, $F, $10, $10, $11, $12, $13, $14; 10 dc.b $14, $15, $15, $16, $17, $18, $18, $18, $18, $18; 20 dc.b $18, $18, $18, $18, $18, $18, $18, $18, $18, $18; 30 byte_3201C4: dc.b 8, 8, 8, 8, 8, 8, 8, 9, $A, $B; 0 ; ... dc.b $C, $C, $C, $C, $D, $D, $D, $D, $D, $D; 10 dc.b $E, $E, $F, $F, $10, $10, $10, $10, $F, $F; 20 byte_3201E2: dc.b $E, $E, $D, $D, $D, $D, $D, $D, $D, $D; 0 ; ... Ani_Obj40: dc.w byte_3201F0-Ani_Obj40,byte_3201F3-Ani_Obj40; 0 ; ... byte_3201F0: dc.b $F, 0, -1 ; 0 ; ... byte_3201F3: dc.b 3, 1, 0, -3, 0 ; 0 ; ... Map_Obj40: dc.w byte_3201FC-Map_Obj40,byte_32020A-Map_Obj40; 0 ; ... byte_3201FC: dc.b 0, 2,-$18, 9, 0, 0, -1,-$1C,-$18, $D; 0 ; ... dc.b 0, 6, -1, -4 ; 10 byte_32020A: dc.b 0, 2,-$18, 9, 0, $E, -1,-$1C,-$18, $D; 0 ; ... dc.b 0, $14, -1, -4 ; 10 ; --------------------------------------------------------------------------- ; ---------------------------------------------------- ; Object 42 - Steam spring (Metropolis) ; ---------------------------------------------------- Obj42: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_320226(pc,d0.w),d1 jmp off_320226(pc,d1.w) ; --------------------------------------------------------------------------- off_320226: dc.w loc_32022C-off_320226,loc_32026E-off_320226,loc_320428-off_320226; 0 ; ... ; --------------------------------------------------------------------------- loc_32022C: ; ... addq.b #2,$24(a0) move.l #Map_Obj42,4(a0) move.w #$6000,2(a0) or.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) jsr Adjust2PArtPointer2_Useless move.b #7,$1A(a0) move.w $C(a0),$34(a0) move.w #$10,$36(a0) add.w #$10,$C(a0) loc_32026E: ; ... move.w #$1B,d1 move.w #$10,d2 move.w #$10,d3 move.w 8(a0),d4 lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) jsr loc_314C04 btst #3,$22(a0) beq.s loc_32029A bsr.w sub_32037C loc_32029A: ; ... movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 moveq #4,d6 jsr loc_314C04 btst #4,$22(a0) beq.s loc_3202B6 bsr.w sub_32037C loc_3202B6: ; ... move.b $25(a0),d0 bne.s loc_3202CE subq.w #1,$32(a0) bpl.s loc_320332 move.w #$3B,$32(a0) addq.b #2,$25(a0) bra.s loc_320332 ; --------------------------------------------------------------------------- loc_3202CE: ; ... subq.b #2,d0 bne.s loc_320300 subq.w #8,$36(a0) bne.s loc_3202F2 addq.b #2,$25(a0) bsr.s sub_320338 add.w #$28,8(a1) bsr.s sub_320338 sub.w #$28,8(a1) bset #0,1(a1) loc_3202F2: ; ... move.w $36(a0),d0 add.w $34(a0),d0 move.w d0,$C(a0) bra.s loc_320332 ; --------------------------------------------------------------------------- loc_320300: ; ... subq.b #2,d0 bne.s loc_320316 subq.w #1,$32(a0) bpl.s loc_320332 move.w #$3B,$32(a0) addq.b #2,$25(a0) bra.s loc_320332 ; --------------------------------------------------------------------------- loc_320316: ; ... addq.w #8,$36(a0) cmp.w #$10,$36(a0) bne.s loc_320326 clr.b $25(a0) loc_320326: ; ... move.w $36(a0),d0 add.w $34(a0),d0 move.w d0,$C(a0) loc_320332: ; ... jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_320338: ; ... jsr SingleObjLoad bne.s return_32037A move.b 0(a0),0(a1) addq.b #4,$24(a1) move.w 8(a0),8(a1) move.w $34(a0),$C(a1) move.b #7,$1E(a1) move.l 4(a0),4(a1) move.w #$2405,2(a1) or.b #4,1(a1) move.b #$18,$19(a1) move.b #4,$18(a1) return_32037A: ; ... rts ; End of function sub_320338 ; =============== S U B R O U T I N E ======================================= sub_32037C: ; ... cmp.b #2,$25(a0) beq.s loc_320386 rts ; --------------------------------------------------------------------------- loc_320386: ; ... move.w #$F600,$12(a1) bset #1,$22(a1) bclr #3,$22(a1) move.b #$10,$1C(a1) move.b #2,$24(a1) move.b #0,$39(a1) move.b $28(a0),d0 bpl.s loc_3203B6 move.w #0,$10(a1) loc_3203B6: ; ... btst #0,d0 beq.s loc_3203F6 move.w #1,$14(a1) move.b #1,$27(a1) move.b #0,$1C(a1) move.b #0,$2C(a1) move.b #4,$2D(a1) btst #1,d0 bne.s loc_3203E6 move.b #1,$2C(a1) loc_3203E6: ; ... btst #0,$22(a1) beq.s loc_3203F6 neg.b $27(a1) neg.w $14(a1) loc_3203F6: ; ... and.b #$C,d0 cmp.b #4,d0 bne.s loc_32040C move.b #$C,$3E(a1) move.b #$D,$3F(a1) loc_32040C: ; ... cmp.b #8,d0 bne.s loc_32041E move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_32041E: ; ... move.w #$CC,d0 jmp PlaySound ; End of function sub_32037C ; --------------------------------------------------------------------------- loc_320428: ; ... subq.b #1,$1E(a0) bpl.s loc_320456 move.b #7,$1E(a0) move.b #0,$20(a0) addq.b #1,$1A(a0) cmp.b #3,$1A(a0) bne.s loc_32044C move.b #$A6,$20(a0) loc_32044C: ; ... cmp.b #7,$1A(a0) beq.w loc_32045C loc_320456: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32045C: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Map_Obj42: dc.w byte_320472-Map_Obj42,byte_32047A-Map_Obj42,byte_320482-Map_Obj42; 0 ; ... dc.w byte_32048A-Map_Obj42,byte_320498-Map_Obj42,byte_3204A6-Map_Obj42; 3 dc.w byte_3204BA-Map_Obj42,byte_3204C8-Map_Obj42; 6 byte_320472: dc.b 0, 1, -1, 0, 0, 0, -1,-$18; 0 ; ... byte_32047A: dc.b 0, 1, -1, 4, 0, 1, -1,-$18; 0 ; ... byte_320482: dc.b 0, 1, -4, 5, 0, 3, -1,-$14; 0 ; ... byte_32048A: dc.b 0, 2, -4, 5, 0, 7, -1, -8, -4, 5; 0 ; ... dc.b 0, 3, -1,-$10 ; 10 byte_320498: dc.b 0, 2, -4, 5, $10, 7, 0, 0, -4, 1; 0 ; ... dc.b $10, $B, -1, -8 ; 10 byte_3204A6: dc.b 0, 3, -4, 1, 0, $D, 0, $C, -4, 1; 0 ; ... dc.b 0, $B, 0, 4, -4, 1, $18, $D, -1, -4; 10 byte_3204BA: dc.b 0, 2, -4, 1, 0, $D, 0, $10, -4, 1; 0 ; ... dc.b $18, $D, 0, 8 ; 10 byte_3204C8: dc.b 0, 2,-$10, 7, 0, $15, -1,-$10,-$10, 7; 0 ; ... dc.b 0, $1D, 0, 0 ; 10 ; --------------------------------------------------------------------------- ; ----------------------------------------------- ; Object 64 - Twin stompers (Metropolis) ; ----------------------------------------------- Obj64: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3204E4(pc,d0.w),d1 jmp off_3204E4(pc,d1.w) ; --------------------------------------------------------------------------- off_3204E4: dc.w loc_3204F0-off_3204E4,loc_32055A-off_3204E4; 0 ; ... byte_3204E8: dc.b $40, $C, $40, 1, $10, $20, $40, 1; 0 ; --------------------------------------------------------------------------- loc_3204F0: ; ... addq.b #2,$24(a0) moveq #0,d0 move.b $28(a0),d0 lsr.w #2,d0 and.w #$1C,d0 lea byte_3204E8(pc,d0.w),a3 move.b (a3)+,$19(a0) move.b (a3)+,$2E(a0) lsr.w #2,d0 move.b d0,$1A(a0) bne.s loc_320520 move.b #$6C,$16(a0) bset #4,1(a0) loc_320520: ; ... move.l #Map_Obj64,4(a0) move.w #$2000,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #4,$18(a0) move.w 8(a0),$34(a0) move.w $C(a0),$30(a0) moveq #0,d0 move.b (a3)+,d0 move.w d0,$3C(a0) and.b #$F,$28(a0) loc_32055A: ; ... move.w 8(a0),-(sp) moveq #0,d0 move.b $28(a0),d0 add.w d0,d0 move.w off_3205AE(pc,d0.w),d1 jsr off_3205AE(pc,d1.w) move.w (sp)+,d4 tst.b 1(a0) bpl.s loc_320590 moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $2E(a0),d2 move.w d2,d3 addq.w #1,d3 jsr SolidObject loc_320590: ; ... move.w $34(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s loc_3205A8 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3205A8: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- off_3205AE: dc.w return_3205B2-off_3205AE,loc_3205B4-off_3205AE; 0 ; ... ; --------------------------------------------------------------------------- return_3205B2: ; ... rts ; --------------------------------------------------------------------------- loc_3205B4: ; ... tst.b $38(a0) bne.s loc_3205D8 tst.w $3A(a0) beq.s loc_3205C6 subq.w #8,$3A(a0) bra.s loc_3205F8 ; --------------------------------------------------------------------------- loc_3205C6: ; ... subq.w #1,$36(a0) bpl.s loc_3205F8 move.w #$5A,$36(a0) move.b #1,$38(a0) loc_3205D8: ; ... move.w $3A(a0),d0 cmp.w $3C(a0),d0 beq.s loc_3205E8 addq.w #8,$3A(a0) bra.s loc_3205F8 ; --------------------------------------------------------------------------- loc_3205E8: ; ... subq.w #1,$36(a0) bpl.s loc_3205F8 move.w #$5A,$36(a0) clr.b $38(a0) loc_3205F8: ; ... move.w $3A(a0),d0 btst #0,$22(a0) beq.s loc_32060A neg.w d0 add.w #$40,d0 loc_32060A: ; ... move.w $30(a0),d1 add.w d0,d1 move.w d1,$C(a0) rts ; --------------------------------------------------------------------------- Map_Obj64: dc.w byte_32061A-Map_Obj64,byte_320658-Map_Obj64; 0 ; ... byte_32061A: dc.b 0, $A, -$C, $E, 0, 1, -1,-$40, -$C, $E; 0 ; ... dc.b 8, 1, -1,-$20, -$C, $E, 0, 1, 0, 0; 10 dc.b -$C, $E, 8, 1, 0, $20, $C, 7, 0, $D; 20 dc.b -1,-$28, $2C, 7, 0, $D, -1,-$28, $4C, 7; 30 dc.b 0, $D, -1,-$28, $C, 7, 0, $D, 0, $18; 40 dc.b $2C, 7, 0, $D, 0, $18, $4C, 7, 0, $D; 50 dc.b 0, $18 ; 60 byte_320658: dc.b 0, 4,-$20, 7, 0, $57, -1,-$10,-$20, 7; 0 ; ... dc.b 8, $57, 0, 0, 0, 7, $10, $57, -1,-$10; 10 dc.b 0, 7, $18, $57, 0, 0; 20 ; --------------------------------------------------------------------------- ; ------------------------------------------------ ; Object 65 - Long moving platform (Metropolis) ; ------------------------------------------------ Obj65: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_320680(pc,d0.w),d1 jmp off_320680(pc,d1.w) ; --------------------------------------------------------------------------- off_320680: dc.w loc_320698-off_320680,loc_3207B2-off_320680,loc_320A3C-off_320680; 0 ; ... dc.w loc_320A5C-off_320680 ; 3 byte_320688: dc.b $40, $C,-$80, 1, $20, $C, $40, 3, $10, $10; 0 dc.b $20, 0, $40, $C,-$80, 7; 10 ; --------------------------------------------------------------------------- loc_320698: ; ... addq.b #2,$24(a0) move.l #Map_Obj65,4(a0) move.w #$6000,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #4,$18(a0) moveq #0,d0 move.b $28(a0),d0 lsr.w #2,d0 and.w #$1C,d0 lea byte_320688(pc,d0.w),a3 move.b (a3)+,$19(a0) move.b (a3)+,$16(a0) lsr.w #2,d0 move.b d0,$1A(a0) cmp.b #1,d0 bne.s loc_3206E6 bset #7,$22(a0) loc_3206E6: ; ... cmp.b #2,d0 bne.s loc_320702 addq.b #4,$24(a0) move.l #Map_Obj65_0,4(a0) move.w #$655F,2(a0) bra.w loc_320A5C ; --------------------------------------------------------------------------- loc_320702: ; ... move.w 8(a0),$34(a0) move.w $C(a0),$30(a0) moveq #0,d0 move.b (a3)+,d0 move.w d0,$3C(a0) moveq #0,d0 move.b $28(a0),d0 bpl.w loc_3207AC and.b #$F,d0 move.b d0,$3E(a0) move.b (a3),$28(a0) cmp.b #7,(a3) bne.s loc_320738 move.w $3C(a0),$3A(a0) loc_320738: ; ... jsr SingleObjLoad2 bne.s loc_32079A move.b 0(a0),0(a1) addq.b #4,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #-$4C,8(a1) add.w #$14,$C(a1) btst #0,$22(a0) bne.s loc_320776 sub.w #$FFE8,8(a1) bset #0,1(a1) loc_320776: ; ... move.l #Map_Obj65_0,4(a1) move.w #$655F,2(a1) or.b #4,1(a1) move.b #$10,$19(a1) move.b #4,$18(a1) move.l a0,$3C(a1) loc_32079A: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_3207AC bclr #7,2(a2,d0.w) loc_3207AC: ; ... and.b #$F,$28(a0) loc_3207B2: ; ... move.w 8(a0),$2E(a0) moveq #0,d0 move.b $28(a0),d0 add.w d0,d0 move.w off_320816(pc,d0.w),d1 jsr off_320816(pc,d1.w) move.w $2E(a0),d4 moveq #0,d1 move.b $19(a0),d1 add.w #5,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 jsr SolidObject move.w $34(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s loc_3207FE jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3207FE: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_320810 bclr #7,2(a2,d0.w) loc_320810: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- off_320816: dc.w return_320826-off_320816,loc_32083C-off_320816,loc_3208CC-off_320816; 0 ; ... dc.w loc_32092C-off_320816,loc_3209D4-off_320816,loc_3209E2-off_320816; 3 dc.w loc_320828-off_320816,loc_3208AC-off_320816; 6 ; --------------------------------------------------------------------------- return_320826: ; ... rts ; --------------------------------------------------------------------------- loc_320828: ; ... tst.b $38(a0) bne.s loc_32083A subq.w #1,$36(a0) bne.s loc_320868 move.b #1,$38(a0) loc_32083A: ; ... bra.s loc_32085A ; --------------------------------------------------------------------------- loc_32083C: ; ... tst.b $38(a0) bne.s loc_32085A lea ($FFFFF7E0).w,a2 moveq #0,d0 move.b $3E(a0),d0 btst #0,(a2,d0.w) beq.s loc_320868 move.b #1,$38(a0) loc_32085A: ; ... move.w $3C(a0),d0 cmp.w $3A(a0),d0 beq.s loc_32088A addq.w #2,$3A(a0) loc_320868: ; ... move.w $3A(a0),d0 btst #0,$22(a0) beq.s loc_32087A neg.w d0 add.w #$80,d0 loc_32087A: ; ... move.w $34(a0),d1 sub.w d0,d1 move.w d1,8(a0) move.w d1,$2E(a0) rts ; --------------------------------------------------------------------------- loc_32088A: ; ... addq.b #1,$28(a0) move.w #$B4,$36(a0) clr.b $38(a0) lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_320868 bset #0,2(a2,d0.w) bra.s loc_320868 ; --------------------------------------------------------------------------- loc_3208AC: ; ... tst.b $38(a0) bne.s loc_3208CA lea ($FFFFF7E0).w,a2 moveq #0,d0 move.b $3E(a0),d0 btst #0,(a2,d0.w) beq.s loc_3208E8 move.b #1,$38(a0) loc_3208CA: ; ... bra.s loc_3208DE ; --------------------------------------------------------------------------- loc_3208CC: ; ... tst.b $38(a0) bne.s loc_3208DE subq.w #1,$36(a0) bne.s loc_3208E8 move.b #1,$38(a0) loc_3208DE: ; ... tst.w $3A(a0) beq.s loc_32090A subq.w #2,$3A(a0) loc_3208E8: ; ... move.w $3A(a0),d0 btst #0,$22(a0) beq.s loc_3208FA neg.w d0 add.w #$80,d0 loc_3208FA: ; ... move.w $34(a0),d1 sub.w d0,d1 move.w d1,8(a0) move.w d1,$2E(a0) rts ; --------------------------------------------------------------------------- loc_32090A: ; ... subq.b #1,$28(a0) move.w #$B4,$36(a0) clr.b $38(a0) lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_3208E8 bclr #0,2(a2,d0.w) bra.s loc_3208E8 ; --------------------------------------------------------------------------- loc_32092C: ; ... move.w $34(a0),d4 move.w d4,d5 btst #0,$22(a0) bne.s loc_320944 sub.w #$20,d4 add.w #$60,d5 bra.s loc_32094C ; --------------------------------------------------------------------------- loc_320944: ; ... sub.w #$A0,d4 sub.w #$20,d5 loc_32094C: ; ... move.w $C(a0),d2 move.w d2,d3 sub.w #$10,d2 add.w #$40,d3 moveq #0,d1 move.w ($FFFFB008).w,d0 cmp.w d4,d0 bcs.s loc_320976 cmp.w d5,d0 bcc.s loc_320976 move.w ($FFFFB00C).w,d0 cmp.w d2,d0 bcs.s loc_320976 cmp.w d3,d0 bcc.s loc_320976 moveq #1,d1 loc_320976: ; ... move.w ($FFFFB048).w,d0 cmp.w d4,d0 bcs.s loc_320990 cmp.w d5,d0 bcc.s loc_320990 move.w ($FFFFB04C).w,d0 cmp.w d2,d0 bcs.s loc_320990 cmp.w d3,d0 bcc.s loc_320990 moveq #1,d1 loc_320990: ; ... tst.b d1 beq.s loc_3209A6 move.w $3C(a0),d0 cmp.w $3A(a0),d0 beq.s return_3209D2 add.w #$10,$3A(a0) bra.s loc_3209B2 ; --------------------------------------------------------------------------- loc_3209A6: ; ... tst.w $3A(a0) beq.s loc_3209B2 sub.w #$10,$3A(a0) loc_3209B2: ; ... move.w $3A(a0),d0 btst #0,$22(a0) beq.s loc_3209C4 neg.w d0 add.w #$40,d0 loc_3209C4: ; ... move.w $34(a0),d1 sub.w d0,d1 move.w d1,8(a0) move.w d1,$2E(a0) return_3209D2: ; ... rts ; --------------------------------------------------------------------------- loc_3209D4: ; ... btst #3,$22(a0) beq.s return_3209E0 addq.b #1,$28(a0) return_3209E0: ; ... rts ; --------------------------------------------------------------------------- loc_3209E2: ; ... tst.b $38(a0) bne.s loc_320A1C addq.w #2,8(a0) cmp.b #5,($FFFFFE10).w bne.s loc_320A0C cmp.w #$1CC0,8(a0) beq.s loc_320A04 cmp.w #$2940,8(a0) bne.s loc_320A2E loc_320A04: ; ... move.b #0,$28(a0) bra.s loc_320A2E ; --------------------------------------------------------------------------- loc_320A0C: ; ... cmp.w #$1BC0,8(a0) bne.s loc_320A2E move.b #1,$38(a0) bra.s loc_320A2E ; --------------------------------------------------------------------------- loc_320A1C: ; ... subq.w #2,8(a0) cmp.w #$1880,8(a0) bne.s loc_320A2E move.b #0,$38(a0) loc_320A2E: ; ... move.w 8(a0),$34(a0) move.w 8(a0),($FFFFF7B0).w rts ; --------------------------------------------------------------------------- loc_320A3C: ; ... move.l $3C(a0),a1 move.w $3A(a1),d0 loc_320A44: ; ... and.w #7,d0 move.b byte_320A54(pc,d0.w),$1A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- byte_320A54: dc.b 0, 0, 2, 2, 2, 1, 1, 1; 0 ; ... ; --------------------------------------------------------------------------- loc_320A5C: ; ... move.w ($FFFFF7B0).w,d0 bra.s loc_320A44 ; --------------------------------------------------------------------------- Map_Obj65: dc.w byte_320A6A-Map_Obj65,byte_320A84-Map_Obj65,byte_320A6A-Map_Obj65; 0 ; ... dc.w byte_320A6A-Map_Obj65 ; 3 byte_320A6A: dc.b 0, 4, -$C, $E, 0, $4B, -1,-$40, -$C, $E; 0 ; ... dc.b 0, $4B, -1,-$20, -$C, $E, 0, $4B, 0, 0; 10 dc.b -$C, $E, 0, $4B, 0, $20; 20 byte_320A84: dc.b 0, 2, -$C, $E, 0, $39, -1,-$20, -$C, $E; 0 ; ... dc.b 8, $39, 0, 0 ; 10 Map_Obj65_0: dc.w byte_320A98-Map_Obj65_0,byte_320AA6-Map_Obj65_0,byte_320AB4-Map_Obj65_0; 0 ; ... byte_320A98: dc.b 0, 2, -$C, 6, 0, 0, -1,-$10, -$C, 6; 0 ; ... dc.b 8, 0, 0, 0 ; 10 byte_320AA6: dc.b 0, 2, -$C, 6, 0, 6, -1,-$10, -$C, 6; 0 ; ... dc.b $18, 6, 0, 0 ; 10 byte_320AB4: dc.b 0, 2, -$C, 6, $10, 6, -1,-$10, -$C, 6; 0 ; ... dc.b 8, 6, 0, 0 ; 10 ; --------------------------------------------------------------------------- ; ------------------------------------------------------- ; Object 66 - Yellow spring walls (Metropolis) ; ------------------------------------------------------- Obj66: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_320AD0(pc,d0.w),d1 jmp off_320AD0(pc,d1.w) ; --------------------------------------------------------------------------- off_320AD0: dc.w loc_320AD4-off_320AD0,loc_320B1A-off_320AD0; 0 ; ... ; --------------------------------------------------------------------------- loc_320AD4: ; ... addq.b #2,$24(a0) move.l #Map_Obj66,4(a0) move.w #$8680,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #8,$19(a0) move.b #4,$18(a0) move.b #$40,$16(a0) move.b $28(a0),d0 lsr.b #4,d0 and.b #7,d0 move.b d0,$1A(a0) beq.s loc_320B1A move.b #$80,$16(a0) loc_320B1A: ; ... move.w #$13,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 move.w 8(a0),d4 lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) jsr loc_314C04 cmp.b #1,d4 bne.s loc_320B64 btst #1,$22(a1) beq.s loc_320B64 move.b $22(a0),d1 move.w 8(a0),d0 sub.w 8(a1),d0 bcs.s loc_320B5C eor.b #1,d1 loc_320B5C: ; ... and.b #1,d1 bne.s loc_320B64 bsr.s sub_320BB8 loc_320B64: ; ... movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 moveq #4,d6 jsr loc_314C04 cmp.b #1,d4 bne.s loc_320B9C btst #1,$22(a1) beq.s loc_320B9C move.b $22(a0),d1 move.w 8(a0),d0 sub.w 8(a1),d0 bcs.s loc_320B94 eor.b #1,d1 loc_320B94: ; ... and.b #1,d1 bne.s loc_320B9C bsr.s sub_320BB8 loc_320B9C: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_320BB2 rts ; --------------------------------------------------------------------------- loc_320BB2: ; ... jmp DeleteObject ; =============== S U B R O U T I N E ======================================= sub_320BB8: ; ... cmp.b #4,$24(a1) bcs.s loc_320BC2 rts ; --------------------------------------------------------------------------- loc_320BC2: ; ... move.w $30(a0),$10(a1) move.w #$F800,$10(a1) move.w #$F800,$12(a1) bset #0,$22(a1) btst #0,$22(a0) bne.s loc_320BEC bclr #0,$22(a1) neg.w $10(a1) loc_320BEC: ; ... move.w #$F,$2E(a1) move.w $10(a1),$14(a1) btst #2,$22(a1) bne.s loc_320C06 move.b #0,$1C(a1) loc_320C06: ; ... move.b $28(a0),d0 bpl.s loc_320C12 move.w #0,$12(a1) loc_320C12: ; ... btst #0,d0 beq.s loc_320C52 move.w #1,$14(a1) move.b #1,$27(a1) move.b #0,$1C(a1) move.b #1,$2C(a1) move.b #8,$2D(a1) btst #1,d0 bne.s loc_320C42 move.b #3,$2C(a1) loc_320C42: ; ... btst #0,$22(a1) beq.s loc_320C52 neg.b $27(a1) neg.w $14(a1) loc_320C52: ; ... and.b #$C,d0 cmp.b #4,d0 bne.s loc_320C68 move.b #$C,$3E(a1) move.b #$D,$3F(a1) loc_320C68: ; ... cmp.b #8,d0 bne.s loc_320C7A move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_320C7A: ; ... bclr #5,$22(a0) bclr #6,$22(a0) bclr #5,$22(a1) move.b #0,$21(a1) move.w #$CC,d0 jmp PlaySound ; End of function sub_320BB8 ; --------------------------------------------------------------------------- Map_Obj66: dc.w byte_320CA0-Map_Obj66,byte_320CAE-Map_Obj66; 0 ; ... byte_320CA0: dc.b 0, 2,-$40, 5, 0, $34, -1, -8, $30, 5; 0 ; ... dc.b 0, $34, -1, -8 ; 10 byte_320CAE: dc.b 0, 2,-$80, 5, 0, $34, -1, -8, $70, 5; 0 ; ... dc.b 0, $34, -1, -8 ; 10 ; --------------------------------------------------------------------------- ; ------------------------------------------------ ; Object 67 - Spin tube (Metropolis) ; ------------------------------------------------ Obj67: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_320CEE(pc,d0.w),d1 jsr off_320CEE(pc,d1.w) move.b $2C(a0),d0 add.b $36(a0),d0 beq.w loc_320CE8 lea (Ani_Obj67).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_320CE8: ; ... jmp MarkObjGone3 ; --------------------------------------------------------------------------- off_320CEE: dc.w loc_320CF2-off_320CEE,loc_320D16-off_320CEE; 0 ; ... ; --------------------------------------------------------------------------- loc_320CF2: ; ... addq.b #2,$24(a0) move.l #Map_Obj67,4(a0) move.w #$656B,2(a0) or.b #4,1(a0) move.b #$10,$19(a0) move.b #5,$18(a0) loc_320D16: ; ... lea ($FFFFB000).w,a1 lea $2C(a0),a4 bsr.s loc_320D28 lea ($FFFFB040).w,a1 lea $36(a0),a4 loc_320D28: ; ... moveq #0,d0 move.b (a4),d0 move.w off_320D34(pc,d0.w),d0 jmp off_320D34(pc,d0.w) ; --------------------------------------------------------------------------- off_320D34: dc.w loc_320D3A-off_320D34,loc_320DCA-off_320D34,loc_320DFE-off_320D34; 0 ; ... ; --------------------------------------------------------------------------- loc_320D3A: ; ... tst.w ($FFFFFE08).w bne.w return_320DC8 move.w 8(a1),d0 sub.w 8(a0),d0 addq.w #3,d0 btst #0,$22(a0) beq.s loc_320D58 add.w #$A,d0 loc_320D58: ; ... cmp.w #$10,d0 bcc.s return_320DC8 move.w $C(a1),d1 sub.w $C(a0),d1 add.w #$20,d1 cmp.w #$40,d1 bcc.s return_320DC8 tst.b $2A(a1) bne.s return_320DC8 addq.b #2,(a4) move.b #$81,$2A(a1) move.b #2,$1C(a1) move.w #$800,$14(a1) move.w #0,$10(a1) move.w #0,$12(a1) bclr #5,$22(a0) bclr #5,$22(a1) bset #1,$22(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) clr.b 1(a4) move.w #$BE,d0 jsr PlaySound move.w #$100,$1C(a0) return_320DC8: ; ... rts ; --------------------------------------------------------------------------- loc_320DCA: ; ... move.b 1(a4),d0 addq.b #2,1(a4) jsr CalcSine asr.w #5,d0 move.w $C(a0),d2 sub.w d0,d2 move.w d2,$C(a1) cmp.b #$80,1(a4) bne.s return_320DFC bsr.w sub_320E7A addq.b #2,(a4) move.w #$BC,d0 jsr PlaySound return_320DFC: ; ... rts ; --------------------------------------------------------------------------- loc_320DFE: ; ... subq.b #1,2(a4) bpl.s loc_320E32 move.l 6(a4),a2 move.w (a2)+,d4 move.w d4,8(a1) move.w (a2)+,d5 move.w d5,$C(a1) tst.b $28(a0) bpl.s loc_320E1C subq.w #8,a2 loc_320E1C: ; ... move.l a2,6(a4) subq.w #4,4(a4) beq.s loc_320E58 move.w (a2)+,d4 move.w (a2)+,d5 move.w #$1000,d2 bra.w loc_320EDE ; --------------------------------------------------------------------------- loc_320E32: ; ... move.l 8(a1),d2 move.l $C(a1),d3 move.w $10(a1),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a1),d0 ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,8(a1) move.l d3,$C(a1) rts ; --------------------------------------------------------------------------- loc_320E58: ; ... and.w #$7FF,$C(a1) clr.b (a4) clr.b $2A(a1) btst #4,$28(a0) bne.s return_320E78 move.w #0,$10(a1) move.w #0,$12(a1) return_320E78: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_320E7A: ; ... move.b $28(a0),d0 bpl.s loc_320EAE neg.b d0 and.w #$F,d0 add.w d0,d0 lea (off_320F5C).l,a2 add.w (a2,d0.w),a2 move.w (a2)+,d0 subq.w #4,d0 move.w d0,4(a4) lea (a2,d0.w),a2 move.w (a2)+,d4 move.w d4,8(a1) move.w (a2)+,d5 move.w d5,$C(a1) subq.w #8,a2 bra.s loc_320ED2 ; --------------------------------------------------------------------------- loc_320EAE: ; ... and.w #$F,d0 add.w d0,d0 lea (off_320F5C).l,a2 add.w (a2,d0.w),a2 move.w (a2)+,4(a4) subq.w #4,4(a4) move.w (a2)+,d4 move.w d4,8(a1) move.w (a2)+,d5 move.w d5,$C(a1) loc_320ED2: ; ... move.l a2,6(a4) move.w (a2)+,d4 move.w (a2)+,d5 move.w #$1000,d2 loc_320EDE: ; ... moveq #0,d0 move.w d2,d3 move.w d4,d0 sub.w 8(a1),d0 bge.s loc_320EEE neg.w d0 neg.w d2 loc_320EEE: ; ... moveq #0,d1 move.w d5,d1 sub.w $C(a1),d1 bge.s loc_320EFC neg.w d1 neg.w d3 loc_320EFC: ; ... cmp.w d0,d1 bcs.s loc_320F2E moveq #0,d1 move.w d5,d1 sub.w $C(a1),d1 swap d1 divs.w d3,d1 moveq #0,d0 move.w d4,d0 sub.w 8(a1),d0 beq.s loc_320F1A swap d0 divs.w d1,d0 loc_320F1A: ; ... move.w d0,$10(a1) move.w d3,$12(a1) tst.w d1 bpl.s loc_320F28 neg.w d1 loc_320F28: ; ... move.w d1,2(a4) rts ; --------------------------------------------------------------------------- loc_320F2E: ; ... moveq #0,d0 move.w d4,d0 sub.w 8(a1),d0 swap d0 divs.w d2,d0 moveq #0,d1 move.w d5,d1 sub.w $C(a1),d1 beq.s loc_320F48 swap d1 divs.w d0,d1 loc_320F48: ; ... move.w d1,$12(a1) move.w d2,$10(a1) tst.w d0 bpl.s loc_320F56 neg.w d0 loc_320F56: ; ... move.w d0,2(a4) rts ; End of function sub_320E7A ; --------------------------------------------------------------------------- off_320F5C: dc.w word_320F76-off_320F5C,word_320F90-off_320F5C,word_320F9A-off_320F5C; 0 ; ... dc.w word_320FB4-off_320F5C,word_320FBE-off_320F5C,word_320FC8-off_320F5C; 3 dc.w word_320FE2-off_320F5C,word_320FFC-off_320F5C,word_321016-off_320F5C; 6 dc.w word_321030-off_320F5C,word_32104A-off_320F5C,word_321064-off_320F5C; 9 dc.w word_32107E-off_320F5C ; 12 word_320F76: dc.w $18, $7A8, $270, $750, $270, $740, $280; 0 ; ... dc.w $740, $3E0, $750, $3F0, $7A8, $3F0; 7 word_320F90: dc.w 8, $C58, $5F0, $E28, $5F0; 0 ; ... word_320F9A: dc.w $18, $1828, $6B0, $17D0, $6B0, $17C0, $6C0; 0 ; ... dc.w $17C0, $7E0, $17B0, $7F0, $1758, $7F0; 7 word_320FB4: dc.w 8, $5D8, $370, $780, $370; 0 ; ... word_320FBE: dc.w 8, $5D8, $5F0, $700, $5F0; 0 ; ... word_320FC8: dc.w $18, $BD8, $1F0, $C30, $1F0, $C40, $1E0; 0 ; ... dc.w $C40, $C0, $C50, $B0, $CA8, $B0; 7 word_320FE2: dc.w $18, $1728, $330, $15D0, $330, $15C0, $320; 0 ; ... dc.w $15C0, $240, $15D0, $230, $1628, $230; 7 word_320FFC: dc.w $18, $6D8, $1F0, $730, $1F0, $740, $1E0; 0 ; ... dc.w $740, $100, $750, $F0, $7A8, $F0; 7 word_321016: dc.w $18, $7D8, $330, $828, $330, $840, $340; 0 ; ... dc.w $840, $458, $828, $470, $7D8, $470; 7 word_321030: dc.w $18, $FD8, $3B0, $1028, $3B0, $1040, $398; 0 ; ... dc.w $1040, $2C4, $1058, $2B0, $10A8, $2B0; 7 word_32104A: dc.w $18, $FD8, $4B0, $1028, $4B0, $1040, $4C0; 0 ; ... dc.w $1040, $5D8, $1058, $5F0, $10A8, $5F0; 7 word_321064: dc.w $18, $2058, $430, $20A8, $430, $20C0, $418; 0 ; ... dc.w $20C0, $2C0, $20D0, $2B0, $2128, $2B0; 7 word_32107E: dc.w $18, $2328, $5B0, $22D0, $5B0, $22C0, $5A0; 0 ; ... dc.w $22C0, $4C0, $22D0, $4B0, $2328, $4B0; 7 Ani_Obj67: dc.w byte_32109C-Ani_Obj67,byte_32109F-Ani_Obj67; 0 ; ... byte_32109C: dc.b $1F, 0, -1 ; 0 ; ... byte_32109F: dc.b 1, 1, 0, 0, 0, 0, 0, 1, 0, 0; 0 ; ... dc.b 0, 1, 0, 0, 1, 0, -2, 2, 0; 10 Map_Obj67: dc.w byte_3210B6-Map_Obj67,byte_3210B8-Map_Obj67; 0 ; ... byte_3210B6: dc.b 0, 0 ; 0 ; ... byte_3210B8: dc.b 0, 6,-$20, 5, 0, 0, -1,-$14,-$20, 5; 0 ; ... dc.b 0, 0, -1, -8,-$10, 5, 0, 0, -1,-$14; 10 dc.b -$10, 5, 0, 0, -1, -8, 0, 5, 0, 0; 20 dc.b -1,-$14, 0, 5, 0, 0, -1, -8; 30 ; --------------------------------------------------------------------------- ; ------------------------------------------------------------------------ ; Object 68 - Block with a spike that comes out sequentially (Metropolis) ; ------------------------------------------------------------------------ Obj68: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3210EC(pc,d0.w),d1 jmp off_3210EC(pc,d1.w) ; --------------------------------------------------------------------------- off_3210EC: dc.w loc_3210F2-off_3210EC,loc_321198-off_3210EC,loc_3211B4-off_3210EC; 0 ; ... ; --------------------------------------------------------------------------- loc_3210F2: ; ... addq.b #2,$24(a0) move.l #Map_Obj68,4(a0) move.w #$6414,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) jsr SingleObjLoad2 bne.s loc_321192 move.b 0(a0),0(a1) addq.b #4,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w 8(a1),$30(a1) move.w $C(a1),$32(a1) move.l 4(a0),4(a1) move.w #$241C,2(a1) or.b #4,1(a1) move.b #$10,$19(a1) move.b #4,$18(a1) move.w ($FFFFFE04).w,d0 lsr.w #6,d0 move.w d0,d1 and.w #1,d0 move.w d0,$36(a1) lsr.w #1,d1 add.b $28(a0),d1 and.w #3,d1 move.b d1,$25(a1) move.b d1,$1A(a1) lea (byte_3212A0).l,a2 move.b (a2,d1.w),$20(a1) loc_321192: ; ... move.b #4,$1A(a0) loc_321198: ; ... move.w #$1B,d1 move.w #$10,d2 move.w #$11,d3 move.w 8(a0),d4 jsr SolidObject jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3211B4: ; ... bsr.w sub_32121E moveq #0,d0 move.b $25(a0),d0 add.w d0,d0 move.w off_3211D2(pc,d0.w),d1 jsr off_3211D2(pc,d1.w) move.w $30(a0),d0 jmp MarkObjGone2 ; --------------------------------------------------------------------------- off_3211D2: dc.w loc_3211DA-off_3211D2,loc_3211EC-off_3211D2,loc_3211FC-off_3211D2; 0 ; ... dc.w loc_32120C-off_3211D2 ; 3 ; --------------------------------------------------------------------------- loc_3211DA: ; ... moveq #0,d0 move.b $34(a0),d0 neg.w d0 add.w $32(a0),d0 move.w d0,$C(a0) rts ; --------------------------------------------------------------------------- loc_3211EC: ; ... moveq #0,d0 move.b $34(a0),d0 add.w $30(a0),d0 move.w d0,8(a0) rts ; --------------------------------------------------------------------------- loc_3211FC: ; ... moveq #0,d0 move.b $34(a0),d0 add.w $32(a0),d0 move.w d0,$C(a0) rts ; --------------------------------------------------------------------------- loc_32120C: ; ... moveq #0,d0 move.b $34(a0),d0 neg.w d0 add.w $30(a0),d0 move.w d0,8(a0) rts ; =============== S U B R O U T I N E ======================================= sub_32121E: ; ... tst.w $38(a0) beq.s loc_321242 move.b ($FFFFFE05).w,d0 and.b #$3F,d0 bne.s return_32129E clr.w $38(a0) tst.b 1(a0) bpl.s loc_321242 move.w #$B6,d0 jsr PlaySound loc_321242: ; ... tst.w $36(a0) beq.s loc_32127E sub.w #$800,$34(a0) bcc.s return_32129E move.w #0,$34(a0) move.w #0,$36(a0) move.w #1,$38(a0) addq.b #1,$25(a0) and.b #3,$25(a0) moveq #0,d0 move.b $25(a0),d0 move.b d0,$1A(a0) move.b byte_3212A0(pc,d0.w),$20(a0) rts ; --------------------------------------------------------------------------- loc_32127E: ; ... add.w #$800,$34(a0) cmp.w #$2000,$34(a0) bcs.s return_32129E move.w #$2000,$34(a0) move.w #1,$36(a0) move.w #1,$38(a0) return_32129E: ; ... rts ; End of function sub_32121E ; --------------------------------------------------------------------------- byte_3212A0: dc.b $84 ; ... dc.b $A6 ; ¦ dc.b $84 ; „ dc.b $A6 ; ¦ Map_Obj68: dc.w byte_3212AE-Map_Obj68,byte_3212B6-Map_Obj68,byte_3212BE-Map_Obj68; 0 ; ... dc.w byte_3212C6-Map_Obj68,byte_3212CE-Map_Obj68; 3 byte_3212AE: dc.b 0, 1,-$10, 3, $10, 0, -1, -4; 0 ; ... byte_3212B6: dc.b 0, 1, -4, $C, 0, 4, -1,-$10; 0 ; ... byte_3212BE: dc.b 0, 1,-$10, 3, 0, 0, -1, -4; 0 ; ... byte_3212C6: dc.b 0, 1, -4, $C, 8, 4, -1,-$10; 0 ; ... byte_3212CE: dc.b 0, 2,-$10, 7, 0, 0, -1,-$10,-$10, 7; 0 ; ... dc.b 8, 0, 0, 0 ; 10 ; --------------------------------------------------------------------------- ; ------------------------------------------------------------ ; Object 6D - Floor Spike (Metropolis) ; ------------------------------------------------------------ Obj6D: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3212EA(pc,d0.w),d1 jmp off_3212EA(pc,d1.w) ; --------------------------------------------------------------------------- off_3212EA: dc.w loc_3212EE-off_3212EA,loc_32132A-off_3212EA; 0 ; ... ; --------------------------------------------------------------------------- loc_3212EE: ; ... addq.b #2,$24(a0) move.l #Map_Obj68,4(a0) move.w #$241C,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #4,$19(a0) move.b #4,$18(a0) move.w 8(a0),$30(a0) move.w $C(a0),$32(a0) move.b #$84,$20(a0) loc_32132A: ; ... bsr.w sub_321348 moveq #0,d0 move.b $34(a0),d0 neg.w d0 add.w $32(a0),d0 move.w d0,$C(a0) move.w $30(a0),d0 jmp MarkObjGone2 ; =============== S U B R O U T I N E ======================================= sub_321348: ; ... tst.w $3A(a0) beq.s loc_321354 subq.w #1,$3A(a0) rts ; --------------------------------------------------------------------------- loc_321354: ; ... tst.w $38(a0) beq.s loc_32136C move.b ($FFFFFE05).w,d0 sub.b $28(a0),d0 and.b #$7F,d0 bne.s return_3213AE clr.w $38(a0) loc_32136C: ; ... tst.w $36(a0) beq.s loc_32138E sub.w #$400,$34(a0) bcc.s return_3213AE move.w #0,$34(a0) move.w #0,$36(a0) move.w #1,$38(a0) rts ; --------------------------------------------------------------------------- loc_32138E: ; ... add.w #$400,$34(a0) cmp.w #$2000,$34(a0) bcs.s return_3213AE move.w #$2000,$34(a0) move.w #1,$36(a0) move.w #3,$3A(a0) return_3213AE: ; ... rts ; End of function sub_321348 ; --------------------------------------------------------------------------- ; ---------------------------------------------- ; Object 69 - Nut (Metropolis) ; ---------------------------------------------- Obj69: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3213BE(pc,d0.w),d1 jmp off_3213BE(pc,d1.w) ; --------------------------------------------------------------------------- off_3213BE: dc.w loc_3213C6-off_3213BE,loc_32140A-off_3213BE,loc_32152E-off_3213BE; 0 ; ... dc.w loc_321422-off_3213BE ; 3 ; --------------------------------------------------------------------------- loc_3213C6: ; ... addq.b #2,$24(a0) move.l #Map_Obj69,4(a0) move.w #$2500,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$20,$19(a0) move.b #$B,$16(a0) move.b #4,$18(a0) move.w $C(a0),$32(a0) move.b $28(a0),d0 and.w #$7F,d0 lsl.w #3,d0 move.w d0,$36(a0) loc_32140A: ; ... lea ($FFFFB000).w,a1 lea $38(a0),a4 moveq #3,d6 bsr.s loc_321444 lea ($FFFFB040).w,a1 lea $3C(a0),a4 moveq #4,d6 bsr.s loc_321444 loc_321422: ; ... and.w #$7FF,$C(a0) move.w #$2B,d1 move.w #$C,d2 move.w #$D,d3 move.w 8(a0),d4 jsr SolidObject jmp MarkObjGone ; --------------------------------------------------------------------------- loc_321444: ; ... btst d6,$22(a0) bne.s loc_32144C clr.b (a4) loc_32144C: ; ... moveq #0,d0 move.b (a4),d0 move.w off_321458(pc,d0.w),d0 jmp off_321458(pc,d0.w) ; --------------------------------------------------------------------------- off_321458: dc.w loc_32145E-off_321458,loc_32147E-off_321458,loc_3214A0-off_321458; 0 ; ... ; --------------------------------------------------------------------------- loc_32145E: ; ... btst d6,$22(a0) bne.s loc_321466 rts ; --------------------------------------------------------------------------- loc_321466: ; ... addq.b #2,(a4) move.b #0,1(a4) move.w 8(a0),d0 sub.w 8(a1),d0 bcc.s loc_32147E move.b #1,1(a4) loc_32147E: ; ... move.w 8(a1),d0 sub.w 8(a0),d0 tst.b 1(a4) beq.s loc_321490 add.w #$F,d0 loc_321490: ; ... cmp.w #$10,d0 bcc.s return_32149E move.w 8(a0),8(a1) addq.b #2,(a4) return_32149E: ; ... rts ; --------------------------------------------------------------------------- loc_3214A0: ; ... move.w 8(a1),d0 sub.w 8(a0),d0 bcc.s loc_321506 add.w d0,$34(a0) move.w 8(a0),8(a1) move.w $34(a0),d0 asr.w #3,d0 move.w d0,d1 asr.w #1,d0 and.w #3,d0 move.b d0,$1A(a0) neg.w d1 add.w $32(a0),d1 move.w d1,$C(a0) sub.w $32(a0),d1 move.w $36(a0),d0 cmp.w d0,d1 blt.s return_321504 move.w d0,d1 add.w $32(a0),d1 move.w d1,$C(a0) lsl.w #3,d0 neg.w d0 move.w d0,$34(a0) move.b #0,$1A(a0) tst.b $28(a0) bmi.s loc_3214FE clr.b (a4) rts ; --------------------------------------------------------------------------- loc_3214FE: ; ... move.b #4,$24(a0) return_321504: ; ... rts ; --------------------------------------------------------------------------- loc_321506: ; ... add.w d0,$34(a0) move.w 8(a0),8(a1) move.w $34(a0),d0 asr.w #3,d0 move.w d0,d1 asr.w #1,d0 and.w #3,d0 move.b d0,$1A(a0) neg.w d1 add.w $32(a0),d1 move.w d1,$C(a0) rts ; --------------------------------------------------------------------------- loc_32152E: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$38,$12(a0) jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.w loc_321558 add.w d1,$C(a0) and.w #$7FF,$C(a0) clr.w $12(a0) addq.b #2,$24(a0) loc_321558: ; ... bra.w loc_321422 ; --------------------------------------------------------------------------- Map_Obj69: dc.w byte_321564-Map_Obj69,byte_321572-Map_Obj69,byte_321586-Map_Obj69; 0 ; ... dc.w byte_32159A-Map_Obj69 ; 3 byte_321564: dc.b 0, 2, -$C, $E, 0, 0, -1,-$20, -$C, $E; 0 ; ... dc.b 0, $C, 0, 0 ; 10 byte_321572: dc.b 0, 3, -$C, $A, 0, 3, -1,-$20, -$C, $E; 0 ; ... dc.b 0, $C, -1, -8, -$C, 2, 8, 9, 0, $18; 10 byte_321586: dc.b 0, 3, -$C, 6, 0, $24, -1,-$20, -$C, $E; 0 ; ... dc.b 0, $2A, -1,-$10, -$C, 6, 0, $18, 0, $10; 10 byte_32159A: dc.b 0, 3, -$C, 2, 0, $27, -1,-$20, -$C, $E; 0 ; ... dc.b 0, $18, -1,-$18, -$C, $A, 8, $2D, 0, 8; 10 ; --------------------------------------------------------------------------- ; ------------------------------------------------------------------- ; Object 6A - Platform that moves when you walk off it (Metropolis) ; ------------------------------------------------------------------- Obj6A: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3215BC(pc,d0.w),d1 jmp off_3215BC(pc,d1.w) ; --------------------------------------------------------------------------- off_3215BC: dc.w loc_3215C2-off_3215BC,loc_3216E2-off_3215BC,loc_32176E-off_3215BC; 0 ; ... ; --------------------------------------------------------------------------- loc_3215C2: ; ... addq.b #2,$24(a0) move.l #Map_Obj65,4(a0) move.w #$6000,2(a0) or.b #4,1(a0) move.b #4,$18(a0) move.b #$20,$19(a0) move.b #$C,$16(a0) move.l #byte_3217E8,$2C(a0) move.b #1,$1A(a0) cmp.b #$B,($FFFFFE10).w bne.w loc_3216C6 addq.b #2,$24(a0) move.l #Map_Obj6A,4(a0) move.w #$63D4,2(a0) move.b #$20,$19(a0) move.b #$20,$16(a0) move.l #byte_321800,$2C(a0) btst #0,$22(a0) beq.s loc_32163A move.l #byte_32181E,$2C(a0) loc_32163A: ; ... move.b #0,$1A(a0) cmp.b #$18,$28(a0) bne.w loc_3216D2 jsr SingleObjLoad2 bne.s loc_32169E bsr.s sub_3216A0 add.w #$40,8(a1) add.w #$40,$C(a1) move.b #6,$28(a1) btst #0,$22(a0) beq.s loc_321674 move.b #$C,$28(a1) loc_321674: ; ... jsr SingleObjLoad2 bne.s loc_32169E bsr.s sub_3216A0 sub.w #$40,8(a1) add.w #$40,$C(a1) move.b #$C,$28(a1) btst #0,$22(a0) beq.s loc_32169E move.b #6,$28(a1) loc_32169E: ; ... bra.s loc_3216C6 ; =============== S U B R O U T I N E ======================================= sub_3216A0: ; ... move.b 0(a0),0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w 8(a0),$32(a1) move.w $C(a0),$30(a1) move.b $22(a0),$22(a1) rts ; End of function sub_3216A0 ; --------------------------------------------------------------------------- loc_3216C6: ; ... move.w 8(a0),$32(a0) move.w $C(a0),$30(a0) loc_3216D2: ; ... jsr Adjust2PArtPointer2_Useless move.b $28(a0),$38(a0) bra.w sub_3217AE ; --------------------------------------------------------------------------- loc_3216E2: ; ... move.w 8(a0),-(sp) tst.w $36(a0) bne.s loc_321732 move.b $3C(a0),d1 move.b $22(a0),d0 btst #3,d0 bne.s loc_32170E btst #3,d1 beq.s loc_321712 move.b #1,$36(a0) move.b #0,$3C(a0) bra.s loc_321742 ; --------------------------------------------------------------------------- loc_32170E: ; ... move.b d0,$3C(a0) loc_321712: ; ... btst #4,d0 bne.s loc_32172C btst #4,d1 beq.s loc_321742 move.b #1,$36(a0) move.b #0,$3C(a0) bra.s loc_321742 ; --------------------------------------------------------------------------- loc_32172C: ; ... move.b d0,$3C(a0) bra.s loc_321742 ; --------------------------------------------------------------------------- loc_321732: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 subq.w #1,$34(a0) bne.s loc_321742 bsr.w sub_3217AE loc_321742: ; ... move.w (sp)+,d4 tst.b 1(a0) bpl.s loc_321764 moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 jsr SolidObject loc_321764: ; ... move.w $32(a0),d0 jmp MarkObjGone2 ; --------------------------------------------------------------------------- loc_32176E: ; ... move.w 8(a0),-(sp) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 subq.w #1,$34(a0) bne.s loc_321782 bsr.w sub_3217AE loc_321782: ; ... move.w (sp)+,d4 tst.b 1(a0) bpl.s loc_3217A4 moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 jsr SolidObject loc_3217A4: ; ... move.w $32(a0),d0 jmp MarkObjGone2 ; =============== S U B R O U T I N E ======================================= sub_3217AE: ; ... moveq #0,d0 move.b $38(a0),d0 move.l $2C(a0),a1 lea (a1,d0.w),a1 move.w (a1)+,$10(a0) move.w (a1)+,$12(a0) move.w (a1)+,$34(a0) move.w #7,$3A(a0) move.b #0,$36(a0) addq.b #6,$38(a0) cmp.b #$18,$38(a0) bcs.s return_3217E6 move.b #0,$38(a0) return_3217E6: ; ... rts ; End of function sub_3217AE ; --------------------------------------------------------------------------- byte_3217E8: dc.b 0, 0, 4, 0, 0, $10, 4, 0, -2, 0; 0 ; ... dc.b 0, $20, 0, 0, 4, 0, 0, $10, -4, 0; 10 dc.b -2, 0, 0, $20 ; 20 byte_321800: dc.b 0, 0, 1, 0, 0, $40, -1, 0, 0, 0; 0 ; ... dc.b 0,-$80, 0, 0, -1, 0, 0, $40, 1, 0; 10 dc.b 0, 0, 0,-$80, 1, 0, 0, 0, 0, $40; 20 byte_32181E: dc.b 0, 0, 1, 0, 0, $40, 1, 0, 0, 0; 0 ; ... dc.b 0,-$80, 0, 0, -1, 0, 0, $40, -1, 0; 10 dc.b 0, 0, 0,-$80, -1, 0, 0, 0, 0, $40; 20 Map_Obj6A: dc.w byte_32183E-Map_Obj6A ; ... byte_32183E: dc.b 0, 4,-$20, $F, 0, 0, -1,-$20,-$20, $F; 0 ; ... dc.b 0, $10, 0, 0, 0, $F, $18, $10, -1,-$20; 10 dc.b 0, $F, $18, 0, 0, 0; 20 ; --------------------------------------------------------------------------- ; ----------------------------------------------------------- ; Object 6B - Immobile platform (Metropolis, CPZ) ; ----------------------------------------------------------- Obj6B: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_321866(pc,d0.w),d1 jmp off_321866(pc,d1.w) ; --------------------------------------------------------------------------- off_321866: dc.w loc_321872-off_321866,loc_3218FC-off_321866; 0 ; ... unk_32186A: dc.b $20 dc.b $C dc.b 1 dc.b 0 dc.b $10 dc.b $10 dc.b 0 dc.b 0 ; --------------------------------------------------------------------------- loc_321872: ; ... addq.b #2,$24(a0) move.l #Map_Obj65,4(a0) move.w #$6000,2(a0) cmp.b #$D,($FFFFFE10).w bne.s loc_32189A move.l #Map_Obj6B_CPZ,4(a0) move.w #$6418,2(a0) loc_32189A: ; ... jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #3,$18(a0) moveq #0,d0 move.b $28(a0),d0 lsr.w #2,d0 and.w #$1C,d0 lea unk_32186A(pc,d0.w),a2 move.b (a2)+,$19(a0) move.b (a2)+,$16(a0) move.b (a2)+,$1A(a0) move.w 8(a0),$34(a0) move.w $C(a0),$30(a0) move.b $22(a0),$2E(a0) moveq #0,d0 move.b $28(a0),d0 and.w #$F,d0 subq.w #8,d0 bcs.s loc_3218FC lsl.w #2,d0 lea ($FFFFFE8A).w,a2 lea (a2,d0.w),a2 tst.w (a2) bpl.s loc_3218FC bchg #0,$2E(a0) loc_3218FC: ; ... move.w 8(a0),-(sp) moveq #0,d0 move.b $28(a0),d0 and.w #$F,d0 add.w d0,d0 move.w off_321940(pc,d0.w),d1 jsr off_321940(pc,d1.w) move.w (sp)+,d4 tst.b 1(a0) bpl.s loc_321936 moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 jsr SolidObject loc_321936: ; ... move.w $34(a0),d0 jmp MarkObjGone2 ; --------------------------------------------------------------------------- off_321940: dc.w return_321958-off_321940,loc_32195A-off_321940,loc_321966-off_321940; 0 ; ... dc.w loc_321988-off_321940,loc_321994-off_321940,loc_3219B6-off_321940; 3 dc.w loc_3219D4-off_321940,loc_321A02-off_321940,loc_321A42-off_321940; 6 dc.w loc_321A54-off_321940,loc_321A64-off_321940,loc_321A74-off_321940; 9 ; --------------------------------------------------------------------------- return_321958: ; ... rts ; --------------------------------------------------------------------------- loc_32195A: ; ... move.w #$40,d1 moveq #0,d0 move.b ($FFFFFE68).w,d0 bra.s loc_321970 ; --------------------------------------------------------------------------- loc_321966: ; ... move.w #$80,d1 moveq #0,d0 move.b ($FFFFFE7C).w,d0 loc_321970: ; ... btst #0,$22(a0) beq.s loc_32197C neg.w d0 add.w d1,d0 loc_32197C: ; ... move.w $34(a0),d1 sub.w d0,d1 move.w d1,8(a0) rts ; --------------------------------------------------------------------------- loc_321988: ; ... move.w #$40,d1 moveq #0,d0 move.b ($FFFFFE68).w,d0 bra.s loc_32199E ; --------------------------------------------------------------------------- loc_321994: ; ... move.w #$80,d1 moveq #0,d0 move.b ($FFFFFE7C).w,d0 loc_32199E: ; ... btst #0,$22(a0) beq.s loc_3219AA neg.w d0 add.w d1,d0 loc_3219AA: ; ... move.w $30(a0),d1 sub.w d0,d1 move.w d1,$C(a0) rts ; --------------------------------------------------------------------------- loc_3219B6: ; ... move.b ($FFFFFE60).w,d0 lsr.w #1,d0 add.w $30(a0),d0 move.w d0,$C(a0) move.b $22(a0),d1 and.b #$18,d1 beq.s return_3219D2 addq.b #1,$28(a0) return_3219D2: ; ... rts ; --------------------------------------------------------------------------- loc_3219D4: ; ... move.l $C(a0),d3 move.w $12(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d3,$C(a0) add.w #8,$12(a0) move.w ($FFFFEECE).w,d0 add.w #$E0,d0 cmp.w $C(a0),d0 bcc.s return_321A00 move.b #0,$28(a0) return_321A00: ; ... rts ; --------------------------------------------------------------------------- loc_321A02: ; ... tst.b $38(a0) bne.s loc_321A18 move.b $22(a0),d0 and.b #$18,d0 beq.s return_321A40 move.b #8,$38(a0) loc_321A18: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 and.w #$7FF,$C(a0) cmp.w #$2A8,$12(a0) bne.s loc_321A30 neg.b $38(a0) loc_321A30: ; ... move.b $38(a0),d1 ext.w d1 add.w d1,$12(a0) bne.s return_321A40 clr.b $28(a0) return_321A40: ; ... rts ; --------------------------------------------------------------------------- loc_321A42: ; ... move.w #$10,d1 moveq #0,d0 move.b ($FFFFFE88).w,d0 lsr.w #1,d0 move.w ($FFFFFE8A).w,d3 bra.s loc_321A82 ; --------------------------------------------------------------------------- loc_321A54: ; ... move.w #$30,d1 moveq #0,d0 move.b ($FFFFFE8C).w,d0 move.w ($FFFFFE8E).w,d3 bra.s loc_321A82 ; --------------------------------------------------------------------------- loc_321A64: ; ... move.w #$50,d1 moveq #0,d0 move.b ($FFFFFE90).w,d0 move.w ($FFFFFE92).w,d3 bra.s loc_321A82 ; --------------------------------------------------------------------------- loc_321A74: ; ... move.w #$70,d1 moveq #0,d0 move.b ($FFFFFE94).w,d0 move.w ($FFFFFE96).w,d3 loc_321A82: ; ... tst.w d3 bne.s loc_321A90 addq.b #1,$2E(a0) and.b #3,$2E(a0) loc_321A90: ; ... move.b $2E(a0),d2 and.b #3,d2 bne.s loc_321AB0 sub.w d1,d0 add.w $34(a0),d0 move.w d0,8(a0) neg.w d1 add.w $30(a0),d1 move.w d1,$C(a0) rts ; --------------------------------------------------------------------------- loc_321AB0: ; ... subq.b #1,d2 bne.s loc_321ACE subq.w #1,d1 sub.w d1,d0 neg.w d0 add.w $30(a0),d0 move.w d0,$C(a0) addq.w #1,d1 add.w $34(a0),d1 move.w d1,8(a0) rts ; --------------------------------------------------------------------------- loc_321ACE: ; ... subq.b #1,d2 bne.s loc_321AEC subq.w #1,d1 sub.w d1,d0 neg.w d0 add.w $34(a0),d0 move.w d0,8(a0) addq.w #1,d1 add.w $30(a0),d1 move.w d1,$C(a0) rts ; --------------------------------------------------------------------------- loc_321AEC: ; ... sub.w d1,d0 add.w $30(a0),d0 move.w d0,$C(a0) neg.w d1 add.w $34(a0),d1 move.w d1,8(a0) rts ; --------------------------------------------------------------------------- Map_Obj6B_CPZ: dc.w byte_321B04-Map_Obj6B_CPZ ; ... byte_321B04: dc.b 0, 1,-$10, $F, 0, 0, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- ; --------------------------------------------------------- ; Object 6C - Small platform, going up and right (unused) ; --------------------------------------------------------- Obj6C: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_321B38(pc,d0.w),d1 jsr off_321B38(pc,d1.w) move.w $30(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s j_DeleteObject_7 jmp DisplaySprite ; --------------------------------------------------------------------------- j_DeleteObject_7: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- off_321B38: dc.w loc_321B3C-off_321B38,loc_321C48-off_321B38; 0 ; ... ; --------------------------------------------------------------------------- loc_321B3C: ; ... move.b $28(a0),d0 bmi.w loc_321BF0 addq.b #2,$24(a0) move.l #Map_Obj6C,4(a0) move.w #$63F9,2(a0) or.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) jsr Adjust2PArtPointer2_Useless move.b #0,$1A(a0) moveq #0,d0 move.b $28(a0),d0 move.w d0,d1 lsr.w #3,d0 and.w #$1E,d0 lea off_321D36(pc),a2 add.w (a2,d0.w),a2 move.w (a2)+,$38(a0) move.l a2,$3C(a0) and.w #$F,d1 lsl.w #2,d1 move.b d1,$38(a0) move.b #4,$3A(a0) btst #0,$22(a0) beq.s loc_321BD0 neg.b $3A(a0) moveq #0,d1 move.b $38(a0),d1 add.b $3A(a0),d1 cmp.b $39(a0),d1 bcs.s loc_321BCC move.b d1,d0 moveq #0,d1 tst.b d0 bpl.s loc_321BCC move.b $39(a0),d1 subq.b #4,d1 loc_321BCC: ; ... move.b d1,$38(a0) loc_321BD0: ; ... move.w (a2,d1.w),d0 add.w $30(a0),d0 move.w d0,$34(a0) move.w 2(a2,d1.w),d0 add.w $32(a0),d0 move.w d0,$36(a0) bsr.w sub_321CBE bra.w loc_321C48 ; --------------------------------------------------------------------------- loc_321BF0: ; ... and.w #$7F,d0 add.w d0,d0 lea (word_321DBA).l,a2 add.w (a2,d0.w),a2 move.w (a2)+,d1 move.l a0,a1 move.w 8(a0),d2 move.w $C(a0),d3 bra.s loc_321C16 ; --------------------------------------------------------------------------- loc_321C0E: ; ... jsr SingleObjLoad bne.s loc_321C40 loc_321C16: ; ... move.b #$6C,0(a1) move.w (a2)+,d0 add.w d2,d0 move.w d0,8(a1) move.w (a2)+,d0 add.w d3,d0 move.w d0,$C(a1) move.w d2,$30(a1) move.w d3,$32(a1) move.w (a2)+,d0 move.b d0,$28(a1) move.b $22(a0),$22(a1) loc_321C40: ; ... dbf d1,loc_321C0E addq.l #4,sp rts ; --------------------------------------------------------------------------- loc_321C48: ; ... move.w 8(a0),-(sp) bsr.w sub_321C60 moveq #0,d1 move.b $19(a0),d1 moveq #8,d3 move.w (sp)+,d4 jmp PlatformObject ; =============== S U B R O U T I N E ======================================= sub_321C60: ; ... move.w 8(a0),d0 cmp.w $34(a0),d0 bne.s loc_321CB6 move.w $C(a0),d0 cmp.w $36(a0),d0 bne.s loc_321CB6 moveq #0,d1 move.b $38(a0),d1 add.b $3A(a0),d1 cmp.b $39(a0),d1 bcs.s loc_321C92 move.b d1,d0 moveq #0,d1 tst.b d0 bpl.s loc_321C92 move.b $39(a0),d1 subq.b #4,d1 loc_321C92: ; ... move.b d1,$38(a0) move.l $3C(a0),a1 move.w (a1,d1.w),d0 add.w $30(a0),d0 move.w d0,$34(a0) move.w 2(a1,d1.w),d0 add.w $32(a0),d0 move.w d0,$36(a0) bsr.w sub_321CBE loc_321CB6: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 rts ; End of function sub_321C60 ; =============== S U B R O U T I N E ======================================= sub_321CBE: ; ... moveq #0,d0 move.w #$FF00,d2 move.w 8(a0),d0 sub.w $34(a0),d0 bcc.s loc_321CD2 neg.w d0 neg.w d2 loc_321CD2: ; ... moveq #0,d1 move.w #$FF00,d3 move.w $C(a0),d1 sub.w $36(a0),d1 bcc.s loc_321CE6 neg.w d1 neg.w d3 loc_321CE6: ; ... cmp.w d0,d1 bcs.s loc_321D10 move.w 8(a0),d0 sub.w $34(a0),d0 beq.s loc_321CFC ext.l d0 asl.l #8,d0 divs.w d1,d0 neg.w d0 loc_321CFC: ; ... move.w d0,$10(a0) move.w d3,$12(a0) swap d0 move.w d0,$A(a0) clr.w $E(a0) rts ; --------------------------------------------------------------------------- loc_321D10: ; ... move.w $C(a0),d1 sub.w $36(a0),d1 beq.s loc_321D22 ext.l d1 asl.l #8,d1 divs.w d0,d1 neg.w d1 loc_321D22: ; ... move.w d1,$12(a0) move.w d2,$10(a0) swap d1 move.w d1,$E(a0) clr.w $A(a0) rts ; End of function sub_321CBE ; --------------------------------------------------------------------------- off_321D36: dc.w word_321D3C-off_321D36,word_321D66-off_321D36,word_321D90-off_321D36; 0 ; ... word_321D3C: dc.w $28, 0, 0, -$16, $A, -$20, $20; 0 ; ... dc.w -$20, $E0, -$16, $F6, 0, $100, $16; 7 dc.w $F6, $20, $E0, $20, $20, $16, $A; 14 word_321D66: dc.w $28, 0, 0, -$16, $A, -$20, $20; 0 ; ... dc.w -$20, $160, -$16, $176, 0, $180, $16; 7 dc.w $176, $20, $160, $20, $20, $16, $A; 14 word_321D90: dc.w $28, 0, 0, -$16, $A, -$20, $20; 0 ; ... dc.w -$20, $1E0, -$16, $1F6, 0, $200, $16; 7 dc.w $1F6, $20, $1E0, $20, $20, $16, $A; 14 word_321DBA: dc.w 6, $38, $6A, 7, 0, 0, 1; 0 ; ... dc.w -$20, $3A, 3, -$20, $80, 3, -$20; 7 dc.w $C6, 3, 0, $100, 6, $20, $C6; 14 dc.w 8, $20, $80, 8, $20, $3A, 8; 21 dc.w 7, 0, 0, $11, -$20, $5A, $13; 28 dc.w -$20, $C0, $13, -$20, $126, $13, 0; 35 dc.w $180, $16, $20, $126, $18, $20, $C0; 42 dc.w $18, $20, $5A, $18, 7, 0, 0; 49 dc.w $21, -$20, $7A, $23, -$20, $100, $23; 56 dc.w -$20, $186, $23, 0, $200, $26, $20; 63 dc.w $186, $28, $20, $100, $28, $20, $7A; 70 dc.w $28 ; 77 Map_Obj6C: dc.w byte_321E58-Map_Obj6C ; ... byte_321E58: dc.b 0, 2, -8, 5, 0, 0, -1,-$10, -8, 5; 0 ; ... dc.b 8, 0, 0, 0 ; 10 ; --------------------------------------------------------------------------- ; -------------------------------------------------------- ; Obj6E - Small platform, moving in a circle (unused) ; (Possibly left over from Star Light Zone in S1) ; -------------------------------------------------------- Obj6E: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_321E74(pc,d0.w),d1 jmp off_321E74(pc,d1.w) ; --------------------------------------------------------------------------- off_321E74: dc.w loc_321E82-off_321E74,loc_321EF0-off_321E74,loc_321F7C-off_321E74; 0 ; ... unk_321E7A: dc.b $10 dc.b $C dc.b $28 ; ( dc.b 8 dc.b $60 ; ` dc.b $18 dc.b $C dc.b $C ; --------------------------------------------------------------------------- loc_321E82: ; ... addq.b #2,$24(a0) move.l #Map_Obj6E,4(a0) move.w #$6000,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #4,$18(a0) moveq #0,d0 move.b $28(a0),d0 lsr.w #3,d0 and.w #$E,d0 lea unk_321E7A(pc,d0.w),a3 move.b (a3)+,$19(a0) move.b (a3)+,$16(a0) lsr.w #1,d0 move.b d0,$1A(a0) move.w 8(a0),$34(a0) move.w $C(a0),$30(a0) cmp.b #3,d0 bne.s loc_321EF0 addq.b #2,$24(a0) move.w #$63F0,2(a0) jsr Adjust2PArtPointer2_Useless move.b #5,$18(a0) bra.w loc_321F7C ; --------------------------------------------------------------------------- loc_321EF0: ; ... move.w 8(a0),-(sp) move.b ($FFFFFE80).w,d1 sub.b #$38,d1 ext.w d1 move.b ($FFFFFE84).w,d2 sub.b #$38,d2 ext.w d2 btst #0,$28(a0) beq.s loc_321F14 neg.w d1 neg.w d2 loc_321F14: ; ... btst #1,$28(a0) beq.s loc_321F20 neg.w d1 exg d1,d2 loc_321F20: ; ... add.w $34(a0),d1 move.w d1,8(a0) add.w $30(a0),d2 move.w d2,$C(a0) move.w (sp)+,d4 moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 jsr SolidObject move.w $34(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s loc_321F64 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_321F64: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_321F76 bclr #7,2(a2,d0.w) loc_321F76: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_321F7C: ; ... move.b ($FFFFFE80).w,d1 lsr.b #1,d1 sub.b #$1C,d1 ext.w d1 move.b ($FFFFFE84).w,d2 lsr.b #1,d2 sub.b #$1C,d2 ext.w d2 btst #0,$28(a0) beq.s loc_321FA0 neg.w d1 neg.w d2 loc_321FA0: ; ... btst #1,$28(a0) beq.s loc_321FAC neg.w d1 exg d1,d2 loc_321FAC: ; ... add.w $34(a0),d1 move.w d1,8(a0) add.w $30(a0),d2 move.w d2,$C(a0) move.w $34(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s loc_321FD4 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_321FD4: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_321FE6 bclr #7,2(a2,d0.w) loc_321FE6: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Map_Obj6E: dc.w byte_321FF4-Map_Obj6E,byte_321FFC-Map_Obj6E,byte_322010-Map_Obj6E; 0 ; ... dc.w byte_32204E-Map_Obj6E ; 3 byte_321FF4: dc.b 0, 1, -$C, $E, 0, $25, -1,-$10; 0 ; ... byte_321FFC: dc.b 0, 3, -8, $D, 0, $31, -1,-$28, -8, $D; 0 ; ... dc.b 0, $31, -1, -8, -8, 5, 0, $31, 0, $18; 10 byte_322010: dc.b 0, $A,-$18, $E, 0, $39, -1,-$60,-$18, $E; 0 ; ... dc.b 8, $39, -1,-$40,-$18, $E, 0, $39, -1,-$20; 10 dc.b -$18, $E, 8, $39, 0, 0,-$18, $E, 0, $39; 20 dc.b 0, $20,-$18, $E, 8, $39, 0, $40, 0, 6; 30 dc.b 0, $45, -1,-$60, 0, 6, 8, $45, -1,-$50; 40 dc.b 0, 6, 0, $45, 0, $40, 0, 6, 8, $45; 50 dc.b 0, $50 ; 60 byte_32204E: dc.b 0, 1, -$C, $A, 0, 0, -1, -$C; 0 ; ... ; --------------------------------------------------------------------------- ; -------------------------------------------------- ; Object 70 - Giant rotating cog (Metropolis) ; -------------------------------------------------- Obj70: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_322064(pc,d0.w),d1 jmp off_322064(pc,d1.w) ; --------------------------------------------------------------------------- off_322064: dc.w loc_322068-off_322064,loc_3220EC-off_322064; 0 ; ... ; --------------------------------------------------------------------------- loc_322068: ; ... moveq #7,d1 moveq #0,d4 lea (byte_3221C2).l,a2 move.l a0,a1 move.w 8(a0),d2 move.w $C(a0),d3 bset #7,$22(a0) bra.s loc_32208C ; --------------------------------------------------------------------------- loc_322084: ; ... jsr SingleObjLoad2 bne.s loc_3220E8 loc_32208C: ; ... move.b 0(a0),0(a1) addq.b #2,$24(a1) move.l #Map_Obj70,4(a1) move.w #$6378,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #4,$18(a1) move.b #$10,$19(a1) move.w d2,$32(a1) move.w d3,$30(a1) move.b (a2)+,d0 ext.w d0 add.w d2,d0 move.w d0,8(a1) move.b (a2)+,d0 ext.w d0 add.w d3,d0 move.w d0,$C(a1) move.b (a2)+,$1A(a1) move.w d4,$34(a1) addq.w #3,d4 move.b $22(a0),$22(a1) loc_3220E8: ; ... dbf d1,loc_322084 loc_3220EC: ; ... move.w 8(a0),-(sp) move.b ($FFFFFE05).w,d0 move.b d0,d1 and.w #$F,d0 bne.s loc_322164 move.w $36(a0),d1 btst #0,$22(a0) beq.s loc_32211E sub.w #$18,d1 bcc.s loc_32213C moveq #$48,d1 subq.w #3,$34(a0) bcc.s loc_32213C move.w #$15,$34(a0) bra.s loc_32213C ; --------------------------------------------------------------------------- loc_32211E: ; ... add.w #$18,d1 cmp.w #$60,d1 bcs.s loc_32213C moveq #0,d1 addq.w #3,$34(a0) cmp.w #$18,$34(a0) bcs.s loc_32213C move.w #0,$34(a0) loc_32213C: ; ... move.w d1,$36(a0) add.w $34(a0),d1 lea byte_3221C2(pc,d1.w),a1 move.b (a1)+,d0 ext.w d0 add.w $32(a0),d0 move.w d0,8(a0) move.b (a1)+,d0 ext.w d0 add.w $30(a0),d0 move.w d0,$C(a0) move.b (a1)+,$1A(a0) loc_322164: ; ... move.b $1A(a0),d0 add.w d0,d0 and.w #$1E,d0 moveq #0,d1 moveq #0,d2 move.b byte_3221A2(pc,d0.w),d1 move.b byte_3221A2+1(pc,d0.w),d2 move.w d2,d3 move.w (sp)+,d4 jsr SolidObject move.w $32(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s loc_32219C jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32219C: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- byte_3221A2: dc.b $10, $10, $10, $10, $10, $10, $10, $10, $10, $10; 0 ; ... dc.b $10, $10, $10, $10, $10, $C, $10, 8, $10, $C; 10 dc.b $10, $10, $10, $10, $10, $10, $10, $10, $10, $10; 20 dc.b $10, $10 ; 30 byte_3221C2: dc.b 0,-$48, 0, $32,-$32, 4, $48, 0, 8, $32; 0 ; ... dc.b $32, $C, 0, $48, $10,-$32, $32, $14,-$48, 0; 10 dc.b $18,-$32,-$32, $1C, $D,-$48, 1, $3F,-$26, 5; 20 dc.b $48, $C, 9, $27, $3C, $D, -$D, $48, $11,-$3F; 30 dc.b $26, $15,-$48, -$C, $19,-$27,-$3C, $1D, $19,-$44; 40 dc.b 2, $46,-$17, 6, $46, $17, $A, $19, $44, $E; 50 dc.b -$19, $44, $12,-$46, $17, $16,-$46,-$17, $1A,-$19; 60 dc.b -$44, $1E, $27,-$3C, 3, $48, -$C, 7, $3F, $26; 70 dc.b $B, $D, $48, $F,-$27, $3C, $13,-$48, $C, $17; 80 dc.b -$3F,-$26, $1B, -$D,-$48, $1F; 90 Map_Obj70: dc.w byte_322262-Map_Obj70,byte_322270-Map_Obj70,byte_322278-Map_Obj70; 0 ; ... dc.w byte_322280-Map_Obj70,byte_322288-Map_Obj70,byte_322290-Map_Obj70; 3 dc.w byte_322298-Map_Obj70,byte_3222A0-Map_Obj70,byte_3222A8-Map_Obj70; 6 dc.w byte_3222B6-Map_Obj70,byte_3222BE-Map_Obj70,byte_3222C6-Map_Obj70; 9 dc.w byte_3222CE-Map_Obj70,byte_3222D6-Map_Obj70,byte_3222DE-Map_Obj70; 12 dc.w byte_3222E6-Map_Obj70,byte_3222EE-Map_Obj70,byte_3222FC-Map_Obj70; 15 dc.w byte_322304-Map_Obj70,byte_32230C-Map_Obj70,byte_322314-Map_Obj70; 18 dc.w byte_32231C-Map_Obj70,byte_322324-Map_Obj70,byte_32232C-Map_Obj70; 21 dc.w byte_322334-Map_Obj70,byte_322342-Map_Obj70,byte_32234A-Map_Obj70; 24 dc.w byte_322352-Map_Obj70,byte_32235A-Map_Obj70,byte_322362-Map_Obj70; 27 dc.w byte_32236A-Map_Obj70,byte_322372-Map_Obj70; 30 byte_322262: dc.b 0, 2,-$10, 7, 0, 0, -1,-$10,-$10, 7; 0 ; ... dc.b 8, 0, 0, 0 ; 10 byte_322270: dc.b 0, 1,-$10, $B, 8, 8, -1, -$C; 0 ; ... byte_322278: dc.b 0, 1,-$10, $F, 8, $14, -1,-$10; 0 ; ... byte_322280: dc.b 0, 1,-$10, $F, 8, $24, -1,-$10; 0 ; ... byte_322288: dc.b 0, 1,-$10, $F, 8, $34, -1,-$10; 0 ; ... byte_322290: dc.b 0, 1,-$10, $F, 8, $44, -1,-$10; 0 ; ... byte_322298: dc.b 0, 1,-$10, $F, 8, $54, -1,-$10; 0 ; ... byte_3222A0: dc.b 0, 1, -$C, $E, 8, $64, -1,-$10; 0 ; ... byte_3222A8: dc.b 0, 2,-$10, $D, 8, $70, -1,-$10, 0, $D; 0 ; ... dc.b $18, $70, -1,-$10 ; 10 byte_3222B6: dc.b 0, 1, -$C, $E, $18, $64, -1,-$10; 0 ; ... byte_3222BE: dc.b 0, 1,-$10, $F, $18, $54, -1,-$10; 0 ; ... byte_3222C6: dc.b 0, 1,-$10, $F, $18, $44, -1,-$10; 0 ; ... byte_3222CE: dc.b 0, 1,-$10, $F, $18, $34, -1,-$10; 0 ; ... byte_3222D6: dc.b 0, 1,-$10, $F, $18, $24, -1,-$10; 0 ; ... byte_3222DE: dc.b 0, 1,-$10, $F, $18, $14, -1,-$10; 0 ; ... byte_3222E6: dc.b 0, 1,-$10, $B, $18, 8, -1, -$C; 0 ; ... byte_3222EE: dc.b 0, 2,-$10, 7, $10, 0, -1,-$10,-$10, 7; 0 ; ... dc.b $18, 0, 0, 0 ; 10 byte_3222FC: dc.b 0, 1,-$10, $B, $10, 8, -1, -$C; 0 ; ... byte_322304: dc.b 0, 1,-$10, $F, $10, $14, -1,-$10; 0 ; ... byte_32230C: dc.b 0, 1,-$10, $F, $10, $24, -1,-$10; 0 ; ... byte_322314: dc.b 0, 1,-$10, $F, $10, $34, -1,-$10; 0 ; ... byte_32231C: dc.b 0, 1,-$10, $F, $10, $44, -1,-$10; 0 ; ... byte_322324: dc.b 0, 1,-$10, $F, $10, $54, -1,-$10; 0 ; ... byte_32232C: dc.b 0, 1, -$C, $E, $10, $64, -1,-$10; 0 ; ... byte_322334: dc.b 0, 2,-$10, $D, 0, $70, -1,-$10, 0, $D; 0 ; ... dc.b $10, $70, -1,-$10 ; 10 byte_322342: dc.b 0, 1, -$C, $E, 0, $64, -1,-$10; 0 ; ... byte_32234A: dc.b 0, 1,-$10, $F, 0, $54, -1,-$10; 0 ; ... byte_322352: dc.b 0, 1,-$10, $F, 0, $44, -1,-$10; 0 ; ... byte_32235A: dc.b 0, 1,-$10, $F, 0, $34, -1,-$10; 0 ; ... byte_322362: dc.b 0, 1,-$10, $F, 0, $24, -1,-$10; 0 ; ... byte_32236A: dc.b 0, 1,-$10, $F, 0, $14, -1,-$10; 0 ; ... byte_322372: dc.b 0, 1,-$10, $B, 0, 8, -1, -$C; 0 ; ... ; --------------------------------------------------------------------------- ; ------------------------------------------------------------ ; Object 72 - Conveyor Belt (CNZ) ; ------------------------------------------------------------ Obj72: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_322388(pc,d0.w),d1 jmp off_322388(pc,d1.w) ; --------------------------------------------------------------------------- off_322388: dc.w loc_32238C-off_322388,loc_3223BE-off_322388; 0 ; ... ; --------------------------------------------------------------------------- loc_32238C: ; ... addq.b #2,$24(a0) move.w #$30,$3C(a0) move.b $28(a0),d0 bpl.s loc_3223A2 move.w #$70,$3C(a0) loc_3223A2: ; ... and.b #$7F,d0 lsl.b #4,d0 move.b d0,$38(a0) move.w #2,$36(a0) btst #0,$22(a0) beq.s loc_3223BE neg.w $36(a0) loc_3223BE: ; ... lea ($FFFFB000).w,a1 bsr.s sub_3223D0 lea ($FFFFB040).w,a1 bsr.s sub_3223D0 jmp MarkObjGone3 ; =============== S U B R O U T I N E ======================================= sub_3223D0: ; ... moveq #0,d2 move.b $38(a0),d2 move.w d2,d3 add.w d3,d3 move.w 8(a1),d0 sub.w 8(a0),d0 add.w d2,d0 cmp.w d3,d0 bcc.s return_32240A move.w $C(a1),d1 sub.w $C(a0),d1 move.w $3C(a0),d0 add.w d0,d1 cmp.w d0,d1 bcc.s return_32240A btst #1,$22(a1) bne.s return_32240A move.w $36(a0),d0 add.w d0,8(a1) return_32240A: ; ... rts ; End of function sub_3223D0 ; --------------------------------------------------------------------------- ; ----------------------------------------------------- ; Object 73 - Solid rotating ring thing (MCZ, unused) ; ----------------------------------------------------- Obj73: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32241A(pc,d0.w),d1 jmp off_32241A(pc,d1.w) ; --------------------------------------------------------------------------- off_32241A: dc.w loc_322420-off_32241A,loc_322512-off_32241A,loc_3225C0-off_32241A; 0 ; ... ; --------------------------------------------------------------------------- loc_322420: ; ... addq.b #2,$24(a0) move.l #Map_Obj73,4(a0) move.w #$26BC,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #4,$18(a0) move.b #8,$19(a0) move.w 8(a0),$3A(a0) move.w $C(a0),$38(a0) move.b #0,$20(a0) bset #7,$22(a0) move.b $28(a0),d1 and.b #$F0,d1 ext.w d1 asl.w #3,d1 move.w d1,$3E(a0) move.b $22(a0),d0 ror.b #2,d0 and.b #$C0,d0 move.b d0,$26(a0) lea $29(a0),a2 move.b $28(a0),d1 and.w #7,d1 move.b #0,(a2)+ move.w d1,d3 lsl.w #4,d3 move.b d3,$3C(a0) subq.w #1,d1 bcs.s loc_322504 btst #3,$28(a0) beq.s loc_3224A8 subq.w #1,d1 bcs.s loc_322504 loc_3224A8: ; ... jsr SingleObjLoad bne.s loc_322504 addq.b #1,$29(a0) move.w a1,d5 sub.w #$B000,d5 lsr.w #6,d5 and.w #$7F,d5 move.b d5,(a2)+ move.b #4,$24(a1) move.b 0(a0),0(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.b 1(a0),1(a1) move.b $18(a0),$18(a1) move.b $19(a0),$19(a1) move.b $20(a0),$20(a1) move.b $22(a0),$22(a1) sub.b #$10,d3 move.b d3,$3C(a1) dbf d1,loc_3224A8 loc_322504: ; ... move.w a0,d5 sub.w #$B000,d5 lsr.w #6,d5 and.w #$7F,d5 move.b d5,(a2)+ loc_322512: ; ... move.w 8(a0),-(sp) bsr.w sub_322532 move.w #8,d1 move.w #8,d2 move.w d2,d3 addq.w #1,d3 move.w (sp)+,d4 jsr SolidObject bra.w loc_322584 ; =============== S U B R O U T I N E ======================================= sub_322532: ; ... move.w $3E(a0),d0 add.w d0,$26(a0) move.b $26(a0),d0 jsr CalcSine move.w $38(a0),d2 move.w $3A(a0),d3 lea $29(a0),a2 moveq #0,d6 move.b (a2)+,d6 loc_322554: ; ... moveq #0,d4 move.b (a2)+,d4 lsl.w #6,d4 add.l #-$5000,d4 move.l d4,a1 moveq #0,d4 move.b $3C(a1),d4 move.l d4,d5 muls.w d0,d4 asr.l #8,d4 muls.w d1,d5 asr.l #8,d5 add.w d2,d4 add.w d3,d5 move.w d4,$C(a1) move.w d5,8(a1) dbf d6,loc_322554 rts ; End of function sub_322532 ; --------------------------------------------------------------------------- loc_322584: ; ... move.w $3A(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_32259E jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32259E: ; ... moveq #0,d2 lea $29(a0),a2 move.b (a2)+,d2 loc_3225A6: ; ... moveq #0,d0 move.b (a2)+,d0 lsl.w #6,d0 add.l #-$5000,d0 move.l d0,a1 jsr DeleteObject2 dbf d2,loc_3225A6 rts ; --------------------------------------------------------------------------- loc_3225C0: ; ... move.w #8,d1 move.w #8,d2 move.w d2,d3 addq.w #1,d3 move.w $36(a0),d4 jsr SolidObject move.w 8(a0),$36(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- Map_Obj73: dc.w byte_3225E4-Map_Obj73 ; ... byte_3225E4: dc.b 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- ; ---------------------------------------------- ; Object 75 - Brick (MCZ) ; ---------------------------------------------- Obj75: ; ... btst #6,1(a0) bne.w loc_322604 moveq #0,d0 move.b $24(a0),d0 move.w off_32260E(pc,d0.w),d1 jmp off_32260E(pc,d1.w) ; --------------------------------------------------------------------------- loc_322604: ; ... move.w #$280,d0 jmp loc_312DBC ; --------------------------------------------------------------------------- off_32260E: dc.w loc_322614-off_32260E,loc_3226F4-off_32260E,loc_3227A0-off_32260E; 0 ; ... ; --------------------------------------------------------------------------- loc_322614: ; ... addq.b #2,$24(a0) move.l #Map_Obj75,4(a0) move.w #$2000,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #5,$18(a0) move.b #$10,$19(a0) move.w 8(a0),$30(a0) move.w $C(a0),$32(a0) move.b $28(a0),d1 move.b d1,d0 and.w #$F,d1 and.b #$F0,d0 ext.w d0 asl.w #3,d0 move.w d0,$34(a0) move.b $22(a0),d0 ror.b #2,d0 and.b #$C0,d0 move.b d0,$26(a0) cmp.b #$F,d1 bne.s loc_322686 addq.b #2,$24(a0) move.b #4,$18(a0) move.b #2,$1A(a0) rts ; --------------------------------------------------------------------------- loc_322686: ; ... move.b #$9A,$20(a0) jsr SingleObjLoad2 bne.s loc_3226F4 move.b 0(a0),0(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.b #4,1(a1) bset #6,1(a1) move.b #$40,$E(a1) move.w 8(a0),d2 move.w $C(a0),d3 move.b d1,$F(a1) subq.w #1,d1 lea $10(a1),a2 loc_3226CA: ; ... move.w d2,(a2)+ move.w d3,(a2)+ move.w #1,(a2)+ dbf d1,loc_3226CA move.w d2,8(a1) move.w d3,$C(a1) move.b #0,$B(a1) move.l a1,$3C(a0) move.b #$40,$14(a1) bset #4,1(a1) loc_3226F4: ; ... moveq #0,d0 moveq #0,d1 move.w $34(a0),d0 add.w d0,$26(a0) move.b $26(a0),d0 jsr CalcSine move.w $32(a0),d2 move.w $30(a0),d3 moveq #0,d6 move.l $3C(a0),a1 move.b $F(a1),d6 subq.w #1,d6 bcs.s loc_32276A swap d0 swap d1 asr.l #4,d0 asr.l #4,d1 moveq #0,d4 moveq #0,d5 lea $10(a1),a2 loc_322730: ; ... movem.l d4-d5,-(sp) swap d4 swap d5 add.w d2,d4 add.w d3,d5 move.w d5,(a2)+ move.w d4,(a2)+ movem.l (sp)+,d4-d5 add.l d0,d4 add.l d1,d5 addq.w #2,a2 dbf d6,loc_322730 swap d4 swap d5 add.w d2,d4 add.w d3,d5 move.w d5,8(a0) move.w d4,$C(a0) move.w $28(a1),8(a1) move.w $2A(a1),$C(a1) loc_32276A: ; ... tst.w ($FFFFFFDC).w beq.s loc_322776 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_322776: ; ... move.w $30(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_322790 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_322790: ; ... move.l $3C(a0),a1 jsr DeleteObject2 jmp DeleteObject ; --------------------------------------------------------------------------- loc_3227A0: ; ... moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 move.w #$10,d2 move.w #$11,d3 move.w 8(a0),d4 jsr SolidObject jmp MarkObjGone ; --------------------------------------------------------------------------- Map_Obj75: dc.w byte_3227C8-Map_Obj75,byte_3227D6-Map_Obj75,byte_3227DE-Map_Obj75; 0 ; ... byte_3227C8: dc.b 0, 2,-$10, $D, 0, $7A, -1,-$10, 0, $D; 0 ; ... dc.b $18, $7A, -1,-$10 ; 10 byte_3227D6: dc.b 0, 1, -8, 5, $40, $66, -1, -8; 0 ; ... byte_3227DE: dc.b 0, 2,-$10, 7, $40, $40, -1,-$10,-$10, 7; 0 ; ... dc.b $48, $40, 0, 0 ; 10 ; --------------------------------------------------------------------------- ; ---------------------------------------------------------- ; Object 76 - Spike block that slides out of the wall (MCZ) ; ---------------------------------------------------------- Obj76: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3227FA(pc,d0.w),d1 jmp off_3227FA(pc,d1.w) ; --------------------------------------------------------------------------- off_3227FA: dc.w loc_322802-off_3227FA,loc_322854-off_3227FA; 0 ; ... unk_3227FE: dc.b $40 ; @ ; ... dc.b $10 dc.b 0 dc.b 0 ; --------------------------------------------------------------------------- loc_322802: ; ... addq.b #2,$24(a0) move.l #Map_Obj76,4(a0) move.w #0,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #4,$18(a0) moveq #0,d0 move.b $28(a0),d0 lsr.w #2,d0 and.w #$1C,d0 lea unk_3227FE(pc,d0.w),a2 move.b (a2)+,$19(a0) move.b (a2)+,$16(a0) move.b (a2)+,$1A(a0) move.w 8(a0),$34(a0) move.w $C(a0),$30(a0) and.w #$F,$28(a0) loc_322854: ; ... move.w 8(a0),-(sp) moveq #0,d0 move.b $28(a0),d0 move.w off_3228C8(pc,d0.w),d1 jsr off_3228C8(pc,d1.w) move.w (sp)+,d4 tst.b 1(a0) bpl.s loc_3228BE moveq #0,d1 move.b $19(a0),d1 loc_322874: add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 jsr SolidObject swap d6 and.w #3,d6 beq.s loc_3228BE move.b d6,d0 and.b #1,d0 beq.s loc_3228A8 lea ($FFFFB000).w,a1 jsr Touch_ChkHurt2 bclr #5,$22(a0) loc_3228A8: ; ... and.b #2,d6 beq.s loc_3228BE lea ($FFFFB040).w,a1 jsr Touch_ChkHurt2 bclr #6,$22(a0) loc_3228BE: ; ... move.w $34(a0),d0 jmp MarkObjGone2 ; --------------------------------------------------------------------------- off_3228C8: dc.w loc_3228CC-off_3228C8,sub_32291C-off_3228C8; 0 ; ... ; --------------------------------------------------------------------------- loc_3228CC: ; ... lea ($FFFFB000).w,a1 bsr.s sub_3228D6 lea ($FFFFB040).w,a1 ; =============== S U B R O U T I N E ======================================= sub_3228D6: ; ... btst #1,$22(a1) bne.s return_32291A move.w 8(a1),d0 sub.w 8(a0),d0 add.w #$C0,d0 btst #0,$22(a0) beq.s loc_3228F6 sub.w #$100,d0 loc_3228F6: ; ... cmp.w #$80,d0 bcc.s return_32291A move.w $C(a1),d0 sub.w $C(a0),d0 add.w #$10,d0 cmp.w #$20,d0 bcc.s return_32291A move.b #2,$28(a0) move.w #$80,$36(a0) return_32291A: ; ... rts ; End of function sub_3228D6 ; =============== S U B R O U T I N E ======================================= sub_32291C: ; ... tst.w $36(a0) beq.s return_322936 subq.w #1,$36(a0) moveq #$FFFFFFFF,d0 btst #0,$22(a0) beq.s loc_322932 neg.w d0 loc_322932: ; ... add.w d0,8(a0) return_322936: ; ... rts ; End of function sub_32291C ; --------------------------------------------------------------------------- Map_Obj76: dc.w byte_32293A-Map_Obj76 ; ... byte_32293A: dc.b 0, 6,-$10, 5, $24, $2C, -1,-$40, 0, 5; 0 ; ... dc.b $24, $2C, -1,-$40,-$10, 7, $60, $40, -1,-$30; 10 dc.b -$10, $F, $60, $48, -1,-$20,-$10, $F, $60, $48; 20 dc.b 0, 0,-$10, $F, $60, $48, 0, $20; 30 ; --------------------------------------------------------------------------- Obj77: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32296E(pc,d0.w),d1 jmp off_32296E(pc,d1.w) ; --------------------------------------------------------------------------- off_32296E: dc.w loc_322972-off_32296E,loc_322996-off_32296E; 0 ; ... ; --------------------------------------------------------------------------- loc_322972: ; ... addq.b #2,$24(a0) move.l #Map_Obj77,4(a0) move.w #$643C,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$80,$19(a0) loc_322996: ; ... tst.b $34(a0) bne.s loc_3229CA lea ($FFFFF7E0).w,a2 moveq #0,d0 move.b $28(a0),d0 btst #0,(a2,d0.w) beq.s loc_3229CA move.b #1,$34(a0) bchg #0,$1C(a0) tst.b 1(a0) bpl.s loc_3229CA move.w #$BB,d0 jsr PlaySound loc_3229CA: ; ... lea (Ani_Obj77).l,a1 jsr AnimateSprite tst.b $1A(a0) bne.s loc_3229F8 move.w #$4B,d1 move.w #8,d2 move.w d2,d3 addq.w #1,d3 move.w 8(a0),d4 jsr SolidObject jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3229F8: ; ... move.b $22(a0),d0 and.b #$18,d0 beq.s loc_322A2A move.b d0,d1 and.b #8,d0 beq.s loc_322A14 lea ($FFFFB000).w,a1 bclr #3,$22(a1) loc_322A14: ; ... and.b #$10,d1 beq.s loc_322A24 lea ($FFFFB040).w,a1 bclr #3,$22(a1) loc_322A24: ; ... and.b #$E7,$22(a0) loc_322A2A: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- Ani_Obj77: dc.w byte_322A34-Ani_Obj77,byte_322A3C-Ani_Obj77; 0 ; ... byte_322A34: dc.b 3, 4, 3, 2, 1, 0, -2, 1; 0 ; ... byte_322A3C: dc.b 3, 0, 1, 2, 3, 4, -2, 1; 0 ; ... Map_Obj77: dc.w byte_322A4E-Map_Obj77,byte_322A80-Map_Obj77,byte_322AB2-Map_Obj77; 0 ; ... dc.w byte_322AE4-Map_Obj77,byte_322B16-Map_Obj77; 3 byte_322A4E: dc.b 0, 8, -8, 5, 0, 0, -1,-$40, -8, 5; 0 ; ... dc.b 0, 0, -1,-$30, -8, 5, 0, 0, -1,-$20; 10 dc.b -8, 5, 0, 0, -1,-$10, -8, 5, 0, 0; 20 dc.b 0, 0, -8, 5, 0, 0, 0, $10, -8, 5; 30 dc.b 0, 0, 0, $20, -8, 5, 0, 0, 0, $30; 40 byte_322A80: dc.b 0, 8, -8, 5, 0, 0, -1,-$40, -2, 5; 0 ; ... dc.b 0, 0, -1,-$32, 4, 5, 0, 0, -1,-$23; 10 dc.b $A, 5, 0, 0, -1,-$14, $A, 5, 0, 0; 20 dc.b 0, 4, 4, 5, 0, 0, 0, $13, -2, 5; 30 dc.b 0, 0, 0, $22, -8, 5, 0, 0, 0, $30; 40 byte_322AB2: dc.b 0, 8, -8, 5, 0, 0, -1,-$40, 3, 5; 0 ; ... dc.b 0, 0, -1,-$35, $E, 5, 0, 0, -1,-$2A; 10 dc.b $19, 5, 0, 0, -1,-$1F, $19, 5, 0, 0; 20 dc.b 0, $F, $E, 5, 0, 0, 0, $1A, 3, 5; 30 dc.b 0, 0, 0, $25, -8, 5, 0, 0, 0, $30; 40 byte_322AE4: dc.b 0, 8, -8, 5, 0, 0, -1,-$40, 6, 5; 0 ; ... dc.b 0, 0, -1,-$3A, $15, 5, 0, 0, -1,-$34; 10 dc.b $24, 5, 0, 0, -1,-$2E, $24, 5, 0, 0; 20 dc.b 0, $1E, $15, 5, 0, 0, 0, $24, 6, 5; 30 dc.b 0, 0, 0, $2A, -8, 5, 0, 0, 0, $30; 40 byte_322B16: dc.b 0, 8, -8, 5, 0, 0, -1,-$40, 8, 5; 0 ; ... dc.b 0, 0, -1,-$40, $18, 5, 0, 0, -1,-$40; 10 dc.b $28, 5, 0, 0, -1,-$40, -8, 5, 0, 0; 20 dc.b 0, $30, 8, 5, 0, 0, 0, $30, $18, 5; 30 dc.b 0, 0, 0, $30, $28, 5, 0, 0, 0, $30; 40 ; --------------------------------------------------------------------------- Obj78: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_322B60(pc,d0.w),d1 jsr off_322B60(pc,d1.w) move.w $30(a0),d0 jmp MarkObjGone2 ; --------------------------------------------------------------------------- off_322B60: dc.w loc_322B66-off_322B60,loc_322BEE-off_322B60,loc_322C02-off_322B60; 0 ; ... ; --------------------------------------------------------------------------- loc_322B66: ; ... addq.b #2,$24(a0) moveq #$34,d3 moveq #2,d4 btst #0,$22(a0) beq.s loc_322B7A moveq #$3A,d3 moveq #-2,d4 loc_322B7A: ; ... move.w 8(a0),d2 move.l a0,a1 moveq #3,d1 bra.s loc_322B94 ; --------------------------------------------------------------------------- loc_322B84: ; ... jsr SingleObjLoad2 bne.w loc_322BEE move.b #4,$24(a1) loc_322B94: ; ... move.b 0(a0),0(a1) move.l #Map_Obj6B_CPZ,4(a1) move.w #$6418,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #3,$18(a1) move.b #$10,$19(a1) move.b $28(a0),$28(a1) move.w d2,8(a1) move.w $C(a0),$C(a1) move.w 8(a0),$30(a1) move.w $C(a1),$32(a1) add.w #$20,d2 move.b d3,$2F(a1) move.l a0,$3C(a1) add.b d4,d3 dbf d1,loc_322B84 loc_322BEE: ; ... moveq #0,d0 move.b $28(a0),d0 and.w #7,d0 add.w d0,d0 move.w off_322C3C(pc,d0.w),d1 jsr off_322C3C(pc,d1.w) loc_322C02: ; ... move.l $3C(a0),a2 moveq #0,d0 move.b $2F(a0),d0 move.w (a2,d0.w),d0 add.w $32(a0),d0 move.w d0,$C(a0) moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 move.w #$10,d2 move.w #$11,d3 move.w 8(a0),d4 jsr SolidObject swap d6 or.b d6,$2E(a2) rts ; --------------------------------------------------------------------------- off_322C3C: dc.w loc_322C4C-off_322C3C,loc_322CB8-off_322C3C,loc_322C70-off_322C3C; 0 ; ... dc.w loc_322CB8-off_322C3C,loc_322C4C-off_322C3C,loc_322CE2-off_322C3C; 3 dc.w loc_322C70-off_322C3C,loc_322CE2-off_322C3C; 6 ; --------------------------------------------------------------------------- loc_322C4C: ; ... tst.w $2C(a0) bne.s loc_322C64 move.b $2E(a0),d0 and.b #$30,d0 beq.s return_322C62 move.w #$1E,$2C(a0) return_322C62: ; ... rts ; --------------------------------------------------------------------------- loc_322C64: ; ... subq.w #1,$2C(a0) bne.s return_322C62 addq.b #1,$28(a0) rts ; --------------------------------------------------------------------------- loc_322C70: ; ... tst.w $2C(a0) bne.s loc_322C88 move.b $2E(a0),d0 and.b #$C,d0 beq.s return_322C86 move.w #$3C,$2C(a0) return_322C86: ; ... rts ; --------------------------------------------------------------------------- loc_322C88: ; ... subq.w #1,$2C(a0) bne.s loc_322C94 addq.b #1,$28(a0) rts ; --------------------------------------------------------------------------- loc_322C94: ; ... lea $34(a0),a1 move.w $2C(a0),d0 lsr.b #2,d0 and.b #1,d0 move.w d0,(a1)+ eor.b #1,d0 move.w d0,(a1)+ eor.b #1,d0 move.w d0,(a1)+ eor.b #1,d0 move.w d0,(a1)+ rts ; --------------------------------------------------------------------------- loc_322CB8: ; ... lea $34(a0),a1 cmp.w #$80,(a1) beq.s return_322CE0 addq.w #1,(a1) moveq #0,d1 move.w (a1)+,d1 swap d1 lsr.l #1,d1 move.l d1,d2 lsr.l #1,d1 move.l d1,d3 add.l d2,d3 swap d1 swap d2 swap d3 move.w d3,(a1)+ move.w d2,(a1)+ move.w d1,(a1)+ return_322CE0: ; ... rts ; --------------------------------------------------------------------------- loc_322CE2: ; ... lea $34(a0),a1 cmp.w #$FF80,(a1) beq.s return_322D0A subq.w #1,(a1) moveq #0,d1 move.w (a1)+,d1 swap d1 asr.l #1,d1 move.l d1,d2 asr.l #1,d1 move.l d1,d3 add.l d2,d3 swap d1 swap d2 swap d3 move.w d3,(a1)+ move.w d2,(a1)+ move.w d1,(a1)+ return_322D0A: ; ... rts ; --------------------------------------------------------------------------- Obj7A: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_322D1A(pc,d0.w),d1 jmp off_322D1A(pc,d1.w) ; --------------------------------------------------------------------------- off_322D1A: dc.w loc_322D38-off_322D1A,loc_322DFE-off_322D1A,loc_322E5C-off_322D1A; 0 ; ... unk_322D20: dc.b 0 dc.b $68 ; h dc.b $FF dc.b $98 ; ˜ dc.b 0 dc.b 0 dc.b 1 dc.b $A8 ; ¨ dc.b $FF dc.b $50 ; P dc.b 0 dc.b $40 ; @ dc.b 1 dc.b $E8 ; è dc.b $FF dc.b $80 ; € dc.b 0 dc.b $80 ; € dc.b 0 dc.b $68 ; h dc.b 0 dc.b $67 ; g dc.b 0 dc.b 0 ; --------------------------------------------------------------------------- loc_322D38: ; ... addq.b #2,$24(a0) move.l #Map_Obj7A,4(a0) move.w #$E418,2(a0) cmp.b #$B,($FFFFFE10).w bne.s loc_322D60 move.l #Map_Obj15_Obj7A,4(a0) move.w #0,2(a0) loc_322D60: ; ... jsr Adjust2PArtPointer2_Useless moveq #0,d1 move.b $28(a0),d1 lea unk_322D20(pc,d1.w),a2 move.b (a2)+,d1 move.l a0,a1 bra.s loc_322D96 ; --------------------------------------------------------------------------- loc_322D76: ; ... jsr SingleObjLoad2 bne.s loc_322DBA loc_322D7E: move.b 0(a0),0(a1) move.b #4,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) loc_322D96: ; ... move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.b #4,1(a1) move.b #4,$18(a1) move.b #$18,$19(a1) move.w 8(a1),$30(a1) loc_322DBA: ; ... dbf d1,loc_322D76 move.l a0,$3C(a1) move.l a1,$3C(a0) cmp.b #$C,$28(a0) bne.s loc_322DD4 move.b #1,$36(a0) loc_322DD4: ; ... moveq #0,d1 move.b (a2)+,d1 move.w $30(a0),d0 sub.w d1,d0 move.w d0,$32(a0) move.w d0,$32(a1) add.w d1,d0 add.w d1,d0 move.w d0,$34(a0) move.w d0,$34(a1) move.w (a2)+,d0 add.w d0,8(a0) move.w (a2)+,d0 add.w d0,8(a1) loc_322DFE: ; ... bsr.s sub_322E66 tst.w ($FFFFFFDC).w beq.s loc_322E0C jmp DisplaySprite ; --------------------------------------------------------------------------- loc_322E0C: ; ... move.w $32(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bls.s loc_322E30 move.w $34(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s loc_322E36 loc_322E30: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_322E36: ; ... move.l $3C(a0),a1 cmp.l a0,a1 beq.s loc_322E44 jsr DeleteObject2 loc_322E44: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_322E56 bclr #7,2(a2,d0.w) loc_322E56: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_322E5C: ; ... bsr.s sub_322E66 bsr.s sub_322EB2 jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_322E66: ; ... move.w 8(a0),-(sp) tst.b $36(a0) beq.s loc_322E88 move.w 8(a0),d0 subq.w #1,d0 cmp.w $32(a0),d0 bne.s loc_322E82 loc_322E7C: move.b #0,$36(a0) loc_322E82: ; ... move.w d0,8(a0) bra.s loc_322E9E ; --------------------------------------------------------------------------- loc_322E88: ; ... move.w 8(a0),d0 addq.w #1,d0 cmp.w $34(a0),d0 bne.s loc_322E9A move.b #1,$36(a0) loc_322E9A: ; ... move.w d0,8(a0) loc_322E9E: ; ... moveq #0,d1 move.b $19(a0),d1 move.w #8,d3 move.w (sp)+,d4 jsr PlatformObject rts ; End of function sub_322E66 ; =============== S U B R O U T I N E ======================================= sub_322EB2: ; ... move.l $3C(a0),a1 move.w 8(a0),d0 sub.w #$18,d0 move.w 8(a1),d2 add.w #$18,d2 cmp.w d0,d2 bne.s return_322ED6 eor.b #1,$36(a0) eor.b #1,$36(a1) return_322ED6: ; ... rts ; End of function sub_322EB2 ; --------------------------------------------------------------------------- Map_Obj7A: dc.w byte_322EDA-Map_Obj7A ; 0 ; ... byte_322EDA: dc.b 0, 2, -8, 9, 0, $10, -1,-$18, -8, 9; 0 ; ... dc.b 8, $10, 0, 0 ; 10 ; --------------------------------------------------------------------------- Obj7B: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_322F22(pc,d0.w),d1 jsr off_322F22(pc,d1.w) tst.w ($FFFFFFDC).w beq.s loc_322F02 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_322F02: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_322F1C jmp DisplaySprite ; --------------------------------------------------------------------------- loc_322F1C: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- off_322F22: dc.w loc_322F2A-off_322F22,loc_322F62-off_322F22; 0 ; ... byte_322F26: dc.b -$10, 0, -$B,-$80 ; 0 ; --------------------------------------------------------------------------- loc_322F2A: ; ... addq.b #2,$24(a0) move.l #Map_Obj7B,4(a0) move.w #$3E0,2(a0) or.b #4,1(a0) move.b #$10,$19(a0) move.b #1,$18(a0) move.b $28(a0),d0 and.w #2,d0 move.w byte_322F26(pc,d0.w),$30(a0) jsr Adjust2PArtPointer2_Useless loc_322F62: ; ... cmp.b #1,$1A(a0) beq.s loc_322FB0 move.w #$1B,d1 move.w #8,d2 move.w #$10,d3 move.w 8(a0),d4 lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) jsr loc_314C04 btst #3,$22(a0) beq.s loc_322F96 bsr.w sub_32302C loc_322F96: ; ... movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 moveq #4,d6 jsr loc_314C04 btst #4,$22(a0) beq.s loc_322FB0 bsr.s sub_32302C loc_322FB0: ; ... move.w 8(a0),d4 move.w d4,d5 sub.w #$10,d4 add.w #$10,d5 move.w $C(a0),d2 move.w d2,d3 add.w #$30,d3 move.w ($FFFFB008).w,d0 cmp.w d4,d0 bcs.s loc_322FEE cmp.w d5,d0 bcc.s loc_322FEE move.w ($FFFFB00C).w,d0 cmp.w d2,d0 bcs.s loc_322FEE cmp.w d3,d0 bcc.s loc_322FEE cmp.b #2,$1D(a0) beq.s loc_322FEE move.b #2,$1C(a0) loc_322FEE: ; ... move.w ($FFFFB048).w,d0 cmp.w d4,d0 bcs.s loc_32301E cmp.w d5,d0 bcc.s loc_32301E move.w ($FFFFB04C).w,d0 cmp.w d2,d0 bcs.s loc_32301E cmp.w d3,d0 bcc.s loc_32301E cmp.w #4,($FFFFF708).w beq.w loc_32301E cmp.b #3,$1D(a0) beq.s loc_32301E move.b #3,$1C(a0) loc_32301E: ; ... lea (Ani_Obj7B).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- rts ; =============== S U B R O U T I N E ======================================= sub_32302C: ; ... move.w #$100,$1C(a0) addq.w #4,$C(a1) move.w $30(a0),$12(a1) bset #1,$22(a1) bclr #3,$22(a1) move.b #$10,$1C(a1) move.b #2,$24(a1) move.b $28(a0),d0 bpl.s loc_323060 move.w #0,$10(a1) loc_323060: ; ... btst #0,d0 beq.s loc_3230A0 move.w #1,$14(a1) move.b #1,$27(a1) move.b #0,$1C(a1) move.b #0,$2C(a1) move.b #4,$2D(a1) btst #1,d0 bne.s loc_323090 move.b #1,$2C(a1) loc_323090: ; ... btst #0,$22(a1) beq.s loc_3230A0 neg.b $27(a1) neg.w $14(a1) loc_3230A0: ; ... and.b #$C,d0 cmp.b #4,d0 bne.s loc_3230B6 move.b #$C,$3E(a1) move.b #$D,$3F(a1) loc_3230B6: ; ... cmp.b #8,d0 bne.s loc_3230C8 move.b #$E,$3E(a1) move.b #$F,$3F(a1) loc_3230C8: ; ... move.w #$CC,d0 jmp PlaySound ; End of function sub_32302C ; --------------------------------------------------------------------------- Ani_Obj7B: dc.w byte_3230DA-Ani_Obj7B,byte_3230DD-Ani_Obj7B,byte_3230E1-Ani_Obj7B; 0 ; ... dc.w byte_3230E1-Ani_Obj7B ; 3 byte_3230DA: dc.b $F, 0, -1 ; 0 ; ... byte_3230DD: dc.b 0, 3, -3, 0 ; 0 ; ... byte_3230E1: dc.b 5, 1, 2, 2, 2, 4, -3, 0, 0; 0 ; ... Map_Obj7B: dc.w byte_3230F4-Map_Obj7B,byte_3230FC-Map_Obj7B,byte_32310A-Map_Obj7B; 0 ; ... dc.w byte_323118-Map_Obj7B,byte_3230FC-Map_Obj7B; 3 byte_3230F4: dc.b 0, 1,-$10, $D, 0, 0, -1,-$10; 0 ; ... byte_3230FC: dc.b 0, 2,-$20, 7, 0, 8, -1,-$10,-$20, 7; 0 ; ... dc.b 8, 8, 0, 0 ; 10 byte_32310A: dc.b 0, 2,-$20, 7, 0, $10, -1,-$10,-$20, 7; 0 ; ... dc.b 8, $10, 0, 0 ; 10 byte_323118: dc.b 0, 1,-$10, $D, 0, $18, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- Obj7F: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32312E(pc,d0.w),d1 jmp off_32312E(pc,d1.w) ; --------------------------------------------------------------------------- off_32312E: dc.w loc_323132-off_32312E,loc_32315C-off_32312E; 0 ; ... ; --------------------------------------------------------------------------- loc_323132: ; ... addq.b #2,$24(a0) move.l #Map_Obj7F,4(a0) move.w #$640E,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #8,$19(a0) move.b #4,$18(a0) loc_32315C: ; ... lea $30(a0),a2 lea ($FFFFB000).w,a1 move.w ($FFFFF604).w,d0 bsr.s sub_32317C lea ($FFFFB040).w,a1 addq.w #1,a2 move.w ($FFFFF606).w,d0 bsr.s sub_32317C jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_32317C: ; ... tst.b (a2) beq.s loc_3231E4 and.b #$70,d0 beq.w loc_3231D0 clr.b $2A(a1) clr.b (a2) move.b #$12,2(a2) and.w #$F00,d0 beq.s loc_3231A0 move.b #$3C,2(a2) loc_3231A0: ; ... move.w #$FD00,$12(a1) move.b $28(a0),d0 and.w #$F,d0 lea ($FFFFF7E0).w,a3 lea (a3,d0.w),a3 bclr #0,(a3) move.b #0,$1A(a0) tst.w $30(a0) beq.s loc_3231CC move.b #1,$1A(a0) loc_3231CC: ; ... bra.w return_32328A ; --------------------------------------------------------------------------- loc_3231D0: ; ... move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #$30,$C(a1) rts ; --------------------------------------------------------------------------- loc_3231E4: ; ... tst.b 2(a2) beq.s loc_3231F2 subq.b #1,2(a2) bne.w return_32328A loc_3231F2: ; ... move.w 8(a1),d0 sub.w 8(a0),d0 add.w #$C,d0 cmp.w #$18,d0 bcc.w return_32328A move.w $C(a1),d1 sub.w $C(a0),d1 sub.w #$28,d1 cmp.w #$10,d1 bcc.w return_32328A tst.b $2A(a1) bmi.s return_32328A cmp.b #4,$24(a1) bcc.s return_32328A tst.w ($FFFFFE08).w bne.s return_32328A clr.w $10(a1) clr.w $12(a1) clr.w $14(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #$30,$C(a1) move.b #$14,$1C(a1) move.b #1,$2A(a1) move.b #1,(a2) move.b $28(a0),d0 and.w #$F,d0 lea ($FFFFF7E0).w,a3 bset #0,(a3,d0.w) move.w #$CD,d0 jsr PlaySound loc_323278: move.b #0,$1A(a0) loc_32327E: tst.w $30(a0) beq.s return_32328A move.b #1,$1A(a0) return_32328A: ; ... rts ; End of function sub_32317C ; --------------------------------------------------------------------------- Map_Obj7F: dc.w byte_323290-Map_Obj7F,byte_3232A4-Map_Obj7F; 0 ; ... byte_323290: dc.b 0, 3,-$30, 7, 0, 0, -1, -8,-$10, 7; 0 ; ... dc.b 0, 0, -1, -8, $10, 7, 0, 8, -1, -8; 10 byte_3232A4: dc.b 0, 3,-$2C, 7, 0, 0, -1, -8, -$C, 7; 0 ; ... dc.b 0, 0, -1, -8, $14, 7, 0, 8, -1, -8; 10 ; --------------------------------------------------------------------------- Obj80: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3232C6(pc,d0.w),d1 jmp off_3232C6(pc,d1.w) ; --------------------------------------------------------------------------- off_3232C6: dc.w loc_3232CC-off_3232C6,loc_3233A6-off_3232C6,loc_32353C-off_3232C6; 0 ; ... ; --------------------------------------------------------------------------- loc_3232CC: ; ... addq.b #2,$24(a0) move.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) move.b #$80,$16(a0) bset #4,1(a0) move.w $C(a0),$3C(a0) cmp.b #6,($FFFFFE10).w bne.s loc_32335A addq.b #2,$24(a0) move.l #off_3236C0,4(a0) move.w #$23FE,2(a0) jsr Adjust2PArtPointer2_Useless move.w #$A0,$2E(a0) move.b $28(a0),d0 move.b d0,d1 and.b #$F,d0 beq.s loc_32332C move.w #$60,$2E(a0) loc_32332C: ; ... move.b $28(a0),d0 move.w #2,$3A(a0) and.b #$70,d1 beq.s loc_323356 move.w $2E(a0),d0 move.w d0,$38(a0) move.b #1,$36(a0) add.w d0,$C(a0) lsr.w #4,d0 addq.w #1,d0 move.b d0,$1A(a0) loc_323356: ; ... bra.w loc_32353C ; --------------------------------------------------------------------------- loc_32335A: ; ... move.l #off_3235A8,4(a0) move.w #$641E,2(a0) jsr Adjust2PArtPointer2_Useless move.w #$B0,$2E(a0) move.b $28(a0),d0 bpl.s loc_323380 move.b #1,$34(a0) loc_323380: ; ... move.w #2,$3A(a0) and.b #$70,d0 beq.s loc_3233A6 move.w $2E(a0),d0 move.w d0,$38(a0) move.b #1,$36(a0) add.w d0,$C(a0) lsr.w #5,d0 addq.w #1,d0 move.b d0,$1A(a0) loc_3233A6: ; ... tst.b $36(a0) beq.s loc_3233B4 tst.w $30(a0) bne.s loc_3233CA bra.s loc_3233BA ; --------------------------------------------------------------------------- loc_3233B4: ; ... tst.w $30(a0) beq.s loc_3233CA loc_3233BA: ; ... move.w $38(a0),d2 cmp.w $2E(a0),d2 beq.s loc_3233EE add.w $3A(a0),d2 bra.s loc_3233D4 ; --------------------------------------------------------------------------- loc_3233CA: ; ... move.w $38(a0),d2 beq.s loc_3233EE sub.w $3A(a0),d2 loc_3233D4: ; ... move.w d2,$38(a0) move.w $3C(a0),d0 add.w d2,d0 move.w d0,$C(a0) move.w d2,d0 beq.s loc_3233EA lsr.w #5,d0 addq.w #1,d0 loc_3233EA: ; ... move.b d0,$1A(a0) loc_3233EE: ; ... lea $30(a0),a2 lea ($FFFFB000).w,a1 move.w ($FFFFF604).w,d0 bsr.s sub_32340E lea ($FFFFB040).w,a1 addq.w #1,a2 move.w ($FFFFF606).w,d0 bsr.s sub_32340E jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_32340E: ; ... tst.b (a2) beq.w loc_3234A0 tst.b 1(a1) bpl.s loc_323484 cmp.b #4,$24(a1) bcc.s loc_323484 and.b #$70,d0 beq.w loc_323492 clr.b $2A(a1) clr.b (a2) move.b #$12,2(a2) and.w #$F00,d0 beq.w loc_323444 move.b #$3C,2(a2) loc_323444: ; ... btst #$A,d0 beq.s loc_323450 move.w #$FE00,$10(a1) loc_323450: ; ... btst #$B,d0 beq.s loc_32345C move.w #$200,$10(a1) loc_32345C: ; ... move.w #$FC80,$12(a1) bset #1,$22(a1) tst.b $34(a0) beq.s return_323482 move.b $28(a0),d0 and.w #$F,d0 lea ($FFFFF7E0).w,a3 lea (a3,d0.w),a3 bclr #0,(a3) return_323482: ; ... rts ; --------------------------------------------------------------------------- loc_323484: ; ... clr.b $2A(a1) clr.b (a2) move.b #$3C,2(a2) rts ; --------------------------------------------------------------------------- loc_323492: ; ... move.w $C(a0),$C(a1) add.w #$94,$C(a1) rts ; --------------------------------------------------------------------------- loc_3234A0: ; ... tst.b 2(a2) beq.s loc_3234AE subq.b #1,2(a2) bne.w return_32353A loc_3234AE: ; ... move.w 8(a1),d0 sub.w 8(a0),d0 add.w #$10,d0 cmp.w #$20,d0 bcc.w return_32353A move.w $C(a1),d1 sub.w $C(a0),d1 sub.w #$88,d1 cmp.w #$18,d1 bcc.w return_32353A tst.b $2A(a1) bmi.s return_32353A cmp.b #4,$24(a1) bcc.s return_32353A tst.w ($FFFFFE08).w bne.s return_32353A clr.w $10(a1) clr.w $12(a1) clr.w $14(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #$94,$C(a1) move.b #$14,$1C(a1) move.b #1,$2A(a1) move.b #1,(a2) tst.b $34(a0) beq.s return_32353A move.b $28(a0),d0 and.w #$F,d0 lea ($FFFFF7E0).w,a3 bset #0,(a3,d0.w) move.w #$CD,d0 jsr PlaySound return_32353A: ; ... rts ; End of function sub_32340E ; --------------------------------------------------------------------------- loc_32353C: ; ... tst.b $36(a0) beq.s loc_32354A tst.w $30(a0) bne.s loc_323560 bra.s loc_323550 ; --------------------------------------------------------------------------- loc_32354A: ; ... tst.w $30(a0) beq.s loc_323560 loc_323550: ; ... move.w $38(a0),d2 cmp.w $2E(a0),d2 beq.s loc_323584 add.w $3A(a0),d2 bra.s loc_32356A ; --------------------------------------------------------------------------- loc_323560: ; ... move.w $38(a0),d2 beq.s loc_323584 sub.w $3A(a0),d2 loc_32356A: ; ... move.w d2,$38(a0) move.w $3C(a0),d0 add.w d2,d0 move.w d0,$C(a0) move.w d2,d0 beq.s loc_323580 lsr.w #4,d0 addq.w #1,d0 loc_323580: ; ... move.b d0,$1A(a0) loc_323584: ; ... lea $30(a0),a2 lea ($FFFFB000).w,a1 move.w ($FFFFF604).w,d0 bsr.w sub_32340E lea ($FFFFB040).w,a1 addq.w #1,a2 move.w ($FFFFF606).w,d0 bsr.w sub_32340E jmp MarkObjGone ; --------------------------------------------------------------------------- off_3235A8: dc.w byte_3235B6-off_3235A8,byte_3235CA-off_3235A8,byte_3235E4-off_3235A8; 0 ; ... dc.w byte_323604-off_3235A8,byte_32362A-off_3235A8,byte_323656-off_3235A8; 3 dc.w byte_323688-off_3235A8 ; 6 byte_3235B6: dc.b 0, 3, $30, 3, 0, 0, -1, -4, $50, 3; 0 ; ... dc.b 0, 0, -1, -4, $70, 9, 0, 4, -1, -$C; 10 byte_3235CA: dc.b 0, 4, $10, 3, 0, 0, -1, -4, $30, 3; 0 ; ... dc.b 0, 0, -1, -4, $50, 3, 0, 0, -1, -4; 10 dc.b $70, 9, 0, 4, -1, -$C; 20 byte_3235E4: dc.b 0, 5,-$10, 3, 0, 0, -1, -4, $10, 3; 0 ; ... dc.b 0, 0, -1, -4, $30, 3, 0, 0, -1, -4; 10 dc.b $50, 3, 0, 0, -1, -4, $70, 9, 0, 4; 20 dc.b -1, -$C ; 30 byte_323604: dc.b 0, 6,-$30, 3, 0, 0, -1, -4,-$10, 3; 0 ; ... dc.b 0, 0, -1, -4, $10, 3, 0, 0, -1, -4; 10 dc.b $30, 3, 0, 0, -1, -4, $50, 3, 0, 0; 20 dc.b -1, -4, $70, 9, 0, 4, -1, -$C; 30 byte_32362A: dc.b 0, 7,-$50, 3, 0, 0, -1, -4,-$30, 3; 0 ; ... dc.b 0, 0, -1, -4,-$10, 3, 0, 0, -1, -4; 10 dc.b $10, 3, 0, 0, -1, -4, $30, 3, 0, 0; 20 dc.b -1, -4, $50, 3, 0, 0, -1, -4, $70, 9; 30 dc.b 0, 4, -1, -$C ; 40 byte_323656: dc.b 0, 8,-$70, 3, 0, 0, -1, -4,-$50, 3; 0 ; ... dc.b 0, 0, -1, -4,-$30, 3, 0, 0, -1, -4; 10 dc.b -$10, 3, 0, 0, -1, -4, $10, 3, 0, 0; 20 dc.b -1, -4, $30, 3, 0, 0, -1, -4, $50, 3; 30 dc.b 0, 0, -1, -4, $70, 9, 0, 4, -1, -$C; 40 byte_323688: dc.b 0, 9,-$80, 1, 0, 2, -1, -4,-$70, 3; 0 ; ... dc.b 0, 0, -1, -4,-$50, 3, 0, 0, -1, -4; 10 dc.b -$30, 3, 0, 0, -1, -4,-$10, 3, 0, 0; 20 dc.b -1, -4, $10, 3, 0, 0, -1, -4, $30, 3; 30 dc.b 0, 0, -1, -4, $50, 3, 0, 0, -1, -4; 40 dc.b $70, 9, 0, 4, -1, -$C; 50 off_3236C0: dc.w byte_3236DA-off_3236C0,byte_3236E8-off_3236C0,byte_3236F6-off_3236C0; 0 ; ... dc.w byte_32370A-off_3236C0,byte_32371E-off_3236C0,byte_323738-off_3236C0; 3 dc.w byte_323752-off_3236C0,byte_323772-off_3236C0,byte_323792-off_3236C0; 6 dc.w byte_3237B8-off_3236C0,byte_3237DE-off_3236C0,byte_32380A-off_3236C0; 9 dc.w byte_323836-off_3236C0 ; 12 byte_3236DA: dc.b 0, 2, $50, 1, 0, 0, -1, -4, $60, $B; 0 ; ... dc.b 0, 4, -1, -$C ; 10 byte_3236E8: dc.b 0, 2, $40, 3, 0, 0, -1, -4, $60, $B; 0 ; ... dc.b 0, 4, -1, -$C ; 10 byte_3236F6: dc.b 0, 3, $30, 1, 0, 0, -1, -4, $40, 3; 0 ; ... dc.b 0, 0, -1, -4, $60, $B, 0, 4, -1, -$C; 10 byte_32370A: dc.b 0, 3, $20, 3, 0, 0, -1, -4, $40, 3; 0 ; ... dc.b 0, 0, -1, -4, $60, $B, 0, 4, -1, -$C; 10 byte_32371E: dc.b 0, 4, $10, 1, 0, 0, -1, -4, $20, 3; 0 ; ... dc.b 0, 0, -1, -4, $40, 3, 0, 0, -1, -4; 10 dc.b $60, $B, 0, 4, -1, -$C; 20 byte_323738: dc.b 0, 4, 0, 3, 0, 0, -1, -4, $20, 3; 0 ; ... dc.b 0, 0, -1, -4, $40, 3, 0, 0, -1, -4; 10 dc.b $60, $B, 0, 4, -1, -$C; 20 byte_323752: dc.b 0, 5,-$10, 1, 0, 0, -1, -4, 0, 3; 0 ; ... dc.b 0, 0, -1, -4, $20, 3, 0, 0, -1, -4; 10 dc.b $40, 3, 0, 0, -1, -4, $60, $B, 0, 4; 20 dc.b -1, -$C ; 30 byte_323772: dc.b 0, 5,-$20, 3, 0, 0, -1, -4, 0, 3; 0 ; ... dc.b 0, 0, -1, -4, $20, 3, 0, 0, -1, -4; 10 dc.b $40, 3, 0, 0, -1, -4, $60, $B, 0, 4; 20 dc.b -1, -$C ; 30 byte_323792: dc.b 0, 6,-$30, 1, 0, 0, -1, -4,-$20, 3; 0 ; ... dc.b 0, 0, -1, -4, 0, 3, 0, 0, -1, -4; 10 dc.b $20, 3, 0, 0, -1, -4, $40, 3, 0, 0; 20 dc.b -1, -4, $60, $B, 0, 4, -1, -$C; 30 byte_3237B8: dc.b 0, 6,-$40, 3, 0, 0, -1, -4,-$20, 3; 0 ; ... dc.b 0, 0, -1, -4, 0, 3, 0, 0, -1, -4; 10 dc.b $20, 3, 0, 0, -1, -4, $40, 3, 0, 0; 20 dc.b -1, -4, $60, $B, 0, 4, -1, -$C; 30 byte_3237DE: dc.b 0, 7,-$50, 1, 0, 0, -1, -4,-$40, 3; 0 ; ... dc.b 0, 0, -1, -4,-$20, 3, 0, 0, -1, -4; 10 dc.b 0, 3, 0, 0, -1, -4, $20, 3, 0, 0; 20 dc.b -1, -4, $40, 3, 0, 0, -1, -4, $60, $B; 30 dc.b 0, 4, -1, -$C ; 40 byte_32380A: dc.b 0, 7,-$60, 3, 0, 0, -1, -4,-$40, 3; 0 ; ... dc.b 0, 0, -1, -4,-$20, 3, 0, 0, -1, -4; 10 dc.b 0, 3, 0, 0, -1, -4, $20, 3, 0, 0; 20 dc.b -1, -4, $40, 3, 0, 0, -1, -4, $60, $B; 30 dc.b 0, 4, -1, -$C ; 40 byte_323836: dc.b 0, 8,-$70, 1, 0, 0, -1, -4,-$60, 3; 0 ; ... dc.b 0, 0, -1, -4,-$40, 3, 0, 0, -1, -4; 10 dc.b -$20, 3, 0, 0, -1, -4, 0, 3, 0, 0; 20 dc.b -1, -4, $20, 3, 0, 0, -1, -4, $40, 3; 30 dc.b 0, 0, -1, -4, $60, $B, 0, 4, -1, -$C; 40 ; --------------------------------------------------------------------------- Obj81: ; ... btst #6,1(a0) bne.w loc_323880 moveq #0,d0 move.b $24(a0),d0 move.w off_32388A(pc,d0.w),d1 jmp off_32388A(pc,d1.w) ; --------------------------------------------------------------------------- loc_323880: ; ... move.w #$280,d0 jmp loc_312DBC ; --------------------------------------------------------------------------- off_32388A: dc.w loc_323890-off_32388A,loc_32396C-off_32388A,loc_3239F8-off_32388A; 0 ; ... ; --------------------------------------------------------------------------- loc_323890: ; ... addq.b #2,$24(a0) move.l #Map_Obj81,4(a0) move.w #$643C,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #5,$18(a0) move.b #8,$19(a0) or.b #$80,$22(a0) move.w 8(a0),$30(a0) move.w $C(a0),$32(a0) sub.w #$48,$C(a0) move.b #$C0,$26(a0) moveq #$FFFFFFF0,d4 btst #1,$22(a0) beq.s loc_3238F0 add.w #$90,$C(a0) move.b #$40,$26(a0) neg.w d4 loc_3238F0: ; ... move.w #$100,d1 btst #0,$22(a0) beq.s loc_3238FE neg.w d1 loc_3238FE: ; ... move.w d1,$34(a0) jsr SingleObjLoad2 bne.s loc_32396C move.b 0(a0),0(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.b #4,1(a1) bset #6,1(a1) move.b #$40,$E(a1) move.w $30(a0),d2 move.w $32(a0),d3 moveq #8,d1 move.b d1,$F(a1) subq.w #1,d1 lea $10(a1),a2 loc_323942: ; ... add.w d4,d3 move.w d2,(a2)+ move.w d3,(a2)+ move.w #1,(a2)+ dbf d1,loc_323942 move.w $28(a1),8(a1) move.w $2A(a1),$C(a1) move.l a1,$3C(a0) move.b #$40,$14(a1) bset #4,1(a1) loc_32396C: ; ... lea ($FFFFF7E0).w,a2 moveq #0,d0 move.b $28(a0),d0 btst #0,(a2,d0.w) beq.s loc_3239A8 tst.b $36(a0) bne.s loc_3239A8 move.b #1,$36(a0) move.w #$E7,d0 jsr PlaySoundStereo cmp.b #$81,$22(a0) bne.s loc_3239A8 move.w $30(a0),8(a0) sub.w #$48,8(a0) loc_3239A8: ; ... tst.b $36(a0) beq.s loc_3239F6 move.w #$48,d1 tst.b $26(a0) beq.s loc_3239C2 cmp.b #$80,$26(a0) bne.s loc_3239EE neg.w d1 loc_3239C2: ; ... move.w $32(a0),$C(a0) move.w $30(a0),8(a0) add.w d1,8(a0) move.b #$40,$19(a0) move.b #0,$36(a0) move.w #$E9,d0 jsr PlaySound addq.b #2,$24(a0) bra.s loc_3239F6 ; --------------------------------------------------------------------------- loc_3239EE: ; ... move.w $34(a0),d0 add.w d0,$26(a0) loc_3239F6: ; ... bsr.s sub_323A62 loc_3239F8: ; ... move.w #$13,d1 move.w #$40,d2 move.w #$41,d3 move.b $26(a0),d0 beq.s loc_323A16 cmp.b #$40,d0 beq.s loc_323A22 cmp.b #$C0,d0 bcc.s loc_323A22 loc_323A16: ; ... move.w #$4B,d1 move.w #8,d2 move.w #9,d3 loc_323A22: ; ... move.w 8(a0),d4 jsr SolidObject tst.w ($FFFFFFDC).w beq.s loc_323A38 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_323A38: ; ... move.w $30(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_323A52 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_323A52: ; ... move.l $3C(a0),a1 jsr DeleteObject2 jmp DeleteObject ; =============== S U B R O U T I N E ======================================= sub_323A62: ; ... tst.b $36(a0) beq.s return_323AC6 moveq #0,d0 moveq #0,d1 move.b $26(a0),d0 jsr CalcSine move.w $32(a0),d2 move.w $30(a0),d3 moveq #0,d6 move.l $3C(a0),a1 move.b $F(a1),d6 subq.w #1,d6 bcs.s return_323AC6 swap d0 swap d1 asr.l #4,d0 asr.l #4,d1 move.l d0,d4 move.l d1,d5 lea $10(a1),a2 loc_323A9C: ; ... movem.l d4-d5,-(sp) swap d4 swap d5 add.w d2,d4 add.w d3,d5 move.w d5,(a2)+ move.w d4,(a2)+ movem.l (sp)+,d4-d5 add.l d0,d4 add.l d1,d5 addq.w #2,a2 dbf d6,loc_323A9C move.w $28(a1),8(a1) move.w $2A(a1),$C(a1) return_323AC6: ; ... rts ; End of function sub_323A62 ; --------------------------------------------------------------------------- Map_Obj81: dc.w byte_323ACC-Map_Obj81,byte_323ACE-Map_Obj81; 0 ; ... byte_323ACC: dc.b 0, 0 ; 0 ; ... byte_323ACE: dc.b 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- Obj82: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_323AE4(pc,d0.w),d1 jmp off_323AE4(pc,d1.w) ; --------------------------------------------------------------------------- off_323AE4: dc.w loc_323AF0-off_323AE4,loc_323B5A-off_323AE4; 0 ; ... unk_323AE8: dc.b $20 dc.b 8 dc.b $1C dc.b $30 ; 0 dc.b $10 dc.b $10 dc.b $10 dc.b $10 ; --------------------------------------------------------------------------- loc_323AF0: ; ... addq.b #2,$24(a0) move.l #Map_Obj82,4(a0) move.w #0,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #3,$18(a0) moveq #0,d0 move.b $28(a0),d0 lsr.w #3,d0 and.w #$E,d0 lea unk_323AE8(pc,d0.w),a2 move.b (a2)+,$19(a0) move.b (a2),$16(a0) lsr.w #1,d0 move.b d0,$1A(a0) move.w 8(a0),$34(a0) move.w $C(a0),$30(a0) move.b $28(a0),d0 and.b #$F,d0 beq.s loc_323B54 cmp.b #7,d0 beq.s loc_323B54 move.b #1,$38(a0) loc_323B54: ; ... and.b #$F,$28(a0) loc_323B5A: ; ... move.w 8(a0),-(sp) moveq #0,d0 move.b $28(a0),d0 add.w d0,d0 move.w off_323BA4(pc,d0.w),d1 jsr off_323BA4(pc,d1.w) move.w (sp)+,d4 tst.b 1(a0) bpl.s loc_323B9A moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 moveq #0,d2 move.b $16(a0),d2 move.w d2,d3 addq.w #1,d3 jsr SolidObject swap d6 move.b d6,$3F(a0) bsr.w sub_323C8A loc_323B9A: ; ... move.w $34(a0),d0 jmp MarkObjGone2 ; --------------------------------------------------------------------------- off_323BA4: dc.w return_323BB4-off_323BA4,loc_323BB6-off_323BA4,loc_323BDE-off_323BA4; 0 ; ... dc.w loc_323BB6-off_323BA4,loc_323C06-off_323BA4,loc_323C2C-off_323BA4; 3 dc.w loc_323BDE-off_323BA4,loc_323C40-off_323BA4; 6 ; --------------------------------------------------------------------------- return_323BB4: ; ... rts ; --------------------------------------------------------------------------- loc_323BB6: ; ... tst.w $36(a0) bne.s loc_323BCE move.b $22(a0),d0 and.b #$18,d0 beq.s return_323BCC move.w #$1E,$36(a0) return_323BCC: ; ... rts ; --------------------------------------------------------------------------- loc_323BCE: ; ... subq.w #1,$36(a0) bne.s return_323BCC addq.b #1,$28(a0) clr.b $38(a0) rts ; --------------------------------------------------------------------------- loc_323BDE: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #8,$12(a0) jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.w return_323C04 addq.w #1,d1 add.w d1,$C(a0) clr.w $12(a0) clr.b $28(a0) return_323C04: ; ... rts ; --------------------------------------------------------------------------- loc_323C06: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 sub.w #8,$12(a0) jsr ObjCheckCeilingDist ; Also known as ObjHitCeiling in S1 tst.w d1 bpl.w return_323C2A sub.w d1,$C(a0) clr.w $12(a0) clr.b $28(a0) return_323C2A: ; ... rts ; --------------------------------------------------------------------------- loc_323C2C: ; ... move.b $3F(a0),d0 and.b #3,d0 beq.s return_323C3E addq.b #1,$28(a0) clr.b $38(a0) return_323C3E: ; ... rts ; --------------------------------------------------------------------------- loc_323C40: ; ... move.w ($FFFFF646).w,d0 sub.w $C(a0),d0 beq.s return_323C88 bcc.s loc_323C6A cmp.w #$FFFE,d0 bge.s loc_323C54 moveq #$FFFFFFFE,d0 loc_323C54: ; ... add.w d0,$C(a0) jsr ObjCheckCeilingDist ; Also known as ObjHitCeiling in S1 tst.w d1 bpl.w return_323C68 sub.w d1,$C(a0) return_323C68: ; ... rts ; --------------------------------------------------------------------------- loc_323C6A: ; ... cmp.w #2,d0 ble.s loc_323C72 moveq #2,d0 loc_323C72: ; ... add.w d0,$C(a0) jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.w return_323C88 addq.w #1,d1 add.w d1,$C(a0) return_323C88: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_323C8A: ; ... tst.b $38(a0) beq.s return_323CCC move.b $22(a0),d0 and.b #$18,d0 bne.s loc_323CA6 tst.b $3E(a0) beq.s return_323CCC subq.b #4,$3E(a0) bra.s loc_323CB2 ; --------------------------------------------------------------------------- loc_323CA6: ; ... cmp.b #$40,$3E(a0) beq.s return_323CCC addq.b #4,$3E(a0) loc_323CB2: ; ... move.b $3E(a0),d0 jsr CalcSine move.w #$400,d1 muls.w d1,d0 swap d0 add.w $30(a0),d0 move.w d0,$C(a0) return_323CCC: ; ... rts ; End of function sub_323C8A ; --------------------------------------------------------------------------- Map_Obj82: dc.w byte_323CD2-Map_Obj82,byte_323CE0-Map_Obj82; 0 ; ... byte_323CD2: dc.b 0, 2, -8, $D, $60, $55, -1,-$20, -8, $D; 0 ; ... dc.b $60, $55, 0, 0 ; 10 byte_323CE0: dc.b 0, 9,-$30, 5, $20, $5D, -1,-$20,-$30, 5; 0 ; ... dc.b $28, $5D, 0, $10,-$30, $D, $20, $61, -1,-$10; 10 dc.b -$20, $D, $20, $69, -1,-$10,-$10, $D, $20, $69; 20 dc.b -1,-$10, 0, $D, $20, $71, -1,-$10, $10, $D; 30 dc.b $20, $69, -1,-$10, $20, $D, $20, $79, -1,-$10; 40 dc.b $30, 4, $20,-$7F, -1,-$10; 50 ; --------------------------------------------------------------------------- Obj83: ; ... btst #6,1(a0) bne.w loc_323D30 moveq #0,d0 move.b $24(a0),d0 move.w off_323D3A(pc,d0.w),d1 jmp off_323D3A(pc,d1.w) ; --------------------------------------------------------------------------- loc_323D30: ; ... move.w #$280,d0 jmp loc_312DBC ; --------------------------------------------------------------------------- off_323D3A: dc.w loc_323D40-off_323D3A,loc_323E44-off_323D3A,loc_323F82-off_323D3A; 0 ; ... ; --------------------------------------------------------------------------- loc_323D40: ; ... addq.b #2,$24(a0) move.l #Map_Obj15_Obj83,4(a0) move.w #0,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #4,$18(a0) move.b #$20,$19(a0) move.w 8(a0),$30(a0) move.w $C(a0),$32(a0) move.b $28(a0),d1 move.b d1,d0 and.w #$F,d1 and.b #$F0,d0 ext.w d0 asl.w #3,d0 move.w d0,$2E(a0) move.b $22(a0),d0 ror.b #2,d0 and.b #$C0,d0 move.b d0,$26(a0) jsr SingleObjLoad2 bne.s loc_323DFE move.b 0(a0),0(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.b #4,1(a1) bset #6,1(a1) move.b #$40,$E(a1) moveq #8,d1 move.b d1,$F(a1) subq.w #1,d1 lea $10(a1),a2 loc_323DD2: ; ... addq.w #4,a2 move.w #1,(a2)+ dbf d1,loc_323DD2 move.b #1,$B(a1) move.b #$40,$14(a1) bset #4,1(a1) move.l a1,$34(a0) bsr.s sub_323E00 move.l a1,$38(a0) bsr.s sub_323E00 move.l a1,$3C(a0) loc_323DFE: ; ... bra.s loc_323E44 ; =============== S U B R O U T I N E ======================================= sub_323E00: ; ... jsr SingleObjLoad2 bne.s return_323E42 addq.b #4,$24(a1) move.b 0(a0),0(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.b #4,1(a1) move.b #4,$18(a1) move.b #$20,$19(a1) move.w 8(a0),$30(a1) move.w $C(a0),$32(a1) move.w 8(a0),$2C(a1) return_323E42: ; ... rts ; End of function sub_323E00 ; --------------------------------------------------------------------------- loc_323E44: ; ... move.w 8(a0),-(sp) moveq #0,d0 moveq #0,d1 move.w $2E(a0),d0 add.w d0,$26(a0) move.w $32(a0),d2 move.w $30(a0),d3 moveq #0,d6 move.l $34(a0),a1 lea $10(a1),a2 move.b $26(a0),d0 jsr CalcSine swap d0 swap d1 asr.l #4,d0 asr.l #4,d1 move.l d0,d4 move.l d1,d5 swap d4 swap d5 add.w d2,d4 add.w d3,d5 move.w d5,8(a1) move.w d4,$C(a1) move.l d0,d4 move.l d1,d5 add.l d0,d4 add.l d1,d5 moveq #1,d6 bsr.w sub_323F62 swap d4 swap d5 add.w d2,d4 add.w d3,d5 move.w d5,8(a0) move.w d4,$C(a0) move.b $26(a0),d0 add.b #$55,d0 jsr CalcSine swap d0 swap d1 asr.l #4,d0 asr.l #4,d1 move.l d0,d4 move.l d1,d5 moveq #2,d6 bsr.w sub_323F62 swap d4 swap d5 add.w d2,d4 add.w d3,d5 move.l $38(a0),a1 move.w d5,8(a1) move.w d4,$C(a1) move.b $26(a0),d0 sub.b #$55,d0 jsr CalcSine swap d0 swap d1 asr.l #4,d0 asr.l #4,d1 move.l d0,d4 move.l d1,d5 moveq #2,d6 bsr.w sub_323F62 swap d4 swap d5 add.w d2,d4 add.w d3,d5 move.l $3C(a0),a1 move.w d5,8(a1) move.w d4,$C(a1) moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 move.w #8,d2 move.w #9,d3 move.w (sp)+,d4 jsr PlatformObject tst.w ($FFFFFFDC).w beq.s loc_323F38 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_323F38: ; ... move.w $30(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_323F52 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_323F52: ; ... move.l $34(a0),a1 jsr DeleteObject2 jmp DeleteObject ; =============== S U B R O U T I N E ======================================= sub_323F62: ; ... movem.l d4-d5,-(sp) swap d4 swap d5 add.w d2,d4 add.w d3,d5 move.w d5,(a2)+ move.w d4,(a2)+ movem.l (sp)+,d4-d5 add.l d0,d4 add.l d1,d5 addq.w #2,a2 dbf d6,sub_323F62 rts ; End of function sub_323F62 ; --------------------------------------------------------------------------- loc_323F82: ; ... moveq #0,d1 move.b $19(a0),d1 add.w #$B,d1 move.w #8,d2 move.w #9,d3 move.w $2C(a0),d4 jsr PlatformObject move.w 8(a0),$2C(a0) move.w $30(a0),d0 jmp MarkObjGone2 ; --------------------------------------------------------------------------- Obj3F: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_323FBC(pc,d0.w),d1 jmp off_323FBC(pc,d1.w) ; --------------------------------------------------------------------------- off_323FBC: dc.w loc_323FC2-off_323FBC,loc_324002-off_323FBC,loc_324100-off_323FBC; 0 ; ... ; --------------------------------------------------------------------------- loc_323FC2: ; ... addq.b #2,$24(a0) move.l #Map_Obj3F,4(a0) move.w #$6403,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) tst.b $28(a0) bpl.s loc_324002 addq.b #2,$24(a0) move.l #Map_Obj3F_0,4(a0) bra.w loc_324100 ; --------------------------------------------------------------------------- loc_324002: ; ... btst #1,$28(a0) bne.s loc_32402A subq.w #1,$30(a0) bpl.s loc_32402A move.w #0,$34(a0) move.w #$78,$30(a0) bchg #0,$32(a0) beq.s loc_32402A move.w #$B4,$30(a0) loc_32402A: ; ... tst.b $32(a0) beq.w loc_32404E subq.b #1,$1E(a0) bpl.s loc_324090 cmp.w #$400,$34(a0) bcc.s loc_324090 add.w #$2A,$34(a0) move.b $34(a0),$1E(a0) bra.s loc_32406A ; --------------------------------------------------------------------------- loc_32404E: ; ... lea ($FFFFB000).w,a1 bsr.w sub_324096 lea ($FFFFB040).w,a1 bsr.w sub_324096 subq.b #1,$1E(a0) bpl.s loc_324090 move.b #0,$1E(a0) loc_32406A: ; ... addq.b #1,$1B(a0) cmp.b #6,$1B(a0) bcs.s loc_32407C move.b #0,$1B(a0) loc_32407C: ; ... moveq #0,d0 btst #0,$28(a0) beq.s loc_324088 moveq #5,d0 loc_324088: ; ... add.b $1B(a0),d0 move.b d0,$1A(a0) loc_324090: ; ... jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_324096: ; ... cmp.b #4,$24(a1) bcc.s return_3240FE tst.b $2A(a1) bne.s return_3240FE move.w 8(a1),d0 sub.w 8(a0),d0 btst #0,$22(a0) bne.s loc_3240B6 neg.w d0 loc_3240B6: ; ... add.w #$50,d0 cmp.w #$F0,d0 bcc.s return_3240FE move.w $C(a1),d1 add.w #$60,d1 sub.w $C(a0),d1 bcs.s return_3240FE cmp.w #$70,d1 bcc.s return_3240FE sub.w #$50,d0 bcc.s loc_3240DE not.w d0 add.w d0,d0 loc_3240DE: ; ... add.w #$60,d0 btst #0,$22(a0) bne.s loc_3240EC neg.w d0 loc_3240EC: ; ... neg.b d0 asr.w #4,d0 btst #0,$28(a0) beq.s loc_3240FA neg.w d0 loc_3240FA: ; ... add.w d0,8(a1) return_3240FE: ; ... rts ; End of function sub_324096 ; --------------------------------------------------------------------------- loc_324100: ; ... btst #1,$28(a0) bne.s loc_324128 subq.w #1,$30(a0) bpl.s loc_324128 move.w #0,$34(a0) move.w #$78,$30(a0) bchg #0,$32(a0) beq.s loc_324128 move.w #$B4,$30(a0) loc_324128: ; ... tst.b $32(a0) beq.w loc_32414C subq.b #1,$1E(a0) bpl.s loc_32418E cmp.w #$400,$34(a0) bcc.s loc_32418E add.w #$2A,$34(a0) move.b $34(a0),$1E(a0) bra.s loc_324168 ; --------------------------------------------------------------------------- loc_32414C: ; ... lea ($FFFFB000).w,a1 bsr.w sub_324194 lea ($FFFFB040).w,a1 bsr.w sub_324194 subq.b #1,$1E(a0) bpl.s loc_32418E move.b #0,$1E(a0) loc_324168: ; ... addq.b #1,$1B(a0) cmp.b #6,$1B(a0) bcs.s loc_32417A move.b #0,$1B(a0) loc_32417A: ; ... moveq #0,d0 btst #0,$28(a0) beq.s loc_324186 moveq #5,d0 loc_324186: ; ... add.b $1B(a0),d0 move.b d0,$1A(a0) loc_32418E: ; ... jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_324194: ; ... cmp.b #4,$24(a1) bcc.s return_32421A tst.b $2A(a1) bne.s return_32421A move.w 8(a1),d0 sub.w 8(a0),d0 add.w #$40,d0 cmp.w #$80,d0 bcc.s return_32421A moveq #0,d1 move.b ($FFFFFE74).w,d1 add.w $C(a1),d1 add.w #$60,d1 sub.w $C(a0),d1 bcs.s return_32421A cmp.w #$90,d1 bcc.s return_32421A sub.w #$60,d1 bcs.s loc_3241D8 not.w d1 add.w d1,d1 loc_3241D8: ; ... add.w #$60,d1 neg.w d1 asr.w #4,d1 add.w d1,$C(a1) bset #1,$22(a1) move.b #0,$21(a1) move.w #0,$12(a1) move.w #1,$14(a1) tst.b $27(a1) bne.s return_32421A move.b #1,$27(a1) move.b #0,$1C(a1) move.b #$7F,$2C(a1) move.b #8,$2D(a1) return_32421A: ; ... rts ; End of function sub_324194 ; --------------------------------------------------------------------------- Map_Obj3F: dc.w byte_324232-Map_Obj3F,byte_324246-Map_Obj3F,byte_32425A-Map_Obj3F; 0 ; ... dc.w byte_32426E-Map_Obj3F,byte_324282-Map_Obj3F,byte_324296-Map_Obj3F; 3 dc.w byte_324282-Map_Obj3F,byte_32426E-Map_Obj3F,byte_32425A-Map_Obj3F; 6 dc.w byte_324246-Map_Obj3F,byte_324232-Map_Obj3F; 9 byte_324232: dc.b 0, 3, -$D, 2, 0, 0, -1, -$C,-$10, 5; 0 ; ... dc.b 0, 7, -1, -4, 0, 5, $10, 7, -1, -4; 10 byte_324246: dc.b 0, 3, -$B, 2, $10, 0, -1, -$C,-$10, 5; 0 ; ... dc.b 0, 7, -1, -4, 0, 5, $10, 7, -1, -4; 10 byte_32425A: dc.b 0, 3,-$10, 3, 0, 3, -1, -$C,-$10, 5; 0 ; ... dc.b 0, 7, -1, -4, 0, 5, $10, 7, -1, -4; 10 byte_32426E: dc.b 0, 3, -$D, 2, 0, 0, -1, -$C,-$10, 5; 0 ; ... dc.b 0, $B, -1, -4, 0, 5, $10, $B, -1, -4; 10 byte_324282: dc.b 0, 3, -$B, 2, $10, 0, -1, -$C,-$10, 5; 0 ; ... dc.b 0, $B, -1, -4, 0, 5, $10, $B, -1, -4; 10 byte_324296: dc.b 0, 3,-$10, 3, 0, 3, -1, -$C,-$10, 5; 0 ; ... dc.b 0, $B, -1, -4, 0, 5, $10, $B, -1, -4; 10 Map_Obj3F_0: dc.w byte_3242C0-Map_Obj3F_0,byte_3242D4-Map_Obj3F_0,byte_3242E8-Map_Obj3F_0; 0 ; ... dc.w byte_3242FC-Map_Obj3F_0,byte_324310-Map_Obj3F_0,byte_324324-Map_Obj3F_0; 3 dc.w byte_324310-Map_Obj3F_0,byte_3242FC-Map_Obj3F_0,byte_3242E8-Map_Obj3F_0; 6 dc.w byte_3242D4-Map_Obj3F_0,byte_3242C0-Map_Obj3F_0; 9 byte_3242C0: dc.b 0, 3, -$C, 8, 0, $F, -1, -$D, -4, 5; 0 ; ... dc.b 0, $16, -1,-$10, -4, 5, 8, $16, 0, 0; 10 byte_3242D4: dc.b 0, 3, -$C, 8, 8, $F, -1, -$B, -4, 5; 0 ; ... dc.b 0, $16, -1,-$10, -4, 5, 8, $16, 0, 0; 10 byte_3242E8: dc.b 0, 3, -$C, $C, 0, $12, -1,-$10, -4, 5; 0 ; ... dc.b 0, $16, -1,-$10, -4, 5, 8, $16, 0, 0; 10 byte_3242FC: dc.b 0, 3, -$C, 8, 0, $F, -1, -$D, -4, 5; 0 ; ... dc.b 0, $1A, -1,-$10, -4, 5, 8, $1A, 0, 0; 10 byte_324310: dc.b 0, 3, -$C, 8, 8, $F, -1, -$B, -4, 5; 0 ; ... dc.b 0, $1A, -1,-$10, -4, 5, 8, $1A, 0, 0; 10 byte_324324: dc.b 0, 3, -$C, $C, 0, $12, -1,-$10, -4, 5; 0 ; ... dc.b 0, $1A, -1,-$10, -4, 5, 8, $1A, 0, 0; 10 ; --------------------------------------------------------------------------- Obj85: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_324388(pc,d0.w),d1 jsr off_324388(pc,d1.w) move.w #$200,d0 tst.w ($FFFFFFDC).w beq.s loc_324356 jmp loc_312DBC ; --------------------------------------------------------------------------- loc_324356: ; ... move.w 8(a0),d1 and.w #$FF80,d1 sub.w ($FFFFF7DA).w,d1 cmp.w #$280,d1 bhi.w loc_324370 jmp loc_312DBC ; --------------------------------------------------------------------------- loc_324370: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_324382 bclr #7,2(a2,d0.w) loc_324382: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- off_324388: dc.w loc_32438E-off_324388,loc_324440-off_324388,loc_324614-off_324388; 0 ; ... ; --------------------------------------------------------------------------- loc_32438E: ; ... addq.b #2,$24(a0) move.l #Map_Obj85,4(a0) move.w #$422,2(a0) tst.b $28(a0) beq.s loc_3243B4 move.l #Map_Obj85_0,4(a0) move.w #$402,2(a0) loc_3243B4: ; ... jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) bset #6,1(a0) move.b #1,$B(a0) tst.b $28(a0) beq.s loc_324410 addq.b #2,$24(a0) move.b #$20,$E(a0) move.b #$18,$19(a0) move.w 8(a0),$2E(a0) move.w $C(a0),$34(a0) move.w 8(a0),d2 move.w $C(a0),d3 add.w #0,d3 move.b #1,$F(a0) lea $10(a0),a2 move.w d2,(a2)+ move.w d3,(a2)+ move.w #2,(a2)+ bra.w loc_324614 ; --------------------------------------------------------------------------- loc_324410: ; ... move.b #$18,$E(a0) move.b #$18,$19(a0) move.w $C(a0),$34(a0) move.w 8(a0),d2 move.w $C(a0),d3 add.w #$20,d3 move.b #1,$F(a0) lea $10(a0),a2 move.w d2,(a2)+ move.w d3,(a2)+ move.w #2,(a2)+ loc_324440: ; ... move.b #0,$3A(a0) move.w $34(a0),d0 add.w $38(a0),d0 move.w d0,$C(a0) move.b #2,$15(a0) cmp.w #$10,$38(a0) bcs.s loc_324466 move.b #3,$15(a0) loc_324466: ; ... move.w #$23,d1 move.w #$20,d2 move.w #$1D,d3 move.w 8(a0),d4 lea $36(a0),a2 lea ($FFFFB000).w,a1 move.w ($FFFFF602).w,d5 moveq #3,d6 movem.l d1-d4,-(sp) bsr.s sub_3244E2 movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 addq.w #1,a2 move.w ($FFFFF606).w,d5 moveq #4,d6 bsr.s sub_3244E2 tst.w $36(a0) beq.s loc_3244D0 tst.w $38(a0) beq.s return_3244E0 moveq #0,d0 cmp.b #1,$36(a0) bne.s loc_3244B6 or.w ($FFFFF602).w,d0 loc_3244B6: ; ... cmp.b #1,$37(a0) bne.s loc_3244C2 or.w ($FFFFF606).w,d0 loc_3244C2: ; ... and.w #$7000,d0 bne.s return_3244E0 move.w #$202,$36(a0) rts ; --------------------------------------------------------------------------- loc_3244D0: ; ... move.b #1,$B(a0) subq.w #4,$38(a0) bcc.s return_3244E0 clr.w $38(a0) return_3244E0: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_3244E2: ; ... move.b (a2),d0 bne.s loc_324538 loc_3244E6: ; ... tst.w ($FFFFFE08).w bne.s return_324536 tst.w $12(a1) bmi.s return_324536 jsr loc_314C04 btst d6,$22(a0) beq.s return_324536 move.b #$81,$2A(a1) move.w 8(a0),8(a1) move.w #0,$10(a1) move.w #0,$12(a1) move.w #0,$14(a1) bset #2,$22(a1) move.b #$E,$16(a1) move.b #7,$17(a1) move.b #2,$1C(a1) addq.b #1,(a2) return_324536: ; ... rts ; --------------------------------------------------------------------------- loc_324538: ; ... cmp.b #4,$24(a1) bcc.s return_324536 subq.b #1,d0 bne.w loc_3245CA tst.b 1(a1) bmi.s loc_32456E bclr d6,$22(a0) bset #1,$22(a1) bclr #3,$22(a1) move.b #2,$24(a1) move.b #0,$2A(a1) move.b #0,(a2) rts ; --------------------------------------------------------------------------- loc_32456E: ; ... and.w #$7000,d5 beq.s loc_3245BC tst.b $3A(a0) bne.s loc_3245BC move.b #1,$3A(a0) subq.b #1,$32(a0) bpl.s loc_324598 move.b #3,$32(a0) cmp.w #$20,$38(a0) beq.s loc_324598 addq.w #1,$38(a0) loc_324598: ; ... subq.b #1,$33(a0) bpl.s loc_3245B6 move.w $38(a0),d0 sub.w #$20,d0 neg.w d0 lsr.w #1,d0 move.b d0,$33(a0) bchg #2,$B(a0) bra.s loc_3245BC ; --------------------------------------------------------------------------- loc_3245B6: ; ... move.b #1,$B(a0) loc_3245BC: ; ... move.w $C(a0),d0 sub.w #$2E,d0 move.w d0,$C(a1) rts ; --------------------------------------------------------------------------- loc_3245CA: ; ... move.b #0,(a2) bclr d6,$22(a0) beq.w loc_3244E6 move.w $38(a0),d0 add.w #$10,d0 lsl.w #7,d0 neg.w d0 move.w d0,$12(a1) move.w #0,$10(a1) move.w #$800,$14(a1) bset #1,$22(a1) bclr #3,$22(a1) move.b #2,$24(a1) move.b #0,$2A(a1) move.w #$E2,d0 jmp PlaySound ; End of function sub_3244E2 ; --------------------------------------------------------------------------- loc_324614: ; ... move.b #0,$3A(a0) move.w $38(a0),d1 lsr.w #1,d1 move.w $2E(a0),d0 sub.w d1,d0 move.w d0,8(a0) move.w $34(a0),d0 add.w d1,d0 move.w d0,$C(a0) move.b #2,$15(a0) cmp.w #$10,$38(a0) bcs.s loc_324648 move.b #3,$15(a0) loc_324648: ; ... move.w #$23,d1 move.w #8,d2 move.w #5,d3 move.w 8(a0),d4 lea $36(a0),a2 lea ($FFFFB000).w,a1 move.w ($FFFFF602).w,d5 moveq #3,d6 movem.l d1-d4,-(sp) bsr.s sub_3246C4 movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 addq.w #1,a2 move.w ($FFFFF606).w,d5 moveq #4,d6 bsr.s sub_3246C4 tst.w $36(a0) beq.s loc_3246B2 tst.w $38(a0) beq.s return_3246C2 moveq #0,d0 cmp.b #1,$36(a0) bne.s loc_324698 or.w ($FFFFF602).w,d0 loc_324698: ; ... cmp.b #1,$37(a0) bne.s loc_3246A4 or.w ($FFFFF606).w,d0 loc_3246A4: ; ... and.w #$7000,d0 bne.s return_3246C2 move.w #$202,$36(a0) rts ; --------------------------------------------------------------------------- loc_3246B2: ; ... move.b #1,$B(a0) subq.w #4,$38(a0) bcc.s return_3246C2 clr.w $38(a0) return_3246C2: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_3246C4: ; ... move.b (a2),d0 bne.s loc_32473A tst.w ($FFFFFE08).w bne.s return_324738 tst.w $12(a1) bmi.s return_324738 jsr loc_314C04 btst d6,$22(a0) bne.s loc_3246EE move.b d6,d0 addq.b #2,d0 btst d0,$22(a0) beq.s return_324738 bset d6,$22(a0) loc_3246EE: ; ... move.b #$81,$2A(a1) move.w 8(a0),8(a1) add.w #$13,8(a1) move.w $C(a0),$C(a1) sub.w #$13,$C(a1) move.w #0,$10(a1) move.w #0,$12(a1) move.w #0,$14(a1) bset #2,$22(a1) move.b #$E,$16(a1) move.b #7,$17(a1) move.b #2,$1C(a1) addq.b #1,(a2) return_324738: ; ... rts ; --------------------------------------------------------------------------- loc_32473A: ; ... cmp.b #4,$24(a1) bcc.s return_324738 subq.b #1,d0 bne.w loc_3247D8 tst.b 1(a1) bmi.s loc_324770 bclr d6,$22(a0) bset #1,$22(a1) bclr #3,$22(a1) move.b #2,$24(a1) move.b #0,$2A(a1) move.b #0,(a2) rts ; --------------------------------------------------------------------------- loc_324770: ; ... and.w #$7000,d5 beq.s loc_3247BE tst.b $3A(a0) bne.s loc_3247BE move.b #1,$3A(a0) subq.b #1,$32(a0) bpl.s loc_32479A move.b #3,$32(a0) cmp.w #$1C,$38(a0) beq.s loc_32479A addq.w #1,$38(a0) loc_32479A: ; ... subq.b #1,$33(a0) bpl.s loc_3247B8 move.w $38(a0),d0 sub.w #$1C,d0 neg.w d0 lsr.w #1,d0 move.b d0,$33(a0) bchg #2,$B(a0) bra.s loc_3247BE ; --------------------------------------------------------------------------- loc_3247B8: ; ... move.b #1,$B(a0) loc_3247BE: ; ... move.w 8(a0),d0 add.w #$13,d0 move.w d0,8(a1) move.w $C(a0),d0 sub.w #$13,d0 move.w d0,$C(a1) rts ; --------------------------------------------------------------------------- loc_3247D8: ; ... move.b #0,(a2) bclr d6,$22(a0) beq.w return_324738 move.w $38(a0),d0 add.w #4,d0 lsl.w #7,d0 move.w d0,$10(a1) neg.w d0 move.w d0,$12(a1) move.w #$800,$14(a1) bset #1,$22(a1) bclr #3,$22(a1) tst.b $28(a0) bpl.s loc_324828 neg.w d0 move.w d0,$14(a1) bclr #0,$22(a1) bclr #1,$22(a1) move.b #$E0,$26(a1) loc_324828: ; ... move.b #2,$24(a1) move.b #0,$2A(a1) move.w #$E2,d0 jmp PlaySound ; End of function sub_3246C4 ; --------------------------------------------------------------------------- Map_Obj85: dc.w byte_32484A-Map_Obj85,byte_324864-Map_Obj85,byte_32486C-Map_Obj85; 0 ; ... dc.w byte_324880-Map_Obj85,byte_32488E-Map_Obj85,byte_32488E-Map_Obj85; 3 byte_32484A: dc.b 0, 4,-$38, 9, 0, 0, -1, -$C,-$28, 9; 0 ; ... dc.b 0, 6, -1, -$C,-$18, 9, 0, 6, -1, -$C; 10 dc.b -8, 9, 0, $C, -1, -$C; 20 byte_324864: dc.b 0, 1,-$20, 9, 0, 0, -1, -$C; 0 ; ... byte_32486C: dc.b 0, 3,-$30, 9, 0, 6, -1, -$C,-$20, 9; 0 ; ... dc.b 0, 6, -1, -$C,-$10, 9, 0, $C, -1, -$C; 10 byte_324880: dc.b 0, 2,-$20, 9, 0, 6, -1, -$C,-$10, 9; 0 ; ... dc.b 0, $C, -1, -$C ; 10 byte_32488E: dc.b 0, 1,-$20, 9, $20, 0, -1, -$C; 0 ; ... Map_Obj85_0: dc.w byte_3248A2-Map_Obj85_0,byte_3248B0-Map_Obj85_0,byte_3248B8-Map_Obj85_0; 0 ; ... dc.w byte_3248B8-Map_Obj85_0,byte_3248C0-Map_Obj85_0,byte_3248C0-Map_Obj85_0; 3 byte_3248A2: dc.b 0, 2,-$10, $F, 0, 0, -1,-$10, 0, $F; 0 ; ... dc.b 0, $10, -1,-$20 ; 10 byte_3248B0: dc.b 0, 1,-$10, $F, 0, 0, -1,-$10; 0 ; ... byte_3248B8: dc.b 0, 1, 0, $F, 0, $10, -1,-$20; 0 ; ... byte_3248C0: dc.b 0, 1,-$10, $F, $20, 0, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- Obj86: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3248DC(pc,d0.w),d1 jsr off_3248DC(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_3248DC: dc.w loc_3248E2-off_3248DC,loc_324920-off_3248DC,loc_324AA4-off_3248DC; 0 ; ... ; --------------------------------------------------------------------------- loc_3248E2: ; ... addq.b #2,$24(a0) move.l #Map_Obj86,4(a0) move.w #$43B2,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$18,$19(a0) move.b #4,$18(a0) tst.b $28(a0) beq.s loc_324920 addq.b #2,$24(a0) move.b #2,$1C(a0) bra.w loc_324AA4 ; --------------------------------------------------------------------------- loc_324920: ; ... tst.w ($FFFFFE08).w bne.s return_324998 lea (byte_324B5E).l,a2 move.b $1A(a0),d0 beq.s loc_324942 lea (byte_324B82).l,a2 subq.b #1,d0 beq.s loc_324942 lea (byte_324BA6).l,a2 loc_324942: ; ... move.w #$23,d1 move.w #6,d2 move.w 8(a0),d4 jsr loc_314C46 lea $36(a0),a3 lea ($FFFFB000).w,a1 move.w ($FFFFF602).w,d5 moveq #3,d6 bsr.s sub_32499A addq.w #1,a3 lea ($FFFFB040).w,a1 move.w ($FFFFF606).w,d5 moveq #4,d6 bsr.s sub_32499A tst.b $38(a0) beq.s loc_32498C clr.b $38(a0) bsr.w sub_324A20 subq.w #1,a3 lea ($FFFFB000).w,a1 moveq #3,d6 bsr.w sub_324A20 loc_32498C: ; ... lea (byte_324BCA).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_32499A return_324998: ; ... rts ; END OF FUNCTION CHUNK FOR sub_32499A ; =============== S U B R O U T I N E ======================================= sub_32499A: ; ... ; FUNCTION CHUNK AT 00324998 SIZE 00000002 BYTES move.b (a3),d0 bne.s loc_3249CC btst d6,$22(a0) beq.s return_324998 move.b #1,$2A(a1) move.b #$E,$16(a1) move.b #7,$17(a1) move.b #2,$1C(a1) bset #2,$22(a1) bne.s loc_3249C8 addq.w #5,$C(a1) loc_3249C8: ; ... addq.b #1,(a3) rts ; --------------------------------------------------------------------------- loc_3249CC: ; ... and.w #$70,d5 bne.s loc_324A18 btst d6,$22(a0) bne.s loc_3249E4 move.b #0,$2A(a1) move.b #0,(a3) rts ; --------------------------------------------------------------------------- loc_3249E4: ; ... moveq #0,d1 move.b $1A(a0),d1 subq.w #1,d1 bset #0,$22(a1) btst #0,$22(a0) bne.s loc_324A02 neg.w d1 bclr #0,$22(a1) loc_324A02: ; ... add.w d1,8(a1) lsl.w #8,d1 move.w d1,$10(a1) move.w d1,$14(a1) move.w #0,$12(a1) rts ; --------------------------------------------------------------------------- loc_324A18: ; ... move.b #1,$38(a0) rts ; End of function sub_32499A ; =============== S U B R O U T I N E ======================================= sub_324A20: ; ... bclr d6,$22(a0) beq.w return_324998 move.w 8(a1),d0 sub.w 8(a0),d0 btst #0,$22(a0) beq.s loc_324A3A neg.w d0 loc_324A3A: ; ... add.w #$23,d0 move.w d0,d2 cmp.w #$40,d2 bcs.s loc_324A4A move.w #$40,d2 loc_324A4A: ; ... lsl.w #5,d2 add.w #$800,d2 neg.w d2 asr.w #2,d0 add.w #$40,d0 jsr CalcSine muls.w d2,d0 muls.w d2,d1 asr.l #8,d0 asr.l #8,d1 move.w d0,$12(a1) btst #0,$22(a0) beq.s loc_324A74 neg.w d1 loc_324A74: ; ... move.w d1,$10(a1) bset #1,$22(a1) bclr #3,$22(a1) move.b #2,$24(a1) move.b #0,$2A(a1) move.b #1,$1C(a0) move.b #0,(a3) move.w #$E3,d0 jmp PlaySound ; End of function sub_324A20 ; --------------------------------------------------------------------------- loc_324AA4: ; ... move.w #$13,d1 move.w #$18,d2 move.w #$19,d3 move.w 8(a0),d4 lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) jsr loc_314C04 btst #5,$22(a0) beq.s loc_324ACE bsr.s sub_324AF4 loc_324ACE: ; ... movem.l (sp)+,d1-d4 lea ($FFFFB040).w,a1 moveq #4,d6 jsr loc_314C04 btst #6,$22(a0) beq.s loc_324AE8 bsr.s sub_324AF4 loc_324AE8: ; ... lea (byte_324BCA).l,a1 jmp AnimateSprite ; =============== S U B R O U T I N E ======================================= sub_324AF4: ; ... move.w #$300,$1C(a0) move.w #$F000,$10(a1) addq.w #8,8(a1) bset #0,$22(a1) move.w 8(a0),d0 sub.w 8(a1),d0 bcc.s loc_324B2A bclr #0,$22(a1) sub.w #$10,8(a1) neg.w $10(a1) move.w #$400,$1C(a0) loc_324B2A: ; ... move.w #$F,$2E(a1) move.w $10(a1),$14(a1) move.b #$E,$16(a1) move.b #7,$17(a1) move.b #2,$1C(a1) bset #2,$22(a1) bne.s loc_324B54 addq.w #5,$C(a1) loc_324B54: ; ... move.w #$E3,d0 jmp PlaySound ; End of function sub_324AF4 ; --------------------------------------------------------------------------- byte_324B5E: dc.b 7, 7, 7, 7, 7, 7, 7, 8, 9, $A; 0 ; ... dc.b $B, $A, 9, 8, 7, 6, 5, 4, 3, 2; 10 dc.b 1, 0, -1, -2, -3, -4, -5, -6, -7, -8; 20 dc.b -9, -$A, -$B, -$C, -$D, -$E; 30 byte_324B82: dc.b 6, 6, 6, 6, 6, 6, 7, 8, 9, 9; 0 ; ... dc.b 9, 9, 9, 9, 8, 8, 8, 8, 8, 8; 10 dc.b 7, 7, 7, 7, 6, 6, 6, 6, 5, 5; 20 dc.b 4, 4, 4, 4, 4, 4; 30 byte_324BA6: dc.b 5, 5, 5, 5, 5, 6, 7, 8, 9, $A; 0 ; ... dc.b $B, $B, $C, $C, $D, $D, $E, $E, $F, $F; 10 dc.b $10, $10, $11, $11, $12, $12, $11, $11, $10, $10; 20 dc.b $10, $10, $10, $10, $10, $10; 30 byte_324BCA: dc.b 0, $A, 0, $D, 0, $13, 0, $16, 0, $1F; 0 ; ... dc.b $F, 0, -1, 3, 1, 2, 1, -3, 0, $F; 10 dc.b 4, -1, 0, 5, 4, 3, 3, 3, 3, -3; 20 dc.b 2, 0, 3, 4, 5, 5, 5, 5, -3, 2; 30 Map_Obj86: dc.w byte_324BFE-Map_Obj86,byte_324C12-Map_Obj86,byte_324C20-Map_Obj86; 0 ; ... dc.w byte_324C34-Map_Obj86,byte_324C48-Map_Obj86,byte_324C62-Map_Obj86; 3 byte_324BFE: dc.b 0, 3, -9, $B, 0, $C, -1,-$19, -2, 1; 0 ; ... dc.b 0, $18, -1, -1, 1, 5, 0, $1A, 0, 7; 10 byte_324C12: dc.b 0, 2, -8, $D, 0, 0, -1,-$18, -8, 5; 0 ; ... dc.b 0, 8, 0, 8 ; 10 byte_324C20: dc.b 0, 3,-$17, $B, $10, $C, -1,-$19, -$E, 1; 0 ; ... dc.b $10, $18, -1, -1,-$11, 5, $10, $1A, 0, 7; 10 byte_324C34: dc.b 0, 3,-$19, 9, 0, $24, -1, -$F, -9, 9; 0 ; ... dc.b 0, $2A, -1,-$11, 7, 5, 0, $30, -1,-$11; 10 byte_324C48: dc.b 0, 4,-$18, 3, 0, $1E, -1, -8,-$18, 3; 0 ; ... dc.b 8, $1E, 0, 0, 8, 1, 0, $22, -1, -8; 10 dc.b 8, 1, 8, $22, 0, 0; 20 byte_324C62: dc.b 0, 3,-$19, 9, 8, $24, -1, -9, -9, 9; 0 ; ... dc.b 8, $2A, -1, -7, 7, 5, 8, $30, 0, 1; 10 ; --------------------------------------------------------------------------- ObjD2: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_324C84(pc,d0.w),d1 jmp off_324C84(pc,d1.w) ; --------------------------------------------------------------------------- off_324C84: dc.w loc_324C88-off_324C84,loc_324CCE-off_324C84; 0 ; ... ; --------------------------------------------------------------------------- loc_324C88: ; ... addq.b #2,$24(a0) move.l #Map_ObjD2,4(a0) move.w #$437C,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #8,$19(a0) move.b #4,$18(a0) move.w 8(a0),$30(a0) move.w $C(a0),$32(a0) moveq #0,d0 move.b $28(a0),d0 lsl.w #4,d0 move.w d0,$38(a0) bsr.w sub_324D62 loc_324CCE: ; ... tst.w $38(a0) beq.s loc_324CDE subq.w #1,$38(a0) jmp MarkObjGone3 ; --------------------------------------------------------------------------- loc_324CDE: ; ... subq.w #1,$3A(a0) bpl.s loc_324D3E move.w #$F,$3A(a0) addq.b #1,$1A(a0) and.b #$F,$1A(a0) bne.s loc_324D3C moveq #0,d0 move.b $28(a0),d0 lsl.w #4,d0 move.w d0,$38(a0) move.b $22(a0),d0 and.b #$18,d0 beq.s loc_324D34 bclr #3,$22(a0) beq.s loc_324D20 bclr #3,($FFFFB022).w bset #1,($FFFFB022).w loc_324D20: ; ... bclr #4,$22(a0) beq.s loc_324D34 bclr #3,($FFFFB062).w bset #1,($FFFFB062).w loc_324D34: ; ... move.w $30(a0),8(a0) bra.s sub_324D62 ; --------------------------------------------------------------------------- loc_324D3C: ; ... bsr.s sub_324D62 loc_324D3E: ; ... move.w $34(a0),d1 add.w #$B,d1 move.w $36(a0),d2 move.w d2,d3 addq.w #1,d3 move.w 8(a0),d4 jsr SolidObject move.w $30(a0),d0 jmp MarkObjGone2 ; =============== S U B R O U T I N E ======================================= sub_324D62: ; ... moveq #0,d0 move.b $1A(a0),d0 add.w d0,d0 add.w d0,d0 lea byte_324DAA(pc,d0.w),a1 move.b (a1)+,d0 ext.w d0 btst #0,$22(a0) beq.s loc_324D7E neg.w d0 loc_324D7E: ; ... add.w $30(a0),d0 move.w d0,8(a0) move.b (a1)+,d0 ext.w d0 add.w $32(a0),d0 move.w d0,$C(a0) moveq #0,d1 moveq #0,d2 moveq #0,d3 move.b (a1)+,d1 move.b (a1)+,d2 move.w d1,$34(a0) move.b d1,$19(a0) move.w d2,$36(a0) rts ; End of function sub_324D62 ; --------------------------------------------------------------------------- byte_324DAA: dc.b -$28, $18, 8, 8,-$28, $10, 8, $10,-$28, 8; 0 ; ... dc.b 8, $18,-$28, 0, 8, $20,-$20, 0, $10, $20; 10 dc.b -$18, -8, $18, $18,-$10,-$10, $20, $10, -8,-$18; 20 dc.b $28, 8, 8,-$18, $28, 8, $10,-$10, $20, $10; 30 dc.b $18, -8, $18, $18, $20, 0, $10, $20, $28, 0; 40 dc.b 8, $20, $28, 8, 8, $18, $28, $10, 8, $10; 50 dc.b $28, $18, 8, 8 ; 60 Map_ObjD2: dc.w byte_324E0A-Map_ObjD2,byte_324E12-Map_ObjD2,byte_324E20-Map_ObjD2; 0 ; ... dc.w byte_324E34-Map_ObjD2,byte_324E4E-Map_ObjD2,byte_324E6E-Map_ObjD2; 3 dc.w byte_324E8E-Map_ObjD2,byte_324EAE-Map_ObjD2,byte_324EAE-Map_ObjD2; 6 dc.w byte_324ECE-Map_ObjD2,byte_324EEE-Map_ObjD2,byte_324F0E-Map_ObjD2; 9 dc.w byte_324E34-Map_ObjD2,byte_324E20-Map_ObjD2,byte_324E12-Map_ObjD2; 12 dc.w byte_324E0A-Map_ObjD2 ; 15 byte_324E0A: dc.b 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... byte_324E12: dc.b 0, 2,-$10, 5, 0, 0, -1, -8, 0, 5; 0 ; ... dc.b 0, 0, -1, -8 ; 10 byte_324E20: dc.b 0, 3,-$18, 5, 0, 0, -1, -8, -8, 5; 0 ; ... dc.b 0, 0, -1, -8, 8, 5, 0, 0, -1, -8; 10 byte_324E34: dc.b 0, 4,-$20, 5, 0, 0, -1, -8,-$10, 5; 0 ; ... dc.b 0, 0, -1, -8, 0, 5, 0, 0, -1, -8; 10 dc.b $10, 5, 0, 0, -1, -8; 20 byte_324E4E: dc.b 0, 5,-$20, 5, 0, 0, 0, 0,-$20, 5; 0 ; ... dc.b 0, 0, -1,-$10,-$10, 5, 0, 0, -1,-$10; 10 dc.b 0, 5, 0, 0, -1,-$10, $10, 5, 0, 0; 20 dc.b -1,-$10 ; 30 byte_324E6E: dc.b 0, 5,-$18, 5, 0, 0, 0, 8,-$18, 5; 0 ; ... dc.b 0, 0, -1, -8,-$18, 5, 0, 0, -1,-$18; 10 dc.b -8, 5, 0, 0, -1,-$18, 8, 5, 0, 0; 20 dc.b -1,-$18 ; 30 byte_324E8E: dc.b 0, 5,-$10, 5, 0, 0, 0, $10,-$10, 5; 0 ; ... dc.b 0, 0, 0, 0,-$10, 5, 0, 0, -1,-$10; 10 dc.b -$10, 5, 0, 0, -1,-$20, 0, 5, 0, 0; 20 dc.b -1,-$20 ; 30 byte_324EAE: dc.b 0, 5, -8, 5, 0, 0, 0, $18, -8, 5; 0 ; ... dc.b 0, 0, 0, 8, -8, 5, 0, 0, -1, -8; 10 dc.b -8, 5, 0, 0, -1,-$18, -8, 5, 0, 0; 20 dc.b -1,-$28 ; 30 byte_324ECE: dc.b 0, 5, 0, 5, 0, 0, 0, $10,-$10, 5; 0 ; ... dc.b 0, 0, 0, $10,-$10, 5, 0, 0, 0, 0; 10 dc.b -$10, 5, 0, 0, -1,-$10,-$10, 5, 0, 0; 20 dc.b -1,-$20 ; 30 byte_324EEE: dc.b 0, 5, 8, 5, 0, 0, 0, 8, -8, 5; 0 ; ... dc.b 0, 0, 0, 8,-$18, 5, 0, 0, 0, 8; 10 dc.b -$18, 5, 0, 0, -1, -8,-$18, 5, 0, 0; 20 dc.b -1,-$18 ; 30 byte_324F0E: dc.b 0, 5, $10, 5, 0, 0, 0, 0, 0, 5; 0 ; ... dc.b 0, 0, 0, 0,-$10, 5, 0, 0, 0, 0; 10 dc.b -$20, 5, 0, 0, 0, 0,-$20, 5, 0, 0; 20 dc.b -1,-$10 ; 30 ; --------------------------------------------------------------------------- ObjD3: ; ... moveq #0,d1 move.w $38(a0),d1 swap d1 move.l $30(a0),d0 sub.l d1,d0 asr.l #4,d0 sub.l d0,$30(a0) move.w $30(a0),8(a0) moveq #0,d1 move.w $3A(a0),d1 swap d1 move.l $34(a0),d0 sub.l d1,d0 asr.l #4,d0 sub.l d0,$34(a0) move.w $34(a0),$C(a0) subq.w #1,$3C(a0) bne.w loc_324FB8 move.l $2A(a0),a1 subq.w #1,(a1) cmp.w #5,($FFFFFF92).w bcs.s loc_324F86 clr.w ($FFFFFF92).w move.w #$A6,d0 jsr PlaySoundStereo loc_324F86: ; ... tst.b $3F(a0) beq.s loc_324FA2 tst.w ($FFFFFED0).w beq.s loc_324F9C subq.w #1,($FFFFFED0).w or.b #$81,($FFFFFEC9).w loc_324F9C: ; ... tst.w ($FFFFFFDC).w bne.s loc_324FB2 loc_324FA2: ; ... tst.w ($FFFFFE20).w beq.s loc_324FB2 subq.w #1,($FFFFFE20).w or.b #$81,($FFFFFE1D).w loc_324FB2: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_324FB8: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- byte_324FBE: dc.b 0, 2, 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- ObjD4: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_324FD6(pc,d0.w),d1 jmp off_324FD6(pc,d1.w) ; --------------------------------------------------------------------------- off_324FD6: dc.w loc_324FDA-off_324FD6,loc_32504C-off_324FD6; 0 ; ... ; --------------------------------------------------------------------------- loc_324FDA: ; ... addq.b #2,$24(a0) move.l #Map_ObjD4,4(a0) move.w #$436C,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$20,$19(a0) move.b #4,$18(a0) move.w 8(a0),$30(a0) move.w $C(a0),$32(a0) move.w #$8000,$A(a0) move.w #$8000,$E(a0) tst.b $28(a0) bne.s loc_325038 sub.w #$60,8(a0) btst #0,$22(a0) beq.s loc_32504C add.w #$C0,8(a0) bra.s loc_32504C ; --------------------------------------------------------------------------- loc_325038: ; ... sub.w #$60,$C(a0) btst #1,$22(a0) beq.s loc_32504C add.w #$C0,$C(a0) loc_32504C: ; ... move.w 8(a0),-(sp) moveq #0,d0 move.b $28(a0),d0 move.w off_325082(pc,d0.w),d1 jsr off_325082(pc,d1.w) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 move.w #$2B,d1 move.w #$20,d2 move.w #$21,d3 move.w (sp)+,d4 jsr SolidObject move.w $30(a0),d0 jmp MarkObjGone2 ; --------------------------------------------------------------------------- off_325082: dc.w loc_325086-off_325082,loc_32509A-off_325082; 0 ; ... ; --------------------------------------------------------------------------- loc_325086: ; ... moveq #4,d1 move.w $30(a0),d0 cmp.w 8(a0),d0 bhi.s loc_325094 neg.w d1 loc_325094: ; ... add.w d1,$10(a0) rts ; --------------------------------------------------------------------------- loc_32509A: ; ... moveq #4,d1 move.w $32(a0),d0 cmp.w $C(a0),d0 bhi.s loc_3250A8 neg.w d1 loc_3250A8: ; ... add.w d1,$12(a0) rts ; --------------------------------------------------------------------------- Map_ObjD4: dc.w byte_3250B0-Map_ObjD4 ; ... byte_3250B0: dc.b 0, 4,-$20, $F, 0, 0, -1,-$20,-$20, $F; 0 ; ... dc.b 8, 0, 0, 0, 0, $F, $10, 0, -1,-$20; 10 dc.b 0, $F, $18, 0, 0, 0; 20 ; --------------------------------------------------------------------------- ObjD5: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3250D8(pc,d0.w),d1 jmp off_3250D8(pc,d1.w) ; --------------------------------------------------------------------------- off_3250D8: dc.w loc_3250DC-off_3250D8,loc_32512C-off_3250D8; 0 ; ... ; --------------------------------------------------------------------------- loc_3250DC: ; ... addq.b #2,$24(a0) move.l #Map_ObjD5,4(a0) move.w #$4384,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$10,$19(a0) move.b #4,$18(a0) move.w $C(a0),$32(a0) move.w #$8000,$E(a0) moveq #0,d0 move.b $28(a0),d0 lsl.w #2,d0 sub.w d0,$C(a0) btst #0,$22(a0) beq.s loc_32512C add.w d0,d0 add.w d0,$C(a0) loc_32512C: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 move.w $34(a0),d0 move.w off_32515E(pc,d0.w),d1 jsr off_32515E(pc,d1.w) cmp.w #6,$34(a0) bcc.s loc_325158 move.w #$10,d1 move.w #9,d3 move.w 8(a0),d4 jsr sub_315168 loc_325158: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- off_32515E: dc.w loc_325166-off_32515E,loc_325180-off_32515E,loc_3251B8-off_32515E; 0 ; ... dc.w loc_3251D2-off_32515E ; 3 ; --------------------------------------------------------------------------- loc_325166: ; ... move.b $22(a0),d0 and.w #$18,d0 beq.s return_32517E move.w #$D6,d0 jsr PlaySound addq.w #2,$34(a0) return_32517E: ; ... rts ; --------------------------------------------------------------------------- loc_325180: ; ... moveq #8,d1 move.w $32(a0),d0 cmp.w $C(a0),d0 bcc.s loc_32518E neg.w d1 loc_32518E: ; ... add.w d1,$12(a0) bne.s return_3251B6 addq.w #2,$34(a0) move.w d0,$C(a0) moveq #0,d0 move.b $28(a0),d0 lsl.w #2,d0 sub.w d0,$C(a0) btst #0,$22(a0) bne.s return_3251B6 add.w d0,d0 add.w d0,$C(a0) return_3251B6: ; ... rts ; --------------------------------------------------------------------------- loc_3251B8: ; ... move.b $22(a0),d0 and.w #$18,d0 bne.s return_3251D0 move.w #$D6,d0 jsr PlaySound addq.w #2,$34(a0) return_3251D0: ; ... rts ; --------------------------------------------------------------------------- loc_3251D2: ; ... moveq #8,d1 move.w $32(a0),d0 cmp.w $C(a0),d0 bcc.s loc_3251E0 neg.w d1 loc_3251E0: ; ... add.w d1,$12(a0) bne.s return_325208 clr.w $34(a0) move.w d0,$C(a0) moveq #0,d0 move.b $28(a0),d0 lsl.w #2,d0 sub.w d0,$C(a0) btst #0,$22(a0) beq.s return_325208 add.w d0,d0 add.w d0,$C(a0) return_325208: ; ... rts ; --------------------------------------------------------------------------- Map_ObjD5: dc.w byte_32520C-Map_ObjD5 ; ... byte_32520C: dc.b 0, 2, -8, 5, 0, 0, -1,-$10, -8, 5; 0 ; ... dc.b 8, 0, 0, 0 ; 10 ; --------------------------------------------------------------------------- ObjD6: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_325228(pc,d0.w),d1 jmp off_325228(pc,d1.w) ; --------------------------------------------------------------------------- off_325228: dc.w loc_32522C-off_325228,loc_325256-off_325228; 0 ; ... ; --------------------------------------------------------------------------- loc_32522C: ; ... addq.b #2,$24(a0) move.l #Map_ObjD6,4(a0) move.w #$388,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$18,$19(a0) move.b #1,$18(a0) loc_325256: ; ... move.w #$23,d1 move.w #$10,d2 move.w #$11,d3 move.w 8(a0),d4 lea $30(a0),a2 lea ($FFFFB000).w,a1 moveq #3,d6 movem.l d1-d4,-(sp) bsr.w loc_32529C movem.l (sp)+,d1-d4 lea $34(a0),a2 lea ($FFFFB040).w,a1 moveq #4,d6 bsr.w loc_32529C lea (word_325574).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32529C: ; ... move.w (a2),d0 move.w off_3252A6(pc,d0.w),d0 jmp off_3252A6(pc,d0.w) ; --------------------------------------------------------------------------- off_3252A6: dc.w loc_3252AC-off_3252A6,loc_3254BA-off_3252A6,loc_325560-off_3252A6; 0 ; ... ; --------------------------------------------------------------------------- loc_3252AC: ; ... tst.b $2A(a1) bne.w return_32533A tst.b $28(a0) beq.s loc_3252C0 tst.w ($FFFFFF4C).w bne.s return_32533A loc_3252C0: ; ... jsr loc_314C04 tst.w d4 bpl.s return_32533A move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w #0,$10(a1) move.w #0,$12(a1) move.w #0,$14(a1) move.b #$81,$2A(a1) bset #2,$22(a1) move.b #$E,$16(a1) move.b #7,$17(a1) move.b #2,$1C(a1) move.b #1,$1C(a0) addq.w #2,(a2)+ move.w #$78,(a2) move.w a1,$3E(a0) tst.b $28(a0) beq.s return_32533A cmp.b #$18,($FFFFFF4E).w bne.s return_32533A move.b #8,($FFFFFF4E).w clr.w $2E(a0) move.w #-1,($FFFFFF4C).w move.w #-1,$2A(a0) return_32533A: ; ... rts ; --------------------------------------------------------------------------- loc_32533C: ; ... move.w ($FFFFFF52).w,d0 ; This code seems to be unused... bpl.w loc_32540A tst.w $2A(a0) bpl.s loc_325350 move.w #$64,$2A(a0) loc_325350: ; ... tst.w $2A(a0) beq.w loc_3253FC btst #0,($FFFFFE05).w beq.w loc_325404 cmp.w #$10,$2C(a0) bcc.w loc_325404 jsr SingleObjLoad bne.w loc_325404 move.b #$D3,0(a1) move.l #byte_324FBE,4(a1) move.w #$380,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #$10,$19(a1) move.b #4,$18(a1) move.w #$1E,$3C(a1) move.w $2E(a0),$2E(a1) add.w #$90,$2E(a0) move.w 8(a0),$38(a1) move.w $C(a0),$3A(a1) move.w $2E(a1),d0 jsr CalcSine asr.w #1,d1 add.w $38(a1),d1 move.w d1,$30(a1) move.w d1,8(a1) asr.w #1,d0 add.w $3A(a1),d0 move.w d0,$34(a1) move.w d0,$C(a1) lea $2C(a0),a2 move.l a2,$2A(a1) move.w $3E(a0),$3E(a1) addq.w #1,$2C(a0) subq.w #1,$2A(a0) loc_3253FC: ; ... tst.w $2C(a0) beq.w loc_3254F0 loc_325404: ; ... addq.w #1,($FFFFFF92).w rts ; --------------------------------------------------------------------------- loc_32540A: ; ... beq.w loc_3254B2 btst #0,($FFFFFE05).w beq.w return_3254B8 cmp.w #$10,$2C(a0) bcc.w return_3254B8 jsr SingleObjLoad bne.w return_3254B8 move.b #$DC,0(a1) move.l #Map_Ring,4(a1) move.w #$26BC,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #3,$18(a1) move.b #8,$19(a1) move.w #$1A,$3C(a1) move.w $2E(a0),$2E(a1) add.w #$89,$2E(a0) move.w 8(a0),$38(a1) move.w $C(a0),$3A(a1) move.w $2E(a1),d0 jsr CalcSine asr.w #1,d1 add.w $38(a1),d1 move.w d1,$30(a1) move.w d1,8(a1) asr.w #1,d0 add.w $3A(a1),d0 move.w d0,$34(a1) move.w d0,$C(a1) lea $2C(a0),a2 move.l a2,$2A(a1) move.w $3E(a0),$3E(a1) addq.w #1,$2C(a0) subq.w #1,($FFFFFF52).w loc_3254B2: ; ... tst.w $2C(a0) beq.s loc_3254F0 return_3254B8: ; ... rts ; --------------------------------------------------------------------------- loc_3254BA: ; ... tst.b 1(a0) bpl.s loc_3254F0 tst.b $28(a0) beq.s loc_3254EA move.w a1,$3E(a0) cmp.b #$18,($FFFFFF4E).w beq.w loc_32533C move.b ($FFFFFE0F).w,d0 and.w #$F,d0 bne.s return_3254E8 move.w #$C0,d0 jsr PlaySound return_3254E8: ; ... rts ; --------------------------------------------------------------------------- loc_3254EA: ; ... subq.w #1,2(a2) bpl.s loc_325520 loc_3254F0: ; ... move.w #0,$2C(a0) move.b #0,$1C(a0) move.b #0,$2A(a1) bclr d6,$22(a0) bclr #3,$22(a1) bset #1,$22(a1) move.w #$400,$12(a1) addq.w #2,(a2)+ move.w #$1E,(a2) rts ; --------------------------------------------------------------------------- loc_325520: ; ... move.w 2(a2),d0 and.w #$F,d0 bne.s return_32555E move.w #$C0,d0 jsr PlaySound moveq #$A,d0 move.w a1,a3 jsr AddPoints2 jsr SingleObjLoad bne.s return_32555E move.b #$29,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b #0,$1A(a1) return_32555E: ; ... rts ; --------------------------------------------------------------------------- loc_325560: ; ... subq.w #1,2(a2) bpl.s return_325572 clr.w (a2) tst.b $28(a0) beq.s return_325572 clr.w ($FFFFFF4C).w return_325572: ; ... rts ; --------------------------------------------------------------------------- word_325574: dc.w 4, 7, $F00, -$FF, $100, -$100; 0 ; ... Map_ObjD6: dc.w byte_325584-Map_ObjD6,byte_3255AA-Map_ObjD6; 0 ; ... byte_325584: dc.b 0, 6,-$14, 9, 0, 0, -1,-$18,-$14, 9; 0 ; ... dc.b 8, 0, 0, 0, -4, 9, 0, 0, -1,-$18; 10 dc.b -4, 9, 8, 0, 0, 0, $C, 9, 0, 0; 20 dc.b -1,-$18, $C, 9, 8, 0, 0, 0; 30 byte_3255AA: dc.b 0, 6,-$14, 9, $20, 6, -1,-$18,-$14, 9; 0 ; ... dc.b $28, 6, 0, 0, -4, 9, $20, 6, -1,-$18; 10 dc.b -4, 9, $28, 6, 0, 0, $C, 9, $20, 6; 20 dc.b -1,-$18, $C, 9, $28, 6, 0, 0; 30 ; =============== S U B R O U T I N E ======================================= SlotMachine: ; ... ; FUNCTION CHUNK AT 00325646 SIZE 00000150 BYTES ; FUNCTION CHUNK AT 003257E0 SIZE 0000003C BYTES ; FUNCTION CHUNK AT 0032589A SIZE 0000001C BYTES lea ($FFFFFF4E).w,a4 moveq #0,d0 move.b 0(a4),d0 jmp loc_3255DE(pc,d0.w) loc_3255DE: bra.w loc_3255F8 ; --------------------------------------------------------------------------- bra.w loc_325646 ; --------------------------------------------------------------------------- bra.w loc_325666 ; --------------------------------------------------------------------------- bra.w loc_32571C ; --------------------------------------------------------------------------- bra.w loc_325754 ; --------------------------------------------------------------------------- bra.w loc_32589A ; --------------------------------------------------------------------------- rts ; --------------------------------------------------------------------------- loc_3255F8: ; ... move.l a4,a1 moveq #8,d0 loc_3255FC: ; ... clr.w (a1)+ dbf d0,loc_3255FC move.b ($FFFFFE0F).w,d0 move.b d0,6(a4) ror.b #3,d0 move.b d0,$A(a4) ror.b #3,d0 move.b d0,$E(a4) move.b #8,7(a4) move.b #8,$B(a4) move.b #8,$F(a4) move.b #8,8(a4) move.b #8,$C(a4) move.b #8,$10(a4) move.b #1,1(a4) addq.b #4,0(a4) rts ; End of function SlotMachine ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR SlotMachine loc_325646: ; ... bsr.w sub_3258B6 tst.b 1(a4) beq.s loc_325652 rts ; --------------------------------------------------------------------------- loc_325652: ; ... move.b #$18,0(a4) clr.w 8(a4) clr.w $C(a4) clr.w $10(a4) rts ; --------------------------------------------------------------------------- loc_325666: ; ... move.b ($FFFFFE0F).w,d0 and.b #7,d0 subq.b #4,d0 add.b #$30,d0 move.b d0,8(a4) move.b ($FFFFFE0F).w,d0 rol.b #4,d0 and.b #7,d0 subq.b #4,d0 add.b #$30,d0 move.b d0,$C(a4) move.b ($FFFFFE0E).w,d0 and.b #7,d0 subq.b #4,d0 add.b #$30,d0 move.b d0,$10(a4) move.b #2,1(a4) clr.b 3(a4) clr.b 9(a4) clr.b $D(a4) clr.b $11(a4) addq.b #4,0(a4) move.b ($FFFFFE0F).w,d0 ror.b #3,d0 lea (byte_325AAC).l,a2 loc_3256C4: ; ... sub.b (a2),d0 bcs.s loc_3256CC addq.w #3,a2 bra.s loc_3256C4 ; --------------------------------------------------------------------------- loc_3256CC: ; ... cmp.b #$FF,(a2) beq.s loc_3256E0 move.b 1(a2),4(a4) move.b 2(a2),5(a4) rts ; --------------------------------------------------------------------------- loc_3256E0: ; ... move.b d0,d1 and.w #7,d1 lea (byte_325AC1).l,a1 move.b (a1,d0.w),4(a4) ror.b #3,d0 move.b d0,d1 and.w #7,d1 lea (byte_325AC9).l,a1 move.b (a1,d1.w),d2 lsl.b #4,d2 ror.b #3,d0 and.w #7,d0 lea (byte_325AD1).l,a1 or.b (a1,d0.w),d2 move.b d2,5(a4) rts ; --------------------------------------------------------------------------- loc_32571C: ; ... bsr.w sub_3258B6 tst.b 1(a4) beq.s loc_325728 rts ; --------------------------------------------------------------------------- loc_325728: ; ... add.b #$30,8(a4) add.b #$30,$C(a4) add.b #$30,$10(a4) move.b ($FFFFFE0F).w,d0 and.b #$F,d0 add.b #$C,d0 move.b d0,1(a4) clr.b 2(a4) addq.b #4,0(a4) rts ; --------------------------------------------------------------------------- loc_325754: ; ... bsr.w sub_3258B6 cmp.b #$C,9(a4) bne.s loc_325772 cmp.b #$C,$D(a4) bne.s loc_325772 cmp.b #$C,$11(a4) beq.w loc_32589A loc_325772: ; ... moveq #0,d0 move.b 3(a4),d0 lea 6(a4),a1 add.w d0,a1 lea (byte_325AC1).l,a3 add.w d0,d0 add.w d0,a3 moveq #0,d0 move.b 3(a1),d0 jmp loc_325792(pc,d0.w) loc_325792: bra.w loc_3257E0 ; END OF FUNCTION CHUNK FOR SlotMachine ; --------------------------------------------------------------------------- bra.w loc_32581C ; --------------------------------------------------------------------------- bra.w loc_325886 ; --------------------------------------------------------------------------- bra.w return_325898 ; =============== S U B R O U T I N E ======================================= sub_3257A2: ; ... move.w 4(a4),d1 move.b 3(a4),d0 beq.s loc_3257AE lsr.w d0,d1 loc_3257AE: ; ... and.w #7,d1 cmp.b #5,d1 bgt.s loc_3257BA rts ; --------------------------------------------------------------------------- loc_3257BA: ; ... subq.b #2,d1 rts ; End of function sub_3257A2 ; =============== S U B R O U T I N E ======================================= sub_3257BE: ; ... move.w #$FFF0,d2 and.w #$F,d1 move.b 3(a4),d0 beq.s loc_3257D0 lsl.w d0,d1 rol.w d0,d2 loc_3257D0: ; ... and.w d2,4(a4) or.w d1,4(a4) and.w #$777,4(a4) rts ; End of function sub_3257BE ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR SlotMachine loc_3257E0: ; ... tst.b 3(a4) bne.s loc_3257EE tst.b 1(a4) bmi.s loc_3257F8 rts ; --------------------------------------------------------------------------- loc_3257EE: ; ... cmp.b #8,-1(a1) bge.s loc_3257F8 rts ; --------------------------------------------------------------------------- loc_3257F8: ; ... bsr.s sub_3257A2 move.w (a1),d0 sub.w #$A0,d0 lsr.w #8,d0 and.w #7,d0 move.b (a3,d0.w),d0 cmp.b d1,d0 beq.s loc_325810 rts ; --------------------------------------------------------------------------- loc_325810: ; ... addq.b #4,3(a1) move.b #$60,2(a1) rts ; END OF FUNCTION CHUNK FOR SlotMachine ; --------------------------------------------------------------------------- loc_32581C: ; ... bsr.s sub_3257A2 move.w (a1),d0 add.w #$F0,d0 and.w #$700,d0 lsr.w #8,d0 move.b (a3,d0.w),d0 cmp.b d0,d1 beq.s loc_32585A cmp.b #$20,2(a1) bls.s loc_325840 sub.b #$C,2(a1) loc_325840: ; ... cmp.b #$18,2(a1) bgt.s loc_32584A rts ; --------------------------------------------------------------------------- loc_32584A: ; ... cmp.b #$80,1(a1) bls.s loc_325854 rts ; --------------------------------------------------------------------------- loc_325854: ; ... subq.b #2,2(a1) rts ; --------------------------------------------------------------------------- loc_32585A: ; ... move.w (a1),d0 add.w #$80,d0 move.w d0,d1 and.w #$700,d1 sub.w #$10,d1 move.w d1,(a1) lsr.w #8,d0 and.w #7,d0 move.b (a3,d0.w),d1 bsr.w sub_3257BE move.b #$F8,2(a1) addq.b #4,3(a1) rts ; --------------------------------------------------------------------------- loc_325886: ; ... tst.b 1(a1) beq.s loc_32588E rts ; --------------------------------------------------------------------------- loc_32588E: ; ... clr.b 2(a1) addq.b #4,3(a1) rts ; --------------------------------------------------------------------------- return_325898: ; ... rts ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR SlotMachine loc_32589A: ; ... clr.w 8(a4) clr.w $C(a4) clr.w $10(a4) clr.b 1(a4) bsr.w sub_32599E move.b #$18,0(a4) rts ; END OF FUNCTION CHUNK FOR SlotMachine ; =============== S U B R O U T I N E ======================================= sub_3258B6: ; ... moveq #0,d0 move.b 3(a4),d0 lea 6(a4),a1 add.w d0,a1 lea (byte_325AC1).l,a3 add.w d0,a3 add.w d0,a3 jmp loc_3258D0(pc,d0.w) loc_3258D0: bra.w loc_3258E6 ; --------------------------------------------------------------------------- bra.w loc_3258F2 ; --------------------------------------------------------------------------- clr.b 3(a4) subq.b #1,1(a4) move.w #-$5200,d2 bra.s loc_3258FA ; --------------------------------------------------------------------------- loc_3258E6: ; ... addq.b #4,3(a4) move.w #$AA00,d2 bra.w loc_3258FA ; --------------------------------------------------------------------------- loc_3258F2: ; ... addq.b #4,3(a4) move.w #$AC00,d2 loc_3258FA: ; ... move.w (a1),d0 move.b 2(a1),d1 ext.w d1 sub.w d1,(a1) move.w (a1),d3 and.w #$7F8,d0 and.w #$7F8,d3 cmp.w d0,d3 bne.s loc_325914 rts ; --------------------------------------------------------------------------- loc_325914: ; ... bsr.w sub_325964 lea ($FFFFA000).w,a1 move.w #$1F,d1 loc_325920: ; ... move.l $80(a2),$80(a1) move.l $100(a2),$100(a1) move.l $180(a2),$180(a1) move.l (a2)+,(a1)+ addq.b #8,d3 bne.s loc_325944 add.w #$100,d3 and.w #$700,d3 bsr.w sub_325964 loc_325944: ; ... dbf d1,loc_325920 move.l #$FFA000,d1 tst.w ($FFFFFFDC).w beq.s loc_325958 add.w #$4000,d2 loc_325958: ; ... move.w #$100,d3 jsr QueueDMATransfer rts ; End of function sub_3258B6 ; =============== S U B R O U T I N E ======================================= sub_325964: ; ... move.w d3,d0 lsr.w #8,d0 and.w #7,d0 move.b (a3,d0.w),d0 and.w #7,d0 beq.s loc_32598C ror.w #7,d0 lea (S2_ArtUnc_CNZSlotPics).l,a2 add.w d0,a2 move.w d3,d0 and.w #$F8,d0 lsr.w #1,d0 add.w d0,a2 rts ; --------------------------------------------------------------------------- loc_32598C: ; ... lea (byte_33B1F0).l,a2 move.w d3,d0 and.w #$F8,d0 lsr.w #1,d0 add.w d0,a2 rts ; End of function sub_325964 ; =============== S U B R O U T I N E ======================================= sub_32599E: ; ... move.b 5(a4),d2 move.b d2,d3 and.w #$F0,d2 lsr.w #4,d2 and.w #$F,d3 moveq #0,d0 cmp.b 4(a4),d2 bne.s loc_3259B8 addq.w #4,d0 loc_3259B8: ; ... cmp.b 4(a4),d3 bne.s loc_3259C0 addq.w #8,d0 loc_3259C0: ; ... jmp loc_3259C4(pc,d0.w) loc_3259C4: bra.w loc_325A34 ; --------------------------------------------------------------------------- bra.w loc_325A0A ; --------------------------------------------------------------------------- bra.w loc_3259DC ; --------------------------------------------------------------------------- move.w d2,d0 bsr.w sub_325A8A move.w d0,4(a4) rts ; --------------------------------------------------------------------------- loc_3259DC: ; ... cmp.b #3,d3 bne.s loc_3259F2 move.w d2,d0 bsr.w sub_325A8A bsr.w sub_325A98 move.w d0,4(a4) rts ; --------------------------------------------------------------------------- loc_3259F2: ; ... cmp.b #3,d2 bne.w loc_325A34 move.w d3,d0 bsr.w sub_325A8A bsr.w sub_325A9C move.w d0,4(a4) rts ; --------------------------------------------------------------------------- loc_325A0A: ; ... cmp.b #3,d2 bne.s loc_325A1E move.w d3,d0 bsr.s sub_325A8A bsr.w sub_325A98 move.w d0,4(a4) rts ; --------------------------------------------------------------------------- loc_325A1E: ; ... cmp.b #3,d3 bne.w loc_325A34 move.w d2,d0 bsr.s sub_325A8A bsr.w sub_325A9C move.w d0,4(a4) rts ; --------------------------------------------------------------------------- loc_325A34: ; ... cmp.b d2,d3 bne.s loc_325A68 cmp.b #3,4(a4) bne.s loc_325A4E move.w d2,d0 bsr.s sub_325A8A bsr.w sub_325A9C move.w d0,4(a4) rts ; --------------------------------------------------------------------------- loc_325A4E: ; ... cmp.b #3,d2 bne.s loc_325A68 move.b 4(a4),d0 and.w #$F,d0 bsr.s sub_325A8A bsr.w sub_325A98 move.w d0,4(a4) rts ; --------------------------------------------------------------------------- loc_325A68: ; ... moveq #2,d1 moveq #0,d0 cmp.b #5,4(a4) bne.s loc_325A76 add.w d1,d0 loc_325A76: ; ... cmp.b #5,d2 bne.s loc_325A7E add.w d1,d0 loc_325A7E: ; ... cmp.b #5,d3 bne.s loc_325A86 add.w d1,d0 loc_325A86: ; ... move.w d0,4(a4) ; End of function sub_32599E ; =============== S U B R O U T I N E ======================================= sub_325A8A: ; ... add.w d0,d0 lea (word_325AA0).l,a2 move.w (a2,d0.w),d0 rts ; End of function sub_325A8A ; =============== S U B R O U T I N E ======================================= sub_325A98: ; ... asl.w #2,d0 rts ; End of function sub_325A98 ; =============== S U B R O U T I N E ======================================= sub_325A9C: ; ... add.w d0,d0 rts ; End of function sub_325A9C ; --------------------------------------------------------------------------- word_325AA0: dc.w $1E, $19, -1, $96, $A, $14; 0 ; ... byte_325AAC: dc.b 8, 3, $33, $12, 0, 0, $12, 1, $11, $24; 0 ; ... dc.b 2, $22, $1E, 4, $44, $1E, 5, $55, -1, $F; 10 dc.b -1 ; 20 byte_325AC1: dc.b 3, 0, 1, 4, 2, 5, 4, 1; 0 ; ... byte_325AC9: dc.b 3, 0, 1, 4, 2, 5, 0, 2; 0 ; ... byte_325AD1: dc.b 3, 0, 1, 4, 2, 5, 4, 1, 0; 0 ; ... ; --------------------------------------------------------------------------- ObjD7: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_325AE8(pc,d0.w),d1 jmp off_325AE8(pc,d1.w) ; --------------------------------------------------------------------------- off_325AE8: dc.w loc_325AEC-off_325AE8,loc_325B40-off_325AE8; 0 ; ... ; --------------------------------------------------------------------------- loc_325AEC: ; ... addq.b #2,$24(a0) move.l #Map_ObjD7,4(a0) move.w #$4394,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$10,$19(a0) move.b #1,$18(a0) move.b #$CA,$20(a0) btst #0,$22(a0) beq.s loc_325B2A move.b #1,$34(a0) loc_325B2A: ; ... move.w 8(a0),d0 move.w d0,d1 sub.w #$60,d0 move.w d0,$30(a0) add.w #$60,d1 move.w d1,$32(a0) loc_325B40: ; ... move.b $21(a0),d0 beq.w loc_325C12 lea ($FFFFB000).w,a1 bclr #0,$21(a0) beq.s loc_325B56 bsr.s sub_325B6C loc_325B56: ; ... lea ($FFFFB040).w,a1 bclr #1,$21(a0) beq.s loc_325B64 bsr.s sub_325B6C loc_325B64: ; ... clr.b $21(a0) bra.w loc_325C12 ; =============== S U B R O U T I N E ======================================= sub_325B6C: ; ... move.w 8(a0),d1 move.w $C(a0),d2 sub.w 8(a1),d1 sub.w $C(a1),d2 jsr CalcAngle add.b #$20,d0 and.w #$C0,d0 cmp.w #$40,d0 beq.s loc_325BAA cmp.w #$80,d0 beq.s loc_325BC8 cmp.w #$C0,d0 beq.s loc_325BD6 move.w #$F800,$10(a1) move.b #2,$1C(a0) bra.s loc_325BF2 ; --------------------------------------------------------------------------- loc_325BAA: ; ... sub.w #$200,$10(a1) tst.w d1 bpl.s loc_325BBA add.w #$400,$10(a1) loc_325BBA: ; ... move.w #$F800,$12(a1) move.b #1,$1C(a0) bra.s loc_325BF2 ; --------------------------------------------------------------------------- loc_325BC8: ; ... move.w #$800,$10(a1) move.b #2,$1C(a0) bra.s loc_325BF2 ; --------------------------------------------------------------------------- loc_325BD6: ; ... sub.w #$200,$10(a1) tst.w d1 bpl.s loc_325BE6 add.w #$400,$10(a1) loc_325BE6: ; ... move.w #$800,$12(a1) move.b #1,$1C(a0) loc_325BF2: ; ... bset #1,$22(a1) bclr #4,$22(a1) bclr #5,$22(a1) clr.b $3C(a1) move.w #$B4,d0 jmp PlaySound ; End of function sub_325B6C ; --------------------------------------------------------------------------- loc_325C12: ; ... lea (Ani_ObjD7).l,a1 jsr AnimateSprite tst.b $28(a0) beq.w loc_325CA8 tst.b $34(a0) beq.s loc_325C44 move.w 8(a0),d0 subq.w #1,d0 cmp.w $30(a0),d0 bne.s loc_325C3E move.b #0,$34(a0) loc_325C3E: ; ... move.w d0,8(a0) bra.s loc_325C5A ; --------------------------------------------------------------------------- loc_325C44: ; ... move.w 8(a0),d0 addq.w #1,d0 cmp.w $32(a0),d0 bne.s loc_325C56 move.b #1,$34(a0) loc_325C56: ; ... move.w d0,8(a0) loc_325C5A: ; ... tst.w ($FFFFFFDC).w beq.s loc_325C66 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_325C66: ; ... move.w $30(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bls.s loc_325C8A move.w $32(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.s loc_325C90 loc_325C8A: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_325C90: ; ... lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 beq.s loc_325CA2 bclr #7,2(a2,d0.w) loc_325CA2: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_325CA8: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- Ani_ObjD7: dc.w byte_325CB4-Ani_ObjD7,byte_325CB7-Ani_ObjD7,byte_325CBD-Ani_ObjD7; 0 ; ... byte_325CB4: dc.b $F, 0, -1 ; 0 ; ... byte_325CB7: dc.b 3, 1, 0, 1, -3, 0; 0 ; ... byte_325CBD: dc.b 3, 2, 0, 2, -3, 0, 0; 0 ; ... Map_ObjD7: dc.w byte_325CCA-Map_ObjD7,byte_325CE4-Map_ObjD7,byte_325CFE-Map_ObjD7; 0 ; ... byte_325CCA: dc.b 0, 4,-$10, 9, 0, 0, -1,-$18,-$10, 9; 0 ; ... dc.b 8, 0, 0, 0, 0, 9, $10, 0, -1,-$18; 10 dc.b 0, 9, $18, 0, 0, 0; 20 byte_325CE4: dc.b 0, 4, -$C, 9, 0, 0, -1,-$18, -$C, 9; 0 ; ... dc.b 8, 0, 0, 0, 4, 9, $10, 0, -1,-$18; 10 dc.b 4, 9, $18, 0, 0, 0; 20 byte_325CFE: dc.b 0, 4,-$10, 9, 0, 0, -1,-$14,-$10, 9; 0 ; ... dc.b 8, 0, 0, 4, 0, 9, $10, 0, -1,-$14; 10 dc.b 0, 9, $18, 0, 0, 4; 20 ; --------------------------------------------------------------------------- ObjD8: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_325D26(pc,d0.w),d1 jmp off_325D26(pc,d1.w) ; --------------------------------------------------------------------------- off_325D26: dc.w loc_325D2C-off_325D26,loc_325D6A-off_325D26,loc_325EF8-off_325D26; 0 ; ... ; --------------------------------------------------------------------------- loc_325D2C: ; ... addq.b #2,$24(a0) move.l #Map_ObjD8,4(a0) move.w #$43E6,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #$10,$19(a0) move.b #1,$18(a0) move.b #$D7,$20(a0) move.b $28(a0),d0 rol.b #2,d0 and.b #3,d0 move.b d0,$1C(a0) loc_325D6A: ; ... move.b $21(a0),d0 bne.w loc_325D78 tst.w $30(a0) beq.s loc_325DAE loc_325D78: ; ... lea $30(a0),a4 tst.b (a4) beq.s loc_325D84 subq.b #1,(a4) bra.s loc_325D92 ; --------------------------------------------------------------------------- loc_325D84: ; ... lea ($FFFFB000).w,a1 bclr #0,$21(a0) beq.s loc_325D92 bsr.s sub_325DC0 loc_325D92: ; ... addq.w #1,a4 tst.b (a4) beq.s loc_325D9C subq.b #1,(a4) bra.s loc_325DAA ; --------------------------------------------------------------------------- loc_325D9C: ; ... lea ($FFFFB040).w,a1 bclr #1,$21(a0) beq.s loc_325DAA bsr.s sub_325DC0 loc_325DAA: ; ... clr.b $21(a0) loc_325DAE: ; ... lea (Ani_ObjD8).l,a1 jsr AnimateSprite jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_325DC0: ; ... move.b $1A(a0),d0 subq.b #3,d0 beq.s loc_325DCE bcc.s loc_325DEC addq.b #3,d0 bne.s loc_325DEC loc_325DCE: ; ... move.b #3,$1C(a0) move.w #$F900,$12(a1) move.w $C(a0),d2 sub.w $C(a1),d2 bpl.s loc_325DE8 neg.w $12(a1) loc_325DE8: ; ... bra.w loc_325E78 ; --------------------------------------------------------------------------- loc_325DEC: ; ... subq.b #1,d0 bne.s loc_325E5E move.b #4,$1C(a0) move.w #$20,d3 btst #0,$22(a0) bne.s loc_325E06 move.w #$60,d3 loc_325E06: ; ... move.w $10(a1),d1 move.w $12(a1),d2 jsr CalcAngle sub.w d3,d0 move.w d0,d1 bpl.s loc_325E1C neg.w d1 loc_325E1C: ; ... neg.w d0 add.w d3,d0 cmp.b #$40,d1 bcc.s loc_325E30 cmp.b #$38,d1 bcs.s loc_325E42 move.w d3,d0 bra.s loc_325E42 ; --------------------------------------------------------------------------- loc_325E30: ; ... sub.w #$80,d1 neg.w d1 cmp.b #$38,d1 bcs.s loc_325E42 move.w d3,d0 add.w #$80,d0 loc_325E42: ; ... jsr CalcSine muls.w #-$700,d1 asr.l #8,d1 move.w d1,$10(a1) muls.w #-$700,d0 asr.l #8,d0 move.w d0,$12(a1) bra.s loc_325E78 ; --------------------------------------------------------------------------- loc_325E5E: ; ... move.b #5,$1C(a0) move.w #-$700,$10(a1) move.w 8(a0),d2 sub.w 8(a1),d2 bpl.s loc_325E78 neg.w $10(a1) loc_325E78: ; ... bset #1,$22(a1) bclr #4,$22(a1) bclr #5,$22(a1) clr.b $3C(a1) move.w #$D8,d0 jsr PlaySound move.w a1,a3 moveq #4,d3 moveq #1,d0 sub.w #$2000,2(a0) bcc.s loc_325ECE add.w #$2000,2(a0) move.b #4,$24(a0) lea ($FFFFE700).w,a1 move.b $28(a0),d1 and.w #$3F,d1 lea (a1,d1.w),a1 addq.b #1,(a1) cmp.b #3,(a1) bcs.s loc_325ECE moveq #2,d3 moveq #$32,d0 loc_325ECE: ; ... jsr AddPoints2 jsr SingleObjLoad bne.s loc_325EF2 move.b #$29,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b d3,$1A(a1) loc_325EF2: ; ... move.b #4,(a4) rts ; End of function sub_325DC0 ; --------------------------------------------------------------------------- loc_325EF8: ; ... lea (Ani_ObjD8).l,a1 jsr AnimateSprite cmp.b #3,$1C(a0) bcs.w loc_325F14 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_325F14: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Ani_ObjD8: dc.w byte_325F26-Ani_ObjD8,byte_325F29-Ani_ObjD8,byte_325F2C-Ani_ObjD8; 0 ; ... dc.w byte_325F2F-Ani_ObjD8,byte_325F35-Ani_ObjD8,byte_325F3B-Ani_ObjD8; 3 byte_325F26: dc.b $F, 0, -1 ; 0 ; ... byte_325F29: dc.b $F, 1, -1 ; 0 ; ... byte_325F2C: dc.b $F, 2, -1 ; 0 ; ... byte_325F2F: dc.b 3, 3, 0, 3, -3, 0; 0 ; ... byte_325F35: dc.b 3, 4, 1, 4, -3, 1; 0 ; ... byte_325F3B: dc.b 3, 5, 2, 5, -3, 2, 0; 0 ; ... Map_ObjD8: dc.w byte_325F4E-Map_ObjD8,byte_325F56-Map_ObjD8,byte_325F5E-Map_ObjD8; 0 ; ... dc.w byte_325F66-Map_ObjD8,byte_325F6E-Map_ObjD8,byte_325F76-Map_ObjD8; 3 byte_325F4E: dc.b 0, 1, -8, $D, 0, 0, -1,-$10; 0 ; ... byte_325F56: dc.b 0, 1,-$10, $B, 0, 8, -1, -$C; 0 ; ... byte_325F5E: dc.b 0, 1,-$10, 7, 0, $14, -1, -8; 0 ; ... byte_325F66: dc.b 0, 1, -6, $D, 0, 0, -1,-$10; 0 ; ... byte_325F6E: dc.b 0, 1, -$E, $B, 0, 8, -1, -$E; 0 ; ... byte_325F76: dc.b 0, 1,-$10, 7, 0, $14, -1, -$A; 0 ; ... ; --------------------------------------------------------------------------- ObjD9: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_325F8C(pc,d0.w),d1 jmp off_325F8C(pc,d1.w) ; --------------------------------------------------------------------------- off_325F8C: dc.w loc_325F90-off_325F8C,loc_325FA6-off_325F8C; 0 ; ... ; --------------------------------------------------------------------------- loc_325F90: ; ... addq.b #2,$24(a0) move.b #4,1(a0) move.b #$18,$19(a0) move.b #4,$18(a0) loc_325FA6: ; ... lea $30(a0),a2 lea ($FFFFB000).w,a1 move.w ($FFFFF604).w,d0 bsr.s sub_325FC6 lea ($FFFFB040).w,a1 addq.w #1,a2 move.w ($FFFFF606).w,d0 bsr.s sub_325FC6 jmp MarkObjGone3 ; =============== S U B R O U T I N E ======================================= sub_325FC6: ; ... tst.b (a2) beq.s loc_325FF4 and.b #$70,d0 beq.w return_32605C clr.b $2A(a1) clr.b (a2) move.b #$12,2(a2) and.w #$F00,d0 beq.s loc_325FEA move.b #$3C,2(a2) loc_325FEA: ; ... move.w #$FD00,$12(a1) bra.w return_32605C ; --------------------------------------------------------------------------- loc_325FF4: ; ... tst.b 2(a2) beq.s loc_326002 subq.b #1,2(a2) bne.w return_32605C loc_326002: ; ... move.w 8(a1),d0 sub.w 8(a0),d0 add.w #$18,d0 cmp.w #$30,d0 bcc.w return_32605C move.w $C(a1),d1 sub.w $C(a0),d1 cmp.w #$10,d1 bcc.w return_32605C tst.b $2A(a1) bmi.s return_32605C cmp.b #6,$24(a1) bcc.s return_32605C tst.w ($FFFFFE08).w bne.s return_32605C clr.w $10(a1) clr.w $12(a1) clr.w $14(a1) move.w $C(a0),$C(a1) move.b #$14,$1C(a1) move.b #1,$2A(a1) move.b #1,(a2) return_32605C: ; ... rts ; End of function sub_325FC6 ; --------------------------------------------------------------------------- Obj4A: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32606C(pc,d0.w),d1 jmp off_32606C(pc,d1.w) ; --------------------------------------------------------------------------- off_32606C: dc.w loc_3260AA-off_32606C,loc_326112-off_32606C,loc_326096-off_32606C; 0 ; ... dc.w loc_326074-off_32606C ; 3 ; --------------------------------------------------------------------------- loc_326074: ; ... sub.w #1,$2C(a0) bmi.s loc_32607E rts ; --------------------------------------------------------------------------- loc_32607E: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj4A).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_326096: ; ... subq.w #1,$2C(a0) beq.w loc_3260A4 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3260A4: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_3260AA: ; ... move.l #Map_Obj4A,4(a0) move.w #$2538,2(a0) or.b #4,1(a0) move.b #$A,$20(a0) move.b #4,$18(a0) move.b #$10,$19(a0) move.b #$B,$16(a0) move.b #8,$17(a0) jsr ObjectMoveAndFall jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_32610A add.w d1,$C(a0) move.w #0,$12(a0) addq.b #2,$24(a0) move.w 8(a0),d0 sub.w ($FFFFB008).w,d0 bpl.s loc_32610A bchg #0,$22(a0) loc_32610A: ; ... move.w $C(a0),$2A(a0) rts ; --------------------------------------------------------------------------- loc_326112: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_326132(pc,d0.w),d1 jsr off_326132(pc,d1.w) lea (Ani_Obj4A).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- off_326132: dc.w loc_32613C-off_326132,loc_326162-off_326132,loc_326180-off_326132; 0 ; ... dc.w loc_32619C-off_326132,loc_3261AA-off_326132; 3 ; --------------------------------------------------------------------------- loc_32613C: ; ... move.w 8(a0),d0 sub.w ($FFFFB008).w,d0 cmp.w #$80,d0 bgt.s return_326160 cmp.w #-$80,d0 blt.s return_326160 addq.b #2,$25(a0) move.b #3,$1C(a0) move.w #$20,$2C(a0) return_326160: ; ... rts ; --------------------------------------------------------------------------- loc_326162: ; ... subq.w #1,$2C(a0) bmi.s loc_32616A rts ; --------------------------------------------------------------------------- loc_32616A: ; ... addq.b #2,$25(a0) move.b #4,$1C(a0) move.w #-$200,$12(a0) jmp ObjectMove ; AKA SpeedToPos in Sonic 1 ; --------------------------------------------------------------------------- loc_326180: ; ... add.w #$10,$12(a0) bpl.s loc_32618E jmp ObjectMove ; AKA SpeedToPos in Sonic 1 ; --------------------------------------------------------------------------- loc_32618E: ; ... addq.b #2,$25(a0) move.w #$3C,$2C(a0) bra.w loc_3261D4 ; --------------------------------------------------------------------------- loc_32619C: ; ... subq.w #1,$2C(a0) bmi.s loc_3261A4 rts ; --------------------------------------------------------------------------- loc_3261A4: ; ... addq.b #2,$25(a0) rts ; --------------------------------------------------------------------------- loc_3261AA: ; ... add.w #$10,$12(a0) move.w $C(a0),d0 cmp.w $2A(a0),d0 bcc.s loc_3261C0 jmp ObjectMove ; AKA SpeedToPos in Sonic 1 ; --------------------------------------------------------------------------- loc_3261C0: ; ... clr.b $25(a0) clr.b $1C(a0) clr.w $12(a0) move.b #1,$1A(a0) rts ; --------------------------------------------------------------------------- loc_3261D4: ; ... jsr SingleObjLoad bne.s return_32623E move.b #$4A,0(a1) move.b #6,$24(a1) move.l #Map_Obj4A,4(a1) move.w #$2538,2(a1) move.b #4,$18(a1) move.b #$10,$19(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w #$F,$2C(a1) move.b 1(a0),1(a1) move.b $22(a0),$22(a1) move.b #2,$1C(a1) move.b #$98,$20(a1) move.w #$FE00,$10(a1) btst #0,1(a1) beq.s return_32623E neg.w $10(a1) return_32623E: ; ... rts ; --------------------------------------------------------------------------- Ani_Obj4A: dc.w byte_32624A-Ani_Obj4A,byte_32624E-Ani_Obj4A,byte_326253-Ani_Obj4A; 0 ; ... dc.w byte_326258-Ani_Obj4A,byte_32625C-Ani_Obj4A; 3 byte_32624A: dc.b $F, 1, 0, -1 ; 0 ; ... byte_32624E: dc.b 3, 1, 2, 3, -1 ; 0 ; ... byte_326253: dc.b 2, 5, 6, -1, 0 ; 0 ; ... byte_326258: dc.b $F, 4, -1, 0 ; 0 ; ... byte_32625C: dc.b 7, 0, 1, -3, 1, 0; 0 ; ... Map_Obj4A: dc.w byte_326270-Map_Obj4A,byte_32627E-Map_Obj4A,byte_326292-Map_Obj4A; 0 ; ... dc.w byte_3262A6-Map_Obj4A,byte_3262BA-Map_Obj4A,byte_3262D4-Map_Obj4A; 3 dc.w byte_3262DC-Map_Obj4A ; 6 byte_326270: dc.b 0, 2,-$15, $D, 0, 0, -1,-$10, -5, $D; 0 ; ... dc.b 0, 8, -1,-$10 ; 10 byte_32627E: dc.b 0, 3,-$10, $D, 0, 0, -1,-$10, 0, 9; 0 ; ... dc.b 0, $10, -1,-$18, 0, 9, 0, $16, 0, 0; 10 byte_326292: dc.b 0, 3,-$10, $D, 0, 0, -1,-$10, 0, 9; 0 ; ... dc.b 0, $1C, -1,-$18, 0, 9, 0, $22, 0, 0; 10 byte_3262A6: dc.b 0, 3,-$10, $D, 0, 0, -1,-$10, 0, 9; 0 ; ... dc.b 0, $28, -1,-$18, 0, 9, 0, $2E, 0, 0; 10 byte_3262BA: dc.b 0, 4,-$10, 1, 0, $34, -1, -9,-$10, $D; 0 ; ... dc.b 0, 0, -1,-$10, 0, 9, 0, $10, -1,-$18; 10 dc.b 0, 9, 0, $16, 0, 0; 20 byte_3262D4: dc.b 0, 1, -$E, 1, 0, $36, -1,-$10; 0 ; ... byte_3262DC: dc.b 0, 1, -$E, 1, 0, $38, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- Obj50: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3262F2(pc,d0.w),d1 jmp off_3262F2(pc,d1.w) ; --------------------------------------------------------------------------- off_3262F2: dc.w loc_3262FA-off_3262F2,loc_3263C0-off_3262F2,loc_3263EC-off_3262F2; 0 ; ... dc.w loc_326420-off_3262F2 ; 3 ; --------------------------------------------------------------------------- loc_3262FA: ; ... addq.b #2,$24(a0) move.l #Map_Obj50,4(a0) move.w #$2500,2(a0) or.b #4,1(a0) move.b #$A,$20(a0) move.b #4,$18(a0) move.b #$10,$19(a0) move.w #-$100,$10(a0) move.b $28(a0),d0 move.b d0,d1 and.w #$F0,d1 lsl.w #4,d1 move.w d1,$2E(a0) move.w d1,$30(a0) and.w #$F,d0 lsl.w #4,d0 subq.w #1,d0 move.w d0,$32(a0) move.w d0,$34(a0) move.w $C(a0),$2A(a0) move.w ($FFFFF646).w,$3A(a0) move.b #3,$2E(a0) jsr SingleObjLoad bne.s loc_3263C0 move.b #$50,0(a1) move.b #4,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #$A,8(a1) add.w #-6,$C(a1) move.l #Map_Obj50,4(a1) move.w #$2500,2(a1) or.b #4,1(a1) move.b #3,$18(a1) move.b $22(a0),$22(a1) move.b #3,$1C(a1) move.l a1,$36(a0) move.l a0,$36(a1) bset #6,$22(a0) loc_3263C0: ; ... lea (Ani_Obj50).l,a1 jsr AnimateSprite moveq #0,d0 move.b $25(a0),d0 move.w off_3263E4(pc,d0.w),d1 jsr off_3263E4(pc,d1.w) bsr.w sub_326572 jmp MarkObjGone ; --------------------------------------------------------------------------- off_3263E4: dc.w loc_326438-off_3263E4,loc_326446-off_3263E4,loc_32644C-off_3263E4; 0 ; ... dc.w j_ObjectMove-off_3263E4 ; 3 ; --------------------------------------------------------------------------- loc_3263EC: ; ... move.l $36(a0),a1 tst.b (a1) beq.w loc_32641A cmp.b #$50,(a1) bne.w loc_32641A btst #7,$22(a1) bne.w loc_32641A lea (Ani_Obj50).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32641A: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_326420: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj50).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_326438: ; ... tst.b 1(a0) bmi.s loc_326440 rts ; --------------------------------------------------------------------------- loc_326440: ; ... addq.b #2,$25(a0) rts ; --------------------------------------------------------------------------- loc_326446: ; ... bsr.w sub_3264E4 rts ; --------------------------------------------------------------------------- loc_32644C: ; ... bsr.w sub_326536 bsr.w sub_326456 rts ; =============== S U B R O U T I N E ======================================= sub_326456: ; ... tst.b $2D(a0) bne.w return_3264E2 st $2D(a0) jsr sub_32F5A6 tst.w d1 beq.s return_3264E2 cmp.w #$FFF0,d1 bcc.s return_3264E2 jsr SingleObjLoad bne.s return_3264E2 move.b #$50,0(a1) move.b #6,$24(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.l #Map_Obj50,4(a1) move.w #$2500,2(a1) or.b #4,1(a1) move.b #3,$18(a1) move.b #$98,$20(a1) move.b #2,$1C(a1) move.w #$A,d0 move.w #$10,d1 move.w #$FD00,d2 btst #0,$22(a0) beq.s loc_3264D0 neg.w d1 neg.w d2 loc_3264D0: ; ... sub.w d0,$C(a1) sub.w d1,8(a1) move.w d2,$10(a1) move.w #$200,$12(a1) return_3264E2: ; ... rts ; End of function sub_326456 ; =============== S U B R O U T I N E ======================================= sub_3264E4: ; ... subq.b #1,$3C(a0) bmi.s loc_326526 jsr sub_32F5A6 bclr #0,$22(a0) tst.w d0 beq.s loc_326500 bset #0,$22(a0) loc_326500: ; ... move.w word_326522(pc,d0.w),d2 add.w d2,$10(a0) move.w word_326522(pc,d1.w),d2 add.w d2,$12(a0) move.w #$100,d0 move.w d0,d1 jsr sub_32F5EA jmp ObjectMove ; AKA SpeedToPos in Sonic 1 ; --------------------------------------------------------------------------- word_326522: dc.w -$10 ; ... dc.w $10 ; --------------------------------------------------------------------------- loc_326526: ; ... addq.b #2,$25(a0) move.b #$20,$3C(a0) jmp sub_32F624 ; End of function sub_3264E4 ; =============== S U B R O U T I N E ======================================= sub_326536: ; ... subq.b #1,$3C(a0) bmi.s loc_32653E rts ; --------------------------------------------------------------------------- loc_32653E: ; ... subq.b #1,$2E(a0) bmi.s loc_32655A subq.b #2,$25(a0) move.w #$FF00,$12(a0) move.b #$80,$3C(a0) clr.b $2D(a0) rts ; --------------------------------------------------------------------------- loc_32655A: ; ... move.b #6,$25(a0) move.w #$FE00,$10(a0) clr.w $12(a0) rts ; End of function sub_326536 ; --------------------------------------------------------------------------- j_ObjectMove: ; ... jmp ObjectMove ; AKA SpeedToPos in Sonic 1 ; =============== S U B R O U T I N E ======================================= sub_326572: ; ... moveq #$A,d0 moveq #$FFFFFFFA,d1 move.l $36(a0),a1 move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b $22(a0),$22(a1) move.b $23(a0),$23(a1) move.b 1(a0),1(a1) btst #0,$22(a1) beq.s loc_3265A2 neg.w d0 loc_3265A2: ; ... add.w d0,8(a1) add.w d1,$C(a1) rts ; End of function sub_326572 ; --------------------------------------------------------------------------- Ani_Obj50: dc.w byte_3265B8-Ani_Obj50,byte_3265BB-Ani_Obj50,byte_3265C3-Ani_Obj50; 0 ; ... dc.w byte_3265C9-Ani_Obj50,byte_3265CD-Ani_Obj50,byte_3265D0-Ani_Obj50; 3 byte_3265B8: dc.b $E, 0, -1 ; 0 ; ... byte_3265BB: dc.b 5, 3, 4, 3, 4, 3, 4, -1; 0 ; ... byte_3265C3: dc.b 3, 5, 6, 7, 6, -1; 0 ; ... byte_3265C9: dc.b 3, 1, 2, -1 ; 0 ; ... byte_3265CD: dc.b 1, 5, -1 ; 0 ; ... byte_3265D0: dc.b $E, 8, -1, 0 ; 0 ; ... Map_Obj50: dc.w byte_3265E6-Map_Obj50,byte_3265FA-Map_Obj50,byte_326602-Map_Obj50; 0 ; ... dc.w byte_32660A-Map_Obj50,byte_32661E-Map_Obj50,byte_326632-Map_Obj50; 3 dc.w byte_32663A-Map_Obj50,byte_326642-Map_Obj50,byte_32664A-Map_Obj50; 6 byte_3265E6: dc.b 0, 3,-$18, $D, 0, 0, -1,-$10, -8, 9; 0 ; ... dc.b 0, 8, -1, -8, 8, 5, 0, $E, -1, -8; 10 byte_3265FA: dc.b 0, 1, -8, 5, 0, $22, -1, -8; 0 ; ... byte_326602: dc.b 0, 1, -8, 5, 0, $26, -1, -8; 0 ; ... byte_32660A: dc.b 0, 3,-$18, $D, 0, $12, -1,-$10, -8, 9; 0 ; ... dc.b 0, 8, -1, -8, 8, 5, 0, $E, -1, -8; 10 byte_32661E: dc.b 0, 3,-$18, $D, 0, $1A, -1,-$10, -8, 9; 0 ; ... dc.b 0, 8, -1, -8, 8, 5, 0, $E, -1, -8; 10 byte_326632: dc.b 0, 1, -8, 1, 0, $2A, -1, -4; 0 ; ... byte_32663A: dc.b 0, 1, -8, 1, 0, $2C, -1, -4; 0 ; ... byte_326642: dc.b 0, 1, -8, 1, 0, $2E, -1, -4; 0 ; ... byte_32664A: dc.b 0, 1, -8, $D, 0, $30, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- Obj4B: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_326660(pc,d0.w),d1 jmp off_326660(pc,d1.w) ; --------------------------------------------------------------------------- off_326660: dc.w loc_3266C2-off_326660,loc_326774-off_326660,loc_326680-off_326660; 0 ; ... dc.w loc_326668-off_326660 ; 3 ; --------------------------------------------------------------------------- loc_326668: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj4B).l,a1 jsr AnimateSprite jmp loc_312D44 ; --------------------------------------------------------------------------- loc_326680: ; ... move.l $2A(a0),a1 tst.b (a1) beq.w loc_3266BC tst.w $30(a1) bmi.s loc_326692 rts ; --------------------------------------------------------------------------- loc_326692: ; ... move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.b $22(a1),$22(a0) move.b 1(a1),1(a0) lea (Ani_Obj4B).l,a1 jsr AnimateSprite jmp loc_312D44 ; --------------------------------------------------------------------------- loc_3266BC: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_3266C2: ; ... move.l #Map_Obj4B,4(a0) move.w #$3D2,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #$A,$20(a0) move.b #4,$18(a0) move.b #$10,$19(a0) move.b #$10,$16(a0) move.b #$18,$17(a0) move.b #3,$18(a0) addq.b #2,$24(a0) jsr SingleObjLoad2 bne.s return_326772 move.b #$4B,0(a1) move.b #4,$24(a1) move.l #Map_Obj4B,4(a1) move.w #$3D2,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,$18(a1) move.b #$10,$19(a1) move.b $22(a0),$22(a1) move.b 1(a0),1(a1) move.b #1,$1C(a1) move.l a0,$2A(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w #$100,$2E(a0) move.w #$FF00,$10(a0) btst #0,1(a0) beq.s return_326772 neg.w $10(a0) return_326772: ; ... rts ; --------------------------------------------------------------------------- loc_326774: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_326794(pc,d0.w),d1 jsr off_326794(pc,d1.w) lea (Ani_Obj4B).l,a1 jsr AnimateSprite jmp loc_312D44 ; --------------------------------------------------------------------------- off_326794: dc.w loc_326798-off_326794,loc_32683E-off_326794; 0 ; ... ; --------------------------------------------------------------------------- loc_326798: ; ... bsr.w sub_3267E0 subq.w #1,$30(a0) move.w $30(a0),d0 cmp.w #$F,d0 beq.s loc_3267BE tst.w d0 bpl.s return_3267BC subq.w #1,$2E(a0) bgt.w loc_3267DA move.w #$1E,$30(a0) return_3267BC: ; ... rts ; --------------------------------------------------------------------------- loc_3267BE: ; ... sf $32(a0) neg.w $10(a0) bchg #0,1(a0) bchg #0,$22(a0) move.w #$100,$2E(a0) rts ; --------------------------------------------------------------------------- loc_3267DA: ; ... jmp ObjectMove ; AKA SpeedToPos in Sonic 1 ; =============== S U B R O U T I N E ======================================= sub_3267E0: ; ... tst.b $32(a0) bne.w return_32683C move.w 8(a0),d0 lea ($FFFFB000).w,a1 btst #0,($FFFFFE0F).w beq.s loc_3267FC lea ($FFFFB040).w,a1 loc_3267FC: ; ... sub.w 8(a1),d0 move.w d0,d1 bpl.s loc_326806 neg.w d0 loc_326806: ; ... cmp.w #$28,d0 blt.s return_32683C cmp.w #$30,d0 bgt.s return_32683C tst.w d1 bpl.s loc_326820 btst #0,1(a0) beq.s return_32683C bra.s loc_326828 ; --------------------------------------------------------------------------- loc_326820: ; ... btst #0,1(a0) bne.s return_32683C loc_326828: ; ... st $32(a0) addq.b #2,$25(a0) move.b #3,$1C(a0) move.w #$32,$34(a0) return_32683C: ; ... rts ; End of function sub_3267E0 ; --------------------------------------------------------------------------- loc_32683E: ; ... move.w $34(a0),d0 subq.w #1,d0 blt.s loc_326852 move.w d0,$34(a0) cmp.w #$14,d0 beq.s loc_326858 rts ; --------------------------------------------------------------------------- loc_326852: ; ... subq.b #2,$25(a0) rts ; --------------------------------------------------------------------------- loc_326858: ; ... jsr SingleObjLoad2 bne.s loc_3268D4 move.b #$4B,0(a1) move.b #6,$24(a1) move.l #Map_Obj4B,4(a1) move.w #$3D2,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,$18(a1) move.b #$98,$20(a1) move.b #$10,$19(a1) move.b $22(a0),$22(a1) move.b 1(a0),1(a1) move.b #2,$1C(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #$18,$C(a1) move.w #$D,d0 move.w #$180,$12(a1) move.w #$FE80,$10(a1) btst #0,1(a1) beq.s loc_3268D4 neg.w $10(a1) neg.w d0 loc_3268D4: ; ... add.w d0,8(a1) rts ; --------------------------------------------------------------------------- Ani_Obj4B: dc.w byte_3268E2-Ani_Obj4B,byte_3268E5-Ani_Obj4B,byte_3268E9-Ani_Obj4B; 0 ; ... dc.w byte_3268ED-Ani_Obj4B ; 3 byte_3268E2: dc.b $F, 0, -1 ; 0 ; ... byte_3268E5: dc.b 2, 3, 4, -1 ; 0 ; ... byte_3268E9: dc.b 3, 5, 6, -1 ; 0 ; ... byte_3268ED: dc.b 9, 1, 1, 1, 1, 1, -3, 0, 0; 0 ; ... Map_Obj4B: dc.w byte_326904-Map_Obj4B,byte_326912-Map_Obj4B,byte_326926-Map_Obj4B; 0 ; ... dc.w byte_32693A-Map_Obj4B,byte_326942-Map_Obj4B,byte_32694A-Map_Obj4B; 3 dc.w byte_326952-Map_Obj4B ; 6 byte_326904: dc.b 0, 2, -8, 9, 0, 0, -1,-$18, -8, 9; 0 ; ... dc.b 0, 6, 0, 0 ; 10 byte_326912: dc.b 0, 3, -8, 9, 0, 0, -1,-$18, -8, 5; 0 ; ... dc.b 0, $C, 0, 0, 8, 5, 0, $10, 0, 2; 10 byte_326926: dc.b 0, 3, -8, 9, 0, 0, -1,-$18, -8, 5; 0 ; ... dc.b 0, $C, 0, 0, 8, 5, 0, $14, 0, 2; 10 byte_32693A: dc.b 0, 1,-$10, 1, 0, $14, 0, 4; 0 ; ... byte_326942: dc.b 0, 1,-$10, 1, 0, $16, 0, 4; 0 ; ... byte_32694A: dc.b 0, 1, -8, 1, 0, $18, -1, -$C; 0 ; ... byte_326952: dc.b 0, 1, -8, 1, 0, $1A, -1, -$C; 0 ; ... ; --------------------------------------------------------------------------- Obj5C: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32696E(pc,d0.w),d1 jsr off_32696E(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_32696E: dc.w loc_326972-off_32696E,loc_3269AE-off_32696E; 0 ; ... ; --------------------------------------------------------------------------- loc_326972: ; ... addq.b #2,$24(a0) move.l #Map_Obj5C,4(a0) move.w #$414,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #4,$18(a0) move.b #9,$20(a0) move.b #$10,$19(a0) move.w #$FC00,$12(a0) move.w $C(a0),$30(a0) loc_3269AE: ; ... lea (Ani_Obj5C).l,a1 jsr AnimateSprite jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #$18,$12(a0) move.w $30(a0),d0 cmp.w $C(a0),d0 bcc.s loc_3269DA move.w d0,$C(a0) move.w #$FB00,$12(a0) loc_3269DA: ; ... move.b #1,$1C(a0) sub.w #$C0,d0 cmp.w $C(a0),d0 bcc.s return_3269FC move.b #0,$1C(a0) tst.w $12(a0) bmi.s return_3269FC move.b #2,$1C(a0) return_3269FC: ; ... rts ; --------------------------------------------------------------------------- Ani_Obj5C: dc.w byte_326A04-Ani_Obj5C,byte_326A08-Ani_Obj5C,byte_326A0C-Ani_Obj5C; 0 ; ... byte_326A04: dc.b 7, 0, 1, -1 ; 0 ; ... byte_326A08: dc.b 3, 0, 1, -1 ; 0 ; ... byte_326A0C: dc.b 7, 0, -1, 0 ; 0 ; ... Map_Obj5C: dc.w byte_326A14-Map_Obj5C,byte_326A28-Map_Obj5C; 0 ; ... byte_326A14: dc.b 0, 3,-$10, 5, 0, 0, -1, -$C,-$10, 1; 0 ; ... dc.b 0, 4, 0, 4, 0, 9, 0, $A, -1, -$C; 10 byte_326A28: dc.b 0, 3,-$10, 5, 0, 0, -1, -$C,-$10, 5; 0 ; ... dc.b 0, 6, 0, 2, 0, 9, 0, $10, -1, -$C; 10 ; --------------------------------------------------------------------------- Obj58: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_326A4A(pc,d0.w),d1 jmp off_326A4A(pc,d1.w) ; --------------------------------------------------------------------------- off_326A4A: dc.w loc_326A4E-off_326A4A,loc_326A96-off_326A4A; 0 ; ... ; --------------------------------------------------------------------------- loc_326A4E: ; ... addq.b #2,$24(a0) move.l #Map_Obj58,4(a0) move.w #$8580,2(a0) jsr Adjust2PArtPointer2_Useless move.b #4,1(a0) move.b #0,$18(a0) move.b #0,$20(a0) move.b #$C,$19(a0) move.b #7,$1E(a0) move.b #0,$1A(a0) move.w #$C4,d0 jmp PlaySound ; --------------------------------------------------------------------------- rts ; --------------------------------------------------------------------------- loc_326A96: ; ... subq.b #1,$1E(a0) bpl.s loc_326AB0 move.b #7,$1E(a0) addq.b #1,$1A(a0) cmp.b #7,$1A(a0) beq.w loc_326AB6 loc_326AB0: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_326AB6: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Map_Obj58: dc.w byte_326ACA-Map_Obj58,byte_326AD2-Map_Obj58,byte_326ADA-Map_Obj58; 0 ; ... dc.w byte_326AE2-Map_Obj58,byte_326AEA-Map_Obj58,byte_326AF2-Map_Obj58; 3 dc.w byte_326AFA-Map_Obj58 ; 6 byte_326ACA: dc.b 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... byte_326AD2: dc.b 0, 1,-$10, $F, 0, 4, -1,-$10; 0 ; ... byte_326ADA: dc.b 0, 1,-$10, $F, 0, $14, -1,-$10; 0 ; ... byte_326AE2: dc.b 0, 1,-$10, $F, 0, $24, -1,-$10; 0 ; ... byte_326AEA: dc.b 0, 1,-$10, $F, 0, $34, -1,-$10; 0 ; ... byte_326AF2: dc.b 0, 1,-$10, $F, 0, $44, -1,-$10; 0 ; ... byte_326AFA: dc.b 0, 1,-$10, $F, 0, $54, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- ; (unused?) code after the mappings for Object 58 move.b $1A(a0),d0 jsr CalcSine asr.w #6,d0 add.w ($FFFFF754).w,d0 move.w d0,$C(a0) move.w ($FFFFF750).w,8(a0) addq.b #2,$1A(a0) ; =============== S U B R O U T I N E ======================================= sub_326B20: ; ... cmp.b #8,$26(a0) bcc.s return_326B66 tst.b $32(a0) beq.s loc_326B68 tst.b $20(a0) bne.s return_326B66 tst.b $14(a0) bne.s loc_326B4A move.b #$20,$14(a0) move.w #$AC,d0 jsr PlaySound loc_326B4A: ; ... lea ($FFFFFB22).w,a1 moveq #0,d0 tst.w (a1) bne.s loc_326B58 move.w #$EEE,d0 loc_326B58: ; ... move.w d0,(a1) subq.b #1,$14(a0) bne.s return_326B66 move.b #$F,$20(a0) return_326B66: ; ... rts ; --------------------------------------------------------------------------- loc_326B68: ; ... moveq #$64,d0 jsr AddPoints2 move.w #$B3,($FFFFF75C).w move.b #8,$26(a0) moveq #$40,d0 jsr LoadPLC rts ; End of function sub_326B20 ; =============== S U B R O U T I N E ======================================= sub_326B86: ; ... move.l ($FFFFF750).w,d2 move.l ($FFFFF754).w,d3 move.w ($FFFFF758).w,d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w ($FFFFF75A).w,d0 ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,($FFFFF750).w move.l d3,($FFFFF754).w rts ; End of function sub_326B86 ; =============== S U B R O U T I N E ======================================= sub_326BAC: ; ... moveq #0,d6 move.l a1,a4 lea ($FFFFF740).w,a2 lea $B(a0),a3 tst.b (a3) bne.s loc_326BC0 addq.w #2,a2 bra.s loc_326BC4 ; --------------------------------------------------------------------------- loc_326BC0: ; ... bsr.w sub_326BD2 loc_326BC4: ; ... moveq #0,d6 move.b $F(a0),d6 subq.w #1,d6 bmi.s return_326C38 lea $15(a0),a3 ; End of function sub_326BAC ; =============== S U B R O U T I N E ======================================= sub_326BD2: ; ... move.l a4,a1 moveq #0,d0 moveq #0,d1 moveq #0,d2 moveq #0,d4 move.b (a2)+,d0 move.b d0,d1 lsr.b #4,d1 and.b #$F,d0 move.b d0,d2 cmp.b d0,d1 beq.s loc_326BEE st d4 loc_326BEE: ; ... move.b d0,d5 lsl.b #4,d5 or.b d0,d5 move.b (a2)+,d0 move.b d0,d1 lsr.b #4,d1 tst.b d4 beq.s loc_326C02 moveq #0,d0 moveq #0,d1 loc_326C02: ; ... and.b #$F,d0 sub.b #1,d0 bpl.s loc_326C24 add.w d2,d2 add.w (a1,d2.w),a1 move.b (a1),d0 move.b 1(a1,d1.w),d2 bmi.s loc_326C3A loc_326C1A: ; ... and.b #$7F,d2 move.b d2,(a3) add.b #1,d1 loc_326C24: ; ... lsl.b #4,d1 or.b d1,d0 move.b d0,-1(a2) move.b d5,-2(a2) add.w #6,a3 dbf d6,sub_326BD2 return_326C38: ; ... rts ; --------------------------------------------------------------------------- loc_326C3A: ; ... addq.b #1,d2 bne.s loc_326C48 move.b #0,d1 move.b 1(a1),d2 bra.s loc_326C1A ; --------------------------------------------------------------------------- loc_326C48: ; ... addq.b #1,d2 bne.s loc_326C54 add.b #2,$26(a0) rts ; --------------------------------------------------------------------------- loc_326C54: ; ... addq.b #1,d2 bne.s loc_326C62 and.b #$F0,d5 or.b 2(a1,d1.w),d5 bra.s loc_326C24 ; --------------------------------------------------------------------------- loc_326C62: ; ... addq.b #1,d2 bne.s return_326C72 moveq #0,d3 move.b 2(a1,d1.w),d1 move.b 1(a1,d1.w),d2 bra.s loc_326C1A ; --------------------------------------------------------------------------- return_326C72: ; ... rts ; End of function sub_326BD2 ; =============== S U B R O U T I N E ======================================= sub_326C74: ; ... move.b ($FFFFFE0F).w,d0 and.b #7,d0 bne.s return_326CBA jsr SingleObjLoad bne.s return_326CBA move.b #$58,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) jsr RandomNumber move.w d0,d1 moveq #0,d1 move.b d0,d1 lsr.b #2,d1 sub.w #$20,d1 add.w d1,8(a1) lsr.w #8,d0 lsr.b #2,d0 sub.w #$20,d0 add.w d0,$C(a1) return_326CBA: ; ... rts ; End of function sub_326C74 ; --------------------------------------------------------------------------- Obj5D: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_326CCA(pc,d0.w),d1 jmp off_326CCA(pc,d1.w) ; --------------------------------------------------------------------------- off_326CCA: dc.w loc_326CE6-off_326CCA,loc_326EDC-off_326CCA,loc_32733A-off_326CCA; 0 ; ... dc.w loc_3273FE-off_326CCA,loc_32754C-off_326CCA,loc_327618-off_326CCA; 3 dc.w loc_327C1A-off_326CCA,loc_327598-off_326CCA,loc_327730-off_326CCA; 6 dc.w loc_32724E-off_326CCA,loc_3271F4-off_326CCA,loc_327EA8-off_326CCA; 9 dc.w loc_327F00-off_326CCA,loc_327FAA-off_326CCA; 12 ; --------------------------------------------------------------------------- loc_326CE6: ; ... move.l #Map_Obj5D,4(a0) move.w #$2420,2(a0) or.b #4,1(a0) move.b #$20,$19(a0) move.w #$2B80,8(a0) move.w #$4B0,$C(a0) move.b #3,$18(a0) move.b #$F,$20(a0) move.b #8,$21(a0) addq.b #2,$24(a0) move.w 8(a0),$30(a0) move.w $C(a0),$38(a0) bclr #3,$2D(a0) jsr Adjust2PArtPointer2_Useless jsr SingleObjLoad2 bne.w loc_326E3A move.b #$5D,0(a1) move.l a0,$34(a1) move.l a1,$34(a0) move.l #Map_Obj5D,4(a1) move.w #$420,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #3,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) move.b #$16,$24(a1) move.b #1,$1C(a1) move.b 1(a0),1(a1) jsr Adjust2PArtPointer_Useless tst.b $28(a0) bmi.w loc_326E3A jsr SingleObjLoad2 bne.w loc_326E3A move.b #$5D,0(a1) move.l a0,$34(a1) move.l #Map_Obj5D_0,4(a1) move.w #$418,2(a1) jsr Adjust2PArtPointer_Useless move.b #1,$1E(a0) move.b #4,1(a1) move.b #$20,$19(a1) move.b #3,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) move.b #$18,$24(a1) move.b 1(a0),1(a1) jsr SingleObjLoad2 bne.s loc_326E3A move.b #$5D,0(a1) move.l a0,$34(a1) move.l #Map_Obj5D_1,4(a1) move.w #$2500,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #2,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) move.b #$12,$24(a1) loc_326E3A: ; ... jsr SingleObjLoad2 bne.s loc_326E96 move.b #$5D,0(a1) move.l a0,$34(a1) move.l #Map_Obj5D_1,4(a1) move.w #$2500,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #4,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) sub.w #$38,$C(a1) sub.w #$10,8(a1) move.w #$FFF0,$2E(a1) add.b #$10,$24(a1) move.b #6,$1C(a1) loc_326E96: ; ... jsr SingleObjLoad2 bne.s return_326EDA move.b #$5D,0(a1) move.l a0,$34(a1) move.l #Map_Obj5D_1,4(a1) move.w #$2500,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #4,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) move.b #4,$24(a1) return_326EDA: ; ... rts ; --------------------------------------------------------------------------- loc_326EDC: ; ... bsr.w sub_326F20 moveq #0,d0 move.b $25(a0),d0 move.w off_326F12(pc,d0.w),d1 jsr off_326F12(pc,d1.w) lea (Ani_Obj5D).l,a1 jsr AnimateSprite move.b $22(a0),d0 and.b #3,d0 and.b #$FC,1(a0) or.b d0,1(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- off_326F12: dc.w loc_326FF4-off_326F12,loc_32712E-off_326F12,loc_327196-off_326F12; 0 ; ... dc.w loc_3271AA-off_326F12,sub_326F42-off_326F12,loc_326F66-off_326F12; 3 dc.w loc_326FB4-off_326F12 ; 6 ; =============== S U B R O U T I N E ======================================= sub_326F20: ; ... cmp.b #8,$25(a0) bge.s return_326F38 move.w ($FFFFB008).w,d0 sub.w 8(a0),d0 bgt.s loc_326F3A bclr #0,$22(a0) return_326F38: ; ... rts ; --------------------------------------------------------------------------- loc_326F3A: ; ... bset #0,$22(a0) rts ; End of function sub_326F20 ; =============== S U B R O U T I N E ======================================= sub_326F42: ; ... subq.w #1,$3C(a0) bpl.w loc_3270CA bset #0,$22(a0) bclr #7,$22(a0) clr.w $10(a0) addq.b #2,$25(a0) move.w #$FFDA,$3C(a0) rts ; --------------------------------------------------------------------------- loc_326F66: ; ... addq.w #1,$3C(a0) beq.s loc_326F76 bpl.s loc_326F7C add.w #$18,$12(a0) bra.s loc_326FAC ; --------------------------------------------------------------------------- loc_326F76: ; ... clr.w $12(a0) bra.s loc_326FAC ; --------------------------------------------------------------------------- loc_326F7C: ; ... cmp.w #$30,$3C(a0) bcs.s loc_326F94 beq.s loc_326F9C cmp.w #$38,$3C(a0) bcs.s loc_326FAC addq.b #2,$25(a0) bra.s loc_326FAC ; --------------------------------------------------------------------------- loc_326F94: ; ... sub.w #8,$12(a0) bra.s loc_326FAC ; --------------------------------------------------------------------------- loc_326F9C: ; ... clr.w $12(a0) jsr sub_30D038 jsr sub_30D042 loc_326FAC: ; ... bsr.w loc_3270A4 bra.w loc_327010 ; --------------------------------------------------------------------------- loc_326FB4: ; ... bset #6,$2E(a0) move.w #$400,$10(a0) move.w #-$40,$12(a0) cmp.w #$2C30,($FFFFEECA).w bcc.s loc_326FD4 addq.w #2,($FFFFEECA).w bra.s loc_326FDA ; --------------------------------------------------------------------------- loc_326FD4: ; ... tst.b 1(a0) bpl.s loc_326FE2 loc_326FDA: ; ... bsr.w loc_3270A4 bra.w loc_327010 ; --------------------------------------------------------------------------- loc_326FE2: ; ... addq.l #4,sp move.l $34(a0),a1 jsr DeleteObject2 jmp DeleteObject ; --------------------------------------------------------------------------- loc_326FF4: ; ... move.w #$100,$12(a0) bsr.w loc_3270A4 cmp.w #$4C0,$38(a0) bne.s loc_327010 move.w #0,$12(a0) addq.b #2,$25(a0) loc_327010: ; ... move.b $3F(a0),d0 jsr CalcSine asr.w #6,d0 add.w $38(a0),d0 move.w d0,$C(a0) move.w $30(a0),8(a0) addq.b #2,$3F(a0) cmp.b #8,$25(a0) bcc.s return_32707A tst.b $22(a0) bmi.s loc_32707C tst.b $20(a0) bne.s return_32707A tst.b $3E(a0) bne.s loc_327058 move.b #$20,$3E(a0) move.w #$AC,d0 jsr PlaySound loc_327058: ; ... lea ($FFFFFB22).w,a1 moveq #0,d0 tst.w (a1) bne.s loc_327066 move.w #$EEE,d0 loc_327066: ; ... move.w d0,(a1) subq.b #1,$3E(a0) bne.s return_32707A move.b #$F,$20(a0) bclr #1,$2D(a0) return_32707A: ; ... rts ; --------------------------------------------------------------------------- loc_32707C: ; ... moveq #$64,d0 jsr AddPoints2 move.b #8,$25(a0) move.w #$B3,$3C(a0) move.l $34(a0),a1 move.b #4,$1C(a1) moveq #$40,d0 jmp LoadPLC ; --------------------------------------------------------------------------- rts ; --------------------------------------------------------------------------- loc_3270A4: ; ... move.l $30(a0),d2 move.l $38(a0),d3 move.w $10(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,$30(a0) move.l d3,$38(a0) rts ; --------------------------------------------------------------------------- loc_3270CA: ; ... move.b ($FFFFFE0F).w,d0 and.b #7,d0 bne.s return_327110 jsr SingleObjLoad bne.s return_327110 move.b #$58,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) jsr RandomNumber move.w d0,d1 moveq #0,d1 move.b d0,d1 lsr.b #2,d1 sub.w #$20,d1 add.w d1,8(a1) lsr.w #8,d0 lsr.b #2,d0 sub.w #$20,d0 add.w d0,$C(a1) return_327110: ; ... rts ; End of function sub_326F42 ; =============== S U B R O U T I N E ======================================= sub_327112: ; ... jsr SingleObjLoad bne.s return_32712C move.b #$58,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) return_32712C: ; ... rts ; End of function sub_327112 ; --------------------------------------------------------------------------- loc_32712E: ; ... btst #3,$2D(a0) bne.s loc_32713C move.w #$2B30,d0 bra.s loc_327140 ; --------------------------------------------------------------------------- loc_32713C: ; ... move.w #$2A50,d0 loc_327140: ; ... move.w d0,d1 sub.w $30(a0),d0 bpl.s loc_32714A neg.w d0 loc_32714A: ; ... cmp.w #3,d0 ble.s loc_32716C cmp.w $30(a0),d1 bgt.s loc_32715E move.w #$FD00,$10(a0) bra.s loc_327164 ; --------------------------------------------------------------------------- loc_32715E: ; ... move.w #$300,$10(a0) loc_327164: ; ... bsr.w loc_3270A4 bra.w loc_327010 ; --------------------------------------------------------------------------- loc_32716C: ; ... cmp.w #$4C0,$38(a0) bne.w loc_327010 move.w #0,$10(a0) move.w #0,$12(a0) addq.b #2,$25(a0) bchg #3,$2D(a0) bset #0,$2E(a0) bra.w loc_327010 ; --------------------------------------------------------------------------- loc_327196: ; ... btst #0,$2E(a0) beq.s loc_3271A2 bra.w loc_327010 ; --------------------------------------------------------------------------- loc_3271A2: ; ... addq.b #2,$25(a0) bra.w loc_327010 ; --------------------------------------------------------------------------- loc_3271AA: ; ... move.w ($FFFFB008).w,d0 add.w #$4C,d0 cmp.w $30(a0),d0 bgt.s loc_3271D8 beq.w loc_327010 sub.l #$10000,$30(a0) cmp.w #$2A28,$30(a0) bgt.w loc_327010 move.w #$2A28,$30(a0) bra.w loc_327010 ; --------------------------------------------------------------------------- loc_3271D8: ; ... add.l #$10000,$30(a0) cmp.w #$2B70,$30(a0) blt.w loc_327010 move.w #$2B70,$30(a0) bra.w loc_327010 ; --------------------------------------------------------------------------- loc_3271F4: ; ... cmp.b #$F9,$30(a0) beq.s loc_327216 sub.b #1,$30(a0) bgt.w loc_327FF2 bsr.w sub_327112 move.b #$F9,$30(a0) move.w #$1E,$2A(a0) loc_327216: ; ... subq.w #1,$2A(a0) bpl.w loc_327FF2 move.w $10(a0),d0 add.w d0,8(a0) move.l $C(a0),d3 move.w $12(a0),d0 add.w #$38,$12(a0) ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d3,$C(a0) cmp.l #$5800000,d3 bcc.w loc_327FF8 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32724E: ; ... btst #7,$22(a0) bne.s loc_327284 move.l $34(a0),a1 move.l 8(a1),8(a0) move.l $C(a1),$C(a0) move.b 1(a1),1(a0) move.b $22(a1),$22(a0) move.l #Ani_Obj5D_0,a1 ; Why is this not a lea instruction? jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_327284: ; ... moveq #$22,d3 move.b #$78,$30(a0) move.l $34(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.b d3,$1A(a0) move.b #$14,$24(a0) jsr RandomNumber asr.w #8,d0 asr.w #6,d0 move.w d0,$10(a0) move.w #-$380,$12(a0) moveq #1,d2 addq.w #1,d3 loc_3272BE: ; ... jsr SingleObjLoad bne.w loc_327FF8 move.b #$5D,0(a1) move.l #Map_Obj5D_1,4(a1) move.b d3,$1A(a1) move.b #$14,$24(a1) move.w #$2500,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #2,$18(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b $22(a0),$22(a1) move.b 1(a0),1(a1) jsr RandomNumber asr.w #8,d0 asr.w #6,d0 move.w d0,$10(a1) move.w #-$380,$12(a1) swap d0 add.b #$1E,d0 and.w #$7F,d0 move.b d0,$30(a1) addq.w #1,d3 dbf d2,loc_3272BE rts ; --------------------------------------------------------------------------- loc_32733A: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_327348(pc,d0.w),d1 jmp off_327348(pc,d1.w) ; --------------------------------------------------------------------------- off_327348: dc.w loc_32734C-off_327348,loc_32737A-off_327348; 0 ; ... ; --------------------------------------------------------------------------- loc_32734C: ; ... move.l $34(a0),a1 btst #0,$2E(a1) bne.s loc_32735A rts ; --------------------------------------------------------------------------- loc_32735A: ; ... move.w 8(a1),8(a0) move.w $C(a1),$C(a0) add.w #$18,$C(a0) move.w #$C,$2C(a0) addq.b #2,$25(a0) move.l a0,a1 bra.s loc_327388 ; --------------------------------------------------------------------------- loc_32737A: ; ... jsr SingleObjLoad2 beq.s loc_327384 rts ; --------------------------------------------------------------------------- loc_327384: ; ... move.l a0,$34(a1) loc_327388: ; ... subq.w #1,$2C(a0) blt.s loc_3273EE move.b #$5D,0(a1) move.l #Map_Obj5D_1,4(a1) move.w #$2500,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #5,$18(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w $2C(a0),d0 sub.w #$B,d0 neg.w d0 lsl.w #3,d0 move.w d0,$38(a1) add.w d0,$C(a1) move.b #1,$1C(a1) cmp.b #2,$25(a1) beq.w loc_327598 move.b #$E,$24(a1) bra.w loc_327598 ; --------------------------------------------------------------------------- loc_3273EE: ; ... move.b #0,$25(a0) move.b #6,$24(a0) bra.w loc_327598 ; --------------------------------------------------------------------------- loc_3273FE: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_32740C(pc,d0.w),d1 jmp off_32740C(pc,d1.w) ; --------------------------------------------------------------------------- off_32740C: dc.w loc_327412-off_32740C,loc_3274A0-off_32740C,loc_32750E-off_32740C; 0 ; ... ; --------------------------------------------------------------------------- loc_327412: ; ... jsr SingleObjLoad2 bne.w loc_327598 move.b #$E,$24(a0) move.b #6,$24(a1) move.b #2,$25(a1) move.b #$5D,0(a1) move.l #Map_Obj5D_1,4(a1) move.w #$2500,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #4,$18(a1) move.b #2,$32(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w #$58,d0 move.b d0,$31(a1) add.w d0,$C(a1) move.b #2,$1C(a1) move.l a0,$34(a1) move.b #$12,$30(a1) jsr SingleObjLoad2 bne.s loc_32749C move.b #$5D,0(a1) move.b #$A,$24(a1) move.l $34(a0),$34(a1) loc_32749C: ; ... bra.w loc_327598 ; --------------------------------------------------------------------------- loc_3274A0: ; ... move.l $34(a0),a1 move.l $34(a1),a2 btst #7,$22(a2) bne.w loc_327FF8 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) sub.b #1,$30(a0) bne.s loc_3274F2 move.b #$12,$30(a0) sub.b #8,$31(a0) bgt.s loc_3274F2 bmi.s loc_3274E4 move.b #3,$1C(a0) move.b #$C,$30(a0) bra.s loc_3274F2 ; --------------------------------------------------------------------------- loc_3274E4: ; ... move.b #6,$30(a0) move.b #4,$25(a0) rts ; --------------------------------------------------------------------------- loc_3274F2: ; ... moveq #0,d0 move.b $31(a0),d0 add.w d0,$C(a0) lea (Ani_Obj5D_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32750E: ; ... sub.b #1,$30(a0) beq.s loc_327518 rts ; --------------------------------------------------------------------------- loc_327518: ; ... subq.b #1,$32(a0) beq.s loc_327536 move.b #2,$1C(a0) move.b #$12,$30(a0) move.b #2,$25(a0) move.b #$58,$31(a0) loc_327536: ; ... move.l $34(a0),a1 move.b #8,$24(a1) move.b #$58,$31(a1) jmp DeleteObject ; --------------------------------------------------------------------------- loc_32754C: ; ... tst.b $3C(a0) bne.s loc_327588 moveq #0,d0 move.b $31(a0),d0 add.w $C(a0),d0 lea ($FFFFB000).w,a1 moveq #$7F,d1 loc_327562: ; ... cmp.w $C(a1),d0 beq.s loc_327578 lea $40(a1),a1 dbf d1,loc_327562 bra.s loc_327598 ; --------------------------------------------------------------------------- loc_327572: ; ... st $3C(a0) bra.s loc_327598 ; --------------------------------------------------------------------------- loc_327578: ; ... moveq #0,d7 move.b #$5D,d7 cmp.b (a1),d7 beq.s loc_32758A dbf d1,loc_327562 bra.s loc_327598 ; --------------------------------------------------------------------------- loc_327588: ; ... move.l a0,a1 loc_32758A: ; ... bset #7,$22(a1) sub.b #8,$31(a0) beq.s loc_327572 loc_327598: ; ... move.l $34(a0),a1 move.l $34(a1),a2 btst #7,$22(a2) bne.s loc_3275EA move.w 8(a1),8(a0) move.w $C(a1),$C(a0) cmp.b #4,$25(a0) bne.s loc_3275C2 add.w #$18,$C(a0) loc_3275C2: ; ... btst #7,$22(a0) bne.s loc_3275E4 move.w $38(a0),d0 add.w d0,$C(a0) lea (Ani_Obj5D_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3275E4: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_3275EA: ; ... move.b #$14,$24(a0) jsr RandomNumber asr.w #8,d0 asr.w #6,d0 move.w d0,$10(a0) move.w #$FC80,$12(a0) swap d0 add.b #$1E,d0 and.w #$7F,d0 move.b d0,$30(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_327618: ; ... btst #7,$22(a0) bne.w loc_327FF8 moveq #0,d0 move.b $25(a0),d0 move.w off_327630(pc,d0.w),d1 jmp off_327630(pc,d1.w) ; --------------------------------------------------------------------------- off_327630: dc.w loc_327636-off_327630,loc_32767C-off_327630,loc_3276CE-off_327630; 0 ; ... ; --------------------------------------------------------------------------- loc_327636: ; ... addq.b #2,$25(a0) move.b #$5D,0(a0) move.l #Map_Obj5D_1,4(a0) move.w #$6500,2(a0) move.b #4,1(a0) move.b #$20,$19(a0) move.b #4,$18(a0) move.l $34(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.b #$F,$30(a0) move.b #4,$1C(a0) loc_32767C: ; ... subq.b #1,$30(a0) bne.s loc_3276A0 move.b #5,$1C(a0) move.b #4,$30(a0) addq.b #2,$25(a0) sub.w #$24,$C(a0) sub.w #2,8(a0) rts ; --------------------------------------------------------------------------- loc_3276A0: ; ... move.l $34(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.b $22(a1),$22(a0) move.b 1(a1),1(a0) lea (Ani_Obj5D_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3276CE: ; ... subq.b #1,$30(a0) bne.s loc_3276F4 move.b #0,$25(a0) move.l $34(a0),a1 bset #1,$2E(a1) addq.b #1,$3C(a0) cmp.b #$C,$3C(a0) bge.w loc_327FF8 rts ; --------------------------------------------------------------------------- loc_3276F4: ; ... move.l $34(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) sub.w #$24,$C(a0) sub.w #2,8(a0) btst #0,1(a0) beq.s loc_32771E add.w #4,8(a0) loc_32771E: ; ... lea (Ani_Obj5D_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_327730: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_32773E(pc,d0.w),d1 jmp off_32773E(pc,d1.w) ; --------------------------------------------------------------------------- off_32773E: dc.w loc_32774A-off_32773E,loc_3277FA-off_32773E,loc_327BB0-off_32773E; 0 ; ... dc.w loc_327B44-off_32773E,loc_327C06-off_32773E,loc_327886-off_32773E; 3 ; --------------------------------------------------------------------------- loc_32774A: ; ... move.l $34(a0),a1 btst #7,$2E(a1) bne.s loc_3277AC bset #7,$2E(a1) jsr SingleObjLoad2 bne.s loc_3277AC move.b #$5D,0(a1) move.l a0,$34(a1) move.l #Map_Obj5D_1,4(a1) move.w #$2500,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #4,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) move.b #$10,$24(a1) move.b #4,$25(a1) move.b #9,$1C(a1) loc_3277AC: ; ... jsr SingleObjLoad2 bne.s loc_3277F6 move.b #$5D,0(a1) move.l a0,$34(a1) move.l #Map_Obj5D_1,4(a1) move.w #$6500,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #4,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) add.b #$10,$24(a1) move.b #6,$25(a1) loc_3277F6: ; ... addq.b #2,$25(a0) loc_3277FA: ; ... move.l $34(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) sub.w #$38,$C(a0) btst #7,$22(a0) bne.s loc_32787E btst #2,$2E(a1) beq.s loc_32782A bsr.w sub_327A6E bsr.w sub_327992 bra.s loc_32784A ; --------------------------------------------------------------------------- loc_32782A: ; ... btst #5,$2E(a1) beq.s loc_32784A subq.w #1,$2A(a0) bne.s loc_32784A bclr #5,$2E(a1) bset #3,$2E(a1) bset #4,$2E(a1) loc_32784A: ; ... move.l $34(a0),a1 move.b $22(a1),$22(a0) move.b 1(a1),1(a0) move.w $2E(a0),d0 btst #0,1(a0) beq.s loc_327868 neg.w d0 loc_327868: ; ... add.w d0,8(a0) lea (Ani_Obj5D_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32787E: ; ... move.b #$A,$25(a0) bra.s loc_32784A ; --------------------------------------------------------------------------- loc_327886: ; ... move.l d7,-(sp) move.b #$1E,$30(a0) move.l $34(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) sub.w #$38,$C(a0) move.w $2E(a0),d0 btst #0,1(a0) beq.s loc_3278B2 neg.w d0 loc_3278B2: ; ... add.w d0,8(a0) move.b #$20,$1A(a0) move.b #$14,$24(a0) jsr RandomNumber asr.w #8,d0 asr.w #6,d0 move.w d0,$10(a0) move.w #$FC80,$12(a0) moveq #0,d7 move.w $2E(a0),d0 add.w #$18,d0 bge.s loc_3278F4 add.w #$18,d0 bge.s loc_3278F2 add.w #$18,d0 bge.s loc_3278F0 addq.w #1,d7 loc_3278F0: ; ... addq.w #1,d7 loc_3278F2: ; ... addq.w #1,d7 loc_3278F4: ; ... subq.w #1,d7 bmi.w loc_327984 loc_3278FA: ; ... jsr SingleObjLoad bne.w loc_327FF8 move.b #$5D,0(a1) move.l #Map_Obj5D_1,4(a1) move.b #$21,$1A(a1) move.b #$14,$24(a1) move.w #$2500,2(a1) move.b 1(a0),1(a1) move.b #$20,$19(a1) move.b #2,$18(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #8,$C(a1) move.w d7,d2 add.w d2,d2 move.w word_32798C(pc,d2.w),d3 btst #0,1(a0) beq.s loc_32795A neg.w d3 loc_32795A: ; ... add.w d3,8(a1) jsr RandomNumber asr.w #8,d0 asr.w #6,d0 move.w d0,$10(a1) move.w #-$380,$12(a1) swap d0 add.b #$1E,d0 and.w #$7F,d0 move.b d0,$30(a1) dbf d7,loc_3278FA loc_327984: ; ... move.l (sp)+,d7 jmp DisplaySprite ; --------------------------------------------------------------------------- word_32798C: dc.w $18 ; ... dc.w $30 dc.w $48 ; =============== S U B R O U T I N E ======================================= sub_327992: ; ... btst #3,$2E(a1) bne.w return_327A6C btst #4,$2E(a1) loc_3279A2: bne.w return_327A6C loc_3279A6: cmp.w #$FFEC,$2E(a0) blt.s loc_3279C6 btst #1,$2D(a1) beq.w return_327A6C bclr #1,$2D(a1) bset #2,$2D(a1) bra.s loc_327A04 ; --------------------------------------------------------------------------- loc_3279C6: ; ... cmp.w #-$40,$2E(a0) bge.w return_327A6C move.w ($FFFFB008).w,d1 sub.w #8,d1 btst #0,1(a0) beq.s loc_3279F4 add.w $2E(a0),d1 sub.w 8(a0),d1 bgt.w return_327A6C cmp.w #-$18,d1 bge.s loc_327A04 rts ; --------------------------------------------------------------------------- loc_3279F4: ; ... sub.w $2E(a0),d1 sub.w 8(a0),d1 blt.s return_327A6C cmp.w #$18,d1 bgt.s return_327A6C loc_327A04: ; ... bset #5,$2E(a1) bclr #2,$2E(a1) move.w #$12,$2A(a0) jsr SingleObjLoad2 bne.s return_327A6C move.b #$5D,0(a1) move.l a0,$34(a1) move.b #$10,$24(a1) move.b #8,$25(a1) move.l #Map_Obj5D_1,4(a1) move.w #$2500,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #5,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) move.b #$B,$1C(a1) move.w #$24,$2A(a1) return_327A6C: ; ... rts ; End of function sub_327992 ; =============== S U B R O U T I N E ======================================= sub_327A6E: ; ... moveq #1,d0 btst #4,$2E(a1) bne.s loc_327A7A moveq #-1,d0 loc_327A7A: ; ... cmp.w #-$10,$2E(a0) bne.s loc_327AF2 bclr #4,$2E(a1) beq.s loc_327AF2 bclr #2,$2E(a1) clr.b $25(a0) move.l a1,a2 jsr SingleObjLoad2 bne.s return_327AF0 move.b #$5D,0(a1) move.l $34(a0),$34(a1) move.l #Map_Obj5D_1,4(a1) move.w #$2500,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #4,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) move.b #4,$24(a1) move.b #0,$25(a0) bra.s return_327AF0 ; --------------------------------------------------------------------------- move.b #$A,$24(a1) move.l $34(a0),$34(a1) return_327AF0: ; ... rts ; --------------------------------------------------------------------------- loc_327AF2: ; ... move.w $2E(a0),d1 cmp.w #-$28,d1 bge.s loc_327B3C cmp.w #-$40,d1 bge.s loc_327B34 move.b #8,$1C(a0) cmp.w #-$58,d1 blt.s loc_327B1E bgt.s loc_327B18 btst #4,$2E(a1) beq.s return_327B1C loc_327B18: ; ... add.w d0,$2E(a0) return_327B1C: ; ... rts ; --------------------------------------------------------------------------- loc_327B1E: ; ... move.w #-$58,$2E(a0) btst #0,1(a0) beq.s loc_327B18 move.w #$58,$2E(a0) bra.s loc_327B18 ; --------------------------------------------------------------------------- loc_327B34: ; ... move.b #7,$1C(a0) bra.s loc_327B18 ; --------------------------------------------------------------------------- loc_327B3C: ; ... move.b #6,$1C(a0) bra.s loc_327B18 ; End of function sub_327A6E ; --------------------------------------------------------------------------- loc_327B44: ; ... btst #7,$22(a0) bne.w loc_327FF8 move.l $34(a0),a1 move.l $34(a1),d0 beq.w loc_327FF8 move.l d0,a1 bclr #3,$2E(a1) beq.s loc_327B78 move.b #$C,$24(a0) move.b #0,$25(a0) move.b #$87,$20(a0) bra.s loc_327BD8 ; --------------------------------------------------------------------------- loc_327B78: ; ... bclr #1,$2E(a1) bne.s loc_327B88 tst.b $1C(a0) bne.s loc_327BD8 rts ; --------------------------------------------------------------------------- loc_327B88: ; ... tst.b $1C(a0) bne.s loc_327B94 move.b #$B,$1C(a0) loc_327B94: ; ... add.b #1,$1C(a0) cmp.b #$17,$1C(a0) blt.s loc_327BD8 bclr #0,$2E(a1) bset #2,$2E(a1) bra.s loc_327BD8 ; --------------------------------------------------------------------------- loc_327BB0: ; ... btst #7,$22(a0) bne.w loc_327FF8 move.l $34(a0),a1 move.l $34(a1),a1 btst #5,$2E(a1) beq.s loc_327BD8 cmp.b #9,$1C(a0) bne.s loc_327BD8 move.b #$A,$1C(a0) loc_327BD8: ; ... move.l $34(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.b 1(a1),1(a0) move.b $22(a1),$22(a0) lea (Ani_Obj5D_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_327C06: ; ... btst #7,$22(a0) bne.w loc_327FF8 subq.w #1,$2A(a0) beq.w loc_327FF8 bra.s loc_327BD8 ; --------------------------------------------------------------------------- loc_327C1A: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_327C28(pc,d0.w),d1 jmp off_327C28(pc,d1.w) ; --------------------------------------------------------------------------- off_327C28: dc.w loc_327C32-off_327C28,loc_327C6A-off_327C28,loc_327D78-off_327C28; 0 ; ... dc.w loc_327CEC-off_327C28,loc_327D38-off_327C28; 3 ; --------------------------------------------------------------------------- loc_327C32: ; ... addq.b #2,$25(a0) move.b #$20,$16(a0) move.b #$19,$1C(a0) move.w #0,$12(a0) move.l $34(a0),a1 move.l $34(a1),a1 btst #2,$2D(a1) beq.s loc_327C6A bclr #2,$2D(a1) move.b #6,$25(a0) move.w #9,$2A(a0) loc_327C6A: ; ... jsr ObjectMoveAndFall jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bmi.s loc_327C94 cmp.w #$518,$C(a0) bge.s loc_327CCC lea (Ani_Obj5D_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_327C94: ; ... add.w d1,$C(a0) move.l $34(a0),a1 move.l $34(a1),a1 bset #2,$2E(a1) bset #4,$2E(a1) move.b #2,$25(a1) addq.b #2,$25(a0) move.b #0,$28(a0) move.w #$E6,d0 jsr PlaySound jmp DisplaySprite ; --------------------------------------------------------------------------- loc_327CCC: ; ... move.l $34(a0),a1 move.l $34(a1),a1 bset #2,$2E(a1) bset #4,$2E(a1) move.b #2,$25(a1) jmp DeleteObject ; --------------------------------------------------------------------------- loc_327CEC: ; ... sub.w #1,$2A(a0) bpl.s loc_327D20 move.b #2,$18(a0) move.b #$25,$1A(a0) move.l $34(a0),a1 move.l $34(a1),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) addq.b #2,$25(a0) move.b #8,$1E(a0) bra.s loc_327D38 ; --------------------------------------------------------------------------- loc_327D20: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj5D_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_327D38: ; ... sub.b #1,$1E(a0) bpl.s loc_327D5E add.b #1,$1A(a0) move.b #8,$1E(a0) cmp.b #$27,$1A(a0) bgt.w loc_327CCC blt.s loc_327D5E add.b #$C,$1E(a0) loc_327D5E: ; ... move.l $34(a0),a1 move.l $34(a1),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_327D78: ; ... moveq #0,d0 move.b $28(a0),d0 bne.w loc_327E76 add.w #$18,$C(a0) add.w #$C,8(a0) btst #0,1(a0) beq.s loc_327D9C sub.w #$18,8(a0) loc_327D9C: ; ... move.b #4,$16(a0) move.b #4,$17(a0) addq.b #1,$28(a0) move.b #9,$1A(a0) move.w $12(a0),d0 lsr.w #1,d0 neg.w d0 move.w d0,$12(a0) jsr RandomNumber asr.w #6,d0 bmi.s loc_327DCC add.w #$200,d0 loc_327DCC: ; ... add.w #-$100,d0 move.w d0,$10(a0) move.b #0,$20(a0) moveq #3,d3 loc_327DDC: ; ... jsr SingleObjLoad2 bne.w loc_327E70 move.b #$5D,0(a1) move.l a0,$34(a1) move.l #Map_Obj5D_1,4(a1) move.w #$6500,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #2,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) move.b #4,$16(a1) move.b #4,$17(a1) move.b #9,$1A(a1) move.b #$C,$24(a1) move.b #4,$25(a1) move.b #1,$28(a1) move.w $12(a0),$12(a1) move.b $20(a0),$20(a1) jsr RandomNumber asr.w #6,d0 bmi.s loc_327E5A add.w #$80,d0 loc_327E5A: ; ... add.w #-$80,d0 move.w d0,$10(a1) swap d0 and.w #$3FF,d0 sub.w d0,$12(a1) dbf d3,loc_327DDC loc_327E70: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_327E76: ; ... jsr ObjectMoveAndFall jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bmi.s loc_327E8C jmp MarkObjGone ; --------------------------------------------------------------------------- loc_327E8C: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- add.w d1,$C(a0) move.w $12(a0),d0 lsr.w #1,d0 neg.w d0 move.w d0,$12(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_327EA8: ; ... move.l $34(a0),a1 move.l 8(a1),8(a0) move.l $C(a1),$C(a0) move.b $22(a1),$22(a0) move.b 1(a1),1(a0) move.b $3E(a1),d0 cmp.b #$1F,d0 bne.s loc_327ED4 move.b #2,$1C(a0) loc_327ED4: ; ... cmp.b #4,($FFFFB024).w beq.s loc_327EE4 cmp.b #4,($FFFFB064).w bne.s loc_327EEA loc_327EE4: ; ... move.b #3,$1C(a0) loc_327EEA: ; ... lea (Ani_Obj5D).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- byte_327EFC: dc.b 0, -1, 1, 0 ; 0 ; ... ; --------------------------------------------------------------------------- loc_327F00: ; ... btst #7,$22(a0) bne.s loc_327F5A move.l $34(a0),a1 move.l 8(a1),8(a0) move.l $C(a1),$C(a0) move.b $22(a1),$22(a0) move.b 1(a1),1(a0) subq.b #1,$1E(a0) bpl.s loc_327F48 move.b #1,$1E(a0) move.b $2A(a0),d0 addq.b #1,d0 cmp.b #2,d0 ble.s loc_327F3E moveq #0,d0 loc_327F3E: ; ... move.b byte_327EFC(pc,d0.w),$1A(a0) move.b d0,$2A(a0) loc_327F48: ; ... cmp.b #$FF,$1A(a0) bne.w loc_327FF2 move.b #0,$1A(a0) rts ; --------------------------------------------------------------------------- loc_327F5A: ; ... move.l $34(a0),a1 btst #6,$2E(a1) bne.s loc_327F68 rts ; --------------------------------------------------------------------------- loc_327F68: ; ... addq.b #2,$25(a0) move.l #Map_Obj5D_2,4(a0) move.w #$418,2(a0) jsr Adjust2PArtPointer2_Useless move.b #0,$1A(a0) move.b #5,$1E(a0) move.l $34(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) add.w #4,$C(a0) sub.w #$28,8(a0) rts ; --------------------------------------------------------------------------- loc_327FAA: ; ... subq.b #1,$1E(a0) bpl.s loc_327FEC move.b #5,$1E(a0) addq.b #1,$1A(a0) cmp.b #4,$1A(a0) bne.w loc_327FEC move.b #0,$1A(a0) move.l $34(a0),a1 move.b (a1),d0 beq.w loc_327FF8 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) add.w #4,$C(a0) sub.w #$28,8(a0) loc_327FEC: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_327FF2: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_327FF8: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Ani_Obj5D_0: dc.w byte_328034-Ani_Obj5D_0,byte_328037-Ani_Obj5D_0,byte_32803A-Ani_Obj5D_0; 0 ; ... dc.w byte_32803F-Ani_Obj5D_0,byte_328043-Ani_Obj5D_0,byte_32804A-Ani_Obj5D_0; 3 dc.w byte_32804D-Ani_Obj5D_0,byte_328050-Ani_Obj5D_0,byte_328053-Ani_Obj5D_0; 6 dc.w byte_328056-Ani_Obj5D_0,byte_328059-Ani_Obj5D_0,byte_328065-Ani_Obj5D_0; 9 dc.w byte_328070-Ani_Obj5D_0,byte_328073-Ani_Obj5D_0,byte_328076-Ani_Obj5D_0; 12 dc.w byte_328079-Ani_Obj5D_0,byte_32807C-Ani_Obj5D_0,byte_32807F-Ani_Obj5D_0; 15 dc.w byte_328082-Ani_Obj5D_0,byte_328085-Ani_Obj5D_0,byte_328088-Ani_Obj5D_0; 18 dc.w byte_32808B-Ani_Obj5D_0,byte_32808E-Ani_Obj5D_0,byte_328091-Ani_Obj5D_0; 21 dc.w byte_328094-Ani_Obj5D_0,byte_328097-Ani_Obj5D_0,byte_32809B-Ani_Obj5D_0; 24 byte_328034: dc.b $F, 0, -1 ; 0 ; ... byte_328037: dc.b $F, 1, -1 ; 0 ; ... byte_32803A: dc.b 5, 2, 3, 2, -1 ; 0 ; ... byte_32803F: dc.b 5, 2, 3, -1 ; 0 ; ... byte_328043: dc.b 2, 4, 5, 6, 7, 8, -1; 0 ; ... byte_32804A: dc.b 3, 9, -1 ; 0 ; ... byte_32804D: dc.b $F, $A, -1 ; 0 ; ... byte_328050: dc.b $F, $1C, -1 ; 0 ; ... byte_328053: dc.b $F, $1E, -1 ; 0 ; ... byte_328056: dc.b $F, $B, -1 ; 0 ; ... byte_328059: dc.b 3, $C, $C, $D, $D, $D, $D, $D, $C, $C; 0 ; ... dc.b -3, 9 ; 10 byte_328065: dc.b 3, $E, $E, $F, $F, $F, $F, $F, $E, $E; 0 ; ... dc.b -1 ; 10 byte_328070: dc.b $F, $10, -1 ; 0 ; ... byte_328073: dc.b $F, $11, -1 ; 0 ; ... byte_328076: dc.b $F, $12, -1 ; 0 ; ... byte_328079: dc.b $F, $13, -1 ; 0 ; ... byte_32807C: dc.b $F, $14, -1 ; 0 ; ... byte_32807F: dc.b $F, $15, -1 ; 0 ; ... byte_328082: dc.b $F, $16, -1 ; 0 ; ... byte_328085: dc.b $F, $17, -1 ; 0 ; ... byte_328088: dc.b $F, $18, -1 ; 0 ; ... byte_32808B: dc.b $F, $19, -1 ; 0 ; ... byte_32808E: dc.b $F, $1A, -1 ; 0 ; ... byte_328091: dc.b $F, $1B, -1 ; 0 ; ... byte_328094: dc.b $F, $1C, -1 ; 0 ; ... byte_328097: dc.b 1, $1D, $1F, -1 ; 0 ; ... byte_32809B: dc.b $F, $1E, -1 ; 0 ; ... Map_Obj5D_1: dc.w byte_3280EE-Map_Obj5D_1,byte_328102-Map_Obj5D_1,byte_32810A-Map_Obj5D_1; 0 ; ... dc.w byte_328112-Map_Obj5D_1,byte_32811A-Map_Obj5D_1,byte_328122-Map_Obj5D_1; 3 dc.w byte_32812A-Map_Obj5D_1,byte_328132-Map_Obj5D_1,byte_32813A-Map_Obj5D_1; 6 dc.w byte_328142-Map_Obj5D_1,byte_32814A-Map_Obj5D_1,byte_328158-Map_Obj5D_1; 9 dc.w byte_328160-Map_Obj5D_1,byte_328168-Map_Obj5D_1,byte_328170-Map_Obj5D_1; 12 dc.w byte_328178-Map_Obj5D_1,byte_328180-Map_Obj5D_1,byte_328188-Map_Obj5D_1; 15 dc.w byte_328190-Map_Obj5D_1,byte_328198-Map_Obj5D_1,byte_3281A0-Map_Obj5D_1; 18 dc.w byte_3281AE-Map_Obj5D_1,byte_3281BC-Map_Obj5D_1,byte_3281CA-Map_Obj5D_1; 21 dc.w byte_3281D8-Map_Obj5D_1,byte_3281EC-Map_Obj5D_1,byte_328200-Map_Obj5D_1; 24 dc.w byte_328214-Map_Obj5D_1,byte_328228-Map_Obj5D_1,byte_32823C-Map_Obj5D_1; 27 dc.w byte_328244-Map_Obj5D_1,byte_32825E-Map_Obj5D_1,byte_328266-Map_Obj5D_1; 30 dc.w byte_32826E-Map_Obj5D_1,byte_328276-Map_Obj5D_1,byte_32827E-Map_Obj5D_1; 33 dc.w byte_328286-Map_Obj5D_1,byte_32828E-Map_Obj5D_1,byte_328296-Map_Obj5D_1; 36 dc.w byte_32829E-Map_Obj5D_1 ; 39 byte_3280EE: dc.b 0, 3,-$48, $D, 0, 0, -1, -8,-$38, $A; 0 ; ... dc.b 0, 8, 0, 8,-$20, 5, 0, $11, 0, $10; 10 byte_328102: dc.b 0, 1, -4, 0, 0, $24, -1, -4; 0 ; ... byte_32810A: dc.b 0, 1, -4, 4, 0, $25, -1, -$B; 0 ; ... byte_328112: dc.b 0, 1, -4, 4, 0, $27, -1, -$A; 0 ; ... byte_32811A: dc.b 0, 1,-$3C, 0, 0, $36, -1, -5; 0 ; ... byte_328122: dc.b 0, 1,-$3C, 0, 0, $37, -1, -5; 0 ; ... byte_32812A: dc.b 0, 1,-$3C, 0, 0, $38, -1, -5; 0 ; ... byte_328132: dc.b 0, 1,-$3C, 1, 0, $39, -1, -5; 0 ; ... byte_32813A: dc.b 0, 1,-$3C, 1, 0, $3B, -1, -5; 0 ; ... byte_328142: dc.b 0, 1, -4, 0, 0, $3D, -1, -4; 0 ; ... byte_32814A: dc.b 0, 2, 0, $E, 0, $15, 0, 0, 8, 8; 0 ; ... dc.b 0, $21, 0, $18 ; 10 byte_328158: dc.b 0, 1, $18, 8, 0, $29, 0, 0; 0 ; ... byte_328160: dc.b 0, 1, $18, 8, 0, $2C, 0, 0; 0 ; ... byte_328168: dc.b 0, 1, $18, 8, 0, $2F, 0, 8; 0 ; ... byte_328170: dc.b 0, 1, $18, 4, 0, $32, -1, -4; 0 ; ... byte_328178: dc.b 0, 1, $18, 4, 0, $34, -1, -4; 0 ; ... byte_328180: dc.b 0, 1, $10, 8, 0, $63, 0, 0; 0 ; ... byte_328188: dc.b 0, 1, $10, 8, 0, $66, 0, 0; 0 ; ... byte_328190: dc.b 0, 1, $10, 8, 0, $69, 0, 0; 0 ; ... byte_328198: dc.b 0, 1, $10, 8, 0, $6C, 0, 0; 0 ; ... byte_3281A0: dc.b 0, 2, $10, 8, 0, $6C, 0, 0, 8, 8; 0 ; ... dc.b 0, $63, 0, 0 ; 10 byte_3281AE: dc.b 0, 2, $10, 8, 0, $6C, 0, 0, 8, 8; 0 ; ... dc.b 0, $66, 0, 0 ; 10 byte_3281BC: dc.b 0, 2, $10, 8, 0, $6C, 0, 0, 8, 8; 0 ; ... dc.b 0, $69, 0, 0 ; 10 byte_3281CA: dc.b 0, 2, $10, 8, 0, $6C, 0, 0, 8, 8; 0 ; ... dc.b 0, $6C, 0, 0 ; 10 byte_3281D8: dc.b 0, 3, $10, 8, 0, $6C, 0, 0, 8, 8; 0 ; ... dc.b 0, $6C, 0, 0, 0, 8, 0, $63, 0, 0; 10 byte_3281EC: dc.b 0, 3, $10, 8, 0, $6C, 0, 0, 8, 8; 0 ; ... dc.b 0, $6C, 0, 0, 0, 8, 0, $66, 0, 0; 10 byte_328200: dc.b 0, 3, $10, 8, 0, $6C, 0, 0, 8, 8; 0 ; ... dc.b 0, $6C, 0, 0, 0, 8, 0, $69, 0, 0; 10 byte_328214: dc.b 0, 3, $10, 8, 0, $6C, 0, 0, 8, 8; 0 ; ... dc.b 0, $6C, 0, 0, 0, 8, 0, $6C, 0, 0; 10 byte_328228: dc.b 0, 3, 0, $E, 0, $15, 0, 0, 8, 8; 0 ; ... dc.b 0, $21, 0, $18, 8, 8, 0, $21, 0, $30; 10 byte_32823C: dc.b 0, 1, 0, $B, 0, $3E, 0, 0; 0 ; ... byte_328244: dc.b 0 ; 0 ; ... dc.b 4, 0, $E, 0, $15, 0, 0, 8, 8, 0; 0 dc.b $21, 0, $18, 8, 8, 0, $21, 0, $30, 8; 10 dc.b 8, 0, $21, 0, $48 ; 20 byte_32825E: dc.b 0, 1, 0, $B, 8, $3E, 0, 0; 0 ; ... byte_328266: dc.b 0, 1, 0, $E, 0, $15, 0, 0; 0 ; ... byte_32826E: dc.b 0, 1, 0, 8, 0, $21, 0, 0; 0 ; ... byte_328276: dc.b 0, 1,-$48, $D, 0, 0, -1, -8; 0 ; ... byte_32827E: dc.b 0, 1,-$38, $A, 0, 8, 0, 8; 0 ; ... byte_328286: dc.b 0, 1,-$20, 5, 0, $11, 0, $10; 0 ; ... byte_32828E: dc.b 0, 1,-$20, $A, 0, $4A, -1,-$10; 0 ; ... byte_328296: dc.b 0, 1,-$18, $D, 0, $53, -1,-$10; 0 ; ... byte_32829E: dc.b 0, 1,-$18, $D, 0, $5B, -1,-$10; 0 ; ... Ani_Obj5D: dc.w byte_3282B0-Ani_Obj5D,byte_3282B3-Ani_Obj5D,byte_3282B7-Ani_Obj5D; 0 ; ... dc.w byte_3282C0-Ani_Obj5D,byte_3282C9-Ani_Obj5D; 3 byte_3282B0: dc.b $F, 0, -1 ; 0 ; ... byte_3282B3: dc.b 7, 1, 2, -1 ; 0 ; ... byte_3282B7: dc.b 7, 5, 5, 5, 5, 5, 5, -3, 1; 0 ; ... byte_3282C0: dc.b 7, 3, 4, 3, 4, 3, 4, -3, 1; 0 ; ... byte_3282C9: dc.b $F, 6, 6, 6, 6, 6, 6, 6, 6, 6; 0 ; ... dc.b 6, -3, 1 ; 10 Map_Obj5D: dc.w byte_3282E4-Map_Obj5D,byte_3282FE-Map_Obj5D,byte_328318-Map_Obj5D; 0 ; ... dc.w byte_328332-Map_Obj5D,byte_32834C-Map_Obj5D,byte_328366-Map_Obj5D; 3 dc.w byte_328380-Map_Obj5D ; 6 byte_3282E4: dc.b 0, 4, -8, 5, 0, 0, -1,-$20, 8, 5; 0 ; ... dc.b 0, 4, -1,-$20, -8, $F, 0, 8, -1,-$10; 10 dc.b -8, 7, 0, $18, 0, $10; 20 byte_3282FE: dc.b 0, 4,-$18, 5, 0, $28, -1,-$20,-$18, $D; 0 ; ... dc.b 0, $30, -1,-$10,-$18, 5, 0, $24, 0, $10; 10 dc.b -$28, 5, 0, $20, 0, 2; 20 byte_328318: dc.b 0, 4,-$18, 5, 0, $28, -1,-$20,-$18, $D; 0 ; ... dc.b 0, $38, -1,-$10,-$18, 5, 0, $24, 0, $10; 10 dc.b -$28, 5, 0, $20, 0, 2; 20 byte_328332: dc.b 0, 4,-$18, 5, 0, $28, -1,-$20,-$18, $D; 0 ; ... dc.b 0, $40, -1,-$10,-$18, 5, 0, $24, 0, $10; 10 dc.b -$28, 5, 0, $20, 0, 2; 20 byte_32834C: dc.b 0, 4,-$18, 5, 0, $28, -1,-$20,-$18, $D; 0 ; ... dc.b 0, $48, -1,-$10,-$18, 5, 0, $24, 0, $10; 10 dc.b -$28, 5, 0, $20, 0, 2; 20 byte_328366: dc.b 0, 4,-$18, 5, 0, $28, -1,-$20,-$18, $D; 0 ; ... dc.b 0, $50, -1,-$10,-$18, 5, 0, $24, 0, $10; 10 dc.b -$28, 5, 0, $20, 0, 2; 20 byte_328380: dc.b 0, 4,-$18, 5, 0, $28, -1,-$20,-$18, $D; 0 ; ... dc.b 0, $58, -1,-$10,-$18, 5, 0, $24, 0, $10; 10 dc.b -$28, 5, 0, $20, 0, 2; 20 Map_Obj5D_0: dc.w byte_32839E-Map_Obj5D_0,byte_3283A6-Map_Obj5D_0; 0 ; ... byte_32839E: dc.b 0, 1, 0, 5, 0, 0, 0, $1C; 0 ; ... byte_3283A6: dc.b 0, 1, 0, 5, 0, 4, 0, $1C; 0 ; ... Map_Obj5D_2: dc.w byte_3283B6-Map_Obj5D_2,byte_3283BE-Map_Obj5D_2,byte_3283C6-Map_Obj5D_2; 0 ; ... dc.w byte_3283CE-Map_Obj5D_2 ; 3 byte_3283B6: dc.b 0, 1, -8, 5, 0, 0, -1, -8; 0 ; ... byte_3283BE: dc.b 0, 1, -8, 5, 0, 4, -1, -8; 0 ; ... byte_3283C6: dc.b 0, 1, -8, 5, 0, 8, -1, -8; 0 ; ... byte_3283CE: dc.b 0, 1, -8, 5, 0, $C, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- Obj56: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3283E4(pc,d0.w),d1 jmp off_3283E4(pc,d1.w) ; --------------------------------------------------------------------------- off_3283E4: dc.w loc_3283F4-off_3283E4,loc_32872E-off_3283E4,loc_328A46-off_3283E4; 0 ; ... dc.w loc_328AFC-off_3283E4,loc_328B70-off_3283E4,loc_328D16-off_3283E4; 3 dc.w loc_328A1E-off_3283E4,loc_328E08-off_3283E4; 6 ; --------------------------------------------------------------------------- loc_3283F4: ; ... move.l #Map_Obj56,4(a0) move.w #$23A0,2(a0) or.b #4,1(a0) move.b #$81,$28(a0) move.w #$29D0,8(a0) move.w #$426,$C(a0) move.b #$20,$19(a0) move.b #$14,$16(a0) move.b #4,$18(a0) move.b #$F,$20(a0) move.b #8,$21(a0) addq.b #2,$24(a0) move.w 8(a0),$30(a0) move.w $C(a0),$38(a0) jsr Adjust2PArtPointer2_Useless jsr SingleObjLoad2 bne.w loc_3284A4 move.b #$56,0(a1) move.l a0,$34(a1) move.l a1,$34(a0) move.l #Map_Obj56,4(a1) move.w #$3A0,2(a1) move.b #4,1(a1) move.b #$20,$19(a1) move.b #4,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) move.b #$E,$24(a1) move.b #1,$1C(a1) ; ... move.b 1(a0),1(a1) loc_3284A4: ; ... jsr SingleObjLoad2 bne.s loc_3284F4 move.b #$56,0(a1) move.l a0,$34(a1) move.l #Map_Obj56_0,4(a1) move.w #$400,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #$30,$19(a1) move.b #$10,$16(a1) move.b #3,$18(a1) move.w #$2AF0,8(a1) move.l $C(a0),$C(a1) move.b #6,$24(a1) loc_3284F4: ; ... bsr.w sub_32855C sub.w #8,$38(a0) move.w #$2AF0,8(a0) move.w #$2F8,$C(a0) jsr SingleObjLoad2 bne.s return_32855A move.b #$56,0(a1) move.l a0,$34(a1) move.l #Map_Obj56_1,4(a1) move.w #$256C,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #$40,$19(a1) move.b #3,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) move.w #$1E,$2A(a1) move.b #4,$24(a1) return_32855A: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_32855C: ; ... jsr SingleObjLoad2 bne.s loc_3285D6 move.b #$56,0(a1) move.l a0,$34(a1) move.l #Map_Obj56_0,4(a1) move.w #$2400,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #$10,$19(a1) move.b #2,$18(a1) move.b #$10,$16(a1) move.b #$10,$17(a1) move.w #$2AF0,8(a1) move.l $C(a0),$C(a1) add.w #$1C,8(a1) add.w #$C,$C(a1) move.b #8,$24(a1) move.b #4,$1A(a1) move.b #1,$1C(a1) move.w #$A,$2A(a1) move.b #0,$28(a1) loc_3285D6: ; ... jsr SingleObjLoad2 bne.s loc_328650 move.b #$56,0(a1) move.l a0,$34(a1) move.l #Map_Obj56_0,4(a1) move.w #$2400,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #$10,$19(a1) move.b #2,$18(a1) move.b #$10,$16(a1) move.b #$10,$17(a1) move.w #$2AF0,8(a1) move.l $C(a0),$C(a1) add.w #-$C,8(a1) add.w #$C,$C(a1) move.b #8,$24(a1) move.b #4,$1A(a1) move.b #1,$1C(a1) move.w #$A,$2A(a1) move.b #1,$28(a1) loc_328650: ; ... jsr SingleObjLoad2 bne.s loc_3286CA move.b #$56,0(a1) move.l a0,$34(a1) move.l #Map_Obj56_0,4(a1) move.w #$2400,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #$10,$19(a1) move.b #3,$18(a1) move.b #$10,$16(a1) move.b #$10,$17(a1) move.w #$2AF0,8(a1) move.l $C(a0),$C(a1) add.w #-$2C,8(a1) add.w #$C,$C(a1) move.b #8,$24(a1) move.b #6,$1A(a1) move.b #2,$1C(a1) move.w #$A,$2A(a1) move.b #2,$28(a1) loc_3286CA: ; ... jsr SingleObjLoad2 bne.s return_32872C move.b #$56,0(a1) move.l a0,$34(a1) move.l #Map_Obj56_0,4(a1) move.w #$2400,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #$20,$19(a1) move.b #2,$18(a1) move.w #$2AF0,8(a1) move.l $C(a0),$C(a1) add.w #-$36,8(a1) add.w #8,$C(a1) move.b #$A,$24(a1) move.b #1,$1A(a1) move.b #0,$1C(a1) return_32872C: ; ... rts ; End of function sub_32855C ; --------------------------------------------------------------------------- loc_32872E: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_32873C(pc,d0.w),d1 jmp off_32873C(pc,d1.w) ; --------------------------------------------------------------------------- off_32873C: dc.w loc_328748-off_32873C,loc_328778-off_32873C,loc_3287DA-off_32873C; 0 ; ... dc.w loc_32880E-off_32873C,loc_328854-off_32873C,loc_32886C-off_32873C; 3 ; --------------------------------------------------------------------------- loc_328748: ; ... move.b #0,$20(a0) cmp.w #$29D0,8(a0) ble.s loc_328768 sub.w #1,8(a0) add.w #1,$C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328768: ; ... move.w #$29D0,8(a0) addq.b #2,$25(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328778: ; ... moveq #0,d0 move.b $2C(a0),d0 move.w off_328786(pc,d0.w),d1 jmp off_328786(pc,d1.w) ; --------------------------------------------------------------------------- off_328786: dc.w loc_32878A-off_328786,loc_3287B4-off_328786; 0 ; ... ; --------------------------------------------------------------------------- loc_32878A: ; ... cmp.w #$41E,$C(a0) bge.s loc_32879E add.w #1,$C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32879E: ; ... addq.b #2,$2C(a0) bset #0,$2D(a0) move.w #$3C,$2A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3287B4: ; ... sub.w #1,$2A(a0) bpl.w loc_328E64 move.w #$FE00,$10(a0) addq.b #2,$25(a0) move.b #$F,$20(a0) bset #1,$2D(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3287DA: ; ... bsr.w sub_328996 bsr.w sub_328974 move.w $2E(a0),d0 lsr.w #1,d0 sub.w #$14,d0 move.w d0,$C(a0) move.w #0,$2E(a0) move.l 8(a0),d2 move.w $10(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.l d2,8(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32880E: ; ... subq.w #1,$3C(a0) bmi.s loc_32883A bsr.w sub_326C74 jsr ObjectMoveAndFall jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.w loc_328E64 add.w d1,$C(a0) move.w #0,$12(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32883A: ; ... clr.w $10(a0) addq.b #2,$25(a0) move.w #-$26,$3C(a0) move.w #$C,$2A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328854: ; ... subq.w #1,$2A(a0) bpl.w loc_328E64 addq.b #2,$25(a0) move.b #0,$2C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32886C: ; ... moveq #0,d0 move.b $2C(a0),d0 move.w off_328880(pc,d0.w),d1 jsr off_328880(pc,d1.w) jmp DisplaySprite ; --------------------------------------------------------------------------- off_328880: dc.w loc_328886-off_328880,loc_32890E-off_328880,loc_32892E-off_328880; 0 ; ... ; --------------------------------------------------------------------------- loc_328886: ; ... bclr #0,$2D(a0) jsr SingleObjLoad2 bne.w return_32890C move.b #$56,0(a1) move.l a0,$34(a1) move.l #Map_Obj56_1,4(a1) move.w #$256C,2(a1) jsr Adjust2PArtPointer_Useless move.b #4,1(a1) move.b #$20,$19(a1) move.b #3,$18(a1) move.l 8(a0),8(a1) move.l $C(a0),$C(a1) add.w #$C,$C(a1) move.b $22(a0),$22(a1) move.b 1(a0),1(a1) move.b #$C,$24(a1) move.b #2,$1C(a1) move.w #$10,$2A(a1) move.w #$32,$2A(a0) addq.b #2,$2C(a0) jsr sub_30D038 move.b #1,($FFFFF7A7).w return_32890C: ; ... rts ; --------------------------------------------------------------------------- loc_32890E: ; ... sub.w #1,$2A(a0) bpl.s return_32892C bset #2,$2D(a0) move.w #$60,$2A(a0) addq.b #2,$2C(a0) jsr sub_30D042 return_32892C: ; ... rts ; --------------------------------------------------------------------------- loc_32892E: ; ... sub.w #1,$2A(a0) bpl.s loc_328948 bset #0,$22(a0) bset #0,1(a0) addq.w #6,8(a0) bra.s loc_32894C ; --------------------------------------------------------------------------- loc_328948: ; ... subq.w #1,$C(a0) loc_32894C: ; ... cmp.w #$2AB0,($FFFFEECA).w bcc.s loc_32895A addq.w #2,($FFFFEECA).w bra.s return_328972 ; --------------------------------------------------------------------------- loc_32895A: ; ... tst.b 1(a0) bmi.s return_328972 addq.w #4,sp move.l $34(a0),a1 jsr DeleteObject2 jmp DeleteObject ; --------------------------------------------------------------------------- return_328972: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_328974: ; ... move.w 8(a0),d0 cmp.w #$28A0,d0 ble.s loc_328984 cmp.w #$2B08,d0 blt.s return_328994 loc_328984: ; ... bchg #0,$22(a0) bchg #0,1(a0) neg.w $10(a0) return_328994: ; ... rts ; End of function sub_328974 ; =============== S U B R O U T I N E ======================================= sub_328996: ; ... cmp.b #6,$25(a0) bcc.s return_3289DC tst.b $22(a0) bmi.s loc_3289DE tst.b $20(a0) bne.s return_3289DC tst.b $3E(a0) bne.s loc_3289C0 move.b #$20,$3E(a0) move.w #$AC,d0 jsr PlaySound loc_3289C0: ; ... lea ($FFFFFB22).w,a1 moveq #0,d0 tst.w (a1) bne.s loc_3289CE move.w #$EEE,d0 loc_3289CE: ; ... move.w d0,(a1) subq.b #1,$3E(a0) bne.s return_3289DC move.b #$F,$20(a0) return_3289DC: ; ... rts ; --------------------------------------------------------------------------- loc_3289DE: ; ... moveq #$64,d0 jsr AddPoints2 move.b #6,$25(a0) move.w #0,$10(a0) move.w #$FE80,$12(a0) move.w #$B3,$3C(a0) bset #3,$2D(a0) move.l $34(a0),a1 move.b #4,$1C(a1) move.b #6,$1A(a1) moveq #$40,d0 jmp LoadPLC ; End of function sub_328996 ; --------------------------------------------------------------------------- rts ; --------------------------------------------------------------------------- loc_328A1E: ; ... sub.w #1,$C(a0) sub.w #1,$2A(a0) bpl.w loc_328E64 move.b #4,$24(a0) lea (Ani_Obj56).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328A46: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_328A54(pc,d0.w),d1 jmp off_328A54(pc,d1.w) ; --------------------------------------------------------------------------- off_328A54: dc.w loc_328A58-off_328A54,loc_328AC6-off_328A54; 0 ; ... ; --------------------------------------------------------------------------- loc_328A58: ; ... move.l $34(a0),a1 cmp.b #$56,(a1) bne.w loc_328E6A btst #0,$2D(a1) beq.s loc_328A88 move.b #1,$1C(a0) move.w #$18,$2A(a0) addq.b #2,$25(a0) move.b #$F8,d0 jsr PlaySound bra.s loc_328A9C ; --------------------------------------------------------------------------- loc_328A88: ; ... move.b ($FFFFFE0F).w,d0 and.b #$1F,d0 bne.s loc_328A9C move.b #$DE,d0 jsr PlaySound loc_328A9C: ; ... move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.b $22(a1),$22(a0) move.b 1(a1),1(a0) lea (Ani_Obj56).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328AC6: ; ... sub.w #1,$2A(a0) bpl.s loc_328AEA cmp.w #-$10,$2A(a0) ble.w loc_328E6A move.b #4,$18(a0) add.w #1,$C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328AEA: ; ... lea (Ani_Obj56).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328AFC: ; ... tst.b $25(a0) bne.s loc_328B30 cmp.w #$28F0,($FFFFEEC8).w bcs.w loc_328E64 cmp.w #$29D0,8(a0) ble.s loc_328B20 sub.w #1,8(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328B20: ; ... move.w #$29D0,8(a0) addq.b #2,$25(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328B30: ; ... move.l $34(a0),a1 btst #1,$2D(a1) beq.w loc_328E64 btst #2,$2D(a1) bne.w loc_328E64 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) add.w #8,$C(a0) move.b $22(a1),$22(a0) bmi.w loc_328E64 move.b 1(a1),1(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328B70: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_328B7E(pc,d0.w),d1 jmp off_328B7E(pc,d1.w) ; --------------------------------------------------------------------------- off_328B7E: dc.w loc_328B88-off_328B7E,loc_328C26-off_328B7E,loc_328C5A-off_328B7E; 0 ; ... dc.w loc_328CC0-off_328B7E,loc_328CEE-off_328B7E; 3 ; --------------------------------------------------------------------------- loc_328B88: ; ... cmp.w #$28F0,($FFFFEEC8).w bcs.w loc_328E64 move.w #$100,$12(a0) cmp.b #1,$28(a0) bgt.s loc_328BC2 beq.s loc_328BB2 cmp.w #$29EC,8(a0) ble.s loc_328BD2 sub.w #1,8(a0) bra.s loc_328BF4 ; --------------------------------------------------------------------------- loc_328BB2: ; ... cmp.w #$29C4,8(a0) ble.s loc_328BDE sub.w #1,8(a0) bra.s loc_328BF4 ; --------------------------------------------------------------------------- loc_328BC2: ; ... cmp.w #$29A4,8(a0) ble.s loc_328BEA sub.w #1,8(a0) bra.s loc_328BF4 ; --------------------------------------------------------------------------- loc_328BD2: ; ... move.w #$29EC,8(a0) addq.b #2,$25(a0) bra.s loc_328BF4 ; --------------------------------------------------------------------------- loc_328BDE: ; ... move.w #$29C4,8(a0) addq.b #2,$25(a0) bra.s loc_328BF4 ; --------------------------------------------------------------------------- loc_328BEA: ; ... move.w #$29A4,8(a0) addq.b #2,$25(a0) loc_328BF4: ; ... jsr ObjectMoveAndFall jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_328C08 add.w d1,$C(a0) loc_328C08: ; ... tst.b $25(a0) beq.s loc_328C14 move.w #-$200,$10(a0) loc_328C14: ; ... lea (Ani_Obj56_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328C26: ; ... move.l $34(a0),a1 cmp.b #$56,(a1) bne.w loc_328E6A btst #1,$2D(a1) beq.w loc_328E64 addq.b #2,$25(a0) cmp.b #2,$18(a0) bne.s loc_328C54 move.w $C(a0),d0 move.l $34(a0),a1 add.w d0,$2E(a1) loc_328C54: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328C5A: ; ... move.l $34(a0),a1 cmp.b #$56,(a1) bne.w loc_328E6A move.b $22(a1),$22(a0) move.b 1(a1),1(a0) tst.b $22(a0) bpl.s loc_328C7C addq.b #2,$25(a0) loc_328C7C: ; ... bsr.w sub_328974 jsr ObjectMoveAndFall jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_328C94 add.w d1,$C(a0) loc_328C94: ; ... move.w #$100,$12(a0) cmp.b #2,$18(a0) bne.s loc_328CAE move.w $C(a0),d0 move.l $34(a0),a1 add.w d0,$2E(a1) loc_328CAE: ; ... lea (Ani_Obj56_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328CC0: ; ... sub.w #1,$2A(a0) bpl.w loc_328E64 addq.b #2,$25(a0) move.w #$A,$2A(a0) move.w #$FD00,$12(a0) cmp.b #2,$18(a0) beq.w loc_328E64 neg.w $10(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328CEE: ; ... subq.w #1,$2A(a0) bpl.w loc_328E64 jsr ObjectMoveAndFall jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_328D10 move.w #-$200,$12(a0) add.w d1,$C(a0) loc_328D10: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_328D16: ; ... tst.b $25(a0) bne.s loc_328D4A cmp.w #$28F0,($FFFFEEC8).w bcs.w loc_328E64 cmp.w #$299A,8(a0) ble.s loc_328D3A sub.w #1,8(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328D3A: ; ... move.w #$299A,8(a0) addq.b #2,$25(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328D4A: ; ... move.l $34(a0),a1 cmp.b #$56,(a1) bne.w loc_328E6A btst #3,$2D(a1) bne.s loc_328DB4 bsr.w sub_328DD8 btst #1,$2D(a1) beq.w loc_328E64 move.b #$8B,$20(a0) move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.b $22(a1),$22(a0) move.b 1(a1),1(a0) add.w #$10,$C(a0) move.w #$FFCA,d0 btst #0,$22(a0) beq.s loc_328D9E neg.w d0 loc_328D9E: ; ... add.w d0,8(a0) lea (Ani_Obj56_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328DB4: ; ... move.w #$FFFD,d0 btst #0,$22(a0) beq.s loc_328DC2 neg.w d0 loc_328DC2: ; ... add.w d0,8(a0) lea (Ani_Obj56_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_328DD8: ; ... cmp.b #1,$21(a1) beq.s loc_328DE2 rts ; --------------------------------------------------------------------------- loc_328DE2: ; ... move.w 8(a0),d0 sub.w ($FFFFB008).w,d0 bpl.s loc_328DF6 btst #0,$22(a1) bne.s loc_328E00 rts ; --------------------------------------------------------------------------- loc_328DF6: ; ... btst #0,$22(a1) beq.s loc_328E00 rts ; --------------------------------------------------------------------------- loc_328E00: ; ... bset #3,$2D(a1) rts ; End of function sub_328DD8 ; --------------------------------------------------------------------------- loc_328E08: ; ... move.l $34(a0),a1 move.l 8(a1),8(a0) move.l $C(a1),$C(a0) move.b $22(a1),$22(a0) move.b 1(a1),1(a0) move.b $3E(a1),d0 cmp.b #$1F,d0 bne.s loc_328E34 move.b #2,$1C(a0) loc_328E34: ; ... cmp.b #4,($FFFFB024).w beq.s loc_328E44 cmp.b #4,($FFFFB064).w bne.s loc_328E52 loc_328E44: ; ... cmp.b #2,$1C(a0) beq.s loc_328E52 move.b #3,$1C(a0) loc_328E52: ; ... lea (Ani_Obj56_1).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328E64: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_328E6A: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Ani_Obj56: dc.w byte_328E76-Ani_Obj56,byte_328E7A-Ani_Obj56,byte_328E90-Ani_Obj56; 0 ; ... byte_328E76: dc.b 1, 5, 6, -1 ; 0 ; ... byte_328E7A: dc.b 1, 1, 1, 1, 2, 2, 2, 3, 3, 3; 0 ; ... dc.b 4, 4, 4, 0, 0, 0, 0, 0, 0, 0; 10 dc.b 0, -1 ; 20 byte_328E90: dc.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 4; 0 ; ... dc.b 4, 4, 3, 3, 3, 2, 2, 2, 1, 1; 10 dc.b 1, 5, 6, -2, 2, 0; 20 Map_Obj56_1: dc.w byte_328EB8-Map_Obj56_1,byte_328EC0-Map_Obj56_1,byte_328EE0-Map_Obj56_1; 0 ; ... dc.w byte_328F00-Map_Obj56_1,byte_328F14-Map_Obj56_1,byte_328F28-Map_Obj56_1; 3 dc.w byte_328F3C-Map_Obj56_1 ; 6 byte_328EB8: dc.b 0, 1,-$28, 5, 0, 0, 0, 2; 0 ; ... byte_328EC0: dc.b 0, 5,-$28, 5, 0, 4, 0, 2,-$28, $D; 0 ; ... dc.b 0, $C, 0, $12,-$28, $D, 0, $C, 0, $32; 10 dc.b -$28, $D, 0, $C, -1,-$1E,-$28, $D, 0, $C; 20 dc.b -1,-$3E ; 30 byte_328EE0: dc.b 0, 5,-$28, 5, 0, 4, 0, 2,-$28, $D; 0 ; ... dc.b 0, $C, 0, $12,-$28, 5, 0, 8, 0, $32; 10 dc.b -$28, $D, 0, $C, -1,-$1E,-$28, 5, 0, 8; 20 dc.b -1,-$2E ; 30 byte_328F00: dc.b 0, 3,-$28, 5, 0, 4, 0, 2,-$28, $D; 0 ; ... dc.b 0, $C, 0, $12,-$28, $D, 0, $C, -1,-$1E; 10 byte_328F14: dc.b 0, 3,-$28, 5, 0, 4, 0, 2,-$28, 5; 0 ; ... dc.b 0, 8, 0, $12,-$28, 5, 0, 8, -1, -$E; 10 byte_328F28: dc.b 0, 3,-$28, 5, 0, 0, 0, 2,-$28, $D; 0 ; ... dc.b 0, $C, 0, $12,-$28, $D, 0, $C, 0, $32; 10 byte_328F3C: dc.b 0, 3,-$28, 5, 0, 4, 0, 2,-$28, $D; 0 ; ... dc.b 0, $C, -1,-$1E,-$28, $D, 0, $C, -1,-$3E; 10 Ani_Obj56_0: dc.w byte_328F56-Ani_Obj56_0,byte_328F5B-Ani_Obj56_0,byte_328F5F-Ani_Obj56_0; 0 ; ... byte_328F56: dc.b 5, 1, 2, 3, -1 ; 0 ; ... byte_328F5B: dc.b 1, 4, 5, -1 ; 0 ; ... byte_328F5F: dc.b 1, 6, 7, -1, 0 ; 0 ; ... Map_Obj56_0: dc.w byte_328F74-Map_Obj56_0,byte_328F88-Map_Obj56_0,byte_328F90-Map_Obj56_0; 0 ; ... dc.w byte_328F98-Map_Obj56_0,byte_328FA0-Map_Obj56_0,byte_328FA8-Map_Obj56_0; 3 dc.w byte_328FB0-Map_Obj56_0,byte_328FB8-Map_Obj56_0; 6 byte_328F74: dc.b 0, 3,-$10, $F, 0, 0, -1,-$30,-$10, $F; 0 ; ... dc.b 0, $10, -1,-$10,-$10, $F, 0, $20, 0, $10; 10 byte_328F88: dc.b 0, 1,-$10, $F, 0, $30, -1,-$10; 0 ; ... byte_328F90: dc.b 0, 1,-$10, $F, 0, $40, -1,-$10; 0 ; ... byte_328F98: dc.b 0, 1,-$10, $F, 0, $50, -1,-$10; 0 ; ... byte_328FA0: dc.b 0, 1,-$10, $F, 0, $60, -1,-$10; 0 ; ... byte_328FA8: dc.b 0, 1,-$10, $F, $10, $60, -1,-$10; 0 ; ... byte_328FB0: dc.b 0, 1,-$10, $F, 0, $70, -1,-$10; 0 ; ... byte_328FB8: dc.b 0, 1,-$10, $F, $10, $70, -1,-$10; 0 ; ... Ani_Obj56_1: dc.w byte_328FCA-Ani_Obj56_1,byte_328FCD-Ani_Obj56_1,byte_328FD1-Ani_Obj56_1; 0 ; ... dc.w byte_328FDA-Ani_Obj56_1,byte_328FE3-Ani_Obj56_1; 3 byte_328FCA: dc.b $F, 0, -1 ; 0 ; ... byte_328FCD: dc.b 7, 1, 2, -1 ; 0 ; ... byte_328FD1: dc.b 7, 5, 5, 5, 5, 5, 5, -3, 1; 0 ; ... byte_328FDA: dc.b 7, 3, 4, 3, 4, 3, 4, -3, 1; 0 ; ... byte_328FE3: dc.b $F, 6, 6, 6, 6, 6, 6, 6, 6, 6; 0 ; ... dc.b 6, -3, 1 ; 10 Map_Obj56: dc.w byte_328FFE-Map_Obj56,byte_329018-Map_Obj56,byte_329032-Map_Obj56; 0 ; ... dc.w byte_32904C-Map_Obj56,byte_329066-Map_Obj56,byte_329080-Map_Obj56; 3 dc.w byte_32909A-Map_Obj56 ; 6 byte_328FFE: dc.b 0, 4, -8, 5, 0, 0, -1,-$20, 8, 5; 0 ; ... dc.b 0, 4, -1,-$20, -8, $F, 0, 8, -1,-$10; 10 dc.b -8, 7, 0, $18, 0, $10; 20 byte_329018: dc.b 0, 4,-$18, 5, 0, $28, -1,-$20,-$18, $D; 0 ; ... dc.b 0, $30, -1,-$10,-$18, 5, 0, $24, 0, $10; 10 dc.b -$28, 5, 0, $20, 0, 2; 20 byte_329032: dc.b 0, 4,-$18, 5, 0, $28, -1,-$20,-$18, $D; 0 ; ... dc.b 0, $38, -1,-$10,-$18, 5, 0, $24, 0, $10; 10 dc.b -$28, 5, 0, $20, 0, 2; 20 byte_32904C: dc.b 0, 4,-$18, 5, 0, $28, -1,-$20,-$18, $D; 0 ; ... dc.b 0, $40, -1,-$10,-$18, 5, 0, $24, 0, $10; 10 dc.b -$28, 5, 0, $20, 0, 2; 20 byte_329066: dc.b 0, 4,-$18, 5, 0, $28, -1,-$20,-$18, $D; 0 ; ... dc.b 0, $48, -1,-$10,-$18, 5, 0, $24, 0, $10; 10 dc.b -$28, 5, 0, $20, 0, 2; 20 byte_329080: dc.b 0, 4,-$18, 5, 0, $28, -1,-$20,-$18, $D; 0 ; ... dc.b 0, $50, -1,-$10,-$18, 5, 0, $24, 0, $10; 10 dc.b -$28, 5, 0, $20, 0, 2; 20 byte_32909A: dc.b 0, 4,-$18, 5, 0, $28, -1,-$20,-$18, $D; 0 ; ... dc.b 0, $58, -1,-$10,-$18, 5, 0, $24, 0, $10; 10 dc.b -$28, 5, 0, $20, 0, 2; 20 ; --------------------------------------------------------------------------- Obj52: ; ... moveq #0,d0 move.b $A(a0),d0 move.w off_3290C2(pc,d0.w),d1 jmp off_3290C2(pc,d1.w) ; --------------------------------------------------------------------------- off_3290C2: dc.w loc_3290CC-off_3290C2,loc_329164-off_3290C2,loc_329362-off_3290C2; 0 ; ... dc.w loc_3293DC-off_3290C2,loc_3296A8-off_3290C2; 3 ; --------------------------------------------------------------------------- loc_3290CC: ; ... move.l #Map_Obj52,4(a0) move.w #$3C1,2(a0) or.b #4,1(a0) move.b #$90,$E(a0) move.b #$90,$14(a0) move.b #4,$18(a0) move.w #$3040,8(a0) move.w #$580,$C(a0) move.b #1,$2C(a0) move.b #1,$B(a0) addq.b #2,$A(a0) bset #6,1(a0) move.b #$32,$20(a0) move.b #8,$32(a0) move.w #-$E0,($FFFFF75A).w move.w 8(a0),($FFFFF750).w move.w $C(a0),($FFFFF754).w clr.b $14(a0) move.w 8(a0),$10(a0) move.w $C(a0),$12(a0) move.b #2,$15(a0) bsr.w sub_32914E rts ; =============== S U B R O U T I N E ======================================= sub_32914E: ; ... lea ($FFFFF740).w,a2 move.b #6,(a2)+ move.b #0,(a2)+ move.b #$10,(a2)+ move.b #0,(a2)+ rts ; End of function sub_32914E ; --------------------------------------------------------------------------- loc_329164: ; ... moveq #0,d0 move.b $26(a0),d0 move.w off_329172(pc,d0.w),d1 jmp off_329172(pc,d1.w) ; --------------------------------------------------------------------------- off_329172: dc.w loc_32917C-off_329172,loc_3291C4-off_329172,loc_329244-off_329172; 0 ; ... dc.w loc_32927A-off_329172,loc_32958E-off_329172; 3 ; --------------------------------------------------------------------------- loc_32917C: ; ... move.b #0,($FFFFF73F).w bsr.w sub_326B86 tst.b $2C(a0) bne.s loc_329196 cmp.w #$518,($FFFFF754).w bgt.s loc_3291B4 bra.s loc_32919E ; --------------------------------------------------------------------------- loc_329196: ; ... cmp.w #$4FC,($FFFFF754).w bgt.s loc_3291B4 loc_32919E: ; ... move.w #0,($FFFFF75A).w move.b #4,$1A(a0) addq.b #2,$26(a0) move.b #$3C,$3E(a0) loc_3291B4: ; ... move.w ($FFFFF754).w,$C(a0) bsr.w sub_329528 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3291C4: ; ... sub.b #1,$3E(a0) bpl.s loc_32922A move.b #1,($FFFFF73F).w move.b #1,$F(a0) cmp.b #$E8,$3E(a0) bne.s loc_32922A jsr SingleObjLoad bne.s loc_329212 move.b #$52,0(a1) move.b #4,$A(a1) move.b 1(a0),1(a1) and.b #1,1(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b #$2F,$3E(a0) loc_329212: ; ... bsr.w sub_329528 bsr.w sub_329350 lea (Ani_Obj52).l,a1 bsr.w sub_326BAC jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32922A: ; ... move.b $1A(a0),d0 jsr CalcSine asr.w #7,d1 add.w ($FFFFF754).w,d1 move.w d1,$C(a0) addq.b #4,$1A(a0) bra.s loc_329212 ; --------------------------------------------------------------------------- loc_329244: ; ... move.b #0,($FFFFF73F).w move.b #0,$F(a0) move.b #$10,($FFFFF742).w move.b #0,($FFFFF743).w sub.b #1,$3E(a0) bne.w loc_32922A move.w #$E0,($FFFFF75A).w addq.b #2,$26(a0) bsr.w sub_329350 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32927A: ; ... bsr.w sub_326B86 tst.b $2C(a0) bne.s loc_32928E cmp.w #$538,($FFFFF754).w blt.s loc_3292C8 bra.s loc_329296 ; --------------------------------------------------------------------------- loc_32928E: ; ... cmp.w #$548,($FFFFF754).w blt.s loc_3292C8 loc_329296: ; ... tst.b $38(a0) bne.s loc_3292C8 st $38(a0) jsr SingleObjLoad bne.s loc_3292C8 move.b #$52,(a1) move.b #6,$A(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b #$AE,d0 jsr PlaySound loc_3292C8: ; ... tst.b $2C(a0) bne.s loc_3292DE cmp.w #$5A0,($FFFFF754).w blt.s loc_329340 move.w #$5A0,($FFFFF754).w bra.s loc_3292EC ; --------------------------------------------------------------------------- loc_3292DE: ; ... cmp.w #$580,($FFFFF754).w blt.s loc_329340 move.w #$580,($FFFFF754).w loc_3292EC: ; ... move.w #$FF20,($FFFFF75A).w move.b #0,$26(a0) sf $38(a0) move.w ($FFFFB008).w,d0 sub.w #$2FC0,d0 bmi.s loc_329318 move.w #$580,($FFFFF754).w move.w #$3040,8(a0) st $2C(a0) bra.s loc_329328 ; --------------------------------------------------------------------------- loc_329318: ; ... move.w #$2F40,8(a0) move.w #$5A0,($FFFFF754).w sf $2C(a0) loc_329328: ; ... move.w 8(a0),d0 cmp.w ($FFFFB008).w,d0 bgt.s loc_32933A bset #0,1(a0) bra.s loc_329340 ; --------------------------------------------------------------------------- loc_32933A: ; ... bclr #0,1(a0) loc_329340: ; ... move.w ($FFFFF754).w,$C(a0) bsr.w sub_329528 jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_329350: ; ... move.w 8(a0),d0 move.w $C(a0),d1 move.w d0,$10(a0) move.w d1,$12(a0) rts ; End of function sub_329350 ; --------------------------------------------------------------------------- loc_329362: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_329370(pc,d0.w),d1 jmp off_329370(pc,d1.w) ; --------------------------------------------------------------------------- off_329370: dc.w loc_329374-off_329370,loc_3293C2-off_329370; 0 ; ... ; --------------------------------------------------------------------------- loc_329374: ; ... move.l #Map_Obj52,4(a0) move.w #$421,2(a0) or.b #4,1(a0) move.b #4,$18(a0) addq.b #2,$25(a0) move.b #5,$1C(a0) move.b #$98,$20(a0) sub.w #$1C,$C(a0) move.w #$FF90,d0 move.w #$FFFC,d1 btst #0,1(a0) beq.s loc_3293B8 neg.w d0 neg.w d1 loc_3293B8: ; ... add.w d0,8(a0) move.w d1,$10(a0) rts ; --------------------------------------------------------------------------- loc_3293C2: ; ... move.w $10(a0),d1 add.w d1,8(a0) lea (Ani_Obj52).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3293DC: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3293EA(pc,d0.w),d1 jmp off_3293EA(pc,d1.w) ; --------------------------------------------------------------------------- off_3293EA: dc.w loc_3293EE-off_3293EA,loc_329480-off_3293EA; 0 ; ... ; --------------------------------------------------------------------------- loc_3293EE: ; ... move.l a0,a1 moveq #0,d2 moveq #1,d1 bra.s loc_32940C ; --------------------------------------------------------------------------- loc_3293F6: ; ... jsr SingleObjLoad bne.w return_32947E move.w 8(a0),8(a1) move.w $C(a0),$C(a1) loc_32940C: ; ... move.b #$52,(a1) move.b #6,$A(a1) move.l #Map_Obj52,4(a1) move.w #$421,2(a1) or.b #4,1(a1) move.b #3,$18(a1) addq.b #2,$25(a1) move.b #7,$1C(a1) move.b #$8B,$20(a1) move.b d2,$2E(a1) move.b #8,$16(a1) move.b #8,$17(a1) move.w 8(a1),$2A(a1) move.w #$1C00,d0 tst.w d2 bne.s loc_329460 neg.w d0 loc_329460: ; ... move.w d0,$10(a1) move.w #$AC00,$12(a1) cmp.w #$2F40,8(a1) beq.s loc_329478 move.w #$9C00,$12(a1) loc_329478: ; ... addq.w #1,d2 dbf d1,loc_3293F6 return_32947E: ; ... rts ; --------------------------------------------------------------------------- loc_329480: ; ... bsr.w sub_3294F6 jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_3294E4 add.w d1,$C(a0) move.b #$20,(a0) move.b #$A,$24(a0) move.b #2,$1C(a0) move.b #4,$1A(a0) move.w #0,$12(a0) move.l #Map_Obj20_0,4(a0) move.w #$839E,2(a0) jsr Adjust2PArtPointer2_Useless move.b #0,$1A(a0) move.w #9,$32(a0) move.b #3,$36(a0) move.b #$B3,d0 jsr PlaySound jmp Obj20 ; --------------------------------------------------------------------------- loc_3294E4: ; ... lea (Ani_Obj52).l,a1 jsr AnimateSprite jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_3294F6: ; ... move.l $2A(a0),d2 move.l $C(a0),d3 move.w $10(a0),d0 ext.l d0 asl.l #4,d0 add.l d0,d2 move.w $12(a0),d0 add.w #$380,$12(a0) ext.l d0 asl.l #4,d0 add.l d0,d3 move.l d2,$2A(a0) move.l d3,$C(a0) move.w $2A(a0),8(a0) rts ; End of function sub_3294F6 ; =============== S U B R O U T I N E ======================================= sub_329528: ; ... cmp.b #8,$26(a0) bcc.s return_32956E tst.b $32(a0) beq.s loc_329570 tst.b $20(a0) bne.s return_32956E tst.b $14(a0) bne.s loc_329552 move.b #$20,$14(a0) move.w #$AC,d0 jsr PlaySound loc_329552: ; ... lea ($FFFFFB22).w,a1 moveq #0,d0 tst.w (a1) bne.s loc_329560 move.w #$EEE,d0 loc_329560: ; ... move.w d0,(a1) subq.b #1,$14(a0) bne.s return_32956E move.b #$32,$20(a0) return_32956E: ; ... rts ; --------------------------------------------------------------------------- loc_329570: ; ... moveq #$64,d0 jsr AddPoints2 move.w #$B3,($FFFFF75C).w move.b #8,$26(a0) moveq #$40,d0 jsr LoadPLC rts ; End of function sub_329528 ; --------------------------------------------------------------------------- loc_32958E: ; ... move.b #0,$F(a0) sub.w #1,($FFFFF75C).w bmi.s loc_3295CE cmp.w #$1E,($FFFFF75C).w bgt.s loc_3295C4 move.b #$10,$B(a0) bsr.w sub_326C74 move.b ($FFFFFE0F).w,d0 and.b #$1F,d0 bne.w loc_3296F2 bsr.w sub_32964A jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3295C4: ; ... bsr.w sub_326C74 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3295CE: ; ... move.b ($FFFFFE0F).w,d0 and.b #$1F,d0 bne.w loc_3295DE bsr.w sub_32964A loc_3295DE: ; ... cmp.w #$FFC4,($FFFFF75C).w bgt.w loc_3296F2 tst.b ($FFFFF7A7).w bne.s loc_329600 jsr sub_30D038 jsr sub_30D042 move.b #1,($FFFFF7A7).w loc_329600: ; ... addq.w #2,$C(a0) cmp.w #$3160,($FFFFEECA).w bcc.s loc_329612 addq.w #2,($FFFFEECA).w bra.s loc_329638 ; --------------------------------------------------------------------------- loc_329612: ; ... tst.b 1(a0) bpl.s loc_32963E tst.b $2C(a0) bne.s loc_32962E cmp.w #$578,$C(a0) bgt.w loc_32963E jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32962E: ; ... cmp.w #$588,$C(a0) bgt.w loc_32963E loc_329638: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32963E: ; ... move.w #$3160,($FFFFEECA).w jmp DeleteObject ; =============== S U B R O U T I N E ======================================= sub_32964A: ; ... jsr SingleObjLoad bne.s return_3296A6 move.b #$52,(a1) move.b #8,$A(a1) move.l #off_3296FE,4(a1) move.w #$5E4,2(a1) or.b #4,1(a1) move.b #1,$18(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w 8(a0),$2A(a1) sub.w #$28,$C(a1) move.w #$FFA0,$10(a1) move.w #$FF40,$12(a1) move.b #0,$1A(a1) move.b #$11,$1E(a1) return_3296A6: ; ... rts ; End of function sub_32964A ; --------------------------------------------------------------------------- loc_3296A8: ; ... subq.b #1,$1E(a0) bpl.s loc_3296C2 move.b #$11,$1E(a0) addq.b #1,$1A(a0) cmp.b #4,$1A(a0) beq.w loc_3296F8 loc_3296C2: ; ... move.l $2A(a0),d2 move.l $C(a0),d3 move.w $10(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,$2A(a0) move.w $2A(a0),8(a0) move.l d3,$C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3296F2: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3296F8: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- off_3296FE: dc.w byte_329706-off_3296FE,byte_32970E-off_3296FE,byte_329716-off_3296FE; 0 ; ... dc.w byte_32971E-off_3296FE ; 3 byte_329706: dc.b 0, 1, -8, 5, $20, 0, -1, -8; 0 ; ... byte_32970E: dc.b 0, 1, -8, 5, $20, 4, -1, -8; 0 ; ... byte_329716: dc.b 0, 1, -8, 5, $20, 8, -1, -8; 0 ; ... byte_32971E: dc.b 0, 1, -8, 5, $20, $C, -1, -8; 0 ; ... Ani_Obj52: dc.w byte_329736-Ani_Obj52,byte_32973B-Ani_Obj52,byte_329740-Ani_Obj52; 0 ; ... dc.w byte_329745-Ani_Obj52,byte_32974A-Ani_Obj52,byte_32974E-Ani_Obj52; 3 dc.w byte_329752-Ani_Obj52,byte_329755-Ani_Obj52; 6 byte_329736: dc.b 1, 2, 3, -3, 1 ; 0 ; ... byte_32973B: dc.b 2, 4, 5, -3, 2 ; 0 ; ... byte_329740: dc.b 3, 6, 7, -3, 3 ; 0 ; ... byte_329745: dc.b 4, 8, 9, -3, 4 ; 0 ; ... byte_32974A: dc.b 5, $A, $B, -2 ; 0 ; ... byte_32974E: dc.b 3, $C, $D, -1 ; 0 ; ... byte_329752: dc.b $F, 1, -1 ; 0 ; ... byte_329755: dc.b 3, $E, $F, -1, 0 ; 0 ; ... Map_Obj52: dc.w Map_Obj52-Map_Obj52,byte_32977C-Map_Obj52,byte_3297AE-Map_Obj52; 0 ; ... dc.w byte_3297B6-Map_Obj52,byte_3297BE-Map_Obj52,byte_3297C6-Map_Obj52; 3 dc.w byte_3297D4-Map_Obj52,byte_3297E2-Map_Obj52,byte_3297F6-Map_Obj52; 6 dc.w byte_32980A-Map_Obj52,byte_32981E-Map_Obj52,byte_32982C-Map_Obj52; 9 dc.w byte_329834-Map_Obj52,byte_32983C-Map_Obj52,byte_329844-Map_Obj52; 12 dc.w byte_32984C-Map_Obj52,byte_329854-Map_Obj52; 15 byte_32977C: dc.b 0, 8, 4, 5, $20, 0, -1,-$20, $14, 5; 0 ; ... dc.b $20, 4, -1,-$20, 4, $F, $20, 8, -1,-$10; 10 dc.b 4, 7, $20, $18, 0, $10, -$C, $D, 0, $60; 20 dc.b -1,-$20, -$C, $D, 0, $68, 0, 0,-$24, $A; 30 dc.b $20, $70, -1,-$18,-$24, 6, $20, $79, 0, 0; 40 byte_3297AE: dc.b 0, 1,-$21, 4, 0,-$7D, -1,-$28; 0 ; ... byte_3297B6: dc.b 0, 1,-$21, 4, 0,-$7B, -1,-$28; 0 ; ... byte_3297BE: dc.b 0, 1,-$21, 8, 0,-$79, -1,-$30; 0 ; ... byte_3297C6: dc.b 0, 2,-$21, $C, 0,-$76, -1,-$40,-$21, 0; 0 ; ... dc.b 0,-$72, -1,-$20 ; 10 byte_3297D4: dc.b 0, 2,-$21, $C, 0,-$71, -1,-$50,-$21, 8; 0 ; ... dc.b 0,-$6D, -1,-$30 ; 10 byte_3297E2: dc.b 0, 3,-$21, $C, 0,-$6A, -1,-$60,-$21, $C; 0 ; ... dc.b 0,-$66, -1,-$40,-$21, 0, 0,-$62, -1,-$20; 10 byte_3297F6: dc.b 0, 3,-$21, $C, 0,-$61, -1,-$70,-$21, $C; 0 ; ... dc.b 0,-$5D, -1,-$50,-$21, 8, 0,-$59, -1,-$30; 10 byte_32980A: dc.b 0, 3,-$21, $C, 0,-$56, -1,-$78,-$21, $C; 0 ; ... dc.b 0,-$52, -1,-$58,-$21, 8, 0,-$4E, -1,-$38; 10 byte_32981E: dc.b 0, 2,-$21, $C, 0,-$4B, -1,-$78,-$21, $C; 0 ; ... dc.b 0,-$47, -1,-$58 ; 10 byte_32982C: dc.b 0, 1,-$21, $C, 0,-$43, -1,-$78; 0 ; ... byte_329834: dc.b 0, 1, -4, 0, 0, $61, -1, -4; 0 ; ... byte_32983C: dc.b 0, 1, -4, 0, 0, $62, -1, -4; 0 ; ... byte_329844: dc.b 0, 1, -8, 5, 0, $63, -1, -8; 0 ; ... byte_32984C: dc.b 0, 1, -8, 5, 0, $67, -1, -8; 0 ; ... byte_329854: dc.b 0, 7, 4, 5, $20, 0, -1,-$20, $14, 5; 0 ; ... dc.b $20, 4, -1,-$20, 4, $F, $20, 8, -1,-$10; 10 dc.b 4, 7, $20, $18, 0, $10, -$C, $D, 0, $60; 20 dc.b -1,-$20, -$C, $D, 0, $68, 0, 0,-$14, $C; 30 dc.b $20, $7F, -1,-$10 ; 40 ; --------------------------------------------------------------------------- Obj89: ; ... moveq #0,d0 move.b $A(a0),d0 move.w off_32988E(pc,d0.w),d1 jmp off_32988E(pc,d1.w) ; --------------------------------------------------------------------------- off_32988E: dc.w loc_329894-off_32988E,loc_329A24-off_32988E,loc_329DC4-off_32988E; 0 ; ... ; --------------------------------------------------------------------------- loc_329894: ; ... tst.l ($FFFFF680).w beq.s loc_32989C rts ; --------------------------------------------------------------------------- loc_32989C: ; ... tst.w ($FFFFFF70).w bne.s loc_3298D4 move.w ($FFFFB008).w,d0 cmp.w #$2A60,d0 blt.w loc_3299F8 cmp.w #$2B60,d0 bgt.w loc_3299F8 cmp.b #$81,($FFFFB06A).w beq.w loc_3298D4 move.w ($FFFFB048).w,d0 cmp.w #$2A60,d0 blt.w loc_3299F8 cmp.w #$2B60,d0 bgt.w loc_3299F8 loc_3298D4: ; ... move.b #1,($FFFFEEBD).w move.w #$3E0,2(a0) move.l #Map_Obj89,4(a0) or.b #4,1(a0) move.b #$20,$E(a0) move.b #2,$18(a0) move.b #2,$A(a0) move.w #$2AE0,8(a0) move.w #$388,$C(a0) move.w #$2AE0,($FFFFF750).w move.w #$388,($FFFFF754).w bset #6,1(a0) move.b #3,$F(a0) move.b #$F,$20(a0) move.b #8,$32(a0) move.b #8,$B(a0) move.w #$FC80,$2E(a0) clr.b ($FFFFF73F).w move.w #$2AE0,$10(a0) move.w #$488,$12(a0) move.b #0,$15(a0) move.w #$2AE0,$16(a0) move.w #$488,$18(a0) move.b #9,$1B(a0) move.w #$2AE0,$1C(a0) move.w #$488,$1E(a0) move.b #6,$21(a0) move.w #$100,($FFFFF75A).w jsr SingleObjLoad bne.w loc_3299F8 move.b #$89,(a1) move.l #Map_Obj89_0,4(a1) or.b #4,1(a1) move.w #$3E0,2(a1) move.b #$10,$19(a1) move.b #4,$18(a1) move.w #$2A50,8(a1) move.w #$510,$C(a1) addq.b #4,$A(a1) move.l a0,$2A(a1) move.b #0,$1A(a1) move.b #2,$18(a1) move.b #$20,$16(a1) move.l a1,a2 jsr SingleObjLoad2 bne.s loc_3299F8 moveq #0,d0 move.w #$F,d1 loc_3299E0: ; ... move.l (a2,d0.w),(a1,d0.w) addq.w #4,d0 dbf d1,loc_3299E0 bset #0,1(a1) move.w #$2B70,8(a1) loc_3299F8: ; ... bsr.w sub_3299FE rts ; =============== S U B R O U T I N E ======================================= sub_3299FE: ; ... lea ($FFFFF740).w,a2 move.b #4,(a2)+ move.b #0,(a2)+ move.b #0,(a2)+ move.b #0,(a2)+ move.b #2,(a2)+ move.b #0,(a2)+ move.b #1,(a2)+ move.b #0,(a2)+ rts ; End of function sub_3299FE ; --------------------------------------------------------------------------- loc_329A24: ; ... moveq #0,d0 move.b $26(a0),d0 move.w off_329A32(pc,d0.w),d1 jmp off_329A32(pc,d1.w) ; --------------------------------------------------------------------------- off_329A32: dc.w loc_329A40-off_329A32,loc_329A80-off_329A32,loc_329AC0-off_329A32; 0 ; ... dc.w loc_329B12-off_329A32,loc_329C9E-off_329A32,loc_329D08-off_329A32; 3 dc.w loc_329D76-off_329A32 ; 6 ; --------------------------------------------------------------------------- loc_329A40: ; ... bsr.w sub_326B86 bsr.w sub_329B6A bsr.w sub_329C36 cmp.w #$430,($FFFFF754).w blt.s loc_329A70 move.w #$430,($FFFFF754).w add.b #2,$26(a0) move.w #0,($FFFFF75A).w move.w #$FF38,($FFFFF758).w st $38(a0) loc_329A70: ; ... lea (Ani_Obj89_0).l,a1 bsr.w sub_326BAC jmp DisplaySprite ; --------------------------------------------------------------------------- loc_329A80: ; ... bsr.w sub_326B86 bsr.w sub_329B6A bsr.w sub_329C36 tst.b $38(a0) bne.s loc_329A9C cmp.w #$2B10,($FFFFF750).w blt.s loc_329AB0 bra.s loc_329AA4 ; --------------------------------------------------------------------------- loc_329A9C: ; ... cmp.w #$2AB0,($FFFFF750).w bgt.s loc_329AB0 loc_329AA4: ; ... add.b #2,$26(a0) move.w #0,($FFFFF758).w loc_329AB0: ; ... lea (Ani_Obj89_0).l,a1 bsr.w sub_326BAC jmp DisplaySprite ; --------------------------------------------------------------------------- loc_329AC0: ; ... bsr.w sub_326B86 bsr.w sub_329B6A bsr.w sub_329C36 cmp.b #$C0,$1A(a0) bne.s loc_329B02 lea ($FFFFF740).w,a1 and.b #$F0,4(a1) or.b #3,4(a1) addq.b #2,$26(a0) btst #0,1(a0) sne $38(a0) move.w #$1E,($FFFFF75C).w move.b #$BD,d0 jsr PlaySound loc_329B02: ; ... lea (Ani_Obj89_0).l,a1 bsr.w sub_326BAC jmp DisplaySprite ; --------------------------------------------------------------------------- loc_329B12: ; ... cmp.w #$14,($FFFFF75C).w bne.s loc_329B26 bset #0,$3E(a0) move.b #1,($FFFFF73F).w loc_329B26: ; ... sub.w #1,($FFFFF75C).w bpl.s loc_329B4E clr.b ($FFFFF73F).w move.b #2,$26(a0) bchg #0,1(a0) beq.s loc_329B48 move.w #$FF38,($FFFFF758).w bra.s loc_329B4E ; --------------------------------------------------------------------------- loc_329B48: ; ... move.w #$C8,($FFFFF758).w loc_329B4E: ; ... bsr.w sub_326B86 bsr.w sub_329B6A bsr.w sub_329C36 lea (Ani_Obj89_0).l,a1 bsr.w sub_326BAC jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_329B6A: ; ... bsr.w sub_329B9C cmp.b #4,($FFFFB024).w beq.s loc_329B7E cmp.b #4,($FFFFB064).w bne.s loc_329B88 loc_329B7E: ; ... lea ($FFFFF740).w,a1 move.b #$31,3(a1) loc_329B88: ; ... cmp.b #$3F,$14(a0) bne.s return_329B9A lea ($FFFFF740).w,a1 move.b #$C0,3(a1) return_329B9A: ; ... rts ; End of function sub_329B6A ; =============== S U B R O U T I N E ======================================= sub_329B9C: ; ... move.b $1A(a0),d0 jsr CalcSine asr.w #6,d0 add.w ($FFFFF754).w,d0 move.w d0,$C(a0) move.w ($FFFFF750).w,8(a0) addq.b #2,$1A(a0) cmp.b #8,$26(a0) bcc.s return_329C00 tst.b $32(a0) beq.s loc_329C02 tst.b $20(a0) bne.s return_329C00 tst.b $14(a0) bne.s loc_329BE4 move.b #$40,$14(a0) move.w #$AC,d0 jsr PlaySound loc_329BE4: ; ... lea ($FFFFFB22).w,a1 moveq #0,d0 tst.w (a1) bne.s loc_329BF2 move.w #$EEE,d0 loc_329BF2: ; ... move.w d0,(a1) subq.b #1,$14(a0) bne.s return_329C00 move.b #$F,$20(a0) return_329C00: ; ... rts ; --------------------------------------------------------------------------- loc_329C02: ; ... moveq #$64,d0 jsr AddPoints2 move.w #$B3,($FFFFF75C).w move.b #8,$26(a0) lea ($FFFFF740).w,a1 move.b #5,2(a1) move.b #0,3(a1) moveq #$40,d0 jsr LoadPLC move.b #5,$15(a0) rts ; End of function sub_329B9C ; =============== S U B R O U T I N E ======================================= sub_329C36: ; ... move.w 8(a0),d0 move.w $C(a0),d1 move.w d0,$10(a0) move.w d1,$12(a0) move.w d0,$1C(a0) move.w d1,$1E(a0) tst.b $2C(a0) bne.s loc_329C62 move.w d0,$16(a0) move.w d1,$18(a0) move.w d1,$3A(a0) rts ; --------------------------------------------------------------------------- loc_329C62: ; ... cmp.w #$78,($FFFFF75C).w bgt.s return_329C9C sub.w #1,$16(a0) move.l $3A(a0),d0 move.w $2E(a0),d1 add.w #$38,$2E(a0) ext.l d1 asl.l #8,d1 add.l d1,d0 move.l d0,$3A(a0) move.w $3A(a0),$18(a0) cmp.w #$540,$18(a0) blt.s return_329C9C move.w #0,$2E(a0) return_329C9C: ; ... rts ; End of function sub_329C36 ; --------------------------------------------------------------------------- loc_329C9E: ; ... st $2C(a0) subq.w #1,($FFFFF75C).w bmi.s loc_329CAE bsr.w sub_326C74 bra.s loc_329CE8 ; --------------------------------------------------------------------------- loc_329CAE: ; ... move.b #3,$F(a0) lea ($FFFFF740).w,a2 move.b #1,4(a2) move.b #0,5(a2) move.b #0,2(a2) move.b #0,3(a2) bset #0,1(a0) clr.w ($FFFFF758).w clr.w ($FFFFF75A).w addq.b #2,$26(a0) move.w #$FFEE,($FFFFF75C).w loc_329CE8: ; ... move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) lea (Ani_Obj89_0).l,a1 bsr.w sub_326BAC bsr.w sub_329C36 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_329D08: ; ... addq.w #1,($FFFFF75C).w beq.s loc_329D18 bpl.s loc_329D1E add.w #$18,($FFFFF75A).w bra.s loc_329D4E ; --------------------------------------------------------------------------- loc_329D18: ; ... clr.w ($FFFFF75A).w bra.s loc_329D4E ; --------------------------------------------------------------------------- loc_329D1E: ; ... cmp.w #$18,($FFFFF75C).w bcs.s loc_329D36 beq.s loc_329D3E cmp.w #$20,($FFFFF75C).w bcs.s loc_329D4E addq.b #2,$26(a0) bra.s loc_329D4E ; --------------------------------------------------------------------------- loc_329D36: ; ... sub.w #8,($FFFFF75A).w bra.s loc_329D4E ; --------------------------------------------------------------------------- loc_329D3E: ; ... clr.w ($FFFFF75A).w jsr sub_30D038 jsr sub_30D042 loc_329D4E: ; ... bsr.w sub_326B86 bsr.w sub_329B9C move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) lea (Ani_Obj89_0).l,a1 bsr.w sub_326BAC bsr.w sub_329C36 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_329D76: ; ... move.w #$400,($FFFFF758).w move.w #-$40,($FFFFF75A).w cmp.w #$2C00,($FFFFEECA).w bcc.s loc_329D90 addq.w #2,($FFFFEECA).w bra.s loc_329D96 ; --------------------------------------------------------------------------- loc_329D90: ; ... tst.b 1(a0) bpl.s loc_329DBE loc_329D96: ; ... bsr.w sub_326B86 bsr.w sub_329B9C move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) lea (Ani_Obj89_0).l,a1 bsr.w sub_326BAC bsr.w sub_329C36 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_329DBE: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_329DC4: ; ... moveq #0,d0 move.l $2A(a0),a1 cmp.b #8,$26(a1) blt.s loc_329DD8 move.b #4,$25(a0) loc_329DD8: ; ... move.b $25(a0),d0 move.w off_329DE4(pc,d0.w),d1 jmp off_329DE4(pc,d1.w) ; --------------------------------------------------------------------------- off_329DE4: dc.w loc_329DEE-off_329DE4,loc_329E24-off_329DE4,loc_329F72-off_329DE4; 0 ; ... dc.w loc_329FCE-off_329DE4,loc_329F98-off_329DE4; 3 ; --------------------------------------------------------------------------- loc_329DEE: ; ... bsr.w sub_329FA8 move.b ($FFFFFE0F).w,d0 and.b #$1F,d0 bne.s loc_329E06 move.w #$E1,d0 jsr PlaySound loc_329E06: ; ... sub.w #1,$C(a0) cmp.w #$488,$C(a0) bgt.s loc_329E1E addq.b #2,$25(a0) move.b #0,($FFFFEEBD).w loc_329E1E: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_329E24: ; ... bsr.w sub_329FA8 move.l $2A(a0),a3 btst #0,$3E(a3) beq.s loc_329E5A tst.b $38(a3) beq.s loc_329E44 btst #0,1(a0) beq.s loc_329E5A bra.s loc_329E4C ; --------------------------------------------------------------------------- loc_329E44: ; ... btst #0,1(a0) bne.s loc_329E5A loc_329E4C: ; ... bclr #0,$3E(a3) bsr.w sub_329ED6 st $38(a0) loc_329E5A: ; ... bsr.w sub_329E64 jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_329E64: ; ... tst.b $38(a0) beq.s return_329ED0 tst.w $30(a0) bgt.s loc_329E76 move.w #$1F,$30(a0) loc_329E76: ; ... sub.w #1,$30(a0) bgt.s loc_329EA4 sf $38(a0) move.w #0,$30(a0) tst.b $38(a3) bne.s loc_329E96 move.w #$2A50,8(a0) bra.s loc_329E9C ; --------------------------------------------------------------------------- loc_329E96: ; ... move.w #$2B70,8(a0) loc_329E9C: ; ... move.w #$488,$C(a0) bra.s return_329ED0 ; --------------------------------------------------------------------------- loc_329EA4: ; ... move.w #$2A50,d1 tst.b $38(a3) beq.s loc_329EB2 move.w #$2B70,d1 loc_329EB2: ; ... move.b ($FFFFFE0F).w,d0 and.w #1,d0 add.w d0,d0 add.w word_329ED2(pc,d0.w),d1 move.w d1,8(a0) move.w #$488,d1 add.w word_329ED2(pc,d0.w),d1 move.w d1,$C(a0) return_329ED0: ; ... rts ; End of function sub_329E64 ; --------------------------------------------------------------------------- word_329ED2: dc.w 1 ; ... dc.b $FF dc.b $FF ; =============== S U B R O U T I N E ======================================= sub_329ED6: ; ... jsr SingleObjLoad bne.w return_329F68 move.b #$89,0(a1) move.b #4,$A(a1) move.b #8,$25(a1) move.l #Map_Obj89_0,4(a1) move.w #$3E0,2(a1) or.b #4,1(a1) moveq #0,d6 move.b #2,$1A(a1) move.w #$2A6A,8(a1) tst.b $38(a3) beq.s loc_329F28 st d6 move.w #$2B56,8(a1) bset #0,1(a1) loc_329F28: ; ... move.w #$28,$30(a1) jsr RandomNumber and.w #3,d0 add.w d0,d0 move.w word_329F6A(pc,d0.w),$C(a1) move.l a1,a2 jsr SingleObjLoad bne.s return_329F68 move.b #$89,0(a1) move.b #4,$A(a1) move.b #6,$25(a1) move.l a2,$34(a1) move.b d6,$28(a1) move.l a3,$38(a1) return_329F68: ; ... rts ; End of function sub_329ED6 ; --------------------------------------------------------------------------- word_329F6A: dc.w $458, $478, $498, $4B8 ; 0 ; ... ; --------------------------------------------------------------------------- loc_329F72: ; ... move.b #1,($FFFFEEBD).w add.w #1,$C(a0) cmp.w #$510,$C(a0) blt.s loc_329F92 move.b #0,($FFFFEEBD).w jmp DeleteObject ; --------------------------------------------------------------------------- loc_329F92: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_329F98: ; ... sub.w #1,$30(a0) beq.w loc_32A104 jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_329FA8: ; ... move.w #$23,d1 move.w #$44,d2 move.w #$45,d3 move.w 8(a0),d4 move.w $C(a0),-(sp) add.w #4,$C(a0) jsr SolidObject move.w (sp)+,$C(a0) rts ; End of function sub_329FA8 ; --------------------------------------------------------------------------- loc_329FCE: ; ... moveq #0,d0 move.l $38(a0),a1 cmp.b #8,$26(a1) blt.s loc_329FE2 move.b #6,$2A(a0) loc_329FE2: ; ... move.b $2A(a0),d0 move.w off_329FEE(pc,d0.w),d1 jmp off_329FEE(pc,d1.w) ; --------------------------------------------------------------------------- off_329FEE: dc.w loc_329FF8-off_329FEE,loc_32A066-off_329FEE,loc_32A0BC-off_329FEE; 0 ; ... dc.w loc_32A0E6-off_329FEE,loc_32A104-off_329FEE; 3 ; --------------------------------------------------------------------------- loc_329FF8: ; ... move.l #Map_Obj89_0,4(a0) move.w #$3E0,2(a0) or.b #4,1(a0) move.b #$90,$E(a0) move.b #4,$18(a0) addq.b #2,$2A(a0) move.l $34(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.w #4,$12(a0) move.b #4,$1A(a0) add.w #9,$C(a0) tst.b $28(a0) beq.s loc_32A058 bset #0,$22(a0) bset #0,1(a0) move.w #$FFFD,$10(a0) bra.s loc_32A05E ; --------------------------------------------------------------------------- loc_32A058: ; ... move.w #3,$10(a0) loc_32A05E: ; ... move.b #$B0,$20(a0) rts ; --------------------------------------------------------------------------- loc_32A066: ; ... btst #7,$22(a0) beq.s loc_32A074 move.b #8,$2A(a0) loc_32A074: ; ... move.w 8(a0),d0 add.w $10(a0),d0 tst.w $10(a0) bpl.s loc_32A08E cmp.w #$2A77,d0 bgt.s loc_32A0B2 move.w #$2A77,d0 bra.s loc_32A098 ; --------------------------------------------------------------------------- loc_32A08E: ; ... cmp.w #$2B49,d0 blt.s loc_32A0B2 move.w #$2B49,d0 loc_32A098: ; ... add.b #2,$2A(a0) move.w d0,8(a0) move.b #$DD,d0 jsr PlaySound jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32A0B2: ; ... move.w d0,8(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32A0BC: ; ... move.b #0,$20(a0) btst #7,$22(a0) beq.s loc_32A0D0 add.b #2,$2A(a0) loc_32A0D0: ; ... bsr.w sub_32A10A lea (Ani_Obj89).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32A0E6: ; ... bsr.w sub_32A144 move.w $C(a0),d0 add.w $12(a0),d0 cmp.w #$4F0,d0 bgt.w loc_32A104 move.w d0,$C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32A104: ; ... jmp DeleteObject ; =============== S U B R O U T I N E ======================================= sub_32A10A: ; ... tst.w $30(a0) bne.s loc_32A134 move.w #$1B,d1 move.w #1,d2 move.w #2,d3 move.w 8(a0),d4 jsr PlatformObject btst #3,$22(a0) beq.s return_32A142 move.w #$1F,$30(a0) loc_32A134: ; ... sub.w #1,$30(a0) bne.s return_32A142 move.b #6,$2A(a0) return_32A142: ; ... rts ; End of function sub_32A10A ; =============== S U B R O U T I N E ======================================= sub_32A144: ; ... bclr #3,$22(a0) beq.s loc_32A152 lea ($FFFFB000).w,a1 bsr.s sub_32A15E loc_32A152: ; ... bclr #4,$22(a0) beq.s return_32A16A lea ($FFFFB040).w,a1 ; End of function sub_32A144 ; =============== S U B R O U T I N E ======================================= sub_32A15E: ; ... bset #1,$22(a1) bclr #3,$22(a1) return_32A16A: ; ... rts ; End of function sub_32A15E ; --------------------------------------------------------------------------- Ani_Obj89: dc.w byte_32A170-Ani_Obj89,byte_32A187-Ani_Obj89; 0 ; ... byte_32A170: dc.b 1, 4, 6, 5, 4, 6, 4, 5, 4, 6; 0 ; ... dc.b 4, 4, 6, 5, 4, 6, 4, 5, 4, 6; 10 dc.b 4, -3, 1 ; 20 byte_32A187: dc.b $F, 4, 4, 4, 4, 4, 4, 4, 4, 4; 0 ; ... dc.b 4, 4, 4, 4, 4, 4, 4, 4, 4, 4; 10 dc.b 4, 4, 4, 4, 4, 4, 4, 4, 4, 4; 20 dc.b 4, -7, 0 ; 30 Map_Obj89_0: dc.w byte_32A1B6-Map_Obj89_0,byte_32A1D6-Map_Obj89_0,byte_32A1D6-Map_Obj89_0; 0 ; ... dc.w byte_32A1DE-Map_Obj89_0,byte_32A1DE-Map_Obj89_0,byte_32A1E6-Map_Obj89_0; 3 dc.w byte_32A1EE-Map_Obj89_0 ; 6 byte_32A1B6: dc.b 0, 5, $28, $F, $20,-$78, 0, 0, 8, $F; 0 ; ... dc.b $20,-$78, 0, 0,-$18, $F, $20,-$78, 0, 0; 10 dc.b -$38, $F, $20,-$78, 0, 0,-$40, $C, $20,-$7C; 20 dc.b 0, 0 ; 30 byte_32A1D6: dc.b 0, 1, -4, 4, $20,-$68, -1, -8; 0 ; ... byte_32A1DE: dc.b 0, 1, -4, $C, $20,-$66, -1,-$10; 0 ; ... byte_32A1E6: dc.b 0, 1, -4, $C, $20,-$62, -1,-$10; 0 ; ... byte_32A1EE: dc.b 0, 1, -4, $C, $20,-$5E, -1,-$10; 0 ; ... Ani_Obj89_0: dc.w byte_32A202-Ani_Obj89_0,byte_32A218-Ani_Obj89_0,byte_32A21C-Ani_Obj89_0; 0 ; ... dc.w byte_32A21F-Ani_Obj89_0,byte_32A22B-Ani_Obj89_0,byte_32A22E-Ani_Obj89_0; 3 byte_32A202: dc.b 7, 0, 1, -1, 2, 3, 2, 3, 2, 3; 0 ; ... dc.b 2, 3, -1, 4, 4, 4, 4, 4, 4, 4; 10 dc.b 4, -1 ; 20 byte_32A218: dc.b 1, 6, 7, -1 ; 0 ; ... byte_32A21C: dc.b $F, 9, -1 ; 0 ; ... byte_32A21F: dc.b 2, $A, $A, $B, $B, $B, $B, $B, $A, $A; 0 ; ... dc.b -3, 2 ; 10 byte_32A22B: dc.b $F, 8, -1 ; 0 ; ... byte_32A22E: dc.b 7, 5, -1, 0 ; 0 ; ... Map_Obj89: dc.w byte_32A24A-Map_Obj89,byte_32A258-Map_Obj89,byte_32A266-Map_Obj89; 0 ; ... dc.w byte_32A274-Map_Obj89,byte_32A282-Map_Obj89,byte_32A290-Map_Obj89; 3 dc.w byte_32A29E-Map_Obj89,byte_32A2AC-Map_Obj89,byte_32A2BA-Map_Obj89; 6 dc.w byte_32A2E6-Map_Obj89,byte_32A306-Map_Obj89,byte_32A326-Map_Obj89; 9 byte_32A24A: dc.b 0, 2,-$18, $D, 1, $50, -1,-$18,-$18, 5; 0 ; ... dc.b 1, $48, -1,-$28 ; 10 byte_32A258: dc.b 0, 2,-$18, $D, 1, $58, -1,-$18,-$18, 5; 0 ; ... dc.b 1, $48, -1,-$28 ; 10 byte_32A266: dc.b 0, 2,-$18, $D, 1, $60, -1,-$18,-$18, 5; 0 ; ... dc.b 1, $4C, -1,-$28 ; 10 byte_32A274: dc.b 0, 2,-$18, $D, 1, $68, -1,-$18,-$18, 5; 0 ; ... dc.b 1, $4C, -1,-$28 ; 10 byte_32A282: dc.b 0, 2,-$18, $D, 1, $70, -1,-$18,-$18, 5; 0 ; ... dc.b 1, $4C, -1,-$28 ; 10 byte_32A290: dc.b 0, 2,-$18, $D, 1, $78, -1,-$18,-$18, 5; 0 ; ... dc.b 1, $4C, -1,-$28 ; 10 byte_32A29E: dc.b 0, 2, $18, 5, 0, $7E, -1,-$18, $18, 5; 0 ; ... dc.b 0, $7E, 0, 8 ; 10 byte_32A2AC: dc.b 0, 2, $18, 4, 0,-$7E, -1,-$18, $18, 4; 0 ; ... dc.b 0,-$7E, 0, 8 ; 10 byte_32A2BA: dc.b 0, 7,-$28, 5, 1, $40, -1, -6,-$18, 5; 0 ; ... dc.b 1, $44, 0, 8, 0, 0, $20, $6F, -1,-$30; 10 dc.b -8, 6, $20, $70, -1,-$28, -8, $F, $21, $28; 20 dc.b -1,-$18, -8, 7, $20, $76, -1,-$18, -8, 7; 30 dc.b $20, $76, 0, 8 ; 40 byte_32A2E6: dc.b 0, 5,-$16, $F, $20, 0, -1,-$64,-$2E, $A; 0 ; ... dc.b $20, $10, -1,-$5C,-$2E, $B, $20, $19, -1,-$44; 10 dc.b -$E, 5, $20, $25, -1,-$44, -8, 5, $20, $65; 20 dc.b -1,-$40 ; 30 byte_32A306: dc.b 0, 5, -$F, $F, $20, $29, -1,-$63,-$27, $A; 0 ; ... dc.b $20, $39, -1,-$5B,-$27, 7, $20, $42, -1,-$43; 10 dc.b -7, 2, $20, $4A, -1,-$43, -8, 5, $20, $69; 20 dc.b -1,-$40 ; 30 byte_32A326: dc.b 0, 3,-$14, $F, $20, $4D, -1,-$60, $C, $D; 0 ; ... dc.b $20, $5D, -1,-$60, 0, 4, $20, $6D, -1,-$40; 10 ; --------------------------------------------------------------------------- Obj57: ; ... moveq #0,d0 move.b $A(a0),d0 move.w off_32A348(pc,d0.w),d1 jmp off_32A348(pc,d1.w) ; --------------------------------------------------------------------------- off_32A348: dc.w loc_32A34E-off_32A348,loc_32A454-off_32A348,loc_32A9A2-off_32A348; 0 ; ... ; --------------------------------------------------------------------------- loc_32A34E: ; ... move.l #Map_Obj57,4(a0) move.w #$3C0,2(a0) or.b #4,1(a0) move.b #3,$18(a0) move.w #$21A0,8(a0) move.w #$560,$C(a0) move.b #5,$B(a0) addq.b #2,$A(a0) move.b #2,$26(a0) bset #6,1(a0) move.b #4,$F(a0) move.b #$F,$20(a0) move.b #8,$32(a0) move.w 8(a0),($FFFFF750).w move.w $C(a0),($FFFFF754).w move.w #$C0,($FFFFF75A).w move.b #0,($FFFFF73F).w move.b #1,($FFFFEEBD).w move.b #$40,$E(a0) move.w 8(a0),$10(a0) move.w $C(a0),$12(a0) move.b #2,$15(a0) move.w 8(a0),$16(a0) move.w $C(a0),$18(a0) move.b #1,$1B(a0) move.w 8(a0),$1C(a0) move.w $C(a0),$1E(a0) move.b #$E,$21(a0) move.w 8(a0),$22(a0) move.w $C(a0),$24(a0) move.b #2,$27(a0) sub.w #$28,$22(a0) move.w #$28,($FFFFF75C).w move.w #$FC80,$2E(a0) move.w #$FC80,$30(a0) bsr.w sub_32A426 rts ; =============== S U B R O U T I N E ======================================= sub_32A426: ; ... lea ($FFFFF740).w,a2 move.b #2,(a2)+ move.b #0,(a2)+ move.b #3,(a2)+ move.b #0,(a2)+ move.b #$10,(a2)+ move.b #0,(a2)+ move.b #$D,(a2)+ move.b #0,(a2)+ move.b #3,(a2)+ move.b #0,(a2)+ rts ; End of function sub_32A426 ; --------------------------------------------------------------------------- loc_32A454: ; ... moveq #0,d0 move.b $26(a0),d0 move.w off_32A462(pc,d0.w),d1 jmp off_32A462(pc,d1.w) ; --------------------------------------------------------------------------- off_32A462: dc.w loc_32A470-off_32A462,loc_32A506-off_32A462,loc_32A544-off_32A462; 0 ; ... dc.w loc_32A5E6-off_32A462,loc_32A878-off_32A462,loc_32A8CE-off_32A462; 3 dc.w loc_32A954-off_32A462 ; 6 ; --------------------------------------------------------------------------- loc_32A470: ; ... sub.w #1,($FFFFF75C).w bpl.s loc_32A4C2 move.b #0,($FFFFF745).w bsr.w sub_326B86 cmp.w #$560,($FFFFF754).w bgt.s loc_32A4C2 move.w #$100,($FFFFF75A).w move.w ($FFFFB008).w,d3 cmp.w #$2190,d3 bcc.s loc_32A4A0 move.w #$2200,d3 bra.s loc_32A4A4 ; --------------------------------------------------------------------------- loc_32A4A0: ; ... move.w #$2120,d3 loc_32A4A4: ; ... move.w d3,($FFFFF750).w addq.b #2,$26(a0) bclr #0,1(a0) move.w ($FFFFB008).w,d0 sub.w ($FFFFF750).w,d0 bmi.s loc_32A4C2 bset #0,1(a0) loc_32A4C2: ; ... cmp.w #$28,($FFFFF75C).w bne.s loc_32A4D0 move.b #0,($FFFFF73F).w loc_32A4D0: ; ... cmp.w #$620,($FFFFF754).w bge.s loc_32A4E2 move.b #1,($FFFFEEBD).w bsr.w sub_32A764 loc_32A4E2: ; ... move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) bsr.w sub_32A7DC lea (off_32A9C4).l,a1 bsr.w sub_326BAC bsr.w sub_32A6A8 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32A506: ; ... bsr.w sub_326B86 bsr.w sub_32A764 cmp.w #$620,($FFFFF754).w blt.s loc_32A520 addq.b #2,$26(a0) move.b #0,($FFFFEEBD).w loc_32A520: ; ... move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) bsr.w sub_32A7DC lea (off_32A9C4).l,a1 bsr.w sub_326BAC bsr.w sub_32A6A8 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32A544: ; ... bsr.w sub_326B86 cmp.w #$660,($FFFFF754).w blt.s loc_32A5C2 move.w #$660,($FFFFF754).w addq.b #2,$26(a0) lea ($FFFFF740).w,a1 and.b #-$10,2(a1) or.b #6,2(a1) and.b #-$10,8(a1) or.b #6,8(a1) and.b #$F0,6(a1) or.b #$D,6(a1) move.b #$20,5(a1) move.w #$64,($FFFFF75C).w move.b #$30,1(a1) bclr #0,1(a0) move.w ($FFFFB008).w,d0 sub.w ($FFFFF750).w,d0 bmi.s loc_32A5AA bset #0,1(a0) loc_32A5AA: ; ... move.w #-$200,($FFFFF758).w move.w #0,($FFFFF75A).w btst #0,1(a0) beq.s loc_32A5C2 neg.w ($FFFFF758).w loc_32A5C2: ; ... move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) bsr.w sub_32A7DC lea (off_32A9C4).l,a1 bsr.w sub_326BAC bsr.w sub_32A6A8 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32A5E6: ; ... sub.w #1,($FFFFF75C).w cmp.w #$28,($FFFFF75C).w bgt.w loc_32A684 move.b #1,($FFFFF73F).w tst.w ($FFFFF75C).w bpl.w loc_32A684 tst.b $38(a0) beq.s loc_32A610 sf $38(a0) bra.s loc_32A634 ; --------------------------------------------------------------------------- loc_32A610: ; ... bsr.w sub_326B86 cmp.w #$2120,($FFFFF750).w bgt.s loc_32A624 move.w #$2120,($FFFFF750).w bra.s loc_32A63E ; --------------------------------------------------------------------------- loc_32A624: ; ... cmp.w #$2200,($FFFFF750).w blt.s loc_32A684 move.w #$2200,($FFFFF750).w bra.s loc_32A63E ; --------------------------------------------------------------------------- loc_32A634: ; ... lea ($FFFFF740).w,a1 move.b #$30,7(a1) loc_32A63E: ; ... move.w #0,($FFFFF758).w move.b #0,$26(a0) lea ($FFFFF740).w,a1 and.b #$F0,2(a1) or.b #$B,2(a1) and.b #$F0,8(a1) or.b #$B,8(a1) move.b #0,1(a1) and.b #$F0,6(a1) or.b #$D,6(a1) move.w #$64,($FFFFF75C).w move.w #$FF40,($FFFFF75A).w loc_32A684: ; ... move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) bsr.w sub_32A7DC lea (off_32A9C4).l,a1 bsr.w sub_326BAC bsr.w sub_32A6A8 jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32A6A8: ; ... move.w 8(a0),d0 move.w $C(a0),d1 move.w d0,$16(a0) move.w d1,$18(a0) move.w d0,$1C(a0) move.w d1,$1E(a0) tst.b $2C(a0) bne.s loc_32A6F6 move.w d0,$22(a0) move.w d1,$24(a0) move.w d0,$10(a0) move.w d1,$12(a0) move.w d1,$3A(a0) move.w d1,$34(a0) btst #0,1(a0) beq.s loc_32A6EE add.w #$28,$22(a0) rts ; --------------------------------------------------------------------------- loc_32A6EE: ; ... sub.w #$28,$22(a0) rts ; --------------------------------------------------------------------------- loc_32A6F6: ; ... cmp.w #$78,($FFFFF75C).w bgt.s return_32A762 sub.w #1,$22(a0) move.l $3A(a0),d0 move.w $2E(a0),d1 add.w #$38,$2E(a0) ext.l d1 asl.l #8,d1 add.l d1,d0 move.l d0,$3A(a0) move.w $3A(a0),$24(a0) cmp.w #$6F0,$24(a0) blt.s loc_32A730 move.w #0,$2E(a0) loc_32A730: ; ... add.w #1,$10(a0) move.l $34(a0),d0 move.w $30(a0),d1 add.w #$38,$30(a0) ext.l d1 asl.l #8,d1 add.l d1,d0 move.l d0,$34(a0) move.w $34(a0),$12(a0) cmp.w #$6F0,$12(a0) blt.s return_32A762 move.w #0,$30(a0) return_32A762: ; ... rts ; End of function sub_32A6A8 ; =============== S U B R O U T I N E ======================================= sub_32A764: ; ... move.b ($FFFFFE0F).w,d1 sf d2 and.b #$1F,d1 beq.s loc_32A778 and.b #7,d1 bne.s return_32A7DA st d2 loc_32A778: ; ... jsr RandomNumber swap d1 and.w #$1FF,d1 add.w #$20F0,d1 cmp.w #$2230,d1 bgt.s loc_32A778 jsr SingleObjLoad bne.s return_32A7DA move.b #$57,(a1) move.b #4,$A(a1) move.w d1,8(a1) move.w #$5F0,$C(a1) move.l #Map_Obj57,4(a1) move.w #$560,2(a1) or.b #4,1(a1) move.b #3,$18(a1) move.b #$D,$1A(a1) tst.b d2 bne.s return_32A7DA move.b #$14,$1A(a1) move.b #$B1,$20(a1) return_32A7DA: ; ... rts ; End of function sub_32A764 ; =============== S U B R O U T I N E ======================================= sub_32A7DC: ; ... bsr.w sub_32A812 cmp.b #$1F,$14(a0) bne.s return_32A7F2 lea ($FFFFF740).w,a1 move.b #$C0,7(a1) return_32A7F2: ; ... rts ; End of function sub_32A7DC ; =============== S U B R O U T I N E ======================================= sub_32A7F4: ; ... move.b $1A(a0),d0 jsr CalcSine asr.w #6,d0 add.w ($FFFFF754).w,d0 move.w d0,$C(a0) move.w ($FFFFF750).w,8(a0) addq.b #2,$1A(a0) ; End of function sub_32A7F4 ; =============== S U B R O U T I N E ======================================= sub_32A812: ; ... cmp.b #8,$26(a0) bcc.s return_32A858 tst.b $32(a0) beq.s loc_32A85A tst.b $20(a0) bne.s return_32A858 tst.b $14(a0) bne.s loc_32A83C move.b #$20,$14(a0) move.w #$AC,d0 jsr PlaySound loc_32A83C: ; ... lea ($FFFFFB22).w,a1 moveq #0,d0 tst.w (a1) bne.s loc_32A84A move.w #$EEE,d0 loc_32A84A: ; ... move.w d0,(a1) subq.b #1,$14(a0) bne.s return_32A858 move.b #$F,$20(a0) return_32A858: ; ... rts ; --------------------------------------------------------------------------- loc_32A85A: ; ... moveq #$64,d0 jsr AddPoints2 move.w #$B3,($FFFFF75C).w move.b #8,$26(a0) moveq #$40,d0 jsr LoadPLC rts ; End of function sub_32A812 ; --------------------------------------------------------------------------- loc_32A878: ; ... st $2C(a0) move.b #0,($FFFFEEBD).w subq.w #1,($FFFFF75C).w bmi.s loc_32A89A move.b #$13,$21(a0) move.b #7,$B(a0) bsr.w sub_326C74 bra.s loc_32A8B8 ; --------------------------------------------------------------------------- loc_32A89A: ; ... bset #0,1(a0) clr.w ($FFFFF758).w clr.w ($FFFFF75A).w addq.b #2,$26(a0) move.b #$12,$21(a0) move.w #$FFEE,($FFFFF75C).w loc_32A8B8: ; ... move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) bsr.w sub_32A6A8 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32A8CE: ; ... addq.w #1,($FFFFF75C).w beq.s loc_32A8EA bpl.s loc_32A8F0 cmp.w #$620,($FFFFF754).w bcc.s loc_32A8E2 subq.w #1,($FFFFF75C).w loc_32A8E2: ; ... add.w #$10,($FFFFF75A).w bra.s loc_32A936 ; --------------------------------------------------------------------------- loc_32A8EA: ; ... clr.w ($FFFFF75A).w bra.s loc_32A936 ; --------------------------------------------------------------------------- loc_32A8F0: ; ... cmp.w #$18,($FFFFF75C).w bcs.s loc_32A91E beq.s loc_32A926 cmp.w #$20,($FFFFF75C).w bcs.s loc_32A936 lea ($FFFFF740).w,a1 move.b #$D,7(a1) move.b #2,0(a1) move.b #0,1(a1) addq.b #2,$26(a0) bra.s loc_32A936 ; --------------------------------------------------------------------------- loc_32A91E: ; ... sub.w #8,($FFFFF75A).w bra.s loc_32A936 ; --------------------------------------------------------------------------- loc_32A926: ; ... clr.w ($FFFFF75A).w jsr sub_30D038 jsr sub_30D042 loc_32A936: ; ... bsr.w sub_326B86 bsr.w sub_32A7F4 move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) bsr.w sub_32A6A8 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32A954: ; ... move.w #$400,($FFFFF758).w move.w #-$40,($FFFFF75A).w cmp.w #$2240,($FFFFEECA).w beq.s loc_32A96E addq.w #2,($FFFFEECA).w bra.s loc_32A974 ; --------------------------------------------------------------------------- loc_32A96E: ; ... tst.b 1(a0) bpl.s loc_32A99C loc_32A974: ; ... bsr.w sub_326B86 bsr.w sub_32A7F4 move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) lea (off_32A9C4).l,a1 bsr.w sub_326BAC bsr.w sub_32A6A8 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32A99C: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_32A9A2: ; ... jsr ObjectMoveAndFall sub.w #$28,$12(a0) cmp.w #$6F0,$C(a0) bgt.w loc_32A9BE jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32A9BE: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- off_32A9C4: dc.w byte_32A9E2-off_32A9C4,byte_32A9E8-off_32A9C4,byte_32A9EB-off_32A9C4; 0 ; ... dc.w byte_32A9F2-off_32A9C4,byte_32AA03-off_32A9C4,byte_32AA14-off_32A9C4; 3 dc.w byte_32AA1B-off_32A9C4,byte_32AA2D-off_32A9C4,byte_32AA3E-off_32A9C4; 6 dc.w byte_32AA4F-off_32A9C4,byte_32AA60-off_32A9C4,byte_32AA67-off_32A9C4; 9 dc.w byte_32AA79-off_32A9C4,byte_32AA8B-off_32A9C4,byte_32AAA2-off_32A9C4; 12 byte_32A9E2: dc.b $F, 1, -1, 0, -4, 2; 0 ; ... byte_32A9E8: dc.b 5, 8, -1 ; 0 ; ... byte_32A9EB: dc.b 1, 5, 6, -1, 7, -4, 3; 0 ; ... byte_32A9F2: dc.b 1, 2, 2, 2, 2, 2, 3, 3, 3, 3; 0 ; ... dc.b 3, 4, 4, 4, 4, -3, 4; 10 byte_32AA03: dc.b 1, 2, 2, 2, 2, 3, 3, 3, 4, 4; 0 ; ... dc.b 4, 2, 2, 3, 3, -3, 5; 10 byte_32AA14: dc.b 1, 4, 2, 3, 4, -4, 1; 0 ; ... byte_32AA1B: dc.b 1, 2, 3, 4, 4, 2, 2, 3, 3, 3; 0 ; ... dc.b 4, 4, 4, 2, 2, 2, -3, 7; 10 byte_32AA2D: dc.b 1, 2, 3, 3, 3, 3, 4, 4, 4, 4; 0 ; ... dc.b 4, 2, 8, 8, 8, -3, 8; 10 byte_32AA3E: dc.b 1, 9, 9, 9, 9, 9, $A, $A, $A, $A; 0 ; ... dc.b $A, $B, $B, $B, $B, -3, 9; 10 byte_32AA4F: dc.b 1, 9, 9, 9, 9, $A, $A, $A, $B, $B; 0 ; ... dc.b $B, 9, 9, $A, $A, -3, $A; 10 byte_32AA60: dc.b 1, $B, 9, $A, $B, -4, 1; 0 ; ... byte_32AA67: dc.b 1, 9, $A, $B, $B, 9, 9, $A, $A, $A; 0 ; ... dc.b $B, $B, $B, 9, 9, 9, -3, $C; 10 byte_32AA79: dc.b 1, 9, $A, $A, $A, $A, $B, $B, $B, $B; 0 ; ... dc.b $B, 9, 8, 8, 8, 8, -3, 3; 10 byte_32AA8B: dc.b 7, $E, $F, -1, $10, $11, $10, $11, $10, $11; 0 ; ... dc.b $10, $11, -1, $12, $12, $12, $12, $12, $12, $12; 10 dc.b $12, $12, -1 ; 20 byte_32AAA2: dc.b 7, $12, -1, 0 ; 0 ; ... Map_Obj57: dc.w byte_32AAD0-Map_Obj57,byte_32AAF0-Map_Obj57,byte_32AB10-Map_Obj57; 0 ; ... dc.w byte_32AB1E-Map_Obj57,byte_32AB2C-Map_Obj57,byte_32AB3A-Map_Obj57; 3 dc.w byte_32AB48-Map_Obj57,byte_32AB56-Map_Obj57,byte_32AB5E-Map_Obj57; 6 dc.w byte_32AB7E-Map_Obj57,byte_32AB8C-Map_Obj57,byte_32AB9A-Map_Obj57; 9 dc.w byte_32ABA8-Map_Obj57,byte_32ABB0-Map_Obj57,byte_32ABB8-Map_Obj57; 12 dc.w byte_32ABC6-Map_Obj57,byte_32ABD4-Map_Obj57,byte_32ABE2-Map_Obj57; 15 dc.w byte_32ABF0-Map_Obj57,byte_32ABFE-Map_Obj57,byte_32AC0C-Map_Obj57; 18 byte_32AAD0: dc.b 0, 5, -8, $F, $21, $48, -1,-$10, -8, 7; 0 ; ... dc.b $21, $58, 0, $10,-$18, 5, 1, $64, 0, $10; 10 dc.b -8, $A, $20, 9, -1,-$28,-$28, 9, 0, $21; 20 dc.b -1, -8 ; 30 byte_32AAF0: dc.b 0, 5, -8, $F, $21, $48, -1,-$10, -8, 7; 0 ; ... dc.b $21, $58, 0, $10,-$18, 5, 1, $64, 0, $10; 10 dc.b -8, $A, $20, 0, -1,-$28,-$28, 9, 0, $21; 20 dc.b -1, -8 ; 30 byte_32AB10: dc.b 0, 2,-$30, 7, $20, $27, 0, $C,-$10, $B; 0 ; ... dc.b $20, $3F, 0, 8 ; 10 byte_32AB1E: dc.b 0, 2,-$30, 7, $20, $2F, 0, $C,-$10, $B; 0 ; ... dc.b $20, $4B, 0, 8 ; 10 byte_32AB2C: dc.b 0, 2,-$30, 7, $20, $37, 0, $C,-$10, $B; 0 ; ... dc.b $20, $57, 0, 8 ; 10 byte_32AB3A: dc.b 0, 2, $12, 8, 0, $12, -1, -8, $1A, 8; 0 ; ... dc.b 0, $15, -1, -8 ; 10 byte_32AB48: dc.b 0, 2, $12, 8, 0, $12, -1, -8, $1A, $A; 0 ; ... dc.b 0, $18, -1, -8 ; 10 byte_32AB56: dc.b 0, 1, $12, 8, 0, $12, -1, -8; 0 ; ... byte_32AB5E: dc.b 0, 5,-$20, 9, $20, $63, -1, -8,-$10, 1; 0 ; ... dc.b $20, $69, 0, 0,-$10, $F, $20, $6B, 0, 8; 10 dc.b -8, 2, $20, $7B, 0, $28, $10, 4, $20, $7E; 20 dc.b 0, $18 ; 30 byte_32AB7E: dc.b 0, 2, -4, $D, $20,-$80, -1,-$10, -8, $E; 0 ; ... dc.b $20,-$68, 0, $10 ; 10 byte_32AB8C: dc.b 0, 2, -4, $D, $20,-$78, -1,-$10, -8, $E; 0 ; ... dc.b $20,-$5C, 0, $10 ; 10 byte_32AB9A: dc.b 0, 2, -4, $D, $20,-$70, -1,-$10, -8, $E; 0 ; ... dc.b $20,-$50, 0, $10 ; 10 byte_32ABA8: dc.b 0, 1,-$10, $F, $40,-$44, -1,-$10; 0 ; ... byte_32ABB0: dc.b 0, 1, -8, 5, $40, 0, -1, -8; 0 ; ... byte_32ABB8: dc.b 0, 2,-$18, $D, 1, $70, -1,-$10,-$18, 5; 0 ; ... dc.b 1, $68, -1,-$20 ; 10 byte_32ABC6: dc.b 0, 2,-$18, $D, 1, $78, -1,-$10,-$18, 5; 0 ; ... dc.b 1, $68, -1,-$20 ; 10 byte_32ABD4: dc.b 0, 2,-$18, $D, 1,-$80, -1,-$10,-$18, 5; 0 ; ... dc.b 1, $6C, -1,-$20 ; 10 byte_32ABE2: dc.b 0, 2,-$18, $D, 1,-$78, -1,-$10,-$18, 5; 0 ; ... dc.b 1, $6C, -1,-$20 ; 10 byte_32ABF0: dc.b 0, 2,-$18, $D, 1,-$70, -1,-$10,-$18, 5; 0 ; ... dc.b 1, $6C, -1,-$20 ; 10 byte_32ABFE: dc.b 0, 2,-$18, $D, 1,-$68, -1,-$10,-$18, 5; 0 ; ... dc.b 1, $6C, -1,-$20 ; 10 byte_32AC0C: dc.b 0, 1,-$10, 3, $40, 4, -1, -4; 0 ; ... ; --------------------------------------------------------------------------- Obj51: ; ... moveq #0,d0 move.b $A(a0),d0 move.w off_32AC22(pc,d0.w),d1 jmp off_32AC22(pc,d1.w) ; --------------------------------------------------------------------------- off_32AC22: dc.w loc_32AC28-off_32AC22,loc_32AD28-off_32AC22,loc_32B25C-off_32AC22; 0 ; ... ; --------------------------------------------------------------------------- loc_32AC28: ; ... move.l #Map_Obj51,4(a0) move.w #$3A7,2(a0) or.b #4,1(a0) move.b #3,$18(a0) move.w #$2A46,8(a0) move.w #$654,$C(a0) move.b #0,$B(a0) move.b #$20,$E(a0) move.b #$80,$14(a0) addq.b #2,$A(a0) move.b #0,$26(a0) bset #6,1(a0) move.b #4,$F(a0) move.b #$F,$20(a0) move.b #8,$32(a0) move.w 8(a0),($FFFFF750).w move.w $C(a0),($FFFFF754).w move.w 8(a0),$10(a0) move.w $C(a0),$12(a0) move.b #5,$15(a0) move.w 8(a0),$16(a0) move.w $C(a0),$18(a0) move.b #1,$1B(a0) move.w 8(a0),$1C(a0) move.w $C(a0),$1E(a0) move.b #6,$21(a0) move.w 8(a0),$22(a0) move.w $C(a0),$24(a0) move.b #2,$27(a0) move.b #0,$38(a0) move.w #0,($FFFFF75A).w move.w #$FE80,($FFFFF758).w move.b #0,$2D(a0) move.w #1,($FFFFF75C).w bsr.w sub_32ACFA rts ; =============== S U B R O U T I N E ======================================= sub_32ACFA: ; ... lea ($FFFFF740).w,a2 move.b #8,(a2)+ move.b #0,(a2)+ move.b #1,(a2)+ move.b #0,(a2)+ move.b #$10,(a2)+ move.b #0,(a2)+ move.b #3,(a2)+ move.b #0,(a2)+ move.b #2,(a2)+ move.b #0,(a2)+ rts ; End of function sub_32ACFA ; --------------------------------------------------------------------------- loc_32AD28: ; ... tst.b ($FFFFF73F).w beq.s loc_32AD42 move.b ($FFFFFE0F).w,d0 and.b #$1F,d0 bne.s loc_32AD42 move.b #$D0,d0 jsr PlaySound loc_32AD42: ; ... moveq #0,d0 move.b $26(a0),d0 move.w off_32AD50(pc,d0.w),d1 jmp off_32AD50(pc,d1.w) ; --------------------------------------------------------------------------- off_32AD50: dc.w loc_32AD5C-off_32AD50,loc_32AECE-off_32AD50,loc_32AF4C-off_32AD50; 0 ; ... dc.w loc_32B08A-off_32AD50,loc_32B0FC-off_32AD50,loc_32B160-off_32AD50; 3 ; --------------------------------------------------------------------------- loc_32AD5C: ; ... moveq #0,d0 move.b $38(a0),d0 move.w off_32AD6A(pc,d0.w),d0 jmp off_32AD6A(pc,d0.w) ; --------------------------------------------------------------------------- off_32AD6A: dc.w loc_32AD6E-off_32AD6A,loc_32AD9E-off_32AD6A; 0 ; ... ; --------------------------------------------------------------------------- loc_32AD6E: ; ... cmp.w #$28C0,($FFFFF750).w bgt.s loc_32AD9A move.w #$28C0,($FFFFF750).w move.w #0,($FFFFF75A).w move.w #$180,($FFFFF758).w move.b #2,$38(a0) bset #0,1(a0) move.b #0,$2D(a0) loc_32AD9A: ; ... bra.w loc_32ADCA ; --------------------------------------------------------------------------- loc_32AD9E: ; ... cmp.w #$29C0,($FFFFF750).w blt.s loc_32ADCA move.w #$29C0,($FFFFF750).w move.w #0,($FFFFF75A).w move.w #$FE80,($FFFFF758).w move.b #0,$38(a0) bclr #0,1(a0) move.b #0,$2D(a0) loc_32ADCA: ; ... bsr.w sub_326B86 tst.b $3F(a0) beq.s loc_32ADDC subq.b #1,$3F(a0) bra.w loc_32AE6C ; --------------------------------------------------------------------------- loc_32ADDC: ; ... move.w ($FFFFB008).w,d0 sub.w 8(a0),d0 add.w #$10,d0 cmp.w #$20,d0 bcc.s loc_32AE6C cmp.w #$6B0,($FFFFB00C).w bcs.s loc_32AE2C cmp.b #3,$2D(a0) bcc.s loc_32AE6C addq.b #1,$2D(a0) addq.b #2,$26(a0) move.b #8,($FFFFF740).w move.b #0,($FFFFF743).w move.b #0,($FFFFF749).w move.b #0,($FFFFF73F).w bsr.w sub_32AF18 move.w #$50,($FFFFF75C).w bra.w loc_32AF30 ; --------------------------------------------------------------------------- loc_32AE2C: ; ... cmp.w #$67C,($FFFFB00C).w bcs.s loc_32AE6C move.b #$F,$B(a0) move.b #2,($FFFFF73F).w move.b #$20,($FFFFF743).w move.b #$20,($FFFFF749).w move.b #9,($FFFFF740).w addq.b #4,$26(a0) move.w #0,($FFFFF758).w move.w #$180,($FFFFF75A).w move.b #0,$3E(a0) bra.w loc_32AF30 ; --------------------------------------------------------------------------- loc_32AE6C: ; ... bra.w *+4 add.w #1,($FFFFF75C).w move.w ($FFFFF75C).w,d0 and.w #$3F,d0 bne.w loc_32AF30 btst #6,($FFFFF75D).w beq.s loc_32AEAC move.b #$F,$B(a0) move.b #2,($FFFFF73F).w move.b #$20,($FFFFF743).w move.b #$20,($FFFFF749).w move.b #9,($FFFFF740).w bra.w loc_32AF30 ; --------------------------------------------------------------------------- loc_32AEAC: ; ... move.b #$C,$B(a0) move.b #1,($FFFFF73F).w move.b #0,($FFFFF743).w move.b #0,($FFFFF749).w move.b #4,($FFFFF740).w bra.w loc_32AF30 ; --------------------------------------------------------------------------- loc_32AECE: ; ... move.b #0,($FFFFF73F).w sub.w #1,($FFFFF75C).w bne.s loc_32AEEC move.b #$20,($FFFFF743).w move.b #$20,($FFFFF749).w bra.w loc_32AF30 ; --------------------------------------------------------------------------- loc_32AEEC: ; ... cmp.w #$FFEC,($FFFFF75C).w bgt.w loc_32AF30 move.b #0,($FFFFF743).w move.b #0,($FFFFF749).w move.b #0,$26(a0) move.w #$FFFF,($FFFFF75C).w move.b #$40,$3F(a0) bra.w loc_32AF30 ; =============== S U B R O U T I N E ======================================= sub_32AF18: ; ... jsr SingleObjLoad bne.s return_32AF2E move.b #$51,(a1) move.b #4,$A(a1) move.l a0,$34(a1) return_32AF2E: ; ... rts ; End of function sub_32AF18 ; --------------------------------------------------------------------------- loc_32AF30: ; ... bsr.w sub_32B006 bsr.w sub_32B1AE bsr.w sub_32AFBC lea (Ani_Obj51).l,a1 bsr.w sub_326BAC jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32AF4C: ; ... bsr.w sub_326B86 tst.b $3E(a0) bne.s loc_32AF8A cmp.w #$680,$C(a0) bcs.s loc_32AF30 move.w #0,($FFFFF758).w move.w #$FE80,($FFFFF75A).w move.b #$FF,$3E(a0) move.b #1,($FFFFF73F).w move.b #0,($FFFFF743).w move.b #0,($FFFFF749).w move.b #4,($FFFFF740).w bra.s loc_32AF30 ; --------------------------------------------------------------------------- loc_32AF8A: ; ... cmp.w #$654,$C(a0) bcc.s loc_32AF30 move.b #0,$26(a0) move.w #0,($FFFFF75A).w move.w #-$180,($FFFFF758).w btst #0,1(a0) beq.s loc_32AFB8 move.w #$180,($FFFFF758).w move.b #$C,$B(a0) loc_32AFB8: ; ... bra.w loc_32AF30 ; =============== S U B R O U T I N E ======================================= sub_32AFBC: ; ... cmp.b #$2F,$14(a0) bne.s loc_32AFD6 lea ($FFFFF740).w,a1 and.b #%11110000,6(a1) or.b #6,6(a1) rts ; --------------------------------------------------------------------------- loc_32AFD6: ; ... cmp.b #4,($FFFFB024).w beq.s loc_32AFE6 cmp.b #4,($FFFFB064).w bne.s return_32B004 loc_32AFE6: ; ... lea ($FFFFF740).w,a1 move.b 6(a1),d0 and.b #$F,d0 cmp.b #6,d0 beq.s return_32B004 and.b #$F0,6(a1) or.b #5,6(a1) return_32B004: ; ... rts ; End of function sub_32AFBC ; =============== S U B R O U T I N E ======================================= sub_32B006: ; ... move.b $1A(a0),d0 jsr CalcSine asr.w #6,d0 add.w ($FFFFF754).w,d0 move.w d0,$C(a0) move.w ($FFFFF750).w,8(a0) addq.b #2,$1A(a0) cmp.b #6,$26(a0) bcc.s return_32B06A tst.b $32(a0) beq.s loc_32B06C tst.b $20(a0) bne.s return_32B06A tst.b $14(a0) bne.s loc_32B04E move.b #$30,$14(a0) move.w #$AC,d0 jsr PlaySound loc_32B04E: ; ... lea ($FFFFFB22).w,a1 moveq #0,d0 tst.w (a1) bne.s loc_32B05C move.w #$EEE,d0 loc_32B05C: ; ... move.w d0,(a1) subq.b #1,$14(a0) bne.s return_32B06A move.b #$F,$20(a0) return_32B06A: ; ... rts ; --------------------------------------------------------------------------- loc_32B06C: ; ... moveq #$64,d0 jsr AddPoints2 move.w #$B3,($FFFFF75C).w move.b #6,$26(a0) moveq #$40,d0 jsr LoadPLC rts ; End of function sub_32B006 ; --------------------------------------------------------------------------- loc_32B08A: ; ... st $2C(a0) subq.w #1,($FFFFF75C).w bmi.s loc_32B0AC move.b #0,($FFFFF73F).w move.b #0,$B(a0) move.b #$B,$21(a0) bsr.w sub_326C74 bra.s loc_32B0E6 ; --------------------------------------------------------------------------- loc_32B0AC: ; ... bset #0,1(a0) clr.w ($FFFFF758).w clr.w ($FFFFF75A).w addq.b #2,$26(a0) lea ($FFFFF740).w,a1 and.b #$F0,6(a1) or.b #3,6(a1) move.b #8,0(a1) move.b #$DD,($FFFF8C54).w move.b #1,($FFFFF72C).w move.w #-$12,($FFFFF75C).w loc_32B0E6: ; ... move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) bsr.w sub_32B1AE jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32B0FC: ; ... addq.w #1,($FFFFF75C).w beq.s loc_32B10C bpl.s loc_32B112 add.w #$18,($FFFFF75A).w bra.s loc_32B142 ; --------------------------------------------------------------------------- loc_32B10C: ; ... clr.w ($FFFFF75A).w bra.s loc_32B142 ; --------------------------------------------------------------------------- loc_32B112: ; ... cmp.w #$18,($FFFFF75C).w bcs.s loc_32B12A beq.s loc_32B132 cmp.w #$20,($FFFFF75C).w bcs.s loc_32B142 addq.b #2,$26(a0) bra.s loc_32B142 ; --------------------------------------------------------------------------- loc_32B12A: ; ... sub.w #8,($FFFFF75A).w bra.s loc_32B142 ; --------------------------------------------------------------------------- loc_32B132: ; ... clr.w ($FFFFF75A).w jsr sub_30D038 jsr sub_30D042 loc_32B142: ; ... bsr.w sub_326B86 bsr.w sub_32B006 move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) bsr.w sub_32B1AE jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32B160: ; ... move.w #$400,($FFFFF758).w move.w #-$40,($FFFFF75A).w cmp.w #$2B20,($FFFFEECA).w beq.s loc_32B17A addq.w #2,($FFFFEECA).w bra.s loc_32B180 ; --------------------------------------------------------------------------- loc_32B17A: ; ... tst.b 1(a0) bpl.s loc_32B1A8 loc_32B180: ; ... bsr.w sub_326B86 bsr.w sub_32B006 move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) bsr.w sub_32B1AE lea (Ani_Obj51).l,a1 bsr.w sub_326BAC jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32B1A8: ; ... jmp DeleteObject ; =============== S U B R O U T I N E ======================================= sub_32B1AE: ; ... move.w 8(a0),d0 move.w $C(a0),d1 move.w d0,$16(a0) move.w d1,$18(a0) move.w d0,$1C(a0) move.w d1,$1E(a0) tst.b $2C(a0) bne.s loc_32B1E6 move.w d0,$22(a0) move.w d1,$24(a0) move.w d0,$10(a0) move.w d1,$12(a0) move.w d1,$3A(a0) move.w d1,$34(a0) rts ; --------------------------------------------------------------------------- loc_32B1E6: ; ... cmp.w #$78,($FFFFF75C).w bgt.s return_32B25A sub.w #1,$22(a0) move.l $3A(a0),d0 move.w $2E(a0),d1 add.w #$38,$2E(a0) ext.l d1 asl.l #8,d1 add.l d1,d0 move.l d0,$3A(a0) move.w $3A(a0),$24(a0) cmp.w #$6F0,$24(a0) blt.s loc_32B220 move.w #0,$2E(a0) loc_32B220: ; ... cmp.w #$3C,($FFFFF75C).w bgt.s return_32B25A add.w #1,$10(a0) move.l $34(a0),d0 move.w $30(a0),d1 add.w #$38,$30(a0) ext.l d1 asl.l #8,d1 add.l d1,d0 move.l d0,$34(a0) move.w $34(a0),$12(a0) cmp.w #$6F0,$12(a0) blt.s return_32B25A move.w #0,$30(a0) return_32B25A: ; ... rts ; End of function sub_32B1AE ; --------------------------------------------------------------------------- loc_32B25C: ; ... move.l $34(a0),a1 cmp.b #6,$26(a1) bcc.w loc_32B3E6 moveq #0,d0 move.b $25(a0),d0 move.w off_32B278(pc,d0.w),d1 jmp off_32B278(pc,d1.w) ; --------------------------------------------------------------------------- off_32B278: dc.w loc_32B280-off_32B278,loc_32B2CE-off_32B278,loc_32B316-off_32B278; 0 ; ... dc.w loc_32B3C0-off_32B278 ; 3 ; --------------------------------------------------------------------------- loc_32B280: ; ... move.l #Map_Obj51,4(a0) move.w #$3A7,2(a0) or.b #4,1(a0) move.b #7,$18(a0) addq.b #2,$25(a0) move.l $34(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) add.w #$30,$C(a0) move.b #8,$16(a0) move.b #8,$17(a0) move.b #$12,$1A(a0) move.b #$98,$20(a0) rts ; --------------------------------------------------------------------------- loc_32B2CE: ; ... move.l $34(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.w $28(a0),d0 add.w d0,$C(a0) add.w #1,d0 cmp.w #$2E,d0 blt.s loc_32B2F4 move.w #$2E,d0 loc_32B2F4: ; ... move.w d0,$28(a0) tst.w ($FFFFF75C).w bne.w loc_32B3E0 addq.b #2,$25(a0) move.w #0,$10(a0) move.w #0,$12(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32B316: ; ... bsr.w sub_32B334 jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.w loc_32B3E0 add.w d1,$C(a0) bsr.w sub_32B36C jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32B334: ; ... moveq #0,d2 move.w 8(a0),d2 swap d2 moveq #0,d3 move.w $C(a0),d3 swap d3 move.w $10(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d3 add.w #$38,$12(a0) swap d2 move.w d2,8(a0) swap d3 move.w d3,$C(a0) rts ; End of function sub_32B334 ; =============== S U B R O U T I N E ======================================= sub_32B36C: ; ... move.b #$C4,d0 jsr PlaySound move.w #$3A7,2(a0) move.b #7,$1C(a0) move.w #$FD00,$12(a0) move.w #$FF00,$10(a0) move.b #4,$A(a0) move.b #6,$25(a0) move.b #$98,$20(a0) jsr SingleObjLoad2 bne.s return_32B3BE moveq #0,d0 move.w #$F,d1 loc_32B3AE: ; ... move.l (a0,d0.w),(a1,d0.w) addq.w #4,d0 dbf d1,loc_32B3AE neg.w $10(a1) return_32B3BE: ; ... rts ; End of function sub_32B36C ; --------------------------------------------------------------------------- loc_32B3C0: ; ... bsr.w sub_32B334 lea (Ani_Obj51).l,a1 jsr AnimateSprite cmp.w #$705,$C(a0) bcs.w loc_32B3E0 jmp DeleteObject ; --------------------------------------------------------------------------- loc_32B3E0: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32B3E6: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Ani_Obj51: dc.w byte_32B400-Ani_Obj51,byte_32B403-Ani_Obj51,byte_32B409-Ani_Obj51; 0 ; ... dc.w byte_32B40F-Ani_Obj51,byte_32B413-Ani_Obj51,byte_32B418-Ani_Obj51; 3 dc.w byte_32B423-Ani_Obj51,byte_32B42D-Ani_Obj51,byte_32B431-Ani_Obj51; 6 dc.w byte_32B434-Ani_Obj51 ; 9 byte_32B400: dc.b $F, 1, -1 ; 0 ; ... byte_32B403: dc.b $F, 4, -1, 5, -4, 2; 0 ; ... byte_32B409: dc.b $F, 2, -1, 3, -4, 2; 0 ; ... byte_32B40F: dc.b 7, 6, 7, -1 ; 0 ; ... byte_32B413: dc.b 1, $C, $D, $E, -1 ; 0 ; ... byte_32B418: dc.b 7, 8, 9, 8, 9, 8, 9, 8, 9, -3; 0 ; ... dc.b 3 ; 10 byte_32B423: dc.b 7, $A, $A, $A, $A, $A, $A, $A, -3, 3; 0 ; ... byte_32B42D: dc.b 3, $13, $14, -1 ; 0 ; ... byte_32B431: dc.b 1, 0, -1 ; 0 ; ... byte_32B434: dc.b 1, $F, $10, $11, -1, 0; 0 ; ... Map_Obj51: dc.w 0 ; ... dc.w byte_32B464-Map_Obj51,byte_32B484-Map_Obj51,byte_32B48C-Map_Obj51; 0 dc.w byte_32B494-Map_Obj51,byte_32B49C-Map_Obj51,byte_32B4AA-Map_Obj51; 3 dc.w byte_32B4B8-Map_Obj51,byte_32B4C6-Map_Obj51,byte_32B4D4-Map_Obj51; 6 dc.w byte_32B4E2-Map_Obj51,byte_32B4F0-Map_Obj51,byte_32B4FE-Map_Obj51; 9 dc.w byte_32B506-Map_Obj51,byte_32B50E-Map_Obj51,byte_32B516-Map_Obj51; 12 dc.w byte_32B524-Map_Obj51,byte_32B532-Map_Obj51,byte_32B540-Map_Obj51; 15 dc.w byte_32B548-Map_Obj51,byte_32B550-Map_Obj51; 18 byte_32B464: dc.b 0, 5,-$10, 5, 1, $7D, 0, $10,-$28, $E; 0 ; ... dc.b $20, $60, -1, -7, 0, $F, $20, $6C, -1,-$28; 10 dc.b 0, $F, $20, $7C, -1, -8, 0, 6, $20,-$74; 20 dc.b 0, $18 ; 30 byte_32B484: dc.b 0, 1, $18, 6, $20,-$56, -1,-$1C; 0 ; ... byte_32B48C: dc.b 0, 1, $10, 6, $20,-$50, -1,-$25; 0 ; ... byte_32B494: dc.b 0, 1, $10, $B, $20,-$6E, 0, 8; 0 ; ... byte_32B49C: dc.b 0, 2, $10, 9, $20,-$62, 0, 8, $10, 6; 0 ; ... dc.b $20,-$5C, 0, $20 ; 10 byte_32B4AA: dc.b 0, 2,-$10, $D, 1,-$77, -1,-$10,-$10, 5; 0 ; ... dc.b 1,-$7F, -1,-$20 ; 10 byte_32B4B8: dc.b 0, 2,-$10, $D, 1,-$6F, -1,-$10,-$10, 5; 0 ; ... dc.b 1,-$7F, -1,-$20 ; 10 byte_32B4C6: dc.b 0, 2,-$10, $D, 1,-$67, -1,-$10,-$10, 5; 0 ; ... dc.b 1,-$7B, -1,-$20 ; 10 byte_32B4D4: dc.b 0, 2,-$10, $D, 1,-$5F, -1,-$10,-$10, 5; 0 ; ... dc.b 1,-$7B, -1,-$20 ; 10 byte_32B4E2: dc.b 0, 2,-$10, $D, 1,-$57, -1,-$10,-$10, 5; 0 ; ... dc.b 1,-$7B, -1,-$20 ; 10 byte_32B4F0: dc.b 0, 2,-$10, $D, 1,-$4F, -1,-$10,-$10, 5; 0 ; ... dc.b 1,-$7B, -1,-$20 ; 10 byte_32B4FE: dc.b 0, 1, $28, $C, $20,-$4A, -1,-$10; 0 ; ... byte_32B506: dc.b 0, 1, $28, $C, $20,-$46, -1,-$10; 0 ; ... byte_32B50E: dc.b 0, 1, $28, $C, $20,-$42, -1,-$10; 0 ; ... byte_32B516: dc.b 0, 2, $20, $C, $20,-$3E, -1,-$1C, $20, $C; 0 ; ... dc.b $20,-$3A, 0, 4 ; 10 byte_32B524: dc.b 0, 2, $20, $C, $20,-$36, -1,-$1C, $20, $C; 0 ; ... dc.b $20,-$32, 0, 4 ; 10 byte_32B532: dc.b 0, 2, $20, $C, $20,-$2E, -1,-$1C, $20, $C; 0 ; ... dc.b $20,-$2A, 0, 4 ; 10 byte_32B540: dc.b 0, 1, -$C, $A, 0,-$26, -1, -$C; 0 ; ... byte_32B548: dc.b 0, 1, -4, 0, 0,-$1D, -1, -4; 0 ; ... byte_32B550: dc.b 0, 1, -4, 0, 0,-$1C, -1, -4; 0 ; ... ; --------------------------------------------------------------------------- Obj54: ; ... moveq #0,d0 move.b $A(a0),d0 move.w off_32B566(pc,d0.w),d1 jmp off_32B566(pc,d1.w) ; --------------------------------------------------------------------------- off_32B566: dc.w loc_32B56E-off_32B566,loc_32B68E-off_32B566,loc_32BFA6-off_32B566; 0 ; ... dc.w loc_32C046-off_32B566 ; 3 ; --------------------------------------------------------------------------- loc_32B56E: ; ... move.l #Map_Obj54,4(a0) move.w #$37C,2(a0) or.b #4,1(a0) move.b #3,$18(a0) move.w #$2B50,8(a0) move.w #$380,$C(a0) move.b #2,$B(a0) addq.b #2,$A(a0) bset #6,1(a0) move.b #2,$F(a0) move.b #$F,$20(a0) move.b #8,$32(a0) move.b #7,$3E(a0) move.w 8(a0),($FFFFF750).w move.w $C(a0),($FFFFF754).w move.w #0,($FFFFF758).w move.w #$100,($FFFFF75A).w move.b #$20,$E(a0) clr.b $2B(a0) clr.b $2C(a0) move.b #$40,$1A(a0) move.b #$27,$33(a0) move.b #$27,$39(a0) move.w 8(a0),$10(a0) move.w $C(a0),$12(a0) move.b #$C,$15(a0) move.w 8(a0),$16(a0) move.w $C(a0),$18(a0) move.b #0,$1B(a0) jsr SingleObjLoad bne.s loc_32B670 move.b #$54,(a1) move.b #6,$A(a1) move.b #$13,$1A(a1) move.l #Map_Obj54,4(a1) move.w #$37C,2(a1) or.b #4,1(a1) move.b #6,$18(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.l a0,$34(a1) move.b #$20,$19(a1) jsr SingleObjLoad bne.s loc_32B670 move.b #$53,(a1) move.l a0,$34(a1) loc_32B670: ; ... lea ($FFFFF740).w,a2 move.b #$10,(a2)+ move.b #0,(a2)+ move.b #3,(a2)+ move.b #0,(a2)+ move.b #1,(a2)+ move.b #0,(a2)+ rts ; --------------------------------------------------------------------------- loc_32B68E: ; ... moveq #0,d0 move.b $26(a0),d0 move.w off_32B69C(pc,d0.w),d1 jmp off_32B69C(pc,d1.w) ; --------------------------------------------------------------------------- off_32B69C: dc.w loc_32B6B0-off_32B69C,loc_32B72C-off_32B69C,loc_32B7B4-off_32B69C; 0 ; ... dc.w loc_32B7FC-off_32B69C,loc_32B81C-off_32B69C,loc_32B84C-off_32B69C; 3 dc.w loc_32B896-off_32B69C,loc_32B906-off_32B69C,loc_32BADC-off_32B69C; 6 dc.w loc_32BB42-off_32B69C ; 9 ; --------------------------------------------------------------------------- loc_32B6B0: ; ... bsr.w sub_326B86 move.w ($FFFFF754).w,$C(a0) cmp.w #$4A0,($FFFFF754).w bcs.s loc_32B6FA addq.b #2,$26(a0) move.w #0,($FFFFF75A).w move.w #$FF00,($FFFFF758).w bclr #7,$2B(a0) bclr #0,1(a0) move.w ($FFFFB008).w,d0 cmp.w ($FFFFF750).w,d0 bcs.s loc_32B6FA move.w #$100,($FFFFF758).w bset #7,$2B(a0) bset #0,1(a0) loc_32B6FA: ; ... bsr.w sub_32BA68 lea (Ani_Obj54).l,a1 bsr.w sub_326BAC bsr.w sub_32BA4E jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32B712: ; ... move.b $1A(a0),d0 jsr CalcSine asr.w #6,d0 add.w ($FFFFF754).w,d0 move.w d0,$C(a0) addq.b #4,$1A(a0) rts ; End of function sub_32B712 ; --------------------------------------------------------------------------- loc_32B72C: ; ... bsr.w sub_326B86 btst #7,$2B(a0) bne.s loc_32B766 cmp.w #$2AD0,($FFFFF750).w bcc.s loc_32B792 bchg #7,$2B(a0) move.w #$100,($FFFFF758).w bset #0,1(a0) bset #6,$2B(a0) beq.s loc_32B792 addq.b #2,$26(a0) move.w #-$100,($FFFFF75A).w bra.s loc_32B792 ; --------------------------------------------------------------------------- loc_32B766: ; ... cmp.w #$2BD0,($FFFFF750).w bcs.s loc_32B792 bchg #7,$2B(a0) move.w #-$100,($FFFFF758).w bclr #0,1(a0) bset #6,$2B(a0) beq.s loc_32B792 addq.b #2,$26(a0) move.w #-$100,($FFFFF75A).w loc_32B792: ; ... move.w ($FFFFF750).w,8(a0) bsr.w sub_32B712 loc_32B79C: ; ... bsr.w sub_32BA68 lea (Ani_Obj54).l,a1 bsr.w sub_326BAC bsr.w sub_32BA4E jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32B7B4: ; ... bsr.w sub_326B86 cmp.w #$470,($FFFFF754).w bcc.s loc_32B7C6 move.w #0,($FFFFF75A).w loc_32B7C6: ; ... btst #7,$2B(a0) bne.s loc_32B7DE cmp.w #$2B50,($FFFFF750).w bcc.s loc_32B7EC move.w #0,($FFFFF758).w bra.s loc_32B7EC ; --------------------------------------------------------------------------- loc_32B7DE: ; ... cmp.w #$2B50,($FFFFF750).w bcs.s loc_32B7EC move.w #0,($FFFFF758).w loc_32B7EC: ; ... move.w ($FFFFF758).w,d0 or.w ($FFFFF75A).w,d0 bne.s loc_32B7FA addq.b #2,$26(a0) loc_32B7FA: ; ... bra.s loc_32B792 ; --------------------------------------------------------------------------- loc_32B7FC: ; ... cmp.b #$68,$33(a0) bcc.s loc_32B80E addq.b #1,$33(a0) addq.b #1,$39(a0) bra.s loc_32B818 ; --------------------------------------------------------------------------- loc_32B80E: ; ... subq.b #1,$39(a0) bne.s loc_32B818 addq.b #2,$26(a0) loc_32B818: ; ... bra.w loc_32B792 ; --------------------------------------------------------------------------- loc_32B81C: ; ... cmp.b #$27,$33(a0) bcs.s loc_32B82A subq.b #1,$33(a0) bra.s loc_32B848 ; --------------------------------------------------------------------------- loc_32B82A: ; ... addq.b #1,$39(a0) cmp.b #$27,$39(a0) bcs.s loc_32B848 move.w #$100,($FFFFF75A).w move.b #0,$26(a0) bclr #6,$2B(a0) loc_32B848: ; ... bra.w loc_32B792 ; --------------------------------------------------------------------------- loc_32B84C: ; ... tst.b $39(a0) beq.s loc_32B858 subq.b #1,$39(a0) bra.s loc_32B85E ; --------------------------------------------------------------------------- loc_32B858: ; ... move.b #-1,$3A(a0) loc_32B85E: ; ... cmp.b #$27,$33(a0) bcs.s loc_32B86A subq.b #1,$33(a0) loc_32B86A: ; ... bsr.w sub_326B86 cmp.w #$420,($FFFFF754).w bcc.s loc_32B87C move.w #0,($FFFFF75A).w loc_32B87C: ; ... tst.b $2C(a0) bne.s loc_32B892 tst.b $3A(a0) beq.s loc_32B88E move.b #$80,$3A(a0) loc_32B88E: ; ... addq.b #2,$26(a0) loc_32B892: ; ... bra.w loc_32B792 ; --------------------------------------------------------------------------- loc_32B896: ; ... tst.b $3E(a0) beq.s loc_32B8C4 tst.b $3A(a0) bne.s loc_32B902 cmp.b #$27,$39(a0) bcc.s loc_32B8B0 addq.b #1,$39(a0) bra.s loc_32B902 ; --------------------------------------------------------------------------- loc_32B8B0: ; ... move.w #$100,($FFFFF75A).w move.b #0,$26(a0) bclr #6,$2B(a0) bra.s loc_32B902 ; --------------------------------------------------------------------------- loc_32B8C4: ; ... move.w #-$180,($FFFFF75A).w move.w #-$100,($FFFFF758).w bclr #0,1(a0) btst #7,$2B(a0) beq.s loc_32B8EA move.w #$100,($FFFFF758).w bset #0,1(a0) loc_32B8EA: ; ... move.b #$E,$26(a0) move.b #0,$2E(a0) bclr #6,$2B(a0) move.b #0,$2F(a0) loc_32B902: ; ... bra.w loc_32B792 ; --------------------------------------------------------------------------- loc_32B906: ; ... tst.b $2F(a0) beq.s loc_32B914 subq.b #1,$2F(a0) bra.w loc_32B79C ; --------------------------------------------------------------------------- loc_32B914: ; ... moveq #0,d0 move.b $2E(a0),d0 move.w off_32B922(pc,d0.w),d1 jmp off_32B922(pc,d1.w) ; --------------------------------------------------------------------------- off_32B922: dc.w loc_32B928-off_32B922,loc_32B990-off_32B922,loc_32B9DC-off_32B922; 0 ; ... ; --------------------------------------------------------------------------- loc_32B928: ; ... bsr.w sub_326B86 cmp.w #$420,($FFFFF754).w bcc.s loc_32B93A move.w #0,($FFFFF75A).w loc_32B93A: ; ... btst #7,$2B(a0) bne.s loc_32B968 cmp.w #$2AF0,($FFFFF750).w bcc.s loc_32B98C addq.b #2,$2E(a0) move.w #$180,($FFFFF75A).w move.b #3,$2D(a0) move.w #$1E,($FFFFF75C).w bset #0,1(a0) bra.s loc_32B98C ; --------------------------------------------------------------------------- loc_32B968: ; ... cmp.w #$2BB0,($FFFFF750).w bcs.s loc_32B98C addq.b #2,$2E(a0) move.w #$180,($FFFFF75A).w move.b #3,$2D(a0) move.w #$1E,($FFFFF75C).w bclr #0,1(a0) loc_32B98C: ; ... bra.w loc_32B792 ; --------------------------------------------------------------------------- loc_32B990: ; ... bsr.w sub_326B86 cmp.w #$4A0,($FFFFF754).w bcs.s loc_32B9AE move.w #$FE80,($FFFFF75A).w addq.b #2,$2E(a0) bchg #7,$2B(a0) bra.s loc_32B9D4 ; --------------------------------------------------------------------------- loc_32B9AE: ; ... btst #7,$2B(a0) bne.s loc_32B9C6 cmp.w #$2AD0,($FFFFF750).w bcc.s loc_32B9D4 move.w #0,($FFFFF758).w bra.s loc_32B9D4 ; --------------------------------------------------------------------------- loc_32B9C6: ; ... cmp.w #$2BD0,($FFFFF750).w bcs.s loc_32B9D4 move.w #0,($FFFFF758).w loc_32B9D4: ; ... bsr.w sub_32BA18 bra.w loc_32B792 ; --------------------------------------------------------------------------- loc_32B9DC: ; ... bsr.w sub_326B86 cmp.w #$470,($FFFFF754).w bcc.s loc_32B9FC move.w #$100,($FFFFF758).w btst #7,$2B(a0) bne.s loc_32B9FC move.w #$FF00,($FFFFF758).w loc_32B9FC: ; ... cmp.w #$420,($FFFFF754).w bcc.s loc_32BA10 move.w #0,($FFFFF75A).w move.b #0,$2E(a0) loc_32BA10: ; ... bsr.w sub_32BA18 bra.w loc_32B792 ; =============== S U B R O U T I N E ======================================= sub_32BA18: ; ... sub.w #1,($FFFFF75C).w bne.s return_32BA4C tst.b $2D(a0) beq.s return_32BA4C subq.b #1,$2D(a0) jsr SingleObjLoad bne.s return_32BA4C move.b #$54,(a1) move.b #4,$A(a1) move.l a0,$34(a1) move.w #$1E,($FFFFF75C).w move.b #$10,$2F(a0) return_32BA4C: ; ... rts ; End of function sub_32BA18 ; =============== S U B R O U T I N E ======================================= sub_32BA4E: ; ... move.w 8(a0),d0 move.w $C(a0),d1 move.w d0,$10(a0) move.w d1,$12(a0) move.w d0,$16(a0) move.w d1,$18(a0) rts ; End of function sub_32BA4E ; =============== S U B R O U T I N E ======================================= sub_32BA68: ; ... bsr.w sub_32BBC0 cmp.b #$3F,$14(a0) bne.s loc_32BAAC st $38(a0) lea ($FFFFF740).w,a1 and.b #$F0,2(a1) or.b #5,2(a1) tst.b $3E(a0) beq.s loc_32BAA4 move.b #$A,$26(a0) move.w #$FE80,($FFFFF75A).w subq.b #1,$3E(a0) move.w #0,($FFFFF758).w loc_32BAA4: ; ... move.w #0,($FFFFF758).w rts ; --------------------------------------------------------------------------- loc_32BAAC: ; ... cmp.b #4,($FFFFB024).w beq.s loc_32BABC cmp.b #4,($FFFFB064).w bne.s return_32BADA loc_32BABC: ; ... lea ($FFFFF740).w,a1 move.b 2(a1),d0 and.b #$F,d0 cmp.b #4,d0 beq.s return_32BADA and.b #$F0,2(a1) or.b #4,2(a1) return_32BADA: ; ... rts ; End of function sub_32BA68 ; --------------------------------------------------------------------------- loc_32BADC: ; ... subq.w #1,($FFFFF75C).w cmp.w #$3C,($FFFFF75C).w bcs.s loc_32BB22 bmi.s loc_32BAFA bsr.w sub_326C74 lea ($FFFFF740).w,a1 move.b #7,2(a1) bra.s loc_32BB22 ; --------------------------------------------------------------------------- loc_32BAFA: ; ... bset #0,1(a0) clr.w ($FFFFF758).w clr.w ($FFFFF75A).w addq.b #2,$26(a0) move.w #-$12,($FFFFF75C).w lea ($FFFFF740).w,a1 move.b #3,2(a1) jsr sub_30D038 loc_32BB22: ; ... move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) lea (Ani_Obj54).l,a1 bsr.w sub_326BAC bsr.w sub_32BA4E jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32BB42: ; ... move.w #$400,($FFFFF758).w move.w #-$40,($FFFFF75A).w cmp.w #$2BF0,($FFFFEECA).w bcc.s loc_32BB5C addq.w #2,($FFFFEECA).w bra.s loc_32BB62 ; --------------------------------------------------------------------------- loc_32BB5C: ; ... tst.b 1(a0) bpl.s loc_32BB9C loc_32BB62: ; ... tst.b ($FFFFF7A7).w bne.s loc_32BB74 move.b #1,($FFFFF7A7).w jsr sub_30D042 loc_32BB74: ; ... bsr.w sub_326B86 bsr.w sub_32BBA2 move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) lea (Ani_Obj54).l,a1 bsr.w sub_326BAC bsr.w sub_32BA4E jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32BB9C: ; ... jmp DeleteObject ; =============== S U B R O U T I N E ======================================= sub_32BBA2: ; ... move.b $1A(a0),d0 jsr CalcSine asr.w #6,d0 add.w ($FFFFF754).w,d0 move.w d0,$C(a0) move.w ($FFFFF750).w,8(a0) addq.b #2,$1A(a0) ; End of function sub_32BBA2 ; =============== S U B R O U T I N E ======================================= sub_32BBC0: ; ... cmp.b #$10,$26(a0) bcc.s return_32BC06 tst.b $32(a0) beq.s loc_32BC08 tst.b $20(a0) bne.s return_32BC06 tst.b $14(a0) bne.s loc_32BBEA move.b #$40,$14(a0) move.w #$AC,d0 jsr PlaySound loc_32BBEA: ; ... lea ($FFFFFB22).w,a1 moveq #0,d0 tst.w (a1) bne.s loc_32BBF8 move.w #$EEE,d0 loc_32BBF8: ; ... move.w d0,(a1) subq.b #1,$14(a0) bne.s return_32BC06 move.b #$F,$20(a0) return_32BC06: ; ... rts ; --------------------------------------------------------------------------- loc_32BC08: ; ... moveq #$64,d0 jsr AddPoints2 move.w #$EF,($FFFFF75C).w move.b #$10,$26(a0) moveq #$40,d0 jsr LoadPLC rts ; End of function sub_32BBC0 ; --------------------------------------------------------------------------- Obj53: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32BC34(pc,d0.w),d1 jmp off_32BC34(pc,d1.w) ; --------------------------------------------------------------------------- off_32BC34: dc.w loc_32BC3E-off_32BC34,loc_32BCC2-off_32BC34,loc_32BE4E-off_32BC34; 0 ; ... dc.w loc_32BECC-off_32BC34,loc_32BF8C-off_32BC34; 3 ; --------------------------------------------------------------------------- loc_32BC3E: ; ... move.l a0,a1 moveq #6,d3 moveq #0,d2 bra.s loc_32BC4E ; --------------------------------------------------------------------------- loc_32BC46: ; ... jsr SingleObjLoad bne.s return_32BCB2 loc_32BC4E: ; ... move.b #$20,$19(a1) move.l $34(a0),$34(a1) move.b #$53,(a1) move.l #Map_Obj54,4(a1) move.w #$37C,2(a1) or.b #4,1(a1) move.b #3,$18(a1) addq.b #2,$24(a1) move.b #5,$1A(a1) move.b byte_32BCB4(pc,d2.w),$28(a1) move.b byte_32BCB4(pc,d2.w),$3B(a1) move.b byte_32BCBB(pc,d2.w),$3A(a1) move.b #$40,$29(a1) move.b #$87,$20(a1) move.b #2,$21(a1) move.b #0,$3C(a1) addq.w #1,d2 dbf d3,loc_32BC46 return_32BCB2: ; ... rts ; --------------------------------------------------------------------------- byte_32BCB4: dc.b $24, $6C,-$4C, -4, $48,-$70,-$28; 0 ; ... byte_32BCBB: dc.b 0, 1, 1, 0, 1, 1, 0; 0 ; ... ; --------------------------------------------------------------------------- loc_32BCC2: ; ... move.l $34(a0),a1 move.w $C(a1),$2A(a0) sub.w #4,$2A(a0) move.w 8(a1),$38(a0) tst.b $38(a1) beq.s loc_32BD3E move.b #0,$38(a1) add.b #1,$2C(a1) addq.b #2,$24(a0) move.b #$3C,$32(a0) move.b #2,$1C(a0) move.w #-$400,$12(a0) move.w #-$80,d1 move.w ($FFFFB008).w,d0 sub.w 8(a0),d0 bpl.s loc_32BD10 neg.w d1 loc_32BD10: ; ... cmp.w #$2AF0,8(a0) bcc.s loc_32BD1C move.w #$80,d1 loc_32BD1C: ; ... cmp.w #$2BB0,8(a0) bcs.s loc_32BD28 move.w #-$80,d1 loc_32BD28: ; ... bclr #0,1(a0) tst.w d1 bmi.s loc_32BD38 bset #0,1(a0) loc_32BD38: ; ... move.w d1,$10(a0) bra.s loc_32BD4C ; --------------------------------------------------------------------------- loc_32BD3E: ; ... cmp.b #2,$21(a0) beq.s loc_32BD4C move.b #0,$20(a1) loc_32BD4C: ; ... bsr.w sub_32BD5A bsr.w sub_32BE04 jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32BD5A: ; ... move.b $29(a0),d0 jsr CalcSine move.w d0,d3 moveq #0,d1 move.b $33(a1),d1 muls.w d1,d0 move.w d0,d5 move.w d0,d4 move.b $39(a1),d2 tst.b $3A(a1) beq.s loc_32BD80 move.w #$10,d2 loc_32BD80: ; ... muls.w d3,d2 move.w $38(a0),d6 move.b $28(a0),d0 jsr CalcSine muls.w d0,d5 swap d5 add.w d6,d5 move.w d5,8(a0) muls.w d1,d4 swap d4 move.w d4,$30(a0) move.w $2A(a0),d6 move.b $3B(a0),d0 tst.b $3A(a1) beq.s loc_32BDB4 move.b $3C(a0),d0 loc_32BDB4: ; ... jsr CalcSine muls.w d0,d2 swap d2 add.w d6,d2 move.w d2,$C(a0) addq.b #4,$28(a0) tst.b $3A(a1) bne.s loc_32BDD4 addq.b #8,$3B(a0) rts ; --------------------------------------------------------------------------- loc_32BDD4: ; ... cmp.b #$FF,$3A(a1) beq.s loc_32BDF6 cmp.b #$80,$3A(a1) bne.s loc_32BDEE subq.b #2,$3C(a0) bpl.s return_32BE02 clr.b $3C(a0) loc_32BDEE: ; ... move.b #0,$3A(a1) rts ; --------------------------------------------------------------------------- loc_32BDF6: ; ... cmp.b #$40,$3C(a0) bcc.s return_32BE02 addq.b #2,$3C(a0) return_32BE02: ; ... rts ; End of function sub_32BD5A ; =============== S U B R O U T I N E ======================================= sub_32BE04: ; ... move.w $30(a0),d0 bmi.s loc_32BE2C cmp.w #$C,d0 blt.s loc_32BE1E move.b #3,$1A(a0) move.b #1,$18(a0) rts ; --------------------------------------------------------------------------- loc_32BE1E: ; ... move.b #4,$1A(a0) move.b #2,$18(a0) rts ; --------------------------------------------------------------------------- loc_32BE2C: ; ... cmp.w #$FFF4,d0 blt.s loc_32BE40 move.b #4,$1A(a0) move.b #6,$18(a0) rts ; --------------------------------------------------------------------------- loc_32BE40: ; ... move.b #5,$1A(a0) move.b #7,$18(a0) rts ; End of function sub_32BE04 ; --------------------------------------------------------------------------- loc_32BE4E: ; ... tst.b $32(a0) bmi.s loc_32BE60 subq.b #1,$32(a0) bpl.s loc_32BE60 move.b #$DA,$20(a0) loc_32BE60: ; ... jsr ObjectMoveAndFall sub.w #$20,$12(a0) cmp.w #$180,$12(a0) blt.s loc_32BE7A move.w #$180,$12(a0) loc_32BE7A: ; ... cmp.w #$4AC,$C(a0) bcs.s loc_32BE9C move.w #$4AC,$C(a0) move.w #$4AC,$2E(a0) move.b #1,$2C(a0) addq.b #2,$24(a0) bsr.w sub_32BF40 loc_32BE9C: ; ... bsr.w sub_32BEB2 lea (Ani_Obj54).l,a1 jsr AnimateSprite jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32BEB2: ; ... cmp.b #-2,$21(a0) bgt.s return_32BECA move.b #$14,$1A(a0) move.b #6,$1C(a0) addq.b #2,$24(a0) return_32BECA: ; ... rts ; End of function sub_32BEB2 ; --------------------------------------------------------------------------- loc_32BECC: ; ... tst.b $32(a0) bmi.s loc_32BEDE subq.b #1,$32(a0) bpl.s loc_32BEDE move.b #$DA,$20(a0) loc_32BEDE: ; ... bsr.w sub_32BF5A cmp.b #$B,$1A(a0) bne.s loc_32BE9C move.b $2C(a0),d0 jsr CalcSine neg.w d0 asr.w #2,d0 add.w $2E(a0),d0 cmp.w #$4AC,d0 bcc.s loc_32BF2A move.w d0,$C(a0) addq.b #1,$2C(a0) btst #0,$2C(a0) beq.w loc_32C07A moveq #$FFFFFFFF,d0 btst #0,1(a0) beq.s loc_32BF20 neg.w d0 loc_32BF20: ; ... add.w d0,8(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32BF2A: ; ... move.w #$4AC,$C(a0) bsr.w sub_32BF40 move.b #1,$2C(a0) jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32BF40: ; ... move.w ($FFFFB008).w,d0 sub.w 8(a0),d0 bpl.s loc_32BF52 bclr #0,1(a0) rts ; --------------------------------------------------------------------------- loc_32BF52: ; ... bset #0,1(a0) rts ; End of function sub_32BF40 ; =============== S U B R O U T I N E ======================================= sub_32BF5A: ; ... cmp.b #4,($FFFFB024).w beq.s loc_32BF6A cmp.b #4,($FFFFB064).w bne.s loc_32BF76 loc_32BF6A: ; ... move.b #$14,$1A(a0) move.b #6,$1C(a0) loc_32BF76: ; ... cmp.b #$FE,$21(a0) bgt.s return_32BF8A move.b #$14,$1A(a0) move.b #6,$1C(a0) return_32BF8A: ; ... rts ; End of function sub_32BF5A ; --------------------------------------------------------------------------- loc_32BF8C: ; ... move.b #$C4,d0 jsr PlaySound move.l $34(a0),a1 sub.b #1,$2C(a1) jmp DeleteObject ; --------------------------------------------------------------------------- loc_32BFA6: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_32BFB4(pc,d0.w),d0 jmp off_32BFB4(pc,d0.w) ; --------------------------------------------------------------------------- off_32BFB4: dc.w loc_32BFB8-off_32BFB4,loc_32C026-off_32BFB4; 0 ; ... ; --------------------------------------------------------------------------- loc_32BFB8: ; ... move.l #Map_Obj54,4(a0) move.w #$37C,2(a0) or.b #4,1(a0) move.b #5,$18(a0) move.b #$12,$1A(a0) addq.b #2,$25(a0) move.l $34(a0),a1 move.b #$50,$19(a0) move.w 8(a1),8(a0) move.w $C(a1),$C(a0) add.w #7,$C(a0) sub.w #4,8(a0) move.w #$FC00,d0 btst #0,1(a1) beq.s loc_32C012 neg.w d0 add.w #8,8(a0) loc_32C012: ; ... move.w d0,$10(a0) move.b #$99,$20(a0) move.b #$EA,d0 jsr PlaySound loc_32C026: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 cmp.w #$2AB0,8(a0) bcs.w loc_32C080 cmp.w #$2BF0,8(a0) bcc.w loc_32C080 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32C046: ; ... move.l $34(a0),a1 cmp.b #$54,(a1) bne.w loc_32C080 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) bclr #0,1(a0) btst #0,1(a1) beq.w loc_32C07A bset #0,1(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32C07A: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32C080: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Ani_Obj54: dc.w byte_32C096-Ani_Obj54,byte_32C099-Ani_Obj54,byte_32C09D-Ani_Obj54; 0 ; ... dc.w byte_32C0B2-Ani_Obj54,byte_32C0B6-Ani_Obj54,byte_32C0C1-Ani_Obj54; 3 dc.w byte_32C0CC-Ani_Obj54,byte_32C0CF-Ani_Obj54; 6 byte_32C096: dc.b $F, 2, -1 ; 0 ; ... byte_32C099: dc.b 1, 0, 1, -1 ; 0 ; ... byte_32C09D: dc.b 3, 5, 5, 5, 5, 5, 5, 5, 5, 6; 0 ; ... dc.b 7, 6, 7, 6, 7, 8, 9, $A, $B, -2; 10 dc.b 1 ; 20 byte_32C0B2: dc.b 7, $C, $D, -1 ; 0 ; ... byte_32C0B6: dc.b 7, $E, $F, $E, $F, $E, $F, $E, $F, -3; 0 ; ... dc.b 3 ; 10 byte_32C0C1: dc.b 7, $10, $10, $10, $10, $10, $10, $10, $10, -3; 0 ; ... dc.b 3 ; 10 byte_32C0CC: dc.b 1, $14, -4 ; 0 ; ... byte_32C0CF: dc.b 7, $11, -1 ; 0 ; ... Map_Obj54: dc.w byte_32C0FC-Map_Obj54,byte_32C104-Map_Obj54,byte_32C10C-Map_Obj54; 0 ; ... dc.w byte_32C12C-Map_Obj54,byte_32C134-Map_Obj54,byte_32C13C-Map_Obj54; 3 dc.w byte_32C144-Map_Obj54,byte_32C14C-Map_Obj54,byte_32C154-Map_Obj54; 6 dc.w byte_32C15C-Map_Obj54,byte_32C164-Map_Obj54,byte_32C16C-Map_Obj54; 9 dc.w byte_32C186-Map_Obj54,byte_32C194-Map_Obj54,byte_32C1A2-Map_Obj54; 12 dc.w byte_32C1B0-Map_Obj54,byte_32C1BE-Map_Obj54,byte_32C1CC-Map_Obj54; 15 dc.w byte_32C1DA-Map_Obj54,byte_32C1E8-Map_Obj54,byte_32C1F0-Map_Obj54; 18 byte_32C0FC: dc.b 0, 1, 0, 5, 1,-$1C, 0, $1C; 0 ; ... byte_32C104: dc.b 0, 1, 0, 5, 1,-$18, 0, $1C; 0 ; ... byte_32C10C: dc.b 0, 5,-$28, 5, 1,-$5C, 0, 2,-$18, 5; 0 ; ... dc.b 1,-$58, 0, $10, -8, $F, $21,-$74, -1,-$10; 10 dc.b -8, 7, $21,-$64, 0, $10, -8, 2, $20, 3; 20 dc.b -1,-$18 ; 30 byte_32C12C: dc.b 0, 1, -$C, $A, $20, $E, -1, -$C; 0 ; ... byte_32C134: dc.b 0, 1, -$C, $A, $20, $6F, -1, -$C; 0 ; ... byte_32C13C: dc.b 0, 1, -8, 5, $20, $78, -1, -8; 0 ; ... byte_32C144: dc.b 0, 1, -$C, 6, $20, $17, -1, -8; 0 ; ... byte_32C14C: dc.b 0, 1, -8, 9, $20, $1D, -1, -$C; 0 ; ... byte_32C154: dc.b 0, 1, -$C, 6, $20, $23, -1, -8; 0 ; ... byte_32C15C: dc.b 0, 1, -$C, $A, 0, $29, -1, -$C; 0 ; ... byte_32C164: dc.b 0, 1,-$10, $F, 0, $32, -1,-$10; 0 ; ... byte_32C16C: dc.b 0, 4,-$18, $A, 0, $42, -1,-$18,-$18, $A; 0 ; ... dc.b 0, $4B, 0, 0, 0, $A, 0, $54, -1,-$18; 10 dc.b 0, $A, 0, $5D, 0, 0; 20 byte_32C186: dc.b 0, 2,-$18, $D, 1,-$4C, -1,-$10,-$18, 5; 0 ; ... dc.b 1,-$54, -1,-$20 ; 10 byte_32C194: dc.b 0, 2,-$18, $D, 1,-$44, -1,-$10,-$18, 5; 0 ; ... dc.b 1,-$54, -1,-$20 ; 10 byte_32C1A2: dc.b 0, 2,-$18, $D, 1,-$3C, -1,-$10,-$18, 5; 0 ; ... dc.b 1,-$50, -1,-$20 ; 10 byte_32C1B0: dc.b 0, 2,-$18, $D, 1,-$34, -1,-$10,-$18, 5; 0 ; ... dc.b 1,-$50, -1,-$20 ; 10 byte_32C1BE: dc.b 0, 2,-$18, $D, 1,-$2C, -1,-$10,-$18, 5; 0 ; ... dc.b 1,-$50, -1,-$20 ; 10 byte_32C1CC: dc.b 0, 2,-$18, $D, 1,-$24, -1,-$10,-$18, 5; 0 ; ... dc.b 1,-$50, -1,-$20 ; 10 byte_32C1DA: dc.b 0, 2, -8, $D, $20, 6, -1,-$20, -8, $D; 0 ; ... dc.b $28, 6, 0, 0 ; 10 byte_32C1E8: dc.b 0, 1, -8, 2, $20, 0, -1,-$20; 0 ; ... byte_32C1F0: dc.b 0 ; 0 ; ... dc.b 4,-$18, $A, 0, $66, -1,-$18,-$18, $A, 8; 0 dc.b $66, 0, 0, 0, $A, $10, $66, -1,-$18, 0; 10 dc.b $A, $18, $66, 0, 0 ; 20 ; --------------------------------------------------------------------------- Obj55: ; ... moveq #0,d0 move.b $A(a0),d0 move.w off_32C218(pc,d0.w),d1 jmp off_32C218(pc,d1.w) ; --------------------------------------------------------------------------- off_32C218: dc.w loc_32C222-off_32C218,loc_32C260-off_32C218,loc_32C492-off_32C218; 0 ; ... dc.w loc_32C6E8-off_32C218,loc_32C806-off_32C218; 3 ; --------------------------------------------------------------------------- loc_32C222: ; ... move.l #Map_Obj55,4(a0) move.w #$38C,2(a0) or.b #4,1(a0) move.b #3,$18(a0) bset #6,1(a0) move.b #0,$F(a0) addq.b #2,$A(a0) move.b #$F,$20(a0) move.b #8,$32(a0) move.b #$40,$E(a0) return_32C25E: ; ... rts ; --------------------------------------------------------------------------- loc_32C260: ; ... moveq #0,d0 loc_32C262: move.b $26(a0),d0 move.w off_32C26E(pc,d0.w),d1 jmp off_32C26E(pc,d1.w) ; --------------------------------------------------------------------------- off_32C26E: dc.w loc_32C278-off_32C26E,loc_32C2F2-off_32C26E,loc_32C334-off_32C26E; 0 ; ... dc.w loc_32C37E-off_32C26E,loc_32C422-off_32C26E; 3 ; --------------------------------------------------------------------------- loc_32C278: ; ... move.w #$2940,($FFFFF750).w bclr #0,1(a0) move.w ($FFFFB008).w,d1 cmp.w #$293A,d1 bcc.s loc_32C294 bchg #0,1(a0) loc_32C294: ; ... move.w #$2D0,$C(a0) move.w #$2D0,($FFFFF754).w move.b #8,$B(a0) move.b #1,$F(a0) addq.b #2,$26(a0) move.w #-$80,($FFFFF75A).w move.b #$F,$20(a0) move.w 8(a0),$10(a0) move.w $C(a0),$12(a0) clr.b $1A(a0) clr.b $2A(a0) move.b #8,$15(a0) lea ($FFFFF740).w,a2 move.b #5,(a2)+ move.b #0,(a2)+ move.b #1,(a2)+ move.b #0,(a2) move.b #0,($FFFFF73F).w rts ; --------------------------------------------------------------------------- loc_32C2F2: ; ... bsr.w sub_326B86 move.w ($FFFFF750).w,8(a0) bsr.w sub_32C364 cmp.w #$290,($FFFFF754).w bcc.w loc_32C3D8 move.w #$290,($FFFFF754).w addq.b #2,$26(a0) move.w #$A8,($FFFFF75C).w btst #7,$2A(a0) bne.w loc_32C3D8 lea ($FFFFF740).w,a2 move.b #$10,(a2)+ move.b #0,(a2) bra.w loc_32C3D8 ; --------------------------------------------------------------------------- loc_32C334: ; ... btst #7,$2A(a0) bne.s loc_32C356 bsr.w sub_32C364 sub.w #1,($FFFFF75C).w bpl.w loc_32C3D8 lea ($FFFFF740).w,a2 move.b #5,(a2)+ move.b #0,(a2) loc_32C356: ; ... addq.b #2,$26(a0) move.w #$FFC0,($FFFFF75A).w bra.w loc_32C3D8 ; =============== S U B R O U T I N E ======================================= sub_32C364: ; ... move.b $1A(a0),d0 jsr CalcSine asr.w #7,d1 add.w ($FFFFF754).w,d1 move.w d1,$C(a0) addq.b #4,$1A(a0) rts ; End of function sub_32C364 ; --------------------------------------------------------------------------- loc_32C37E: ; ... bsr.w sub_326B86 move.w ($FFFFF754).w,$C(a0) move.w ($FFFFF750).w,8(a0) btst #6,$2A(a0) bne.s loc_32C3B6 cmp.w #$28C,($FFFFF754).w bcc.w loc_32C3D8 move.w #$28C,($FFFFF754).w move.w #$80,($FFFFF75A).w or.b #$40,$2A(a0) bra.w loc_32C3D8 ; --------------------------------------------------------------------------- loc_32C3B6: ; ... cmp.w #$2D0,($FFFFF754).w bcs.s loc_32C3D8 move.w #$2D0,($FFFFF754).w clr.b $26(a0) addq.b #2,$A(a0) btst #7,$2A(a0) beq.s loc_32C3D8 addq.b #2,$A(a0) loc_32C3D8: ; ... bsr.w sub_32C3F0 lea (Ani_Obj55).l,a1 bsr.w sub_326BAC bsr.w sub_32C410 jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32C3F0: ; ... bsr.w sub_326B20 cmp.b #$1F,$14(a0) bne.s return_32C40E lea ($FFFFF740).w,a1 and.b #$F0,(a1) or.b #3,(a1) or.b #$80,$2A(a0) return_32C40E: ; ... rts ; End of function sub_32C3F0 ; =============== S U B R O U T I N E ======================================= sub_32C410: ; ... move.w 8(a0),d0 move.w $C(a0),d1 move.w d0,$10(a0) move.w d1,$12(a0) rts ; End of function sub_32C410 ; --------------------------------------------------------------------------- loc_32C422: ; ... clr.w ($FFFFFB22).w subq.w #1,($FFFFF75C).w bmi.s loc_32C44A cmp.w #$1E,($FFFFF75C).w bcc.s loc_32C440 move.b #$B,$B(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32C440: ; ... bsr.w sub_326C74 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32C44A: ; ... tst.b ($FFFFF7A7).w bne.s loc_32C462 jsr sub_30D038 jsr sub_30D042 move.b #1,($FFFFF7A7).w loc_32C462: ; ... cmp.w #$2A20,($FFFFEECA).w bcc.s loc_32C470 addq.w #2,($FFFFEECA).w bra.s loc_32C47E ; --------------------------------------------------------------------------- loc_32C470: ; ... move.w #$2A20,($FFFFEECA).w cmp.w #$2D0,$C(a0) bcc.s loc_32C48C loc_32C47E: ; ... add.w #1,$C(a0) bsr.s sub_32C410 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32C48C: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_32C492: ; ... moveq #0,d0 move.b $26(a0),d0 move.w off_32C4A0(pc,d0.w),d1 jmp off_32C4A0(pc,d1.w) ; --------------------------------------------------------------------------- off_32C4A0: dc.w loc_32C4AA-off_32C4A0,loc_32C51E-off_32C4A0,loc_32C54E-off_32C4A0; 0 ; ... dc.w loc_32C5AE-off_32C4A0,loc_32C616-off_32C4A0; 3 ; --------------------------------------------------------------------------- loc_32C4AA: ; ... clr.w ($FFFFFB22).w move.w #$2940,($FFFFF750).w bclr #0,1(a0) move.w ($FFFFB008).w,d1 cmp.w #$293A,d1 bcs.s loc_32C4CA bchg #0,1(a0) loc_32C4CA: ; ... move.w #$2B0,($FFFFF754).w move.w #$2B0,$C(a0) move.b #2,$26(a0) move.b #$8A,$20(a0) move.b #5,$B(a0) moveq #7,d0 moveq #7,d2 moveq #0,d4 move.w ($FFFFF754).w,d5 loc_32C4F2: ; ... add.w #$F,d5 move.b d0,$15(a0,d4.w) move.w d5,$12(a0,d4.w) addq.w #6,d4 dbf d2,loc_32C4F2 move.b #8,$F(a0) move.w #-$80,($FFFFF75A).w move.b #0,$3E(a0) move.b #1,($FFFFF73F).w rts ; --------------------------------------------------------------------------- loc_32C51E: ; ... bsr.w sub_326B86 cmp.w #$240,($FFFFF754).w bcc.w loc_32C648 move.w #$240,($FFFFF754).w move.w #0,($FFFFF75A).w add.b #2,$26(a0) move.w #$80,($FFFFF75C).w move.b #3,$38(a0) bra.w loc_32C648 ; --------------------------------------------------------------------------- loc_32C54E: ; ... subq.b #1,$2C(a0) bne.s loc_32C55A move.b #5,$B(a0) loc_32C55A: ; ... sub.w #1,($FFFFF75C).w bne.w loc_32C648 sub.b #1,$38(a0) bmi.s loc_32C596 jsr RandomNumber loc_32C572: ; ... addq.b #1,d0 and.w #3,d0 btst d0,$3E(a0) bne.s loc_32C572 bset d0,$3E(a0) add.w d0,d0 move.w word_32C5A6(pc,d0.w),($FFFFF75C).w addq.b #2,$26(a0) bsr.w sub_32C656 bra.w loc_32C648 ; --------------------------------------------------------------------------- loc_32C596: ; ... move.w #$80,($FFFFF75A).w move.b #8,$26(a0) bra.w loc_32C648 ; --------------------------------------------------------------------------- word_32C5A6: dc.w $238, $230, $240, $25F ; 0 ; ... ; --------------------------------------------------------------------------- loc_32C5AE: ; ... bsr.w sub_326B86 move.w ($FFFFF75C).w,d0 tst.w ($FFFFF75A).w bmi.s loc_32C5C6 cmp.w ($FFFFF754).w,d0 bcs.s loc_32C5CC bra.w loc_32C648 ; --------------------------------------------------------------------------- loc_32C5C6: ; ... cmp.w ($FFFFF754).w,d0 bcs.s loc_32C648 loc_32C5CC: ; ... move.w #0,($FFFFF75A).w move.b #8,$2C(a0) move.b #6,$B(a0) jsr SingleObjLoad bne.w loc_32C648 move.b #$55,(a1) move.b #8,$A(a1) move.l a0,$34(a1) move.b #$EA,d0 jsr PlaySound move.b #4,$26(a0) move.w #$28,($FFFFF75C).w move.w #-$80,($FFFFF75A).w bra.w loc_32C648 ; --------------------------------------------------------------------------- loc_32C616: ; ... subq.b #1,$2C(a0) bne.s loc_32C622 move.b #5,$B(a0) loc_32C622: ; ... bsr.w sub_326B86 cmp.w #$2B0,($FFFFF754).w bcs.s loc_32C648 move.w #$2B0,($FFFFF754).w move.w #0,($FFFFF75A).w move.b #0,$26(a0) move.b #2,$A(a0) rts ; --------------------------------------------------------------------------- loc_32C648: ; ... bsr.w sub_32C670 bsr.w sub_32C696 jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32C656: ; ... move.w ($FFFFF75C).w,d0 sub.w ($FFFFF754).w,d0 bpl.s loc_32C668 move.w #$FF80,($FFFFF75A).w rts ; --------------------------------------------------------------------------- loc_32C668: ; ... move.w #$80,($FFFFF75A).w rts ; End of function sub_32C656 ; =============== S U B R O U T I N E ======================================= sub_32C670: ; ... move.w ($FFFFB008).w,d0 sub.w 8(a0),d0 blt.s loc_32C688 sub.w #8,d0 blt.s return_32C686 bset #0,1(a0) return_32C686: ; ... rts ; --------------------------------------------------------------------------- loc_32C688: ; ... add.w #8,d0 bgt.s return_32C686 bclr #0,1(a0) rts ; End of function sub_32C670 ; =============== S U B R O U T I N E ======================================= sub_32C696: ; ... move.w ($FFFFF750).w,d5 move.w ($FFFFF754).w,d6 move.b $1A(a0),d3 move.b d3,d0 bsr.w sub_32C6D6 move.w d1,8(a0) move.w d0,$C(a0) add.b #2,$1A(a0) moveq #7,d2 moveq #0,d4 loc_32C6BA: ; ... add.w #$F,d6 sub.b #$10,d3 bsr.w sub_32C6D6 move.w d1,$10(a0,d4.w) move.w d0,$12(a0,d4.w) addq.w #6,d4 dbf d2,loc_32C6BA rts ; End of function sub_32C696 ; =============== S U B R O U T I N E ======================================= sub_32C6D6: ; ... move.b d3,d0 jsr CalcSine asr.w #4,d1 add.w d5,d1 asr.w #6,d0 add.w d6,d0 rts ; End of function sub_32C6D6 ; --------------------------------------------------------------------------- loc_32C6E8: ; ... moveq #0,d0 move.b $26(a0),d0 move.w off_32C6F6(pc,d0.w),d1 jmp off_32C6F6(pc,d1.w) ; --------------------------------------------------------------------------- off_32C6F6: dc.w loc_32C6FA-off_32C6F6,loc_32C75E-off_32C6F6; 0 ; ... ; --------------------------------------------------------------------------- loc_32C6FA: ; ... clr.w ($FFFFFB22).w move.w #$28C0,($FFFFF750).w bclr #0,1(a0) move.w ($FFFFB008).w,d1 cmp.w #$293A,d1 bcs.s loc_32C720 move.w #$29C0,($FFFFF750).w bset #0,1(a0) loc_32C720: ; ... move.w #$2A0,($FFFFF754).w move.b #2,$B(a0) move.b #$8A,$20(a0) addq.b #2,$26(a0) move.b #$80,$E(a0) clr.b $1A(a0) moveq #7,d0 moveq #7,d1 moveq #0,d2 loc_32C746: ; ... move.b d1,$15(a0,d2.w) addq.w #6,d2 dbf d0,loc_32C746 move.b #8,$F(a0) move.b #2,($FFFFF73F).w rts ; --------------------------------------------------------------------------- loc_32C75E: ; ... bsr.w sub_32C782 cmp.b #-2,$1A(a0) bcs.s loc_32C778 move.b #0,$26(a0) move.b #4,$A(a0) rts ; --------------------------------------------------------------------------- loc_32C778: ; ... bsr.w sub_32C7E2 jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32C782: ; ... move.b $1A(a0),d0 add.b #$40,d0 move.b d0,d3 bsr.w sub_32C7BA move.w d1,8(a0) move.w d0,$C(a0) add.b #1,$1A(a0) moveq #7,d2 moveq #0,d4 loc_32C7A2: ; ... sub.b #6,d3 bsr.w sub_32C7BA move.w d1,$10(a0,d4.w) move.w d0,$12(a0,d4.w) addq.w #6,d4 dbf d2,loc_32C7A2 rts ; End of function sub_32C782 ; =============== S U B R O U T I N E ======================================= sub_32C7BA: ; ... move.b d3,d0 jsr CalcSine muls.w #$68,d1 asr.l #8,d1 btst #0,1(a0) bne.s loc_32C7D2 neg.w d1 loc_32C7D2: ; ... add.w ($FFFFF750).w,d1 muls.w #$68,d0 asr.l #8,d0 add.w ($FFFFF754).w,d0 rts ; End of function sub_32C7BA ; =============== S U B R O U T I N E ======================================= sub_32C7E2: ; ... move.b $1A(a0),d0 moveq #$15,d1 cmp.b #$52,d0 bcs.s loc_32C800 moveq #3,d1 cmp.b #$6B,d0 bcs.s loc_32C800 moveq #2,d1 cmp.b #$92,d0 bcs.s loc_32C800 moveq #4,d1 loc_32C800: ; ... move.b d1,$B(a0) rts ; End of function sub_32C7E2 ; --------------------------------------------------------------------------- loc_32C806: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_32C814(pc,d0.w),d0 jmp off_32C814(pc,d0.w) ; --------------------------------------------------------------------------- off_32C814: dc.w loc_32C81C-off_32C814,loc_32C874-off_32C814,loc_32C958-off_32C814; 0 ; ... dc.w j_DeleteObject_8-off_32C814 ; 3 ; --------------------------------------------------------------------------- loc_32C81C: ; ... addq.b #2,$25(a0) move.l #Map_Obj55,4(a0) move.w #$38C,2(a0) or.b #4,1(a0) move.b #4,$18(a0) move.l $34(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.b #$C,$1A(a0) move.w #$FFE0,d0 move.w #$FC00,$10(a0) btst #0,1(a1) beq.s loc_32C868 neg.w d0 neg.w $10(a0) loc_32C868: ; ... add.w d0,8(a0) move.b #$AF,$20(a0) rts ; --------------------------------------------------------------------------- loc_32C874: ; ... bsr.w sub_32C89E jsr ObjectMove ; AKA SpeedToPos in Sonic 1 cmp.w #$2870,8(a0) bcs.w loc_32C898 cmp.w #$2A10,8(a0) bcc.w loc_32C898 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32C898: ; ... jmp DeleteObject ; =============== S U B R O U T I N E ======================================= sub_32C89E: ; ... cmp.w #$250,$C(a0) bcs.s return_32C8C6 tst.w $10(a0) bmi.w loc_32C8C8 move.w 8(a0),d0 cmp.w #$2980,d0 bcc.s return_32C8C6 cmp.w #$297C,d0 bcs.w return_32C8C6 move.w #$2988,d1 bra.s loc_32C8E0 ; --------------------------------------------------------------------------- return_32C8C6: ; ... rts ; --------------------------------------------------------------------------- loc_32C8C8: ; ... move.w 8(a0),d0 cmp.w #$2900,d0 bcs.s return_32C8DE cmp.w #$2904,d0 bcc.s return_32C8DE move.w #$28F8,d1 bra.s loc_32C8E0 ; --------------------------------------------------------------------------- return_32C8DE: ; ... rts ; --------------------------------------------------------------------------- loc_32C8E0: ; ... jsr SingleObjLoad bne.s return_32C956 move.b #$55,(a1) move.b #8,$A(a1) move.b #4,$25(a1) move.b #$8B,$20(a1) move.b #2,$1C(a1) move.b #$D,$1A(a1) move.w #0,$12(a1) move.l #Map_Obj55,4(a1) move.w #$38C,2(a1) jsr Adjust2PArtPointer2_Useless or.b #4,1(a1) move.b #2,$18(a1) move.w #5,$32(a1) move.b #7,$36(a1) move.w $10(a0),$10(a1) move.w d1,8(a1) move.w #$250,$C(a1) move.b #$EB,d0 jsr PlaySound return_32C956: ; ... rts ; End of function sub_32C89E ; --------------------------------------------------------------------------- loc_32C958: ; ... subq.w #1,$32(a0) bpl.s loc_32C9AA move.w #$C7,$32(a0) subq.b #1,$36(a0) bmi.s loc_32C9AA jsr SingleObjLoad2 bne.s loc_32C9AA moveq #0,d0 move.w #$F,d1 loc_32C978: ; ... move.l (a0,d0.w),(a1,d0.w) addq.w #4,d0 dbf d1,loc_32C978 move.w #5,$32(a1) move.w #$200,$1C(a1) move.w #$10,d0 tst.w $10(a1) bpl.s loc_32C99C neg.w d0 loc_32C99C: ; ... add.w d0,8(a1) move.b #$EB,d0 jsr PlaySound loc_32C9AA: ; ... lea (Ani_Obj55).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- j_DeleteObject_8: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Ani_Obj55: dc.w byte_32C9CE-Ani_Obj55,byte_32C9E8-Ani_Obj55,byte_32C9EB-Ani_Obj55; 0 ; ... dc.w byte_32C9FD-Ani_Obj55,byte_32CA00-Ani_Obj55,byte_32CA03-Ani_Obj55; 3 byte_32C9CE: dc.b 9, 8, 8, 8, 8, 9, 9, 9, 9, 8; 0 ; ... dc.b 8, 8, 8, 9, 9, 9, 9, 8, 8, 8; 10 dc.b 8, 9, 9, 9, 9, -1; 20 byte_32C9E8: dc.b $F, 1, -1 ; 0 ; ... byte_32C9EB: dc.b 1, $D, $11, $E, $12, $F, $13, $10, $14, $14; 0 ; ... dc.b $10, $13, $F, $12, $E, $11, $D, -6; 10 byte_32C9FD: dc.b $F, $A, -1 ; 0 ; ... byte_32CA00: dc.b $F, $B, -1 ; 0 ; ... byte_32CA03: dc.b $F, 8, -1 ; 0 ; ... Map_Obj55: dc.w 0 ; ... off_32CA08: dc.w byte_32CA34-off_32CA08,byte_32CA60-off_32CA08,byte_32CA6E-off_32CA08; 0 ; ... dc.w byte_32CA82-off_32CA08,byte_32CAA4-off_32CA08,byte_32CAB2-off_32CA08; 3 dc.w byte_32CAC0-off_32CA08,byte_32CAC8-off_32CA08,byte_32CAD0-off_32CA08; 6 dc.w byte_32CAD8-off_32CA08,byte_32CAE0-off_32CA08,byte_32CAE8-off_32CA08; 9 dc.w byte_32CAF0-off_32CA08,byte_32CAF8-off_32CA08,byte_32CB00-off_32CA08; 12 dc.w byte_32CB08-off_32CA08,byte_32CAF0-off_32CA08,byte_32CAF8-off_32CA08; 15 dc.w byte_32CB00-off_32CA08,byte_32CB08-off_32CA08,byte_32CA96-off_32CA08; 18 dc.w 7 byte_32CA34: dc.b -$20, $D, $20, 1, 0, 0,-$18, 0, $20, 0; 0 ; ... dc.b -1, -8,-$10, $D, $20, 9, -1,-$18,-$10, $D; 10 dc.b $20, $11, 0, 8, 0, $F, $20, $19, -1,-$30; 20 dc.b 0, $F, $20, $29, -1,-$10, 0, $F, $20, $39; 30 dc.b 0, $10, 0, 2 ; 40 byte_32CA60: dc.b -8, $D, $20, $49, -1,-$22, -8, 5, $20, $79; 0 ; ... dc.b -1, -8, 0, 3 ; 10 byte_32CA6E: dc.b -$1E, 9, $20, $51, -1,-$1E, -$E, 9, $20, $57; 0 ; ... dc.b -1,-$16, -8, 5, $20, $79, -1, -8, 0, 3; 10 byte_32CA82: dc.b 6, 6, $20, $63, -1,-$1E, -2, 6, $20, $5D; 0 ; ... dc.b -1, -$E, -8, 5, $20, $79, -1, -8, 0, 2; 10 byte_32CA96: dc.b -$22, 7, $20,-$53, -1, -8, -8, 5, $20, $79; 0 ; ... dc.b -1, -8, 0, 2 ; 10 byte_32CAA4: dc.b -8, $D, $20, $69, -1,-$20, -8, 5, $20, $79; 0 ; ... dc.b -1, -8, 0, 2 ; 10 byte_32CAB2: dc.b -8, $D, $20, $71, -1,-$20, -8, 5, $20, $79; 0 ; ... dc.b -1, -8, 0, 1 ; 10 byte_32CAC0: dc.b -8, 5, $20, $79, -1, -8, 0, 1; 0 ; ... byte_32CAC8: dc.b -$10, 9, 0, $7D, -1, -$C, 0, 1; 0 ; ... byte_32CAD0: dc.b -$10, 9, 0,-$7D, -1, -$C, 0, 1; 0 ; ... byte_32CAD8: dc.b -$10, 9, 0,-$77, -1, -$C, 0, 1; 0 ; ... byte_32CAE0: dc.b -$10, 9, 0,-$71, -1, -$C, 0, 1; 0 ; ... byte_32CAE8: dc.b -4, $C, $20,-$57, -1,-$10, 0, 1; 0 ; ... byte_32CAF0: dc.b 8, 4, $20,-$6B, -1, -8, 0, 1; 0 ; ... byte_32CAF8: dc.b 0, 5, $20,-$69, -1, -8, 0, 1; 0 ; ... byte_32CB00: dc.b -8, 6, $20,-$65, -1, -8, 0, 1; 0 ; ... byte_32CB08: dc.b -$10, 7 ; 0 ; ... dc.b $20 dc.b $A1 ; ¡ dc.b $FF dc.b $F8 ; ø ; =============== S U B R O U T I N E ======================================= Obj09: ; ... bsr.w sub_32CB2A moveq #0,d0 move.b $24(a0),d0 move.w Obj09_Index(pc,d0.w),d1 jmp Obj09_Index(pc,d1.w) ; End of function Obj09 ; --------------------------------------------------------------------------- Obj09_Index: dc.w sub_32CB3E-Obj09_Index ; 0 ; ... dc.w sub_32CBF8-Obj09_Index ; 1 dc.w sub_32CDA8-Obj09_Index ; 2 dc.w Obj09_Index-Obj09_Index ; 3 dc.w loc_32CDD2-Obj09_Index ; 4 ; =============== S U B R O U T I N E ======================================= sub_32CB2A: ; ... lea ($FFFFDB82).w,a1 moveq #$E,d0 loc_32CB30: ; ... move.w -4(a1),-(a1) dbf d0,loc_32CB30 move.w ($FFFFF602).w,-(a1) rts ; End of function sub_32CB2A ; =============== S U B R O U T I N E ======================================= sub_32CB3E: ; ... ; FUNCTION CHUNK AT 0032CCC6 SIZE 00000074 BYTES move.b #2,$24(a0) moveq #0,d0 move.l d0,$2A(a0) move.w #$80,d1 move.w d1,$2E(a0) move.w d0,$30(a0) add.w ($FFFFF73E).w,d0 move.w d0,8(a0) add.w ($FFFFF740).w,d1 move.w d1,$C(a0) move.b #$E,$16(a0) loc_32CB6C: move.b #7,$17(a0) move.l #Map_Obj09,4(a0) move.w #$22E5,2(a0) move.b #4,1(a0) move.b #3,$18(a0) move.w #$6E,$34(a0) clr.b ($FFFFF742).w move.w #$400,$32(a0) move.b #$40,$26(a0) move.b #1,($FFFFF766).w clr.b $37(a0) bclr #6,$22(a0) clr.b $21(a0) clr.b $23(a0) move.l #$FFFFB140,a1 move.b #$63,(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #$18,$C(a1) move.l #Map_Obj63,4(a1) move.w #$623C,2(a1) move.b #4,1(a1) move.b #4,$18(a1) move.l a0,$38(a1) bra.w loc_32CCC6 ; End of function sub_32CB3E ; =============== S U B R O U T I N E ======================================= sub_32CBF8: ; ... tst.b $25(a0) bne.s loc_32CC30 lea ($FFFFF602).w,a2 bsr.w sub_32D184 bsr.w sub_32D204 bsr.w sub_32D03E bsr.w sub_32D244 bsr.w sub_32D27E bsr.w sub_32CD3A bsr.w sub_32D09A lea (Ani_Obj09).l,a1 bsr.w sub_32D0FA bsr.w sub_32CFF6 bra.w loc_32CCC6 ; --------------------------------------------------------------------------- loc_32CC30: ; ... bsr.w sub_32CC44 bsr.w sub_32D03E bsr.w sub_32D244 bsr.w sub_32D27E bra.w loc_32CCC6 ; End of function sub_32CBF8 ; =============== S U B R O U T I N E ======================================= sub_32CC44: ; ... moveq #0,d0 move.b $36(a0),d0 add.b #8,d0 move.b d0,$36(a0) bne.s loc_32CC60 move.b #0,$25(a0) move.b #$1E,$23(a0) loc_32CC60: ; ... add.b $26(a0),d0 and.b #$FC,1(a0) sub.b #$10,d0 lsr.b #5,d0 add.w d0,d0 move.b unk_32CCB6(pc,d0.w),$1A(a0) move.b byte_32CCB7(pc,d0.w),d0 or.b d0,1(a0) move.b $36(a0),d0 sub.b #8,d0 bne.s return_32CCB4 move.b d0,$21(a0) cmp.l #$FFFFB000,a0 bne.s loc_32CC9E tst.w ($FFFFFE20).w beq.s return_32CCB4 bra.s loc_32CCA4 ; --------------------------------------------------------------------------- loc_32CC9E: ; ... tst.w ($FFFFFED0).w beq.s return_32CCB4 loc_32CCA4: ; ... jsr SpecialStageObjectLoad bne.s return_32CCB4 move.l a0,$38(a1) move.b #$5B,(a1) return_32CCB4: ; ... rts ; End of function sub_32CC44 ; --------------------------------------------------------------------------- unk_32CCB6: dc.b 4 byte_32CCB7: dc.b 1, 0, 0, 4, 0, $C, 0, 4, 2, 0; 0 dc.b 2, 4, 3, $C, 1 ; 10 ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_32CB3E loc_32CCC6: ; ... move.b $23(a0),d0 beq.s LoadObj09_DPLC subq.b #1,d0 move.b d0,$23(a0) and.b #1,d0 beq.s LoadObj09_DPLC rts ; --------------------------------------------------------------------------- LoadObj09_DPLC: ; ... jsr DisplaySprite move.l #$FF0000,d6 lea ($FFFFF766).w,a4 move.w #$5CA0,d4 moveq #0,d1 loc_32CCF0: ; ... moveq #0,d0 move.b $1A(a0),d0 cmp.b (a4),d0 beq.s return_32CD38 move.b d0,(a4) add.w d1,d0 add.w d0,d0 lea (Knuckles_SpecialStage_DPLC).l,a2 add.w (a2,d0.w),a2 move.w (a2)+,d5 subq.w #1,d5 bmi.s return_32CD38 loc_32CD10: ; ... moveq #0,d1 move.w (a2)+,d1 move.w d1,d3 lsr.w #8,d3 and.w #$F0,d3 add.w #$10,d3 and.w #$FFF,d1 lsl.l #5,d1 add.l d6,d1 move.w d4,d2 add.w d3,d4 add.w d3,d4 jsr QueueDMATransfer dbf d5,loc_32CD10 return_32CD38: ; ... rts ; END OF FUNCTION CHUNK FOR sub_32CB3E ; =============== S U B R O U T I N E ======================================= sub_32CD3A: ; ... lea ($FFFFF603).w,a2 loc_32CD3E: ; ... move.b (a2),d0 and.b #$70,d0 beq.w return_32CDA6 move.w #$780,d2 moveq #0,d0 move.b $26(a0),d0 add.b #-$80,d0 jsr CalcSine muls.w d2,d1 asr.l #8,d1 add.w d1,$10(a0) muls.w d2,d0 asr.l #7,d0 add.w d0,$12(a0) bset #2,$22(a0) move.b #4,$24(a0) move.b #3,$1C(a0) moveq #0,d0 move.b d0,$1E(a0) move.b d0,$1B(a0) move.b d0,$21(a0) tst.b ($FFFFFE00).w bne.s loc_32CD98 tst.w ($FFFFFF70).w bne.s loc_32CD9C loc_32CD98: ; ... not.b ($FFFFF742).w loc_32CD9C: ; ... move.w #$A0,d0 jsr PlaySound return_32CDA6: ; ... rts ; End of function sub_32CD3A ; =============== S U B R O U T I N E ======================================= sub_32CDA8: ; ... lea ($FFFFF602).w,a2 bsr.w sub_32CE2C bsr.w sub_32CE00 bsr.w sub_32CE4E bsr.w sub_32CFAE bsr.w sub_32D03E bsr.w sub_32D27E lea (Ani_Obj09).l,a1 bsr.w sub_32D0FA bra.w loc_32CCC6 ; End of function sub_32CDA8 ; --------------------------------------------------------------------------- loc_32CDD2: ; ... lea ($FFFFF602).w,a2 bsr.w sub_32CE2C bsr.w sub_32CE00 bsr.w sub_32CE4E bsr.w sub_32CFAE bsr.w sub_32D03E bsr.w sub_32D27E bsr.w sub_32D09A lea (Ani_Obj09).l,a1 bsr.w sub_32D0FA bra.w loc_32CCC6 ; =============== S U B R O U T I N E ======================================= sub_32CE00: ; ... move.l $2A(a0),d2 move.l $2E(a0),d3 move.w $10(a0),d0 ext.l d0 asl.l #8,d0 add.l d0,d2 move.w $12(a0),d0 add.w #$A8,$12(a0) ext.l d0 asl.l #8,d0 add.l d0,d3 move.l d2,$2A(a0) move.l d3,$2E(a0) rts ; End of function sub_32CE00 ; =============== S U B R O U T I N E ======================================= sub_32CE2C: ; ... move.b (a2),d0 btst #2,d0 bne.s loc_32CE3E btst #3,d0 bne.w loc_32CE46 rts ; --------------------------------------------------------------------------- loc_32CE3E: ; ... sub.w #$40,$10(a0) rts ; --------------------------------------------------------------------------- loc_32CE46: ; ... add.w #$40,$10(a0) rts ; End of function sub_32CE2C ; =============== S U B R O U T I N E ======================================= sub_32CE4E: ; ... moveq #0,d2 moveq #0,d3 move.w $2E(a0),d2 bmi.s loc_32CEAE move.w $2A(a0),d3 bmi.s loc_32CE8A cmp.w d2,d3 bcs.s loc_32CE7A bne.s loc_32CE70 tst.w d3 bne.s loc_32CE70 move.b #$40,$26(a0) rts ; --------------------------------------------------------------------------- loc_32CE70: ; ... lsl.l #5,d2 divu.w d3,d2 move.b d2,$26(a0) rts ; --------------------------------------------------------------------------- loc_32CE7A: ; ... lsl.l #5,d3 divu.w d2,d3 sub.w #$40,d3 neg.w d3 loc_32CE84: move.b d3,$26(a0) rts ; --------------------------------------------------------------------------- loc_32CE8A: ; ... neg.w d3 cmp.w d2,d3 bcc.s loc_32CE9E lsl.l #5,d3 divu.w d2,d3 add.w #$40,d3 move.b d3,$26(a0) rts ; --------------------------------------------------------------------------- loc_32CE9E: ; ... lsl.l #5,d2 divu.w d3,d2 sub.w #$80,d2 neg.w d2 move.b d2,$26(a0) rts ; --------------------------------------------------------------------------- loc_32CEAE: ; ... neg.w d2 move.w $2A(a0),d3 bpl.s loc_32CEDA neg.w d3 cmp.w d2,d3 bcs.s loc_32CECA lsl.l #5,d2 divu.w d3,d2 add.w #$80,d2 loc_32CEC4: move.b d2,$26(a0) rts ; --------------------------------------------------------------------------- loc_32CECA: ; ... lsl.l #5,d3 divu.w d2,d3 sub.w #$C0,d3 neg.w d3 loc_32CED4: move.b d3,$26(a0) rts ; --------------------------------------------------------------------------- loc_32CEDA: ; ... cmp.w d2,d3 bcc.s loc_32CEEC lsl.l #5,d3 divu.w d2,d3 add.w #$C0,d3 move.b d3,$26(a0) rts ; --------------------------------------------------------------------------- loc_32CEEC: ; ... lsl.l #5,d2 divu.w d3,d2 sub.w #$100,d2 neg.w d2 move.b d2,$26(a0) rts ; End of function sub_32CE4E ; =============== S U B R O U T I N E ======================================= sub_32CEFC: ; ... moveq #0,d6 moveq #0,d0 move.w $2A(a1),d0 bpl.s loc_32CF0A st d6 neg.w d0 loc_32CF0A: ; ... lsl.l #7,d0 divu.w $34(a1),d0 move.b byte_32CF2C(pc,d0.w),d0 tst.b d6 bne.s loc_32CF1E sub.b #$80,d0 neg.b d0 loc_32CF1E: ; ... tst.w $2E(a1) bpl.s loc_32CF26 neg.b d0 loc_32CF26: ; ... move.b d0,$26(a0) rts ; End of function sub_32CEFC ; --------------------------------------------------------------------------- byte_32CF2C: dc.b $40, $40, $40, $40, $41, $41, $41, $42, $42, $42; 0 dc.b $43, $43, $43, $44, $44, $44, $45, $45, $45, $46; 10 dc.b $46, $46, $47, $47, $47, $48, $48, $48, $48, $49; 20 dc.b $49, $49, $4A, $4A, $4A, $4B, $4B, $4B, $4C, $4C; 30 dc.b $4C, $4D, $4D, $4D, $4E, $4E, $4E, $4F, $4F, $50; 40 dc.b $50, $50, $51, $51, $51, $52, $52, $52, $53, $53; 50 dc.b $53, $54, $54, $54, $55, $55, $56, $56, $56, $57; 60 dc.b $57, $57, $58, $58, $59, $59, $59, $5A, $5A, $5B; 70 dc.b $5B, $5B, $5C, $5C, $5D, $5D, $5E, $5E, $5E, $5F; 80 dc.b $5F, $60, $60, $61, $61, $62, $62, $63, $63, $64; 90 dc.b $64, $65, $65, $66, $66, $67, $67, $68, $68, $69; 100 dc.b $6A, $6A, $6B, $6C, $6C, $6D, $6E, $6E, $6F, $70; 110 dc.b $71, $72, $73, $74, $75, $77, $78, $7A,-$80, 0; 120 ; =============== S U B R O U T I N E ======================================= sub_32CFAE: ; ... move.w $2E(a0),d0 ble.s return_32CFF4 muls.w d0,d0 move.w $2A(a0),d1 muls.w d1,d1 add.w d1,d0 move.w $34(a0),d1 mulu.w d1,d1 cmp.l d1,d0 bcs.s return_32CFF4 move.b #2,$24(a0) bclr #2,$22(a0) moveq #0,d0 move.w d0,$10(a0) move.w d0,$12(a0) move.w d0,$14(a0) move.b d0,$37(a0) bset #6,$22(a0) bsr.w sub_32D244 bsr.w sub_32D27E return_32CFF4: ; ... rts ; End of function sub_32CFAE ; =============== S U B R O U T I N E ======================================= sub_32CFF6: ; ... tst.b $21(a0) beq.s return_32D03C clr.b $21(a0) tst.b $23(a0) bne.s return_32D03C clr.b $14(a0) cmp.l #$FFFFB000,a0 bne.s loc_32D01E st ($FFFFF742).w tst.w ($FFFFFE20).w beq.s loc_32D032 bra.s loc_32D028 ; --------------------------------------------------------------------------- loc_32D01E: ; ... clr.b ($FFFFF742).w tst.w ($FFFFFED0).w beq.s loc_32D032 loc_32D028: ; ... move.w #$C6,d0 jsr PlaySound loc_32D032: ; ... move.b #2,$25(a0) clr.b $36(a0) return_32D03C: ; ... rts ; End of function sub_32CFF6 ; =============== S U B R O U T I N E ======================================= sub_32D03E: ; ... tst.w ($FFFFFF70).w bne.s return_32D088 move.w $34(a0),d0 cmp.l #$FFFFB000,a0 bne.s loc_32D058 tst.b ($FFFFF742).w beq.s loc_32D068 bra.s loc_32D05E ; --------------------------------------------------------------------------- loc_32D058: ; ... tst.b ($FFFFF742).w bne.s loc_32D068 loc_32D05E: ; ... cmp.w #$80,d0 beq.s return_32D088 addq.w #1,d0 bra.s loc_32D070 ; --------------------------------------------------------------------------- loc_32D068: ; ... cmp.w #$6E,d0 beq.s return_32D088 subq.w #1,d0 loc_32D070: ; ... move.w d0,$34(a0) cmp.w #$77,d0 bcc.s loc_32D082 move.b #3,$18(a0) rts ; --------------------------------------------------------------------------- loc_32D082: ; ... move.b #2,$18(a0) return_32D088: ; ... rts ; End of function sub_32D03E ; --------------------------------------------------------------------------- byte_32D08A: dc.b 1 ; 0 byte_32D08B: dc.b 1, 0, 0, 1, 0, 2, 0, 1, 2, 0; 0 dc.b 2, 1, 3, 2, 1 ; 10 ; =============== S U B R O U T I N E ======================================= sub_32D09A: ; ... btst #2,$22(a0) beq.s loc_32D0B0 move.b #3,$1C(a0) and.b #$FC,$22(a0) rts ; --------------------------------------------------------------------------- loc_32D0B0: ; ... moveq #0,d0 move.b $26(a0),d0 sub.b #$10,d0 lsr.b #5,d0 move.b d0,d1 add.w d0,d0 move.b byte_32D08A(pc,d0.w),d2 cmp.b $1C(a0),d2 bne.s loc_32D0D0 cmp.b $3F(a0),d1 beq.s return_32D0F8 loc_32D0D0: ; ... move.b d1,$3F(a0) move.b d2,$1C(a0) move.b byte_32D08B(pc,d0.w),d0 and.b #$FC,$22(a0) or.b d0,$22(a0) cmp.b #1,d1 beq.s loc_32D0F2 cmp.b #5,d1 bne.s return_32D0F8 loc_32D0F2: ; ... move.w #$400,$32(a0) return_32D0F8: ; ... rts ; End of function sub_32D09A ; =============== S U B R O U T I N E ======================================= sub_32D0FA: ; ... moveq #0,d0 move.b $1C(a0),d0 cmp.b $1D(a0),d0 beq.s loc_32D116 move.b #0,$1B(a0) move.b d0,$1D(a0) move.b #0,$1E(a0) loc_32D116: ; ... subq.b #1,$1E(a0) bpl.s return_32D182 add.w d0,d0 add.w (a1,d0.w),a1 move.b ($FFFFDB21).w,d0 lsr.b #1,d0 move.b d0,$1E(a0) cmp.b #0,$1C(a0) bne.s loc_32D14E sub.b #1,$33(a0) bgt.s loc_32D14E bchg #0,$22(a0) bchg #0,1(a0) move.b $32(a0),$33(a0) loc_32D14E: ; ... moveq #0,d1 move.b $1B(a0),d1 move.b 1(a1,d1.w),d0 bpl.s loc_32D164 move.b #0,$1B(a0) loc_32D160: move.b 1(a1),d0 loc_32D164: ; ... and.b #$7F,d0 move.b d0,$1A(a0) move.b $22(a0),d1 and.b #3,d1 and.b #%11111100,1(a0) or.b d1,1(a0) addq.b #1,$1B(a0) return_32D182: ; ... rts ; End of function sub_32D0FA ; =============== S U B R O U T I N E ======================================= sub_32D184: ; ... move.w $14(a0),d2 move.b (a2),d0 btst #2,d0 bne.s loc_32D1D6 btst #3,d0 bne.w loc_32D1E6 bset #6,$22(a0) bne.s loc_32D1A6 move.b #$1E,$37(a0) loc_32D1A6: ; ... move.b $26(a0),d0 bmi.s loc_32D1BE sub.b #$38,d0 cmp.b #$10,d0 bcc.s loc_32D1BE move.w d2,d1 asr.w #3,d1 sub.w d1,d2 bra.s loc_32D1C4 ; --------------------------------------------------------------------------- loc_32D1BE: ; ... move.w d2,d1 asr.w #3,d1 sub.w d1,d2 loc_32D1C4: ; ... move.w d2,$14(a0) move.b $37(a0),d0 beq.s return_32D1D4 subq.b #1,d0 move.b d0,$37(a0) return_32D1D4: ; ... rts ; --------------------------------------------------------------------------- loc_32D1D6: ; ... add.w #$60,d2 cmp.w #$600,d2 ble.s loc_32D1F4 move.w #$600,d2 bra.s loc_32D1F4 ; --------------------------------------------------------------------------- loc_32D1E6: ; ... sub.w #$60,d2 cmp.w #-$600,d2 bge.s loc_32D1F4 move.w #-$600,d2 loc_32D1F4: ; ... move.w d2,$14(a0) bclr #6,$22(a0) clr.b $37(a0) rts ; End of function sub_32D184 ; =============== S U B R O U T I N E ======================================= sub_32D204: ; ... tst.b $37(a0) bne.s loc_32D21E move.b $26(a0),d0 jsr CalcSine muls.w #$50,d1 asr.l #8,d1 add.w d1,$14(a0) loc_32D21E: ; ... move.b $26(a0),d0 bpl.s return_32D242 add.b #4,d0 cmp.b #$88,d0 bcs.s return_32D242 move.w $14(a0),d0 bpl.s loc_32D236 neg.w d0 loc_32D236: ; ... cmp.w #$100,d0 bcc.s return_32D242 move.b #8,$24(a0) return_32D242: ; ... rts ; End of function sub_32D204 ; =============== S U B R O U T I N E ======================================= sub_32D244: ; ... moveq #0,d0 moveq #0,d1 move.w $14(a0),d2 bpl.s loc_32D258 neg.w d2 lsr.w #8,d2 sub.b d2,$26(a0) bra.s loc_32D25E ; --------------------------------------------------------------------------- loc_32D258: ; ... lsr.w #8,d2 add.b d2,$26(a0) loc_32D25E: ; ... move.b $26(a0),d0 jsr CalcSine muls.w $34(a0),d1 asr.l #8,d1 move.w d1,$2A(a0) muls.w $34(a0),d0 asr.l #8,d0 move.w d0,$2E(a0) rts ; End of function sub_32D244 ; =============== S U B R O U T I N E ======================================= sub_32D27E: ; ... move.w $2A(a0),d0 muls.w #$CC,d0 asr.l #8,d0 add.w ($FFFFF73E).w,d0 move.w d0,8(a0) move.w $2E(a0),d0 add.w ($FFFFF740).w,d0 move.w d0,$C(a0) rts ; End of Special Stage Knuckles object ; End of function sub_32D27E ; =============== S U B R O U T I N E ======================================= Obj63: ; ... move.l $38(a0),a1 cmp.l #$FFFFB000,a1 bne.s loc_32D2B8 move.l #$FFFFB000,a1 bsr.s sub_32D2CA jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32D2B8: ; ... move.l #$FFFFB040,a1 bsr.s sub_32D2CA bsr.w sub_32D3B8 jmp DisplaySprite ; End of function Obj63 ; =============== S U B R O U T I N E ======================================= sub_32D2CA: ; ... cmp.b #2,$24(a1) beq.w loc_32D306 bsr.w sub_32CEFC move.b $26(a0),d0 jsr CalcSine muls.w $34(a1),d1 muls.w #$CC,d1 swap d1 add.w ($FFFFF73E).w,d1 move.w d1,8(a0) muls.w $34(a1),d0 asr.l #8,d0 add.w ($FFFFF740).w,d0 move.w d0,$C(a0) bra.w loc_32D318 ; --------------------------------------------------------------------------- loc_32D306: ; ... move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.b $26(a1),$26(a0) loc_32D318: ; ... moveq #0,d0 move.b $26(a0),d0 sub.b #$10,d0 lsr.b #5,d0 move.b d0,d1 lsl.w #3,d0 lea byte_32D378(pc),a2 add.w d0,a2 move.w (a2)+,2(a0) move.w (a2)+,d0 add.w d0,8(a0) move.w (a2)+,d0 add.w d0,$C(a0) move.b (a2)+,$1A(a0) move.b 1(a0),d0 and.b #$FC,d0 or.b (a2)+,d0 move.b d0,1(a0) tst.b $26(a0) bpl.s return_32D376 cmp.b #3,d1 beq.s loc_32D362 cmp.b #7,d1 bne.s loc_32D368 loc_32D362: ; ... add.b #3,$1A(a0) loc_32D368: ; ... move.w ($FFFFF740).w,d1 sub.w $C(a0),d1 add.w d1,d1 add.w d1,$C(a0) return_32D376: ; ... rts ; End of function sub_32D2CA ; --------------------------------------------------------------------------- byte_32D378: dc.b $62, $62, 0, $14, 0, $14, 1, 1, $62, $3C; 0 ; ... dc.b 0, 0, 0, $18, 0, 0, $62, $62, -1,-$14; 10 dc.b 0, $14, 1, 0, $62,-$64, -1,-$14, 0, 0; 20 dc.b 2, 0, $62, $62, -1,-$14, -1,-$14, 7, 0; 30 dc.b $62, $3C, 0, 0, -1,-$18, 9, 0, $62, $62; 40 dc.b 0, $14, -1,-$14, 7, 1, $62,-$64, 0, $14; 50 dc.b 0, 0, 2, 1 ; 60 ; =============== S U B R O U T I N E ======================================= sub_32D3B8: ; ... cmp.b #1,$1C(a1) bne.s return_32D3DE move.b $22(a1),d1 and.w #3,d1 cmp.b #2,d1 bcc.s return_32D3DE move.b word_32D3E0(pc,d1.w),d0 ext.w d0 add.w d0,8(a0) loc_32D3D8: sub.w #4,$C(a0) return_32D3DE: ; ... rts ; End of function sub_32D3B8 ; --------------------------------------------------------------------------- word_32D3E0: dc.w $4FC Ani_Obj09: dc.w byte_32D3EC-Ani_Obj09,byte_32D3F2-Ani_Obj09,byte_32D3FC-Ani_Obj09; 0 ; ... dc.w byte_32D402-Ani_Obj09,byte_32D406-Ani_Obj09; 3 byte_32D3EC: dc.b 3, 0, 1, 2, 3, -1; 0 ; ... byte_32D3F2: dc.b 3, 4, 5, 6, 7, 8, 9, $A, $B, -1; 0 ; ... byte_32D3FC: dc.b 3, $C, $D, $E, $F, -1; 0 ; ... byte_32D402: dc.b 1, $10, $11, -1 ; 0 ; ... byte_32D406: dc.b 3, 0, 4, $C, 4, 0, 4, $C, 4, -1; 0 ; ... Map_Obj09: dc.w byte_32D434-Map_Obj09,byte_32D448-Map_Obj09,byte_32D45C-Map_Obj09; 0 ; ... dc.w byte_32D470-Map_Obj09,byte_32D484-Map_Obj09,byte_32D4A4-Map_Obj09; 3 dc.w byte_32D4C4-Map_Obj09,byte_32D4E4-Map_Obj09,byte_32D504-Map_Obj09; 6 dc.w byte_32D524-Map_Obj09,byte_32D53E-Map_Obj09,byte_32D55E-Map_Obj09; 9 dc.w byte_32D57E-Map_Obj09,byte_32D592-Map_Obj09,byte_32D5A0-Map_Obj09; 12 dc.w byte_32D5B4-Map_Obj09,byte_32D5C8-Map_Obj09,byte_32D5E2-Map_Obj09; 15 byte_32D434: dc.b 0, 3,-$1C, $F,-$80, 0, -1,-$10, 4, $D; 0 ; ... dc.b -$80, $10, -1,-$10, $14, 4,-$80, $18, -1,-$10; 10 byte_32D448: dc.b 0, 3,-$1C, $F,-$80, 0, -1,-$10, 4, 8; 0 ; ... dc.b -$80, $10, -1, -8, $C, 5,-$80, $13, -1, -8; 10 byte_32D45C: dc.b 0, 3,-$1C, $F,-$80, 0, -1,-$10, 4, $C; 0 ; ... dc.b -$80, $10, -1,-$10, $C, 9,-$80, $14, -1,-$10; 10 byte_32D470: dc.b 0, 3,-$1C, $F,-$80, 0, -1,-$10, 4, 8; 0 ; ... dc.b -$80, $10, -1,-$10, $C, 9,-$80, $13, -1, -8; 10 byte_32D484: dc.b 0, 5,-$1C, 8,-$80, 0, -1, -4,-$14, 6; 0 ; ... dc.b -$80, 3, 0, $C,-$14, 9,-$80, 9, -1, -$C; 10 dc.b -4, $E,-$80, $F, -1,-$1C, -4, 2,-$80, $1B; 20 dc.b 0, 4 ; 30 byte_32D4A4: dc.b 0, 5,-$1C, $E,-$80, 0, -1, -4,-$14, 1; 0 ; ... dc.b -$80, $C, -1, -$C, -4, $E,-$80, $E, -1,-$14; 10 dc.b -4, 0,-$80, $1A, 0, $C, 4, 1,-$80, $1B; 20 dc.b -1,-$1C ; 30 byte_32D4C4: dc.b 0, 5,-$1C, $E,-$80, 0, -1, -4,-$14, 6; 0 ; ... dc.b -$80, $C, -1,-$14, -4, 9,-$80, $12, -1, -4; 10 dc.b 4, 9,-$80, $18, -1,-$1C, $14, 4,-$80, $1E; 20 dc.b -1,-$14 ; 30 byte_32D4E4: dc.b 0, 5,-$1C, 8,-$80, 0, -1, -4,-$14, $F; 0 ; ... dc.b -$80, 3, -1,-$14,-$14, 6,-$80, $13, 0, $C; 10 dc.b 4, 0,-$80, $19, -1,-$1C, $C, 5,-$80, $1A; 20 dc.b -1,-$14 ; 30 byte_32D504: dc.b 0, 5, -$C, $F,-$80, 0, -1,-$14,-$1C, 8; 0 ; ... dc.b -$80, $10, -1, -4,-$14, 8,-$80, $13, -1, -$C; 10 dc.b -$14, 6,-$80, $16, 0, $C, $14, 4,-$80, $1C; 20 dc.b -1,-$14 ; 30 byte_32D524: dc.b 0, 4,-$1C, $F,-$80, 0, -1, -4,-$14, 6; 0 ; ... dc.b -$80, $10, -1,-$14, 4, 9,-$80, $16, -1,-$1C; 10 dc.b 4, 4,-$80, $1C, -1, -4; 20 byte_32D53E: dc.b 0, 5,-$1C, $E,-$80, 0, -1, -4,-$14, 6; 0 ; ... dc.b -$80, $C, -1,-$14, -4, 8,-$80, $12, -1, -4; 10 dc.b 4, $D,-$80, $15, -1,-$1C, 4, 0,-$80, $1D; 20 dc.b 0, 4 ; 30 byte_32D55E: dc.b 0, 5,-$1C, $E,-$80, 0, -1, -4,-$14, 1; 0 ; ... dc.b -$80, $C, -1, -$C, -4, $E,-$80, $E, -1,-$14; 10 dc.b -4, 0,-$80, $1A, 0, $C, 4, 1,-$80, $1B; 20 dc.b -1,-$1C ; 30 byte_32D57E: dc.b 0, 3,-$10, $E,-$80, 0, -1,-$18,-$10, 7; 0 ; ... dc.b -$80, $C, 0, 8, 8, 8,-$80, $14, -1,-$10; 10 byte_32D592: dc.b 0, 2, -8, 5,-$80, 0, -1,-$18,-$10, $F; 0 ; ... dc.b -$80, 4, -1, -8 ; 10 byte_32D5A0: dc.b 0, 3,-$10, $E,-$80, 0, -1,-$18,-$10, 7; 0 ; ... dc.b -$80, $C, 0, 8, 8, 4,-$80, $14, -1, -8; 10 byte_32D5B4: dc.b 0, 3, -8, 5,-$80, 0, -1,-$18,-$10, $F; 0 ; ... dc.b -$80, 4, -1, -8, 8, 0,-$80, $14, -1,-$18; 10 byte_32D5C8: dc.b 0, 4,-$14, 6,-$80, 0, -1,-$10,-$14, 6; 0 ; ... dc.b -$78, 6, 0, 0, 4, 5,-$80, $C, -1,-$10; 10 dc.b 4, 5,-$78, $10, 0, 0; 20 byte_32D5E2: dc.b 0, 4,-$14, 6,-$80, 0, -1,-$10,-$14, 6; 0 ; ... dc.b -$78, 6, 0, 0, 4, 5,-$80, $C, -1,-$10; 10 dc.b 4, 5,-$78, $10, 0, 0; 20 Map_Obj63: dc.w byte_32D680-Map_Obj63,byte_32D6D0-Map_Obj63,byte_32D720-Map_Obj63; 0 ; ... dc.w byte_32D678-Map_Obj63,byte_32D6C8-Map_Obj63,byte_32D718-Map_Obj63; 3 dc.w byte_32D670-Map_Obj63,byte_32D6C0-Map_Obj63,byte_32D710-Map_Obj63; 6 dc.w byte_32D668-Map_Obj63,byte_32D6B8-Map_Obj63,byte_32D708-Map_Obj63; 9 dc.w byte_32D660-Map_Obj63,byte_32D6B0-Map_Obj63,byte_32D700-Map_Obj63; 12 dc.w byte_32D658-Map_Obj63,byte_32D6A8-Map_Obj63,byte_32D6F8-Map_Obj63; 15 dc.w byte_32D650-Map_Obj63,byte_32D6A0-Map_Obj63,byte_32D6F0-Map_Obj63; 18 dc.w byte_32D648-Map_Obj63,byte_32D698-Map_Obj63,byte_32D6E8-Map_Obj63; 21 dc.w byte_32D640-Map_Obj63,byte_32D690-Map_Obj63,byte_32D6E0-Map_Obj63; 24 dc.w byte_32D638-Map_Obj63,byte_32D688-Map_Obj63,byte_32D6D8-Map_Obj63; 27 byte_32D638: dc.b 0, 1, -4, 0,-$80, 0, -1, -4; 0 ; ... byte_32D640: dc.b 0, 1, -4, 0,-$80, 1, -1, -4; 0 ; ... byte_32D648: dc.b 0, 1, -4, 4,-$80, 2, -1, -8; 0 ; ... byte_32D650: dc.b 0, 1, -4, 4,-$80, 4, -1, -8; 0 ; ... byte_32D658: dc.b 0, 1, -4, 4,-$80, 6, -1, -8; 0 ; ... byte_32D660: dc.b 0, 1, -4, 8,-$80, 8, -1, -$C; 0 ; ... byte_32D668: dc.b 0, 1, -4, 8,-$80, $B, -1, -$C; 0 ; ... byte_32D670: dc.b 0, 1, -8, $D,-$80, $E, -1,-$10; 0 ; ... byte_32D678: dc.b 0, 1, -8, $D,-$80, $16, -1,-$10; 0 ; ... byte_32D680: dc.b 0, 1, -8, $D,-$80, $1E, -1,-$10; 0 ; ... byte_32D688: dc.b 0, 1, -4, 0,-$80, 0, -1, -4; 0 ; ... byte_32D690: dc.b 0, 1, -4, 0,-$80, 1, -1, -4; 0 ; ... byte_32D698: dc.b 0, 1, -4, 0,-$80, 2, -1, -4; 0 ; ... byte_32D6A0: dc.b 0, 1, -8, 5,-$80, 3, -1, -8; 0 ; ... byte_32D6A8: dc.b 0, 1, -8, 5,-$80, 7, -1, -8; 0 ; ... byte_32D6B0: dc.b 0, 1, -$C, 5,-$80, $B, -1, -4; 0 ; ... byte_32D6B8: dc.b 0, 1, -$C, $A,-$80, $F, -1, -$C; 0 ; ... byte_32D6C0: dc.b 0, 1, -$C, $A,-$80, $18, -1, -$C; 0 ; ... byte_32D6C8: dc.b 0, 1,-$10, $A,-$80, $21, -1, -8; 0 ; ... byte_32D6D0: dc.b 0, 1,-$10, $F,-$80, $2A, -1,-$10; 0 ; ... byte_32D6D8: dc.b 0, 1, -4, 0,-$80, 0, -1, -4; 0 ; ... byte_32D6E0: dc.b 0, 1, -4, 0,-$80, 1, -1, -4; 0 ; ... byte_32D6E8: dc.b 0, 1, -8, 1,-$80, 2, -1, -4; 0 ; ... byte_32D6F0: dc.b 0, 1, -8, 1,-$80, 4, -1, -4; 0 ; ... byte_32D6F8: dc.b 0, 1, -8, 1,-$80, 6, -1, -4; 0 ; ... byte_32D700: dc.b 0, 1, -$C, 2,-$80, 8, -1, -4; 0 ; ... byte_32D708: dc.b 0, 1, -$C, 2,-$80, $B, -1, -4; 0 ; ... byte_32D710: dc.b 0, 1, -$C, 2,-$80, $E, -1, -4; 0 ; ... byte_32D718: dc.b 0, 1,-$10, 3,-$80, $11, -1, -4; 0 ; ... byte_32D720: dc.b 0, 1,-$10, 3,-$80, $15, -1, -4; 0 ; ... Knuckles_SpecialStage_DPLC:dc.w byte_32D74C-Knuckles_SpecialStage_DPLC; 0 ; ... dc.w byte_32D754-Knuckles_SpecialStage_DPLC; 1 dc.w byte_32D75C-Knuckles_SpecialStage_DPLC; 2 dc.w byte_32D764-Knuckles_SpecialStage_DPLC; 3 dc.w byte_32D76C-Knuckles_SpecialStage_DPLC; 4 dc.w byte_32D778-Knuckles_SpecialStage_DPLC; 5 dc.w byte_32D784-Knuckles_SpecialStage_DPLC; 6 dc.w byte_32D790-Knuckles_SpecialStage_DPLC; 7 dc.w byte_32D79C-Knuckles_SpecialStage_DPLC; 8 dc.w byte_32D7A8-Knuckles_SpecialStage_DPLC; 9 dc.w byte_32D7B2-Knuckles_SpecialStage_DPLC; 10 dc.w byte_32D7BE-Knuckles_SpecialStage_DPLC; 11 dc.w byte_32D7CA-Knuckles_SpecialStage_DPLC; 12 dc.w byte_32D7D2-Knuckles_SpecialStage_DPLC; 13 dc.w byte_32D7D8-Knuckles_SpecialStage_DPLC; 14 dc.w byte_32D7E0-Knuckles_SpecialStage_DPLC; 15 dc.w byte_32D7E8-Knuckles_SpecialStage_DPLC; 16 dc.w byte_32D7F2-Knuckles_SpecialStage_DPLC; 17 byte_32D74C: dc.b 0, 3,-$10, 0, $70, $10, $10, $18; 0 ; ... byte_32D754: dc.b 0, 3,-$10, $1A, $20, $2A, $30, $2D; 0 ; ... byte_32D75C: dc.b 0, 3,-$10, $31, $30, $41, $50, $45; 0 ; ... byte_32D764: dc.b 0, 3,-$10, $4B, $20, $5B, $50, $5E; 0 ; ... byte_32D76C: dc.b 0, 5, $20, $64, $50, $67, $50, $6D,-$50, $73; 0 ; ... dc.b $20, $7F ; 10 byte_32D778: dc.b 0, 5,-$50,-$7E, $10,-$72,-$50,-$70, 0,-$64; 0 ; ... dc.b $10,-$63 ; 10 byte_32D784: dc.b 0, 5,-$50,-$61, $50,-$55, $50,-$4F, $50,-$49; 0 ; ... dc.b $10,-$43 ; 10 byte_32D790: dc.b 0, 5, $20,-$41,-$10,-$3E, $50,-$2E, 0,-$28; 0 ; ... dc.b $30,-$27 ; 10 byte_32D79C: dc.b 0, 5,-$10,-$23, $20,-$13, $20,-$10, $50, -$D; 0 ; ... dc.b $10, -7 ; 10 byte_32D7A8: dc.b 0, 4,-$10, -5, $51, $B, $51, $11, $11, $17; 0 ; ... byte_32D7B2: dc.b 0, 5,-$4F, $19, $51, $25, $21, $2B, $71, $2E; 0 ; ... dc.b 1, $36 ; 10 byte_32D7BE: dc.b 0, 5,-$4F, $37, $11, $43,-$4F, $45, 1, $51; 0 ; ... dc.b $11, $52 ; 10 byte_32D7CA: dc.b 0, 3,-$4F, $54, $71, $60, $21, $68; 0 ; ... byte_32D7D2: dc.b 0, 2, $31, $6B, -$F, $6F; 0 ; ... byte_32D7D8: dc.b 0, 3,-$4F, $7F, $71,-$75, $11,-$6D; 0 ; ... byte_32D7E0: dc.b 0, 3, $31,-$6B, -$F,-$67, 1,-$57; 0 ; ... byte_32D7E8: dc.b 0, 4, $51,-$56, $51,-$56, $31,-$50, $31,-$50; 0 ; ... byte_32D7F2: dc.b 0, 4, $51,-$4C, $51,-$4C, $31,-$50, $31,-$50; 0 ; ... ; --------------------------------------------------------------------------- ; -------------------------------------------------------- ; Object 10 - Leftovers of Tails on the Special Stage ; -------------------------------------------------------- Obj10: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32D80A(pc,d0.w),d1 jmp off_32D80A(pc,d1.w) ; --------------------------------------------------------------------------- off_32D80A: dc.w loc_32D814-off_32D80A,loc_32D918-off_32D80A,loc_32DA04-off_32D80A; 0 ; ... dc.w off_32D80A-off_32D80A,loc_32DA36-off_32D80A; 3 ; --------------------------------------------------------------------------- loc_32D814: ; ... addq.b #2,$24(a0) moveq #0,d0 move.w d0,$2A(a0) move.w #$80,d1 move.w d1,$2E(a0) add.w ($FFFFF73E).w,d0 move.w d0,8(a0) add.w ($FFFFF740).w,d1 move.w d1,$C(a0) move.b #$E,$16(a0) move.b #7,$17(a0) move.l #Map_Obj10,4(a0) move.w #$4300,2(a0) move.b #4,1(a0) move.b #2,$18(a0) move.w #$80,$34(a0) tst.w ($FFFFFF70).w beq.s loc_32D874 move.b #3,$18(a0) move.w #$6E,$34(a0) loc_32D874: ; ... move.w #$400,$32(a0) move.b #$40,$26(a0) move.b #1,($FFFFF7DE).w clr.b $21(a0) clr.b $23(a0) bsr.w sub_32D9D8 move.l #$FFFFB180,a1 move.b #$63,(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #$18,$C(a1) move.l #Map_Obj63,4(a1) move.w #$623C,2(a1) move.b #4,1(a1) move.b #4,$18(a1) move.l a0,$38(a1) move.l #$FFFFB1C0,a1 move.b #$88,(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.l #Map_Obj10_0,4(a1) move.w #$4316,2(a1) move.b #4,1(a1) move.b $18(a0),$18(a1) sub.b #1,$18(a1) move.l a0,$38(a1) move.l a1,a0 move.b #1,($FFFFF7DF).w clr.b $23(a0) move.l $38(a0),a0 rts ; --------------------------------------------------------------------------- loc_32D918: ; ... tst.b $25(a0) bne.s loc_32D96E bsr.w sub_32D982 lea ($FFFFF66A).w,a2 tst.w ($FFFFFF70).w beq.s loc_32D930 lea ($FFFFF602).w,a2 loc_32D930: ; ... bsr.w sub_32D184 bsr.w sub_32D204 moveq #1,d0 bsr.w sub_32D03E bsr.w sub_32D244 bsr.w sub_32D27E lea ($FFFFF66B).w,a2 tst.w ($FFFFFF70).w beq.s loc_32D954 lea ($FFFFF603).w,a2 loc_32D954: ; ... bsr.w loc_32CD3E bsr.w sub_32D09A lea (off_32DB32).l,a1 bsr.w sub_32D0FA bsr.w sub_32CFF6 bra.w sub_32D9D8 ; --------------------------------------------------------------------------- loc_32D96E: ; ... bsr.w sub_32CC44 bsr.w sub_32D03E bsr.w sub_32D244 bsr.w sub_32D27E bra.w sub_32D9D8 ; =============== S U B R O U T I N E ======================================= sub_32D982: ; ... tst.b ($FFFFFE00).w bne.s return_32D98E tst.w ($FFFFFF70).w beq.s loc_32D990 return_32D98E: ; ... rts ; --------------------------------------------------------------------------- loc_32D990: ; ... move.b ($FFFFF66A).w,d0 and.b #$7F,d0 beq.s loc_32D9B2 moveq #0,d0 moveq #3,d1 lea ($FFFFDB62).w,a1 loc_32D9A2: ; ... move.l d0,(a1) move.l d0,(a1) dbf d1,loc_32D9A2 move.w #$B4,($FFFFF702).w rts ; --------------------------------------------------------------------------- loc_32D9B2: ; ... tst.w ($FFFFF702).w beq.s loc_32D9BE subq.w #1,($FFFFF702).w rts ; --------------------------------------------------------------------------- loc_32D9BE: ; ... lea ($FFFFDB80).w,a1 move.w (a1),($FFFFF66A).w rts ; End of function sub_32D982 ; --------------------------------------------------------------------------- dword_32D9C8: dc.l $FF3060 ; ... dc.l $FF3800 dc.l $FF4C80 dc.l $FF53C0 ; =============== S U B R O U T I N E ======================================= sub_32D9D8: ; ... move.b $23(a0),d0 beq.s loc_32D9EC subq.b #1,d0 move.b d0,$23(a0) and.b #1,d0 beq.s loc_32D9EC rts ; --------------------------------------------------------------------------- loc_32D9EC: ; ... jsr DisplaySprite lea dword_32D9C8(pc),a3 lea ($FFFFF7DE).w,a4 move.w #$6000,d4 moveq #$12,d1 bra.w loc_32CCF0 ; End of function sub_32D9D8 ; --------------------------------------------------------------------------- loc_32DA04: ; ... lea ($FFFFF66A).w,a2 tst.w ($FFFFFF70).w beq.s loc_32DA12 lea ($FFFFF602).w,a2 loc_32DA12: ; ... bsr.w sub_32CE2C bsr.w sub_32CE00 bsr.w sub_32CFAE bsr.w sub_32D03E bsr.w sub_32D27E bsr.w sub_32CE4E lea (off_32DB32).l,a1 bsr.w sub_32D0FA bra.s sub_32D9D8 ; --------------------------------------------------------------------------- loc_32DA36: ; ... lea ($FFFFF66A).w,a2 tst.w ($FFFFFF70).w beq.s loc_32DA44 lea ($FFFFF602).w,a2 loc_32DA44: ; ... bsr.w sub_32CE2C bsr.w sub_32CE00 bsr.w sub_32CE4E bsr.w sub_32CFAE bsr.w sub_32D03E bsr.w sub_32D27E bsr.w sub_32D09A lea (off_32DB32).l,a1 bsr.w sub_32D0FA bra.w sub_32D9D8 ; --------------------------------------------------------------------------- Obj88: ; ... move.l $38(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.b 1(a1),1(a0) move.b $22(a1),$22(a0) move.b $1C(a1),$1C(a0) move.b $18(a1),d0 subq.b #1,d0 move.b d0,$18(a0) cmp.b #3,$1C(a0) bcc.s return_32DAB2 lea (Ani_Obj88).l,a1 jsr AnimateSprite bra.w loc_32DAC0 ; --------------------------------------------------------------------------- return_32DAB2: ; ... rts ; --------------------------------------------------------------------------- dword_32DAB4: dc.l $FF55C0, $FF5C60, $FF63C0; 0 ; ... ; --------------------------------------------------------------------------- loc_32DAC0: ; ... move.l $38(a0),a1 move.b $23(a1),d0 beq.s loc_32DAD2 and.b #1,d0 beq.s loc_32DAD2 rts ; --------------------------------------------------------------------------- loc_32DAD2: ; ... jsr DisplaySprite moveq #0,d0 move.b $1A(a0),d0 cmp.b ($FFFFF7DF).w,d0 beq.s return_32DB30 move.b d0,($FFFFF7DF).w moveq #0,d6 cmp.b #7,d0 blt.s loc_32DAFA addq.w #4,d6 cmp.b #$E,d0 blt.s loc_32DAFA addq.w #4,d6 loc_32DAFA: ; ... move.l dword_32DAB4(pc,d6.w),d6 add.w #$24,d0 add.w d0,d0 lea (Knuckles_SpecialStage_DPLC).l,a2 add.w (a2,d0.w),a2 move.w #$62C0,d2 moveq #0,d1 move.w (a2)+,d1 move.w d1,d3 lsr.w #8,d3 and.w #$F0,d3 add.w #$10,d3 and.w #$FFF,d1 lsl.w #1,d1 add.l d6,d1 jsr QueueDMATransfer return_32DB30: ; ... rts ; --------------------------------------------------------------------------- off_32DB32: dc.w byte_32DB3A-off_32DB32,byte_32DB40-off_32DB32,byte_32DB4A-off_32DB32; 0 ; ... dc.w byte_32DB50-off_32DB32 ; 3 byte_32DB3A: dc.b 3, 0, 1, 2, 3, -1; 0 ; ... byte_32DB40: dc.b 3, 4, 5, 6, 7, 8, 9, $A, $B, -1; 0 ; ... byte_32DB4A: dc.b 3, $C, $D, $E, $F, -1; 0 ; ... byte_32DB50: dc.b 1, $10, $11, -1 ; 0 ; ... Map_Obj10: dc.w byte_32DB78-Map_Obj10,byte_32DB8C-Map_Obj10,byte_32DBA6-Map_Obj10; 0 ; ... dc.w byte_32DBC0-Map_Obj10,byte_32DBE0-Map_Obj10,byte_32DBF4-Map_Obj10; 3 dc.w byte_32DC0E-Map_Obj10,byte_32DC2E-Map_Obj10,byte_32DC48-Map_Obj10; 6 dc.w byte_32DC62-Map_Obj10,byte_32DC82-Map_Obj10,byte_32DCA2-Map_Obj10; 9 dc.w byte_32DCBC-Map_Obj10,byte_32DCCA-Map_Obj10,byte_32DCDE-Map_Obj10; 12 dc.w byte_32DCEC-Map_Obj10,byte_32DD00-Map_Obj10,byte_32DD0E-Map_Obj10; 15 byte_32DB78: dc.b 0, 3,-$18, $A,-$80, 0, -1, -$C, 0, 9; 0 ; ... dc.b -$80, 9, -1, -$C, $10, 0,-$80, $F, -1, -$C; 10 byte_32DB8C: dc.b 0, 4,-$18, $C,-$80, 0, -1,-$10,-$10, 9; 0 ; ... dc.b -$80, 4, -1, -$D, 0, $C,-$80, $A, -1,-$10; 10 dc.b 8, 5,-$80, $E, -1, -8; 20 byte_32DBA6: dc.b 0, 4,-$18, $C,-$80, 0, -1,-$10,-$10, 9; 0 ; ... dc.b -$80, 4, -1, -$D, 0, $C,-$80, $A, -1,-$10; 10 dc.b 8, 5,-$80, $E, -1, -8; 20 byte_32DBC0: dc.b 0, 5,-$18, $C,-$78, 0, -1,-$10,-$10, 9; 0 ; ... dc.b -$78, 4, -1, -$B, 0, $C,-$80, $A, -1,-$10; 10 dc.b 8, 5,-$80, $E, -1, -8, $10, 0,-$80, $12; 20 dc.b 0, 8 ; 30 byte_32DBE0: dc.b 0, 3,-$1F, 5,-$80, 0, 0, 0, -$F, $D; 0 ; ... dc.b -$80, 4, -1, -8, 1, $D,-$80, $C, -1,-$14; 10 byte_32DBF4: dc.b 0, 4,-$1F, 1,-$80, 0, 0, 0, -$F, $D; 0 ; ... dc.b -$80, 2, -1, -9, 1, $A,-$80, $A, -1,-$11; 10 dc.b 1, 1,-$80, $13, 0, 7; 20 byte_32DC0E: dc.b 0, 5,-$18, 0,-$80, 0, 0, 0,-$14, 8; 0 ; ... dc.b -$80, 1, -1, -8, -$C, $D,-$80, 4, -1,-$10; 10 dc.b -$C, 0,-$80, $C, 0, $10, 4, 9,-$80, $D; 20 dc.b -1,-$10 ; 30 byte_32DC2E: dc.b 0, 4,-$17, 0,-$80, 0, 0, 1, -$F, $F; 0 ; ... dc.b -$80, 1, -1,-$10, -7, 0,-$80, $11, 0, $10; 10 dc.b $11, 4,-$80, $12, -1,-$10; 20 byte_32DC48: dc.b 0, 4,-$1E, 5,-$80, 0, 0, 0, -$E, $C; 0 ; ... dc.b -$80, 4, -1, -8, -6, 7,-$80, 8, -1,-$10; 10 dc.b -6, 9,-$80, $10, 0, 0; 20 byte_32DC62: dc.b 0, 5,-$18, 0,-$80, 0, 0, 0,-$10, $D; 0 ; ... dc.b -$80, 1, -1,-$10, -8, 0,-$80, 9, 0, $10; 10 dc.b 0, $D,-$80, $A, -1,-$10, $10, 4,-$80, $12; 20 dc.b -1,-$10 ; 30 byte_32DC82: dc.b 0, 5,-$18, 0,-$80, 0, 0, 0,-$10, $E; 0 ; ... dc.b -$80, 1, -1,-$10, -8, 0,-$80, $D, 0, $10; 10 dc.b 8, $C,-$80, $E, -1,-$18, $10, 4,-$80, $12; 20 dc.b -1,-$10 ; 30 byte_32DCA2: dc.b 0, 4,-$18, 0,-$80, 0, 0, 0,-$10, $E; 0 ; ... dc.b -$80, 1, -1,-$10, -8, 0,-$80, $D, 0, $10; 10 dc.b 8, $D,-$80, $E, -1,-$18; 20 byte_32DCBC: dc.b 0, 2, -8, $A,-$80, 0, -1,-$14,-$10, 7; 0 ; ... dc.b -$80, 9, 0, 4 ; 10 byte_32DCCA: dc.b 0, 3, -8, 5,-$80, 0, -1,-$14, 8, 0; 0 ; ... dc.b -$80, 4, -1, -$C,-$10, $B,-$80, 5, -1, -4; 10 byte_32DCDE: dc.b 0, 2, -9, 1,-$80, 0, -1,-$14,-$10, $F; 0 ; ... dc.b -$80, 2, -1, -$C ; 10 byte_32DCEC: dc.b 0, 3, -8, 2,-$80, 0, -1,-$14,-$10, 2; 0 ; ... dc.b -$80, 3, -1, -$C,-$10, $B,-$80, 6, -1, -4; 10 byte_32DD00: dc.b 0, 2,-$10, 7,-$80, 0, -1,-$10,-$10, 7; 0 ; ... dc.b -$78, 0, 0, 0 ; 10 byte_32DD0E: dc.b 0, 2,-$10, 7,-$80, 0, -1,-$10,-$10, 7; 0 ; ... dc.b -$78, 0, 0, 0 ; 10 Ani_Obj88: dc.w byte_32DD22-Ani_Obj88,byte_32DD2B-Ani_Obj88,byte_32DD34-Ani_Obj88; 0 ; ... byte_32DD22: dc.b 3, 0, 1, 2, 3, 4, 5, 6, -1; 0 ; ... byte_32DD2B: dc.b 3, 7, 8, 9, $A, $B, $C, $D, -1; 0 ; ... byte_32DD34: dc.b 3, $E, $F, $10, $11, $12, $13, $14, -1, 0; 0 ; ... Map_Obj10_0: dc.w byte_32DD68-Map_Obj10_0,byte_32DD70-Map_Obj10_0,byte_32DD78-Map_Obj10_0; 0 ; ... dc.w byte_32DD80-Map_Obj10_0,byte_32DD88-Map_Obj10_0,byte_32DD90-Map_Obj10_0; 3 dc.w byte_32DD98-Map_Obj10_0,byte_32DDA0-Map_Obj10_0,byte_32DDA8-Map_Obj10_0; 6 dc.w byte_32DDB0-Map_Obj10_0,byte_32DDB8-Map_Obj10_0,byte_32DDC0-Map_Obj10_0; 9 dc.w byte_32DDC8-Map_Obj10_0,byte_32DDD0-Map_Obj10_0,byte_32DDD8-Map_Obj10_0; 12 dc.w byte_32DDE0-Map_Obj10_0,byte_32DDE8-Map_Obj10_0,byte_32DDF0-Map_Obj10_0; 15 dc.w byte_32DDF8-Map_Obj10_0,byte_32DE00-Map_Obj10_0,byte_32DE08-Map_Obj10_0; 18 byte_32DD68: dc.b 0, 1, -6, 6,-$80, 0, -1, -6; 0 ; ... byte_32DD70: dc.b 0, 1, 0, $A,-$80, 0, -1, -8; 0 ; ... byte_32DD78: dc.b 0, 1, 8, 9,-$80, 0, -1, -8; 0 ; ... byte_32DD80: dc.b 0, 1, -1, 6,-$80, 0, -1, -9; 0 ; ... byte_32DD88: dc.b 0, 1, -9, 7,-$80, 0, -1, -$B; 0 ; ... byte_32DD90: dc.b 0, 1, -9, $A,-$80, 0, -1,-$10; 0 ; ... byte_32DD98: dc.b 0, 1, -9, $A,-$80, 0, -1,-$10; 0 ; ... byte_32DDA0: dc.b 0, 1, 0, $A,-$80, 0, -1, -$C; 0 ; ... byte_32DDA8: dc.b 0, 1, 8, 9,-$80, 0, -1, -$D; 0 ; ... byte_32DDB0: dc.b 0, 1, 0, 6,-$80, 0, -1, -$F; 0 ; ... byte_32DDB8: dc.b 0, 1, -8, 7,-$80, 0, -1, -$C; 0 ; ... byte_32DDC0: dc.b 0, 1, -8, $B,-$80, 0, -1, -$E; 0 ; ... byte_32DDC8: dc.b 0, 1, -8, $A,-$80, 0, -1, -$D; 0 ; ... byte_32DDD0: dc.b 0, 1, -8, $A,-$80, 0, -1, -$C; 0 ; ... byte_32DDD8: dc.b 0, 1, -4, 9,-$80, 0, -1,-$16; 0 ; ... byte_32DDE0: dc.b 0, 1, -8, $A,-$80, 0, -1,-$13; 0 ; ... byte_32DDE8: dc.b 0, 1, -8, 6,-$80, 0, -1,-$13; 0 ; ... byte_32DDF0: dc.b 0, 1, -9, 9,-$80, 0, -1,-$13; 0 ; ... byte_32DDF8: dc.b 0, 1, -$B, $D,-$80, 0, -1,-$1B; 0 ; ... byte_32DE00: dc.b 0, 1,-$10, $A,-$80, 0, -1,-$13; 0 ; ... byte_32DE08: dc.b 0, 1,-$10, $A,-$80, 0, -1,-$13; 0 ; ... ; --------------------------------------------------------------------------- Obj61: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32DE1E(pc,d0.w),d1 jmp off_32DE1E(pc,d1.w) ; --------------------------------------------------------------------------- off_32DE1E: dc.w loc_32DE26-off_32DE1E,loc_32DE66-off_32DE1E,loc_32E2AC-off_32DE1E; 0 ; ... dc.w loc_32DECC-off_32DE1E ; 3 ; --------------------------------------------------------------------------- loc_32DE26: ; ... addq.b #2,$24(a0) move.w #$7F,8(a0) move.w #$58,$C(a0) move.l #Map_Obj61,4(a0) move.w #$438A,2(a0) move.b #4,1(a0) move.b #3,$18(a0) move.b #2,$20(a0) move.b #-1,($FFFFDB4D).w tst.b $26(a0) bmi.s loc_32DE66 bsr.w sub_32E20C loc_32DE66: ; ... bsr.w sub_32E094 bsr.w sub_32E10C lea (Ani_Obj61).l,a1 bsr.w sub_32E314 tst.b 1(a0) bpl.s return_32DE88 bsr.w sub_32DE8A jmp DisplaySprite ; --------------------------------------------------------------------------- return_32DE88: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_32DE8A: ; ... move.w #8,d6 bsr.w sub_32E00A bcc.s return_32DECA move.b #1,$21(a1) move.w #$CB,d0 jsr PlaySoundStereo move.b #6,$24(a0) move.b #0,$1B(a0) move.b #0,$1E(a0) move.l $34(a0),d0 beq.s return_32DECA move.l #0,$34(a0) move.l d0,a1 st $2A(a1) return_32DECA: ; ... rts ; End of function sub_32DE8A ; --------------------------------------------------------------------------- loc_32DECC: ; ... move.b #$A,$1C(a0) move.w #$42B5,2(a0) bsr.w sub_32DEF6 bsr.w sub_32E094 bsr.w sub_32E10C lea (Ani_Obj61).l,a1 jsr AnimateSprite jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32DEF6: ; ... cmp.w #4,$30(a0) bcc.s return_32DF04 move.b #1,$18(a0) return_32DF04: ; ... rts ; End of function sub_32DEF6 ; --------------------------------------------------------------------------- Obj60: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32DF14(pc,d0.w),d1 jmp off_32DF14(pc,d1.w) ; --------------------------------------------------------------------------- off_32DF14: dc.w loc_32DF1C-off_32DF14,loc_32DF56-off_32DF14,loc_32E2AC-off_32DF14; 0 ; ... dc.w loc_32DF76-off_32DF14 ; 3 ; --------------------------------------------------------------------------- loc_32DF1C: ; ... addq.b #2,$24(a0) move.w #$7F,8(a0) move.w #$58,$C(a0) move.l #Map_Obj60,4(a0) move.w #$6322,2(a0) move.b #4,1(a0) move.b #3,$18(a0) move.b #1,$20(a0) tst.b $26(a0) bmi.s loc_32DF56 bsr.w sub_32E20C loc_32DF56: ; ... bsr.w sub_32E094 bsr.w sub_32E10C bsr.w sub_32DFA0 lea (Ani_Obj60).l,a1 bsr.w sub_32E314 tst.b 1(a0) bmi.w loc_32F1A0 rts ; --------------------------------------------------------------------------- loc_32DF76: ; ... move.b #$A,$1C(a0) move.w #$477F,2(a0) bsr.w sub_32DEF6 bsr.w sub_32E094 bsr.w sub_32E10C lea (Ani_Obj60).l,a1 jsr AnimateSprite jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32DFA0: ; ... move.w #$A,d6 bsr.w sub_32E00A bcc.s return_32E008 cmp.l #$FFFFB000,a1 bne.s loc_32DFB8 addq.w #1,($FFFFFE20).w bra.s loc_32DFBC ; --------------------------------------------------------------------------- loc_32DFB8: ; ... addq.w #1,($FFFFFED0).w loc_32DFBC: ; ... addq.b #1,$3E(a1) cmp.b #$A,$3E(a1) blt.s loc_32DFE4 addq.b #1,$3D(a1) move.b #0,$3E(a1) cmp.b #$A,$3D(a1) blt.s loc_32DFE4 addq.b #1,$3C(a1) move.b #0,$3D(a1) loc_32DFE4: ; ... move.b #6,$24(a0) move.l $34(a0),d0 beq.s loc_32DFFE move.l #0,$34(a0) move.l d0,a1 st $2A(a1) loc_32DFFE: ; ... move.w #$B5,d0 jsr PlaySoundStereo return_32E008: ; ... rts ; End of function sub_32DFA0 ; =============== S U B R O U T I N E ======================================= sub_32E00A: ; ... cmp.b #8,$1C(a0) bne.s loc_32E046 tst.b $20(a0) beq.s loc_32E046 lea ($FFFFB000).w,a2 lea ($FFFFB040).w,a3 move.w $34(a2),d0 cmp.w $34(a3),d0 bcs.s loc_32E038 move.l a3,a1 bsr.w sub_32E04C bcs.s return_32E04A move.l a2,a1 bra.w sub_32E04C ; --------------------------------------------------------------------------- loc_32E038: ; ... move.l a2,a1 bsr.w sub_32E04C bcs.s return_32E04A move.l a3,a1 bra.w sub_32E04C ; --------------------------------------------------------------------------- loc_32E046: ; ... move #0,ccr return_32E04A: ; ... rts ; End of function sub_32E00A ; =============== S U B R O U T I N E ======================================= sub_32E04C: ; ... tst.b (a1) beq.s loc_32E084 cmp.b #2,$24(a1) bne.s loc_32E084 tst.b $25(a1) bne.s loc_32E084 move.b $26(a1),d0 move.b $26(a0),d1 move.b d1,d2 add.b d6,d1 bcs.s loc_32E07A sub.b d6,d2 bcs.s loc_32E07C cmp.b d1,d0 bcc.s loc_32E084 cmp.b d2,d0 bcc.s loc_32E08A bra.s loc_32E084 ; --------------------------------------------------------------------------- loc_32E07A: ; ... sub.b d6,d2 loc_32E07C: ; ... cmp.b d1,d0 bcs.s loc_32E08A cmp.b d2,d0 bcc.s loc_32E08A loc_32E084: ; ... move #0,ccr rts ; --------------------------------------------------------------------------- loc_32E08A: ; ... clr.b $20(a0) move #1,ccr rts ; End of function sub_32E04C ; =============== S U B R O U T I N E ======================================= sub_32E094: ; ... ; FUNCTION CHUNK AT 0032F1A6 SIZE 00000006 BYTES btst #7,$22(a0) bne.s loc_32E0D6 cmp.b #4,($FFFFDB0D).w bne.s loc_32E0B0 sub.l #$CCCC,$30(a0) ble.s loc_32E0D6 bra.s loc_32E0BA ; --------------------------------------------------------------------------- loc_32E0B0: ; ... sub.l #$CCCD,$30(a0) ble.s loc_32E0D6 loc_32E0BA: ; ... cmp.b #$A,$1C(a0) beq.s return_32E0D4 move.w $30(a0),d0 cmp.w #$1D,d0 ble.s loc_32E0CE moveq #$1E,d0 loc_32E0CE: ; ... move.b byte_32E0EC(pc,d0.w),$1C(a0) return_32E0D4: ; ... rts ; --------------------------------------------------------------------------- loc_32E0D6: ; ... move.l (sp)+,d0 move.l $34(a0),d0 beq.w loc_32F1A6 move.l d0,a1 st $2A(a1) jmp DeleteObject ; End of function sub_32E094 ; --------------------------------------------------------------------------- byte_32E0EC: dc.b 9, 9, 9, 8, 8, 7, 7, 6, 6, 5; 0 ; ... dc.b 5, 4, 4, 3, 3, 3, 2, 2, 2, 1; 10 dc.b 1, 1, 1, 1, 1, 1, 1, 1, 1, 1; 20 dc.b 0, 0 ; 30 ; =============== S U B R O U T I N E ======================================= sub_32E10C: ; ... move.w d7,-(sp) moveq #0,d2 moveq #0,d3 moveq #0,d4 moveq #0,d5 moveq #0,d6 moveq #0,d7 move.l ($FFFFDB82).w,a1 move.w $30(a0),d0 beq.w loc_32E1C8 cmp.w (a1)+,d0 bgt.w loc_32E1C8 subq.w #1,d0 add.w d0,d0 move.w d0,d1 add.w d0,d0 add.w d1,d0 tst.b ($FFFFDB0E).w bne.w loc_32E1D0 move.b 4(a1,d0.w),d6 move.b 5(a1,d0.w),d7 beq.s loc_32E154 move.b $26(a0),d1 cmp.b d6,d1 bcs.s loc_32E154 cmp.b d7,d1 bcs.s loc_32E1C8 loc_32E154: ; ... move.b (a1,d0.w),d2 move.b 2(a1,d0.w),d4 move.b 3(a1,d0.w),d5 move.b 1(a1,d0.w),d3 loc_32E164: ; ... bpl.s loc_32E16E cmp.b #$48,d3 bcs.s loc_32E16E ext.w d3 loc_32E16E: ; ... move.b $26(a0),d0 jsr CalcSine muls.w d4,d1 muls.w d5,d0 asr.l #8,d0 asr.l #8,d1 add.w d2,d1 add.w d3,d0 move.w d1,8(a0) move.w d0,$C(a0) move.l $34(a0),d0 beq.s loc_32E1BE move.l d0,a1 move.b $26(a0),d0 jsr CalcSine move.w d4,d7 lsr.w #2,d7 add.w d7,d4 muls.w d4,d1 move.w d5,d7 asr.w #2,d7 add.w d7,d5 muls.w d5,d0 asr.l #8,d0 asr.l #8,d1 add.w d2,d1 add.w d3,d0 move.w d1,8(a1) move.w d0,$C(a1) loc_32E1BE: ; ... or.b #$80,1(a0) loc_32E1C4: ; ... move.w (sp)+,d7 rts ; --------------------------------------------------------------------------- loc_32E1C8: ; ... and.b #$7F,1(a0) bra.s loc_32E1C4 ; --------------------------------------------------------------------------- loc_32E1D0: ; ... move.b #$80,d1 move.b 4(a1,d0.w),d6 move.b 5(a1,d0.w),d7 beq.s loc_32E1F2 sub.w d1,d6 sub.w d1,d7 neg.w d6 neg.w d7 move.b $26(a0),d1 cmp.b d7,d1 bcs.s loc_32E1F2 cmp.b d6,d1 bcs.s loc_32E1C8 loc_32E1F2: ; ... move.b (a1,d0.w),d2 move.b 2(a1,d0.w),d4 move.b 3(a1,d0.w),d5 sub.w #$100,d2 neg.w d2 move.b 1(a1,d0.w),d3 bra.w loc_32E164 ; End of function sub_32E10C ; =============== S U B R O U T I N E ======================================= sub_32E20C: ; ... jsr sub_306A5E bne.w return_32E29E move.l a0,$34(a1) move.b (a0),(a1) move.b #4,$24(a1) move.l #Map_Obj63,4(a1) move.w #$623C,2(a1) move.b #4,1(a1) move.b #5,$18(a1) move.b $26(a0),d0 cmp.b #$10,d0 bgt.s loc_32E258 bset #0,1(a1) move.b #2,$2B(a1) move.l a1,$34(a0) rts ; --------------------------------------------------------------------------- loc_32E258: ; ... cmp.b #$30,d0 bgt.s loc_32E270 bset #0,1(a1) move.b #1,$2B(a1) move.l a1,$34(a0) rts ; --------------------------------------------------------------------------- loc_32E270: ; ... cmp.b #$50,d0 bgt.s loc_32E282 move.b #0,$2B(a1) move.l a1,$34(a0) rts ; --------------------------------------------------------------------------- loc_32E282: ; ... cmp.b #$70,d0 bgt.s loc_32E294 move.b #1,$2B(a1) move.l a1,$34(a0) rts ; --------------------------------------------------------------------------- loc_32E294: ; ... move.b #2,$2B(a1) move.l a1,$34(a0) return_32E29E: ; ... rts ; End of function sub_32E20C ; --------------------------------------------------------------------------- dc.w 0, $18, $14, $14, $14, 0; 0 ; --------------------------------------------------------------------------- loc_32E2AC: ; ... tst.b $2A(a0) bne.w loc_32E30E move.l $34(a0),a1 tst.b 1(a1) bmi.s loc_32E2C0 rts ; --------------------------------------------------------------------------- loc_32E2C0: ; ... moveq #9,d0 sub.b $1C(a1),d0 add.b #1,d0 cmp.b #$A,d0 bne.s loc_32E2D4 move.w #9,d0 loc_32E2D4: ; ... move.w d0,d1 add.w d0,d0 add.w d1,d0 moveq #0,d1 move.b $2B(a0),d1 beq.s loc_32E2FC cmp.b #1,d1 beq.s loc_32E2F2 add.w d1,d0 move.w #$629C,2(a0) bra.s loc_32E304 ; --------------------------------------------------------------------------- loc_32E2F2: ; ... add.w d1,d0 move.w #$6262,2(a0) bra.s loc_32E304 ; --------------------------------------------------------------------------- loc_32E2FC: ; ... add.w d1,d0 move.w #$623C,2(a0) loc_32E304: ; ... move.b d0,$1A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32E30E: ; ... jmp DeleteObject ; =============== S U B R O U T I N E ======================================= sub_32E314: ; ... subq.b #1,$1E(a0) bpl.s return_32E35E moveq #0,d0 move.b $1C(a0),d0 add.w d0,d0 add.w (a1,d0.w),a1 move.b (a1),$1E(a0) moveq #0,d1 move.b $1B(a0),d1 move.b 1(a1,d1.w),d0 bpl.s loc_32E340 move.b #0,$1B(a0) move.b 1(a1),d0 loc_32E340: ; ... and.b #$7F,d0 move.b d0,$1A(a0) move.b $22(a0),d1 and.b #3,d1 and.b #%11111100,1(a0) or.b d1,1(a0) addq.b #1,$1B(a0) return_32E35E: ; ... rts ; End of function sub_32E314 ; --------------------------------------------------------------------------- unk_32E360: dc.b $38 ; 8 ; ... dc.b $48 ; H dc.b $2A ; * dc.b $56 ; V dc.b $1C dc.b $64 ; d dc.b $E dc.b $72 ; r dc.b 0 dc.b $80 ; € unk_32E36A: dc.b $40 ; @ ; ... dc.b $30 ; 0 dc.b $50 ; P dc.b $20 dc.b $60 ; ` dc.b $10 dc.b $70 ; p dc.b 0 dc.b $80 ; € dc.b 0 ; --------------------------------------------------------------------------- Obj5B: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32E382(pc,d0.w),d1 jmp off_32E382(pc,d1.w) ; --------------------------------------------------------------------------- off_32E382: dc.w loc_32E386-off_32E382,loc_32E460-off_32E382; 0 ; ... ; --------------------------------------------------------------------------- loc_32E386: ; ... move.l $38(a0),a3 moveq #0,d1 move.b $3D(a3),d1 beq.s loc_32E39E sub.b #1,$3D(a3) move.w #$A,d1 bra.s loc_32E3D0 ; --------------------------------------------------------------------------- loc_32E39E: ; ... move.b $3C(a3),d1 beq.s loc_32E3B6 sub.b #1,$3C(a3) move.b #9,$3D(a3) move.w #$A,d1 bra.s loc_32E3D0 ; --------------------------------------------------------------------------- loc_32E3B6: ; ... move.b $3E(a3),d1 beq.s loc_32E3D6 move.b #0,$3E(a3) btst #0,d1 beq.s loc_32E3D0 lea (unk_32E36A).l,a2 bra.s loc_32E3D6 ; --------------------------------------------------------------------------- loc_32E3D0: ; ... lea (unk_32E360).l,a2 loc_32E3D6: ; ... cmp.b #9,(a3) bne.s loc_32E3E2 sub.w d1,($FFFFFE20).w bra.s loc_32E3E6 ; --------------------------------------------------------------------------- loc_32E3E2: ; ... sub.w d1,($FFFFFED0).w loc_32E3E6: ; ... move.w d1,d2 subq.w #1,d2 bmi.w loc_32F1A6 move.l a0,a1 bra.s loc_32E3FA ; --------------------------------------------------------------------------- loc_32E3F2: ; ... jsr SpecialStageObjectLoad bne.s loc_32E45A loc_32E3FA: ; ... move.b #$5B,(a1) move.b #2,$24(a1) move.l #Map_Obj60,4(a1) move.w #$6322,2(a1) move.b #4,1(a1) move.b #5,$18(a1) move.b #0,$20(a1) move.b #8,$1C(a1) move.w 8(a3),8(a1) move.w $C(a3),$C(a1) move.b $26(a3),d0 add.b #$40,d0 add.b (a2)+,d0 jsr CalcSine muls.w #$400,d1 asr.l #8,d1 move.w d1,$10(a1) muls.w #$1000,d0 asr.l #8,d0 move.w d0,$12(a1) loc_32E45A: ; ... dbf d2,loc_32E3F2 rts ; --------------------------------------------------------------------------- loc_32E460: ; ... jsr ObjectMoveAndFall add.w #$80,$12(a0) bsr.w sub_32E49E tst.w 8(a0) bmi.w loc_32F1A6 cmp.w #$100,8(a0) bcc.w loc_32F1A6 cmp.w #$E0,$C(a0) bgt.w loc_32F1A6 lea (Ani_Obj60).l,a1 jsr AnimateSprite jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32E49E: ; ... tst.w $12(a0) bmi.w return_32E4B2 move.b #0,$18(a0) move.b #9,$1C(a0) return_32E4B2: ; ... rts ; End of function sub_32E49E ; --------------------------------------------------------------------------- rts ; =============== S U B R O U T I N E ======================================= sub_32E4B6: ; ... move.w word_32E4CA(pc,d0.w),($FFFFFB76).w move.w word_32E4CC(pc,d0.w),($FFFFFB78).w move.w word_32E4CE(pc,d0.w),($FFFFFB7A).w rts ; End of function sub_32E4B6 ; --------------------------------------------------------------------------- word_32E4CA: dc.w $EE ; ... word_32E4CC: dc.w $88 ; ... word_32E4CE: dc.w $44, $EE, $CC, $88 ; 0 ; ... ; --------------------------------------------------------------------------- Obj5A: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32E4E4(pc,d0.w),d1 jmp off_32E4E4(pc,d1.w) ; --------------------------------------------------------------------------- off_32E4E4: dc.w loc_32E4FA-off_32E4E4,loc_32E78E-off_32E4E4,loc_32EAFA-off_32E4E4; 0 ; ... dc.w loc_32E966-off_32E4E4,loc_32EB3A-off_32E4E4,loc_32E93C-off_32E4E4; 3 dc.w loc_32E954-off_32E4E4,sub_32E696-off_32E4E4,loc_32E742-off_32E4E4; 6 dc.w loc_32E762-off_32E4E4,loc_32E778-off_32E4E4; 9 ; --------------------------------------------------------------------------- loc_32E4FA: ; ... tst.b ($FFFFDB95).w bne.s loc_32E566 move.l ($FFFFDB28).w,a1 cmp.l #S2_MapSpec_Straight4,a1 blt.s return_32E564 cmp.l #S2_MapSpec_Drop1,a1 bge.s return_32E564 moveq #6,d0 bsr.s sub_32E4B6 st ($FFFFDB98).w moveq #6,d0 loc_32E51E: ; ... jsr SpecialStageObjectLoad bne.s loc_32E55A move.b #$5A,(a1) move.b #2,$24(a1) move.l #Map_Obj60,4(a1) move.w #$6322,2(a1) move.b #4,1(a1) move.b #5,$18(a1) move.b d0,$2A(a1) move.w #0,$30(a1) move.b #-1,$1A(a1) loc_32E55A: ; ... dbf d0,loc_32E51E jmp DeleteObject ; --------------------------------------------------------------------------- return_32E564: ; ... rts ; --------------------------------------------------------------------------- loc_32E566: ; ... sf ($FFFFDB95).w tst.b ($FFFFFE00).w bne.w loc_32F1A6 sf ($FFFFDBA6).w sf ($FFFFDBA7).w move.w #0,($FFFFDBA2).w move.b #0,$3A(a0) jmp DeleteObject ; --------------------------------------------------------------------------- byte_32E58C: dc.b 3, 4, 5, 0, -1, $11, 8, 0, 8, 2; 0 ; ... dc.b -1, 6, -1, 0 ; 10 word_32E59A: dc.w $C0, $B8, $B0, $A0, $98, $88; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_32E5A6: ; ... st ($FFFFDBA7).w jsr SpecialStageObjectLoad bne.w return_32E674 move.l #Map_Obj5F_B,4(a1) move.w #$41FA,2(a1) move.b #$5A,(a1) move.b #4,1(a1) move.b #1,$18(a1) bset #6,1(a1) move.b #0,$F(a1) loc_32E5DE: move.b #$E,$24(a1) lea $10(a1),a2 move.w #$5A,d1 move.w #$38,d2 moveq #0,d0 moveq #2,d3 loc_32E5F4: ; ... move.w d1,(a2)+ move.w d2,(a2)+ move.w d0,(a2)+ subq.w #8,d1 dbf d3,loc_32E5F4 lea byte_32E58C(pc),a3 move.w #$68,d1 move.w #$38,d2 loc_32E60C: ; ... move.b (a3)+,d0 bmi.s loc_32E630 jsr SpecialStageObjectLoad bne.s return_32E674 bsr.s sub_32E676 move.b #$10,$24(a1) move.w d1,8(a1) move.w d2,$C(a1) move.b d0,$1A(a1) addq.w #8,d1 bra.s loc_32E60C ; --------------------------------------------------------------------------- loc_32E630: ; ... lea word_32E59A(pc),a2 loc_32E634: ; ... move.b (a3)+,d0 bmi.s loc_32E656 jsr SpecialStageObjectLoad bne.s return_32E674 bsr.s sub_32E676 move.b #$12,$24(a1) move.w (a2)+,$2A(a1) move.w d2,$C(a1) move.b d0,$1A(a1) bra.s loc_32E634 ; --------------------------------------------------------------------------- loc_32E656: ; ... move.b (a3)+,d0 jsr SpecialStageObjectLoad bne.s return_32E674 bsr.s sub_32E676 move.b #$14,$24(a1) move.w (a2)+,8(a1) move.w d2,$C(a1) move.b d0,$1A(a1) return_32E674: ; ... rts ; End of function sub_32E5A6 ; =============== S U B R O U T I N E ======================================= sub_32E676: ; ... move.b #$5A,(a1) move.l #Map_Obj5A,4(a1) move.w #$41A2,2(a1) move.b #4,1(a1) move.b #1,$18(a1) rts ; End of function sub_32E676 ; =============== S U B R O U T I N E ======================================= sub_32E696: ; ... ; FUNCTION CHUNK AT 0032E742 SIZE 00000020 BYTES ; FUNCTION CHUNK AT 0032F1A0 SIZE 00000006 BYTES move.b ($FFFFDBA7).w,($FFFFDBA6).w bne.s return_32E6A4 bsr.s sub_32E6A6 bra.w loc_32E742 ; --------------------------------------------------------------------------- return_32E6A4: ; ... rts ; End of function sub_32E696 ; =============== S U B R O U T I N E ======================================= sub_32E6A6: ; ... move.w ($FFFFFE20).w,d0 cmp.w #1,($FFFFFF70).w blt.s loc_32E6BA beq.s loc_32E6BE move.w ($FFFFFED0).w,d0 bra.s loc_32E6BE ; --------------------------------------------------------------------------- loc_32E6BA: ; ... add.w ($FFFFFED0).w,d0 loc_32E6BE: ; ... sub.w ($FFFFDB8C).w,d0 neg.w d0 bgt.s loc_32E6DE moveq #0,d0 moveq #1,d2 add.w #1,($FFFFDBA2).w cmp.w #$C,($FFFFDBA2).w bcs.s loc_32E70A st ($FFFFDBA6).w bra.s loc_32E70A ; --------------------------------------------------------------------------- loc_32E6DE: ; ... moveq #0,d1 move.w d0,d1 moveq #0,d0 cmp.w #$64,d1 blt.s loc_32E6F4 loc_32E6EA: ; ... add.w #$100,d0 sub.w #$64,d1 bgt.s loc_32E6EA loc_32E6F4: ; ... divu.w #$A,d1 lsl.w #4,d1 or.b d1,d0 swap d1 or.b d1,d0 move.w #0,($FFFFDBA2).w sf ($FFFFDBA6).w loc_32E70A: ; ... moveq #1,d2 lea $10(a0),a1 move.w d0,($FFFFDBA4).w move.w d0,d1 and.w #$F,d1 move.b d1,5(a1) lsr.w #4,d0 beq.s loc_32E73C addq.w #1,d2 move.w d0,d1 and.w #$F,d1 move.b d1,$B(a1) lsr.w #4,d0 beq.s loc_32E73C addq.w #1,d2 and.w #$F,d0 move.b d0,$11(a1) loc_32E73C: ; ... move.b d2,$F(a0) rts ; End of function sub_32E6A6 ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_32E696 loc_32E742: ; ... tst.b ($FFFFDBA0).w bne.w return_32E760 tst.b ($FFFFDBA6).w bne.s return_32E760 move.b ($FFFFFE0F).w,d0 and.b #7,d0 cmp.b #6,d0 bcs.w loc_32F1A0 return_32E760: ; ... rts ; END OF FUNCTION CHUNK FOR sub_32E696 ; --------------------------------------------------------------------------- loc_32E762: ; ... moveq #0,d0 cmp.w #2,($FFFFDBA4).w bcc.s loc_32E76E moveq #$FFFFFFF8,d0 loc_32E76E: ; ... add.w $2A(a0),d0 move.w d0,8(a0) bra.s loc_32E742 ; --------------------------------------------------------------------------- loc_32E778: ; ... moveq #0,d0 cmp.w #2,($FFFFDBA4).w bcc.s loc_32E742 rts ; --------------------------------------------------------------------------- byte_32E784: dc.b 0, 1, 1, 1, 2, 4, 6, 8, 9, -1; 0 ; ... ; --------------------------------------------------------------------------- loc_32E78E: ; ... cmp.b #4,($FFFFDB0D).w bne.s loc_32E7CE move.w $2C(a0),d0 move.b byte_32E784(pc,d0.w),$1A(a0) bmi.w loc_32E856 add.w #1,$2C(a0) moveq #0,d0 move.b $2A(a0),d0 add.w d0,d0 add.w $30(a0),d0 move.b byte_32E7D8(pc,d0.w),9(a0) move.b byte_32E7D9(pc,d0.w),$D(a0) add.w #$E,$30(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32E7CE: ; ... tst.b $1A(a0) bpl.w loc_32F1A0 rts ; --------------------------------------------------------------------------- byte_32E7D8: dc.b $F6 ; ... byte_32E7D9: dc.b -$A, $70, $5E, $76, $58, $7E, $56,-$78, $58,-$72; 0 ; ... dc.b $5E, -$A, -$A, -$A, -$A, $6D, $5A, $74, $54, $7E; 10 dc.b $50,-$76, $54,-$6E, $5A, -$A, -$A, -$A, -$A, $6A; 20 dc.b $58, $72, $50, $7E, $4C,-$74, $50,-$6C, $58, -$A; 30 dc.b -$A, -$A, -$A, $68, $56, $70, $4C, $7E, $48,-$72; 40 dc.b $4C,-$6A, $56, -$A, -$A, $62, $5E, $66, $50, $70; 50 dc.b $46, $7E, $42,-$72, $46,-$68, $50,-$64, $5E, $5C; 60 dc.b $5A, $62, $4A, $70, $3E, $7E, $38,-$72, $3E,-$64; 70 dc.b $4A,-$5E, $5A, $54, $54, $5A, $3E, $6A, $30, $7E; 80 dc.b $2A,-$6C, $30,-$5C, $3E,-$56, $54, $42, $4A, $4C; 90 dc.b $28, $62, $12, $7E, $A,-$64, $12,-$4E, $28,-$44; 100 dc.b $4A, $16, $26, $28, -4,-$14,-$14,-$14,-$14,-$14; 110 dc.b -$14,-$2A, -4,-$18, $26 ; 120 ; --------------------------------------------------------------------------- loc_32E856: ; ... cmp.w #$E8,8(a0) bne.w loc_32F1A6 moveq #0,d0 bsr.w sub_32E4B6 sf ($FFFFDB98).w st ($FFFFDBA0).w tst.b ($FFFFFE00).w beq.w loc_32E90C move.w #$A1,d0 jsr PlaySound add.b #$10,($FFFFDB93).w moveq #0,d6 add.b #1,($FFFFFE17).w move.w #$C,d0 move.w ($FFFFFE20).w,d2 cmp.w ($FFFFFED0).w,d2 bgt.s loc_32E8BC beq.s loc_32E8D6 sub.b #$10,($FFFFDB93).w add.b #1,($FFFFDB93).w move.w #$E,d0 tst.b ($FFFFFFD8).w bpl.s loc_32E8B8 move.w #$14,d0 loc_32E8B8: ; ... move.w #$2000,d6 loc_32E8BC: ; ... move.w #$80,d3 bsr.w sub_32EA52 add.w d6,2(a1) add.w d6,2(a2) bsr.w sub_32ED58 jmp DeleteObject ; --------------------------------------------------------------------------- loc_32E8D6: ; ... sub.b #$10,($FFFFDB93).w move.w #$10,d0 bsr.w sub_32ED58 cmp.b #3,($FFFFFE17).w beq.s loc_32E8FA move.w #$46,$2A(a0) move.b #$A,$24(a0) rts ; --------------------------------------------------------------------------- loc_32E8FA: ; ... bsr.w sub_32EA16 move.w #$46,$2A(a0) move.b #$C,$24(a0) rts ; --------------------------------------------------------------------------- loc_32E90C: ; ... move.w #6,d1 move.w #$ED,d0 move.w ($FFFFFE20).w,d2 add.w ($FFFFFED0).w,d2 cmp.w ($FFFFDB8C).w,d2 blt.s loc_32E92A move.w #4,d1 move.w #$A1,d0 loc_32E92A: ; ... jsr PlaySound move.w d1,d0 bsr.w sub_32ED00 jmp DeleteObject ; --------------------------------------------------------------------------- loc_32E93C: ; ... sub.w #1,$2A(a0) beq.s loc_32E946 rts ; --------------------------------------------------------------------------- loc_32E946: ; ... move.w #$A,d0 bsr.w sub_32ED58 jmp DeleteObject ; --------------------------------------------------------------------------- loc_32E954: ; ... sub.w #1,$2A(a0) beq.s loc_32E95E rts ; --------------------------------------------------------------------------- loc_32E95E: ; ... st ($FFFFDB86).w bra.w sub_32F142 ; --------------------------------------------------------------------------- loc_32E966: ; ... cmp.b #$15,$1A(a0) bne.s loc_32E9B2 move.w $30(a0),d0 tst.b $2E(a0) bne.s loc_32E996 sub.w #1,$C(a0) sub.w #4,d0 cmp.w $C(a0),d0 blt.s loc_32E9B2 add.w #1,d0 move.w d0,$C(a0) st $2E(a0) bra.s loc_32E9B2 ; --------------------------------------------------------------------------- loc_32E996: ; ... add.w #1,$C(a0) add.w #4,d0 cmp.w $C(a0),d0 bgt.s loc_32E9B2 sub.w #1,d0 move.w d0,$C(a0) sf $2E(a0) loc_32E9B2: ; ... sub.w #1,$2A(a0) bne.w loc_32F1A0 tst.b $2F(a0) beq.s loc_32E9DA loc_32E9C2: ; ... move.w #$F9,d0 jsr PlayMusic move.w #$30,$2A(a0) move.b #$C,$24(a0) rts ; --------------------------------------------------------------------------- loc_32E9DA: ; ... cmp.b #$15,$1A(a0) bne.w loc_32F1A6 tst.w $30(a0) beq.w loc_32F1A6 tst.b ($FFFFFE00).w beq.s loc_32EA0C bsr.w sub_32EA16 cmp.b #3,($FFFFFE17).w beq.s loc_32E9C2 move.w #$A,d0 bsr.w sub_32ED58 jmp DeleteObject ; --------------------------------------------------------------------------- loc_32EA0C: ; ... bsr.w sub_32EC8E jmp DeleteObject ; =============== S U B R O U T I N E ======================================= sub_32EA16: ; ... lea ($FFFFFFA0).w,a3 moveq #0,d0 move.b ($FFFFFE17).w,d0 subq.w #1,d0 add.w d0,d0 add.w d0,d0 move.w ($FFFFFE20).w,(a3,d0.w) move.w ($FFFFFED0).w,2(a3,d0.w) move.w #0,($FFFFFE20).w move.w #0,($FFFFFED0).w moveq #0,d0 move.w d0,($FFFFB03C).w move.b d0,($FFFFB03E).w move.w d0,($FFFFB07C).w move.b d0,($FFFFB07E).w rts ; End of function sub_32EA16 ; =============== S U B R O U T I N E ======================================= sub_32EA52: ; ... move.w #$48,d4 tst.b ($FFFFFE00).w beq.s loc_32EA60 move.w #$1C,d4 loc_32EA60: ; ... jsr SpecialStageObjectLoad bne.w return_32EAF8 move.b #$5A,(a1) move.b #6,$24(a1) move.l #Map_Obj5A,4(a1) move.w #$21A2,2(a1) move.b #4,1(a1) move.b #1,$18(a1) move.w d3,8(a1) move.w d4,$C(a1) move.w #$46,$2A(a1) move.b #$14,$1A(a1) move.l a1,a2 jsr SpecialStageObjectLoad bne.s return_32EAF8 move.b #$5A,(a1) move.b #6,$24(a1) move.l #Map_Obj5A,4(a1) move.w #$21A2,2(a1) move.b #4,1(a1) move.b #0,$18(a1) move.w d3,8(a1) move.w d4,$C(a1) move.w d4,$30(a1) move.w #$46,$2A(a1) move.b #$15,$1A(a1) cmp.w #6,d0 bne.s return_32EAF8 st $2F(a1) bset #1,1(a1) return_32EAF8: ; ... rts ; End of function sub_32EA52 ; --------------------------------------------------------------------------- loc_32EAFA: ; ... sub.w #1,$2A(a0) bne.w loc_32F1A0 cmp.b #$13,$1A(a0) bgt.w loc_32F1A6 move.b #8,$24(a0) move.w #8,$14(a0) move.w 8(a0),d1 sub.w #$80,d1 move.w $C(a0),d2 sub.w #$70,d2 jsr CalcAngle move.b d0,$26(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32EB3A: ; ... moveq #0,d0 move.b $26(a0),d0 jsr CalcSine muls.w $14(a0),d0 muls.w $14(a0),d1 asr.w #8,d0 asr.w #8,d1 add.w d1,8(a0) add.w d0,$C(a0) cmp.w #0,8(a0) blt.w loc_32F1A6 cmp.w #$100,8(a0) bgt.w loc_32F1A6 cmp.w #0,$C(a0) blt.w loc_32F1A6 jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32EB7E: ; ... jsr sub_306A5E bne.s return_32EBBC move.b d0,$1A(a1) move.l #Map_Obj5F_B,4(a1) move.w #$41FA,2(a1) move.b #$5A,(a1) loc_32EB9C: move.b #4,$24(a1) move.b #4,1(a1) move.b #1,$18(a1) move.w d1,8(a1) move.w d2,$C(a1) move.w #$46,$2A(a1) return_32EBBC: ; ... rts ; End of function sub_32EB7E ; =============== S U B R O U T I N E ======================================= sub_32EBBE: ; ... lea off_32EC0E(pc),a3 add.w (a3,d0.w),a3 loc_32EBC6: ; ... move.b (a3)+,d0 bmi.s return_32EC0C jsr sub_306A5E bne.s return_32EC0C move.b d0,$1A(a1) move.l #Map_Obj5A,4(a1) move.w #$41A2,2(a1) move.b #$5A,(a1) move.b #4,$24(a1) move.b #4,1(a1) move.b #1,$18(a1) move.w d1,8(a1) move.w d2,$C(a1) move.w #$46,$2A(a1) addq.w #8,d1 bra.s loc_32EBC6 ; --------------------------------------------------------------------------- return_32EC0C: ; ... rts ; End of function sub_32EBBE ; --------------------------------------------------------------------------- off_32EC0E: dc.w byte_32EC32-off_32EC0E,byte_32EC36-off_32EC0E,byte_32EC3C-off_32EC0E; 0 ; ... dc.w byte_32EC42-off_32EC0E,byte_32EC46-off_32EC0E,byte_32EC4D-off_32EC0E; 3 dc.w byte_32EC54-off_32EC0E,byte_32EC59-off_32EC0E,byte_32EC5F-off_32EC0E; 6 dc.w byte_32EC65-off_32EC0E,byte_32EC6B-off_32EC0E,byte_32EC70-off_32EC0E; 9 dc.w byte_32EC74-off_32EC0E,byte_32EC7A-off_32EC0E,byte_32EC7F-off_32EC0E; 12 dc.w byte_32EC81-off_32EC0E,byte_32EC85-off_32EC0E,byte_32EC87-off_32EC0E; 15 byte_32EC32: dc.b 0, 1, 2, -1 ; 0 ; ... byte_32EC36: dc.b 3, 4, 5, 0, 6, -1; 0 ; ... byte_32EC3C: dc.b 7, 8, 8, 9, $11, -1; 0 ; ... byte_32EC42: dc.b 5, 8, 2, -1 ; 0 ; ... byte_32EC46: dc.b 1, 5, 8, $A, 0, $B, -1; 0 ; ... byte_32EC4D: dc.b $C, 9, $D, $E, 1, 3, -1; 0 ; ... byte_32EC54: dc.b $F, 8, 6, 2, -1 ; 0 ; ... byte_32EC59: dc.b $10, 4, 5, 6, $11, -1; 0 ; ... byte_32EC5F: dc.b 6, 8, 5, 4, 7, -1; 0 ; ... byte_32EC65: dc.b $F, 4, 9, 1, 6, -1; 0 ; ... byte_32EC6B: dc.b 2, 4, 1, $11, -1 ; 0 ; ... byte_32EC70: dc.b $10, 4, 5, -1 ; 0 ; ... byte_32EC74: dc.b 2, $10, 4, 7, 1, -1; 0 ; ... byte_32EC7A: dc.b $D, 9, 9, $11, -1 ; 0 ; ... byte_32EC7F: dc.b $11, -1 ; 0 ; ... byte_32EC81: dc.b $12, $12, $12, -1 ; 0 ; ... byte_32EC85: dc.b $13, -1 ; 0 ; ... byte_32EC87: dc.b 2, $D, 4, 9, 6, -1, 0; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_32EC8E: ; ... moveq #0,d0 move.w #$54,d1 move.w #$6C,d2 bsr.w sub_32EBBE jsr sub_307176 move.w d1,d4 move.w d2,d5 move.w d2,a3 move.w #$80,d1 cmp.w #2,d2 beq.s loc_32ECB6 sub.w #8,d1 loc_32ECB6: ; ... move.w #$6C,d2 loc_32ECBA: ; ... move.w d4,d6 lsr.w #4,d4 and.w #$F,d6 move.b d6,d0 swap d5 bsr.w sub_32EB7E sub.w #8,d1 swap d5 dbf d5,loc_32ECBA moveq #2,d0 lea (off_32ED8C).l,a2 add.w (a2,d0.w),a2 move.w #$6C,d2 move.w #$84,d1 cmp.w #2,a3 bne.s loc_32ECF2 add.w #8,d1 loc_32ECF2: ; ... moveq #0,d0 move.b (a2)+,d0 bmi.s return_32ECFE bsr.w sub_32EBBE bra.s loc_32ECF2 ; --------------------------------------------------------------------------- return_32ECFE: ; ... rts ; End of function sub_32EC8E ; =============== S U B R O U T I N E ======================================= sub_32ED00: ; ... move.w #$80,d3 bsr.w sub_32EA52 cmp.w #1,($FFFFFF70).w ble.s loc_32ED1C add.w #$2000,2(a1) add.w #$2000,2(a2) loc_32ED1C: ; ... move.w #$74,d1 move.w #$68,d2 lea (off_32ED8C).l,a2 add.w (a2,d0.w),a2 cmp.b #4,d0 beq.s loc_32ED38 move.w #$5E,d1 loc_32ED38: ; ... moveq #0,d0 move.b (a2)+,d0 bmi.s return_32ED56 cmp.b #2,d0 bne.s loc_32ED4C move.w #$5E,d1 move.w #$7E,d2 loc_32ED4C: ; ... bsr.w sub_32EBBE add.w #8,d1 bra.s loc_32ED38 ; --------------------------------------------------------------------------- return_32ED56: ; ... rts ; End of function sub_32ED00 ; =============== S U B R O U T I N E ======================================= sub_32ED58: ; ... move.w d0,d3 subq.w #8,d3 lsr.w #1,d3 moveq #0,d1 move.b byte_32ED84(pc,d3.w),d1 move.w #$48,d2 lea (off_32ED8C).l,a2 add.w (a2,d0.w),a2 loc_32ED72: ; ... moveq #0,d0 move.b (a2)+,d0 bmi.s return_32ED82 bsr.w sub_32EBBE add.w #8,d1 bra.s loc_32ED72 ; --------------------------------------------------------------------------- return_32ED82: ; ... rts ; End of function sub_32ED58 ; --------------------------------------------------------------------------- byte_32ED84: dc.b $48, $44, $58, $58, $74, $3C, $58, 0; 0 ; ... off_32ED8C: dc.w byte_32EDA4-off_32ED8C,byte_32EDA5-off_32ED8C,byte_32EDA8-off_32ED8C; 0 ; ... dc.w byte_32EDAA-off_32ED8C,byte_32EDAF-off_32ED8C,byte_32EDB3-off_32ED8C; 3 dc.w byte_32EDB7-off_32ED8C,byte_32EDBA-off_32ED8C,byte_32EDBD-off_32ED8C; 6 dc.w byte_32EDBF-off_32ED8C,byte_32EDC4-off_32ED8C,byte_32EDC7-off_32ED8C; 9 byte_32EDA4: dc.b -1 ; 0 ; ... byte_32EDA5: dc.b 2, $1C, -1 ; 0 ; ... byte_32EDA8: dc.b 4, -1 ; 0 ; ... byte_32EDAA: dc.b 6, 8, 2, $1E, -1 ; 0 ; ... byte_32EDAF: dc.b $A, $20, $A, -1 ; 0 ; ... byte_32EDB3: dc.b $C, 2, $E, -1 ; 0 ; ... byte_32EDB7: dc.b $10, $E, -1 ; 0 ; ... byte_32EDBA: dc.b $12, $E, -1 ; 0 ; ... byte_32EDBD: dc.b $14, -1 ; 0 ; ... byte_32EDBF: dc.b $16, $18, $16, $1A, -1 ; 0 ; ... byte_32EDC4: dc.b $22, $E, -1 ; 0 ; ... byte_32EDC7: dc.b 2, $24, $26, $1C, -1 ; 0 ; ... Map_Obj5A: dc.w byte_32EDF8-Map_Obj5A,byte_32EE00-Map_Obj5A,byte_32EE08-Map_Obj5A; 0 ; ... dc.w byte_32EE10-Map_Obj5A,byte_32EE18-Map_Obj5A,byte_32EE20-Map_Obj5A; 3 dc.w byte_32EE28-Map_Obj5A,byte_32EE30-Map_Obj5A,byte_32EE38-Map_Obj5A; 6 dc.w byte_32EE40-Map_Obj5A,byte_32EE48-Map_Obj5A,byte_32EE50-Map_Obj5A; 9 dc.w byte_32EE58-Map_Obj5A,byte_32EE60-Map_Obj5A,byte_32EE68-Map_Obj5A; 12 dc.w byte_32EE70-Map_Obj5A,byte_32EE78-Map_Obj5A,byte_32EE80-Map_Obj5A; 15 dc.w byte_32EE88-Map_Obj5A,byte_32EE90-Map_Obj5A,byte_32EE98-Map_Obj5A; 18 dc.w byte_32EECA-Map_Obj5A ; 21 byte_32EDF8: dc.b 0, 1, -8, 1,-$80, 4, -1, -4; 0 ; ... byte_32EE00: dc.b 0, 1, -8, 1,-$80, 2, -1, -4; 0 ; ... byte_32EE08: dc.b 0, 1, -8, 1,-$80, $14, -1, -4; 0 ; ... byte_32EE10: dc.b 0, 1, -8, 1,-$80, $10, -1, -4; 0 ; ... byte_32EE18: dc.b 0, 1, -8, 1,-$80, 8, -1, -4; 0 ; ... byte_32EE20: dc.b 0, 1, -8, 1,-$80, $C, -1, -4; 0 ; ... byte_32EE28: dc.b 0, 1, -8, 1,-$80, $12, -1, -4; 0 ; ... byte_32EE30: dc.b 0, 1, -8, 1,-$80, 0, -1, -4; 0 ; ... byte_32EE38: dc.b 0, 1, -8, 1,-$80, $6A, -1, -4; 0 ; ... byte_32EE40: dc.b 0, 1, -8, 1,-$80, $A, -1, -4; 0 ; ... byte_32EE48: dc.b 0, 1, -8, 1,-$80, $16, -1, -4; 0 ; ... byte_32EE50: dc.b 0, 1, -8, 1,-$80, 6, -1, -4; 0 ; ... byte_32EE58: dc.b 0, 1, -8, 1,-$7E, $3D, -1, -4; 0 ; ... byte_32EE60: dc.b 0, 1, -8, 1,-$7E, $3F, -1, -4; 0 ; ... byte_32EE68: dc.b 0, 1, -8, 1,-$7E, $41, -1, -4; 0 ; ... byte_32EE70: dc.b 0, 1, -8, 1,-$7E, $43, -1, -4; 0 ; ... byte_32EE78: dc.b 0, 1, -8, 1,-$7E, $45, -1, -4; 0 ; ... byte_32EE80: dc.b 0, 1, -8, 1,-$80, $18, -1, -4; 0 ; ... byte_32EE88: dc.b 0, 1, -8, 1,-$80, $E, -1, -4; 0 ; ... byte_32EE90: dc.b 0, 1, -4, 4,-$7E, $47, -1, -8; 0 ; ... byte_32EE98: dc.b 0, 8,-$1C, 3,-$80, $1A, -1,-$30,-$14, $F; 0 ; ... dc.b -$80, $1E, -1,-$28,-$14, 3,-$80, $2E, -1, -8; 10 dc.b $C, $D,-$80, $32, -1,-$20,-$14, 3,-$78, $2E; 20 dc.b 0, 0, $C, $D,-$78, $32, 0, 0,-$14, $F; 30 dc.b -$78, $1E, 0, 8,-$1C, 3,-$78, $1A, 0, $28; 40 byte_32EECA: dc.b 0, 4,-$10, $B,-$80, $3A, -1,-$18, $10, 8; 0 ; ... dc.b -$80, $46, -1,-$18, 0, $A,-$80, $49, 0, 0; 10 dc.b -$18, 6,-$80, $52, 0, 0,-$30, $40, $32, 0; 20 dc.b -$30, $40,-$30, $41, $31, -5, 0, $12, -5, $76; 30 dc.b $31, -5, 0, $E, -5, $78, $31, -5, 0, $A; 40 dc.b -5, $7A, $4E, $75, $E,-$18, $E,-$40, $E,-$80; 50 dc.b $E, $6A, $C, 8, 8, 6, $A, $6E, 0, $E; 60 dc.b 0, $A, $E,-$52, $E, $6E, $E, $4E, $A,-$12; 70 dc.b 0,-$32, 0,-$76, 0,-$16, 0,-$3A, 0,-$7E; 80 dc.b $C,-$34, $A,-$56, 8,-$78; 90 ; --------------------------------------------------------------------------- Obj59: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32EF38(pc,d0.w),d1 jmp off_32EF38(pc,d1.w) ; --------------------------------------------------------------------------- off_32EF38: dc.w loc_32EF42-off_32EF38,loc_32EF90-off_32EF38,dword_33E2AC-off_32EF38; 0 ; ... dc.w loc_32F0D4-off_32EF38,loc_32F0E6-off_32EF38; 3 ; --------------------------------------------------------------------------- loc_32EF42: ; ... st ($FFFFDBA0).w st ($FFFFDB87).w sub.w #1,$2A(a0) cmp.w #-$3C,$2A(a0) beq.s loc_32EF5A rts ; --------------------------------------------------------------------------- loc_32EF5A: ; ... moveq #0,d0 move.b ($FFFFFE16).w,d0 bsr.s byte_32EECA+$1A addq.b #2,$24(a0) move.l #Map_Obj59,4(a0) move.w #$6174,2(a0) move.b #4,1(a0) move.b #4,$18(a0) move.w #$36,$30(a0) move.b #$40,$26(a0) bsr.w sub_32E20C loc_32EF90: ; ... bsr.w sub_32F064 bsr.w sub_32E094 bsr.w loc_32EFAC lea (off_32F1AC).l,a1 bsr.w sub_32E314 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32EFAC: ; ... move.w d7,-(sp) moveq #0,d2 moveq #0,d3 moveq #0,d4 moveq #0,d5 moveq #0,d6 moveq #0,d7 move.l ($FFFFDB82).w,a1 add.l #2,a1 move.w $30(a0),d0 subq.w #1,d0 add.w d0,d0 move.w d0,d1 add.w d0,d0 add.w d1,d0 move.b (a1,d0.w),d2 move.b 1(a1,d0.w),d3 move.b 2(a1,d0.w),d4 move.b 3(a1,d0.w),d5 move.w d5,d6 swap d5 move.w d6,d5 move.w d4,d6 swap d4 move.w d6,d4 bpl.s loc_32EFF8 cmp.b #$48,d3 bcs.s loc_32EFF8 ext.w d3 loc_32EFF8: ; ... move.w d4,d6 add.w d4,d4 add.w d6,d4 lsr.w #2,d4 move.w d5,d6 add.w d5,d5 add.w d6,d5 lsr.w #2,d5 move.b $26(a0),d0 jsr CalcSine muls.w d4,d1 muls.w d5,d0 asr.l #8,d0 asr.l #8,d1 add.w d2,d1 add.w d3,d0 move.w d1,8(a0) move.w d0,$C(a0) move.b d1,$3A(a0) move.b d0,$3B(a0) swap d4 swap d5 move.l $34(a0),a1 move.b $26(a0),d0 jsr CalcSine move.w d4,d6 lsr.w #2,d6 add.w d6,d4 muls.w d4,d1 move.w d5,d6 asr.w #2,d6 add.w d6,d5 muls.w d5,d0 asr.l #8,d0 asr.l #8,d1 add.w d2,d1 add.w d3,d0 move.w d1,8(a1) move.w d0,$C(a1) move.w (sp)+,d7 rts ; =============== S U B R O U T I N E ======================================= sub_32F064: ; ... cmp.b #3,$1C(a0) bcs.s return_32F0B4 tst.b $3E(a0) bne.s loc_32F080 move.w #$F9,d0 jsr PlayMusic st $3E(a0) loc_32F080: ; ... cmp.b #6,$1C(a0) bcs.s return_32F0B4 move.w ($FFFFFE20).w,d2 add.w ($FFFFFED0).w,d2 cmp.w ($FFFFDB8C).w,d2 blt.s loc_32F0B6 cmp.b #9,$1C(a0) bcs.s return_32F0B4 move.w #$63,$2A(a0) move.b #8,$24(a0) move.w #$9D,d0 jsr PlayMusic return_32F0B4: ; ... rts ; --------------------------------------------------------------------------- loc_32F0B6: ; ... move.l #0,($FFFFDB12).w move.b #6,$24(a0) move.w #$4F,$2A(a0) move.w #6,d0 bsr.w loc_32ED1C rts ; End of function sub_32F064 ; --------------------------------------------------------------------------- loc_32F0D4: ; ... sub.w #1,$2A(a0) bpl.w loc_32F1A0 st ($FFFFDB86).w bra.w sub_32F142 ; --------------------------------------------------------------------------- loc_32F0E6: ; ... sub.w #1,$2A(a0) bpl.s loc_32F118 moveq #0,d0 move.b ($FFFFFE16).w,d0 lea ($FFFFFFB2).w,a0 st (a0,d0.w) st ($FFFFFFB0).w add.b #1,($FFFFFE16).w add.b #1,($FFFFFFB1).w st ($FFFFDB86).w bsr.w sub_32F142 move.l (sp)+,d0 rts ; --------------------------------------------------------------------------- loc_32F118: ; ... add.b #1,$3C(a0) moveq #0,d0 moveq #0,d2 move.b $3B(a0),d2 move.b $3C(a0),d0 lsr.w #2,d0 and.w #3,d0 add.b byte_32F13E(pc,d0.w),d2 move.w d2,$C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- byte_32F13E: dc.b -1, 0, 1, 0 ; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_32F142: ; ... move.l #$FFB000,a1 move.w #$1FF,d0 moveq #0,d1 loc_32F14E: ; ... move.l d1,(a1)+ move.l d1,(a1)+ move.l d1,(a1)+ move.l d1,(a1)+ dbf d0,loc_32F14E lea ($FFFFF800).w,a1 moveq #0,d0 move.w #$A0,d1 loc_32F164: ; ... move.l d0,(a1)+ dbf d1,loc_32F164 rts ; End of function sub_32F142 ; --------------------------------------------------------------------------- cmp.b #$B,($FFFFDB0D).w bcs.s loc_32F17E sub.l #$4445,$30(a0) bra.s loc_32F186 ; --------------------------------------------------------------------------- loc_32F17E: ; ... sub.l #$4444,$30(a0) loc_32F186: ; ... move.w $30(a0),d0 cmp.w #$1D,d0 ble.s loc_32F192 moveq #$1E,d0 loc_32F192: ; ... lea (byte_32E0EC).l,a1 move.b (a1,d0.w),$1C(a0) rts ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_32E696 loc_32F1A0: ; ... jmp DisplaySprite ; END OF FUNCTION CHUNK FOR sub_32E696 ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_32E094 loc_32F1A6: ; ... jmp DeleteObject ; END OF FUNCTION CHUNK FOR sub_32E094 ; --------------------------------------------------------------------------- off_32F1AC: dc.w byte_32F1C0-off_32F1AC,byte_32F1C3-off_32F1AC,byte_32F1C6-off_32F1AC; 0 ; ... dc.w byte_32F1C9-off_32F1AC,byte_32F1CC-off_32F1AC,byte_32F1CF-off_32F1AC; 3 dc.w byte_32F1D2-off_32F1AC,byte_32F1D5-off_32F1AC,byte_32F1D8-off_32F1AC; 6 dc.w byte_32F1DB-off_32F1AC ; 9 byte_32F1C0: dc.b $B, 0, -1 ; 0 ; ... byte_32F1C3: dc.b $B, 1, -1 ; 0 ; ... byte_32F1C6: dc.b $B, 2, -1 ; 0 ; ... byte_32F1C9: dc.b $B, 3, -1 ; 0 ; ... byte_32F1CC: dc.b $B, 4, -1 ; 0 ; ... byte_32F1CF: dc.b $B, 5, -1 ; 0 ; ... byte_32F1D2: dc.b $B, 6, -1 ; 0 ; ... byte_32F1D5: dc.b $B, 7, -1 ; 0 ; ... byte_32F1D8: dc.b $B, 8, -1 ; 0 ; ... byte_32F1DB: dc.b $B, 9, -1 ; 0 ; ... Map_Obj59: dc.w byte_32F1F2-Map_Obj59,byte_32F1FA-Map_Obj59,byte_32F202-Map_Obj59; 0 ; ... dc.w byte_32F20A-Map_Obj59,byte_32F212-Map_Obj59,byte_32F21A-Map_Obj59; 3 dc.w byte_32F222-Map_Obj59,byte_32F22A-Map_Obj59,byte_32F232-Map_Obj59; 6 dc.w byte_32F23A-Map_Obj59 ; 9 byte_32F1F2: dc.b 0, 1, -4, 0,-$80, 0, -1, -4; 0 ; ... byte_32F1FA: dc.b 0, 1, -4, 0,-$80, 1, -1, -4; 0 ; ... byte_32F202: dc.b 0, 1, -4, 0,-$80, 2, -1, -4; 0 ; ... byte_32F20A: dc.b 0, 1, -8, 5,-$80, 3, -1, -8; 0 ; ... byte_32F212: dc.b 0, 1, -8, 5,-$80, 7, -1, -8; 0 ; ... byte_32F21A: dc.b 0, 1, -8, 5,-$80, $B, -1, -8; 0 ; ... byte_32F222: dc.b 0, 1, -8, 5,-$80, $F, -1, -8; 0 ; ... byte_32F22A: dc.b 0, 1, -$C, $A,-$80, $13, -1, -$C; 0 ; ... byte_32F232: dc.b 0, 1, -$C, $A,-$80, $1C, -1, -$C; 0 ; ... byte_32F23A: dc.b 0, 1, -$C, $A,-$80, $25, -1, -$C; 0 ; ... Ani_Obj60: dc.w byte_32F258-Ani_Obj60,byte_32F25E-Ani_Obj60,byte_32F264-Ani_Obj60; 0 ; ... dc.w byte_32F26A-Ani_Obj60,byte_32F270-Ani_Obj60,byte_32F276-Ani_Obj60; 3 dc.w byte_32F27C-Ani_Obj60,byte_32F282-Ani_Obj60,byte_32F288-Ani_Obj60; 6 dc.w byte_32F28E-Ani_Obj60,byte_32F294-Ani_Obj60; 9 byte_32F258: dc.b 5, 0, $A, $14, $A, -1; 0 ; ... byte_32F25E: dc.b 5, 1, $B, $15, $B, -1; 0 ; ... byte_32F264: dc.b 5, 2, $C, $16, $C, -1; 0 ; ... byte_32F26A: dc.b 5, 3, $D, $17, $D, -1; 0 ; ... byte_32F270: dc.b 5, 4, $E, $18, $E, -1; 0 ; ... byte_32F276: dc.b 5, 5, $F, $19, $F, -1; 0 ; ... byte_32F27C: dc.b 5, 6, $10, $1A, $10, -1; 0 ; ... byte_32F282: dc.b 5, 7, $11, $1B, $11, -1; 0 ; ... byte_32F288: dc.b 5, 8, $12, $1C, $12, -1; 0 ; ... byte_32F28E: dc.b 5, 9, $13, $1D, $13, -1; 0 ; ... byte_32F294: dc.b 1, $1E, $1F, $20, -1, 0; 0 ; ... Map_Obj60: dc.w byte_32F2DC-Map_Obj60,byte_32F2E4-Map_Obj60,byte_32F2EC-Map_Obj60; 0 ; ... dc.w byte_32F2F4-Map_Obj60,byte_32F2FC-Map_Obj60,byte_32F304-Map_Obj60; 3 dc.w byte_32F30C-Map_Obj60,byte_32F314-Map_Obj60,byte_32F31C-Map_Obj60; 6 dc.w byte_32F324-Map_Obj60,byte_32F32C-Map_Obj60,byte_32F334-Map_Obj60; 9 dc.w byte_32F33C-Map_Obj60,byte_32F344-Map_Obj60,byte_32F34C-Map_Obj60; 12 dc.w byte_32F354-Map_Obj60,byte_32F35C-Map_Obj60,byte_32F364-Map_Obj60; 15 dc.w byte_32F36C-Map_Obj60,byte_32F374-Map_Obj60,byte_32F37C-Map_Obj60; 18 dc.w byte_32F384-Map_Obj60,byte_32F38C-Map_Obj60,byte_32F394-Map_Obj60; 21 dc.w byte_32F39C-Map_Obj60,byte_32F3A4-Map_Obj60,byte_32F3AC-Map_Obj60; 24 dc.w byte_32F3B4-Map_Obj60,byte_32F3BC-Map_Obj60,byte_32F3C4-Map_Obj60; 27 dc.w byte_32F3CC-Map_Obj60,byte_32F3DA-Map_Obj60,byte_32F3E8-Map_Obj60; 30 byte_32F2DC: dc.b 0, 1, -4, 0,-$80, 0, -1, -4; 0 ; ... byte_32F2E4: dc.b 0, 1, -4, 0,-$80, 1, -1, -4; 0 ; ... byte_32F2EC: dc.b 0, 1, -4, 0,-$80, 2, -1, -4; 0 ; ... byte_32F2F4: dc.b 0, 1, -8, 5,-$80, 3, -1, -8; 0 ; ... byte_32F2FC: dc.b 0, 1, -8, 5,-$80, 7, -1, -8; 0 ; ... byte_32F304: dc.b 0, 1, -8, 5,-$80, $B, -1, -8; 0 ; ... byte_32F30C: dc.b 0, 1, -8, 5,-$80, $F, -1, -8; 0 ; ... byte_32F314: dc.b 0, 1, -$C, $A,-$80, $13, -1, -$C; 0 ; ... byte_32F31C: dc.b 0, 1, -$C, $A,-$80, $1C, -1, -$C; 0 ; ... byte_32F324: dc.b 0, 1, -$C, $A,-$80, $25, -1, -$C; 0 ; ... byte_32F32C: dc.b 0, 1, -4, 0,-$80, $2E, -1, -4; 0 ; ... byte_32F334: dc.b 0, 1, -4, 0,-$80, $2F, -1, -4; 0 ; ... byte_32F33C: dc.b 0, 1, -4, 0,-$80, $30, -1, -4; 0 ; ... byte_32F344: dc.b 0, 1, -8, 1,-$80, $31, -1, -4; 0 ; ... byte_32F34C: dc.b 0, 1, -8, 5,-$80, $33, -1, -8; 0 ; ... byte_32F354: dc.b 0, 1, -8, 5,-$80, $37, -1, -8; 0 ; ... byte_32F35C: dc.b 0, 1, -8, 5,-$80, $3B, -1, -8; 0 ; ... byte_32F364: dc.b 0, 1, -$C, 6,-$80, $3F, -1, -8; 0 ; ... byte_32F36C: dc.b 0, 1, -$C, 6,-$80, $45, -1, -8; 0 ; ... byte_32F374: dc.b 0, 1, -$C, $A,-$80, $4B, -1, -$C; 0 ; ... byte_32F37C: dc.b 0, 1, -4, 0,-$80, $54, -1, -4; 0 ; ... byte_32F384: dc.b 0, 1, -4, 0,-$80, $55, -1, -4; 0 ; ... byte_32F38C: dc.b 0, 1, -4, 0,-$80, $56, -1, -4; 0 ; ... byte_32F394: dc.b 0, 1, -8, 1,-$80, $57, -1, -4; 0 ; ... byte_32F39C: dc.b 0, 1, -8, 1,-$80, $59, -1, -4; 0 ; ... byte_32F3A4: dc.b 0, 1, -8, 1,-$80, $5B, -1, -4; 0 ; ... byte_32F3AC: dc.b 0, 1, -8, 1,-$80, $5D, -1, -4; 0 ; ... byte_32F3B4: dc.b 0, 1, -$C, 2,-$80, $5F, -1, -4; 0 ; ... byte_32F3BC: dc.b 0, 1, -$C, 2,-$80, $62, -1, -4; 0 ; ... byte_32F3C4: dc.b 0, 1, -$C, 2,-$80, $65, -1, -4; 0 ; ... byte_32F3CC: dc.b 0, 2,-$10, 7,-$80, 0, -1,-$10, -8, 5; 0 ; ... dc.b -$80, 8, 0, 0 ; 10 byte_32F3DA: dc.b 0, 2,-$10, $E,-$80, $C, -1,-$10, 8, 0; 0 ; ... dc.b -$80, $18, -1, -8 ; 10 byte_32F3E8: dc.b 0, 2,-$10, 2,-$80, $19, -1,-$10, -8, $A; 0 ; ... dc.b -$80, $1C, -1, -8 ; 10 Ani_Obj61: dc.w byte_32F40C-Ani_Obj61,byte_32F40F-Ani_Obj61,byte_32F412-Ani_Obj61; 0 ; ... dc.w byte_32F415-Ani_Obj61,byte_32F418-Ani_Obj61,byte_32F41B-Ani_Obj61; 3 dc.w byte_32F41E-Ani_Obj61,byte_32F421-Ani_Obj61,byte_32F424-Ani_Obj61; 6 dc.w byte_32F427-Ani_Obj61,byte_32F42A-Ani_Obj61; 9 byte_32F40C: dc.b $B, 0, -1 ; 0 ; ... byte_32F40F: dc.b $B, 1, -1 ; 0 ; ... byte_32F412: dc.b $B, 2, -1 ; 0 ; ... byte_32F415: dc.b $B, 3, -1 ; 0 ; ... byte_32F418: dc.b $B, 4, -1 ; 0 ; ... byte_32F41B: dc.b $B, 5, -1 ; 0 ; ... byte_32F41E: dc.b $B, 6, -1 ; 0 ; ... byte_32F421: dc.b $B, 7, -1 ; 0 ; ... byte_32F424: dc.b $B, 8, -1 ; 0 ; ... byte_32F427: dc.b $B, 9, -1 ; 0 ; ... byte_32F42A: dc.b 2, $A, $B, $C, -1, 0; 0 ; ... Map_Obj61: dc.w byte_32F44A-Map_Obj61,byte_32F452-Map_Obj61,byte_32F45A-Map_Obj61; 0 ; ... dc.w byte_32F462-Map_Obj61,byte_32F46A-Map_Obj61,byte_32F472-Map_Obj61; 3 dc.w byte_32F47A-Map_Obj61,byte_32F482-Map_Obj61,byte_32F48A-Map_Obj61; 6 dc.w byte_32F492-Map_Obj61,byte_32F49A-Map_Obj61,byte_32F4A2-Map_Obj61; 9 dc.w byte_32F4B0-Map_Obj61 ; 12 byte_32F44A: dc.b 0, 1, -4, 0,-$80, 0, -1, -4; 0 ; ... byte_32F452: dc.b 0, 1, -4, 0,-$80, 1, -1, -4; 0 ; ... byte_32F45A: dc.b 0, 1, -8, 5,-$80, 2, -1, -8; 0 ; ... byte_32F462: dc.b 0, 1, -8, 5,-$80, 6, -1, -8; 0 ; ... byte_32F46A: dc.b 0, 1, -8, 5,-$80, $A, -1, -8; 0 ; ... byte_32F472: dc.b 0, 1, -$C, $A,-$80, $E, -1, -$C; 0 ; ... byte_32F47A: dc.b 0, 1, -$C, $A,-$80, $17, -1, -$C; 0 ; ... byte_32F482: dc.b 0, 1,-$10, $F,-$80, $20, -1,-$10; 0 ; ... byte_32F48A: dc.b 0, 1,-$10, $F,-$80, $30, -1,-$10; 0 ; ... byte_32F492: dc.b 0, 1,-$10, $F,-$80, $40, -1,-$10; 0 ; ... byte_32F49A: dc.b 0, 1,-$10, $F,-$80, 0, -1,-$10; 0 ; ... byte_32F4A2: dc.b 0, 2,-$18, $F,-$80, $10, -1,-$18,-$18, $F; 0 ; ... dc.b -$80, $10, -1, -8 ; 10 byte_32F4B0: dc.b 0, 3,-$20, $F,-$80, $20, -1,-$28,-$28, $F; 0 ; ... dc.b -$70, $20, -1,-$10,-$20, $F,-$78, $20, 0, 8; 10 ; =============== S U B R O U T I N E ======================================= LoadSubObject: ; ... moveq #0,d0 move.b $28(a0),d0 loc_32F4CA: ; ... move.w byte_32F4F8(pc,d0.w),d0 lea byte_32F4F8(pc,d0.w),a1 ; End of function LoadSubObject ; =============== S U B R O U T I N E ======================================= LoadSubObject_Part3: ; ... move.l (a1)+,4(a0) move.w (a1)+,2(a0) jsr Adjust2PArtPointer2_Useless move.b (a1)+,d0 or.b d0,1(a0) move.b (a1)+,$18(a0) move.b (a1)+,$19(a0) move.b (a1),$20(a0) addq.b #2,$24(a0) rts ; End of function LoadSubObject_Part3 ; --------------------------------------------------------------------------- byte_32F4F8: dc.b 4, $16, 6,-$48, 6,-$3E, 6,-$34, 8,-$3E; 0 ; ... dc.b $A, $6A, $D, $C, $10, $78, $11, $7C, $12,-$54; 10 dc.b $11,-$7A, $15, $42, $15, $4C, $15, $56, $11,-$70; 20 dc.b $17,-$7A, $11,-$66, $19,-$16, $1D, $10, $1D, $1A; 30 dc.b $1F,-$1E, $1F,-$14, $22,-$64, $24, $5E, $11,-$5C; 40 dc.b $26,-$6A, $11,-$52, $2B,-$44, $2B,-$3A, $2B,-$30; 50 dc.b $2B,-$26, $11,-$48, $2D, $4E, $2F, $10, $2F, $1A; 60 dc.b $11,-$3E, $37, $6A, $11,-$34, $3E, $76, $3E,-$80; 70 dc.b $48,-$1E, $48,-$1E, $48,-$1E, $54, $24, $54, $24; 80 dc.b $4B,-$72, $48,-$14, $4B,-$72, $4B,-$72, $4B,-$72; 90 dc.b $4C, $12, $4D, $4E, $4D, $4E, $50,-$7E, $50,-$7E; 100 dc.b $50,-$7E, $50,-$7E, $51, $36, $52, $7C, $53, $42; 110 dc.b $53,-$70, $53,-$40, $54, $24, $55, $56, $55, $56; 120 dc.b $56, $62, $56, -$C, $58,-$4A, $5A,-$5C, $5B,-$38; 130 dc.b $5B,-$1E, $11,-$2A, $5C, $4A, $65, $1A, $65, $24; 140 dc.b $65, $2E, $65, $2E, $65, $2E, $65, $2E, $65, $2E; 150 dc.b $65, $38, $65, $42, $37, $74, $69, 8, $69, $12; 160 dc.b $69, $1C, $6C, $62 ; 170 ; =============== S U B R O U T I N E ======================================= sub_32F5A6: ; ... moveq #0,d0 moveq #0,d1 lea ($FFFFB000).w,a1 move.w 8(a0),d2 sub.w 8(a1),d2 move.w d2,d4 bpl.s loc_32F5BC neg.w d4 loc_32F5BC: ; ... lea ($FFFFB040).w,a2 move.w 8(a0),d3 sub.w 8(a2),d3 move.w d3,d5 bpl.s loc_32F5CE neg.w d5 loc_32F5CE: ; ... cmp.w d5,d4 bls.s loc_32F5D6 move.l a2,a1 move.w d3,d2 loc_32F5D6: ; ... tst.w d2 bpl.s loc_32F5DC addq.w #2,d0 loc_32F5DC: ; ... move.w $C(a0),d3 sub.w $C(a1),d3 bcc.s return_32F5E8 addq.w #2,d1 return_32F5E8: ; ... rts ; End of function sub_32F5A6 ; =============== S U B R O U T I N E ======================================= sub_32F5EA: ; ... move.w $10(a0),d2 bpl.s loc_32F5FC neg.w d0 cmp.w d0,d2 bcc.s loc_32F602 move.w d0,d2 bra.w loc_32F602 ; --------------------------------------------------------------------------- loc_32F5FC: ; ... cmp.w d0,d2 bls.s loc_32F602 move.w d0,d2 loc_32F602: ; ... move.w $12(a0),d3 bpl.s loc_32F614 neg.w d1 cmp.w d1,d3 bcc.s loc_32F61A move.w d1,d3 bra.w loc_32F61A ; --------------------------------------------------------------------------- loc_32F614: ; ... cmp.w d1,d3 bls.s loc_32F61A move.w d1,d3 loc_32F61A: ; ... move.w d2,$10(a0) move.w d3,$12(a0) rts ; End of function sub_32F5EA ; =============== S U B R O U T I N E ======================================= sub_32F624: ; ... moveq #0,d0 move.w d0,$10(a0) move.w d0,$12(a0) rts ; End of function sub_32F624 ; =============== S U B R O U T I N E ======================================= sub_32F630: ; ... move.w 8(a0),d2 add.w d0,d2 move.w d2,8(a1) move.w $C(a0),d3 add.w d1,d3 move.w d3,$C(a1) rts ; End of function sub_32F630 ; =============== S U B R O U T I N E ======================================= sub_32F646: ; ... move.w ($FFFFF736).w,d0 add.w d0,8(a0) move.w ($FFFFF738).w,d0 add.w d0,$C(a0) rts ; End of function sub_32F646 ; --------------------------------------------------------------------------- loc_32F658: ; ... tst.w ($FFFFFFDC).w beq.s loc_32F664 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32F664: ; ... move.w 8(a0),d0 and.w #%1111111110000000,d0 sub.w ($FFFFF7DA).w,d0 bmi.w loc_32F7EE jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_32F67A: ; ... move.b 1(a0),d0 and.b #%11111100,d0 move.b $22(a0),d2 and.b #%11111100,d2 move.b 1(a1),d1 and.b #3,d1 or.b d1,d0 or.b d1,d2 move.b d0,1(a0) move.b d2,$22(a0) rts ; End of function sub_32F67A ; =============== S U B R O U T I N E ======================================= sub_32F6A0: ; ... jsr SingleObjLoad2 bne.s return_32F6C6 move.w (a2)+,d0 move.w a1,(a0,d0.w) move.b (a2)+,0(a1) move.b (a2)+,$28(a1) move.w a0,$2C(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) return_32F6C6: ; ... rts ; End of function sub_32F6A0 ; --------------------------------------------------------------------------- bsr.w sub_32F5A6 bclr #0,1(a0) bclr #0,$22(a0) tst.w d0 beq.s return_32F6E8 bset #0,1(a0) bset #0,$22(a0) return_32F6E8: ; ... rts ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_331928 loc_32F6EA: ; ... moveq #0,d1 loc_32F6EC: ; ... jsr SingleObjLoad2 bne.s return_32F73E move.b #$98,0(a1) move.b d2,$28(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) lea (ObjectMove).l,a3 ; AKA SpeedToPos in Sonic 1 move.l a3,$2A(a1) lea (a2,d1.w),a3 move.b (a3)+,d0 ext.w d0 add.w d0,8(a1) move.b (a3)+,d0 ext.w d0 add.w d0,$C(a1) move.b (a3)+,$10(a1) move.b (a3)+,$12(a1) move.b (a3)+,$1A(a1) move.b (a3)+,1(a1) addq.w #6,d1 dbf d6,loc_32F6EC return_32F73E: ; ... rts ; END OF FUNCTION CHUNK FOR sub_331928 ; =============== S U B R O U T I N E ======================================= sub_32F740: ; ... ; FUNCTION CHUNK AT 0032F784 SIZE 00000044 BYTES moveq #0,d0 move.b $1C(a0),d0 cmp.b $1D(a0),d0 beq.s loc_32F75C move.b d0,$1D(a0) move.b #0,$1B(a0) move.b #0,$1E(a0) loc_32F75C: ; ... subq.b #1,$1E(a0) bpl.s loc_32F780 add.w d0,d0 add.w (a1,d0.w),a1 move.b (a1),$1E(a0) moveq #0,d1 move.b $1B(a0),d1 move.b 1(a1,d1.w),d0 bmi.s loc_32F784 ; End of function sub_32F740 ; =============== S U B R O U T I N E ======================================= sub_32F778: ; ... move.b d0,$1A(a0) addq.b #1,$1B(a0) loc_32F780: ; ... moveq #0,d0 rts ; End of function sub_32F778 ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_32F740 loc_32F784: ; ... addq.b #1,d0 bne.s loc_32F798 move.b #0,$1B(a0) move.b 1(a1),d0 bsr.s sub_32F778 moveq #1,d0 rts ; --------------------------------------------------------------------------- loc_32F798: ; ... addq.b #1,d0 bne.s loc_32F7AE addq.b #2,$24(a0) move.b #0,$1E(a0) addq.b #1,$1B(a0) moveq #1,d0 rts ; --------------------------------------------------------------------------- loc_32F7AE: ; ... addq.b #1,d0 bne.s loc_32F7BA addq.b #2,$25(a0) moveq #1,d0 rts ; --------------------------------------------------------------------------- loc_32F7BA: ; ... addq.b #1,d0 bne.s return_32F7C6 move.b #1,$1E(a0) moveq #1,d0 return_32F7C6: ; ... rts ; END OF FUNCTION CHUNK FOR sub_32F740 ; --------------------------------------------------------------------------- loc_32F7C8: ; ... tst.w ($FFFFFFDC).w beq.s loc_32F7D4 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32F7D4: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_32F7EE jmp DisplaySprite ; --------------------------------------------------------------------------- loc_32F7EE: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- Obj8C: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32F802(pc,d0.w),d1 jmp off_32F802(pc,d1.w) ; --------------------------------------------------------------------------- off_32F802: dc.w loc_32F80C-off_32F802,loc_32F81E-off_32F802,loc_32F878-off_32F802; 0 ; ... dc.w loc_32F828-off_32F802,loc_32F8F6-off_32F802; 3 ; --------------------------------------------------------------------------- loc_32F80C: ; ... bsr.w LoadSubObject move.b #$10,$2A(a0) move.b #4,$2B(a0) rts ; --------------------------------------------------------------------------- loc_32F81E: ; ... tst.b 1(a0) bmi.s loc_32F840 bra.w loc_32F82E ; --------------------------------------------------------------------------- loc_32F828: ; ... subq.b #1,$2A(a0) bmi.s loc_32F840 loc_32F82E: ; ... lea (Ani_Obj8C).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32F840: ; ... subq.b #1,$2B(a0) bpl.s loc_32F866 move.b #8,$24(a0) bclr #0,$22(a0) clr.w $12(a0) move.w #-$200,$10(a0) move.w #-$200,$12(a0) bra.w loc_32F8F6 ; --------------------------------------------------------------------------- loc_32F866: ; ... move.b #4,$24(a0) move.w #-$100,$12(a0) move.b #$60,$2A(a0) loc_32F878: ; ... subq.b #1,$2A(a0) bmi.s loc_32F8C8 bsr.w sub_32F5A6 bclr #0,$22(a0) tst.w d0 beq.s loc_32F892 bset #0,$22(a0) loc_32F892: ; ... move.w word_32F8C4(pc,d0.w),d2 add.w d2,$10(a0) move.w word_32F8C4(pc,d1.w),d2 add.w d2,$12(a0) move.w #$200,d0 move.w d0,d1 bsr.w sub_32F5EA jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj8C).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- word_32F8C4: dc.w -$10, $10 ; 0 ; ... ; --------------------------------------------------------------------------- loc_32F8C8: ; ... move.b #6,$24(a0) jsr RandomNumber move.l ($FFFFF636).w,d0 and.b #$1F,d0 move.b d0,$2A(a0) bsr.w sub_32F624 lea (Ani_Obj8C).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32F8F6: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj8C).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- dc.b 0, $32, -7, $1E,-$5B, 0, 4, 4, $C, $B; 0 Ani_Obj8C: dc.w byte_32F91A-Ani_Obj8C ; 0 ; ... byte_32F91A: dc.b 1, 0, 1, -1, 0, 4, 0, $12, 0, 2; 0 ; ... dc.b -8, 8, 0, 0, -1, -$C, 0, 8, 0, 3; 10 dc.b -1, -$C, 0, 2, -8, 8, 0, 6, -1, -$C; 20 dc.b 0, 8, 0, 3, -1, -$C; 30 ; --------------------------------------------------------------------------- Obj8D: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32F94C(pc,d0.w),d1 jmp off_32F94C(pc,d1.w) ; --------------------------------------------------------------------------- off_32F94C: dc.w loc_32F958-off_32F94C,loc_32F9A4-off_32F94C,loc_32F9CC-off_32F94C; 0 ; ... dc.w loc_32F9DE-off_32F94C,loc_32FA06-off_32F94C,loc_32FA44-off_32F94C; 3 ; --------------------------------------------------------------------------- loc_32F958: ; ... bsr.w LoadSubObject bclr #1,1(a0) beq.s loc_32F970 bclr #1,$22(a0) and.w #%111111111111111,2(a0) loc_32F970: ; ... move.b #$14,$16(a0) move.b #$10,$17(a0) jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_32F990 add.w d1,$C(a0) move.w #0,$12(a0) loc_32F990: ; ... move.b 0(a0),d0 sub.b #$8D,d0 beq.w loc_32FB4E move.b #6,$24(a0) rts ; --------------------------------------------------------------------------- loc_32F9A4: ; ... bsr.w sub_32F5A6 tst.w d2 bpl.s loc_32F9AE neg.w d2 loc_32F9AE: ; ... cmp.w #$60,d2 bls.s loc_32F9BA jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32F9BA: ; ... addq.b #2,$24(a0) st $2B(a0) bsr.w sub_32FB14 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32F9CC: ; ... lea (Ani_Obj8D).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32F9DE: ; ... addq.b #2,$24(a0) bsr.w sub_32F5A6 move.w word_32FA02(pc,d0.w),$10(a0) bclr #0,$22(a0) tst.w d0 beq.s loc_32F9FC bset #0,$22(a0) loc_32F9FC: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- word_32FA02: dc.w -$100, $100 ; 0 ; ... ; --------------------------------------------------------------------------- loc_32FA06: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 cmp.w #$FFFF,d1 blt.s loc_32FA34 cmp.w #$C,d1 bge.s loc_32FA34 add.w d1,$C(a0) lea (Ani_Obj8D_0).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32FA34: ; ... addq.b #2,$24(a0) move.b #$3B,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32FA44: ; ... subq.b #1,$2A(a0) bmi.s loc_32FA50 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32FA50: ; ... move.b #8,$24(a0) neg.w $10(a0) bchg #0,$22(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- Obj8F: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32FA74(pc,d0.w),d1 jmp off_32FA74(pc,d1.w) ; --------------------------------------------------------------------------- off_32FA74: dc.w loc_32FA7A-off_32FA74,loc_32FA84-off_32FA74,loc_32FB00-off_32FA74; 0 ; ... ; --------------------------------------------------------------------------- loc_32FA7A: ; ... bsr.w LoadSubObject clr.w 2(a0) rts ; --------------------------------------------------------------------------- loc_32FA84: ; ... move.w $2C(a0),a1 tst.b $2B(a1) bne.s loc_32FA94 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32FA94: ; ... addq.b #2,$24(a0) move.w $2E(a0),d0 move.b byte_32FAAE(pc,d0.w),$10(a0) move.b byte_32FAAF(pc,d0.w),$12(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- byte_32FAAE: dc.b 1 ; ... byte_32FAAF: dc.b -2, 1, -1, -1, -2, -1, -1; 0 ; ... ; --------------------------------------------------------------------------- Obj90: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32FAC4(pc,d0.w),d1 jmp off_32FAC4(pc,d1.w) ; --------------------------------------------------------------------------- off_32FAC4: dc.w loc_32FAC8-off_32FAC4,loc_32FB00-off_32FAC4; 0 ; ... ; --------------------------------------------------------------------------- loc_32FAC8: ; ... bsr.w LoadSubObject move.w #$4509,2(a0) move.w $2E(a0),d0 move.b byte_32FAF6(pc,d0.w),$10(a0) move.b byte_32FAF7(pc,d0.w),$12(a0) lsr.w #1,d0 move.b byte_32FAF0(pc,d0.w),$1A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- byte_32FAF0: dc.b 0, 2, 0, 1, 0, 0; 0 ; ... byte_32FAF6: dc.b -1 ; 0 ; ... byte_32FAF7: dc.b -4, 4, -3, 2, 0, -3, -1, -3, -3; 0 ; ... ; --------------------------------------------------------------------------- loc_32FB00: ; ... tst.b 1(a0) bpl.w loc_32F7EE jsr ObjectMoveAndFall jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_32FB14: ; ... moveq #0,d1 moveq #4,d6 loc_32FB18: ; ... jsr SingleObjLoad bne.s return_32FB28 bsr.w sub_32FB2A dbf d6,loc_32FB18 return_32FB28: ; ... rts ; End of function sub_32FB14 ; =============== S U B R O U T I N E ======================================= sub_32FB2A: ; ... move.b #$90,0(a1) move.b #6,$28(a1) move.w a0,$2C(a1) move.w d1,$2E(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) addq.w #2,d1 rts ; End of function sub_32FB2A ; --------------------------------------------------------------------------- loc_32FB4E: ; ... moveq #0,d1 moveq #3,d6 loc_32FB52: ; ... jsr SingleObjLoad bne.s return_32FB62 bsr.w sub_32FB64 dbf d6,loc_32FB52 return_32FB62: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_32FB64: ; ... move.b #$8F,0(a1) move.b #4,$28(a1) move.w a0,$2C(a1) move.w d1,$2E(a1) move.l 8(a0),d0 swap d0 moveq #0,d2 move.b byte_32FBA8(pc,d1.w),d2 ext.w d2 add.w d2,d0 swap d0 move.l d0,8(a1) move.l $C(a0),d0 swap d0 moveq #0,d2 move.b byte_32FBA9(pc,d1.w),d2 ext.w d2 add.w d2,d0 swap d0 move.l d0,$C(a1) addq.w #2,d1 rts ; End of function sub_32FB64 ; --------------------------------------------------------------------------- byte_32FBA8: dc.b 0 ; ... byte_32FBA9: dc.b -$14, $10, -4, 0, $C,-$10, -4, 0, $32, -5; 0 ; ... dc.b -$24,-$5B, 9, 4, 5, $10, 2, 0, $32, -5; 10 dc.b -$14, 0, 0,-$7C, 4, $10, 0, 0, $32, -5; 20 dc.b -$1A,-$5B, 9,-$7C, 4, 8, 0; 30 Ani_Obj8D_0: dc.w byte_32FBD0-Ani_Obj8D_0 ; 0 ; ... byte_32FBD0: dc.b 3, 2, 3, 4, -1, 0; 0 ; ... Ani_Obj8D: dc.w byte_32FBD8-Ani_Obj8D ; 0 ; ... byte_32FBD8: dc.b 7, 0, 1, -4 ; 0 ; ... off_32FBDC: dc.w byte_32FBEE-off_32FBDC,byte_32FC08-off_32FBDC,byte_32FC22-off_32FBDC; 0 ; ... dc.w byte_32FC30-off_32FBDC,byte_32FC3E-off_32FBDC,byte_32FC42-off_32FBDC; 3 dc.w byte_32FC4A-off_32FBDC,byte_32FC52-off_32FBDC,byte_32FC54-off_32FBDC; 6 byte_32FBEE: dc.b 0, 4, -$C, 0, 0, 0, -1, -8, -4, 6; 0 ; ... dc.b 0, 1, -1,-$10, -$C, 0, 8, 0, 0, 0; 10 dc.b -4, 6, 8, 1, 0, 0; 20 byte_32FC08: dc.b 0, 4,-$14, 0, 0, 7, -1, -8, -$C, 7; 0 ; ... dc.b 0, 8, -1,-$10,-$14, 0, 8, 7, 0, 0; 10 dc.b -$C, 7, 8, 8, 0, 0; 20 byte_32FC22: dc.b 0, 2,-$14, $F, 0, $10, -1,-$10, $C, $C; 0 ; ... dc.b 0, $20, -1,-$10 ; 10 byte_32FC30: dc.b 0, 2,-$14, $F, 0, $10, -1,-$10, $C, $C; 0 ; ... dc.b 0, $24, -1,-$10 ; 10 byte_32FC3E: dc.b 0, 2,-$14, $F ; 0 ; ... byte_32FC42: dc.b 0, $10, -1,-$10, $C, $C, 0, $28; 0 ; ... byte_32FC4A: dc.b -1,-$10, 0, 1, -8, 5, 0, $2C; 0 ; ... byte_32FC52: dc.b -1, -8 ; 0 ; ... byte_32FC54: dc.b 0, 1, -4, 0, 0, $30, -1, -4, 0, 1; 0 ; ... dc.b -4, 0, 0, $31, -1, -4, 0, 2, -8, 5; 10 dc.b $40,-$6D, -1,-$10, -8, 5, $40,-$69, 0, 0; 20 ; --------------------------------------------------------------------------- Obj91: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32FC80(pc,d0.w),d1 jmp off_32FC80(pc,d1.w) ; --------------------------------------------------------------------------- off_32FC80: dc.w loc_32FC88-off_32FC80,loc_32FCAA-off_32FC80,loc_32FCFE-off_32FC80; 0 ; ... dc.w loc_32FD32-off_32FC80 ; 3 ; --------------------------------------------------------------------------- loc_32FC88: ; ... bsr.w LoadSubObject move.w #$200,$2A(a0) move.w #$50,$2C(a0) moveq #$40,d0 btst #0,$22(a0) bne.s loc_32FCA4 neg.w d0 loc_32FCA4: ; ... move.w d0,$10(a0) rts ; --------------------------------------------------------------------------- loc_32FCAA: ; ... subq.b #1,$2C(a0) bne.s loc_32FCB4 bsr.w sub_32FD4A loc_32FCB4: ; ... subq.w #1,$2A(a0) bpl.s loc_32FCD0 move.w #$200,$2A(a0) bchg #0,$22(a0) bchg #0,1(a0) neg.w $10(a0) loc_32FCD0: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bsr.w sub_32F5A6 move.w d2,d4 move.w d3,d5 bsr.w sub_32FD86 bne.s loc_32FCEA jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32FCEA: ; ... addq.b #2,$24(a0) move.b #$10,$2A(a0) clr.w $10(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32FCFE: ; ... subq.b #1,$2A(a0) bmi.s loc_32FD08 bra.w loc_32FD38 ; --------------------------------------------------------------------------- loc_32FD08: ; ... addq.b #2,$24(a0) bsr.w sub_32F5A6 lsr.w #1,d0 move.b byte_32FD2E(pc,d0.w),$10(a0) add.w #$10,d3 cmp.w #$20,d3 bcs.s loc_32FD2A lsr.w #1,d1 move.b byte_32FD30(pc,d1.w),$13(a0) loc_32FD2A: ; ... bra.w loc_32FD38 ; --------------------------------------------------------------------------- byte_32FD2E: dc.b -2, 2 ; 0 ; ... byte_32FD30: dc.b -$80,-$80 ; 0 ; ... ; --------------------------------------------------------------------------- loc_32FD32: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 loc_32FD38: ; ... lea (Ani_Obj91).l,a1 jsr AnimateSprite jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_32FD4A: ; ... move.w #$50,$2C(a0) jsr SingleObjLoad bne.s return_32FD84 move.b #$A,0(a1) move.b #6,$28(a1) move.w 8(a0),8(a1) moveq #$14,d0 btst #0,1(a0) beq.s loc_32FD76 neg.w d0 loc_32FD76: ; ... add.w d0,8(a1) move.w $C(a0),$C(a1) addq.w #6,$C(a1) return_32FD84: ; ... rts ; End of function sub_32FD4A ; =============== S U B R O U T I N E ======================================= sub_32FD86: ; ... add.w #$20,d3 cmp.w #$40,d3 bcc.s loc_32FDB2 tst.w d2 bmi.s loc_32FD9E tst.w $10(a0) bpl.s loc_32FDB2 bra.w loc_32FDA6 ; --------------------------------------------------------------------------- loc_32FD9E: ; ... tst.w $10(a0) bmi.s loc_32FDB2 neg.w d2 loc_32FDA6: ; ... cmp.w #$20,d2 bcs.s loc_32FDB2 cmp.w #$A0,d2 bcs.s loc_32FDB6 loc_32FDB2: ; ... moveq #0,d2 rts ; --------------------------------------------------------------------------- loc_32FDB6: ; ... moveq #1,d2 rts ; End of function sub_32FD86 ; --------------------------------------------------------------------------- dc.b 0, $32, -3,-$36, $25, $3B, 4, 4, $10, 2; 0 Ani_Obj91: dc.w byte_32FDC6-Ani_Obj91 ; ... byte_32FDC6: dc.b 4, 0, 1, -1 ; 0 ; ... off_32FDCA: dc.w byte_32FDCE-off_32FDCA,byte_32FDD6-off_32FDCA; 0 ; ... byte_32FDCE: dc.b 0, 1, -$C, $E, 0, 0, -1,-$10; 0 ; ... byte_32FDD6: dc.b 0, 1, -$C, $E, 0, $C, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- Obj92: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32FDEC(pc,d0.w),d1 jmp off_32FDEC(pc,d1.w) ; --------------------------------------------------------------------------- off_32FDEC: dc.w loc_32FDF4-off_32FDEC,loc_32FE0C-off_32FDEC,loc_32FE40-off_32FDEC; 0 ; ... dc.w loc_32FE6C-off_32FDEC ; 3 ; --------------------------------------------------------------------------- loc_32FDF4: ; ... bsr.w LoadSubObject move.b #$40,$2A(a0) move.w #$80,$10(a0) bchg #0,$22(a0) rts ; --------------------------------------------------------------------------- loc_32FE0C: ; ... bsr.w sub_32FF24 bne.s loc_32FE18 subq.b #1,$2A(a0) bmi.s loc_32FE30 loc_32FE18: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj92).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32FE30: ; ... addq.b #2,$24(a0) move.b #$10,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32FE40: ; ... bsr.w sub_32FF24 bne.s loc_32FE4C subq.b #1,$2A(a0) bmi.s loc_32FE52 loc_32FE4C: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32FE52: ; ... subq.b #2,$24(a0) move.b #$40,$2A(a0) neg.w $10(a0) bchg #0,$22(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32FE6C: ; ... move.b $2E(a0),d0 cmp.b #8,d0 beq.s loc_32FE82 subq.b #1,d0 move.b d0,$2E(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_32FE82: ; ... jsr SingleObjLoad2 bne.s loc_32FEBC st $2B(a0) move.b #$93,0(a1) move.b $28(a0),$28(a1) move.w a0,$2C(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b #4,$1A(a1) move.b #2,$1A(a0) move.b #1,$1C(a0) loc_32FEBC: ; ... move.b $2F(a0),$24(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- Obj93: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32FED6(pc,d0.w),d1 jmp off_32FED6(pc,d1.w) ; --------------------------------------------------------------------------- off_32FED6: dc.w loc_32FEDA-off_32FED6,loc_32FF0A-off_32FED6; 0 ; ... ; --------------------------------------------------------------------------- loc_32FEDA: ; ... bsr.w LoadSubObject or.b #$80,1(a0) or.b #$80,$20(a0) move.w $2C(a0),a1 move.b 1(a1),d0 and.b #3,d0 or.b d0,1(a0) moveq #2,d1 btst #1,d0 bne.s loc_32FF04 neg.w d1 loc_32FF04: ; ... move.b d1,$12(a0) rts ; --------------------------------------------------------------------------- loc_32FF0A: ; ... tst.b 1(a0) bpl.w loc_32F7EE bchg #0,1(a0) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_32FF24: ; ... tst.b $2B(a0) bne.s loc_32FF48 tst.b 1(a0) bpl.s loc_32FF48 bsr.w sub_32F5A6 add.w #$20,d2 cmp.w #$40,d2 bcc.s loc_32FF48 add.w #$80,d3 cmp.w #$100,d3 bcs.s loc_32FF4C loc_32FF48: ; ... moveq #0,d0 rts ; --------------------------------------------------------------------------- loc_32FF4C: ; ... move.b $24(a0),$2F(a0) move.b #6,$24(a0) move.b #$10,$2E(a0) moveq #1,d0 rts ; End of function sub_32FF24 ; --------------------------------------------------------------------------- dc.b 0, $32, -1, $78, 0, 0, 4, 4, $10, $12; 0 Ani_Obj92: dc.w byte_32FF70-Ani_Obj92,byte_32FF74-Ani_Obj92; 0 ; ... byte_32FF70: dc.b 9, 0, 1, -1 ; 0 ; ... byte_32FF74: dc.b 9, 2, 3, -1 ; 0 ; ... off_32FF78: dc.w byte_32FF82-off_32FF78,byte_32FF96-off_32FF78,byte_32FFAA-off_32FF78; 0 ; ... dc.w byte_32FFB8-off_32FF78,byte_32FFC6-off_32FF78; 3 byte_32FF82: dc.b 0, 3, 8, 9, 5, $20, -1, -$C,-$18, 7; 0 ; ... dc.b $25, $2C, -1, -8, 0, 5, 3,-$22, -1, -8; 10 byte_32FF96: dc.b 0, 3, 8, 9, 5, $26, -1, -$C,-$18, 7; 0 ; ... dc.b $25, $2C, -1, -8, 0, 5, 3,-$22, -1, -8; 10 byte_32FFAA: dc.b 0, 2, 8, 9, 5, $20, -1, -$C, 0, 5; 0 ; ... dc.b 3,-$22, -1, -8 ; 10 byte_32FFB8: dc.b 0, 2, 8, 9, 5, $26, -1, -$C, 0, 5; 0 ; ... dc.b 3,-$22, -1, -8 ; 10 byte_32FFC6: dc.b 0, 1,-$14, 7, $25, $2C, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- Obj95: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_32FFDC(pc,d0.w),d1 jmp off_32FFDC(pc,d1.w) ; --------------------------------------------------------------------------- off_32FFDC: dc.w loc_32FFE6-off_32FFDC,loc_3300B0-off_32FFDC,loc_3300FE-off_32FFDC; 0 ; ... dc.w loc_33011C-off_32FFDC,loc_33019E-off_32FFDC; 3 ; --------------------------------------------------------------------------- loc_32FFE6: ; ... move.l #Map_Obj95,4(a0) move.w #0,2(a0) jsr Adjust2PArtPointer2_Useless or.b #4,1(a0) move.b #4,$18(a0) move.b #$B,$20(a0) move.b #$C,$19(a0) move.w #-$40,$10(a0) moveq #0,d2 lea $37(a0),a2 move.l a2,a3 addq.w #1,a2 moveq #3,d1 loc_330024: ; ... jsr SingleObjLoad2 bne.s loc_330082 addq.b #1,(a3) move.w a1,d5 sub.w #$B000,d5 lsr.w #6,d5 and.w #$7F,d5 move.b d5,(a2)+ move.b 0(a0),0(a1) move.b #6,$24(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) or.b #4,1(a1) move.b #4,$18(a1) move.b #8,$19(a1) move.b #3,$1A(a1) move.b #$98,$20(a1) move.b d2,$26(a1) add.b #$40,d2 move.l a0,$3C(a1) dbf d1,loc_330024 loc_330082: ; ... moveq #1,d0 btst #0,$22(a0) beq.s loc_33008E neg.w d0 loc_33008E: ; ... move.b d0,$36(a0) move.b $28(a0),$24(a0) addq.b #2,$24(a0) move.w #$FFC0,$10(a0) btst #0,$22(a0) beq.s return_3300AE neg.w $10(a0) return_3300AE: ; ... rts ; --------------------------------------------------------------------------- loc_3300B0: ; ... move.w ($FFFFB008).w,d0 sub.w 8(a0),d0 bcc.s loc_3300BC neg.w d0 loc_3300BC: ; ... cmp.w #$A0,d0 bcc.s loc_3300E0 move.w ($FFFFB00C).w,d0 sub.w $C(a0),d0 bcc.s loc_3300CE neg.w d0 loc_3300CE: ; ... cmp.w #$50,d0 bcc.s loc_3300E0 tst.w ($FFFFFE08).w bne.s loc_3300E0 move.b #1,$1C(a0) loc_3300E0: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj95).l,a1 jsr AnimateSprite and.b #3,$1A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3300FE: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj95_0).l,a1 jsr AnimateSprite and.b #3,$1A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_33011C: ; ... lea (Ani_Obj95_0).l,a1 jsr AnimateSprite move.l $3C(a0),a1 cmp.b #$95,0(a1) bne.w loc_32F7EE cmp.b #2,$1A(a1) bne.s loc_330172 cmp.b #$40,$26(a0) bne.s loc_330172 addq.b #2,$24(a0) move.b #0,$1C(a0) subq.b #1,$37(a1) bne.s loc_33015A addq.b #2,$24(a1) loc_33015A: ; ... move.w #-$200,$10(a0) btst #0,$22(a1) beq.s loc_33016C neg.w $10(a0) loc_33016C: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_330172: ; ... move.b $26(a0),d0 jsr CalcSine asr.w #4,d1 add.w 8(a1),d1 move.w d1,8(a0) asr.w #4,d0 add.w $C(a1),d0 move.w d0,$C(a0) move.b $36(a1),d0 add.b d0,$26(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33019E: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 tst.b 1(a0) bpl.w loc_32F7EE lea (Ani_Obj95_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- Ani_Obj95: dc.w byte_3301C2-Ani_Obj95,byte_3301C6-Ani_Obj95; 0 ; ... byte_3301C2: dc.b $F, 0, -1, 0 ; 0 ; ... byte_3301C6: dc.b $F, 1, 2, -2, 1, 0; 0 ; ... Ani_Obj95_0: dc.w byte_3301CE-Ani_Obj95_0 ; ... byte_3301CE: dc.b 5, 3, 4, -1 ; 0 ; ... Map_Obj95: dc.w byte_3301DC-Map_Obj95,byte_3301E4-Map_Obj95,byte_3301EC-Map_Obj95; 0 ; ... dc.w byte_3301F4-Map_Obj95,byte_3301FC-Map_Obj95; 3 byte_3301DC: dc.b 0, 1, -8, 5, 3,-$22, -1, -8; 0 ; ... byte_3301E4: dc.b 0, 1, -8, 5, 3,-$22, -1, -8; 0 ; ... byte_3301EC: dc.b 0, 1, -8, 5, 3,-$22, -1, -8; 0 ; ... byte_3301F4: dc.b 0, 1, -8, 5,-$7D,-$52, -1, -8; 0 ; ... byte_3301FC: dc.b 0, 1, -8, 5,-$75,-$52, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- Obj94: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_330212(pc,d0.w),d1 jmp off_330212(pc,d1.w) ; --------------------------------------------------------------------------- off_330212: dc.w loc_33021A-off_330212,loc_330232-off_330212,loc_330284-off_330212; 0 ; ... dc.w loc_3302B6-off_330212 ; 3 ; --------------------------------------------------------------------------- loc_33021A: ; ... bsr.w LoadSubObject move.b #2,$1A(a0) move.w #-$20,$10(a0) move.b #$80,$2A(a0) rts ; --------------------------------------------------------------------------- loc_330232: ; ... bsr.w sub_32F5A6 add.w #$60,d2 cmp.w #$100,d2 bcc.s loc_330244 bsr.w sub_3304AC loc_330244: ; ... move.w 8(a0),-(sp) bsr.w sub_330266 move.w #$1B,d1 move.w #8,d2 move.w #$11,d3 move.w (sp)+,d4 jsr SolidObject jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_330266: ; ... subq.b #1,$2A(a0) bpl.s loc_33027C move.b #$80,$2A(a0) neg.w $10(a0) bchg #0,1(a0) loc_33027C: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 rts ; End of function sub_330266 ; --------------------------------------------------------------------------- loc_330284: ; ... bsr.w sub_32F5A6 add.w #$60,d2 cmp.w #$100,d2 bcc.s loc_330296 bsr.w sub_3304AC loc_330296: ; ... bsr.w sub_3302A0 jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_3302A0: ; ... move.w #$1B,d1 move.w #8,d2 move.w #8,d3 move.w 8(a0),d4 jmp SolidObject ; End of function sub_3302A0 ; --------------------------------------------------------------------------- loc_3302B6: ; ... bsr.s sub_3302A0 jmp MarkObjGone ; --------------------------------------------------------------------------- Obj97: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3302CC(pc,d0.w),d1 jmp off_3302CC(pc,d1.w) ; --------------------------------------------------------------------------- off_3302CC: dc.w loc_3302D6-off_3302CC,loc_330342-off_3302CC,loc_33037A-off_3302CC; 0 ; ... dc.w loc_3303BA-off_3302CC,loc_3303EE-off_3302CC; 3 ; --------------------------------------------------------------------------- loc_3302D6: ; ... bsr.w LoadSubObject move.b #8,$19(a0) moveq #$28,d0 btst #0,1(a0) bne.s loc_3302EC moveq #-$18,d0 loc_3302EC: ; ... add.w d0,8(a0) add.w #$10,$C(a0) move.b #1,$38(a0) move.w $2C(a0),a1 lea $2E(a1),a1 move.b #$B,$20(a0) moveq #0,d0 move.w $2E(a0),d0 cmp.w #8,d0 beq.s loc_330328 move.b #1,$1A(a0) move.b #$8B,$20(a0) move.w (a1,d0.w),$30(a0) loc_330328: ; ... move.w 6(a1),$32(a0) lsr.w #1,d0 move.b byte_33033C(pc,d0.w),$2A(a0) move.b d0,$39(a0) rts ; --------------------------------------------------------------------------- byte_33033C: dc.b $1E, $18, $12, $C, 6, 0; 0 ; ... ; --------------------------------------------------------------------------- loc_330342: ; ... subq.b #1,$2A(a0) bmi.s loc_330352 bsr.w sub_33040A jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330352: ; ... addq.b #2,$24(a0) move.w #-$120,$10(a0) move.w #-$200,$12(a0) move.w $2E(a0),d0 sub.w #8,d0 neg.w d0 lsr.w #1,d0 move.b byte_33033C(pc,d0.w),$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_33037A: ; ... moveq #$10,d0 add.w d0,$10(a0) subq.b #1,$2A(a0) bmi.s loc_330396 bsr.w sub_33040A jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330396: ; ... addq.b #2,$24(a0) bsr.w sub_32F624 move.b #$20,$2A(a0) move.w $2E(a0),d0 lsr.w #1,d0 move.b byte_3303B6(pc,d0.w),$2B(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- byte_3303B6: dc.b $24, $20, $1C, $1A ; 0 ; ... ; --------------------------------------------------------------------------- loc_3303BA: ; ... bsr.w sub_33040A cmp.w #8,$2E(a0) bne.s loc_3303D0 subq.b #1,$2A(a0) bpl.s loc_3303D0 bsr.w sub_330430 loc_3303D0: ; ... move.b $39(a0),d0 addq.b #1,d0 move.b d0,$39(a0) and.b #3,d0 bne.s loc_3303E8 bsr.w sub_33048A bsr.w sub_330506 loc_3303E8: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3303EE: ; ... move.w ($FFFFEECE).w,d0 add.w #$E0,d0 cmp.w $C(a0),d0 bcs.w loc_32F7EE jsr ObjectMoveAndFall jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_33040A: ; ... move.w $32(a0),a1 cmp.b #$97,(a1) beq.s return_330424 move.b #8,$24(a0) move.w $2E(a0),d0 move.w word_330426(pc,d0.w),$10(a0) return_330424: ; ... rts ; End of function sub_33040A ; --------------------------------------------------------------------------- word_330426: dc.w $80, -$100, $100, -$80, $80; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_330430: ; ... move.b #$7F,$2A(a0) jsr SingleObjLoad2 bne.s return_330488 move.b #$98,0(a1) move.b #3,$1A(a1) move.b #$10,$28(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) lea (ObjectMove).l,a2 ; AKA SpeedToPos in Sonic 1 move.l a2,$2A(a1) moveq #1,d0 moveq #$10,d1 btst #0,1(a0) bne.s loc_330476 neg.w d0 neg.w d1 loc_330476: ; ... move.b d0,$10(a1) add.w d1,8(a1) addq.w #4,$C(a1) move.b #$80,$13(a1) return_330488: ; ... rts ; End of function sub_330430 ; =============== S U B R O U T I N E ======================================= sub_33048A: ; ... move.b $2B(a0),d0 move.b $38(a0),d1 add.b d1,d0 move.b d0,$2B(a0) sub.b #$18,d0 beq.s loc_3304A6 bcs.s loc_3304A6 cmp.b #$10,d0 bcs.s return_3304AA loc_3304A6: ; ... neg.b $38(a0) return_3304AA: ; ... rts ; End of function sub_33048A ; =============== S U B R O U T I N E ======================================= sub_3304AC: ; ... move.b #6,$24(a0) bclr #0,1(a0) tst.w d0 beq.s loc_3304C2 bset #0,1(a0) loc_3304C2: ; ... bsr.w sub_32F624 lea $2C(a0),a2 moveq #0,d1 moveq #4,d6 loc_3304CE: ; ... jsr SingleObjLoad bne.s return_330504 move.b #$97,0(a1) move.b 1(a0),1(a1) move.b $28(a0),$28(a1) move.w a0,$2C(a1) move.w a1,(a2)+ move.w d1,$2E(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) addq.w #2,d1 dbf d6,loc_3304CE return_330504: ; ... rts ; End of function sub_3304AC ; =============== S U B R O U T I N E ======================================= sub_330506: ; ... move.w $30(a0),d0 beq.s return_330552 move.w d0,a1 lea word_3305A2(pc),a2 moveq #0,d0 move.b $2B(a0),d0 and.b #$7F,d0 move.w d0,d1 and.w #$1F,d0 add.w d0,d0 move.b (a2,d0.w),d2 ext.w d2 move.b 1(a2,d0.w),d3 ext.w d3 lsr.w #4,d1 and.w #6,d1 move.w off_330554(pc,d1.w),d1 jsr off_330554(pc,d1.w) move.w 8(a0),d4 add.w d2,d4 move.w d4,8(a1) move.b $D(a0),d5 add.b d3,d5 move.b d5,$D(a1) return_330552: ; ... rts ; End of function sub_330506 ; --------------------------------------------------------------------------- off_330554: dc.w return_33055C-off_330554,loc_33055E-off_330554,loc_330564-off_330554; 0 ; ... dc.w loc_33056A-off_330554 ; 3 ; --------------------------------------------------------------------------- return_33055C: ; ... rts ; --------------------------------------------------------------------------- loc_33055E: ; ... exg d2,d3 neg.w d3 rts ; --------------------------------------------------------------------------- loc_330564: ; ... neg.w d2 neg.w d3 rts ; --------------------------------------------------------------------------- loc_33056A: ; ... exg d2,d3 neg.w d2 rts ; --------------------------------------------------------------------------- dc.l Map_Obj98 dc.w $637E dc.b 4, 4, $10, 0 ; 0 Map_Obj98: dc.w byte_330582-Map_Obj98,byte_33058A-Map_Obj98,byte_330592-Map_Obj98; 0 ; ... dc.w byte_33059A-Map_Obj98 ; 3 byte_330582: dc.b 0, 1, -6, 9, 0, 0, -1,-$14; 0 ; ... byte_33058A: dc.b 0, 1, -8, 5, 0, 6, -1, -8; 0 ; ... byte_330592: dc.b 0, 1, -8, $D, 0, $A, -1,-$10; 0 ; ... byte_33059A: dc.b 0, 1, -4, 0, 0, $12, -1, -4; 0 ; ... word_3305A2: dc.w $F00, $FFF, $FFF, $FFE, $FFD, $FFC, $EFC; 0 ; ... dc.w $EFB, $EFA, $EFA, $DF9, $DF8, $CF8, $CF7; 7 dc.w $CF6, $BF6, $BF5, $AF5, $AF4, $9F4, $8F4; 14 dc.w $8F3, $7F3, $6F2, $6F2, $5F2, $4F2, $4F1; 21 dc.w $3F1, $2F1, $1F1, $1F1 ; 28 ; --------------------------------------------------------------------------- Obj98: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3305F0(pc,d0.w),d1 jmp off_3305F0(pc,d1.w) ; --------------------------------------------------------------------------- off_3305F0: dc.w loc_3305F4-off_3305F0,loc_3305F8-off_3305F0; 0 ; ... ; --------------------------------------------------------------------------- loc_3305F4: ; ... bra.w LoadSubObject ; --------------------------------------------------------------------------- loc_3305F8: ; ... tst.b 1(a0) bpl.w loc_32F7EE move.l $2A(a0),a1 jsr (a1) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_33060C: ; ... bchg #5,2(a0) jmp ObjectMoveAndFall ; --------------------------------------------------------------------------- loc_330618: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj98).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- loc_33062A: ; ... add.w #$20,$12(a0) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 rts ; --------------------------------------------------------------------------- loc_330638: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj98_0).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- loc_33064A: ; ... add.w #$20,$12(a0) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj98_1).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- loc_330662: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj98_2).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- dc.l Map_Obj98 dc.w $237E dc.b -$7C, 4, 4,-$68 ; 0 dc.l Map_Obj98_0 dc.w $A36E dc.b -$7C, 4, 8,-$75 ; 0 dc.l Map_Obj98_1 dc.w $38A dc.b -$7C, 4, 4,-$68 ; 0 dc.l Map_Obj98_2 dc.w $3EE dc.b -$7C, 4, 8,-$75 ; 0 dc.l Map_Obj98_3 dc.w $8368 dc.b -$7C, 5, 4,-$68 ; 0 dc.l Map_Obj98_4 dc.w $252D dc.b -$7C, 5, 4,-$68 ; 0 dc.l Map_Obj98_5 dc.w $A500 dc.b -$7C, 4, 4,-$68 ; 0 dc.l Map_Obj98_6 dc.w $379 dc.b -$7C, 5, 4,-$68 ; 0 dc.l Map_Obj98_7 dc.w $2380 dc.b -$7C, 5, 4,-$68 ; 0 dc.l Map_Obj98_8 dc.w $3AB dc.b -$7C, 3, 4,-$68 ; 0 ; --------------------------------------------------------------------------- Obj99: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3306E6(pc,d0.w),d1 jmp off_3306E6(pc,d1.w) ; --------------------------------------------------------------------------- off_3306E6: dc.w loc_3306EC-off_3306E6,loc_3306F8-off_3306E6,loc_330730-off_3306E6; 0 ; ... ; --------------------------------------------------------------------------- loc_3306EC: ; ... bsr.w LoadSubObject move.w #-$C0,$10(a0) rts ; --------------------------------------------------------------------------- loc_3306F8: ; ... bsr.w sub_32F5A6 tst.w d0 bne.s loc_33070A cmp.w #$80,d2 bcc.s loc_33070A bsr.w sub_330724 loc_33070A: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bsr.w sub_32F646 lea (Ani_Obj99).l,a1 jsr AnimateSprite bra.w loc_32F658 ; =============== S U B R O U T I N E ======================================= sub_330724: ; ... addq.b #2,$24(a0) move.w #-$A0,$12(a0) rts ; End of function sub_330724 ; --------------------------------------------------------------------------- loc_330730: ; ... tst.b $2A(a0) bne.s loc_330748 bsr.w sub_32F5A6 add.w #8,d2 cmp.w #$10,d2 bcc.s loc_330748 bsr.w sub_330768 loc_330748: ; ... add.w #1,$12(a0) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bsr.w sub_32F646 lea (Ani_Obj99).l,a1 jsr AnimateSprite bra.w loc_32F658 ; =============== S U B R O U T I N E ======================================= sub_330768: ; ... st $2A(a0) jsr SingleObjLoad2 bne.s return_3307A2 move.b #$98,0(a1) move.b #4,$1A(a1) move.b #$14,$28(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #$18,$C(a1) lea (loc_33060C).l,a2 move.l a2,$2A(a1) return_3307A2: ; ... rts ; End of function sub_330768 ; --------------------------------------------------------------------------- dc.l Map_Obj98_0 dc.w $A36E dc.b 4, 4, $10, 6 ; 0 Ani_Obj99: dc.w byte_3307B0-Ani_Obj99 ; ... byte_3307B0: dc.b 3, 0, 1, 2, 3, -1; 0 ; ... Map_Obj98_0: dc.w byte_3307C0-Map_Obj98_0,byte_3307DA-Map_Obj98_0,byte_3307F4-Map_Obj98_0; 0 ; ... dc.w byte_33080E-Map_Obj98_0,byte_330828-Map_Obj98_0; 3 byte_3307C0: dc.b 0, 4,-$14, 8, 0, $12, -1,-$18,-$14, 8; 0 ; ... dc.b $18, $12, 0, 0,-$14, 4, 0, 0, -1, -8; 10 dc.b -$C, $F, 0, 2, -1,-$10; 20 byte_3307DA: dc.b 0, 4,-$14, 4, 0, $15, -1,-$10,-$14, 4; 0 ; ... dc.b $18, $15, 0, 0,-$14, 4, 0, 0, -1, -8; 10 dc.b -$C, $F, 0, 2, -1,-$10; 20 byte_3307F4: dc.b 0, 4,-$14, 0, 0, $17, -1, -8,-$14, 0; 0 ; ... dc.b 8, $17, 0, 0,-$14, 4, 0, 0, -1, -8; 10 dc.b -$C, $F, 0, 2, -1,-$10; 20 byte_33080E: dc.b 0, 4,-$14, 4, $10, $15, -1,-$10,-$14, 4; 0 ; ... dc.b 8, $15, 0, 0,-$14, 4, 0, 0, -1, -8; 10 dc.b -$C, $F, 0, 2, -1,-$10; 20 byte_330828: dc.b 0, 1, -8, 5, 0, $18, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- Obj9A: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_33083E(pc,d0.w),d1 jmp off_33083E(pc,d1.w) ; --------------------------------------------------------------------------- off_33083E: dc.w loc_330842-off_33083E,loc_33085E-off_33083E; 0 ; ... ; --------------------------------------------------------------------------- loc_330842: ; ... bsr.w LoadSubObject move.w #$FF80,$10(a0) bsr.w sub_330948 lea (Ani_Unknown).l,a1 move.l a1,$2E(a0) bra.w loc_3309C0 ; --------------------------------------------------------------------------- loc_33085E: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_330874(pc,d0.w),d1 jsr off_330874(pc,d1.w) bsr.w sub_33087C bra.w loc_32F658 ; --------------------------------------------------------------------------- off_330874: dc.w sub_33089E-off_330874,sub_3308C8-off_330874,loc_3308E8-off_330874; 0 ; ... dc.w return_330902-off_330874 ; 3 ; =============== S U B R O U T I N E ======================================= sub_33087C: ; ... move.w 8(a0),-(sp) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 loc_330886: bsr.w sub_32F646 move.w #$18,d1 move.w #8,d2 move.w #$E,d3 move.w (sp)+,d4 jmp PlatformObject ; End of function sub_33087C ; =============== S U B R O U T I N E ======================================= sub_33089E: ; ... bsr.w sub_32F5A6 tst.w d0 bmi.w return_330946 cmp.w #$80,d2 bcc.w return_330946 addq.b #2,$25(a0) move.w #0,$10(a0) move.b #4,$2A(a0) move.b #1,$1A(a0) rts ; End of function sub_33089E ; =============== S U B R O U T I N E ======================================= sub_3308C8: ; ... ; FUNCTION CHUNK AT 003309F6 SIZE 00000044 BYTES subq.b #1,$2A(a0) bpl.w return_330946 addq.b #2,$25(a0) move.b #8,$2A(a0) move.w $2C(a0),a1 move.b #3,$1A(a1) bra.w loc_3309F6 ; End of function sub_3308C8 ; --------------------------------------------------------------------------- loc_3308E8: ; ... subq.b #1,$2A(a0) bpl.s return_330900 addq.b #2,$25(a0) move.w #$FF80,$10(a0) clr.b $1A(a0) move.w $2C(a0),a1 return_330900: ; ... rts ; --------------------------------------------------------------------------- return_330902: ; ... rts ; --------------------------------------------------------------------------- Obj9B: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_330912(pc,d0.w),d1 jmp off_330912(pc,d1.w) ; --------------------------------------------------------------------------- off_330912: dc.w loc_330916-off_330912,loc_33091A-off_330912; 0 ; ... ; --------------------------------------------------------------------------- loc_330916: ; ... bra.w LoadSubObject ; --------------------------------------------------------------------------- loc_33091A: ; ... move.w $2C(a0),a1 lea byte_33092A(pc),a2 bsr.w sub_33092E bra.w loc_32F658 ; --------------------------------------------------------------------------- byte_33092A: dc.b 0, 4, -1,-$18 ; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_33092E: ; ... move.l 8(a1),8(a0) move.l $C(a1),$C(a0) move.w (a2)+,d0 add.w d0,8(a0) move.w (a2)+,d0 add.w d0,$C(a0) ; End of function sub_33092E ; START OF FUNCTION CHUNK FOR sub_33343A return_330946: ; ... rts ; END OF FUNCTION CHUNK FOR sub_33343A ; =============== S U B R O U T I N E ======================================= sub_330948: ; ... jsr SingleObjLoad2 bne.s return_330980 move.b #$9B,0(a1) move.b #2,$1A(a1) move.b #$18,$28(a1) move.w a0,$2C(a1) move.w a1,$2C(a0) move.w 8(a0),8(a1) addq.w #4,8(a1) move.w $C(a0),$C(a1) sub.w #$18,$C(a1) return_330980: ; ... rts ; End of function sub_330948 ; --------------------------------------------------------------------------- Obj9C: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_330990(pc,d0.w),d1 jmp off_330990(pc,d1.w) ; --------------------------------------------------------------------------- off_330990: dc.w loc_330994-off_330990,loc_330998-off_330990; 0 ; ... ; --------------------------------------------------------------------------- loc_330994: ; ... bra.w LoadSubObject ; --------------------------------------------------------------------------- loc_330998: ; ... move.w $2C(a0),a1 move.b $32(a0),d0 cmp.b (a1),d0 bne.w loc_32F7EE move.l 8(a1),8(a0) move.l $C(a1),$C(a0) move.l $2E(a0),a1 jsr AnimateSprite bra.w loc_32F658 ; --------------------------------------------------------------------------- loc_3309C0: ; ... jsr SingleObjLoad2 bne.s return_3309F4 move.b #$9C,0(a1) move.b #6,$1A(a1) move.b #$1A,$28(a1) move.w a0,$2C(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.l $2E(a0),$2E(a1) move.b (a0),$32(a1) return_3309F4: ; ... rts ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_3308C8 loc_3309F6: ; ... jsr SingleObjLoad bne.s return_330A38 move.b #$98,0(a1) move.b #6,$1A(a1) move.b #$1C,$28(a1) move.w 8(a0),8(a1) sub.w #$14,8(a1) move.w $C(a0),$C(a1) add.w #$A,$C(a1) move.w #$FF00,$10(a1) lea (loc_330618).l,a2 move.l a2,$2A(a1) return_330A38: ; ... rts ; END OF FUNCTION CHUNK FOR sub_3308C8 ; --------------------------------------------------------------------------- dc.l Map_Obj98_1 dc.w $38A dc.b 4, 5, $18, 0 ; 0 dc.l Map_Obj98_1 dc.w $38A dc.b 4, 4, $C, $1A ; 0 dc.l Map_Obj98_1 dc.w $38A dc.b 4, 5, 8, 0 ; 0 Ani_Obj98: dc.w byte_330A5A-Ani_Obj98 ; 0 ; ... byte_330A5A: dc.b 1, 4, 5, -1 ; 0 ; ... Ani_Unknown: dc.w byte_330A60-Ani_Unknown ; ... ; In Sonic 2, this is off_37B56 byte_330A60: dc.b 1, 6, 7, -1 ; 0 ; ... Ani_ObjAC: dc.w byte_330A66-Ani_ObjAC ; ... ; In Sonic 2, this is off_37B5C byte_330A66: dc.b 1, 8, 9, -1 ; 0 ; ... Map_Obj98_1: dc.w byte_330A7E-Map_Obj98_1,byte_330A92-Map_Obj98_1,byte_330AA6-Map_Obj98_1; 0 ; ... dc.w byte_330AAE-Map_Obj98_1,byte_330AB6-Map_Obj98_1,byte_330ABE-Map_Obj98_1; 3 dc.w byte_330AC6-Map_Obj98_1,byte_330ACE-Map_Obj98_1,byte_330AD6-Map_Obj98_1; 6 dc.w byte_330ADE-Map_Obj98_1 ; 9 byte_330A7E: dc.b 0, 3,-$10, 9,-$60, 0, -1,-$1C,-$10, $F; 0 ; ... dc.b -$60, 6, -1, -4, 0, 9,-$60, $16, -1,-$1C; 10 byte_330A92: dc.b 0, 3,-$10, 9,-$60, 0, -1,-$1C, 0, 9; 0 ; ... dc.b -$60, $1C, -1,-$1C,-$10, $F,-$60, 6, -1, -4; 10 byte_330AA6: dc.b 0, 1, -$C, $A,-$60, $22, -1, -$C; 0 ; ... byte_330AAE: dc.b 0, 1, -$C, $A,-$60, $2B, -1, -$C; 0 ; ... byte_330AB6: dc.b 0, 1, -4, 0,-$80, $34, -1, -4; 0 ; ... byte_330ABE: dc.b 0, 1, -4, 0,-$80, $35, -1, -4; 0 ; ... byte_330AC6: dc.b 0, 1, 6, 4,-$80, $36, 0, $1C; 0 ; ... byte_330ACE: dc.b 0, 1, 6, 0,-$80, $38, 0, $1C; 0 ; ... byte_330AD6: dc.b 0, 1, -5, 4,-$80, $36, 0, $1B; 0 ; ... byte_330ADE: dc.b 0, 1, -5, 0,-$80, $38, 0, $1B; 0 ; ... ; --------------------------------------------------------------------------- Obj9D: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_330AF4(pc,d0.w),d1 jmp off_330AF4(pc,d1.w) ; --------------------------------------------------------------------------- off_330AF4: dc.w loc_330AFC-off_330AF4,loc_330B08-off_330AF4,loc_330BA0-off_330AF4; 0 ; ... dc.w loc_330BCE-off_330AF4 ; 3 ; --------------------------------------------------------------------------- loc_330AFC: ; ... bsr.w LoadSubObject move.b #$10,$2A(a0) rts ; --------------------------------------------------------------------------- loc_330B08: ; ... bsr.w sub_32F5A6 bclr #0,1(a0) bclr #0,$22(a0) tst.w d0 beq.s loc_330B28 bset #0,1(a0) bset #0,$22(a0) loc_330B28: ; ... add.w #$60,d2 cmp.w #$C0,d2 bcc.s loc_330B3C tst.b $2E(a0) beq.s loc_330B56 subq.b #1,$2E(a0) loc_330B3C: ; ... subq.b #1,$2A(a0) bmi.s loc_330B48 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330B48: ; ... addq.b #2,$24(a0) bsr.w sub_330B74 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330B56: ; ... move.b #6,$24(a0) move.b #1,$1A(a0) move.b #8,$2A(a0) move.b #$20,$2E(a0) jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_330B74: ; ... move.w $2C(a0),d0 cmp.w #$C,d0 bcs.s loc_330B80 moveq #0,d0 loc_330B80: ; ... lea byte_330B94(pc,d0.w),a1 addq.w #2,d0 move.w d0,$2C(a0) move.b (a1)+,$12(a0) move.b (a1)+,$2A(a0) rts ; End of function sub_330B74 ; --------------------------------------------------------------------------- byte_330B94: dc.b -1, $20, 1, $18, -1, $10, 1, $28, -1, $20; 0 ; ... dc.b 1, $10 ; 10 ; --------------------------------------------------------------------------- loc_330BA0: ; ... subq.b #1,$2A(a0) beq.s loc_330BBE jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Obj9D).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330BBE: ; ... subq.b #2,$24(a0) move.b #$10,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330BCE: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_330BE2(pc,d0.w),d1 jsr off_330BE2(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_330BE2: dc.w loc_330BE6-off_330BE2,loc_330C02-off_330BE2; 0 ; ... ; --------------------------------------------------------------------------- loc_330BE6: ; ... subq.b #1,$2A(a0) bmi.s loc_330BEE rts ; --------------------------------------------------------------------------- loc_330BEE: ; ... addq.b #2,$25(a0) move.b #8,$2A(a0) move.b #2,$1A(a0) bra.w loc_330C1E ; --------------------------------------------------------------------------- loc_330C02: ; ... subq.b #1,$2A(a0) bmi.s loc_330C0A rts ; --------------------------------------------------------------------------- loc_330C0A: ; ... clr.b $25(a0) move.b #4,$24(a0) move.b #8,$2A(a0) bra.w sub_330B74 ; --------------------------------------------------------------------------- loc_330C1E: ; ... jsr SingleObjLoad bne.s return_330C74 move.b #$98,0(a1) move.b #3,$1A(a1) move.b #$20,$28(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #-$D,$C(a1) moveq #0,d0 btst #0,1(a0) bne.s loc_330C56 moveq #4,d0 loc_330C56: ; ... lea word_330C76(pc,d0.w),a2 move.w (a2)+,d0 add.w d0,8(a1) move.w (a2)+,$10(a1) move.w #$FF00,$12(a1) lea (loc_33062A).l,a2 move.l a2,$2A(a1) return_330C74: ; ... rts ; --------------------------------------------------------------------------- word_330C76: dc.w -$B, $100, $B, -$100 ; 0 ; ... dc.l Map_Obj98_2 dc.w $3EE dc.b 4, 5, $C, 9 ; 0 Ani_Obj9D: dc.w byte_330C8C-Ani_Obj9D,byte_330C90-Ani_Obj9D; 0 ; ... byte_330C8C: dc.b 5, 0, 1, -1 ; 0 ; ... byte_330C90: dc.b 9, 1, 2, 1, -1, 0; 0 ; ... Map_Obj98_2: dc.w byte_330C9E-Map_Obj98_2,byte_330CB8-Map_Obj98_2,byte_330CD2-Map_Obj98_2; 0 ; ... dc.w byte_330CEC-Map_Obj98_2 ; 3 byte_330C9E: dc.b 0, 4, 0, 5, 0, $1A, -1, -2,-$10, 9; 0 ; ... dc.b 0, 0, -1, -4, 0, $D, 0, 6, -1, -$C; 10 dc.b $10, 1, 0, $E, 0, $C; 20 byte_330CB8: dc.b 0, 4, 0, 5, 0, $1E, -1, -2,-$10, 9; 0 ; ... dc.b 0, 0, -1, -4, 0, $D, 0, $10, -1, -$C; 10 dc.b $10, 1, 0, $18, 0, $C; 20 byte_330CD2: dc.b 0, 4, -8, 1, 0, $22, 0, 7,-$10, 9; 0 ; ... dc.b 0, 0, -1, -4, 0, $D, 0, $10, -1, -$C; 10 dc.b $10, 1, 0, $18, 0, $C; 20 byte_330CEC: dc.b 0, 2, -8, 1, $40, $24, -1, -8, -8, 1; 0 ; ... dc.b $48, $24, 0, 0 ; 10 ; --------------------------------------------------------------------------- Obj9E: ; ... moveq #0,d0 move.b $3B(a0),d0 move.w off_330D08(pc,d0.w),d1 jmp off_330D08(pc,d1.w) ; --------------------------------------------------------------------------- off_330D08: dc.w loc_330D14-off_330D08,loc_330D26-off_330D08,loc_330D80-off_330D08; 0 ; ... dc.w loc_330DA2-off_330D08,loc_330DC6-off_330D08,loc_330DF2-off_330D08; 3 ; --------------------------------------------------------------------------- loc_330D14: ; ... bsr.w LoadSubObject move.b #$80,$16(a0) addq.b #2,$3B(a0) bra.w loc_330E6C ; --------------------------------------------------------------------------- loc_330D26: ; ... bsr.w sub_32F5A6 move.w d2,d4 move.w d3,d5 add.w #$80,d2 cmp.w #$100,d2 bcc.s loc_330D42 add.w #$80,d3 cmp.w #$100,d3 bcs.s loc_330D48 loc_330D42: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330D48: ; ... addq.b #2,$3B(a0) move.b #$10,$3A(a0) bclr #0,1(a0) tst.w d0 beq.s loc_330D62 bset #0,1(a0) loc_330D62: ; ... neg.w d4 lsl.w #3,d4 and.w #-$100,d4 move.w d4,$10(a0) neg.w d5 lsl.w #3,d5 and.w #-$100,d5 move.w d5,$12(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330D80: ; ... subq.b #1,$3A(a0) bmi.s loc_330D8C jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330D8C: ; ... addq.b #2,$3B(a0) move.b #8,$39(a0) move.b #$1C,$3A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330DA2: ; ... subq.b #1,$3A(a0) beq.s loc_330DB4 jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330DB4: ; ... move.b $39(a0),$3B(a0) move.b #$20,$3A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330DC6: ; ... subq.b #1,$3A(a0) beq.s loc_330DD2 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330DD2: ; ... move.b #6,$3B(a0) move.b #2,$39(a0) move.b #$1C,$3A(a0) neg.w $10(a0) neg.w $12(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330DF2: ; ... move.w $3E(a0),a1 cmp.b #$9E,(a1) bne.w loc_32F7EE bclr #0,1(a0) btst #0,1(a1) beq.s loc_330E12 bset #0,1(a0) loc_330E12: ; ... move.b #$80,$14(a0) move.w 8(a1),8(a0) move.w $C(a1),$C(a0) cmp.b #6,$3B(a1) bne.s loc_330E62 move.w $10(a1),d2 asr.w #8,d2 move.w $12(a1),d3 asr.w #8,d3 lea $10(a0),a2 move.b $3A(a1),d0 moveq #$18,d1 moveq #6,d6 loc_330E44: ; ... move.w (a2),d4 move.w 2(a2),d5 cmp.b d1,d0 bcc.s loc_330E52 add.w d2,d4 add.w d3,d5 loc_330E52: ; ... move.w d4,(a2)+ move.w d5,(a2)+ sub.b #4,d1 bcs.s loc_330E62 addq.w #2,a2 dbf d6,loc_330E44 loc_330E62: ; ... move.w #$280,d0 jmp loc_312DBC ; --------------------------------------------------------------------------- loc_330E6C: ; ... jsr SingleObjLoad bne.s return_330EE0 move.b #$9E,0(a1) move.b 1(a0),1(a1) bset #6,1(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.b #$A,$3B(a1) move.b #0,$B(a1) move.b #$80,$E(a1) move.b #7,$F(a1) move.w a0,$3E(a1) move.w 8(a0),d2 move.w d2,8(a1) move.w $C(a0),d3 move.w d3,$C(a1) move.b #$80,$14(a1) bset #4,1(a1) lea $10(a1),a2 moveq #6,d6 loc_330ED0: ; ... move.w d2,(a2)+ move.w d3,(a2)+ move.w #2,(a2)+ add.w #$10,d1 dbf d6,loc_330ED0 return_330EE0: ; ... rts ; --------------------------------------------------------------------------- dc.l Map_Obj9E dc.w $23C0 dc.b 4, 4,-$80, $B ; 0 Map_Obj9E: dc.w byte_330EF2-Map_Obj9E,byte_330EF2-Map_Obj9E,byte_330EFA-Map_Obj9E; 0 ; ... byte_330EF2: dc.b 0, 1, -8, 9, 0, 0, -1,-$10; 0 ; ... byte_330EFA: dc.b 0, 1, -8, 5, 0, 6, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- Obj9F: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_330F10(pc,d0.w),d1 jmp off_330F10(pc,d1.w) ; --------------------------------------------------------------------------- off_330F10: dc.w loc_330F18-off_330F10,loc_330F44-off_330F10,loc_330FC4-off_330F10; 0 ; ... dc.w loc_331000-off_330F10 ; 3 ; --------------------------------------------------------------------------- loc_330F18: ; ... bsr.w LoadSubObject btst #0,1(a0) beq.s loc_330F2A bset #0,$22(a0) loc_330F2A: ; ... move.w #-$40,$10(a0) move.b #$C,$16(a0) move.b #$18,$17(a0) move.w #$140,$2A(a0) rts ; --------------------------------------------------------------------------- loc_330F44: ; ... bsr.w sub_32F5A6 tst.w d0 beq.s loc_330F54 btst #0,1(a0) beq.s loc_330F5E loc_330F54: ; ... add.w #$60,d2 cmp.w #$C0,d2 bcs.s loc_330FAC loc_330F5E: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 cmp.w #-8,d1 blt.s loc_330F92 cmp.w #$C,d1 bge.s loc_330F92 add.w d1,$C(a0) subq.w #1,$2A(a0) bmi.s loc_330F96 lea (Ani_Obj9F).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330F92: ; ... neg.w $10(a0) loc_330F96: ; ... addq.b #2,$24(a0) move.b #0,$1A(a0) move.w #$3B,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330FAC: ; ... move.b #6,$24(a0) move.b #0,$1A(a0) move.w #8,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330FC4: ; ... tst.b 1(a0) bpl.s loc_330FE4 bsr.w sub_32F5A6 tst.w d0 beq.s loc_330FDA btst #0,1(a0) beq.s loc_330FE4 loc_330FDA: ; ... add.w #$60,d2 cmp.w #$C0,d2 bcs.s loc_330FAC loc_330FE4: ; ... subq.w #1,$2A(a0) bmi.s loc_330FF0 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_330FF0: ; ... subq.b #2,$24(a0) move.w #$140,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331000: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_331014(pc,d0.w),d1 jsr off_331014(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_331014: dc.w loc_33101A-off_331014,loc_331030-off_331014,loc_331044-off_331014; 0 ; ... ; --------------------------------------------------------------------------- loc_33101A: ; ... subq.w #1,$2A(a0) bmi.s loc_331022 rts ; --------------------------------------------------------------------------- loc_331022: ; ... addq.b #2,$25(a0) move.b #3,$1A(a0) bra.w loc_3311A8 ; --------------------------------------------------------------------------- loc_331030: ; ... tst.b $2C(a0) bne.s loc_331038 rts ; --------------------------------------------------------------------------- loc_331038: ; ... addq.b #2,$25(a0) move.w #$20,$2A(a0) rts ; --------------------------------------------------------------------------- loc_331044: ; ... subq.w #1,$2A(a0) bmi.s loc_33104C rts ; --------------------------------------------------------------------------- loc_33104C: ; ... clr.b $25(a0) clr.b $2C(a0) move.b #2,$24(a0) move.w #$140,$2A(a0) rts ; --------------------------------------------------------------------------- ObjA0: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_331070(pc,d0.w),d1 jmp off_331070(pc,d1.w) ; --------------------------------------------------------------------------- off_331070: dc.w loc_331076-off_331070,loc_3310B4-off_331070,loc_331192-off_331070; 0 ; ... ; --------------------------------------------------------------------------- loc_331076: ; ... bsr.w LoadSubObject move.w $2C(a0),a1 move.b 1(a1),d0 and.b #1,d0 or.b d0,1(a0) move.w $2E(a0),d0 beq.s loc_33109E move.b #4,$1A(a0) addq.w #6,8(a0) addq.w #6,$C(a0) loc_33109E: ; ... lsr.w #1,d0 move.b byte_3310AC(pc,d0.w),$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- byte_3310AC: dc.b 0, 3, 5, 7, 9, $B, $D, $F; 0 ; ... ; --------------------------------------------------------------------------- loc_3310B4: ; ... move.w $2C(a0),a1 cmp.b #$9F,(a1) bne.s loc_3310DA moveq #0,d0 move.b $25(a0),d0 move.w off_3310D2(pc,d0.w),d1 jsr off_3310D2(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_3310D2: dc.w loc_3310EC-off_3310D2,loc_331136-off_3310D2,loc_331152-off_3310D2; 0 ; ... dc.w loc_331166-off_3310D2 ; 3 ; --------------------------------------------------------------------------- loc_3310DA: ; ... move.b #4,$24(a0) move.w #$40,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3310EC: ; ... subq.b #1,$2A(a0) beq.s loc_3310F6 bmi.s loc_3310F6 rts ; --------------------------------------------------------------------------- loc_3310F6: ; ... addq.b #2,$25(a0) move.w $2E(a0),d0 cmp.w #$E,d0 bcc.s loc_331126 move.w #-$400,d2 btst #0,1(a0) beq.s loc_331112 neg.w d2 loc_331112: ; ... move.w d2,$10(a0) lsr.w #1,d0 move.b byte_33112E(pc,d0.w),d1 move.b d1,$2A(a0) move.b d1,$2B(a0) rts ; --------------------------------------------------------------------------- loc_331126: ; ... move.w #$B,$2A(a0) rts ; --------------------------------------------------------------------------- byte_33112E: dc.b $D, $C, $A, 8, 6, 4, 2, 0; 0 ; ... ; --------------------------------------------------------------------------- loc_331136: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 subq.b #1,$2A(a0) beq.s loc_331146 bmi.s loc_331146 rts ; --------------------------------------------------------------------------- loc_331146: ; ... addq.b #2,$25(a0) move.b #8,$2A(a0) rts ; --------------------------------------------------------------------------- loc_331152: ; ... subq.b #1,$2A(a0) beq.s loc_33115C bmi.s loc_33115C rts ; --------------------------------------------------------------------------- loc_33115C: ; ... addq.b #2,$25(a0) neg.w $10(a0) rts ; --------------------------------------------------------------------------- loc_331166: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 subq.b #1,$2B(a0) beq.s loc_331176 bmi.s loc_331176 rts ; --------------------------------------------------------------------------- loc_331176: ; ... tst.w $2E(a0) bne.s loc_33118A move.w $2C(a0),a1 move.b #0,$1A(a1) st $2C(a1) loc_33118A: ; ... addq.w #4,sp jmp DeleteObject ; --------------------------------------------------------------------------- loc_331192: ; ... jsr ObjectMoveAndFall sub.w #1,$2A(a0) bmi.w loc_32F7EE jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3311A8: ; ... moveq #0,d1 moveq #7,d6 loc_3311AC: ; ... jsr SingleObjLoad2 bne.s return_331206 move.b #$A0,0(a1) move.b #$26,$28(a1) move.b #5,$1A(a1) move.b #4,$18(a1) move.w a0,$2C(a1) move.w d1,$2E(a1) move.w 8(a0),8(a1) move.w #$FFEC,d2 btst #0,1(a0) beq.s loc_3311F0 neg.w d2 tst.w d1 beq.s loc_3311F0 sub.w #$C,d2 loc_3311F0: ; ... add.w d2,8(a1) move.w $C(a0),$C(a1) sub.w #8,$C(a1) addq.w #2,d1 dbf d6,loc_3311AC return_331206: ; ... rts ; --------------------------------------------------------------------------- dc.l Map_ObjA0 dc.w $31C dc.b 4, 5, $18, $A ; 0 dc.l Map_ObjA0 dc.w $31C dc.b 4, 4, $C,-$66 ; 0 Ani_Obj9F: dc.w byte_331220-Ani_Obj9F,byte_331226-Ani_Obj9F; 0 ; ... byte_331220: dc.b $E, 0, 1, 2, -1, 0; 0 ; ... byte_331226: dc.b $E, 0, 2, 1, -1, 0; 0 ; ... Map_ObjA0: dc.w byte_331238-Map_ObjA0,byte_331252-Map_ObjA0,byte_33126C-Map_ObjA0; 0 ; ... dc.w byte_331286-Map_ObjA0,byte_33129A-Map_ObjA0,byte_3312A2-Map_ObjA0; 3 byte_331238: dc.b 0, 4,-$14, $A, 0, $18, -1,-$20, -8, 4; 0 ; ... dc.b 0, $21, 0, 8, -$C, $A, 0, 0, -1,-$18; 10 dc.b -$C, $A, 8, 0, 0, 0; 20 byte_331252: dc.b 0, 4,-$14, $A, 0, $18, -1,-$20, -8, 4; 0 ; ... dc.b 0, $21, 0, 8, -$C, 6, 8, $12, -1,-$10; 10 dc.b -$C, $A, 8, 9, 0, 0; 20 byte_33126C: dc.b 0, 4,-$14, $A, 0, $18, -1,-$20, -8, 4; 0 ; ... dc.b 0, $21, 0, 8, -$C, $A, 0, 9, -1,-$18; 10 dc.b -$C, 6, 0, $12, 0, 0; 20 byte_331286: dc.b 0, 3, -8, 4, 0, $21, 0, 8, -$C, $A; 0 ; ... dc.b 0, 0, -1,-$18, -$C, $A, 8, 0, 0, 0; 10 byte_33129A: dc.b 0, 1, -4, 0, 0, $23, -1, -4; 0 ; ... byte_3312A2: dc.b 0, 1, -$C, $A, 0, $18, -1, -$C; 0 ; ... ; --------------------------------------------------------------------------- ObjA1: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3312B8(pc,d0.w),d1 jmp off_3312B8(pc,d1.w) ; --------------------------------------------------------------------------- off_3312B8: dc.w loc_3312C2-off_3312B8,loc_3312E6-off_3312B8,loc_331366-off_3312B8; 0 ; ... dc.w loc_331386-off_3312B8,loc_3313A6-off_3312B8; 3 ; --------------------------------------------------------------------------- loc_3312C2: ; ... bsr.w LoadSubObject move.w #-$40,d0 btst #0,1(a0) beq.s loc_3312D4 neg.w d0 loc_3312D4: ; ... move.w d0,$10(a0) move.b #$10,$16(a0) move.b #$10,$17(a0) rts ; --------------------------------------------------------------------------- loc_3312E6: ; ... tst.b 1(a0) bpl.s loc_331312 bsr.w sub_32F5A6 btst #0,1(a0) beq.s loc_3312FA subq.w #2,d0 loc_3312FA: ; ... tst.w d0 bne.s loc_331312 add.w #$80,d2 cmp.w #$100,d2 bcc.s loc_331312 add.w #$40,d3 cmp.w #$80,d3 bcs.s loc_331350 loc_331312: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 cmp.w #-8,d1 blt.s loc_331340 cmp.w #$C,d1 bge.s loc_331340 add.w d1,$C(a0) lea (Ani_ObjA1).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331340: ; ... addq.b #2,$24(a0) move.b #$3B,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331350: ; ... addq.b #4,$24(a0) move.b #3,$1A(a0) move.b #8,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331366: ; ... subq.b #1,$2A(a0) bmi.s loc_331372 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331372: ; ... subq.b #2,$24(a0) neg.w $10(a0) bchg #0,$22(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331386: ; ... subq.b #1,$2A(a0) bmi.s loc_331392 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331392: ; ... addq.b #2,$24(a0) move.b #4,$1A(a0) bsr.w sub_331456 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3313A6: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- ObjA2: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3313BA(pc,d0.w),d1 jmp off_3313BA(pc,d1.w) ; --------------------------------------------------------------------------- off_3313BA: dc.w loc_3313C0-off_3313BA,loc_3313CA-off_3313BA,loc_331436-off_3313BA; 0 ; ... ; --------------------------------------------------------------------------- loc_3313C0: ; ... bsr.w LoadSubObject jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3313CA: ; ... tst.b 1(a0) bpl.w loc_32F7EE subq.w #1,$2A(a0) bmi.s loc_33142C move.w $2C(a0),a1 cmp.b #$A1,(a1) bne.s loc_33142C moveq #0,d0 move.b $25(a0),d0 move.w off_331408(pc,d0.w),d1 jsr off_331408(pc,d1.w) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_ObjA2).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- off_331408: dc.w loc_33140A-off_331408 ; ... ; --------------------------------------------------------------------------- loc_33140A: ; ... bsr.w sub_32F5A6 move.w word_331428(pc,d0.w),d2 add.w d2,$10(a0) move.w word_331428(pc,d1.w),d2 add.w d2,$12(a0) move.w #$200,d0 move.w d0,d1 bra.w sub_32F5EA ; --------------------------------------------------------------------------- word_331428: dc.w -$10, $10 ; 0 ; ... ; --------------------------------------------------------------------------- loc_33142C: ; ... addq.b #2,$24(a0) move.w #$60,$2A(a0) loc_331436: ; ... subq.w #1,$2A(a0) bmi.w loc_32F7EE jsr ObjectMoveAndFall lea (Ani_ObjA2).l,a1 jsr AnimateSprite jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_331456: ; ... lea $3C(a0),a2 moveq #0,d1 moveq #1,d6 loc_33145E: ; ... jsr SingleObjLoad2 bne.s return_3314D4 move.b #$A2,0(a1) move.b #$2A,$28(a1) move.b 1(a0),1(a1) move.b #5,$1A(a1) move.b #4,$18(a1) move.w #$78,$2A(a1) move.w a0,$2C(a1) move.w a1,(a2)+ move.w #-$200,d0 btst #0,1(a1) beq.s loc_3314A4 neg.w d0 bset #0,$22(a1) loc_3314A4: ; ... move.w d0,$10(a1) lea byte_3314D6(pc,d1.w),a3 move.b (a3)+,d0 ext.w d0 btst #0,1(a1) beq.s loc_3314BA neg.w d0 loc_3314BA: ; ... add.w 8(a0),d0 move.w d0,8(a1) move.b (a3)+,d0 ext.w d0 add.w $C(a0),d0 move.w d0,$C(a1) addq.w #2,d1 dbf d6,loc_33145E return_3314D4: ; ... rts ; End of function sub_331456 ; --------------------------------------------------------------------------- byte_3314D6: dc.b 6, 0,-$10, 0 ; 0 ; ... dc.l Map_ObjA2 dc.w $243C dc.b 4, 5, $10, 6 ; 0 dc.l Map_ObjA2 dc.w $243C dc.b 4, 4, $10,-$66 ; 0 Ani_ObjA1: dc.w byte_3314F0-Ani_ObjA1 ; 0 ; ... byte_3314F0: dc.b $13, 0, 2, -1 ; 0 ; ... Ani_ObjA2: dc.w byte_3314F6-Ani_ObjA2 ; 0 ; ... byte_3314F6: dc.b 3, 5, 6, 7, 8, -1; 0 ; ... Map_ObjA2: dc.w byte_33150E-Map_ObjA2,byte_33153A-Map_ObjA2,byte_331566-Map_ObjA2; 0 ; ... dc.w byte_331592-Map_ObjA2,byte_3315BE-Map_ObjA2,byte_3315D2-Map_ObjA2; 3 dc.w byte_3315E0-Map_ObjA2,byte_3315EE-Map_ObjA2,byte_3315FC-Map_ObjA2; 6 byte_33150E: dc.b 0, 7, -7, 4, 0, $1A, -1, -$C, 1, 0; 0 ; ... dc.b 0, $1C, -1, -$C,-$10, 9, 0, 0, -1,-$10; 10 dc.b 0, 9, 0, 6, -1,-$10, 0, 1, 0, $C; 20 dc.b 0, 8, -9, 4, 0, $1A, -1,-$20, -1, 0; 30 dc.b 0, $1C, -1,-$20 ; 40 byte_33153A: dc.b 0, 7, -8, 4, 0, $1A, -1, -$C, 0, 0; 0 ; ... dc.b 0, $1C, -1, -$C,-$10, 9, 0, 0, -1,-$10; 10 dc.b 0, 9, 0, $E, -1,-$10, 0, 1, 0, $C; 20 dc.b 0, 8, -8, 4, 0, $1A, -1,-$20, 0, 0; 30 dc.b 0, $1C, -1,-$20 ; 40 byte_331566: dc.b 0, 7, -9, 4, 0, $1A, -1, -$C, -1, 0; 0 ; ... dc.b 0, $1C, -1, -$C,-$10, 9, 0, 0, -1,-$10; 10 dc.b 0, 9, 0, $14, -1,-$10, 0, 1, 0, $C; 20 dc.b 0, 8, -7, 4, 0, $1A, -1,-$20, 1, 0; 30 dc.b 0, $1C, -1,-$20 ; 40 byte_331592: dc.b 0, 7,-$20, 4, $18, $1E, -1, -$C,-$18, 0; 0 ; ... dc.b $18, $1D, -1, -4,-$10, 9, 0, 0, -1,-$10; 10 dc.b 0, 9, 0, 6, -1,-$10, 0, 1, 0, $C; 20 dc.b 0, 8,-$20, 4, $18, $1E, -1,-$20,-$18, 0; 30 dc.b $18, $1D, -1,-$18 ; 40 byte_3315BE: dc.b 0, 3,-$10, 9, 0, 0, -1,-$10, 0, 9; 0 ; ... dc.b 0, 6, -1,-$10, 0, 1, 0, $C, 0, 8; 10 byte_3315D2: dc.b 0, 2,-$10, 4, 0, $1A, -1,-$10, -8, 0; 0 ; ... dc.b 0, $1C, -1,-$10 ; 10 byte_3315E0: dc.b 0, 2, 0, 0, 0, $1D, -1,-$10, 8, 4; 0 ; ... dc.b 0, $1E, -1,-$10 ; 10 byte_3315EE: dc.b 0, 2, 0, 0, $18, $1C, 0, 8, 8, 4; 0 ; ... dc.b $18, $1A, 0, 0 ; 10 byte_3315FC: dc.b 0, 2,-$10, 4, $18, $1E, 0, 0, -8, 0; 0 ; ... dc.b $18, $1D, 0, 8 ; 10 ; --------------------------------------------------------------------------- ObjA3: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_331618(pc,d0.w),d1 jmp off_331618(pc,d1.w) ; --------------------------------------------------------------------------- off_331618: dc.w loc_331626-off_331618,loc_331632-off_331618,loc_331664-off_331618; 0 ; ... dc.w loc_331708-off_331618,loc_331738-off_331618,loc_331762-off_331618; 3 dc.w loc_331774-off_331618 ; 6 ; --------------------------------------------------------------------------- loc_331626: ; ... bsr.w LoadSubObject move.w #$40,$2A(a0) rts ; --------------------------------------------------------------------------- loc_331632: ; ... subq.w #1,$2A(a0) bmi.s loc_33163E jmp loc_312D44 ; --------------------------------------------------------------------------- loc_33163E: ; ... addq.b #2,$24(a0) move.w #-$100,$10(a0) move.w #$40,$12(a0) move.w #2,$2E(a0) clr.w $2A(a0) move.w #$80,$30(a0) jmp loc_312D44 ; --------------------------------------------------------------------------- loc_331664: ; ... subq.w #1,$30(a0) bmi.s loc_3316D0 move.w $2A(a0),d0 bmi.w loc_32F7EE bclr #0,1(a0) bclr #0,$22(a0) tst.w $10(a0) bmi.s loc_331690 bset #0,1(a0) bset #0,$22(a0) loc_331690: ; ... addq.w #1,d0 move.w d0,$2A(a0) move.w $2C(a0),d1 move.w word_3316E6(pc,d1.w),d2 cmp.w d2,d0 bcs.s loc_3316BC addq.w #2,d1 move.w d1,$2C(a0) lea byte_3316F6(pc,d1.w),a1 tst.b (a1)+ beq.s loc_3316B4 neg.w $2E(a0) loc_3316B4: ; ... tst.b (a1)+ beq.s loc_3316BC neg.w $12(a0) loc_3316BC: ; ... move.w $2E(a0),d0 add.w d0,$10(a0) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jmp loc_312D44 ; --------------------------------------------------------------------------- loc_3316D0: ; ... addq.b #2,$24(a0) move.w #$80,$30(a0) or.b #$80,$20(a0) jmp loc_312D44 ; --------------------------------------------------------------------------- word_3316E6: dc.w $100, $1A0, $208, $285, $300, $340, $390; 0 ; ... dc.w $440 ; 7 byte_3316F6: dc.b -$10, 0, 1, 1, 0, 1, 1, 1, 0, 1; 0 ; ... dc.b 0, 1, 1, 0, 0, 1, 0, 1; 10 ; --------------------------------------------------------------------------- loc_331708: ; ... move.b $24(a0),d2 lea (Ani_ObjA3).l,a1 jsr AnimateSprite cmp.b $24(a0),d2 bne.s loc_331724 jmp loc_312D44 ; --------------------------------------------------------------------------- loc_331724: ; ... clr.l $1A(a0) clr.w $1E(a0) move.b #3,$1A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331738: ; ... subq.w #1,$30(a0) bmi.s loc_331750 lea (Ani_ObjA3_0).l,a1 jsr AnimateSprite jmp loc_312D44 ; --------------------------------------------------------------------------- loc_331750: ; ... addq.b #2,$24(a0) clr.l $1A(a0) clr.w $1E(a0) jmp loc_312D44 ; --------------------------------------------------------------------------- loc_331762: ; ... lea (Ani_ObjA3_1).l,a1 jsr AnimateSprite jmp loc_312D44 ; --------------------------------------------------------------------------- loc_331774: ; ... move.b #4,$24(a0) move.w #$80,$30(a0) and.b #$7F,$20(a0) clr.l $1A(a0) clr.w $1E(a0) jmp loc_312D44 ; --------------------------------------------------------------------------- dc.l Map_ObjA3 dc.w $83A8 dc.b 4, 4, $10, 6 ; 0 Ani_ObjA3: dc.w byte_3317A0-Ani_ObjA3 ; ... byte_3317A0: dc.b 0, 0, 1, 0, 0, 0, 0, 0, 1, 0; 0 ; ... dc.b 0, 0, 1, 0, 0, 1, 0, 1, 0, 1; 10 dc.b 0, 1, 0, 1, 0, 1, 0, 1, 0, 2; 20 dc.b 3, 4, -4, 0 ; 30 Ani_ObjA3_0: dc.w byte_3317C4-Ani_ObjA3_0 ; 0 ; ... byte_3317C4: dc.b 0, 2, 0, 3, 0, 4, 0, 3, 0, -1; 0 ; ... Ani_ObjA3_1: dc.w byte_3317D0-Ani_ObjA3_1 ; ... byte_3317D0: dc.b 3, 4, 3, 2, 1, 0, -4, 0; 0 ; ... Map_ObjA3: dc.w byte_3317E2-Map_ObjA3,byte_3317EA-Map_ObjA3,byte_3317F8-Map_ObjA3; 0 ; ... dc.w byte_331812-Map_ObjA3,byte_331838-Map_ObjA3; 3 byte_3317E2: dc.b 0, 1, -8, 9, 0, 0, -1,-$10; 0 ; ... byte_3317EA: dc.b 0, 2, -8, 5, $20, 6, -1, -8, -8, 9; 0 ; ... dc.b 0, 0, -1,-$10 ; 10 byte_3317F8: dc.b 0, 4, -8, 1, $20, $A, -1, -8, -8, 1; 0 ; ... dc.b $28, $A, 0, 0, -8, 5, $20, 6, -1, -8; 10 dc.b -8, 9, 0, 0, -1,-$10; 20 byte_331812: dc.b 0, 6,-$10, 5, $20, $C, -1,-$10,-$10, 5; 0 ; ... dc.b $28, $C, 0, 0, 0, 5, $30, $C, -1,-$10; 10 dc.b 0, 5, $38, $C, 0, 0, -8, 5, $20, 6; 20 dc.b -1, -8, -8, 9, 0, 0, -1,-$10; 30 byte_331838: dc.b 0, 6,-$10, 5, $20, $10, -1,-$10,-$10, 5; 0 ; ... dc.b $28, $10, 0, 0, 0, 5, $30, $10, -1,-$10; 10 dc.b 0, 5, $38, $10, 0, 0, -8, 5, $20, 6; 20 dc.b -1, -8, -8, 9, 0, 0, -1,-$10; 30 ; --------------------------------------------------------------------------- ObjA4: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_33186C(pc,d0.w),d1 jmp off_33186C(pc,d1.w) ; --------------------------------------------------------------------------- off_33186C: dc.w loc_331874-off_33186C,loc_331878-off_33186C,loc_3318A0-off_33186C; 0 ; ... dc.w loc_3318F4-off_33186C ; 3 ; --------------------------------------------------------------------------- loc_331874: ; ... bra.w LoadSubObject ; --------------------------------------------------------------------------- loc_331878: ; ... bsr.w sub_32F5A6 add.w #$60,d2 cmp.w #$C0,d2 bcc.s loc_331890 add.w #$40,d3 cmp.w #$80,d3 bcs.s loc_331896 loc_331890: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331896: ; ... addq.b #2,$24(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3318A0: ; ... bsr.w sub_32F5A6 tst.w d2 bpl.s loc_3318AA neg.w d2 loc_3318AA: ; ... cmp.w #$10,d2 bcs.s loc_3318C0 cmp.w #$60,d2 bcc.s loc_3318C0 move.w word_3318E2(pc,d0.w),$10(a0) bsr.w sub_3318E6 loc_3318C0: ; ... tst.w d3 bpl.s loc_3318C6 neg.w d3 loc_3318C6: ; ... cmp.w #$10,d3 bcs.s loc_3318DC cmp.w #$60,d3 bcc.s loc_3318DC move.w word_3318E2(pc,d1.w),$12(a0) bsr.w sub_3318E6 loc_3318DC: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- word_3318E2: dc.w -$40, $40 ; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_3318E6: ; ... move.b #6,$24(a0) move.b #$40,$2A(a0) rts ; End of function sub_3318E6 ; --------------------------------------------------------------------------- loc_3318F4: ; ... subq.b #1,$2A(a0) bmi.s loc_331912 jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_ObjA4).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331912: ; ... move.b #$27,0(a0) move.b #2,$24(a0) bsr.w sub_331928 jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_331928: ; ... ; FUNCTION CHUNK AT 0032F6EA SIZE 00000056 BYTES move.b #$30,d2 moveq #4,d6 lea (byte_331938).l,a2 bra.w loc_32F6EA ; End of function sub_331928 ; --------------------------------------------------------------------------- byte_331938: dc.b 0, -8, 0, -4, 2, 0, 8, -4, 3, -1; 0 ; ... dc.b 3, 1, 8, 8, 3, 3, 4, 1, -8, 8; 10 dc.b -3, 3, 4, 0, -8, -4, -3, -1, 3, 0; 20 dc.b 0, $33, $19, $66,-$7D, $68, 4, 4, $10, $B; 30 Ani_ObjA4: dc.w byte_331962-Ani_ObjA4 ; 0 ; ... byte_331962: dc.b 1, 0, 1, -1 ; 0 ; ... Map_Obj98_3: dc.w byte_331970-Map_Obj98_3,byte_33197E-Map_Obj98_3,byte_331992-Map_Obj98_3; 0 ; ... dc.w byte_33199A-Map_Obj98_3,byte_3319A2-Map_Obj98_3; 3 byte_331970: dc.b 0, 2,-$10, 7, 0, 0, -1,-$10,-$10, 7; 0 ; ... dc.b 8, 0, 0, 0 ; 10 byte_33197E: dc.b 0, 3, -3, 0, $20, $E, -1, -4,-$10, 7; 0 ; ... dc.b 0, 0, -1,-$10,-$10, 7, 8, 0, 0, 0; 10 byte_331992: dc.b 0, 1, -8, 1, 0, 8, -1, -4; 0 ; ... byte_33199A: dc.b 0, 1, -4, 4, 0, $A, -1, -8; 0 ; ... byte_3319A2: dc.b 0, 1, -8, 1, 0, $C, -1, -4; 0 ; ... ; --------------------------------------------------------------------------- ObjA5: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3319B8(pc,d0.w),d1 jmp off_3319B8(pc,d1.w) ; --------------------------------------------------------------------------- off_3319B8: dc.w loc_3319BE-off_3319B8,loc_3319D0-off_3319B8,loc_331A2A-off_3319B8; 0 ; ... ; --------------------------------------------------------------------------- loc_3319BE: ; ... bsr.w LoadSubObject move.w #-$40,$10(a0) move.w #$80,$2A(a0) rts ; --------------------------------------------------------------------------- loc_3319D0: ; ... tst.b $2B(a0) beq.s loc_3319DE subq.b #1,$2B(a0) bra.w loc_3319EC ; --------------------------------------------------------------------------- loc_3319DE: ; ... bsr.w sub_32F5A6 add.w #$60,d2 cmp.w #$C0,d2 bcs.s loc_331A14 loc_3319EC: ; ... subq.b #1,$2A(a0) bne.s loc_3319FC move.w #$80,$2A(a0) neg.w $10(a0) loc_3319FC: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_ObjA5).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331A14: ; ... addq.b #2,$24(a0) move.b #$28,$2B(a0) move.b #2,$1A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331A2A: ; ... subq.b #1,$2B(a0) bmi.s loc_331A42 cmp.b #$14,$2B(a0) bne.s loc_331A3C bsr.w sub_331AFA loc_331A3C: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331A42: ; ... subq.b #2,$24(a0) move.b #$40,$2B(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- ObjA6: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_331A60(pc,d0.w),d1 jmp off_331A60(pc,d1.w) ; --------------------------------------------------------------------------- off_331A60: dc.w loc_331A66-off_331A60,loc_331A78-off_331A60,loc_331AD2-off_331A60; 0 ; ... ; --------------------------------------------------------------------------- loc_331A66: ; ... bsr.w LoadSubObject move.w #-$40,$12(a0) move.w #$80,$2A(a0) rts ; --------------------------------------------------------------------------- loc_331A78: ; ... tst.b $2B(a0) beq.s loc_331A86 subq.b #1,$2B(a0) bra.w loc_331A94 ; --------------------------------------------------------------------------- loc_331A86: ; ... bsr.w sub_32F5A6 add.w #$60,d2 cmp.w #$C0,d2 bcs.s loc_331ABC loc_331A94: ; ... subq.b #1,$2A(a0) bne.s loc_331AA4 move.w #$80,$2A(a0) neg.w $12(a0) loc_331AA4: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_ObjA6).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331ABC: ; ... addq.b #2,$24(a0) move.b #$28,$2B(a0) move.b #5,$1A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331AD2: ; ... subq.b #1,$2B(a0) bmi.s loc_331AEA cmp.b #$14,$2B(a0) bne.s loc_331AE4 bsr.w sub_331B4A loc_331AE4: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_331AEA: ; ... subq.b #2,$24(a0) move.b #$40,$2B(a0) jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_331AFA: ; ... jsr SingleObjLoad2 bne.s return_331B48 move.b #$98,0(a1) move.b #6,$1A(a1) move.b #$34,$28(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w #-$300,$12(a1) move.w #$100,d1 lea ($FFFFB000).w,a2 move.w 8(a0),d0 cmp.w 8(a2),d0 bcs.s loc_331B3A neg.w d1 loc_331B3A: ; ... move.w d1,$10(a1) lea (loc_33064A).l,a2 move.l a2,$2A(a1) return_331B48: ; ... rts ; End of function sub_331AFA ; =============== S U B R O U T I N E ======================================= sub_331B4A: ; ... jsr SingleObjLoad2 bne.s return_331B8C move.b #$98,0(a1) move.b #6,$1A(a1) move.b #$34,$28(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w #$300,d1 btst #0,1(a0) beq.s loc_331B7E neg.w d1 loc_331B7E: ; ... move.w d1,$10(a1) lea (loc_33064A).l,a2 move.l a2,$2A(a1) return_331B8C: ; ... rts ; End of function sub_331B4A ; --------------------------------------------------------------------------- dc.l Map_Obj98_4 dc.w $252D dc.b 4, 4, 8, $B ; 0 Ani_ObjA5: dc.w byte_331B9A-Ani_ObjA5 ; ... byte_331B9A: dc.b 9, 0, 1, -1 ; 0 ; ... Ani_ObjA6: dc.w byte_331BA0-Ani_ObjA6 ; ... byte_331BA0: dc.b 9, 3, 4, -1 ; 0 ; ... Ani_Obj98_1: dc.w byte_331BA6-Ani_Obj98_1 ; 0 ; ... byte_331BA6: dc.b 3, 6, 7, -1 ; 0 ; ... Map_Obj98_4: dc.w byte_331BBA-Map_Obj98_4,byte_331BD4-Map_Obj98_4,byte_331BEE-Map_Obj98_4; 0 ; ... dc.w byte_331C08-Map_Obj98_4,byte_331C22-Map_Obj98_4,byte_331C3C-Map_Obj98_4; 3 dc.w byte_331C56-Map_Obj98_4,byte_331C5E-Map_Obj98_4; 6 byte_331BBA: dc.b 0, 4, -$C, 0, 0, 0, -1, -8, -4, 9; 0 ; ... dc.b 0, 1, -1,-$18, -$C, 0, 8, 0, 0, 0; 10 dc.b -4, 9, 8, 1, 0, 0; 20 byte_331BD4: dc.b 0, 4, -$C, 0, 0, 0, -1, -8, -4, 9; 0 ; ... dc.b 0, 7, -1,-$18, -$C, 0, 8, 0, 0, 0; 10 dc.b -4, 9, 8, 7, 0, 0; 20 byte_331BEE: dc.b 0, 4, -$C, 4, 0, $D, -1,-$10, -4, 9; 0 ; ... dc.b 0, 1, -1,-$18, -$C, 4, 8, $D, 0, 0; 10 dc.b -4, 9, 8, 1, 0, 0; 20 byte_331C08: dc.b 0, 4,-$18, 6, 0, $F, -1, -$C, -8, 0; 0 ; ... dc.b 0, $15, 0, 4, 0, 6, $10, $F, -1, -$C; 10 dc.b 0, 0, $10, $15, 0, 4; 20 byte_331C22: dc.b 0, 4,-$18, 6, 0, $16, -1, -$C, -8, 0; 0 ; ... dc.b 0, $15, 0, 4, 0, 6, $10, $16, -1, -$C; 10 dc.b 0, 0, $10, $15, 0, 4; 20 byte_331C3C: dc.b 0, 4,-$18, 6, 0, $F, -1, -$C,-$10, 1; 0 ; ... dc.b 0, $1C, 0, 4, 0, 6, $10, $F, -1, -$C; 10 dc.b 0, 1, $10, $1C, 0, 4; 20 byte_331C56: dc.b 0, 1, -4, 0, 0, $1E, -1, -4; 0 ; ... byte_331C5E: dc.b 0, 1, -4, 0, 0, $1F, -1, -4; 0 ; ... ; --------------------------------------------------------------------------- ObjA7: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_331C74(pc,d0.w),d1 jmp off_331C74(pc,d1.w) ; --------------------------------------------------------------------------- off_331C74: dc.w loc_331C78-off_331C74,loc_331CB8-off_331C74; 0 ; ... ; --------------------------------------------------------------------------- loc_331C78: ; ... bsr.w LoadSubObject move.w #-$40,d0 btst #0,1(a0) beq.s loc_331C8A neg.w d0 loc_331C8A: ; ... move.w d0,$10(a0) move.w #$FF,$2A(a0) move.b #2,$2D(a0) lea (byte_3320A8).l,a2 bsr.w sub_32F6A0 lea (byte_3320AC).l,a2 bsr.w sub_32F6A0 lea (byte_3320B0).l,a2 bra.w sub_32F6A0 ; --------------------------------------------------------------------------- loc_331CB8: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_331CF4(pc,d0.w),d1 jsr off_331CF4(pc,d1.w) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 moveq #0,d0 moveq #$10,d1 move.w $3C(a0),a1 bsr.w sub_32F630 move.w $3E(a0),a1 move.w 8(a0),8(a1) move.w $3A(a0),a1 move.w 8(a0),8(a1) lea $3A(a0),a2 bra.w loc_332042 ; --------------------------------------------------------------------------- off_331CF4: dc.w loc_331D00-off_331CF4,loc_331D48-off_331CF4,loc_331D62-off_331CF4; 0 ; ... dc.w loc_331DEE-off_331CF4,loc_331E08-off_331CF4,loc_331E12-off_331CF4; 3 ; --------------------------------------------------------------------------- loc_331D00: ; ... bsr.w sub_32F5A6 add.w #$40,d2 cmp.w #$80,d2 bcc.s loc_331D14 cmp.w #-$80,d3 bhi.s loc_331D32 loc_331D14: ; ... subq.w #1,$2A(a0) bpl.s return_331D30 move.w #$FF,$2A(a0) neg.w $10(a0) bchg #0,1(a0) bchg #0,$22(a0) return_331D30: ; ... rts ; --------------------------------------------------------------------------- loc_331D32: ; ... addq.b #2,$25(a0) move.w $10(a0),$2E(a0) clr.w $10(a0) move.b #$10,$2C(a0) rts ; --------------------------------------------------------------------------- loc_331D48: ; ... subq.b #1,$2C(a0) bmi.s loc_331D50 rts ; --------------------------------------------------------------------------- loc_331D50: ; ... addq.b #2,$25(a0) move.w #$200,$12(a0) move.b #$40,$2C(a0) rts ; --------------------------------------------------------------------------- loc_331D62: ; ... tst.b $30(a0) bne.s loc_331D9E subq.b #1,$2C(a0) beq.s loc_331D86 cmp.b #$20,$2C(a0) bne.s loc_331D7A neg.w $12(a0) loc_331D7A: ; ... lea (Ani_ObjA7).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- loc_331D86: ; ... move.b #0,$25(a0) clr.w $12(a0) move.w $2E(a0),$10(a0) move.b #0,$1A(a0) rts ; --------------------------------------------------------------------------- loc_331D9E: ; ... addq.b #2,$25(a0) move.w $32(a0),a1 move.b #$81,$2A(a1) clr.w $10(a1) clr.w $12(a1) move.b #$E,$1C(a1) move.b #1,$1A(a0) tst.w $12(a0) bmi.s loc_331DDA neg.w $12(a0) move.b $2C(a0),d0 sub.b #$40,d0 neg.w d0 addq.b #1,d0 move.b d0,$2C(a0) loc_331DDA: ; ... move.b #1,$2A(a0) move.b #$10,$2B(a0) move.b #$20,$37(a0) rts ; --------------------------------------------------------------------------- loc_331DEE: ; ... bsr.w sub_331FFA bsr.w sub_331F7C subq.b #1,$2C(a0) beq.s loc_331DFE rts ; --------------------------------------------------------------------------- loc_331DFE: ; ... addq.b #2,$25(a0) clr.w $12(a0) rts ; --------------------------------------------------------------------------- loc_331E08: ; ... bsr.w sub_331FFA bra.w sub_331F7C ; --------------------------------------------------------------------------- rts ; --------------------------------------------------------------------------- loc_331E12: ; ... bra.w sub_331FFA ; --------------------------------------------------------------------------- ObjA8: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_331E24(pc,d0.w),d1 jmp off_331E24(pc,d1.w) ; --------------------------------------------------------------------------- off_331E24: dc.w loc_331E2C-off_331E24,loc_331E38-off_331E24,loc_331E9A-off_331E24; 0 ; ... dc.w loc_331EDA-off_331E24 ; 3 ; --------------------------------------------------------------------------- loc_331E2C: ; ... bsr.w LoadSubObject move.b #3,$1A(a0) rts ; --------------------------------------------------------------------------- loc_331E38: ; ... move.w $2C(a0),a1 cmp.b #$A7,(a1) bne.w loc_32F7EE bsr.w sub_32F67A move.w $2C(a0),a1 move.b $1A(a1),d0 addq.b #3,d0 move.b d0,$1A(a0) move.b $21(a0),d0 beq.s j_DisplaySprite clr.b $21(a0) cmp.b #4,$25(a1) bne.s j_DisplaySprite and.b #3,d0 beq.s j_DisplaySprite clr.b $20(a0) addq.b #2,$24(a0) add.w d0,d0 st $30(a1) move.w word_331E92-6(pc,d0.w),$32(a1) move.w word_331E92(pc,d0.w),$34(a1) j_DisplaySprite: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- dc.b -$50, 0,-$50, $40 ; 0 word_331E92: dc.w -$5000, -$9FC, -$9FA, -$9FC ; 0 ; ... ; --------------------------------------------------------------------------- loc_331E9A: ; ... move.w $2C(a0),a1 move.w $32(a1),d0 beq.s loc_331ED0 move.w d0,a2 cmp.b #$A7,(a1) bne.s loc_331EBE move.w 8(a0),8(a2) move.w $C(a0),$C(a2) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_331EBE: ; ... move.b #0,$2A(a2) bset #1,$22(a2) jmp DeleteObject ; --------------------------------------------------------------------------- loc_331ED0: ; ... addq.b #2,$24(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_331EDA: ; ... move.w $2C(a0),a1 cmp.b #$A7,(a1) bne.w loc_32F7EE jmp DisplaySprite ; --------------------------------------------------------------------------- ObjA9: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_331EFA(pc,d0.w),d1 jmp off_331EFA(pc,d1.w) ; --------------------------------------------------------------------------- off_331EFA: dc.w loc_331EFE-off_331EFA,loc_331F10-off_331EFA; 0 ; ... ; --------------------------------------------------------------------------- loc_331EFE: ; ... bsr.w LoadSubObject move.b #2,$1A(a0) sub.w #$C,$C(a0) rts ; --------------------------------------------------------------------------- loc_331F10: ; ... move.w $2C(a0),a1 cmp.b #$A7,(a1) bne.w loc_32F7EE jmp DisplaySprite ; --------------------------------------------------------------------------- ObjAA: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_331F30(pc,d0.w),d1 jmp off_331F30(pc,d1.w) ; --------------------------------------------------------------------------- off_331F30: dc.w loc_331F34-off_331F30,loc_331F3E-off_331F30; 0 ; ... ; --------------------------------------------------------------------------- loc_331F34: ; ... bsr.w LoadSubObject subq.w #8,$C(a0) rts ; --------------------------------------------------------------------------- loc_331F3E: ; ... move.w $2C(a0),a1 cmp.b #$A7,(a1) bne.w loc_32F7EE move.w $C(a1),d0 sub.w $C(a0),d0 bmi.s loc_331F5A lsr.w #4,d0 move.b d0,$1A(a0) loc_331F5A: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- ObjAB: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_331F6E(pc,d0.w),d1 jmp off_331F6E(pc,d1.w) ; --------------------------------------------------------------------------- off_331F6E: dc.w loc_331F72-off_331F6E,loc_331F76-off_331F6E; 0 ; ... ; --------------------------------------------------------------------------- loc_331F72: ; ... bra.w LoadSubObject ; --------------------------------------------------------------------------- loc_331F76: ; ... jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_331F7C: ; ... move.w $34(a0),a1 move.w (a1),d0 tst.b $31(a0) beq.s loc_331FA6 subq.b #1,$37(a0) beq.s loc_331FBA move.b $36(a0),d1 and.b #$C,d0 beq.s return_331FA4 cmp.b d1,d0 beq.s return_331FA4 move.b d0,$36(a0) addq.b #1,$38(a0) return_331FA4: ; ... rts ; --------------------------------------------------------------------------- loc_331FA6: ; ... and.b #$C,d0 beq.s return_331FA4 nop st $31(a0) move.b d0,$36(a0) nop rts ; --------------------------------------------------------------------------- loc_331FBA: ; ... cmp.b #4,$38(a0) bcs.s loc_331FEA move.b #$A,$25(a0) clr.w $12(a0) clr.b $20(a0) move.w $32(a0),a2 move.b #0,$2A(a2) loc_331FDA: bset #1,$22(a2) move.b #0,$1C(a2) clr.w $32(a0) loc_331FEA: ; ... move.b #$20,$37(a0) clr.b $31(a0) clr.b $38(a0) rts ; End of function sub_331F7C ; =============== S U B R O U T I N E ======================================= sub_331FFA: ; ... subq.b #1,$2A(a0) bne.s return_332012 move.b $2B(a0),$2A(a0) subq.b #1,$2B(a0) beq.s loc_332014 bchg #5,2(a0) return_332012: ; ... rts ; --------------------------------------------------------------------------- loc_332014: ; ... move.b #$27,0(a0) move.b #2,$24(a0) bset #5,2(a0) move.w $32(a0),d0 beq.s return_332040 move.w d0,a2 move.b #0,$2A(a2) bset #1,$22(a2) move.b #$B,$20(a0) return_332040: ; ... rts ; End of function sub_331FFA ; --------------------------------------------------------------------------- loc_332042: ; ... tst.w ($FFFFFFDC).w beq.s loc_33204E jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33204E: ; ... move.w 8(a0),d0 and.w #$FF80,d0 sub.w ($FFFFF7DA).w,d0 cmp.w #$280,d0 bhi.w loc_332068 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332068: ; ... lea ($FFFFFC00).w,a3 moveq #0,d0 move.b $23(a0),d0 beq.s loc_33207A bclr #7,2(a3,d0.w) loc_33207A: ; ... tst.b $30(a0) beq.s loc_332090 move.w $32(a0),a3 move.b #0,$2A(a3) bset #1,$22(a3) loc_332090: ; ... moveq #0,d6 move.b $2D(a0),d6 loc_332096: ; ... move.w (a2)+,a1 jsr DeleteObject2 dbf d6,loc_332096 jmp DeleteObject ; --------------------------------------------------------------------------- byte_3320A8: dc.b 0, $3E,-$57, $3A ; 0 ; ... byte_3320AC: dc.b 0, $3C,-$58, $38 ; 0 ; ... byte_3320B0: dc.b 0, $3A,-$56, $3C ; 0 ; ... dc.l Map_Obj98_5 dc.w $A500 dc.b 4, 4, $10, $B ; 0 dc.l Map_Obj98_5 dc.w $A500 dc.b 4, 1, $10,-$29 ; 0 dc.l Map_Obj98_5 dc.w $A500 dc.b 4, 4, 4, 0 ; 0 dc.l Map_ObjAB dc.w $A500 dc.b 4, 5, 4, 0 ; 0 Ani_ObjA7: dc.w byte_3320DE-Ani_ObjA7 ; ... byte_3320DE: dc.b 7, 0, 1, -1 ; 0 ; ... Map_Obj98_5: dc.w byte_332102-Map_Obj98_5,byte_332116-Map_Obj98_5,byte_33212A-Map_Obj98_5; 0 ; ... dc.w byte_332132-Map_Obj98_5,byte_33213A-Map_Obj98_5,byte_332142-Map_Obj98_5; 3 dc.w byte_33214A-Map_Obj98_5 ; 6 Map_ObjAB: dc.w byte_332152-Map_ObjAB,byte_33215A-Map_ObjAB,byte_332162-Map_ObjAB; 0 ; ... dc.w byte_332170-Map_ObjAB,byte_33217E-Map_ObjAB,byte_3321A6-Map_ObjAB; 3 dc.w byte_332192-Map_ObjAB,byte_3321C0-Map_ObjAB,byte_3321C0-Map_ObjAB; 6 byte_332102: dc.b 0, 3, -8, 1, 0, 0, -1,-$1B, -8, $D; 0 ; ... dc.b 0, 2, -1,-$13, 8, 9, 0, $1D, -1, -$F; 10 byte_332116: dc.b 0, 3, -8, 1, 0, 0, -1,-$1B, -8, $D; 0 ; ... dc.b 0, 2, -1,-$13, 8, $D, 0, $23, -1, -$F; 10 byte_33212A: dc.b 0, 1, -4, 0, 0, $A, -1, -4; 0 ; ... byte_332132: dc.b 0, 1, -8, 9, 0, $F, -1, -7; 0 ; ... byte_33213A: dc.b 0, 1, -8, $D, 0, $15, -1, -7; 0 ; ... byte_332142: dc.b 0, 1, -4, 0, 0, $2B, -1, -4; 0 ; ... byte_33214A: dc.b 0, 1, -4, 0, 0, $2C, -1, -4; 0 ; ... byte_332152: dc.b 0, 1, 0, 1, 0, $B, -1, -4; 0 ; ... byte_33215A: dc.b 0, 1, 0, 3, 0, $B, -1, -4; 0 ; ... byte_332162: dc.b 0, 2, 0, 1, 0, $B, -1, -4, $10, 3; 0 ; ... dc.b 0, $B, -1, -4 ; 10 byte_332170: dc.b 0, 2, 0, 3, 0, $B, -1, -4, $20, 3; 0 ; ... dc.b 0, $B, -1, -4 ; 10 byte_33217E: dc.b 0, 3, 0, 1, 0, $B, -1, -4, $10, 3; 0 ; ... dc.b 0, $B, -1, -4, $30, 3, 0, $B, -1, -4; 10 byte_332192: dc.b 0, 3, 0, 3, 0, $B, -1, -4, $20, 3; 0 ; ... dc.b 0, $B, -1, -4, $40, 3, 0, $B, -1, -4; 10 byte_3321A6: dc.b 0, 4, 0, 1, 0, $B, -1, -4, $10, 3; 0 ; ... dc.b 0, $B, -1, -4, $30, 3, 0, $B, -1, -4; 10 dc.b $50, 3, 0, $B, -1, -4; 20 byte_3321C0: dc.b 0, 4, 0, 3, 0, $B, -1, -4, $20, 3; 0 ; ... dc.b 0, $B, -1, -4, $40, 3, 0, $B, -1, -4; 10 dc.b $60, 3, 0, $B, -1, -4, 0, 5, 0, 1; 20 dc.b 0, $B, -1, -4, $10, 3, 0, $B, -1, -4; 30 dc.b $30, 3, 0, $B, -1, -4, $50, 3, 0, $B; 40 dc.b -1, -4, $70, 3, 0, $B, -1, -4; 50 ; --------------------------------------------------------------------------- ObjAC: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_332208(pc,d0.w),d1 jmp off_332208(pc,d1.w) ; --------------------------------------------------------------------------- off_332208: dc.w loc_33220C-off_332208,loc_332238-off_332208; 0 ; ... ; --------------------------------------------------------------------------- loc_33220C: ; ... bsr.w LoadSubObject move.b #1,$1A(a0) move.w #-$300,$10(a0) bclr #1,1(a0) beq.s loc_33222A move.w #-$500,$10(a0) loc_33222A: ; ... lea (Ani_ObjAC).l,a1 move.l a1,$2E(a0) bra.w loc_3309C0 ; --------------------------------------------------------------------------- loc_332238: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bsr.w sub_32F646 bra.w loc_32F658 ; --------------------------------------------------------------------------- dc.l Map_ObjAC dc.w $565 dc.b 4, 4, $20, 8 ; 0 Map_ObjAC: dc.w byte_332254-Map_ObjAC,byte_33226E-Map_ObjAC; 0 ; ... byte_332254: dc.b 0, 4, -$C, $D,-$80, 0, -1,-$24,-$14, 4; 0 ; ... dc.b -$80, 8, 0, $C, -$C, $D,-$80, $A, -1, -4; 10 dc.b 4, 8,-$80, $12, -1, -4; 20 byte_33226E: dc.b 0, 5, -$C, $D,-$80, 0, -1,-$24,-$14, 4; 0 ; ... dc.b -$80, 8, 0, $C, -$C, $D,-$80, $A, -1, -4; 10 dc.b 4, 8,-$80, $15, 0, $C, $C, 0,-$80, $18; 20 dc.b 0, $1C ; 30 ; --------------------------------------------------------------------------- ObjAD: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_33229C(pc,d0.w),d1 jmp off_33229C(pc,d1.w) ; --------------------------------------------------------------------------- off_33229C: dc.w loc_3322A0-off_33229C,loc_3322AC-off_33229C; 0 ; ... ; --------------------------------------------------------------------------- loc_3322A0: ; ... bsr.w LoadSubObject move.b #$C,$1A(a0) rts ; --------------------------------------------------------------------------- loc_3322AC: ; ... move.w #$1B,d1 move.w #8,d2 move.w #8,d3 move.w 8(a0),d4 jsr SolidObject jmp MarkObjGone ; --------------------------------------------------------------------------- ObjAE: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3322D6(pc,d0.w),d1 jmp off_3322D6(pc,d1.w) ; --------------------------------------------------------------------------- off_3322D6: dc.w loc_3322E4-off_3322D6,loc_3322FE-off_3322D6,loc_33231C-off_3322D6; 0 ; ... dc.w loc_332352-off_3322D6,loc_332364-off_3322D6,loc_332390-off_3322D6; 3 dc.w loc_3323A2-off_3322D6 ; 6 ; --------------------------------------------------------------------------- loc_3322E4: ; ... bsr.w LoadSubObject move.b #$15,$1A(a0) btst #0,1(a0) beq.s return_3322FC bset #0,$22(a0) return_3322FC: ; ... rts ; --------------------------------------------------------------------------- loc_3322FE: ; ... bsr.w sub_32F5A6 add.w #$80,d2 cmp.w #$100,d2 bcs.s loc_332312 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_332312: ; ... addq.b #2,$24(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_33231C: ; ... move.b $24(a0),d2 lea (Ani_ObjAE).l,a1 jsr AnimateSprite cmp.b $24(a0),d2 bne.s loc_332338 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_332338: ; ... lea $1A(a0),a1 clr.l (a1) clr.w 4(a1) move.b #8,(a1) move.b #6,$20(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_332352: ; ... lea (Ani_ObjAE_0).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_332364: ; ... tst.b $2A(a0) beq.s loc_332374 subq.b #1,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_332374: ; ... addq.b #2,$24(a0) lea $1A(a0),a1 clr.l (a1) clr.w 4(a1) move.b #$B,(a1) bsr.w sub_3323B4 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_332390: ; ... lea (Ani_ObjAE_1).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3323A2: ; ... move.b #8,$24(a0) move.b #$40,$2A(a0) jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_3323B4: ; ... jsr SingleObjLoad2 bne.s return_332406 move.b #$98,0(a1) move.b #$D,$1A(a1) move.b #$46,$28(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w #$B,$C(a1) move.w #-$200,d0 move.w #-8,d1 btst #0,1(a0) beq.s loc_3323F4 neg.w d0 neg.w d1 loc_3323F4: ; ... move.w d0,$10(a1) add.w d1,8(a1) lea (loc_330638).l,a2 move.l a2,$2A(a1) return_332406: ; ... rts ; End of function sub_3323B4 ; --------------------------------------------------------------------------- dc.l Map_Obj98_6 dc.w $379 dc.b 4, 4, $18, 0 ; 0 dc.l Map_Obj98_6 dc.w $379 dc.b 4, 5, $10, 0 ; 0 Ani_ObjAE: dc.w byte_33241E-Ani_ObjAE ; ... byte_33241E: dc.b 1, 0, 1, 2, 3, 4, 5, 6, 7, -4; 0 ; ... Ani_ObjAE_0: dc.w byte_33242A-Ani_ObjAE_0 ; 0 ; ... byte_33242A: dc.b 1, 8, 9, $A, $B, $B, $B, $B, -4, 0; 0 ; ... Ani_ObjAE_1: dc.w byte_332436-Ani_ObjAE_1 ; ... byte_332436: dc.b 3, $A, $B, -4 ; 0 ; ... Ani_Obj98_0: dc.w byte_33243C-Ani_Obj98_0 ; ... byte_33243C: dc.b 3, $D, $E, $F, $10, $11, $12, $13, $14, -1; 0 ; ... Map_Obj98_6: dc.w byte_332472-Map_Obj98_6,byte_33247A-Map_Obj98_6,byte_332482-Map_Obj98_6; 0 ; ... dc.w byte_33248A-Map_Obj98_6,byte_332498-Map_Obj98_6,byte_3324A6-Map_Obj98_6; 3 dc.w byte_3324B4-Map_Obj98_6,byte_3324C2-Map_Obj98_6,byte_3324D0-Map_Obj98_6; 6 dc.w byte_3324E4-Map_Obj98_6,byte_3324F8-Map_Obj98_6,byte_33250C-Map_Obj98_6; 9 dc.w byte_332520-Map_Obj98_6,byte_33252E-Map_Obj98_6,byte_332536-Map_Obj98_6; 12 dc.w byte_33253E-Map_Obj98_6,byte_332546-Map_Obj98_6,byte_33254E-Map_Obj98_6; 15 dc.w byte_332556-Map_Obj98_6,byte_33255E-Map_Obj98_6,byte_332566-Map_Obj98_6; 18 dc.w byte_33256E-Map_Obj98_6 ; 21 byte_332472: dc.b 0, 1, $C, $D, $20, 0, -1,-$10; 0 ; ... byte_33247A: dc.b 0, 1, 8, $D, $20, 0, -1,-$10; 0 ; ... byte_332482: dc.b 0, 1, 4, $D, $20, 0, -1,-$10; 0 ; ... byte_33248A: dc.b 0, 2, 0, $D, $20, 0, -1,-$10, $10, $D; 0 ; ... dc.b $20, 8, -1,-$10 ; 10 byte_332498: dc.b 0, 2, -4, $D, $20, 0, -1,-$10, $C, $D; 0 ; ... dc.b $20, 8, -1,-$10 ; 10 byte_3324A6: dc.b 0, 2, -8, $D, $20, 0, -1,-$10, 8, $D; 0 ; ... dc.b $20, 8, -1,-$10 ; 10 byte_3324B4: dc.b 0, 2, -$C, $D, $20, 0, -1,-$10, 4, $D; 0 ; ... dc.b $20, 8, -1,-$10 ; 10 byte_3324C2: dc.b 0, 2,-$10, $D, $20, 0, -1,-$10, 0, $D; 0 ; ... dc.b $20, 8, -1,-$10 ; 10 byte_3324D0: dc.b 0, 3,-$10, $D, $20, 0, -1,-$10, 0, $D; 0 ; ... dc.b $20, 8, -1,-$10, 7, 0, $20, $10, -1,-$12; 10 byte_3324E4: dc.b 0, 3,-$10, $D, $20, 0, -1,-$10, 0, $D; 0 ; ... dc.b $20, 8, -1,-$10, 7, 0, $20, $10, -1,-$14; 10 byte_3324F8: dc.b 0, 3,-$10, $D, $20, 0, -1,-$10, 0, $D; 0 ; ... dc.b $20, 8, -1,-$10, 7, 0, $20, $10, -1,-$16; 10 byte_33250C: dc.b 0, 3,-$10, $D, $20, 0, -1,-$10, 0, $D; 0 ; ... dc.b $20, 8, -1,-$10, 7, 0, $20, $10, -1,-$18; 10 byte_332520: dc.b 0, 2, -8, 9, $60, $11, -1,-$18, -8, 9; 0 ; ... dc.b $68, $11, 0, 0 ; 10 byte_33252E: dc.b 0, 1, -4, 0, 0, $17, -1, -4; 0 ; ... byte_332536: dc.b 0, 1, -4, 0, 0, $18, -1, -4; 0 ; ... byte_33253E: dc.b 0, 1, -4, 0, 0, $19, -1, -4; 0 ; ... byte_332546: dc.b 0, 1, -4, 0, $10, $18, -1, -4; 0 ; ... byte_33254E: dc.b 0, 1, -4, 0, $10, $17, -1, -4; 0 ; ... byte_332556: dc.b 0, 1, -4, 0, $18, $18, -1, -4; 0 ; ... byte_33255E: dc.b 0, 1, -4, 0, 8, $19, -1, -4; 0 ; ... byte_332566: dc.b 0, 1, -4, 0, 8, $18, -1, -4; 0 ; ... byte_33256E: dc.b 0, 1, $10, $D, $20, 0, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- ObjAF: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_332584(pc,d0.w),d1 jmp off_332584(pc,d1.w) ; --------------------------------------------------------------------------- off_332584: dc.w loc_3325A8-off_332584,loc_3325F6-off_332584,loc_332636-off_332584; 0 ; ... dc.w loc_332654-off_332584,loc_3326A6-off_332584,loc_332724-off_332584; 3 dc.w loc_332A06-off_332584,loc_332A36-off_332584,loc_332A48-off_332584; 6 dc.w loc_332A60-off_332584,loc_332A68-off_332584,loc_332A80-off_332584; 9 dc.w loc_332A88-off_332584,loc_332A90-off_332584,loc_332AA8-off_332584; 12 dc.w loc_332AC4-off_332584,loc_332AD6-off_332584,loc_332B2C-off_332584; 15 ; --------------------------------------------------------------------------- loc_3325A8: ; ... bsr.w LoadSubObject move.b #$1B,$16(a0) move.b #$10,$17(a0) move.b #0,$20(a0) move.b #8,$21(a0) lea (byte_332C56).l,a2 bsr.w sub_32F6A0 move.b #$E,$24(a1) lea (byte_332C5A).l,a2 bsr.w sub_32F6A0 move.b #$14,$24(a1) lea (byte_332C5E).l,a2 bsr.w sub_32F6A0 move.b #$1A,$24(a1) rts ; --------------------------------------------------------------------------- loc_3325F6: ; ... move.w ($FFFFEE00).w,d0 cmp.w #$224,d0 bcc.s loc_332606 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332606: ; ... addq.b #2,$24(a0) move.w #$3C,$2A(a0) move.w #$100,$12(a0) move.w #$224,d0 move.w d0,($FFFFEEC8).w move.w d0,($FFFFEECA).w move.b #9,($FFFFF7AA).w moveq #$FFFFFFF9,d0 ; $F9 jsr PlaySound jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332636: ; ... subq.w #1,$2A(a0) bmi.s loc_332642 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332642: ; ... addq.b #2,$24(a0) moveq #$FFFFFF93,d0 ; $93 jsr PlayMusic jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332654: ; ... move.b ($FFFFFE0F).w,d0 and.b #$1F,d0 bne.s loc_332666 moveq #$FFFFFFDC,d0 ; $DC jsr PlaySound loc_332666: ; ... jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bmi.s loc_33268C jsr ObjectMove ; AKA SpeedToPos in Sonic 1 moveq #0,d0 moveq #0,d1 move.w $3E(a0),a1 bsr.w sub_32F630 bsr.w sub_332BDE jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33268C: ; ... add.w d1,$C(a0) move.w #0,$12(a0) move.b #$1A,$20(a0) bset #1,$22(a0) bra.w loc_332840 ; --------------------------------------------------------------------------- loc_3326A6: ; ... bsr.w sub_332B3E bsr.w sub_332BB0 subq.b #1,$2A(a0) beq.s loc_3326E8 cmp.b #$32,$2A(a0) bne.s loc_3326CA moveq #$FFFFFFEE,d0 ; $EE jsr PlaySound jsr DisplaySprite loc_3326CA: ; ... jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 add.w d1,$C(a0) lea (Ani_Unknown_1).l,a1 bsr.w sub_32F740 bsr.w sub_332BDE jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3326E8: ; ... addq.b #2,$24(a0) moveq #0,d0 move.b $2F(a0),d0 and.b #$F,d0 move.b byte_332714(pc,d0.w),$25(a0) addq.b #1,$2F(a0) clr.b $2E(a0) move.w $3C(a0),a1 move.b #$16,$24(a1) jmp DisplaySprite ; --------------------------------------------------------------------------- byte_332714: dc.b 6, 0, $10, 6, 6, $1E, 0, $10, 6, 6; 0 ; ... dc.b $10, 6, 0, 6, $10, $1E; 10 ; --------------------------------------------------------------------------- loc_332724: ; ... bsr.w sub_332B3E bsr.w sub_332BB0 moveq #0,d0 move.b $25(a0),d0 move.w off_33275A(pc,d0.w),d1 jsr off_33275A(pc,d1.w) moveq #0,d0 moveq #0,d1 move.w $3E(a0),a1 bsr.w sub_32F630 bsr.w sub_332BDE bsr.w sub_32F630 jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jmp DisplaySprite ; --------------------------------------------------------------------------- off_33275A: dc.w loc_332786-off_33275A,loc_3327AE-off_33275A,loc_3327E0-off_33275A; 0 ; ... dc.w loc_332878-off_33275A,loc_33288A-off_33275A,loc_3328B6-off_33275A; 3 dc.w loc_3328DA-off_33275A,loc_332908-off_33275A,loc_332878-off_33275A; 6 dc.w loc_33288A-off_33275A,loc_33291C-off_33275A,loc_332940-off_33275A; 9 dc.w loc_332966-off_33275A,loc_33299A-off_33275A,loc_332908-off_33275A; 12 dc.w loc_332878-off_33275A,loc_33288A-off_33275A,loc_33291C-off_33275A; 15 dc.w loc_332940-off_33275A,loc_3329B6-off_33275A,loc_33299A-off_33275A; 18 dc.w loc_332908-off_33275A ; 21 ; --------------------------------------------------------------------------- loc_332786: ; ... addq.b #2,$25(a0) loc_33278A: move.b #3,$1A(a0) move.b #2,$2C(a0) loc_332796: ; ... move.b #$20,$2A(a0) move.w $3E(a0),a1 move.b #$10,$24(a1) move.b #1,$1C(a1) rts ; --------------------------------------------------------------------------- loc_3327AE: ; ... subq.b #1,$2A(a0) bmi.s loc_3327B6 rts ; --------------------------------------------------------------------------- loc_3327B6: ; ... addq.b #2,$25(a0) move.b #$40,$2A(a0) move.b #1,$1C(a0) move.w #$800,d0 bsr.w sub_332BF4 move.w $3E(a0),a1 move.b #2,$1C(a1) moveq #$FFFFFFBC,d0 jmp PlaySound ; --------------------------------------------------------------------------- loc_3327E0: ; ... subq.b #1,$2A(a0) bmi.s loc_33282C cmp.b #$20,$2A(a0) bne.s loc_3327FE move.b #2,$1C(a0) move.w $3E(a0),a1 move.b #$12,$24(a1) loc_3327FE: ; ... bsr.w sub_332C06 lea (Ani_Unknown_1).l,a1 bsr.w sub_32F740 cmp.b #2,$1C(a0) bne.s return_33282A cmp.b #2,$1B(a0) bne.s return_33282A cmp.b #3,$1E(a0) bne.s return_33282A bchg #0,1(a0) return_33282A: ; ... rts ; --------------------------------------------------------------------------- loc_33282C: ; ... subq.b #1,$2C(a0) beq.s loc_332840 move.b #2,$25(a0) clr.w $10(a0) bra.w loc_332796 ; --------------------------------------------------------------------------- loc_332840: ; ... move.b #8,$24(a0) move.b #0,$1C(a0) move.b #$64,$2A(a0) clr.w $10(a0) move.w $3E(a0),a1 move.b #$12,$24(a1) move.w $3C(a0),a1 move.b #$18,$24(a1) moveq #$FFFFFFEE,d0 jsr PlaySound jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332878: ; ... addq.b #2,$25(a0) move.b #3,$1A(a0) move.b #3,$1C(a0) rts ; --------------------------------------------------------------------------- loc_33288A: ; ... lea (Ani_Unknown_1).l,a1 bsr.w sub_32F740 bne.s loc_332898 rts ; --------------------------------------------------------------------------- loc_332898: ; ... addq.b #2,$25(a0) move.b #$20,$2A(a0) move.b #4,$1C(a0) moveq #$FFFFFFB0,d0 jsr PlaySound jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3328B6: ; ... subq.b #1,$2A(a0) bmi.s loc_3328C8 lea (Ani_Unknown_1).l,a1 bsr.w sub_32F740 rts ; --------------------------------------------------------------------------- loc_3328C8: ; ... addq.b #2,$25(a0) move.b #$40,$2A(a0) move.w #$800,d0 bra.w sub_332BF4 ; --------------------------------------------------------------------------- loc_3328DA: ; ... subq.b #1,$2A(a0) bmi.s loc_3328EE bsr.w sub_332C06 lea (Ani_Unknown_1).l,a1 bra.w sub_32F740 ; --------------------------------------------------------------------------- loc_3328EE: ; ... addq.b #2,$25(a0) move.b #5,$1C(a0) bchg #0,1(a0) clr.w $10(a0) clr.w $12(a0) rts ; --------------------------------------------------------------------------- loc_332908: ; ... lea (Ani_Unknown_1).l,a1 bsr.w sub_32F740 bne.w loc_332918 rts ; --------------------------------------------------------------------------- loc_332918: ; ... bra.w loc_332840 ; --------------------------------------------------------------------------- loc_33291C: ; ... subq.b #1,$2A(a0) bmi.s loc_33292E lea (Ani_Unknown_1).l,a1 bsr.w sub_32F740 rts ; --------------------------------------------------------------------------- loc_33292E: ; ... addq.b #2,$25(a0) move.b #$40,$2A(a0) move.w #$400,d0 bra.w sub_332BF4 ; --------------------------------------------------------------------------- loc_332940: ; ... subq.b #1,$2A(a0) cmp.b #$3C,$2A(a0) bne.s loc_332950 bsr.w sub_33295A loc_332950: ; ... lea (Ani_Unknown_1).l,a1 bra.w sub_32F740 ; =============== S U B R O U T I N E ======================================= sub_33295A: ; ... addq.b #2,$25(a0) move.w #-$600,$12(a0) rts ; End of function sub_33295A ; --------------------------------------------------------------------------- loc_332966: ; ... subq.b #1,$2A(a0) bmi.w loc_3328EE jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_33297C bsr.w sub_33298C loc_33297C: ; ... add.w #$38,$12(a0) lea (Ani_Unknown_1).l,a1 bra.w sub_32F740 ; =============== S U B R O U T I N E ======================================= sub_33298C: ; ... addq.b #2,$25(a0) add.w d1,$C(a0) clr.w $12(a0) rts ; End of function sub_33298C ; --------------------------------------------------------------------------- loc_33299A: ; ... subq.b #1,$2A(a0) bmi.w loc_3328EE jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 add.w d1,$C(a0) lea (Ani_Unknown_1).l,a1 bra.w sub_32F740 ; --------------------------------------------------------------------------- loc_3329B6: ; ... subq.b #1,$2A(a0) bmi.w loc_3328EE tst.b $2E(a0) bne.s loc_3329DA tst.w $12(a0) bmi.s loc_3329DA st $2E(a0) bsr.w sub_332C16 moveq #$FFFFFFA2,d0 jsr PlaySound loc_3329DA: ; ... jsr ObjCheckFloorDist ; Also known as ObjHitFloor in Sonic 1 tst.w d1 bpl.s loc_3329E8 bsr.w sub_3329F8 loc_3329E8: ; ... add.w #$38,$12(a0) lea (Ani_Unknown_1).l,a1 bra.w sub_32F740 ; =============== S U B R O U T I N E ======================================= sub_3329F8: ; ... addq.b #2,$25(a0) add.w d1,$C(a0) clr.w $12(a0) rts ; End of function sub_3329F8 ; --------------------------------------------------------------------------- loc_332A06: ; ... clr.b $20(a0) subq.w #1,$32(a0) bmi.s loc_332A1C jsr sub_326C74 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332A1C: ; ... move.w #$1000,($FFFFEECA).w addq.b #2,($FFFFEEDF).w move.b ($FFFFFF90).w,d0 jsr PlayMusic jmp DeleteObject ; --------------------------------------------------------------------------- loc_332A36: ; ... bsr.w LoadSubObject move.b #8,$19(a0) move.b #0,$20(a0) rts ; --------------------------------------------------------------------------- loc_332A48: ; ... move.w $2C(a0),a1 bsr.w sub_32F67A lea (Ani_Unknown_0).l,a1 bsr.w sub_32F740 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332A60: ; ... and.b #$7F,1(a0) rts ; --------------------------------------------------------------------------- loc_332A68: ; ... bsr.w LoadSubObject move.b #8,$19(a0) move.b #$B,$1A(a0) move.b #3,$18(a0) rts ; --------------------------------------------------------------------------- loc_332A80: ; ... move.b #0,$20(a0) rts ; --------------------------------------------------------------------------- loc_332A88: ; ... move.b #$98,$20(a0) rts ; --------------------------------------------------------------------------- loc_332A90: ; ... bsr.w LoadSubObject move.b #4,$1A(a0) move.w #$2C0,8(a0) move.w #$139,$C(a0) rts ; --------------------------------------------------------------------------- loc_332AA8: ; ... move.w $2C(a0),a1 bclr #1,$22(a1) bne.s loc_332ABA jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332ABA: ; ... addq.b #2,$24(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332AC4: ; ... lea (Ani_ObjAF).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332AD6: ; ... move.w $2C(a0),a1 lea ($FFFFB000).w,a2 btst #2,$22(a1) bne.s loc_332B1C move.b #2,$1C(a0) cmp.b #4,$24(a2) bne.s loc_332AFE move.b #3,$1C(a0) bra.w loc_332B0A ; --------------------------------------------------------------------------- loc_332AFE: ; ... tst.b $20(a1) bne.s loc_332B0A move.b #4,$1C(a0) loc_332B0A: ; ... lea (Ani_ObjAF).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332B1C: ; ... addq.b #2,$24(a0) move.b #1,$1C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_332B2C: ; ... lea (Ani_ObjAF).l,a1 jsr AnimateSprite jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_332B3E: ; ... tst.b $21(a0) beq.s loc_332B80 tst.b $20(a0) bne.s return_332B7E tst.b $30(a0) bne.s loc_332B60 move.b #$20,$30(a0) move.w #$AC,d0 jsr PlaySound loc_332B60: ; ... lea ($FFFFFB22).w,a1 moveq #0,d0 tst.w (a1) bne.s loc_332B6E move.w #$EEE,d0 loc_332B6E: ; ... move.w d0,(a1) subq.b #1,$30(a0) bne.s return_332B7E clr.w ($FFFFFB22).w bsr.w sub_332BB8 return_332B7E: ; ... rts ; --------------------------------------------------------------------------- loc_332B80: ; ... moveq #$64,d0 bsr.w AddPoints2 move.w #$FF,$32(a0) move.b #$C,$24(a0) clr.b $20(a0) bset #2,$22(a0) move.w $3C(a0),a1 jsr DeleteObject2 move.w $3E(a0),a1 jmp DeleteObject2 ; End of function sub_332B3E ; =============== S U B R O U T I N E ======================================= sub_332BB0: ; ... tst.b $20(a0) beq.w return_330946 ; End of function sub_332BB0 ; =============== S U B R O U T I N E ======================================= sub_332BB8: ; ... move.b $1A(a0),d0 cmp.b #6,d0 beq.s loc_332BD6 cmp.b #7,d0 beq.s loc_332BD6 cmp.b #8,d0 beq.s loc_332BD6 move.b #$1A,$20(a0) rts ; --------------------------------------------------------------------------- loc_332BD6: ; ... move.b #$9A,$20(a0) rts ; End of function sub_332BB8 ; =============== S U B R O U T I N E ======================================= sub_332BDE: ; ... moveq #$C,d0 moveq #-$C,d1 btst #0,1(a0) beq.s loc_332BEC neg.w d0 loc_332BEC: ; ... move.w $3C(a0),a1 bra.w sub_32F630 ; End of function sub_332BDE ; =============== S U B R O U T I N E ======================================= sub_332BF4: ; ... tst.b $2D(a0) bne.s loc_332BFC neg.w d0 loc_332BFC: ; ... not.b $2D(a0) move.w d0,$10(a0) rts ; End of function sub_332BF4 ; =============== S U B R O U T I N E ======================================= sub_332C06: ; ... moveq #$20,d0 tst.w $10(a0) bmi.s loc_332C10 neg.w d0 loc_332C10: ; ... add.w d0,$10(a0) rts ; End of function sub_332C06 ; =============== S U B R O U T I N E ======================================= sub_332C16: ; ... move.b #$4A,d2 moveq #7,d6 lea (byte_332C26).l,a2 bra.w loc_32F6EA ; End of function sub_332C16 ; --------------------------------------------------------------------------- byte_332C26: dc.b 0,-$18, 0, -3, $F, 0,-$10,-$10, -2, -2; 0 ; ... dc.b $10, 0,-$18, 0, -3, 0, $11, 0,-$10, $10; 10 dc.b -2, 2, $12, 0, 0, $18, 0, 3, $13, 0; 20 dc.b $10, $10, 2, 2, $14, 0, $18, 0, 3, 0; 30 dc.b $15, 0, $10,-$10, 2, -2, $16, 0; 40 byte_332C56: dc.b 0, $3E,-$51, $48 ; 0 ; ... byte_332C5A: dc.b 0, $3C,-$51, $48 ; 0 ; ... byte_332C5E: dc.b 0, $3A,-$51,-$5C, 0, $33, $2C, -4, $23,-$80; 0 ; ... dc.b 4, 4, $10, $1A, 0, $33, $2E,-$52, 3, $78; 10 dc.b 4, 6, $10, 0 ; 20 Ani_Unknown_1: dc.w byte_332C82-Ani_Unknown_1,byte_332C88-Ani_Unknown_1; 0 ; ... dc.w byte_332C8C-Ani_Unknown_1,byte_332C92-Ani_Unknown_1; 2 dc.w byte_332CA8-Ani_Unknown_1,byte_332CAE-Ani_Unknown_1; 4 byte_332C82: dc.b 2, 0, 1, 2, -1, 0; 0 ; ... byte_332C88: dc.b $45, 3, -3, 0 ; 0 ; ... byte_332C8C: dc.b 3, 4, 5, 4, 3, -4; 0 ; ... byte_332C92: dc.b 3, 3, 3, 6, 6, 6, 7, 7, 7, 8; 0 ; ... dc.b 8, 8, 6, 6, 7, 7, 8, 8, 6, 7; 10 dc.b 8, -4 ; 20 byte_332CA8: dc.b 2, 6, 7, 8, -1, 0; 0 ; ... byte_332CAE: dc.b 3, 8, 7, 6, 8, 8, 7, 7, 6, 6; 0 ; ... dc.b 8, 8, 8, 7, 7, 7, 6, 6, 6, 3; 10 dc.b 3, -4 ; 20 Ani_Unknown_0: dc.w byte_332CCA-Ani_Unknown_0,byte_332CCE-Ani_Unknown_0; 0 ; ... dc.w byte_332CD2-Ani_Unknown_0 ; 2 byte_332CCA: dc.b 1, $B, $C, -1 ; 0 ; ... byte_332CCE: dc.b 1, $D, $E, -1 ; 0 ; ... byte_332CD2: dc.b 1, 9, $A, -1 ; 0 ; ... Ani_ObjAF: dc.w byte_332CE0-Ani_ObjAF,byte_332CE8-Ani_ObjAF,byte_332CF0-Ani_ObjAF; 0 ; ... dc.w byte_332CF4-Ani_ObjAF,byte_332CF8-Ani_ObjAF; 3 byte_332CE0: dc.b 3, 4, 3, 2, 1, 0, -4, 0; 0 ; ... byte_332CE8: dc.b 3, 0, 1, 2, 3, 4, -6, 0; 0 ; ... byte_332CF0: dc.b 3, 5, 5, -1 ; 0 ; ... byte_332CF4: dc.b 3, 5, 6, -1 ; 0 ; ... byte_332CF8: dc.b 3, 7, 7, -1 ; 0 ; ... Map_Obj98_7: dc.w byte_332D2A-Map_Obj98_7,byte_332D4A-Map_Obj98_7,byte_332D6A-Map_Obj98_7; 0 ; ... dc.w byte_332D8A-Map_Obj98_7,byte_332DA4-Map_Obj98_7,byte_332DBE-Map_Obj98_7; 3 dc.w byte_332DD8-Map_Obj98_7,byte_332DF2-Map_Obj98_7,byte_332E0C-Map_Obj98_7; 6 dc.w byte_332E26-Map_Obj98_7,byte_332E34-Map_Obj98_7,byte_332E42-Map_Obj98_7; 9 dc.w byte_332E50-Map_Obj98_7,byte_332E5E-Map_Obj98_7,byte_332E66-Map_Obj98_7; 12 dc.w byte_332E6E-Map_Obj98_7,byte_332E76-Map_Obj98_7,byte_332E7E-Map_Obj98_7; 15 dc.w byte_332E86-Map_Obj98_7,byte_332E8E-Map_Obj98_7,byte_332E96-Map_Obj98_7; 18 dc.w byte_332E9E-Map_Obj98_7,byte_332EA6-Map_Obj98_7; 21 byte_332D2A: dc.b 0, 5,-$1C, 9, 0, 0, -1, -$D, -$C, $F; 0 ; ... dc.b 0, 6, -1,-$11, $14, $C, 0, $16, -1,-$14; 10 dc.b -$1C, 4, 0, $6F, -1, -$C,-$1C, 7, 0, $71; 20 dc.b 0, 4 ; 30 byte_332D4A: dc.b 0, 5,-$1C, 9, 0, 0, -1, -$D, -$C, $F; 0 ; ... dc.b 0, 6, -1,-$11, $14, $C, 0, $16, -1,-$14; 10 dc.b -$1C, 4, 0, $79, -1, -$C,-$1C, 7, 0, $7B; 20 dc.b 0, 4 ; 30 byte_332D6A: dc.b 0, 5,-$1C, 9, 0, 0, -1, -$D, -$C, $F; 0 ; ... dc.b 0, 6, -1,-$11, $14, $C, 0, $16, -1,-$14; 10 dc.b -$1C, 4, 0,-$7D, -1, -$C,-$1C, 7, 0,-$7B; 20 dc.b 0, 4 ; 30 byte_332D8A: dc.b 0, 4,-$1C, $F, 0, $1A, -1,-$14,-$1C, 3; 0 ; ... dc.b 0, $2A, 0, $C, 4, $E, 0, $2E, -1, -$C; 10 dc.b $14, 0, 0, $3A, -1,-$14; 20 byte_332DA4: dc.b 0, 4,-$1C, $E, 0, $3B, -1,-$10, 4, 1; 0 ; ... dc.b 0, $47, -1,-$18, -4, $F, 0, $49, -1,-$10; 10 dc.b -4, 3, 0, $59, 0, $10; 20 byte_332DBE: dc.b 0, 4,-$1C, 6, 0, $5D, -1,-$10,-$1C, 6; 0 ; ... dc.b 8, $5D, 0, 0, -4, $B, 0, $63, -1,-$18; 10 dc.b -4, $B, 8, $63, 0, 0; 20 byte_332DD8: dc.b 0, 4,-$12, $A, 0,-$73, -1,-$18,-$12, $A; 0 ; ... dc.b 0,-$6A, 0, 0, 6, $A, $18,-$6A, -1,-$18; 10 dc.b 6, $A, $18,-$73, 0, 0; 20 byte_332DF2: dc.b 0, 4,-$12, $A, 0,-$61, -1,-$18,-$12, $A; 0 ; ... dc.b 0,-$58, 0, 0, 6, $A, $18,-$58, -1,-$18; 10 dc.b 6, $A, $18,-$61, 0, 0; 20 byte_332E0C: dc.b 0, 4,-$12, $A, 0,-$4F, -1,-$18,-$12, $A; 0 ; ... dc.b 0,-$46, 0, 0, 6, $A, $18,-$46, -1,-$18; 10 dc.b 6, $A, $18,-$4F, 0, 0; 20 byte_332E26: dc.b 0, 2, 4, 0, 0,-$3D, 0, $E, $14, 8; 0 ; ... dc.b 0,-$35, 0, $12 ; 10 byte_332E34: dc.b 0, 2, 4, 8, 0,-$3C, 0, $E, $14, 8; 0 ; ... dc.b 0,-$32, 0, $12 ; 10 byte_332E42: dc.b 0, 2, $1C, 0, 0,-$39, -1, -$C, $1C, 0; 0 ; ... dc.b 0,-$39, -1, -4 ; 10 byte_332E50: dc.b 0, 2, $1C, 2, 0,-$38, -1, -$C, $1C, 2; 0 ; ... dc.b 0,-$38, -1, -4 ; 10 byte_332E5E: dc.b 0, 1, $14, 8, 0,-$35, 0, $12; 0 ; ... byte_332E66: dc.b 0, 1, $14, 8, 0,-$32, 0, $12; 0 ; ... byte_332E6E: dc.b 0, 1, -8, 1, 0,-$2F, -1, -4; 0 ; ... byte_332E76: dc.b 0, 1, -8, 5, 0,-$2D, -1, -8; 0 ; ... byte_332E7E: dc.b 0, 1, -4, 4, 0,-$29, -1, -8; 0 ; ... byte_332E86: dc.b 0, 1, -8, 5, $10,-$2D, -1, -8; 0 ; ... byte_332E8E: dc.b 0, 1, -8, 1, $10,-$2F, -1, -4; 0 ; ... byte_332E96: dc.b 0, 1, -8, 5, $18,-$2D, -1, -8; 0 ; ... byte_332E9E: dc.b 0, 1, -4, 4, 8,-$29, -1, -8; 0 ; ... byte_332EA6: dc.b 0, 1, -8, 5, 8,-$2D, -1, -8; 0 ; ... off_332EAE: dc.w byte_332EBE-off_332EAE,byte_332EDE-off_332EAE,byte_332EFE-off_332EAE; 0 ; ... dc.w byte_332F1E-off_332EAE,byte_332F4A-off_332EAE,byte_332F76-off_332EAE; 3 dc.w byte_332F8A-off_332EAE,byte_332F9E-off_332EAE; 6 byte_332EBE: dc.b 0, 5, -$C, 6, $20, 0, -1,-$10, -$C, 6; 0 ; ... dc.b $28, 0, 0, 0, 4, 4, $20, 6, -1,-$10; 10 dc.b 4, 4, $20, 6, 0, 0, -8, $D, 1,-$70; 20 dc.b -1,-$10 ; 30 byte_332EDE: dc.b 0, 5, -$C, 6, $20, 0, -1,-$10, -$C, 6; 0 ; ... dc.b $28, 0, 0, 0, 0, 4, $20, 6, -1,-$10; 10 dc.b 0, 4, $20, 6, 0, 0, -8, $D, 1,-$70; 20 dc.b -1,-$10 ; 30 byte_332EFE: dc.b 0, 5, -$C, 6, $20, 0, -1,-$10, -$C, 6; 0 ; ... dc.b $28, 0, 0, 0, -4, 4, $20, 6, -1,-$10; 10 dc.b -4, 4, $20, 6, 0, 0, -8, $D, 1,-$70; 20 dc.b -1,-$10 ; 30 byte_332F1E: dc.b 0, 7, -$C, 6, $20, 0, -1,-$10, -$C, 6; 0 ; ... dc.b $28, 0, 0, 0, -8, 4, $20, 6, -1,-$10; 10 dc.b -8, 4, $20, 6, 0, 0, 0, 4, $20, 6; 20 dc.b -1,-$10, 0, 4, $20, 6, 0, 0, -8, $D; 30 dc.b 1,-$70, -1,-$10 ; 40 byte_332F4A: dc.b 0, 7, -$C, 6, $20, 0, -1,-$10, -$C, 6; 0 ; ... dc.b $28, 0, 0, 0, -$C, 4, $20, 6, -1,-$10; 10 dc.b -$C, 4, $20, 6, 0, 0, -4, 4, $20, 6; 20 dc.b -1,-$10, -4, 4, $20, 6, 0, 0, -8, $D; 30 dc.b 1,-$70, -1,-$10 ; 40 byte_332F76: dc.b 0, 3, -$C, 6, $20, 0, -1,-$10, -$C, 6; 0 ; ... dc.b $28, 0, 0, 0, -8, $D, 1,-$70, -1,-$10; 10 byte_332F8A: dc.b 0, 3, -$C, 6, $20, 0, -1,-$10, -$C, 6; 0 ; ... dc.b $28, 0, 0, 0, -7, $D, 1,-$70, -1,-$10; 10 byte_332F9E: dc.b 0, 3, -$C, 6, $20, 0, -1,-$10, -$C, 6; 0 ; ... dc.b $28, 0, 0, 0, -8, $D, 1,-$68, -1,-$10; 10 ; --------------------------------------------------------------------------- ObjB0: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_332FC0(pc,d0.w),d1 jmp off_332FC0(pc,d1.w) ; --------------------------------------------------------------------------- off_332FC0: dc.w loc_332FCC-off_332FC0,loc_3330CA-off_332FC0,loc_333108-off_332FC0; 0 ; ... dc.w loc_333172-off_332FC0,loc_3331AC-off_332FC0,return_3331D8-off_332FC0; 3 ; --------------------------------------------------------------------------- loc_332FCC: ; ... bsr.w LoadSubObject move.w #$1E8,8(a0) move.w #$F0,$A(a0) move.w #$B,$2A(a0) move.w #2,($FFFFF662).w bset #0,1(a0) bset #0,$22(a0) lea ($FFFFE138).w,a1 lea byte_33351C(pc),a2 moveq #0,d0 moveq #$22,d6 loc_333000: ; ... move.b (a2)+,d0 add.w d0,(a1) addq.w #8,a1 dbf d6,loc_333000 lea byte_33306A(pc),a1 lea ($250000).l,a3 lea ($FFFF0000).l,a5 moveq #3,d5 loc_33301C: ; ... move.l (a1)+,a2 move.w (a2)+,d6 subq.w #1,d6 loc_333022: ; ... move.w (a2)+,d0 move.w d0,d1 and.w #$FFF,d0 lsl.w #5,d0 lea (a3,d0.w),a4 and.w #$F000,d1 rol.w #4,d1 addq.w #1,d1 lsl.w #3,d1 subq.w #1,d1 loc_33303C: ; ... move.l (a4)+,(a5)+ dbf d1,loc_33303C dbf d6,loc_333022 dbf d5,loc_33301C move.w d7,-(sp) moveq #0,d0 moveq #0,d1 lea dword_33307A(pc),a6 moveq #7,d7 loc_333056: ; ... move.l (a6)+,a1 move.l (a6)+,a2 move.b (a6)+,d0 move.b (a6)+,d1 bsr.w sub_337582 dbf d7,loc_333056 move.w (sp)+,d7 rts ; --------------------------------------------------------------------------- byte_33306A: dc.b 0, $27, $18, $1A, 0, $27, $18, $20, 0, $27; 0 ; ... dc.b $18, $26, 0, $27, $18, $2C; 10 dword_33307A: dc.l -$10000, -$F500, $201FFFF, $C0FFFF, $E000303; 0 ; ... dc.l -$FD40, -$EA00, $201FFFF, $380FFFF, $19000303; 5 dc.l -$FA80, -$DF00, $201FFFF, $640FFFF, $24000303; 10 dc.l -$F7C0, -$D400, $201FFFF, $900FFFF, $2F000303; 15 ; --------------------------------------------------------------------------- loc_3330CA: ; ... sub.w #$20,8(a0) subq.w #1,$2A(a0) bmi.s loc_3330EC bsr.w sub_33320A lea (Ani_ObjB0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3330EC: ; ... addq.b #2,$24(a0) move.w #$C,$2A(a0) move.b #1,$2C(a0) move.b #$FF,$2D(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_333108: ; ... tst.w $2A(a0) beq.s loc_333116 subq.w #1,$2A(a0) bsr.w sub_33320A loc_333116: ; ... lea byte_333282(pc),a1 bsr.w sub_333232 bne.s loc_333122 rts ; --------------------------------------------------------------------------- loc_333122: ; ... addq.b #2,$24(a0) bchg #0,1(a0) move.w #$B,$2A(a0) move.w #4,($FFFFF662).w sub.w #$28,8(a0) bchg #0,1(a0) bchg #0,$22(a0) lea ($FFFFE000).w,a1 moveq #0,d0 move.w #$400,d1 loc_333154: ; ... move.l d0,(a1)+ dbf d1,loc_333154 lea ($FFFFE13C).w,a1 lea byte_33351C(pc),a2 moveq #0,d0 moveq #$22,d6 loc_333166: ; ... move.b (a2)+,d0 sub.w d0,(a1) addq.w #8,a1 dbf d6,loc_333166 rts ; --------------------------------------------------------------------------- loc_333172: ; ... subq.w #1,$2A(a0) bmi.s loc_333194 add.w #$20,8(a0) bsr.w sub_33321E lea (Ani_ObjB0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_333194: ; ... addq.b #2,$24(a0) move.w #$C,$2A(a0) move.b #1,$2C(a0) move.b #-1,$2D(a0) rts ; --------------------------------------------------------------------------- loc_3331AC: ; ... tst.w $2A(a0) beq.s loc_3331BA subq.w #1,$2A(a0) bsr.w sub_33321E loc_3331BA: ; ... lea byte_3332F8(pc),a1 bsr.w sub_333232 bne.s loc_3331C6 rts ; --------------------------------------------------------------------------- loc_3331C6: ; ... addq.b #2,$24(a0) st ($FFFFF660).w move.b #$FA,d0 jsr PlaySound return_3331D8: ; ... rts ; --------------------------------------------------------------------------- ObjB1: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3331E8(pc,d0.w),d1 jmp off_3331E8(pc,d1.w) ; --------------------------------------------------------------------------- off_3331E8: dc.w loc_3331EC-off_3331E8,loc_333204-off_3331E8; 0 ; ... ; --------------------------------------------------------------------------- loc_3331EC: ; ... bsr.w LoadSubObject move.b #4,$1A(a0) move.w #$174,8(a0) move.w #$D8,$A(a0) rts ; --------------------------------------------------------------------------- loc_333204: ; ... jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_33320A: ; ... lea ($FFFFE138).w,a1 move.w #$22,d6 loc_333212: ; ... sub.w #$20,(a1) addq.w #8,a1 dbf d6,loc_333212 rts ; End of function sub_33320A ; =============== S U B R O U T I N E ======================================= sub_33321E: ; ... lea ($FFFFE13C).w,a1 move.w #$22,d6 loc_333226: ; ... add.w #$20,(a1) addq.w #8,a1 dbf d6,loc_333226 rts ; End of function sub_33321E ; =============== S U B R O U T I N E ======================================= sub_333232: ; ... subq.b #1,$2C(a0) bne.s loc_33327A moveq #0,d0 move.b $2D(a0),d0 addq.b #1,d0 cmp.b 1(a1),d0 bcs.s loc_33324C tst.b 3(a1) bne.s loc_33327E loc_33324C: ; ... move.b d0,$2D(a0) move.b 0(a1),$2C(a0) lea 6(a1),a2 moveq #0,d1 move.b 2(a1),d1 move.w d1,d2 tst.w d0 beq.s loc_333270 loc_333266: ; ... subq.b #1,d0 beq.s loc_33326E add.w d2,d1 bra.s loc_333266 ; --------------------------------------------------------------------------- loc_33326E: ; ... add.w d1,a2 loc_333270: ; ... move.w 4(a1),a3 loc_333274: ; ... move.w (a2)+,(a3)+ subq.w #2,d2 bne.s loc_333274 loc_33327A: ; ... moveq #0,d0 rts ; --------------------------------------------------------------------------- loc_33327E: ; ... moveq #1,d0 rts ; End of function sub_333232 ; --------------------------------------------------------------------------- byte_333282: dc.b 4, 7, $10, -1, -5, $10, $E, $60, $E, $60; 0 ; ... dc.b $E, $60, $E, $60, $E, $60, $E, $60, $E, $60; 10 dc.b $E,-$12, $E, $62, $E,-$12, $E,-$12, $E,-$12; 20 dc.b $E,-$12, $E,-$12, $E,-$12, $E,-$12, $E,-$7C; 30 dc.b $E, $62, $E, $60, $E, $60, $E, $60, $E, $60; 40 dc.b $E, $60, $E,-$12, $E,-$5A, $E,-$7C, $E, $62; 50 dc.b $E, $60, $E, $60, $E, $60, $E, $60, $E,-$12; 60 dc.b $E,-$38, $E,-$5A, $E,-$7C, $E, $62, $E, $60; 70 dc.b $E, $60, $E, $60, $E,-$12, $E,-$14, $E,-$38; 80 dc.b $E,-$5A, $E,-$7C, $E, $62, $E, $60, $E, $60; 90 dc.b $E,-$12, $E,-$12, $E,-$14, $E,-$38, $E,-$5A; 100 dc.b $E,-$7C, $E, $62, $E, $60, $E,-$12; 110 byte_3332F8: dc.b 4, 7, $10, -1, -5, 0, $E,-$12, $E, $60; 0 ; ... dc.b $E, $60, $E, $60, $E, $60, $E, $60, $E, $60; 10 dc.b $E, $60, $E,-$12, $E, $62, $E, $60, $E, $60; 20 dc.b $E, $60, $E, $60, $E, $60, $E, $60, $E,-$12; 30 dc.b $E,-$7C, $E, $62, $E, $60, $E, $60, $E, $60; 40 dc.b $E, $60, $E, $60, $E,-$12, $E,-$5A, $E,-$7C; 50 dc.b $E, $62, $E, $60, $E, $60, $E, $60, $E, $60; 60 dc.b $E,-$12, $E,-$38, $E,-$5A, $E,-$7C, $E, $62; 70 dc.b $E, $60, $E, $60, $E, $60, $E,-$12, $E,-$14; 80 dc.b $E,-$38, $E,-$5A, $E,-$7C, $E, $62, $E, $60; 90 dc.b $E, $60, $E,-$12, $E,-$12, $E,-$14, $E,-$38; 100 dc.b $E,-$5A, $E,-$7C, $E, $62, $E, $60, 0, $33; 110 dc.b $33,-$76,-$40,-$78, 0, 1, $10, 0, 0, $33; 120 dc.b $33,-$76, 0, 3, 0, 2, 8, 0; 130 Ani_ObjB0: dc.w byte_333384-Ani_ObjB0 ; 0 ; ... byte_333384: dc.b 0, 0, 1, 2, 3, -1; 0 ; ... off_33338A: dc.w byte_333394-off_33338A,byte_3333BA-off_33338A,byte_3333E0-off_33338A; 0 ; ... dc.w byte_333406-off_33338A,byte_33342C-off_33338A; 3 byte_333394: dc.b 0, 6,-$28, $F, 0, 0, -1,-$10,-$28, 7; 0 ; ... dc.b 0, $10, 0, $10, -8, $F, 0, $18, -1,-$20; 10 dc.b $18, $F, 0, $28, -1,-$20, -8, $F, 0, $38; 20 dc.b 0, 0, $18, $F, 0, $48, 0, 0; 30 byte_3333BA: dc.b 0, 6,-$28, $F, 0, $58, -1,-$10,-$28, 7; 0 ; ... dc.b 0, $68, 0, $10, -8, $F, 0, $70, -1,-$20; 10 dc.b $18, $F, 0,-$80, -1,-$20, -8, $F, 0,-$70; 20 dc.b 0, 0, $18, $F, 0,-$60, 0, 0; 30 byte_3333E0: dc.b 0, 6,-$28, $F, 0,-$50, -1,-$10,-$28, 7; 0 ; ... dc.b 0,-$40, 0, $10, -8, $F, 0,-$38, -1,-$20; 10 dc.b $18, $F, 0,-$28, -1,-$20, -8, $F, 0,-$18; 20 dc.b 0, 0, $18, $F, 0, -8, 0, 0; 30 byte_333406: dc.b 0, 6,-$28, $F, 1, 8, -1,-$10,-$28, 7; 0 ; ... dc.b 1, $18, 0, $10, -8, $F, 1, $20, -1,-$20; 10 dc.b $18, $F, 1, $30, -1,-$20, -8, $F, 1, $40; 20 dc.b 0, 0, $18, $F, 1, $50, 0, 0; 30 byte_33342C: dc.b 0, 2, -4, 0, 0, 0, -1, -8, -4, 0; 0 ; ... dc.b 0, 0, 0, 0 ; 10 ; =============== S U B R O U T I N E ======================================= sub_33343A: ; ... ; FUNCTION CHUNK AT 00330946 SIZE 00000002 BYTES move.w ($FFFFF662).w,d0 beq.w return_330946 clr.w ($FFFFF662).w move.w off_33344E-2(pc,d0),d0 loc_33344A: jmp off_33344E(pc,d0.w) ; End of function sub_33343A ; --------------------------------------------------------------------------- off_33344E: dc.w loc_333452-off_33344E,loc_333484-off_33344E; 0 ; ... ; --------------------------------------------------------------------------- loc_333452: ; ... lea ($C00004).l,a5 move.l #$94169300,(a5) move.l #$96859580,(a5) move.w #$977F,(a5) move.w #$5100,(a5) move.w #$80,($FFFFF640).w move.w ($FFFFF640).w,(a5) lea byte_3334FC(pc),a1 move.l #$49500003,d0 bra.w loc_3334C0 ; --------------------------------------------------------------------------- loc_333484: ; ... lea ($C00004).l,a5 move.w #$8F01,(a5) move.l #$941F93FF,(a5) move.w #$9780,(a5) move.l #$40000083,(a5) move.w #0,($C00000).l loc_3334A6: ; ... move.w (a5),d1 btst #1,d1 bne.s loc_3334A6 move.w #$8F02,(a5) lea byte_33350C(pc),a1 move.l #$49A00003,d0 bra.w *+4 loc_3334C0: ; ... lea ($C00000).l,a6 move.l #$1000000,d6 moveq #7,d1 moveq #9,d2 loc_3334D0: ; ... move.l d0,4(a6) move.w d1,d3 move.l a1,a2 loc_3334D8: ; ... move.w (a2)+,d4 bclr #$A,d4 beq.s loc_3334E4 bsr.w sub_3334F2 loc_3334E4: ; ... move.w d4,(a6) dbf d3,loc_3334D8 add.l d6,d0 dbf d2,loc_3334D0 rts ; =============== S U B R O U T I N E ======================================= sub_3334F2: ; ... moveq #$28,d5 loc_3334F4: ; ... move.w d4,(a6) dbf d5,loc_3334F4 rts ; End of function sub_3334F2 ; --------------------------------------------------------------------------- byte_3334FC: dc.b -$60,-$80,-$60,-$7F,-$60,-$7E,-$60,-$7D,-$60,-$7C; 0 ; ... dc.b -$60,-$7B,-$60,-$7A,-$5C,-$79; 10 byte_33350C: dc.b -$5C,-$79,-$60,-$7A,-$60,-$7B,-$60,-$7C,-$60,-$7D; 0 ; ... dc.b -$60,-$7E,-$60,-$7F,-$60,-$80; 10 byte_33351C: dc.b $12, 4, 4, 2, 2, 2, 2, 0, 0, 0; 0 ; ... dc.b 0, 0, 0, 0, 0, 4, 4, 6, $A, 8; 10 dc.b 6, 4, 4, 4, 4, 6, 6, 8, 8, $A; 20 dc.b $A, $C, $E, $10, $16, 0; 30 ; --------------------------------------------------------------------------- ObjB2: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_33354E(pc,d0.w),d1 jmp off_33354E(pc,d1.w) ; --------------------------------------------------------------------------- off_33354E: dc.w loc_33355E-off_33354E,loc_333590-off_33354E,loc_333652-off_33354E; 0 ; ... dc.w loc_333716-off_33354E,loc_333A60-off_33354E,loc_333B02-off_33354E; 3 dc.w loc_333B22-off_33354E,loc_333B3E-off_33354E; 6 ; --------------------------------------------------------------------------- loc_33355E: ; ... bsr.w LoadSubObject moveq #0,d0 move.b $28(a0),d0 sub.b #$4E,d0 move.b d0,$24(a0) cmp.w #2,($FFFFFF70).w bne.s loc_33358A cmp.b #8,d0 bcc.s loc_33358A move.b #4,$1A(a0) move.b #1,$1C(a0) loc_33358A: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_333590: ; ... bsr.w sub_333D66 tst.w ($FFFFFE08).w bne.w loc_333634 lea ($FFFFB000).w,a1 move.w 2(a1),d0 and.w #$8000,d0 move.w 2(a0),d1 and.w #$7FFF,d1 or.w d0,d1 move.w d1,2(a0) move.w 8(a0),-(sp) bsr.w sub_333BB0 move.b $22(a0),$2E(a0) move.w #$1B,d1 move.w #8,d2 move.w #9,d3 move.w (sp)+,d4 jsr SolidObject bsr.w sub_333C42 move.b $2E(a0),d0 move.b $22(a0),d1 and.b #8,d0 and.b #8,d1 eor.b d0,d1 move.b d1,$2E(a0) lea ($FFFFB000).w,a1 move.w 8(a1),d1 move.w ($FFFFEE00).w,d0 move.w d0,($FFFFEEC8).w move.w d0,d2 add.w #$11,d2 cmp.w d2,d1 bhi.s loc_333612 addq.w #1,d1 move.w d1,8(a1) loc_333612: ; ... cmp.w #$1400,d0 bcs.s loc_33362C cmp.w #$1568,d1 bcc.s loc_333646 st ($FFFFF7CC).w move.w #$808,($FFFFF602).w bra.w loc_333630 ; --------------------------------------------------------------------------- loc_33362C: ; ... sub.w #$40,d0 loc_333630: ; ... move.w d0,($FFFFEECA).w loc_333634: ; ... lea (Ani_ObjCC).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_333646: ; ... bsr.w sub_333A36 move.w #$600,($FFFFFE10).w bra.s loc_333634 ; --------------------------------------------------------------------------- loc_333652: ; ... bsr.w sub_333D66 moveq #0,d0 move.b $25(a0),d0 move.w off_333674(pc,d0.w),d1 jsr off_333674(pc,d1.w) lea (Ani_ObjCC).l,a1 jsr AnimateSprite bra.w loc_32F7C8 ; --------------------------------------------------------------------------- off_333674: dc.w loc_33367C-off_333674,loc_33368E-off_333674,loc_3336D8-off_333674; 0 ; ... dc.w loc_33370E-off_333674 ; 3 ; --------------------------------------------------------------------------- loc_33367C: ; ... addq.b #2,$25(a0) move.w #$C0,$32(a0) move.w #$100,$10(a0) rts ; --------------------------------------------------------------------------- loc_33368E: ; ... subq.w #1,$32(a0) bmi.s loc_3336BA move.w 8(a0),-(sp) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bsr.w sub_32F646 move.w #$1B,d1 move.w #8,d2 move.w #9,d3 move.w (sp)+,d4 jsr SolidObject bra.w loc_333CF8 ; --------------------------------------------------------------------------- loc_3336BA: ; ... addq.b #2,$25(a0) move.w #$60,$2A(a0) move.w #1,$32(a0) move.w #$100,$10(a0) move.w #$100,$12(a0) rts ; --------------------------------------------------------------------------- loc_3336D8: ; ... move.b ($FFFFFE0F).w,d0 and.b #$1F,d0 bne.s loc_3336EA moveq #$FFFFFFEB,d0 jsr PlaySound loc_3336EA: ; ... subq.w #1,$2A(a0) bmi.s loc_333706 loc_3336F0: ; ... bsr.w sub_333B8E subq.w #1,$32(a0) bne.w return_330946 move.w #$E,$32(a0) bra.w loc_333D40 ; --------------------------------------------------------------------------- loc_333706: ; ... addq.b #2,$25(a0) bra.w sub_33451C ; --------------------------------------------------------------------------- loc_33370E: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bra.s loc_3336F0 ; --------------------------------------------------------------------------- loc_333716: ; ... bsr.w sub_333D66 moveq #0,d0 move.b $25(a0),d0 move.w off_333734(pc,d0.w),d1 jsr off_333734(pc,d1.w) lea (Ani_ObjCC).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- off_333734: dc.w loc_333746-off_333734,loc_3337EE-off_333734,loc_33382C-off_333734; 0 ; ... dc.w loc_333854-off_333734,loc_33388A-off_333734,loc_3338E2-off_333734; 3 dc.w loc_33394C-off_333734,loc_33396A-off_333734,loc_3339CC-off_333734; 6 ; --------------------------------------------------------------------------- loc_333746: ; ... lea ($FFFFB000).w,a1 cmp.w #$540,$C(a1) bcs.s loc_33375E st ($FFFFF7CC).w clr.w ($FFFFF604).w clr.w ($FFFFF602).w loc_33375E: ; ... cmp.w #$5EC,$C(a1) bcs.s return_33377E btst #1,$22(a1) bne.s return_33377E clr.w ($FFFFF602).w addq.w #1,$2E(a0) cmp.w #$40,$2E(a0) bcc.s loc_333780 return_33377E: ; ... rts ; --------------------------------------------------------------------------- loc_333780: ; ... addq.b #2,$25(a0) move.w #$2E58,8(a0) move.w #$66C,$C(a0) lea ($FFFFB000).w,a1 bsr.w sub_333A46 lea (byte_333DCE).l,a2 bsr.w sub_32F6A0 move.w #$3118,8(a1) move.w #$3F0,$C(a1) lea (byte_333DCA).l,a2 loc_3337B4: bsr.w sub_32F6A0 move.w #$3070,8(a1) move.w #$3B0,$C(a1) lea (byte_333DCA).l,a2 bsr.w sub_32F6A0 move.w #$3070,8(a1) move.w #$430,$C(a1) lea (byte_333DD2).l,a2 bsr.w sub_32F6A0 clr.w 8(a1) clr.w $C(a1) rts ; --------------------------------------------------------------------------- loc_3337EE: ; ... lea ($FFFFB000).w,a1 cmp.w #$2E30,8(a1) bcc.s loc_333802 move.w #$808,($FFFFF602).w rts ; --------------------------------------------------------------------------- loc_333802: ; ... addq.b #2,$25(a0) clr.w ($FFFFF602).w clr.w $10(a1) clr.w $12(a1) clr.w $14(a1) move.w #$600,($FFFFF760).w move.w #$C,($FFFFF762).w move.w #$80,($FFFFF764).w bra.w sub_333A46 ; --------------------------------------------------------------------------- loc_33382C: ; ... cmp.w #$380,($FFFFEEE2).w bcc.s loc_33383C clr.w ($FFFFF602).w bra.w sub_333A46 ; --------------------------------------------------------------------------- loc_33383C: ; ... addq.b #2,$25(a0) move.w #$100,$10(a0) move.w #$FF00,$12(a0) clr.w $2A(a0) bra.w sub_333A46 ; --------------------------------------------------------------------------- loc_333854: ; ... bsr.w sub_333A46 addq.w #1,$2A(a0) cmp.w #$20,$2A(a0) bne.s loc_333880 addq.b #2,$25(a0) move.w #$4040,($FFFFF602).w move.w #$38,$2E(a0) tst.b ($FFFFFE19).w beq.s loc_333880 move.w #$28,$2E(a0) loc_333880: ; ... bsr.w sub_333B8E jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33388A: ; ... clr.w ($FFFFF602).w addq.w #1,$2A(a0) subq.w #1,$2E(a0) bmi.s loc_33389E move.w #$4800,($FFFFF602).w loc_33389E: ; ... bsr.w sub_333B8E btst #3,$22(a0) beq.s loc_3338DC addq.b #2,$25(a0) move.w #$20,$2E(a0) lea ($FFFF80D2).w,a1 move.l #$501F0025,(a1)+ lea ($FFFF81D2).w,a1 move.l #$25001F50,(a1)+ lea ($FFFF8BD6).w,a1 move.l #$501F0025,(a1)+ lea ($FFFF8CD6).w,a1 move.l #$25001F50,(a1)+ loc_3338DC: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3338E2: ; ... addq.w #1,$2A(a0) cmp.w #$100,$2A(a0) bcs.s loc_3338FC addq.b #2,$25(a0) move.w $3A(a0),a1 move.b #2,$25(a1) loc_3338FC: ; ... clr.w ($FFFFF602).w lea ($FFFFB000).w,a1 move.w 8(a0),8(a1) clr.w $10(a1) clr.w $12(a1) clr.w $14(a1) bclr #1,$22(a1) bclr #2,$22(a1) move.w #$500,$1C(a1) move.w #$100,$1E(a1) move.b #$13,$16(a1) cmp.w #2,($FFFFFF70).w bne.s loc_333942 move.b #$F,$16(a1) loc_333942: ; ... bsr.w sub_333B8E jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33394C: ; ... clr.w ($FFFFF602).w bsr.w sub_333A46 cmp.w #$437,$2A(a0) bcs.s loc_333978 addq.b #2,$25(a0) move.w #$4040,($FFFFF602).w bra.w loc_333978 ; --------------------------------------------------------------------------- loc_33396A: ; ... cmp.w #$447,$2A(a0) bcc.s loc_333978 move.w #$4000,($FFFFF602).w loc_333978: ; ... cmp.w #$460,$2A(a0) bcs.s loc_3339CC move.b #6,($FFFFEEDF).w addq.b #2,$25(a0) lea (byte_333DCA).l,a2 bsr.w sub_32F6A0 move.w #$3090,8(a1) move.w #$3D0,$C(a1) lea (byte_333DCA).l,a2 bsr.w sub_32F6A0 move.w #$30C0,8(a1) move.w #$3F0,$C(a1) lea (byte_333DCA).l,a2 bsr.w sub_32F6A0 move.w #$3090,8(a1) move.w #$410,$C(a1) loc_3339CC: ; ... cmp.w #$9C0,$2A(a0) bcc.s loc_333A30 move.w $2A(a0),d0 addq.w #1,d0 move.w d0,$2A(a0) move.w $34(a0),d1 move.w word_333A06(pc,d1.w),d2 cmp.w d2,d0 bcs.s loc_3339FC addq.w #2,d1 move.w d1,$34(a0) lea byte_333A1A(pc,d1.w),a1 move.b (a1)+,$10(a0) move.b (a1)+,$12(a0) loc_3339FC: ; ... bsr.w sub_333B8E jmp DisplaySprite ; --------------------------------------------------------------------------- word_333A06: dc.w $1E0, $260, $2A0, $2C0, $300, $3A0, $3F0; 0 ; ... dc.w $460, $4A0, $580 ; 7 byte_333A1A: dc.b -1, -1, 1, 0, 0, 1, 1, -1, 1, 1; 0 ; ... dc.b 1, -1, -1, 1, -1, -1, -1, 1, -2, 0; 10 dc.b 0, 0 ; 20 ; --------------------------------------------------------------------------- loc_333A30: ; ... move.w #$E00,($FFFFFE10).w ; =============== S U B R O U T I N E ======================================= sub_333A36: ; ... move.w #1,($FFFFFE02).w clr.b ($FFFFFE30).w clr.b ($FFFFFEE0).w rts ; End of function sub_333A36 ; =============== S U B R O U T I N E ======================================= sub_333A46: ; ... lea ($FFFFB000).w,a1 move.w #$500,$1C(a1) move.w #$100,$1E(a1) clr.w $10(a1) clr.w $12(a1) rts ; End of function sub_333A46 ; --------------------------------------------------------------------------- loc_333A60: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_333A6E(pc,d0.w),d1 jmp off_333A6E(pc,d1.w) ; --------------------------------------------------------------------------- off_333A6E: dc.w loc_333A74-off_333A6E,loc_333A7A-off_333A6E,loc_333AE8-off_333A6E; 0 ; ... ; --------------------------------------------------------------------------- loc_333A74: ; ... move.b #$C7,$20(a0) loc_333A7A: ; ... tst.b $21(a0) beq.s return_333AE6 addq.b #2,$25(a0) clr.b $20(a0) move.w #$78,($FFFFEED8).w move.w $2C(a0),a1 bset #6,$22(a1) lea ($FFFFB000).w,a1 clr.w $10(a1) clr.w $12(a1) move.w 8(a0),d0 sub.w #$10,d0 move.w d0,8(a1) cmp.w #2,($FFFFFF70).w bne.s loc_333ABE sub.w #$10,$C(a1) loc_333ABE: ; ... bset #0,$22(a1) bclr #1,$22(a1) bclr #2,$22(a1) move.b #$11,$1C(a1) move.b #1,($FFFFB02A).w move.b #1,($FFFFF7C9).w clr.w ($FFFFF602).w return_333AE6: ; ... rts ; --------------------------------------------------------------------------- loc_333AE8: ; ... lea ($FFFFB000).w,a1 clr.w $10(a1) clr.w $12(a1) move.w 8(a0),d0 sub.w #$10,d0 move.w d0,8(a1) rts ; --------------------------------------------------------------------------- loc_333B02: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_333B10(pc,d0.w),d1 jmp off_333B10(pc,d1.w) ; --------------------------------------------------------------------------- off_333B10: dc.w loc_333B12-off_333B10 ; ... ; --------------------------------------------------------------------------- loc_333B12: ; ... bchg #2,$22(a0) bne.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_333B22: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_333B30(pc,d0.w),d1 jmp off_333B30(pc,d1.w) ; --------------------------------------------------------------------------- off_333B30: dc.w loc_333B32-off_333B30 ; ... ; --------------------------------------------------------------------------- loc_333B32: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_333B3E: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_333B4C(pc,d0.w),d1 jmp off_333B4C(pc,d1.w) ; --------------------------------------------------------------------------- off_333B4C: dc.w loc_333B50-off_333B4C,loc_333B5A-off_333B4C; 0 ; ... ; --------------------------------------------------------------------------- loc_333B50: ; ... bsr.w sub_333B70 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_333B5A: ; ... bsr.w sub_333B70 lea (Ani_ObjB2).l,a1 jsr AnimateSprite jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_333B70: ; ... move.w $2C(a0),a1 move.w 8(a1),d0 sub.w #$C,d0 move.w d0,8(a0) move.w $C(a1),d0 add.w #$28,d0 move.w d0,$C(a0) rts ; End of function sub_333B70 ; =============== S U B R O U T I N E ======================================= sub_333B8E: ; ... move.w 8(a0),-(sp) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bsr.w sub_32F646 move.w #$1B,d1 move.w #8,d2 move.w #9,d3 move.w (sp)+,d4 jmp SolidObject ; End of function sub_333B8E ; =============== S U B R O U T I N E ======================================= sub_333BB0: ; ... lea ($FFFFB000).w,a1 btst #3,$22(a1) beq.s loc_333BCE bsr.w sub_333BFE bsr.w sub_333D18 jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bra.w sub_32F646 ; --------------------------------------------------------------------------- loc_333BCE: ; ... tst.b $2E(a0) beq.s loc_333BDC bsr.w sub_32F5A6 move.w d2,$38(a0) loc_333BDC: ; ... move.w #1,d0 move.w $38(a0),d3 beq.s loc_333BF0 bmi.s loc_333BEA neg.w d0 loc_333BEA: ; ... add.w d0,d3 move.w d3,$38(a0) loc_333BF0: ; ... move.w 8(a1),d1 add.w d3,d1 move.w d1,8(a0) bra.w sub_32F646 ; End of function sub_333BB0 ; =============== S U B R O U T I N E ======================================= sub_333BFE: ; ... tst.b $2F(a0) bne.s loc_333C1E tst.b $2E(a0) beq.s return_333C40 st $2F(a0) clr.b $30(a0) move.w #$200,$12(a0) move.b #$14,$31(a0) loc_333C1E: ; ... subq.b #1,$31(a0) bpl.s loc_333C2E clr.b $2F(a0) clr.w $12(a0) rts ; --------------------------------------------------------------------------- loc_333C2E: ; ... move.w $12(a0),d0 cmp.w #$FF00,d0 ble.s loc_333C3C add.w #-$20,d0 loc_333C3C: ; ... move.w d0,$12(a0) return_333C40: ; ... rts ; End of function sub_333BFE ; =============== S U B R O U T I N E ======================================= sub_333C42: ; ... lea ($FFFFB000).w,a1 btst #3,$22(a1) beq.s loc_333CAA tst.b $2F(a0) bne.s loc_333C7C clr.w $12(a0) move.w ($FFFFF604).w,d2 move.w #$80,d3 and.w #$300,d2 beq.s loc_333C7C and.w #$200,d2 bne.s loc_333C6E neg.w d3 loc_333C6E: ; ... move.w d3,$12(a0) bsr.w sub_333D18 jsr ObjectMove ; AKA SpeedToPos in Sonic 1 loc_333C7C: ; ... bsr.w sub_32F5A6 moveq #$10,d3 add.w d3,d2 cmp.w #$20,d2 bcs.s return_333CA8 move.w $14(a1),d2 bpl.s loc_333C92 neg.w d2 loc_333C92: ; ... cmp.w #$900,d2 bcc.s return_333CA8 tst.w d0 beq.s loc_333C9E neg.w d3 loc_333C9E: ; ... move.w 8(a1),d1 add.w d3,d1 move.w d1,8(a0) return_333CA8: ; ... rts ; --------------------------------------------------------------------------- loc_333CAA: ; ... tst.b $30(a0) bne.s loc_333CCA tst.b $2E(a0) beq.s return_333CA8 st $30(a0) clr.b $2F(a0) move.w #$200,$12(a0) move.b #$2B,$31(a0) loc_333CCA: ; ... subq.b #1,$31(a0) bpl.s loc_333CDA clr.b $30(a0) clr.w $12(a0) rts ; --------------------------------------------------------------------------- loc_333CDA: ; ... move.w $12(a0),d0 cmp.w #$FF00,d0 ble.s loc_333CE8 add.w #-$20,d0 loc_333CE8: ; ... move.w d0,$12(a0) bsr.w sub_333D18 jsr ObjectMove ; AKA SpeedToPos in Sonic 1 rts ; End of function sub_333C42 ; --------------------------------------------------------------------------- loc_333CF8: ; ... bsr.w sub_32F5A6 moveq #$10,d3 add.w d3,d2 cmp.w #$20,d2 bcs.s return_333D16 tst.w d0 beq.s loc_333D0C neg.w d3 loc_333D0C: ; ... move.w 8(a0),d1 sub.w d3,d1 move.w d1,8(a1) return_333D16: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_333D18: ; ... move.w ($FFFFEE04).w,d0 move.w $C(a0),d1 move.w $12(a0),d2 beq.s return_333D3E bpl.s loc_333D32 add.w #$34,d0 cmp.w d0,d1 bcs.s loc_333D3A rts ; --------------------------------------------------------------------------- loc_333D32: ; ... add.w #$A8,d0 cmp.w d0,d1 bcs.s return_333D3E loc_333D3A: ; ... clr.w $12(a0) return_333D3E: ; ... rts ; End of function sub_333D18 ; --------------------------------------------------------------------------- loc_333D40: ; ... jsr SingleObjLoad2 bne.s return_333D64 move.b #$C4,0(a1) move.b #$90,$28(a1) move.w a0,$2C(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) return_333D64: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_333D66: ; ... ; FUNCTION CHUNK AT 0031741A SIZE 00000126 BYTES ; FUNCTION CHUNK AT 00317640 SIZE 0000004E BYTES subq.b #1,$37(a0) bmi.s loc_333D6E rts ; --------------------------------------------------------------------------- loc_333D6E: ; ... move.b #8,$37(a0) moveq #0,d0 move.b $36(a0),d0 moveq #$18,d1 cmp.w #2,($FFFFFF70).w bne.s loc_333D86 moveq #4,d1 loc_333D86: ; ... addq.b #1,d0 cmp.w d1,d0 bcs.s loc_333D8E moveq #0,d0 loc_333D8E: ; ... move.b d0,$36(a0) cmp.w #2,($FFFFFF70).w bne.s loc_333DA4 move.b byte_333DAE(pc,d0.w),d0 jmp LoadKnucklesDynPLC_Part2 ; --------------------------------------------------------------------------- loc_333DA4: ; ... move.b byte_333DB2(pc,d0.w),d0 jmp LoadTailsDynPLC ; End of function sub_333D66 ; --------------------------------------------------------------------------- byte_333DAE: dc.b $2D, $2E, $2F, $30 ; 0 ; ... byte_333DB2: dc.b $10, $10, $10, $10, 1, 2, 3, 2, 1, 1; 0 ; ... dc.b $10, $10, $10, $10, 1, 2, 3, 2, 1, 1; 10 dc.b 4, 4, 1, 1 ; 20 byte_333DCA: dc.b 0, $3E,-$4E, $58 ; 0 ; ... byte_333DCE: dc.b 0, $3C,-$4E, $56 ; 0 ; ... byte_333DD2: dc.b 0, $3A,-$4E, $5C, 0, $3E,-$4E, $5A; 0 ; ... ObjB2_SubObjData:dc.l Map_ObjB2 ; ... dc.w $8500 dc.b 4, 4, $60, 0 ; 0 dc.l Map_ObjB2_0 dc.w $561 dc.b 4, 3, $40, 0 ; 0 Ani_ObjCC: dc.w byte_333DF2-Ani_ObjCC,byte_333DF8-Ani_ObjCC; 0 ; ... byte_333DF2: dc.b 0, 0, 1, 2, 3, -1; 0 ; ... byte_333DF8: dc.b 0, 4, 5, 6, 7, -1; 0 ; ... Ani_ObjB2: dc.w byte_333E00-Ani_ObjB2 ; 0 ; ... byte_333E00: dc.b 0, 1, 2, -1 ; 0 ; ... Map_ObjB2: dc.w byte_333E14-Map_ObjB2,byte_333E52-Map_ObjB2,byte_333E90-Map_ObjB2; 0 ; ... dc.w byte_333ECE-Map_ObjB2,byte_333F0C-Map_ObjB2,byte_333F4A-Map_ObjB2; 3 dc.w byte_333F88-Map_ObjB2,byte_333FC6-Map_ObjB2; 6 byte_333E14: dc.b 0, $A,-$10, $B, 0, 0, -1,-$60, $10, 8; 0 ; ... dc.b 0, $C, -1,-$60, 3, $A, 0, $F, -1,-$48; 10 dc.b -8, 9, 2,-$60, -1,-$30, 8, $E, 0, $1E; 20 dc.b -1,-$30, -8, $D, 0, $2A, -1,-$18, -8, 0; 30 dc.b 0, $32, 0, 8, 8, $E, 0, $33, -1,-$10; 40 dc.b 8, 2, 0, $3F, 0, $10, $20, 5, 0, $42; 50 dc.b -1, -$C ; 60 byte_333E52: dc.b 0, $A,-$10, $B, 0, 0, -1,-$60, $10, 8; 0 ; ... dc.b 0, $C, -1,-$60, 3, $A, 0, $F, -1,-$48; 10 dc.b -8, 9, 2,-$60, -1,-$30, 8, $E, 0, $1E; 20 dc.b -1,-$30, -8, $D, 0, $2A, -1,-$18, -8, 0; 30 dc.b 0, $32, 0, 8, 8, $E, 0, $33, -1,-$10; 40 dc.b 8, 2, 0, $46, 0, $10, $20, 5, 0, $42; 50 dc.b -1, -$C ; 60 byte_333E90: dc.b 0, $A,-$10, $B, 0, 0, -1,-$60, $10, 8; 0 ; ... dc.b 0, $C, -1,-$60, 3, $A, 0, $F, -1,-$48; 10 dc.b -8, 9, 2,-$60, -1,-$30, 8, $E, 0, $1E; 20 dc.b -1,-$30, -8, $D, 0, $2A, -1,-$18, -8, 0; 30 dc.b 0, $32, 0, 8, 8, $E, 0, $33, -1,-$10; 40 dc.b 8, 2, 0, $49, 0, $10, $20, 5, 0, $42; 50 dc.b -1, -$C ; 60 byte_333ECE: dc.b 0, $A,-$10, $B, 0, 0, -1,-$60, $10, 8; 0 ; ... dc.b 0, $C, -1,-$60, 3, $A, 0, $F, -1,-$48; 10 dc.b -8, 9, 2,-$60, -1,-$30, 8, $E, 0, $1E; 20 dc.b -1,-$30, -8, $D, 0, $2A, -1,-$18, -8, 0; 30 dc.b 0, $32, 0, 8, 8, $E, 0, $33, -1,-$10; 40 dc.b 8, 2, 0, $4C, 0, $10, $20, 5, 0, $42; 50 dc.b -1, -$C ; 60 byte_333F0C: dc.b 0, $A,-$10, $B, 0, 0, -1,-$60, $10, 8; 0 ; ... dc.b 0, $C, -1,-$60, 3, $A, 0, $F, -1,-$48; 10 dc.b -8, 9, 2,-$80, -1,-$32, 8, $E, 0, $1E; 20 dc.b -1,-$30, -8, $D, 0, $2A, -1,-$18, -8, 0; 30 dc.b 0, $32, 0, 8, 8, $E, 0, $33, -1,-$10; 40 dc.b 8, 2, 0, $3F, 0, $10, $20, 5, 0, $42; 50 dc.b -1, -$C ; 60 byte_333F4A: dc.b 0, $A,-$10, $B, 0, 0, -1,-$60, $10, 8; 0 ; ... dc.b 0, $C, -1,-$60, 3, $A, 0, $F, -1,-$48; 10 dc.b -8, 9, 2,-$80, -1,-$32, 8, $E, 0, $1E; 20 dc.b -1,-$30, -8, $D, 0, $2A, -1,-$18, -8, 0; 30 dc.b 0, $32, 0, 8, 8, $E, 0, $33, -1,-$10; 40 dc.b 8, 2, 0, $46, 0, $10, $20, 5, 0, $42; 50 dc.b -1, -$C ; 60 byte_333F88: dc.b 0, $A,-$10, $B, 0, 0, -1,-$60, $10, 8; 0 ; ... dc.b 0, $C, -1,-$60, 3, $A, 0, $F, -1,-$48; 10 dc.b -8, 9, 2,-$80, -1,-$32, 8, $E, 0, $1E; 20 dc.b -1,-$30, -8, $D, 0, $2A, -1,-$18, -8, 0; 30 dc.b 0, $32, 0, 8, 8, $E, 0, $33, -1,-$10; 40 dc.b 8, 2, 0, $49, 0, $10, $20, 5, 0, $42; 50 dc.b -1, -$C ; 60 byte_333FC6: dc.b 0, $A,-$10, $B, 0, 0, -1,-$60, $10, 8; 0 ; ... dc.b 0, $C, -1,-$60, 3, $A, 0, $F, -1,-$48; 10 dc.b -8, 9, 2,-$80, -1,-$32, 8, $E, 0, $1E; 20 dc.b -1,-$30, -8, $D, 0, $2A, -1,-$18, -8, 0; 30 dc.b 0, $32, 0, 8, 8, $E, 0, $33, -1,-$10; 40 dc.b 8, 2, 0, $4C, 0, $10, $20, 5, 0, $42; 50 dc.b -1, -$C ; 60 Map_ObjB2_0: dc.w byte_33400A-Map_ObjB2_0,byte_334018-Map_ObjB2_0,byte_33402C-Map_ObjB2_0; 0 ; ... byte_33400A: dc.b 0, 2, -8, 9, $20, 0, -1,-$1C, -8, $D; 0 ; ... dc.b $20, 6, -1, -4 ; 10 byte_334018: dc.b 0, 3, -8, 9, $20, 0, -1,-$1C, -8, $D; 0 ; ... dc.b $20, 6, -1, -4, -8, $D, $40, $E, -1,-$3C; 10 byte_33402C: dc.b 0, 3, -8, 9, $20, 0, -1,-$1C, -8, $D; 0 ; ... dc.b $20, 6, -1, -4, -8, 5, $40, $16, -1,-$2C; 10 ; --------------------------------------------------------------------------- ObjB3: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_33404E(pc,d0.w),d1 jmp off_33404E(pc,d1.w) ; --------------------------------------------------------------------------- off_33404E: dc.w loc_334052-off_33404E,loc_334074-off_33404E; 0 ; ... ; --------------------------------------------------------------------------- loc_334052: ; ... bsr.w LoadSubObject moveq #0,d0 move.b $28(a0),d0 sub.b #$5E,d0 move.w word_33406E(pc,d0.w),$10(a0) lsr.w #1,d0 move.b d0,$1A(a0) rts ; --------------------------------------------------------------------------- word_33406E: dc.w -$80, -$40, -$20 ; 0 ; ... ; --------------------------------------------------------------------------- loc_334074: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 move.w ($FFFFF736).w,d0 add.w d0,8(a0) bra.w loc_32F658 ; --------------------------------------------------------------------------- ObjB3_SubData: dc.l Map_ObjB3 ; ... dc.w $454F dc.b 4, 6, $30, 0 ; 0 Map_ObjB3: dc.w byte_334098-Map_ObjB3,byte_3340AC-Map_ObjB3,byte_3340BA-Map_ObjB3; 0 ; ... dc.w byte_334098-Map_ObjB3 ; 3 byte_334098: dc.b 0, 3, -4, $C, 0, 0, -1,-$28, -4, $C; 0 ; ... dc.b 0, 4, -1, -8, -4, 4, 0, 8, 0, $18; 10 byte_3340AC: dc.b 0, 2, -4, $C, 0, $A, -1,-$18, -4, 4; 0 ; ... dc.b 0, $E, 0, 8 ; 10 byte_3340BA: dc.b 0, 1, -4, 4, 0, $10, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- ObjB4: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3340D0(pc,d0.w),d1 jmp off_3340D0(pc,d1.w) ; --------------------------------------------------------------------------- off_3340D0: dc.w loc_3340D4-off_3340D0,loc_3340E6-off_3340D0; 0 ; ... ; --------------------------------------------------------------------------- loc_3340D4: ; ... bsr.w LoadSubObject bclr #1,1(a0) beq.s return_3340E4 clr.b $20(a0) return_3340E4: ; ... rts ; --------------------------------------------------------------------------- loc_3340E6: ; ... lea (Ani_ObjB4).l,a1 jsr AnimateSprite move.b ($FFFFFE0F).w,d0 and.b #$1F,d0 bne.s loc_334104 moveq #$FFFFFFDE,d0 jsr PlaySoundLocal loc_334104: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- dc.l Map_ObjB4 dc.w $A561 dc.b 4, 4, 4,-$58 ; 0 Ani_ObjB4: dc.w byte_334116-Ani_ObjB4 ; 0 ; ... byte_334116: dc.b 1, 0, 1, 2, -1, 0; 0 ; ... Map_ObjB4: dc.w byte_334122-Map_ObjB4,byte_334130-Map_ObjB4,byte_33413E-Map_ObjB4; 0 ; ... byte_334122: dc.b 0, 2,-$40, 3, 0, 0, -1, -4,-$20, 3; 0 ; ... dc.b $10, 0, -1, -4 ; 10 byte_334130: dc.b 0, 2,-$20, 3, 0, 0, -1, -4, 0, 3; 0 ; ... dc.b $10, 0, -1, -4 ; 10 byte_33413E: dc.b 0, 2, 0, 3, 0, 0, -1, -4, $20, 3; 0 ; ... dc.b $10, 0, -1, -4 ; 10 ; --------------------------------------------------------------------------- ObjB5: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_33415A(pc,d0.w),d1 jmp off_33415A(pc,d1.w) ; --------------------------------------------------------------------------- off_33415A: dc.w loc_334160-off_33415A,loc_334178-off_33415A,loc_33419E-off_33415A; 0 ; ... ; --------------------------------------------------------------------------- loc_334160: ; ... bsr.w LoadSubObject move.b #4,$1C(a0) move.b $28(a0),d0 sub.b #$64,d0 move.b d0,$24(a0) rts ; --------------------------------------------------------------------------- loc_334178: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_334198(pc,d0.w),d1 jsr off_334198(pc,d1.w) lea (Ani_ObjB5).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- off_334198: dc.w loc_33419A-off_334198 ; 0 ; ... ; --------------------------------------------------------------------------- loc_33419A: ; ... bra.w loc_3341B0 ; --------------------------------------------------------------------------- loc_33419E: ; ... lea (Ani_ObjB5).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3341B0: ; ... cmp.b #4,$1C(a0) bne.w return_334244 lea ($FFFFB000).w,a1 bsr.w sub_3341C6 lea ($FFFFB040).w,a1 ; =============== S U B R O U T I N E ======================================= sub_3341C6: ; ... move.w 8(a1),d0 sub.w 8(a0),d0 add.w #$40,d0 cmp.w #$80,d0 bcc.s return_334244 moveq #0,d1 move.b ($FFFFFE74).w,d1 add.w $C(a1),d1 add.w #$60,d1 sub.w $C(a0),d1 bcs.s return_334244 cmp.w #$90,d1 bcc.s return_334244 sub.w #$60,d1 bcs.s loc_3341FC not.w d1 add.w d1,d1 loc_3341FC: ; ... add.w #$60,d1 neg.w d1 asr.w #4,d1 add.w d1,$C(a1) bset #1,$22(a1) bclr #4,$22(a1) move.b #0,$21(a1) move.w #0,$12(a1) move.w #1,$14(a1) tst.b $27(a1) bne.s return_334244 move.b #1,$27(a1) move.b #$F,$1C(a1) move.b #$7F,$2C(a1) move.b #8,$2D(a1) return_334244: ; ... rts ; End of function sub_3341C6 ; --------------------------------------------------------------------------- dc.l Map_ObjB5 dc.w $A3CD dc.b 4, 4, $40, 0 ; 0 Ani_ObjB5: dc.w byte_334264-Ani_ObjB5,byte_33426E-Ani_ObjB5,byte_334276-Ani_ObjB5; 0 ; ... dc.w byte_33427E-Ani_ObjB5,byte_334284-Ani_ObjB5,byte_33428C-Ani_ObjB5; 3 dc.w byte_334292-Ani_ObjB5,byte_33429A-Ani_ObjB5,byte_3342A2-Ani_ObjB5; 6 dc.w byte_3342AC-Ani_ObjB5 ; 9 byte_334264: dc.b 7, 0, 1, 2, 3, 4, 5, -3, 1, 0; 0 ; ... byte_33426E: dc.b 4, 0, 1, 2, 3, 4, -3, 2; 0 ; ... byte_334276: dc.b 3, 5, 0, 1, 2, -3, 3, 0; 0 ; ... byte_33427E: dc.b 2, 3, 4, 5, -3, 4; 0 ; ... byte_334284: dc.b 1, 0, 1, 2, 3, 4, 5, -1; 0 ; ... byte_33428C: dc.b 2, 5, 4, 3, -3, 6; 0 ; ... byte_334292: dc.b 3, 2, 1, 0, 5, -3, 7, 0; 0 ; ... byte_33429A: dc.b 4, 4, 3, 2, 1, 0, -3, 8; 0 ; ... byte_3342A2: dc.b 7, 5, 4, 3, 2, 1, 0, -3, 9, 0; 0 ; ... byte_3342AC: dc.b $7E, 0, -1, 0 ; 0 ; ... Map_ObjB5: dc.w byte_3342BC-Map_ObjB5,byte_3342D6-Map_ObjB5,byte_3342E4-Map_ObjB5; 0 ; ... dc.w byte_3342F2-Map_ObjB5,byte_334300-Map_ObjB5,byte_33430E-Map_ObjB5; 3 byte_3342BC: dc.b 0, 4, -4, $C, 0, 0, -1,-$40, -4, 8; 0 ; ... dc.b 0, 4, -1,-$20, -4, 8, 0, 7, 0, 8; 10 dc.b -4, $C, 0, $A, 0, $20; 20 byte_3342D6: dc.b 0, 2, -4, $C, 0, $E, -1,-$28, -4, $C; 0 ; ... dc.b 0, $12, 0, 8 ; 10 byte_3342E4: dc.b 0, 2, -4, 8, 0, $16, -1,-$18, -4, 4; 0 ; ... dc.b 0, $19, 0, 8 ; 10 byte_3342F2: dc.b 0, 2, -4, 4, 0, $1B, -1,-$10, -4, 4; 0 ; ... dc.b 8, $1B, 0, 0 ; 10 byte_334300: dc.b 0, 2, -4, 4, 8, $19, -1,-$18, -4, 8; 0 ; ... dc.b 8, $16, 0, 0 ; 10 byte_33430E: dc.b 0, 2, -4, $C, 8, $12, -1,-$28, -4, $C; 0 ; ... dc.b 8, $E, 0, 8 ; 10 ; --------------------------------------------------------------------------- ObjB6: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_33432A(pc,d0.w),d1 jmp off_33432A(pc,d1.w) ; --------------------------------------------------------------------------- off_33432A: dc.w loc_334334-off_33432A,loc_33434E-off_33432A,loc_3343AC-off_33432A; 0 ; ... dc.w loc_33441E-off_33432A,loc_334496-off_33432A; 3 ; --------------------------------------------------------------------------- loc_334334: ; ... moveq #0,d0 move.b #$6A,d0 bsr.w loc_32F4CA move.b $28(a0),d0 and.b #6,d0 addq.b #2,d0 move.b d0,$24(a0) rts ; --------------------------------------------------------------------------- loc_33434E: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_334362(pc,d0.w),d1 jsr off_334362(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_334362: dc.w loc_33436A-off_334362,loc_334372-off_334362,loc_334392-off_334362; 0 ; ... dc.w loc_33439E-off_334362 ; 3 ; --------------------------------------------------------------------------- loc_33436A: ; ... addq.b #2,$25(a0) bra.w loc_3344DA ; --------------------------------------------------------------------------- loc_334372: ; ... bsr.w sub_3344EC move.b ($FFFFFE0F).w,d0 and.b #$F0,d0 cmp.b $28(a0),d0 beq.s loc_334386 rts ; --------------------------------------------------------------------------- loc_334386: ; ... addq.b #2,$25(a0) clr.b $1C(a0) bra.w sub_33451C ; --------------------------------------------------------------------------- loc_334392: ; ... lea (Ani_ObjB6).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- loc_33439E: ; ... move.b #2,$25(a0) move.w #$C0,$2A(a0) rts ; --------------------------------------------------------------------------- loc_3343AC: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3343C0(pc,d0.w),d1 jsr off_3343C0(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_3343C0: dc.w loc_33436A-off_3343C0 ; ... dc.w loc_3343C6-off_3343C0,loc_3343FA-off_3343C0; 0 ; --------------------------------------------------------------------------- loc_3343C6: ; ... bsr.w sub_3344EC subq.w #1,$2A(a0) bmi.s loc_3343D2 rts ; --------------------------------------------------------------------------- loc_3343D2: ; ... addq.b #2,$25(a0) move.b #$20,$2A(a0) move.b #3,$1C(a0) clr.b $1B(a0) clr.b $1E(a0) bsr.w sub_33451C bsr.w sub_334558 moveq #$FFFFFFDC,d0 jmp PlaySound ; --------------------------------------------------------------------------- loc_3343FA: ; ... subq.b #1,$2A(a0) bmi.s loc_33440C lea (Ani_ObjB6).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- loc_33440C: ; ... move.b #2,$25(a0) clr.b $1A(a0) move.w #$C0,$2A(a0) rts ; --------------------------------------------------------------------------- loc_33441E: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_334432(pc,d0.w),d1 jsr off_334432(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_334432: dc.w loc_33443A-off_334432,loc_334456-off_334432,loc_334484-off_334432; 0 ; ... dc.w loc_334490-off_334432 ; 3 ; --------------------------------------------------------------------------- loc_33443A: ; ... bsr.w sub_3344EC move.b $22(a0),d0 and.b #$18,d0 bne.s loc_33444A rts ; --------------------------------------------------------------------------- loc_33444A: ; ... addq.b #2,$25(a0) move.w #$10,$2A(a0) rts ; --------------------------------------------------------------------------- loc_334456: ; ... bsr.w sub_3344EC subq.w #1,$2A(a0) bmi.s loc_334462 rts ; --------------------------------------------------------------------------- loc_334462: ; ... addq.b #2,$25(a0) move.b #0,$1C(a0) bsr.w sub_32F5A6 bclr #0,$22(a0) tst.w d0 bne.s loc_334480 bset #0,$22(a0) loc_334480: ; ... bra.w sub_33451C ; --------------------------------------------------------------------------- loc_334484: ; ... lea (Ani_ObjB6).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- loc_334490: ; ... clr.b $25(a0) rts ; --------------------------------------------------------------------------- loc_334496: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3344AA(pc,d0.w),d1 jsr off_3344AA(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_3344AA: dc.w loc_3344B2-off_3344AA,loc_3344C0-off_3344AA,(loc_334392-off_3344AA); 0 ; ... dc.w (loc_33439E-off_3344AA) ; 3 ; --------------------------------------------------------------------------- loc_3344B2: ; ... addq.b #2,$25(a0) move.b #2,$1A(a0) bra.w loc_3344DA ; --------------------------------------------------------------------------- loc_3344C0: ; ... bsr.w sub_334504 subq.w #1,$2A(a0) bmi.s loc_3344CC rts ; --------------------------------------------------------------------------- loc_3344CC: ; ... addq.b #2,$25(a0) move.b #4,$1C(a0) bra.w sub_33451C ; --------------------------------------------------------------------------- loc_3344DA: ; ... move.b $28(a0),d0 and.w #$F0,d0 move.b d0,$28(a0) move.w d0,$2A(a0) rts ; =============== S U B R O U T I N E ======================================= sub_3344EC: ; ... move.w 8(a0),-(sp) move.w #$23,d1 move.w #4,d2 move.w #4,d3 move.w (sp)+,d4 jmp SolidObject ; End of function sub_3344EC ; =============== S U B R O U T I N E ======================================= sub_334504: ; ... move.w 8(a0),-(sp) move.w #$F,d1 move.w #$18,d2 move.w #$18,d3 move.w (sp)+,d4 jmp SolidObject ; End of function sub_334504 ; =============== S U B R O U T I N E ======================================= sub_33451C: ; ... move.b $22(a0),d0 and.b #$18,d0 beq.s return_334556 bclr #3,$22(a0) beq.s loc_33453E lea ($FFFFB000).w,a1 bclr #3,$22(a1) bset #1,$22(a1) loc_33453E: ; ... bclr #4,$22(a0) beq.s return_334556 lea ($FFFFB040).w,a1 bclr #4,$22(a1) bset #1,$22(a1) return_334556: ; ... rts ; End of function sub_33451C ; =============== S U B R O U T I N E ======================================= sub_334558: ; ... jsr SingleObjLoad2 bne.s return_334578 move.b #$B7,0(a1) move.b #$72,$28(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) return_334578: ; ... rts ; End of function sub_334558 ; --------------------------------------------------------------------------- dc.l Map_ObjB6 dc.w $A393 dc.b 4, 4, $10, 0 ; 0 Ani_ObjB6: dc.w byte_334592-Ani_ObjB6,byte_334598-Ani_ObjB6,byte_33459C-Ani_ObjB6; 0 ; ... dc.w byte_3345A2-Ani_ObjB6,byte_3345A8-Ani_ObjB6,byte_3345AE-Ani_ObjB6; 3 dc.w byte_3345B2-Ani_ObjB6 ; 6 byte_334592: dc.b 3, 1, 2, -3, 1, 0; 0 ; ... byte_334598: dc.b $3F, 2, -3, 2 ; 0 ; ... byte_33459C: dc.b 3, 2, 1, 0, -6, 0; 0 ; ... byte_3345A2: dc.b 1, 0, 1, 2, 3, -1; 0 ; ... byte_3345A8: dc.b 3, 1, 0, -3, 5, 0; 0 ; ... byte_3345AE: dc.b $3F, 0, -3, 6 ; 0 ; ... byte_3345B2: dc.b 3, 0, 1, 2, -6, 0; 0 ; ... Map_ObjB6: dc.w byte_3345C0-Map_ObjB6,byte_3345CE-Map_ObjB6,byte_3345DC-Map_ObjB6; 0 ; ... dc.w byte_3345EA-Map_ObjB6 ; 3 byte_3345C0: dc.b 0, 2, -4, 8, 0, 0, -1,-$18, -4, 8; 0 ; ... dc.b 8, 0, 0, 0 ; 10 byte_3345CE: dc.b 0, 2,-$14, 6, 0, 3, -1,-$10, -4, 6; 0 ; ... dc.b $18, 3, 0, 0 ; 10 byte_3345DC: dc.b 0, 2,-$18, 2, 0, 9, -1, -4, 0, 2; 0 ; ... dc.b $10, 9, -1, -4 ; 10 byte_3345EA: dc.b 0, 2,-$14, 6, 8, 3, 0, 0, -4, 6; 0 ; ... dc.b $10, 3, -1,-$10 ; 10 ; --------------------------------------------------------------------------- ObjB7: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_334606(pc,d0.w),d1 jmp off_334606(pc,d1.w) ; --------------------------------------------------------------------------- off_334606: dc.w loc_33460A-off_334606,loc_334616-off_334606; 0 ; ... ; --------------------------------------------------------------------------- loc_33460A: ; ... bsr.w LoadSubObject move.b #$20,$2A(a0) rts ; --------------------------------------------------------------------------- loc_334616: ; ... subq.b #1,$2A(a0) beq.w loc_32F7EE bchg #0,$2B(a0) beq.w return_330946 jmp MarkObjGone ; --------------------------------------------------------------------------- dc.l Map_ObjB7 dc.w $C39F dc.b 4, 4, $18,-$57 ; 0 Map_ObjB7: dc.w byte_33463A-Map_ObjB7 ; 0 ; ... byte_33463A: dc.b 0, $10,-$70, $B, 0, 0, -1,-$18,-$70, $B; 0 ; ... dc.b 8, 0, 0, 0,-$50, $B, 0, 0, -1,-$18; 10 dc.b -$50, $B, 8, 0, 0, 0,-$30, $B, 0, 0; 20 dc.b -1,-$18,-$30, $B, 8, 0, 0, 0,-$10, $B; 30 dc.b 0, 0, -1,-$18,-$10, $B, 8, 0, 0, 0; 40 dc.b $10, $B, 0, 0, -1,-$18, $10, $B, 8, 0; 50 dc.b 0, 0, $30, $B, 0, 0, -1,-$18, $30, $B; 60 dc.b 8, 0, 0, 0, $50, $B, 0, 0, -1,-$18; 70 dc.b $50, $B, 8, 0, 0, 0, $70, $B, 0, 0; 80 dc.b -1,-$18, $70, $B, 8, 0, 0, 0; 90 ; --------------------------------------------------------------------------- ObjB8: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3346AA(pc,d0.w),d1 jmp off_3346AA(pc,d1.w) ; --------------------------------------------------------------------------- off_3346AA: dc.w loc_3346B0-off_3346AA,loc_3346B4-off_3346AA,loc_3346E2-off_3346AA; 0 ; ... ; --------------------------------------------------------------------------- loc_3346B0: ; ... bra.w LoadSubObject ; --------------------------------------------------------------------------- loc_3346B4: ; ... tst.b 1(a0) bpl.s loc_3346CC bsr.w sub_32F5A6 tst.w d1 beq.s loc_3346CC add.w #$60,d2 cmp.w #$C0,d2 bcs.s loc_3346D2 loc_3346CC: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3346D2: ; ... addq.b #2,$24(a0) move.w #2,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3346E2: ; ... bsr.w sub_32F5A6 moveq #0,d6 add.w #$20,d2 cmp.w #$40,d2 bcs.s loc_3346F8 move.w d0,d6 lsr.w #1,d6 addq.w #1,d6 loc_3346F8: ; ... move.b d6,$1A(a0) subq.w #1,$2A(a0) bne.s loc_33470C move.w #$60,$2A(a0) bsr.w sub_334712 loc_33470C: ; ... jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_334712: ; ... jsr SingleObjLoad2 bne.s return_334766 move.b #$98,0(a1) move.b #3,$1A(a1) move.b #$8E,$28(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) lea (loc_330662).l,a2 move.l a2,$2A(a1) moveq #0,d0 move.b $1A(a0),d0 lsl.w #2,d0 lea byte_334768(pc,d0.w),a2 move.b (a2)+,d0 ext.w d0 add.w d0,8(a1) move.b (a2)+,d0 ext.w d0 add.w d0,$C(a1) move.b (a2)+,$10(a1) move.b (a2)+,$12(a1) return_334766: ; ... rts ; End of function sub_334712 ; --------------------------------------------------------------------------- byte_334768: dc.b 0, $18, 0, 1,-$11, $10, -1, 1, $11, $10; 0 ; ... dc.b 1, 1, 0, $33, $47,-$7C, 3,-$55, 4, 4; 10 dc.b $10, 0 ; 20 Ani_Obj98_2: dc.w byte_334780-Ani_Obj98_2 ; 0 ; ... byte_334780: dc.b 2, 3, 4, -1 ; 0 ; ... Map_Obj98_8: dc.w byte_33478E-Map_Obj98_8,byte_3347A8-Map_Obj98_8,byte_3347BC-Map_Obj98_8; 0 ; ... dc.w byte_3347D0-Map_Obj98_8,byte_3347D8-Map_Obj98_8; 3 byte_33478E: dc.b 0, 4,-$10, 7,-$20, 0, -1,-$10,-$10, 7; 0 ; ... dc.b -$20, 8, 0, 0, $E, 0,-$20, $10, -1, -8; 10 dc.b $E, 0,-$20, $11, 0, 0; 20 byte_3347A8: dc.b 0, 3,-$10, 7,-$20, 0, -1,-$10,-$10, 7; 0 ; ... dc.b -$20, 8, 0, 0, 4, 5,-$20, $12, -1,-$15; 10 byte_3347BC: dc.b 0, 3,-$10, 7,-$20, 0, -1,-$10,-$10, 7; 0 ; ... dc.b -$20, 8, 0, 0, 4, 5,-$18, $12, 0, 5; 10 byte_3347D0: dc.b 0, 1, -4, 0,-$80, $16, -1, -4; 0 ; ... byte_3347D8: dc.b 0, 1, -4, 0,-$80, $17, -1, -4; 0 ; ... ; --------------------------------------------------------------------------- ObjB9: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3347EE(pc,d0.w),d1 jmp off_3347EE(pc,d1.w) ; --------------------------------------------------------------------------- off_3347EE: dc.w loc_3347F4-off_3347EE,loc_3347F8-off_3347EE,loc_334818-off_3347EE; 0 ; ... ; --------------------------------------------------------------------------- loc_3347F4: ; ... bra.w LoadSubObject ; --------------------------------------------------------------------------- loc_3347F8: ; ... tst.b 1(a0) bmi.s loc_334802 bra.w loc_334822 ; --------------------------------------------------------------------------- loc_334802: ; ... addq.b #2,$24(a0) move.w #$F000,$10(a0) moveq #$FFFFFFEF,d0 jsr PlaySound bra.w loc_334822 ; --------------------------------------------------------------------------- loc_334818: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bra.w *+4 loc_334822: ; ... move.w 8(a0),d0 move.w ($FFFFEE00).w,d1 sub.w #$40,d1 cmp.w d1,d0 blt.w loc_32F7EE jmp DisplaySprite ; --------------------------------------------------------------------------- dc.l Map_ObjB9 dc.w $C3C3 dc.b 4, 1, $60, 0 ; 0 Map_ObjB9: dc.w byte_334846-Map_ObjB9 ; ... byte_334846: dc.b 0, 6, -8, 1, 0, 0, -1,-$48, -8, $D; 0 ; ... dc.b 0, 2, -1,-$40, -8, $D, 0, 2, -1,-$20; 10 dc.b -8, $D, 0, 2, 0, 0, -8, $D, 0, 2; 20 dc.b 0, $20, -8, 1, 8, 0, 0, $40; 30 ; --------------------------------------------------------------------------- ObjBA: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_33487A(pc,d0.w),d1 jmp off_33487A(pc,d1.w) ; --------------------------------------------------------------------------- off_33487A: dc.w loc_33487E-off_33487A,loc_334882-off_33487A; 0 ; ... ; --------------------------------------------------------------------------- loc_33487E: ; ... bra.w LoadSubObject ; --------------------------------------------------------------------------- loc_334882: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- dc.l Map_ObjBA ; ... dc.w $C3EA dc.b 4, 4, $10, 0 ; 0 Map_ObjBA: dc.w byte_334894-Map_ObjBA ; 0 ; ... byte_334894: dc.b 0, 1,-$10, $F, 0, 0, -1,-$10; 0 ; ... ; --------------------------------------------------------------------------- ObjBB: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3348AA(pc,d0.w),d1 jmp off_3348AA(pc,d1.w) ; --------------------------------------------------------------------------- off_3348AA: dc.w loc_3348AE-off_3348AA,loc_3348B2-off_3348AA; 0 ; ... ; --------------------------------------------------------------------------- loc_3348AE: ; ... bra.w LoadSubObject ; --------------------------------------------------------------------------- loc_3348B2: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- dc.l Map_ObjBB dc.w $23FA dc.b 4, 4, $C, 9 ; 0 Map_ObjBB: dc.w byte_3348C4-Map_ObjBB ; 0 ; ... byte_3348C4: dc.b 0, 3,-$40, 5, 0, 0, -1, -$C,-$30, 3; 0 ; ... dc.b 0, 4, -1, -4,-$10, $B, 0, 8, -1, -$C; 10 ; --------------------------------------------------------------------------- ObjBC: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3348E6(pc,d0.w),d1 jmp off_3348E6(pc,d1.w) ; --------------------------------------------------------------------------- off_3348E6: dc.w loc_3348EA-off_3348E6,loc_3348F6-off_3348E6; 0 ; ... ; --------------------------------------------------------------------------- loc_3348EA: ; ... bsr.w LoadSubObject move.w 8(a0),$2C(a0) rts ; --------------------------------------------------------------------------- loc_3348F6: ; ... move.w $2C(a0),d0 move.w ($FFFFEEE2).w,d1 cmp.w #$380,d1 bcc.w loc_32F7EE add.w d1,d0 move.w d0,8(a0) bchg #0,$2A(a0) beq.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- dc.l Map_ObjBC dc.w $4465 dc.b 4, 4, $10, 0 ; 0 Map_ObjBC: dc.w byte_334928-Map_ObjBC ; 0 ; ... byte_334928: dc.b 0, 2,-$10, $D, 0, 0, -1,-$10, 0, $D; 0 ; ... dc.b $10, 0, -1,-$10 ; 10 ; --------------------------------------------------------------------------- ObjBD: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_334944(pc,d0.w),d1 jmp off_334944(pc,d1.w) ; --------------------------------------------------------------------------- off_334944: dc.w loc_33494A-off_334944,loc_334956-off_334944,loc_33496C-off_334944; 0 ; ... ; --------------------------------------------------------------------------- loc_33494A: ; ... addq.b #2,$24(a0) move.w #1,$2A(a0) rts ; --------------------------------------------------------------------------- loc_334956: ; ... subq.w #1,$2A(a0) bne.s loc_334966 move.w #$40,$2A(a0) bsr.w sub_334A20 loc_334966: ; ... jmp MarkObjGone3 ; --------------------------------------------------------------------------- loc_33496C: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_334980(pc,d0.w),d1 jsr off_334980(pc,d1.w) jmp MarkObjGone ; --------------------------------------------------------------------------- off_334980: dc.w loc_33498A-off_334980,loc_3349CA-off_334980,loc_3349D6-off_334980; 0 ; ... dc.w loc_3349EC-off_334980,loc_3349F8-off_334980; 3 ; --------------------------------------------------------------------------- loc_33498A: ; ... bsr.w LoadSubObject move.b #2,$1A(a0) subq.b #2,$24(a0) addq.b #2,$25(a0) move.w #$C7,$2A(a0) btst #0,1(a0) beq.s loc_3349B0 move.w #$1C7,$2A(a0) loc_3349B0: ; ... moveq #0,d0 move.b $28(a0),d0 sub.b #$7E,d0 move.b d0,$28(a0) move.w word_3349C6(pc,d0.w),$12(a0) rts ; --------------------------------------------------------------------------- word_3349C6: dc.w -$100, $100 ; 0 ; ... ; --------------------------------------------------------------------------- loc_3349CA: ; ... lea (Ani_ObjBD).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- loc_3349D6: ; ... subq.w #1,$2A(a0) bmi.s loc_3349E0 bra.w loc_334A02 ; --------------------------------------------------------------------------- loc_3349E0: ; ... addq.b #2,$25(a0) move.b #1,$1C(a0) rts ; --------------------------------------------------------------------------- loc_3349EC: ; ... lea (Ani_ObjBD).l,a1 jmp AnimateSprite ; --------------------------------------------------------------------------- loc_3349F8: ; ... bsr.w sub_33451C jmp DeleteObject ; --------------------------------------------------------------------------- loc_334A02: ; ... move.w 8(a0),-(sp) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 move.w #$23,d1 move.w #4,d2 move.w #5,d3 move.w (sp)+,d4 jmp PlatformObject ; =============== S U B R O U T I N E ======================================= sub_334A20: ; ... jsr SingleObjLoad2 bne.s return_334A4C move.b #$BD,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b #4,$24(a1) move.b $28(a0),$28(a1) loc_334A46: move.b 1(a0),1(a1) return_334A4C: ; ... rts ; End of function sub_334A20 ; --------------------------------------------------------------------------- dc.l Map_ObjBD dc.w $E40E dc.b 4, 4, $18, 0 ; 0 Ani_ObjBD: dc.w byte_334A5C-Ani_ObjBD,byte_334A62-Ani_ObjBD; 0 ; ... byte_334A5C: dc.b 3, 2, 1, 0, -6, 0; 0 ; ... byte_334A62: dc.b 1, 0, 1, 2, -6, 0; 0 ; ... Map_ObjBD: dc.w byte_334A6E-Map_ObjBD,byte_334A7C-Map_ObjBD,byte_334A8A-Map_ObjBD; 0 ; ... byte_334A6E: dc.b 0, 2, -4, 8, 0, 0, -1,-$18, -4, 8; 0 ; ... dc.b 0, 3, 0, 0 ; 10 byte_334A7C: dc.b 0, 2, -4, 8, 0, 6, -1,-$18, -4, 8; 0 ; ... dc.b 8, 6, 0, 0 ; 10 byte_334A8A: dc.b 0, 2, -4, 8, 0, 9, -1,-$18, -4, 8; 0 ; ... dc.b 8, 9, 0, 0 ; 10 ; --------------------------------------------------------------------------- ObjBE: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_334AA6(pc,d0.w),d1 jmp off_334AA6(pc,d1.w) ; --------------------------------------------------------------------------- off_334AA6: dc.w loc_334AB2-off_334AA6,loc_334AC0-off_334AA6,loc_334AE8-off_334AA6; 0 ; ... dc.w loc_334AFA-off_334AA6,loc_334AE8-off_334AA6,loc_334B1E-off_334AA6; 3 ; --------------------------------------------------------------------------- loc_334AB2: ; ... moveq #0,d0 move.b #$82,d0 bsr.w loc_32F4CA bra.w loc_3344DA ; --------------------------------------------------------------------------- loc_334AC0: ; ... move.b ($FFFFFE0F).w,d0 and.b #$F0,d0 cmp.b $28(a0),d0 beq.s loc_334AD4 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_334AD4: ; ... addq.b #2,$24(a0) clr.b $1C(a0) move.w #$A0,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_334AE8: ; ... lea (Ani_ObjBE).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_334AFA: ; ... subq.w #1,$2A(a0) beq.s loc_334B0A bsr.w sub_334B30 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_334B0A: ; ... addq.b #2,$24(a0) move.b #1,$1C(a0) bsr.w sub_33451C jmp MarkObjGone ; --------------------------------------------------------------------------- loc_334B1E: ; ... move.b #2,$24(a0) move.w #$40,$2A(a0) jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_334B30: ; ... move.b $1A(a0),d0 cmp.b #3,d0 beq.s loc_334B42 cmp.b #4,d0 bne.w sub_33451C loc_334B42: ; ... move.w 8(a0),-(sp) move.w #$23,d1 move.w #$18,d2 move.w #$19,d3 move.w (sp)+,d4 jmp PlatformObject ; End of function sub_334B30 ; --------------------------------------------------------------------------- dc.l Map_ObjBE dc.w $E41A dc.b 4, 4, $18, 0 ; 0 Ani_ObjBE: dc.w byte_334B68-Ani_ObjBE,byte_334B6E-Ani_ObjBE; 0 ; ... byte_334B68: dc.b 5, 0, 1, 2, 3, -4; 0 ; ... byte_334B6E: dc.b 5, 3, 2, 1, 0, -4; 0 ; ... Map_ObjBE: dc.w byte_334B7E-Map_ObjBE,byte_334B8C-Map_ObjBE,byte_334B9A-Map_ObjBE; 0 ; ... dc.w byte_334BA8-Map_ObjBE,byte_334BB6-Map_ObjBE; 3 byte_334B7E: dc.b 0, 2,-$18, 9, 0, 0, -1,-$18,-$18, 9; 0 ; ... dc.b 0, 6, 0, 0 ; 10 byte_334B8C: dc.b 0, 2,-$18, 9, 0, $C, -1,-$18,-$18, 9; 0 ; ... dc.b 0, $12, 0, 0 ; 10 byte_334B9A: dc.b 0, 2,-$18, 9, 0, $18, -1,-$18,-$18, 9; 0 ; ... dc.b 8, $18, 0, 0 ; 10 byte_334BA8: dc.b 0, 2,-$18, $E, 0, $1E, -1,-$20,-$18, $E; 0 ; ... dc.b 8, $1E, 0, 0 ; 10 byte_334BB6: dc.b 0, 2,-$18, $E, 0, $2A, -1,-$20,-$18, $E; 0 ; ... dc.b 8, $2A, 0, 0 ; 10 ; --------------------------------------------------------------------------- ObjBF: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_334BD2(pc,d0.w),d1 jmp off_334BD2(pc,d1.w) ; --------------------------------------------------------------------------- off_334BD2: dc.w loc_334BD6-off_334BD2,loc_334BDA-off_334BD2; 0 ; ... ; --------------------------------------------------------------------------- loc_334BD6: ; ... bra.w LoadSubObject ; --------------------------------------------------------------------------- loc_334BDA: ; ... lea (Ani_ObjBF).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- dc.l Map_ObjBF dc.w $E450 dc.b 4, 4, 4, 4 ; 0 Ani_ObjBF: dc.w byte_334BF8-Ani_ObjBF ; 0 ; ... byte_334BF8: dc.b 1, 0, 1, 2, -1, 0; 0 ; ... Map_ObjBF: dc.w byte_334C04-Map_ObjBF,byte_334C0C-Map_ObjBF,byte_334C14-Map_ObjBF; 0 ; ... byte_334C04: dc.b 0, 1,-$10, 3, 0, 0, -1, -4; 0 ; ... byte_334C0C: dc.b 0, 1,-$10, 3, 0, 4, -1, -4; 0 ; ... byte_334C14: dc.b 0, 1,-$10, 3, 0, 8, -1, -4; 0 ; ... ; --------------------------------------------------------------------------- ObjC0: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_334C2A(pc,d0.w),d1 jmp off_334C2A(pc,d1.w) ; --------------------------------------------------------------------------- off_334C2A: dc.w loc_334C2E-off_334C2A,loc_334C56-off_334C2A; 0 ; ... ; --------------------------------------------------------------------------- loc_334C2E: ; ... move.w #$86,d0 bsr.w loc_32F4CA moveq #0,d0 move.b $28(a0),d0 lsl.w #4,d0 btst #0,$22(a0) bne.s loc_334C48 neg.w d0 loc_334C48: ; ... move.w 8(a0),d1 move.w d1,$34(a0) add.w d1,d0 move.w d0,$32(a0) loc_334C56: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_334C7C(pc,d0.w),d1 jsr off_334C7C(pc,d1.w) move.w #$10,d1 move.w #$11,d3 move.w 8(a0),d4 jsr PlatformObject jmp MarkObjGone ; --------------------------------------------------------------------------- off_334C7C: dc.w loc_334C82-off_334C7C,loc_334CF6-off_334C7C,loc_334D82-off_334C7C; 0 ; ... ; --------------------------------------------------------------------------- loc_334C82: ; ... move.b $22(a0),d0 and.b #$18,d0 beq.s return_334CD0 addq.b #2,$25(a0) move.w #$C00,$10(a0) move.w #$80,$30(a0) btst #0,$22(a0) bne.s loc_334CAC neg.w $10(a0) neg.w $30(a0) loc_334CAC: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 move.b $22(a0),d0 move.b d0,d1 and.b #8,d1 beq.s loc_334CC4 lea ($FFFFB000).w,a1 bsr.s sub_334CD2 loc_334CC4: ; ... and.b #$10,d0 beq.s return_334CD0 lea ($FFFFB040).w,a1 bsr.s sub_334CD2 return_334CD0: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_334CD2: ; ... clr.w $14(a1) clr.w $10(a1) move.w 8(a0),8(a1) bclr #0,$22(a1) btst #0,$22(a0) bne.s return_334CF4 bset #0,$22(a1) return_334CF4: ; ... rts ; End of function sub_334CD2 ; --------------------------------------------------------------------------- loc_334CF6: ; ... move.w $30(a0),d0 add.w d0,$10(a0) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 move.w $32(a0),d0 sub.w 8(a0),d0 btst #0,$22(a0) beq.s loc_334D16 neg.w d0 loc_334D16: ; ... tst.w d0 bpl.s loc_334D54 move.b $22(a0),d0 and.b #$18,d0 beq.s return_334D3E move.b d0,d1 and.b #8,d1 beq.s loc_334D32 lea ($FFFFB000).w,a1 bsr.s sub_334CD2 loc_334D32: ; ... and.b #$10,d0 beq.s return_334D3E lea ($FFFFB040).w,a1 bsr.s sub_334CD2 return_334D3E: ; ... rts ; =============== S U B R O U T I N E ======================================= sub_334D40: ; ... move.w $10(a0),$10(a1) move.w #-$400,$12(a1) bset #1,$22(a1) rts ; End of function sub_334D40 ; --------------------------------------------------------------------------- loc_334D54: ; ... addq.b #2,$25(a0) move.w $32(a0),8(a0) move.b $22(a0),d0 and.b #$18,d0 beq.s loc_334D82 move.b d0,d1 and.b #8,d1 beq.s loc_334D76 lea ($FFFFB000).w,a1 bsr.s sub_334D40 loc_334D76: ; ... and.b #$10,d0 beq.s loc_334D82 lea ($FFFFB040).w,a1 bsr.s sub_334D40 loc_334D82: ; ... move.w 8(a0),d0 moveq #4,d1 tst.w $30(a0) spl d2 bmi.s loc_334D92 neg.w d1 loc_334D92: ; ... add.w d1,d0 cmp.w $34(a0),d0 bcc.s loc_334D9C not.b d2 loc_334D9C: ; ... tst.b d2 bne.s loc_334DA8 clr.b $25(a0) move.w $34(a0),d0 loc_334DA8: ; ... move.w d0,8(a0) rts ; --------------------------------------------------------------------------- dc.l Map_ObjC0 dc.w $245C dc.b 4, 4, $10, 0 ; 0 Map_ObjC0: dc.w byte_334DBA-Map_ObjC0 ; ... byte_334DBA: dc.b 0, 2,-$17, 8, 0, 0, -1,-$10,-$1F, 1; 0 ; ... dc.b 0, 3, 0, 8 ; 10 ; --------------------------------------------------------------------------- ObjC1: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_334DD6(pc,d0.w),d1 jmp off_334DD6(pc,d1.w) ; --------------------------------------------------------------------------- off_334DD6: dc.w loc_334DDC-off_334DD6,loc_334DF2-off_334DD6,loc_334EC8-off_334DD6; 0 ; ... ; --------------------------------------------------------------------------- loc_334DDC: ; ... move.w #$88,d0 bsr.w loc_32F4CA moveq #0,d0 move.b $28(a0),d0 mulu.w #$3C,d0 move.w d0,$30(a0) loc_334DF2: ; ... tst.b $32(a0) beq.s loc_334E5C tst.w $30(a0) beq.s loc_334E04 subq.w #1,$30(a0) beq.s loc_334E4A loc_334E04: ; ... lea ($FFFFB000).w,a1 move.w $C(a0),d0 sub.w #$18,d0 btst #0,($FFFFF604).w beq.s loc_334E26 subq.w #1,$C(a1) cmp.w $C(a1),d0 bcs.s loc_334E26 move.w d0,$C(a1) loc_334E26: ; ... add.w #$30,d0 btst #1,($FFFFF604).w beq.s loc_334E40 addq.w #1,$C(a1) cmp.w $C(a1),d0 bcc.s loc_334E40 move.w d0,$C(a1) loc_334E40: ; ... move.b ($FFFFF603).w,d0 and.w #$70,d0 beq.s loc_334EB2 loc_334E4A: ; ... clr.b $20(a0) clr.b ($FFFFB02A).w clr.b ($FFFFF7C9).w clr.b $32(a0) bra.s loc_334EB8 ; --------------------------------------------------------------------------- loc_334E5C: ; ... tst.b $21(a0) beq.s loc_334EB2 lea ($FFFFB000).w,a1 move.w 8(a0),d0 sub.w #$14,d0 cmp.w 8(a1),d0 bcc.s loc_334EB2 clr.b $21(a0) cmp.b #4,$24(a1) bcc.s loc_334EB2 clr.w $10(a1) clr.w $12(a1) move.w 8(a0),d0 sub.w #$14,d0 move.w d0,8(a1) bset #0,$22(a1) move.b #$11,$1C(a1) move.b #1,($FFFFB02A).w move.b #1,($FFFFF7C9).w move.b #1,$32(a0) loc_334EB2: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_334EB8: ; ... lea (byte_334F08).l,a4 lea (byte_334F04).l,a2 bsr.w sub_334F18 loc_334EC8: ; ... tst.b $3F(a0) beq.s loc_334ED4 subq.b #1,$3F(a0) bra.s loc_334EEC ; --------------------------------------------------------------------------- loc_334ED4: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 add.w #8,$12(a0) lea (off_334EFA).l,a1 jsr AnimateSprite loc_334EEC: ; ... tst.b 1(a0) bpl.w loc_32F7EE jmp DisplaySprite ; --------------------------------------------------------------------------- off_334EFA: dc.w byte_334EFC-off_334EFA ; 0 ; ... byte_334EFC: dc.b 3, 2, 3, 4, 5, 1, -1, 0; 0 ; ... byte_334F04: dc.b 0, 4, $18, $20 ; 0 ; ... byte_334F08: dc.b -1,-$10, -1,-$10, -1,-$10, 0, $10, -1,-$30; 0 ; ... dc.b -1,-$10, -1,-$30, 0, $10; 10 ; =============== S U B R O U T I N E ======================================= sub_334F18: ; ... move.w 8(a0),d2 move.w $C(a0),d3 move.b $18(a0),d4 subq.b #1,d4 moveq #3,d1 move.l a0,a1 bra.s loc_334F34 ; --------------------------------------------------------------------------- loc_334F2C: ; ... jsr SingleObjLoad2 bne.s loc_334F92 loc_334F34: ; ... move.b #4,$24(a1) move.b 0(a0),0(a1) move.l 4(a0),4(a1) move.w 2(a0),2(a1) move.b #$84,1(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w (a4)+,d0 add.w d2,d0 move.w d0,8(a1) move.w (a4)+,d0 add.w d3,d0 move.w d0,$C(a1) move.b d4,$18(a1) move.b #$10,$19(a1) move.b #1,$1A(a1) move.w #-$400,$10(a1) move.w #0,$12(a1) move.b (a2)+,$3F(a1) dbf d1,loc_334F2C loc_334F92: ; ... move.w #$CB,d0 jmp PlaySound ; End of function sub_334F18 ; --------------------------------------------------------------------------- dc.l Map_ObjC1 dc.w $E48C dc.b 4, 4, $40,-$1F ; 0 Map_ObjC1: dc.w byte_334FB2-Map_ObjC1,byte_334FE4-Map_ObjC1,byte_334FF2-Map_ObjC1; 0 ; ... dc.w byte_335000-Map_ObjC1,byte_33500E-Map_ObjC1,byte_33501C-Map_ObjC1; 3 byte_334FB2: dc.b 0, 8,-$20, 7, 0, 0, -1,-$20,-$20, 7; 0 ; ... dc.b 8, 0, -1,-$10, 0, 7, 0, 0, -1,-$20; 10 dc.b 0, 7, 8, 0, -1,-$10,-$20, 7, 0, 0; 20 dc.b -1,-$40,-$20, 7, 8, 0, -1,-$30, 0, 7; 30 dc.b 0, 0, -1,-$40, 0, 7, 8, 0, -1,-$30; 40 byte_334FE4: dc.b 0, 2,-$10, 7, 0, 0, -1,-$10,-$10, 7; 0 ; ... dc.b 8, 0, 0, 0 ; 10 byte_334FF2: dc.b 0, 2,-$10, 5, 0, 8, -1, -8, 0, 5; 0 ; ... dc.b $10, 8, -1, -8 ; 10 byte_335000: dc.b 0, 2,-$10, 1, 0, $C, -1, -4, 0, 1; 0 ; ... dc.b $10, $C, -1, -4 ; 10 byte_33500E: dc.b 0, 2,-$10, 1, 8, $C, -1, -4, 0, 1; 0 ; ... dc.b $18, $C, -1, -4 ; 10 byte_33501C: dc.b 0, 2,-$10, 5, 8, 8, -1, -8, 0, 5; 0 ; ... dc.b $18, 8, -1, -8 ; 10 ; --------------------------------------------------------------------------- ObjC2: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_335038(pc,d0.w),d1 jmp off_335038(pc,d1.w) ; --------------------------------------------------------------------------- off_335038: dc.w loc_33503C-off_335038,loc_335040-off_335038; 0 ; ... ; --------------------------------------------------------------------------- loc_33503C: ; ... bra.w LoadSubObject ; --------------------------------------------------------------------------- loc_335040: ; ... move.b ($FFFFB01C).w,$30(a0) move.w 8(a0),-(sp) move.w #$1B,d1 move.w #8,d2 move.w #9,d3 move.w (sp)+,d4 jsr SolidObject btst #3,$22(a0) bne.s loc_33506C jmp MarkObjGone ; --------------------------------------------------------------------------- loc_33506C: ; ... cmp.b #2,$30(a0) bne.s loc_3350BA move.w #$2880,($FFFFEEC8).w bclr #3,$22(a0) move.b #$27,0(a0) move.b #2,$24(a0) bset #1,($FFFFB022).w bclr #3,($FFFFB022).w lea ($FFFF8850).w,a1 move.l #$8A707172,(a1)+ move.w #$7374,(a1)+ lea ($FFFF8950).w,a1 move.l #$6E787978,(a1)+ move.w #$787A,(a1)+ move.b #1,($FFFFF72C).w loc_3350BA: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- dc.l Map_ObjC2 dc.w $A461 dc.b 4, 4, $10, 0 ; 0 Map_ObjC2: dc.w byte_3350CC-Map_ObjC2 ; 0 ; ... byte_3350CC: dc.b 0, 2, -8, 5, 0, 0, -1,-$10, -8, 5; 0 ; ... dc.b 8, 0, 0, 0 ; 10 ; --------------------------------------------------------------------------- ObjC3: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3350E8(pc,d0.w),d1 jmp off_3350E8(pc,d1.w) ; --------------------------------------------------------------------------- off_3350E8: dc.w loc_3350EC-off_3350E8,loc_33511C-off_3350E8; 0 ; ... ; --------------------------------------------------------------------------- loc_3350EC: ; ... bsr.w LoadSubObject move.b #7,$1E(a0) jsr RandomNumber move.w ($FFFFF636).w,d0 and.w #$1C,d0 sub.w d0,8(a0) add.w #$10,$C(a0) move.w #$FF00,$12(a0) move.w #$FF00,$10(a0) rts ; --------------------------------------------------------------------------- loc_33511C: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 subq.b #1,$1E(a0) bpl.s loc_33513C move.b #7,$1E(a0) addq.b #1,$1A(a0) cmp.b #5,$1A(a0) beq.w loc_32F7EE loc_33513C: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- dc.b 0, $31,-$4E, 0, 5,-$5C, 4, 5, $C, 0; 0 ; --------------------------------------------------------------------------- ObjC5: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_33515A(pc,d0.w),d1 jmp off_33515A(pc,d1.w) ; --------------------------------------------------------------------------- off_33515A: dc.w loc_33516E-off_33515A,loc_335180-off_33515A,loc_335496-off_33515A; 0 ; ... dc.w loc_335546-off_33515A,loc_335634-off_33515A,loc_335720-off_33515A; 3 dc.w loc_335760-off_33515A,loc_3357B8-off_33515A,loc_3358BC-off_33515A; 6 dc.w loc_33594A-off_33515A ; 9 ; --------------------------------------------------------------------------- loc_33516E: ; ... bsr.w LoadSubObject move.b $28(a0),d0 sub.b #$90,d0 move.b d0,$24(a0) rts ; --------------------------------------------------------------------------- loc_335180: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_335192(pc,d0.w),d1 jsr off_335192(pc,d1.w) bra.w loc_33597E ; --------------------------------------------------------------------------- off_335192: dc.w loc_3351B2-off_335192,loc_3351E8-off_335192,loc_335264-off_335192; 0 ; ... dc.w loc_335288-off_335192,sub_3352A8-off_335192,loc_3352D0-off_335192; 3 dc.w loc_33530E-off_335192,loc_335320-off_335192,loc_33533A-off_335192; 6 dc.w loc_335370-off_335192,loc_335390-off_335192,loc_3353C4-off_335192; 9 dc.w loc_335424-off_335192,loc_33530E-off_335192,loc_335448-off_335192; 12 dc.w loc_335458-off_335192 ; 15 ; --------------------------------------------------------------------------- loc_3351B2: ; ... addq.b #2,$25(a0) move.b #0,$20(a0) move.b #8,$21(a0) move.w #$442,d0 move.w d0,($FFFFEECE).w move.w d0,($FFFFEEC6).w move.w 8(a0),d0 sub.w #$60,d0 move.w d0,$34(a0) add.w #$C0,d0 move.w d0,$36(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3351E8: ; ... bsr.w sub_32F5A6 add.w #$20,d2 cmp.w #$40,d2 bcs.s loc_3351FC jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3351FC: ; ... addq.b #2,$25(a0) move.w #$40,$12(a0) lea (byte_3359F2).l,a2 bsr.w sub_32F6A0 sub.w #$88,8(a1) add.w #$60,$C(a1) lea (byte_3359F2).l,a2 bsr.w sub_32F6A0 add.w #$88,8(a1) add.w #$60,$C(a1) lea (byte_3359FE).l,a2 bsr.w sub_32F6A0 lea (byte_335A02).l,a2 bsr.w sub_32F6A0 lea (byte_335A0A).l,a2 bsr.w sub_32F6A0 move.w #$5A,$2A(a0) moveq #$FFFFFFF9,d0 jsr PlaySound jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335264: ; ... subq.w #1,$2A(a0) bmi.s loc_335270 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335270: ; ... addq.b #2,$25(a0) move.w #$60,$2A(a0) moveq #$FFFFFF93,d0 jsr PlayMusic jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335288: ; ... subq.w #1,$2A(a0) beq.s loc_33529A jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33529A: ; ... addq.b #2,$25(a0) clr.w $12(a0) jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_3352A8: ; ... addq.b #2,$25(a0) bsr.w sub_32F5A6 move.w #$100,d1 tst.w d0 bne.s loc_3352BA neg.w d1 loc_3352BA: ; ... move.w d1,$10(a0) bset #2,$22(a0) move.w #$70,$2A(a0) jmp DisplaySprite ; End of function sub_3352A8 ; --------------------------------------------------------------------------- loc_3352D0: ; ... subq.w #1,$2A(a0) bmi.s loc_335300 move.w 8(a0),d0 tst.w $10(a0) bmi.s loc_3352EA cmp.w $36(a0),d0 bcc.s loc_3352F0 bra.w loc_3352F4 ; --------------------------------------------------------------------------- loc_3352EA: ; ... cmp.w $34(a0),d0 bcc.s loc_3352F4 loc_3352F0: ; ... neg.w $10(a0) loc_3352F4: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335300: ; ... addq.b #2,$25(a0) clr.b $1C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33530E: ; ... lea (Map_ObjC5).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335320: ; ... addq.b #2,$25(a0) move.w #$E,$2A(a0) move.w $3C(a0),a1 move.b #4,$25(a1) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33533A: ; ... subq.w #1,$2A(a0) beq.s loc_33534E move.w $3C(a0),a1 addq.w #1,$C(a1) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33534E: ; ... addq.b #2,$25(a0) move.w #$40,$2A(a0) bset #4,$22(a0) bset #6,$22(a0) move.b #6,$20(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335370: ; ... subq.w #1,$2A(a0) bmi.s loc_33537C jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33537C: ; ... addq.b #2,$25(a0) lea (byte_335A06).l,a2 bsr.w sub_32F6A0 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335390: ; ... move.w $3E(a0),a1 btst #2,$22(a1) bne.s loc_3353A2 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3353A2: ; ... addq.b #2,$25(a0) move.w #$80,$2A(a0) bsr.w sub_32F5A6 move.w #$80,d1 tst.w d0 bne.s loc_3353BA neg.w d1 loc_3353BA: ; ... move.w d1,$10(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3353C4: ; ... subq.w #1,$2A(a0) bmi.s loc_3353F4 move.w 8(a0),d0 tst.w $10(a0) bmi.s loc_3353DE cmp.w $36(a0),d0 bcc.s loc_3353E4 bra.w loc_3353E8 ; --------------------------------------------------------------------------- loc_3353DE: ; ... cmp.w $34(a0),d0 bcc.s loc_3353E8 loc_3353E4: ; ... clr.w $10(a0) loc_3353E8: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3353F4: ; ... addq.b #2,$25(a0) move.w #$E,$2A(a0) bclr #3,$22(a0) bclr #4,$22(a0) bclr #6,$22(a0) clr.b $20(a0) move.w $3E(a0),a1 jsr DeleteObject2 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335424: ; ... subq.w #1,$2A(a0) beq.s loc_335438 move.w $3C(a0),a1 subq.w #1,$C(a1) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335438: ; ... addq.b #2,$25(a0) move.b #1,$1C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335448: ; ... move.b #8,$25(a0) bsr.w sub_3352A8 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335458: ; ... clr.b $20(a0) st $21(a0) bclr #6,$22(a0) subq.w #1,$30(a0) bmi.s loc_335478 jsr sub_326C74 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335478: ; ... moveq #$FFFFFF8F,d0 jsr PlayMusic move.w #$720,d0 move.w d0,($FFFFEECE).w move.w d0,($FFFFEEC6).w jsr DeleteObject addq.w #4,sp rts ; --------------------------------------------------------------------------- loc_335496: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3354C2(pc,d0.w),d1 jsr off_3354C2(pc,d1.w) tst.b (a0) beq.w return_330946 move.w 8(a0),-(sp) move.w #$13,d1 move.w #$40,d2 move.w #$80,d3 move.w (sp)+,d4 jmp SolidObject ; --------------------------------------------------------------------------- off_3354C2: dc.w loc_3354C8-off_3354C2,loc_3354D8-off_3354C2,loc_335504-off_3354C2; 0 ; ... ; --------------------------------------------------------------------------- loc_3354C8: ; ... addq.b #2,$25(a0) move.b #$C,$1A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3354D8: ; ... move.w $2C(a0),a1 btst #5,$22(a1) bne.s loc_3354F4 bchg #0,$2F(a0) bne.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3354F4: ; ... addq.b #2,$25(a0) move.b #4,$30(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335504: ; ... subq.b #1,$1E(a0) bpl.w return_330946 move.b $1E(a0),d0 move.b $1B(a0),d1 addq.b #2,d0 bpl.s loc_33553A move.b d1,$1E(a0) subq.b #1,$30(a0) bpl.s loc_33553A move.b #$10,$30(a0) addq.b #1,d1 cmp.b #5,d1 bcc.w loc_32F7EE move.b d1,$1B(a0) move.b d1,$1E(a0) loc_33553A: ; ... bclr #0,$2F(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335546: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_335554(pc,d0.w),d1 jmp off_335554(pc,d1.w) ; --------------------------------------------------------------------------- off_335554: dc.w loc_33555E-off_335554,loc_335572-off_335554,loc_33559A-off_335554; 0 ; ... dc.w loc_3355C0-off_335554,loc_33561C-off_335554; 3 ; --------------------------------------------------------------------------- loc_33555E: ; ... addq.b #2,$25(a0) move.b #5,$1A(a0) addq.w #8,$C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335572: ; ... move.w $2C(a0),a1 btst #2,$22(a1) bne.s loc_335584 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335584: ; ... addq.b #2,$25(a0) move.w #$40,$2A(a0) move.w #$40,$12(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33559A: ; ... subq.w #1,$2A(a0) beq.s loc_3355AC jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3355AC: ; ... addq.b #2,$25(a0) clr.w $12(a0) move.w #$10,$2A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3355C0: ; ... move.w $2C(a0),a1 btst #5,$22(a1) bne.s loc_33560C subq.w #1,$2A(a0) bne.s loc_335606 move.w #$80,$2A(a0) moveq #0,d0 move.b $2E(a0),d0 addq.b #1,d0 cmp.b #3,d0 bcs.s loc_3355E8 moveq #0,d0 loc_3355E8: ; ... move.b d0,$2E(a0) tst.b $30(a0,d0.w) bne.s loc_335606 st $30(a0,d0.w) lea (byte_3359F6).l,a2 bsr.w sub_32F6A0 move.b $2E(a0),$2E(a1) loc_335606: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33560C: ; ... addq.b #2,$25(a0) bset #5,$22(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33561C: ; ... move.w $2C(a0),a1 cmp.b #$C5,(a1) bne.w loc_32F7EE jsr sub_326C74 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335634: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_33565A(pc,d0.w),d1 jsr off_33565A(pc,d1.w) lea (Map_ObjC5).l,a1 jsr AnimateSprite tst.b (a0) beq.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- off_33565A: dc.w loc_335660-off_33565A,loc_335686-off_33565A,loc_3356AE-off_33565A; 0 ; ... ; --------------------------------------------------------------------------- loc_335660: ; ... addq.b #2,$25(a0) move.b #3,$1C(a0) move.b #7,$1A(a0) move.w #$100,$12(a0) move.w #$60,$2A(a0) lea (byte_3359FA).l,a2 bra.w sub_32F6A0 ; --------------------------------------------------------------------------- loc_335686: ; ... bsr.w sub_3356F6 subq.w #1,$2A(a0) beq.s loc_335694 bra.w loc_3356D8 ; --------------------------------------------------------------------------- loc_335694: ; ... addq.b #2,$25(a0) move.w #$60,$2A(a0) move.w #-$100,$10(a0) move.w $C(a0),$34(a0) bra.w loc_3356D8 ; --------------------------------------------------------------------------- loc_3356AE: ; ... bsr.w sub_3356F6 subq.w #1,$2A(a0) bne.s loc_3356C2 move.w #$C0,$2A(a0) neg.w $10(a0) loc_3356C2: ; ... moveq #4,d0 move.w $C(a0),d1 cmp.w $34(a0),d1 bcs.s loc_3356D0 neg.w d0 loc_3356D0: ; ... add.w d0,$12(a0) bra.w *+4 loc_3356D8: ; ... move.w 8(a0),-(sp) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 move.w #$10,d1 move.w #8,d2 move.w #8,d3 move.w (sp)+,d4 jmp PlatformObject ; =============== S U B R O U T I N E ======================================= sub_3356F6: ; ... move.w $2C(a0),a1 btst #5,$22(a1) bne.w loc_335706 rts ; --------------------------------------------------------------------------- loc_335706: ; ... bsr.w sub_33451C move.b #$58,(a0) clr.b $24(a0) move.w $3C(a0),a1 jsr DeleteObject2 addq.w #4,sp rts ; End of function sub_3356F6 ; --------------------------------------------------------------------------- loc_335720: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_33572E(pc,d0.w),d1 jmp off_33572E(pc,d1.w) ; --------------------------------------------------------------------------- off_33572E: dc.w loc_335732-off_33572E,loc_33573E-off_33572E; 0 ; ... ; --------------------------------------------------------------------------- loc_335732: ; ... addq.b #2,$25(a0) move.b #$98,$20(a0) rts ; --------------------------------------------------------------------------- loc_33573E: ; ... move.w $2C(a0),a1 btst #5,$22(a1) bne.w loc_32F7EE move.w 8(a1),8(a0) move.w $C(a1),d0 add.w #$C,d0 move.w d0,$C(a0) rts ; --------------------------------------------------------------------------- loc_335760: ; ... move.w $2C(a0),a1 btst #5,$22(a1) bne.w loc_32F7EE moveq #0,d0 move.b $25(a0),d0 move.w off_33577C(pc,d0.w),d1 jmp off_33577C(pc,d1.w) ; --------------------------------------------------------------------------- off_33577C: dc.w loc_335782-off_33577C,loc_335792-off_33577C,loc_3357A8-off_33577C; 0 ; ... ; --------------------------------------------------------------------------- loc_335782: ; ... addq.b #2,$25(a0) move.b #4,$1A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335792: ; ... move.w $2C(a0),a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3357A8: ; ... move.w $2C(a0),a1 move.w 8(a1),8(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3357B8: ; ... move.w $2C(a0),a1 btst #5,$22(a1) bne.w loc_32F7EE moveq #0,d0 move.b $25(a0),d0 loc_3357CC: move.w off_3357E4(pc,d0.w),d1 jsr off_3357E4(pc,d1.w) bchg #0,$2F(a0) bne.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- off_3357E4: dc.w loc_3357EE-off_3357E4,loc_335816-off_3357E4,loc_33584E-off_3357E4; 0 ; ... dc.w loc_335862-off_3357E4,loc_3358B0-off_3357E4; 3 ; --------------------------------------------------------------------------- loc_3357EE: ; ... addq.b #2,$25(a0) move.b #$D,$1A(a0) move.b #4,$18(a0) move.b #0,$20(a0) add.w #$10,$C(a0) move.b #$C,$1B(a0) subq.w #3,$C(a0) rts ; --------------------------------------------------------------------------- loc_335816: ; ... bset #0,$2F(a0) subq.b #1,$1E(a0) bpl.s return_335840 move.b $1E(a0),d0 addq.b #2,d0 bpl.s loc_33583A move.b $1B(a0),d0 subq.b #1,d0 beq.s loc_335842 move.b d0,$1B(a0) move.b d0,$1E(a0) loc_33583A: ; ... bclr #0,$2F(a0) return_335840: ; ... rts ; --------------------------------------------------------------------------- loc_335842: ; ... addq.b #2,$25(a0) move.w #$40,$2A(a0) rts ; --------------------------------------------------------------------------- loc_33584E: ; ... subq.w #1,$2A(a0) bmi.s loc_335856 rts ; --------------------------------------------------------------------------- loc_335856: ; ... addq.b #2,$25(a0) add.w #$10,$C(a0) rts ; --------------------------------------------------------------------------- loc_335862: ; ... moveq #0,d0 move.b $2E(a0),d0 addq.b #1,d0 cmp.b #5,d0 bcc.s loc_335888 add.w #$10,$C(a0) move.b d0,$2E(a0) move.b byte_3358A4(pc,d0.w),$1A(a0) move.b byte_3358AA(pc,d0.w),$20(a0) rts ; --------------------------------------------------------------------------- loc_335888: ; ... addq.b #2,$25(a0) move.w #$80,$2A(a0) bset #2,$22(a0) move.w $2C(a0),a1 bset #3,$22(a1) rts ; --------------------------------------------------------------------------- byte_3358A4: dc.b $E, $F, $10, $11, $12, 0; 0 ; ... byte_3358AA: dc.b -$7A,-$55,-$54,-$53,-$52, 0; 0 ; ... ; --------------------------------------------------------------------------- loc_3358B0: ; ... move.w $2C(a0),a1 move.w 8(a1),8(a0) rts ; --------------------------------------------------------------------------- loc_3358BC: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3358CA(pc,d0.w),d1 jmp off_3358CA(pc,d1.w) ; --------------------------------------------------------------------------- off_3358CA: dc.w loc_3358D0-off_3358CA,loc_3358FC-off_3358CA,loc_33592A-off_3358CA; 0 ; ... ; --------------------------------------------------------------------------- loc_3358D0: ; ... addq.b #2,$25(a0) move.b #0,$1A(a0) move.b #1,$1C(a0) move.w #$2C60,8(a0) move.w #$4E6,$C(a0) lea (byte_335A0E).l,a2 bsr.w sub_32F6A0 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3358FC: ; ... move.w $2C(a0),a1 btst #5,$22(a1) bne.s loc_33591A lea (Ani_ObjC5).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33591A: ; ... addq.b #2,$25(a0) move.w #$C0,$2A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33592A: ; ... subq.w #1,$2A(a0) bmi.s loc_33593A addq.w #1,$C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_33593A: ; ... move.w $3E(a0),a1 jsr DeleteObject2 jmp DeleteObject ; --------------------------------------------------------------------------- loc_33594A: ; ... move.w $2C(a0),a1 move.w $C(a1),d0 add.w #$26,d0 move.w d0,$C(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- move.w 8(a0),-(sp) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 move.w #$F,d1 move.w #8,d2 move.w #8,d3 move.w (sp)+,d4 jmp PlatformObject ; --------------------------------------------------------------------------- loc_33597E: ; ... tst.b $21(a0) beq.s loc_3359CE tst.b $20(a0) bne.s return_3359CC tst.b $30(a0) bne.s loc_3359A8 btst #6,$22(a0) beq.s return_3359CC move.b #$20,$30(a0) move.w #$AC,d0 jsr PlaySound loc_3359A8: ; ... lea ($FFFFFB22).w,a1 moveq #0,d0 tst.w (a1) bne.s loc_3359B6 move.w #$EEE,d0 loc_3359B6: ; ... move.w d0,(a1) subq.b #1,$30(a0) bne.s return_3359CC btst #4,$22(a0) beq.s return_3359CC move.b #6,$20(a0) return_3359CC: ; ... rts ; --------------------------------------------------------------------------- loc_3359CE: ; ... moveq #$64,d0 bsr.w AddPoints2 clr.b $20(a0) move.w #$EF,$30(a0) move.b #$1E,$25(a0) bset #5,$22(a0) bclr #6,$22(a0) rts ; --------------------------------------------------------------------------- byte_3359F2: dc.b 0, $2A,-$3B,-$6C ; 0 ; ... byte_3359F6: dc.b 0, $3E,-$3B,-$68 ; 0 ; ... byte_3359FA: dc.b 0, $3C,-$3B,-$66 ; 0 ; ... byte_3359FE: dc.b 0, $3C,-$3B,-$64 ; 0 ; ... byte_335A02: dc.b 0, $3A,-$3B,-$6A ; 0 ; ... byte_335A06: dc.b 0, $3E,-$3B,-$62 ; 0 ; ... byte_335A0A: dc.b 0, $38,-$3B,-$60 ; 0 ; ... byte_335A0E: dc.b 0, $3E,-$3B,-$5E ; 0 ; ... dc.b 0, $33, $5A, $6A ; 4 dc.b 3, $79, 4, 4 ; 8 dc.b $20, 0, 0, $33 ; 12 dc.b $5A, $6A, 3, $79 ; 16 dc.b 4, 1, 8, 0 ; 20 dc.b 0, $33, $5A, $6A ; 24 dc.b 3, $79, 4, 5 ; 28 dc.b $10, 0, 0, $33 ; 32 dc.b $5E, $3C, 0, 0 ; 36 dc.b 4, 5, $20, 0 ; 40 dc.b 0, $33, $5B,-$18 ; 44 dc.b -$5C, $6D, 4, 5 ; 48 dc.b $20, 0 ; 52 Map_ObjC5: dc.w byte_335A4C-Map_ObjC5,byte_335A56-Map_ObjC5,byte_335A5E-Map_ObjC5; 0 ; ... dc.w byte_335A62-Map_ObjC5 ; 3 byte_335A4C: dc.b 5, 0, 1, 2, 3, 3, 3, 3, -6, 0; 0 ; ... byte_335A56: dc.b 3, 3, 2, 1, 0, 0, -6, 0; 0 ; ... byte_335A5E: dc.b 3, 5, 6, -1 ; 0 ; ... byte_335A62: dc.b 3, 7, 8, 9, $A, $B, -1, 0; 0 ; ... off_335A6A: dc.w byte_335A90-off_335A6A,byte_335AAA-off_335A6A,byte_335AC4-off_335A6A; 0 ; ... dc.w byte_335ADE-off_335A6A,byte_335AF8-off_335A6A,byte_335B06-off_335A6A; 3 dc.w byte_335B14-off_335A6A,byte_335B1C-off_335A6A,byte_335B24-off_335A6A; 6 dc.w byte_335B2C-off_335A6A,byte_335B34-off_335A6A,byte_335B3C-off_335A6A; 9 dc.w byte_335B44-off_335A6A,byte_335B5E-off_335A6A,byte_335B66-off_335A6A; 12 dc.w byte_335B74-off_335A6A,byte_335B88-off_335A6A,byte_335BA2-off_335A6A; 15 dc.w byte_335BC2-off_335A6A ; 18 byte_335A90: dc.b 0, 4, -8, $C, $20, 0, -1,-$20, -8, $C; 0 ; ... dc.b $20, 4, 0, 0, 0, 9, $20, 8, -1,-$18; 10 dc.b 0, 9, $28, 8, 0, 0; 20 byte_335AAA: dc.b 0, 4, -8, $C, $20, 0, -1,-$20, -8, $C; 0 ; ... dc.b $28, 0, 0, 0, 0, 9, $20, $E, -1,-$18; 10 dc.b 0, 9, $28, $E, 0, 0; 20 byte_335AC4: dc.b 0, 4, -8, $C, $20, 0, -1,-$20, -8, $C; 0 ; ... dc.b $28, 0, 0, 0, 0, 9, $20, $14, -1,-$18; 10 dc.b 0, 9, $28, $14, 0, 0; 20 byte_335ADE: dc.b 0, 4, -8, $C, $20, 0, -1,-$20, -8, $C; 0 ; ... dc.b $28, 0, 0, 0, 0, 8, $20, $1A, -1,-$18; 10 dc.b 0, 8, $28, $1A, 0, 0; 20 byte_335AF8: dc.b 0, 2, -8, 5, $40, $1D, -1,-$10, -8, 5; 0 ; ... dc.b $48, $1D, 0, 0 ; 10 byte_335B06: dc.b 0, 2, -8, $D, $20, $21, -1,-$20, -8, $D; 0 ; ... dc.b $28, $21, 0, 0 ; 10 byte_335B14: dc.b 0, 1, -8, $E, $20, $29, -1,-$10; 0 ; ... byte_335B1C: dc.b 0, 1, -8, $E, $20, $35, -1,-$10; 0 ; ... byte_335B24: dc.b 0, 1, -8, $E, $20, $41, -1,-$10; 0 ; ... byte_335B2C: dc.b 0, 1, -8, $E, $20, $4D, -1,-$10; 0 ; ... byte_335B34: dc.b 0, 1, -8, $E, $28, $41, -1,-$10; 0 ; ... byte_335B3C: dc.b 0, 1, -8, $E, $28, $35, -1,-$10; 0 ; ... byte_335B44: dc.b 0, 4,-$40, 7, $20, $59, -1, -8,-$20, 7; 0 ; ... dc.b $20, $59, -1, -8, 0, 7, $20, $59, -1, -8; 10 dc.b $20, 7, $20, $59, -1, -8; 20 byte_335B5E: dc.b 0, 1, 0, $C, $40, $71, -1,-$10; 0 ; ... byte_335B66: dc.b 0, 2,-$10, $F, $40, $61, -1,-$10, $10, $C; 0 ; ... dc.b $40, $71, -1,-$10 ; 10 byte_335B74: dc.b 0, 3,-$20, $F, $40, $61, -1,-$10, 0, $F; 0 ; ... dc.b $40, $61, -1,-$10, $20, $C, $40, $71, -1,-$10; 10 byte_335B88: dc.b 0, 4,-$30, $F, $40, $61, -1,-$10,-$10, $F; 0 ; ... dc.b $40, $61, -1,-$10, $10, $F, $40, $61, -1,-$10; 10 dc.b $30, $C, $40, $71, -1,-$10; 20 byte_335BA2: dc.b 0, 5,-$40, $F, $40, $61, -1,-$10,-$20, $F; 0 ; ... dc.b $40, $61, -1,-$10, 0, $F, $40, $61, -1,-$10; 10 dc.b $20, $F, $40, $61, -1,-$10, $40, $C, $40, $71; 20 dc.b -1,-$10 ; 30 byte_335BC2: dc.b 0, 6,-$50, $F, $40, $61, -1,-$10,-$30, $F; 0 ; ... dc.b $40, $61, -1,-$10,-$10, $F, $40, $61, -1,-$10; 10 dc.b $10, $F, $40, $61, -1,-$10, $30, $F, $40, $61; 20 dc.b -1,-$10, $50, $C, $40, $71, -1,-$10, 0, 2; 30 dc.b 0, 2, -$C, $E, 0, 0, -1,-$20, -$C, $E; 40 dc.b 8, 0, 0, 0 ; 50 ; --------------------------------------------------------------------------- ObjC6: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_335C06(pc,d0.w),d1 jmp off_335C06(pc,d1.w) ; --------------------------------------------------------------------------- off_335C06: dc.w loc_335C0E-off_335C06,loc_335C20-off_335C06,loc_335D74-off_335C06; 0 ; ... dc.w loc_335DE6-off_335C06 ; 3 ; --------------------------------------------------------------------------- loc_335C0E: ; ... bsr.w LoadSubObject move.b $28(a0),d0 sub.b #$A4,d0 move.b d0,$24(a0) rts ; --------------------------------------------------------------------------- loc_335C20: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_335C2E(pc,d0.w),d1 jmp off_335C2E(pc,d1.w) ; --------------------------------------------------------------------------- off_335C2E: dc.w loc_335C38-off_335C2E,loc_335C5C-off_335C2E,loc_335C86-off_335C2E; 0 ; ... dc.w loc_335CAE-off_335C2E,loc_335D30-off_335C2E; 3 ; --------------------------------------------------------------------------- loc_335C38: ; ... addq.b #2,$25(a0) lea (byte_335E1E).l,a2 bsr.w sub_32F6A0 move.w #$3F8,8(a1) move.w #$160,$C(a1) move.w a0,($FFFFF660).w jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335C5C: ; ... bsr.w sub_32F5A6 add.w #$5C,d2 cmp.w #$B8,d2 bcs.s loc_335C70 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335C70: ; ... addq.b #2,$25(a0) move.w #$18,$2A(a0) move.b #1,$1A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335C86: ; ... subq.w #1,$2A(a0) bmi.s loc_335C92 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335C92: ; ... addq.b #2,$25(a0) bset #2,$22(a0) move.w #$200,$10(a0) move.w #$10,$2A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335CAE: ; ... cmp.w #$810,8(a0) bcc.s loc_335CF8 bsr.w sub_32F5A6 add.w #$50,d2 cmp.w #$A0,d2 bcc.s loc_335CD0 move.w 8(a1),d0 add.w #$50,d0 move.w d0,8(a0) loc_335CD0: ; ... subq.w #1,$2A(a0) bpl.s loc_335CE0 move.w #$20,$2A(a0) bsr.w sub_335D4A loc_335CE0: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_ObjC5).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335CF8: ; ... move.b #2,$1A(a0) clr.w $10(a0) tst.b 1(a0) bpl.s loc_335D2A addq.b #2,$25(a0) move.w #$80,$10(a0) move.w #-$200,$12(a0) move.b #2,$1A(a0) move.w #$50,$2A(a0) bset #3,$22(a0) loc_335D2A: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335D30: ; ... subq.w #1,$2A(a0) bmi.w loc_32F7EE add.w #$10,$12(a0) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_335D4A: ; ... lea (byte_335E22).l,a2 bsr.w sub_32F6A0 move.b #$AA,$28(a1) move.b #5,$1A(a1) move.w #$FF00,$10(a1) sub.w #$18,$C(a1) move.w #8,$2A(a1) rts ; End of function sub_335D4A ; --------------------------------------------------------------------------- loc_335D74: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_335D82(pc,d0.w),d1 jmp off_335D82(pc,d1.w) ; --------------------------------------------------------------------------- off_335D82: dc.w loc_335D88-off_335D82,loc_335DA8-off_335D82,loc_335DBE-off_335D82; 0 ; ... ; --------------------------------------------------------------------------- loc_335D88: ; ... move.w $2C(a0),a1 btst #2,$22(a1) bne.s loc_335D9E bsr.w sub_335DCE jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335D9E: ; ... addq.b #2,$25(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335DA8: ; ... bsr.w sub_335DCE lea (Ani_ObjC6).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_335DBE: ; ... lea ($FFFFB000).w,a1 bclr #5,$22(a1) jmp DeleteObject ; =============== S U B R O U T I N E ======================================= sub_335DCE: ; ... move.w 8(a0),-(sp) move.w #$13,d1 move.w #$20,d2 move.w #$20,d3 move.w (sp)+,d4 jmp SolidObject ; End of function sub_335DCE ; --------------------------------------------------------------------------- loc_335DE6: ; ... subq.w #1,$2A(a0) bmi.w loc_32F7EE add.w #$10,$12(a0) jsr ObjectMove ; AKA SpeedToPos in Sonic 1 jmp MarkObjGone ; --------------------------------------------------------------------------- dc.l Map_ObjC6 dc.w 0 dc.b 4, 5, $18, 0 ; 0 dc.l Map_ObjC6_0 dc.w $2328 dc.b 4, 1, 8, 0 ; 0 dc.l Map_ObjC6 dc.w 0 dc.b 4, 5, 4, 0 ; 0 byte_335E1E: dc.b 0, $3E,-$3A,-$58 ; 0 ; ... byte_335E22: dc.b 0, $3C,-$3A,-$56 ; 0 ; ... Ani_ObjC5: dc.w byte_335E2A-Ani_ObjC5,byte_335E30-Ani_ObjC5; 0 ; ... byte_335E2A: dc.b 5, 2, 3, 4, -1, 0; 0 ; ... byte_335E30: dc.b 5, 6, 7, -1 ; 0 ; ... Ani_ObjC6: dc.w byte_335E36-Ani_ObjC6 ; 0 ; ... byte_335E36: dc.b 1, 0, 1, 2, 3, -6; 0 ; ... Map_ObjC6: dc.w byte_335E4C-Map_ObjC6,byte_335E60-Map_ObjC6,byte_335E74-Map_ObjC6; 0 ; ... dc.w byte_335E94-Map_ObjC6,byte_335EAE-Map_ObjC6,byte_335EC8-Map_ObjC6; 3 dc.w byte_335ED0-Map_ObjC6,byte_335EE4-Map_ObjC6; 6 byte_335E4C: dc.b 0, 3,-$1A, $D, 5, 0, -1,-$10, -$A, $E; 0 ; ... dc.b 5, $64, -1,-$10, $E, $D, 5, $70, -1,-$10; 10 byte_335E60: dc.b 0, 3,-$1A, $D, 5, $10, -1,-$10, -$A, $E; 0 ; ... dc.b 5, $64, -1,-$10, $E, $D, 5, $70, -1,-$10; 10 byte_335E74: dc.b 0, 5,-$14, 4, 5, $18, -1,-$20,-$1C, $D; 0 ; ... dc.b 5, $1A, -1,-$10, -$C, $E, 5, $22, -1,-$10; 10 dc.b 4, 1, 5, $2E, -1,-$18, 4, 5, 5, $30; 20 dc.b 0, $10 ; 30 byte_335E94: dc.b 0, 4,-$14, 4, 5, $18, -1,-$20,-$1C, $D; 0 ; ... dc.b 5, $1A, -1,-$10, -$C, $E, 5, $34, -1,-$10; 10 dc.b $C, 5, 5, $40, -1, -8; 20 byte_335EAE: dc.b 0, 4,-$14, 4, 5, $18, -1,-$20,-$1C, $E; 0 ; ... dc.b 5, $44, -1,-$10, -4, $F, 5, $50, -1,-$10; 10 dc.b $C, 1, 5, $60, 0, $10; 20 byte_335EC8: dc.b 0, 1, -4, 4, 5, $62, -1, -8; 0 ; ... byte_335ED0: dc.b 0, 3,-$1A, $D, 5, 8, -1,-$10, -$A, $E; 0 ; ... dc.b 5, $64, -1,-$10, $E, $D, 5, $70, -1,-$10; 10 byte_335EE4: dc.b 0, 3,-$19, $D, 5, 8, -1,-$10, -9, $E; 0 ; ... dc.b 5, $64, -1,-$10, $F, $D, 5, $78, -1,-$10; 10 Map_ObjC6_0: dc.w byte_335F00-Map_ObjC6_0,byte_335F1A-Map_ObjC6_0,byte_335F2E-Map_ObjC6_0; 0 ; ... dc.w byte_335F3C-Map_ObjC6_0 ; 3 byte_335F00: dc.b 0, 4,-$20, 5, 0, 0, -1, -8,-$10, 5; 0 ; ... dc.b 0, 0, -1, -8, 0, 5, 0, 0, -1, -8; 10 dc.b $10, 5, 0, 0, -1, -8; 20 byte_335F1A: dc.b 0, 3,-$20, 5, 0, 0, -1, -8,-$10, 5; 0 ; ... dc.b 0, 0, -1, -8, 0, 5, 0, 0, -1, -8; 10 byte_335F2E: dc.b 0, 2,-$20, 5, 0, 0, -1, -8,-$10, 5; 0 ; ... dc.b 0, 0, -1, -8 ; 10 byte_335F3C: dc.b 0, 1,-$20, 5, 0, 0, -1, -8; 0 ; ... ; --------------------------------------------------------------------------- ObjC8: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_335F52(pc,d0.w),d1 jmp off_335F52(pc,d1.w) ; --------------------------------------------------------------------------- off_335F52: dc.w loc_335F5A-off_335F52,loc_335F82-off_335F52,loc_335FB4-off_335F52; 0 ; ... dc.w loc_335FE6-off_335F52 ; 3 ; --------------------------------------------------------------------------- loc_335F5A: ; ... bsr.w LoadSubObject move.w #$200,$2A(a0) moveq #$20,d0 btst #0,1(a0) bne.s loc_335F70 neg.w d0 loc_335F70: ; ... move.w d0,$10(a0) move.b #$F,$16(a0) move.b #$10,$17(a0) rts ; --------------------------------------------------------------------------- loc_335F82: ; ... subq.w #1,$2A(a0) beq.s loc_335FA4 jsr ObjectMove ; AKA SpeedToPos in Sonic 1 bsr.w sub_336130 lea (Ani_ObjC8).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- loc_335FA4: ; ... addq.b #2,$24(a0) move.w #$3B,$2A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_335FB4: ; ... subq.w #1,$2A(a0) bmi.s loc_335FC4 bsr.w sub_336130 jmp MarkObjGone ; --------------------------------------------------------------------------- loc_335FC4: ; ... move.b #2,$24(a0) move.w #$200,$2A(a0) neg.w $10(a0) bchg #0,1(a0) bchg #0,$22(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_335FE6: ; ... move.b #$D7,$20(a0) bsr.w sub_32F5A6 move.w d2,d4 add.w #$40,d2 cmp.w #$80,d2 bcc.w loc_3360B2 add.w #$40,d3 cmp.w #$80,d3 bcc.w loc_3360B2 bclr #3,$22(a0) bne.w loc_33609A move.b $21(a0),d0 beq.s loc_33607A bclr #0,$21(a0) beq.s loc_336046 cmp.b #2,$1C(a1) bne.s loc_336080 btst #1,$22(a1) bne.s loc_336044 bsr.w sub_32F5A6 btst #0,1(a0) beq.s loc_336040 subq.w #2,d0 loc_336040: ; ... tst.w d0 bne.s loc_3360A6 loc_336044: ; ... bsr.s sub_3360BE loc_336046: ; ... lea ($FFFFB040).w,a1 bclr #1,$21(a0) beq.s loc_336076 cmp.b #2,$1C(a1) bne.s loc_336080 btst #1,$22(a1) bne.s loc_336074 bsr.w sub_32F5A6 btst #0,1(a0) beq.s loc_336070 subq.w #2,d0 loc_336070: ; ... tst.w d0 bne.s loc_3360A6 loc_336074: ; ... bsr.s sub_3360BE loc_336076: ; ... clr.b $21(a0) loc_33607A: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_336080: ; ... move.b #$97,$20(a0) btst #1,$2B(a1) beq.s loc_336094 move.b #$17,$20(a0) loc_336094: ; ... bset #3,$22(a0) loc_33609A: ; ... move.b #1,$1A(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3360A6: ; ... move.b #$17,$20(a0) jmp MarkObjGone ; --------------------------------------------------------------------------- loc_3360B2: ; ... move.b $2C(a0),$24(a0) jmp MarkObjGone ; =============== S U B R O U T I N E ======================================= sub_3360BE: ; ... move.b #2,$1A(a0) btst #1,$22(a1) beq.s loc_3360D2 move.b #3,$1A(a0) loc_3360D2: ; ... move.w 8(a0),d1 move.w $C(a0),d2 sub.w 8(a1),d1 sub.w $C(a1),d2 jsr CalcAngle move.b ($FFFFFE04).w,d1 and.w #3,d1 add.w d1,d0 jsr CalcSine muls.w #$F900,d1 asr.l #8,d1 move.w d1,$10(a1) muls.w #$F900,d0 asr.l #8,d0 move.w d0,$12(a1) bset #1,$22(a1) bclr #4,$22(a1) bclr #5,$22(a1) clr.b $3C(a1) move.w #$B4,d0 jsr PlaySound rts ; End of function sub_3360BE ; --------------------------------------------------------------------------- dc.b $4E ; N dc.b $75 ; u ; =============== S U B R O U T I N E ======================================= sub_336130: ; ... bsr.w sub_32F5A6 add.w #$40,d2 cmp.w #$80,d2 bcc.s return_336158 add.w #$40,d3 cmp.w #$80,d3 bcc.s return_336158 move.b $24(a0),$2C(a0) move.b #6,$24(a0) clr.b $1A(a0) return_336158: ; ... rts ; End of function sub_336130 ; --------------------------------------------------------------------------- dc.l Map_ObjC8 dc.w $8340 dc.b 4, 3, $10,-$29 ; 0 Ani_ObjC8: dc.w byte_336166-Ani_ObjC8 ; ... byte_336166: dc.b $13, 0, 1, -1 ; 0 ; ... Map_ObjC8: dc.w byte_336172-Map_ObjC8,byte_336186-Map_ObjC8,byte_33619A-Map_ObjC8; 0 ; ... dc.w byte_3361AE-Map_ObjC8 ; 3 byte_336172: dc.b 0, 3,-$10, $B, $20, $10, 0, 0,-$10, $F; 0 ; ... dc.b $20, 0, -1,-$10, 0, 9, $20, $24, -1,-$18; 10 byte_336186: dc.b 0, 3,-$10, $B, $20, $10, 0, 4,-$10, $F; 0 ; ... dc.b $20, 0, -1,-$10, 0, 9, $20, $24, -1,-$20; 10 byte_33619A: dc.b 0, 3,-$10, $B, $20, $10, -1,-$18, 0, 9; 0 ; ... dc.b $20, $24, -1,-$10,-$10, $F, $20, 0, -1,-$10; 10 byte_3361AE: dc.b 0, 4,-$10, $D, $20, $1C, -1,-$10, 0, 9; 0 ; ... dc.b $20, $24, -1, -8, 0, 9, $28, $24, -1,-$20; 10 dc.b -$10, $F, $20, 0, -1,-$10; 20 ; --------------------------------------------------------------------------- ObjC7: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_3361D6(pc,d0.w),d1 jmp off_3361D6(pc,d1.w) ; --------------------------------------------------------------------------- off_3361D6: dc.w loc_3361F8-off_3361D6,loc_336208-off_3361D6,loc_336736-off_3361D6; 0 ; ... dc.w loc_33676E-off_3361D6,loc_33679A-off_3361D6,loc_3368A4-off_3361D6; 3 dc.w loc_3368D0-off_3361D6,loc_3368FC-off_3361D6,loc_336990-off_3361D6; 6 dc.w loc_3369E0-off_3361D6,loc_336A12-off_3361D6,loc_336A68-off_3361D6; 9 dc.w loc_336A9A-off_3361D6,loc_336BCE-off_3361D6,loc_336C24-off_3361D6; 12 dc.w loc_336D1A-off_3361D6,loc_33668A-off_3361D6; 15 ; --------------------------------------------------------------------------- loc_3361F8: ; ... lea off_337308(pc),a1 bsr.w LoadSubObject_Part3 move.b $28(a0),$24(a0) rts ; --------------------------------------------------------------------------- loc_336208: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_33621C(pc,d0.w),d1 jsr off_33621C(pc,d1.w) jmp DisplaySprite ; --------------------------------------------------------------------------- off_33621C: dc.w loc_33622C-off_33621C,loc_3362AA-off_33621C,loc_3362C6-off_33621C; 0 ; ... dc.w loc_3362F0-off_33621C,loc_336338-off_33621C,loc_33634A-off_33621C; 3 dc.w loc_33638E-off_33621C,loc_3365E4-off_33621C; 6 ; --------------------------------------------------------------------------- loc_33622C: ; ... addq.b #2,$25(a0) move.b #3,$1A(a0) move.b #5,$18(a0) lea (dword_3372D4).l,a2 bsr.w sub_32F6A0 lea (dword_3372DC).l,a2 bsr.w sub_32F6A0 lea (dword_3372D8).l,a2 bsr.w sub_32F6A0 lea (dword_3372E0).l,a2 bsr.w sub_32F6A0 lea (dword_3372E4).l,a2 bsr.w sub_32F6A0 lea (dword_3372E8).l,a2 bsr.w sub_32F6A0 lea (dword_3372EC).l,a2 bsr.w sub_32F6A0 lea (dword_3372F0).l,a2 bsr.w sub_32F6A0 lea (dword_3372F4).l,a2 bsr.w sub_32F6A0 lea (dword_3372F8).l,a2 bsr.w sub_32F6A0 lea (byte_337058).l,a1 bra.w sub_337020 ; --------------------------------------------------------------------------- loc_3362AA: ; ... btst #2,$22(a0) bne.s loc_3362B4 rts ; --------------------------------------------------------------------------- loc_3362B4: ; ... addq.b #2,$25(a0) move.b #$3C,$1E(a0) moveq #$FFFFFFF9,d0 jmp PlaySound ; --------------------------------------------------------------------------- loc_3362C6: ; ... subq.b #1,$1E(a0) bmi.s loc_3362CE rts ; --------------------------------------------------------------------------- loc_3362CE: ; ... addq.b #2,$25(a0) move.b #$79,$1E(a0) move.w #-$100,$12(a0) move.w $38(a0),a1 move.b #4,$25(a1) moveq #$FFFFFF94,d0 jmp PlayMusic ; --------------------------------------------------------------------------- loc_3362F0: ; ... subq.b #1,$1E(a0) beq.s loc_33630E moveq #$FFFFFFB7,d0 jsr PlaySound jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (byte_337058).l,a1 bra.w sub_337020 ; --------------------------------------------------------------------------- loc_33630E: ; ... addq.b #2,$25(a0) clr.w $12(a0) move.b #$1F,$1E(a0) move.b #$16,$20(a0) move.b #$C,$21(a0) bsr.w sub_336E64 move.w $38(a0),a1 move.b #6,$25(a1) rts ; --------------------------------------------------------------------------- loc_336338: ; ... bsr.w sub_336D6C subq.b #1,$1E(a0) bmi.s loc_336344 rts ; --------------------------------------------------------------------------- loc_336344: ; ... addq.b #2,$25(a0) rts ; --------------------------------------------------------------------------- loc_33634A: ; ... bsr.w sub_336D6C addq.b #2,$25(a0) move.b #$20,$1E(a0) move.b $26(a0),d0 addq.b #1,d0 move.b d0,$26(a0) and.w #3,d0 move.b byte_33638A(pc,d0.w),d0 move.b d0,$1C(a0) clr.b $1D(a0) cmp.b #2,d0 bne.s return_336388 move.w $38(a0),a1 move.b #4,$25(a1) move.b #2,$1C(a1) return_336388: ; ... rts ; --------------------------------------------------------------------------- byte_33638A: dc.b 2, 0, 2, 4 ; 0 ; ... ; --------------------------------------------------------------------------- loc_33638E: ; ... bsr.w sub_336D6C moveq #0,d0 move.b $1C(a0),d0 move.w off_3363A0(pc,d0.w),d1 jmp off_3363A0(pc,d1.w) ; --------------------------------------------------------------------------- off_3363A0: dc.w loc_3363B4-off_3363A0,loc_33640C-off_3363A0,loc_33654E-off_3363A0; 0 ; ... ; --------------------------------------------------------------------------- subq.b #1,$1E(a0) bmi.s loc_3363AE rts ; --------------------------------------------------------------------------- loc_3363AE: ; ... addq.b #2,$1C(a0) rts ; --------------------------------------------------------------------------- loc_3363B4: ; ... moveq #0,d0 move.b $1D(a0),d0 loc_3363BA: move.w off_3363C2(pc,d0.w),d1 jmp off_3363C2(pc,d1.w) ; --------------------------------------------------------------------------- off_3363C2: dc.w loc_3363CA-off_3363C2,loc_3363D8-off_3363C2,loc_3363CA-off_3363C2; 0 ; ... dc.w loc_3363F2-off_3363C2 ; 3 ; --------------------------------------------------------------------------- loc_3363CA: ; ... subq.b #1,$1E(a0) bmi.s loc_3363D2 rts ; --------------------------------------------------------------------------- loc_3363D2: ; ... addq.b #2,$1D(a0) rts ; --------------------------------------------------------------------------- loc_3363D8: ; ... lea (off_337184).l,a1 bsr.w sub_336F20 bne.s loc_3363E6 rts ; --------------------------------------------------------------------------- loc_3363E6: ; ... addq.b #2,$1D(a0) move.b #$40,$1E(a0) rts ; --------------------------------------------------------------------------- loc_3363F2: ; ... lea (off_3371A4).l,a1 bsr.w sub_336F20 bne.s loc_336400 rts ; --------------------------------------------------------------------------- loc_336400: ; ... subq.b #2,$25(a0) move.b #$40,$1E(a0) rts ; --------------------------------------------------------------------------- loc_33640C: ; ... moveq #0,d0 move.b $1D(a0),d0 move.w word_33641A(pc,d0.w),d1 jmp word_33641A(pc,d1.w) ; --------------------------------------------------------------------------- word_33641A: dc.w loc_3363CA-word_33641A ; ... dc.w loc_33642A-word_33641A,loc_33644E-word_33641A,(loc_3363CA-word_33641A); 0 dc.w loc_336492-word_33641A,loc_3364C6-word_33641A,loc_336502-word_33641A; 3 dc.w loc_336540-word_33641A ; 6 ; --------------------------------------------------------------------------- loc_33642A: ; ... lea (off_337148).l,a1 bsr.w sub_336F20 bne.s loc_336438 rts ; --------------------------------------------------------------------------- loc_336438: ; ... addq.b #2,$1D(a0) move.b #$80,$1E(a0) clr.w $10(a0) move.w #-$200,$12(a0) rts ; --------------------------------------------------------------------------- loc_33644E: ; ... subq.b #1,$1E(a0) bmi.s loc_336476 move.b ($FFFFFE0F).w,d0 and.b #$1F,d0 bne.s loc_336466 moveq #$FFFFFFDC,d0 jsr PlaySoundLocal loc_336466: ; ... jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (byte_337058).l,a1 bra.w sub_337020 ; --------------------------------------------------------------------------- loc_336476: ; ... addq.b #2,$1D(a0) clr.w $12(a0) lea (dword_3372FC).l,a2 bsr.w sub_32F6A0 clr.w $10(a0) clr.w $28(a0) rts ; --------------------------------------------------------------------------- loc_336492: ; ... move.w $28(a0),d0 bne.s loc_33649A rts ; --------------------------------------------------------------------------- loc_33649A: ; ... addq.b #2,$1D(a0) move.w d0,8(a0) bclr #0,1(a0) cmp.w #$780,d0 bcc.s loc_3364B4 bset #0,1(a0) loc_3364B4: ; ... bsr.w sub_336EDE move.w #$800,$12(a0) move.b #$20,$1E(a0) rts ; --------------------------------------------------------------------------- loc_3364C6: ; ... subq.b #1,$1E(a0) bmi.s loc_3364DC jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (byte_337058).l,a1 bra.w sub_337020 ; --------------------------------------------------------------------------- loc_3364DC: ; ... addq.b #2,$1D(a0) clr.w $12(a0) move.b #1,($FFFFEEBD).w move.w #$40,($FFFFF660).w move.w $38(a0),a1 move.b #6,$25(a1) moveq #$FFFFFFB9,d0 jmp PlaySound ; --------------------------------------------------------------------------- loc_336502: ; ... lea (off_337082).l,a1 bsr.w sub_336F20 bne.s loc_336510 rts ; --------------------------------------------------------------------------- loc_336510: ; ... lea (byte_337058).l,a1 bsr.w sub_337020 bsr.w sub_32F5A6 btst #0,1(a0) beq.s loc_336528 subq.w #2,d0 loc_336528: ; ... tst.w d0 bne.s loc_336532 subq.b #2,$25(a0) rts ; --------------------------------------------------------------------------- loc_336532: ; ... addq.b #2,$1D(a0) move.b #$60,$1E(a0) bra.w loc_336EAC ; --------------------------------------------------------------------------- loc_336540: ; ... subq.b #1,$1E(a0) bmi.s loc_336548 rts ; --------------------------------------------------------------------------- loc_336548: ; ... subq.b #2,$25(a0) rts ; --------------------------------------------------------------------------- loc_33654E: ; ... moveq #0,d0 move.b $1D(a0),d0 move.w word_33655C(pc,d0.w),d1 jmp word_33655C(pc,d1.w) ; --------------------------------------------------------------------------- word_33655C: dc.w loc_3363CA-word_33655C ; ... dc.w loc_336568-word_33655C,(loc_3363CA-word_33655C),loc_3365B0-word_33655C; 0 dc.w (loc_3363CA-word_33655C),loc_3365CA-word_33655C; 3 ; --------------------------------------------------------------------------- loc_336568: ; ... bset #6,$22(a0) lea (off_33706E).l,a1 bsr.w sub_336F20 bne.s loc_33657C rts ; --------------------------------------------------------------------------- loc_33657C: ; ... bsr.w sub_32F5A6 btst #0,1(a0) beq.s loc_33658A subq.w #2,d0 loc_33658A: ; ... tst.w d0 bne.s loc_3365A0 addq.b #2,$1D(a0) move.b #$40,$1E(a0) bset #4,$22(a0) rts ; --------------------------------------------------------------------------- loc_3365A0: ; ... move.b #8,$1D(a0) move.b #$20,$1E(a0) bra.w loc_336EAC ; --------------------------------------------------------------------------- loc_3365B0: ; ... subq.b #1,$1E(a0) bmi.s loc_3365B8 rts ; --------------------------------------------------------------------------- loc_3365B8: ; ... addq.b #2,$1D(a0) bset #5,$22(a0) move.b #$40,$1E(a0) rts ; --------------------------------------------------------------------------- loc_3365CA: ; ... lea (off_337078).l,a1 bsr.w sub_336F20 bne.s loc_3365D8 rts ; --------------------------------------------------------------------------- loc_3365D8: ; ... subq.b #2,$25(a0) bclr #6,$22(a0) rts ; --------------------------------------------------------------------------- loc_3365E4: ; ... moveq #0,d0 move.b $1C(a0),d0 move.w off_3365F2(pc,d0.w),d1 jmp off_3365F2(pc,d1.w) ; --------------------------------------------------------------------------- off_3365F2: dc.w loc_3365F8-off_3365F2,loc_336638-off_3365F2,loc_336654-off_3365F2; 0 ; ... ; --------------------------------------------------------------------------- loc_3365F8: ; ... jsr sub_326C74 jsr ObjectMoveAndFall move.w $C(a0),d0 cmp.w #$15C,d0 bcc.s loc_336610 rts ; --------------------------------------------------------------------------- loc_336610: ; ... move.w #$15C,$C(a0) move.w $12(a0),d0 bmi.s loc_33662C lsr.w #2,d0 cmp.w #$100,d0 bcs.s loc_33662C neg.w d0 move.w d0,$12(a0) rts ; --------------------------------------------------------------------------- loc_33662C: ; ... addq.b #2,$1C(a0) move.b #$40,$1E(a0) rts ; --------------------------------------------------------------------------- loc_336638: ; ... subq.b #1,$1E(a0) bmi.s loc_336644 jmp sub_326C74 ; --------------------------------------------------------------------------- loc_336644: ; ... addq.b #2,$1C(a0) st ($FFFFF7CC).w move.w #$1000,($FFFFEECA).w rts ; --------------------------------------------------------------------------- loc_336654: ; ... move.w #$808,($FFFFF602).w cmp.w #$840,($FFFFEE00).w bcc.s loc_336664 rts ; --------------------------------------------------------------------------- loc_336664: ; ... move.b #$20,$24(a0) clr.b $25(a0) move.w #$20,$2A(a0) move.b #1,($FFFFEEBD).w move.w #$1000,($FFFFF660).w move.w $36(a0),a1 jmp DeleteObject2 ; --------------------------------------------------------------------------- loc_33668A: ; ... move.b ($FFFFFE0F).w,d0 and.b #$1F,d0 bne.s loc_3366A0 moveq #$FFFFFFE1,d0 jsr PlaySound subq.w #1,$2A(a0) loc_3366A0: ; ... lea ($FFFFB000).w,a1 move.w 8(a1),d0 sub.w $2A(a0),d0 move.w d0,8(a0) move.w $C(a1),$C(a0) bsr.w sub_336D2E moveq #0,d0 move.b $25(a0),d0 move.w off_3366C8(pc,d0.w),d1 jmp off_3366C8(pc,d1.w) ; --------------------------------------------------------------------------- off_3366C8: dc.w loc_3366CC-off_3366C8,loc_3366F2-off_3366C8; 0 ; ... ; --------------------------------------------------------------------------- loc_3366CC: ; ... lea ($FFFFB000).w,a1 cmp.w #$EC0,8(a1) bcc.s loc_3366DA rts ; --------------------------------------------------------------------------- loc_3366DA: ; ... addq.b #2,$25(a0) move.w #$3F,($FFFFF626).w move.b #$16,$1E(a0) move.w #$7FFF,($FFFFF634).w rts ; --------------------------------------------------------------------------- loc_3366F2: ; ... subq.b #1,$1E(a0) beq.w loc_336710 move.l a0,a1 lea ($FFFFFB00).w,a0 moveq #$3F,d0 loc_336702: ; ... jsr Pal_AddColor2 dbf d0,loc_336702 move.l a1,a0 rts ; --------------------------------------------------------------------------- loc_336710: ; ... move.l #$EEE0EEE,d0 lea ($FFFFFB00).w,a1 moveq #$1F,d6 loc_33671C: ; ... move.l d0,(a1)+ dbf d6,loc_33671C moveq #$FFFFFFF9,d0 jsr PlaySound move.b #$20,($FFFFF600).w jmp DeleteObject ; --------------------------------------------------------------------------- loc_336736: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_336758(pc,d0.w),d1 jsr off_336758(pc,d1.w) lea byte_33675C(pc),a1 bsr.w sub_336FFA tst.b (a0) beq.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- off_336758: dc.w loc_336760-off_336758,return_33676C-off_336758; 0 ; ... byte_33675C: dc.b 0, $C, -1,-$14 ; 0 ; ... ; --------------------------------------------------------------------------- loc_336760: ; ... addq.b #2,$25(a0) move.b #4,$1A(a0) rts ; --------------------------------------------------------------------------- return_33676C: ; ... rts ; --------------------------------------------------------------------------- loc_33676E: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_336788(pc,d0.w),d1 jsr off_336788(pc,d1.w) tst.b (a0) beq.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- off_336788: dc.w loc_33678C-off_336788,return_336798-off_336788; 0 ; ... ; --------------------------------------------------------------------------- loc_33678C: ; ... addq.b #2,$25(a0) move.b #$B,$1A(a0) rts ; --------------------------------------------------------------------------- return_336798: ; ... rts ; --------------------------------------------------------------------------- loc_33679A: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3367BE(pc,d0.w),d1 jsr off_3367BE(pc,d1.w) tst.b (a0) beq.w return_330946 btst #6,$22(a0) bne.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- off_3367BE: dc.w loc_3367C8-off_3367BE,loc_3367D4-off_3367BE,loc_3367F4-off_3367BE; 0 ; ... dc.w loc_33685E-off_3367BE,loc_336888-off_3367BE; 3 ; --------------------------------------------------------------------------- loc_3367C8: ; ... addq.b #2,$25(a0) move.b #6,$1A(a0) rts ; --------------------------------------------------------------------------- loc_3367D4: ; ... move.w $2C(a0),a1 bclr #4,$22(a1) bne.s loc_3367E2 rts ; --------------------------------------------------------------------------- loc_3367E2: ; ... addq.b #2,$25(a0) move.w #$10,$2A(a0) move.w $C(a0),$2E(a0) rts ; --------------------------------------------------------------------------- loc_3367F4: ; ... subq.w #1,$2A(a0) bmi.s loc_336806 add.w #$20,$12(a0) jmp ObjectMove ; AKA SpeedToPos in Sonic 1 ; --------------------------------------------------------------------------- loc_336806: ; ... addq.b #2,$25(a0) move.w #$20,$2A(a0) bsr.w sub_32F5A6 tst.w d2 bpl.s loc_33681A neg.w d2 loc_33681A: ; ... cmp.w #$100,d2 bcs.s loc_336824 move.w #$FF,d2 loc_336824: ; ... and.w #$C0,d2 lsr.w #5,d2 move.w word_336856(pc,d2.w),d2 tst.w d1 bne.s loc_336834 neg.w d2 loc_336834: ; ... move.w d2,$12(a0) move.w #$800,d2 move.w $2C(a0),a1 btst #0,1(a0) bne.s loc_33684A neg.w d2 loc_33684A: ; ... move.w d2,$10(a0) moveq #$FFFFFFBC,d0 jmp PlaySound ; --------------------------------------------------------------------------- word_336856: dc.w $200 ; ... byte_336858: dc.b 1, 0, 0,-$80, 0, 0; 0 ; ... ; --------------------------------------------------------------------------- loc_33685E: ; ... subq.w #1,$2A(a0) bmi.s loc_33686A jmp ObjectMove ; AKA SpeedToPos in Sonic 1 ; --------------------------------------------------------------------------- loc_33686A: ; ... addq.b #2,$25(a0) neg.w $10(a0) move.w #$20,$2A(a0) move.w $2E(a0),d0 sub.w $C(a0),d0 asl.w #3,d0 move.w d0,$12(a0) rts ; --------------------------------------------------------------------------- loc_336888: ; ... subq.w #1,$2A(a0) bmi.s loc_336894 jmp ObjectMove ; AKA SpeedToPos in Sonic 1 ; --------------------------------------------------------------------------- loc_336894: ; ... move.b #2,$25(a0) clr.w $10(a0) clr.w $12(a0) rts ; --------------------------------------------------------------------------- loc_3368A4: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3368BE(pc,d0.w),d1 jsr off_3368BE(pc,d1.w) tst.b (a0) beq.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- off_3368BE: dc.w loc_3368C2-off_3368BE,return_3368CE-off_3368BE; 0 ; ... ; --------------------------------------------------------------------------- loc_3368C2: ; ... addq.b #2,$25(a0) move.b #5,$1A(a0) rts ; --------------------------------------------------------------------------- return_3368CE: ; ... rts ; --------------------------------------------------------------------------- loc_3368D0: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3368EA(pc,d0.w),d1 jsr off_3368EA(pc,d1.w) tst.b (a0) beq.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- off_3368EA: dc.w loc_3368EE-off_3368EA,return_3368FA-off_3368EA; 0 ; ... ; --------------------------------------------------------------------------- loc_3368EE: ; ... addq.b #2,$25(a0) move.b #$A,$1A(a0) rts ; --------------------------------------------------------------------------- return_3368FA: ; ... rts ; --------------------------------------------------------------------------- loc_3368FC: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_33691E(pc,d0.w),d1 jsr off_33691E(pc,d1.w) lea byte_336928(pc),a1 bsr.w sub_336FFA tst.b (a0) beq.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- off_33691E: dc.w loc_33692C-off_33691E,loc_336938-off_33691E,loc_336952-off_33691E; 0 ; ... dc.w loc_336964-off_33691E,loc_336984-off_33691E; 3 byte_336928: dc.b 0, 0, -1,-$34 ; 0 ; ... ; --------------------------------------------------------------------------- loc_33692C: ; ... addq.b #2,$25(a0) move.b #$15,$1A(a0) rts ; --------------------------------------------------------------------------- loc_336938: ; ... move.w ($FFFFF660).w,a1 btst #3,$22(a1) bne.s loc_336946 rts ; --------------------------------------------------------------------------- loc_336946: ; ... addq.b #2,$25(a0) move.w #$40,$2A(a0) rts ; --------------------------------------------------------------------------- loc_336952: ; ... lea (Ani_ObjC7).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336964: ; ... subq.w #1,$2A(a0) bmi.s loc_336970 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336970: ; ... addq.b #2,$25(a0) move.w $2C(a0),a1 bset #2,$22(a1) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336984: ; ... move.b #$FF,$21(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336990: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3369A6(pc,d0.w),d1 jsr off_3369A6(pc,d1.w) lea byte_3369B0(pc),a1 bra.w sub_336FFA ; --------------------------------------------------------------------------- off_3369A6: dc.w loc_3369B4-off_3369A6,loc_3369C0-off_3369A6,loc_3369C6-off_3369A6; 0 ; ... dc.w loc_3369D8-off_3369A6,loc_3369C0-off_3369A6; 3 byte_3369B0: dc.b 0, $38, 0, $18 ; 0 ; ... ; --------------------------------------------------------------------------- loc_3369B4: ; ... addq.b #2,$25(a0) move.b #$C,$1A(a0) rts ; --------------------------------------------------------------------------- loc_3369C0: ; ... move.b #3,$1C(a0) loc_3369C6: ; ... lea (Ani_ObjC7_0).l,a1 jsr AnimateSprite jmp DisplaySprite ; --------------------------------------------------------------------------- loc_3369D8: ; ... move.b #1,$1C(a0) bra.s loc_3369C6 ; --------------------------------------------------------------------------- loc_3369E0: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_3369FA(pc,d0.w),d1 jsr off_3369FA(pc,d1.w) tst.b (a0) beq.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- off_3369FA: dc.w loc_3369FE-off_3369FA,return_336A10-off_3369FA; 0 ; ... ; --------------------------------------------------------------------------- loc_3369FE: ; ... addq.b #2,$25(a0) move.b #$B,$1A(a0) move.b #5,$18(a0) rts ; --------------------------------------------------------------------------- return_336A10: ; ... rts ; --------------------------------------------------------------------------- loc_336A12: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_336A2C(pc,d0.w),d1 jsr off_336A2C(pc,d1.w) tst.b (a0) beq.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- off_336A2C: dc.w loc_336A36-off_336A2C,loc_336A48-off_336A2C,(loc_3367F4-off_336A2C); 0 ; ... dc.w (loc_33685E-off_336A2C),(loc_336888-off_336A2C); 3 ; --------------------------------------------------------------------------- loc_336A36: ; ... addq.b #2,$25(a0) move.b #6,$1A(a0) move.b #5,$18(a0) rts ; --------------------------------------------------------------------------- loc_336A48: ; ... move.w $2C(a0),a1 bclr #5,$22(a1) bne.s loc_336A56 rts ; --------------------------------------------------------------------------- loc_336A56: ; ... addq.b #2,$25(a0) move.w #$10,$2A(a0) move.w $C(a0),$2E(a0) rts ; --------------------------------------------------------------------------- loc_336A68: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_336A82(pc,d0.w),d1 jsr off_336A82(pc,d1.w) tst.b (a0) beq.w return_330946 jmp DisplaySprite ; --------------------------------------------------------------------------- off_336A82: dc.w loc_336A86-off_336A82,return_336A98-off_336A82; 0 ; ... ; --------------------------------------------------------------------------- loc_336A86: ; ... addq.b #2,$25(a0) move.b #$A,$1A(a0) move.b #5,$18(a0) rts ; --------------------------------------------------------------------------- return_336A98: ; ... rts ; --------------------------------------------------------------------------- loc_336A9A: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_336AA8(pc,d0.w),d1 jmp off_336AA8(pc,d1.w) ; --------------------------------------------------------------------------- off_336AA8: dc.w loc_336AAE-off_336AA8,loc_336AF2-off_336AA8,loc_336B92-off_336AA8; 0 ; ... ; --------------------------------------------------------------------------- loc_336AAE: ; ... addq.b #2,$25(a0) move.b #$10,$1A(a0) or.w #$8000,2(a0) move.b #1,$18(a0) move.w #$A0,$2A(a0) lea ($FFFFB000).w,a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) move.w $10(a1),$30(a0) move.w $12(a1),$32(a0) move.w #$18,$26(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336AF2: ; ... subq.w #1,$2A(a0) bmi.s loc_336B5E lea $40(a0),a1 move.l a1,a2 move.w -(a1),$12(a0) move.w -(a1),$10(a0) moveq #2,d6 loc_336B08: ; ... move.l -(a1),-(a2) dbf d6,loc_336B08 lea ($FFFFB000).w,a2 move.w $10(a2),d0 bne.s loc_336B1E move.w 8(a2),8(a0) loc_336B1E: ; ... move.w d0,(a1)+ move.w $12(a2),d0 bne.s loc_336B2C move.w $C(a2),$C(a0) loc_336B2C: ; ... move.w d0,(a1)+ jsr ObjectMove ; AKA SpeedToPos in Sonic 1 lea (Ani_Unknown_2).l,a1 jsr AnimateSprite subq.b #1,$26(a0) bpl.s loc_336B58 subq.b #1,$27(a0) move.b $27(a0),$26(a0) moveq #$FFFFFFA8,d0 jsr PlaySound loc_336B58: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336B5E: ; ... addq.b #2,$25(a0) move.w #$40,$2A(a0) move.b #4,$26(a0) lea ($FFFFB000).w,a1 move.w 8(a1),8(a0) move.w $C(a1),$C(a0) lea (dword_337300).l,a2 bsr.w sub_32F6A0 clr.w $10(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336B92: ; ... subq.w #1,$2A(a0) bmi.s loc_336BBE lea (Ani_Unknown_2).l,a1 jsr AnimateSprite subq.b #1,$26(a0) bpl.s loc_336BB8 move.b #4,$26(a0) moveq #$FFFFFFA8,d0 jsr PlaySound loc_336BB8: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336BBE: ; ... move.w $2C(a0),a1 move.w 8(a0),$28(a1) jmp DeleteObject ; --------------------------------------------------------------------------- loc_336BCE: ; ... moveq #0,d0 move.b $25(a0),d0 loc_336BD4: move.w off_336BDC(pc,d0.w),d1 jmp off_336BDC(pc,d1.w) ; --------------------------------------------------------------------------- off_336BDC: dc.w loc_336BE0-off_336BDC,loc_336C02-off_336BDC; 0 ; ... ; --------------------------------------------------------------------------- loc_336BE0: ; ... addq.b #2,$25(a0) move.b #$14,$1A(a0) move.b #1,$18(a0) or.w #$8000,2(a0) move.w #4,$2A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336C02: ; ... move.w $2C(a0),a1 tst.b (a1) beq.w loc_32F7EE subq.w #1,$2A(a0) bne.s loc_336C1E move.w #4,$2A(a0) bchg #5,2(a0) loc_336C1E: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336C24: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_336C32(pc,d0.w),d1 jmp off_336C32(pc,d1.w) ; --------------------------------------------------------------------------- off_336C32: dc.w loc_336C3A-off_336C32,loc_336C68-off_336C32,loc_336CA0-off_336C32; 0 ; ... dc.w loc_336CEE-off_336C32 ; 3 ; --------------------------------------------------------------------------- loc_336C3A: ; ... addq.b #2,$25(a0) move.b #$E,$1A(a0) move.b #$89,$20(a0) move.b #5,$18(a0) move.b #$C,$19(a0) lea unk_336C64(pc),a1 bsr.w sub_336FFA jmp DisplaySprite ; --------------------------------------------------------------------------- unk_336C64: dc.b 0 ; ... dc.b $38 ; 8 dc.b $FF dc.b $EC ; ì ; --------------------------------------------------------------------------- loc_336C68: ; ... move.w $2C(a0),a1 btst #7,$22(a1) bne.s loc_336CB8 jsr ObjectMoveAndFall move.w $C(a0),d0 cmp.w #$170,d0 bcc.s loc_336C8A jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336C8A: ; ... addq.b #2,$25(a0) move.w #$170,$C(a0) move.w #$40,$2A(a0) jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336CA0: ; ... move.w $2C(a0),a1 btst #7,$22(a1) bne.s loc_336CB8 subq.w #1,$2A(a0) bmi.s loc_336CB8 jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336CB8: ; ... move.b #6,$25(a0) move.l #Map_Obj58,4(a0) move.w #$580,2(a0) move.b #1,$18(a0) move.b #7,$1E(a0) move.b #0,$1A(a0) move.w #$C4,d0 jsr PlaySound jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336CEE: ; ... subq.b #1,$1E(a0) bpl.s loc_336D14 move.b #7,$1E(a0) addq.b #1,$1A(a0) cmp.b #5,$1A(a0) bcs.s loc_336D14 clr.b $20(a0) cmp.b #7,$1A(a0) beq.w loc_32F7EE loc_336D14: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- loc_336D1A: ; ... subq.w #1,$2A(a0) bmi.w loc_32F7EE jsr ObjectMoveAndFall jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_336D2E: ; ... jsr SingleObjLoad bne.s return_336D6A move.b #$58,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) jsr RandomNumber move.w d0,d1 moveq #0,d1 move.b d0,d1 lsr.b #2,d1 sub.w #$30,d1 add.w d1,8(a1) lsr.w #8,d0 lsr.b #2,d0 sub.w #$30,d0 add.w d0,$C(a1) return_336D6A: ; ... rts ; End of function sub_336D2E ; =============== S U B R O U T I N E ======================================= sub_336D6C: ; ... tst.b $21(a0) beq.s loc_336DCE tst.b $2A(a0) bne.s loc_336DA2 tst.b $20(a0) beq.s loc_336D92 move.w $36(a0),a1 tst.b $20(a1) bne.s return_336DCC clr.b $20(a0) subq.b #1,$21(a0) beq.s loc_336DCE loc_336D92: ; ... move.b #$3C,$2A(a0) move.w #$AC,d0 jsr PlaySound loc_336DA2: ; ... lea ($FFFFFB22).w,a1 moveq #0,d0 tst.w (a1) bne.s loc_336DB0 move.w #$EEE,d0 loc_336DB0: ; ... move.w d0,(a1) subq.b #1,$2A(a0) bne.s return_336DCC clr.w ($FFFFFB22).w move.b #$16,$20(a0) move.w $36(a0),a1 move.b #$2A,$20(a1) return_336DCC: ; ... rts ; --------------------------------------------------------------------------- loc_336DCE: ; ... moveq #$64,d0 bsr.w AddPoints2 clr.b $1E(a0) move.b #$E,$25(a0) bset #7,$22(a0) clr.b $1C(a0) clr.b $20(a0) clr.w $10(a0) clr.w $12(a0) bsr.w sub_336E94 bsr.w sub_336E0A move.w $38(a0),a1 jsr DeleteObject2 addq.w #4,sp rts ; End of function sub_336D6C ; =============== S U B R O U T I N E ======================================= sub_336E0A: ; ... lea (byte_336E5C).l,a1 lea byte_336E3C(pc),a2 moveq #0,d0 moveq #7,d6 loc_336E18: ; ... move.b (a1)+,d0 move.w (a0,d0.w),a3 move.b #$1E,$24(a3) clr.b $25(a3) move.w #$80,$2A(a3) move.w (a2)+,$10(a3) move.w (a2)+,$12(a3) dbf d6,loc_336E18 rts ; End of function sub_336E0A ; --------------------------------------------------------------------------- byte_336E3C: dc.b 2, 0, -4, 0, -1, 0, -1, 0, 3, 0; 0 ; ... dc.b -3, 0, -1, 0, -4, 0, 1,-$80, -2, 0; 10 dc.b -2, 0, -3, 0, 0, 0, -4, 0, 1, 0; 20 dc.b -3, 0 ; 30 byte_336E5C: dc.b $2C, $2E, $30, $32, $34, $3A, $3C, $3E; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_336E64: ; ... lea byte_336E8A(pc),a1 lea byte_336E80(pc),a2 moveq #0,d0 moveq #9,d6 loc_336E70: ; ... move.b (a1)+,d0 move.w (a0,d0.w),a3 move.b (a2)+,$20(a3) dbf d6,loc_336E70 rts ; End of function sub_336E64 ; --------------------------------------------------------------------------- byte_336E80: dc.b 0,-$71,-$64, 0,-$7A, $2A,-$75,-$71,-$64,-$75; 0 ; ... byte_336E8A: dc.b $2C, $2E, $30, $32, $34, $36, $38, $3A, $3C, $3E; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_336E94: ; ... lea byte_336E8A(pc),a1 moveq #0,d0 moveq #9,d6 loc_336E9C: ; ... move.b (a1)+,d0 move.w (a0,d0.w),a3 clr.b $20(a3) dbf d6,loc_336E9C rts ; End of function sub_336E94 ; --------------------------------------------------------------------------- loc_336EAC: ; ... lea byte_336ED6(pc),a3 moveq #1,d6 loc_336EB2: ; ... lea (dword_337304).l,a2 bsr.w sub_32F6A0 move.w (a3)+,d0 btst #0,1(a0) beq.s loc_336EC8 neg.w d0 loc_336EC8: ; ... move.w d0,$10(a1) move.w (a3)+,$12(a1) dbf d6,loc_336EB2 rts ; --------------------------------------------------------------------------- byte_336ED6: dc.b 0, $60, -8, 0, 0,-$40, -$A, 0; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_336EDE: ; ... move.b 1(a0),d0 and.b #1,d0 moveq #0,d1 lea byte_336F14(pc),a1 loc_336EEC: ; ... move.b (a1)+,d1 beq.w return_330946 move.w (a0,d1.w),a2 move.b 1(a2),d2 and.b #$FE,d2 or.b d0,d2 move.b d2,1(a2) move.b $22(a2),d2 and.b #$FE,d2 or.b d0,d2 move.b d2,$22(a2) bra.s loc_336EEC ; End of function sub_336EDE ; --------------------------------------------------------------------------- byte_336F14: dc.b $2C, $2E, $30, $32, $34, $36, $38, $3A, $3C, $3E; 0 ; ... dc.b 0, 0 ; 10 ; =============== S U B R O U T I N E ======================================= sub_336F20: ; ... move.l (a1)+,a2 moveq #0,d0 move.b $1B(a0),d0 move.b (a1,d0.w),d0 move.b d0,d1 moveq #0,d4 and.w #$C0,d1 beq.s loc_336F3A bsr.w loc_336FB4 loc_336F3A: ; ... add.w d0,d0 add.w (a2,d0.w),a2 move.b (a2)+,d0 move.b (a2)+,d3 move.b $1F(a0),d2 addq.b #1,d2 cmp.b d3,d2 bcs.s loc_336F54 addq.b #1,$1B(a0) moveq #0,d2 loc_336F54: ; ... move.b d2,$1F(a0) moveq #0,d5 loc_336F5A: ; ... move.b (a2)+,d5 move.w (a0,d5.w),a3 tst.w d5 bne.s loc_336F66 move.l a0,a3 loc_336F66: ; ... move.l 8(a3),d2 move.b (a2)+,d1 ext.w d1 asl.w #4,d1 btst #0,1(a0) beq.s loc_336F7A neg.w d1 loc_336F7A: ; ... tst.w d4 beq.s loc_336F80 neg.w d1 loc_336F80: ; ... ext.l d1 asl.l #8,d1 add.l d1,d2 move.l d2,8(a3) move.l $C(a3),d3 move.b (a2)+,d1 ext.w d1 asl.w #4,d1 tst.w d4 beq.s loc_336F9A neg.w d1 loc_336F9A: ; ... ext.l d1 asl.l #8,d1 add.l d1,d3 move.l d3,$C(a3) dbf d0,loc_336F5A moveq #0,d1 rts ; End of function sub_336F20 ; --------------------------------------------------------------------------- loc_336FAC: ; ... clr.b $1B(a0) moveq #1,d1 return_336FB2: ; ... rts ; --------------------------------------------------------------------------- loc_336FB4: ; ... and.b #$3F,d0 rol.b #3,d1 move.w off_336FC2-2(pc,d1),d1 loc_336FBE: jmp off_336FC2(pc,d1.w) ; --------------------------------------------------------------------------- off_336FC2: dc.w loc_336FC8-off_336FC2,loc_336FF2-off_336FC2,loc_336FF6-off_336FC2; 0 ; ... ; --------------------------------------------------------------------------- loc_336FC8: ; ... tst.b $1F(a0) bne.s return_336FB2 move.b $1B(a0),d1 addq.b #1,d1 loc_336FD4: move.b (a1,d1.w),d0 jsr PlaySound addq.b #1,d1 move.b d1,$1B(a0) move.b (a1,d1.w),d0 move.b d0,d1 and.b #$C0,d1 bne.s loc_336FB4 rts ; --------------------------------------------------------------------------- loc_336FF2: ; ... moveq #1,d4 rts ; --------------------------------------------------------------------------- loc_336FF6: ; ... addq.w #4,sp bra.s loc_336FAC ; =============== S U B R O U T I N E ======================================= sub_336FFA: ; ... move.w $2C(a0),a2 move.w 8(a2),d0 move.w (a1)+,d1 btst #0,1(a2) beq.s loc_33700E neg.w d1 loc_33700E: ; ... add.w d1,d0 move.w d0,8(a0) move.w $C(a2),d0 add.w (a1)+,d0 move.w d0,$C(a0) rts ; End of function sub_336FFA ; =============== S U B R O U T I N E ======================================= sub_337020: ; ... moveq #0,d0 moveq #0,d6 move.b (a1)+,d6 loc_337026: ; ... move.b (a1)+,d0 move.w (a0,d0.w),a2 move.w 8(a0),d1 move.b (a1)+,d2 ext.w d2 btst #0,1(a0) beq.s loc_33703E neg.w d2 loc_33703E: ; ... add.w d2,d1 move.w d1,8(a2) move.w $C(a0),d1 move.b (a1)+,d2 ext.w d2 add.w d2,d1 move.w d1,$C(a2) dbf d6,loc_337026 rts ; End of function sub_337020 ; --------------------------------------------------------------------------- byte_337058: dc.b 6, $2E, -4, $3C, $30, -$C, 8, $32, $C, -8; 0 ; ... dc.b $34, 4, $24, $3A, -4, $3C, $3C, -$C, 8, $3E; 10 dc.b 4, $24 ; 20 off_33706E: dc.l Map_ObjC7 ; ... dc.w 1 dc.b 2, 3, -1, 0 ; 0 off_337078: dc.l Map_ObjC7 ; ... dc.w $506 dc.b 7, 8, -1, 0 ; 0 off_337082: dc.l Map_ObjC7 ; ... dc.w 1 dc.b 2, 3, 4, 5, 6, 7, 8,-$40; 0 Map_ObjC7: dc.w byte_3370A2-Map_ObjC7,byte_3370B6-Map_ObjC7,byte_3370CA-Map_ObjC7; 0 ; ... dc.w byte_3370DE-Map_ObjC7,byte_3370F2-Map_ObjC7,byte_3370F8-Map_ObjC7; 3 dc.w byte_33710C-Map_ObjC7,byte_337120-Map_ObjC7,byte_337134-Map_ObjC7; 6 byte_3370A2: dc.b 5, 8, 0,-$20, $C, $30,-$20, $C, $32,-$20; 0 ; ... dc.b $C, $3C,-$20, $C, $34, -8, 4, $3E, -8, 4; 10 byte_3370B6: dc.b 5, 8, 0,-$14, $14, $30,-$14, $14, $32,-$14; 0 ; ... dc.b $14, $3C,-$14, $14, $34, -6, 6, $3E, -6, 6; 10 byte_3370CA: dc.b 5, 8, 0, -8, $14, $30, -8, $14, $32, -8; 0 ; ... dc.b $14, $3C, -8, $14, $34, -2, 4, $3E, -2, 4; 10 byte_3370DE: dc.b 5, 8, 0, -4, $C, $30, -4, $C, $32, -4; 0 ; ... dc.b $C, $3C, -4, $C, $34, 0, 2, $3E, 0, 2; 10 byte_3370F2: dc.b 0, 8, 0, 0, 0, 0; 0 ; ... byte_3370F8: dc.b 5, 8, 0, 4,-$18, $30, 4,-$18, $32, 4; 0 ; ... dc.b -$18, $3C, 4,-$18, $34, 2, -6, $3E, 2, -6; 10 byte_33710C: dc.b 5, 8, 0, $C,-$18, $30, $C,-$18, $32, $C; 0 ; ... dc.b -$18, $3C, $C,-$18, $34, 4, -4, $3E, 4, -4; 10 byte_337120: dc.b 5, 8, 0, $18, -$C, $30, $18, -$C, $32, $18; 0 ; ... dc.b -$C, $3C, $18, -$C, $34, 4, -4, $3E, 4, -4; 10 byte_337134: dc.b 5, 8, 0, $18, -4, $30, $18, -4, $32, $18; 0 ; ... dc.b -4, $3C, $18, -4, $34, 6, -2, $3E, 6, -2; 10 off_337148: dc.l off_337150 ; ... dc.b 0, 1, 2,-$40 ; 0 off_337150: dc.w byte_337156-off_337150,byte_33716A-off_337150,byte_337170-off_337150; 0 ; ... byte_337156: dc.b 5, $10, 0, 0, 4, $30, 0, 4, $32, 0; 0 ; ... dc.b 4, $3C, 0, 4, $34, 0, 4, $3E, 0, 4; 10 byte_33716A: dc.b 0, $10, 0, 0, 0, 0; 0 ; ... byte_337170: dc.b 5, 8, 0, 0, -8, $30, 0, -8, $32, 0; 0 ; ... dc.b -8, $3C, 0, -8, $34, 0, -8, $3E, 0, -8; 10 off_337184: dc.l off_3371B0 ; ... dc.b 0, 1, 2, 3, $40,-$43, 4, 5, 6, 7; 0 dc.b 8, $40,-$43, 9, $A, 1, 2, 3, $40,-$43; 10 dc.b 4, 5, 6, 7, 8, $40,-$43,-$40; 20 off_3371A4: dc.l off_3371B0 ; ... dc.b -$78,-$79,-$7A,-$7B, $B, $40,-$43,-$40; 0 off_3371B0: dc.w byte_3371C8-off_3371B0,byte_3371E0-off_3371B0,byte_3371F8-off_3371B0; 0 ; ... dc.w byte_33720C-off_3371B0,byte_337224-off_3371B0,byte_33723C-off_3371B0; 3 dc.w byte_33724E-off_3371B0,byte_337266-off_3371B0,byte_33727A-off_3371B0; 6 dc.w byte_337292-off_3371B0,byte_3372AA-off_3371B0,byte_3372BC-off_3371B0; 9 byte_3371C8: dc.b 6, $20, $34, -8, -8, $2E, -8, -8, 0, 0; 0 ; ... dc.b -4, $30, 4, -5, $32, 3, -5, $3C, -4, -5; 10 dc.b $3E, 0, -2, 0 ; 20 byte_3371E0: dc.b 6, $10, $34,-$10, -4, $2E,-$10, -4, 0,-$10; 0 ; ... dc.b -4, $30, -$C, -5, $32, -$D, -5, $3C,-$14, -5; 10 dc.b $3E, -8, 0, 0 ; 20 byte_3371F8: dc.b 5, $10, $34, -8, 4, $2E, -8, 4, 0, -8; 0 ; ... dc.b 4, $30, -4, 3, $32, -5, 3, $3C, -$C, 3; 10 byte_33720C: dc.b 6, $10, $34, -4, $10, $2E, -8, $10, 0, 0; 0 ; ... dc.b 8, $30, -8, $A, $32, -6, $A, $3C, 8, $A; 10 dc.b $3E, 0, 8, 0 ; 20 byte_337224: dc.b 6, $20, $34, -2, -2, 0, -$C, -4, $30,-$10; 0 ; ... dc.b -3, $32, -$F, -3, $3C, -8, -3, $3E,-$14, -6; 10 dc.b $3A,-$18, -4, 0 ; 20 byte_33723C: dc.b 4, $20, $3E, -8, -4, $3A, -8, -4, $30, -4; 0 ; ... dc.b -1, $32, -3, -1, $3C, 4, -1, 0; 10 byte_33724E: dc.b 6, $10, $3E,-$10, -4, $3A,-$10, -4, 0,-$10; 0 ; ... dc.b -4, $30,-$14, -5, $32,-$13, -5, $3C, -$C, -5; 10 dc.b $34, -8, 0, 0 ; 20 byte_337266: dc.b 5, $10, $3E, -8, 4, $3A, -8, 4, 0, -8; 0 ; ... dc.b 4, $30, -$C, 3, $32, -$B, 3, $3C, -4, 3; 10 byte_33727A: dc.b 6, $10, $3E, -4, $10, $3A, -8, $10, 0, 0; 0 ; ... dc.b 8, $30, 8, $A, $32, 6, $A, $3C, -8, $A; 10 dc.b $34, 0, 8, 0 ; 20 byte_337292: dc.b 6, $20, $3E, -2, -2, 0, -$C, -4, $30, -8; 0 ; ... dc.b -3, $32, -9, -3, $3C, -$F, -3, $34,-$14, -6; 10 dc.b $2E,-$18, -4, 0 ; 20 byte_3372AA: dc.b 4, $20, $34, -8, -4, $2E, -8, -4, $30, 4; 0 ; ... dc.b -1, $32, 3, -1, $3C, -4, -1, 0; 10 byte_3372BC: dc.b 6, $10, $3E, 0, 8, $3A, 0, 8, 0, 0; 0 ; ... dc.b 8, $30, 0, 8, $32, 0, 8, $3C, 0, 8; 10 dc.b $34, 0, 8, 0 ; 20 dword_3372D4: dc.l $2CC704 ; ... dword_3372D8: dc.l $2EC706 ; ... dword_3372DC: dc.l $30C708 ; ... dword_3372E0: dc.l $32C70A ; ... dword_3372E4: dc.l $34C70C ; ... dword_3372E8: dc.l $36C70E ; ... dword_3372EC: dc.l $38C710 ; ... dword_3372F0: dc.l $3AC712 ; ... dword_3372F4: dc.l $3CC714 ; ... dword_3372F8: dc.l $3EC716 ; ... dword_3372FC: dc.l $10C718 ; ... dword_337300: dc.l $10C71A ; ... dword_337304: dc.l $10C71C ; ... off_337308: dc.l Map_Unknown ; ... dc.w $330 dc.b 4, 4, $38, 0 ; 0 Ani_ObjC7: dc.w byte_337314-Ani_ObjC7 ; 0 ; ... byte_337314: dc.b 7, $15, $15, $15, $15, $15, $15, $15, $15, 0; 0 ; ... dc.b 1, 2, -6, 0 ; 10 Ani_ObjC7_0: dc.w byte_33732A-Ani_ObjC7_0,byte_33732E-Ani_ObjC7_0,byte_337348-Ani_ObjC7_0; 0 ; ... dc.w byte_337362-Ani_ObjC7_0 ; 3 byte_33732A: dc.b 1, $C, $D, -1 ; 0 ; ... byte_33732E: dc.b 1, $C, $D, $C, $C, $D, $D, $C, $C, $C; 0 ; ... dc.b $D, $D, $D, $C, $C, $C, $C, $C, $D, $D; 10 dc.b $D, $D, $D, $D, -6, 0; 20 byte_337348: dc.b 1, $D, $D, $D, $D, $D, $D, $C, $C, $C; 0 ; ... dc.b $C, $C, $D, $D, $D, $C, $C, $C, $D, $D; 10 dc.b $C, $C, $D, $C, -3, 0; 20 byte_337362: dc.b 0, $D, $15, -1 ; 0 ; ... Ani_Unknown_2: dc.w byte_337368-Ani_Unknown_2 ; 0 ; ... byte_337368: dc.b 3, $13, $12, $11, $10, $16, -1, 0; 0 ; ... Map_Unknown: dc.w byte_33739E-Map_Unknown,byte_3373A6-Map_Unknown,byte_3373BA-Map_Unknown; 0 ; ... dc.w byte_3373CE-Map_Unknown,byte_33740C-Map_Unknown,byte_337414-Map_Unknown; 3 dc.w byte_33741C-Map_Unknown,byte_33742A-Map_Unknown,byte_33742A-Map_Unknown; 6 dc.w byte_33742A-Map_Unknown,byte_33742A-Map_Unknown,byte_337432-Map_Unknown; 9 dc.w byte_337458-Map_Unknown,byte_337460-Map_Unknown,byte_337468-Map_Unknown; 12 dc.w byte_337470-Map_Unknown,byte_337478-Map_Unknown,byte_3374AA-Map_Unknown; 15 dc.w byte_3374DC-Map_Unknown,byte_33750E-Map_Unknown,byte_337540-Map_Unknown; 18 dc.w byte_337548-Map_Unknown,byte_337550-Map_Unknown; 21 byte_33739E: dc.b 0, 1,-$10, $B, 0, 0, 0, $C; 0 ; ... byte_3373A6: dc.b 0, 3,-$10, $D, 0, $C, -1,-$14, 0, 9; 0 ; ... dc.b 0, $14, -1, -$C, -8, $A, 0, $1A, 0, $C; 10 byte_3373BA: dc.b 0, 3, 8, 0, 0, $23, -1,-$24, -8, $E; 0 ; ... dc.b 0, $24, -1,-$1C, -8, $E, 0, $30, 0, 4; 10 byte_3373CE: dc.b 0, $A,-$24, $F, $20, $3C, -1,-$2C,-$24, $F; 0 ; ... dc.b $20, $4C, -1, -$C,-$24, $B, $20, $5C, 0, $14; 10 dc.b -$24, $B, $20, $68, 0, $2C, -4, $F, $20, $74; 20 dc.b -1,-$2C, -4, $F, $20,-$7C, -1, -$C, -4, $B; 30 dc.b $20,-$6C, 0, $14, -4, 9, $20,-$60, 0, $2C; 40 dc.b $1C, $C, $20,-$5A, -1,-$1C, $1C, $C, $20,-$56; 50 dc.b 0, 4 ; 60 byte_33740C: dc.b 0, 1,-$10, $F, $20,-$52, -1,-$10; 0 ; ... byte_337414: dc.b 0, 1, -$C, $A, $20,-$42, -1, -$C; 0 ; ... byte_33741C: dc.b 0, 2, -$C, $E, $20,-$39, 0, 0, -$C, $E; 0 ; ... dc.b $20,-$2D, -1,-$20 ; 10 byte_33742A: dc.b 0, 1,-$10, $F, $20,-$1E, -1,-$10; 0 ; ... byte_337432: dc.b 0, 6,-$20, 6, $20, -$E, -1,-$15,-$18, 9; 0 ; ... dc.b $20, -8, -1, -5, -8, 6, $20, -2, -1,-$12; 10 dc.b $10, $D, $21, 4, -1,-$20, -8, $E, $21, $C; 20 dc.b -1, -2, $10, $D, $21, $18, 0, 0; 30 byte_337458: dc.b 0, 1, -$C, 6, $21, $20, -1, -8; 0 ; ... byte_337460: dc.b 0, 1, -$C, 5, $21, $26, -1, -8; 0 ; ... byte_337468: dc.b 0, 1,-$10, $F, 1, $2B, -1,-$10; 0 ; ... byte_337470: dc.b 0, 1, -4, 0, 1, $3B, -1, -4; 0 ; ... byte_337478: dc.b 0, 8,-$10, 5, $21, $3C, -1,-$10,-$10, 5; 0 ; ... dc.b $29, $3C, 0, 0, 0, 5, $31, $3C, -1,-$10; 10 dc.b 0, 5, $39, $3C, 0, 0,-$20, 0, $21, $44; 20 dc.b -1,-$20,-$20, 0, $29, $44, 0, $18, $18, 0; 30 dc.b $31, $44, -1,-$20, $18, 0, $39, $44, 0, $18; 40 byte_3374AA: dc.b 0, 8,-$10, 5, $21, $3C, -1,-$10,-$10, 5; 0 ; ... dc.b $29, $3C, 0, 0, 0, 5, $31, $3C, -1,-$10; 10 dc.b 0, 5, $39, $3C, 0, 0,-$28, 0, $21, $45; 20 dc.b -1,-$28,-$28, 0, $29, $45, 0, $20, $20, 0; 30 dc.b $31, $45, -1,-$28, $20, 0, $39, $45, 0, $20; 40 byte_3374DC: dc.b 0, 8,-$10, 5, $21, $3C, -1,-$10,-$10, 5; 0 ; ... dc.b $29, $3C, 0, 0, 0, 5, $31, $3C, -1,-$10; 10 dc.b 0, 5, $39, $3C, 0, 0,-$30, 0, $21, $46; 20 dc.b -1,-$30,-$30, 0, $29, $46, 0, $28, $28, 0; 30 dc.b $31, $46, -1,-$30, $28, 0, $39, $46, 0, $28; 40 byte_33750E: dc.b 0, 8,-$10, 5, $21, $3C, -1,-$10,-$10, 5; 0 ; ... dc.b $29, $3C, 0, 0, 0, 5, $31, $3C, -1,-$10; 10 dc.b 0, 5, $39, $3C, 0, 0,-$38, 0, $21, $2A; 20 dc.b -1,-$38,-$38, 0, $29, $2A, 0, $30, $30, 0; 30 dc.b $31, $2A, -1,-$38, $30, 0, $39, $2A, 0, $30; 40 byte_337540: dc.b 0, 1, -8, 5, 1, $40, -1, -8; 0 ; ... byte_337548: dc.b 0, 1, 0, 0, 0, 4, 0, 0; 0 ; ... byte_337550: dc.b 0, 8,-$10, 5, $21, $3C, -1,-$10,-$10, 5; 0 ; ... dc.b $29, $3C, 0, 0, 0, 5, $31, $3C, -1,-$10; 10 dc.b 0, 5, $39, $3C, 0, 0,-$18, 0, $21, $44; 20 dc.b -1,-$18,-$18, 0, $29, $44, 0, $10, $10, 0; 30 dc.b $31, $44, -1,-$18, $10, 0, $39, $44, 0, $10; 40 ; =============== S U B R O U T I N E ======================================= sub_337582: ; ... move.w d1,d2 and.w #1,d2 addq.w #1,d2 lsl.w #6,d2 loc_33758C: swap d2 move.w d1,d3 lsr.w #1,d3 addq.w #1,d3 lsl.w #6,d3 swap d3 bsr.w sub_3375AE btst #1,d0 beq.w return_330946 btst #1,d1 bne.s loc_3375AC move.l a3,a5 loc_3375AC: ; ... move.l a5,a2 ; End of function sub_337582 ; =============== S U B R O U T I N E ======================================= sub_3375AE: ; ... move.l a2,a4 swap d2 lea (a2,d2.w),a3 swap d2 move.w d1,d5 and.w #1,d5 bsr.w sub_337628 btst #1,d1 beq.s loc_3375EA swap d2 move.w d2,d4 swap d2 add.w d4,d4 move.w d0,d3 and.w #1,d3 lsl.w d3,d4 add.w d4,a4 move.w d1,d5 lsr.w #1,d5 swap d3 lea (a4,d3.w),a5 swap d3 bsr.w sub_337640 loc_3375EA: ; ... btst #0,d0 bne.s loc_3375F6 btst #1,d0 beq.s return_337626 loc_3375F6: ; ... swap d2 lea (a2,d2.w),a2 lea (a2,d2.w),a3 swap d2 move.w d1,d5 and.w #1,d5 bsr.w sub_337628 btst #1,d1 beq.s return_337626 move.w d1,d5 lsr.w #1,d5 swap d3 lea (a4,d3.w),a4 lea (a4,d3.w),a5 swap d3 bsr.w sub_337640 return_337626: ; ... rts ; End of function sub_3375AE ; =============== S U B R O U T I N E ======================================= sub_337628: ; ... moveq #7,d6 loc_33762A: ; ... bsr.w sub_337658 addq.w #4,a2 bsr.w sub_337682 addq.w #4,a3 dbf d6,loc_33762A dbf d5,sub_337628 rts ; End of function sub_337628 ; =============== S U B R O U T I N E ======================================= sub_337640: ; ... moveq #7,d6 loc_337642: ; ... bsr.w sub_3376AC addq.w #4,a4 bsr.w sub_3376D6 addq.w #4,a5 dbf d6,loc_337642 dbf d5,sub_337640 rts ; End of function sub_337640 ; =============== S U B R O U T I N E ======================================= sub_337658: ; ... bsr.w *+4 move.b (a1)+,d2 move.b d2,d3 and.b #$F0,d2 move.b d2,d4 lsr.b #4,d4 or.b d2,d4 move.b d4,(a2)+ move.b d4,3(a2) and.b #$F,d3 move.b d3,d4 lsl.b #4,d4 or.b d3,d4 move.b d4,(a2)+ move.b d4,3(a2) rts ; End of function sub_337658 ; =============== S U B R O U T I N E ======================================= sub_337682: ; ... bsr.w *+4 move.b (a1)+,d2 move.b d2,d3 and.b #$F0,d2 move.b d2,d4 lsr.b #4,d4 or.b d2,d4 move.b d4,(a3)+ move.b d4,3(a3) and.b #$F,d3 move.b d3,d4 lsl.b #4,d4 or.b d3,d4 move.b d4,(a3)+ move.b d4,3(a3) rts ; End of function sub_337682 ; =============== S U B R O U T I N E ======================================= sub_3376AC: ; ... bsr.w *+4 move.b (a1)+,d2 move.b d2,d3 and.b #$F0,d2 move.b d2,d4 lsr.b #4,d4 or.b d2,d4 move.b d4,(a4)+ move.b d4,3(a4) and.b #$F,d3 move.b d3,d4 lsl.b #4,d4 or.b d3,d4 move.b d4,(a4)+ move.b d4,3(a4) rts ; End of function sub_3376AC ; =============== S U B R O U T I N E ======================================= sub_3376D6: ; ... bsr.w *+4 move.b (a1)+,d2 move.b d2,d3 and.b #$F0,d2 move.b d2,d4 lsr.b #4,d4 or.b d2,d4 move.b d4,(a5)+ move.b d4,3(a5) and.b #$F,d3 move.b d3,d4 lsl.b #4,d4 or.b d3,d4 move.b d4,(a5)+ move.b d4,3(a5) rts ; End of function sub_3376D6 ; --------------------------------------------------------------------------- dc.b $12, $34, $56, $78, $12, $34, $56, $78, $12, $34; 0 dc.b $56, $78, $12, $34, $56, $78, $12, $34, $56, $78; 10 dc.b $12, $34, $56, $78, $12, $34, $56, $78, $12, $34; 20 dc.b $56, $78 ; 30 ; --------------------------------------------------------------------------- Obj8A: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_33772E(pc,d0.w),d1 jmp off_33772E(pc,d1.w) ; --------------------------------------------------------------------------- off_33772E: dc.w loc_337732-off_33772E,loc_3377A4-off_33772E; 0 ; ... ; --------------------------------------------------------------------------- loc_337732: ; ... addq.b #2,$24(a0) move.w #$120,8(a0) move.w #$F0,$A(a0) move.l #Map_Obj8A,4(a0) move.w #$5A0,2(a0) jsr Adjust2PArtPointer2_Useless move.w ($FFFFFFD4).w,d0 move.b d0,$1A(a0) move.b #0,1(a0) move.b #0,$18(a0) cmp.b #4,($FFFFF600).w bne.s loc_3377A4 move.w #$300,2(a0) jsr Adjust2PArtPointer2_Useless move.b #$A,$1A(a0) tst.b ($FFFFFF0B).w beq.s loc_3377A4 cmp.b #$72,($FFFFF604).w bne.s loc_3377A4 move.w #$EEE,($FFFFFBC0).w move.w #$880,($FFFFFBC2).w jmp DeleteObject ; --------------------------------------------------------------------------- loc_3377A4: ; ... jmp DisplaySprite ; --------------------------------------------------------------------------- Map_Obj8A: dc.w byte_3377C0-Map_Obj8A,byte_337816-Map_Obj8A,byte_337878-Map_Obj8A; 0 ; ... dc.w byte_3378B6-Map_Obj8A,byte_337948-Map_Obj8A,byte_3379C2-Map_Obj8A; 3 dc.w byte_337A60-Map_Obj8A,byte_337AEC-Map_Obj8A,byte_337BA8-Map_Obj8A; 6 dc.w byte_337C04-Map_Obj8A,byte_337C36-Map_Obj8A; 9 byte_3377C0: dc.b 0, $E, -8, 5, 0, $2E, -1,-$78, -8, 5; 0 ; ... dc.b 0, $26, -1,-$68, -8, 5, 0, $1A, -1,-$58; 10 dc.b -8, 1, 0, $46, -1,-$48, -8, 5, 0, $1E; 20 dc.b -1,-$40, -8, 5, 0, $3E, -1,-$28, -8, 5; 30 dc.b 0, $E, -1,-$18, -8, 5, 0, 4, -1, -8; 40 dc.b -8, 9, 0, 8, 0, 8, -8, 5, 0, $2E; 50 dc.b 0, $28, -8, 5, 0, $3E, 0, $38, -8, 5; 60 dc.b 0, 4, 0, $48, -8, 5, 0, $5C, 0, $58; 70 dc.b -8, 5, 0, $5C, 0, $68; 80 byte_337816: dc.b 0, $10,-$28, 5, 0, 0, -1,-$80,-$28, 5; 0 ; ... dc.b 0, 4, -1,-$70,-$28, 9, 0, 8, -1,-$60; 10 dc.b -$28, 5, 0, $E, -1,-$4C,-$28, 5, 0, $12; 20 dc.b -1,-$30,-$28, 5, 0, $16, -1,-$20,-$28, 5; 30 dc.b 0, 4, -1,-$10,-$28, 5, 0, $1A, 0, 0; 40 dc.b 8, 5, 0, $1E, -1,-$38, 8, 5, 0, 4; 50 dc.b -1,-$28, 8, 5, 0, $22, -1,-$18, 8, 5; 60 dc.b 0, $26, -1, -8, 8, 5, 0, $16, 0, 8; 70 dc.b 8, 5, 0, $2A, 0, $20, 8, 5, 0, 4; 80 dc.b 0, $30, 8, 5, 0, $2E, 0, $44; 90 byte_337878: dc.b 0, $A,-$28, 5, 0, $12, -1,-$80,-$28, 5; 0 ; ... dc.b 0, $22, -1,-$70,-$28, 5, 0, $26, -1,-$60; 10 dc.b -$28, 5, 0, 0, -1,-$50,-$28, 5, 0, $22; 20 dc.b -1,-$40,-$28, 5, 0, 4, -1,-$30,-$28, 9; 30 dc.b 0, 8, -1,-$20, 8, 5, 0, $2A, -1,-$18; 40 dc.b 8, 5, 0, $32, -1, -8, 8, 5, 0, $36; 50 dc.b 0, 8 ; 60 byte_3378B6: dc.b 0, $18,-$28, 5, 0, $1E, -1,-$78,-$28, 5; 0 ; ... dc.b 0, $3A, -1,-$68,-$28, 5, 0, 4, -1,-$58; 10 dc.b -$28, 5, 0, $22, -1,-$48,-$28, 5, 0, 4; 20 dc.b -1,-$38,-$28, 5, 0, $1E, -1,-$28,-$28, 5; 30 dc.b 0, $3E, -1,-$18,-$28, 5, 0, $E, -1, -8; 40 dc.b -$28, 5, 0, $22, 0, 8,-$28, 5, 0, $42; 50 dc.b 0, $20,-$28, 5, 0, $E, 0, $30,-$28, 5; 60 dc.b 0, $2E, 0, $40,-$28, 1, 0, $46, 0, $50; 70 dc.b -$28, 5, 0, 0, 0, $58,-$28, 5, 0, $1A; 80 dc.b 0, $68, 8, 5, 0, $48, -1,-$40, 8, 1; 90 dc.b 0, $46, -1,-$30, 8, 5, 0, 0, -1,-$28; 100 dc.b 8, 1, 0, $46, -1,-$18, 8, 5, 0, $2E; 110 dc.b -1,-$10, 8, 5, 0, $16, 0, 0, 8, 5; 120 dc.b 0, 4, 0, $10, 8, 5, 0, $1A, 0, $20; 130 dc.b 8, 5, 0, $42, 0, $30; 140 byte_337948: dc.b 0, $14,-$30, 5, 0, $42, -1,-$60,-$30, 5; 0 ; ... dc.b 0, $E, -1,-$50,-$30, 5, 0, $2E, -1,-$40; 10 dc.b -$30, 1, 0, $46, -1,-$30,-$30, 5, 0, 0; 20 dc.b -1,-$28,-$30, 5, 0, $1A, -1,-$18, 0, 5; 30 dc.b 0, $4C, -1,-$18, 0, 1, 0, $46, -1, -8; 40 dc.b 0, 5, 0, $1A, 0, 4, 0, 5, 0, $2A; 50 dc.b 0, $14, 0, 5, 0, 4, 0, $24, $20, 5; 60 dc.b 0, $12, -1,-$30, $20, 5, 0, $3A, -1,-$20; 70 dc.b $20, 5, 0, $E, -1,-$10, $20, 5, 0, $1A; 80 dc.b 0, 0, $20, 1, 0, $46, 0, $10, $20, 5; 90 dc.b 0, $50, 0, $18, $20, 5, 0, $22, 0, $30; 100 dc.b $20, 1, 0, $46, 0, $40, $20, 5, 0, $E; 110 dc.b 0, $48 ; 120 byte_3379C2: dc.b 0, $1A,-$28, 5, 0, $2E, -1,-$68,-$28, 5; 0 ; ... dc.b 0, $26, -1,-$58,-$28, 5, 0, $32, -1,-$48; 10 dc.b -$28, 5, 0, $1A, -1,-$38,-$28, 5, 0, $54; 20 dc.b -1,-$28,-$28, 5, 0, $12, -1, -8,-$28, 5; 30 dc.b 0, $22, 0, 8,-$28, 5, 0, $26, 0, $18; 40 dc.b -$28, 5, 0, $42, 0, $28,-$28, 5, 0, $32; 50 dc.b 0, $38,-$28, 5, 0, $1E, 0, $48,-$28, 5; 60 dc.b 0, $E, 0, $58, 8, 9, 0, 8, -1,-$78; 70 dc.b 8, 5, 0, 4, -1,-$64, 8, 5, 0, $2E; 80 dc.b -1,-$54, 8, 5, 0, 4, -1,-$44, 8, 5; 90 dc.b 0, $3E, -1,-$34, 8, 5, 0, $26, -1,-$24; 100 dc.b 8, 5, 0, $1A, -1, -8, 8, 5, 0, 4; 110 dc.b 0, 8, 8, 5, 0, $58, 0, $18, 8, 5; 120 dc.b 0, 4, 0, $28, 8, 9, 0, 8, 0, $38; 130 dc.b 8, 5, 0, $32, 0, $4C, 8, 5, 0, $22; 140 dc.b 0, $5C, 8, 5, 0, 4, 0, $6C; 150 byte_337A60: dc.b 0, $17,-$30, 5, 0, $2E, -1,-$68,-$30, 5; 0 ; ... dc.b 0, $26, -1,-$58,-$30, 5, 0, $32, -1,-$48; 10 dc.b -$30, 5, 0, $1A, -1,-$38,-$30, 5, 0, $54; 20 dc.b -1,-$28,-$30, 5, 0, $12, -1, -8,-$30, 5; 30 dc.b 0, $22, 0, 8,-$30, 5, 0, $26, 0, $18; 40 dc.b -$30, 5, 0, 0, 0, $28,-$30, 5, 0, $22; 50 dc.b 0, $38,-$30, 5, 0, 4, 0, $48,-$30, 9; 60 dc.b 0, 8, 0, $58, 0, 5, 0, $4C, -1,-$30; 70 dc.b 0, 1, 0, $46, -1,-$20, 0, 9, 0, 8; 80 dc.b -1,-$18, 0, 1, 0, $46, -1, -4, 0, 5; 90 dc.b 0, $3E, 0, 4, 0, 5, 0, 4, 0, $14; 100 dc.b $20, 9, 0, 8, -1,-$30, $20, 5, 0, 4; 110 dc.b -1,-$1C, $20, 5, 0, $1E, -1, -$C, $20, 5; 120 dc.b 0, $58, 0, 4, $20, 5, 0, $2A, 0, $14; 130 byte_337AEC: dc.b 0, $1F,-$28, 5, 0, $2E, -1,-$80,-$28, 5; 0 ; ... dc.b 0, $12, -1,-$70,-$28, 5, 0, $E, -1,-$60; 10 dc.b -$28, 5, 0, $1E, -1,-$50,-$28, 1, 0, $46; 20 dc.b -1,-$40,-$28, 5, 0, 4, -1,-$38,-$28, 5; 30 dc.b 0, $16, -1,-$28,-$28, 5, 0, $3E, -1, -8; 40 dc.b -$28, 5, 0, $3A, 0, 8,-$28, 5, 0, 4; 50 dc.b 0, $18,-$28, 5, 0, $1A, 0, $28,-$28, 5; 60 dc.b 0, $58, 0, $38,-$28, 5, 0, $2E, 0, $48; 70 dc.b 0, 5, 0, $5C, -1,-$50, 0, 5, 0, $32; 80 dc.b -1,-$40, 0, 5, 0, $4C, -1,-$30, 0, 1; 90 dc.b 0, $46, -1,-$20, 0, 5, 0, $26, -1,-$18; 100 dc.b 0, 9, 0, 8, 0, 0, 0, 1, 0, $46; 110 dc.b 0, $14, 0, 5, 0, $1A, 0, $1C, 0, 5; 120 dc.b 0, $E, 0, $2C, 0, 5, 0, 0, 0, $3C; 130 dc.b 0, 1, 0, $46, 0, $4C, 0, 5, 0, $2E; 140 dc.b 0, $54, 0, 5, 0, $3A, 0, $64, 0, 1; 150 dc.b 0, $46, 0, $74, $20, 5, 0, $12, -1, -8; 160 dc.b $20, 5, 0, 4, 0, 8, $20, 5, 0, $12; 170 dc.b 0, $18, $20, 5, 0, 4, 0, $28; 180 byte_337BA8: dc.b 0, $F, -8, 5, 0, $12, -1,-$80, -8, 5; 0 ; ... dc.b 0, $22, -1,-$70, -8, 5, 0, $E, -1,-$60; 10 dc.b -8, 5, 0, $2E, -1,-$50, -8, 5, 0, $E; 20 dc.b -1,-$40, -8, 5, 0, $1A, -1,-$30, -8, 5; 30 dc.b 0, $3E, -1,-$20, -8, 5, 0, $E, -1,-$10; 40 dc.b -8, 5, 0, $42, 0, 0, -8, 5, 0, $48; 50 dc.b 0, $18, -8, 5, 0, $2A, 0, $28, -8, 5; 60 dc.b 0, $2E, 0, $40, -8, 5, 0, $E, 0, $50; 70 dc.b -8, 5, 0, 0, 0, $60, -8, 5, 0, 4; 80 dc.b 0, $70 ; 90 byte_337C04: dc.b 0, 8, $30, 5, 0, $3E, -1,-$40, $30, 5; 0 ; ... dc.b 0, $22, -1,-$30, $30, 5, 0, $2A, -1,-$20; 10 dc.b $30, 5, 0, 4, -1, -8, $30, 5, 0, 0; 20 dc.b 0, 8, $30, 5, 0, 4, 0, $18, $30, 1; 30 dc.b 0, $46, 0, $28, $30, 5, 0, $1A, 0, $30; 40 byte_337C36: dc.b 0, $11,-$18, 5, 0, $2E, -1,-$4C,-$18, 5; 0 ; ... dc.b 0, $26, -1,-$3C,-$18, 5, 0, $1A, -1,-$2C; 10 dc.b -$18, 1, 0, $46, -1,-$1C,-$18, 5, 0, $1E; 20 dc.b -1,-$14,-$18, 5, 0, $3E, 0, 4,-$18, 5; 30 dc.b 0, $E, 0, $14,-$18, 5, 0, 4, 0, $24; 40 dc.b -$18, 9, 0, 8, 0, $34, 0, 5, 0, $12; 50 dc.b -1,-$40, 0, 5, 0, $22, -1,-$30, 0, 5; 60 dc.b 0, $E, -1,-$20, 0, 5, 0, $2E, -1,-$10; 70 dc.b 0, 5, 0, $E, 0, 0, 0, 5, 0, $1A; 80 dc.b 0, $10, 0, 5, 0, $3E, 0, $20, 0, 5; 90 dc.b 0, $2E, 0, $30 ; 100 ; --------------------------------------------------------------------------- Obj3E: ; ... moveq #0,d0 move.b $24(a0),d0 move.w off_337CAC(pc,d0.w),d1 jmp off_337CAC(pc,d1.w) ; --------------------------------------------------------------------------- off_337CAC: dc.w loc_337CCC-off_337CAC,loc_337D34-off_337CAC,loc_337E10-off_337CAC; 0 ; ... dc.w loc_337E4A-off_337CAC,loc_337E6A-off_337CAC,loc_337EC8-off_337CAC; 3 unk_337CB8: dc.b 0 ; ... dc.b 2 dc.b $20 dc.b 4 dc.b 0 dc.b $28 ; ( dc.b 4 dc.b $10 dc.b 5 dc.b 4 dc.b $18 dc.b 6 dc.b 8 dc.b 3 dc.b 5 dc.b 0 dc.b 8 dc.b $20 dc.b 4 dc.b 0 ; --------------------------------------------------------------------------- loc_337CCC: ; ... move.l a0,a1 lea $38(a0),a3 lea unk_337CB8(pc),a2 moveq #3,d1 bra.s loc_337CE4 ; --------------------------------------------------------------------------- loc_337CDA: ; ... jsr SingleObjLoad bne.s loc_337D2E move.w a1,(a3)+ loc_337CE4: ; ... move.b 0(a0),0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w $C(a0),$30(a1) move.l #Map_Obj3E,4(a1) move.w #$2680,2(a1) move.b #$84,1(a1) moveq #0,d0 move.b (a2)+,d0 sub.w d0,$C(a1) move.w $C(a1),$30(a1) move.b (a2)+,$24(a1) move.b (a2)+,$19(a1) move.b (a2)+,$18(a1) move.b (a2)+,$1A(a1) loc_337D2E: ; ... dbf d1,loc_337CDA rts ; --------------------------------------------------------------------------- loc_337D34: ; ... moveq #0,d0 move.b $25(a0),d0 move.w off_337D6A(pc,d0.w),d1 jsr off_337D6A(pc,d1.w) move.w #$2B,d1 move.w #$18,d2 move.w #$18,d3 move.w 8(a0),d4 jsr SolidObject lea (byte_337EEA).l,a1 jsr AnimateSprite jmp MarkObjGone ; --------------------------------------------------------------------------- off_337D6A: dc.w loc_337D70-off_337D6A,loc_337DB8-off_337D6A,return_337E0E-off_337D6A; 0 ; ... ; --------------------------------------------------------------------------- loc_337D70: ; ... move.w $38(a0),a1 tst.w $32(a1) beq.s return_337DB6 move.w $3A(a0),a2 jsr SingleObjLoad bne.s loc_337D9C move.b #$27,0(a1) addq.b #2,$24(a1) move.w 8(a2),8(a1) move.w $C(a2),$C(a1) loc_337D9C: ; ... move.w #$FC00,$12(a2) move.w #$800,$10(a2) addq.b #2,$25(a2) move.w #$1D,$34(a0) addq.b #2,$25(a0) return_337DB6: ; ... rts ; --------------------------------------------------------------------------- loc_337DB8: ; ... subq.w #1,$34(a0) bpl.s return_337E0E move.b #1,$1C(a0) moveq #7,d6 move.w #$9A,d5 moveq #$FFFFFFE4,d4 loc_337DCC: ; ... jsr SingleObjLoad bne.s loc_337DFC move.b #$28,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) add.w d4,8(a1) move.b #1,$38(a1) addq.w #7,d4 move.w d5,$36(a1) subq.w #8,d5 dbf d6,loc_337DCC loc_337DFC: ; ... move.w $3C(a0),a2 move.w #$B4,$1E(a2) addq.b #2,$25(a2) addq.b #2,$25(a0) return_337E0E: ; ... rts ; --------------------------------------------------------------------------- loc_337E10: ; ... move.w #$1B,d1 move.w #8,d2 move.w #8,d3 move.w 8(a0),d4 jsr SolidObject move.w $30(a0),$C(a0) move.b $22(a0),d0 and.b #$18,d0 beq.s loc_337E44 addq.w #8,$C(a0) clr.b ($FFFFFE1E).w move.w #1,$32(a0) loc_337E44: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_337E4A: ; ... tst.b $25(a0) beq.s loc_337E5E tst.b 1(a0) bpl.w loc_337E64 jsr ObjectMoveAndFall loc_337E5E: ; ... jmp MarkObjGone ; --------------------------------------------------------------------------- loc_337E64: ; ... jmp DeleteObject ; --------------------------------------------------------------------------- loc_337E6A: ; ... tst.b $25(a0) beq.s return_337EC6 move.b ($FFFFFE0F).w,d0 and.b #7,d0 bne.s loc_337EB6 jsr SingleObjLoad bne.s loc_337EB6 move.b #$28,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) jsr RandomNumber and.w #$1F,d0 subq.w #6,d0 tst.w d1 bpl.s loc_337EA6 neg.w d0 loc_337EA6: ; ... add.w d0,8(a1) move.b #1,$38(a1) move.w #$C,$36(a1) loc_337EB6: ; ... subq.w #1,$1E(a0) bne.s return_337EC6 addq.b #2,$24(a0) move.w #$B4,$1E(a0) return_337EC6: ; ... rts ; --------------------------------------------------------------------------- loc_337EC8: ; ... moveq #$6F,d0 moveq #$28,d1 lea ($FFFFB400).w,a1 loc_337ED0: ; ... cmp.b (a1),d1 beq.s return_337EE8 lea $40(a1),a1 dbf d0,loc_337ED0 jsr sub_314932 jmp DeleteObject ; --------------------------------------------------------------------------- return_337EE8: ; ... rts ; --------------------------------------------------------------------------- byte_337EEA: dc.b 0, 4, 0, 7, $F, 0, -1, 3, 0, 1; 0 ; ... dc.b 2, 3, -2, 1 ; 10 Map_Obj3E: dc.w byte_337F04-Map_Obj3E,byte_337F30-Map_Obj3E,byte_337F62-Map_Obj3E; 0 ; ... dc.w byte_337F94-Map_Obj3E,byte_337FB4-Map_Obj3E,byte_337FC2-Map_Obj3E; 3 byte_337F04: dc.b 0, 7,-$20, $D, 0, 0, -1,-$20,-$20, $D; 0 ; ... dc.b 8, 0, 0, 0,-$10, $A, 0, 8, -1,-$20; 10 dc.b -$10, 6, 0, $11, -1, -8,-$10, $A, 8, 8; 20 dc.b 0, 8, 8, $E, 0, $17, -1,-$20, 8, $E; 30 dc.b 8, $17, 0, 0 ; 40 byte_337F30: dc.b 0, 7,-$20, $D, 0, 0, -1,-$20,-$20, $D; 0 ; ... dc.b 8, 0, 0, 0, 8, $E, 0, $17, -1,-$20; 10 dc.b 8, $E, 8, $17, 0, 0,-$18, 6, 0, $11; 20 dc.b -1, -8, -8, $A, 0, 8, -1,-$20, -8, $A; 30 dc.b 8, 8, 0, 8,-$10, 6, 0, $23, -1, -8; 40 byte_337F62: dc.b 0, 7,-$20, $D, 0, 0, -1,-$20,-$20, $D; 0 ; ... dc.b 8, 0, 0, 0, 8, $E, 0, $17, -1,-$20; 10 dc.b 8, $E, 8, $17, 0, 0,-$20, 6, 0, $11; 20 dc.b -1, -8, 0, $A, 0, 8, -1,-$20, 0, $A; 30 dc.b 8, 8, 0, 8,-$10, 6, 0, $23, -1, -8; 40 byte_337F94: dc.b 0, 5,-$20, $D, 0, 0, -1,-$20,-$20, $D; 0 ; ... dc.b 8, 0, 0, 0,-$10, 6, 0, $23, -1, -8; 10 dc.b 8, $E, 0, $17, -1,-$20, 8, $E, 8, $17; 20 dc.b 0, 0 ; 30 byte_337FB4: dc.b 0, 2, -8, 5, 0, $29, -1,-$10, -8, 5; 0 ; ... dc.b 8, $29, 0, 0 ; 10 byte_337FC2: dc.b 0, 1, -8, 5, 0, $2D, -1, -8; 0 ; ... ; =============== S U B R O U T I N E ======================================= TouchResponse: ; ... ; FUNCTION CHUNK AT 00338438 SIZE 000000B6 BYTES nop jsr sub_31330C cmp.b #$C,($FFFFFE10).w bne.s loc_337FE0 jsr sub_3135F2 loc_337FE0: ; ... tst.b ($FFFFF7AA).w bne.w Touch_Boss move.w 8(a0),d2 move.w $C(a0),d3 sub.w #8,d2 moveq #0,d5 move.b $16(a0),d5 subq.b #3,d5 sub.w d5,d3 cmp.b #$9C,$1A(a0) bne.s Touch_NoDuck add.w #$C,d3 moveq #$A,d5 Touch_NoDuck: ; ... move.w #$10,d4 add.w d5,d5 lea ($FFFFB400).w,a1 move.w #$6F,d6 Touch_Loop: ; ... move.b $20(a1),d0 bne.w Touch_Height Touch_NextObj: ; ... lea $40(a1),a1 dbf d6,Touch_Loop moveq #0,d0 rts ; --------------------------------------------------------------------------- Touch_Height: ; ... and.w #$3F,d0 add.w d0,d0 lea Touch_Sizes(pc,d0.w),a2 moveq #0,d1 move.b (a2)+,d1 move.w 8(a1),d0 sub.w d1,d0 sub.w d2,d0 bcc.s loc_338050 add.w d1,d1 add.w d1,d0 bcs.s Touch_Width bra.w Touch_NextObj ; --------------------------------------------------------------------------- loc_338050: ; ... cmp.w d4,d0 bhi.w Touch_NextObj Touch_Width: ; ... moveq #0,d1 move.b (a2)+,d1 move.w $C(a1),d0 sub.w d1,d0 sub.w d3,d0 bcc.s loc_338070 add.w d1,d1 add.w d1,d0 bcs.w Touch_ChkValue bra.w Touch_NextObj ; --------------------------------------------------------------------------- loc_338070: ; ... cmp.w d5,d0 bhi.w Touch_NextObj bra.w Touch_ChkValue ; --------------------------------------------------------------------------- Touch_Sizes: dc.b 4, 4, $14, $14, $C, $14, $14, $C, 4, $10; 0 ; ... dc.b $C, $12, $10, $10, 6, 6, $18, $C, $C, $10; 10 dc.b $10, 8, 8, 8, $14, $10, $14, 8, $E, $E; 20 dc.b $18, $18, $28, $10, $10, $18, 8, $10, $20, $70; 30 dc.b $40, $20,-$80, $20, $20, $20, 8, 8, 4, 4; 40 dc.b $20, 8, $C, $C, 8, 4, $18, 4, $28, 4; 50 dc.b 4, 8, 4, $18, 4, $28, 4, $10, $18, $18; 60 dc.b $C, $18, $48, 8, $18, $28, $10, 4, $20, 2; 70 dc.b 4, $40, $18,-$80, $20, $10, $10, $20, $10, $30; 80 dc.b $10, $40, $10, $50, $10, 2, $10, 1, 2, 8; 90 dc.b $20, $1C ; 100 ; --------------------------------------------------------------------------- Touch_Boss: ; ... lea Touch_Sizes(pc),a3 move.w 8(a0),d2 move.w $C(a0),d3 sub.w #8,d2 moveq #0,d5 move.b $16(a0),d5 subq.b #3,d5 sub.w d5,d3 cmp.b #$4D,$1A(a0) bne.s loc_338108 add.w #$C,d3 moveq #$A,d5 loc_338108: ; ... move.w #$10,d4 add.w d5,d5 lea ($FFFFB400).w,a1 move.w #$6F,d6 loc_338116: ; ... move.b $20(a1),d0 bne.s loc_338128 loc_33811C: ; ... lea $40(a1),a1 dbf d6,loc_338116 moveq #0,d0 rts ; --------------------------------------------------------------------------- loc_338128: ; ... bsr.w sub_3384EE and.w #$3F,d0 beq.s loc_33811C add.w d0,d0 lea (a3,d0.w),a2 moveq #0,d1 move.b (a2)+,d1 move.w 8(a1),d0 sub.w d1,d0 sub.w d2,d0 bcc.s loc_33814E add.w d1,d1 add.w d1,d0 bcs.s loc_338152 bra.s loc_33811C ; --------------------------------------------------------------------------- loc_33814E: ; ... cmp.w d4,d0 bhi.s loc_33811C loc_338152: ; ... moveq #0,d1 move.b (a2)+,d1 move.w $C(a1),d0 sub.w d1,d0 sub.w d3,d0 bcc.s loc_338168 add.w d1,d1 add.w d1,d0 bcs.s Touch_ChkValue bra.s loc_33811C ; --------------------------------------------------------------------------- loc_338168: ; ... cmp.w d5,d0 bhi.s loc_33811C Touch_ChkValue: ; ... move.b $20(a1),d1 and.b #$C0,d1 beq.w Touch_Enemy cmp.b #$C0,d1 beq.w loc_338438 tst.b d1 bmi.w Touch_ChkHurt move.b $20(a1),d0 and.b #$3F,d0 cmp.b #6,d0 beq.s Touch_Monitor move.w ($FFFFB030).w,d0 tst.w ($FFFFFFDC).w beq.s loc_3381A2 move.w $30(a0),d0 loc_3381A2: ; ... cmp.w #$5A,d0 bcc.w return_3381B4 loc_3381AA: move.b #4,$24(a1) move.w a0,$3E(a1) return_3381B4: ; ... rts ; --------------------------------------------------------------------------- Touch_Monitor: ; ... tst.w $12(a0) bpl.s loc_3381E2 move.w $C(a0),d0 sub.w #$10,d0 cmp.w $C(a1),d0 bcs.s return_338214 neg.w $12(a0) move.w #$FE80,$12(a1) tst.b $25(a1) bne.s return_338214 move.b #4,$25(a1) rts ; --------------------------------------------------------------------------- loc_3381E2: ; ... cmp.w #$B000,a0 beq.s loc_3381EE tst.w ($FFFFFFDC).w beq.s return_338214 loc_3381EE: ; ... cmp.b #2,$1C(a0) beq.s loc_338206 cmp.b #1,$21(a0) beq.s loc_338206 cmp.b #3,$21(a0) bne.s return_338214 loc_338206: ; ... neg.w $12(a0) move.b #4,$24(a1) move.w a0,$3E(a1) return_338214: ; ... rts ; --------------------------------------------------------------------------- Touch_Enemy: ; ... btst #1,$2B(a0) bne.s loc_338242 cmp.b #9,$1C(a0) beq.s loc_338242 cmp.b #2,$1C(a0) beq.s loc_338242 cmp.b #1,$21(a0) beq.s loc_338242 cmp.b #3,$21(a0) beq.s loc_338242 bra.w Touch_ChkHurt ; --------------------------------------------------------------------------- loc_338242: ; ... btst #6,1(a1) beq.s Touch_Enemy_Part2 tst.b $32(a1) beq.s return_338262 neg.w $10(a0) neg.w $12(a0) move.b #0,$20(a1) subq.b #1,$32(a1) return_338262: ; ... rts ; --------------------------------------------------------------------------- Touch_Enemy_Part2: ; ... tst.b $21(a1) beq.s Touch_KillEnemy neg.w $10(a0) neg.w $12(a0) move.b #0,$20(a1) subq.b #1,$21(a1) bne.s loc_338284 bset #7,$22(a1) loc_338284: ; ... cmp.b #1,$21(a0) bne.s return_3382B6 move.b #2,$21(a0) move.b #$21,$1C(a0) bclr #0,$22(a0) tst.w $10(a0) bmi.s loc_3382AA bset #0,$22(a0) loc_3382AA: ; ... move.b #$13,$16(a0) move.b #9,$17(a0) return_3382B6: ; ... rts ; --------------------------------------------------------------------------- Touch_KillEnemy: ; ... bset #7,$22(a1) moveq #0,d0 move.w ($FFFFF7D0).w,d0 addq.w #2,($FFFFF7D0).w cmp.w #6,d0 bcs.s loc_3382D0 moveq #6,d0 loc_3382D0: ; ... move.w d0,$3E(a1) move.w Knuckles_Enemy_Points(pc,d0.w),d0 cmp.w #$20,($FFFFF7D0).w bcs.s loc_3382EA move.w #$3E8,d0 move.w #$A,$3E(a1) loc_3382EA: ; ... move.w a0,a3 bsr.w AddPoints2 move.b #$27,0(a1) move.b #0,$24(a1) tst.w $12(a0) bmi.s loc_338312 move.w $C(a0),d0 cmp.w $C(a1),d0 bcc.s loc_33831A neg.w $12(a0) rts ; --------------------------------------------------------------------------- loc_338312: ; ... add.w #$100,$12(a0) rts ; --------------------------------------------------------------------------- loc_33831A: ; ... sub.w #$100,$12(a0) rts ; --------------------------------------------------------------------------- Knuckles_Enemy_Points: dc.w 10 dc.w 20 dc.w 50 dc.w 100 ; --------------------------------------------------------------------------- loc_33832A: ; ... bset #7,$22(a1) Touch_ChkHurt: ; ... btst #1,$2B(a0) beq.s Touch_Hurt Touch_NoHurt: ; ... moveq #-1,d0 rts ; --------------------------------------------------------------------------- Touch_Hurt: ; ... nop tst.w $30(a0) bne.s Touch_NoHurt move.l a1,a2 HurtKnuckles: ; ... move.w ($FFFFFE20).w,d0 btst #0,$2B(a0) bne.s Hurt_Shield tst.w d0 beq.w KillCharacter jsr SingleObjLoad bne.s Hurt_Shield move.b #$37,0(a1) move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.w a0,$3E(a1) Hurt_Shield: ; ... bclr #0,$2B(a0) move.b #4,$24(a0) jsr Knuckles_ResetOnFloor_Part2 bset #1,$22(a0) move.w #-$400,$12(a0) move.w #-$200,$10(a0) btst #6,$22(a0) beq.s Hurt_Reverse move.w #-$200,$12(a0) move.w #-$100,$10(a0) Hurt_Reverse: ; ... move.w 8(a0),d0 cmp.w 8(a2),d0 bcs.s Hurt_ChkSpikes neg.w $10(a0) Hurt_ChkSpikes: ; ... move.w #0,$14(a0) move.b #$1A,$1C(a0) move.w #$78,$30(a0) move.w #$A3,d0 cmp.b #$36,(a2) bne.s Hurt_Sound move.w #$A6,d0 Hurt_Sound: ; ... jsr PlaySound moveq #-1,d0 rts ; End of function TouchResponse ; =============== S U B R O U T I N E ======================================= KillCharacter: ; ... tst.w ($FFFFFE08).w bne.s loc_338434 clr.b $2B(a0) move.b #6,$24(a0) jsr Knuckles_ResetOnFloor_Part2 bset #1,$22(a0) move.w #$F900,$12(a0) loc_338408: move.w #0,$10(a0) move.w #0,$14(a0) move.b #$18,$1C(a0) loc_33841A: bset #7,2(a0) move.w #$A3,d0 cmp.b #$36,(a2) bne.s loc_33842E move.w #$A6,d0 loc_33842E: ; ... jsr PlaySound loc_338434: ; ... moveq #-1,d0 rts ; End of function KillCharacter ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR TouchResponse loc_338438: ; ... move.b $20(a1),d1 and.b #$3F,d1 cmp.b #6,d1 beq.s loc_3384C2 cmp.b #7,d1 beq.w loc_3384DA cmp.b #$B,d1 beq.s loc_33848C cmp.b #$A,d1 beq.s loc_3384C2 cmp.b #$C,d1 beq.s loc_338490 cmp.b #$14,d1 beq.s loc_3384C2 cmp.b #$15,d1 beq.s loc_3384C2 cmp.b #$16,d1 beq.s loc_3384C2 cmp.b #$17,d1 beq.s loc_3384C2 cmp.b #$18,d1 beq.s loc_3384C2 cmp.b #$1A,d1 beq.s loc_3384E4 cmp.b #$21,d1 beq.s loc_3384D4 rts ; --------------------------------------------------------------------------- loc_33848C: ; ... bra.w loc_33832A ; --------------------------------------------------------------------------- loc_338490: ; ... sub.w d0,d5 cmp.w #8,d5 bcc.s loc_3384BE move.w 8(a1),d0 subq.w #4,d0 btst #0,$22(a1) beq.s loc_3384AA sub.w #$10,d0 loc_3384AA: ; ... sub.w d2,d0 bcc.s loc_3384B6 loc_3384AE: add.w #$18,d0 bcs.s loc_3384BA bra.s loc_3384BE ; --------------------------------------------------------------------------- loc_3384B6: ; ... cmp.w d4,d0 bhi.s loc_3384BE loc_3384BA: ; ... bra.w Touch_ChkHurt ; --------------------------------------------------------------------------- loc_3384BE: ; ... bra.w Touch_Enemy ; --------------------------------------------------------------------------- loc_3384C2: ; ... move.w a0,d1 sub.w #$B000,d1 beq.s loc_3384CE loc_3384CA: addq.b #1,$21(a1) loc_3384CE: ; ... addq.b #1,$21(a1) rts ; --------------------------------------------------------------------------- loc_3384D4: ; ... addq.b #1,$21(a1) rts ; --------------------------------------------------------------------------- loc_3384DA: ; ... move.b #2,$21(a1) bra.w Touch_Enemy ; --------------------------------------------------------------------------- loc_3384E4: ; ... move.b #-1,$21(a1) bra.w Touch_Enemy ; END OF FUNCTION CHUNK FOR TouchResponse ; =============== S U B R O U T I N E ======================================= sub_3384EE: ; ... cmp.b #$F,d0 bne.s return_338508 moveq #0,d0 move.b ($FFFFF7AA).w,d0 beq.s return_338508 subq.w #1,d0 add.w d0,d0 move.w off_33850A(pc,d0.w),d0 jmp off_33850A(pc,d0.w) ; --------------------------------------------------------------------------- return_338508: ; ... rts ; End of function sub_3384EE ; --------------------------------------------------------------------------- off_33850A: dc.w loc_33851C-off_33850A,loc_33851C-off_33850A,loc_338522-off_33850A; 0 ; ... dc.w loc_33858A-off_33850A,loc_3385C0-off_33850A,loc_33864C-off_33850A; 3 dc.w loc_338686-off_33850A,loc_33868C-off_33850A,return_338520-off_33850A; 6 ; --------------------------------------------------------------------------- loc_33851C: ; ... move.b $20(a1),d0 return_338520: ; ... rts ; --------------------------------------------------------------------------- loc_338522: ; ... tst.b ($FFFFF73F).w bne.s loc_33852A rts ; --------------------------------------------------------------------------- loc_33852A: ; ... move.w d7,-(sp) moveq #0,d1 move.b $15(a1),d1 subq.b #2,d1 cmp.b #7,d1 bgt.s loc_33856A move.w d1,d7 add.w d7,d7 move.w 8(a1),d0 btst #0,1(a1) beq.s loc_338550 add.w word_338572(pc,d7.w),d0 bra.s loc_338554 ; --------------------------------------------------------------------------- loc_338550: ; ... sub.w word_338572(pc,d7.w),d0 loc_338554: ; ... move.b byte_338582(pc,d1.w),d1 or.l #$40000,d1 move.w $C(a1),d7 sub.w #$1C,d7 bsr.w sub_33870E loc_33856A: ; ... move.w (sp)+,d7 move.b $20(a1),d0 rts ; --------------------------------------------------------------------------- word_338572: dc.w $1C, $20, $28, $34, $3C, $44, $60; 0 ; ... dc.w $70 ; 7 byte_338582: dc.b 4, 4, 8, $C, $14, $1C, $24, 8; 0 ; ... ; --------------------------------------------------------------------------- loc_33858A: ; ... move.w d7,-(sp) move.w 8(a1),d0 move.w $C(a1),d7 tst.b ($FFFFF73F).w beq.s loc_3385B8 add.w #4,d7 sub.w #$50,d0 btst #0,1(a1) beq.s loc_3385AE add.w #$A0,d0 loc_3385AE: ; ... move.l #$140010,d1 bsr.w sub_33870E loc_3385B8: ; ... move.w (sp)+,d7 move.b $20(a1),d0 rts ; --------------------------------------------------------------------------- loc_3385C0: ; ... sf $38(a1) cmp.b #1,($FFFFF73F).w blt.s loc_338608 move.w d7,-(sp) move.w 8(a1),d0 move.w $C(a1),d7 add.w #4,d7 sub.w #$30,d0 btst #0,1(a1) beq.s loc_3385EA add.w #$60,d0 loc_3385EA: ; ... move.l #$40004,d1 bsr.w sub_33870E move.w (sp)+,d7 move.b $20(a1),d0 cmp.w #$78,$30(a0) bne.s return_338606 st $38(a1) return_338606: ; ... rts ; --------------------------------------------------------------------------- loc_338608: ; ... move.w d7,-(sp) move.w #$14,a5 move.w #0,a4 loc_338612: ; ... move.w 8(a1),d0 move.w $C(a1),d7 sub.w #$20,d7 add.w a5,d0 move.l #$100004,d1 bsr.w sub_33870E move.w #$FFEC,a5 add.w #1,a4 cmp.w #1,a4 beq.s loc_338612 move.w (sp)+,d7 move.b $20(a1),d0 cmp.w #$78,$30(a0) bne.s return_33864A st $38(a1) return_33864A: ; ... rts ; --------------------------------------------------------------------------- loc_33864C: ; ... tst.b ($FFFFF73F).w beq.s loc_338680 move.w d7,-(sp) move.w 8(a1),d0 move.w $C(a1),d7 add.w #$28,d7 move.l #$80010,d1 cmp.b #1,($FFFFF73F).w beq.s loc_33867A move.w #$20,d1 sub.w #8,d7 add.w #4,d0 loc_33867A: ; ... bsr.w sub_33870E move.w (sp)+,d7 loc_338680: ; ... move.b $20(a1),d0 rts ; --------------------------------------------------------------------------- loc_338686: ; ... move.b $20(a1),d0 rts ; --------------------------------------------------------------------------- loc_33868C: ; ... cmp.b #1,($FFFFF73F).w blt.s loc_338708 beq.s loc_3386DE move.w d7,-(sp) move.w 8(a1),d0 move.w $C(a1),d7 moveq #0,d1 move.b $B(a1),d1 subq.b #2,d1 add.w d1,d1 btst #0,1(a1) beq.s loc_3386B8 add.w word_3386D2(pc,d1.w),d0 bra.s loc_3386BC ; --------------------------------------------------------------------------- loc_3386B8: ; ... sub.w word_3386D2(pc,d1.w),d0 loc_3386BC: ; ... sub.w word_3386D4(pc,d1.w),d7 move.l #$60008,d1 bsr.w sub_33870E move.w (sp)+,d7 move.w #0,d0 rts ; --------------------------------------------------------------------------- word_3386D2: dc.w $14 ; ... word_3386D4: dc.w 0, $10, $10, $10, -$10; 0 ; ... ; --------------------------------------------------------------------------- loc_3386DE: ; ... move.w d7,-(sp) move.w 8(a1),d0 move.w $C(a1),d7 moveq #$10,d1 btst #0,1(a1) beq.s loc_3386F4 neg.w d1 loc_3386F4: ; ... sub.w d1,d0 move.l #$8000C,d1 bsr.w sub_33873C move.w (sp)+,d7 move.b #0,d0 rts ; --------------------------------------------------------------------------- loc_338708: ; ... move.b $20(a1),d0 rts ; =============== S U B R O U T I N E ======================================= sub_33870E: ; ... sub.w d1,d0 sub.w d2,d0 bcc.s loc_33871C add.w d1,d1 add.w d1,d0 bcs.s loc_338720 return_33871A: ; ... rts ; --------------------------------------------------------------------------- loc_33871C: ; ... cmp.w d4,d0 bhi.s return_33871A loc_338720: ; ... swap d1 sub.w d1,d7 sub.w d3,d7 bcc.s loc_338732 add.w d1,d1 add.w d1,d7 bcs.w Touch_ChkHurt bra.s return_33871A ; --------------------------------------------------------------------------- loc_338732: ; ... cmp.w d5,d7 bhi.w return_33871A bra.w Touch_ChkHurt ; End of function sub_33870E ; =============== S U B R O U T I N E ======================================= sub_33873C: ; ... sub.w d1,d0 sub.w d2,d0 bcc.s loc_33874A add.w d1,d1 add.w d1,d0 bcs.s loc_33874E return_338748: ; ... rts ; --------------------------------------------------------------------------- loc_33874A: ; ... cmp.w d4,d0 bhi.s return_338748 loc_33874E: ; ... swap d1 sub.w d1,d7 sub.w d3,d7 bcc.s loc_338760 add.w d1,d1 add.w d1,d7 bcs.w loc_338766 bra.s return_338748 ; --------------------------------------------------------------------------- loc_338760: ; ... cmp.w d5,d7 bhi.w return_338748 loc_338766: ; ... neg.w $10(a0) neg.w $12(a0) rts ; End of function sub_33873C ; =============== S U B R O U T I N E ======================================= sub_338770: ; ... moveq #0,d0 loc_338772: move.b ($FFFFFE10).w,d0 add.w d0,d0 add.w d0,d0 move.w off_33878E(pc,d0.w),d1 lea off_33878C(pc,d1.w),a2 move.w off_33878C(pc,d0.w),d0 jmp off_33878C(pc,d0.w) ; End of function sub_338770 ; --------------------------------------------------------------------------- return_33878A: rts ; --------------------------------------------------------------------------- off_33878C: dc.w Dynamic_Normal-off_33878C ; 0 ; ... off_33878E: dc.w byte_338A40-off_33878C,return_3387D0-off_33878C,loc_338CAC-off_33878C; 0 dc.w return_3387D0-off_33878C,loc_338CAC-off_33878C,return_3387D0-off_33878C; 3 dc.w loc_338CAC-off_33878C,Dynamic_Normal-off_33878C,byte_338AA4-off_33878C; 6 dc.w Dynamic_Normal-off_33878C,byte_338AA4-off_33878C; 9 dc.w return_3387D0-off_33878C,loc_338CAC-off_33878C,loc_3387D2-off_33878C; 11 dc.w byte_338AE4-off_33878C,Dynamic_Normal-off_33878C; 14 dc.w byte_338B48-off_33878C,return_3387D0-off_33878C,loc_338CAC-off_33878C; 16 dc.w Dynamic_Normal-off_33878C,byte_338B74-off_33878C; 19 dc.w return_3387D0-off_33878C,loc_338CAC-off_33878C,loc_3389B4-off_33878C; 21 dc.w byte_338BBA-off_33878C,Dynamic_Normal-off_33878C; 24 dc.w byte_338C5E-off_33878C,Dynamic_Normal-off_33878C; 26 dc.w byte_338C70-off_33878C,loc_3389D0-off_33878C,byte_338C82-off_33878C; 28 dc.w return_3387D0-off_33878C,loc_338CAC-off_33878C; 31 ; --------------------------------------------------------------------------- return_3387D0: ; ... rts ; --------------------------------------------------------------------------- loc_3387D2: ; ... tst.w ($FFFFFFDC).w bne.w Dynamic_Normal lea ($FFFFF7F0).w,a3 moveq #0,d0 move.w ($FFFFEE00).w,d1 neg.w d1 asr.w #3,d1 move.w ($FFFFEE00).w,d0 lsr.w #4,d0 add.w d1,d0 sub.w #$10,d0 divu.w #$30,d0 swap d0 cmp.b 1(a3),d0 beq.s loc_338844 move.b d0,1(a3) move.w d0,d2 and.w #7,d0 add.w d0,d0 add.w d0,d0 add.w d0,d0 move.w d0,d1 add.w d0,d0 add.w d1,d0 and.w #$38,d2 lsr.w #2,d2 add.w d2,d0 lea word_338848(pc,d0.w),a4 moveq #5,d5 move.w #$A000,d4 loc_338828: ; ... moveq #-1,d1 move.w (a4)+,d1 and.l #$FFFFFF,d1 move.w d4,d2 moveq #$40,d3 jsr QueueDMATransfer add.w #$80,d4 dbf d5,loc_338828 loc_338844: ; ... bra.w loc_338908 ; --------------------------------------------------------------------------- word_338848: dc.w $80, $180, $280, $580, $600, $700, $80; 0 ; ... dc.w $180, $280, $580, $600, $700, $980, $A80; 7 dc.w $B80, $C80, $D00, $D80, $980, $A80, $B80; 14 dc.w $C80, $D00, $D80, $E80, $1180, $1200, $1280; 21 dc.w $1300, $1380, $E80, $1180, $1200, $1280, $1300; 28 dc.w $1380, $1400, $1480, $1500, $1580, $1600, $1900; 35 dc.w $1400, $1480, $1500, $1580, $1600, $1900, $1D00; 42 dc.w $1D80, $1E00, $1F80, $2400, $2580, $1D00, $1D80; 49 dc.w $1E00, $1F80, $2400, $2580, $2600, $2680, $2780; 56 dc.w $2B00, $2F00, $3280, $2600, $2680, $2780, $2B00; 63 dc.w $2F00, $3280, $3600, $3680, $3780, $3C80, $3D00; 70 dc.w $3F00, $3600, $3680, $3780, $3C80, $3D00, $3F00; 77 dc.w $3F80, $4080, $4480, $4580, $4880, $4900, $3F80; 84 dc.w $4080, $4480, $4580, $4880, $4900; 91 ; --------------------------------------------------------------------------- loc_338908: ; ... lea ($FFFFA800).w,a1 move.w ($FFFFEE00).w,d2 neg.w d2 asr.w #3,d2 move.l a2,-(sp) lea ($24A33E).l,a0 lea ($FFFF7C00).l,a2 moveq #$F,d1 loc_338924: ; ... move.w (a1)+,d0 neg.w d0 add.w d2,d0 and.w #$1F,d0 lsr.w #1,d0 bcc.s loc_338936 add.w #$200,d0 loc_338936: ; ... lea (a0,d0.w),a4 lsr.w #1,d0 bcs.s loc_338960 move.l (a4)+,(a2)+ add.w #$3C,a2 move.l (a4)+,(a2)+ add.w #$3C,a2 move.l (a4)+,(a2)+ add.w #$3C,a2 move.l (a4)+,(a2)+ suba.w #$C0,a2 add.w #$20,a0 dbf d1,loc_338924 bra.s loc_338998 ; --------------------------------------------------------------------------- loc_338960: ; ... move.b (a4)+,(a2)+ move.b (a4)+,(a2)+ move.b (a4)+,(a2)+ move.b (a4)+,(a2)+ add.w #$3C,a2 move.b (a4)+,(a2)+ move.b (a4)+,(a2)+ move.b (a4)+,(a2)+ move.b (a4)+,(a2)+ add.w #$3C,a2 move.b (a4)+,(a2)+ move.b (a4)+,(a2)+ move.b (a4)+,(a2)+ move.b (a4)+,(a2)+ add.w #$3C,a2 move.b (a4)+,(a2)+ move.b (a4)+,(a2)+ move.b (a4)+,(a2)+ move.b (a4)+,(a2)+ suba.w #$C0,a2 add.w #$20,a0 dbf d1,loc_338924 loc_338998: ; ... move.l #$FF7C00,d1 move.w #$A300,d2 move.w #$80,d3 jsr QueueDMATransfer move.l (sp)+,a2 addq.w #2,a3 bra.w loc_3389DC ; --------------------------------------------------------------------------- loc_3389B4: ; ... tst.b ($FFFFF7AA).w beq.s loc_3389BC rts ; --------------------------------------------------------------------------- loc_3389BC: ; ... lea (byte_338BBA).l,a2 tst.w ($FFFFFFDC).w beq.s Dynamic_Normal lea (byte_338C0C).l,a2 bra.s Dynamic_Normal ; --------------------------------------------------------------------------- loc_3389D0: ; ... tst.b ($FFFFF7AA).w beq.s Dynamic_Normal rts ; =============== S U B R O U T I N E ======================================= Dynamic_Normal: ; ... lea ($FFFFF7F0).w,a3 loc_3389DC: ; ... move.w (a2)+,d6 loc_3389DE: ; ... subq.b #1,(a3) bcc.s loc_338A24 moveq #0,d0 move.b 1(a3),d0 cmp.b 6(a2),d0 bcs.s loc_3389F4 moveq #0,d0 move.b d0,1(a3) loc_3389F4: ; ... addq.b #1,1(a3) move.b (a2),(a3) bpl.s loc_338A02 add.w d0,d0 move.b 9(a2,d0.w),(a3) loc_338A02: ; ... move.b 8(a2,d0.w),d0 lsl.w #5,d0 move.w 4(a2),d2 loc_338A0C: move.l (a2),d1 and.l #%111111111111111111111111,d1 add.l d0,d1 moveq #0,d3 move.b 7(a2),d3 lsl.w #4,d3 jsr QueueDMATransfer loc_338A24: ; ... move.b 6(a2),d0 tst.b (a2) bpl.s loc_338A2E add.b d0,d0 loc_338A2E: ; ... addq.b #1,d0 and.w #%11111110,d0 lea 8(a2,d0.w),a2 addq.w #2,a3 dbf d6,loc_3389DE rts ; End of function Dynamic_Normal ; --------------------------------------------------------------------------- byte_338A40: dc.b 0, 4, -1, $24,-$69, $14, $72,-$80, 6, 2; 0 ; ... dc.b 0, $7F, 2, $13, 0, 7, 2, 7, 0, 7; 10 dc.b 2, 7, -1, $24,-$69,-$6C, $72,-$40, 8, 2; 20 dc.b 2, $7F, 0, $B, 2, $B, 0, $B, 2, 5; 30 dc.b 0, 5, 2, 5, 0, 5, 7, $24,-$68, $14; 40 dc.b $73, 0, 2, 2, 0, 2, -1, $24,-$68,-$6C; 50 dc.b $73, $40, 8, 2, 0, $7F, 2, 7, 0, 7; 60 dc.b 2, 7, 0, 7, 2, $B, 0, $B, 2, $B; 70 dc.b -1, $24,-$67, $14, $73,-$80, 6, 2, 0, $17; 80 dc.b 2, 9, 4, $B, 6, $17, 4, $B, 2, 9; 90 byte_338AA4: dc.b 0, 3, 0, $24,-$59, $3E, $69,-$80, 8, $10; 0 ; ... dc.b 0, $10, $20, $30, $40, $50, $60, $70, $D, $24; 10 dc.b -$49, $3E, $68, 0, 6, $C, 0, $C, $18, $24; 20 dc.b $18, $C, -1, $24,-$43, $3E, $6B,-$80, 4, 6; 30 dc.b 0, $13, 6, 7, $C, $13, 6, 7, -1, $24; 40 dc.b -$43, $3E, $6C, $40, 4, 6, $C, $13, 6, 7; 50 dc.b 0, $13, 6, 7 ; 60 byte_338AE4: dc.b 0, 4, -1, $24,-$69, $14, $72,-$80, 6, 2; 0 ; ... dc.b 0, $7F, 2, $13, 0, 7, 2, 7, 0, 7; 10 dc.b 2, 7, -1, $24,-$69,-$6C, $72,-$40, 8, 2; 20 dc.b 2, $7F, 0, $B, 2, $B, 0, $B, 2, 5; 30 dc.b 0, 5, 2, 5, 0, 5, 7, $24,-$68, $14; 40 dc.b $73, 0, 2, 2, 0, 2, -1, $24,-$68,-$6C; 50 dc.b $73, $40, 8, 2, 0, $7F, 2, 7, 0, 7; 60 dc.b 2, 7, 0, 7, 2, $B, 0, $B, 2, $B; 70 dc.b -1, $24,-$67, $14, $73,-$80, 6, 2, 0, $17; 80 dc.b 2, 9, 4, $B, 6, $17, 4, $B, 2, 9; 90 byte_338B48: dc.b 0, 2, 8, $24,-$41, $7E, $5D, 0, 6, 8; 0 ; ... dc.b 0, 0, 8, $10, $10, 8, 8, $24,-$41, $7E; 10 dc.b $5E, 0, 6, 8, 8, $10, $10, 8, 0, 0; 20 dc.b 8, $24,-$41, $7E, $5F, 0, 6, 8, $10, 8; 30 dc.b 0, 0, 8, $10 ; 40 byte_338B74: dc.b 0, 4, -1, $24,-$41, $7E, $56,-$40, 4, 4; 0 ; ... dc.b 0, $B, 4, 5, 8, 9, 4, 3, 6, $24; 10 dc.b -$40, -2, $57, $40, 4, 4, 0, 4, 8, $C; 20 dc.b 6, $24,-$3E, -2, $57,-$40, 4, 4, 0, 4; 30 dc.b 8, $C, $11, $24,-$3C, -2, $58, $40, 6, $10; 40 dc.b 0, $10, $20, $30, $20, $10, $11, $24,-$34, -2; 50 dc.b $5A, $40, 6, $10, 0, $10, $20, $30, $20, $10; 60 byte_338BBA: dc.b 0, 1, -1, $24,-$2C, -2,-$58, 0, $10, $10; 0 ; ... dc.b 0,-$39, $10, 5, $20, 5, $30, 5, $40,-$39; 10 dc.b $50, 5, $20, 5, $60, 5, 0, 5, $10, 5; 20 dc.b $20, 5, $30, 5, $40, 5, $50, 5, $20, 5; 30 dc.b $60, 5, -1, $24,-$2C, -2, $66, 0, $10, $10; 40 dc.b $70, 5,-$80, 5, $20, 5,-$70, 5,-$60, 5; 50 dc.b -$50, 5, $20, 5,-$40, 5, $70,-$39,-$80, 5; 60 dc.b $20, 5,-$70, 5,-$60,-$39,-$50, 5, $20, 5; 70 dc.b -$40, 5 ; 80 byte_338C0C: dc.b 0, 1, -1, $24,-$2C, -2,-$18, 0, $10, $10; 0 ; ... dc.b 0,-$39, $10, 5, $20, 5, $30, 5, $40,-$39; 10 dc.b $50, 5, $20, 5, $60, 5, 0, 5, $10, 5; 20 dc.b $20, 5, $30, 5, $40, 5, $50, 5, $20, 5; 30 dc.b $60, 5, -1, $24,-$2C, -2, $66, 0, $10, $10; 40 dc.b $70, 5,-$80, 5, $20, 5,-$70, 5,-$60, 5; 50 dc.b -$50, 5, $20, 5,-$40, 5, $70,-$39,-$80, 5; 60 dc.b $20, 5,-$70, 5,-$60,-$39,-$50, 5, $20, 5; 70 dc.b -$40, 5 ; 80 byte_338C5E: dc.b 0, 0, 4, $24, -6, -2, $6E, 0, 8, 2; 0 ; ... dc.b 0, 2, 4, 6, 8, $A, $C, $E; 10 byte_338C70: dc.b 0, 0, 4, $24, -6, -2, $64,-$40, 8, 2; 0 ; ... dc.b 0, 2, 4, 6, 8, $A, $C, $E; 10 byte_338C82: dc.b 0, 3, 5, $24, -4, -2,-$56,-$20, 2, 4; 0 ; ... dc.b 0, 4, 5, $24, -4, -2,-$7A, 0, 2, 4; 10 dc.b 4, 0, 5, $24, -3, -2,-$7B,-$80, 2, 4; 20 dc.b 0, 4, 5, $24, -2, -2,-$7B, 0, 2, 4; 30 dc.b 0, 4 ; 40 ; --------------------------------------------------------------------------- loc_338CAC: ; ... cmp.b #$D,($FFFFFE10).w beq.s loc_338CB6 return_338CB4: ; ... rts ; --------------------------------------------------------------------------- loc_338CB6: ; ... move.w ($FFFFEE00).w,d0 cmp.w #$1940,d0 bcs.s return_338CB4 cmp.w #$1F80,d0 bcc.s return_338CB4 subq.b #1,($FFFFF72D).w bpl.s return_338CB4 move.b #7,($FFFFF72D).w move.b #1,($FFFFF72C).w lea ($FFFF7500).l,a1 bsr.s sub_338CE6 lea ($FFFF7D00).l,a1 ; =============== S U B R O U T I N E ======================================= sub_338CE6: ; ... move.w #7,d1 loc_338CEA: ; ... move.w (a1),d0 move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w $72(a1),(a1)+ add.w #$70,a1 move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w $72(a1),(a1)+ add.w #$70,a1 move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w $72(a1),(a1)+ add.w #$70,a1 move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w 2(a1),(a1)+ move.w d0,(a1)+ suba.w #$180,a1 dbf d1,loc_338CEA rts ; End of function sub_338CE6 ; =============== S U B R O U T I N E ======================================= sub_338D80: ; ... cmp.b #7,($FFFFFE10).w bne.s loc_338D98 bsr.w sub_33926C move.b #-1,($FFFFF7F1).w move.w #-1,($FFFFA820).w loc_338D98: ; ... cmp.b #$D,($FFFFFE10).w bne.s loc_338DA6 move.b #-1,($FFFFF7F1).w loc_338DA6: ; ... moveq #0,d0 move.b ($FFFFFE10).w,d0 add.w d0,d0 move.w word_338DFC(pc,d0.w),d0 lea word_338DFC(pc,d0.w),a0 tst.w ($FFFFFFDC).w beq.s loc_338DCA cmp.b #$C,($FFFFFE10).w bne.s loc_338DCA lea (byte_33916A).l,a0 loc_338DCA: ; ... tst.w (a0) beq.s return_338DE2 loc_338DCE: lea ($FFFF9000).w,a1 add.w (a0)+,a1 move.w (a0)+,d1 tst.w ($FFFFFFDC).w bne.s loc_338DE4 loc_338DDC: ; ... move.w (a0)+,(a1)+ dbf d1,loc_338DDC return_338DE2: ; ... rts ; --------------------------------------------------------------------------- loc_338DE4: ; ... move.w (a0)+,d0 move.w d0,d1 and.w #%1111100000000000,d0 and.w #%11111111111,d1 lsr.w #1,d1 or.w d1,d0 move.w d0,(a1)+ dbf d1,loc_338DE4 rts ; End of function sub_338D80 ; --------------------------------------------------------------------------- word_338DFC: dc.w $22, $46E, $46E, $46E, $9E, $9E, $46E; 0 dc.w $22, $172, $46E, $266, $46E, $2CA, $412; 7 dc.w $41E, $42A, $46E, $1788, $3B, $4500, $4504; 14 dc.w $4501, $4505, $4508, $450C, $4509, $450D, $4510; 21 dc.w $4514, $4511, $4515, $4502, $4506, $4503, $4507; 28 dc.w $450A, $450E, $450B, $450F, $4512, $4516, $4513; 35 dc.w $4517, $6518, $651A, $6519, $651B, $651C, $651E; 42 dc.w $651D, $651F, $439C, $4B9C, $439D, $4B9D, $4158; 49 dc.w $439C, $4159, $439D, $4B9C, $4958, $4B9D, $4959; 56 dc.w $6394, $6B94, $6395, $6B95,-$1C6A,-$146A,-$1C69; 63 dc.w -$1469, $6398, $6B98, $6399, $6B99,-$1C66,-$1466; 70 dc.w -$1C65,-$1465, $1730, $67, $235C, $2B5C, $235D; 77 dc.w $2B5D, $235E, $2B5E, $235F, $2B5F, $635A, $635A; 84 dc.w $635B, $635B, $6358, $6358, $6359, $6359, $6356; 91 dc.w $6356, $6357, $6357, $6354, $6354, $6355, $6355; 98 dc.w $6352, $6352, $6353, $6353, $6350, $6350, $6351; 105 dc.w $6351, $634E, $634E, $634F, $634F, $634C, $634C; 112 dc.w $634D, $634D, $2360, $2B60, $2361, $2B61, $2362; 119 dc.w $2B62, $2363, $2B63, $2364, $2B64, $2365, $2B65; 126 dc.w $2366, $2B66, $2367, $2B67,-$4000,-$4000,-$3CC0; 133 dc.w -$3CBF,-$4000,-$4000,-$3CBE,-$3CBD,-$3CBC,-$3CBB; 140 dc.w -$3CB8,-$3CB7,-$3CBA,-$3CB9,-$3CB6,-$3CB5,-$1CA6; 147 dc.w -$1CA6,-$1CA5,-$1CA5,-$1CA8,-$1CA8,-$1CA7,-$1CA7; 154 dc.w -$1CAA,-$1CAA,-$1CA9,-$1CA9,-$1CAC,-$1CAC,-$1CAB; 161 dc.w -$1CAB,-$1CAE,-$1CAE,-$1CAD,-$1CAD,-$1CB0,-$1CB0; 168 dc.w -$1CAF,-$1CAF,-$1CB2,-$1CB2,-$1CB1,-$1CB1,-$1CB4; 175 dc.w -$1CB4,-$1CB3,-$1CB3, $1710, $77, $62E8, $62E9; 182 dc.w $62EA, $62EB, $62EC, $62ED, $62EE, $62EF, $62F0; 189 dc.w $62F1, $62F2, $62F3, $62F4, $62F5, $62F6, $62F7; 196 dc.w $62F8, $62F9, $62FA, $62FB, $62FC, $62FD, $62FE; 203 dc.w $62FF, $42E8, $42E9, $42EA, $42EB, $42EC, $42ED; 210 dc.w $42EE, $42EF, $42F0, $42F1, $42F2, $42F3, $42F4; 217 dc.w $42F5, $42F6, $42F7, $42F8, $42F9, $42FA, $42FB; 224 dc.w $42FC, $42FD, $42FE, $42FF, $6000, $62E8, $6000; 231 dc.w $62EA, $62E9, $62EC, $62EB, $62EE, $62ED, $6000; 238 dc.w $62EF, $6000, $6000, $62F0, $6000, $62F2, $62F1; 245 dc.w $62F4, $62F3, $62F6, $62F5, $6000, $62F7, $6000; 252 dc.w $6000, $62F8, $6000, $62FA, $62F9, $62FC, $62FB; 259 dc.w $62FE, $62FD, $6000, $62FF, $6000, $4000, $42E8; 266 dc.w $4000, $42EA, $42E9, $42EC, $42EB, $42EE, $42ED; 273 dc.w $4000, $42EF, $4000, $4000, $42F0, $4000, $42F2; 280 dc.w $42F1, $42F4, $42F3, $42F6, $42F5, $4000, $42F7; 287 dc.w $4000, $4000, $42F8, $4000, $42FA, $42F9, $42FC; 294 dc.w $42FB, $42FE, $42FD, $4000, $42FF, $4000, $17A0; 301 dc.w $2F,-$7D4A,-$7D48,-$7D49,-$7D47,-$1D46,-$1D45; 308 dc.w -$1D44,-$1D43, $4000, $62BE, $4000, $62C0, $62BF; 315 dc.w $4000, $62C1, $4000,-$3D3E,-$3D3D,-$3D36,-$3D35; 322 dc.w -$3D3C,-$3D3B,-$3D34,-$3D33,-$3D3A,-$3D39,-$3D32; 329 dc.w -$3D31,-$3D38,-$3D37,-$3D30,-$3D2F,-$3D2E,-$3D2D; 336 dc.w -$3D26,-$3D25,-$3D2C,-$3D2B,-$3D24,-$3D23,-$3D2A; 343 dc.w -$3D29,-$3D22,-$3D21,-$3D28,-$3D27,-$3D20,-$3D1F; 350 dc.w $1760, $4F, $550, $554, $551, $555, $558; 357 dc.w $55C, $559, $55D, $552, $556, $553, $557; 364 dc.w $55A, $55E, $55B, $55F, $560, $564, $561; 371 dc.w $565, $568, $56C, $569, $56D, $562, $566; 378 dc.w $563, $567, $56A, $56E, $56B, $56F, $570; 385 dc.w $574, $571, $575, $578, $57C, $579, $57D; 392 dc.w $572, $576, $573, $577, $57A, $57E, $57B; 399 dc.w $57F,-$1AC0,-$1ABC,-$1ABF,-$1ABB,-$1AB8,-$1AB4; 406 dc.w -$1AB7,-$1AB3,-$1ABE,-$1ABA,-$1ABD,-$1AB9,-$1AB6; 413 dc.w -$1AB2,-$1AB5,-$1AB1,-$1CD0,-$1CCC,-$1CCF,-$1CCB; 420 dc.w -$1CC8,-$1CC4,-$1CC7,-$1CC3,-$1CCE,-$1CCA,-$1CCD; 427 dc.w -$1CC9,-$1CC6,-$1CC2,-$1CC5,-$1CC1; 434 byte_33916A: dc.b $17, $60, 0, $4F, 7, $50, 7, $54, 7, $51; 0 ; ... dc.b 7, $55, 7, $58, 7, $5C, 7, $59, 7, $5D; 10 dc.b 7, $52, 7, $56, 7, $53, 7, $57, 7, $5A; 20 dc.b 7, $5E, 7, $5B, 7, $5F, 7, $60, 7, $64; 30 dc.b 7, $61, 7, $65, 7, $68, 7, $6C, 7, $69; 40 dc.b 7, $6D, 7, $62, 7, $66, 7, $63, 7, $67; 50 dc.b 7, $6A, 7, $6E, 7, $6B, 7, $6F, 7, $70; 60 dc.b 7, $74, 7, $71, 7, $75, 7, $78, 7, $7C; 70 dc.b 7, $79, 7, $7D, 7, $72, 7, $76, 7, $73; 80 dc.b 7, $77, 7, $7A, 7, $7E, 7, $7B, 7, $7F; 90 dc.b -$19, $40,-$19, $44,-$19, $41,-$19, $45,-$19, $48; 100 dc.b -$19, $4C,-$19, $49,-$19, $4D,-$19, $42,-$19, $46; 110 dc.b -$19, $43,-$19, $47,-$19, $4A,-$19, $4E,-$19, $4B; 120 dc.b -$19, $4F,-$1D, $30,-$1D, $34,-$1D, $31,-$1D, $35; 130 dc.b -$1D, $38,-$1D, $3C,-$1D, $39,-$1D, $3D,-$1D, $32; 140 dc.b -$1D, $36,-$1D, $33,-$1D, $37,-$1D, $3A,-$1D, $3E; 150 dc.b -$1D, $3B,-$1D, $3F, $17, -8, 0, 3, $43, $70; 160 dc.b $43, $71, $43, $70, $43, $71, $17, -8, 0, 3; 170 dc.b $43, $26, $43, $27, $43, $26, $43, $27, $17,-$40; 180 dc.b 0, $1F,-$3C, $28,-$3C, $29,-$3C, $2A,-$3C, $2B; 190 dc.b -$3C, $2C,-$3C, $2D,-$3C, $2E,-$3C, $2F,-$3C, $30; 200 dc.b -$3C, $31,-$3C, $32,-$3C, $33,-$3B, $63,-$3B, $64; 210 dc.b -$3B, $65,-$3B, $66, $44, $28, $44, $29, $44, $2A; 220 dc.b $44, $2B, $44, $2C, $44, $2D, $44, $2E, $44, $2F; 230 dc.b $44, $30, $44, $31, $44, $32, $44, $33, $45, $63; 240 dc.b $45, $64, $45, $65, $45, $66, 0, 0; 250 ; =============== S U B R O U T I N E ======================================= sub_33926C: ; ... lea (S2_ArtUnc_HTZCliffs).l,a0 lea ($FFFFB800).w,a4 jsr NemDecToRAM lea ($FFFFB800).w,a1 lea (word_338848).l,a4 moveq #0,d2 moveq #7,d4 loc_33928A: ; ... moveq #5,d3 loc_33928C: ; ... moveq #-1,d0 move.w (a4)+,d0 move.l d0,a2 moveq #$1F,d1 loc_339294: ; ... move.l (a1),(a2)+ move.l d2,(a1)+ dbf d1,loc_339294 dbf d3,loc_33928C add.w #$C,a4 dbf d4,loc_33928A rts ; End of function sub_33926C ; =============== S U B R O U T I N E ======================================= sub_3392AA: ; ... tst.w ($FFFFFE20).w beq.s loc_3392C6 moveq #0,d1 btst #3,($FFFFFE05).w bne.s loc_3392C4 cmp.b #9,($FFFFFE23).w bne.s loc_3392C4 addq.w #2,d1 loc_3392C4: ; ... bra.s loc_3392DC ; --------------------------------------------------------------------------- loc_3392C6: ; ... moveq #0,d1 btst #3,($FFFFFE05).w bne.s loc_3392DC addq.w #1,d1 cmp.b #9,($FFFFFE23).w bne.s loc_3392DC addq.w #2,d1 loc_3392DC: ; ... move.w #$90,d3 move.w #$108,d2 lea (word_339302).l,a1 move.w #$86CA,a3 add.w d1,d1 add.w (a1,d1.w),a1 move.w (a1)+,d1 subq.w #1,d1 bmi.s return_339300 jsr sub_3130B0 return_339300: ; ... rts ; End of function sub_3392AA ; --------------------------------------------------------------------------- word_339302: dc.w 8, $46, $84, $C2, $A,-$7FF3, $2000; 0 ; ... dc.w 0,-$7FF3, $2018, $20,-$7FF3, $2020, $40; 7 dc.w -$6FF3, $2010, 0,-$6FF3, $2028, $28,-$5FF3; 14 dc.w $2008, 0,-$5FFF, $2000, $20,-$5FF7, $2030; 21 dc.w $30, $4005, $10A, 0, $400D, $10E, $10; 28 dc.w $A,-$7FF3, $2000, 0,-$7FF3, $2018, $20; 35 dc.w -$7FF3, $2020, $40,-$6FF3, $2010, 0,-$6FF3; 42 dc.w $2028, $28,-$5FF3, 8, 0,-$5FFF, 0; 49 dc.w $20,-$5FF7, $2030, $30, $4005, $10A, 0; 56 dc.w $400D, $10E, $10, $A,-$7FF3, $2000, 0; 63 dc.w -$7FF3, $2018, $20,-$7FF3, $2020, $40,-$6FF3; 70 dc.w $10, 0,-$6FF3, $2028, $28,-$5FF3, $2008; 77 dc.w 0,-$5FFF, $2000, $20,-$5FF7, $2030, $30; 84 dc.w $4005, $10A, 0, $400D, $10E, $10, $A; 91 dc.w -$7FF3, $2000, 0,-$7FF3, $2018, $20,-$7FF3; 98 dc.w $2020, $40,-$6FF3, $10, 0,-$6FF3, $2028; 105 dc.w $28,-$5FF3, 8, 0,-$5FFF, 0, $20; 112 dc.w -$5FF7, $2030, $30, $4005, $10A, 0, $400D; 119 dc.w $10E, $10, $16, $1E, $26, $2E, $36; 126 dc.w $3E, $46, $4E, $56, $5E, $66, 1; 133 dc.w 1, $2000, 0, 1, 1, $2002, 0; 140 dc.w 1, 1, $2004, 0, 1, 1, $2006; 147 dc.w 0, 1, 1, $2008, 0, 1, 1; 154 dc.w $200A, 0, 1, 1, $200C, 0, 1; 161 dc.w 1, $200E, 0, 1, 1, $2010, 0; 168 dc.w 1, 1, $2012, 0, 1, 1, $2014; 175 dc.w 0 ; 182 ; =============== S U B R O U T I N E ======================================= AddPoints2: ; ... move.b #1,($FFFFFE1F).w lea ($FFFFFE26).w,a3 add.l d0,(a3) move.l #$F423F,d1 cmp.l (a3),d1 bhi.s loc_339488 move.l d1,(a3) loc_339488: ; ... move.l (a3),d0 cmp.l ($FFFFFFC0).w,d0 bcs.s return_3394AA add.l #$1388,($FFFFFFC0).w addq.b #1,($FFFFFE12).w addq.b #1,($FFFFFE1C).w move.w #$98,d0 jmp PlayMusic ; --------------------------------------------------------------------------- return_3394AA: ; ... rts ; End of function AddPoints2 ; =============== S U B R O U T I N E ======================================= HudUpdate: ; ... nop loc_3394AE: lea ($C00000).l,a6 tst.w ($FFFFFFDA).w bne.w loc_3395B4 tst.b ($FFFFFE1F).w beq.s loc_3394D4 clr.b ($FFFFFE1F).w move.l #$5C800003,d0 move.l ($FFFFFE26).w,d1 bsr.w sub_339738 loc_3394D4: ; ... tst.b ($FFFFFE1D).w beq.s loc_3394F4 bpl.s loc_3394E0 bsr.w sub_33966A loc_3394E0: ; ... clr.b ($FFFFFE1D).w move.l #$5F400003,d0 moveq #0,d1 move.w ($FFFFFE20).w,d1 bsr.w sub_33972E loc_3394F4: ; ... tst.b ($FFFFFE1E).w beq.s loc_339552 tst.w ($FFFFF63A).w bne.s loc_339552 lea ($FFFFFE22).w,a1 cmp.l #$93B3B,(a1)+ beq.w loc_33959E addq.b #1,-(a1) cmp.b #$3C,(a1) bcs.s loc_339552 move.b #0,(a1) addq.b #1,-(a1) cmp.b #$3C,(a1) bcs.s loc_339532 move.b #0,(a1) addq.b #1,-(a1) cmp.b #9,(a1) bcs.s loc_339532 move.b #9,(a1) loc_339532: ; ... move.l #$5E400003,d0 moveq #0,d1 move.b ($FFFFFE23).w,d1 bsr.w sub_339806 move.l #$5EC00003,d0 moveq #0,d1 move.b ($FFFFFE24).w,d1 bsr.w sub_339810 loc_339552: ; ... tst.b ($FFFFFE1C).w beq.s loc_339560 clr.b ($FFFFFE1C).w bsr.w sub_3398DA loc_339560: ; ... tst.b ($FFFFF7D6).w beq.s return_33959C clr.b ($FFFFF7D6).w move.l #$64000002,($C00004).l moveq #0,d1 move.w ($FFFFFF8E).w,d1 bsr.w sub_33986A moveq #0,d1 move.w ($FFFFF7D2).w,d1 bsr.w sub_33986A moveq #0,d1 move.w ($FFFFF7D4).w,d1 bsr.w sub_33986A moveq #0,d1 move.w ($FFFFFF92).w,d1 bsr.w sub_33986A return_33959C: ; ... rts ; --------------------------------------------------------------------------- loc_33959E: ; ... clr.b ($FFFFFE1E).w lea ($FFFFB000).w,a0 move.l a0,a2 bsr.w KillCharacter move.b #1,($FFFFFE1A).w rts ; --------------------------------------------------------------------------- loc_3395B4: ; ... bsr.w sub_3396D6 tst.b ($FFFFFE1D).w beq.s loc_3395D8 bpl.s loc_3395C4 bsr.w sub_33966A loc_3395C4: ; ... clr.b ($FFFFFE1D).w move.l #$5F400003,d0 moveq #0,d1 move.w ($FFFFFE20).w,d1 bsr.w sub_33972E loc_3395D8: ; ... move.l #$5EC00003,d0 moveq #0,d1 move.b ($FFFFF62C).w,d1 bsr.w sub_339810 tst.b ($FFFFFE1C).w beq.s loc_3395F6 clr.b ($FFFFFE1C).w bsr.w sub_3398DA loc_3395F6: ; ... tst.b ($FFFFF7D6).w beq.s loc_339632 clr.b ($FFFFF7D6).w move.l #$64000002,($C00004).l moveq #0,d1 move.w ($FFFFFF8E).w,d1 bsr.w sub_33986A moveq #0,d1 move.w ($FFFFF7D2).w,d1 bsr.w sub_33986A moveq #0,d1 move.w ($FFFFF7D4).w,d1 bsr.w sub_33986A moveq #0,d1 move.w ($FFFFFF92).w,d1 bsr.w sub_33986A loc_339632: ; ... tst.w ($FFFFF63A).w bne.s return_339668 lea ($FFFFFE22).w,a1 cmp.l #$93B3B,(a1)+ nop addq.b #1,-(a1) cmp.b #$3C,(a1) bcs.s return_339668 move.b #0,(a1) addq.b #1,-(a1) cmp.b #$3C,(a1) bcs.s return_339668 move.b #0,(a1) addq.b #1,-(a1) cmp.b #9,(a1) bcs.s return_339668 move.b #9,(a1) return_339668: ; ... rts ; End of function HudUpdate ; =============== S U B R O U T I N E ======================================= sub_33966A: ; ... move.l #$5F400003,($C00004).l lea byte_3396D2(pc),a2 move.w #2,d2 bra.s loc_33969A ; End of function sub_33966A ; =============== S U B R O U T I N E ======================================= HUD_Base: ; ... lea ($C00000).l,a6 bsr.w sub_3398DA move.l #$5C400003,($C00004).l lea byte_3396C6(pc),a2 move.w #$E,d2 loc_33969A: ; ... lea byte_339946(pc),a1 loc_33969E: ; ... move.w #$F,d1 move.b (a2)+,d0 bmi.s loc_3396BA ext.w d0 lsl.w #5,d0 lea (a1,d0.w),a3 loc_3396AE: ; ... move.l (a3)+,(a6) dbf d1,loc_3396AE loc_3396B4: ; ... dbf d2,loc_33969E rts ; --------------------------------------------------------------------------- loc_3396BA: ; ... move.l #0,(a6) dbf d1,loc_3396BA bra.s loc_3396B4 ; End of function HUD_Base ; --------------------------------------------------------------------------- byte_3396C6: dc.b $16, -1, -1, -1, -1, -1, -1, 0, 0, $14; 0 ; ... dc.b 0, 0 ; 10 byte_3396D2: dc.b -1, -1, 0, 0 ; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_3396D6: ; ... move.l #$5C400003,($C00004).l loc_3396E0: move.w ($FFFFEE00).w,d1 swap d1 move.w ($FFFFB008).w,d1 bsr.s sub_3396F6 move.w ($FFFFEE04).w,d1 swap d1 move.w ($FFFFB00C).w,d1 ; End of function sub_3396D6 ; =============== S U B R O U T I N E ======================================= sub_3396F6: ; ... moveq #7,d6 loc_3396F8: lea (byte_339D86).l,a1 loc_3396FE: ; ... rol.w #4,d1 move.w d1,d2 and.w #$F,d2 cmp.w #$A,d2 bcs.s loc_339710 add.w #7,d2 loc_339710: ; ... lsl.w #5,d2 lea (a1,d2.w),a3 move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) swap d1 loc_339728: dbf d6,loc_3396FE rts ; End of function sub_3396F6 ; =============== S U B R O U T I N E ======================================= sub_33972E: ; ... lea (off_3397FA).l,a2 moveq #2,d6 bra.s loc_339740 ; End of function sub_33972E ; =============== S U B R O U T I N E ======================================= sub_339738: ; ... lea (byte_3397EE).l,a2 moveq #5,d6 loc_339740: ; ... moveq #0,d4 lea byte_339946(pc),a1 loc_339746: ; ... moveq #0,d2 move.l (a2)+,d3 loc_33974A: ; ... sub.l d3,d1 bcs.s loc_339752 addq.w #1,d2 bra.s loc_33974A ; --------------------------------------------------------------------------- loc_339752: ; ... add.l d3,d1 tst.w d2 beq.s loc_33975C move.w #1,d4 loc_33975C: ; ... tst.w d4 beq.s loc_33978A lsl.w #6,d2 move.l d0,4(a6) lea (a1,d2.w),a3 move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) loc_339782: move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) loc_33978A: ; ... add.l #$400000,d0 dbf d6,loc_339746 rts ; End of function sub_339738 ; =============== S U B R O U T I N E ======================================= ContScrCounter: ; ... move.l #$5F800003,($C00004).l lea ($C00000).l,a6 lea (byte_3397FE).l,a2 moveq #1,d6 moveq #0,d4 lea byte_339946(pc),a1 loc_3397B4: ; ... moveq #0,d2 move.l (a2)+,d3 loc_3397B8: ; ... sub.l d3,d1 bcs.s loc_3397C0 addq.w #1,d2 bra.s loc_3397B8 ; --------------------------------------------------------------------------- loc_3397C0: ; ... add.l d3,d1 lsl.w #6,d2 lea (a1,d2.w),a3 move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) dbf d6,loc_3397B4 rts ; End of function ContScrCounter ; --------------------------------------------------------------------------- byte_3397EE: dc.b 0, 1,-$7A,-$60, 0, 0, $27, $10; 0 ; ... off_3397F6: dc.l $3E8 ; ... off_3397FA: dc.l $64 ; ... byte_3397FE: dc.b 0, 0, 0, $A ; 0 ; ... byte_339802: dc.b 0, 0, 0, 1 ; 0 ; ... ; =============== S U B R O U T I N E ======================================= sub_339806: ; ... lea (byte_339802).l,a2 moveq #0,d6 bra.s loc_339818 ; End of function sub_339806 ; =============== S U B R O U T I N E ======================================= sub_339810: ; ... lea (byte_3397FE).l,a2 moveq #1,d6 loc_339818: ; ... moveq #0,d4 lea byte_339946(pc),a1 loc_33981E: ; ... moveq #0,d2 move.l (a2)+,d3 loc_339822: ; ... sub.l d3,d1 bcs.s loc_33982A addq.w #1,d2 bra.s loc_339822 ; --------------------------------------------------------------------------- loc_33982A: ; ... add.l d3,d1 tst.w d2 beq.s loc_339834 move.w #1,d4 loc_339834: ; ... lsl.w #6,d2 move.l d0,4(a6) lea (a1,d2.w),a3 move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) add.l #$400000,d0 dbf d6,loc_33981E rts ; End of function sub_339810 ; =============== S U B R O U T I N E ======================================= sub_33986A: ; ... lea (off_3397F6).l,a2 moveq #3,d6 moveq #0,d4 lea byte_339946(pc),a1 loc_339878: ; ... moveq #0,d2 move.l (a2)+,d3 loc_33987C: ; ... sub.l d3,d1 bcs.s loc_339884 addq.w #1,d2 bra.s loc_33987C ; --------------------------------------------------------------------------- loc_339884: ; ... add.l d3,d1 tst.w d2 beq.s loc_33988E move.w #1,d4 loc_33988E: ; ... tst.w d4 beq.s loc_3398BE lsl.w #6,d2 lea (a1,d2.w),a3 move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) loc_3398B8: ; ... dbf d6,loc_339878 rts ; --------------------------------------------------------------------------- loc_3398BE: ; ... moveq #$F,d5 loc_3398C0: ; ... move.l #0,(a6) dbf d5,loc_3398C0 bra.s loc_3398B8 ; End of function sub_33986A ; --------------------------------------------------------------------------- move.l #$5FA00003,d0 moveq #0,d1 move.b ($FFFFFEC6).w,d1 bra.s loc_3398E6 ; =============== S U B R O U T I N E ======================================= sub_3398DA: ; ... move.l #$7BA00003,d0 moveq #0,d1 loc_3398E2: move.b ($FFFFFE12).w,d1 loc_3398E6: ; ... lea (byte_3397FE).l,a2 moveq #1,d6 moveq #0,d4 lea byte_339C46(pc),a1 loc_3398F4: ; ... move.l d0,4(a6) moveq #0,d2 move.l (a2)+,d3 loc_3398FC: ; ... sub.l d3,d1 bcs.s loc_339904 addq.w #1,d2 bra.s loc_3398FC ; --------------------------------------------------------------------------- loc_339904: ; ... add.l d3,d1 tst.w d2 beq.s loc_33990E move.w #1,d4 loc_33990E: ; ... tst.w d4 beq.s loc_339934 loc_339912: ; ... lsl.w #5,d2 lea (a1,d2.w),a3 move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) move.l (a3)+,(a6) loc_339928: ; ... add.l #$400000,d0 dbf d6,loc_3398F4 rts ; --------------------------------------------------------------------------- loc_339934: ; ... tst.w d6 beq.s loc_339912 moveq #7,d5 loc_33993A: ; ... move.l #0,(a6) dbf d5,loc_33993A bra.s loc_339928 ; End of function sub_3398DA ; --------------------------------------------------------------------------- byte_339946: dc.b 0, 0, 0, 0, 0, $66, $66, $10, 6, $66; 0 ; ... dc.b $66, $61, 6, $61, $16, $61, 6, $61, 6, $61; 10 dc.b $76, $61, $76, $61, $66, $10, $66, $10, $66, $10; 20 dc.b $66, $10, $66, $10, $66, $10, $66, $66, $66, $10; 30 dc.b 6, $66, $61, 0, 1, $11, $10, 0, 0, 0; 40 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 50 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 6; 60 dc.b $61, 0, 0, $66, $61, 0, 0, 6, $61, 0; 70 dc.b 0, 6, $61, 0, 0, $76, $61, 0, 0, $66; 80 dc.b $10, 0, 0, $66, $10, 0, 0, $66, $10, 0; 90 dc.b 0, $66, $10, 0, 0, $66, $10, 0, 0, $11; 100 dc.b $10, 0, 0, 0, 0, 0, 0, 0, 0, 0; 110 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 120 dc.b 0, 0, 0, $66, $66, $10, 6, $66, $66, $61; 130 dc.b 6, $61, $16, $61, 1, $11, $66, $61, 0, 6; 140 dc.b $66, $10, 7, $66, $10, 0, $76, $61, 0, 0; 150 dc.b $66, $61, 0, 0, $66, $66, $66, $10, $66, $66; 160 dc.b $66, $10, $11, $11, $11, $10, 0, 0, 0, 0; 170 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 180 dc.b 0, 0, 0, 0, 0, 0, 0, $66, $66, $10; 190 dc.b 6, $66, $66, $61, 6, $61, $16, $61, 1, $11; 200 dc.b 6, $61, 0, 6, $66, $10, 0, $66, $61, 0; 210 dc.b 0, $11, $66, $10, $66, $10, $66, $10, $66, $66; 220 dc.b $66, $10, 6, $66, $61, 0, 1, $11, $10, 0; 230 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 240 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 250 dc.b 0, 0, $66, $10, 0, 6, $66, $10, 0, $76; 260 dc.b $66, $10, 0, $66, $66, $10, 6, $61, $66, $10; 270 dc.b $76, $16, $61, 0, $66, $66, $66, $10, $66, $66; 280 dc.b $66, $10, $11, $16, $61, $10, 0, 6, $61, 0; 290 dc.b 0, 1, $11, 0, 0, 0, 0, 0, 0, 0; 300 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 310 dc.b 0, 0, 0, 0, 6, $66, $66, $61, 6, $66; 320 dc.b $66, $61, 6, $61, $11, $11, 6, $61, 0, 0; 330 dc.b $76, $66, $67, $10, $66, $66, $66, $10, $11, $11; 340 dc.b $66, $10, $66, $10, $66, $10, $66, $66, $66, $10; 350 dc.b $16, $66, $61, 0, 1, $11, $10, 0, 0, 0; 360 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 370 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, $66; 380 dc.b $66, $10, 6, $66, $66, $61, 6, $61, $16, $61; 390 dc.b 6, $61, 1, $11, $76, $66, $78, $10, $66, $66; 400 dc.b $67, $10, $66, $11, $66, $10, $66, $10, $66, $10; 410 dc.b $66, $66, $66, $10, 6, $66, $61, 0, 1, $11; 420 dc.b $10, 0, 0, 0, 0, 0, 0, 0, 0, 0; 430 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 440 dc.b 0, 0, 6, $66, $66, $61, 6, $66, $66, $61; 450 dc.b 1, $11, $16, $61, 0, 0, $76, $10, 0, 7; 460 dc.b $66, $10, 0, 6, $61, 0, 0, $66, $10, 0; 470 dc.b 0, $66, $10, 0, 6, $67, $10, 0, 6, $67; 480 dc.b $10, 0, 0, $11, $10, 0, 0, 0, 0, 0; 490 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 500 dc.b 0, 0, 0, 0, 0, 0, 0, $66, $66, $10; 510 dc.b 6, $66, $66, $61, 6, $61, $16, $61, 6, $61; 520 dc.b 6, $61, 0, $66, $66, $10, 6, $66, $61, 0; 530 dc.b $66, $11, $66, $10, $66, $10, $66, $10, $66, $66; 540 dc.b $66, $10, 6, $66, $61, 0, 1, $11, $10, 0; 550 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 560 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 570 dc.b 0, $66, $66, $10, 6, $66, $66, $61, 6, $61; 580 dc.b $16, $61, 6, $61, 6, $61, 6, $66, $66, $61; 590 dc.b 8, $66, $66, $71, 1, $11, $66, $10, $66, $10; 600 dc.b $66, $10, $66, $66, $66, $10, 6, $66, $61, 0; 610 dc.b 1, $11, $10, 0, 0, 0, 0, 0, 0, 0; 620 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 630 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 640 dc.b 0, 0, 0, 6, $61, 0, 0, 6, $61, 0; 650 dc.b 0, 1, $11, 0, 0, 0, 0, 0, 0, 6; 660 dc.b $61, 0, 0, 6, $61, 0, 0, 1, $11, 0; 670 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 680 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 690 dc.b 0, 0, 0, 0, 0, 0, 0, 0, $C,-$34; 700 dc.b -$34,-$3F, $C,-$34,-$34,-$3F, $C,-$3F, $11, $11; 710 dc.b $C,-$3F, 0, 0, $C,-$34,-$34, $10,-$34,-$34; 720 dc.b -$3F, 0,-$34, $11, $11, 0,-$34, $10, 0, 0; 730 dc.b -$34,-$34,-$34, $10,-$34,-$34,-$34, $10, $11, $11; 740 dc.b $11, $10, 0, 0, 0, 0, 0, 0, 0, 0; 750 dc.b 0, 0, 0, 0, 0, 0, 0, 0; 760 byte_339C46: dc.b 0, 0, 0, 0, 0, $66, $66, $10, 6, $61; 0 ; ... dc.b $16, $61, 6, $61, 6, $61, 6, $61, 6, $61; 10 dc.b 6, $61, 6, $61, 0, $66, $66, $10, 0, $11; 20 dc.b $11, 0, 0, 0, 0, 0, 0, 6, $61, 0; 30 dc.b 0, $66, $61, 0, 0, $16, $61, 0, 0, 6; 40 dc.b $61, 0, 0, 6, $61, 0, 0, 6, $61, 0; 50 dc.b 0, 1, $11, 0, 0, 0, 0, 0, 0, $66; 60 dc.b $66, $10, 0, $11, $16, $61, 0, 0, $66, $11; 70 dc.b 0, 6, $61, $10, 0, $66, $11, $10, 6, $66; 80 dc.b $66, $61, 1, $11, $11, $11, 0, 0, 0, 0; 90 dc.b 0, $66, $66, $10, 0, $11, $16, $61, 0, 6; 100 dc.b $66, $10, 0, 1, $16, $61, 6, $61, 6, $61; 110 dc.b 0, $66, $66, $10, 0, $11, $11, 0, 0, 0; 120 dc.b 0, 0, 0, 0, $66, $10, 0, 6, $66, $10; 130 dc.b 0, $61, $66, $10, 6, $61, $66, $10, 6, $66; 140 dc.b $66, $61, 1, $11, $66, $11, 0, 0, $11, $10; 150 dc.b 0, 0, 0, 0, 6, $66, $66, $61, 6, $61; 160 dc.b $11, $11, 6, $66, $66, $10, 1, $11, $16, $61; 170 dc.b 6, $61, 6, $61, 0, $66, $66, $10, 0, $11; 180 dc.b $11, 0, 0, 0, 0, 0, 0, $66, $66, $10; 190 dc.b 6, $61, $11, $10, 6, $66, $66, $10, 6, $61; 200 dc.b $16, $61, 6, $61, 6, $61, 0, $66, $66, $10; 210 dc.b 0, $11, $11, 0, 0, 0, 0, 0, 6, $66; 220 dc.b $66, $61, 1, $11, $16, $61, 0, 0, $66, $10; 230 dc.b 0, 6, $61, 0, 0, $66, $10, 0, 0, $66; 240 dc.b $10, 0, 0, $11, $10, 0, 0, 0, 0, 0; 250 dc.b 0, $66, $66, $10, 6, $61, $16, $61, 0, $66; 260 dc.b $66, $10, 6, $61, $16, $61, 6, $61, 6, $61; 270 dc.b 0, $66, $66, $10, 0, $11, $11, 0, 0, 0; 280 dc.b 0, 0, 0, $66, $66, $10, 6, $61, $16, $61; 290 dc.b 6, $61, 6, $61, 0, $66, $66, $61, 0, $11; 300 dc.b $16, $61, 0, $66, $66, $10, 0, $11, $11, 0; 310 byte_339D86: dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, $66; 0 ; ... dc.b $66, 0, 6, $60, 6, $60, $66, $60, $66, $60; 10 dc.b $66, $66, 6, $60, $66, 0, $66, 0, 6, $66; 20 dc.b $60, 0, 0, 0, 0, 0, 0, 0, 0, 0; 30 dc.b 0, 6, $66, 0, 0, $60, $66, 0, 0, 0; 40 dc.b $66, 0, 0, 6, $60, 0, 0, 6, $60, 0; 50 dc.b 6, $66, $66, 0, 0, 0, 0, 0, 0, 0; 60 dc.b 0, 0, 0, $66, $60, 0, 6, 0, $66, 0; 70 dc.b 0, 0, $66, 0, 0, 6, $60, 0, 0, $66; 80 dc.b 0, 0, 6, $66, $66, 0, 0, 0, 0, 0; 90 dc.b 0, 0, 0, 0, 6, $66, $66, 0, 0, 0; 100 dc.b $66, 0, 0, 6, $60, 0, 0, 0, $66, 0; 110 dc.b 6, 0, $66, 0, 6, $66, $60, 0, 0, 0; 120 dc.b 0, 0, 0, 0, 0, 0, 0, 6, $66, 0; 130 dc.b 0, $60, $66, 0, 6, 0, $60, 0, $66, $66; 140 dc.b $66, $60, 0, 6, $60, 0, 0, $66, $60, 0; 150 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, $66; 160 dc.b $66, 0, 0, $60, 0, 0, 0, $66, $66, 0; 170 dc.b 0, 0, 6, $60, 6, 0, $66, $60, 0, $66; 180 dc.b $66, 0, 0, 0, 0, 0, 0, 0, 0, 0; 190 dc.b 0, 6, $66, 0, 0, $66, 0, 0, 6, $66; 200 dc.b $60, 0, $66, 0, $66, 0, $66, 0, $66, 0; 210 dc.b $66, $66, $60, 0, 0, 0, 0, 0, 0, 0; 220 dc.b 0, 0, 6, $66, $66, 0, 6, 0, $66, 0; 230 dc.b 0, 6, $60, 0, 0, $66, 0, 0, 6, $60; 240 dc.b 0, 0, $66, $60, 0, 0, 0, 0, 0, 0; 250 dc.b 0, 0, 0, 0, 0, $66, $66, 0, 6, $60; 260 dc.b 6, $60, 0, $66, $66, 0, 6, $66, $60, 0; 270 dc.b $66, 0, $66, 0, 6, $66, $60, 0, 0, 0; 280 dc.b 0, 0, 0, 0, 0, 0, 0, $66, $66, 0; 290 dc.b 6, $60, 6, $60, 6, $60, 6, $60, 0, $66; 300 dc.b $66, 0, 0, 0, $66, 0, 6, $66, $60, 0; 310 dc.b 0, 0, 0, 0, 0, 6, 0, 0, 0, $66; 320 dc.b $66, 0, 6, 6, 0, 0, 0, $66, $60, 0; 330 dc.b 0, 6, 6, 0, 6, $66, $60, 0, 0, 6; 340 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 350 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 6, $66; 360 dc.b $66, $60, 0, 0, 0, 0, 0, 0, 0, 0; 370 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 380 dc.b 0, 0, 0, 0, 0, 0, 6, $66, $66, $60; 390 dc.b 0, 0, 0, 0, 6, $66, $66, $60, 0, 0; 400 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 410 dc.b 0, 0, $60, 0, 0, 0, $66, 0, 6, $66; 420 dc.b $66, $60, 6, $66, $66, $60, 0, 0, $66, 0; 430 dc.b 0, 0, $60, 0, 0, 0, 0, 0, 0, 0; 440 dc.b 0, 0, 0, 0, $60, 0, 0, 0, $66, 0; 450 dc.b 6, $66, $66, $60, 6, $66, $66, $60, 0, 0; 460 dc.b $66, 0, 0, 0, $60, 0, 0, 0, 0, 0; 470 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 6, $60; 480 dc.b 6, $60, 6, $60, 6, $60, 0, $60, $66, 0; 490 dc.b 0, $66, $60, 0, 6, $66, 0, 0, $66, $60; 500 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 510 dc.b 6, $66, $66, $60, 0, 0, $66, 0, 0, 6; 520 dc.b $60, 0, 0, $66, 0, 0, 6, $60, 0, 0; 530 dc.b $66, $66, $66, 0, 0, 0, 0, 0, 0, 0; 540 dc.b 0, 0, 0, 0, $66, $60, 0, 6, 6, $60; 550 dc.b 0, $60, 6, $60, 0, $66, $66, $60, 6, $60; 560 dc.b 6, $60, $66, 0, 6, $60, 0, 0, 0, 0; 570 dc.b 0, 0, 0, 0, 0, $66, $66, 0, 0, $60; 580 dc.b 6, $60, 6, $66, $66, 0, 6, $66, $60, 0; 590 dc.b $66, 0, $66, 0, $66, $66, $60, 0, 0, 0; 600 dc.b 0, 0, 0, 0, 0, 0, 0, $66, $66, 0; 610 dc.b 6, $60, 6, $60, 6, $60, 0, 0, $66, 0; 620 dc.b 0, 0, $66, 0, $66, 0, $66, $66, $60, 0; 630 dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, $66; 640 dc.b $66, 0, 0, $66, 6, $60, 6, $60, 6, $60; 650 dc.b 6, $60, 6, $60, $66, 0, $66, 0, $66, $66; 660 dc.b $60, 0, 0, 0, 0, 0, 0, 0, 0, 0; 670 dc.b 0, $66, $66, $60, 0, $66, 0, 0, 6, $60; 680 dc.b 0, 0, 6, $66, $60, 0, $66, 0, 0, 0; 690 dc.b $66, $66, $66, 0, 0, 0, 0, 0, 0, 0; 700 dc.b 0, 0, 0, $66, $66, $60, 6, $66, 0, 0; 710 dc.b 6, $60, 0, 0, 6, $66, $66, 0, $66, $60; 720 dc.b 0, 0, $66, $60, 0, 0; 730 ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR Obj01 DebugMode: ; ... moveq #0,d0 move.b ($FFFFFE08).w,d0 move.w off_33A074(pc,d0.w),d1 jmp off_33A074(pc,d1.w) ; END OF FUNCTION CHUNK FOR Obj01 ; --------------------------------------------------------------------------- off_33A074: dc.w loc_33A078-off_33A074,loc_33A0FA-off_33A074; 0 ; ... ; --------------------------------------------------------------------------- loc_33A078: ; ... addq.b #2,($FFFFFE08).w move.w ($FFFFEECC).w,($FFFFFFCC).w move.w ($FFFFEEC6).w,($FFFFFFCE).w cmp.b #$10,($FFFFFE10).w bne.s loc_33A09C move.w #0,($FFFFEEC8).w move.w #$3FFF,($FFFFEECA).w loc_33A09C: ; ... and.w #$7FF,($FFFFB00C).w and.w #$7FF,($FFFFEE04).w and.w #$7FF,($FFFFEE0C).w clr.b ($FFFFEEBE).w move.b #0,$1A(a0) move.b #0,$1C(a0) cmp.b #$10,($FFFFF600).w bne.s loc_33A0CA moveq #6,d0 bra.s loc_33A0D0 ; --------------------------------------------------------------------------- loc_33A0CA: ; ... moveq #0,d0 move.b ($FFFFFE10).w,d0 loc_33A0D0: ; ... lea (word_33A2FC).l,a2 add.w d0,d0 add.w (a2,d0.w),a2 move.w (a2)+,d6 cmp.b ($FFFFFE06).w,d6 bhi.s loc_33A0EA move.b #0,($FFFFFE06).w loc_33A0EA: ; ... bsr.w sub_33A2DA move.b #$C,($FFFFFE0A).w move.b #1,($FFFFFE0B).w loc_33A0FA: ; ... moveq #6,d0 cmp.b #$10,($FFFFF600).w beq.s loc_33A10A moveq #0,d0 move.b ($FFFFFE10).w,d0 loc_33A10A: ; ... lea (word_33A2FC).l,a2 add.w d0,d0 add.w (a2,d0.w),a2 move.w (a2)+,d6 bsr.w sub_33A122 jmp DisplaySprite ; =============== S U B R O U T I N E ======================================= sub_33A122: ; ... moveq #0,d4 move.w #1,d1 move.b ($FFFFF605).w,d4 and.w #$F,d4 bne.s loc_33A164 move.b ($FFFFF604).w,d0 and.w #$F,d0 bne.s loc_33A14C move.b #$C,($FFFFFE0A).w move.b #$F,($FFFFFE0B).w bra.w loc_33A1C8 ; --------------------------------------------------------------------------- loc_33A14C: ; ... subq.b #1,($FFFFFE0A).w bne.s loc_33A168 move.b #1,($FFFFFE0A).w addq.b #1,($FFFFFE0B).w bne.s loc_33A164 move.b #-1,($FFFFFE0B).w loc_33A164: ; ... move.b ($FFFFF604).w,d4 loc_33A168: ; ... moveq #0,d1 move.b ($FFFFFE0B).w,d1 addq.w #1,d1 swap d1 asr.l #4,d1 move.l $C(a0),d2 move.l 8(a0),d3 btst #0,d4 beq.s loc_33A192 sub.l d1,d2 moveq #0,d0 move.w ($FFFFEECC).w,d0 swap d0 cmp.l d0,d2 bge.s loc_33A192 move.l d0,d2 loc_33A192: ; ... btst #1,d4 beq.s loc_33A1AC add.l d1,d2 moveq #0,d0 move.w ($FFFFEEC6).w,d0 add.w #$DF,d0 swap d0 cmp.l d0,d2 blt.s loc_33A1AC move.l d0,d2 loc_33A1AC: ; ... btst #2,d4 beq.s loc_33A1B8 sub.l d1,d3 bcc.s loc_33A1B8 moveq #0,d3 loc_33A1B8: ; ... btst #3,d4 beq.s loc_33A1C0 add.l d1,d3 loc_33A1C0: ; ... move.l d2,$C(a0) move.l d3,8(a0) loc_33A1C8: ; ... btst #6,($FFFFF604).w beq.s loc_33A200 btst #5,($FFFFF605).w beq.s loc_33A1E4 subq.b #1,($FFFFFE06).w bcc.s loc_33A1FC add.b d6,($FFFFFE06).w bra.s loc_33A1FC ; --------------------------------------------------------------------------- loc_33A1E4: ; ... btst #6,($FFFFF605).w beq.s loc_33A200 addq.b #1,($FFFFFE06).w cmp.b ($FFFFFE06).w,d6 bhi.s loc_33A1FC move.b #0,($FFFFFE06).w loc_33A1FC: ; ... bra.w sub_33A2DA ; --------------------------------------------------------------------------- loc_33A200: ; ... btst #5,($FFFFF605).w beq.s loc_33A244 jsr SingleObjLoad bne.s loc_33A244 move.w 8(a0),8(a1) move.w $C(a0),$C(a1) move.b 4(a0),0(a1) move.b 1(a0),1(a1) move.b 1(a0),$22(a1) and.b #$7F,$22(a1) moveq #0,d0 move.b ($FFFFFE06).w,d0 lsl.w #3,d0 move.b 4(a2,d0.w),$28(a1) rts ; --------------------------------------------------------------------------- loc_33A244: ; ... btst #4,($FFFFF605).w beq.s return_33A2A4 moveq #0,d0 move.w d0,($FFFFFE08).w lea ($FFFFB000).w,a1 move.l #$14A8D6,4(a1) move.w #$780,2(a1) tst.w ($FFFFFFDC).w beq.s loc_33A270 move.w #$3C0,2(a1) loc_33A270: ; ... bsr.s sub_33A2A6 move.b #$13,$16(a1) move.b #9,$17(a1) move.w ($FFFFFFCC).w,($FFFFEECC).w move.w ($FFFFFFCE).w,($FFFFEEC6).w cmp.b #$10,($FFFFF600).w bne.s return_33A2A4 move.b #2,($FFFFB01C).w bset #2,($FFFFB022).w bset #1,($FFFFB022).w return_33A2A4: ; ... rts ; End of function sub_33A122 ; =============== S U B R O U T I N E ======================================= sub_33A2A6: ; ... move.b d0,$1C(a1) move.w d0,$A(a1) move.w d0,$E(a1) move.b d0,$2A(a1) move.b d0,$39(a1) move.w d0,$10(a1) move.w d0,$12(a1) move.w d0,$14(a1) move.b #2,$22(a1) move.b #2,$24(a1) move.b #0,$25(a1) rts ; End of function sub_33A2A6 ; =============== S U B R O U T I N E ======================================= sub_33A2DA: ; ... moveq #0,d0 move.b ($FFFFFE06).w,d0 lsl.w #3,d0 move.l (a2,d0.w),4(a0) move.w 6(a2,d0.w),2(a0) move.b 5(a2,d0.w),$1A(a0) jsr Adjust2PArtPointer2_Useless rts ; End of function sub_33A2DA ; --------------------------------------------------------------------------- word_33A2FC: dc.w $22, $22, $22, $22, $22, $22, $22; 0 ; ... dc.w $22, $22, $22, $22, $22, $22, $22; 7 dc.w $22, $22, $22, 2, $2530, -$718, 0; 14 dc.w $26BC, $2630, -$25C, $400, $680; 21 ; ---------------------------------------------- ; FIX OFFSETS AFTER EXPORTING THE ASM FILE ; BECAUSE IDA SUCKS SHIT ; ---------------------------------------------- LevelArtPointers:dc.l $4295C24 ; ... dc.l $5294E74 dc.l $4299D34 dc.l $6295C24 dc.l $7294E74 dc.l $5299D34 dc.l $8295C24 dc.l $9294E74 dc.l $6299D34 dc.l $A295C24 dc.l $B294E74 dc.l $7299D34 dc.l $C29DB64 dc.l $D29CFD4 dc.l $82A06C4 dc.l $C29DB64 dc.l $D29CFD4 dc.l $82A06C4 dc.l $102C5004 dc.l $112C4074 dc.l $A2C85E4 dc.l $12295C24 dc.l $13294E74 dc.l $B299D34 dc.l $142A3364 dc.l $152A3364 dc.l $C2A3364 dc.l $16295C24 dc.l $17294E74 dc.l $D299D34 dc.l $182A4204 dc.l $192A3364 dc.l $E2A6834 dc.l $1A2A9D74 dc.l $1B2A8D04 dc.l $F2AD454 dc.l $1C2B0894 dc.l $1D2AFFC4 dc.l $102B2CF4 dc.l $1E2B6174 dc.l $1F2B5234 dc.l $112B90F4 dc.l $202B6174 dc.l $212B5234 dc.l $122B90F4 dc.l $222BCC24 dc.l $232BB944 dc.l $132C1434 dc.l $242C5004 dc.l $252C4074 dc.l $142C85E4 ArtLoadCues: dc.w PLC_Main-ArtLoadCues,PLC_Main2-ArtLoadCues,PLC_Main_Water-ArtLoadCues; 0 ; ... dc.w PLC_GameOver-ArtLoadCues,PLC_EHZ-ArtLoadCues,PLC_EHZ2-ArtLoadCues; 3 dc.w PLC_6-ArtLoadCues,PLC_7-ArtLoadCues,PLC_8-ArtLoadCues; 6 dc.w PLC_9-ArtLoadCues,PLC_MZ-ArtLoadCues,PLC_MZ-ArtLoadCues; 9 dc.w PLC_MZ-ArtLoadCues,PLC_MZ2-ArtLoadCues,PLC_WFZ-ArtLoadCues; 12 dc.w PLC_WFZ-ArtLoadCues,PLC_WFZ-ArtLoadCues,PLC_WFZ2-ArtLoadCues; 15 dc.w PLC_HTZ-ArtLoadCues,PLC_HTZ2-ArtLoadCues,PLC_OOZ-ArtLoadCues; 18 dc.w PLC_OOZ-ArtLoadCues,PLC_OOZ-ArtLoadCues,PLC_OOZ-ArtLoadCues; 21 dc.w PLC_OOZ-ArtLoadCues,PLC_OOZ2-ArtLoadCues,PLC_MCZ-ArtLoadCues; 24 dc.w PLC_MCZ2-ArtLoadCues,PLC_CNZ-ArtLoadCues,PLC_CNZ2-ArtLoadCues; 27 dc.w PLC_CPZ-ArtLoadCues,PLC_CPZ2-ArtLoadCues,PLC_DEZ-ArtLoadCues; 30 dc.w PLC_DEZ2-ArtLoadCues,PLC_ARZ-ArtLoadCues,PLC_ARZ2-ArtLoadCues; 33 dc.w PLC_SCZ-ArtLoadCues,PLC_SCZ2-ArtLoadCues,PLC_Results-ArtLoadCues; 36 dc.w PLC_Signpost-ArtLoadCues,PLC_CPZBoss-ArtLoadCues; 39 dc.w PLC_EHZBoss-ArtLoadCues,PLC_HTZBoss-ArtLoadCues,PLC_ARZBoss-ArtLoadCues; 41 dc.w PLC_MCZBoss-ArtLoadCues,PLC_CNZBoss-ArtLoadCues,PLC_MZBoss-ArtLoadCues; 44 dc.w PLC_OOZBoss-ArtLoadCues,PLC_BossExplosion-ArtLoadCues; 47 dc.w PLC_FinalBoss-ArtLoadCues,PLC_EHZAnimals-ArtLoadCues; 49 dc.w PLC_MCZAnimals-ArtLoadCues,PLC_HTZMZWFZAnimals-ArtLoadCues; 51 dc.w PLC_DEZAnimals-ArtLoadCues,PLC_HPZAnimals-ArtLoadCues; 53 dc.w PLC_OOZAnimals-ArtLoadCues,PLC_SCZAnimals-ArtLoadCues; 55 dc.w PLC_CNZAnimals-ArtLoadCues,PLC_CPZAnimals-ArtLoadCues; 57 dc.w PLC_ARZAnimals-ArtLoadCues,PLC_SpecialStage-ArtLoadCues; 59 dc.w PLC_SSBombs-ArtLoadCues,PLC_WFZBoss-ArtLoadCues,PLC_Tornado-ArtLoadCues; 61 dc.w PLC_EggCapsule-ArtLoadCues,PLC_NormalExplosion-ArtLoadCues; 64 dc.w PLC_TailsResults-ArtLoadCues ; 66 PLC_Main: dc.w 3 ; ... dc.l S2_ArtNem_HUD dc.w $D940 dc.l ArtNem_KTELife dc.w $FA80 dc.l S2_ArtNem_Ring dc.w $D780 dc.l S2_ArtNem_Numbers dc.w $9580 PLC_Main2: dc.w 3 ; ... dc.l S2_ArtNem_Checkpoint dc.w $8F80 dc.l S2_ArtNem_Powerups dc.w $D000 dc.l ArtNem_MonitorIconsMod dc.w $D580 dc.l ArtNem_InvincibilityShield dc.w $97C0 PLC_Main_Water: dc.w 2 ; ... dc.l S2_ArtNem_Explosion dc.w $B480 dc.l S2_ArtNem_SuperSonic_Stars dc.w $BE40 dc.l S2_ArtNem_Bubbles dc.w $BD00 PLC_GameOver: dc.w 0 ; ... dc.l S2_ArtNem_Game_Over dc.w $9BC0 PLC_EHZ: dc.w 5 ; ... dc.l S2_ArtNem_Waterfall dc.w $73C0 dc.l S2_ArtNem_EHZ_Bridge dc.w $76C0 dc.l S2_ArtNem_Buzzer_Fireball dc.w $77C0 dc.l S2_ArtNem_Buzzer dc.w $7A40 dc.l S2_ArtNem_Coconuts dc.w $7DC0 dc.l S2_ArtNem_Masher dc.w $8280 PLC_EHZ2: dc.w 3 ; ... dc.l S2_ArtNem_Spikes dc.w $8680 dc.l S2_ArtNem_DignlSpring dc.w $8780 dc.l S2_ArtNem_VrtclSpring dc.w $8B80 dc.l S2_ArtNem_HrzntlSpring dc.w $8E00 PLC_6: dc.w 0 ; ... dc.l S2_ArtNem_MilesLife dc.w $DE80 PLC_7: dc.w 0 ; ... dc.l S2_ArtNem_MilesLife dc.w $FA80 PLC_8: dc.w 0 ; ... dc.l S2_ArtNem_TailsLife dc.w $DE80 PLC_9: dc.w 0 ; ... dc.l S2_ArtNem_TailsLife dc.w $FA80 PLC_MZ: dc.w 8 ; ... dc.l S2_ArtNem_MtzWheel dc.w $6F00 dc.l S2_ArtNem_MtzWheelIndent dc.w $7E00 dc.l S2_ArtNem_LavaCup dc.w $7F20 dc.l S2_ArtNem_BoltEnd_Rope dc.w $7FA0 dc.l S2_ArtNem_MtzSteam dc.w $80A0 dc.l S2_ArtNem_MtzSpikeBlock dc.w $8280 dc.l S2_ArtNem_MtzSpike dc.w $8380 dc.l S2_ArtNem_Crabmeat dc.w $6380 dc.l S2_ArtNem_MtzSupernova dc.w $6D00 PLC_MZ2: dc.w 8 ; ... dc.l S2_ArtNem_Button dc.w $8480 dc.l S2_ArtNem_Spikes dc.w $8680 dc.l S2_ArtNem_MtzMantis dc.w $8780 dc.l S2_ArtNem_VrtclSpring dc.w $8B80 dc.l S2_ArtNem_HrzntlSpring dc.w $8E00 dc.l S2_ArtNem_MtzAsstBlocks dc.w $A000 dc.l S2_ArtNem_MtzLavaBubble dc.w $A6C0 dc.l S2_ArtNem_MtzCog dc.w $ABE0 dc.l S2_ArtNem_MtzUnkBlocks dc.w $AD60 PLC_WFZ: dc.w 9 ; ... dc.l S2_ArtNem_Tornado dc.w $A000 dc.l S2_ArtNem_Clouds dc.w $A9E0 dc.l S2_ArtNem_WfzVrtclPrpllr dc.w $AC20 dc.l S2_ArtNem_WfzHrzntlPrpllr dc.w $79A0 dc.l S2_ArtNem_Balkrie dc.w $ACA0 dc.l S2_ArtNem_BreakPanels dc.w $9180 dc.l S2_ArtNem_WfzScratch dc.w $6F20 dc.l S2_ArtNem_WfzTiltPlatforms dc.w $7260 dc.l S2_ArtNem_Tornado dc.w $A000 dc.l S2_ArtNem_Clouds dc.w $A9E0 PLC_WFZ2: dc.w $D ; ... dc.l S2_ArtNem_WfzVrtclPrpllr dc.w $AC20 dc.l S2_ArtNem_WfzHrzntlPrpllr dc.w $79A0 dc.l S2_ArtNem_VrtclLazer dc.w $73E0 dc.l S2_ArtNem_WfzWallTurret dc.w $7560 dc.l S2_ArtNem_WfzHrzntlLazer dc.w $7860 dc.l S2_ArtNem_ConveyorBeltWheel dc.w $7D40 dc.l S2_ArtNem_WfzHook dc.w $7F40 dc.l S2_ArtNem_WfzThrust dc.w $8CA0 dc.l S2_ArtNem_WfzBeltPlatform dc.w $81C0 dc.l S2_ArtNem_WfzGunPlatform dc.w $8340 dc.l S2_ArtNem_WfzUnusedBadnik dc.w $8A00 dc.l S2_ArtNem_WfzLaunchCatapult dc.w $8B80 dc.l S2_ArtNem_WfzSwitch dc.w $8C20 dc.l S2_ArtNem_WfzFloatingPlatform dc.w $8DA0 PLC_HTZ: dc.w 9 ; ... dc.l S2_ArtNem_Buzzer_Fireball dc.w $73C0 dc.l S2_ArtNem_HtzRock dc.w $7640 dc.l S2_ArtNem_HtzSeeSaw dc.w $78C0 dc.l S2_ArtNem_Sol dc.w $7BC0 dc.l S2_ArtNem_Rexon dc.w $6FC0 dc.l S2_ArtNem_Spiker dc.w $A400 dc.l S2_ArtNem_Spikes dc.w $8680 dc.l S2_ArtNem_DignlSpring dc.w $8780 dc.l S2_ArtNem_VrtclSpring dc.w $8B80 dc.l S2_ArtNem_HrzntlSpring dc.w $8E00 PLC_HTZ2: dc.w 2 ; ... dc.l S2_ArtNem_HtzZipline dc.w $7CC0 dc.l S2_ArtNem_HtzFireball dc.w $82C0 dc.l S2_ArtNem_HtzValveBarrier dc.w $84C0 PLC_OOZ: dc.w 8 ; ... dc.l S2_ArtNem_OOZBurn dc.w $5C40 dc.l S2_ArtNem_OOZElevator dc.w $5E80 dc.l S2_ArtNem_SpikyThing dc.w $6180 dc.l S2_ArtNem_BurnerLid dc.w $6580 dc.l S2_ArtNem_StripedBlocksVert dc.w $6640 dc.l S2_ArtNem_Oilfall dc.w $66C0 dc.l S2_ArtNem_Oilfall2 dc.w $68C0 dc.l S2_ArtNem_BallThing dc.w $6A80 dc.l S2_ArtNem_LaunchBall dc.w $6D00 PLC_OOZ2: dc.w $B ; ... dc.l S2_ArtNem_OOZPlatform dc.w $73A0 dc.l S2_ArtNem_PushSpring dc.w $78A0 dc.l S2_ArtNem_OOZSwingPlat dc.w $7C60 dc.l S2_ArtNem_StripedBlocksHoriz dc.w $7FE0 dc.l S2_ArtNem_OOZFanHoriz dc.w $8060 dc.l S2_ArtNem_Button dc.w $8480 dc.l S2_ArtNem_Spikes dc.w $8680 dc.l S2_ArtNem_DignlSpring dc.w $8780 dc.l S2_ArtNem_VrtclSpring dc.w $8B80 dc.l S2_ArtNem_HrzntlSpring dc.w $8E00 dc.l S2_ArtNem_Aquis dc.w $A000 dc.l S2_ArtNem_Octus dc.w $A700 PLC_MCZ: dc.w 5 ; ... dc.l S2_ArtNem_Crate dc.w $7A80 dc.l S2_ArtNem_MCZCollapsePlat dc.w $7E80 dc.l S2_ArtNem_VineSwitch dc.w $81C0 dc.l S2_ArtNem_VinePulley dc.w $83C0 dc.l S2_ArtNem_Flasher dc.w $7500 dc.l S2_ArtNem_Crawlton dc.w $7800 PLC_MCZ2: dc.w 5 ; ... dc.l S2_ArtNem_HorizSpike dc.w $8580 dc.l S2_ArtNem_Spikes dc.w $8680 dc.l S2_ArtNem_MCZGateLog dc.w $8780 dc.l S2_ArtNem_LeverSpring dc.w $8800 dc.l S2_ArtNem_VrtclSpring dc.w $8B80 dc.l S2_ArtNem_HrzntlSpring dc.w $8E00 PLC_CNZ: dc.w 9 ; ... dc.l S2_ArtNem_Crawl dc.w $6800 dc.l S2_ArtNem_BigMovingBlock dc.w $6D80 dc.l S2_ArtNem_CNZSnake dc.w $6F80 dc.l S2_ArtNem_CNZBonusSpike dc.w $7000 dc.l S2_ArtNem_CNZElevator dc.w $7080 dc.l S2_ArtNem_CNZCage dc.w $7100 dc.l S2_ArtNem_CNZHexbumper dc.w $7280 dc.l S2_ArtNem_CNZRoundBumper dc.w $7340 dc.l S2_ArtNem_CNZFlipper dc.w $7640 dc.l S2_ArtNem_CNZMiniBumper dc.w $7CC0 PLC_CNZ2: dc.w 5 ; ... dc.l S2_ArtNem_CNZDiagPlunger dc.w $8040 dc.l S2_ArtNem_CNZVertPlunger dc.w $8440 dc.l S2_ArtNem_Spikes dc.w $8680 dc.l S2_ArtNem_DignlSpring dc.w $8780 dc.l S2_ArtNem_VrtclSpring dc.w $8B80 dc.l S2_ArtNem_HrzntlSpring dc.w $8E00 PLC_CPZ: dc.w 8 ; ... dc.l S2_ArtNem_CPZMetalThings dc.w $6E60 dc.l S2_ArtNem_ConstructionStripes dc.w $7280 dc.l S2_ArtNem_CPZBooster dc.w $7380 dc.l S2_ArtNem_CPZElevator dc.w $7400 dc.l S2_ArtNem_CPZAnimatedBits dc.w $7600 dc.l S2_ArtNem_CPZTubeSpring dc.w $7C00 dc.l S2_ArtNem_WaterSurface dc.w $8000 dc.l S2_ArtNem_CPZStairBlock dc.w $8300 dc.l S2_ArtNem_CPZMetalBlock dc.w $8600 PLC_CPZ2: dc.w 6 ; ... dc.l S2_ArtNem_Grabber dc.w $A000 dc.l S2_ArtNem_Spiny dc.w $A5A0 dc.l S2_ArtNem_Spikes dc.w $8680 dc.l S2_ArtNem_CPZDroplet dc.w $8780 dc.l S2_ArtNem_LeverSpring dc.w $8800 dc.l S2_ArtNem_VrtclSpring dc.w $8B80 dc.l S2_ArtNem_HrzntlSpring dc.w $8E00 PLC_DEZ: dc.w 0 ; ... dc.l S2_ArtNem_ConstructionStripes dc.w $6500 PLC_DEZ2: dc.w 4 ; ... dc.l S2_ArtNem_SilverSonic dc.w $7000 dc.l S2_ArtNem_DEZWindow dc.w $6F00 dc.l S2_ArtNem_RobotnikRunning dc.w $A300 dc.l S2_ArtNem_RobotnikUpper dc.w $A000 dc.l S2_ArtNem_RobotnikLower dc.w $AC80 PLC_ARZ: dc.w 3 ; ... dc.l S2_ArtNem_ARZBarrierThing dc.w $7F00 dc.l S2_ArtNem_WaterSurface2 dc.w $8000 dc.l S2_ArtNem_Leaves dc.w $8200 dc.l S2_ArtNem_ArrowAndShooter dc.w $82E0 PLC_ARZ2: dc.w 7 ; ... dc.l S2_ArtNem_ChopChop dc.w $A760 dc.l S2_ArtNem_Whisp dc.w $A000 dc.l S2_ArtNem_Grounder dc.w $A120 dc.l S2_ArtNem_BigBubbles dc.w $AB60 dc.l S2_ArtNem_Spikes dc.w $8680 dc.l S2_ArtNem_LeverSpring dc.w $8800 dc.l S2_ArtNem_VrtclSpring dc.w $8B80 dc.l S2_ArtNem_HrzntlSpring dc.w $8E00 PLC_SCZ: dc.w 0 ; ... dc.l S2_ArtNem_Tornado dc.w $A000 PLC_SCZ2: dc.w 5 ; ... dc.l S2_ArtNem_Clouds dc.w $A9E0 dc.l S2_ArtNem_WfzVrtclPrpllr dc.w $AC20 dc.l S2_ArtNem_WfzHrzntlPrpllr dc.w $79A0 dc.l S2_ArtNem_Balkrie dc.w $ACA0 dc.l S2_ArtNem_Turtloid dc.w $7140 dc.l S2_ArtNem_Nebula dc.w $6DC0 PLC_Results: dc.w 3 ; ... dc.l S2_ArtNem_TitleCard dc.w $B000 dc.l S2_ArtNem_ResultsText dc.w $B600 dc.l ArtNem_MiniKnuckles dc.w $BE80 dc.l S2_ArtNem_Perfect dc.w $A800 PLC_Signpost: dc.w 1 ; ... dc.l S2_ArtNem_Signpost dc.w $8680 dc.l ArtNem_Signpost_KnucklesPatch dc.w $8AC0 PLC_CPZBoss: dc.w 4 ; ... dc.l S2_ArtNem_Eggpod dc.w $8400 dc.l S2_ArtNem_CPZBoss dc.w $A000 dc.l S2_ArtNem_EggpodJets dc.w $8300 dc.l S2_ArtNem_BossSmoke dc.w $AE00 dc.l S2_ArtNem_FieryExplosion dc.w $B000 PLC_EHZBoss: dc.w 3 ; ... dc.l S2_ArtNem_Eggpod dc.w $7400 dc.l S2_ArtNem_EHZBoss dc.w $8000 dc.l S2_ArtNem_EggChoppers dc.w $AD80 dc.l S2_ArtNem_FieryExplosion dc.w $B000 PLC_HTZBoss: dc.w 3 ; ... dc.l S2_ArtNem_Eggpod dc.w $7820 dc.l S2_ArtNem_HTZBoss dc.w $8420 dc.l S2_ArtNem_FieryExplosion dc.w $B000 dc.l S2_ArtNem_BossSmoke dc.w $BC80 PLC_ARZBoss: dc.w 2 ; ... dc.l S2_ArtNem_Eggpod dc.w $A000 dc.l S2_ArtNem_ARZBoss dc.w $7C00 dc.l S2_ArtNem_FieryExplosion dc.w $B000 PLC_MCZBoss: dc.w 2 ; ... dc.l S2_ArtNem_Eggpod dc.w $A000 dc.l S2_ArtNem_MCZBoss dc.w $7800 dc.l S2_ArtNem_FieryExplosion dc.w $B000 PLC_CNZBoss: dc.w 2 ; ... dc.l S2_ArtNem_Eggpod dc.w $A000 dc.l S2_ArtNem_CNZBoss dc.w $80E0 dc.l S2_ArtNem_FieryExplosion dc.w $B000 PLC_MZBoss: dc.w 3 ; ... dc.l S2_ArtNem_Eggpod dc.w $A000 dc.l S2_ArtNem_MTZBoss dc.w $6F80 dc.l S2_ArtNem_EggpodJets dc.w $AC00 dc.l S2_ArtNem_FieryExplosion dc.w $B000 PLC_OOZBoss: dc.w 1 ; ... dc.l S2_ArtNem_OOZBoss dc.w $7180 dc.l S2_ArtNem_FieryExplosion dc.w $B000 PLC_BossExplosion:dc.w 0 ; ... dc.l S2_ArtNem_FieryExplosion dc.w $B000 PLC_FinalBoss: dc.w 0 ; ... dc.l S2_ArtNem_DEZBoss dc.w $6600 PLC_EHZAnimals: dc.w 1 ; ... dc.l S2_ArtNem_Squirrel dc.w $B000 dc.l S2_ArtNem_Bird dc.w $B280 PLC_MCZAnimals: dc.w 1 ; ... dc.l S2_ArtNem_Mouse dc.w $B000 dc.l S2_ArtNem_Chicken dc.w $B280 PLC_HTZMZWFZAnimals:dc.w 1 ; ... dc.l S2_ArtNem_Beaver dc.w $B000 dc.l S2_ArtNem_Eagle dc.w $B280 PLC_DEZAnimals: dc.w 1 ; ... dc.l S2_ArtNem_Pig dc.w $B000 dc.l S2_ArtNem_Chicken dc.w $B280 PLC_HPZAnimals: dc.w 1 ; ... dc.l S2_ArtNem_Mouse dc.w $B000 dc.l S2_ArtNem_Seal dc.w $B280 PLC_OOZAnimals: dc.w 1 ; ... dc.l S2_ArtNem_Penguin dc.w $B000 dc.l S2_ArtNem_Seal dc.w $B280 PLC_SCZAnimals: dc.w 1 ; ... dc.l S2_ArtNem_Turtle dc.w $B000 dc.l S2_ArtNem_Chicken dc.w $B280 PLC_CNZAnimals: dc.w 1 ; ... dc.l S2_ArtNem_Bear dc.w $B000 dc.l S2_ArtNem_Bird dc.w $B280 PLC_CPZAnimals: dc.w 1 ; ... dc.l S2_ArtNem_Rabbit dc.w $B000 dc.l S2_ArtNem_Eagle dc.w $B280 PLC_ARZAnimals: dc.w 1 ; ... dc.l S2_ArtNem_Penguin dc.w $B000 dc.l S2_ArtNem_Bird dc.w $B280 PLC_SpecialStage:dc.w $C ; ... dc.l S2_ArtNem_SpecialEmerald dc.w $2E80 dc.l S2_ArtNem_SpecialMessages dc.w $3440 dc.l S2_MapEng_SpecialHUD ; Misleading name - This is nemesis art dc.w $3F40 dc.l S2_ArtNem_SpecialFlatShadow dc.w $4780 dc.l S2_ArtNem_SpecialDiagShadow dc.w $4C40 dc.l S2_ArtNem_SpecialSideShadow dc.w $5380 dc.l S2_ArtNem_SpecialExplosion dc.w $56A0 dc.l S2_ArtNem_SpecialRings dc.w $6440 dc.l S2_ArtNem_SpecialStart dc.w $7140 dc.l S2_ArtNem_SpecialPlayerVSPlayer dc.w $7BE0 dc.l S2_ArtNem_SpecialBack dc.w $E000 dc.l S2_ArtNem_SpecialStars dc.w $EFE0 dc.l S2_ArtNem_SpecialTailsText dc.w $F480 PLC_SSBombs: dc.w 0 ; ... dc.l S2_ArtNem_SpecialBomb dc.w $7140 PLC_WFZBoss: dc.w 4 ; ... dc.l S2_ArtNem_WFZBoss dc.w $6F20 dc.l S2_ArtNem_RobotnikRunning dc.w $A300 dc.l S2_ArtNem_RobotnikUpper dc.w $A000 dc.l S2_ArtNem_RobotnikLower dc.w $AC80 dc.l S2_ArtNem_FieryExplosion dc.w $B000 PLC_Tornado: dc.w 2 ; ... dc.l S2_ArtNem_Tornado dc.w $A000 dc.l S2_ArtNem_TornadoThruster dc.w $AC20 dc.l S2_ArtNem_Clouds dc.w $A9E0 PLC_EggCapsule: dc.w 0 ; ... dc.l S2_ArtNem_Capsule dc.w $D000 PLC_NormalExplosion:dc.w 0 ; ... dc.l S2_ArtNem_Explosion dc.w $B480 PLC_TailsResults:dc.w 3 ; ... dc.l S2_ArtNem_TitleCard dc.w $B000 dc.l S2_ArtNem_ResultsText dc.w $B600 dc.l S2_ArtNem_MiniTails dc.w $BE80 dc.l S2_ArtNem_Perfect dc.w $A800 ArtNem_MiniKnuckles:dc.l -$7FF37FFD, $140225, $18340545, $1C563C76, $3A810403; 0 ; ... dc.l $163D8205, $1483051B,-$7BF9C47B, $5158604, $418FB87; 5 dc.l $4088804, $B890406,-$75FAE675, $5128C05, $1318FA8D; 10 dc.l $51A177C,-$70FBF801,-$145A0369,-$1B0EB0AA,-$7835E0D7; 15 dc.l -$1C872CFA,-$4C15CF63, $15490C7E, $61A4ADE2, $437B458F; 20 dc.l -$337BF317, $18638382,-$682A891A, $5E9398BF,-$38E3145A; 25 dc.l $2B82971F, $3F4BDEEB, $257F93EB, -$98BABDD,-$26DFB3B0; 30 dc.l $21271021, $18A8FB0C,-$64EA3B21, $CF92329,-$740D9B15; 35 dc.l $3CC76FFA,-$3F8065AD,-$70428163, $3F5A2E2C, $495AE692; 40 dc.l $243EEF3A, $2D895B9E, $1359B859, $70EAF4BD, $17CCF751; 45 dc.l -$C170065,-$2D01B40E, $78A7AB43,-$1AF06B0F,-$43967CA7; 50 dc.l -$AE7B176,-$5B79C0D0,-$2DA90EDF,-$425D381A, $4206748C; 55 dc.l $31C1C14B,-$15448CD1, $49CC5FE3,-$718A2CEB,-$3EB47061; 60 dc.l -$5A108A6E,-$40360A05, $3A2A11EC,-$6FD9D7F0,-$6C77EF74; 65 dc.l $547D864D,-$751D907A, $7C9194C5, -$6CD8A62, $63B7FD60; 70 dc.l $3FCD29C7,-$2140B161,-$52E8E9DC,-$528CB6EE, $1F779D16; 75 dc.l -$3B5230F7,-$532181EC,-$7A697151, $4A8D0F99,-$13978000; 80 ArtNem_KTELife: dc.l $C8005, $17151325, $18363948, -$5AAED98, -$48CFE7F; 0 ; ... dc.l $3001637, $2638763B,-$7DFBF5EA, $36830404, $1516263D; 5 dc.l -$7AFBF9EA, $3C860405, $1407277C, $363A8705, $1A8B0632; 10 dc.l -$71F9CCEC, $8FFEFFE,-$22813019, -$F200595, $66B78A8D; 15 dc.l $6DB5EB25, $7E2348C8,-$36A077BA, $4A64CBF3, $4C94C959; 20 dc.l $7E2ADB32, $56549FA2, $4FD93EC8, -$A0D5221, $7FF6F7F8; 25 dc.l -$205A483C, -$C0EB372,-$2994C144, -$8B1E53D, $4E34D419; 30 dc.l $7FB593FE,-$54836805, $74A9FC24, -$149201A,-$244C87E9; 35 dc.l -$7E87EFD9,-$2F38BCF0, $204E05E0, $5F79F04C,-$6B825605; 40 dc.l $5928903F, $5FBE945D,-$3B2111DA, -$81D8ED8, $1F5B9335; 45 dc.l $1C851F4A, $24147DA8,-$691867E4,-$1838C674, $3851870A; 50 dc.l $31C66259,-$76FDB6DC,-$6C031EC4, -$7CC17A, $17F638CC; 55 dc.l $4BF9C27F,-$2EDB6DB7 ; 60 dc.b $98 ; ˜ dc.b 0 ArtNem_InvincibilityShield:dc.l -$7FBD7FFB, $16151C25, $1A340A45, $18551365, $17720081; 0 ; ... dc.l $408163A, $27768605, $1B177987, $3021778, $27778803; 5 dc.l $3177A8E, $51938F7,-$70FAEDE8, -$900F447,-$46464647; 10 dc.l -$456B1A3A, $6A471EA4, $6BF71FB, -$4815D68, $6BF7FCF6; 15 dc.l -$509F2893, $75889C13,-$7F400275,-$464644B6,-$625AB12E; 20 dc.l -$58968DD9, $1C769168, $38ED2B40, $1AF5E3DE,-$20575851; 25 dc.l -$20240A0B, $2D7EC79D, $5741AFD7, $6BF3D8CC, -$DB0DE81; 30 dc.l -$3E88C8E,-$3C6BAC6C, $53945394, $7333CF1C,-$5F49B1C7; 35 dc.l $45B2069A, -$C702B82, -$201400A, $32ED51AF, $7E7E7ABF; 40 dc.l $3C00004F, -$FA2B2C, $61466946, $69466946, $4A5190A5; 45 dc.l $19030B7E,-$40809101,-$4EA2421D, -$A2A7000, $2FFF82; 50 dc.l -$4610C73,-$18E431C9,-$6390D9C9,-$6F390DFC, -$8057085; 55 dc.l $7E9BDF7F,-$51537FEB, -$502849E, $53913905, -$120000; 60 dc.l $5DCDCD,-$6C8C9B27, $52B32A41, $675200E7, -$DC48000; 65 dc.l $5DE3D57A,-$3C385F51, $6C4B1ED8,-$6AD4B56C,-$28DA5ACB; 70 dc.l $344D04D0, $73F, -$FFE0010,-$48121222,-$70000000; 75 dc.l $1A574, $17,-$220A0000, $5D4D42,-$3D7ACC00; 80 dc.l $5DDE5,-$795EC2CB, $9E25760, $5DDE5, $370F4D66; 85 dc.l -$26B1329A,-$26B0B1E4,-$1A8A0000, $71535B8,-$5948E8C0; 90 dc.l $3BCAF, $2BC6D3A,-$7258B58F, $795D8000, $4D18F1CE; 95 dc.l -$4129105,-$1270FF80, $105E041E, $31DB7DED,-$24820620; 100 dc.l -$3D63FA30, 7, -$A089015,-$14000000, $38A; 105 dc.l -$1CB0A22,-$2D3BD3D2,-$56548A06, $6CF6B7E9,-$4C256549; 110 dc.l $54BA9C2A,-$10968C3A,-$60EFFFFF,-$7BFFA200,-$3D1C2872; 115 dc.l $4ADDE944, -$5AA2A6D,-$51260C32,-$260C9154,-$628B4F5D; 120 dc.l $12B77D3D, $78BA0B40, $1740000, $5FCFF, $5FCFF5C0; 125 dc.l 0 ; 130 ArtNem_Signpost_KnucklesPatch:dc.l -$7FE77FFD, $1130225, $13351645, $17551166, $37751581; 0 ; ... dc.l $3001514, $263958FA,-$7DF8887D, $4071778,-$7AF9C57A; 5 dc.l $4061633, $27798706, $36880510,-$76FAE7E8, -$775F9C8; 10 dc.l -$74F9CD74, $7768D07, $7B8E0512,-$70FAE5E9, $7AFFAD57; 15 dc.l -$A7482A0, $7AFDB4F1, -$4AA5539, $55AD6B7E,-$38B9F84D; 20 dc.l -$372DA20B, $42083C9D, $584C5447, $47F6245B,-$2DED0A9F; 25 dc.l $3FAF34C, $FD7DF95, $21BC3F3B, $5FCECF11, -$A04307F; 30 dc.l $2FD891FD,-$7A0AA005, $7FC7FEDF, -$A529545,-$249BC444; 35 dc.l -$209BE05, $294C6848,-$76737A1B, $11213E4C,-$6F48D82B; 40 dc.l $3F7E44B4, $2F43FAF3, $43FBFA2D,-$72D2FEC8, $44427FB1; 45 dc.l -$48C808E8, $761FCFD8, $1FEF43FD, $3FC1C7E5,-$11DB8073; 50 dc.l -$56E05036, -$1240D75, -$B421C4C, $768ECD1C,-$1D044113; 55 dc.l $5DC6F96F, $4B83C020,-$73736064,-$5BDA7DF4,-$7EFA30FF; 60 dc.l $40710EFF,-$637E7910,-$43C0DBBB,-$79DF867E, $1FA985D8; 65 dc.l -$7864B00A,-$62048195, -$62C0031,-$1A0E301C,-$734D0E2F; 70 dc.l $6EB29F98,-$18E3101A, -$638C402,-$2533A5C4,-$316064F8; 75 dc.l $1EB43223, $2FC2032D, $CB4260C,-$74B583AD, $608496C8; 80 dc.l $441EC843,-$40909E85, $7A7EF04F, -$C68E068,-$4F07E908; 85 dc.l -$33EF97C, $40404040,-$73F1FC79, $5FD31C63,-$738F1F0D; 90 dc.l -$65CB02C, $7F0FFA54, $2C733D3F,-$6B385335,-$69C2CE8B; 95 dc.l -$6303E335, $1FE31F2B,-$3633D965, $5134DA8B, $662E8109; 100 dc.l -$27EE6E95,-$147D2A9E, $E88B8CA, $396FF111, $70456B80; 105 dc.l -$7D3BA37C, $2CC4273B, $304E9827, $4E0FE6BF, $53C1CBE9; 110 dc.l -$2E00E6, -$724359D,-$295738CF, $96860E6, -$FF7E9F5; 115 dc.l $4689E6D4,-$57499D4F,-$311EF74C, $416B3A6B, $78044FF4; 120 dc.l $62DFB317, -$E442629,-$77072213,-$2912E8C3, $21663820; 125 dc.l -$154FBD1,-$1F679C05 ; 130 dc.w $80 ArtNem_MonitorIconsMod: dc.l -$7FF77FFD, $1251C35, $1E440D66, $3E751D81, $3038604; 0 ; ... dc.l $B87040C,-$77FCFF77, $3028F03, $4640AFF, -$71AF53; 5 dc.l $AF8138F,-$7330FCF5,-$1C103020, $617E6668, $4E3D0AC5; 10 dc.l $6576B285,-$5E51CBCA, $17E6611F, $3EFCF8CC, $23D0BE38; 15 dc.l -$2F1A5E4C, $2B3B943F, $7F7F9FD9,-$574D4754,-$25D50E69; 20 dc.l -$7AA1CD0D,-$753251DE,-$3527B95E, $3BD1595D,-$53028182; 25 dc.l -$438D97BB, $E0450FC,-$7A5CC298,-$72E0B018, $22879143; 30 dc.l $67C3FA14 ; 35 dc.w $2B00 byte_33B1F0: dc.b $16, $66, $66, $66, $16, $66, $66, $66, $16, $66; 0 ; ... dc.b $66, $66, $16, $66, $66, $66, $16, $66, $66, $66; 10 dc.b $16, $66, $66, $66, $16, $66, $66, $68, $16, $66; 20 dc.b $66, $11, $16, $66, $61, $33, $16; 30 dc.b $66,-$7D, $33, $16, $68, $13, $33, $16, $61, $33; 0 dc.b $33, $16, $61, $13, $33, $16, $68, $17, $33, $16; 10 dc.b $66, $16, $33, $16, $66, $16,-$5D, $16, $66, $16; 20 dc.b $61, $11, $11, $16, $61, $11, $11, $11, $11, $16; 30 dc.b $11, $11, $1B, $16, $61, $11,-$46, $16, $68,-$46; 40 dc.b -$56, $16, $66, $1B,-$56, $16, $66, $61,-$46, $16; 50 dc.b $66, $66, $11, $16, $66, $66, $68, $16, $66, $66; 60 dc.b $66, $16, $66, $66, $66, $16, $66, $66, $66, $16; 70 dc.b $66, $66, $66, $16, $66, $66, $66, $16, $66, $66; 80 dc.b $66, $66, $66, $66, $66, $66, $66, $66, $66, $66; 90 dc.b $66, $66, $66, $66, $66, $66,-$7F, $66, $68, $11; 100 dc.b $23, $68, $12, $35, $5A, $12, $33, $55, $35, $33; 110 dc.b $33, $33, $33, $33, $33, $33, $33, $33, $33, $33; 120 dc.b $33, $33, $33, $33, $57, $33, $33, $35, $33, $33; 130 dc.b $33, $33, $3A, $33, $33, $33,-$59, $33, $33,-$59; 140 dc.b $68, $33, $33, $66, $68, $33,-$5A, $66, $68,-$5A; 150 dc.b $66, $66, $68,-$7A, $66, $66, $66,-$56,-$78, $66; 160 dc.b $66,-$56,-$56,-$56,-$56,-$56,-$56,-$56,-$56,-$56; 170 dc.b -$56,-$56,-$56,-$56,-$56,-$56,-$56,-$45,-$56,-$56; 180 dc.b -$55, $11,-$45,-$45,-$45, $68,-$7F, $11, $11, $66; 190 dc.b $66, $66, $66, $66, $66, $66, $66, $66, $66, $66; 200 dc.b $66, $66, $66, $66, $66, $66, $66, $66, $66, $66; 210 dc.b $66, $66, $66, $66, $66, $66, $66, $68,-$78,-$78; 220 dc.b $66, $12, $21, $11,-$7A, $55, $53, $32, $11, $55; 230 dc.b $33, $33, $32, $33, $33, $33, $33, $33, $33, $33; 240 dc.b $33, $33, $33, $33, $33, $33, $33, $33, $33, $53; 250 dc.b $33, $33, $33, $33, $33, $33, $33, $77,-$5D, $33; 260 dc.b $33,-$7A, $7A, $33, $33, $18, $67, $33, $33, $61; 270 dc.b $66, $33, $33, $11, $66, $33, $33, $11, $67, $23; 280 dc.b $33, $18,-$75, $13, $33,-$78,-$56,-$4E, $33,-$56; 290 dc.b -$45,-$5F, $33,-$55,-$5F,-$4F, $32,-$56, $1B,-$4E; 300 dc.b $31,-$55,-$45, $12, $31,-$45,-$4F, $13, $21,-$4F; 310 dc.b $11, $22, $11, $18, $61, $21, $11, $66, $61, $11; 320 dc.b $61, $66, $61,-$7A,-$7F, $66, $68, $66, $11, $66; 330 dc.b $66, $66,-$7A, $66, $66, $66, $66, $66, $66, $66; 340 dc.b $61, $66, $66, $66, $61, $66, $66, $66, $61, $66; 350 dc.b $66, $66, $61,-$7A, $66, $66, $61, $11, $66, $66; 360 dc.b $61, $21,-$7A, $66, $61, $32, $18, $66, $61, $33; 370 dc.b $21, $66, $61, $33, $31,-$7A, $61, $33, $32, $16; 380 dc.b $61, $33, $33, $16, $61, $33, $33, $28, $61, $33; 390 dc.b $33, $31, $61, $33, $33, $31, $61, $33, $33, $31; 400 dc.b $61, $33, $33, $31, $61, $33, $33, $31, $61, $33; 410 dc.b $33, $31, $61, $33, $23, $31, $61, $33, $13, $31; 420 dc.b $61, $33, $13, $31, $61, $33, $13, $31, $61, $33; 430 dc.b $13, $31, $61, $31, $13, $21, $61, $31, $12, $16; 440 dc.b $61, $21,-$7F, $16, $61, $18, $61,-$7A, $61, $16; 450 dc.b $61, $66, $61, $66,-$7A, $66, $61, $66, $66, $66; 460 dc.b $61, $66, $66, $66, $61 ; 470 ArtNem_SSKnuckles:dc.l -$7E457FFD, $1140825, $14351646, $2F551866, $32730281; 0 ; ... dc.l $300162E, $27778204, $6163328, -$C7CFBF9, $163628F6; 5 dc.l -$7BF8907B, $7708605, $1518F487, $4091776, $28F58806; 10 dc.l $35890771,-$75F89175, $6348C08, -$D72F9C7,-$71F9C571; 15 dc.l $778FF49, $64D8617B, $E16605E,-$73D879A3, $3C308EB5; 20 dc.l -$348A1CD9, $4EB21609, $241ECC6E, $6BC297B3, $40BD82C9; 25 dc.l -$58DE6CB2, $432651FB, $2DB3EF5E,-$28852C4E, $4B17636F; 30 dc.l -$692744D, $7C831958,-$6A84ADAC, $319814E1, $692C42B7; 35 dc.l $6BA811B9, $5E29295E, $3008AD05, $19F3DB3F,-$1E198071; 40 dc.l $735FDAB8, $1938BC17,-$5F987467,-$124AC5D1, $6EAAE35F; 45 dc.l -$28A8AF89, $7553AD9F, $5C0352E6, $61F52089, $215248A3; 50 dc.l -$6E87AD00,-$7361FA11, $36045EF0, $2925E717, $5ED4F389; 55 dc.l -$18343ADC, $40D37483,-$41121E0D,-$2C0A05DC,-$26AA9B27; 60 dc.l $74D8E906,-$420DED4F, $39049294,-$34FED367, $2C32596E; 65 dc.l -$3640AA93, $7F54924A,-$631A1CE0,-$4D9A6C9F, -$D6F6BCA; 70 dc.l -$2169FA56, $23BD669D,-$7E9E3069,-$19FCF9C3, -$558E034; 75 dc.l $711CC70F,-$358F1473, $3D9A8F47,-$55B6DAE3,-$348E0E5B; 80 dc.l -$3BE2C828, $6F810CF5,-$599A30DC, $1E5CDDA1,-$1B22ECFD; 85 dc.l -$A1B86EF, $40C789EF,-$1D883019, -$C3BEE8, $9B0C58D; 90 dc.l -$3A5604D8,-$1C44A1C1,-$6543C624, $5E81A03D,-$648E9EE9; 95 dc.l $160D71E3,-$4663C685, $7B59B6FC,-$2B81900D, $4924928D; 100 dc.l -$1276B7D4, $3A75FD24,-$69B35E58,-$290CB573,-$793CA29A; 105 dc.l $668C0C8,-$3CC3CFCD,-$29AA41BA,-$49FA3430, $438C0492; 110 dc.l -$64239B09,-$3743D38F,-$5C2E477E, $28C8F336,-$2DFA0591; 115 dc.l -$76496399, $1A0C9B7A, $3E7FB363, $71F5B8F6,-$48941470; 120 dc.l $4B26BB1B, $7FCBD8EB, $4EEFAE03,-$1BDAA128, $6A4D9E6C; 125 dc.l -$384261A0, $497BAF12, $453B5D40,-$77765FB7, $248107F8; 130 dc.l $39EFFDB8, $76BFB55B, $2AE064ED, $78BEE78B,-$64929C98; 135 dc.l -$33B8106,-$58C154E3, $3C3EB811, $520CD357, $330F5CB5; 140 dc.l $20881492, $28E42A02, $26DB1101, $4098121C,-$77131D7E; 145 dc.l $69317172, $28C45396,-$5A962EED, $7F46E8E4, $1F267F3F; 150 dc.l $1F9E49B2, $9B1C165,-$29A2F3C2, $414A4B29,-$3B5B79D9; 155 dc.l $29412C87,-$1940AC9A, $2F038BDC,-$303B785A,-$23BC2FE3; 160 dc.l -$3A77DF1,-$7C388962, $5A6A5E95,-$20FF089F, $8B375E; 165 dc.l $8A88FCE, $6C5CFECC,-$4F421E08, $10C7F3E2, $6E2DF9DE; 170 dc.l -$B33BC1D, $6B7B5E22,-$4847403F,-$2851C50F,-$2236FA17; 175 dc.l -$66EFE09, $7E6CDCDB ; 180 dc.b -$57, -5,-$4C,-$6B, $3F,-$7C,-$67, $16, $49, $24; 0 dc.b -$6A, $4D, $7B, $43, $51,-$53,-$1A,-$6B,-$14, -5; 10 dc.b -$13,-$38,-$72, $5A, -7, $10,-$39, -$B,-$1D,-$56; 20 dc.b $77, $3A, $1D, -2, $29,-$1E,-$21,-$51, $3C, $E; 30 dc.b -1,-$1D, $28, $73,-$24,-$78,-$70,-$1E,-$69, $4B; 40 dc.b $19, $68, $76, -4,-$55, 8, -2, $A, $49, $24; 50 dc.b $5B, $D,-$7A, $22,-$34, $44,-$2F,-$78,-$65,-$3C; 60 dc.b $B,-$1C,-$44, $30, $53, $1D, $65,-$2B,-$5B, $49; 70 dc.b $7B, 8, 9, $2B,-$3C,-$28, $2C, $32,-$7A,-$4A; 80 dc.b -$18,-$30, $49,-$24, -5,-$53,-$47,-$3F,-$24,-$24; 90 dc.b $6F, $67, $37, $52,-$16, $38, $3F,-$6C,-$1F,-$1B; 100 dc.b $E, $39,-$7F,-$5B,-$31,-$39,-$61, $2E, $4F,-$1A; 110 dc.b -9, $69,-$1A,-$71,-$61,-$14,-$28,-$24, $7D, $6E; 120 dc.b -$B,-$4C,-$1E, $52, $59, $C,-$64, $5E, $3A,-$2D; 130 dc.b -8, $4F,-$2A,-$71, -5, $27,-$7F, $60, $42,-$43; 140 dc.b -$6C, $76,-$7A,-$50,-$5D,-$26, $68, -$C, 5,-$3F; 150 dc.b $6A, $48,-$6F, $61, $28, $17,-$6F, 1, $19,-$45; 160 dc.b $21, $78,-$6B,-$7A, $16, $10,-$25,-$21, $37, $65; 170 dc.b -3, $38, -2, $39, $76,-$42, $6A, $30, -$D,-$70; 180 dc.b -$37,-$11, $18, $F, $60,-$32, $7A, $39,-$44, $75; 190 dc.b $5A, $6B, -7,-$16,-$16, $5C,-$15,-$2F,-$2C,-$48; 200 dc.b -$D,-$60,-$4B, $72,-$2C,-$47, $19, $E,-$2C, $12; 210 dc.b -$5C, $5E, $2F, $78,-$47, $50, $4B, 3, $21,-$38; 220 dc.b $22, $1D, 9, $6B, $39, $16, $68,-$23, -7, -8; 230 dc.b $71,-$17, $74, 9, $3D, $5D, $40,-$39,-$39, $2C; 240 dc.b -5,-$26,-$74,-$6E, $75,-$6C; 250 dc.b -$5A, $58, $60,-$29,-$4E, $23, $12,-$4F, $2B, $20; 0 dc.b $42,-$3C,-$5C,-$50,-$3F,-$6A, $5F,-$66, $5F,-$66; 10 dc.b -$73,-$26,-$42, $67, $74, $35,-$3B,-$5D, $5F,-$33; 20 dc.b $5D, $1B,-$41, $59,-$46,-$23,-$11, -3, $6F, $12; 30 dc.b -$3C, $67,-$3C,-$4B,-$26, $47, -$E,-$2E, $49, $26; 40 dc.b $2D,-$14,-$32, $23,-$44, $70, $2F, 2, $18, $17; 50 dc.b -$60,-$6D,-$14, $20, $3C, $7F, $E,-$32, $6E,-$44; 60 dc.b $52,-$1E,-$2A,-$45, $20, -$A, 4, $5E, $E,-$2A; 70 dc.b -$26, $1A,-$80,-$47, $16, $72, $26,-$66, $71,-$29; 80 dc.b -$71, $5B,-$4C, $3A, $1F,-$28,-$17, $1F,-$35, $49; 90 dc.b $24,-$75, $25,-$70, $49, $25,-$6D,-$5C,-$6E, $5F; 100 dc.b -$3E, $4C,-$6C, $C,-$52,-$41, -$A, $38,-$11, $47; 110 dc.b $3F,-$3F,-$59, $72,-$10,-$1C, $17,-$49,-$4E, $54; 120 dc.b $7C,-$7E, $2C, -1,-$6C,-$39, $6A, $68,-$10,-$26; 130 dc.b $45, $6D, $5A, $79, $67,-$1B, $7F,-$19, $60, $1A; 140 dc.b -$63, $23,-$30, -$F, $1A, $11,-$3C, -7, $1E,-$41; 150 dc.b $31,-$2F, $11, $58,-$57,-$22, -$B,-$80, $6A, $79; 160 dc.b -$80,-$20,-$2A, 3,-$16,-$20,-$47, $F,-$55,-$76; 170 dc.b -$66,-$70,-$3E,-$52, $1F, -$A,-$52, $F, -$C, $52; 180 dc.b $48,-$4A, $41, $61,-$5B, $5E,-$3F, $60, $29, $4B; 190 dc.b 2, $52, $49, $4A,-$38, $60, $61,-$6F, $6A, $7E; 200 dc.b $68,-$4B, $37, $3B, $7E, $6A, $37, $35,-$32, $34; 210 dc.b -$24,-$1C, $66, $20, $11,-$50,-$80, $58, $3F, $1D; 220 dc.b -5,-$48,-$15,-$45,-$72,-$73,-$1F, $46, $7F,-$4D; 230 dc.b -$32,-$1D,-$15, $71,-$13, $6E,-$29,-$37, $18, $64; 240 dc.b $2F, 4, $64,-$1E,-$31,-$2F, $7F,-$27, $1F,-$31; 250 dc.b $6B,-$72,-$4B, $2F,-$64, $3E, $62,-$72, $30, $14; 260 dc.b $4A, $39,-$6F, $49, $78, $7B, 7,-$44, $48, $7C; 270 dc.b -$7B,-$52,-$14,-$78,-$59, $7D,-$58, $20, $61,-$5B; 280 dc.b -$20, $52,-$14, $79, $49,-$66, $74, $45,-$79,-$19; 290 dc.b -$65, -$E,-$67,-$46, -3,-$62, $71,-$16, $6E,-$32; 300 dc.b -$63,-$73,-$29, -$A,-$40, $33,-$7A,-$40,-$38, $11; 310 dc.b $60, -$F, -5, $27, $3D, $3D,-$4B, -4, -$F,-$33; 320 dc.b -$32,-$43, $58, $66, -7, 7,-$38, $5A, $6D,-$62; 330 dc.b $4F, $34, 5,-$3B,-$64,-$77, $A,-$31, $37, $58; 340 dc.b $65, $37, $50, $50, $53, $61,-$7F, $41, $F, $3C; 350 dc.b -$21, $76, -6, $49,-$6A,-$30, $58, $43,-$19, -7; 360 dc.b $46, $49, $43, $64, $16, $52,-$35, $20,-$35, $21; 370 dc.b -$77, $4B, $29, 9, $25, $7C,-$39,-$1A,-$10,-$39; 380 dc.b $48, $14,-$45, $48, $11,-$4B,-$4B, $3B, $5B, $5D; 390 dc.b $2E,-$72, $3E, $5F,-$63,-$1D, -7,-$4D,-$40, $1D; 400 dc.b -$13, $40, $77,-$17, $6F,-$36, $69, $7F,-$1A,-$2A; 410 dc.b $34, -4,-$3A,-$66, -2,-$44,-$4C, $35, $34, $C; 420 dc.b $47,-$1B, $3C, $1D, 5, $34,-$59,-$12,-$2E, $51; 430 dc.b -6, -$A,-$22,-$21,-$6C,-$71, 6,-$5E, $6B, -7; 440 dc.b -$E,-$39,-$43,-$62, 5,-$11,-$71,-$27,-$28, $17; 450 dc.b $14, 6,-$1D,-$4D, $70,-$47,-$1D,-$7F,-$58,-$60; 460 dc.b $63, $73,-$40,-$6E, $2D, $75, 4, $6D,-$80,-$70; 470 dc.b -$1E,-$1F, -$C,-$7A,-$52,-$14,-$35, $1E, 6, $7F; 480 dc.b $3B, $53, $22, $34,-$4A, -2, $23, $41,-$1E, $2A; 490 dc.b $78,-$15,-$20,-$29, $5B, $7A, $1E, $6B,-$79, $3F; 500 dc.b -$2A, $1F,-$1D, $3F,-$1F, $49, $25, 1,-$61, $7D; 510 dc.b -$1D,-$4D,-$28, $6B,-$1D,-$5E,-$3C, $78,-$7F,-$34; 520 dc.b $72, $7B,-$21,-$1D, -$D, $3E, $23, $73, $54,-$76; 530 dc.b -$2D, $42, $1C, $3F,-$79,-$5D,-$23,-$34, $70, -4; 540 dc.b -$59, 3, $5F,-$36, -2,-$34,-$10,-$27, $25,-$71; 550 dc.b -$17,-$61,-$10,-$5C,-$6E,-$64,-$4B,-$64, $69,-$54; 560 dc.b -$21,-$3D, $4E, $17,-$41, $A,-$1F, -8, $24,-$51; 570 dc.b -$28, $5F, $72, $57,-$4B, -7,-$75, $35,-$2A, $61; 580 dc.b $7B, $A, $54,-$50,-$59, 7, $2D, -5, $3F, $45; 590 dc.b -1, $2F, -8,-$67,-$20, $6B,-$28,-$31,-$6A,-$4B; 600 dc.b $11, $2D,-$2A,-$48, $68, $14,-$52, -6, -2, $57; 610 dc.b -$C,-$77,-$4E, $19,-$21, $20,-$4B, -$E, $B,-$21; 620 dc.b $35, $2F,-$77, $2F,-$77, $2F,-$77, $52,-$52,-$3D; 630 dc.b -$6A,-$3D,-$64,-$12, $6E,-$53,-$4C, $7E,-$45, $5B; 640 dc.b $7E,-$45, $58, $6E,-$5D, $37, $33, $D, $46, $E; 650 dc.b -$2C, $12, $44,-$67, $32, $C,-$76, -$A, 5,-$7F; 660 dc.b -$54,-$74,-$1D,-$30, $35, 5, $4B, $58, $16,-$41; 670 dc.b $34,-$6E, $58, $65,-$70, $6C, $4A, $C,-$51, $19; 680 dc.b $55, 6,-$44, $26,-$3D, $24,-$6E, $49, $24,-$6E; 690 dc.b -$3D, $61,-$70,-$43,-$52,-$3B,-$27, $4D,-$68,-$23; 700 dc.b -$77,-$4D, $1A,-$6F, $61, $13,-$77,-$42, $54,-$6F; 710 dc.b $4A,-$37, $16,-$6E, $23, $37,-$73, -$D,-$44,-$78; 720 dc.b -$20,-$1B,-$57,-$3F,-$52, $20,-$10, $68,-$14, $38; 730 dc.b $34, $4C, $4B, $44,-$3C,-$44, $4E, $26,-$6E, $5A; 740 dc.b $60, $4C, $4C, $5D, $25,-$5E,-$1D, $27,-$7F, 4; 750 dc.b $44,-$6F, 0,-$2C,-$78,-$11, 2, $3F, $63, $61; 760 dc.b $69, -$C,-$62, $1E,-$4A, $76,-$5C,-$40, $76,-$40; 770 dc.b $2C, $66,-$32, $59, $5E, $3F, $31,-$73,-$2B, $2D; 780 dc.b $61, $56,-$43, -$B, $3C, $3B, $10, $75,-$1F, $74; 790 dc.b -$2D, $50, $6B, $E, $58,-$2A, $18,-$4F,-$54, $33; 800 dc.b -$4C, $30,-$34, $19, -$C,-$1F, $5F,-$2E, $3B, $24; 810 dc.b -$6E, $59, $6F,-$3A, -6,-$21,-$42,-$49,-$43, $6F; 820 dc.b $71, $7B,-$7C,-$50,-$17, $32, -3,-$6E, $49, $24; 830 dc.b -$4F, -7,-$25, -7,-$40, -$E,-$2A,-$3D, $6D, -6; 840 dc.b -$69, $F, $F,-$43,-$3D,-$27,-$3E, $58, $7C,-$7E; 850 dc.b -$3A, $77,-$4A, $1B, $D,-$7A,-$49,-$66, $49, $25; 860 dc.b $1F,-$4E,-$5D, 8, $10, -$F,-$21,-$35, $7C,-$7D; 870 dc.b -$40, $11,-$54, 6,-$60,-$58, $79,-$45,-$78,-$34; 880 dc.b -9,-$6F, 2,-$73,-$33, $18,-$43, $3F, $5A,-$1C; 890 dc.b $1E, $63,-$3A,-$39, $7C, $5C, $43, $49, 7,-$40; 900 dc.b -$10, $47,-$7F, $1E, $2D,-$29, $7F, $10, $F,-$19; 910 dc.b -8,-$40, $22, $26,-$7E, 1, $76, $14, $F, $1F; 920 dc.b -$3E, $49, $28, $6F,-$1F,-$10,-$53, $3B, $70, $7A; 930 dc.b $49, $67, $2C, $66, $18, $70,-$58, $3D,-$73, $44; 940 dc.b $56,-$13,-$2A, 7,-$6D,-$32, $43, $38, $6E, $6E; 950 dc.b -$30,-$4C,-$39, $3B,-$3A,-$19,-$22, $78,-$16, $18; 960 dc.b -8, $3A, 2,-$14, $46,-$7E, $1F, $3E,-$78, $2E; 970 dc.b -$2F,-$3C,-$4A,-$5E,-$66,-$69,-$1D, $6D, $5A, 4; 980 dc.b 3,-$50, $37, $3E,-$7B,-$1F, -8,-$39,-$1A,-$4A; 990 dc.b -$24, $77, $51, -$E, -4,-$2E, $54, -$C,-$21,-$49; 1000 dc.b -$65,-$10,-$57, $14,-$58, $22,-$69, $5F, $76, 3; 1010 dc.b $5F,-$63, $3C,-$17,-$66, $49, $63, $72,-$37,-$2E; 1020 dc.b -$37,-$2A, $5B,-$6E, $49, $25,-$7A,-$3D, $B,-$28; 1030 dc.b -$33,-$68, $56,-$34, $24,-$4C, $30,-$6E,-$32, $58; 1040 dc.b $49,-$34, $30,-$6D,-$64, 9, $39,-$22, $1E, $26; 1050 dc.b -$65, $7A,-$67, $63,-$3E,-$34, $78, $B, $3F, 1; 1060 dc.b $13, $15, $17,-$50,-$7F, $25,-$50, $1B,-$7C, 3; 1070 dc.b $3E,-$7E,-$3E, -2,-$1C, $56,-$7E, $26,-$80,-$33; 1080 dc.b $4F,-$62,-$25, -8, $6F,-$57, -1,-$69, -4, $63; 1090 dc.b -$79, $63, $26, $74, $2C, $64,-$29, $75, $4B, $51; 1100 dc.b -1, $31, $7E,-$3B,-$3B, $2E, $67,-$37,-$61, $27; 1110 dc.b $6C, 7, $64,-$27, $75,-$69, $50,-$30, $1F, $5C; 1120 dc.b -$14, -$B, $67, $68, $6E,-$5E, $60, $6A, $7F, $4D; 1130 dc.b $E, $7A,-$2E,-$50,-$39, $57, 4, $31, $76, 5; 1140 dc.b -$64,-$48,-$54,-$29, $66, -$C, $20, -2, $57, $7B; 1150 dc.b -1,-$76, -2, -5, $27,-$72,-$2A, $7A, $7A,-$3D; 1160 dc.b -$21, $2A, $54,-$5C,-$52,-$3D,-$6A,-$41,-$59, $2D; 1170 dc.b -$23,-$71, $51,-$5A,-$2C,-$15, $1D, $72, $75,-$59; 1180 dc.b $4E, $73, $3D, $70, $6B,-$5F, -$C,-$5C,-$3B, $63; 1190 dc.b -$4B,-$11, $12, $64,-$44, $49,-$6E,-$10, -1,-$6C; 1200 dc.b -$27, $24,-$6B, $1D, $3A,-$3C,-$69,-$42, $72,-$6E; 1210 dc.b $31, $29, $61,-$5B, $B, -8, $17,-$3D,-$54, $3A; 1220 dc.b $49, $25,-$7A,-$3D, $5F, -7,-$5E, $2C,-$1C, $5B; 1230 dc.b $47,-$2C, $4C, $68, $38, $1A,-$25,-$7F, $17,-$11; 1240 dc.b -$1A, $4C,-$2D,-$73, $4C,-$76, 8, $14,-$30, $1A; 1250 dc.b -$22,-$2B,-$3D, $2C,-$41,-$7C,-$6A, $4D,-$80, -$C; 1260 dc.b -$D,-$26, $1B, $D,-$7A, $49, $2C, $36, $33,-$43; 1270 dc.b -$62, -4, -8, $5B, $30,-$39,-$32,-$17, $35,-$80; 1280 dc.b -$E, $10,-$42, $5E,-$3F,-$3D, $B, 7,-$51, $6B; 1290 dc.b 7,-$46, $3C,-$22,-$32, $45,-$12, $28, $19,-$33; 1300 dc.b -$2B, $21, -6,-$80,-$2C, -$E,-$77, $62, $1C,-$47; 1310 dc.b -$13, $74, $39,-$11, $E,-$25, $59,-$78, $3B, $63; 1320 dc.b $62,-$2C, $68, $68,-$1B,-$7B, $58,-$49, $3D, $5D; 1330 dc.b $4F, 3,-$5D, $3B,-$17, $77, $5A, -$D, $61, $1E; 1340 dc.b $23,-$3B,-$66, $2B, -7, -2, $3E, $56,-$57,-$53; 1350 dc.b -$B, $2D, $69, $2D, $78, $4D,-$6A,-$25, -3, $38; 1360 dc.b $6F, 6, $41, $61, $13, $D, $26,-$43,-$78,-$58; 1370 dc.b -$57,-$57, -$C,-$50,-$49, $31, $22, $39, 5,-$5C; 1380 dc.b -$7E, $B, $10, $5C,-$78, $67, $6B, $69,-$3C, $58; 1390 dc.b $6F,-$4D, $73,-$69, $1E, $77,-$1D,-$77, $18, $17; 1400 dc.b -$18, $46, $34, $23, $1F,-$65, $49, $24,-$41, $29; 1410 dc.b -3, $29,-$53, -9, $50, $10, $41, $15, $35, $10; 1420 dc.b $29, $56, $7E, -$B, $2D, $C, $6E, $7A, $35,-$31; 1430 dc.b $6B,-$4B,-$23, $6E, $3A, $16,-$23, $4F, $60, -5; 1440 dc.b -$58, -9, $46,-$18, $16,-$23,-$79,-$3D, -$F,-$7F; 1450 dc.b $D,-$46,-$74, $1B, $75,-$49, $71,-$24,-$6E, $49; 1460 dc.b $5F, -5, $3C,-$61, $F, $7E,-$37, $24,-$6B,-$13; 1470 dc.b -$7A,-$3D, $24,-$6A, $4C,-$4D, $49, $24,-$6E,-$37; 1480 dc.b -$51,-$34, $59,-$52,-$4D, 3, $34, $60, $64,-$37; 1490 dc.b $61, $13, $C, 8, $33, 0,-$75, $31, 4, $49; 1500 dc.b 4, $11, $31,-$4C, $4C, $66, 8,-$6D,-$64, 3; 1510 dc.b $39,-$26, $73, $3D,-$74,-$7A, $32, $28,-$13, $20; 1520 dc.b -$37, $63,-$40, $10, $59, -8, 8,-$6A, $22, -3; 1530 dc.b -$5A,-$7E, $7D, 8,-$49, $7A, 8, $1F,-$3E, $76; 1540 dc.b $75, -2, $23, -2, $16, -2, $3C, $B, -3, $60; 1550 dc.b $61,-$7B, -2, $49,-$3B, -4,-$18, $31,-$5D, $5F; 1560 dc.b $76, $79, $66, $45, -7,-$45, $58, $3E, 4, $6A; 1570 dc.b -$3B,-$60, $1D, $4B, $3D, $18,-$45, $B, $75, $53; 1580 dc.b -$26, $37, $74, $6B, $46,-$2C,-$24, $65,-$5F,-$3F; 1590 dc.b -$6A,-$7A, $1B, $6F, -3, $37,-$1B, $12, $6C,-$7D; 1600 dc.b $64, $1E, -1, $57,-$36, $5F, $29, $7C,-$5B, -$E; 1610 dc.b -$69,-$36, $72,-$64,-$59, $2C,-$3C, 2,-$32, $5F; 1620 dc.b $32,-$2F,-$2F,-$18,-$44, 3,-$57,-$2A, $18, -$B; 1630 dc.b -$51, $5A,-$6A, $33, $E, $5A, 1, $62,-$39,-$4F; 1640 dc.b $63, $53, $24, $31, -$B, $21,-$72, -9,-$21,-$4D; 1650 dc.b $24,-$6E, $49, $25, $D,-$70, $64,-$4F, $39, $4A; 1660 dc.b -$38, $32,-$3D, $24,-$6E, $49, $24,-$6A, $34,-$3A; 1670 dc.b -$7F, $2C,-$7A, $34, $5A, $24,-$4E, $17,-$1A, -$C; 1680 dc.b -$32, -$A,-$3D, $61,-$7A, $19, -1,-$5B,-$6D, $61; 1690 dc.b -$70,-$43,-$78,-$4D, $5B, $71,-$23, $6D,-$39,-$75; 1700 dc.b -$30, $6C, $5E, 5, $1C, $11, $1B, $70,-$1D, $49; 1710 dc.b $3C, $20, $19,-$45,-$70,-$5E, $6D,-$1B, $12, $6B; 1720 dc.b -$5A, $71,-$26,-$74, $7B, $10, $41, $12, $41, $10; 1730 dc.b $2C, -$C, -3,-$73, 1, $14, $72, $23,-$80, $3B; 1740 dc.b $53, $7D,-$62, 4, $7B, $10, $45,-$1D,-$4B,-$7C; 1750 dc.b -$6A,-$60,-$6E,-$31, 2,-$54, $1A,-$5C, $48, $61; 1760 dc.b $5B,-$5E, $6B,-$59, $24, $1A,-$45, $11,-$33,-$33; 1770 dc.b $4B,-$4D,-$59, $24, $5F,-$39,-$6E, $2F,-$1D,-$32; 1780 dc.b $5A,-$21,-$5E,-$30, $65,-$5D,-$11, -3, $36, -3; 1790 dc.b -$5B,-$4A, $69, $37, $35,-$2D, -5, $13, $35, 4; 1800 dc.b $45, $7F, $62, $45, $48,-$5D,-$4B,-$2F,-$55,-$40; 1810 dc.b -$29, -$D, $23, $48,-$1B,-$27,-$12,-$24, $43,-$3A; 1820 dc.b -$30, $20, $5B,-$6D, $75,-$4B, $63, $73,-$26,-$19; 1830 dc.b $3B,-$5F,-$27,-$3A,-$18, -3,-$72,-$6C,-$1D,-$1D; 1840 dc.b -$D, $D, $41, $24, $35,-$52, $6B, 2,-$29,-$1A; 1850 dc.b -$6E, $49, $24,-$6E, $57,-$4A, $18, $60, $24,-$4E; 1860 dc.b $74,-$17, $2C,-$7E, $59, 5,-$49, -$C,-$6E,-$37; 1870 dc.b -$60, $51,-$58, $21,-$71, $30, $B, $E, $4F,-$4A; 1880 dc.b $7E, $44, $40, $68, $1A, $10, -9, $78, $1A, 7; 1890 dc.b 6, $47, $41,-$3F,-$6D, $27,-$3B, $3B,-$26,-$51; 1900 dc.b -$5F,-$6E, -9, $1D, $68, $1E,-$47,-$2F,-$7D, $7E; 1910 dc.b $56, $6A, $5A, 1,-$25, $1B, $59,-$62,-$61,-$65; 1920 dc.b $6F,-$28,-$4B, $78,-$7D,-$27,-$1F,-$1E, $77,-$40; 1930 dc.b $2C, $35,-$49, $3E, $5E, $2F, $11,-$5B, 4, $73; 1940 dc.b $6F,-$31,-$12,-$39, $D, $71,-$55,-$21,-$37, -$E; 1950 dc.b -$41,-$62,-$50,-$29, $7F, $A, 7,-$14,-$26,-$61; 1960 dc.b -$4F, $49, $24, $46, $41, $24,-$6E, $49, $24,-$50; 1970 dc.b -$28, $6C, $31, $17,-$1A,-$17, $47, -4,-$71,-$14; 1980 dc.b $62,-$11,-$25,-$24, $64,-$4F, $12, $64, $31,-$48; 1990 dc.b -$42, -2, $1E,-$64, $3F, $28,-$6E, $76,-$38, $3D; 2000 dc.b -$E, $65,-$11,-$6D, $2F, $4F,-$26, $3A, $49, $24; 2010 dc.b -$41, $55, $6D,-$22,-$2C,-$2E, $2E,-$4D,-$23, $78; 2020 dc.b $21,-$14,-$39, $6A, $68, $19,-$10, $33,-$4A,-$7A; 2030 dc.b -$15, -1, $56,-$6E, $49, $1F, $13, -6,-$30,-$22; 2040 dc.b $35,-$1F, $1E, $4E, $F, $A, $79, $38,-$19,-$2E; 2050 dc.b -$62, $4E, $23,-$73, $3C,-$7C,-$39, $47, -$D,-$12; 2060 dc.b $24,-$31, $42, $1C, $44,-$40, $2F, $53, $21,-$73; 2070 dc.b -$33,-$43,-$27, $24,-$6E, $6F,-$2B, $51,-$71,-$49; 2080 dc.b -$1A,-$57,-$23,-$35, $52,-$19,-$5B,-$27,-$76, $70; 2090 dc.b $2E, $6E, $35, $73,-$48,-$72, $20,-$42,-$64,-$11; 2100 dc.b -$1E, $6E, $68, $1C,-$65,-$75, $72, $22, $4C,-$6A; 2110 dc.b -$1A,-$3E, $1B,-$68,-$53,-$68,-$2A, -$F,-$80, -$A; 2120 dc.b $61,-$4C, $D,-$1D,-$28,-$7E,-$3C, $16, $70, $6A; 2130 dc.b $18, $10,-$20, -$F, $18,-$1D, $40,-$10,-$30, $1E; 2140 dc.b -$74, $43,-$6F, $5C,-$17, $59,-$57, -4,-$11,-$69; 2150 dc.b $5A,-$35, $1F,-$2A, -7, $74, $5F, $7D, $18, $76; 2160 dc.b -$50, $32, $5A, $1A, $25,-$5F,-$7F,-$6A,-$27,-$7F; 2170 dc.b -$64, -5,-$3A, $77,-$10, $22,-$7E,-$50, $22, $6A; 2180 dc.b -$1B,-$5D,-$4D, $16,-$77, $20,-$4C, $48,-$70, -$F; 2190 dc.b $24, $4D,-$3A, $4D,-$2E, $C,-$30, $49,-$6E, $2D; 2200 dc.b $5B,-$78, $3D,-$11,-$47, $5E, $22, $6C, $C,-$4B; 2210 dc.b -$7C,-$4B,-$55, $25,-$26, $2A, $7D, $6B, $1E,-$7F; 2220 dc.b -$26, -$A,-$7A,-$79, $6B, $6C, $2F,-$47, $25,-$73; 2230 dc.b -1,-$5A, -3,-$5D, $7E, $7B, $1F,-$62, $22, -3; 2240 dc.b $4B,-$2F,-$32,-$50,-$30, $18,-$44, $35, $18, $34; 2250 dc.b $35,-$14,-$68,-$4B,-$1F,-$35, $58, $3C, $35,-$67; 2260 dc.b -$2D, $70, $33, $4A,-$37,-$13, $4B,-$74,-$2F,-$52; 2270 dc.b -$68, $D, $13, $C,-$1B,-$5A, $1A, $38, $48, $39; 2280 dc.b -$41, $A, $37, 3, $58, 7,-$7F,-$68, 6, $7F; 2290 dc.b -$7E, $78,-$2D, -9, $27,-$71,-$19, $7F, $29, $74; 2300 dc.b $7E, $50,-$11, $23, -$D, $71,-$44,-$73, $23, -7; 2310 dc.b $69, $25, $1F,-$3C, $7C,-$5B, -$E,-$69,-$3C,-$1B; 2320 dc.b $2A, $6F,-$48,-$4B,-$1E, $1A,-$1E, -$A,-$25, $3A; 2330 dc.b $74, $7A, $70, $64, -$C, $7A, $71, $25,-$18,-$2D; 2340 dc.b $7B, $50, $39, $63, $24, $31, $6E,-$29, $31, $69; 2350 dc.b $20,-$4C, $4D, $1A,-$10,-$29,-$7A,-$44, $36, $19; 2360 dc.b $24,-$6A, $4E,-$6D,-$5C,-$6E, $58, $F,-$7A, $49; 2370 dc.b $24,-$6E, $49, $2C, $36, 2, $4F,-$80,-$7E,-$72; 2380 dc.b -$14, $66, $2E, $73, $3A,-$2F,-$7B, $5F, $48, $E; 2390 dc.b -$22,-$6E, $47,-$4F, $76, $F, $6D,-$7D,-$1C, $1F; 2400 dc.b $20, -7, 7,-$38, $7B, $5F,-$23, $24,-$41, $5B; 2410 dc.b -7,-$32, $61,-$44, $11, $6D, $2B,-$3C,-$76, $77; 2420 dc.b -4, -1, $31, $5D, $D, $5A,-$73,-$37,-$2E,-$32; 2430 dc.b -$2B, $59, $E, $72, $6B, $39, $6B,-$12, $49, $24; 2440 dc.b -$6E,-$71,-$24,-$61,-$33, $6B, $75, $37, $58, $21; 2450 dc.b -$39, $71, $14, $7E, $25,-$31, $78, $7B, $3C, $71; 2460 dc.b -$A,-$72, $34, 5,-$39, $18,-$24, $46,-$44, $6B; 2470 dc.b $4F,-$34,-$29, $78, $39,-$24, $74, $2C, $44, $48; 2480 dc.b -$38, $16,-$41,-$60, $58, $5B,-$3E,-$7A, -3,-$73; 2490 dc.b -$4D, $5E, $79, $36, $1B, $D,-$7A, $58, $64,-$6A; 2500 dc.b $5F,-$4E, $48,-$12,-$43,-$5D, -$D, $57,-$4F, $7D; 2510 dc.b -$26, $51,-$78,-$3D,-$50, $3D, $79, $43,-$71,-$36; 2520 dc.b $47,-$6F, 7, -$D,-$49, $79, 3,-$5A, $7F,-$63; 2530 dc.b $1F,-$67, $6D,-$11,-$21,-$58,-$20, $41, $1E, 4; 2540 dc.b 3, $71, 4, $45,-$22, $1F,-$39, $2C, $44, $72; 2550 dc.b $79, $2C, -3,-$14, $29,-$33, $39, $3E, $39,-$7A; 2560 dc.b -$1C, $78,-$74,-$21,-$35, $53,-$64, $6D,-$3D, $56; 2570 dc.b -$43, -9,-$54,-$63, $64,-$35, $D,-$7F,-$80, -9; 2580 dc.b -$79,-$5B,-$3C, $3E, -2, $15, $20,-$77, $2E,-$2C; 2590 dc.b -$6D,-$67, 4, $4B, $3D, -$B, $20,-$2A, $25,-$28; 2600 dc.b -$34, 6, $22, $48, $33, $15,-$7F, $56, $2D, $40; 2610 dc.b $73,-$68,-$46, $4C,-$40, $22, $6B, 2, 5, $4D; 2620 dc.b -$28,-$46, -3,-$1C, $50, $56, -$F, $35,-$1F, $41; 2630 dc.b $24, $11, $6F, $51,-$65,-$11, $7D, $4B,-$22, $35; 2640 dc.b -$38, $73, $7F, $1C,-$48, $1E, $6F, $6E, $70,-$17; 2650 dc.b $24,-$6A, $5F, -$C,-$77,-$3B, $66, -6,-$77, $6C; 2660 dc.b $70, $57,-$77,-$34, -6,-$2E, $6B, $6E,-$3E, -5; 2670 dc.b -$78,-$77, $10, $22, $68, $22, $48, $22, $25,-$60; 2680 dc.b $44,-$7A, $35,-$6D, $24, $19,-$77, $3E,-$49, $1E; 2690 dc.b -$29, $3E, $75,-$25, $3A, $32, $49, $24,-$6E, $49; 2700 dc.b $24,-$6E, $4B, $D,-$7A, $17,-$50,-$65,-$27, -9; 2710 dc.b -$56, $7F, $A, $1A,-$11,-$2D, $66, $3B, $5C, $45; 2720 dc.b $67, $3D,-$58,-$2C, $73, $21,-$18, $E, -1,-$36; 2730 dc.b -2,-$65, -$E,-$75, $3C, 2, -9,-$33, $4B,-$1E; 2740 dc.b $4B,-$1E, $4B,-$1E, $4B,-$61,-$1E, $6C,-$6E, $49; 2750 dc.b $26,-$4D, $3E, -6,-$2F,-$7C,-$67,-$7A, $12, $7B; 2760 dc.b $52, $4C,-$78, $61,-$28, $54,-$50,-$75,-$51, 4; 2770 dc.b $16, 4, $45, $41, -$B, -4,-$5D, $3B, $40,-$29; 2780 dc.b $C, $7A,-$80, $5B, 2, $2A, $7A, $3B, $1F,-$29; 2790 dc.b $1D, $69,-$2A,-$22, $5A,-$3D,-$4B,-$3B,-$63,-$7B; 2800 dc.b -$5A,-$48,-$6C, $46, $24, $64,-$37,-$50,-$3B,-$50; 2810 dc.b -$32,-$3C, $58, $3B, $1B,-$58, $1B, $6E, $6F, $63; 2820 dc.b -$1C, $66,-$67,-$62,-$30,-$32, $22, $48, $2E, $24; 2830 dc.b -$37, $72,-$2F, $25,-$75, $19, 5,-$75, $19,-$7A; 2840 dc.b $2C, $64,-$7A, $2C, $64,-$7A, $2C, $64,-$7A,-$72; 2850 dc.b -$29, $35, $2E, $2D, $7E, $77,-$4A, $4E,-$6D,-$5C; 2860 dc.b -9,-$36, $44, $24,-$6B, -$E,-$7D, $5E, $13, $61; 2870 dc.b -$6E, $49, $25, $1F,-$3E,-$5D, $50, $5B,-$33,-$2E; 2880 dc.b $49, $66, -9,-$24, -9,-$14,-$6E, $49, $24,-$6E; 2890 dc.b $57,-$4A, $18, $5E,-$2B,-$65, $35, $6F, $6A,-$3C; 2900 dc.b -$3D, 9, $33, $C, $22, $61,-$57,-$22, $68, $20; 2910 dc.b $45, $45, $24,-$77,-$5B, $48,-$66, 9, $F, $61; 2920 dc.b $2E,-$2B, $11, $50, -9, $40, $3B, $5D, $12,-$3B; 2930 dc.b -$5A, $2A, $5D,-$5A, -9,-$4B, $4E, $70, $20, $31; 2940 dc.b -$6F, $40, $64, $40,-$77, $14,-$6D, $22,-$22,-$7E; 2950 dc.b -3, -7, $36, $5B, -1,-$3C,-$53, -5, $28,-$32; 2960 dc.b -$11, $42,-$3C, $7E, $54, $16, $23,-$7C, $39,-$45; 2970 dc.b $4A, $3C, $57,-$56, 3, $21,-$72,-$5C, $64, -$C; 2980 dc.b 6,-$50, $21,-$1D,-$56, $31,-$18,-$29,-$59, $F; 2990 dc.b -$57,-$18, -$B,-$57, $7A, -$C, $74, $3A,-$42,-$44; 3000 dc.b -$6A, $1B, $1D, $B, $45,-$33, $76, $52, $5A,-$2B; 3010 dc.b -$46,-$2B, $35, $7C, $C, $54, $16,-$4C,-$7A,-$72; 3020 dc.b -$30, $3D, $60, $19, $3D,-$1D,-$44, $E, 2,-$3D; 3030 dc.b -$7D, $58, $55,-$54, $24, $19,-$7F, $31, $31, $5F; 3040 dc.b $5A,-$24,-$21,-$6C,-$25,-$33, $79,-$43,-$55, $71; 3050 dc.b -$26,-$62,-$50, -9,-$34, $3D, -$E,-$45, $24,-$7A; 3060 dc.b $43, $26, $4D,-$7A, $76, $22,-$3F,-$28,-$75, 6; 3070 dc.b -$25, $3B, $34, $6B, $7B,-$63,-$27, 3, $34, $72; 3080 dc.b $26,-$74, $5A, $24,-$4F, $6B, $31, $68,-$62, 0; 3090 dc.b -$4C, $48, $72,-$2F, $21,-$52, $3D,-$7D, $52, $48; 3100 dc.b $68,-$13, $73, $52,-$1E,-$2A,-$1D,-$63, -6, $24; 3110 dc.b -$6E,-$37,-$2D,-$1E, $51, $7C, $4A, $45,-$2B,-$7C; 3120 dc.b -$6F, $61, $38, $65,-$6D, $25, $28, $35,-$1D, $12; 3130 dc.b $5A,-$10,-$28, $64,-$6E, $49, $24,-$6E,-$3A,-$15; 3140 dc.b -9, $71, $7B, $6E, $75, $75, $37, $38, $59, 2; 3150 dc.b $28, $1E,-$19,-$50, $67, $14,-$30,-$23,-$3A,-$26; 3160 dc.b $47, $1B, -1, $56,-$6E, $49, $53, $3E, $7F, $29; 3170 dc.b $4C, -7, -4,-$5E, $49, $6E, $5C, $6F, $67, $3C; 3180 dc.b $6D, $74, $6E,-$7A,-$75,-$66, $2E, $37, $31, $60; 3190 dc.b $41, $70,-$40,-$4C, 3, $73, $1F,-$33,-$11,-$1E; 3200 dc.b $18,-$4F,-$1C, -2, $77, $3B, $5D,-$1B, -7,-$2A; 3210 dc.b -$1C, -9, $3C,-$6A, -4,-$11,-$71,-$32,-$2D, $32; 3220 dc.b $30,-$3E, -$F,-$7A, $7B,-$25, $1B,-$32,-$30, $2B; 3230 dc.b -$43,-$52,-$33, -9,-$54,-$66, -4,-$3A, 5,-$1E; 3240 dc.b $25, $58, $38,-$40, $7A,-$20, $3E, $41, $24,-$6C; 3250 dc.b $4F,-$19, $1F, $7B,-$67, $22, $24,-$49,-$1B, $48; 3260 dc.b -$10, $7A, $15,-$60,-$18,-$37,-$51,-$76, $78, $11; 3270 dc.b $5F,-$29,-$4F, $11, $5D, -7,-$43, $3D, $18,-$10; 3280 dc.b -$57,-$55,-$4C, $5D, $5D,-$57,-$14, $2D,-$23, $24; 3290 dc.b -$75, $53,-$34, $31,-$45,-$34, $39, 7,-$66, 7; 3300 dc.b $23,-$68,-$31, $68,-$32,-$65, $36, $1F, $27,-$37; 3310 dc.b -$E, $65,-$7A, $58, $6C, $36, $1B, $D, $78, $3F; 3320 dc.b -$2E, $18,-$1D, $47, -$D,-$2E, $1C, $60, $61,-$50; 3330 dc.b -$35, $2F,-$36, $67, -7,-$51,-$33, -2, $7C,-$16; 3340 dc.b $47,-$16,-$31, $1B,-$4C,-$59,-$12,-$2E, $49, $24; 3350 dc.b -$6E,-$7A,-$3D, $B,-$28, $5E,-$3D,-$4B, $18, $4D; 3360 dc.b -$68, $49,-$70, $58, $49,-$14,-$14, $F,-$55, $58; 3370 dc.b $10,-$1C, $1B,-$5C, $3C, $5D, $25,-$58, $24,-$4C; 3380 dc.b $35, 4, $34,-$2F,-$35, $4C, $4B, $16,-$65,-$5C; 3390 dc.b $3B, $4C, 8, $7B, $49, $76,-$6D, $74,-$7A,-$6E; 3400 dc.b $29,-$3D, $7E,-$27,-$14,-$6B, $33, $76, $73,-$68; 3410 dc.b -$51, $62,-$29, $48, $67,-$70, $65,-$64,-$4C, $4B; 3420 dc.b $43, $44,-$49, $45,-$18,-$26,-$29, $1A,-$2C,-$46; 3430 dc.b $14,-$18, -$C, $5E, $35, $3F,-$62,-$7A,-$71, $26; 3440 dc.b -$5D,-$73,-$30,-$22,-$3E,-$40,-$19, $36, 5,-$5D; 3450 dc.b $3B, $4B, $16,-$50, $7C,-$63,-$50,-$2F,-$26, $2A; 3460 dc.b $66,-$4C, $67,-$22,-$13,-$4A, -6,-$5C,-$4A,-$39; 3470 dc.b $67,-$36, $5F, $29, $7C,-$5B, -$E,-$69,-$36, $5D; 3480 dc.b $65, $29, $24,-$27, $66, $6E, $20,-$79,-$23,-$4D; 3490 dc.b 2, $E,-$41,-$62, $6A, $39,-$15,-$36,-$74, $5D; 3500 dc.b -$51, $61, $27,-$2A,-$41,-$6C, $7D, -2,-$37, $24; 3510 dc.b -$6E, $49, $36, $41,-$4E, $18,-$6E,-$37, $24,-$6B; 3520 dc.b -$E, $1B, $D,-$7F,-$6D, $24,-$6E, $49, $63, $76; 3530 dc.b $37, $63, $40,-$28,-$45, $27,-$41, $41,-$6A,-$7D; 3540 dc.b $2D, $12, $49, $2C,-$65, $C, $30,-$32,-$6E, $4B; 3550 dc.b $26, -2,-$2D, $47,-$63,-$65,-$45,-$16, $6E, $7E; 3560 dc.b -6,-$3D, $6B, $5D,-$29, -$E, $3C,-$49, $6A, 8; 3570 dc.b -$1C,-$71, $23,-$21,-$71,-$19, $44, $56, $3F, $33; 3580 dc.b -$33, $3F, $76,-$37,-$7A, $1B,-$4B,-$68, $4D,-$45; 3590 dc.b -$6F,-$1A,-$20, -9, $2F, 2,-$44, $28, -$F, $3F; 3600 dc.b -$6B, $C,-$1C, $11,-$40,-$76, 8, $18, $18, $18; 3610 dc.b $13, $75, 5, $41, $10, $27,-$47,-$46, $4F, $68; 3620 dc.b 6, $4F,-$1B, $60, $19, $62,-$3C, $1E, 0,-$4C; 3630 dc.b -$2C,-$10, $62,-$2E, $D, $58,-$77, 6,-$1D,-$28; 3640 dc.b $45, $4C,-$23, $6A,-$75,-$1A,-$41,-$3F,-$77, $22; 3650 dc.b 3, $49,-$48,-$7A, $3D,-$38, $6A, 2, $1A,-$29; 3660 dc.b $36, $1A, -4,-$2E, $57, -7, $63,-$3A,-$15,-$25; 3670 dc.b -$63, -$A, -3,-$73, 3, -6,-$22, $18, $65,-$5B; 3680 dc.b -$B, $3A,-$30, $38,-$20,-$2A, $E, $26,-$10,-$13; 3690 dc.b -$75,-$6E,-$4B,-$25, $1F,-$2A,-$69,-$77,-$50, $2D; 3700 dc.b $6F, $2C,-$31, 3,-$21, -$B,-$6B,-$10, 8,-$72; 3710 dc.b $4D, $78,-$23, $41, $1E, $3A, $3E, $4D, $12, $F; 3720 dc.b -$79, $51, $24, $16,-$46,-$5C, $16,-$5B,-$3B,-$53; 3730 dc.b -$1A,-$58,-$15, $66,-$45, -$A, $40,-$24, -$A, $68; 3740 dc.b $F, $D, $7E,-$2C,-$31,-$28,-$19, $7B, $24,-$4E; 3750 dc.b -2, $A, 5,-$51, $D, $78, $6B,-$3D, $53,-$27; 3760 dc.b -$53,-$62,-$25,-$21, $30, $41,-$55,-$62, $44, 6; 3770 dc.b -$5D,-$3D, $47, $1E, $76,-$41,-$77,-$26,-$66, $2D; 3780 dc.b $14, $C, $36, $19, $24,-$6A, $5F,-$1E,-$23,-$1B; 3790 dc.b -$39, $4E, $3F,-$66,-$2C,-$7D,-$64, $39,-$19,-$78; 3800 dc.b -$41,-$72,-$50, $19,-$3B, $36,-$45, $43, -5, $13; 3810 dc.b -$5F, -2,-$26, $49, $24, $5B, $D,-$7A, $22,-$33; 3820 dc.b $74,-$2F,-$79, $6B, 3, $25,-$5F,-$5E, $5A, $18; 3830 dc.b $19, $6D,-$68, $19,-$31,-$44, $67, $7F, 2, $2D; 3840 dc.b $58, $11,-$27,-$35, $47, $66, $2D, $12, $41, $68; 3850 dc.b -$6F, $21,-$1E, $48,-$65,-$74,-$65,-$5C, $19,-$60; 3860 dc.b -$6D, $24, $5A,-$45, $33,-$4A,-$34,-$6C, $7F,-$38; 3870 dc.b -2,-$3A, $2E, -3,-$43,-$3A, $4B, $11, $26, $43; 3880 dc.b $1B,-$74,-$4D,-$6A, $10,-$21,-$62,-$39,-$19,-$78; 3890 dc.b -$41, $52, -$C, $73,-$54, $34, 6, $2F, $D, $46; 3900 dc.b $D, $D, $7B, $26, $2D, $78, $72,-$2A, $F, $D; 3910 dc.b $66, $74,-$24, $C,-$2E,-$4E, $7B, $52,-$1D, $34; 3920 dc.b -$D, $7F,-$26, $55, $24,-$13,-$70, $7B,-$1C,-$35; 3930 dc.b -$21, $26, $5F, $29, $7C,-$5B, -$E,-$69,-$3C,-$1B; 3940 dc.b $2A, $6F,-$48,-$4B,-$1E, $1A,-$1E, -$A,-$25, $3A; 3950 dc.b $74, $7A, $70, $64, -$C, $7A, $71, $25,-$18,-$2D; 3960 dc.b $7B, $50, $39, $63, $24, $31, $6E,-$29, $31,-$52; 3970 dc.b -3,-$4D, $49, $24,-$6E, $4A, $1D, $27, $49, $24; 3980 dc.b -$50, $1F, $C,-$6E, $49, $25, $1F,-$65, -4,-$2A; 3990 dc.b -$6F,-$59,-$14, $78,-$2E,-$1A,-$1D, $7E, -3, 8; 4000 dc.b -$40,-$41,-$64, $71, $20,-$10,-$73, $29, $2F, $61; 4010 dc.b $F, $6E,-$13, $46, $37, $5E,-$31, -7, $44,-$6E; 4020 dc.b $58,-$32, $3F, $5A, -9, $4F, $26,-$11, $12, $1F; 4030 dc.b -$77, $11, $57, $61,-$3C,-$24,-$1E,-$62, $20, $1E; 4040 dc.b 0, -$E, $79, $39,-$3A,-$44,-$6A,-$72,-$25,-$35; 4050 dc.b $56,-$80,-$50,-$79,-$79,-$5B, $4E, $60,-$77, $2E; 4060 dc.b 8, $72, $24, $50, $39, $17,-$79,-$38, $3E, $41; 4070 dc.b $59,-$41, $28, -$C, $6A, 8,-$46, $2B, 1,-$3F; 4080 dc.b -$53, $1E,-$80,-$7A,-$60, $22, $71,-$3E,-$4F,-$50; 4090 dc.b $3B,-$32,-$29, $38,-$75,-$60, $6D, $78, -$A, $3C; 4100 dc.b -$74,-$20, $72, 8, $21,-$73,-$24,-$4F, $6A, 3; 4110 dc.b -$35, $58, $68, $7F, $39, $1D, $D,-$40,-$12,-$76; 4120 dc.b -$15, -7,-$63, $31, $56,-$5C,-$3B, $67, $7C, $F; 4130 dc.b $52,-$10, -1,-$4F,-$60, -3,-$6E,-$59, -8,-$62; 4140 dc.b -5,-$6B,-$1E, $26,-$40,-$35, $56,-$7E, $5A,-$2B; 4150 dc.b -$6E,-$13, $26,-$59,-$29, $78, $35,-$30, $72,-$26; 4160 dc.b $3E, $67,-$6D,-$5F, $11,-$37, $1B,-$14,-$24,-$62; 4170 dc.b $6F,-$1D,-$31, $1C, $71, $58,-$2F, $68,-$41, $36; 4180 dc.b -$6E, $49, $6D, -6, $4E, $1E,-$7A, $61,-$64,-$4C; 4190 dc.b -$3D, $47, 9, 7, $37,-$20, $41, $6E, 6, $48; 4200 dc.b -$72, 6,-$5C, $16,-$70,-$1B,-$75, $43, $16, $2D; 4210 dc.b $1C, $7F, $35, $78, $73,-$52,-$16, $66,-$1F, -9; 4220 dc.b $51,-$12, $7A, $C,-$64, $43,-$27,-$3F, $7A, 2; 4230 dc.b -$14, $77, $58, $1D,-$2C,-$2D, $76,-$65,-$6E, $49; 4240 dc.b $2B, $6F,-$25, $3A, $4D, $1A,-$69, $3B, $5E,-$28; 4250 dc.b $64,-$6E,-$41,-$3C,-$27,-$44, $1D, $68,-$3D,-$35; 4260 dc.b $4D,-$30, $E, $7C, $2A, $43,-$61, $66, $F, $7B; 4270 dc.b -$60, -7, 7,-$38, $3E, $41, -$E, $E, $5E,-$10; 4280 dc.b -$1D, 1, $24,-$6E, $4A,-$62,-$21,-$5C, $2F, 3; 4290 dc.b -$C,-$39,-$43,-$67, $2C,-$67, $66,-$41,-$7C,-$6E; 4300 dc.b -$37,-$6E, $59, $32, $49, $24,-$49,-$42, $2A, $5C; 4310 dc.b $6C,-$24,-$65,-$61, $3A,-$22,-$1C, $2C,-$7B,-$12; 4320 dc.b -$24, $45,-$48, $49, -$E, -3,-$69,-$1B, $39, $51; 4330 dc.b -$65, -2,-$4C,-$4C, 2, $F, $36, 7,-$51, $1F; 4340 dc.b -$4F, $54, -2,-$77, -4, -3,-$48,-$12,-$2D,-$37; 4350 dc.b -$60, $38, -$E,-$30,-$1A, -3,-$41, $36,-$6E, $4B; 4360 dc.b $C, -$A, $67,-$54, -$D, $D, $59,-$7F, 3, -$A; 4370 dc.b -$19, $7B, -1, 6,-$7E,-$23, $48, $22,-$74, $F; 4380 dc.b $B,-$24, $6F, 6,-$1E, -$C, $16,-$46,-$42,-$4A; 4390 dc.b -$68, $60,-$20,-$77, $2C,-$1A,-$12, $3E, $5E,-$7B; 4400 dc.b -$16,-$25,-$3C, $78, $6D, -6, $47, $26,-$41,-$65; 4410 dc.b -$22, $78, $78, $63, $77,-$1B, 4, $69, -7,-$51; 4420 dc.b -$33,-$12, $59, $79,-$39,-$62, $40,-$23,-$68,-$51; 4430 dc.b $6F,-$36, -2,-$65, $31,-$64, $C,-$17, -1, $75; 4440 dc.b -2, $1C, $A,-$33, 5, $65, $67, $71, $1D,-$48; 4450 dc.b $53, -$A, $27,-$7C,-$30, $1B,-$65,-$79,-$51,-$17; 4460 dc.b -$64,-$1A, $29, $56, $72, -2, $63,-$2D, -$A, $4F; 4470 dc.b 2,-$43,-$78,-$4B,-$22,-$75, -2, $4B, -2, $51; 4480 dc.b -1, $1C, $7F, $16,-$43,-$4D,-$28,-$42, $71, $77; 4490 dc.b -$62,-$43,-$51,-$2A, $3B, $5F,-$15, 0,-$36,-$43; 4500 dc.b -$2F,-$32,-$7E, $33,-$5D,-$39, $6A, $6B, $1D,-$78; 4510 dc.b $6A,-$27,-$61, $5A, $67,-$51, $55,-$41, $5F,-$31; 4520 dc.b $57,-$5D,-$65,-$3A,-$4B,-$16, $48, -$D,-$2D,-$5F; 4530 dc.b $59,-$60, $78, $13, 1,-$15, $3B, -8, $66,-$10; 4540 dc.b $3F, $65, -7, $5F,-$15, $5D, -1, $24,-$6E, $49; 4550 dc.b -$4E, $D,-$77, $D, $7F,-$6F, $D, $6E,-$55,-$40; 4560 dc.b $35, $1C, $34,-$7A, $50, $29, $21,-$6E,-$3C,-$60; 4570 dc.b -$78, $59, $3A, $48, $52, $44, $3B, $C, $38, $21; 4580 dc.b -$58, $D, $5A, $1B,-$7B, $77,-$4B, $2A,-$13, $7B; 4590 dc.b $24,-$6E,-$59,-$16, -8,-$21,-$65,-$28, $17, $19; 4600 dc.b $35,-$49, $6D,-$6A,-$28, -4,-$2B, -5,-$5D, -$D; 4610 dc.b $7B,-$48,-$15,-$46,-$74, $5D,-$49, $43, $C,-$14; 4620 dc.b $20, $64, -5,-$57,-$21, $75,-$43,-$4F, -7,-$55; 4630 dc.b -9, $1F, -7, $5D, -5, $6C,-$12,-$51,-$54, $79; 4640 dc.b -$14, $32, $64,-$6B,-$41, $65, $46,-$3D, $25,-$6D; 4650 dc.b $26, $5F,-$4E,-$4B,-$27,-$40,-$31,-$79,-$5B, 4; 4660 dc.b -$75,-$1B,-$4E, $6C, $49, $16, $D,-$25,-$2E,-$7D; 4670 dc.b $6F,-$1F, $2F, $30,-$28,-$27, $25, $7E, $6F, -4; 4680 dc.b $28, $7A,-$19, $7E, -1,-$31, -2, $74,-$4F,-$10; 4690 dc.b $47,-$19,-$68, $3D,-$1E, $6F,-$13,-$43,-$44, $11; 4700 dc.b -$1D,-$72, -8,-$1F,-$48, $75,-$1E,-$63,-$44,-$4D; 4710 dc.b $49, $25, $1A, $63, $4E, $38,-$2A,-$48,-$65, -$D; 4720 dc.b -$C, $68, $6B, $78, $76,-$40, $37, $53,-$3F, -3; 4730 dc.b -$73, 5, 5, $3B, $47, $73,-$28,-$29,-$2C,-$78; 4740 dc.b -$54,-$6F, $17, $54, $10, -$C,-$57, -$C,-$28,-$23; 4750 dc.b $46, $19,-$47, -4,-$13,-$65,-$6F,-$33, $1B,-$6F; 4760 dc.b -$2D, $2B,-$3A, $71,-$5C, $73,-$51, $13,-$5C, $73; 4770 dc.b -$3C,-$4C, $D, $78,-$4D,-$22,-$3A,-$18, $76,-$46; 4780 dc.b -$66, $3F,-$14, $5A, $37, $7F, $E,-$61,-$46,-$1E; 4790 dc.b -$53,-$59,-$61,-$12, -8,-$65,-$72, -1,-$34,-$24; 4800 dc.b $67,-$71,-$69,-$59,-$58,-$54,-$39,-$65, -2,-$21; 4810 dc.b -$A,-$41,-$1F,-$38, $5F, $77, $6B, $76,-$38, $67; 4820 dc.b $69, $E, $7F,-$7D,-$18,-$22,-$5C, $11, $5C,-$39; 4830 dc.b $6F,-$2D, $66, $73, $11, $24, $36,-$27,-$71, $49; 4840 dc.b $D,-$4B, 5, $66,-$1E, $28, $3D, $22,-$5E,-$34; 4850 dc.b $3B, $A, $31, $1D,-$45,-$25,-$2A,-$41,-$68, $37; 4860 dc.b $56, $6A,-$39, -$A, $5B, 7,-$3D,-$1C, -7, $7E; 4870 dc.b $65, $2C, $7F,-$35, -6, $24, $7F, $5E,-$4E, $3F; 4880 dc.b -$5C, $F,-$14,-$64,-$43, $66,-$7F,-$17, $34, $11; 4890 dc.b -$26, -7, $57,-$7C, $73,-$3D,-$6A,-$80,-$1A,-$47; 4900 dc.b -$70, -6,-$67,-$42,-$4F, $73, $3E,-$50,-$31,-$59; 4910 dc.b -$19,-$55, $6D, $6B, $6C,-$21, $5F,-$31, $1D, $64; 4920 dc.b -$7A,-$25,-$53, $45, $64,-$24,-$30, $C,-$28, $7A; 4930 dc.b -$40, $35, -2, $13,-$50, -3,-$69,-$1B, $67, -8; 4940 dc.b -$62,-$37, $24,-$6A, $78,-$47,-$4E, $D, $6E,-$3C; 4950 dc.b $35, $37, $79, $49, $D, $1A, -$C, $26, $1A, $1A; 4960 dc.b -$1E, $21,-$20, $4C, $36, 1, $16,-$6C, $46, $25; 4970 dc.b $22, $16, $4E,-$7E,-$4C,-$73, $5E, -$A,-$2C,-$50; 4980 dc.b -$7F, $60, $65,-$71, $45,-$74,-$78, -$E,-$1F, $5D; 4990 dc.b -$12,-$2F, $50,-$29,-$1A,-$6E, $49, $24,-$6E, $56; 5000 dc.b -$26, -9,-$3D,-$6F,-$72, -9, -9,-$4D,-$65,-$51; 5010 dc.b $74,-$13, $1F,-$2E, $D, -6, $6B, $54, $45, $4F; 5020 dc.b $50,-$1E, $2B, $4D, $5C, $5F,-$55,-$7D, $58,-$55; 5030 dc.b -$7D, $53,-$30, $70, $6A, $77,-$10, $23,-$7B, $4F; 5040 dc.b $3B,-$4C,-$7F,-$61,-$71,-$32, $24,-$6E, $5E,-$21; 5050 dc.b -$4E, $20,-$75, $35,-$28, 9, $61,-$11,-$34, -1; 5060 dc.b $A,-$7D, $2F, $2F,-$32,-$17,-$71, $2D,-$22, $64; 5070 dc.b $79, $67, $76, $52, $1C, $79, $67, $13, $4F, $2D; 5080 dc.b -$31, -7, $46, -$E, -4,-$12,-$6A, 9, $5F, -7; 5090 dc.b -$45, -$C,-$46,-$26, 2, -9,-$72, $15,-$41,-$77; 5100 dc.b -$21, $6E, $24, $63,-$61, $2E, $37, $43, $73, $73; 5110 dc.b -$6F,-$68,-$13, $E, $2B, $24, $6D, $1E,-$4B, $7B; 5120 dc.b -$71,-$14, $4F, $7C, 2, $2C, $27, $78,-$42,-$45; 5130 dc.b -$11, 7, -8, $2E, $41,-$13,-$3E, $76,-$46,-$4E; 5140 dc.b -$1F,-$79,-$61, $7B,-$25, $75, $72,-$1A, -$A,-$37; 5150 dc.b -$46, -$F, -7,-$54, $6D,-$48, -2,-$38,-$73, $5A; 5160 dc.b $2E, $6D,-$2A,-$47,-$4C, -4,-$33, 3, $69,-$39; 5170 dc.b $5E, -$D,-$53,-$21,-$49, $3E,-$5C, $79,-$23,-$68; 5180 dc.b -$D,-$45, -$E,-$41,-$29, -2, 9,-$46,-$7E,-$4D; 5190 dc.b $6A,-$33,-$45, -7,-$40, $23, $6A, $5D, $35, $D; 5200 dc.b $71,-$11, -4, $73, $74, $66, $3F,-$72,-$32, $7F; 5210 dc.b -$7B, $37, $33,-$2F, -3, $24, $79,-$64,-$21,-$2D; 5220 dc.b -$4B,-$4D,-$27, $7F,-$78, -1,-$7B,-$45,-$62,-$39; 5230 dc.b -$A, $33, $1F,-$39, $59, -7, $7F, 8, -2, $79; 5240 dc.b -1, $64, -$B, $71, $7E,-$5E,-$10,-$6E,-$4A, $64; 5250 dc.b $11, $E,-$2C, $78, $10,-$15, $52, $2F,-$57, $73; 5260 dc.b -$62,-$12,-$58, $23, $5E,-$55,-$2F, -$A,-$73, $6B; 5270 dc.b -$2F,-$47,-$64,-$15,-$2F, -$C,-$6F,-$1A, $6A, $23; 5280 dc.b $33,-$40, -$A, $2D,-$3E, $4F,-$59,-$57,-$45, $3F; 5290 dc.b -$27,-$1A,-$6E, $49, $67,-$80,-$7D, $5F,-$28,-$4B; 5300 dc.b -$7F, 5,-$58, $20, $62, $61,-$51,-$70,-$70,-$3C; 5310 dc.b -$5C,-$6E, $4A,-$7E,-$6D, $47,-$34, $17,-$4D, $54; 5320 dc.b $53, $39, $2D, $4E,-$25, $5A,-$14, $66,-$6E, $4A; 5330 dc.b $34, $6E,-$66,-$66, $47,-$6B,-$20, -7, $63,-$71; 5340 dc.b -$6A,-$15,-$25, $41, $7B,-$23, $4D, $2E,-$32,-$21; 5350 dc.b -$65, -3, $55, $3F, $65,-$51,-$61,-$14, $77, $64; 5360 dc.b $37, $6A,-$21,-$3F,-$59,-$14,-$75, $6E,-$43,-$49; 5370 dc.b $63, $72,-$44, $35,-$1F,-$2B, $52, $49, $5E, $1E; 5380 dc.b -$41,-$4F,-$22,-$23, $31, -$A,-$1F, $5D, $27, $27; 5390 dc.b -$4D,-$10, $57, $64, -8, $F, $5F,-$36,-$1A, $37; 5400 dc.b -$10, $7E, 2, $5A,-$2B,-$2D, $77,-$73, $29,-$3A; 5410 dc.b -$16,-$12, $10, $34, $3B,-$44,-$16, $34,-$39,-$75; 5420 dc.b -$49, $6A, $5E,-$59, -$D, -4, $74, $73, $58,-$32; 5430 dc.b -$62, $74, 7, -$D,-$59,-$42,-$2F,-$35,-$4D,-$39; 5440 dc.b -$7E, $3A,-$6F, $15,-$59, $6C,-$18, $E, -8,-$57; 5450 dc.b $1C,-$43, $1B, -$D,-$41,-$65, -4,-$2B, $34, -3; 5460 dc.b -$62,-$1D,-$5D,-$3B,-$33, $1F,-$4D, $16,-$25, $31; 5470 dc.b $4E,-$33, $4D, $29,-$3C, $69, $1A, $47, $23,-$73; 5480 dc.b -$1D, $4E, $38, $7A,-$2D,-$39,-$19, $6A,-$2C, $6A; 5490 dc.b -$38, $6B,-$66,-$4F,-$28,-$47, -3, $30, $2F, 2; 5500 dc.b -$7E, $2E,-$58,-$59, $79,-$42,-$44, $2E,-$60,-$52; 5510 dc.b -6, $A, $7E,-$68, $5A,-$4F,-$27,-$4A, $35,-$70; 5520 dc.b -$3A,-$14,-$22,-$53,-$79,-$52, $34,-$19, $2E, $72; 5530 dc.b -$1D,-$73, $16,-$77, $24,-$49, $64, -5,-$50, $23; 5540 dc.b -6, $5A,-$4F, -3,-$72,-$4C, -3,-$72, $71, $77; 5550 dc.b -$5D, $38,-$51,-$1B, $73,-$61,-$36,-$4C, $3B, $6D; 5560 dc.b -5, $20, $58, $63, -2, -$A, $11, $20, -9,-$66; 5570 dc.b -$4F,-$11, $21,-$2C, $77,-$70,-$1C, $1E, -$D, $56; 5580 dc.b -$50,-$71, -5,-$35, $C, $6D, -5, $20, $67, -$E; 5590 dc.b -$53, $E,-$22, $5A,-$76, -2, $57, $3F, $2E, $31; 5600 dc.b $77,-$59, $34, -3,-$72, -1,-$32,-$61,-$28,-$61; 5610 dc.b -$36, $7E, $67,-$31, -9, $6B, $44,-$6E, $54, -$D; 5620 dc.b -$A,-$31,-$41, $63, -4, $19, $3D,-$71,-$17,-$5A; 5630 dc.b -$6D, -3, $2B,-$4D, $78,-$15, $68, 7, -$D,-$3B; 5640 dc.b -$13, $52,-$1E, $69,-$57, 6, $61, -$E, 9, $2C; 5650 dc.b -$7B,-$5A, $1E,-$2D, $4D, $48,-$42,-$5B,-$3C, 3; 5660 dc.b -7,-$1E, -7,-$44, $75,-$49, -$C,-$52, -3, $34; 5670 dc.b -$2E, $7B,-$37,-$14, $7B, -$A, $37, $79, -5, $66; 5680 dc.b -$6E, $49, $25,-$62, $2E,-$39, $67, $6C,-$7D, $53; 5690 dc.b $39,-$43,-$62, 3, $50, $19, $44, $62, $52, $49; 5700 dc.b $65, $28, $50, $19,-$4D, $3C, 6,-$74,-$1B, 6; 5710 dc.b -$59, $67, $6B, $5D,-$74,-$2E, $4B, 3, -$A, $43; 5720 dc.b $7F,-$75, $3F, $D, $35, $1E,-$24, $2B,-$54,-$62; 5730 dc.b -5,-$26, $52, $49, $24,-$6D, $61,-$50,-$3C, $59; 5740 dc.b -$78,-$40, $33, $46,-$3D, $10, $65, $43, $10,-$6B; 5750 dc.b -$67, $2B,-$1B, $29,-$60, $49, $A, $7F, $B,-$27; 5760 dc.b $5B, -$A, $47,-$31, -$A, $2C, $6E, $3E,-$49, $7A; 5770 dc.b -9, $33, 3,-$26, $60, $3C, $6B, 2,-$66,-$2A; 5780 dc.b -$72, $75,-$54, 5, $6A,-$1D, $53, $5C, $7E, $62; 5790 dc.b -$71, $4D, $48,-$4A,-$4B,-$4D,-$22, $21, -$C,-$53; 5800 dc.b 5, $34,-$50,-$5C,-$25,-$47,-$6B,-$27, $7E,-$21; 5810 dc.b -8, $34, $6B, 4, $10, $2C,-$6D, $26, $49,-$6D; 5820 dc.b $26, $4C,-$6E, -1,-$66, $4A,-$1B,-$23, $77, $49; 5830 dc.b $24,-$35,-$33, $7E,-$37, $24,-$6A, $4D,-$7A,-$3D; 5840 dc.b $11, $66, $23, 2, -$A,-$3D, $10,-$54,-$3C, $25; 0 dc.b $66, $49, $24,-$60, $24, $29, -4, $2F, $65, $6F; 10 dc.b -$27, $1F, $3F,-$28,-$4F,-$46,-$29, $2A, $7A,-$26; 20 dc.b $6E, $6A, $48, $7D, $35,-$77, $F,-$51,-$5E,-$39; 30 dc.b -$5B, -6,-$1F,-$31,-$1A, $28, $F,-$4C, $49, $18; 40 dc.b -$6D,-$22,-$2E,-$43, $52, $49, 0, 0; 50 ArtNem_TitleSprites_1:dc.l -$7D8F7FFC, $5151825, $16351A45, $13540765, $15720081; 0 ; ... dc.l $5121777,-$7DFAE8E8, -$C7CFBF8, $18F28404, $6177585; 5 dc.l $5191774, $78F68605, $1418F487, $4041773,-$77F88D77; 10 dc.l $8F58A07, $6F8B0638,-$73F88773, $6368E07, $768F076E; 15 dc.l -$9FFF1,-$1F6D380C, $40000000, 0, $1501D; 20 dc.l $7400074,-$3CE9BE2E,-$3290240B, $9A0E98, $676D22B1; 25 dc.l -$5BA92DD5, $1A405607, $601D8000, $2BFF6A14, $A140280; 30 dc.l $14000028, $BFE, $3C8551D1,-$2F8BF8BE, $7CC9A3B3; 35 dc.l -$4B053259,-$29931314,-$6C14EC9F, $73ACFE7B,-$6A448D0E; 40 dc.l -$4897619F, -$728650F, -$5D686D2, $7B795BA4,-$490C385D; 45 dc.l $67F35F9C, $54B3610B, $33B3B3B0, $EC0015, -$D14C6AF; 50 dc.l $1AD17A73,-$14914E2B, $7A7E7BF4,-$5406776A, -$A1DA58; 55 dc.l -$391E90D8,-$2B5D8459, $7DD2D5DB,-$74A099A3,-$1406312E; 60 dc.l -$3300000, 0,-$4B33170C,-$3992B860, -$B500E80; 65 dc.l $2B4007,-$5F0BE17D,-$2F85C300, $2BEC00, $1FF7B32B; 70 dc.l $2FED1595,-$7D204B2D, $611B4CA8, -$5BFFFA, $765EB346; 75 dc.l $5869B432,-$4DF16C35, $5BF4CA8E,-$70ED28B6, $4F99F; 80 dc.l -$48380AC7,-$40AF64D5, $6BF4896F,-$2DDA40B8,-$6902DD95; 85 dc.l -$55B26D94,-$717FFF18,-$17C5C5D1, $5D73F200, $E6ECBF; 90 dc.l -$582C9ECC,-$3565918D, $400027CE, $693E7347, $49B24DA7; 95 dc.l -$29929351, $5B67B35A,-$6389485A, -$90B0D17,-$4438184B; 100 dc.l -$218D3B55, $2D7E8400, $54749, -$C65C5B1,-$61451454; 105 dc.l -$262582C0, $7CF1FA5B, $765FD771,-$6509305A, $77DBF5DB; 110 dc.l $5FF71AFD, $AFEC57B,-$1C09C970, $1545474, $54D75C24; 115 dc.l -$5559C2D, $CA96F45, $67F4647A, $31587C86, $3F679C47; 120 dc.l $3F45EE9D, -$ED3A12E, $5EF1892C,-$4ADA695C,-$4D281799; 125 dc.l $22D2B4AD, $2B49E559, 0, $2F79C85,-$6B048000; 130 dc.l -$403EA10D,-$6B001E00, $FFA124F,-$3206B1B5,-$46D220A3; 135 dc.l -$18D50864,-$4E03F000, $5EEFD,-$3FFFF812, $482B2793; 140 dc.l -$38000000, $B7ED75F,-$5ACDFF85, $19337AA5,-$156855A2; 145 dc.l -$568A0153,-$3FFD805B, $6FDADA40,-$401EA6E1,-$5EDAA69D; 150 dc.l -$7405C00, $6FD1B7E,-$69A058A7, $5BF8263F, $4205653E; 155 dc.l -$402AFFF1, $60000F60, $AE6B90, $27FA5B74,-$28B61942; 160 dc.l -$2A3240B6,-$2D02D018, $5656FD88, $BFB5D7E,-$29204E29; 165 dc.l -$13BFD814, $572, -$6B83240, $7E93CD5, $15277CDD; 170 dc.l -$5945946, $6117A2A2,-$5D3D0C98,-$14B70C03,-$4D2FCA06; 175 dc.l $5B74D749,-$1B8B48C8,-$6D8BA5DB,-$1B42E9B5, $2AA2A2A2; 180 dc.l -$CABABAC, $5FFA6BFE,-$3F84EC19, $64597A4A, $16925FD0; 185 dc.l -$2009C912, $FFC7545,-$149BAB39, -$EE80728, $69FE982D; 190 dc.l -$29E4A28D, $289D224F, $4B800000, $C33DE9D, $7546A49B; 195 dc.l $5468936A,-$7575255D, $515B546A, $F46A3D1,-$752FFFD5; 200 dc.l -$68341A9B,-$53265206, $56567EED, $345930D6, $64592B62; 205 dc.l -$7374DA94, $5192CD39, $6A8C9565,-$69575623,-$1AC0B897; 210 dc.l $2459A90D, $68BB6231, $1E8D0F24, $78541E55,-$79530000; 215 dc.l $AE5F2F,-$68324552, $5F2F2793,-$5B2DD370,-$73536F36; 220 dc.l -$29987482,-$3280B9FF, $3474549F,-$16ED3727, $56D34667; 225 dc.l $B1A4B5C, $2A9581FA, $4F20018F,-$1C50CA9B, $65465656; 230 dc.l $5EAAC13F, $22A95674,-$54FFAA5F,-$59757318,-$2CB965CD; 235 dc.l -$5F2AB796,-$58134000, 0, $7E6E,-$7FAAFFE3; 240 dc.l $74074B, $3000610B, $3003B18E, $786FD34E,-$713D2F5C; 245 dc.l -$2754F132,-$31313C50, 1, $5FFB0014, $280500A; 250 dc.l $140000,-$5FE70161, $40002A80,-$1717C5A9, -$91FFB07; 255 dc.l -$240B029D,-$6016E859, $55E9DBF3, $18EDF988,-$48976098; 260 dc.l $781EFAFD, $1472979F,-$17296441, $37CBF582,-$59E7E24C; 265 dc.l -$7F53F13F, $56745EB3, $4C34F9AB, $E9A969B, $1FB14C73; 270 dc.l -$5B6AE681, $434BB63F, $31BFD659, $7DB895AF,-$741131D1; 275 dc.l -$59A43B11, $1ADDC46B, $6E37EB6E, $31FBC97E, $68000000; 280 dc.l 2, $4F44274A,-$2FFF6000, $5680F41,-$17C2F86D; 285 dc.l -$18490610,-$4E412D46,-$21ED8185, $5B6FCF4A,-$20480330; 290 dc.l $5BD80000, $AA5592,-$537B167C,-$62FAB623, $1D07C800; 295 dc.l 0, -$DE1B0D9,-$6A9AA6D1, $7D770000, $9FF0712; 300 dc.l $793C9FFE, $20005BFE, $22FE9F49, -$67AB4D9,-$19EACA06; 305 dc.l $70C4A7DD, $65696BF4, $20000000, $16912, $AC87900; 310 dc.l 0, $57FEFFF, $403AFECD,-$68616FA1,-$2E0C3CA5; 315 dc.l -$5016182A, $AB00DFC, $36E61A4D, $22A2A2F3, $686B73FD; 320 dc.l $1A000018, -$2C324E4, -$B3CD5B3,-$626AF8B7,-$4F7F1800; 325 dc.l 0, 0,-$16CB794E, $43691A68,-$2930F728; 330 dc.l -$3344D582,-$71680340, $63BCE4F2,-$4B5220EE,-$60900000; 335 dc.l $B26B9,-$3CD0C715,-$7715E537, -$6402D31, -$A205A02; 340 dc.l $6F950009, -$16922E1, -$75F02D3, -$5A3816C, $27EC63D8; 345 dc.l $17F83896, $3F4F8969, $3F4BD7C9,-$6827C432, $42C9E4ED; 350 dc.l -$1204A02F, $4FF4E007,-$4E05D60D, $5FD1692D,-$189BEFB4; 355 dc.l $7F57CC03,-$335AA566, -$2EB0000, $C749E6, $7D179AF4; 360 dc.l $484EB954, -$2D9DEE7, $5B4C2FFD,-$7FFFFCA7, $7CBE67D3; 365 dc.l $5D2790FF,-$44D00AEB,-$7D400A00, $2799F4D, $74D749E4; 370 dc.l $2A9568, -$2414097,-$3205605A, $3F4C7A00, $3E6F3CA3; 375 dc.l $6A90D3FD,-$4FFFFFE7,-$14C34B67, -$CD98B6D, $4EE8ACF2; 380 dc.l $56D5D244,-$588BEE12, $D5A0015,-$37068342, $5F35FE28; 385 dc.l $315930D, $34EEC4D3, $1D70CA92,-$38AA9AB7, $5A9AFD0E; 390 dc.l $197F4F8A, $2F55A5A9,-$75B4AB44,-$6AE2CA66, $475C651A; 395 dc.l $70CBFA6C, $7E9800C6, $5F23E5F2, -$6E0CC15, $595BF4F2; 400 dc.l -$38CA147C, $5EB6456D, $22B3B6BC,-$6521A50E,-$286F0D55; 405 dc.l $66B91F20, $3A5BF6,-$14058A03,-$5D016CB4, $1568EB66; 410 dc.l $45EB8EAA,-$659EAF51, $57A7F4DA,-$534D2D9F, $2B1A6C45; 415 dc.l $52C8AD36, $54590611, $6913BAD3, $484AD2D4, $7854D516; 420 dc.l -$6601E110,-$53D0A4CE, $326BAA02,-$5FB1CF2D,-$7AB94905; 425 dc.l $26B7C5BA, $637AD377,-$19C0AAE7,-$1C0C3E93, -$8B61060; 430 dc.l $5B364B53, -$B87B766, $34D1A68D, $346B530D,-$73070AAC; 435 dc.l -$3891AD46, $32F68B36, $397E73D3, $14545FCD, $2D2C98A4; 440 dc.l -$2CE400CD, -$540E3B5,-$33CA0498,-$5B8DA351,-$12872045; 445 dc.l -$5471747, $5CEC6EDF,-$62BD1263,-$263A1DAF,-$1D61A48E; 450 dc.l -$701F0F43,-$49414490,-$24490C49, $6EBC6ECA,-$1A80C354; 455 dc.l -$405A3819,-$5262869A,-$26711441,-$448DA265,-$7391A248; 460 dc.l -$49131482,-$13248B4E,-$42DA404E, -$1466082, $232FCBB7; 465 dc.l -$190902C3,-$570B86C4,-$552A9EE3, $2BBC411F, $615040DF; 470 dc.l -$70311487,-$42037D49, $27B44B5C, -$CA718D, $47400000; 475 dc.l $AEFAC2, $3DFB56FE,-$4A410287,-$53942849,-$712C02C8; 480 dc.l $1AFF2DD,-$2E2F3817,-$2AD222AD, $5F98F5E3, $7CA778E5; 485 dc.l -$41B0E415, $702BE1FC, $713970FB, $3CB87BDB, $27E97761; 490 dc.l -$4A142937,-$759461C3, $2C81AA11, $49EEDEB1, $4B73DDBF; 495 dc.l $348A639E, -$2240C05, $2FD0F059,-$627F60A9,-$32880981; 500 dc.l $3CBCB89F,-$18E8C504,-$2111CCC3,-$288450FB,-$1239D16A; 505 dc.l -$26254839,-$62430923,-$398E2C0D, $5DA5FA5D, $6FFCF53A; 510 dc.l $3FA79748,-$605FFD06, $7ECE9B7E, $7BF77DB2, $15CD; 515 dc.l $59F3567C,-$512C1C8C,-$4A603033,-$689298EE,-$49A688A6; 520 dc.l $4D8BE38F,-$32EC02D4, -$2E88C2D, $2B1E76CD,-$5D23D06A; 525 dc.l $297DDC5A, $1A7B4A7B, $2FEEBC6F,-$1895FC35, $7BED1BF5; 530 dc.l -$60DA209A,-$7A7A2175,-$452D725B,-$44974749,-$739284A1; 535 dc.l $10FB5F57, $5DA53EDE, $256BC5CD, $5E1E176D, $5D76271B; 540 dc.l $4EF58DA7, $77BC6DA9, $46C3ECFB, $57FE400, 0; 545 dc.l $154749F3,-$65EABEFC, $AA0E,-$7F17F180, $3A0E80EC; 550 dc.l $3B03B0EC, $6BF48BFA, $69D2CC6A,-$7FAFFFD0,-$3AA7F89F; 555 dc.l -$27FFFFD5, -$9FFFF6, $1400A01, $4029361D,-$7B9D9374; 560 dc.l $142DE491, -$4B00000, 0, $39893FD, $3DBBCE4F; 565 dc.l $25E7349C,-$6E86ECBB,-$1B717180, $1395A5AF,-$2F800000; 570 dc.l $B2243,-$5AAF6FFD,-$38000000, $35FA19,-$37120000; 575 dc.l 0, $12AC8E, -$C742EFF,-$258655AA, $5D50350A; 580 dc.l -$7FEC9C00, $1D00002C,-$74D24E33,-$5645E9E6, $5DB96117; 585 dc.l $3CA2C914, -$1900000, $1547469,-$5CC4C59D, $3646319C; 590 dc.l $230ECE86,-$45DCD181, $3DF985CE,-$11A1A71D,-$6A188F51; 595 dc.l -$7FFF56, $4D21ADCD,-$4B628B73, $3469C34E, $2778B74E; 600 dc.l $3C6DF98E, $3F3D9C79, $4E98DFAA, $625D9738,-$59CC390B; 605 dc.l -$352D2D1D, $7F4D32EF,-$3164E441, $4AB95E7F,-$5722DB49; 610 dc.l -$17438552, -$A0D3A08,-$6D06C067, $3FCF7E7F, -$8276D37; 615 dc.l -$BCA6EB, $4F2C2794,-$4491AB94, -$91AE87A,-$30D72987; 620 dc.l $3F1593E6,-$10B750EB,-$5BB1B449, $2D78E5E9,-$35075B8F; 625 dc.l -$36891A84, $5236F1DA, $53A47A14, $7E949EFE,-$6B2D9121; 630 dc.l -$675A4611, $5CC53D77,-$5592405B,-$1A39EC8A, -$4851C63; 635 dc.l -$516A2521,-$66032105, $22DDD16E, $5268AD42, -$5BA15AD; 640 dc.l $48AC0C13, $40C7F57C,-$3FFF5FB0,-$5EC93AFE,-$69401280; 645 dc.l $CB671F,-$5B6D3452, $39ACB1FB, $792FEDFB,-$26C416DC; 650 dc.l -$DFF388F,-$1BB7D214, $2FB000, $57D,-$7FF01D22; 655 dc.l -$56642B00, $F6, $2B99F4D, $74D749E4, $B7EC71D; 660 dc.l -$12D60849,-$17B484C2, $5ADD1964,-$42CE05E4,-$15B56AB7; 665 dc.l -$17C0000, -$9FFFFF6,-$1982D869,-$3418B671,-$1D23F51B; 670 dc.l -$CC16C35,-$1A0D06F5, $73D73654, $548EAACA,-$71348015; 675 dc.l $24FA6BA6,-$45B0E000, $57D9FA, $6BA5BF4B,-$719460D2; 680 dc.l $7D7145EB, $3FE31FC5, -$C5A460B,-$38C14972,-$5F4009CB; 685 dc.l -$1942AFF, $7F8D8A4F, $2568BFD5, $31FD5,-$51BE0DC2; 690 dc.l $41F23E47,-$37F16C1A,-$25B145BA,-$65CB2E5A,-$73130B61; 695 dc.l -$59434D99, $512C675D, -$EB4BB53, $42988C7E,-$680BA000; 700 dc.l $4FF8E,-$43280977, -$5B2CFB1,-$2D20592B, $1E8F4787; 705 dc.l -$7595CCBC,-$386AEAE5,-$5859E62F,-$2E597313,-$502D00E8; 710 dc.l $2D92BD2B, $2676933F, $769B7776,-$5A9FFFD5,-$68342EDE; 715 dc.l $746AFA00, $15CB56, $4DACAC49,-$4E62B64D, $6A42CA74; 720 dc.l -$72D9DD38,-$3464DCD2, $71CDB48A,-$29B7145A,-$28164E06; 725 dc.l $6B7A0000, $4E2A8F1, $274AC9E2,-$56A6C3AA,-$7130ED4C; 730 dc.l $62968C35,-$6E96ED4D, $5152C969, $611A936A, $4D0746A1; 735 dc.l $36A4D2A9, $1FD65878, $2CCEDACE, $11AD02B3,-$1AAD3350; 740 dc.l -$2A34C3EC,-$4CE55EB6,-$18380000, $2790015, $2790461D; 745 dc.l -$62E97B26,-$70BFA988,-$6C2E8095, $7A795906, $268C5AF; 750 dc.l $59552ACA,-$7295C2FB,-$5DF275F1, $434CF18A, $5A28B4B4; 755 dc.l $52714C53, $1147A593, $19B232C5,-$6E56EB3E, $35168611; 760 dc.l -$565B9597, $1A70D8BF,-$168B30BB, $4D5168D6,-$5A4D70F4; 765 dc.l -$4B6194FC,-$662EA58F, $4589B4A9, $1345A369,-$6E9A60D6; 770 dc.l $2B5BD168, $5E71995B,-$62D232A6,-$3604B3DD, $2D338465; 775 dc.l -$5D3B6E43, $2DC3535E,-$4EB28E87, -$F03C053, $6EFBEB0F; 780 dc.l -$60E02200, $AA4AB, $776809A6, $39CE1B49,-$79B3B563; 785 dc.l -$66E96492,-$1AF6D247, $45A9BA27,-$37FFFD41, -$4D46E0E; 790 dc.l $3E454746,-$29AA729B, $52ACE956,-$61AD329A, $74D22E58; 795 dc.l $2CC61349, $6676AD2C,-$25952E7B, $49DC6AB5,-$4094FFFA; 800 dc.l -$6E0644FB, $58AA0000, $4F9C,-$2EA4B753, $3E7E4000; 805 dc.l 0, $73127D, $550D7973, $B480791, $59048000; 810 dc.l $E, -$16242DC,-$57405729,-$11CA3687, $A9AFD3D; 815 dc.l -$466911ED,-$69C41DAD,-$6A9AA030,-$435405E6,-$38000000; 820 dc.l $152A8489, $3F700000, $AFE84,-$695A9695,-$4621430C; 825 dc.l -$6E216777, $76FD42C6, $7945A33C,-$5861B0B1, -$9000000; 830 dc.l 7,-$5C019C3B, $1EFCBC51,-$103496C4, $6EFFF000; 835 dc.l 0, $52B4,-$65BC5CC1, $374D2134,-$7893DA6D; 840 dc.l $4986B537, $7E6319DF,-$1C5B9C4B,-$57A96913,-$68309A36; 845 dc.l -$2D260309, $4D453976, $5E98A6DC, $6EFCC6EF, $1CBCAF8F; 850 dc.l $3000002D, $15E2B4,-$7512EA26, $35492EDC,-$50724813; 855 dc.l -$161C6A0F, $4DB8DBB6, -$4DD2DCA,-$48C35B2D, $2B9A4D32; 860 dc.l -$4B816166,-$31016168,-$70E06117,-$1671B439, $6E336E5D; 865 dc.l -$45902B8A,-$312C70A6,-$377E1AED,-$7435280F,-$45096894; 870 dc.l $79AF9DB7, $42DE3F79, $29FE727E, $1788B4BF, $36AD6DAB; 875 dc.l -$3C354829, $15DB11A9, $3B2C6197,-$77A58B7C, -$EC02D23; 880 dc.l $729A4CF9,-$1ACB62E9, -$B050248, $2FA3EE5F, $4D6DBB85; 885 dc.l -$70BA411B, -$308B5D2,-$19A30E41, $75BF438B,-$29E2E89D; 890 dc.l $49AEE988,-$4AD2D0A5,-$3812A86B, $2BCA95E2,-$70E41E11; 895 dc.l -$26E1DAA2, $11E295F1, $5803F6A7,-$12BB5600, $56847E9A; 900 dc.l -$24481136, -$1700B05, $6EFCD4FF, $4FB00000, $15CBE5F; 905 dc.l $2F97CBE5, -$CA00D7B, $733E93CC, -$5B0D070, $7956401E; 910 dc.l -$2502D4D1,-$168E20CD,-$6FF9C432, $40B29F70, $1FD80035; 915 dc.l -$614E2C53, $3F4FDD7F, $6FFB1A7E,-$7BFFF6B1,-$46C6D596; 920 dc.l $584C7739,-$24C28341, $48013FD2,-$50128454, $7F4569FB; 925 dc.l $100002DD,-$3D4DF891, -$D7F403B,-$39983000, $3D; 930 dc.l -$7FCD990B, $4BD52F54,-$42AD0AB5,-$2B000000, -$9FD6A96; 935 dc.l $3A351D16,-$7134B65A, $2936C534,-$739D6C99, $45674567; 940 dc.l $40040000, $3D80000, $2850293, $631426C6, $285915B1; 945 dc.l $42C8ACE8, $2B2D3482,-$4C5D4ADA,-$7DC00000, $1581D0; 950 dc.l -$55EB86A9,-$644DB2E3, $25569A61, $272DCEDB,-$4B6A1819; 955 dc.l -$2FF4DA6D, $10A8A984, $5654B361,-$74D8A3CE,-$4AECB342; 960 dc.l $1279AF67,-$31DB2731, $6C7EEFB6, $3D3F47D2, $27E8015A; 965 dc.l $7AEBD1B8, $5FD36E6C, $47E9787D, -$520061A, -$321EC0C; 970 dc.l -$5224D34C,-$3B89769D,-$2EAC978C,-$2060C7BE,-$3742BD93; 975 dc.l -$42A74C91,-$4D850E72, $31DAF8E3, $7AB5B8DF, $3BE6778B; 980 dc.l $6F5F2D97,-$5A5146A2,-$7482346B,-$35103891,-$2CD10031; 985 dc.l -$221CA6A3,-$4AB35359,-$62859121,-$252287A5,-$703FAA4B; 990 dc.l -$3CADCA25,-$42431D22, $6B16BAF9, $2EFF5E3F, $33FAA000; 995 dc.l -$3201981, $356BFECF,-$2A90E90D, -$A7269D1,-$74139D0D; 1000 dc.l -$25A5412E,-$2A29B0ED,-$46FFF0F1, $70C6D6BC, $2EDA85BE; 1005 dc.l -$51482275,-$35D04530,-$4822C412,-$6101A029, $DF58; 1010 dc.l -$2108721A, -$2A1240B, $16DF889A, $576DF58D, $5DEFB9F7; 1015 dc.l $3DDEFB9F, $75B6C6C4, -$912AB8C, $74074B7E,-$20A414D1; 1020 dc.l $5ADF8383,-$7C7C7E84, $4BF39FAB, $54DFCC00, $354AB51D; 1025 dc.l $1A8E8D47, $46A3A2D1,-$2696CB9B,-$5B2F9D58,-$2AC00000; 1030 dc.l $F600, $285029, $36314D23, $18A6906C, $53483154; 1035 dc.l $65A1342B, $4AB49F76, $296A4B69, -$EA24392, -$DFFFD57; 1040 dc.l $567437BB, $3A1BE68D, $34B71845, $6971B952,-$20603582; 1045 dc.l -$6DB42D27,-$2063CD19,-$49CCB163,-$45BAE80D,-$4E169033; 1050 dc.l -$10192068,-$3DA1D052, $2F3943F8,-$43D11843,-$4445D3A1; 1055 dc.l $74B1C10B,-$46114D4A,-$1A2342D3, $75EAFDA7,-$4600A056; 1060 dc.l $6EE93DFA,-$330CC175,-$41264905, $7A2E465A, $5537E291; 1065 dc.l -$48D0A9FC, $1314F5BF,-$50CA0A1B,-$3D0F4B0B, $5F1ADDC2; 1070 dc.l -$E95B681, $376CC9F7,-$51121441, $1F9EDFF9,-$170A1206; 1075 dc.l $292612D7,-$5A87CF66,-$76A864B1,-$79873287, $6EADC3A4; 1080 dc.l $5396D2B6, $77F49629,-$662CC45C,-$52A22792, $24621F35; 1085 dc.l $6AEEB6FC, $662CC638,-$2CF4678A,-$5115361B, $17D67C2C; 1090 dc.l $79E392C9, $7CBCED28,-$2434A827, $762FE3F5, $7F9A45DB; 1095 dc.l $7CEF0A95,-$2408B488, $5FCEF93F, $69ED88AE,-$3EC2544F; 1100 dc.l $6B90BB18, $416176D5,-$196924B7, $1B5931B4,-$2E2F3803; 1105 dc.l -$3F022105, $5ED096F3,-$689B3869, $6DE96DB7,-$5B2FFFF6; 1110 dc.l -$5E4320C3,-$69C2882A, $37D612DF,-$5C137404,-$5BFC2800; 1115 dc.l $593C8, $2B202400, $1DDFAFF, $54D7B000, $1AEE7E; 1120 dc.l -$7B6EDAB9,-$6812206E,-$5C019ECB,-$3686A5B8,-$43600708; 1125 dc.l -$696D2DDC, $4B129F77,-$69C07523, $F600000, $24489; 1130 dc.l $5643C9E, $4057D83A, $1D0C97AA, $5EA97AA0, 0; 1135 dc.l $7E8496,-$5B817C00, $2D0F4ED3,-$58D76109,-$5A20842E; 1140 dc.l -$1F16CB77, $5EC9D577,-$266A6D6F,-$79A1564C, $2B2FE913; 1145 dc.l $68B32EEE, $5BF5C637, $5B82D92D,-$3A4C51F2, $31FA3FD1; 1150 dc.l $7AF22D20, $246BBE3B,-$1C430073, $6FE46D48,-$638D22A5; 1155 dc.l -$70E1D8E5,-$47648EC7, $56F5B815,-$6A46A133,-$7121C6A3; 1160 dc.l $63AE76ED,-$406A036A,-$6E48F70C, $5E96454C, $668BFB7C; 1165 dc.l $668BCD53, -$CE48191, -$A7FFFFF, $4AF2DA8F, $1CA9A8C7; 1170 dc.l $2A59ADCA,-$696A46AE,-$4356A1C0, $B276AC0, $57A1FA53; 1175 dc.l -$B56A0E1,-$15000000, $36AC52,-$435AA0EB,-$76A83DC4; 1180 dc.l $491F7D6F, $247E1527, $14AA37F5, $7F36F48F, -$BBA8800; 1185 dc.l $1AA8564,-$30DA98B6, $369314D3, $27A4FF48, $1AFD5F; 1190 dc.l $6FCC7E7E,-$265D5D0F, $6CC51178,-$29967033,-$24C50323; 1195 dc.l $5B771A65, $489A4D8A,-$4F571276, $4D92AD4A,-$5AA7FFC1; 1200 dc.l -$40067287, -$E2809B, $6E6BE714,-$48C39966, $4EDD3D2D; 1205 dc.l $2FCF6562,-$756858E1,-$6132DA1E, $319E3B78,-$6998DA1F; 1210 dc.l -$30D0F26, -$C725A91, $35BACB11, $2BEEC77D,-$51134459; 1215 dc.l -$61D466E1,-$3EF00382,-$20A05DA2, $73F35E7F,-$3DA45013; 1220 dc.l -$E860124,-$75942C4A,-$17586817, $65F9BFDD, $5B38FCF5; 1225 dc.l -$4D52189A, $56D4B1B6, $332B4B0C, $5B6AC4E4, -$20974B5; 1230 dc.l $3B62F8CF,-$550189D2,-$52C74582, $6B9FE6BD, $400000AE; 1235 dc.l $5F23E5F2, -$6E0DC1C, $7CD7D800,-$51982D87, $7CBE67D0; 1240 dc.l $27207900, $57BFB00, $5BD80027, $22415900, $3C8AFB05; 1245 dc.l $7200000F,-$6FFF8380, $1540C7F, $15000000, 1; 1250 dc.l $52ACE805, $52000000, $3F, $4F3EA321, $5641E8D6; 1255 dc.l -$2E1A000, 0, $3083A, $33F5FEAC, $200E855A; 1260 dc.l -$4BFBD52B,-$5FE02A43, $268C000; 1265 dword_33E2AC: dc.l $510AB11,-$2DEDCC56, $25A8166C, $52F5F3CB,-$4D197696; 0 ; ... dc.l $22E66C98, $4B5195A7, $45874569,-$4DAA6168, -$154A854; 5 dc.l -$2C57ECBA, $AB15415, $7EA8F44,-$4DBA3AB4, $20D4C5D0; 10 dc.l -$54DC2E76,-$2E752FD8, $7A0F40A, $14B, -$AAA6FC; 15 dc.l -$4B4F256B,-$66D53676, $69B9BF55,-$5FEBD7EC, $F4ED587; 20 dc.l -$1E06A9E1,-$2948FFD5, $15E44579, $127E52BC,-$1D83473B; 25 dc.l -$E35D836, $1E07E405, $7904ABBD, -$CA0000, $3DC2; 30 dc.l -$108A0C63, -$35A05D4, $775F29C9, $6F139412, $D7E8A56; 35 dc.l -$4068924F, $785DB57E, -$540000, $1F, -$1B400CB; 40 dc.l -$2106019, $7B6D8FCF,-$55A1A1CA,-$3D95B568, -$2F07B49; 45 dc.l -$14AE2D81,-$63012800, $15B83D,-$1F621D89,-$392C7425; 50 dc.l -$31D044E9, $58BEE54B,-$53A08D5E, -$6A08D5A, $2FB6E54B; 55 dc.l $6EC24F9C,-$30000000, $7E4FCA27,-$35D814ED,-$1D0C1E08; 60 dc.l $7E55E5FE,-$4FF60D1D,-$69C0CE15, $B7E5C79, $5ED0F77B; 65 dc.l -$68E10DFD, -$9FFE39,-$50D63A1D,-$70A52072, $4BBA5A8E; 70 dc.l $365BCFBD,-$3F60013D, -$C98EA43, $6FBEB1BC,-$1BD0E944; 75 dc.l -$5C7F6C35, $69DF69DE, $152D78DB, $578BAA62, -$E822944; 80 dc.l $2EE7BE13, $10BB9535,-$4F565429, $72A3A3A0, $15FCDBC; 85 dc.l -$4784288B, $77579001, $3E3D67EA,-$4828D444, $3F15FE58; 90 dc.l $15E1F89F, $2E27EB13,-$1A88781F, -$6AA0000, $AF; 95 dc.l -$19110352, -$F040000, 0, $3DDEF13B,-$3B10EC44; 100 dc.l $5A3F37EB, -$456A91A, -$53470A2, $1EEBFAB0, $9C8AECF; 105 dc.l $25EFABAD,-$18461BAA, -$7425047, $76EF88DD,-$4B588DCB; 110 dc.l $7F2B5E7E, $75F2BE3F, $476F29C4,-$10495049, $24C5F6E4; 115 dc.l -$6741246D, $5CB98013, -$3263E40, $6FAC56FB,-$31B4D2BB; 120 dc.l -$5A5425A8,-$450D3B4B,-$4447FA51,-$701EA835, $64FD9AED; 125 dc.l $3BECA98F,-$310D1873, -$33FFFF3, $72ACAB77,-$1BEA6A92; 130 dc.l $159562B, $79F2E1E1, -$2948821, $58ADDF7D, $64FBEB05; 135 dc.l $64579078,-$55B5441B, $5DFE2575, -$22076A1, $17AFE89F; 140 dc.l -$3409A76E, -$1312D75, -$188A873,-$54D0FA51,-$21C39D08; 145 dc.l -$4112BD12,-$4A0E863E,-$11D283A1, $5E717FDE,-$520A05D1; 150 dc.l $25F3C42F,-$60101049,-$180A462E, $7CD76FCF,-$40182AD3; 155 dc.l -$49EFF8B9, $474AF32A,-$7C600000, $3F0F,-$3C0F03F1; 160 dc.l -$3C0FC100, $3F0056E5, $7F4413F3, $5BEBD56E,-$482A290F; 165 dc.l -$18969515,-$14E86BD4, $63F33C6F, -$A21A877, -$190A065; 170 dc.l -$28191840, $4FF384, -$3F01F52,-$30180503, $7E8A2D7F; 175 dc.l -$2F7FFFF5, $2BBEFF5F,-$122400A0, $4FC1E, $2BB3EE; 180 dc.l -$6C400000, $15FDDEBF, $76016957, $67957679, $5636ED3; 185 dc.l -$43520000, $56EF77,-$406950F5,-$4A50E826,-$2385101B; 190 dc.l -$30E3A83D,-$361A4C14, $18E0FCD9,-$50E91FA3,-$43B076F1; 195 dc.l $7009F9C3,-$39055952, -$8A787A3,-$5287412A,-$43A089EE; 200 dc.l -$E822575,-$116208A5, $6C6EB767, -$E187185, $4AF2DB7E; 205 dc.l $37ACA27B, -$6A28961, $2DAA8207, $24E5FCBD,-$34443B55; 210 dc.l -$4BA48819, $57778BAE,-$10311139, $64B6ED7E,-$6136502D; 215 dc.l -$50013536, $7795E25E, $7DF6FCFD, -$C2491B,-$1834071E; 220 dc.l -$1902881, $2FD3DE51,-$4914BA0A,-$2818889D, -$B040E31; 225 dc.l $5CC1F9F1,-$1442CE49,-$74392511,-$4D59C0C5,-$446240B2; 230 dc.b 4 dc.b $C0 ; À ArtNem_TitleSprites_2:dc.l $F8004, $C151C27, $7D351E45, $1D551B63, $4720083; 0 ; ... dc.l $302177C,-$7BFCFC7B, $40A8605, $1A8B040B, -$D71A9; 5 dc.l -$6C52ACA2,-$571DFFFA, $35B559F1,-$2A01A496,-$4928A7FF; 10 dc.l -$3AEB8D5B, $71FAD3EE,-$56880B29, $4FE6A977, $49F6F8FD; 15 dc.l $51C51000, $1D4200C4, -$B40650, $8B68003,-$55C6AD5B; 20 dc.l $4B97F5F1, $5AFB58AD, $6572D695,-$181710A9, -$C0C803A; 25 dc.l -$402E2151,-$18D296A1, $2B15ACA7,-$3A9488D2, $54A951C4; 30 dc.l $1D5B5B, $6114FD5F,-$16A03F74, $4200023F,-$502A6A43; 35 dc.l $6EB2BCFE ; 40 dc.b $B0 ; ° dc.b $C0 ; À ArtNem_TitleSprites_3:dc.l $E8024, $8720181, $51C8315, $1E75178A, $5182516; 0 ; ... dc.l $777D8C05, $1D240944, $A577C64, $D72008D, $519FF55; 5 dc.l $5FE04C52,-$5013FF13,-$6A037F84, -$48A7FD6,-$2A05C482; 10 dc.l $718FE680, $39009FD,-$2818C0CB, -$4C11C06, $7FE0C81F; 15 dc.l -$1510070F, $7BE7FC00, $55BF79F9, $1F4FE87D, $3FA1FCA3; 20 dc.l -$46F04841, -$2E01940, $6379BCDE, $6AD4006E, $15F9F900; 25 dc.l -$60403CAB, -$21813F1,-$3283080A,-$6AA9807F; 30 dc.b $50 ; P dc.b 0 ArtNem_TitleSprites_4:dc.l -$7FDE7FFD, $2140723, $1351745, $1A58F967, $7A740881; 0 ; ... dc.l $3001519, $2638363C, $463B8A05, $16177B26, $3938F88B; 5 dc.l $406140A, $263A3518, $4409551B, $68FAFFFF,-$75263A0F; 10 dc.l $79BF709A, $176B6717,-$3A16A955, $4153B384,-$2832099C; 15 dc.l -$1EF83BE0, -$D047827,-$6CD0CF9C,-$11E099B4,-$433E6C4B; 20 dc.l -$E77778,-$77007527,-$6CD0CF9C,-$11E090B1, $4BDDF3EE; 25 dc.l $3D0F90F4, $737CAD9C, $5F17C6B3, $176BB5F3, $7D9C5F17; 30 dc.l -$5AA552FB, $4ECE135F, $37DBD3D2,-$320CEEFA,-$51CE9303; 35 dc.l $1EBE6BE6,-$4A2C705C, $242139FA, $3D7CD7CD, $6BA71F48; 40 dc.l $487F1B37,-$48590BDE, $1C469BD3, $217B7A6F, $4221C469; 45 dc.l -$703DF52E, $F06B923, $6CB835C,-$4FBCFF20, $3DA41E0D; 50 dc.l $72460D97, $6B96086, $1C07B48, $3C1AE48C, $1B785BE1; 55 dc.l -$7DE7F8FF,-$12DF0F95,-$6DCF921F, $6F860860, $1C07B483; 60 dc.l -$3E9C99F5, $3ED81B50, $3655EC2D,-$40EB7E4D, $6ACC2F66; 65 dc.l $1F2DED30, $584CFE38,-$2C8533BC, $44444444, $44443FF2; 70 dc.l -$7D4B204B, $5C87121F,-$3C0359F6, $438C582B, $4DFB55C8; 75 dc.l $7121FC3F,-$359F5BC8,-$3A7D4B21,-$4891BE3A,-$438507F8; 80 dc.l $4997B4DF,-$4891BE3A,-$438507F8, $4997B4DF,-$4C0FF0A6; 85 dc.l -$1F28D09F, $2994A169,-$40981FE2,-$4A3E51A2,-$3DACDEB5; 90 dc.l -$77A91798, $5ECC150B,-$265ECF99,-$3D32668F, $ADD0D0B; 95 dc.l -$267D5E85, $34260CF8, $595DFFA8, $74BA5C3F, $1105BD66; 100 dc.l $FB0FEC2,-$5E994258, $6987C8BB, $69966F90; 105 ArtNem_TitleSprites_5:dc.l -$7F757FFC, $5150C25, $12350E46, $2A551065, $11720081; 0 ; ... dc.l $50F1763, $376948E9, $576A78E7,-$7DFAEC7D, $63218E3; 5 dc.l -$7BF8997B, $8DE78DB,-$79FAEBE8,-$25D717C9, $6E68E677; 10 dc.l $68870770, $78F08805, $1678EB89, $62F18E5,-$75F89D75; 15 dc.l $50D176C, $38F278E2,-$72FBFBEA, $3028E438, -$B971589; 20 dc.l $6B8E062B, $18EC58DF, $77678F06, $2E18ED38,-$1100FF3B; 25 dc.l -$3206320B,-$600A9A04, $577ED000, $19F9CDC, $33; 30 dc.l -$C648000, $6654FD9, $2D7FD87F, -$4478CD3, $66F801A3; 35 dc.l $3EDEDF58, $1A33EDED, -$A7E5CC2,-$2120A7E6, $33EDEDFF; 40 dc.l -$2EAC0534, -$1373015,-$7CCAEBE9, $7C0198E0,-$745A6A33; 45 dc.l $20FAFF46, $31E74B2E,-$55730188, $C43F9AC, -$1251FA0; 50 dc.l $726E497E,-$1AAFBA03,-$436F710A,-$66C1E67B, -$20D1D14; 55 dc.l $1D880973,-$55B07198,-$46A909C2,-$436297C3, $6CF5FD0D; 60 dc.l -$33828F49, $73AF0920,-$11B5437F,-$252866C1,-$2DB1C1F9; 65 dc.l $3C731BF9,-$779DDE76,-$538969C8,-$1ECA4CCE,-$138734BB; 70 dc.l -$1456928C, $2B5FEFAD,-$2E4345F7, $7A467FCD, $54BFF96C; 75 dc.l -$3F3F3C97, $1D4E5549, $35C8E9C3,-$7B885B7C, $123BA4D2; 80 dc.l $D20D022,-$2F97C955,-$2646919E, $557C6E62, $39295239; 85 dc.l $19B28E48, $20BD4BFF, $2EBCFA0C,-$1800C01B,-$2860BE64; 90 dc.l -$180346, -$C17CC61, -$30068A2, $7D0673FF,-$65C00D88; 95 dc.l $7386700, $7C1EBA96, $68E49BEB, -$26290E1, $7AEA5BA; 100 dc.l $172FF7C1, $52082FF7, $57890EA2,-$6E42DCCC,-$540D190E; 105 dc.l $477925A4,-$336E336C,-$20CEC9C8,-$7E80BD17,-$34B2471A; 110 dc.l -$714D4141,-$2E4D3D42, $16D3576D, $56B96E92, $2DF045AE; 115 dc.l $364A915A, $4105E472, $CFEB31B, -$36DA039, $9749B42; 120 dc.l -$C796E4, $4D8E266A, $6BE293FE,-$6290D519, $17FFE054; 125 dc.l -$78A8EE54,-$23102B4B, $467E9C2,-$502F7B4A,-$40A3FBA1; 130 dc.l $56327571,-$41D0D53A, $5D5768ED,-$5F9DEA9F, $FD5957F; 135 dc.l $746686FF,-$5BE80320,-$401EFA01, $700AF352,-$1B6E5008; 140 dc.l $6AF8DDA8, $67F7D690, $4128916E, $E456CF0,-$6DD206B3; 145 dc.l -$27A507A0, $1D1572B5, $1DF9708, $6319B8EC, $22F83E2; 150 dc.l -$66BD4E0B, $23E172DC,-$1B4118DA,-$2C45D5B6, $3BA09246; 155 dc.l $7D57FFAD, $EA17995,-$4026F981, $5C19AA80,-$441FCCE7; 160 dc.l -$5AE8DB8B,-$33500984,-$59CA8542,-$6D854261,-$10F75AA8; 165 dc.l $36584DAB,-$363884C1, $57F9819A,-$3A17546B,-$57F10348; 170 dc.l $4318CDD1, $6F60E48D, $271A63AA,-$156E766B, $59563E48; 175 dc.l -$471F0A47,-$20674556,-$26B992CC, $4A310824, $1208003B; 180 dc.l $36D4B352, $75DF29D7, $7F095D5A, -$1628848, $42D04DED; 185 dc.l $4AF84E3C, $3FDD7015, $3EDA93F2, $48EB95F5, -$1321D42; 190 dc.l $165E7BA1, $6FD7D57A, $2F731A8E, $46370836, $782A4AF6; 195 dc.l -$1B3B8A5B,-$7E7F7465,-$6588A806,-$6506963E, $5C0F00E7; 200 dc.l -$55606B6B, $334D9D94,-$652E4BA4, $53D88A96, $56D53690; 205 dc.l -$41C8EE46, $37A3B65A,-$40D4A071, -$8D0E801,-$1E7BD82B; 210 dc.l $7D3FB61A,-$1665E8B1, -$734B024,-$29278F99, -$A3710DE; 215 dc.l -$B340D6C,-$692CD807, $4A4518DA, $31AE4D81, $16C1B06D; 220 dc.l $2A6DABB2, $4ACF6524, -$A39D5CD,-$452A12C7, -$97A2EB9; 225 dc.l $72392796,-$3B9C904E,-$5BEE237C, $53F8CA8B, -$36DA039; 230 dc.l $9749419, -$31FF69D,-$7DD0179B, $5CD20FAF,-$736C32CE; 235 dc.l -$462B6890, $1243D25F,-$34FA1502, $3233F924,-$4071F3B2; 240 dc.l -$6EACCE04,-$1A3AA6AA, $2019CEC4,-$60E32C72,-$484E0A2B; 245 dc.l $683D6DD3, $731F1B77, $84BD1D, -$34F694A, $7F5953FB; 250 dc.l $224E3FE7,-$2170C781,-$44CEF3B3, $2AC4D763,-$4CA80BCF; 255 dc.l -$3D94990F, -$9C39A5E, -$50AD094, $2F5FEFAD,-$2E4345C9; 260 dc.l -$5B98032A, $5FE4A81F,-$22173DA1,-$56ABE774,-$65C40D0F; 265 dc.l -$21B560E4,-$36E014D5, $400022D2, $366C2B2F, $6EE65C5E; 270 dc.l -$6F45D6BC,-$69EF02A3, $12090477, $247991BF,-$26E60290; 275 dc.l $66A066F8, $31E74B2, $6907D7FB, $318F3A59, $71FCF062; 280 dc.l $7F359FD,-$4CA60397, $7EE5A4BF, $6E0ED20B,-$2E041FF8; 285 dc.l $637638A4, -$D89AA44,-$71C89CC5, $57F57DAC,-$23FE5078; 290 dc.l -$29FFFF98, $E2,-$2325C972, $454035AF, $14758EFE; 295 dc.l $3311BFB9, $5419FB70, $1DA6812F,-$20FFC4E7,-$7226B2E0; 300 dc.l -$50DE25B,-$5B447F8E, $1E92F217,-$572E006D,-$3F781AB3; 305 dc.l $42B4DF15,-$4F032FE6,-$40CADB62, $4CFD1D6F, $18DD433F; 310 dc.l -$41527930, $1AF88D66,-$700361FA,-$278EF8E9, -$96475F1; 315 dc.l $5FFD071, $7168035, -$EE53232, -$2B4B882,-$638D816A; 320 dc.l $493922A2, -$F9DD5D2, -$C09AE54, $7BAB8D99,-$264E29AA; 325 dc.l -$3A0AB20E,-$4B64D845, $13276735,-$66A13946, $6DBE3323; 330 dc.l -$1A2F2A26,-$6DD211BA, $5D2465E8,-$57142574, $476C660C; 335 dc.l -$1B69FF14,-$32259C97, -$6D510A5,-$541A58FB,-$468EAA20; 340 dc.l $1CE19C0D, $2E6CB4AE,-$31C02EB5, -$CE056E5, $7C1B7DAF; 345 dc.l -$4B52B512,-$505D4F72, $10CA7E8C,-$4A04CD62, $EB5FB0D; 350 dc.l $67337FB3, $5CE1C287,-$7FC00347,-$75509453, $49AE295A; 355 dc.l -$72BA012B, $238B49A7, -$B8CB682, $615F5FE8,-$269E0AA6; 360 dc.l -$74596A53,-$388FBAE3,-$36C0B037, $657F972D,-$6E237418; 365 dc.l -$1001FE5D, $3EDEDFFD, $3346746D, $5CB99077,-$161C437D; 370 dc.l -$40D56AA2,-$2014B3DD,-$4DE06594, $763B1AEC,-$56D94C99; 375 dc.l $1D6FE5A9, -$A9C6DD5,-$1A8AA252,-$129AEE4C,-$6DBEE56E; 380 dc.l -$3E571366,-$6AA6DF80, $47FE5D79, -$BE63FF2, $6E1BEB77; 385 dc.l -$AA603A7, $7ED00001,-$2440C800, $3377,-$18FFFFFA; 390 dc.l $7ECA9933, -$4F0A205,-$68652F53, $77C60000; 395 ArtNem_TitleSprites_6:dc.l -$7FE27FFD, $2140A24, $B351845, $1B551966, $3B72008A; 0 ; ... dc.l $409177B, $263C377C, $58FA68FB, $751A8B03, $3140826; 5 dc.l $38363946, $3A577AFF, $34BD151, $50BDE3D8, $5C6FE00; 10 dc.l $15A51501,-$77CCFE78,-$57A5FFCC,-$42E718E4, $292F8537; 15 dc.l -$36A16980, $D2F4639,-$38F5B41F, $4DF257A5,-$5FFE82D7; 20 dc.l $5CA94F0F, $104198C4, $61E1A95C,-$56A0BFFE,-$2D757F3C; 25 dc.l $1980C454, $2D001A51, $5C1DB03B, $628AE340, $78BC50A; 30 dc.l $53534EDA, $7961DC09,-$11EB57A2, $2F8007C5,-$1D7473B8; 35 dc.l -$2B9A6240, -$CD62BA9,-$27FE1920, $53869ED9,-$24FDC810; 40 dc.l $C69756,-$122B1028, $13BF, $69DBBEAB, $4007D575; 45 dc.l $6ED9DB14,-$1A563CB1, $2D3CBCCA, $79924373, $4EDDF57F; 50 dc.l $4005FDD7, $56EDD4EE, $409272C7,-$6961A19C, $4CC4D3B7; 55 dc.l $7D57D800, $408158, $44000068,-$7E57BC00, $908158; 60 dc.l $440000B8,-$7E57BC00, $E08158, $44000250, $22F08600; 65 dc.l $28082F0,-$28FFFD80, $3688601, $2B002F0,-$79FFFCC0; 70 dc.l -$7D0ED9FB, $3C082D4, $440003C0,-$7CFFBC00, $4500494; 75 dc.l -$29FFFBB0,-$79EFBC00, $4802310, $72090480,-$79DFBC00; 80 dc.l $4800668,-$79FEFB60, $408D801, $4A88548,-$28FEFB50; 85 dc.l -$79EFBC00, $4C00408,-$27FEFB40, $460D601, $4E00408; 90 dc.l -$27FEFAE8,-$7B17BC00, $52825B8,-$79FFFAD0, $494D600; 95 dc.l $5408308, $44000578,-$7D17BC00, $5A8819C, $440005B0; 100 dc.l $24108600, $5B882E8, $440005F0,-$7CF7BC00, $5F086A8; 105 dc.l $4400062C,-$7957BC00, $638230C,-$79FFF9B8, $2608600; 110 dc.l $66486A8, $44000688, $2808600, $68C81E0, $440006C0; 115 dc.l $1E0D601, $6C08290,-$28FFF90C,-$7E1FBC00, $71CA2C4; 120 dc.l -$27BDF8CC,-$5D5327BE, $74CA294,-$27BDF8A0, $680D402; 125 dc.l $7600710, $744107E0, $4680D402, $7E00710, $744107F8; 130 dc.l $3308401, $8100600, $74170810, $6C07416, $8508490; 135 dc.l $44000872, $6D07417, $8808398, $44000880,-$7BFBBC00; 140 dc.l $8800494,-$29FFF780, $25008406, $8808510,-$28FEF750; 145 dc.l -$7B6FBC00, $8E824E0,-$79FFF700, $26E0D400, $9082330; 150 dc.l -$7BFEF6C0, $7703620, $9908371, $26040998, $5C88600; 155 dc.l $9C006A0,-$2BFFF638,-$7B1FBC00, $A108771, $26040A18; 160 dc.l $2088600, $A200340,-$2BFDF5E0, $3D07441, $A300778; 165 dc.l $41000A38,-$7B3FBC00, $A4E06A1, $74130A60,-$7F2FBC00; 170 dc.l $A7002B8, $41000A70,-$7A87BEFE, $A908150, $44000A92; 175 dc.l -$7C2ED9F9, $AEE0600, $74170B20, $640D402, $B2006D0; 180 dc.l $74410B40, $4B0D201, $B6005E8, $74320BA0, $6303610; 185 dc.l $C108231, $26040C18, $1488600, $C708551, $26050CB0; 190 dc.l $2368D548, $CE00460, $74330D10,-$798ED9FC, $D1880C0; 195 dc.l $44000D30, $5E8D528, $D608110, $44000D60, $5207433; 200 dc.l $D9080C8, $44000D90,-$7ED7BC00, $DC08110, $44000DE0; 205 dc.l -$7F57BC00, $E008110, $44000E00, $6A08400, $E1803F8; 210 dc.l -$79FFF1DB, $7448581, $E3080C8, $44000E30,-$7ED7BC00; 215 dc.l $E608110, $44000E80,-$7D8F3754, $E808400, $44000EE8; 220 dc.l $21888600, $F000360,-$2BFFF100, $23A0D400, $F008400; 225 dc.l $44000F00, $5C003D0, $F400260,-$2BFFF0A0, $2207433; 230 dc.l $F802290, $72080F80,-$7BFFBC00, $F8005F0, $3520F8E; 235 dc.l $3607413, $F908191, $26060FE0, $2207433, $10400260; 240 dc.l -$2BFFEFC0,-$7B9F2900, $104004E8,-$7BFAEFB0,-$7A37BC00; 245 dc.l $106001D0,-$2DFEEF90, $6F08500, $10C001E0,-$2DFEEF00; 250 dc.l $320D400, $112001F0,-$2DFEEE50,-$7BAFBC00, $11B48584; 255 dc.l -$27BAEE30,-$7A5F27BB, $11E08430, $440011EC,-$7A4327BB; 260 dc.l $12008390,-$28FEEE00, $488D600, $1210A5BC,-$27B9EDE0; 265 dc.l -$7BCFBC00, $122CA5A0,-$27B9EDB8,-$5A7B27BA, $12508450; 270 dc.l $44001260,-$7CFFBC00, $137084E1, $260113B8, $3B48600; 275 dc.l $13E000E0, $743313E0, $180D402, $13E08520, $44001400; 280 dc.l -$7B37BC00, $14000568,-$79FEEBE0,-$7ADFBC00, $149884B8; 285 dc.l -$27F5EB40,-$7B4727F6, $14E823C8,-$79FFEB18,-$7B4727F6; 290 dc.l $15302228,-$2AD7EAA0, $2A07433, $1560C450, $36101580; 295 dc.l -$7C7FBC00, $159804EA,-$79FFEA00,-$7AAF28FF, $1600058C; 300 dc.l -$29FFEA00, $660D600, $1668216C,-$79FFE980, $2688601; 305 dc.l $169086C0, $440016A8, $24CA8600, $16C02390, $720416E0; 310 dc.l $3207433, $17388128, $79011740,-$7B7786FE, $17600360; 315 dc.l -$2BFFE890, $7108400, $17908151, $260417A0, $3287432; 320 dc.l $17A507C4,-$7A7EE7E0, $168D807, $18500168,-$27F8E790; 325 dc.l -$7D2ED9FC, $18800168,-$27F8E780, $24907208, $18800640; 330 dc.l $3D018B0, $168D808, $18E00168,-$27F7E720, $4207433; 335 dc.l $19100170,-$27F9E6C4, $3C8D80B, $19400178,-$27F9E6C0; 340 dc.l $460D400, $196003C8,-$27F4E690, $180D806, $19700670; 345 dc.l $3521980,-$7D2F28FF, $198403C8,-$27F4E660, $4207433; 350 dc.l $19F80498,-$7BFFE600, $27108400, $1A2082F0, $36101A25; 355 dc.l $5438581, $1AB881E0, $44001B00, $3C003D0, $1B4002A8; 360 dc.l -$27B3E4A4, $2C4D84C, $1B7003F0, $3521B78, $2E0D84C; 365 dc.l $1B808220, $44001B80,-$790FBC00, $1BC00258,-$29FEE400; 370 dc.l -$7DDFBC00, $1C0086F0, $44001C08, $22E0D84D, $1C2422C4; 375 dc.l -$27B2E3C8, $36C8600, $1C4022A8,-$27B2E3A0, $4388405; 380 dc.l $1C7005E8,-$7AFFE380,-$790FBC00, $1C882560,-$7BFFE340; 385 dc.l -$7D77BC00, $1D008288, $44001D00,-$790FBC00, $1DB02668; 390 dc.l -$2AC7E240, $158D601, $1DC081FC, $44001DE0, $7207435; 395 dc.l $1E0421DC,-$27AEE1F0,-$7D6ED9F9, $1E2021C0,-$27AEE1D0; 400 dc.l -$7D6ED9FC, $1E3024A8,-$2AC7E1C4, $21A4D851, $1E600560; 405 dc.l $74351E88, $3B48400, $1F1C0410,-$79FFE0E4, $4BCD80E; 410 dc.l $1F4204C4,-$27F1E0A0, $584D600, $1F6804CC,-$27F1E068; 415 dc.l $4EC8600, $1F980648,-$79FFE058,-$7AAFBC00, $1FE08550; 420 dc.l $44001FE8, $6988404, $1FF8828C,-$28FEE000, $2300D400; 425 dc.l $20008458,-$28FEDFF0, $2F88406, $20250744,-$7A7EDFD8; 430 dc.l $26488600, $203484F2,-$28FFDFB0,-$7C8BBC00, $206804F4; 435 dc.l -$79FFDF50, $408D600, $20C80518,-$7BFFDF30, $4784100; 440 dc.l $20F00478, $41002150,-$7DCF3754, $21D08370, $440021E0; 445 dc.l $104D600, $21E08208, $440021E4,-$7D6DBC00, $21F005E8; 450 dc.l -$7AFFDE04, $1E08400, $21FC0220,-$7BFEDDE8, $2688600; 455 dc.l $2240810C, $44002258, $4888600, $226081A8,-$28FEDDA0; 460 dc.l $23508600, $22900350,-$79FFDD64, $4FCD80E, $22B02268; 465 dc.l -$79FFDD40, $3CED601, $22C40504,-$27F1DD20,-$7B9FBC00; 470 dc.l $22EC050C,-$27F1DCF8,-$7CA7BC00, $23180528,-$79FFDCDC; 475 dc.l $318D600, $23408358, $44002360,-$7AD7BC00, $23942348; 480 dc.l -$27B0DC58, $25288600, $23B0232C,-$27B0DC34, $2310D84F; 485 dc.l $240826B0,-$7BFFDB88, $25B08401, $249805EA,-$79FFDAC8; 490 dc.l $7148600, $25C00767,-$79FED7C0, $6840D00, -$10000; 495 dc.l $208, $5F04110, $25085B0,-$27F6FD80,-$7A5F27F7; 500 dc.l $2B08590,-$27F6FCA0,-$7A8F3754, $40005A0,-$7BFFFBDB; 505 dc.l $6448581, $4508371, $26040490,-$7B8ED9FB, $50004C0; 510 dc.l -$7BFFFB00, $4C00350, $5600488, $32D0598, $5000352; 515 dc.l $6080570, $41100760,-$7B8F3754, $7E00260,-$29FFF820; 520 dc.l $290D600, $7E002C0,-$29FFF820, $2F0D600, $7E00320; 525 dc.l -$29FFF7E0,-$7B7727FF, $8488488,-$27FEF790,-$7B7727FF; 530 dc.l $88081F1, $26010880, $5688601, $8988488,-$27FEF740; 535 dc.l -$7B7727FF, $8E88488,-$27FEF6E8, $3708600, $9C48374; 540 dc.l -$27BAF620,-$7C6F27BB, $9FC83AC,-$27BAF5F0, $5607413; 545 dc.l $A108731, $26040A30, $668D538, $A4082E8, $44000A40; 550 dc.l $360D601, $A7C0730,-$7BFFF580, $22107209, $AE82308; 555 dc.l -$79FFF518, $24388600, $B608270,-$3753F460, $4C0D402; 560 dc.l $BC00430, $74810BE0, $44C0D402, $C0027A0,-$7BFFF3C8; 565 dc.l $2DC8600, $C8002F0,-$29FFF368,-$7B3727FE, $C988508; 570 dc.l -$27FEF340,-$7E1528FF, $CC002C0,-$29FFF340,-$7B3727FE; 575 dc.l $CC08508,-$27FEF318,-$7B3727FE, $CE88508,-$27FEF300; 580 dc.l $2F0D600, $D6080F0,-$27B7F280,-$7EEF27B8, $D800600; 585 dc.l -$7BFEF260,-$7ECF27B8, $DC002F0,-$7BFFF240,-$79A7BC00; 590 dc.l $DDF0760, $74330E18, $70C8600, $E2085A0, $44000E40; 595 dc.l -$7A9FBC00, $E4005E8,-$29FEF1C0, $27288405, $E4007A0; 600 dc.l -$2BFFF1A0,-$7A5FBC00, $E68270C,-$79FFF190,-$7F0ED9FC; 605 dc.l $E700210,-$7BFFF15B, $2C48581, $EB80760, $74630F04; 610 dc.l $26008401, $F382630, $41100F40, $21808404, $F800140; 615 dc.l $3D00F80, $760D400, $F8823B8,-$7BFFF050, $5F84100; 620 dc.l $FE00108, $32D0FF0,-$7A0ED9F9, $10180180, $3521090; 625 dc.l $5A07413, $10B002E8,-$2AB7EF50, $24E8D538, $10B026A8; 630 dc.l -$2AC7EF20, $7607433, $113083F1, $260511B0,-$790ED9FC; 635 dc.l $12000660, $74331210,-$7B8ED9FC, $123024EC,-$2AE6EDD0; 640 dc.l $668D518, $123006F8, $41001240, $6A0D400, $12600660; 645 dc.l $74331270,-$7A0ED9FA, $12C08190, $44001300,-$7E77BC00; 650 dc.l $131E0660, $74331340,-$7E7FBC00, $134006A0,-$2BFFECB0; 655 dc.l -$7B0ED9FC, $137084F1, $26041380,-$7E87BC00, $13800410; 660 dc.l -$2DFEEC70,-$7B0ED9FC, $13A00678, $743013B0, $4F84100; 665 dc.l $13C08170, $44001430,-$790ED9FF, $1458040C,-$79FFEB70; 670 dc.l -$7B8FBC00, $14B005F8, $410014C8,-$5CF727B6, $14E0A2F0; 675 dc.l -$27B5EB10,-$7A4ED9FA, $14F8A2D8,-$27B5EAC4,-$7C5327B3; 680 dc.l $15408160,-$27F3EAA8,-$7C3727B3, $157483E4,-$27B2EA80; 685 dc.l -$7EBF27F4, $15880470, $411215A8,-$7D1FBC00, $15C08120; 690 dc.l -$27F3EA40, $35CD601, $15D882E0, $44001610, $5A07413; 695 dc.l $163006C8,-$2ABFE980, $21107209, $169882D8,-$27F4E940; 700 dc.l -$7D2727F5, $16D087D0,-$3753E920, $3007433, $16E882D8; 705 dc.l -$27F4E8F0, $4607413, $17300528,-$2AD7E890,-$7A4ED9FC; 710 dc.l $17802310, $72081780,-$787FBC00, $179001F8, $410217E0; 715 dc.l $120D201, $17F081F0,-$3753E800,-$787FBC00, $184082E8; 720 dc.l $79011860, $110D201, $18808780, $440018A0,-$7DBF28FF; 725 dc.l $18AC8478, $440018D0, $25918600, $18E00100,-$2DFEE71C; 730 dc.l -$7BA7BC00, $19008590,-$28FFE700, $6688601, $19008780; 735 dc.l $4400191C,-$7BA7BC00, $19282378,-$79FFE6D0, $5918600; 740 dc.l $19548478, $44001980,-$787FBC00, $1A008780, $44001A30; 745 dc.l $4288500, $1A3802A8, $74131A80, $A07473, $1A8000E0; 750 dc.l -$2BFFE580, $2E0D400, $1A800520,-$7BFFE580,-$787FBC00; 755 dc.l $1A9081F1, $26041AA5, $5C48581, $1B802210, $72081B80; 760 dc.l $44003D0, $1B8C8120,-$27F9E450,-$7EDF27FA, $1BD48120; 765 dc.l -$27F9E400, $2708400, $1C180470, $3521C30, $26A8D538; 770 dc.l $1C600760, $74331C9C, $2CC8600, $1CE48190, $44001CF0; 775 dc.l $5748500, $1D8883D4, $44001D98,-$7CFB27F1, $1D98048C; 780 dc.l -$79FFE240,-$7CFB27F1, $1DC00368,-$29FEE240,-$7C072900; 785 dc.l $1DC084A0,-$27FBE220,-$7B5F27FC, $1DE024F8,-$7BF9E218; 790 dc.l -$7CFB27F1, $1DF883D4, $44001E00,-$7B5F27FC, $1E0085F0; 795 dc.l -$28FEE1D8, $248C8600, $1E508534, $44001E50,-$7A9FBC00; 800 dc.l $1E50858C, $44001E50,-$7A47BC00, $1EA88300, $44001F18; 805 dc.l -$5D9727B2, $1F38A248,-$27B1E0A8,-$5DD727B2, $1F588628; 810 dc.l $44001F71, $3E88500, $1F808628, $44001FA8,-$79D7BC00; 815 dc.l $20908171, $26072090, $3607413, $20B02288,-$2ABFDF50; 820 dc.l $24C8D550, $20E005E0, $74332130,-$7E8F3754, $21700390; 825 dc.l -$7BFFDE5B, $4448581, $228002C0, $3D02300, $3000352; 830 dc.l $23480370,-$79FFDCB0, $28CD600, $23900408,-$79FFDC4A; 835 dc.l -$7C6B27BE, $23D383B0,-$27BDDC10,-$7C3327BE, $24008246; 840 dc.l $44002418, $5A88600, $244002E8,-$29FEDBB0,-$7B3FBC00; 845 dc.l $246025D8,-$7BF9DB9C, $25A88600, $24808470, $44002480; 850 dc.l -$799786FE, $249C05A8,-$79FFDB50,-$7B3FBC00, $24E825A8; 855 dc.l -$79FFDACC,-$7DE3277F, $25348240,-$277EDACC,-$7D9B277F; 860 dc.l $2534841C,-$2776DACC,-$7BBF2777, $25348464,-$2776D8C0; 865 dc.l $6640D00, $28C806A8,-$79FFD700,-$7A5FBC00, $291026A8; 870 dc.l -$79FFD6C0,-$7AEFBC00, $294085C0, $44002940, $6A8D700; 875 dc.l $297006A8,-$79FFD680,-$7A5FBC00, $29B826A8,-$79FFD448; 880 dc.l -$799FC200, -$10000, $FFFF; 885 dcb.b $2A5, -1 ; 0 dc.b $FF ; end of 'upmem' END