;Let's start a silly over-ambitious project of disassembling the entirety of bank 84! macro rename(arg1) ;Uncomment the next line to enable printing of all PLM ID changes ;print " is now at ", pc endmacro lorom ;Important RAM first. { ;7E:05E7 is often used to check bits for completed tasks/picked up items. ;7E:07A5 stores the current room's width in blocks. ;7E:0DC4 is the current block number of interest (Samus / enemy / projectile contact usually) ;7E:1C27 has the current PLM's index (used for X in below chunk of RAM) ;7E:1C29 has the current PLM's X position in blocks, if it was calculated. ;7E:1C2B has the current PLM's Y position in blocks, if it was calculated. ;7E:D91A has an unknown use (some sort of counter? Incremented by hidden item shot blocks initialization) ;7E:1C37,X has the pointer to the PLM header. ;7E:1C87,X is the table for PLM's location in the room (block index; 7E:0002 array) ;7E:1CD7,X is a pointer to code to run before the game runs the normal PLM instruction - Pre-Instruction Code. (initialized to 84E6, a RTS) ;7E:1D27,X is a pointer to next instruction to be run. ;7E:1D77,X is fairly variable use. Noted as a counter and for touch detection. ;7E:1DC7,X is the argument from the room that calls the PLM. ;7E:1E17,X is somewhat variable use. Generally used to store block type/graphic. ;7E:DE1C,X counts the frames until next instruction should be run. This is decremented *before* being tested, so 0 = wait 65535 frames. ;7E:DE6C,X Pointer to use for draw commands. See 861E. ;7E:DEBC,X GoTo/Return pointer. Gets loaded into 1D27 or Y often. ;7E:DF0C,X is variable use. Initialized and used by items hidden in shotblocks (missiles use 000A). Used by X-ray scope to find tile to show. Used by doors as hit counter. Used by special graphic item PLMs (basically all unique items) ;7E:D820,X is the list of event bits (Uses PLM_Argument/8 for X, finds a specific bit) ;7E:D830,X is the list of boss bits (Uses PLM_Argument/8 for X, finds a specific bit) ;7E:D870,X is the list of picked up items (Uses Room_Argument/8 for X, finds a specific bit) ;7E:D8B0,X is the list of opened doors (Uses Room_Argument/8 for X, finds a specific bit) } org $848000 ; Routines { ;Color setting routine for... something. Golden Torizo? Why is he using this bank? GTColors: PHX PHY PHB PHK PLB XBA ;A contains GT's health, I think. AND #$0078 BIT #$0040 BEQ + LDA #$0038 ;Cap for health indexing. + ASL A ASL A ;20 byte entries, whole color palettes. ORA #$001E TAY LDX #$001E - LDA.w GTColorTable2, Y ;There are 8 possible indexes, 20 byte entries, each table is 100 bytes. STA $7EC140, X LDA.w GTColorTable1, Y STA $7EC120, X DEY DEY DEX DEX BPL - PLB PLY PLX RTL GTColorTable1: DW $1000, $56BA, $41B2, $1447, $0403, $4E15, $3570, $24CB, $1868, $6F7F, $51F8, $410E, $031F, $01DA, $00F5, $0C63 DW $1000, $56DB, $39D3, $1047, $0403, $4636, $2D91, $20EC, $1489, $6F9B, $5215, $3D2C, $133B, $0DF6, $0CF2, $0C63 DW $1000, $52FB, $31F4, $1067, $0402, $3E76, $25B2, $192D, $10A9, $6F96, $5251, $396A, $2756, $1A13, $190F, $0863 DW $1000, $531C, $2A15, $0C67, $0402, $3697, $1DD3, $154E, $0CCA, $6FB2, $526E, $3588, $3772, $262F, $250C, $0863 DW $1000, $4F5C, $1E56, $0888, $0001, $2EB8, $1A13, $116F, $0CEB, $73AD, $4EAA, $35A6, $4B8D, $364B, $3509, $0443 DW $1000, $4F7D, $1677, $0488, $0001, $26D9, $1234, $0D90, $090C, $73C9, $4EC7, $31C4, $5BA9, $4267, $4106, $0443 DW $1000, $4B9D, $0E98, $04A8, $0000, $1F19, $0A55, $05D1, $052C, $73C4, $4F03, $2E02, $6FC4, $4E84, $4D23, $0043 DW $0000, $4BBE, $06B9, $00A8, $0000, $173A, $0276, $01F2, $014D, $73E0, $4F20, $2A20, $7FE0, $5AA0, $5920, $0043 GTColorTable2: DW $1000, $4215, $2D0D, $0002, $0000, $3970, $20CB, $0C26, $0403, $463A, $28B3, $1809, $6F7F, $51FD, $4113, $0C63 DW $1000, $4236, $252E, $0002, $0000, $3191, $1CEC, $0C47, $0424, $4656, $28D0, $1428, $6F7B, $51F9, $40F0, $0C63 DW $1000, $3E56, $214F, $0002, $0000, $29D1, $190D, $0888, $0424, $4693, $290E, $1046, $6F76, $4DF5, $40EE, $0842 DW $1000, $3E77, $1970, $0002, $0000, $21F2, $152E, $08A9, $0445, $46AF, $292B, $0C65, $6F72, $4DF1, $40CB, $0842 DW $1000, $3AB7, $15B1, $0003, $0000, $1A13, $0D6E, $04CA, $0066, $4ACB, $2568, $0C84, $6B4D, $4A0C, $44C8, $0421 DW $1000, $3AD8, $0DD2, $0003, $0000, $1234, $098F, $04EB, $0087, $4AE7, $2585, $08A3, $6B49, $4A08, $44A5, $0421 DW $1000, $36F8, $09F3, $0003, $0000, $0A74, $05B0, $012C, $0087, $4B24, $25C3, $04C1, $6B44, $4604, $44A3, $0000 DW $1000, $3719, $0214, $0003, $0000, $0295, $01D1, $014D, $00A8, $4B40, $25E0, $00E0, $6B40, $4600, $4480, $0000 ;$20232 Calling same code used to load custom graphics for item PLMs... Preliminary guess? This is loading graphics after something else set the loads up, or clearing graphics. CustomGraphic: PHP PHB REP #$30 PHK PLB STZ $1C2D LDX #$0000 - PHX LDY $1C2F, X ;MoN says this won't assemble correctly? output is right though JSR ILoadSpecialGraphics ; $20764 IN ROM PLX INX INX CPX #$0008 BNE - PLB PLP RTL ;$20250 Not entirely sure, checks to clear sounds I think. ClearSoundCheckFull: LDA #$001D JSL $90F084 ; $87084 IN ROM RTL ;$20258 Very similar to ClearSoundCheckFull, but doesn't check for shoot / Samus's charge. Unused? ClearSoundCheck: LDA $0A1E AND #$FF00 CMP #$0300 BEQ + CMP #$1400 BNE ++ + LDA #$0032 JSL $809021 ; $1021 IN ROM ++ RTL ;$20270 Plays an appropriate spin-jump sound. CheckPlayJumpSound: LDA #$001C JSL $90F084 ; $87084 IN ROM RTL ;$20278 Simplified version of above again. Seemingly unused again. LDA $0A1E AND #$FF00 CMP #$0300 BEQ + CMP #$1400 BNE ++ + LDA #$0030 JSL $809021 ; $1021 IN ROM ++ RTL ;$20290 Calculate X and Y of current PLM, result in 1C29/1C2B. GetPLMCoordinate: LDA $1C87, X LSR A STA $4204 SEP #$20 LDA $07A5 STA $4206 REP #$20 NOP NOP NOP NOP NOP NOP LDA $4214 STA $1C2B LDA $4216 STA $1C29 RTL ;$202B4 Copy data in A to block type and BTS WriteBlockTypeBTS: PHX STA $12 SEP #$20 LDA $7F0003, X AND #$0F ORA $13 STA $7F0003, X REP #$20 TXA LSR A TAX SEP #$20 LDA $12 STA $7F6402, X REP #$20 PLX RTS ;$202D6 ALTERNATE ENTRY POINT ;Write to block type/graphics/BTS for a number of horizontally contiguous blocks. ;Not an instruction, call with JSR only, but X must contain PLM index. 6 byte argument (Block type/graphic, BTS, Number of blocks). On-screen VRAM not updated. WriteBlocksTGBTS: PHX PHY LDY #$0001 LDA ($05, S), Y ;New block type/graphic STA $12 INY INY LDA ($05, S), Y ;New BTS STA $14 INY INY LDA ($05, S), Y ;Number of blocks to draw. STA $16 LDA $05, S CLC ADC #$0006 STA $05, S LDA $1C87, X ;Start drawing at PLM. TAX LSR A PHA LDA $12 LDY $16 - STA $7F0002, X INX INX DEY BNE - SEP #$20 PLX LDA $14 LDY $16 - STA $7F6402, X INX DEY BNE - REP #$20 PLY PLX RTS ;$2031A ;Pretty sure this is the routine for looking up PLM and special graphics for when the x-ray scope is used. XRaySpecialGraphics: PHP PHB REP #$30 PHX PHY PHK PLB LDX #$004E - LDA $1C37, X CMP #CodeDF89 BCC + PHX LDA $1DC7, X BMI + JSL $80818E ; $18E IN ROM LDA $7ED870, X PLX AND $05E7 BNE + PHX JSL GetPLMCoordinate ; $20290 IN ROM LDA $7EDF0C, X TAY LDX.w .table, Y LDA $0002, X AND #$0FFF LDX $1C29 LDY $1C2B JSL $91D04C ; $8D04C IN ROM PLX + DEX DEX BPL - LDX $07BB LDA $8F0010, X BEQ .end TAX .loop LDA $8F0000, X BEQ .end AND #$00FF STA $12 LDA $8F0001, X AND #$00FF STA $14 PHX LDA $8F0002, X LDX $12 LDY $14 JSL $91D04C ; $8D04C IN ROM PLX TXA CLC ADC #$0004 TAX JMP .loop ; $2036D IN ROM .end PLY PLX PLB PLP RTL ;$2039D, pointers to graphics .table DW DrawA30F, DrawA31B, DrawA327, DrawA333, DrawA2DF, DrawA2F1, DrawA2FD, DrawA303 ;$203AD Turn on PLM processing EnablePLMs: PHP REP #$20 LDA #$8000 TSB $1C23 PLP RTL ;$203B8 Turn off PLM processing DisablePLMs: PHP REP #$20 LDA #$8000 TRB $1C23 PLP RTL ;$203C3 Delete all PLMs ClearPLMs: PHP REP #$30 PHX LDX #$004E - STZ $1C37, X DEX DEX BPL - STZ $1C2D PLX PLP RTL ;$203D7 Spawn a PLM during room processing. Hardcoded - 4 byte argument: X, Y, PLM ID SpawnPLMSpecific: PHB PHY PHX PHK PLB LDY #$004E - LDA $1C37, Y BEQ + DEY DEY BPL - LDA $06, S CLC ADC #$0004 STA $06, S PLX PLY PLB SEC RTL + SEP #$20 LDA $08, S PHA PLB TYX LDY #$0002 LDA ($06, S), Y STA $4202 LDA $07A5 STA $4203 LDY #$0001 LDA ($06, S), Y REP #$20 AND #$00FF CLC ADC $4216 ASL A STA $1C87, X LDY #$0003 LDA ($06, S), Y TXY TAX LDA $06, S CLC ADC #$0004 STA $06, S PHK PLB TXA STA $1C37, Y TYX TAY LDA #$0000 STA $1DC7, X STA $7EDF0C, X LDA #DefaultRTS1 STA $1CD7, X LDA $0002, Y STA $1D27, X LDA #$0001 STA $7EDE1C, X LDA #DefaultPLMDrawInstruction STA $7EDE6C, X STZ $1D77, X STX $1C27 TYX LDY $1C27 JSR ($0000, X) ; $20000 IN ROM PLX PLY PLB CLC RTL ;$20469 Default Pre-PLM code : Do nothing. DefaultRTS1: RTS ;$2046A Read and create room-defined PLMs LoadRoomPLMs: PHP PHB PHY PHX PHK PLB LDY #$004E - LDA $1C37, Y BEQ + DEY DEY BPL - PLX PLY PLB PLP SEC RTL + SEP #$20 LDA $8F0003, X STA $4202 LDA $07A5 STA $4203 LDA $8F0002, X REP #$20 AND #$00FF CLC ADC $4216 ASL A STA $1C87, Y LDA $8F0004, X STA $1DC7, Y LDA $8F0000, X STA $1C37, Y TYX TAY LDA #$0000 STA $7EDF0C, X LDA #DefaultRTS2 STA $1CD7, X LDA $0002, Y STA $1D27, X LDA #$0001 STA $7EDE1C, X LDA #DefaultPLMDrawInstruction STA $7EDE6C, X STZ $1D77, X STX $1C27 TYX LDY $1C27 JSR ($0000, X) ; $20000 IN ROM PLX PLY PLB PLP CLC RTL ;$204E6 Default Pre-PLM code : Do nothing. DefaultRTS2: RTS ;$204E7 Create a PLM. ID in A, location in $0DC4 (block number, multiply by 2 for block index). SpawnPLMGeneral: PHB PHY PHX PHK PLB TAY LDX #$004E - LDA $1C37, X BEQ + DEX DEX BPL - PLX PLY PLB RTL + LDA $0DC4 ASL A STA $1C87, X TYA STA $1C37, X LDA #DefaultRTS3 STA $1CD7, X LDA $0002, Y STA $1D27, X LDA #$0001 STA $7EDE1C, X LDA #DefaultPLMDrawInstruction STA $7EDE6C, X LDA #$0000 STA $1D77, X STA $1DC7, X STA $7EDF0C, X STX $1C27 TYX LDY $1C27 JSR ($0000, X) ; $20000 IN ROM PLX PLY PLB RTL ;$2053D Default Pre-PLM code : Do nothing. DefaultRTS3: RTS ;$2053E Create a PLM at an enemy's location. ... this is unused? Current enemy index in X, PLM ID in A. SpawnPLMEnemy: PHB PHY PHX PHK PLB TXY PHA LDX #$004E - LDA $1C37, X BEQ + DEX DEX BPL - PLA PLX PLY PLB RTL + LDA $0F7E, Y LSR A LSR A LSR A LSR A SEP #$20 STA $4202 LDA $07A5 STA $4203 REP #$20 LDA $0F7A, Y LSR A LSR A LSR A LSR A CLC ADC $4216 ASL A STA $1C87, X PLA STA $1C37, X TAY LDA #DefaultRTS4 STA $1CD7, X LDA $0002, Y STA $1D27, X LDA #$0001 STA $7EDE1C, X LDA #DefaultPLMDrawInstruction STA $7EDE6C, X LDA #$0000 STA $1D77, X STA $1DC7, X STA $7EDF0C, X STX $1C27 TYX LDY $1C27 JSR ($0000, X) ; $20000 IN ROM PLX PLY PLB RTL ;$205B3 Default Pre-PLM code : Do nothing. DefaultRTS4: RTS ;$205B4 Main PLM processing routine ProcessPLMs: PHP PHB PHK PLB REP #$30 BIT $1C23 BPL ++ STZ $1C25 LDX #$004E - STX $1C27 LDA $1C37, X BEQ + JSR .sub1 ; $205DA IN ROM LDX $1C27 + DEX DEX BPL - ++ PLB PLP RTL ;$205DA Subroutine called for all existing PLMs .sub1 JSR ($1CD7, X) ; $21CD7 IN ROM LDX $1C27 LDA $7EDE1C, X DEC A STA $7EDE1C, X BNE ++ LDY $1D27, X .PLMReturn LDA $0000, Y BPL + STA $12 INY INY DB $F4 : DW .PLMReturn-1 ;PEA .PLMReturn-1 ;Not working. Hackish time! JMP ($0012) + STA $7EDE1C, X LDA $0002, Y STA $7EDE6C, X TYA CLC ADC #$0004 STA $1D27, X JSR WriteBlockTypeGraphic ; $2061E IN ROM LDX $1C27 JSL GetPLMCoordinate ; $20290 IN ROM JSR DrawPLM ; $20DAA IN ROM ++ RTS ;$2061E Draw the PLM based on its current draw pointer (7EDE6C,X) WriteBlockTypeGraphic: LDA $7EDE6C, X TAY LDA $1C87, X STA $12 TAX ;$20629 ALTERNATE ENTRY POINT .loop LDA $0000, Y BMI + AND #$00FF STA $16 INY INY - LDA $0000, Y STA $7F0002, X INY INY INX INX DEC $16 BNE - JMP .next ; $20664 IN ROM + AND #$00FF STA $16 INY INY - LDA $0000, Y STA $7F0002, X INY INY TXA CLC ADC $07A5 ADC $07A5 TAX DEC $16 BNE - ;$20664 .next LDA $0000, Y BNE + RTS + DEY LDA $0000, Y XBA BPL + ORA #$FF00 BRA ++ + AND #$00FF ++ ASL A CLC ADC $12 STA $14 LDA $0001, Y XBA BPL + ORA #$FF00 EOR #$FFFF INC A TAX LDA #$0000 - SEC SBC $07A5 DEX BNE - BRA ++ + AND #$00FF BEQ ++ TAX LDA #$0000 - CLC ADC $07A5 DEX BNE - ++ ASL A CLC ADC $14 TAX INY INY INY JMP .loop ; $20629 IN ROM } ; Instructions { ;$206B4 Instruction 86B4 (0) : Wait. Instructions do nothing till activated by something else. IWait: DEY DEY TYA STA $1D27, X PLA RTS ;$206BC Instruction 86BC (0) : Delete PLM IKill: STZ $1C37, X PLA RTS ;$206C1 Instruction 86C1 (2) : Set Pre-Instruction code ISetPreInstructionCode: LDA $0000, Y STA $1CD7, X INY INY RTS ;$206CA Instruction 86CA (0) : Disable Pre-Instruction code IStopPreInstructionCode: LDA #.RTS STA $1CD7, X .RTS RTS ;$206D1 Instruction 86D1 (3) : Call external JSL, backs up Y. Unused? IJSL: LDA $0000, Y STA $12 LDA $0001, Y STA $13 PHY JSL .CallJSL ; $206E8 IN ROM PLY LDX $1C27 INY INY INY RTS ;$206E8 Not used externally .CallJSL JML [$0012] ;$206EB Instruction 86EB (5) : Call external JSL, + an argument that is loaded into A first. Backs up Y. Unused? IJSLArgument: LDA $0000, Y STA $12 LDA $0001, Y STA $13 LDA $0003, Y PHY JSL .CallJSL ; $20708 IN ROM PLY LDX $1C27 TYA CLC ADC #$0005 TAY RTS ;$20708 Not used externally .CallJSL JML [$0012] ;$2070B Instruction 870B (3) : Call external JSL, backs up X and Y IJSLCautious: LDA $0000, Y STA $12 LDA $0001, Y STA $13 PHX PHY JSL .CallJSL ; $20721 IN ROM PLY PLX INY INY INY RTS ;$20721 Not used externally .CallJSL JML [$0012] ;$20724 Instruction 8724 (2) : Goto command for instructions IGoTo: LDA $0000, Y TAY RTS ;$20729 Instruction 8729 (1) : Short-range BRA for instructions. Note that argument's byte isn't accounted for - assembly's BRA $00 would be IBRA $01. THANKFULLY unused. IBRA: STY $12 DEY LDA $0000, Y XBA BMI + AND #$00FF BRA ++ + ORA #$FF00 ++ CLC ADC $12 TAY RTS ;$2073F Instruction 873F (2) : Conditional GoTo : Decrement counter (1D77), BNE to Argument IGoToDecrement: DEC $1D77, X BNE IGoTo INY INY RTS ;$20747 Instruction 8747 (1) : Conditional Branch : Decrement counter (1D77), BNE Argument. Thankfully unused. IBranchDecrement: DEC $1D77, X BNE IBRA INY RTS ;$2074E Instruction 874E (1) : Set counter (1D77) to 1-byte argument ISetCounter8: SEP #$20 LDA $0000, Y STA $1D77, X REP #$20 INY RTS ;$2075A Instruction 875A (2) : Set counter (1D77) to 2-byte argument. Unused ISetCounter16: LDA $0000, Y STA $1D77, X INY INY RTS ;$20763 A WILD RTS APPEARS RTS ;$20764 Instruction 8764 (A) ;Load graphics. 2-byte argument to 2 full blocks of graphics, 8 1-byte arguments for palette indexes (Frame 1 TL TR BL BR, Frame 2 TL TR BL BR). Room for 4 graphics then starts writing over its older graphics. ILoadSpecialGraphics: LDA $1C2D STA $7EDF0C, X TAX INC A INC A AND #$0006 STA $1C2D LDA.w .VRAM, X STA $12 LDA.w .TileAddress, X STA $14 LDA.w .TileData, X STA $16 TYA STA $1C2F, X LDX $0330 LDA #$0100 STA $D0, X LDA $0000, Y STA $D2, X LDA #$0089 STA $D4, X LDA $12 STA $D5, X TXA CLC ADC #$0007 STA $0330 INY INY LDX $14 TXA CLC ADC #$0010 STA $18 - LDA $0000, Y AND #$00FF XBA ASL A ASL A CLC ADC $16 STA $7EA000, X INC $16 INY INX INX CPX $18 BNE - LDX $1C27 RTS .VRAM DW $3E00, $3E80, $3F00, $3F80 .TileAddress DW $0470, $0480, $0490, $04A0 .TileData DW $03E0, $03E8, $03F0, $03F8 ;$207E5 Instruction 87E5 (7) : Transfer stuff to VRAM. Just a straight copy to D0 table (see RAMMap.txt). ID0Transfer: LDX $0330 LDA $0000, Y STA $D0, X LDA $0002, Y STA $D2, X LDA $0003, Y STA $D3, X LDA $0005, Y STA $D5, X TXA CLC ADC #$0007 STA $0330 TYA CLC ADC #$0007 TAY LDX $1C27 RTS ;$2080E Instruction 880E (3) : GoTo if any boss bits match in current area (1 byte boss bits, 2 byte GoTo target) IBranchBossBits: LDA $0000, Y INY AND #$00FF JSL $8081DC ; $1DC IN ROM BCC + JMP IGoTo ; $20724 IN ROM + INY INY RTS ;$20821 Instruction 8821 (1) : Set boss bit(s) for current area. 1 byte argument of bits to set. Unused ISetBossBits: LDA $0000, Y AND #$00FF JSL $8081A6 ; $1A6 IN ROM INY RTS ;$2082D Instruction 882D (4) : GoTo if event bit set (2 byte event number, 2 byte GoTo target) IBranchEvent: LDA $0000, Y INY INY JSL $808233 ; $233 IN ROM BCC + JMP IGoTo ; $20724 IN ROM + INY INY RTS ;$2083E Instruction 883E (2) : Set event bit. ISetEvent: LDA $0000, Y JSL $8081FA ; $1FA IN ROM INY INY RTS ;$20848 Instruction 8848 (2) : GoTo argument if room argument's boss bit is set (- room argument never GoTos) IBranchBossBit: PHX LDA $1DC7, X BMI ++ JSL $80818E ; $18E IN ROM LDA $7ED830, X PLX AND $05E7 BEQ + JMP IGoTo ; $20724 IN ROM + - INY INY RTS ++ PLX BRA - ;$20865 Instruction 8865 (0) : Set room argument's boss bit (- room argument sets nothing). ISetBossBit: PHX LDA $1DC7, X BMI + JSL $80818E ; $18E IN ROM LDA $7ED830, X ORA $05E7 STA $7ED830, X + PLX RTS ;$2087C Instruction 887C (2) : GoTo argument if room argument's item bit is set (- room arguments never GoTo) IBranchItem: PHX LDA $1DC7, X BMI + JSL $80818E ; $18E IN ROM LDA $7ED870, X PLX AND $05E7 BEQ ++ JMP IGoTo ; $20724 IN ROM ++ - INY INY RTS + PLX BRA - ;$20899 Instruction 8899 (0) : Set room argument's item bit (- room argument sets nothing). ISetItem: PHX LDA $1DC7, X BMI + JSL $80818E ; $18E IN ROM LDA $7ED870, X ORA $05E7 STA $7ED870, X + PLX RTS ;$208B0 Instruction 88B0 (3) : Pickup beam item (2 bytes) then display message box (1 byte). Equips it, toggles spazer/plasma, updates graphics. IBeamPickup: LDA $0000, Y ORA $09A8 STA $09A8 LDA $0000, Y ORA $09A6 STA $09A6 LDA $0000, Y ASL A AND #$0008 TRB $09A6 LDA $0000, Y LSR A AND #$0004 TRB $09A6 PHX PHY JSL $90AC8D ; $82C8D IN ROM PLY PLX LDA #$0168 JSL $82E118 ; $16118 IN ROM LDA $0002, Y AND #$00FF JSL $858080 ; $28080 IN ROM INY INY INY RTS ;$208F3 Instruction 88F3 (3) : Pickup equipment (2 bytes) then display message box (1 byte) and resume music IEquipPickup: LDA $09A2 ORA $0000, Y STA $09A2 LDA $09A4 ORA $0000, Y STA $09A4 LDA #$0168 JSL $82E118 ; $16118 IN ROM LDA $0002, Y AND #$00FF JSL $858080 ; $28080 IN ROM INY INY INY RTS ;$2091A Instruction 891A (2) : Pickup grapple. Argument should be grapple equipment bit, grapple message box displayed and resume music. IGrapplePickup: LDA $09A2 ORA $0000, Y STA $09A2 LDA $09A4 ORA $0000, Y STA $09A4 JSL $809A2E ; $1A2E IN ROM LDA #$0168 JSL $82E118 ; $16118 IN ROM LDA #$0005 JSL $858080 ; $28080 IN ROM INY INY RTS ;$20941 Instruction 8941 (2) : Pickup X-ray scope. Argument should be x-ray equipment bit, x-ray message box displayed and resume music. IXRayPickup: LDA $09A2 ORA $0000, Y STA $09A2 LDA $09A4 ORA $0000, Y STA $09A4 JSL $809A3E ; $1A3E IN ROM LDA #$0168 JSL $82E118 ; $16118 IN ROM LDA #$0006 JSL $858080 ; $28080 IN ROM INY INY RTS ;$20968 Instruction 8968 (2) : Pickup Energy Tank. Argument is health increase, energy tank message displayed and resume music. IEnergyPickup: LDA $09C4 CLC ADC $0000, Y STA $09C4 STA $09C2 LDA #$0168 JSL $82E118 ; $16118 IN ROM LDA #$0001 JSL $858080 ; $28080 IN ROM INY INY RTS ;$20986 Instruction 8986 (2) : Pickup Reserve Tank. Argument is reserve increase, reserve tank message displayed and resume music. IReservePickup: LDA $09D4 CLC ADC $0000, Y STA $09D4 LDA $09C0 BNE + INC $09C0 + LDA #$0168 JSL $82E118 ; $16118 IN ROM LDA #$0019 JSL $858080 ; $28080 IN ROM INY INY RTS ;$209A9 Instruction 89A9 (2) : Pickup Missile Tank. Argument is missile increase, missile tank message displayed and resume music. IMissilePickup: LDA $09C8 CLC ADC $0000, Y STA $09C8 LDA $09C6 CLC ADC $0000, Y STA $09C6 JSL $8099CF ; $19CF IN ROM LDA #$0168 JSL $82E118 ; $16118 IN ROM LDA #$0002 JSL $858080 ; $28080 IN ROM INY INY RTS ;$209D2 Instruction 89D2 (2) : Pickup Super Missile Tank. Argument is supers increase, super missile tank message displayed and resume music. ISuperPickup: LDA $09CC CLC ADC $0000, Y STA $09CC LDA $09CA CLC ADC $0000, Y STA $09CA JSL $809A0E ; $1A0E IN ROM LDA #$0168 JSL $82E118 ; $16118 IN ROM LDA #$0003 JSL $858080 ; $28080 IN ROM INY INY RTS ;$209FB Instruction 89FB (2) : Pickup Power Bomb Tank. Argument is bomb increase, power bomb tank message displayed and resume music. IPowerBombPickup: LDA $09D0 CLC ADC $0000, Y STA $09D0 LDA $09CE CLC ADC $0000, Y STA $09CE JSL $809A1E ; $1A1E IN ROM LDA #$0168 JSL $82E118 ; $16118 IN ROM LDA #$0004 JSL $858080 ; $28080 IN ROM INY INY RTS ;$20A24 Instruction 8A24 (2) : Set GoTo/Return pointer (DEBC) to argument. ISetGoTo: LDA $0000, Y STA $7EDEBC, X INY INY RTS ;$20A2E Instruction 8A2E (2) : Set GoTo/Return pointer (DEBC) to next instruction, GoTo argument. Basically JSR for Instructions. IJSR: TYA INC A INC A STA $7EDEBC, X LDA $0000, Y TAY RTS ;$20A3A Instruction 8A3A (0) : GoTo GoTo/Return pointer (DEBC). IGoToGoTo: ;This is officially the best label in this file. ... I admit IRTS make more sense though, especially as it's only used with IJSR. LDA $7EDEBC, X TAY RTS ;$20A40 Instruction 8A40 (0) : Not sure exactly. I think this is a wait until the first enemy in the room (which should be DAFF) dies? Not used IWaitDAFF_1: LDA $0F86 AND #$0200 BNE + LDA $0F78 CMP #$DAFF BEQ + PLA LDA #$0001 STA $7EDE1C, X + RTS ;$20A59 Instruction 8A59 (0) : Wait until second enemy of the room (should be DAFF) dies? Not used IWaitDAFF_2: LDA $0FC6 AND #$0200 BNE + LDA $0FB8 CMP #$DAFF BEQ + PLA LDA #$0001 STA $7EDE1C, X + RTS ;$20A72 Instruction 8A72 (2) : GoTo argument if room argument's door bit is set (- room arguments never GoTo) IBranchDoor: PHX LDA $1DC7, X BMI + JSL $80818E ; $18E IN ROM LDA $7ED8B0, X PLX AND $05E7 BEQ ++ LDA $0000, Y TAY RTS ++ - INY INY RTS + PLX BRA - ;$20A91 Instruction 8A91 (3) : Increment counter (DF0C), if it's passed the first argument (1 byte) set room argument's door and GoTo second argument. Also stop pre-instruction code. IDoorHit: LDA $7EDF0C, X INC A STA $7EDF0C, X SEP #$20 CMP $0000, Y REP #$20 BCS Branch1 INY INY INY DefaultRTS5: ;this is getting a little silly now RTS Branch1: PHX LDA $1DC7, X BMI + JSL $80818E ; $18E IN ROM LDA $7ED8B0, X ORA $05E7 STA $7ED8B0, X + PLX ORA #$8000 STA $1DC7, X LDA #DefaultRTS5 STA $1CD7, X INY JMP IGoTo ; $20724 IN ROM ;$20ACD Instruction 8ACD (3) : Increment room argument, if it exceeds first argument (1 byte), goto second argument. Clear pre-instruction code. ICounterInc: SEP #$20 LDA $1DC7, X INC A CMP $0000, Y REP #$20 BCS Branch2 STA $1DC7, X INY INY INY DefaultRTS6: RTS Branch2: LDA #$FFFF STA $1DC7, X LDA #DefaultRTS6 STA $1CD7, X INY JMP IGoTo ; $20724 IN ROM ;$20AF1 Instruction 8AF1 (1) : Store argument to PLM's BTS ISetBTS: PHX LDA $1C87, X LSR A TAX SEP #$20 LDA $0000, Y STA $7F6402, X REP #$20 PLX INY RTS ;$20B05 Instruction 8B05 (0) : Clone of 8B17 IDrawPLM1E17Clone: REP #$20 PHX PHY TXY LDX $1C87, Y LDA $1E17, Y STA $7F0002, X JMP PointlessJump1 ; $20B26 IN ROM ;$20B17 Instruction 8B17 (0) : Draw block at PLM using 1E17. DE6C gets overwritten, on-screen graphic is refreshed. IDrawPLM1E17: REP #$20 PHX PHY TXY LDX $1C87, Y LDA $1E17, Y STA $7F0002, X PointlessJump1: STA $1E69 LDA #$0001 STA $1E67 STZ $1E6B PLY PLX LDA #$0001 STA $7EDE1C, X LDA #$1E67 STA $7EDE6C, X TYA STA $1D27, X JSR WriteBlockTypeGraphic ; $2061E IN ROM LDX $1C27 JSL GetPLMCoordinate ; $20290 IN ROM JSR DrawPLM ; $20DAA IN ROM PLA RTS ;$20B55 Instruction 8B55 (0) : Update scrolling in the room by following room argument as a pointer. Main part of a scroll PLM. IScrollUpdate: PHB PHX PHY STZ $1E17, X LDY $1DC7, X PEA $8F00 ;Note the pointer points to bank 8F, not bank 84. PLB PLB LDA #$0000 SEP #$20 - LDA $0000, Y ;Format for data (1 byte each) : Screen #, value, 80 BMI + ; | Repeat any # | TAX ; \ of times / LDA $0001, Y STA $7ECD20, X INY INY BRA - + REP #$20 PLY PLX PLB PHX LDA $1C87, X TAX LDA $7F0002, X AND #$0FFF ORA #$3000 STA $7F0002, X PLX RTS ;$20B93 Instruction 8B93 (0) : Same as normal scroll update but for a crumble blocktype instead of treadmill blocktype IScrollUpdateCrumble: PHB PHX PHY STZ $1E17, X LDY $1DC7, X PEA $8F00 PLB PLB LDA #$0000 SEP #$20 - LDA $0000, Y BMI + TAX LDA $0001, Y STA $7ECD20, X INY INY BRA - + REP #$20 PLY PLX PLB PHX LDA $1C87, X TAX LDA $7F0002, X AND #$0FFF ORA #$B000 STA $7F0002, X PLX RTS ;$20BD1 Instruction 8BD1 (1) : Switch song track to argument. Unused IPlayTrack: LDA $0000, Y AND #$00FF JSL $808FC1 ; $FC1 IN ROM INY RTS ;$20BDD Instruction 8BDD (1) : Clear out music queue, THEN switch song track to argument. IPlayTrackNow: PHX LDX #$000E - STZ $0619, X STZ $0629, X DEX DEX BPL - PLX LDA $0639 STA $063B LDA #$0000 STA $063F STA $063D LDA $0000, Y AND #$00FF JSL $808FC1 ; $FC1 IN ROM INY RTS ;$20C07 Instruction 8C07 (1) : Play a sound from library 1 IPlaySound1: LDA $0000, Y JSL $809049 ; $1049 IN ROM INY RTS ;$20C10 Instruction 8C10 (1) : Play a sound from library 2 IPlaySound2: LDA $0000, Y JSL $8090CB ; $10CB IN ROM INY RTS ;$20C19 Instruction 8C19 (1) : Play a sound from library 3 IPlaySound3: LDA $0000, Y JSL $80914D ; $114D IN ROM INY RTS ;$20C22 Instruction 8C22 (1) : Play a sound from library 1, allow full queue. Unused IPlaySound1Full: LDA $0000, Y JSL $809021 ; $1021 IN ROM INY RTS ;$20C2B Instruction 8C2B (1) : Play a sound from library 2, allow full queue. Unused IPlaySound2Full: LDA $0000, Y JSL $8090A3 ; $10A3 IN ROM INY RTS ;$20C34 Instruction 8C34 (1) : Play a sound from library 3, allow full queue. Unused IPlaySound3Full: LDA $0000, Y JSL $809125 ; $1125 IN ROM INY RTS ;$20C3D Instruction 8C3D (1) : Play a sound from library 3, short queue only. Unused IPlaySound1Short: LDA $0000, Y JSL $809035 ; $1035 IN ROM INY RTS ;$20C46 Instruction 8C46 (1) : Play a sound from library 2, short queue only IPlaySound2Short: LDA $0000, Y JSL $8090B7 ; $10B7 IN ROM INY RTS ;$20C4F Instruction 8C4F (1) : Play a sound from library 3, short queue only. Unused IPlaySound3Short: LDA $0000, Y JSL $809139 ; $1139 IN ROM INY RTS ;$20C58 Instruction 8C58 (1) : Play a sound from library 1, long queue allowed. Unused IPlaySound1Long: LDA $0000, Y JSL $80902B ; $102B IN ROM INY RTS ;$20C61 Instruction 8C61 (1) : Play a sound from library 2, long queue allowed. Unused IPlaySound2Long: LDA $0000, Y JSL $8090AD ; $10AD IN ROM INY RTS ;$20C6A Instruction 8C6A (1) : Play a sound from library 3, long queue allowed. Unused IPlaySound3Long: LDA $0000, Y JSL $80912F ; $112F IN ROM INY RTS ;$20C73 Instruction 8C73 (1) : Play a sound from library 1, no queue allowed. Unused IPlaySound1Now: LDA $0000, Y JSL $80903F ; $103F IN ROM INY RTS ;$20C7C Instruction 8C7C (1) : Play a sound from library 2, no queue allowed IPlaySound2Now: LDA $0000, Y JSL $8090C1 ; $10C1 IN ROM INY RTS ;$20C85 Instruction 8C85 (1) : Play a sound from library 3, no queue allowed. Unused IPlaySound3Now: LDA $0000, Y JSL $809143 ; $1143 IN ROM INY RTS ;$20C8E A WILD RTS APPEARS. AGAIN. RTS ;$20C8F Instruction 8C8F (0) : Set map of current area as collected. Also message box. IMapCollected: PHX PHY LDX $079F LDA $7ED908, X ORA #$00FF STA $7ED908, X LDA #$0014 JSL $858080 ; $28080 IN ROM LDA #$0001 STA $0789 PLY PLX RTS ;$20CAF Instruction 8CAF (0) : Energy station; restore health, display message box, resume gameplay controls. IEnergyRestore: PHX PHY LDA $09C4 CMP $09C2 BEQ + LDA #$0015 JSL $858080 ; $28080 IN ROM LDA $09C4 STA $09C2 + LDA #$0001 JSL $90F084 ; $87084 IN ROM PLY PLX RTS ;$20CD0 Instruction 8CD0 (0) : Missile station; restore missiles, display message box, resume gameplay controls. IMissileRestore: PHX PHY LDA $09C8 CMP $09C6 BEQ + LDA #$0016 JSL $858080 ; $28080 IN ROM LDA $09C8 STA $09C6 + LDA #$0001 JSL $90F084 ; $87084 IN ROM PLY PLX RTS ;$20CF1 Instruction 8CF1 (2) : Save station check. Pop up a message box, if saving do some saving stuff and continue, otherwise GoTo argument. ISaveGame: PHX PHY LDA #$0017 JSL $858080 ; $28080 IN ROM CMP #$0002 BEQ + LDX $1C27 LDY #$E6D2 JSL $868097 ; $30097 IN ROM LDA $1DC7, X AND #$0007 STA $078B JSL $80818E ; $18E IN ROM LDA $079F ASL A TAX LDA $7ED8F8, X ORA $05E7 STA $7ED8F8, X LDA $0952 JSL $818000 ; $8000 IN ROM PLY PLX INY INY RTS + PLY PLX LDA $0000, Y TAY RTS ;$20D39 Instruction 8D39 (0) : Waits 6 seconds then resumes music. Unused IResumeMusicIn6: LDA #$0168 JSL $82E118 ; $16118 IN ROM RTS ;$20D41 Instruction 8D41 (4) : Argument is X-radius (1 byte) and Y-radius (1 byte), in blocks. If Samus's center is inside of hitbox, GoTo third argument. Else continue. IDetectSamus: JSL GetPLMCoordinate ; $20290 IN ROM LDA $0AF6 LSR A LSR A LSR A LSR A SEC SBC $1C29 BPL + EOR #$FFFF INC A + SEP #$20 CMP $0000, Y REP #$20 BEQ + BCS ++ + LDA $0AFA LSR A LSR A LSR A LSR A SEC SBC $1C2B BPL + EOR #$FFFF INC A + SEP #$20 CMP $0001, Y REP #$20 BEQ + BCS ++ + LDA $0002, Y TAY RTS ++ TYA CLC ADC #$0004 TAY RTS ;$20D89 Instruction 8D89 (0) : Move PLM down 1 block. ... unused? Despite having two clones which are used? IMoveDown: LDA $1C87, X CLC ADC $07A5 ADC $07A5 STA $1C87, X RTS } ; Routines { ;$20D97 A WILD RTS APPEARS YET AGAIN. RTS ;$20D98 Unknown PLM's instructions. Can't be used because the default draw doesn't work and there doesn't seem to be a pointer to it anyways. Unused1: DW $1000 : DW DefaultPLMDrawInstruction DW IGoTo : DW Unused1 ;$20DA0 Default draw command. Note: This is invalid. Do not ACTUALLY use this draw command. DefaultPLMDrawInstruction: DW $0180 : DW $0000 DW $0000 ;$20DA6 There are JSL's to this? ... not that I see. Unused2: JSR Unused3 ; $20DBB IN ROM RTL ;$20DAA ALTERNATE ENTRY POINT DrawPLM: REP #$30 LDA #$5000 ;Screen 0 start position in VRAM STA $09 LDA #$53E0 ;Screen 1 start position in VRAM? Why isn't this 5400? STA $0C LDA $7EDE6C, X TAY ;Draw pointer in Y ;$20DBB Unused jump-in point. Unused3: LDA $1C29 STA $1E ;X in $1E LDA $1C2B STA $20 ;Y in $20 ;$20DC5 .loop7 LDA $0915 LSR A LSR A LSR A LSR A STA $1A ;Screen Y in $1A CLC ADC #$000F CMP $20 BPL + ;Don't draw if PLM is below screen. RTS ;interesting. So PLMs that draw ABOVE their origin while offscreen won't be able to update their graphics. + LDA $0000, Y BPL + JMP .loop2 ; $2101F IN ROM ;JMP to vertical display instead of horiontal + AND #$7FFF ;useless STA $14 ;Number of tiles to draw in $14 STZ $1C LDA $20 CMP $1A BMI ++ ;PLMs that draw BELOW their origin (after a horizontal draw) also won't be able to update while offscreen. A bit clumsy! STA $1A ;Draw Y is copied into $1A also. STZ $12 LDA $1E STA $18 ;Draw X copied into $18 LDA $0911 CLC ADC #$000F LSR A LSR A LSR A LSR A DEC A STA $16 ;Screen X (rounded up then decremented) in $16 SEC SBC $1E BMI + BEQ + STA $12 ;PLM is to the left, check size of PLM LDA $14 CLC ADC $1E CMP $16 BEQ ++ BMI ++ ;if PLM won't reach on screen, branch to RTS LDA $14 LDA $14 ;stuttering assembler? SEC SBC $12 STA $14 ;How many tiles are actually on screen to be drawn LDA $16 STA $18 ;Start drawing at start of screen + LDA $16 CLC ADC #$0011 STA $16 CMP $1E BPL + ;If PLM is too far to the right, don't branch and RTS. ++ - RTS + LDA $18 CLC ADC $14 DEC A SEC SBC $16 STA $16 ;Screen+1 X position of last block to draw? BMI + LDA $14 SEC SBC $16 STA $14 ;Cap tiles to draw at end of screen BEQ - ;I don't think it's even mathematically possible to end up with 0 at this point. + ;Time to finally start drawing a strip of horizontal blocks PHX LDX $0330 CPX #$01E0 ;Make sure draw queue isn't full BMI + - PLX RTS + LDA #$0200 SEC SBC $1C25 LSR A LSR A LSR A CMP $14 BMI - ;Branch if we've drawn too many tiles already ($40 a frame max?) LDA $1A AND #$000F ORA #$4000 STA $4202 ;Y * 40 = offset addable to X * 2 LDA $18 AND #$001F CMP #$0010 BCS + ;Branch if we're drawing on screen 1 (and not screen 0) ASL A ;X * 2 CLC ADC $09 ;+Start offset ADC $4216 ;+Y offset PHA ;=VRAM offset for first 8x8 tile LDA $091D AND #$0100 ;Check to swap screens because of room lineup. BEQ ++ PLA CLC ADC #$0400 PHA BRA ++ + ASL A ;X * 2 CLC ADC $0C ;+Start offset ADC $4216 ;+Y offset PHA ;=VRAM offset for first 8x8 tile LDA $091D AND #$0100 ;Check to swap screens because of room lineup. BEQ ++ PLA SEC SBC #$0400 PHA ++ LDA $14 ASL A STA $1E ;Number of 8x8 tiles to update? PLA ;someone forgot LDA $01,S PHA AND #$001F STA $22 ;X position on VRAM screen of first tile to draw? CLC ADC $1E DEC A AND #$FFE0 BNE + ;Branch if we will draw on both VRAM screens JMP .loop1 ; $20F2F IN ROM + CPX #$00E4 ;Still $0330. Don't draw on both screens if D0 queue is 1/2 full? BPL + LDA #$0020 SEC SBC $22 BMI + ;Should be mathematically impossible, this should never branch. ASL A STA $D0, X ;Size of first screen transfer STA $DE, X ;again for second row of tiles PLA STA $D5, X ;VRAM of first screen transfer AND #$FFE0 EOR #$0400 STA $DC, X ;VRAM of second screen transfer LDA $DC, X ;wasting time CLC ADC #$0020 STA $EA, X ;VRAM of second row of second screen transfer LDA $D5, X CLC ADC #$0020 STA $E3, X ;VRAM of second row of first screen transfer LDA $14 ASL A ASL A STA $1E ;Number of bytes to transfer for each row of blocks SEC SBC $D0, X STA $D7, X ;Size of second screen transfer (first row) STA $E5, X ;Size of second screen transfer (second row) LDA #$C6C8 CLC ADC $1C25 ;RAM offset (how many tiles have we transfered already * 8 bytes per tile) STA $D2, X ;Source address for first screen first row (bank 7E) STA $00 CLC ADC $D0, X STA $D9, X ;Source for second screen first row CLC ADC $D7, X STA $E0, X ;Source for first screen second row STA $06 CLC ADC $DE, X STA $E7, X ;Source for second screen second row SEP #$20 LDA #$7E STA $D4, X STA $02 STA $DB, X STA $08 STA $E2, X STA $E9, X REP #$20 TXA CLC ADC #$001C ;4 transfers * 7 bytes per transfer = 1C bytes added to D0 queue STA $0330 BRA ++ + PLA PLX RTS ;$20F2F ALTERNATE ENTRY POINT .loop1 PLA ;VRAM start position JSR .sub2 ; $21220 IN ROM LDA $D5, X CLC ADC #$0020 STA $DC, X ;VRAM start for second row of tiles TXA CLC ADC #$000E ;7 bytes * 2 entries = E bytes added to queue STA $0330 ++ LDA $12 ;# of blocks off-screen to left ASL A STA $12 INY ;This is STILL pointer to argument INY TYA CLC ADC $12 ;skip off-screen blocks STA $03 LDY #$0000 - LDA ($03) ;get new block graphics from bank 8F STA $1E AND #$03FF ASL A ASL A ASL A TAX LDA $1E AND #$0C00 ;Check and branch to appropriate flips BNE + LDA $7EA000, X ;Copy from tile tables to data to transfer STA [$00], Y LDA $7EA004, X STA [$06], Y INY INY LDA $7EA002, X STA [$00], Y LDA $7EA006, X STA [$06], Y BRA ++ + CMP #$0400 BNE +++ LDA $7EA002, X EOR #$4000 STA [$00], Y LDA $7EA006, X EOR #$4000 STA [$06], Y INY INY LDA $7EA000, X EOR #$4000 STA [$00], Y LDA $7EA004, X EOR #$4000 STA [$06], Y ++ -- INY INY INC $03 INC $03 LDA $1C25 CLC ADC #$0008 STA $1C25 CMP #$0200 BPL + ;wasn't this already checked too? Another impossible branch? DEC $14 BNE - ;keep copying tiles until all tile data copied. JMP .loop4 ; $2118E IN ROM + PLX RTS +++ CMP #$0800 BNE + LDA $7EA004, X EOR #$8000 STA [$00], Y LDA $7EA000, X EOR #$8000 STA [$06], Y INY INY LDA $7EA006, X EOR #$8000 STA [$00], Y LDA $7EA002, X EOR #$8000 STA [$06], Y BRA -- + LDA $7EA006, X EOR #$C000 STA [$00], Y LDA $7EA002, X EOR #$C000 STA [$06], Y INY INY LDA $7EA004, X EOR #$C000 STA [$00], Y LDA $7EA000, X EOR #$C000 STA [$06], Y BRA -- ;$2101F ALTERNATE ENTRY POINT .loop2 ;Vertical draw instead of horizontal AND #$7FFF STA $14 LDA $0911 LSR A LSR A LSR A LSR A CMP $1E BEQ + BPL ++ + CLC ADC #$0011 CMP $1E BEQ ++ BPL + ++ -- RTS + LDA $1E STA $18 STZ $12 LDA $1A CLC ADC #$0010 STA $16 LDA $1A SEC SBC $20 BMI + STA $12 LDA $14 CLC ADC $20 CMP $1A BMI -- LDA $14 SEC SBC $12 STA $14 - BMI - BNE ++ RTS + LDA $20 STA $1A ++ LDA $1A CLC ADC $14 SEC SBC $16 STA $16 BMI + LDA $14 SEC SBC $16 STA $14 BEQ -- BMI ++ + PHX LDX $0330 CPX #$00F0 BMI + ++ - PLX RTS + LDA #$0200 SEC SBC $1C25 LSR A LSR A LSR A CMP $14 BMI - LDA #$8000 STA $1C JSR .sub1 ; $211DC IN ROM LDA $D5, X INC A STA $DC, X TXA CLC ADC #$000E STA $0330 LDA $12 ASL A STA $12 INY INY TYA CLC ADC $12 STA $03 LDY #$0000 ;$210C1 .loop5 LDA ($03) STA $1E AND #$03FF ASL A ASL A ASL A TAX LDA $1E AND #$0C00 BNE + LDA $7EA000, X STA [$00], Y LDA $7EA002, X STA [$06], Y INY INY LDA $7EA004, X STA [$00], Y LDA $7EA006, X STA [$06], Y JMP .loop6 ; $21170 IN ROM + CMP #$0400 BNE + LDA $7EA002, X EOR #$4000 STA [$00], Y LDA $7EA000, X EOR #$4000 STA [$06], Y INY INY LDA $7EA006, X EOR #$4000 STA [$00], Y LDA $7EA004, X EOR #$4000 STA [$06], Y BRA .loop6 + CMP #$0800 BNE + LDA $7EA004, X EOR #$8000 STA [$00], Y LDA $7EA006, X EOR #$8000 STA [$06], Y INY INY LDA $7EA000, X EOR #$8000 STA [$00], Y LDA $7EA002, X EOR #$8000 STA [$06], Y BRA .loop6 + LDA $7EA006, X EOR #$C000 STA [$00], Y LDA $7EA004, X EOR #$C000 STA [$06], Y INY INY LDA $7EA002, X EOR #$C000 STA [$00], Y LDA $7EA000, X EOR #$C000 STA [$06], Y ;$21170 .loop6 INY INY INC $03 INC $03 LDA $1C25 CLC ADC #$0008 STA $1C25 CMP #$0200 BPL + DEC $14 BEQ .loop4 JMP .loop5 ; $210C1 IN ROM + PLX RTS ;$2118E .loop4 PLX LDY $03 LDA $16 BMI + ASL A CLC ADC $03 TAY + LDA $0000, Y BNE + RTS + AND #$00FF BIT #$0080 BNE + CLC ADC $1C29 STA $1E BRA ++ + ORA #$FF00 CLC ADC $1C29 STA $1E ++ INY LDA $0000, Y AND #$00FF BIT #$0080 BNE + CLC ADC $1C2B STA $20 INY JMP .loop7 ; $20DC5 IN ROM + ORA #$FF00 CLC ADC $1C2B STA $20 INY JMP .loop7 ; $20DC5 IN ROM ;$211DC .sub1 LDA $1A AND #$000F ORA #$4000 STA $4202 LDA $18 AND #$001F CMP #$0010 BCS + ASL A CLC ADC $09 ADC $4216 PHA LDA $091D AND #$0100 BEQ ++ PLA CLC ADC #$0400 PHA BRA ++ + ASL A CLC ADC $0C ADC $4216 PHA LDA $091D AND #$0100 BEQ ++ PLA SEC SBC #$0400 PHA ++ PLA ;$21220 .sub2 ;Just drawing on 1 screen here ORA $1C ;this is initialized to 0, but is 8000 for vertical... high bit of size for D0 affects address translation for DMA? STA $D5, X LDA $14 ASL A ASL A ;Number of bytes to transfer per row STA $D0, X STA $D7, X LDA #$C6C8 CLC ADC $1C25 ;RAM offset for how many tiles already transferred STA $D2, X STA $00 CLC ADC $D0, X STA $D9, X STA $06 SEP #$20 LDA #$7E STA $D4, X STA $DB, X STA $02 STA $08 REP #$20 RTS } ; Draw { ;2124D Draw924D: DW $0001 : DW $817E DW $0000 ;21253 Draw9253: DW $0002 : DW $00FF, $00FF DW $0000 ;2125B Draw925B: DW $8003 : DW $8053, $8053, $8053 DW $0000 ;21265 Draw9265: DW $8003 : DW $8054, $8054, $8054 DW $0000 ;2126F Draw926F: DW $8003 : DW $8055, $8055, $8055 DW $0000 ;21279 Draw9279: DW $8003 : DW $80FF, $80FF, $80FF DW $0000 ;21283 Draw9283: DW $8003 : DW $00FF, $00FF, $00FF DB $01, $00 DW $8003 : DW $00FF, $00FF, $00FF DW $0000 ;21297 Draw9297: DW $0004 : DW $00FF, $00FF, $00FF, $00FF DW $0000 ;212A3 Draw92A3: DW $0004 : DW $0053, $0053, $0053, $0053 DW $0000 ;212AF Draw92AF: DW $0004 : DW $0054, $0054, $0054, $0054 DW $0000 ;212BB Draw92BB: DW $0004 : DW $0055, $0055, $0055, $0055 DW $0000 ;212C7 Draw92C7: DW $0004 : DW $00FF, $00FF, $00FF, $00FF DB $00, $01 DW $0004 : DW $00FF, $00FF, $00FF, $00FF DB $00, $02 DW $0004 : DW $00FF, $00FF, $00FF, $00FF DB $00, $03 DW $0004 : DW $00FF, $00FF, $00FF, $00FF DB $00, $04 DW $0004 : DW $00FF, $00FF, $00FF, $00FF DB $00, $05 DW $0004 : DW $00FF, $00FF, $00FF, $00FF DW $0000 ;2130F Draw930F: DW $8009 : DW $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF DW $0000 ;21325 Draw9325: DW $8009 : DW $8053, $8053, $8053, $8053, $8053, $8053, $8053, $8053, $8053 DW $0000 ;2133B Draw933B: DW $8009 : DW $8054, $8054, $8054, $8054, $8054, $8054, $8054, $8054, $8054 DW $0000 ;21351 Draw9351: DW $8009 : DW $0055, $0055, $0055, $0055, $0055, $0055, $0055, $0055, $0055 DW $0000 ;21367 Draw9367: DW $0001 : DW $8180 DW $0000 ;2136D Draw936D: DW $0001 : DW $8181 DW $0000 ;21373 Draw9373: DW $0001 : DW $0182 DW $0000 ;21379 Draw9379: DW $0001 : DW $013C DW $0000 ;2137F Draw937F: DW $0001 : DW $0131 DW $0000 ;21385 Draw9385: DW $0001 : DW $0130 DW $0000 ;2138B Draw938B: DW $0001 : DW $011C DW $0000 ;21391 Draw9391: DW $0001 : DW $0111 DW $0000 ;21397 Draw9397: DW $0001 : DW $0110 DW $0000 ;2139D Draw939D: DW $000F : DW $013C, $0131, $0130, $0131, $0130, $0131, $0130, $0131, $0130, $0131, $0130, $0131, $0130, $0131, $0130 DW $0000 ;213BF Draw93BF: DW $0016 : DW $0111, $0110, $0111, $0110, $0111, $0110, $0111, $0110, $0111, $0110, $0111, $0110, $0111, $0110, $0111, $0110, $0111, $0110, $0111, $0110, $0111, $0110 DW $0000 ;213EF Draw93EF: DW $8004 : DW $95C1, $95E1, $9DE1, $9DC1 DB $01, $00 DW $8004 : DW $C5C0, $D5E0, $DDE0, $DDC0 DW $0000 ;21407 Draw9407: DW $8004 : DW $9440, $9460, $9C60, $9C40 DW $0000 ;21413 Draw9413: DW $0002 : DW $00FF, $00FF DB $00, $01 DW $0002 : DW $00FF, $00FF DW $0000 ;21423 Draw9423: DW $0002 : DW $0053, $0053 DB $00, $01 DW $0002 : DW $0053, $0053 DW $0000 ;21433 Draw9433: DW $0002 : DW $0054, $0054 DB $00, $01 DW $0002 : DW $0054, $0054 DW $0000 ;21443 Draw9443: DW $0002 : DW $0055, $0055 DB $00, $01 DW $0002 : DW $0055, $0055 DW $0000 ;21453 Draw9453: DW $8002 : DW $00FF, $12FB DB $00, $FE DW $8002 : DW $1AFB, $00FF DW $0000 ;21463 Draw9463: DW $8002 : DW $80FF, $82FB DB $00, $FE DW $8002 : DW $8AFB, $80FF DW $0000 ;21473 Draw9473: DW $8004 : DW $80FF, $80FF, $80FF, $80FF DW $0000 ;2147F Draw947F: DW $8004 : DW $830F, $80FF, $80FF, $830F DW $0000 ;2148B Draw948B: DW $8004 : DW $830F, $8AE8, $82E8, $830F DW $0000 ;21497 Draw9497: DW $0001 : DW $00FF DW $0000 ;2149D Draw949D: DW $0001 : DW $80FF DW $0000 ;214A3 Draw94A3: DW $8002 : DW $8340, $830F DB $00, $FF DW $8001 : DW $8B0F DW $0000 ;214B1 Draw94B1: DW $8004 : DW $9222, $D1AF, $D1D0, $D220 DB $01, $00 DW $8004 : DW $0223, $01EB, $01D0, $0221 DW $0000 ;214C9 Draw94C9: DW $000D : DW $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044 DW $0000 ;214E7 Draw94E7: DW $000D : DW $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044 DW $0000 ;21505 Draw9505: DW $000D : DW $1241, $1242, $12FC, $12FC, $12FC, $1243, $1244, $12FC, $1245, $1642, $1241, $1241, $1246 DW $0000 ;21523 Draw9523: DW $000D : DW $09EF, $01B2, $01E5, $01E5, $01E6, $01E5, $01E5, $01E5, $01E5, $05B2, $09EF, $09EF, $01B2 DW $0000 ;21541 Draw9541: DW $000D : DW $01B1, $01D2, $01C6, $01C7, $00FF, $0206, $0207, $00FF, $01A6, $09CA, $060C, $05B1, $0A09 DW $0000 ;2155F Draw955F: DW $000D : DW $01D1, $01F2, $01A4, $01E7, $01A4, $0226, $0227, $01A5, $01A4, $020D, $0E09, $01B1, $01AB DW $0000 ;2157D Draw957D: DW $000D : DW $01B1, $0212, $01C4, $01C9, $01C4, $0206, $0207, $01C5, $01C4, $0628, $01AC, $01EC, $01EC DW $0000 ;2159B Draw959B: DW $000D : DW $01B1, $0A0C, $05CA, $0DC7, $01AA, $01A8, $01A8, $01A8, $01A8, $0628, $01AB, $01CD, $01CD DW $0000 ;215B9 Draw95B9: DW $000D : DW $01D1, $01D0, $05EA, $00FF, $00FF, $0206, $0207, $00FF, $01A7, $0A0D, $0609, $01EB, $01D0 DW $0000 ;215D7 Draw95D7: DW $000D : DW $01EB, $01EB, $05EA, $00FF, $00FF, $0206, $0207, $00FF, $01A6, $00FF, $0A2C, $0609, $01AE DW $0000 ;215F5 Draw95F5: DW $000D : DW $01EC, $01AF, $05EA, $05C7, $05C6, $0206, $0207, $01A8, $01A6, $01A8, $01A8, $05D2, $01AE DW $0000 ;21613 Draw9613: DW $000D : DW $01AC, $01AF, $01B2, $05E7, $01E5, $0226, $0227, $01E5, $01A6, $01E6, $01E5, $05B2, $01CD DW $0000 ;21631 Draw9631: DW $000D : DW $060C, $01EF, $01B2, $01E5, $01E6, $01E5, $01E5, $01E6, $01E5, $01E5, $01E5, $05B2, $01EF DW $0000 ;2164F Draw964F: DW $000D : DW $1248, $1249, $124A, $124B, $1339, $124C, $124D, $1339, $124E, $1339, $1339, $124F, $1249 DW $0000 ;2166D Draw966D: DW $000D : DW $8319, $8319, $8319, $8319, $8319, $8319, $8319, $8319, $8319, $8319, $8319, $8319, $8319 DW $0000 ;2168B Draw968B: DW $000D : DW $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044, $8044 DW $0000 ;216A9 Draw96A9: DW $8002 : DW $12FC, $00FF DW $0000 ;216B1 Draw96B1: DW $8005 : DW $12FC, $00FF, $00FF, $00FF, $00FF DW $0000 ;216BF Draw96BF: DW $8004 : DW $00FF, $00FF, $00FF, $1339 DW $0000 ;216CB Draw96CB: DW $8007 : DW $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $1339 DB $01, $00 DW $8007 : DW $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $1339 DW $0000 ;216EF Draw96EF: DW $8005 : DW $00FF, $00FF, $00FF, $00FF, $1339 DB $01, $00 DW $0001 : DW $00FF DW $0000 ;21703 Draw9703: DW $8005 : DW $00FF, $00FF, $00FF, $00FF, $1339 DB $FF, $00 DW $0001 : DW $00FF DW $0000 ;21717 Draw9717: DW $0001 : DW $C6C0 DW $0000 ;2171D Draw971D: DW $8004 : DW $C2C7, $D2C9, $DAC9, $5AC7 DB $FF, $01 DW $8002 : DW $D2C8, $DAC8 DW $0000 ;21731 Draw9731: DW $8004 : DW $C2C7, $D2CB, $DACB, $5AC7 DB $FF, $01 DW $8002 : DW $D2CA, $DACA DW $0000 ;21745 Draw9745: DW $8003 : DW $C2C7, $02CC, $0ACC DW $0000 ;2174F Draw974F: DW $0001 : DW $C2C7 DB $FD, $00 DW $8004 : DW $82CD, $86C9, $8EC9, $8ACD DB $FE, $01 DW $8002 : DW $86C8, $8EC8 DW $0000 ;21769 Draw9769: DW $0001 : DW $C2C7 DB $FD, $01 DW $8003 : DW $86CB, $8ECB, $8ACD DB $FE, $01 DW $8002 : DW $86CA, $8ECA DW $0000 ;21781 Draw9781: DW $0001 : DW $C2C7 DB $FD, $01 DW $8002 : DW $06CC, $0ECC DW $0000 ;2178F Draw978F: DW $8004 : DW $C2CE, $02CF, $0ACF, $5ACE DB $FD, $00 DW $8004 : DW $86CE, $06CF, $0ECF, $8ECE DB $FE, $01 DW $8002 : DW $D6D0, $DED0 DB $FF, $01 DW $8002 : DW $D2D0, $DAD0 DW $0000 ;217B7 Draw97B7: DW $8004 : DW $C2CE, $00FF, $00FF, $5ACE DB $FD, $00 DW $8004 : DW $86CE, $00FF, $00FF, $8ECE DB $FE, $00 DW $8004 : DW $52C2, $D2C3, $DAC3, $D2C4 DB $FF, $00 DW $8004 : DW $56C2, $D6C3, $DEC3, $D6C4 DW $0000 ;217E7 Draw97E7: DW $8004 : DW $00FF, $00FF, $00FF, $00FF DB $FD, $00 DW $8004 : DW $00FF, $00FF, $00FF, $00FF DB $FE, $00 DW $8004 : DW $02D2, $02D3, $0AD3, $02D4 DB $FF, $00 DW $8004 : DW $06D2, $06D3, $0ED3, $06D4 DW $0000 ;21817 Draw9817: DW $8004 : DW $00FF, $00FF, $00FF, $00FF DB $FD, $00 DW $8004 : DW $00FF, $00FF, $00FF, $00FF DB $FE, $00 DW $8004 : DW $00FF, $00FF, $00FF, $00FF DB $FF, $00 DW $8004 : DW $00FF, $00FF, $00FF, $00FF DW $0000 ;21847 Draw9847: DW $8004 : DW $00FF, $00FF, $00FF, $00FF DB $FF, $00 DW $8004 : DW $0172, $0173, $0173, $0172 DB $FE, $00 DW $8004 : DW $0172, $0173, $0173, $0172 DB $FD, $00 DW $8004 : DW $00FF, $00FF, $00FF, $00FF DW $0000 ;21877 Draw9877: DW $0002 : DW $8065, $8066 DB $FF, $00 DW $0001 : DW $8064 DB $00, $FF DW $0002 : DW $8045, $8046 DB $FF, $01 DW $0003 : DW $8047, $8048, $8049 DW $0000 ;21897 Draw9897: DW $0001 : DW $0001 DW $0000 ;2189D Draw989D: DW $0002 : DW $00FF, $00FF DB $FE, $00 DW $0002 : DW $00FF, $00FF DB $FE, $01 DW $0004 : DW $00FF, $00FF, $00FF, $00FF DB $FE, $FE DW $0004 : DW $00FF, $00FF, $00FF, $00FF DB $FE, $FF DW $0004 : DW $00FF, $00FF, $00FF, $00FF DW $0000 ;218D1 Draw98D1: ;Maridia Bridge Drawing Information. Well, part of it. DW $0001 : DW $C540 DW $0000 ;218D7 Draw98D7: DW $0001 : DW $8540 DW $0000 ;218DD Draw98DD: DW $0001 : DW $8141 DW $0000 ;218E3 Draw98E3: ;Unused Maridia Bridge drawing info DW $000C : DW $8141, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $8541 DB $00, $01 DW $000C : DW $0322, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $0722 DB $00, $02 DW $000C : DW $0323, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $0723 DB $00, $03 DW $000C : DW $0B23, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $0F23 DW $0000 ;21953 Draw9953: DW $0001 : DW $0141 DB $00, $04 DW $000C : DW $0B22, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $0F22 DB $00, $05 DW $000C : DW $814E, $814F, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $854F, $854E DW $0000 ;21991 Draw9991: ;Maridia Bridge Drawing Information DW $000C : DW $8141, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $8541 DB $00, $01 DW $000C : DW $0322, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $0722 DB $00, $02 DW $000C : DW $0323, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $0723 DW $0000 ;219E5 Draw99E5: DW $0001 : DW $0141 DB $00, $03 DW $000C : DW $0B23, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $0F23 DB $00, $04 DW $000C : DW $0B22, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $0F22 DB $00, $05 DW $000C : DW $814E, $814F, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $854F, $854E DW $0000 ;21A3F Draw9A3F: DW $0002 : DW $B859, $8C59 DB $00, $FF DW $0002 : DW $005B, $045B DB $00, $FE DW $0002 : DW $005B, $045B DB $00, $FD DW $0002 : DW $005B, $045B DB $00, $FC DW $0002 : DW $005B, $045B DB $00, $FB DW $0002 : DW $8059, $8459 DW $0000 ;21A6F Draw9A6F: DW $0002 : DW $8859, $8C59 DB $00, $FF DW $0002 : DW $005B, $045B DB $00, $FE DW $0002 : DW $005B, $045B DB $00, $FD DW $0002 : DW $005B, $045B DB $00, $FC DW $0002 : DW $005B, $045B DB $00, $FB DW $0002 : DW $8059, $8459 DW $0000 ;21A9F Draw9A9F: DW $0002 : DW $885A, $8C5A DB $00, $FF DW $0002 : DW $005C, $045C DB $00, $FE DW $0002 : DW $005C, $045C DB $00, $FD DW $0002 : DW $005C, $045C DB $00, $FC DW $0002 : DW $005C, $045C DB $00, $FB DW $0002 : DW $805A, $845A DW $0000 ;21ACF Draw9ACF: DW $000D : DW $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF, $00FF DW $0000 ;21AED Draw9AED: DW $000D : DW $80FF, $80FF, $80FF, $80FF, $80FF, $80FF, $80FF, $80FF, $80FF, $80FF, $80FF, $80FF, $80FF DW $0000 ;21B0B Draw9B0B: DW $0002 : DW $C64A, $524A DB $00, $01 DW $0002 : DW $D66A, $D26A DW $0000 ;21B1B Draw9B1B: DW $0002 : DW $8053, $8053 DB $00, $01 DW $0002 : DW $8053, $8053 DW $0000 ;21B2B Draw9B2B: DW $0002 : DW $8054, $8054 DB $00, $01 DW $0002 : DW $8054, $8054 DW $0000 ;21B3B Draw9B3B: DW $0002 : DW $0055, $0055 DB $00, $01 DW $0002 : DW $0055, $0055 DW $0000 ;21B4B Draw9B4B: DW $0002 : DW $00FF, $00FF DB $00, $01 DW $0002 : DW $00FF, $00FF DW $0000 ;21B5B Draw9B5B: DW $000A : DW $0080, $0080, $0080, $0080, $0080, $0080, $0080, $0080, $0080, $0080 DW $0000 ;21B73 Draw9B73: DW $0001 : DW $810B DW $0000 ;21B79 Draw9B79: DW $0001 : DW $0080 DW $0000 ;21B7F Draw9B7F: DW $8008 : DW $0080, $0107, $0127, $0107, $0127, $0147, $0080, $0080 DB $01, $00 DW $8008 : DW $0080, $0108, $0128, $0108, $0128, $0148, $0080, $0080 DB $02, $00 DW $8008 : DW $0080, $0109, $0129, $0109, $0129, $0149, $0080, $0080 DW $0000 ;21BBB Draw9BBB: DW $8008 : DW $8080, $8107, $8127, $8107, $8127, $8147, $8080, $8080 DB $01, $00 DW $8008 : DW $8080, $8108, $8128, $8108, $8128, $8148, $8080, $8080 DB $02, $00 DW $8008 : DW $8080, $8109, $8129, $8109, $8129, $8149, $8080, $8080 DW $0000 ;21BF7 Draw9BF7: DW $8004 : DW $84AA, $84CC, $8CCC, $8CAA DW $0000 ;21C03 Draw9C03: DW $8002 : DW $84CC, $8CCC DW $0000 ;21C0B Draw9C0B: DW $8002 : DW $84CB, $8CCB DW $0000 ;21C13 Draw9C13: DW $8002 : DW $C4CA, $DCCA DW $0000 ;21C1B Draw9C1B: DW $8002 : DW $84CD, $8CCD DW $0000 ;21C23 Draw9C23: DW $8002 : DW $84CA, $8CCA DW $0000 ;21C2B Draw9C2B: DW $0001 : DW $A4AA DW $0000 ;21C31 Draw9C31: DW $0001 : DW $A4AB DW $0000 ;21C37 Draw9C37: DW $0001 : DW $A4AC DW $0000 ;21C3D Draw9C3D: DW $0001 : DW $ACAA DW $0000 ;21C43 Draw9C43: DW $0001 : DW $ACAB DW $0000 ;21C49 Draw9C49: DW $0001 : DW $ACAC DW $0000 ;21C4F Draw9C4F: DW $8004 : DW $80AA, $80CC, $88CC, $88AA DW $0000 ;21C5B Draw9C5B: DW $8002 : DW $80CC, $88CC DW $0000 ;21C63 Draw9C63: DW $8002 : DW $80CB, $88CB DW $0000 ;21C6B Draw9C6B: DW $8002 : DW $C0CA, $D8CA DW $0000 ;21C73 Draw9C73: DW $8002 : DW $80CD, $88CD DW $0000 ;21C7B Draw9C7B: DW $8002 : DW $80CA, $88CA DW $0000 ;21C83 Draw9C83: DW $0001 : DW $A0AA DW $0000 ;21C89 Draw9C89: DW $0001 : DW $A0AB DW $0000 ;21C8F Draw9C8F: DW $0001 : DW $A0AC DW $0000 ;21C95 Draw9C95: DW $0001 : DW $A8AA DW $0000 ;21C9B Draw9C9B: DW $0001 : DW $A8AB DW $0000 ;21CA1 Draw9CA1: DW $0001 : DW $A8AC DW $0000 ;21CA7 Draw9CA7: DW $0001 : DW $C0FF DW $0000 ;21CAD Draw9CAD: DW $0001 : DW $8053 DW $0000 ;21CB3 Draw9CB3: DW $0001 : DW $8054 DW $0000 ;21CB9 Draw9CB9: DW $0001 : DW $0055 DW $0000 ;21CBF Draw9CBF: DW $0001 : DW $00FF DW $0000 ;21CC5 Draw9CC5: DW $000E : DW $012B, $012B, $012B, $012B, $012B, $012B, $012B, $012B, $012B, $012B, $012B, $012B, $012B, $112B DB $00, $05 DW $0009 : DW $0111, $0111, $0111, $0111, $0111, $019B, $0129, $0129, $1129 DB $05, $06 DW $0002 : DW $01BB, $0129 DB $05, $07 DW $0001 : DW $01BB DB $05, $08 DW $0001 : DW $11BB DW $0000 ;21D0F Draw9D0F: DW $000E : DW $A12B, $A12B, $A12B, $A12B, $A12B, $A12B, $A12B, $A12B, $A12B, $A12B, $A12B, $A12B, $A12B, $812B DB $00, $05 DW $0009 : DW $8111, $8111, $8111, $8111, $8111, $819B, $8129, $8129, $8129 DB $05, $06 DW $0002 : DW $81BB, $8129 DB $05, $07 DW $0001 : DW $81BB DB $05, $08 DW $0001 : DW $81BB DW $0000 ;21D59 Draw9D59: DW $8004 : DW $C171, $D171, $D171, $D171 DB $FF, $00 DW $8004 : DW $8102, $8102, $8102, $8102 DB $FE, $00 DW $8004 : DW $8560, $8560, $8560, $8560 DW $0000 ;21D7D Draw9D7D: DW $8004 : DW $8053, $8053, $8053, $8053 DB $FF, $00 DW $8004 : DW $8053, $8053, $8053, $8053 DB $FE, $00 DW $8004 : DW $8053, $8053, $8053, $8053 DW $0000 ;21DA1 Draw9DA1: DW $8004 : DW $0054, $0054, $0054, $0054 DB $FF, $00 DW $8004 : DW $0054, $0054, $0054, $0054 DB $FE, $00 DW $8004 : DW $0054, $0054, $0054, $0054 DW $0000 ;21DC5 Draw9DC5: DW $8004 : DW $8055, $8055, $8055, $8055 DB $FF, $00 DW $8004 : DW $8055, $8055, $8055, $8055 DB $FE, $00 DW $8004 : DW $8055, $8055, $8055, $8055 DW $0000 ;21DE9 Draw9DE9: DW $8004 : DW $00FF, $00FF, $00FF, $00FF DB $FF, $00 DW $8004 : DW $D0FF, $D0FF, $D0FF, $30FF DB $FE, $00 DW $8004 : DW $D0FF, $D0FF, $D0FF, $30FF DW $0000 ;21E0D Draw9E0D: DW $0002 : DW $35A1, $85A0 DB $FE, $00 DW $0002 : DW $81A0, $51A1 DB $FE, $FF DW $0004 : DW $2180, $2181, $2581, $2580 DW $0000 ;21E29 Draw9E29: DW $0002 : DW $05A1, $85A0 DB $FE, $00 DW $0002 : DW $81A0, $01A1 DB $FE, $FF DW $0004 : DW $2180, $2181, $2581, $2580 DW $0000 ;21E45 Draw9E45: DW $0002 : DW $05A3, $85A2 DB $FE, $00 DW $0002 : DW $81A2, $01A3 DB $FE, $FF DW $0004 : DW $2182, $2183, $2583, $2582 DW $0000 ;21E61 Draw9E61: DW $0002 : DW $05A5, $85A4 DB $FE, $00 DW $0002 : DW $81A4, $01A5 DB $FE, $FF DW $0004 : DW $2184, $2185, $2585, $2584 DW $0000 ;21E7D Draw9E7D: DW $0002 : DW $05A7, $85A6 DB $FE, $00 DW $0002 : DW $81A6, $01A7 DB $FE, $FF DW $0004 : DW $2186, $2187, $2587, $2586 DW $0000 ;21E99 Draw9E99: DW $0002 : DW $3DA1, $8DA0 DB $FE, $00 DW $0002 : DW $89A0, $59A1 DB $FE, $01 DW $0004 : DW $2980, $2981, $2D81, $2D80 DW $0000 ;21EB5 Draw9EB5: DW $0002 : DW $0DA1, $8DA0 DB $FE, $00 DW $0002 : DW $89A0, $09A1 DB $FE, $01 DW $0004 : DW $2980, $2981, $2D81, $2D80 DW $0000 ;21ED1 Draw9ED1: DW $0002 : DW $0DA3, $8DA2 DB $FE, $00 DW $0002 : DW $89A2, $09A3 DB $FE, $01 DW $0004 : DW $2982, $2983, $2D83, $2D82 DW $0000 ;21EED Draw9EED: DW $0002 : DW $0DA5, $8DA4 DB $FE, $00 DW $0002 : DW $89A4, $09A5 DB $FE, $01 DW $0004 : DW $2984, $2985, $2D85, $2D84 DW $0000 ;21F09 Draw9F09: DW $0002 : DW $0DA7, $8DA6 DB $FE, $00 DW $0002 : DW $89A6, $09A7 DB $FE, $01 DW $0004 : DW $2986, $2987, $2D87, $2D86 DW $0000 ;21F25 Draw9F25: DW $0001 : DW $810C DB $FF, $00 DW $0001 : DW $810B DW $0000 ;21F31 Draw9F31: DW $0001 : DW $812C DB $FF, $00 DW $0001 : DW $812B DW $0000 ;21F3D Draw9F3D: DW $0001 : DW $814C DB $FF, $00 DW $0001 : DW $814B DW $0000 ;21F49 Draw9F49: DW $0001 : DW $8128 DB $FD, $00 DW $0001 : DW $8528 DW $0000 ;21F55 Draw9F55: DW $0001 : DW $8129 DW $0000 ;21F5B Draw9F5B: DW $0001 : DW $8528 DB $03, $00 DW $0001 : DW $8128 DW $0000 ;21F67 Draw9F67: DW $0001 : DW $8529 DW $0000 ;21F6D Draw9F6D: DW $0001 : DW $80C4 DB $00, $FF DW $0001 : DW $10A4 DW $0000 ;21F79 Draw9F79: DW $0001 : DW $80C5 DB $00, $FF DW $0001 : DW $10A5 DW $0000 ;21F85 Draw9F85: DW $0001 : DW $80C6 DB $00, $FF DW $0001 : DW $10A6 DW $0000 ;21F91 Draw9F91: DW $0001 : DW $80C7 DB $00, $FF DW $0001 : DW $10A7 DW $0000 ;21F9D Draw9F9D: DW $0001 : DW $80C8 DB $00, $FF DW $0001 : DW $10A8 DW $0000 ;21FA9 Draw9FA9: DW $0001 : DW $80C9 DB $00, $FF DW $0001 : DW $10A9 DW $0000 ;21FB5 Draw9FB5: DW $0001 : DW $B4C3 DW $0000 ;21FBB Draw9FBB: DW $0001 : DW $84C1 DW $0000 ;21FC1 Draw9FC1: DW $0001 : DW $B0C3 DW $0000 ;21FC7 Draw9FC7: DW $0001 : DW $80C1 DW $0000 ;21FCD Draw9FCD: DW $0002 : DW $C514, $0513 DB $00, $01 DW $0002 : DW $D534, $0533 DW $0000 ;21FDD Draw9FDD: DW $0002 : DW $C516, $0515 DB $00, $01 DW $0002 : DW $D536, $0535 DW $0000 ;21FED Draw9FED: DW $0002 : DW $C510, $550F DB $00, $01 DW $0002 : DW $D530, $D52F DW $0000 ;21FFD Draw9FFD: DW $0002 : DW $C512, $5511 DB $00, $01 DW $0002 : DW $D532, $D531 DW $0000 ;2200D DrawA00D: DW $0002 : DW $CD30, $5D2F DB $00, $01 DW $0002 : DW $DD10, $DD0F DW $0000 ;2201D DrawA01D: DW $0002 : DW $CD32, $5D31 DB $00, $01 DW $0002 : DW $DD12, $DD11 DW $0000 ;2202D DrawA02D: DW $0002 : DW $A580, $00FF DB $00, $01 DW $0002 : DW $A5A0, $00FF DW $0000 ;2203D DrawA03D: DW $0002 : DW $A581, $00FF DB $00, $01 DW $0002 : DW $A5A1, $00FF DW $0000 ;2204D DrawA04D: DW $0002 : DW $A582, $00FF DB $00, $01 DW $0002 : DW $A5A2, $00FF DW $0000 ;2205D DrawA05D: DW $0002 : DW $A583, $00FF DB $00, $01 DW $0002 : DW $A5A3, $00FF DW $0000 ;2206D DrawA06D: DW $0002 : DW $A5A5, $A5A4 DB $00, $01 DW $0002 : DW $A5C5, $05C4 DW $0000 ;2207D DrawA07D: DW $0002 : DW $A5A7, $A5A6 DB $00, $01 DW $0002 : DW $A5C7, $05C6 DW $0000 ;2208D DrawA08D: DW $0002 : DW $A5A9, $A5A8 DB $00, $01 DW $0002 : DW $A5C9, $05C8 DW $0000 ;2209D DrawA09D: DW $0002 : DW $A5AB, $A5AA DB $00, $01 DW $0002 : DW $A5CB, $05CA DW $0000 ;220AD DrawA0AD: DW $0002 : DW $ADC5, $0DC4 DB $00, $01 DW $0002 : DW $ADA5, $ADA4 DW $0000 ;220BD DrawA0BD: DW $0002 : DW $ADC7, $0DC6 DB $00, $01 DW $0002 : DW $ADA7, $ADA6 DW $0000 ;220CD DrawA0CD: DW $0002 : DW $ADC9, $0DC8 DB $00, $01 DW $0002 : DW $ADA9, $ADA8 DW $0000 ;220DD DrawA0DD: DW $0002 : DW $ADCB, $0DCA DB $00, $01 DW $0002 : DW $ADAB, $ADAA DW $0000 ;220ED DrawA0ED: DW $0001 : DW $C114 DB $FF, $00 DW $0001 : DW $0113 DB $FF, $01 DW $0002 : DW $0133, $D134 DW $0000 ;22101 DrawA101: DW $0001 : DW $C116 DB $FF, $00 DW $0001 : DW $0115 DB $FF, $01 DW $0002 : DW $0135, $D136 DW $0000 ;22115 DrawA115: DW $0001 : DW $C110 DB $FF, $00 DW $0001 : DW $510F DB $FF, $01 DW $0002 : DW $D12F, $D130 DW $0000 ;22129 DrawA129: DW $0001 : DW $C112 DB $FF, $00 DW $0001 : DW $5111 DB $FF, $01 DW $0002 : DW $D131, $D132 DW $0000 ;2213D DrawA13D: DW $0001 : DW $C930 DB $FF, $00 DW $0001 : DW $592F DB $FF, $01 DW $0002 : DW $D90F, $D910 DW $0000 ;22151 DrawA151: DW $0001 : DW $C932 DB $FF, $00 DW $0001 : DW $5931 DB $FF, $01 DW $0002 : DW $D911, $D912 DW $0000 ;22165 DrawA165: DW $0001 : DW $A180 DB $FF, $00 DW $0001 : DW $00FF DB $FF, $01 DW $0002 : DW $00FF, $A1A0 DW $0000 ;22179 DrawA179: DW $0001 : DW $A181 DB $FF, $00 DW $0001 : DW $00FF DB $FF, $01 DW $0002 : DW $00FF, $A1A1 DW $0000 ;2218D DrawA18D: DW $0001 : DW $A182 DB $FF, $00 DW $0001 : DW $00FF DB $FF, $01 DW $0002 : DW $00FF, $A1A2 DW $0000 ;221A1 DrawA1A1: DW $0001 : DW $A183 DB $FF, $00 DW $0001 : DW $00FF DB $FF, $01 DW $0002 : DW $00FF, $A1A3 DW $0000 ;221B5 DrawA1B5: DW $0001 : DW $A1A5 DB $FF, $00 DW $0001 : DW $A1A4 DB $FF, $01 DW $0002 : DW $01C4, $A1C5 DW $0000 ;221C9 DrawA1C9: DW $0001 : DW $A1A7 DB $FF, $00 DW $0001 : DW $A1A6 DB $FF, $01 DW $0002 : DW $01C6, $A1C7 DW $0000 ;221DD DrawA1DD: DW $0001 : DW $A1A9 DB $FF, $00 DW $0001 : DW $A1A8 DB $FF, $01 DW $0002 : DW $01C8, $A1C9 DW $0000 ;221F1 DrawA1F1: DW $0001 : DW $A1AB DB $FF, $00 DW $0001 : DW $A1AA DB $FF, $01 DW $0002 : DW $01CA, $A1CB DW $0000 ;22205 DrawA205: DW $0001 : DW $A9C5 DB $FF, $00 DW $0001 : DW $09C4 DB $FF, $01 DW $0002 : DW $A9A4, $A9A5 DW $0000 ;22219 DrawA219: DW $0001 : DW $A9C7 DB $FF, $00 DW $0001 : DW $09C6 DB $FF, $01 DW $0002 : DW $A9A6, $A9A7 DW $0000 ;2222D DrawA22D: DW $0001 : DW $A9C9 DB $FF, $00 DW $0001 : DW $09C8 DB $FF, $01 DW $0002 : DW $A9A8, $A9A9 DW $0000 ;22241 DrawA241: DW $0001 : DW $A9CB DB $FF, $00 DW $0001 : DW $09CA DB $FF, $01 DW $0002 : DW $A9AA, $A9AB DW $0000 ;22255 DrawA255: DW $8002 : DW $2330, $2350 DW $0000 ;2225D DrawA25D: DW $8002 : DW $2331, $2351 DW $0000 ;22265 DrawA265: DW $8002 : DW $2332, $2352 DW $0000 ;2226D DrawA26D: DW $8002 : DW $2333, $2353 DW $0000 ;22275 DrawA275: DW $8002 : DW $2330, $2350 DB $FF, $00 DW $8002 : DW $2330, $2350 DW $0000 ;22285 DrawA285: DW $8002 : DW $2331, $2351 DB $FF, $00 DW $8002 : DW $2331, $2351 DW $0000 ;22295 DrawA295: DW $8002 : DW $2332, $2352 DB $FF, $00 DW $8002 : DW $2332, $2352 DW $0000 ;222A5 DrawA2A5: DW $8002 : DW $2333, $2353 DB $FF, $00 DW $8002 : DW $2333, $2353 DW $0000 ;222B5 DrawA2B5: DW $0001 : DW $00FF DW $0000 ;222BB DrawA2BB: DW $0001 : DW $805D DW $0000 ;222C1 DrawA2C1: DW $0001 : DW $805E DW $0000 ;222C7 DrawA2C7: DW $0001 : DW $C072 DW $0000 ;222CD DrawA2CD: DW $0001 : DW $C073 DW $0000 ;222D3 DrawA2D3: DW $0001 : DW $C074 DW $0000 ;222D9 DrawA2D9: DW $0001 : DW $8075 DW $0000 ;222DF DrawA2DF: DW $0001 : DW $B04A DW $0000 ;222E5 DrawA2E5: DW $0001 : DW $B04B DW $0000 ;222EB DrawA2EB: DW $0001 : DW $B04C DW $0000 ;222F1 DrawA2F1: DW $0001 : DW $B04D DW $0000 ;222F7 DrawA2F7: DW $0001 : DW $B04E DW $0000 ;222FD DrawA2FD: DW $0001 : DW $B04F DW $0000 ;22303 DrawA303: DW $0001 : DW $B050 DW $0000 ;22309 DrawA309: DW $0001 : DW $B051 DW $0000 ;2230F DrawA30F: DW $0001 : DW $B08E DW $0000 ;22315 DrawA315: DW $0001 : DW $B08F DW $0000 ;2231B DrawA31B: DW $0001 : DW $B090 DW $0000 ;22321 DrawA321: DW $0001 : DW $B091 DW $0000 ;22327 DrawA327: DW $0001 : DW $B092 DW $0000 ;2232D DrawA32D: DW $0001 : DW $B093 DW $0000 ;22333 DrawA333: DW $0001 : DW $B094 DW $0000 ;22339 DrawA339: DW $0001 : DW $B095 DW $0000 ;2233F DrawA33F: DW $0001 : DW $8052 DW $0000 ;22345 DrawA345: DW $0001 : DW $0053 DW $0000 ;2234B DrawA34B: DW $0001 : DW $0054 DW $0000 ;22351 DrawA351: DW $0001 : DW $0055 DW $0000 ;22357 DrawA357: DW $0001 : DW $00FF DW $0000 ;2235D DrawA35D: DW $0002 : DW $0053, $0053 DW $0000 ;22365 DrawA365: DW $0002 : DW $0054, $0054 DW $0000 ;2236D DrawA36D: DW $0002 : DW $0055, $0055 DW $0000 ;22375 DrawA375: DW $0002 : DW $00FF, $00FF DW $0000 ;2237D DrawA37D: DW $8002 : DW $0053, $0053 DW $0000 ;22385 DrawA385: DW $8002 : DW $0054, $0054 DW $0000 ;2238D DrawA38D: DW $8002 : DW $0055, $0055 DW $0000 ;22395 DrawA395: DW $8002 : DW $00FF, $00FF DW $0000 ;2239D DrawA39D: DW $0002 : DW $0053, $0053 DB $00, $01 DW $0002 : DW $0053, $0053 DW $0000 ;223AD DrawA3AD: DW $0002 : DW $0054, $0054 DB $00, $01 DW $0002 : DW $0054, $0054 DW $0000 ;223BD DrawA3BD: DW $0002 : DW $0055, $0055 DB $00, $01 DW $0002 : DW $0055, $0055 DW $0000 ;223CD DrawA3CD: DW $0002 : DW $00FF, $00FF DB $00, $01 DW $0002 : DW $00FF, $00FF DW $0000 ;223DD DrawA3DD: DW $0001 : DW $8053 DW $0000 ;223E3 DrawA3E3: DW $0001 : DW $8054 DW $0000 ;223E9 DrawA3E9: DW $0001 : DW $8055 DW $0000 ;223EF DrawA3EF: DW $0001 : DW $80FF DW $0000 ;223F5 DrawA3F5: DW $0002 : DW $8053, $8053 DW $0000 ;223FD DrawA3FD: DW $0002 : DW $8054, $8054 DW $0000 ;22405 DrawA405: DW $0002 : DW $8055, $8055 DW $0000 ;2240D DrawA40D: DW $0002 : DW $80FF, $80FF DW $0000 ;22415 DrawA415: DW $8002 : DW $8053, $8053 DW $0000 ;2241D DrawA41D: DW $8002 : DW $8054, $8054 DW $0000 ;22425 DrawA425: DW $8002 : DW $8055, $8055 DW $0000 ;2242D DrawA42D: DW $8002 : DW $80FF, $80FF DW $0000 ;22435 DrawA435: DW $0002 : DW $8053, $8053 DB $00, $01 DW $0002 : DW $8053, $8053 DW $0000 ;22445 DrawA445: DW $0002 : DW $8054, $8054 DB $00, $01 DW $0002 : DW $8054, $8054 DW $0000 ;22455 DrawA455: DW $0002 : DW $8055, $8055 DB $00, $01 DW $0002 : DW $8055, $8055 DW $0000 ;22465 DrawA465: DW $0002 : DW $80FF, $80FF DB $00, $01 DW $0002 : DW $80FF, $80FF DW $0000 ;22475 DrawA475: DW $0001 : DW $C052 DW $0000 ;2247B DrawA47B: DW $0002 : DW $C096, $5097 DW $0000 ;22483 DrawA483: DW $8002 : DW $C098, $D0B8 DW $0000 ;2248B DrawA48B: DW $0002 : DW $C099, $509A DB $00, $01 DW $0002 : DW $D0B9, $D0BA DW $0000 ;2249B DrawA49B: DW $0001 : DW $B0BC DW $0000 ;224A1 DrawA4A1: DW $0002 : DW $B0BC, $50BC DW $0000 ;224A9 DrawA4A9: DW $8002 : DW $B0BC, $D0BC DW $0000 ;224B1 DrawA4B1: DW $0002 : DW $B0BC, $50BC DB $00, $01 DW $0002 : DW $D0BC, $D0BC DW $0000 ;224C1 DrawA4C1: DW $0001 : DW $F058 DW $0000 ;224C7 DrawA4C7: DW $0002 : DW $F058, $5058 DW $0000 ;224CF DrawA4CF: DW $8002 : DW $F058, $D058 DW $0000 ;224D7 DrawA4D7: DW $0002 : DW $F058, $5058 DB $00, $01 DW $0002 : DW $D058, $D058 DW $0000 ;224E7 DrawA4E7: DW $0001 : DW $C057 DW $0000 ;224ED DrawA4ED: DW $0001 : DW $C09F DW $0000 ;224F3 DrawA4F3: DW $0001 : DW $B0B6 DW $0000 ;224F9 DrawA4F9: DW $0001 : DW $E0B7 DW $0000 ;224FF DrawA4FF: DW $0001 : DW $0053 DW $0000 ;22505 DrawA505: DW $0001 : DW $0054 DW $0000 ;2250B DrawA50B: DW $0001 : DW $0055 DW $0000 ;22511 DrawA511: DW $0001 : DW $00FF DW $0000 ;22517 DrawA517: DW $8005 : DW $C0D6, $00FF, $00FF, $00FF, $00FF DW $0000 ;22525 DrawA525: DW $8005 : DW $C0D7, $C0FF, $00FF, $00FF, $00FF DW $0000 ;22533 DrawA533: DW $8005 : DW $C0D7, $C0FF, $C0FF, $00FF, $00FF DW $0000 ;22541 DrawA541: DW $8005 : DW $C0D7, $C0FF, $C0FF, $C0FF, $00FF DW $0000 ;2254F DrawA54F: DW $8005 : DW $C0D7, $C0FF, $C0FF, $C0FF, $C0FF DW $0000 ;2255D DrawA55D: DW $8005 : DW $C0D6, $C0FF, $C0FF, $C0FF, $C0FF DW $0000 ;2256B DrawA56B: DW $8001 : DW $C0D6 DB $00, $FC DW $8004 : DW $00FF, $00FF, $00FF, $00FF DW $0000 ;2257D DrawA57D: DW $8001 : DW $C0D7 DB $00, $FC DW $8004 : DW $00FF, $00FF, $00FF, $80FF DW $0000 ;2258F DrawA58F: DW $8001 : DW $C0D7 DB $00, $FC DW $8004 : DW $00FF, $00FF, $C0FF, $C0FF DW $0000 ;225A1 DrawA5A1: DW $8001 : DW $C0D7 DB $00, $FC DW $8004 : DW $00FF, $C0FF, $C0FF, $C0FF DW $0000 ;225B3 DrawA5B3: DW $8001 : DW $C0D7 DB $00, $FC DW $8004 : DW $C0FF, $C0FF, $C0FF, $C0FF DW $0000 ;225C5 DrawA5C5: DW $8001 : DW $C0D6 DB $00, $FC DW $8004 : DW $C0FF, $C0FF, $C0FF, $C0FF DW $0000 ;225D7 DrawA5D7: DW $0001 : DW $80D6 DB $FF, $00 DW $0001 : DW $C0DB DW $0000 ;225E3 DrawA5E3: DW $0002 : DW $80D6, $C4DB DW $0000 ;225EB DrawA5EB: DW $0001 : DW $80D6 DB $FF, $00 DW $0001 : DW $C0DA DW $0000 ;225F7 DrawA5F7: DW $0002 : DW $80D6, $C4DA DW $0000 ;225FF DrawA5FF: DW $0001 : DW $80D6 DB $FF, $00 DW $0001 : DW $C0D9 DW $0000 ;2260B DrawA60B: DW $0002 : DW $80D6, $C4D9 DW $0000 ;22613 DrawA613: DW $0001 : DW $80D6 DB $FF, $00 DW $0001 : DW $C0D8 DW $0000 ;2261F DrawA61F: DW $0002 : DW $80D6, $C4D8 DW $0000 ;22627 DrawA627: DW $0001 : DW $88D6 DB $FF, $00 DW $0001 : DW $C8DB DW $0000 ;22633 DrawA633: DW $0002 : DW $88D6, $CCDB DW $0000 ;2263B DrawA63B: DW $0001 : DW $88D6 DB $FF, $00 DW $0001 : DW $C8DA DW $0000 ;22647 DrawA647: DW $0002 : DW $88D6, $CCDA DW $0000 ;2264F DrawA64F: DW $0001 : DW $88D6 DB $FF, $00 DW $0001 : DW $C8D9 DW $0000 ;2265B DrawA65B: DW $0002 : DW $88D6, $CCD9 DW $0000 ;22663 DrawA663: DW $0001 : DW $88D6 DB $FF, $00 DW $0001 : DW $C8D8 DW $0000 ;2266F DrawA66F: DW $0002 : DW $88D6, $CCD8 DW $0000 ;22677 DrawA677: DW $8004 : DW $0082, $00A2, $08A2, $0882 DW $0000 ;22683 DrawA683: DW $8004 : DW $0482, $04A2, $0CA2, $0C82 DW $0000 ;2268F DrawA68F: DW $0004 : DW $0484, $0483, $0083, $0084 DW $0000 ;2269B DrawA69B: DW $0004 : DW $0C84, $0C83, $0883, $0884 DW $0000 ;226A7 DrawA6A7: DW $8004 : DW $C0AE, $D0CE, $D8CE, $D8AE DW $0000 ;226B3 DrawA6B3: DW $8004 : DW $80AF, $80CF, $88CF, $88AF DW $0000 ;226BF DrawA6BF: DW $8004 : DW $80B0, $80D0, $88D0, $88B0 DW $0000 ;226CB DrawA6CB: DW $8004 : DW $80B1, $00D1, $08D1, $88B1 DW $0000 ;226D7 DrawA6D7: DW $8004 : DW $C4AE, $D4CE, $DCCE, $DCAE DW $0000 ;226E3 DrawA6E3: DW $8004 : DW $84AF, $84CF, $8CCF, $8CAF DW $0000 ;226EF DrawA6EF: DW $8004 : DW $84B0, $84D0, $8CD0, $8CB0 DW $0000 ;226FB DrawA6FB: DW $8004 : DW $84B1, $84D1, $8CD1, $8CB1 DW $0000 ;22707 DrawA707: DW $0004 : DW $C4B3, $54B2, $50B2, $50B3 DW $0000 ;22713 DrawA713: DW $0004 : DW $84D3, $84D2, $80D2, $80D3 DW $0000 ;2271F DrawA71F: DW $0004 : DW $84B5, $84B4, $80B4, $80B5 DW $0000 ;2272B DrawA72B: DW $0004 : DW $84D5, $84D4, $80D4, $80D5 DW $0000 ;22737 DrawA737: DW $0004 : DW $CCB3, $5CB2, $58B2, $58B3 DW $0000 ;22743 DrawA743: DW $0004 : DW $8CD3, $8CD2, $88D2, $88D3 DW $0000 ;2274F DrawA74F: DW $0004 : DW $8CB5, $8CB4, $88B4, $88B5 DW $0000 ;2275B DrawA75B: DW $0004 : DW $8CD5, $0CD4, $08D4, $88D5 DW $0000 ;22767 DrawA767: DW $8004 : DW $C000, $D020, $D820, $D800 DW $0000 ;22773 DrawA773: DW $8004 : DW $8001, $8021, $8821, $8801 DW $0000 ;2277F DrawA77F: DW $8004 : DW $8002, $8022, $8822, $8802 DW $0000 ;2278B DrawA78B: DW $8004 : DW $8003, $0023, $0823, $8803 DW $0000 ;22797 DrawA797: DW $8004 : DW $C400, $D420, $DC20, $DC00 DW $0000 ;227A3 DrawA7A3: DW $8004 : DW $8401, $8421, $8C21, $8C01 DW $0000 ;227AF DrawA7AF: DW $8004 : DW $8402, $8422, $8C22, $8C02 DW $0000 ;227BB DrawA7BB: DW $8004 : DW $8403, $8423, $8C23, $8C03 DW $0000 ;227C7 DrawA7C7: DW $0004 : DW $C411, $5410, $5010, $5011 DW $0000 ;227D3 DrawA7D3: DW $0004 : DW $8431, $8430, $8030, $8031 DW $0000 ;227DF DrawA7DF: DW $0004 : DW $8413, $8412, $8012, $8013 DW $0000 ;227EB DrawA7EB: DW $0004 : DW $8433, $8432, $8032, $8033 DW $0000 ;227F7 DrawA7F7: DW $0004 : DW $CC11, $5C10, $5810, $5811 DW $0000 ;22803 DrawA803: DW $0004 : DW $8C31, $8C30, $8830, $8831 DW $0000 ;2280F DrawA80F: DW $0004 : DW $8C13, $8C12, $8812, $8813 DW $0000 ;2281B DrawA81B: DW $0004 : DW $8C33, $0C32, $0832, $8833 DW $0000 ;22827 DrawA827: DW $8004 : DW $C004, $D024, $D824, $D804 DW $0000 ;22833 DrawA833: DW $8004 : DW $8005, $8025, $8825, $8805 DW $0000 ;2283F DrawA83F: DW $8004 : DW $8006, $8026, $8826, $8806 DW $0000 ;2284B DrawA84B: DW $8004 : DW $8007, $0027, $0827, $8807 DW $0000 ;22857 DrawA857: DW $8004 : DW $C404, $D424, $DC24, $DC04 DW $0000 ;22863 DrawA863: DW $8004 : DW $8405, $8425, $8C25, $8C05 DW $0000 ;2286F DrawA86F: DW $8004 : DW $8406, $8426, $8C26, $8C06 DW $0000 ;2287B DrawA87B: DW $8004 : DW $8407, $0427, $0C27, $8C07 DW $0000 ;22887 DrawA887: DW $0004 : DW $C415, $5414, $5014, $5015 DW $0000 ;22893 DrawA893: DW $0004 : DW $8435, $8434, $8034, $8035 DW $0000 ;2289F DrawA89F: DW $0004 : DW $8417, $8416, $8016, $8017 DW $0000 ;228AB DrawA8AB: DW $0004 : DW $8437, $8436, $8036, $8037 DW $0000 ;228B7 DrawA8B7: DW $0004 : DW $CC15, $5C14, $5814, $5815 DW $0000 ;228C3 DrawA8C3: DW $0004 : DW $8C35, $8C34, $8834, $8835 DW $0000 ;228CF DrawA8CF: DW $0004 : DW $8C17, $8C16, $8816, $8817 DW $0000 ;228DB DrawA8DB: DW $0004 : DW $8C37, $8C36, $8836, $8837 DW $0000 ;228E7 DrawA8E7: DW $8004 : DW $C008, $D028, $D828, $D808 DW $0000 ;228F3 DrawA8F3: DW $8004 : DW $8009, $8029, $8829, $8809 DW $0000 ;228FF DrawA8FF: DW $8004 : DW $800A, $802A, $882A, $880A DW $0000 ;2290B DrawA90B: DW $8004 : DW $800B, $002B, $082B, $880B DW $0000 ;22917 DrawA917: DW $8004 : DW $C408, $D428, $DC28, $DC08 DW $0000 ;22923 DrawA923: DW $8004 : DW $8409, $8429, $8C29, $8C09 DW $0000 ;2292F DrawA92F: DW $8004 : DW $840A, $842A, $8C2A, $8C0A DW $0000 ;2293B DrawA93B: DW $8004 : DW $840B, $042B, $0C2B, $8C0B DW $0000 ;22947 DrawA947: DW $0004 : DW $C419, $5418, $5018, $5019 DW $0000 ;22953 DrawA953: DW $0004 : DW $8439, $8438, $8038, $8039 DW $0000 ;2295F DrawA95F: DW $0004 : DW $841B, $841A, $801A, $801B DW $0000 ;2296B DrawA96B: DW $0004 : DW $843B, $843A, $803A, $803B DW $0000 ;22977 DrawA977: DW $0004 : DW $CC19, $5C18, $5818, $5819 DW $0000 ;22983 DrawA983: DW $0004 : DW $8C39, $8C38, $8838, $8839 DW $0000 ;2298F DrawA98F: DW $0004 : DW $8C1B, $8C1A, $881A, $881B DW $0000 ;2299B DrawA99B: DW $0004 : DW $8C3B, $8C3A, $883A, $883B DW $0000 ;229A7 DrawA9A7: DW $8004 : DW $800C, $D02C, $D82C, $D80C DW $0000 ;229B3 DrawA9B3: DW $8004 : DW $C00C, $D02C, $D82C, $D80C DW $0000 ;229BF DrawA9BF: DW $8004 : DW $800D, $802D, $882D, $880D DW $0000 ;229CB DrawA9CB: DW $8004 : DW $800E, $802E, $882E, $880E DW $0000 ;229D7 DrawA9D7: DW $8004 : DW $800F, $002F, $082F, $880F DW $0000 ;229E3 DrawA9E3: DW $8004 : DW $840C, $D42C, $DC2C, $DC0C DW $0000 ;229EF DrawA9EF: DW $8004 : DW $C40C, $D42C, $DC2C, $DC0C DW $0000 ;229FB DrawA9FB: DW $8004 : DW $840D, $842D, $8C2D, $8C0D DW $0000 ;22A07 DrawAA07: DW $8004 : DW $840E, $842E, $8C2E, $8C0E DW $0000 ;22A13 DrawAA13: DW $8004 : DW $840F, $042F, $0C2F, $8C0F DW $0000 ;22A1F DrawAA1F: DW $0004 : DW $841D, $541C, $501C, $501D DW $0000 ;22A2B DrawAA2B: DW $0004 : DW $C41D, $541C, $501C, $501D DW $0000 ;22A37 DrawAA37: DW $0004 : DW $843D, $843C, $803C, $803D DW $0000 ;22A43 DrawAA43: DW $0004 : DW $841F, $841E, $801E, $801F DW $0000 ;22A4F DrawAA4F: DW $0004 : DW $843F, $843E, $803E, $803F DW $0000 ;22A5B DrawAA5B: DW $0004 : DW $8C1D, $5C1C, $581C, $581D DW $0000 ;22A67 DrawAA67: DW $0004 : DW $CC1D, $5C1C, $581C, $581D DW $0000 ;22A73 DrawAA73: DW $0004 : DW $8C3D, $8C3C, $883C, $883D DW $0000 ;22A7F DrawAA7F: DW $0004 : DW $8C1F, $8C1E, $881E, $881F DW $0000 ;22A8B DrawAA8B: DW $0004 : DW $8C3F, $8C3E, $883E, $883F DW $0000 ;22A97 DrawAA97: DW $0001 : DW $8085 DB $03, $00 DW $0001 : DW $8485 DB $00, $01 DW $0004 : DW $8088, $8089, $8489, $8488 DW $0000 ;22AAF DrawAAAF: DW $0001 : DW $8086 DB $03, $00 DW $0001 : DW $8486 DB $00, $01 DW $0004 : DW $808A, $808B, $848B, $848A DW $0000 ;22AC7 DrawAAC7: DW $0001 : DW $8087 DB $03, $00 DW $0001 : DW $8487 DB $00, $01 DW $0004 : DW $808C, $808D, $848D, $848C DW $0000 } ; Instruction lists (mostly) { ;Finally instruction lists! ;22ADF InstAADF: DW $0001 : DW DrawA2B5 InstDoNotMake: DW IKill ;22AE5 InstAAE5: DW ISetCounter8 : DB $06 .loop1 DW $0004 : DW Draw92A3 DW $0004 : DW Draw92AF DW $0004 : DW Draw92BB DW $0004 : DW Draw9297 DW IMoveDownClone1 DW IGoToDecrement : DW .loop1 DW IKill ;22B00 Instruction AB00 (0) : Move PLM down 1 block. Identical to 8D89 in function. IMoveDownClone1: LDA $07A5 ASL A CLC ADC $1C87, X STA $1C87, X RTS ;22B0C InstAB0C: DW $0001 : DW Draw92C7 DW IKill ;22B12 InstAB12: DW IPlaySound2 : DB $0A DW $0004 : DW Draw9423 DW $0004 : DW Draw9433 DW $0004 : DW Draw9443 .sub DW $0004 : DW Draw9413 ;another PLM's instructions start on this line DW IKill ;22B27 SetupAB27: RTS ;22B28 Don't run first instruction for 40 frames SetupDelay40: TYX LDA #$0040 STA $7EDE1C, X RTS ;22B31 InstAB31: DW ISetCounter8 : DB $09 DW ISetScrollHC1 .loop1 DW IPlaySound2 : DB $0A DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0004 : DW DrawA357 DW IMoveDownClone2 DW IGoToDecrement : DW .loop1 DW IKill ;22B51 Instruction AB51 (0) : Set first two screens of room to scroll 1. ISetScrollHC1: LDA #$0101 STA $7ECD20 RTS ;22B59 Instruction AB59 (0) : Move down a block. Yes, again. IMoveDownClone2: LDA $1C87, X CLC ADC $07A5 ADC $07A5 STA $1C87, X RTS ;22B67 InstAB67: DW $0001 : DW Draw930F DW IKill ;22B6D InstAB6D: DW $0003 : DW Draw9367 DW $0003 : DW Draw936D DW $0003 : DW Draw9373 .sub ;another PLM starts here DW $0003 : DW Draw9379 DW IKill ;22B7F InstAB7F: DW $0003 : DW Draw9367 DW $0003 : DW Draw936D DW $0003 : DW Draw9373 .sub ;Another PLM starts here DW $0003 : DW Draw937F DW IKill ;22B91 InstAB91: DW $0003 : DW Draw9367 DW $0003 : DW Draw936D DW $0003 : DW Draw9373 .sub ;Another PLM's instructions start on this line DW $0003 : DW Draw9385 DW IKill ;22BA3 InstABA3: DW $0001 : DW Draw939D DW IKill ;22BA9 InstABA9: DW ISetCounter8 : DB $0B .loop1 DW $0003 : DW Draw9367 DW $0003 : DW Draw936D DW $0003 : DW Draw9373 DW $0003 : DW Draw9391 DW IMoveRight DW $0003 : DW Draw9367 DW $0003 : DW Draw936D DW $0003 : DW Draw9373 DW $0003 : DW Draw9397 DW IMoveRight DW IGoToDecrement : DW .loop1 DW IKill ;22BD6 Instruction ABD6 (0) : Move PLM right 1 block. IMoveRight: INC $1C87,X INC $1C87,X RTS ;22BDD InstABDD: DW $0001 : DW Draw93BF DW IKill ;22BE3 InstABE3: DW $0001 : DW Draw9453 DW IKill ;22BE9 InstABE9: DW $0001 : DW Draw9463 DW IKill ;22BEF InstABEF: DW $0018 : DW Draw9473 DW $0001 : DW Draw948B DW IKill ;22BF9 InstABF9: DW $0001 : DW Draw9497 DW IKill ;22BFF InstABFF: DW $0001 : DW Draw949D DW IKill ;22C05 InstAC05: DW $0001 : DW Draw94A3 DW IKill ;22C0B InstAC0B: DW $0001 : DW Draw94B1 DW IKill ;22C11 InstAC11: DW $0001 : DW Draw9505 DW IKill ;22C17 InstAC17: DW $0001 : DW Draw9523 DW IKill ;22C1D InstAC1D: DW $0001 : DW Draw9541 DW IKill ;22C23 InstAC23: DW $0001 : DW Draw955F DW IKill ;22C29 InstAC29: DW $0001 : DW Draw957D DW IKill ;22C2F InstAC2F: DW $0001 : DW Draw959B DW IKill ;22C35 InstAC35: DW $0001 : DW Draw95B9 DW IKill ;22C3B InstAC3B: DW $0001 : DW Draw95D7 DW IKill ;22C41 InstAC41: DW $0001 : DW Draw95F5 DW IKill ;22C47 InstAC47: DW $0001 : DW Draw9613 DW IKill ;22C4D InstAC4D: DW $0001 : DW Draw9631 DW IKill ;22C53 InstAC53: DW $0001 : DW Draw964F DW IKill ;22C59 InstAC59: DW $0001 : DW Draw966D DW IKill ;22C5F InstAC5F: DW $0001 : DW Draw968B DW IKill InstAC65: DW $0001 : DW Draw96A9 DW IKill InstAC6B: DW $0001 : DW Draw96B1 DW IKill InstAC71: DW $0001 : DW Draw96BF DW IKill InstAC77: DW $0001 : DW Draw96CB DW IKill InstAC7D: DW $0001 : DW Draw96EF DW IKill InstAC83: DW $0001 : DW Draw9703 DW IKill ;22C89 AC89 (0) : Move Samus to a spot specified by variable RAM, give Samus 10 frames of invincibility ;Not actually an instruction, it's called as pre-instruction code ;IMoveSamus: CodeAC89: LDA $1E17,X STA $0AF6 LDA $7EDF0C, X STA $0AFA LDA #$0010 TSB $18A8 RTS ;22C9D Instruction AC9D (0) : Do 2 atmospheric damage to Samus. IHurtSamus: LDA $0A4E CLC ADC #$0000 STA $0A4E LDA $0A50 ADC #$0002 STA $0A50 RTS ;22CB1 Instruction ACB1 (0) : Set Samus's invincibility timer to 30 frames ISamusInvincible30: LDA #$0030 STA $18A8 RTS ;22CB8 InstACB8: DW ISetPreInstructionCode : DW CodeAC89 DW ISetCounter8 : DB $04 .loop1 DW $0005 : DW Draw9E61 DW $0005 : DW Draw9E45 DW $0005 : DW Draw9E61 DW IPlaySound2 : DB $31 DW IHurtSamus DW $0005 : DW Draw9E7D DW $0005 : DW Draw9E61 DW $0005 : DW Draw9E45 DW $0005 : DW Draw9E61 DW IHurtSamus DW $0005 : DW Draw9E7D DW IGoToDecrement : DW .loop1 DW ISamusInvincible30 DW IStopPreInstructionCode DW $0060 : DW Draw9E7D DW $0001 : DW Draw9E0D DW IKill ;22CF8 InstACF8: DW ISetPreInstructionCode : DW CodeAC89 DW ISetCounter8 : DB $08 .loop1 DW $0005 : DW Draw9EED DW $0005 : DW Draw9ED1 DW $0005 : DW Draw9EED DW IPlaySound2 : DB $31 DW IHurtSamus DW $0005 : DW Draw9F09 DW $0005 : DW Draw9EED DW $0005 : DW Draw9ED1 DW $0005 : DW Draw9EED DW IHurtSamus DW $0005 : DW Draw9F09 DW IGoToDecrement : DW .loop1 DW ISamusInvincible30 DW IStopPreInstructionCode DW $0060 : DW Draw9F09 DW $0001 : DW Draw9E99 DW IKill ;22D38 InstAD38: DW IBranchBossBits : DB $01 : DW .sub1 DW IKill .sub1 DW ISpawnTreadmill8 DW IKill ;22D43 Instruction AD43 (0) : Write 38 blocks of treadmill type 8 ISpawnTreadmill8: JSR WriteBlocksTGBTS DW $30FF : DW $0008 : DW $0038 RTS ;22D4D InstAD4D: DW IBranchBossBits : DB $01 : DW .sub1 DW IKill .sub1 DW ISpawnTreadmill9 DW IKill ;22D58 Instruction AD58 (0) : Write 38 blocks of treadmill type 9 ISpawnTreadmill9: JSR WriteBlocksTGBTS DW $30FF : DW $0009 : DW $0038 RTS InstAD62: DW ISetGoTo : DW .loop2 .loop1 DW $0006 : DW Draw9F25 DW $0006 : DW Draw9F31 DW $0006 : DW Draw9F3D DW IGoTo : DW .loop1 .loop2 DW $0002 : DW Draw9F25 DW $0002 : DW Draw9F31 DW $0002 : DW Draw9F3D DW IGoTo : DW .loop2 InstAD86: DW IPlaySound2 : DB $37 DW $0006 : DW Draw9F49 DW $0060 : DW Draw9F55 DW IMapCollected DW $0006 : DW Draw9F55 DW IPlaySound2 : DB $38 DW $0006 : DW Draw9F55 DW $0006 : DW Draw9F49 DW IKill InstADA4: DW IPlaySound2 : DB $37 DW $0006 : DW Draw9F5B DW $0060 : DW Draw9F67 DW IMapCollected DW $0006 : DW Draw9F67 DW IPlaySound2 : DB $38 DW $0006 : DW Draw9F67 DW $0006 : DW Draw9F5B DW IKill InstADC2: DW ISetGoTo : DW .sub1 .loop1 DW $0006 : DW Draw9F6D DW $0006 : DW Draw9F79 DW $0006 : DW Draw9F85 DW IGoTo : DW .loop1 .sub1 DW IHealthCheck : DW .sub2 DW ISetCounter8 : DB $10 .loop2 DW $0002 : DW Draw9F6D DW $0002 : DW Draw9F79 DW $0002 : DW Draw9F85 DW IGoToDecrement : DW .loop2 .sub2 DW IGoTo : DW InstADC2 InstADF1: DW IHealthCheck : DW .sub1 DW IPlaySound2 : DB $37 DW $0006 : DW Draw9FB5 DW $0060 : DW Draw9FBB DW IEnergyRestore DW $0006 : DW Draw9FBB DW IPlaySound2 : DB $38 DW $0006 : DW Draw9FBB DW $0006 : DW Draw9FB5 .sub1 DW IKill InstAE13: DW IHealthCheck : DW .sub1 DW IPlaySound2 : DB $37 DW $0006 : DW Draw9FC1 DW $0060 : DW Draw9FC7 DW IEnergyRestore DW $0006 : DW Draw9FC7 DW IPlaySound2 : DB $38 DW $0006 : DW Draw9FC7 DW $0006 : DW Draw9FC1 .sub1 DW IKill ;22E35 Instruction AE35 (2) : Check health. If full, enable Samus's controls and GoTo argument. IHealthCheck: LDA $09C4 CMP $09C2 BEQ + INY INY RTS + LDA #$0001 JSL $90F084 ; $87084 IN ROM LDA $0000, Y TAY RTS ;22E4C InstAE4C: DW ISetGoTo : DW .sub2 .loop1 DW $0006 : DW Draw9F91 DW $0006 : DW Draw9F9D DW $0006 : DW Draw9FA9 DW IGoTo : DW .loop1 .sub2 DW IMissileCheck : DW .sub1 DW ISetCounter8 : DB $10 .loop2 DW $0003 : DW Draw9F91 DW $0003 : DW Draw9F9D DW $0003 : DW Draw9FA9 DW IGoToDecrement : DW .loop2 .sub1 DW IGoTo : DW InstAE4C ;22E7B InstAE7B: DW IMissileCheck : DW .sub1 DW IPlaySound2 : DB $37 DW $0006 : DW Draw9FB5 DW $0060 : DW Draw9FBB DW IMissileRestore DW $0006 : DW Draw9FBB DW IPlaySound2 : DB $38 DW $0006 : DW Draw9FBB DW $0006 : DW Draw9FB5 .sub1 DW IKill InstAE9D: DW IMissileCheck : DW .sub1 DW IPlaySound2 : DB $37 DW $0006 : DW Draw9FC1 DW $0060 : DW Draw9FC7 DW IMissileRestore DW $0006 : DW Draw9FC7 DW IPlaySound2 : DB $38 DW $0006 : DW Draw9FC7 DW $0006 : DW Draw9FC1 .sub1 DW IKill ;22EBF Instruction AEBF (2) : Check if Samus has full missiles. If so, enable controls and goto argument. IMissileCheck: LDA $09C8 CMP $09C6 BEQ + INY INY RTS + LDA #$0001 JSL $90F084 ; $87084 IN ROM LDA $0000, Y TAY RTS InstAED6: DW IKill InstAED8: DW $0010 : DW DrawA255 DW $0010 : DW DrawA25D DW $0010 : DW DrawA265 DW $0010 : DW DrawA26D DW $0012 : DW DrawA255 DW $0012 : DW DrawA25D DW $0012 : DW DrawA265 DW $0012 : DW DrawA26D DW $0014 : DW DrawA255 DW $0014 : DW DrawA25D DW $0014 : DW DrawA265 DW $0014 : DW DrawA26D DW $0012 : DW DrawA255 DW $0012 : DW DrawA25D DW $0012 : DW DrawA265 DW $0012 : DW DrawA26D DW IGoTo : DW InstAED8 InstAF1C: DW IKill InstAF1E: DW $0010 : DW DrawA275 DW $0010 : DW DrawA285 DW $0010 : DW DrawA295 DW $0010 : DW DrawA2A5 DW $0012 : DW DrawA275 DW $0012 : DW DrawA285 DW $0012 : DW DrawA295 DW $0012 : DW DrawA2A5 DW $0014 : DW DrawA275 DW $0014 : DW DrawA285 DW $0014 : DW DrawA295 DW $0014 : DW DrawA2A5 DW $0012 : DW DrawA275 DW $0012 : DW DrawA285 DW $0012 : DW DrawA295 DW $0012 : DW DrawA2A5 DW IGoTo : DW InstAF1E DrawAF62: DW $0001 : DW $3074 DW $0000 DrawAF68: DW $0001 : DW $B074 DW $0000 DrawAF6E: ;'Debug' use only. Continuation from right, shown with a powerbomb door DW $0001 : DW $5011 DW $0000 DrawAF74: ;'Debug' use only. Continuation from left, shown with a powerbomb door DW $0001 : DW $5411 DW $0000 DrawAF7A: ;'Debug' use only. Continuation from down, shown with a powerbomb door DW $0001 : DW $D800 DW $0000 DrawAF80: ;'Debug' use only. Continuation from up, shown with a powerbomb door DW $0001 : DW $D000 DW $0000 InstAF86: DW $0001 : DW DrawAF62 .loop1 DW IWait DW IScrollUpdate DW IGoTo : DW .loop1 InstAF92: DW $0001 : DW DrawAF68 .loop1 DW IWait DW IScrollUpdateCrumble DW IGoTo : DW .loop1 InstAF9E: DW $0001 : DW DrawAF6E DW IKill InstAFA4: DW $0001 : DW DrawAF74 DW IKill InstAFAA: DW $0001 : DW DrawAF7A DW IKill InstAFB0: DW $0001 : DW DrawAF80 DW IKill InstAFB6: DW $0004 : DW DrawAA97 DW $0004 : DW DrawAAAF DW $0004 : DW DrawAAC7 DW $0004 : DW DrawAAAF DW IGoTo : DW InstAFB6 InstAFCA: DW $0001 : DW Draw9B5B DW IKill InstAFD0: DW $0001 : DW Draw9B73 DW IKill InstAFD6: DW $0001 : DW Draw9B79 DW IKill InstAFDC: DW $0001 : DW Draw9B7F DW IKill InstAFE2: DW $0001 : DW Draw9BBB DW IKill InstAFE8: DW $0001 : DW Draw9A3F DW IWait InstAFEE: DW ISaveGame : DW .sub1 DW ISetSaving DW IPlaySound1 : DB $2E DW ISetCounter8 : DB $15 .loop1 DW $0004 : DW Draw9A9F DW $0004 : DW Draw9A6F DW IGoToDecrement : DW .loop1 DW IMessageSaved .sub1 DW IEndSaving DW IGoTo : DW InstAFE8 ;2300E Instruction B00E (0) : Center Samus and do something else... disable controls? ISetSaving: LDA $0AF6 CLC ADC #$0008 AND #$FFF0 STA $0AF6 PHX PHY JSL $91E3F6 ; $8E3F6 IN ROM PLY PLX RTS ;23024 Instruction B024 (0) : Display 'Game Saved' message box IMessageSaved: PHX PHY LDA #$0018 JSL $858080 ; $28080 IN ROM PLY PLX RTS ;23030 Instruction B030 (0) : Resume gameplay controls, set save station as used. IEndSaving: LDA #$0001 JSL $90F084 ; $87084 IN ROM LDA #$0001 STA $1E75 RTS InstB03E: DW $0001 : DW Draw9ACF DW IKill InstB044: DW $0001 : DW Draw9AED DW IKill } ; Setups { ;B04A : Not an instruction. Clear 38 horizontal blocks to air, starting at PLM's location. SetupB04A: ;Clear38Blocks: LDX $1C87, Y LDA #$00FF LDY #$0038 - STA $7F0002, X INX INX DEY BNE - RTS ;B05D : AKA someone probably should be in trouble for programming this... I really hope this code isn't actually used. StackSuicideRoutine: PHB PHA PEA $8F00 PLB PLB ASL A ASL A ASL A ASL A TAX CMP $1968 BEQ + ;Stack mismatch opportunity 1! Crash if A contains current FX1 number (aka A * 10 = FX1 index) LDA $197C BEQ ++ ;Stack mismatch opportunity 2! Crash if liquid layer isn't moving LDA $1978 BMI ++ ;Stack mismatch opportunity 3! Crash if liquid layer doesn't exist (I think?) TYA CLC ADC $07CD TAX CMP $0002, X PLA PLB BCC + ;Branch if... Y+07CD < (Y+07CD+2)? Y assumably holds a FX1 index. Not that that really helps explain anything. ++ JSL $89AB02 ; $4AB02 IN ROM ;Dunno what this does, but after reading this routine I don't even care. Outside of morbid curiousity. + CLC RTS ;This might make sense if A simultaneously held an FX1 number AND a pointer to a routine! ;B08B StackSuicide1: LDX $1C27 JSL GetPLMCoordinate ; $20290 IN ROM LDA $0AF6 LSR A LSR A LSR A LSR A CMP $1C29 BNE + LDA #$0000 JMP StackSuicideRoutine ; $2305D IN ROM ;This is called if Samus's horizontal position lines up with the PLM... + CLC RTS ;B0A6 StackSuicide2: LDX $1C27 JSL GetPLMCoordinate ; $20290 IN ROM LDA $0AF6 LSR A LSR A LSR A LSR A CMP $1C29 BNE + LDA #$0001 JMP StackSuicideRoutine ; $2305D IN ROM ;This is called if Samus's horizontal position lines up with the PLM... + CLC RTS ;B0C1 StackSuicide3: LDX $1C27 JSL GetPLMCoordinate ; $20290 IN ROM LDA $0AF6 LSR A LSR A LSR A LSR A CMP $1C29 BNE + LDA #$0002 JMP StackSuicideRoutine ; $2305D IN ROM + CLC RTS ;B0DC : Delete PLM if Samus isn't lined up. Else Save Samus's position and make PLM normal solid (or possibly air) SetupB0DC: LDA $0AFA CLC ADC $0B00 DEC A AND #$000F CMP #$000F BEQ + LDA #$0000 STA $1C37, Y CLC RTS + ;If Samus's right edge lines up with a block's edge... LDX $1C87, Y LDA $7F0002, X AND #$8FFF STA $7F0002, X TYX LDA $0AF6 STA $1E17, X LDA $0AFA DEC A STA $7EDF0C, X CLC RTS ;B113 : Delete PLM if Samus isn't lined up. Else Save Samus's position and make PLM normal solid (or possibly air) SetupB113: LDA $0AFA SEC SBC $0B00 AND #$000F BEQ + LDA #$0000 STA $1C37, Y CLC RTS + ;If Samus's left edge lines up with a block's edge... LDX $1C87, Y LDA $7F0002, X AND #$8FFF STA $7F0002, X TYX LDA $0AF6 STA $1E17, X LDA $0AFA INC A STA $7EDF0C, X CLC RTS ;23146 If Samus's center Y(?) lines up with THIS PLM, wake up the PLM located at A, and pause? Samus. If fails (no PLM or not lined up), delete self. SetupB146: LDX #$004E - CMP $1C87, X BEQ + DEX DEX BPL - BRA ++ + PHX LDX $1C27 JSL GetPLMCoordinate ; $20290 IN ROM PLX LDA $1C2B ASL A ASL A ASL A ASL A ORA #$000B CMP $0AFA BNE ++ LDA $7EDEBC, X STA $1D27, X LDA #$0001 STA $7EDE1C, X LDA #$0006 JSL $90F084 ; $87084 IN ROM SEC RTS ++ LDA #$0000 STA $1C37, Y SEC RTS ;2318B Sets itself to solid, if map not collected, sets next and previous blocks' type and BTS (map station setup). SetupB18B: LDX $1C87, Y LDA $7F0002, X AND #$0FFF ORA #$8000 STA $7F0002, X LDX $079F LDA $7ED908, X AND #$00FF BNE + LDX $1C87, Y INX INX LDA #$B047 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C87, Y DEX DEX DEX DEX LDA #$B048 JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS + LDA #InstAD62_loop2 ;$AD76 STA $1D27, Y RTS ;231C8 Check to see if Samus is in the proper pose to hookup to a station. Else delete self. SetupB1C8: LDA $0B02 AND #$000F BNE + LDA $0A1C CMP #$008A BNE + LDA $0A1E AND #$0004 BEQ + LDA $1C87, Y DEC A DEC A JMP SetupB146 ; $23146 IN ROM + LDA #$0000 STA $1C37, Y SEC RTS ;231F0 Check to see if Samus is in the proper pose to hookup to a station. Else delete self. SetupB1F0: LDA $0B02 AND #$000F CMP #$0001 BNE + LDA $0A1C CMP #$0089 BNE + LDA $0A1E AND #$0008 BEQ + LDA $1C87, Y INC A INC A INC A INC A JMP SetupB146 ; $23146 IN ROM + LDA #$0000 STA $1C37, Y SEC RTS ;2321D Energy or Missile station setup, not sure. Sets blocks' type/BTS SetupB21D: LDX $1C87, Y LDA $7F0002, X AND #$0FFF ORA #$8000 STA $7F0002, X LDX $1C87, Y INX INX LDA #$B049 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C87, Y DEX DEX LDA #$B04A JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS ;23245 Energy or Missile station setup, not sure. Sets blocks' type/BTS SetupB245: LDX $1C87, Y LDA $7F0002, X AND #$0FFF ORA #$8000 STA $7F0002, X LDX $1C87, Y INX INX LDA #$B04B JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C87, Y DEX DEX LDA #$B04C JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS ;2326D Check if Samus is lined up with the energy station and doesn't have full energy. SetupB26D: LDA $0B02 AND #$000F BNE + LDA $0A1C CMP #$008A BNE + LDA $0A1E AND #$0004 BEQ + LDA $09C2 CMP $09C4 BEQ + LDA $1C87, Y DEC A DEC A JMP SetupB146 ; $23146 IN ROM + LDA #$0000 STA $1C37, Y SEC RTS ;2329D Check if Samus is lined up with the energy station and doesn't have full energy. SetupB29D: LDA $0B02 AND #$000F CMP #$0001 BNE + LDA $0A1C CMP #$0089 BNE + LDA $0A1E AND #$0008 BEQ + LDA $09C2 CMP $09C4 BEQ + LDA $1C87, Y INC A INC A JMP SetupB146 ; $23146 IN ROM + LDA #$0000 STA $1C37, Y SEC RTS ;232D0 Check if Samus is lined up with the missile station and doesn't have full energy. SetupB2D0: LDA $0B02 AND #$000F BNE + LDA $0A1C CMP #$008A BNE + LDA $0A1E AND #$0004 BEQ + LDA $09C6 CMP $09C8 BEQ + LDA $1C87, Y DEC A DEC A JMP SetupB146 ; $23146 IN ROM + LDA #$0000 STA $1C37, Y SEC RTS ;23300 Check if Samus is lined up with the missile station and doesn't have full energy. SetupB300: LDA $0B02 AND #$000F CMP #$0001 BNE + LDA $0A1C CMP #$0089 BNE + LDA $0A1E AND #$0008 BEQ + LDA $09C6 CMP $09C8 BEQ + LDA $1C87, Y INC A INC A JMP SetupB146 ; $23146 IN ROM + LDA #$0000 STA $1C37, Y SEC RTS ;23333 see the label SetupDeleteSelf: LDA #$0000 STA $1C37, Y RTS ;2333A Extend left block SetupB33A: LDX $1C87, Y LDA #$50FF JSR WriteBlockTypeBTS ; $202B4 IN ROM BRA SetupDeleteSelf ;23345 Extend right block SetupB345: LDX $1C87, Y LDA #$5001 JSR WriteBlockTypeBTS ; $202B4 IN ROM BRA SetupDeleteSelf ;23350 Extend above block SetupB350: LDX $1C87, Y LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM BRA SetupDeleteSelf ;2335B Extend below block SetupB35B: LDX $1C87, Y LDA #$D001 JSR WriteBlockTypeBTS ; $202B4 IN ROM BRA SetupDeleteSelf ;23366 Skip first four bytes of instructions SetupSkipInst4: LDA $1D27, Y CLC ADC #$0004 STA $1D27, Y RTS ;23371 SetupB371: LDX $1C87, Y LDA #$3046 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDA #$0000 STA $1E17, Y BRA SetupSkipInst4 ;23382 SetupB382: LDX $1C87, Y LDA #$B046 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDA #$0000 STA $1E17, Y BRA SetupSkipInst4 ;23393 Find the (probably scroll) PLM on this spot, if it's triggerable, trigger it. SetupB393: TYX LDA $1C87, X STZ $1C87, X LDX #$004E - CMP $1C87, X BEQ + DEX DEX BPL - - BRA - + LDA $1E17, X BMI + LDA #$8000 STA $1E17, X INC $1D27, X INC $1D27, X LDA #$0001 STA $7EDE1C, X + RTS ;233C1 Change current block to solid (or possibly air) SetupB3C1: LDX $1C87, Y LDA $7F0002, X AND #$8FFF STA $7F0002, X SetupRTS: RTS ;233D0 ... clear carry. SetupB3D0: CLC RTS ;233D2 and set carry SetupB3D2: SEC RTS ;233D4 Change PLM's block to air. SetupB3D4: LDX $1C87, Y LDA $7F0002, X AND #$0FFF STA $7F0002, X RTS ;233E3 Spawn room object A977. Curious what this is. Oh well SetupB3E3: LDY #$A977 JSL $868097 ; $30097 IN ROM RTS ;233EB Set momentum subtraction multiplier to 10 if Samus is lined up vertically... SetupB3EB: LDA $0AFA CLC ADC $0B00 DEC A AND #$000F CMP #$0007 BEQ + CMP #$000F BNE ++ + LDA #$0010 STA $0B4C ++ CLC RTS ;23408 Seems to be some sort of vertical treadmill? SetupB408: ;This may just be a JSR instead.. STZ $0B3C STZ $0B3E STZ $0B40 STZ $0B44 STZ $0B42 LDA #$8000 TRB $0B48 STZ $0B46 LDY #$0000 LDA $09A2 BIT #$0020 BEQ + LDY #$0002 + LDA $1E73 BNE + LDA $0B36 AND #$0003 ASL A TAX JSR (.table, X) ; $2343F IN ROM RTS ;2343F .table DW .sub1, .sub2, .sub3, .sub1 ;Last one probably isn't actually ever used. ;B447 .sub1 STZ $0B2C STZ $0B2E STZ $0B5A STZ $0B5C LDA.w .table3, Y STA $0B5B + RTS ;2345A .sub2 LDA.w .table4, Y CMP $0B2D BCS + STZ $0B2C STZ $0B2E LDA.w .table4, Y STA $0B2D + STZ $0B5A STZ $0B5C LDA.w .table2, Y STA $0B5B RTS ;2347B .sub3 STZ $0B5A STZ $0B5C LDA.w .table2, Y STA $0B5B STZ $0AF4 RTS .table2 ;2348B DW $0200, $0200 .table3 ;2348F DW $0120, $0100 .table4 ;23493 DW $0280, $0380 ;23497 Vertical treadmill. What's 0AF4 do? SetupB497: ;again, maybe JSR STZ $0AF4 LDA #$2000 STA $0B5A LDA #$0001 STA $0B5C CLC RTS ;234A8 Vertical treadmill, slightly faster SetupB4A8: LDA #$4000 STA $0B5A LDA #$0001 STA $0B5C CLC RTS ;234B6 Vertical treadmill. Significantly faster. SetupB4B6: LDA #$C000 STA $0B5A LDA #$0001 STA $0B5C CLC RTS ;234C4 Quicksand stuff, I guess. SetupB4C4: LDA $0B02 AND #$0002 BNE + CLC RTS + ;if Samus DIDN'T hit her head on the block LDY #$0000 LDA $09A2 BIT #$0020 BEQ + LDY #$0002 + LDX $12 LDA $14 STA $12 STX $14 LDA $0B36 AND #$0003 ASL A TAX JSR (.table1, X) ; $234F8 IN ROM LDX $12 LDA $14 STA $12 STX $14 RTS ;234F8 .table1 DW .sub1, .sub2, .sub3, .sub1 ;B500 .sub1 LDA $0B02 AND #$000F CMP #$0002 BEQ ++ CMP #$0003 BEQ + BRA ++ + LDA $0A6E CMP #$0001 BEQ +++ LDA.w .table2, Y CMP $13 BCS + STA $13 + INC $1E71 ++ CLC RTS ;23528 .sub2 CLC RTS ;2352A .sub3 LDA $0A6E CMP #$0001 BEQ +++ INC $1E71 CLC RTS +++ STZ $12 STZ $14 SEC RTS .table2 ;B53D DW $0030, $0030 ;B541 SetupB541: STZ $0B2C STZ $0B2E STZ $0B32 STZ $0B34 CLC RTS ;2354F SetupB54F: CLC RTS ;23551 Turn this and the 9 tiles below it to air. SetupB551: LDX $1C87, Y LDY #$000A - LDA $7F0002, X AND #$0FFF STA $7F0002, X TXA CLC ADC $07A5 ADC $07A5 TAX DEY BNE - RTS ;2356F Turn this and the 9 tiles below it to solid. SetupB56F: LDX $1C87, Y LDY #$000A - LDA $7F0002, X AND #$0FFF ORA #$8000 STA $7F0002, X TXA CLC ADC $07A5 ADC $07A5 TAX DEY BNE - RTS ;23590 Save station trigger, I think... Checks if Samus is standing still in the right spot, wakes up a PLM at the same location. SetupB590: LDA $0592 BNE +++ LDA $0A1C CMP #$0001 BEQ + CMP #$0002 BNE +++ + LDA $1E75 BNE +++ LDA $0B02 AND #$000F CMP #$0003 BNE +++ TYX JSL GetPLMCoordinate ; $20290 IN ROM LDA $0AF6 SEC SBC #$0008 LSR A LSR A LSR A LSR A CMP $1C29 BNE +++ TYX LDA $1C87, X STZ $1C87, X STZ $1C37, X LDX #$004E - CMP $1C87, X BEQ ++ DEX DEX BPL - SEC RTS ++ INC $1D27, X INC $1D27, X LDA #$0001 STA $7EDE1C, X +++ SEC RTS ;235EE Sets up this block SetupB5EE: LDX $1C87, Y LDA #$B04D JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS ;235F8 Sets up 4 blocks vertically SetupB5F8: LDX $1C87, Y LDA #$9001 JSR WriteBlockTypeBTS ; $202B4 IN ROM TXA CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM TXA CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM TXA CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS } ; PLM entries { PLMB62F: : %rename(B62F) ;Don't make PLM DW SetupRTS, InstDoNotMake PLMB633: : %rename(B633) DW SetupB3D0, InstDoNotMake PLMB637: : %rename(B637) DW SetupB3D2, InstDoNotMake PLMB63B: : %rename(B63B) ;Continue from left DW SetupB33A, InstAFA4 PLMB63F: : %rename(B63F) ;Continuation from right DW SetupB345, InstAF9E PLMB643: : %rename(B643) ;Continuation from above DW SetupB350, InstAFB0 PLMB647: : %rename(B647) ;Continuation from below DW SetupB35B, InstAFAA PLMB64B: : %rename(B64B) DW SetupB04A, InstAD38 PLMB64F: : %rename(B64F) DW SetupB04A, InstAD4D PLMB653: : %rename(B653) DW SetupRTS, InstDoNotMake PLMB657: : %rename(B657) DW SetupRTS, InstDoNotMake PLMB65B: : %rename(B65B) DW SetupRTS, InstDoNotMake PLMB65F: : %rename(B65F) DW SetupB3C1, InstABE3 PLMB663: : %rename(B663) DW SetupB3C1, InstABE9 PLMB667: : %rename(B667) DW SetupB3C1, InstABEF PLMB66B: : %rename(B66B) DW SetupB3C1, InstABF9 PLMB66F: : %rename(B66F) DW SetupB3C1, InstABFF PLMB673: : %rename(B673) DW SetupB3C1, InstAC05 PLMB677: : %rename(B677) DW SetupB5F8, InstAC0B PLMB67B: : %rename(B67B) DW SetupB3C1, InstAC11 PLMB67F: : %rename(B67F) DW SetupB3C1, InstAC17 PLMB683: : %rename(B683) DW SetupB3C1, InstAC1D PLMB687: : %rename(B687) DW SetupB3C1, InstAC23 PLMB68B: : %rename(B68B) DW SetupB3C1, InstAC29 PLMB68F: : %rename(B68F) DW SetupB3C1, InstAC2F PLMB693: : %rename(B693) DW SetupB3C1, InstAC35 PLMB697: : %rename(B697) DW SetupB3C1, InstAC3B PLMB69B: : %rename(B69B) DW SetupB3C1, InstAC41 PLMB69F: : %rename(B69F) DW SetupB3C1, InstAC47 PLMB6A3: : %rename(B6A3) DW SetupB3C1, InstAC4D PLMB6A7: : %rename(B6A7) DW SetupB3C1, InstAC53 PLMB6AB: : %rename(B6AB) DW SetupB3C1, InstAC59 PLMB6AF: : %rename(B6AF) DW SetupB3C1, InstAC5F PLMB6B3: : %rename(B6B3) DW SetupB3C1, InstAC65 PLMB6B7: : %rename(B6B7) DW SetupB3C1, InstAC6B PLMB6BB: : %rename(B6BB) DW SetupB3C1, InstAC71 PLMB6BF: : %rename(B6BF) DW SetupB3C1, InstAC77 PLMB6C3: : %rename(B6C3) DW SetupB3C1, InstAC7D PLMB6C7: : %rename(B6C7) DW SetupB3C1, InstAC83 PLMB6CB: : %rename(B6CB) DW SetupB0DC, InstACB8 PLMB6CF: : %rename(B6CF) DW SetupB113, InstACF8 PLMB6D3: : %rename(B6D3) ;Map station DW SetupB18B, InstAD62 PLMB6D7: : %rename(B6D7) ;Map station right access DW SetupB1C8, InstAD86 PLMB6DB: : %rename(B6DB) ;Map station left access DW SetupB1F0, InstADA4 PLMB6DF: : %rename(B6DF) ;Energy station DW SetupB21D, InstADC2 PLMB6E3: : %rename(B6E3) ;Energy station right access DW SetupB26D, InstADF1 PLMB6E7: : %rename(B6E7) ;Energy station left access DW SetupB29D, InstAE13 PLMB6EB: : %rename(B6EB) ;Missile station DW SetupB245, InstAE4C PLMB6EF: : %rename(B6EF) ;Missile station right access DW SetupB2D0, InstAE7B PLMB6F3: : %rename(B6F3) ;Missile station left access DW SetupB300, InstAE9D PLMB6F7: : %rename(B6F7) DW SetupB3C1, InstAED6 PLMB6FB: : %rename(B6FB) DW SetupB3C1, InstAF1C PLMB6FF: : %rename(B6FF) ;Scroll block touch PLM DW SetupB393, InstDoNotMake PLMB703: : %rename(B703) ;Common scroll PLM DW SetupB371, InstAF86 PLMB707: : %rename(B707) DW SetupB382, InstAF92 PLMB70B: : %rename(B70B) ;Elevator platform? .. pretty sure yeah. An elevator that moves up. DW SetupB3C1, InstAFB6 PLMB70F: : %rename(B70F) DW SetupB3EB, InstDoNotMake PLMB713: : %rename(B713) DW SetupB408, InstDoNotMake PLMB717: : %rename(B717) DW SetupB408, InstDoNotMake PLMB71B: : %rename(B71B) DW SetupB408, InstDoNotMake PLMB71F: : %rename(B71F) DW SetupB497, InstDoNotMake PLMB723: : %rename(B723) DW SetupB4A8, InstDoNotMake PLMB727: : %rename(B727) DW SetupB4B6, InstDoNotMake PLMB72B: : %rename(B72B) DW SetupB4C4, InstDoNotMake PLMB72F: : %rename(B72F) DW SetupB4C4, InstDoNotMake PLMB733: : %rename(B733) DW SetupB4C4, InstDoNotMake PLMB737: : %rename(B737) ;Something for Maridia. Kills speed. DW SetupB541, InstDoNotMake PLMB73B: : %rename(B73B) DW SetupB54F, InstDoNotMake PLMB73F: : %rename(B73F) DW SetupB54F, InstDoNotMake PLMB743: : %rename(B743) DW SetupB3E3, InstDoNotMake PLMB747: : %rename(B747) DW SetupB3C1, InstAFCA PLMB74B: : %rename(B74B) DW SetupB3C1, InstAFD0 PLMB74F: : %rename(B74F) DW SetupB3C1, InstAFD6 PLMB753: : %rename(B753) DW SetupB3C1, InstAFDC PLMB757: : %rename(B757) DW SetupB3C1, InstAFE2 PLMB75B: : %rename(B75B) DW SetupRTS, InstB03E PLMB75F: : %rename(B75F) DW SetupRTS, InstB044 PLMB763: : %rename(B763) DW SetupB551, InstDoNotMake PLMB767: : %rename(B767) DW SetupB56F, InstDoNotMake PLMB76B: : %rename(B76B) DW SetupB590, InstDoNotMake PLMB76F: : %rename(B76F) ;Save station DW SetupB5EE, InstAFE8 PLMB773: : %rename(B773) DW SetupB3C1, InstAAE5 PLMB777: : %rename(B777) DW SetupB3C1, InstAB0C ;2377B InstB77B: DW $0001 : DW Draw93EF DW IKill PLMB781: : %rename(B781) DW SetupB3C1, InstB77B InstB785: DW $0001 : DW Draw9407 DW IKill PLMB78B: : %rename(B78B) DW SetupB3C1, InstB785 PLMB78F: : %rename(B78F) DW SetupB3C1, InstAB12 PLMB793: : %rename(B793) DW SetupB3C1, InstAB12_sub ;AB21 PLMB797: : %rename(B797) DW SetupAB27, InstAB67 PLMB79B: : %rename(B79B) DW SetupDelay40, InstAB31 PLMB79F: : %rename(B79F) DW SetupB3C1, InstAB6D_sub ;AB79 PLMB7A3: : %rename(B7A3) DW SetupB3C1, InstAB6D PLMB7A7: : %rename(B7A7) DW SetupB3C1, InstAB7F_sub ;AB8B PLMB7AB: : %rename(B7AB) DW SetupB3C1, InstAB7F PLMB7AF: : %rename(B7AF) DW SetupB3C1, InstAB91_sub ;AB9D PLMB7B3: : %rename(B7B3) DW SetupB3C1, InstAB91 PLMB7B7: : %rename(B7B7) DW SetupB3C1, InstABA3 PLMB7BB: : %rename(B7BB) DW SetupB3C1, InstABDD PLMB7BF: : %rename(B7BF) DW SetupB3C1, InstABA9 } ; Misc. { ;B7C3 Enable sounds in 20 frames, or F0 frames if on Ceres. SetupB7C3: LDA $079F CMP #$0006 BNE + LDA #$0020 BRA ++ + LDA #$00F0 ++ STA $1D77, Y LDA #CodeB7DD STA $1CD7, Y RTS ;237DD Pre-instruction code for something CodeB7DD: DEC $1D77, X BNE + STZ $05F5 STZ $1C37, X + RTS ;237E9 InstB7E9: DW IWait PLMB7EB: : %rename(B7EB) DW SetupB7C3, InstB7E9 ;B7EF Speedbooster check, if speedbooster is collected, set liquid raising speed and wake up PLM. Otherwise delete PLM. CodeB7EF: LDA $09A4 AND #$2000 BNE + LDA #$FFFF STA $197A STZ $197C STZ $1980 STZ $1840 STZ $1C37, X RTS + LDA $197A BMI + LDA #$FF80 STA $197C LDA #$0001 STA $7EDE1C, X INC $1D27, X INC $1D27, X STZ $1D77, X RTS + STZ $1C37, X RTS ;2382A Position check, if Samus is far enough left start FX1 motion and wake up PLM CodeB82A: LDA #$0AE0 CMP $0AF6 BCC + LDA #$0001 STA $1980 STA $7EDE1C, X INC $1D27, X INC $1D27, X STZ $1D77, X + RTS ;23846 If Samus is left of Arg1 and the liquid is above Arg2, set speed to Arg3 and move to next entry. Set event when done (Arg1 = negative) CodeB846: LDA $1D77, X TAY LDA.w .table1, Y BMI +++ CMP $0AF6 BCC ++ LDA.w .table1+2, Y CMP $1978 BCS + STA $1978 + LDA.w .table1+4, Y STA $197C TYA CLC ADC #$0006 STA $1D77, X ++ RTS +++ LDA #$0015 JSL $8081FA ; $1FA IN ROM RTS .table1 DW $072B : DW $01BF : DW $FF50 DW $050A : DW $0167 : DW $FF20 DW $0244 : DW $0100 : DW $FF20 DW $8000 InstB88A: DW ISetPreInstructionCode : DW CodeB7EF DW IWait DW ISetPreInstructionCode : DW CodeB82A DW IWait DW ISetPreInstructionCode : DW CodeB846 DW IWait ;uh.. better not wake up after this line! ;B89C Check: If event set, delete PLM. SetupB89C: LDA #$0015 JSL $808233 ; $233 IN ROM BCC + LDA #$0000 STA $1C37, Y + RTS ;238AC PLMB8AC: : %rename(B8AC) ;Speedbooster escape DW SetupB89C, InstB88A ;If Samus is right of a point, set Shaktool event and delete self. Also maybe set scrolling. CodeB8B0: LDA $0592 BEQ + LDA #$0101 STA $7ECD20 LDA #$0101 STA $7ECD22 + LDA #$0348 CMP $0AF6 BCS + LDA #$000D JSL $8081FA ; $1FA IN ROM STZ $1C37, X + RTS ;238D6 InstB8D6: DW ISetPreInstructionCode : DW CodeB8B0 DW IWait ;B8DC: SetupB8DC: LDA #$0001 STA $7ECD20 LDA #$0000 STA $7ECD22 RTS PLMB8EB: : %rename(B8EB) ;Shaktool event DW SetupB8DC, InstB8D6 SetupB8EF: RTS InstB8F0: DW $0010 : DW Draw9367 DW IPlaySound2 : DB $15 DW IKill PLMB8F9: : %rename(B8F9) DW SetupB8EF, InstB8F0 ;238FD If Samus is below and right of a point, wake up PLM (also sorta CLC). SubB8FD: LDA $12 CMP $0AF6 BCS + LDA $14 CMP $0AFA BCS + INC $1D27, X INC $1D27, X LDA #$0001 STA $7EDE1C, X + RTS ;23919 InstB919: DW ISetPreInstructionCode : DW CodeB927 DW IWait DW IStopPreInstructionCode DW $0001 : DW Draw9283 DW IKill CodeB927: ;Spawn object if Samus below and right of spot LDA #$00F0 STA $12 LDA #$0820 STA $14 JSR SubB8FD ; $238FD IN ROM BCS + PHY LDY #$B4B1 JSL $868097 ; $30097 IN ROM PLY + RTS ;23940 InstB940: DW ISetPreInstructionCode : DW CodeB948 DW IWait DW IKill CodeB948: ;Set liquid stuff if Samus below and right of spot LDA #$00F0 STA $12 LDA #$0540 STA $14 JSR SubB8FD ; $238FD IN ROM BCS + LDA #$FF98 STA $197C LDA #$0010 STA $1980 + RTS ;23964 PLMB964: : %rename(B964) ;Old Tourian Escape Shaft Escape DW SetupB3C1, InstB919 PLMB968: : %rename(B968) ;Escape Room before Old Escape Shaft DW SetupB3C1, InstB940 SetupB96C: STZ $26 LDA #$FFFF STA $28 RTS ;23974 PLMB974: : %rename(B974) ;Some shot block grapple-reaction DW SetupB96C, InstDoNotMake ;23978 SetupB978: LDX $0DDE LDA $0C18, X BNE + AND #$0F00 ;uhhhhhhh LDA #$0000 STA $1C37, Y RTS + LDX $1C87, Y LDA $7F0002, X AND #$F000 ORA #$009F STA $1E17, Y AND #$8FFF STA $7F0002, X RTS ;239A2 InstB9A2: DW IPlaySound2 : DB $0A DW $0004 : DW Draw925B DW $0004 : DW Draw9265 DW $0004 : DW Draw926F DW $0001 : DW Draw9279 DW ISetEventF DW IKill ISetEventF: ;what it says on the can LDA #$000F JSL $8081FA ; $1FA IN ROM RTS ;239C1 PLMB9C1: : %rename(B9C1) ;Critters escape block reaction DW SetupB978, InstB9A2 SetupB9C5: ;Sets up this block and two below it LDX $1C87, Y LDA #$C04F JSR WriteBlockTypeBTS ; $202B4 IN ROM TXA CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM TXA CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS ;239ED PLMB9ED: : %rename(B9ED) ;Bomb room escape DW SetupB9C5, InstDoNotMake SetupB9F1: ;Make this and the 3 blocks below it solid LDX $1C87, Y LDA $7F0002, X AND #$0FFF ORA #$8000 STA $7F0002, X TXA CLC ADC $07A5 ADC $07A5 TAX LDA $7F0002, X AND #$0FFF ORA #$8000 STA $7F0002, X TXA CLC ADC $07A5 ADC $07A5 TAX LDA $7F0002, X AND #$0FFF ORA #$8000 STA $7F0002, X TXA CLC ADC $07A5 ADC $07A5 TAX LDA $7F0002, X AND #$0FFF ORA #$8000 STA $7F0002, X RTS ;23A48 PLMBA48: : %rename(BA48) DW SetupB9F1, InstDoNotMake InstBA4C: DW $0002 : DW DrawA683 DW IBombCheck : DW InstBA4C DW $0028 : DW DrawA683 DW IPlaySound3 : DB $08 DW $0002 : DW DrawA6FB DW $0002 : DW DrawA6EF DW $0002 : DW DrawA6E3 DW $0001 : DW DrawA6D7 DW IGoTo : DW InstBA7F ;BA6F Instruction BA6F (2) : If Samus does not have bombs, goto argument. IBombCheck: LDA $09A4 BIT #$1000 BEQ + INY INY RTS + LDA $0000, Y TAY RTS ;$23A7F InstBA7F: DW IBranchDoor : DW InstC4CF_sub DW ISetGoTo : DW .sub1 DW IGreyDoorCheck DW $0001 : DW DrawA6D7 .loop1 DW IWait DW IGoTo : DW .loop1 .sub1 DW ISetGoTo : DW .sub2 DW ISetPreInstructionCode : DW CodeBD0F .loop2 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA6D7 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA6D7 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA6D7 DW IGoTo : DW .loop2 .sub2 DW IDoorHit : DB $01 : DW .sub3 .sub3 DW IPlaySound3 : DB $07 DW $0004 : DW DrawA6E3 DW $0004 : DW DrawA6EF DW $0004 : DW DrawA6FB DW $0001 : DW DrawA683 DW IKill SetupBAD1: LDA $1DC8, Y AND #$007C LSR A LDA #$0004 ;disregard that. I sub CLCs. STA $1E17, Y LDA $1DC7, Y AND #$83FF ORA #$8000 STA $1DC7, Y LDX $1C87, Y LDA #$C044 JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS ;23AF4 DoorBAF4: ;5th grey door? Used by bomb torizo DW SetupC794, InstBA7F, InstBA4C WhateverBAFA: ;This is both accessed as Code and as Setup. Just nod and smile... SEP #$20 REP #$20 RTS ;23AFF InstBAFF: DW ISetPreInstructionCode : DW WhateverBAFA DW IWait PLMBB05: : %rename(BB05) ;I think this is a PLM designed to do *absolutely nothing*. DW WhateverBAFA, InstBAFF SetupBB09: LDA #$000F JSL $808233 ; $233 IN ROM BCS + LDA #$0000 STA $1C37, Y + RTS ;23B19 InstBB19: DW $0001 : DW Draw9253 DW IMoveRight4 DW $0001 : DW Draw9253 DW IKill ;BB25 Instruction BB25 (0) : Move PLM right 4 blocks IMoveRight4: LDA $1C87,X CLC ADC #$0008 STA $1C87, X RTS PLMBB30: : %rename(BB30) ;Mainstreet Crateria Escape PLM (clears a few blocks after saving animals) DW SetupBB09, InstBB19 InstBB34: DW $0006 : DW Draw948B DW IKill InstBB3A: DW $0006 : DW Draw947F DW $005E : DW Draw9473 DW IKill InstBB44: DW $0002 : DW Draw9473 DW $0002 : DW Draw947F DW $0002 : DW Draw948B DW IKill CodeBB52: ;Wakeup trigger when shot LDA $1D77,X BEQ .RTS INC $1D27, X INC $1D27, X LDA #$0001 STA $7EDE1C, X LDA #.RTS STA $1CD7, X .RTS RTS ;23B6B CodeBB6B: ;If Samus below PLM or if shot, wake up. JSL GetPLMCoordinate ; $20290 IN ROM LDA $0AF6 LSR A LSR A LSR A LSR A CMP $1C29 BNE + LDA $0AFA LSR A LSR A LSR A LSR A SEC SBC $1C2B CMP #$0005 BCC ++ + LDA $1D77, X BEQ .RTS ++ INC $1D27, X INC $1D27, X LDA #$0001 STA $7EDE1C, X LDA #.RTS STA $1CD7, X .RTS RTS ;23BA4 CodeBBA4: ;If Samus above PLM or if shot, wake up. JSL GetPLMCoordinate ; $20290 IN ROM LDA $0AF6 LSR A LSR A LSR A LSR A CMP $1C29 BNE + LDA $0AFA LSR A LSR A LSR A LSR A SEC SBC $1C2B CMP #$FFFC BCS ++ + LDA $1D77, X BEQ .RTS ++ INC $1D27, X INC $1D27, X LDA #$0001 STA $7EDE1C, X LDA #.RTS STA $1CD7, X .RTS RTS ;23BDD Instruction BBDD (0) : Clear check. IClearCheck: STZ $1D77, X RTS ;23BE1 Instruction BBE1 (2) : Spawn argument as a room object. ISpawnObject: PHX PHY LDA $0000, Y TAY JSL $868097 ; $30097 IN ROM PLY PLX INY INY RTS ;23BF0 Instruction BBF0 (2) : Find the room object that has this PLM's position stored, and wake it up. Crashes if fails. Argument is unused. IWakeObject: PHX PHY LDA $1C87, X LDX #$0022 - CMP $1AFF, X BEQ + DEX DEX BPL - DB $00 ;Super Metroid doesn't keep arguments for BRKs. Yes, this is an authentic BRK, in Super Metroid. + LDA #$0001 STA $1B8F, X INC $1B47, X INC $1B47, X PLY PLX INY INY RTS } ; Instruction lists { ;23C13 InstBC13: DW $0001 : DW DrawA517 DW IClearCheck DW ISetPreInstructionCode : DW CodeBB52 DW IWait DW $0010 : DW DrawA517 DW ISpawnObject : DW $E64B DW IPlaySound3 : DB $0E DW $0010 : DW DrawA525 DW $0010 : DW DrawA533 DW $0010 : DW DrawA541 DW $0018 : DW DrawA54F InstBC3A: DW $0001 : DW DrawA55D DW IClearCheck DW ISetPreInstructionCode : DW CodeBB6B DW IWait DW IWakeObject : DW $E566 DW IPlaySound3 : DB $0E DW $0010 : DW DrawA54F DW $0010 : DW DrawA541 DW $0010 : DW DrawA533 DW $0018 : DW DrawA525 DW IGoTo : DW InstBC13 InstBC61: DW $0008 : DW DrawA56B DW IClearCheck DW ISetPreInstructionCode : DW CodeBB52 DW IWait DW $0010 : DW DrawA56B DW ISpawnObject : DW $E667 DW IPlaySound3 : DB $0E DW $0010 : DW DrawA57D DW $0010 : DW DrawA58F DW $0010 : DW DrawA5A1 DW $0010 : DW DrawA5B3 InstBC88: DW $0008 : DW DrawA5C5 DW IClearCheck DW ISetPreInstructionCode : DW CodeBBA4 DW IWait DW IWakeObject : DW $E5B0 DW IPlaySound3 : DB $0E DW $0010 : DW DrawA5B3 DW $0010 : DW DrawA5A1 DW $0010 : DW DrawA58F DW $0010 : DW DrawA57D DW IGoTo : DW InstBC61 InstBCAF: DW $0001 : DW DrawA5D7 DW IKill InstBCB5: DW $0001 : DW DrawA5E3 DW IKill InstBCBB: DW $0001 : DW DrawA5EB DW IKill InstBCC1: DW $0001 : DW DrawA5F7 DW IKill InstBCC7: DW $0001 : DW DrawA5FF DW IKill InstBCCD: DW $0001 : DW DrawA60B DW IKill InstBCD3: DW $0001 : DW DrawA613 DW IKill InstBCD9: DW $0001 : DW DrawA61F DW IKill InstBCDF: DW $0001 : DW DrawA627 DW IKill InstBCE5: DW $0001 : DW DrawA633 DW IKill InstBCEB: DW $0001 : DW DrawA63B DW IKill InstBCF1: DW $0001 : DW DrawA647 DW IKill InstBCF7: DW $0001 : DW DrawA64F DW IKill InstBCFD: DW $0001 : DW DrawA65B DW IKill InstBD03: DW $0001 : DW DrawA663 DW IKill InstBD09: DW $0001 : DW DrawA66F DW IKill } ; Pre-instructions { CodeBD0F: ;GoTo stored pointer and wake up when shot(?). LDA $1D77, X BEQ + STZ $1D77, X LDA $7EDEBC, X STA $1D27, X LDA #$0001 STA $7EDE1C, X + RTS ;23D26 CodeBD26: ;GoTo stored pointer and wake up when shot with power bomb LDA $1D77, X BEQ ++ AND #$0F00 CMP #$0300 BNE + STZ $1D77, X LDA $7EDEBC, X STA $1D27, X LDA #$0001 STA $7EDE1C, X RTS + LDA #$0057 JSL $8090CB ; $10CB IN ROM ++ STZ $1D77, X RTS ;23D50 CodeBD50: ;GoTo stored pointer and wake up when shot with missile or super LDA $1D77, X BEQ ++ AND #$0F00 CMP #$0200 BEQ +++ CMP #$0100 BNE + - STZ $1D77, X LDA $7EDEBC, X STA $1D27, X LDA #$0001 STA $7EDE1C, X RTS + LDA #$0057 JSL $8090CB ; $10CB IN ROM ++ STZ $1D77, X RTS +++ LDA #$0077 STA $7EDF0C, X BRA - ;23D88 CodeBD88: ;GoTo stored pointer and wake up when shot with super missile LDA $1D77, X BEQ ++ AND #$0F00 CMP #$0200 BNE + STZ $1D77, X LDA $7EDEBC, X STA $1D27, X LDA #$0001 STA $7EDE1C, X RTS + LDA #$0057 JSL $8090CB ; $10CB IN ROM ++ STZ $1D77, X RTS ;23DB2 SubBDB2: ;GoTo stored pointer and clear check. STZ $1D77, X LDA $7EDEBC, X STA $1D27, X LDA #$0001 STA $7EDE1C, X RTS ;23DC4 SubBDC4: ;Play sound when shot. LDA $1D77, X BEQ + LDA #$0057 JSL $8090CB ; $10CB IN ROM + STZ $1D77, X RTS ;23DD4 CodeBDD4: ;Grey door: Open when boss 1 is dead (main area boss) LDA #$0001 JSL $8081DC ; $1DC IN ROM BCC + JMP SubBDB2 ; $23DB2 IN ROM + JMP SubBDC4 ; $23DC4 IN ROM ;23DE3 CodeBDE3: ;Grey door: Open when boss 2 is dead (secondary area boss) LDA #$0002 JSL $8081DC ; $1DC IN ROM BCC + JMP SubBDB2 ; $23DB2 IN ROM + JMP SubBDC4 ; $23DC4 IN ROM ;23DF2 CodeBDF2: ;Grey door: Open when boss 3 is dead (Chozo/MB) LDA #$0004 JSL $8081DC ; $1DC IN ROM BCC + JMP SubBDB2 ; $23DB2 IN ROM + JMP SubBDC4 ; $23DC4 IN ROM ;23E01 CodeBE01: ;Grey door: Open when enemy kill quota met PHY PHX LDA $0E50 CMP $0E52 BCC + LDA #$0000 JSL $8081FA ; $1FA IN ROM PLX PLY JMP SubBDB2 ; $23DB2 IN ROM + PLX PLY JMP SubBDC4 ; $23DC4 IN ROM ;23E1C CodeBE1C: ;Grey door: Don't open JMP SubBDC4 ; $23DC4 IN ROM. HINT: Just go to BDC4 to begin with. ;23E1F CodeBE1F: ;Grey door: 1E6D? Related to statues somehow? In a mess of stuff in bank 88. PHY PHX LDA $1E6D BPL + PLX PLY JMP SubBDB2 ; $23DB2 IN ROM + PLX PLY JMP SubBDC4 ; $23DC4 IN ROM ;23E30 CodeBE30: ;Grey door: Open when critters freed (not fried) LDA #$000F JSL $808233 ; $233 IN ROM BCC + JMP SubBDB2 ; $23DB2 IN ROM + JMP SubBDC4 ; $23DC4 IN ROM ;23E3F Instruction BE3F (0) : Use 1E17 to decide what triggers opening the door. IGreyDoorCheck: PHY LDY $1E17, X LDA.w .table, Y STA $1CD7, X ;oh hold on, this is grey doors, isn't it. PLY RTS .table DW CodeBDD4, CodeBDE3, CodeBDF2, CodeBE01, CodeBE1C, CodeBE1F, CodeBE30 } ; Instruction lists { InstBE59: DW $0002 : DW DrawA677 DW $0002 : DW DrawA6CB DW IPlaySound3 : DB $08 DW $0002 : DW DrawA6BF DW $0002 : DW DrawA6B3 DW $0001 : DW DrawA6A7 InstBE70: DW IBranchDoor : DW InstC49E_sub DW ISetGoTo : DW .sub1 DW IGreyDoorCheck DW $0001 : DW DrawA6A7 .loop1 DW IWait DW IGoTo : DW .loop1 .sub1 DW ISetGoTo : DW .sub2 DW ISetPreInstructionCode : DW CodeBD0F .loop2 DW $0003 : DW DrawA9B3 DW $0004 : DW DrawA6A7 DW $0003 : DW DrawA9B3 DW $0004 : DW DrawA6A7 DW $0003 : DW DrawA9B3 DW $0004 : DW DrawA6A7 DW IGoTo : DW .loop2 .sub2 DW IDoorHit : DB $01 : DW .sub3 .sub3 DW IPlaySound3 : DB $07 DW $0004 : DW DrawA6B3 DW $0004 : DW DrawA6BF DW $0004 : DW DrawA6CB DW $0001 : DW DrawA677 DW IKill InstBEC2: DW $0002 : DW DrawA683 DW $0002 : DW DrawA6FB DW IPlaySound3 : DB $08 DW $0002 : DW DrawA6EF DW $0002 : DW DrawA6E3 DW $0001 : DW DrawA6D7 InstBED9: DW IBranchDoor : DW InstC4CF_sub DW ISetGoTo : DW .sub1 DW IGreyDoorCheck DW $0001 : DW DrawA6D7 .loop1 DW IWait DW IGoTo : DW .loop1 .sub1 DW ISetGoTo : DW .sub2 DW ISetPreInstructionCode : DW CodeBD0F .loop2 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA6D7 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA6D7 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA6D7 DW IGoTo : DW .loop2 .sub2 DW IDoorHit : DB $01 : DW .sub3 .sub3 DW IPlaySound3 : DB $07 DW $0004 : DW DrawA6E3 DW $0004 : DW DrawA6EF DW $0004 : DW DrawA6FB DW $0001 : DW DrawA683 DW IKill InstBF2B: DW $0002 : DW DrawA68F DW $0002 : DW DrawA72B DW IPlaySound3 : DB $08 DW $0002 : DW DrawA71F DW $0002 : DW DrawA713 DW $0001 : DW DrawA707 InstBF42: DW IBranchDoor : DW InstC500_sub DW ISetGoTo : DW .sub1 DW IGreyDoorCheck DW $0001 : DW DrawA707 .loop1 DW IWait DW IGoTo : DW .loop1 .sub1 DW ISetGoTo : DW .sub2 DW ISetPreInstructionCode : DW CodeBD0F .loop2 DW $0003 : DW DrawAA2B DW $0004 : DW DrawA707 DW $0003 : DW DrawAA2B DW $0004 : DW DrawA707 DW $0003 : DW DrawAA2B DW $0004 : DW DrawA707 DW IGoTo : DW .loop2 .sub2 DW IDoorHit : DB $01 : DW .sub3 .sub3 DW IPlaySound3 : DB $07 DW $0004 : DW DrawA713 DW $0004 : DW DrawA71F DW $0004 : DW DrawA72B DW $0001 : DW DrawA68F DW IKill InstBF94: DW $0002 : DW DrawA69B DW $0002 : DW DrawA75B DW IPlaySound3 : DB $08 DW $0002 : DW DrawA74F DW $0002 : DW DrawA743 DW $0001 : DW DrawA737 InstBFAB: DW IBranchDoor : DW InstC531_sub DW ISetGoTo : DW .sub1 DW IGreyDoorCheck DW $0001 : DW DrawA737 .loop1 DW IWait DW IGoTo : DW .loop1 .sub1 DW ISetGoTo : DW .sub2 DW ISetPreInstructionCode : DW CodeBD0F .loop2 DW $0003 : DW DrawAA67 DW $0004 : DW DrawA737 DW $0003 : DW DrawAA67 DW $0004 : DW DrawA737 DW $0003 : DW DrawAA67 DW $0004 : DW DrawA737 DW IGoTo : DW .loop2 .sub2 DW IDoorHit : DB $01 : DW .sub3 .sub3 DW IPlaySound3 : DB $07 DW $0004 : DW DrawA743 DW $0004 : DW DrawA74F DW $0004 : DW DrawA75B DW $0001 : DW DrawA69B DW IKill InstBFFD: DW $0002 : DW DrawA677 DW $0002 : DW DrawA78B DW IPlaySound3 : DB $08 DW $0002 : DW DrawA77F DW $0002 : DW DrawA773 DW $0001 : DW DrawA767 InstC014: DW IBranchDoor : DW InstC49E_sub DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD26 DW $0001 : DW DrawA767 .loop1 DW IWait DW IGoTo : DW .loop1 .sub1 DW IDoorHit : DB $01 : DW .sub2 DW $0003 : DW DrawA9B3 DW $0004 : DW DrawA767 DW $0003 : DW DrawA9B3 DW $0004 : DW DrawA767 DW $0003 : DW DrawA9B3 DW $0004 : DW DrawA767 DW IGoTo : DW .loop1 .sub2 DW IPlaySound3 : DB $07 DW $0004 : DW DrawA773 DW $0004 : DW DrawA77F DW $0004 : DW DrawA78B DW $005C : DW DrawA677 DW IKill InstC060: DW $0002 : DW DrawA683 DW $0002 : DW DrawA7BB DW IPlaySound3 : DB $08 DW $0002 : DW DrawA7AF DW $0002 : DW DrawA7A3 DW $0001 : DW DrawA797 InstC077: DW IBranchDoor : DW InstC4CF_sub DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD26 DW $0001 : DW DrawA797 .loop1 DW IWait DW IGoTo : DW .loop1 .sub1 DW IDoorHit : DB $01 : DW .sub2 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA797 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA797 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA797 DW IGoTo : DW .loop1 .sub2 DW IPlaySound3 : DB $07 DW $0006 : DW DrawA7A3 DW $0006 : DW DrawA7AF DW $0006 : DW DrawA7BB DW $0001 : DW DrawA683 DW IKill InstC0C3: DW $0002 : DW DrawA68F DW $0002 : DW DrawA7EB DW IPlaySound3 : DB $08 DW $0002 : DW DrawA7DF DW $0002 : DW DrawA7D3 DW $0001 : DW DrawA7C7 InstC0DA: DW IBranchDoor : DW InstC500_sub DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD26 DW $0001 : DW DrawA7C7 .loop1 DW IWait .sub1 DW IDoorHit : DB $01 : DW .sub2 DW $0003 : DW DrawAA2B DW $0004 : DW DrawA7C7 DW $0003 : DW DrawAA2B DW $0004 : DW DrawA7C7 DW $0003 : DW DrawAA2B DW $0004 : DW DrawA7C7 DW IGoTo : DW .loop1 .sub2 DW IPlaySound3 : DB $07 DW $0006 : DW DrawA7D3 DW $0006 : DW DrawA7DF DW $0006 : DW DrawA7EB DW $0001 : DW DrawA68F DW IKill InstC122: DW $0002 : DW DrawA69B DW $0002 : DW DrawA81B DW IPlaySound3 : DB $08 DW $0002 : DW DrawA80F DW $0002 : DW DrawA803 DW $0001 : DW DrawA7F7 InstC139: DW IBranchDoor : DW InstC531_sub DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD26 DW $0002 : DW DrawA7F7 DW $0001 : DW DrawA7F7 .loop1 DW IWait .sub1 DW IDoorHit : DB $01 : DW .sub2 DW $0003 : DW DrawAA67 DW $0004 : DW DrawA7F7 DW $0003 : DW DrawAA67 DW $0004 : DW DrawA7F7 DW $0003 : DW DrawAA67 DW $0004 : DW DrawA7F7 DW IGoTo : DW .loop1 .sub2 DW IPlaySound3 : DB $07 DW $0006 : DW DrawA803 DW $0006 : DW DrawA80F DW $0006 : DW DrawA81B DW $0001 : DW DrawA69B DW IKill InstC185: DW $0002 : DW DrawA677 DW $0002 : DW DrawA84B DW IPlaySound3 : DB $08 DW $0002 : DW DrawA83F DW $0002 : DW DrawA833 DW $0001 : DW DrawA827 InstC19C: DW IBranchDoor : DW InstC49E_sub DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD88 DW $0001 : DW DrawA827 .loop1 DW IWait .sub1 DW IDoorHit : DB $01 : DW .sub2 DW $0003 : DW DrawA9B3 DW $0004 : DW DrawA827 DW $0003 : DW DrawA9B3 DW $0004 : DW DrawA827 DW $0003 : DW DrawA9B3 DW $0004 : DW DrawA827 DW IGoTo : DW .loop1 .sub2 DW IPlaySound3 : DB $07 DW $0006 : DW DrawA833 DW $0006 : DW DrawA83F DW $0006 : DW DrawA84B DW $0001 : DW DrawA677 DW IKill InstC1E4: DW $0002 : DW DrawA683 DW $0002 : DW DrawA87B DW IPlaySound3 : DB $08 DW $0002 : DW DrawA86F DW $0002 : DW DrawA863 DW $0001 : DW DrawA857 InstC1FB: DW IBranchDoor : DW InstC4CF_sub DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD88 DW $0001 : DW DrawA857 .loop1 DW IWait .sub1 DW IDoorHit : DB $01 : DW .sub2 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA857 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA857 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA857 DW IGoTo : DW .loop1 .sub2 DW IPlaySound3 : DB $07 DW $0006 : DW DrawA863 DW $0006 : DW DrawA86F DW $0006 : DW DrawA87B DW $0001 : DW DrawA683 DW IKill InstC243: DW $0002 : DW DrawA68F DW $0002 : DW DrawA8AB DW IPlaySound3 : DB $08 DW $0002 : DW DrawA89F DW $0002 : DW DrawA893 DW $0001 : DW DrawA887 InstC25A: DW IBranchDoor : DW InstC500_sub DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD88 DW $0001 : DW DrawA887 .loop1 DW IWait .sub1 DW IDoorHit : DB $01 : DW .sub2 DW $0003 : DW DrawAA2B DW $0004 : DW DrawA887 DW $0003 : DW DrawAA2B DW $0004 : DW DrawA887 DW $0003 : DW DrawAA2B DW $0004 : DW DrawA887 DW IGoTo : DW .loop1 .sub2 DW IPlaySound3 : DB $07 DW $0006 : DW DrawA893 DW $0006 : DW DrawA89F DW $0006 : DW DrawA8AB DW $0001 : DW DrawA68F DW IKill InstC2A2: DW $0002 : DW DrawA69B DW $0002 : DW DrawA8DB DW IPlaySound3 : DB $08 DW $0002 : DW DrawA8CF DW $0002 : DW DrawA8C3 DW $0001 : DW DrawA8B7 InstC2B9: DW IBranchDoor : DW InstC531_sub DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD88 DW $0001 : DW DrawA8B7 .loop1 DW IWait .sub1 DW IDoorHit : DB $01 : DW .sub2 DW $0003 : DW DrawAA67 DW $0004 : DW DrawA8B7 DW $0003 : DW DrawAA67 DW $0004 : DW DrawA8B7 DW $0003 : DW DrawAA67 DW $0004 : DW DrawA8B7 DW IGoTo : DW .loop1 .sub2 DW IPlaySound3 : DB $07 DW $0006 : DW DrawA8C3 DW $0006 : DW DrawA8CF DW $0006 : DW DrawA8DB DW $0001 : DW DrawA69B DW IKill InstC301: DW $0002 : DW DrawA677 DW $0002 : DW DrawA90B DW IPlaySound3 : DB $08 DW $0002 : DW DrawA8FF DW $0002 : DW DrawA8F3 DW $0001 : DW DrawA8E7 InstC318: DW IBranchDoor : DW InstC49E_sub DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD50 DW $0001 : DW DrawA8E7 .loop1 DW IWait .sub1 DW IDoorHit : DB $05 : DW .sub2 DW IPlaySound3 : DB $09 DW $0003 : DW DrawA9B3 DW $0004 : DW DrawA8E7 DW $0003 : DW DrawA9B3 DW $0004 : DW DrawA8E7 DW $0003 : DW DrawA9B3 DW $0004 : DW DrawA8E7 DW IGoTo : DW .loop1 .sub2 DW IPlaySound3 : DB $07 DW $0006 : DW DrawA8F3 DW $0006 : DW DrawA8FF DW $0006 : DW DrawA90B DW $0001 : DW DrawA677 DW IKill InstC363: DW $0002 : DW DrawA683 DW $0002 : DW DrawA93B DW IPlaySound3 : DB $08 DW $0002 : DW DrawA92F DW $0002 : DW DrawA923 DW $0001 : DW DrawA917 InstC37A: DW IBranchDoor : DW InstC4CF_sub DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD50 DW $0001 : DW DrawA917 .loop1 DW IWait .sub1 DW IDoorHit : DB $05 : DW .sub2 DW IPlaySound3 : DB $09 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA917 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA917 DW $0003 : DW DrawA9EF DW $0004 : DW DrawA917 DW IGoTo : DW .loop1 .sub2 DW IPlaySound3 : DB $07 DW $0006 : DW DrawA923 DW $0006 : DW DrawA92F DW $0006 : DW DrawA93B DW $0001 : DW DrawA683 DW IKill InstC3C5: DW $0002 : DW DrawA68F DW $0002 : DW DrawA96B DW IPlaySound3 : DB $08 DW $0002 : DW DrawA95F DW $0002 : DW DrawA953 DW $0001 : DW DrawA947 InstC3DC: DW IBranchDoor : DW InstC500_sub DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD50 DW $0001 : DW DrawA947 .loop1 DW IWait .sub1 DW IDoorHit : DB $05 : DW .sub2 DW IPlaySound3 : DB $09 DW $0003 : DW DrawAA2B DW $0004 : DW DrawA947 DW $0003 : DW DrawAA2B DW $0004 : DW DrawA947 DW $0003 : DW DrawAA2B DW $0004 : DW DrawA947 DW IGoTo : DW .loop1 .sub2 DW IPlaySound3 : DB $07 DW $0006 : DW DrawA953 DW $0006 : DW DrawA95F DW $0006 : DW DrawA96B DW $0001 : DW DrawA68F DW IKill InstC427: DW $0002 : DW DrawA69B DW $0002 : DW DrawA99B DW IPlaySound3 : DB $08 DW $0002 : DW DrawA98F DW $0002 : DW DrawA983 DW $0001 : DW DrawA977 InstC43E: DW IBranchDoor : DW InstC531_sub DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD50 DW $0001 : DW DrawA977 .loop1 DW IWait .sub1 DW IDoorHit : DB $05 : DW .sub2 DW IPlaySound3 : DB $09 DW $0003 : DW DrawAA67 DW $0004 : DW DrawA977 DW $0003 : DW DrawAA67 DW $0004 : DW DrawA977 DW $0003 : DW DrawAA67 DW $0004 : DW DrawA977 DW IGoTo : DW .loop1 .sub2 DW IPlaySound3 : DB $07 DW $0006 : DW DrawA983 DW $0006 : DW DrawA98F DW $0006 : DW DrawA99B DW $0001 : DW DrawA69B DW IKill InstC489: DW IPlaySound3 : DB $07 DW $0006 : DW DrawA9BF DW $0006 : DW DrawA9CB DW $0006 : DW DrawA9D7 DW $005E : DW DrawA677 DW IKill InstC49E: DW $0002 : DW DrawA677 DW $0002 : DW DrawA9D7 DW IPlaySound3 : DB $08 DW $0002 : DW DrawA9CB DW $0002 : DW DrawA9BF .sub ;C4B1 DW ISetBTS : DB $40 DW $0001 : DW DrawA9B3 DW IKill InstC4BA: DW IPlaySound3 : DB $07 DW $0006 : DW DrawA9FB DW $0006 : DW DrawAA07 DW $0006 : DW DrawAA13 DW $005E : DW DrawA683 DW IKill InstC4CF: DW $0002 : DW DrawA683 DW $0002 : DW DrawAA13 DW IPlaySound3 : DB $08 DW $0002 : DW DrawAA07 DW $0002 : DW DrawA9FB .sub DW ISetBTS : DB $41 DW $0001 : DW DrawA9EF DW IKill InstC4EB: DW IPlaySound3 : DB $07 DW $0006 : DW DrawAA37 DW $0006 : DW DrawAA43 DW $0006 : DW DrawAA4F DW $005E : DW DrawA68F DW IKill InstC500: DW $0002 : DW DrawA68F DW $0002 : DW DrawAA4F DW IPlaySound3 : DB $08 DW $0002 : DW DrawAA43 DW $0002 : DW DrawAA37 .sub DW ISetBTS : DB $42 DW $0001 : DW DrawAA2B DW IKill InstC51C: DW IPlaySound3 : DB $07 DW $0006 : DW DrawAA73 DW $0006 : DW DrawAA7F DW $0006 : DW DrawAA8B DW $005E : DW DrawA69B DW IKill InstC531: DW $0002 : DW DrawA69B DW $0002 : DW DrawAA8B DW IPlaySound3 : DB $08 DW $0002 : DW DrawAA7F DW $0002 : DW DrawAA73 .sub DW ISetBTS : DB $43 DW $0001 : DW DrawAA67 DW IKill } ; Setups { SetupC54D: ;If projectile not a super, delete self, else goto LDX $0DDE LDA $0C18, X AND #$0FFF CMP #$0200 BNE + JMP SetupC63F ; $2463F IN ROM + LDA #$0057 JSL $8090CB ; $10CB IN ROM LDA #$0000 STA $1C37, Y RTS SetupC56C: ;If projectile not a super, delete self, else goto LDX $0DDE LDA $0C18, X AND #$0FFF CMP #$0200 BNE + JMP SetupC647 ; $24647 IN ROM + LDA #$0057 JSL $8090CB ; $10CB IN ROM LDA #$0000 STA $1C37, Y RTS SetupC58B: ;If projectile not a missile or super, delete self, else goto LDX $0DDE LDA $0C18, X AND #$0FFF CMP #$0100 BEQ + CMP #$0200 BNE ++ + JMP SetupC63F ; $2463F IN ROM ++ LDA #$0057 JSL $8090CB ; $10CB IN ROM LDA #$0000 STA $1C37, Y RTS SetupC5AF: ;If projectile not a missile or super, delete self, else goto LDX $0DDE LDA $0C18, X AND #$0FFF CMP #$0100 BEQ + CMP #$0200 BNE ++ + JMP SetupC647 ; $24647 IN ROM ++ LDA #$0057 JSL $8090CB ; $10CB IN ROM LDA #$0000 STA $1C37, Y RTS SetupC5D3: ;If projectile not a power bomb, delete self, else goto LDX $0DDE LDA $0C18, X AND #$0FFF CMP #$0300 BNE + JMP SetupC63F ; $2463F IN ROM + LDA #$0057 JSL $8090CB ; $10CB IN ROM LDA #$0000 STA $1C37, Y ;I think there's a missing RTS after here... SetupC5F1: LDX $0DDE LDA $0C18, X AND #$0FFF CMP #$0300 BNE + JMP SetupC647 ; $24647 IN ROM + LDA #$0057 JSL $8090CB ; $10CB IN ROM LDA #$0000 STA $1C37, Y RTS SetupC610: ;If projectile not a power bomb, delete self, else goto. Same as C5D3, but without sound. LDX $0DDE LDA $0C18, X AND #$0FFF CMP #$0300 BEQ + JMP SetupC63F ; $2463F IN ROM + LDA #$0000 STA $1C37, Y ;Again, missing RTS SetupC627: LDX $0DDE LDA $0C18, X AND #$0FFF CMP #$0300 BEQ + JMP SetupC647 + LDA #$0000 STA $1C37, Y RTS SetupC63F: ;Position + 2 for C64C LDA $1C87, Y INC A INC A JMP SubC64C ; $2464C IN ROM SetupC647: ;Position - 2 for C64C LDA $1C87, Y DEC A DEC A SubC64C: ;Find PLM at spot in A and wake it up (through its pre-instruction code, probably) LDX #$004E - CMP $1C87, X BEQ + DEX DEX BPL - BRA ++ + LDA $1D77, X BNE ++ INC $1D77, X ++ LDA #$0000 STA $1C37, Y SEC RTS SetupC66A: ;Set 5 blocks BTS to 10 LDA $1C87, Y LSR A TAX JSR SubC67F ; $2467F IN ROM JSR SubC67F ; $2467F IN ROM JSR SubC67F ; $2467F IN ROM JSR SubC67F ; $2467F IN ROM JSR SubC67F ; $2467F IN ROM RTS SubC67F: ;Set BTS to 10, go down a row LDA $7F6402, X AND #$FF00 ORA #$0010 STA $7F6402, X TXA CLC ADC $07A5 TAX RTS SetupC694: ;Set 5 blocks BTS to 10 LDA $1C87, Y LSR A TAX JSR SubC6A9 ; $246A9 IN ROM JSR SubC6A9 ; $246A9 IN ROM JSR SubC6A9 ; $246A9 IN ROM JSR SubC6A9 ; $246A9 IN ROM JSR SubC6A9 ; $246A9 IN ROM RTS SubC6A9: ;Set BTS to 10, go up a row LDA $7F6402, X AND #$FF00 ORA #$0010 STA $7F6402, X TXA SEC SBC $07A5 TAX RTS SetupC6BE: ;Spawn an object, goto PHY LDY #$E659 JSL $868097 ; $30097 IN ROM PLY JSR SetupC66A ; $2466A IN ROM RTS SetupC6CB: ;Spawn an object, goto PHY LDY #$E675 JSL $868097 ; $30097 IN ROM PLY JSR SetupC694 ; $24694 IN ROM RTS SetupC6D8: ;we are productive!!!1 JSR SetupC66A ; $2466A IN ROM RTS SetupC6DC: JSR SetupC694 ; $24694 IN ROM RTS SetupC6E0: ;Get initial instruction for this PLM, and block type / BTS for shotblock LDX $1DC7, Y LDA.w .table1, X STA $1D27, Y LDX $1DC7, Y LDA.w .table2, X BEQ + LDX $1C87, Y DEX DEX JSR WriteBlockTypeBTS ; $202B4 IN ROM + LDX $1DC7, Y LDA.w .table3, X BEQ + LDX $1C87, Y INX INX JSR WriteBlockTypeBTS ; $202B4 IN ROM + RTS .table1 DW InstBCAF, InstBCB5, InstBCBB, InstBCC1, InstBCC7, InstBCCD, InstBCD3, InstBCD9 .table2 DW $C046, $0000, $C048, $0000, $C04A, $0000, $C04C, $0000 .table3 DW $0000, $C047, $0000, $C049, $0000, $C04B, $0000, $C04D SetupC73A: ;Get initial instruction for this PLM, and block type / BTS for shotblock LDX $1DC7, Y LDA.w .table1, X STA $1D27, Y LDX $1DC7, Y LDA.w .table2, X BEQ + LDX $1C87, Y DEX DEX JSR WriteBlockTypeBTS ; $202B4 IN ROM + LDX $1DC7, Y LDA.w .table3, X BEQ + LDX $1C87, Y INX INX JSR WriteBlockTypeBTS ; $202B4 IN ROM + RTS .table1 DW InstBCDF, InstBCE5, InstBCEB, InstBCF1, InstBCF7, InstBCFD, InstBD03, InstBD09 .table2 DW $C046, $0000, $C048, $0000, $C04A, $0000, $C04C, $0000 .table3 DW $0000, $C047, $0000, $C049, $0000, $C04B, $0000, $C04D SetupC794: LDA $1DC8, Y AND #$007C LSR A STA $1E17, Y LDA $1DC7, Y AND #$83FF STA $1DC7, Y LDX $1C87, Y LDA #$C044 JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS SetupC7B1: LDX $1C87, Y LDA #$C044 JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS SetupC7BB: ;If projectile was not a powerbomb, change to solid LDX $0DDE LDA $0C18, X AND #$0F00 CMP #$0300 BNE + LDA #$0000 STA $1C37, Y RTS + LDX $1C87, Y LDA $7F0002, X AND #$0FFF ORA #$8000 STA $7F0002, X RTS SetupC7E2: ;Find the PLM on the same spot and tell it what hit it. TYX LDA $1C87, X STZ $1C87, X LDX #$004E - CMP $1C87, X BEQ + DEX DEX BPL - RTS + LDY $0DDE LDA $0C18, Y AND #$1FFF ORA #$8000 STA $1D77, X RTS } ; PLM entries { PLMC806: : %rename(C806) ;Left green gate trigger DW SetupC54D, InstDoNotMake PLMC80A: : %rename(C80A) ;Right green gate trigger DW SetupC56C, InstDoNotMake PLMC80E: : %rename(C80E) ;Left red gate trigger DW SetupC58B, InstDoNotMake PLMC812: : %rename(C812) ;Right red gate trigger DW SetupC5AF, InstDoNotMake PLMC816: : %rename(C816) ;Left blue gate trigger DW SetupC610, InstDoNotMake PLMC81A: : %rename(C81A) ;Right blue gate trigger DW SetupC627, InstDoNotMake PLMC81E: : %rename(C81E) ;Left orange gate trigger DW SetupC5D3, InstDoNotMake PLMC822: : %rename(C822) ;Right orange gate trigger DW SetupC5F1, InstDoNotMake PLMC826: : %rename(C826) ;Normal open gate DW SetupC6D8, InstBC13 PLMC82A: : %rename(C82A) ;Normal closed gate DW SetupC6BE, InstBC3A PLMC82E: : %rename(C82E) ;Upwards open gate DW SetupC6DC, InstBC61 PLMC832: : %rename(C832) ;Upwards closed gate DW SetupC6CB, InstBC88 PLMC836: : %rename(C836) ;Gate Shotblock DW SetupC6E0, InstBCAF PLMC83A: : %rename(C83A) DW SetupC73A, InstBCDF PLMC83E: : %rename(C83E) ;Generic shot trigger for a PLM DW SetupC7E2, InstDoNotMake DoorC842: : %rename(C842) ;Grey facing left DW SetupC794, InstBE70, InstBE59 DoorC848: : %rename(C848) ;Grey facing right DW SetupC794, InstBED9, InstBEC2 DoorC84E: : %rename(C84E) ;Grey facing up DW SetupC794, InstBF42, InstBF2B DoorC854: : %rename(C854) ;Grey facing down DW SetupC794, InstBFAB, InstBF94 DoorC85A: : %rename(C85A) ;Orange facing left DW SetupC7B1, InstC014, InstBFFD DoorC860: : %rename(C860) ;Orange facing right DW SetupC7B1, InstC077, InstC060 DoorC866: : %rename(C866) ;Orange facing up DW SetupC7B1, InstC0DA, InstC0C3 DoorC86C: : %rename(C86C) ;Orange facing down DW SetupC7B1, InstC139, InstC122 DoorC872: : %rename(C872) ;Green facing left DW SetupC7B1, InstC19C, InstC185 DoorC878: : %rename(C878) ;Green facing right DW SetupC7B1, InstC1FB, InstC1E4 DoorC87E: : %rename(C87E) ;Green facing up DW SetupC7B1, InstC25A, InstC243 DoorC884: : %rename(C884) ;Green facing down DW SetupC7B1, InstC2B9, InstC2A2 DoorC88A: : %rename(C88A) ;Red facing left DW SetupC7B1, InstC318, InstC301 DoorC890: : %rename(C890) ;Red facing right DW SetupC7B1, InstC37A, InstC363 DoorC896: : %rename(C896) ;Red facing up DW SetupC7B1, InstC3DC, InstC3C5 DoorC89C: : %rename(C89C) ;Red facing down DW SetupC7B1, InstC43E, InstC427 DoorC8A2: : %rename(C8A2) ;Blue facing left DW SetupC7BB, InstC489, InstC49E DoorC8A8: : %rename(C8A8) ;Blue facing right DW SetupC7BB, InstC4BA, InstC4CF DoorC8AE: : %rename(C8AE) ;Blue facing up DW SetupC7BB, InstC4EB, InstC500 DoorC8B4: : %rename(C8B4) ;Blue facing down DW SetupC7BB, InstC51C, InstC531 PLMC8BA: : %rename(C8BA) ;Blue door closing facing left DW SetupB3C1, InstC49E PLMC8BE: : %rename(C8BE) ;Blue door closing facing right DW SetupB3C1, InstC4CF PLMC8C2: : %rename(C8C2) ;Blue door closing facing up DW SetupB3C1, InstC500 PLMC8C6: : %rename(C8C6) ;Blue door closing facing down DW SetupB3C1, InstC531 DoorC8CA: : %rename(C8CA) DW SetupB3C1, InstBB34, InstBB44 PLMC8D0: : %rename(C8D0) DW SetupB3C1, InstBB44 } ; Instruction lists { InstC8D4: DW $0001 : DW DrawA475 DW IKill InstC8DA: DW $0001 : DW DrawA47B DW IKill InstC8E0: DW $0001 : DW DrawA483 DW IKill InstC8E6: DW $0001 : DW DrawA48B DW IKill InstC8EC: DW $0001 : DW DrawA49B DW IKill InstC8F2: DW $0001 : DW DrawA4A1 DW IKill InstC8F8: DW $0001 : DW DrawA4A9 DW IKill InstC8FE: DW $0001 : DW DrawA4B1 DW IKill InstC904: DW $0001 : DW DrawA4C1 DW IKill InstC90A: DW $0001 : DW DrawA4C7 DW IKill InstC910: DW $0001 : DW DrawA4CF DW IKill InstC916: DW $0001 : DW DrawA4D7 DW IKill InstC91C: DW $0001 : DW DrawA4E7 DW IKill InstC922: DW $0001 : DW DrawA4ED DW IKill InstC928: DW $0001 : DW DrawA4F3 DW IKill InstC92E: DW IPlaySound2 : DB $06 DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0180 : DW DrawA357 DW $0004 : DW DrawA351 DW $0004 : DW DrawA34B DW $0004 : DW DrawA345 DW IDrawPLM1E17 DW IKill InstC951: DW IPlaySound2Now : DB $06 DW $0002 : DW DrawA345 DW $0002 : DW DrawA34B DW $0002 : DW DrawA351 DW $0030 : DW DrawA357 DW $0004 : DW DrawA351 DW $0004 : DW DrawA34B DW $0004 : DW DrawA345 DW IDrawPLM1E17 DW IKill InstC974: DW IPlaySound2Now : DB $06 DW $0001 : DW DrawA345 DW $0001 : DW DrawA34B DW $0001 : DW DrawA351 DW $0030 : DW DrawA357 DW $0004 : DW DrawA351 DW $0004 : DW DrawA34B DW $0004 : DW DrawA345 DW IDrawPLM1E17 DW IKill InstC997: DW IPlaySound2Now : DB $06 DW $0001 : DW DrawA345 DW $0001 : DW DrawA34B DW $0001 : DW DrawA351 DW $0030 : DW DrawA357 DW $0004 : DW DrawA351 DW $0004 : DW DrawA34B DW $0004 : DW DrawA345 DW IDrawPLM1E17Clone DW IKill InstC9BA: DW IPlaySound2 : DB $06 DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0001 : DW DrawA357 DW IKill InstC9CF: DW IPlaySound2Now : DB $06 DW $0002 : DW DrawA345 DW $0002 : DW DrawA34B DW $0002 : DW DrawA351 DW $0001 : DW DrawA357 DW IKill InstC9E4: DW IPlaySound2Now : DB $06 DW $0001 : DW DrawA345 DW $0001 : DW DrawA34B DW $0001 : DW DrawA351 DW $0001 : DW DrawA357 DW IKill InstC9F9: DW IPlaySound2Now : DB $0A DW $0008 : DW DrawA345 DW $0006 : DW DrawA34B DW $0004 : DW DrawA351 DW $0010 : DW DrawA357 DW $0004 : DW DrawA351 DW $0004 : DW DrawA34B DW $0004 : DW DrawA345 DW IDrawPLM1E17 DW IKill InstCA1C: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA35D DW $0004 : DW DrawA365 DW $0004 : DW DrawA36D DW $0010 : DW DrawA375 DW $0004 : DW DrawA36D DW $0004 : DW DrawA365 DW $0004 : DW DrawA35D DW $0001 : DW DrawA4A1 DW IKill InstCA41: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA37D DW $0004 : DW DrawA385 DW $0004 : DW DrawA38D DW $0020 : DW DrawA395 DW $0004 : DW DrawA38D DW $0004 : DW DrawA385 DW $0004 : DW DrawA37D DW $0001 : DW DrawA4A9 DW IKill InstCA66: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA39D DW $0004 : DW DrawA3AD DW $0004 : DW DrawA3BD DW $0020 : DW DrawA3CD DW $0004 : DW DrawA3BD DW $0004 : DW DrawA3AD DW $0004 : DW DrawA39D DW $0001 : DW DrawA4B1 DW IKill InstCA8B: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0001 : DW DrawA357 DW IKill InstCAA0: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA35D DW $0004 : DW DrawA365 DW $0004 : DW DrawA36D DW $0001 : DW DrawA375 DW IKill InstCAB5: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA37D DW $0004 : DW DrawA385 DW $0004 : DW DrawA38D DW $0001 : DW DrawA395 DW IKill InstCACA: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA39D DW $0004 : DW DrawA3AD DW $0004 : DW DrawA3BD DW $0001 : DW DrawA3CD DW IKill InstCADF: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0180 : DW DrawA357 DW $0004 : DW DrawA351 DW $0004 : DW DrawA34B DW $0004 : DW DrawA345 DW IDrawPLM1E17 DW IKill InstCB02: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA35D DW $0004 : DW DrawA365 DW $0004 : DW DrawA36D DW $0180 : DW DrawA375 DW $0004 : DW DrawA36D DW $0004 : DW DrawA365 DW $0004 : DW DrawA35D DW $0001 : DW DrawA47B DW IKill InstCB27: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA37D DW $0004 : DW DrawA385 DW $0004 : DW DrawA38D DW $0180 : DW DrawA395 DW $0004 : DW DrawA38D DW $0004 : DW DrawA385 DW $0004 : DW DrawA37D DW $0001 : DW DrawA483 DW IKill InstCB4C: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA39D DW $0004 : DW DrawA3AD DW $0004 : DW DrawA3BD DW $0180 : DW DrawA3CD DW $0004 : DW DrawA3BD DW $0004 : DW DrawA3AD DW $0004 : DW DrawA39D DW $0001 : DW DrawA48B DW IKill InstCB71: DW IPlaySound2 : DB $0A DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0180 : DW DrawA357 DW $0004 : DW DrawA351 DW $0004 : DW DrawA34B DW $0004 : DW DrawA345 DW IDrawPLM1E17 DW IKill InstCB94: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0180 : DW DrawA357 DW $0004 : DW DrawA351 DW $0004 : DW DrawA34B DW $0004 : DW DrawA345 DW IDrawPLM1E17 DW IKill InstCBB7: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0001 : DW DrawA357 DW IKill InstCBCC: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA35D DW $0004 : DW DrawA365 DW $0004 : DW DrawA36D DW $0001 : DW DrawA375 DW IKill InstCBE1: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA37D DW $0004 : DW DrawA385 DW $0004 : DW DrawA38D DW $0001 : DW DrawA395 DW IKill InstCBF6: DW IPlaySound2Now : DB $0A DW $0004 : DW DrawA39D DW $0004 : DW DrawA3AD DW $0004 : DW DrawA3BD DW $0001 : DW DrawA3CD DW IKill InstCC0B: DW IPlaySound2 : DB $0A DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0001 : DW DrawA357 DW IKill InstCC20: DW IPlaySound2Now : DB $0A DW $0003 : DW DrawA345 DW $0002 : DW DrawA34B DW $0001 : DW DrawA351 DW $0001 : DW DrawA357 DW IKill InstCC35: DW IPlaySound2Short : DB $06 DW IGoTo : DW InstCC3C_sub InstCC3C: DW IPlaySound2Short : DB $0A .sub DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0180 : DW DrawA357 DW $0004 : DW DrawA351 DW $0004 : DW DrawA34B DW $0004 : DW DrawA345 DW IDrawPLM1E17 DW IKill InstCC5F: DW IPlaySound2Short : DB $06 DW IGoTo : DW InstCC66_sub InstCC66: DW IPlaySound2Short : DB $0A .sub DW $0004 : DW DrawA35D DW $0004 : DW DrawA365 DW $0004 : DW DrawA36D DW $0180 : DW DrawA375 DW $0004 : DW DrawA36D DW $0004 : DW DrawA365 DW $0004 : DW DrawA35D DW $0001 : DW DrawA4C7 DW IKill InstCC8B: DW IPlaySound2Short : DB $06 DW IGoTo : DW InstCC92_sub InstCC92: DW IPlaySound2Short : DB $0A .sub DW $0004 : DW DrawA37D DW $0004 : DW DrawA385 DW $0004 : DW DrawA38D DW $0180 : DW DrawA395 DW $0004 : DW DrawA38D DW $0004 : DW DrawA385 DW $0004 : DW DrawA37D DW $0001 : DW DrawA4CF DW IKill InstCCB7: DW IPlaySound2Short : DB $06 DW IGoTo : DW InstCCBE_sub InstCCBE: DW IPlaySound2Short : DB $0A .sub DW $0004 : DW DrawA39D DW $0004 : DW DrawA3AD DW $0004 : DW DrawA3BD DW $0180 : DW DrawA3CD DW $0004 : DW DrawA3BD DW $0004 : DW DrawA3AD DW $0004 : DW DrawA39D DW $0001 : DW DrawA4D7 DW IKill InstCCE3: DW IPlaySound2Short : DB $06 DW IGoTo : DW InstCCEA_sub InstCCEA: DW IPlaySound2Short : DB $0A .sub DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0001 : DW DrawA357 DW IKill InstCCFF: DW IPlaySound2Short : DB $06 DW IGoTo : DW InstCD06_sub InstCD06: DW IPlaySound2Short : DB $0A .sub DW $0004 : DW DrawA35D DW $0004 : DW DrawA365 DW $0004 : DW DrawA36D DW $0001 : DW DrawA375 DW IKill InstCD1B: DW IPlaySound2Short : DB $06 DW IGoTo : DW InstCD22_sub InstCD22: DW IPlaySound2Short : DB $0A .sub DW $0004 : DW DrawA37D DW $0004 : DW DrawA385 DW $0004 : DW DrawA38D DW $0001 : DW DrawA395 DW IKill InstCD37: DW IPlaySound2Short : DB $06 DW IGoTo : DW InstCD3E_sub InstCD3E: DW IPlaySound2Short : DB $0A .sub DW $0004 : DW DrawA39D DW $0004 : DW DrawA3AD DW $0004 : DW DrawA3BD DW $0001 : DW DrawA3CD DW IKill InstCD53: DW IPlaySound2Short : DB $0A DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0001 : DW DrawA357 DW IKill InstCD68: DW IKill InstCD6A: DW $00F0 : DW DrawA4F9 DW IPlaySound2 : DB $0A DW $0004 : DW DrawA4FF DW $0004 : DW DrawA505 DW $0004 : DW DrawA50B DW $0006 : DW DrawA511 DW $0004 : DW DrawA50B DW $0004 : DW DrawA505 DW $0004 : DW DrawA4FF DW ISetBTS01 DW IDrawPLM1E17 DW IKill ;24D93 Instruction CD93 (0) : Set BTS to 01 ISetBTS01: PHX LDA $1C87, X LSR A TAX LDA $7F6402, X AND #$FF00 ORA #$0001 STA $7F6402, X PLX RTS InstCDA9: DW $0078 : DW DrawA4F9 DW IPlaySound2 : DB $0A DW $0004 : DW DrawA4FF DW $0004 : DW DrawA505 DW $0004 : DW DrawA50B DW $0001 : DW DrawA511 DW IKill } ; Setups { SetupCDC2: ;Turn to air if Samus is screw attacking, else delete self. LDA $0A1C CMP #$0081 BEQ + CMP #$0082 BNE ++ + LDX $1C87, Y LDA $7F0002, X STA $1E17, Y AND #$0FFF STA $7F0002, X CLC RTS ++ LDA #$0000 STA $1C37, Y SEC RTS SetupCDEA: ;If Samus is speedboosting (or in a shinespark pose) break block, else delete self. LDA $0B3E AND #$0F00 CMP #$0400 BEQ + LDA $0A1C CMP #$00C9 BEQ + CMP #$00CA BEQ + CMP #$00CB BEQ + CMP #$00CC BEQ + CMP #$00CD BEQ + CMP #$00CE BEQ + LDA #$0000 STA $1C37, Y SEC RTS + LDX $1C87, Y LDA $7F0002, X AND #$F000 ORA #$00B6 STA $1E17, Y AND #$0FFF STA $7F0002, X CLC RTS SetupCE37: ;If Samus collided with block from above, break block (though still solid for the moment). Else delete self. LDA $0B02 AND #$000F CMP #$0003 BNE + LDX $1C87, Y LDA $7F0002, X AND #$F000 ORA #$00BC STA $1E17, Y AND #$8FFF STA $7F0002, X TYX LDA #$0004 STA $7EDE1C, X SEC RTS + LDA #$0000 STA $1C37, Y SEC RTS SetupCE6B: ;Set block type to solid, store type and new graphic to 1E17 LDX $1C87, Y LDA $7F0002, X AND #$F000 ORA #$0052 STA $1E17, Y AND #$8FFF STA $7F0002, X RTS SetupCE83: ;If Samus speedboosting or shinesparking, break block. Else delete self. LDA $0B3E AND #$0F00 CMP #$0400 BEQ + LDA $0A1C CMP #$0081 BEQ + CMP #$0082 BEQ + CMP #$00C9 BEQ + CMP #$00CA BEQ + CMP #$00CB BEQ + CMP #$00CC BEQ + CMP #$00CD BEQ + CMP #$00CE BEQ + LDA #$0000 STA $1C37, Y SEC RTS + LDX $1C87, Y LDA $7F0002, X AND #$F000 ORA #$0058 STA $1E17, Y AND #$0FFF STA $7F0002, X CLC RTS SetupCEDA: ;If hit by powerbomb, skip first 3 bytes of instructions. If hit by any bomb, setup 1E17 and break, else delete self. LDX $0DDE LDA $0C18, X AND #$0F00 CMP #$0500 BEQ ++ CMP #$0300 BEQ + LDA #$0000 STA $1C37, Y RTS + LDX $1C87, Y LDA $7F0002, X AND #$F000 ORA #$0058 STA $1E17, Y AND #$8FFF STA $7F0002, X RTS ++ LDA $1D27, Y CLC ADC #$0003 STA $1D27, Y LDX $1C87, Y LDA $7F0002, X AND #$F000 ORA #$0058 STA $1E17, Y AND #$8FFF STA $7F0002, X RTS SetupCF2E: ;If hit by powerbomb, break. If hit by a bomb, reveal block. LDX $0DDE LDA $0C18, X AND #$0F00 CMP #$0500 BEQ ++ CMP #$0300 BEQ + LDA #$0000 STA $1C37, Y RTS + LDX $1C87, Y LDA $7F0002, X AND #$F000 ORA #$0057 STA $1E17, Y AND #$8FFF STA $7F0002, X RTS ++ LDA #InstC91C STA $1D27, Y RTS SetupCF67: ;If hit by super missile, break. If hit by a bomb, reveal block. LDX $0DDE LDA $0C18, X AND #$0F00 CMP #$0500 BEQ ++ CMP #$0200 BEQ + LDA #$0000 STA $1C37, Y RTS + LDX $1C87, Y LDA $7F0002, X AND #$F000 ORA #$009F STA $1E17, Y AND #$8FFF STA $7F0002, X RTS ++ LDA #InstC922 STA $1D27, Y RTS SetupCFA0: ;If hit by anything other than a bomb, delete self. LDX $0DDE LDA $0C18, X AND #$0F00 CMP #$0500 BEQ + LDA #$0000 STA $1C37, Y + RTS SetupCFB5: ;Store block type, set BTS to 0. Also sets V and C. LDX $1C87, Y LDA $7F0002, X STA $1E17, Y TXA LSR A TAX LDA $7F6402, X AND #$FF00 STA $7F6402, X SetupCFCD: SEP #$40 SEC RTS SetupCFD1: ;Clear V, set C REP #$40 SEC RTS SetupCFD5: ;Deal 1 atmospheric damage to Samus. Set V and C LDA $0A4E CLC ADC #$0000 STA $0A4E LDA $0A50 ADC #$0001 STA $0A50 SEP #$40 SEC RTS } ; PLM entries { PLMCFEC: : %rename(CFEC) DW SetupCFA0, InstC8D4 PLMCFF0: : %rename(CFF0) DW SetupCFA0, InstC8DA PLMCFF4: : %rename(CFF4) DW SetupCFA0, InstC8E0 PLMCFF8: : %rename(CFF8) DW SetupCFA0, InstC8E6 PLMCFFC: : %rename(CFFC) ;1x1 Respawning Crumble Block Bombed DW SetupCFA0, InstC8EC PLMD000: : %rename(D000) DW SetupCFA0, InstC8F2 PLMD004: : %rename(D004) DW SetupCFA0, InstC8F8 PLMD008: : %rename(D008) DW SetupCFA0, InstC8FE PLMD00C: : %rename(D00C) DW SetupCFA0, InstC904 PLMD010: : %rename(D010) DW SetupCFA0, InstC90A PLMD014: : %rename(D014) DW SetupCFA0, InstC910 PLMD018: : %rename(D018) DW SetupCFA0, InstC916 PLMD01C: : %rename(D01C) DW SetupCFA0, InstC91C PLMD020: : %rename(D020) DW SetupCFA0, InstC922 PLMD024: : %rename(D024) DW SetupCFA0, InstC928 PLMD028: : %rename(D028) DW SetupCDC2, InstC92E PLMD02C: : %rename(D02C) DW SetupCDC2, InstC9BA PLMD030: : %rename(D030) DW SetupCDEA, InstC951 PLMD034: : %rename(D034) ;Brinstar block, looks like normal speed block DW SetupCDEA, InstC9CF PLMD038: : %rename(D038) DW SetupCDEA, InstC974 PLMD03C: : %rename(D03C) DW SetupCDEA, InstC997 PLMD040: : %rename(D040) DW SetupCDEA, InstC9E4 PLMD044: : %rename(D044) ;1x1 Respawning Crumble Block Touched DW SetupCE37, InstC9F9 PLMD048: : %rename(D048) DW SetupCE37, InstCA1C PLMD04C: : %rename(D04C) DW SetupCE37, InstCA41 PLMD050: : %rename(D050) DW SetupCE37, InstCA66 PLMD054: : %rename(D054) DW SetupCE37, InstCA8B PLMD058: : %rename(D058) DW SetupCE37, InstCAA0 PLMD05C: : %rename(D05C) DW SetupCE37, InstCAB5 PLMD060: : %rename(D060) DW SetupCE37, InstCACA PLMD064: : %rename(D064) ;1x1 Respawning shot block reaction DW SetupCE6B, InstCADF PLMD068: : %rename(D068) ;2x1 Respawning shot block reaction DW SetupCE6B, InstCB02 PLMD06C: : %rename(D06C) ;1x2 Respawning shot block reaction DW SetupCE6B, InstCB27 PLMD070: : %rename(D070) ;2x2 Respawning shot block reaction DW SetupCE6B, InstCB4C PLMD074: : %rename(D074) ;1x1 Shot block reaction DW SetupB3C1, InstCBB7 PLMD078: : %rename(D078) ;2x1 Shot block reaction DW SetupB3C1, InstCBCC PLMD07C: : %rename(D07C) ;1x2 Shot block reaction DW SetupB3C1, InstCBE1 PLMD080: : %rename(D080) ;2x2 Shot block reaction DW SetupB3C1, InstCBF6 PLMD084: : %rename(D084) ;Respawning power bomb block reaction DW SetupCF2E, InstCB94 PLMD088: : %rename(D088) ;Power bomb block reaction DW SetupCF2E, InstCC20 PLMD08C: : %rename(D08C) ;Respawning super missile block reaction DW SetupCF67, InstCB71 PLMD090: : %rename(D090) ;Super missile block reaction DW SetupCF67, InstCC0B PLMD094: : %rename(D094) ;Enemy breakable block DW SetupB3D4, InstCD53 PLMD098: : %rename(D098) ;1x1 Respawning Bomb Block Collision? DW SetupCE83, InstCC35 PLMD09C: : %rename(D09C) ;2x1 Respawning Bomb Block Collision? DW SetupCE83, InstCC5F PLMD0A0: : %rename(D0A0) ;1x2 Respawning Bomb Block Collision? DW SetupCE83, InstCC8B PLMD0A4: : %rename(D0A4) ;2x2 Respawning Bomb Block Collision? DW SetupCE83, InstCCB7 PLMD0A8: : %rename(D0A8) ;1x1 Bomb Block Collision? DW SetupCE83, InstCCE3 PLMD0AC: : %rename(D0AC) ;2x1 Bomb Block Collision DW SetupCE83, InstCCFF PLMD0B0: : %rename(D0B0) ;1x2 Bomb Block Collision? DW SetupCE83, InstCD1B PLMD0B4: : %rename(D0B4) ;2x2 Bomb Block Collision? DW SetupCE83, InstCD37 PLMD0B8: : %rename(D0B8) ;1x1 Respawning Bomb Block Bombed DW SetupCEDA, InstCC3C PLMD0BC: : %rename(D0BC) ;2x1 Respawning Bomb Block Bombed? DW SetupCEDA, InstCC66 PLMD0C0: : %rename(D0C0) ;1x2 Respawning Bomb Block Bombed? DW SetupCEDA, InstCC92 PLMD0C4: : %rename(D0C4) ;2x2 Respawning Bomb Block Bombed? DW SetupCEDA, InstCCBE PLMD0C8: : %rename(D0C8) ;1x1 Bomb Block Bomb? DW SetupCEDA, InstCCEA PLMD0CC: : %rename(D0CC) ;2x1 Bomb Block Bomb? DW SetupCEDA, InstCD06 PLMD0D0: : %rename(D0D0) ;1x2 Bomb Block Bomb? DW SetupCEDA, InstCD22 PLMD0D4: : %rename(D0D4) ;2x2 Bomb Block Bomb? DW SetupCEDA, InstCD3E PLMD0D8: : %rename(D0D8) ;Grapple block grappled DW SetupCFCD, InstCD68 PLMD0DC: : %rename(D0DC) ;Respawning Breakable grapple block grappled DW SetupCFB5, InstCD6A PLMD0E0: : %rename(D0E0) ;Breakable grapple block grappled DW SetupCFB5, InstCDA9 PLMD0E4: : %rename(D0E4) ;Spike grappled DW SetupCFD1, InstCD68 PLMD0E8: : %rename(D0E8) ;Draygon's Broken Turret grappled DW SetupCFD5, InstCD68 InstD0EC: DW $0001 : DW Draw924D DW IKill PLMD0F2: : %rename(D0F2) DW SetupB3C1, InstD0EC InstD0F6: DW $0004 : DW DrawA345 DW $0004 : DW DrawA34B DW $0004 : DW DrawA351 DW $0001 : DW DrawA357 DW IKill SubD108: ;Stores air + graphic to PLM block. LDX $1C87, Y AND #$0FFF STA $7F0002, X RTS PLMD113: : %rename(D113) DW SubD108, InstD0F6 ;wait, where does it get A for D108? SetupD117: ;store normal shot block to block? LDX $1C87, Y LDA #$C000 JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS InstD121: DW $0004 : DW DrawA33F DW IKill PLMD127: : %rename(D127) DW SetupD117, InstD121 SetupD12B: ;store normal grapple block to block? LDX $1C87, Y LDA #$E000 JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS InstD135: DW $0001 : DW DrawA4F9 DW IKill PLMD13B: : %rename(D13B) DW SetupD12B, InstD135 } ; Instructions and instruction lists { InstD13F: DW IBranchEvent : DW $000C : DW .sub DW ISetPreInstructionCode : DW CodeD15C DW IWait DW IKill .sub DW ISetLiquidHeight1 DW $0001 : DW DrawA2B5 DW IKill ;25155 Instruction D155 (0) : Set's liquid height to bottom of third screen. ISetLiquidHeight1: LDA #$02D2 STA $1978 RTS CodeD15C: PHX SEP #$20 LDA #$08 STA $4202 LDA $07A5 STA $4203 LDA #$04 REP #$20 AND #$00FF CLC ADC $4216 ASL A TAX LDA $7F0002, X CMP #$00FF BNE + LDA #$B083 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C27 STZ $1C37, X + PLX RTS SetupD18E: RTS SetupD18F: ;LN Chozo hand block. Checks space jump, morph, collision direction, if all good set event, disable controls, spawn PLM. LDA $09A4 AND #$0200 BEQ ++ LDA $0B02 AND #$000F CMP #$0003 BNE ++ LDA $0A1C CMP #$001D ;aha. You must be facing RIGHT while morphed without spring ball to trigger the chozo. Facing left will not work. BEQ + CMP #$0079 BEQ + CMP #$007A BNE ++ + LDA #$000C JSL $8081FA ; $1FA IN ROM LDA #$0001 STA $0FB4 LDX $1C87, Y LDA $7F0002, X AND #$0FFF STA $7F0002, X LDA #$0000 JSL $90F084 ; $87084 IN ROM JSL SpawnPLMSpecific ; $203D7 IN ROM DB $0C, $1D : DW PLMD113 ++ LDA #$0000 STA $1C37, Y SEC RTS CodeD1E6: ;If hit by super or missile increment room argument LDA $1D77, X BEQ + AND #$0F00 CMP #$0200 BEQ ++ CMP #$0100 BNE + ++ STZ $1D77, X INC $1DC7, X + STZ $1D77, X RTS InstD202: DW IBranchBossBits : DB $01 : DW .sub1 DW IBranchEvent : DW $0002 : DW .sub2 DW ISetPreInstructionCode : DW CodeD1E6 .loop1 DW $0001 : DW Draw9717 DW IRoomArgCheck : DW $0002 : DW .loop1 .loop2 DW $0001 : DW Draw971D DW IRoomArgCheck : DW $0004 : DW .loop2 .loop3 DW $0001 : DW Draw9731 DW IRoomArgCheck : DW $0006 : DW .loop3 DW IGlassShrapnel : DW $0000, $0000, $0000, $0000 DW $0004 : DW Draw9745 DW IGlassShrapnel : DW $0000, $0000, $0000, $0000 .loop4 DW $0001 : DW Draw9745 DW IRoomArgCheck : DW $0008 : DW .loop4 .loop5 DW $0001 : DW Draw974F DW IRoomArgCheck : DW $000A : DW .loop5 .loop6 DW $0001 : DW Draw9769 DW IRoomArgCheck : DW $000C : DW .loop6 DW IGlassShrapnel : DW $0002, $0002, $0002, $0002 DW $0004 : DW Draw9781 DW IGlassShrapnel : DW $0002, $0002, $0002, $0002 .loop7 DW $0001 : DW Draw9781 DW IRoomArgCheck : DW $000E : DW .loop7 DW IGlassShrapnel : DW $0000, $0000, $0002, $0002 DW $0004 : DW Draw978F DW IGlassShrapnel : DW $0004, $0004, $0004, $0004 .loop8 DW $0001 : DW Draw978F DW IRoomArgCheck : DW $0010 : DW .loop8 DW IGlassShrapnel : DW $0002, $0002, $0004, $0004 DW $0004 : DW Draw97B7 DW IGlassShrapnel : DW $0002, $0002, $0004, $0004 .loop9 DW $0001 : DW Draw97B7 DW IRoomArgCheck : DW $0012 : DW .loop9 DW IGlassShrapnel : DW $0002, $0002, $0004, $0004 DW $0004 : DW Draw97E7 DW IGlassShrapnel : DW $0002, $0002, $0004, $0004 DW $0030 : DW Draw97E7 DW ISetEvent : DW $0002 DW IKill .sub1 DW $0001 : DW Draw9817 DW IKill .sub2 DW $0001 : DW Draw97E7 DW IKill ;D2F9 Instruction D2F9 (4) : If argument 1 matches room argument, goto argument 2 IRoomArgCheck: LDA $1DC7, X CMP $0000, Y BCS + LDA $0002, Y TAY RTS + INY INY INY INY RTS ;D30B Instruction D30B (8) : I'm assuming this spawns glass shrapnel when MB's glass is shattering. 4 2-byte arguments, arguments for 4 glass objects. IGlassShrapnel: LDA #$002E JSL $809125 ; $1125 IN ROM LDA $0000, Y JSR SubD331 ; $25331 IN ROM LDA $0002, Y JSR SubD331 ; $25331 IN ROM LDA $0004, Y JSR SubD331 ; $25331 IN ROM LDA $0006, Y JSR SubD331 ; $25331 IN ROM TYA CLC ADC #$0008 TAY RTS SubD331: PHY LDY #$CEFC JSL $868097 ; $30097 IN ROM PLY RTS CodeD33B: ;When Samus has bombs, wake up LDA $09A4 AND #$1000 BEQ .RTS LDA #$0001 STA $7EDE1C, X INC $1D27, X INC $1D27, X LDA.w #.RTS STA $1CD7, X .RTS RTS ;Instruction D357 (2) : Spawn object A993 with argument argument ISpawnObject1: PHX PHY LDA $0000, Y LDY #$A993 JSL $868097 ; $30097 IN ROM PLY PLX INY INY RTS InstD368: DW $0001 : DW Draw9877 DW ISetPreInstructionCode : DW CodeD33B DW IWait DW $0078 : DW Draw9877 DW ID0Transfer : DW $0400 : DL $ADB200 : DW $6E00 DW $0060 : DW Draw9877 DW ISpawnObject1 : DW $0000 DW $0030 : DW Draw9877 DW ISpawnObject1 : DW $0002 DW $000F : DW Draw9877 DW ISpawnObject1 : DW $0004 DW $000E : DW Draw9877 DW ISpawnObject1 : DW $0006 DW $000D : DW Draw9877 DW ISpawnObject1 : DW $0008 DW $000C : DW Draw9877 DW ISpawnObject1 : DW $000A DW $000B : DW Draw9877 DW ISpawnObject1 : DW $000C DW $000A : DW Draw9877 DW ISpawnObject1 : DW $000E DW $0001 : DW Draw989D DW ITrack6 DW IKill ;Instruction D3C7 (0) : Set music track to 6 ITrack6: LDA #$0006 JSL $808FC1 RTS InstD3CF: DW $0001 : DW Draw9CC5 DW ISetBlocksHC1 DW IKill ;Instruction D3D7 (0) : Set two specific blocks to certain slopes. Heavily hardcoded. ISetBlocksHC1: PHX LDX #$1608 LDA #$1012 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX #$160A LDA #$1013 JSR WriteBlockTypeBTS ; $202B4 IN ROM PLX RTS InstD3EC: DW $0001 : DW Draw9D0F DW ISetBlockHC2 DW IKill ;Instruction D3F4 (0) : Set two specific blocks to spikes. Heavily hardcoded. ISetBlockHC2: PHX LDX #$1608 LDA #$A000 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX #$160A LDA #$A000 JSR WriteBlockTypeBTS ; $202B4 IN ROM PLX RTS CodeD409: ;If hit by bomb, goto stored pointer. LDA $1D77, X AND #$0F00 CMP #$0500 BNE + LDA $7EDEBC, X STA $1D27, X LDA #$0001 STA $7EDE1C, X + STZ $1D77, X RTS InstD426: DW IBranchBossBit : DW .sub2 DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeD409 .loop1 DW $0077 : DW Draw9D59 DW IGoTo : DW .loop1 .sub1 DW ISetBossBit DW $0004 : DW Draw9D7D DW $0004 : DW Draw9DA1 DW $0004 : DW Draw9DC5 .sub2 DW $0004 : DW Draw9DE9 DW IKill InstD44E: DW IBranchEvent : DW $000C : DW .sub2 DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD26 DW $0001 : DW Draw9CA7 DW IWait .sub1 DW $0001 : DW Draw9CBF DW ISetLiquidFalling DW ISetEvent : DW $000C DW IKill .sub2 DW ISetLiquidHeight2 DW $0001 : DW Draw9CBF DW IKill ;Instruction D476 (0) : Set liquid target, speed, and delay. ISetLiquidFalling: LDA #$02D2 STA $197A LDA #$0070 STA $197C LDA #$0020 STA $1980 RTS ;Instruction D489 (0) : Set liquid level to bottom of third screen. Clone of D155 ISetLiquidHeight2: LDA #$02D2 STA $1978 RTS InstD490: DW IBranchBossBit : DW .sub2 DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD0F DW $0001 : DW Draw9B0B DW IWait .sub1 DW $0004 : DW Draw9B1B DW $0004 : DW Draw9B2B DW $0004 : DW Draw9B3B DW $0001 : DW Draw9B4B DW ISetBossBit DW INOP DW IKill .sub2 DW $0001 : DW Draw9B4B DW IKill ;Instruction D4BE (0) : Do nothing. INOP: RTS CodeD4BF: ;If A, X, B, Y, left, or right are pressed, wake up PLM. LDA $8F AND #$C3C0 BEQ + LDA #$0001 STA $7EDE1C, X INC $1D27, X INC $1D27, X + RTS InstD4D4: DW IBranchEvent : DW $000B : DW .sub3 DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeBD26 DW $0001 : DW Draw98D1 DW IWait .sub1 DW ISetGoTo : DW .sub2 DW ISetPreInstructionCode : DW CodeD4BF DW IWait .sub2 DW IStopPreInstructionCode DW IDisableSamus DW ISpawnObject2 DW $0030 : DW Draw98D7 DW $0001 : DW Draw9991 DW $0001 : DW Draw99E5 DW IPlaySound2 : DB $1A DW ISpawnObject3 DW IShakeRoom DW $0060 : DW Draw98DD DW ISetEvent : DW $000B DW IEnableLiquidEffect DW IEnableSamus DW IKill ;there's no pointer that goes here? ... InstD519 DW $0001 : DW Draw98E3 DW $0001 : DW Draw9953 .sub3 DW IEnableLiquidEffect DW IKill ;D525 Instruction D525 (0) : Set liquid to affect Samus after all IEnableLiquidEffect: LDA #$0004 TRB $197E RTS ;552C Instruction D52C (0) : Create object, hardcoded ISpawnObject2: PHY LDY #$D904 JSL $868097 ; $30097 IN ROM PLY RTS ;25536 Instruction D536 (0) : Make room shake for 40 frames IShakeRoom: LDA #$000B STA $183E LDA #$0040 STA $1840 RTS ;25543 Instruction D543 (0) : Create... a LOT of room objects. ISpawnObject3: PHY LDA #$0000 LDY #$D912 JSL $868097 ; $30097 IN ROM LDA #$0002 LDY #$D912 JSL $868097 ; $30097 IN ROM LDA #$0004 LDY #$D912 JSL $868097 ; $30097 IN ROM LDA #$0006 LDY #$D912 JSL $868097 ; $30097 IN ROM LDA #$0008 LDY #$D912 JSL $868097 ; $30097 IN ROM LDA #$000A LDY #$D912 JSL $868097 ; $30097 IN ROM LDA #$000C LDY #$D912 JSL $868097 ; $30097 IN ROM LDA #$000E LDY #$D912 JSL $868097 ; $30097 IN ROM LDA #$0010 LDY #$D912 JSL $868097 ; $30097 IN ROM LDA #$0012 LDY #$D912 JSL $868097 ; $30097 IN ROM LDA #$0000 LDY #$D920 JSL $868097 ; $30097 IN ROM LDA #$0002 LDY #$D920 JSL $868097 ; $30097 IN ROM LDA #$0004 LDY #$D920 JSL $868097 ; $30097 IN ROM LDA #$0006 LDY #$D920 JSL $868097 ; $30097 IN ROM LDA #$0008 LDY #$D920 JSL $868097 ; $30097 IN ROM LDA #$000A LDY #$D920 JSL $868097 ; $30097 IN ROM PLY RTS ;255E6 Instruction D5E6 (0) : Disable Samus's controls IDisableSamus: LDA #$0000 JSL $90F084 ; $87084 IN ROM RTS ;255EE Instruction D5EE (0) : Enable Samus's controls IEnableSamus: LDA #$0001 JSL $90F084 ; $87084 IN ROM RTS } ; Setups { SetupD5F6: ;Clear room argument, set block type LDA #$0000 STA $1DC7, Y LDX $1C87, Y ;Line 10000 here as of first draft! Almost done with first draft! LDA #$8044 JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS SetupD606: ;Delete self if boss 3 dead LDA #$0004 JSL $8081DC ; $1DC IN ROM BCC + LDA #$0000 STA $1C37, Y + RTS SetupD616: ;Set block type LDX $1C87, Y LDA #$B080 JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS SetupD620: ;If boss 1 is dead, hit from above, and Samus is in a morph ball pose, disable Samus's controls, enable enemy, and some more stuff. LDA #$0001 JSL $8081DC ; $1DC IN ROM BCC ++ LDA $0B02 AND #$000F CMP #$0003 BNE ++ LDA $0A1C CMP #$001D BEQ + CMP #$0079 BEQ + CMP #$007A BNE ++ + LDA #$0001 STA $0FB4 LDA #$0202 STA $7ECD27 LDA #$0101 STA $7ECD2D LDX $1C87, Y LDA $7F0002, X AND #$0FFF STA $7F0002, X LDA #$0000 JSL $90F084 ; $87084 IN ROM JSL SpawnPLMSpecific ; $203D7 IN ROM DB $17, $1D : DW PLMD6F8 ++ LDA #$0000 STA $1C37, Y SEC RTS SetupD67F: ;Sets block type LDX $1C87, Y LDA #$0044 JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS SetupD689: ;Sets block type LDX $1C87, Y LDA #$8044 JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS SetupD693: ;sets block type for 4 blocks. LDX $1C87, Y LDA #$8044 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C87, Y INX INX LDA #$50FF JSR WriteBlockTypeBTS ; $202B4 IN ROM LDA $1C87, Y CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM LDA $1C87, Y CLC ADC $07A5 ADC $07A5 TAX INX INX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS SetupD6CC: ;Sets block type. A clone. LDX $1C87, Y LDA #$8044 JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS } ; PLM entries { PLMD6D6: : %rename(D6D6) ;Lower Norfair Chozo hand DW SetupD18E, InstD13F PLMD6DA: : %rename(D6DA) ;Lower Norfair Chozo Hand check DW SetupD18F, InstDoNotMake PLMD6DE: : %rename(D6DE) ;Mother Brain's glass container DW SetupD5F6, InstD202 PLMD6E2: : %rename(D6E2) DW SetupB3C1, InstD202_sub1 PLMD6E6: : %rename(D6E6) DW SetupB3C1, InstD202_sub2 PLMD6EA: : %rename(D6EA) DW SetupD606, InstD368 PLMD6EE: : %rename(D6EE) ;WS Chozo Hand DW SetupD616, InstDoNotMake PLMD6F2: : %rename(D6F2) DW SetupD620, InstDoNotMake SetupD6F6: RTS SetupD6F7: RTS PLMD6F8: : %rename(D6F8) DW SetupD6F6, InstD3CF PLMD6FC: : %rename(D6FC) ;WS Chozo Floor Slope-->Spike DW SetupD6F7, InstD3EC PLMD700: : %rename(D700) DW SetupD67F, InstD426 PLMD704: : %rename(D704) DW SetupD689, InstD44E PLMD708: : %rename(D708) DW SetupD693, InstD490 PLMD70C: : %rename(D70C) ;Maridia Bridge DW SetupD6CC, InstD4D4 } ; Instructions { CodeD710: ;If Samus is within 4 blocks of this PLM, goto stored pointer and activate. JSL GetPLMCoordinate LDA $0AF6 LSR A LSR A LSR A LSR A SEC SBC $1C29 BPL + EOR #$FFFF INC A + CMP #$0004 BEQ + BCS ++ + LDA $0AFA LSR A LSR A LSR A LSR A SEC SBC $1C2B BPL + EOR #$FFFF INC A + CMP #$0004 BEQ + BCS ++ + LDA $7EDEBC, X STA $1D27, X LDA #$0001 STA $7EDE1C, X ++ RTS CodeD753: ;If room argument's door has been opened, wake up PLM. TXY LDA $1DC7, X JSL $80818E ; $18E IN ROM LDA $7ED8B0, X AND $05E7 BEQ CodeD779 TYX LDA #CodeD779 STA $1CD7, X LDA $7EDEBC, X STA $1D27, X LDA #$0001 STA $7EDE1C, X CodeD779: RTS ;D77A Instruction D77A (2) : Create an object with the argument argument. Also play a sound. ISpawnObject4: LDA $0000, Y PHY LDY #$B743 JSL $868097 ; $30097 IN ROM LDA #$004C JSL $8090CB ; $10CB IN ROM PLY INY INY RTS ;25790 Instruction D790 (2) : Create an object with the argument argument. ISpawnObject5: LDA $0000, Y PHY LDY #$B751 JSL $868097 ; $30097 IN ROM PLY INY INY RTS ;2579F Instruction D79F (0) : Create a few objects ISpawnObject6: PHY LDA #$030A LDY #$E517 JSL $868097 ; $30097 IN ROM LDA #$030A LDY #$E517 JSL $868097 ; $30097 IN ROM PLY RTS ;257B6 Instruction D7B6 (0) : Create an object ISpawnObject7: PHY LDA #$000B LDY #$E517 JSL $868097 ; $30097 IN ROM PLY RTS ;257C3 Instruction D7C3 (0) : Move PLM up a block, setup that block and the 3 below it. IMoveSetBlocks1: PHX LDA $1C87, X SEC SBC $07A5 SBC $07A5 STA $1C87, X TAX LDA #$C041 JSR WriteBlockTypeBTS ; $202B4 IN ROM BRA IMoveSetBlocks2_merge ;257DA Instruction D7DA (0) : Move PLM up a block, setup that block and the 3 below it. IMoveSetBlocks2: PHX LDA $1C87, X SEC SBC $07A5 SBC $07A5 STA $1C87, X TAX LDA #$C040 JSR WriteBlockTypeBTS ; $202B4 IN ROM .merge TXA CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM TXA CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FE JSR WriteBlockTypeBTS ; $202B4 IN ROM TXA CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FD JSR WriteBlockTypeBTS ; $202B4 IN ROM PLX RTS } ; Instruction lists { InstD81E: ;101 byte instruction list. DW IBranchDoor : DW .sub1 .loop1 ;D822 DW $0004 : DW Draw9C03 DW IDetectSamus : DB $06, $04 : DW .sub2 DW IGoTo : DW .loop1 .sub2 ;D830 DW ISetGoTo : DW .sub3 DW ISetPreInstructionCode : DW CodeBD50 DW $0008 : DW Draw9C0B .loop2 ;D83C DW IDetectSamus : DB $01, $04 : DW .sub4 DW $0040 : DW Draw9C13 DW ISpawnObject4 : DW $0000 DW $0020 : DW Draw9C13 DW ISpawnObject4 : DW $0000 DW $0020 : DW Draw9C13 DW ISpawnObject4 : DW $0000 DW $0040 : DW Draw9C13 DW $0006 : DW Draw9C0B DW $0030 : DW Draw9C03 DW $0030 : DW Draw9C03 DW $0006 : DW Draw9C0B DW IDetectSamus : DB $06, $04 : DW .loop2 DW IGoTo : DW .loop1 .sub4 ;D878 DW $0004 : DW Draw9C03 DW IGoTo : DW .loop2 .sub3 ;D880 DW IPlaySound2 : DB $09 DW ISpawnObject6 DW ISpawnObject6 DW IDoorHit : DB $03 : DW .sub5 DW $0002 : DW Draw9C1B DW $0002 : DW Draw9C23 DW ISpawnObject6 DW $0002 : DW Draw9C1B DW $0002 : DW Draw9C23 DW $0002 : DW Draw9C1B DW ISpawnObject6 DW $0002 : DW Draw9C23 DW $0004 : DW Draw9C0B DW $0008 : DW Draw9C03 DW ISpawnObject5 : DW $0000 DW $0038 : DW Draw9C03 DW $0004 : DW Draw9C0B DW $0004 : DW Draw9C23 DW IGoTo : DW .loop2 .sub5 ;D8C4 DW IStopPreInstructionCode DW ISpawnObject7 DW ISpawnObject7 DW ISpawnObject6 DW ISpawnObject6 DW IMoveSetBlocks2 DW ISetCounter8 : DB $0A .loop3 DW $0003 : DW Draw9BF7 DW $0004 : DW DrawA9A7 DW IGoToDecrement : DW .loop3 DW IGoTo : DW InstC49E_sub .sub1 ;D8E3 DW IMoveSetBlocks2 DW IGoTo : DW InstC49E_sub .subPLM DW IBranchDoor : DW .sub6 .loop4 DW IDetectSamus : DB $06, $10 : DW .sub7 DW $0008 : DW Draw9C2B DW IGoTo : DW .loop4 .sub7 ;D8FB DW ISetGoTo : DW .sub6 DW ISetPreInstructionCode : DW CodeD753 .loop5 DW $0008 : DW Draw9C2B DW $0008 : DW Draw9C31 DW $0008 : DW Draw9C37 DW $0008 : DW Draw9C31 DW IDetectSamus : DB $06, $10 : DW .loop5 DW IGoTo : DW .loop4 .sub6 DW IKill InstD91F: DW IBranchDoor : DW .sub1 .loop1 DW IDetectSamus : DB $06, $10 : DW .sub2 DW $0008 : DW Draw9C3D DW IGoTo : DW .loop1 .sub2 DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeD753 .loop2 DW $0008 : DW Draw9C3D DW $0008 : DW Draw9C43 DW $0008 : DW Draw9C49 DW $0008 : DW Draw9C43 DW IDetectSamus : DB $06, $10 : DW .loop2 DW IGoTo : DW .loop1 .sub1 DW IKill InstD955: ;101 bytes, the return DW IBranchDoor : DW .sub1 .loop1 ;D959 DW $0004 : DW Draw9C5B DW IDetectSamus : DB $06, $04 : DW .sub2 DW IGoTo : DW .loop1 .sub2 ;D967 DW ISetGoTo : DW .sub3 DW ISetPreInstructionCode : DW CodeBD50 DW $0008 : DW Draw9C63 .loop2 ;D973 DW IDetectSamus : DB $01, $04 : DW .sub4 DW $0040 : DW Draw9C6B DW ISpawnObject4 : DW $0014 DW $0020 : DW Draw9C6B DW ISpawnObject4 : DW $0014 DW $0020 : DW Draw9C6B DW ISpawnObject4 : DW $0014 DW $0040 : DW Draw9C6B DW $0006 : DW Draw9C63 DW $0030 : DW Draw9C5B DW $0030 : DW Draw9C5B DW $0006 : DW Draw9C63 DW IDetectSamus : DB $06, $04 : DW .loop2 DW IGoTo : DW .loop1 .sub4 ;D9AF DW $0004 : DW Draw9C5B DW IGoTo : DW .loop2 .sub3 ;D9B7 DW IPlaySound2 : DB $09 DW ISpawnObject6 DW ISpawnObject6 DW IDoorHit : DB $03 : DW .sub5 DW $0002 : DW Draw9C73 DW $0002 : DW Draw9C7B DW ISpawnObject6 DW $0002 : DW Draw9C73 DW $0002 : DW Draw9C7B DW $0002 : DW Draw9C73 DW ISpawnObject6 DW $0002 : DW Draw9C7B DW $0004 : DW Draw9C63 DW $0008 : DW Draw9C5B DW ISpawnObject5 : DW $0004 DW $0038 : DW Draw9C5B DW $0004 : DW Draw9C63 DW $0004 : DW Draw9C7B DW IGoTo : DW .loop2 .sub5 ;D9FB DW IStopPreInstructionCode DW ISpawnObject7 DW ISpawnObject7 DW ISpawnObject6 DW ISpawnObject6 DW IMoveSetBlocks1 DW ISetCounter8 : DB $0A .loop3 ;DA0A DW $0003 : DW Draw9C4F DW $0004 : DW DrawA9E3 DW IGoToDecrement : DW .loop3 DW IGoTo : DW InstC4CF_sub .sub1 DW IMoveSetBlocks1 DW IGoTo : DW InstC4CF_sub .subPLM DW IBranchDoor : DW .sub6 .loop4 DW IDetectSamus : DB $06, $10 : DW .sub7 DW $0008 : DW Draw9C83 DW IGoTo : DW .loop4 .sub7 ;DA32 DW ISetGoTo : DW .sub6 DW ISetPreInstructionCode : DW CodeD753 .loop5 DW $0006 : DW Draw9C83 DW $0006 : DW Draw9C89 DW $0006 : DW Draw9C8F DW $0006 : DW Draw9C89 DW IDetectSamus : DB $06, $10 : DW .loop5 DW IGoTo : DW .loop4 .sub6 ;DA54 DW IKill InstDA56: DW IBranchDoor : DW .sub1 .loop1 DW IDetectSamus : DB $06, $10 : DW .sub2 DW $0008 : DW Draw9C95 DW IGoTo : DW .loop1 .sub2 DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeD753 .loop2 DW $0006 : DW Draw9C95 DW $0006 : DW Draw9C9B DW $0006 : DW Draw9CA1 DW $0006 : DW Draw9C9B DW IDetectSamus : DB $06, $10 : DW .loop2 DW IGoTo : DW .loop1 .sub1 DW IKill } ; Misc. { SetupDA8C: ;If room argument's door bit isn't set, setup two blocks. PHY LDA $1DC7, Y JSL $80818E ; $18E IN ROM LDA $7ED8B0, X PLY AND $05E7 BNE + LDX $1C87, Y LDA #$C044 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDA $1C87, Y CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM + RTS SetupDAB9: ;If room argument's door bit isn't set, setup block. PHY LDA $1DC7, Y JSL $80818E ; $18E IN ROM LDA $7ED8B0, X PLY AND $05E7 BNE + LDX $1C87, Y LDA #$A000 JSR WriteBlockTypeBTS ; $202B4 IN ROM + RTS CodeDAD5: RTS CodeDAD6: RTS CodeDAD7: RTS CodeDAD8: RTS CodeDAD9: RTS CodeDADA: RTS CodeDADB: RTS CodeDADC: RTS CodeDADD: RTS CodeDADE: LDA $0E50 CMP $0E52 BCC + LDA #$0010 JSL $8081FA ; $1FA IN ROM + RTS CodeDAEE: LDA $0E50 CMP $0E52 BCC + LDA #$0011 JSL $8081FA ; $1FA IN ROM + RTS CodeDAFE: LDA $0E50 CMP $0E52 BCC + LDA #$0012 JSL $8081FA ; $1FA IN ROM + RTS CodeDB0E: LDA $0E50 CMP $0E52 BCC + LDA #$0013 JSL $8081FA ; $1FA IN ROM + RTS SetupDB1E: ;Get pointer to check code using room argument as index. LDX $1DC7, Y LDA.w .table, X STA $1CD7, Y RTS .table DW CodeDAD5, CodeDAD6, CodeDAD7, CodeDAD8, CodeDAD9, CodeDADA, CodeDADB, CodeDADC, CodeDADD, CodeDADE, CodeDAEE, CodeDAFE, CodeDB0E InstDB42: DW IWait } ; PLM entries { PLMDB44: : %rename(DB44) DW SetupDB1E, InstDB42 PLMDB48: : %rename(DB48) DW SetupDA8C, InstD955 DoorDB4C: : %rename(DB4C) DW SetupDAB9, InstD955_subPLM, InstDoNotMake PLMDB52: : %rename(DB52) DW SetupDAB9, InstDA56 PLMDB56: : %rename(DB56) DW SetupDA8C, InstD81E DoorDB5A: : %rename(DB5A) DW SetupDAB9, InstD81E_subPLM, InstDoNotMake PLMDB60: : %rename(DB60) DW SetupDAB9, InstD91F } ; Instructions { CodeDB64: ;If hit by missile or super, goto stored pointer. Supers are an automatic 119 to counter LDA $1D77, X AND #$0F00 CMP #$0200 BEQ + CMP #$0100 BNE ++ - STZ $1D77, X LDA $7EDEBC, X STA $1D27, X LDA #$0001 STA $7EDE1C, X ++ RTS + LDA #$0077 STA $1DC7, X BRA - ;25B8E Instruction DB8E (0) : Sets two blocks and (1E17) IBrokenTurret1: PHX LDA $1E17, X TAX LDA #$0001 STA $7E0000, X PLX LDA $1C87, X TAX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM TXA CLC ADC $07A5 ADC $07A5 TAX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C27 RTS ;25BB8 Instruction DBB8 (0) : Sets 4 blocks and (1E17) IBrokenTurretLarge1: PHX LDA $1E17, X TAX LDA #$0001 STA $7E0000, X PLX LDA $1C87, X TAX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM INX INX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C27 LDA $1C87, X CLC ADC $07A5 ADC $07A5 TAX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM INX INX LDA #$0000 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C27 RTS ;25BF7 Instruction DBF7 (0) : Sets 4 blocks and (1E17) IBrokenTurretLarge2: PHX LDA $1E17, X TAX LDA #$0001 STA $7E0000, X PLX LDA $1C87, X TAX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM INX INX LDA #$0000 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C27 LDA $1C87, X CLC ADC $07A5 ADC $07A5 TAX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM INX INX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C27 RTS ;25C36 Instruction DC36 (0) : Sets 2 blocks and (1E17). Exact clone of DB8E IBrokenTurret2: PHX LDA $1E17, X TAX LDA #$0001 STA $7E0000, X PLX LDA $1C87, X TAX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM TXA CLC ADC $07A5 ADC $07A5 TAX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C27 RTS ;25C60 Instruction DC60 (0) : Sets 4 blocks and (1E17). Left wall. IBrokenTurretLarge3: PHX LDA $1E17, X TAX LDA #$0001 STA $7E0000, X PLX LDA $1C87, X TAX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM DEX DEX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C27 LDA $1C87, X CLC ADC $07A5 ADC $07A5 TAX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM DEX DEX LDA #$0000 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C27 RTS ;25C9F Instruction DC9F (0) : Set 4 blocks and (1E17). Left wall. IBrokenTurretLarge4: PHX LDA $1E17, X TAX LDA #$0001 STA $7E0000, X PLX LDA $1C87, X TAX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM DEX DEX LDA #$0000 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C27 LDA $1C87, X CLC ADC $07A5 ADC $07A5 TAX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM DEX DEX LDA #$A003 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C27 RTS } ; Instruction lists { InstDCDE: DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeDB64 .loop1 DW $0008 : DW Draw9FCD DW IWait DW IGoTo : DW .loop1 .sub1 DW ICounterInc : DB $03 : DW .sub2 DW $0003 : DW Draw9FCD DW $0004 : DW Draw9FDD DW $0003 : DW Draw9FCD DW $0004 : DW Draw9FDD DW $0003 : DW Draw9FCD DW $0004 : DW Draw9FDD DW IGoTo : DW .loop1 .sub2 DW IBrokenTurret1 .loop2 DW $0006 : DW DrawA02D DW $0006 : DW DrawA03D DW $0006 : DW DrawA04D DW $0006 : DW DrawA05D DW IGoTo : DW .loop2 InstDD27: DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeDB64 .loop1 DW $0008 : DW Draw9FED DW IWait DW IGoTo : DW .loop1 .sub1 DW ICounterInc : DB $03 : DW .sub2 DW $0003 : DW Draw9FED DW $0004 : DW Draw9FFD DW $0003 : DW Draw9FED DW $0004 : DW Draw9FFD DW $0003 : DW Draw9FED DW $0004 : DW Draw9FFD DW IGoTo : DW .loop1 .sub2 DW IBrokenTurretLarge1 .loop2 DW $0006 : DW DrawA06D DW $0006 : DW DrawA07D DW $0006 : DW DrawA08D DW $0006 : DW DrawA09D DW IGoTo : DW .loop2 InstDD70: DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeDB64 .loop1 DW $0008 : DW DrawA00D DW IWait DW IGoTo : DW .loop1 .sub1 DW ICounterInc : DB $03 : DW .sub2 DW $0003 : DW DrawA00D DW $0004 : DW DrawA01D DW $0003 : DW DrawA00D DW $0004 : DW DrawA01D DW $0003 : DW DrawA00D DW $0004 : DW DrawA01D DW IGoTo : DW .loop1 .sub2 DW IBrokenTurretLarge2 .loop2 DW $0006 : DW DrawA0AD DW $0006 : DW DrawA0BD DW $0006 : DW DrawA0CD DW $0006 : DW DrawA0DD DW IGoTo : DW .loop2 InstDDB9: DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeDB64 .loop1 DW $0008 : DW DrawA0ED DW IWait DW IGoTo : DW .loop1 .sub1 DW ICounterInc : DB $03 : DW .sub2 DW $0003 : DW DrawA0ED DW $0004 : DW DrawA101 DW $0003 : DW DrawA0ED DW $0004 : DW DrawA101 DW $0003 : DW DrawA0ED DW $0004 : DW DrawA101 DW IGoTo : DW .loop1 .sub2 DW IBrokenTurret2 .loop2 DW $0006 : DW DrawA165 DW $0006 : DW DrawA179 DW $0006 : DW DrawA18D DW $0006 : DW DrawA1A1 DW IGoTo : DW .loop2 InstDE02: DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeDB64 .loop1 DW $0008 : DW DrawA115 DW IWait DW IGoTo : DW .loop1 .sub1 DW ICounterInc : DB $03 : DW .sub2 DW $0003 : DW DrawA115 DW $0004 : DW DrawA129 DW $0003 : DW DrawA115 DW $0004 : DW DrawA129 DW $0003 : DW DrawA115 DW $0004 : DW DrawA129 DW IGoTo : DW .loop1 .sub2 DW IBrokenTurretLarge3 .loop2 DW $0006 : DW DrawA1B5 DW $0006 : DW DrawA1C9 DW $0006 : DW DrawA1DD DW $0006 : DW DrawA1F1 DW IGoTo : DW .loop2 InstDE4B: DW ISetGoTo : DW .sub1 DW ISetPreInstructionCode : DW CodeDB64 .loop1 DW $0008 : DW DrawA13D DW IWait DW IGoTo : DW .loop1 .sub1 DW ICounterInc : DB $03 : DW .sub2 DW $0003 : DW DrawA13D DW $0004 : DW DrawA151 DW $0003 : DW DrawA13D DW $0004 : DW DrawA151 DW $0003 : DW DrawA13D DW $0004 : DW DrawA151 DW IGoTo : DW .loop1 .sub2 DW IBrokenTurretLarge4 .loop2 DW $0006 : DW DrawA205 DW $0006 : DW DrawA219 DW $0006 : DW DrawA22D DW $0006 : DW DrawA241 DW IGoTo : DW .loop2 } ; Setups { SetupDE94: ;Copy and clear room argument, set 2 blocks LDA $1DC7, Y STA $1E17, Y LDA #$0000 STA $1DC7, Y LDX $1C87, Y LDA #$C044 JSR WriteBlockTypeBTS ; $202B4 IN ROM TXA CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS SetupDEB9: ;Copy and clear room argument, set 4 blocks. LDA $1DC7, Y STA $1E17, Y LDA #$0000 STA $1DC7, Y LDX $1C87, Y LDA #$C044 JSR WriteBlockTypeBTS ; $202B4 IN ROM INX INX LDA #$50FF JSR WriteBlockTypeBTS ; $202B4 IN ROM LDA $1C87, Y CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM INX INX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS SetupDEF0: ;Copy and clear room argument, set 2 blocks. Exact clone of DE94 LDA $1DC7, Y STA $1E17, Y LDA #$0000 STA $1DC7, Y LDX $1C87, Y LDA #$C044 JSR WriteBlockTypeBTS ; $202B4 IN ROM TXA CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS SetupDF15: ;Copy and clear room argument, set 4 blocks. LDA $1DC7, Y STA $1E17, Y LDA #$0000 STA $1DC7, Y LDX $1C87, Y LDA #$C044 JSR WriteBlockTypeBTS ; $202B4 IN ROM DEX DEX LDA #$5001 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDA $1C87, Y CLC ADC $07A5 ADC $07A5 TAX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM DEX DEX LDA #$D0FF JSR WriteBlockTypeBTS ; $202B4 IN ROM RTS SetupDF4C: ;Copy room argument, set it to 3. LDA $1DC7, Y STA $1E17, Y LDA #$0003 STA $1DC7, Y RTS } ; PLM entries { PLMDF59: : %rename(DF59) DW SetupDE94, InstDCDE PLMDF5D: : %rename(DF5D) DW SetupDEB9, InstDD27 PLMDF61: : %rename(DF61) DW SetupDEB9, InstDD70 PLMDF65: : %rename(DF65) DW SetupDF4C, InstDCDE_sub2 ;InstDD11 PLMDF69: : %rename(DF69) DW SetupDF4C, InstDD27_sub2 ;InstDD5A PLMDF6D: : %rename(DF6D) DW SetupDF4C, InstDD70_sub2 ;DDA3 PLMDF71: : %rename(DF71) DW SetupDEF0, InstDDB9 PLMDF75: : %rename(DF75) DW SetupDF15, InstDE02 PLMDF79: : %rename(DF79) DW SetupDF15, InstDE4B PLMDF7D: : %rename(DF7D) DW SetupDF4C, InstDDB9_sub2 ;InstDDEC PLMDF81: : %rename(DF81) DW SetupDF4C, InstDE02_sub2 ;InstDE35 PLMDF85: : %rename(DF85) DW SetupDF4C, InstDE4B_sub2 ;InstDE7E } ; Instruction lists (mostly) { CodeDF89: ;If touched?, then goto stored pointer. LDA $1D77,X AND #$00FF CMP #$00FF BNE .RTS LDA #.RTS STA $1CD7, X LDA $7EDEBC, X STA $1D27, X LDA #$0001 STA $7EDE1C, X .RTS RTS InstDFA9: DW $0001 : DW DrawA2B5 DW IKill InstDFAF: DW ISetPreInstructionCode : DW CodeDF89 .loop1 DW $0014 : DW DrawA2C7 DW $000A : DW DrawA2CD DW $0014 : DW DrawA2D3 DW $000A : DW DrawA2CD DW IGoTo : DW .loop1 InstDFC7: DW IStopPreInstructionCode DW $0003 : DW DrawA2B5 DW $0003 : DW DrawA2D9 DW $0003 : DW DrawA2B5 DW IGoToGoTo InstDFD7: DW IStopPreInstructionCode DW ISetCounter8 : DB $16 .loop2 DW $0008 : DW DrawA2B5 DW IGoToDecrement : DW .loop2 DW IGoToGoTo CodeDFE6: ;If touched by Samus? wake up PLM. Also pointless PB check? LDA $1D77,X CMP #$0300 BEQ + AND #$00FF CMP #$00FF BNE + STZ $1D77,X INC $1D27,X INC $1D27,X LDA #$0001 STA $7EDE1C,X + RTS InstE007: DW ISetPreInstructionCode : DW CodeDFE6 DW IWait DW IStopPreInstructionCode DW IPlaySound2 : DB $0A DW $0004 : DW DrawA3DD DW $0004 : DW DrawA3E3 DW $0004 : DW DrawA3E9 DW IGoToGoTo InstE020: DW IStopPreInstructionCode DW $0004 : DW DrawA3E9 DW $0004 : DW DrawA3E3 DW $0004 : DW DrawA3DD DW IDrawPLM1E17Clone DW IGoToGoTo InstE032: DW IStopPreInstructionCode DW ISetCounter8 : DB $16 .loop1 DW $0008 : DW DrawA2B5 DW IGoToDecrement : DW .loop1 DW $0004 : DW DrawA351 DW $0004 : DW DrawA34B DW $0004 : DW DrawA345 DW IDrawPLM1E17Clone DW IGoToGoTo ;CodeE04F: Instruction E04F (0) : Draw custom-graphic PLM from a table depending on variable RAM. 4 delay IDrawCustom1: PHY LDA $7EDF0C, X TAY LDA.w .table1, Y STA $7EDE6C, X PLY BRA IDrawCustom2_merge .table1 DW DrawA30F, DrawA31B, DrawA327, DrawA333 ;26067 Instruction E067 (0) : Draw custom-graphic PLM from a table depending on variable RAM. 4 delay IDrawCustom2: PHY LDA $7EDF0C, X TAY LDA.w .table2, Y STA $7EDE6C, X PLY BRA .merge .table2 DW DrawA315, DrawA321, DrawA32D, DrawA339 .merge LDA #$0004 STA $7EDE1C, X TYA STA $1D27, X JSR WriteBlockTypeGraphic ; $2061E IN ROM LDX $1C27 JSL GetPLMCoordinate ; $20290 IN ROM JSR DrawPLM ; $20DAA IN ROM PLA RTS InstE099: DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW $0004 : DW DrawA2DF DW $0004 : DW DrawA2E5 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEnergyPickup : DW $0064 .end DW IGoTo : DW InstDFA9 InstE0BE: DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW $0004 : DW DrawA2EB DW $0004 : DW DrawA2F1 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IMissilePickup : DW $0005 .end DW IGoTo : DW InstDFA9 InstE0E3: DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW $0004 : DW DrawA2F7 DW $0004 : DW DrawA2FD DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW ISuperPickup : DW $0005 .end DW IGoTo : DW InstDFA9 InstE108: DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW $0004 : DW DrawA303 DW $0004 : DW DrawA309 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IPowerBombPickup : DW $0005 .end DW IGoTo : DW InstDFA9 InstE12D: DW ILoadSpecialGraphics : DW $8000 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $1000 : DB $13 .end DW IGoTo : DW InstDFA9 InstE15B: DW ILoadSpecialGraphics : DW $8B00 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $1000 : DB $0E .end DW IGoTo : DW InstDFA9 InstE189: DW ILoadSpecialGraphics : DW $8C00 : DB $00, $03, $00, $00, $00, $03, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $0002 : DB $0F .end DW IGoTo : DW InstDFA9 InstE1B7: DW ILoadSpecialGraphics : DW $8400 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0100 : DB $0B .end DW IGoTo : DW InstDFA9 InstE1E5: DW ILoadSpecialGraphics : DW $8A00 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $2000 : DB $0D .end DW IGoTo : DW InstDFA9 InstE213: DW ILoadSpecialGraphics : DW $8D00 : DB $00, $02, $00, $00, $00, $02, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $0001 : DB $10 .end DW IGoTo : DW InstDFA9 InstE241: DW ILoadSpecialGraphics : DW $8F00 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $0004 : DB $11 .end DW IGoTo : DW InstDFA9 InstE26F: DW ILoadSpecialGraphics : DW $8200 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0002 : DB $08 .end DW IGoTo : DW InstDFA9 ;E29D Instruction E29D (0) : Clear charge beam IClearCharge: STZ $0CD0 RTS InstE2A1: DW ILoadSpecialGraphics : DW $8300 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IClearCharge DW IEquipPickup : DW $0001 : DB $07 DW IJSLCautious : DL $91D4E4 .end DW IGoTo : DW InstDFA9 InstE2D6: DW ILoadSpecialGraphics : DW $8100 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IClearCharge DW IEquipPickup : DW $0020 : DB $1A DW IJSLCautious : DL $91D5BA .end DW IGoTo : DW InstDFA9 InstE30B: DW ILoadSpecialGraphics : DW $8900 : DB $01, $01, $00, $00, $03, $03, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IXRayPickup : DW $8000 .end DW IGoTo : DW InstDFA9 InstE338: DW ILoadSpecialGraphics : DW $8E00 : DB $00, $01, $00, $00, $00, $01, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $0008 : DB $12 .end DW IGoTo : DW InstDFA9 InstE366: DW ILoadSpecialGraphics : DW $8800 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IGrapplePickup : DW $4000 .end DW IGoTo : DW InstDFA9 InstE393: DW ILoadSpecialGraphics : DW $8600 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0200 : DB $0C .end DW IGoTo : DW InstDFA9 InstE3C1: DW ILoadSpecialGraphics : DW $8500 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0008 : DB $0A .end DW IGoTo : DW InstDFA9 InstE3EF: DW ILoadSpecialGraphics : DW $8700 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0004 : DB $09 .end DW IGoTo : DW InstDFA9 InstE41D: DW ILoadSpecialGraphics : DW $9000 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IReservePickup : DW $0064 .end DW IGoTo : DW InstDFA9 InstE44A: DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW $0004 : DW DrawA2DF DW $0004 : DW DrawA2E5 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEnergyPickup : DW $0064 .end DW $0001 : DW DrawA2B5 DW IKill InstE47C: DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW $0004 : DW DrawA2EB DW $0004 : DW DrawA2F1 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IMissilePickup : DW $0005 .end DW $0001 : DW DrawA2B5 DW IKill InstE4AE: DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW $0004 : DW DrawA2F7 DW $0004 : DW DrawA2FD DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW ISuperPickup : DW $0005 .end DW $0001 : DW DrawA2B5 DW IKill InstE4E0: DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW $0004 : DW DrawA303 DW $0004 : DW DrawA309 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IPowerBombPickup : DW $0005 .end DW $0001 : DW DrawA2B5 DW IKill InstE512: DW ILoadSpecialGraphics : DW $8000 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $1000 : DB $13 .end DW $0001 : DW DrawA2B5 DW IKill InstE54D: DW ILoadSpecialGraphics : DW $8B00 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $1000 : DB $0E .end DW $0001 : DW DrawA2B5 DW IKill InstE588: DW ILoadSpecialGraphics : DW $8C00 : DB $00, $03, $00, $00, $00, $03, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $0002 : DB $0F .end DW $0001 : DW DrawA2B5 DW IKill InstE5C3: DW ILoadSpecialGraphics : DW $8400 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0100 : DB $0B .end DW $0001 : DW DrawA2B5 DW IKill InstE5FE: DW ILoadSpecialGraphics : DW $8A00 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $2000 : DB $0D DW ISetLiquidSpeed .end DW $0001 : DW DrawA2B5 DW IKill ;E63B Instruction E63B (0) : Set liquid speed to -20 ISetLiquidSpeed: LDA #$FFE0 STA $197C RTS InstE642: DW ILoadSpecialGraphics : DW $8D00 : DB $00, $02, $00, $00, $00, $02, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $0001 : DB $10 .end DW $0001 : DW DrawA2B5 DW IKill InstE67D: DW ILoadSpecialGraphics : DW $8F00 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $0004 : DB $11 .end DW $0001 : DW DrawA2B5 DW IKill InstE6B8: DW ILoadSpecialGraphics : DW $8200 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0002 : DB $08 .end DW $0001 : DW DrawA2B5 DW IKill InstE6F3: DW ILoadSpecialGraphics : DW $8300 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IClearCharge DW IEquipPickup : DW $0001 : DB $07 DW IJSLCautious : DL $91D4E4 .end DW $0001 : DW DrawA2B5 DW IKill InstE735: DW ILoadSpecialGraphics : DW $8100 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IClearCharge DW IEquipPickup : DW $0020 : DB $1A DW IJSLCautious : DL $91D5BA .end DW $0001 : DW DrawA2B5 DW IKill InstE777: DW ILoadSpecialGraphics : DW $8900 : DB $01, $01, $00, $00, $03, $03, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IXRayPickup : DW $8000 .end DW $0001 : DW DrawA2B5 DW IKill InstE7B1: DW ILoadSpecialGraphics : DW $8E00 : DB $00, $01, $00, $00, $00, $01, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $0008 : DB $12 .end DW $0001 : DW DrawA2B5 DW IKill InstE7EC: DW ILoadSpecialGraphics : DW $8800 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IGrapplePickup : DW $4000 .end DW $0001 : DW DrawA2B5 DW IKill InstE826: DW ILoadSpecialGraphics : DW $8600 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0200 : DB $0C .end DW $0001 : DW DrawA2B5 DW IKill InstE861: DW ILoadSpecialGraphics : DW $8500 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0008 : DB $0A .end DW $0001 : DW DrawA2B5 DW IKill InstE89C: DW ILoadSpecialGraphics : DW $8700 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0002 : DB $09 .end DW $0001 : DW DrawA2B5 DW IKill InstE8D7: DW ILoadSpecialGraphics : DW $9000 : DB $00, $00, $00, $00, $00, $00, $00, $00 DW IBranchItem : DW .end DW IJSR : DW InstDFAF DW IJSR : DW InstDFC7 DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoTo : DW .loop .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IReservePickup : DW $0064 .end DW $0001 : DW DrawA2B5 DW IKill InstE911: DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW $0004 : DW DrawA2DF DW $0004 : DW DrawA2E5 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW InstE911 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEnergyPickup : DW $0064 .end DW IJSR : DW InstE032 DW IGoTo : DW InstE911 InstE949: DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW $0004 : DW DrawA2EB DW $0004 : DW DrawA2F1 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW InstE949 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IMissilePickup : DW $0005 .end DW IJSR : DW InstE032 DW IGoTo : DW InstE949 InstE981: DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW $0004 : DW DrawA2F7 DW $0004 : DW DrawA2FD DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW InstE981 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW ISuperPickup : DW $0005 .end DW IJSR : DW InstE032 DW IGoTo : DW InstE981 InstE9B9: DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW $0004 : DW DrawA303 DW $0004 : DW DrawA309 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW InstE9B9 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IPowerBombPickup : DW $0005 .end DW IJSR : DW InstE032 DW IGoTo : DW InstE9B9 InstE9F1: DW ILoadSpecialGraphics : DW $8000 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $1000 : DB $13 .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstEA32: DW ILoadSpecialGraphics : DW $8B00 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $1000 : DB $0E .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstEA73: DW ILoadSpecialGraphics : DW $8C00 : DB $00, $03, $00, $00, $00, $03, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $0002 : DB $0F .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstEAB4: DW ILoadSpecialGraphics : DW $8400 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0100 : DB $0B .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstEAF5: DW ILoadSpecialGraphics : DW $8A00 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $2000 : DB $0D .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstEB36: DW ILoadSpecialGraphics : DW $8D00 : DB $00, $02, $00, $00, $00, $02, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $0001 : DB $10 .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstEB77: DW ILoadSpecialGraphics : DW $8F00 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $0004 : DB $11 .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstEBB8: DW ILoadSpecialGraphics : DW $8200 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0002 : DB $08 .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstEBF9: DW ILoadSpecialGraphics : DW $8300 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IClearCharge DW IEquipPickup : DW $0001 : DB $07 DW IJSLCautious : DL $91D4E4 .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstEC41: DW ILoadSpecialGraphics : DW $8100 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IClearCharge DW IEquipPickup : DW $0020 : DB $1A DW IJSLCautious : DL $91D5BA .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstEC89: DW ILoadSpecialGraphics : DW $8900 : DB $01, $01, $00, $00, $03, $03, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IXRayPickup : DW $8000 .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstECC9: DW ILoadSpecialGraphics : DW $8E00 : DB $00, $01, $00, $00, $00, $01, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IBeamPickup : DW $0008 : DB $12 .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstED0A: DW ILoadSpecialGraphics : DW $8800 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IGrapplePickup : DW $4000 .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstED4A: DW ILoadSpecialGraphics : DW $8600 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0200 : DB $0C .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstED8B: DW ILoadSpecialGraphics : DW $8500 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0008 : DB $0A .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstEDCC: DW ILoadSpecialGraphics : DW $8700 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IEquipPickup : DW $0002 : DB $09 .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 InstEE0D: DW ILoadSpecialGraphics : DW $9000 : DB $00, $00, $00, $00, $00, $00, $00, $00 .loop2 DW IJSR : DW InstE007 DW IBranchItem : DW .end DW ISetGoTo : DW .trigger DW ISetPreInstructionCode : DW CodeDF89 DW ISetCounter8 : DB $16 .loop DW IDrawCustom1 DW IDrawCustom2 DW IGoToDecrement : DW .loop DW IJSR : DW InstE020 DW IGoTo : DW .loop2 .trigger DW ISetItem DW IPlayTrackNow : DB $02 DW IReservePickup : DW $0064 .end DW IJSR : DW InstE032 DW IGoTo : DW .loop2 } ; Setups { SetupEE4D: ;Set variable, set block, increment a global counter LDA #$0008 BRA SetupEE5C_merge SetupEE52: ;Set variable, set block, increment a global counter LDA #$000A BRA SetupEE5C_merge SetupEE57: ;Set variable, set block, increment a global counter LDA #$000C BRA SetupEE5C_merge SetupEE5C: ;Set variable, set block, increment a global counter LDA #$000E .merge TYX STA $7EDF0C, X SetupEE64: ;Set block, increment a global counter LDX $1C87, Y LDA #$0045 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDA $7ED91A INC A STA $7ED91A RTS SetupEE77: ;Set variable, set and store block, increment a global counter LDA #$0008 BRA SetupEE86_merge SetupEE7C: ;Set variable, set and store block, increment a global counter LDA #$000A BRA SetupEE86_merge SetupEE81: ;Set variable, set and store block, increment a global counter LDA #$000C BRA SetupEE86_merge SetupEE86: ;Set variable, set and store block, increment a global counter LDA #$000E .merge TYX STA $7EDF0C, X SetupEE8E: LDX $1C87, Y LDA #$C045 JSR WriteBlockTypeBTS ; $202B4 IN ROM LDX $1C87, Y LDA $7F0002, X STA $1E17, Y LDA $7ED91A INC A STA $7ED91A RTS SetupEEAB: ;Find the PLM on this spot and alert it that Samus touched it? LDA $0A78 BNE ++ TYX LDA $1C87, X STZ $1C87, X LDX #$004E - CMP $1C87, X BEQ + DEX DEX BPL - DB $00 ;Manual BRK + LDA #$00FF STA $1D77,X CLC RTS ++ LDA #$0000 STA $1C37,Y RTS } ; PLM entries { PLMEED3: : %rename(EED3) DW SetupEEAB, InstDoNotMake PLMEED7: : %rename(EED7) DW SetupEE4D, InstE099 PLMEEDB: : %rename(EEDB) DW SetupEE52, InstE0BE PLMEEDF: : %rename(EEDF) DW SetupEE57, InstE0E3 PLMEEE3: : %rename(EEE3) DW SetupEE5C, InstE108 PLMEEE7: : %rename(EEE7) DW SetupEE64, InstE12D PLMEEEB: : %rename(EEEB) DW SetupEE64, InstE15B PLMEEEF: : %rename(EEEF) DW SetupEE64, InstE189 PLMEEF3: : %rename(EEF3) DW SetupEE64, InstE1B7 PLMEEF7: : %rename(EEF7) DW SetupEE64, InstE1E5 PLMEEFB: : %rename(EEFB) DW SetupEE64, InstE213 PLMEEFF: : %rename(EEFF) DW SetupEE64, InstE241 PLMEF03: : %rename(EF03) DW SetupEE64, InstE26F PLMEF07: : %rename(EF07) DW SetupEE64, InstE2A1 PLMEF0B: : %rename(EF0B) DW SetupEE64, InstE2D6 PLMEF0F: : %rename(EF0F) DW SetupEE64, InstE30B PLMEF13: : %rename(EF13) DW SetupEE64, InstE338 PLMEF17: : %rename(EF17) DW SetupEE64, InstE366 PLMEF1B: : %rename(EF1B) DW SetupEE64, InstE393 PLMEF1F: : %rename(EF1F) DW SetupEE64, InstE3C1 PLMEF23: : %rename(EF23) DW SetupEE64, InstE3EF PLMEF27: : %rename(EF27) DW SetupEE64, InstE41D PLMEF2B: : %rename(EF2B) DW SetupEE4D, InstE44A PLMEF2F: : %rename(EF2F) DW SetupEE52, InstE47C PLMEF33: : %rename(EF33) DW SetupEE57, InstE4AE PLMEF37: : %rename(EF37) DW SetupEE5C, InstE4E0 PLMEF3B: : %rename(EF3B) DW SetupEE64, InstE512 PLMEF3F: : %rename(EF3F) DW SetupEE64, InstE54D PLMEF43: : %rename(EF43) DW SetupEE64, InstE588 PLMEF47: : %rename(EF47) DW SetupEE64, InstE5C3 PLMEF4B: : %rename(EF4B) DW SetupEE64, InstE5FE PLMEF4F: : %rename(EF4F) DW SetupEE64, InstE642 PLMEF53: : %rename(EF53) DW SetupEE64, InstE67D PLMEF57: : %rename(EF57) DW SetupEE64, InstE6B8 PLMEF5B: : %rename(EF5B) DW SetupEE64, InstE6F3 PLMEF5F: : %rename(EF5F) DW SetupEE64, InstE735 PLMEF63: : %rename(EF63) DW SetupEE64, InstE777 PLMEF67: : %rename(EF67) DW SetupEE64, InstE7B1 PLMEF6B: : %rename(EF6B) DW SetupEE64, InstE7EC PLMEF6F: : %rename(EF6F) DW SetupEE64, InstE826 PLMEF73: : %rename(EF73) DW SetupEE64, InstE861 PLMEF77: : %rename(EF77) DW SetupEE64, InstE89C PLMEF7B: : %rename(EF7B) DW SetupEE64, InstE8D7 PLMEF7F: : %rename(EF7F) DW SetupEE77, InstE911 PLMEF83: : %rename(EF83) DW SetupEE7C, InstE949 PLMEF87: : %rename(EF87) DW SetupEE81, InstE981 PLMEF8B: : %rename(EF8B) DW SetupEE86, InstE9B9 PLMEF8F: : %rename(EF8F) DW SetupEE8E, InstE9F1 PLMEF93: : %rename(EF93) DW SetupEE8E, InstEA32 PLMEF97: : %rename(EF97) DW SetupEE8E, InstEA73 PLMEF9B: : %rename(EF9B) DW SetupEE8E, InstEAB4 PLMEF9F: : %rename(EF9F) DW SetupEE8E, InstEAF5 PLMEFA3: : %rename(EFA3) DW SetupEE8E, InstEB36 PLMEFA7: : %rename(EFA7) DW SetupEE8E, InstEB77 PLMEFAB: : %rename(EFAB) DW SetupEE8E, InstEBB8 PLMEFAF: : %rename(EFAF) DW SetupEE8E, InstEBF9 PLMEFB3: : %rename(EFB3) DW SetupEE8E, InstEC41 PLMEFB7: : %rename(EFB7) DW SetupEE8E, InstEC89 PLMEFBB: : %rename(EFBB) DW SetupEE8E, InstECC9 PLMEFBF: : %rename(EFBF) DW SetupEE8E, InstED0A PLMEFC3: : %rename(EFC3) DW SetupEE8E, InstED4A PLMEFC7: : %rename(EFC7) DW SetupEE8E, InstED8B PLMEFCB: : %rename(EFCB) DW SetupEE8E, InstEDCC PLMEFCF: : %rename(EFCF) DW SetupEE8E, InstEE0D } ;EFD3: End of Bank 84 data ;Clear rest of bank. Leave this commented unless you have ALL PLM information stored in this file. ;padbyte $FF : pad $84FFFF : DB $FF { ;External pointers to stuff in bank 84. ... this is going to be fairly nightmarish org $AAD3B5 JSL GTColors org $80A167 JSL CustomGraphic org $82E26B JSL ClearSoundCheckFull org $82E75A JSL CheckPlayJumpSound org $86A6D0 JSL GetPLMCoordinate org $86A767 JSL GetPLMCoordinate org $86B636 JSL GetPLMCoordinate org $86B686 JSL GetPLMCoordinate org $86CDF9 JSL GetPLMCoordinate org $86D6A8 JSL GetPLMCoordinate org $86D6CC JSL GetPLMCoordinate org $86D777 JSL GetPLMCoordinate org $86E4D9 JSL GetPLMCoordinate org $86E5E2 JSL GetPLMCoordinate org $86E6B0 JSL GetPLMCoordinate org $91CCB9 JSL XRaySpecialGraphics org $828094 JSL EnablePLMs org $91E347 JSL EnablePLMs org $91E235 JSL DisablePLMs org $80A0B6 JSL ClearPLMs org $82E4BD JSL ClearPLMs ;TODO: Check these for unique PLM ID's? ... last thing to do. org $80A11A JSL SpawnPLMSpecific : skip 2 : DW PLMB7EB org $88DB93 JSL SpawnPLMSpecific : skip 2 : DW PLMB777 org $88DC99 JSL SpawnPLMSpecific : skip 2 : DW PLMB773 org $8F9194 JSL SpawnPLMSpecific : skip 2 : DW PLMBB30 org $8F91A9 JSL SpawnPLMSpecific : skip 2 : DW PLMB964 org $8F91B2 JSL SpawnPLMSpecific : skip 2 : DW PLMB9ED org $8FB978 JSL SpawnPLMSpecific : skip 2 : DW PLMB64B org $8FC8D3 JSL SpawnPLMSpecific : skip 2 : DW PLMB8EB org $8FC953 JSL SpawnPLMSpecific : skip 2 : DW PLMB968 org $8FC96E JSL SpawnPLMSpecific : skip 2 : DW PLMBA48 org $8FE1DF JSL SpawnPLMSpecific : skip 2 : DW PLMB64F org $8FE288 JSL SpawnPLMSpecific : skip 2 : DW PLMB8F9 org $8FE2AD JSL SpawnPLMSpecific : skip 2 : DW PLMB8F9 org $A48AF6 JSL SpawnPLMSpecific : skip 2 : DW PLMB753 org $A48AFE JSL SpawnPLMSpecific : skip 2 : DW PLMB753 org $A48B06 JSL SpawnPLMSpecific : skip 2 : DW PLMB747 org $A48DBE JSL SpawnPLMSpecific : skip 2 : DW PLMB74B org $A48E07 JSL SpawnPLMSpecific : skip 2 : DW PLMB74B org $A48E0F JSL SpawnPLMSpecific : skip 2 : DW PLMB74B org $A48E9F JSL SpawnPLMSpecific : skip 2 : DW PLMB757 org $A48EE5 JSL SpawnPLMSpecific : skip 2 : DW PLMB74F org $A48EED JSL SpawnPLMSpecific : skip 2 : DW PLMB74F org $A48EF5 JSL SpawnPLMSpecific : skip 2 : DW PLMB74F org $A48EFD JSL SpawnPLMSpecific : skip 2 : DW PLMB74F org $A48F05 JSL SpawnPLMSpecific : skip 2 : DW PLMB74F org $A48F0D JSL SpawnPLMSpecific : skip 2 : DW PLMB74F org $A48F15 JSL SpawnPLMSpecific : skip 2 : DW PLMB74F org $A48F1D JSL SpawnPLMSpecific : skip 2 : DW PLMB74F org $A48F25 JSL SpawnPLMSpecific : skip 2 : DW PLMB74F org $A48F2D JSL SpawnPLMSpecific : skip 2 : DW PLMB74F org $A490D0 JSL SpawnPLMSpecific : skip 2 : DW PLMB753 org $A497EB JSL SpawnPLMSpecific : skip 2 : DW PLMB757 org $A4996A JSL SpawnPLMSpecific : skip 2 : DW PLMB753 org $A49972 JSL SpawnPLMSpecific : skip 2 : DW PLMB757 org $A4997A JSL SpawnPLMSpecific : skip 2 : DW PLMB747 org $A49B3A JSL SpawnPLMSpecific : skip 2 : DW PLMB753 org $A49B70 JSL SpawnPLMSpecific : skip 2 : DW PLMB753 org $A5EAB3 JSL SpawnPLMSpecific : skip 2 : DW PLMB793 org $A5EE41 JSL SpawnPLMSpecific : skip 2 : DW PLMB78F org $A7ACD7 JSL SpawnPLMSpecific : skip 2 : DW PLMB7A3 org $A7ACE2 JSL SpawnPLMSpecific : skip 2 : DW PLMB7AB org $A7ACED JSL SpawnPLMSpecific : skip 2 : DW PLMB7B3 org $A7ACF8 JSL SpawnPLMSpecific : skip 2 : DW PLMB7AB org $A7AD03 JSL SpawnPLMSpecific : skip 2 : DW PLMB7B3 org $A7AD0E JSL SpawnPLMSpecific : skip 2 : DW PLMB7B3 org $A7AD19 JSL SpawnPLMSpecific : skip 2 : DW PLMB7AB org $A7AD24 JSL SpawnPLMSpecific : skip 2 : DW PLMB7B3 org $A7AD2F JSL SpawnPLMSpecific : skip 2 : DW PLMB7AB org $A7C0BD JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C0C5 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C0CD JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C0D5 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C0DD JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C0E5 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C0ED JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C0F5 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C0FD JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C106 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C10E JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C116 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C11E JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C126 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C12F JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C137 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C13F JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C147 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C14F JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C157 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C15F JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C168 JSL SpawnPLMSpecific : skip 2 : DW PLMB7B7 org $A7C171 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C17A JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C182 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C18A JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C192 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C19A JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C1A2 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C1AA JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C1B2 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C1BA JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C1C2 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C1CA JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C1D2 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C1DA JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C1E2 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C1EA JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C1F2 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BB org $A7C3F0 JSL SpawnPLMSpecific : skip 2 : DW PLMB7BF org $A7C69E JSL SpawnPLMSpecific : skip 2 : DW PLMB7A7 org $A7C6B4 JSL SpawnPLMSpecific : skip 2 : DW PLMB7A7 org $A7C6CA JSL SpawnPLMSpecific : skip 2 : DW PLMB7AF org $A7C6E0 JSL SpawnPLMSpecific : skip 2 : DW PLMB7A7 org $A7C6F6 JSL SpawnPLMSpecific : skip 2 : DW PLMB7AF org $A7C70C JSL SpawnPLMSpecific : skip 2 : DW PLMB7AF org $A7D4E5 JSL SpawnPLMSpecific : skip 2 : DW PLMB781 org $A7DB89 JSL SpawnPLMSpecific : skip 2 : DW PLMB78B org $A988A9 JSL SpawnPLMSpecific : skip 2 : DW PLMB6B3 org $A9896E JSL SpawnPLMSpecific : skip 2 : DW PLMB6C3 org $A989A0 JSL SpawnPLMSpecific : skip 2 : DW PLMB6B3 org $A989D2 JSL SpawnPLMSpecific : skip 2 : DW PLMB6B3 org $A989FA JSL SpawnPLMSpecific : skip 2 : DW PLMB6C7 org $A98A22 JSL SpawnPLMSpecific : skip 2 : DW PLMB6BB org $A98A54 JSL SpawnPLMSpecific : skip 2 : DW PLMB6B7 org $A98A86 JSL SpawnPLMSpecific : skip 2 : DW PLMB6B7 org $A98AAE JSL SpawnPLMSpecific : skip 2 : DW PLMB6BB org $A98AD6 JSL SpawnPLMSpecific : skip 2 : DW PLMB6BF org $A98C87 JSL SpawnPLMSpecific : skip 2 : DW PLMB67B org $A98C8F JSL SpawnPLMSpecific : skip 2 : DW PLMB67F org $A98C9E JSL SpawnPLMSpecific : skip 2 : DW PLMB683 org $A98CA6 JSL SpawnPLMSpecific : skip 2 : DW PLMB687 org $A98CB5 JSL SpawnPLMSpecific : skip 2 : DW PLMB68B org $A98CBD JSL SpawnPLMSpecific : skip 2 : DW PLMB68F org $A98CCC JSL SpawnPLMSpecific : skip 2 : DW PLMB693 org $A98CD4 JSL SpawnPLMSpecific : skip 2 : DW PLMB697 org $A98CE3 JSL SpawnPLMSpecific : skip 2 : DW PLMB69B org $A98CEB JSL SpawnPLMSpecific : skip 2 : DW PLMB69F org $A98CFA JSL SpawnPLMSpecific : skip 2 : DW PLMB6A3 org $A98D02 JSL SpawnPLMSpecific : skip 2 : DW PLMB6A7 org $A9B333 JSL SpawnPLMSpecific : skip 2 : DW PLMB677 org $A9F00A JSL SpawnPLMSpecific : skip 2 : DW PLMB767 org $A9F012 JSL SpawnPLMSpecific : skip 2 : DW PLMB767 org $A9F16F JSL SpawnPLMSpecific : skip 2 : DW PLMB763 org $A9F177 JSL SpawnPLMSpecific : skip 2 : DW PLMB763 org $AAE70D JSL SpawnPLMSpecific : skip 2 : DW PLMD6FC org $AAE773 JSL SpawnPLMSpecific : skip 2 : DW PLMD6EE org $AAE77B JSL SpawnPLMSpecific : skip 2 : DW PLMD6FC org $AAE799 JSL SpawnPLMSpecific : skip 2 : DW PLMD6D6 org $ADE3BE JSL SpawnPLMSpecific : skip 2 : DW PLMB673 org $ADE3C6 JSL SpawnPLMSpecific : skip 2 : DW PLMB673 org $B3958F JSL SpawnPLMSpecific : skip 2 : DW PLMB797 org $B39ADD JSL SpawnPLMSpecific : skip 2 : DW PLMB79B org $82E8C9 JSL LoadRoomPLMs org $82E915 JSL LoadRoomPLMs org $82EB7F JSL LoadRoomPLMs org $949081 JSL SpawnPLMGeneral org $949098 JSL SpawnPLMGeneral org $9490AF JSL SpawnPLMGeneral org $9490C6 JSL SpawnPLMGeneral org $9490DD JSL SpawnPLMGeneral org $9490F8 JSL SpawnPLMGeneral org $949114 JSL SpawnPLMGeneral org $94912F JSL SpawnPLMGeneral org $94930B JSL SpawnPLMGeneral org $949325 JSL SpawnPLMGeneral org $94933F JSL SpawnPLMGeneral org $94935E JSL SpawnPLMGeneral org $949961 JSL SpawnPLMGeneral org $949B3B JSL SpawnPLMGeneral org $949D83 JSL SpawnPLMGeneral org $949D9C JSL SpawnPLMGeneral org $949E67 JSL SpawnPLMGeneral org $949E85 JSL SpawnPLMGeneral org $949E9E JSL SpawnPLMGeneral org $949FE8 JSL SpawnPLMGeneral org $94A006 JSL SpawnPLMGeneral org $94A7E9 JSL SpawnPLMGeneral org $94A80F JSL SpawnPLMGeneral org $A0C2D2 JSL SpawnPLMGeneral org $AAE5C3 JSL SpawnPLMGeneral ;SpawnPLMGeneral tables org $949139 DW PLMD044, PLMD048, PLMD04C, PLMD050, PLMD054, PLMD058, PLMD05C, PLMD060, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMD038, PLMD040 DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMC83E, PLMEED3, PLMB6FF, PLMB6D7, PLMB6DB, PLMB6E3, PLMB6E7, PLMB6EF, PLMB6F3, PLMB76B, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB633, PLMB633, PLMD030, PLMD034, PLMD03C, PLMD040, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMD6DA, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMD6F2, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB72B, PLMB72B, PLMB72B, PLMB737, PLMB73B, PLMB73F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F org $94936B DW PLMD098, PLMD09C, PLMD0A0, PLMD0A4, PLMD0A8, PLMD0AC, PLMD0B0, PLMD0B4, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F org $94995E LDA #PLMB6FF org $949A06 DW PLMB70F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB6CB, PLMB6CF, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB653, PLMB657, PLMB65B, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB713, PLMB713, PLMB713, PLMB71F, PLMB723, PLMB727, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB70F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F org $949DA4 DW PLMCFFC, PLMD000, PLMD004, PLMD008, PLMCFFC, PLMD000, PLMD004, PLMD008, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMD024, PLMD024 DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMD024, PLMD024, PLMD024, PLMD024, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F org $949EA6 DW PLMD064, PLMD068, PLMD06C, PLMD070, PLMD074, PLMD078, PLMD07C, PLMD080, PLMD084, PLMD088, PLMD08C, PLMD090, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB974, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW DoorC8A2, DoorC8A8, DoorC8AE, DoorC8B4, PLMC83E, PLMEED3, PLMC816, PLMC81A, PLMC80E, PLMC812, PLMC806, PLMC80A, PLMC81E, PLMC822, PLMB62F, PLMB9C1 DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F DW PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F org $94A012 DW PLMD0B8, PLMD0BC, PLMD0C0, PLMD0C4, PLMD0C8, PLMD0CC, PLMD0D0, PLMD0D4, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F, PLMB62F org $94A7F5 DW PLMD0D8, PLMD0DC, PLMD0E0, PLMD0D8 org $94A81B DW PLMD0E4, PLMD0E4, PLMD0E4, PLMD0E8, PLMD0E4, PLMD0E4, PLMD0E4, PLMD0E4, PLMD0E4, PLMD0E4, PLMD0E4, PLMD0E4, PLMD0E4, PLMD0E4, PLMD0E4, PLMD0E4 org $A0C2F8 DW PLMD094 ;It's the only non-null entry in table A0C2DA. org $AAE5C0 LDA #PLMD113 org $828B71 JSL ProcessPLMs org $82E53C JSL ProcessPLMs ;Some misc. pseudo-room PLMs org $8FE692 DW PLMC8BE, PLMC8BA, PLMC8C6, PLMC8C2, PLMC8D0, PLMC8D0, PLMC8D0, PLMC8D0 ;bomb torizo check org $AAC6D6 CMP #PLMD6EA ;Bank 8F room PLMs start here org $8F8000 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW DoorC872 : skip 4 DW DoorC85A org $8F8026 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMDB44 : skip 4 DW DoorC848 : skip 4 DW DoorC842 : skip 4 DW DoorC842 org $8F805A DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW DoorC88A : skip 4 org $8F8104 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMDB44 : skip 4 DW DoorC848 : skip 4 DW DoorC848 : skip 4 DW DoorC848 : skip 4 DW DoorC842 : skip 4 DW DoorC84E org $8F81CC DW PLMEEE3 org $8F81D4 DW PLMB76F org $8F81DC DW DoorC842 : skip 4 DW DoorC872 : skip 4 DW PLMEEDB : skip 4 DW PLMEF83 : skip 4 DW PLMEEDB org $8F81FE DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW DoorC85A : skip 4 DW DoorC866 org $8F8230 DW PLMB703 org $8F823E DW DoorC866 org $8F8248 DW PLMEEDB org $8F8250 DW PLMB703 : skip 4 DW DoorC86C org $8F825E DW PLMB703 : skip 4 DW PLMEED7 org $8F826E DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB63F : skip 4 DW PLMB63F : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW DoorC842 : skip 4 DW DoorC848 : skip 4 DW DoorC85A org $8F830C DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB63F : skip 4 DW PLMB63F : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMDB44 : skip 4 DW DoorC842 : skip 4 DW DoorC842 : skip 4 DW DoorC842 : skip 4 DW DoorC848 org $8F83B6 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW DoorC848 org $8F83D0 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW DoorC842 : skip 4 DW DoorC848 : skip 4 DW PLMEEDB org $8F83F6 DW PLMB703 org $8F83FE DW DoorBAF4 : skip 4 DW PLMEF3B : skip 4 DW PLMD6EA org $8F8412 DW PLMDB44 : skip 4 DW DoorC848 org $8F8420 DW DoorC88A org $8F8428 DW PLMDB44 org $8F8432 DW PLMEED7 org $8F843A DW PLMB703 org $8F8444 DW PLMB6D3 org $8F844C DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMEEDB : skip 4 DW PLMEEDB : skip 4 DW DoorC88A org $8F8478 DW PLMEEDF org $8F8486 DW PLMEEDB org $8F848E DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB70B : skip 4 DW PLMEF37 : skip 4 DW DoorC890 : skip 4 DW DoorC890 : skip 4 DW DoorC88A : skip 4 DW DoorC88A : skip 4 DW DoorC890 : skip 4 DW DoorC842 org $8F84D8 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMEF33 org $8F84EC DW DoorC842 org $8F84F4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW DoorC88A : skip 4 DW PLMEEDB : skip 4 DW PLMEEDF org $8F8526 DW PLMB703 : skip 4 DW PLMEF7B : skip 4 DW PLMEF83 : skip 4 DW PLMEEDB org $8F8540 DW PLMB6D3 org $8F8548 DW DoorC878 org $8F8550 DW PLMB6EB org $8F8558 DW PLMB643 : skip 4 DW PLMB63F : skip 4 DW PLMB63F : skip 4 DW PLMB63F : skip 4 DW PLMB63F : skip 4 DW PLMB63F : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB643 : skip 4 DW PLMB643 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 org $8F85E4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMEEDB : skip 4 DW PLMEEDB : skip 4 DW PLMEF3F : skip 4 DW DoorC85A : skip 4 DW DoorC872 : skip 4 DW DoorC88A : skip 4 DW DoorC890 org $8F8634 DW DoorC848 : skip 4 DW DoorC854 org $8F8642 DW DoorC87E org $8F864A DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW DoorC842 : skip 4 DW PLMEEE3 org $8F8664 DW PLMC82A : skip 4 DW PLMC836 : skip 4 DW DoorC85A : skip 4 DW PLMEEDB org $8F867E DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMEF23 org $8F86E6 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW DoorC848 : skip 4 DW PLMEEE3 org $8F8754 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW DoorC88A org $8F878C DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMEEDB : skip 4 DW PLMEF7F org $8F87A6 DW DoorC872 org $8F87B0 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMEED7 : skip 4 DW DoorC878 org $8F87D0 DW PLMEEDF org $8F87D8 DW PLMB6DF org $8F87E0 DW DoorC878 org $8F87E8 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMEED7 org $8F8802 DW PLMEF2F org $8F880A DW PLMC82A : skip 4 DW PLMC836 : skip 4 DW DoorC848 : skip 4 DW DoorC842 org $8F8824 DW PLMEED7 org $8F882C DW PLMB76F org $8F8836 DW PLMEEDB : skip 4 DW PLMEF83 org $8F8844 DW PLMB76F org $8F884C DW PLMB76F org $8F8854 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW DoorC878 : skip 4 DW DoorC860 org $8F886E DW DoorC890 org $8F8876 DW PLMEF63 org $8F8880 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB70B : skip 4 DW PLMC82A : skip 4 DW PLMC836 : skip 4 DW DoorC878 : skip 4 DW DoorC860 : skip 4 DW DoorC878 org $8F88BE DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMEEE3 : skip 4 DW DoorC842 org $8F88D8 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMEF37 : skip 4 DW PLMEEDB org $8F891E DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW DoorC872 org $8F896E DW PLMEF53 org $8F8976 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW DoorC848 org $8F8996 DW DoorC842 : skip 4 DW PLMEF7F org $8F89A4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMEF83 org $8F89F4 DW DoorC842 : skip 4 DW DoorC848 org $8F8A02 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW DoorC872 : skip 4 DW DoorDB5A : skip 4 DW PLMDB60 : skip 4 DW PLMDB56 org $8F8A2E DW DoorC842 : skip 4 DW DoorC848 org $8F8A3E DW PLMB6DF org $8F8A46 DW PLMB6EB : skip 4 DW PLMB6DF org $8F8A54 DW DoorC848 org $8F8A5C DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 org $8F8ACA DW PLMEF5B org $8F8AD2 DW PLMB76F org $8F8ADA DW PLMB76F org $8F8AE4 DW PLMEF83 : skip 4 DW DoorC872 org $8F8AF2 DW DoorC88A org $8F8AFA DW PLMB70B : skip 4 DW DoorC878 : skip 4 DW DoorC860 : skip 4 DW DoorC890 org $8F8B14 DW PLMB703 : skip 4 DW PLMB63B org $8F8B24 DW PLMEF43 org $8F8B2C DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 org $8F8B46 DW PLMEF83 org $8F8B4E DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW DoorC87E org $8F8B9E DW DoorC854 : skip 4 DW PLMEED7 org $8F8BAC DW PLMEF47 org $8F8BB4 DW PLMC82A : skip 4 DW PLMC836 : skip 4 DW PLMEEDB org $8F8BC8 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW DoorC842 : skip 4 DW PLMEEDB : skip 4 DW PLMEED7 org $8F8BF4 DW DoorC890 org $8F8BFC DW PLMB76F org $8F8C04 DW PLMEEE3 org $8F8C0C DW DoorC88A org $8F8C14 DW PLMEEDB org $8F8C1C DW PLMC82A : skip 4 DW PLMC836 org $8F8C2A DW PLMEEDB org $8F8C36 DW PLMEF6B org $8F8C3E DW PLMEF7B : skip 4 DW PLMEF83 org $8F8C4C DW PLMB703 : skip 4 DW PLMEEDB org $8F8C5A DW DoorC878 : skip 4 DW DoorC872 : skip 4 DW PLMEEDB org $8F8C6E DW PLMB8AC : skip 4 DW PLMEF83 : skip 4 DW DoorC88A org $8F8C82 DW PLMEF4B org $8F8C8A DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW DoorC88A org $8F8CB0 DW PLMC82A : skip 4 DW PLMC836 : skip 4 DW PLMEEDB : skip 4 DW DoorC88A org $8F8CCA DW PLMEF4F org $8F8CD4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 org $8F8D1E DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMC82A : skip 4 DW PLMC836 : skip 4 DW DoorC860 org $8F8D58 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B org $8F8D80 DW PLMB703 org $8F8D88 DW PLMC82A : skip 4 DW PLMC836 org $8F8D9C DW PLMB6DF org $8F8DA6 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B org $8F8DD8 DW PLMB6D3 org $8F8DE0 DW PLMB76F org $8F8DEC DW PLMB76F org $8F8DF4 DW PLMB76F org $8F8DFC DW PLMB76F org $8F8E04 DW PLMB703 : skip 4 DW PLMB703 org $8F8E12 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB70B org $8F8E3E DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMEEDB : skip 4 DW PLMEF87 : skip 4 DW DoorC842 org $8F8E82 DW PLMC82A : skip 4 DW PLMC836 org $8F8E90 DW PLMB6DF org $8F8E98 DW DoorC842 : skip 4 DW DoorC848 org $8F8EA6 DW DoorDB4C : skip 4 DW PLMDB52 : skip 4 DW PLMDB48 org $8F8EBA DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B org $8F8ED6 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW DoorC848 : skip 4 DW PLMEEDB org $8F8F3C DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B org $8F8F7C DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMEEDB org $8F8FD2 DW PLMEEE3 org $8F8FDA DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW DoorC866 org $8F9036 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW DoorC878 : skip 4 DW PLMEEE3 org $8F90C8 DW DoorC848 org $8F90D0 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMEEDB org $8F9108 DW PLMEF7F org $8F9110 DW PLMEF73 org $8F9118 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMEED7 org $8F918C DW PLMB76F org $8FC215 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 org $8FC231 DW DoorC848 : skip 4 DW DoorC842 : skip 4 DW PLMBB05 org $8FC247 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMEEDB : skip 4 DW DoorC848 : skip 4 DW DoorC842 : skip 4 DW DoorC87E org $8FC281 DW PLMB703 : skip 4 DW PLMB63B org $8FC291 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW DoorDB5A : skip 4 DW PLMDB60 : skip 4 DW PLMDB56 org $8FC2B3 DW DoorC848 org $8FC2BF DW PLMB703 org $8FC2C9 DW PLMB76F org $8FC2D1 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMEF7B : skip 4 DW PLMEEDB : skip 4 DW DoorC848 org $8FC2FF DW DoorC848 : skip 4 DW DoorC842 : skip 4 DW DoorC84E : skip 4 DW PLMBB05 org $8FC319 DW PLMEEDB org $8FC323 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW DoorC890 org $8FC337 DW PLMEED7 org $8FC33F DW PLMB703 : skip 4 DW PLMB703 org $8FC34D DW PLMB6D3 org $8FC357 DW PLMEEDF org $8FC35F DW PLMB703 : skip 4 DW PLMEEDF org $8FC36D DW PLMEF5F org $8FC375 DW PLMB76F org $8FC37D DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMD70C : skip 4 DW DoorC88A org $8FC3E1 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMC82A : skip 4 DW PLMC836 org $8FC42B DW PLMB703 : skip 4 DW DoorC88A : skip 4 DW PLMEEDB : skip 4 DW PLMEEDF org $8FC445 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW DoorC88A org $8FC47D DW PLMEED7 : skip 4 DW PLMEF83 org $8FC48B DW PLMC82A : skip 4 DW PLMC836 org $8FC49B DW PLMB703 : skip 4 DW PLMB703 org $8FC4A9 DW PLMB703 : skip 4 DW PLMEEDF : skip 4 DW PLMEEDB org $8FC4BD DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 org $8FC4EF DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW DoorC872 org $8FC503 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMEEDB org $8FC53B DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW DoorC88A org $8FC553 DW DoorC848 : skip 4 DW PLMEF67 org $8FC563 DW PLMB70B : skip 4 DW DoorC88A org $8FC571 DW DoorC842 : skip 4 DW DoorC87E org $8FC581 DW PLMB6D3 org $8FC589 DW PLMB76F org $8FC597 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW DoorC884 org $8FC5DD DW PLMEEDB : skip 4 DW PLMEF7B org $8FC5EB DW PLMEEDB : skip 4 DW PLMEEE3 org $8FC5FD DW DoorC890 : skip 4 DW PLMEEDB : skip 4 DW PLMEEDF org $8FC611 DW DoorC842 org $8FC61B DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B org $8FC6AD DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B org $8FC6E5 DW PLMEF57 org $8FC6EF DW DoorC88A : skip 4 DW DoorC872 : skip 4 DW DoorC872 org $8FC703 DW PLMB76F org $8FC70B DW PLMB703 : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW PLMB63B : skip 4 DW DoorDB4C : skip 4 DW PLMDB52 : skip 4 DW PLMDB48 : skip 4 DW PLMEF83 org $8FC755 DW PLMEED7 org $8FC75D DW PLMB76F org $8FC765 DW PLMB6EB org $8FC773 DW PLMB703 : skip 4 DW PLMB703 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB647 : skip 4 DW PLMB703 : skip 4 DW DoorC848 org $8FC79F DW DoorC848 org $8FC7A7 DW PLMEF6F org $8FC7AF DW PLMB6DF org $8FC7BB DW DoorC842 : skip 4 DW DoorC848 : skip 4 DW PLMDF65 : skip 4 DW PLMDF59 : skip 4 DW PLMDF71 : skip 4 DW PLMDF71 org $8FC7E1 DW PLMB70B org $8FC7E9 DW PLMDB44 : skip 4 DW DoorC848 org $8FC7F7 DW PLMDB44 : skip 4 DW DoorC842 org $8FC805 DW PLMDB44 : skip 4 DW DoorC842 org $8FC813 DW PLMDB44 : skip 4 DW DoorC84E org $8FC823 DW DoorC842 : skip 4 DW DoorC848 org $8FC831 DW DoorC842 org $8FC839 DW DoorC88A org $8FC841 DW PLMB6EB : skip 4 DW PLMB6DF org $8FC84F DW PLMD6DE org $8FC857 DW DoorDB5A : skip 4 DW PLMDB60 : skip 4 DW PLMDB56 org $8FC86B DW DoorC890 org $8FC873 DW PLMB76F org $8FC87B DW PLMDB44 : skip 4 DW DoorC8CA org $8FC889 DW PLMDB44 : skip 4 DW DoorC854 org $8FC897 DW PLMDB44 : skip 4 DW DoorC848 org $8FC8A5 DW PLMDB44 : skip 4 DW DoorC848 org $8FC8B3 DW PLMB76F }