================================= EVENT BIT ARRAY 7ED820 0 0 z z z 0 0 0 | | | | | | | |__ 00 -- Zebes is awake. (Set when MB's old room is cleared.) | | | | | | |____ | | | | | |______ 02 -- Mother Brain's container has been destroyed. | | | | |________ --. Zebetites | | | |____________ | Destroyed | | |______________ --' Counter | |________________ 06 -- Phantoon statue is grey. |__________________ 07 -- Ridley statue is grey. 7ED821 0 0 0 0 0 0 0 0 | | | | | | | |__ 08 -- Draygon statue is grey. | | | | | | |____ 09 -- Kraid statue is grey. | | | | | |______ 0A -- Path to Tourian is open. | | | | |________ 0B -- Glass tube is broken. | | | |____________ 0C -- Orange Soda Chozo has lowered the lava. | | |______________ 0D -- Shaktool has cleared a path. | |________________ 0E -- The Zebes timebomb has been set. |__________________ 0F -- The Dachola and the Etecoons have been saved. 7ED822 0 0 0 0 0 0 0 0 | | | | | | | |__ 10 -- 1st metroid hallway has been cleared. | | | | | | |____ 11 -- 1st metroid shaft has been cleared. | | | | | |______ 12 -- 2nd metroid hallway has been cleared. | | | | |________ 13 -- 2nd metroid shaft has been cleared. | | | |____________ | | |______________ 15 -- Outran the Speed Booster lavaquake. | |________________ |__________________ 7E:D820 - 7E:D86F Event bit array. 30-6F are never used List of states -------------------- E5E6 STANDARD E5FF Tourian Boss 1 E612 Events 00 Zebes is awake 01 Big Metroid ate sidehopper? 02 Mother Brain's glass (is broken?) 03 Zebetite 1 (is destroied) 04 Zebetite 2 (is destroied) 05 Zebetite 3 (is destroied) 06 Phantoon Statue is grey 07 Ridley Statue is grey 08 Draygon Statue is grey 09 Kraid Statue is grey 0A Path to Tourian is open 0B Maridia tube is broken 0C Lower Norfair Chozo has lower acid 0D Shaktool cleared a path 0E Zebes timebomb set (escape imediately!) 0F Dachora and Etecoons saved 10 1st Metroid hall cleared 11 1st Metroid shaft cleared 12 2nd Metroid hall cleared 13 2nd Metroid shaft cleared 14 15 Outran Speed Booster lavaquake. 16-FF Unused/ E629 Bosses E640 Morph E652 Morph & Missiles E669 Power Bombs E678 Speed Booster === ROOM LOAD === $82/DE6F F4 00 8F PEA $8F00 $82/DE72 AB PLB $82/DE73 AB PLB $82/DE74 AE 9B 07 LDX $079B [$8F:079B] Current room mdb (Room ID in SMILE) $82/DE77 BD 00 00 LDA $0000,x[$8F:96EB] $82/DE7A 29 FF 00 AND #$00FF $82/DE7D 8D 9D 07 STA $079D [$8F:079D] First byte of room mdb, unknown (Apparently room # for this region) $82/DE80 BD 01 00 LDA $0001,x[$8F:96EC] $82/DE83 29 FF 00 AND #$00FF $82/DE86 8D 9F 07 STA $079F [$8F:079F] Region Number $82/DE89 BD 02 00 LDA $0002,x[$8F:96ED] $82/DE8C 29 FF 00 AND #$00FF $82/DE8F 8D A1 07 STA $07A1 [$8F:07A1] Room's Automap X coordinate $82/DE92 BD 03 00 LDA $0003,x[$8F:96EE] $82/DE95 29 FF 00 AND #$00FF $82/DE98 8D A3 07 STA $07A3 [$8F:07A3] Room's Automap Y coordinate $82/DE9B BD 04 00 LDA $0004,x[$8F:96EF] $82/DE9E 29 FF 00 AND #$00FF $82/DEA1 8D A9 07 STA $07A9 [$8F:07A9] Number of screens wide current room is. Used only by scrolling? (and beams) $82/DEA4 0A ASL A x2 $82/DEA5 0A ASL A x2 $82/DEA6 0A ASL A x2 $82/DEA7 0A ASL A x2 $82/DEA8 8D A5 07 STA $07A5 [$8F:07A5] Current room's width in blocks $82/DEAB BD 05 00 LDA $0005,x[$8F:96F0] $82/DEAE 29 FF 00 AND #$00FF $82/DEB1 8D AB 07 STA $07AB [$8F:07AB] Number of screens tall current room is, used by beams at the least. $82/DEB4 0A ASL A x2 $82/DEB5 0A ASL A x2 $82/DEB6 0A ASL A x2 $82/DEB7 0A ASL A x2 $82/DEB8 8D A7 07 STA $07A7 [$8F:07A7] Current room's height in blocks $82/DEBB BD 06 00 LDA $0006,x[$8F:96F1] $82/DEBE 29 FF 00 AND #$00FF $82/DEC1 8D AD 07 STA $07AD [$8F:07AD] 7th byte of room mdb. Target screen Y position for Samus while moving down (used by scrolling) $82/DEC4 BD 07 00 LDA $0007,x[$8F:96F2] $82/DEC7 29 FF 00 AND #$00FF $82/DECA 8D AF 07 STA $07AF [$8F:07AF] 8th byte of room mdb. Target screen Y position for Samus while moving up (used by scrolling) $82/DECD BD 09 00 LDA $0009,x[$8F:96F4] $82/DED0 8D B5 07 STA $07B5 [$8F:07B5] Room's doorout pointer $82/DED3 22 D2 E5 8F JSL $8FE5D2[$8F:E5D2] Jump to ROOMSTATE STUFF $82/DED7 E2 20 SEP #$20 $82/DED9 AD A5 07 LDA $07A5 [$8F:07A5] Current room's width in blocks $82/DEDC 8D 02 42 STA $4202 [$8F:4202] $4202: 1st value for multiplication $82/DEDF AD A7 07 LDA $07A7 [$8F:07A7] Current room's height in blocks $82/DEE2 8D 03 42 STA $4203 [$8F:4203] $4203: 2nd value for multiplication $82/DEE5 C2 20 REP #$20 $82/DEE7 EA NOP Wasting cycles for result... $82/DEE8 EA NOP ... $82/DEE9 EA NOP ... $82/DEEA AD 16 42 LDA $4216 [$8F:4216] The result of the above math ($4216 - $4217 = result (word)) $82/DEED 0A ASL A $82/DEEE 8D B9 07 STA $07B9 [$8F:07B9] Area of current room, in blocks $82/DEF1 60 RTS === ROOMSTATE STUFF === $8F/E5D2 8A TXA Transfer the room mdb (Room ID in SMILE) to A $8F/E5D3 18 CLC $8F/E5D4 69 0B 00 ADC #$000B $8F/E5D7 AA TAX <=== What's in X? Room ID? $8F/E5D8 BD 00 00 LDA $0000,x[$8F:96EB] $8F/E5DB 8D B7 07 STA $07B7 [$8F:07B7] Roomstate test pointer (used when testing roomstate conditions) $8F/E5DE E8 INX $8F/E5DF E8 INX $8F/E5E0 F4 D7 E5 PEA $E5D7 $8F/E5E3 6C B7 07 JMP ($07B7)[$82:E612] Jump to ROOMSTATES based on pointer in $07B7 $8F/E5E6 8E BB 07 STX $07BB [$8F:07BB] Current roomstate pointer $8F/E5E9 68 PLA $8F/E5EA 6B RTL $8F/E5EB BD 00 00 LDA $0000,x[$8F:96EB] <===Is this a table? $8F/E5EE CD 8D 07 CMP $078D [$8F:078D] DDB pointer for current room transition $8F/E5F1 D0 07 BNE $07 [$E5FA] $8F/E5F3 BD 02 00 LDA $0002,x[$8F:96ED] <===Table...? $8F/E5F6 AA TAX $8F/E5F7 4C E6 E5 JMP $E5E6 [$82:E5E6] Jump to STANDARD STATE $8F/E5FA E8 INX $8F/E5FB E8 INX $8F/E5FC E8 INX $8F/E5FD E8 INX $8F/E5FE 60 RTS === ROOMSTATES === === STANDARD STATE === $8F/E5E6 8E BB 07 STX $07BB [$8F:07BB] Current roomstate pointer $8F/E5E9 68 PLA $8F/E5EA 6B RTL === TOURIAN BOSS (E5FF) === $8F/E5FF A9 01 00 LDA #$0001 $8F/E602 22 DC 81 80 JSL $8081DC[$80:81DC] Jump to CHECK BITS $8F/E606 90 07 BCC $07 [$E60F] $8F/E608 BD 00 00 LDA $0000,x[$8F:9DD4] $8F/E60B AA TAX $8F/E60C 4C E6 E5 JMP $E5E6 [$8F:E5E6] $8F/E60F E8 INX $8F/E610 E8 INX $8F/E611 60 RTS === EVENTS (E612) === $8F/E612 BD 00 00 LDA $0000,x[$8F:96C7] $8F/E615 29 FF 00 AND #$00FF $8F/E618 22 33 82 80 JSL $808233[$80:8233] $8F/E61C 90 07 BCC $07 [$E625] $8F/E61E BD 01 00 LDA $0001,x[$8F:96C8] $8F/E621 AA TAX $8F/E622 4C E6 E5 JMP $E5E6 [$8F:E5E6] $8F/E625 E8 INX $8F/E626 E8 INX $8F/E627 E8 INX $8F/E628 60 RTS $80/8233 DA PHX $80/8234 5A PHY $80/8235 08 PHP $80/8236 C2 30 REP #$30 $80/8238 22 8E 81 80 JSL $80818E[$80:818E] $80/823C BF 20 D8 7E LDA $7ED820,x[$7E:6EE7] Event bit array. 30-6F are never used $80/8240 2D E7 05 AND $05E7 [$8F:05E7] Often used to check bits for completed tasks/picked up items $80/8243 D0 05 BNE $05 [$824A] $80/8245 28 PLP $80/8246 7A PLY $80/8247 FA PLX $80/8248 18 CLC $80/8249 6B RTL $80/818E AA TAX $80/818F 10 01 BPL $01 [$8192] ----- $80/8192 9C E7 05 STZ $05E7 [$8F:05E7] Often used to check bits for completed tasks/picked up items $80/8195 48 PHA $80/8196 29 07 00 AND #$0007 $80/8199 38 SEC $80/819A 2E E7 05 ROL $05E7 [$8F:05E7] Often used to check bits for completed tasks/picked up items $80/819D 3A DEC A $80/819E 10 FA BPL $FA [$819A] $80/81A0 68 PLA $80/81A1 4A LSR A $80/81A2 4A LSR A $80/81A3 4A LSR A $80/81A4 AA TAX $80/81A5 6B RTL === BOSSES (E629) === $8F/E629 BD 00 00 LDA $0000,x[$8F:9DD4] $8F/E62C 29 FF 00 AND #$00FF $8F/E62F 22 DC 81 80 JSL $8081DC[$80:81DC] Jump to CHECK BITS $8F/E633 90 07 BCC $07 [$E63C] $8F/E635 BD 01 00 LDA $0001,x[$8F:9DD5] $8F/E638 AA TAX $8F/E639 4C E6 E5 JMP $E5E6 [$8F:E5E6] $8F/E63C E8 INX $8F/E63D E8 INX $8F/E63E E8 INX $8F/E63F 60 RTS === CHECK BITS === $80/81DC DA PHX $80/81DD 5A PHY $80/81DE 08 PHP $80/81DF E2 20 SEP #$20 $80/81E1 8D E7 05 STA $05E7 [$8F:05E7] Often used to check bits for completed tasks/picked up items $80/81E4 AE 9F 07 LDX $079F [$8F:079F] Region Number $80/81E7 BF 28 D8 7E LDA $7ED828,x[$7E:6EF4] Boss bits. 1 byte per area (C-B-N-W-M-T-C-D) $80/81EB 2D E7 05 AND $05E7 [$8F:05E7] $80/81EE D0 05 BNE $05 [$81F5] $80/81F0 28 PLP $80/81F1 7A PLY $80/81F2 FA PLX $80/81F3 18 CLC $80/81F4 6B RTL === MORPH (E640) === $8F/E640 AD A4 09 LDA $09A4 [$8F:09A4] Collected items $8F/E643 29 04 00 AND #$0004 Morph Ball $8F/E646 F0 07 BEQ $07 [$E64F] $8F/E648 BD 00 00 LDA $0000,x[$8F:9DD4] $8F/E64B AA TAX $8F/E64C 4C E6 E5 JMP $E5E6 [$8F:E5E6] $8F/E64F E8 INX $8F/E650 E8 INX $8F/E651 60 RTS === MORPH & MISSILES (E652) === $8F/E652 AD A4 09 LDA $09A4 [$8F:09A4] Collected items $8F/E655 89 04 00 BIT #$0004 Morph Ball $8F/E658 F0 0C BEQ $0C [$E666] $8F/E65A AD C8 09 LDA $09C8 [$8F:09C8] Samus's max missiles $8F/E65D F0 07 BEQ $07 [$E666] $8F/E65F BD 00 00 LDA $0000,x[$8F:97C2] $8F/E662 AA TAX $8F/E663 4C E6 E5 JMP $E5E6 [$8F:E5E6] $8F/E666 E8 INX $8F/E667 E8 INX $8F/E668 60 RTS === POWER BOMBS (E669) === $8F/E669 AD D0 09 LDA $09D0 [$8F:09D0] Samus's max power bombs $8F/E66C F0 07 BEQ $07 [$E675] $8F/E66E BD 00 00 LDA $0000,x[$8F:9DD4] $8F/E671 AA TAX $8F/E672 4C E6 E5 JMP $E5E6 [$8F:E5E6] $8F/E675 E8 INX $8F/E676 E8 INX $8F/E677 60 RTS === SPEED BOOSTER (E678) === $8F/E678 AD A4 09 LDA $09A4 [$8F:09A4] Collected items $8F/E67B 29 00 20 AND #$2000 Speed Booster $8F/E67E F0 07 BEQ $07 [$E687] $8F/E680 BD 00 00 LDA $0000,x[$8F:9DD4] $8F/E683 AA TAX $8F/E684 4C E6 E5 JMP $E5E6 [$8F:E5E6] $8F/E687 E8 INX $8F/E688 E8 INX $8F/E689 60 RTS