;;; $4000..493D: Sprite sets ;;; { ;;; $4000: Pointers to sprite sets ;;; { ROM1:4000 dw 425F,429C,42FE,4360,4391,43C6,4476,44AB,44E8,45AC,4606,4660,46B2,425F,42CD,432F, 43EB,441C,4451,4511,4546,4583,45D9,4633,4689,46DB,4197,41B0,41C9,41E2,410F,4120, 4131,4142,41FB,4214,422D,4246,4153,4164,4175,4186,410A,4704,4735,476E,4793,47C4, 47FD,4859,4848,4827,4822,489A,489F,48A4,48B5,48C6,48D7,48E8,48F9,490A,491B,492C, 4935,40E1,40B8,4093,408A } ;;; $408A: Sprite set 44h ;;; { ROM1:408A db 00,00,36,80, 00,08,0F,80, FF } ;;; $4093: Sprite set 43h ;;; { ROM1:4093 db 00,00,C2,80, 00,08,CE,80, 00,10,CC,80, 00,18,CF,80, 00,20,CB,80, 00,28,C4,80, 00,30,D3,80, 00,38,C4,80, 00,40,C3,80, FF } ;;; $40B8: Sprite set 42h ;;; { ROM1:40B8 db 00,00,CF,00, 00,08,D1,00, 00,10,C4,00, 00,18,D2,00, 00,20,D2,00, 00,30,D2,00, 00,38,D3,00, 00,40,C0,00, 00,48,D1,00, 00,50,D3,00, FF } ;;; $40E1: Sprite set 41h ;;; { ROM1:40E1 db 00,00,ED,00, 00,08,EE,00, 00,10,EF,00, 00,18,F5,00, 00,20,F5,00, 00,30,F7,00, 00,38,F8,00, 00,40,F9,00, 00,48,FA,00, 00,50,FB,00, FF } ;;; $410A: Sprite set 2Ah ;;; { ROM1:410A db FC,FC,7E,00, FF } ;;; $410F: Sprite set 1Eh - morph ball 0 ;;; { ROM1:410F db 04,F8,59,00, 04,00,5A,00, 0C,F8,69,00, 0C,00,6A,00, FF } ;;; $4120: Sprite set 1Fh - morph ball 1 ;;; { ROM1:4120 db 03,F8,5A,20, 03,00,6A,40, 0B,F8,59,40, 0B,00,69,20, FF } ;;; $4131: Sprite set 20h - morph ball 2 ;;; { ROM1:4131 db 04,F8,6A,60, 04,00,69,60, 0C,F8,5A,60, 0C,00,59,60, FF } ;;; $4142: Sprite set 21h - morph ball 3 ;;; { ROM1:4142 db 03,F8,69,40, 03,00,59,20, 0B,F8,6A,20, 0B,00,5A,40, FF } ;;; $4153: Sprite set 26h - morph ball 4 ;;; { ROM1:4153 db 04,F8,5A,20, 04,00,59,20, 0C,F8,6A,20, 0C,00,69,20, FF } ;;; $4164: Sprite set 27h - morph ball 5 ;;; { ROM1:4164 db 03,F8,6A,60, 03,00,5A,00, 0B,F8,69,00, 0B,00,59,60, FF } ;;; $4175: Sprite set 28h - morph ball 6 ;;; { ROM1:4175 db 04,F8,69,40, 04,00,6A,40, 0C,F8,59,40, 0C,00,5A,40, FF } ;;; $4186: Sprite set 29h - morph ball 7 ;;; { ROM1:4186 db 03,F8,59,00, 03,00,69,60, 0B,F8,5A,60, 0B,00,6A,00, FF } ;;; $4197: Sprite set 1Ah - Samus spin jumping right 0 ;;; { ROM1:4197 db 00,F4,50,00, 00,FC,51,00, 00,04,52,00, 08,F4,60,00, 08,FC,61,00, 08,04,62,00, FF } ;;; $41B0: Sprite set 1Bh - Samus spin jumping right 1 ;;; { ROM1:41B0 db FC,F8,56,60, FC,00,55,60, 04,F8,64,60, 04,00,63,60, 0C,F8,54,60, 0C,00,53,60, FF } ;;; $41C9: Sprite set 1Ch - Samus spin jumping right 2 ;;; { ROM1:41C9 db 00,F4,62,60, 00,FC,61,60, 00,04,60,60, 08,F4,52,60, 08,FC,51,60, 08,04,50,60, FF } ;;; $41E2: Sprite set 1Dh - Samus spin jumping right 3 ;;; { ROM1:41E2 db FC,F8,53,00, FC,00,54,00, 04,F8,63,00, 04,00,64,00, 0C,F8,55,00, 0C,00,56,00, FF } ;;; $41FB: Sprite set 22h - Samus spin jumping left 0 ;;; { ROM1:41FB db 00,F4,52,20, 00,FC,51,20, 00,04,50,20, 08,F4,62,20, 08,FC,61,20, 08,04,60,20, FF } ;;; $4214: Sprite set 23h - Samus spin jumping left 1 ;;; { ROM1:4214 db FC,F8,55,40, FC,00,56,40, 04,F8,63,40, 04,00,64,40, 0C,F8,53,40, 0C,00,54,40, FF } ;;; $422D: Sprite set 24h - Samus spin jumping left 2 ;;; { ROM1:422D db 00,F4,60,40, 00,FC,61,40, 00,04,62,40, 08,F4,50,40, 08,FC,51,40, 08,04,52,40, FF } ;;; $4246: Sprite set 25h - Samus spin jumping left 3 ;;; { ROM1:4246 db FC,F8,54,20, FC,00,53,20, 04,F8,64,20, 04,00,63,20, 0C,F8,56,20, 0C,00,55,20, FF } ;;; $425F: Sprite set 0/Dh - Samus facing screen ;;; { ROM1:425F db EC,F4,00,00, EC,FC,01,00, EC,04,02,00, F4,F4,10,00, F4,FC,11,00, F4,04,12,00, FC,F4,20,00, FC,FC,21,00, FC,04,22,00, 04,F4,30,00, 04,FC,31,00, 04,04,32,00, 0C,F4,40,00, 0C,FC,41,00, 0C,04,42,00, FF } ;;; $429C: Sprite set 1 - Samus standing facing right ;;; { ROM1:429C db EC,F8,03,00, EC,00,04,00, F4,F8,13,00, F4,00,14,00, F9,06,09,00, FC,F8,23,00, FC,00,24,00, 04,F8,34,00, 04,00,35,00, 0C,F0,43,00, 0C,F8,44,00, 0C,00,45,00, FF } ;;; $42CD: Sprite set Eh - Samus standing facing left ;;; { ROM1:42CD db EC,F8,04,20, EC,00,06,00, F4,F8,15,00, F4,00,16,00, F9,F3,09,20, FC,F8,25,00, FC,00,26,00, 04,F8,35,20, 04,00,34,20, 0C,F8,45,20, 0C,00,44,20, 0C,08,43,20, FF } ;;; $42FE: Sprite set 2 - Samus aiming up facing right ;;; { ROM1:42FE db E6,FE,08,00, EC,F8,17,00, EC,00,18,00, F4,F8,27,00, F4,00,28,00, FC,F8,37,00, FC,00,38,00, 04,F8,34,00, 04,00,35,00, 0C,F0,43,00, 0C,F8,44,00, 0C,00,45,00, FF } ;;; $432F: Sprite set Fh - Samus aiming up facing left ;;; { ROM1:432F db E6,FA,08,00, EC,F8,47,00, EC,00,48,00, F4,F8,57,00, F4,00,58,00, FC,F8,38,20, FC,00,37,20, 04,F8,35,20, 04,00,34,20, 0C,F8,45,20, 0C,00,44,20, 0C,08,43,20, FF } ;;; $4360: Sprite set 3 - Samus running right 0 ;;; { ROM1:4360 db EC,FC,0A,00, EC,04,0B,00, F4,F4,19,00, F4,FC,1A,00, F4,04,1B,00, FC,FC,2A,00, FC,04,2B,00, 04,F4,39,00, 04,FC,3A,00, 04,04,3B,00, 0C,F4,49,00, 0C,FC,4A,00, FF } ;;; $4391: Sprite set 4 - Samus running right 1 ;;; { ROM1:4391 db EC,F9,0E,00, EC,01,04,00, F4,F9,1E,00, F4,01,1F,00, FC,EC,2E,00, FC,F4,2F,00, FC,FC,4E,00, 04,EC,3E,00, 04,F4,3F,00, 04,FC,5E,00, 04,04,5F,00, 0C,FC,6E,00, 0C,04,6F,00, FF } ;;; $43C6: Sprite set 5 - Samus running right 2 ;;; { ROM1:43C6 db EC,FC,0D,00, EC,04,0B,00, F4,F4,1C,00, F4,FC,1D,00, F4,04,0C,00, FC,FC,2D,00, 04,FC,3D,00, 0C,F4,4C,00, 0C,FC,4D,00, FF } ;;; $43EB: Sprite set 10h - Samus running left 0 ;;; { ROM1:43EB db EC,F4,0B,20, EC,FC,0A,20, F4,F4,1B,20, F4,FC,1A,20, F4,04,19,20, FC,F4,2B,20, FC,FC,2A,20, 04,F4,3B,20, 04,FC,3A,20, 04,04,39,20, 0C,FC,4A,20, 0C,04,49,20, FF } ;;; $441C: Sprite set 11h - Samus running left 1 ;;; { ROM1:441C db EC,F6,04,20, EC,FE,0E,20, F4,F6,1F,20, F4,FE,1E,20, FC,FC,4E,20, FC,04,2F,20, FC,0C,2E,20, 04,F4,5F,20, 04,FC,5E,20, 04,04,3F,20, 04,0C,3E,20, 0C,F4,6F,20, 0C,FC,6E,20, FF } ;;; $4451: Sprite set 12h - Samus running left 2 ;;; { ROM1:4451 db EC,F4,0B,20, EC,FC,0D,20, F4,F4,0C,20, F4,FC,1D,20, F4,04,1C,20, FC,FC,2D,20, 04,FC,3D,20, 0C,FC,4D,20, 0C,04,4C,20, FF } ;;; $4476: Sprite set 6 - Samus running shooting right 0 ;;; { ROM1:4476 db EC,FC,0A,00, EC,04,0B,00, F4,F4,19,00, F4,FC,1A,00, F4,04,66,00, F5,0B,09,00, FC,FC,2A,00, FC,04,2B,00, 04,F4,39,00, 04,FC,3A,00, 04,04,3B,00, 0C,F4,49,00, 0C,FC,4A,00, FF } ;;; $44AB: Sprite set 7 - Samus running shooting right 1 ;;; { ROM1:44AB db ED,FB,0A,00, ED,03,0B,00, F5,F3,19,00, F5,FB,1A,00, F5,03,66,00, F6,0A,09,00, FC,EC,2E,00, FC,F4,2F,00, FC,FC,4E,00, 04,EC,3E,00, 04,F4,3F,00, 04,FC,5E,00, 04,04,5F,00, 0C,FC,6E,00, 0C,04,6F,00, FF } ;;; $44E8: Sprite set 8 - Samus running shooting right 2 ;;; { ROM1:44E8 db EC,FC,0A,00, EC,04,0B,00, F4,F4,19,00, F4,FC,1A,00, F4,04,66,00, F5,0B,09,00, FC,FC,2D,00, 04,FC,3D,00, 0C,F4,4C,00, 0C,FC,4D,00, FF } ;;; $4511: Sprite set 13h - Samus running shooting left 0 ;;; { ROM1:4511 db EC,F4,0B,20, EC,FC,0D,20, F4,F4,2C,20, F4,FC,1D,20, F4,04,1C,20, F5,ED,09,20, FC,F4,2B,20, FC,FC,2A,20, 04,F4,3B,20, 04,FC,3A,20, 04,04,39,20, 0C,FC,4A,20, 0C,04,49,20, FF } ;;; $4546: Sprite set 14h - Samus running shooting left 1 ;;; { ROM1:4546 db ED,F5,0B,20, ED,FD,0D,20, F5,F5,2C,20, F5,FD,1D,20, F5,05,1C,20, F6,EE,09,20, FC,FC,4E,20, FC,04,2F,20, FC,0C,2E,20, 04,F4,5F,20, 04,FC,5E,20, 04,04,3F,20, 04,0C,3E,20, 0C,F4,6F,20, 0C,FC,6E,20, FF } ;;; $4583: Sprite set 15h - Samus running shooting left 2 ;;; { ROM1:4583 db EC,F4,0B,20, EC,FC,0D,20, F4,F4,2C,20, F4,FC,1D,20, F4,04,1C,20, F5,ED,09,20, FC,FC,2D,20, 04,FC,3D,20, 0C,FC,4D,20, 0C,04,4C,20, FF } ;;; $45AC: Sprite set 9 - Samus jumping facing right ;;; { ROM1:45AC db F4,F8,03,00, F4,00,04,00, FC,F8,13,00, FC,00,14,00, 01,06,09,00, 04,F0,4F,00, 04,F8,5C,00, 04,00,5D,00, 0C,F0,6B,00, 0C,F8,6C,00, 0C,00,6D,00, FF } ;;; $45D9: Sprite set 16h - Samus jumping facing left ;;; { ROM1:45D9 db F4,F8,04,20, F4,00,06,00, FC,F8,15,00, FC,00,16,00, 01,F2,09,20, 04,F8,5B,20, 04,00,4B,20, 04,08,4F,20, 0C,F8,6D,20, 0C,00,6C,20, 0C,08,6B,20, FF } ;;; $4606: Sprite set Ah - Samus jumping aiming up facing right ;;; { ROM1:4606 db EF,FE,08,00, F4,F8,17,00, F4,00,18,00, FC,F8,27,00, FC,00,28,00, 04,F0,4F,00, 04,F8,5C,00, 04,00,46,00, 0C,F0,6B,00, 0C,F8,6C,00, 0C,00,6D,00, FF } ;;; $4633: Sprite set 17h - Samus jumping aiming up facing left ;;; { ROM1:4633 db EF,FA,08,00, F4,F8,47,00, F4,00,48,00, FC,F8,57,00, FC,00,58,00, 04,F8,46,20, 04,00,5C,20, 04,08,4F,20, 0C,F8,6D,20, 0C,00,6C,20, 0C,08,6B,20, FF } ;;; $4660: Sprite set Bh ;;; { ROM1:4660 db F6,F8,03,00, F6,00,04,00, FE,F8,13,00, FE,00,14,00, 03,06,09,00, 04,F8,67,00, 04,00,68,00, 0C,F0,76,00, 0C,F8,77,00, 0C,00,78,00, FF } ;;; $4689: Sprite set 18h ;;; { ROM1:4689 db F6,F8,04,20, F6,00,06,00, FE,F8,15,00, FE,00,16,00, 03,F3,09,20, 04,F8,7A,20, 04,00,79,20, 0C,F8,78,20, 0C,00,77,20, 0C,08,76,20, FF } ;;; $46B2: Sprite set Ch ;;; { ROM1:46B2 db F4,F8,70,00, F4,00,71,00, FC,F8,72,00, FC,00,73,00, 04,F0,4F,00, 04,F8,74,00, 04,00,75,00, 0C,F0,6B,00, 0C,F8,6C,00, 0C,00,3C,00, FF } ;;; $46DB: Sprite set 19h ;;; { ROM1:46DB db F4,F8,71,20, F4,00,70,20, FC,F8,73,20, FC,00,72,20, 04,F8,65,20, 04,00,74,20, 04,08,4F,20, 0C,F8,3C,20, 0C,00,6C,20, 0C,08,6B,20, FF } ;;; $4704: Sprite set 2Bh ;;; { ROM1:4704 db E6,FE,08,00, EC,F8,17,00, EC,00,18,00, F4,F8,27,00, F4,00,28,00, FC,FB,2A,00, FC,03,2B,00, 04,F3,39,00, 04,FB,3A,00, 04,03,3B,00, 0C,F3,49,00, 0C,FB,4A,00, FF } ;;; $4735: Sprite set 2Ch ;;; { ROM1:4735 db E7,FE,08,00, ED,F8,17,00, ED,00,18,00, F5,F8,27,00, F5,00,28,00, FC,EB,2E,00, FC,F3,2F,00, FC,FB,4E,00, 04,EB,3E,00, 04,F3,3F,00, 04,FB,5E,00, 04,03,5F,00, 0C,FB,6E,00, 0C,03,6F,00, FF } ;;; $476E: Sprite set 2Dh ;;; { ROM1:476E db E6,FE,08,00, EC,F8,17,00, EC,00,18,00, F4,F8,27,00, F4,00,28,00, FC,FB,2D,00, 04,FB,3D,00, 0C,F3,4C,00, 0C,FB,4D,00, FF } ;;; $4793: Sprite set 2Eh ;;; { ROM1:4793 db E6,FA,08,00, EC,F8,47,00, EC,00,48,00, F4,F8,57,00, F4,00,58,00, FC,F5,2B,20, FC,FD,2A,20, 04,F5,3B,20, 04,FD,3A,20, 04,05,39,20, 0C,FD,4A,20, 0C,05,49,20, FF } ;;; $47C4: Sprite set 2Fh ;;; { ROM1:47C4 db E7,FA,08,00, ED,F8,47,00, ED,00,48,00, F5,F8,57,00, F5,00,58,00, FC,FD,4E,20, FC,05,2F,20, FC,0D,2E,20, 04,F5,5F,20, 04,FD,5E,20, 04,05,3F,20, 04,0D,3E,20, 0C,F5,6F,20, 0C,FD,6E,20, FF } ;;; $47FD: Sprite set 30h ;;; { ROM1:47FD db E6,FA,08,00, EC,F8,47,00, EC,00,48,00, F4,F8,57,00, F4,00,58,00, FC,FD,2D,20, 04,FD,3D,20, 0C,FD,4D,20, 0C,05,4C,20, FF } ;;; $4822: Sprite set 34h ;;; { ROM1:4822 db FC,FC,8E,00, FF } ;;; $4827: Sprite set 33h ;;; { ROM1:4827 db F4,F4,8B,00, F4,FC,8C,00, F4,04,8B,20, FC,F4,8D,00, FC,04,8D,20, 04,F4,8B,40, 04,FC,8C,40, 04,04,8B,60, FF } ;;; $4848: Sprite set 32h ;;; { ROM1:4848 db F8,F8,84,00, F8,00,84,20, 00,F8,84,40, 00,00,84,60, FF } ;;; $4859: Sprite set 31h ;;; { ROM1:4859 db F0,F0,80,00, F0,F8,81,00, F0,00,81,20, F0,08,80,20, F8,F0,82,00, F8,F8,83,00, F8,00,83,20, F8,08,82,20, 00,F0,82,40, 00,F8,83,40, 00,00,83,60, 00,08,82,60, 08,F0,80,40, 08,F8,81,40, 08,00,81,60, 08,08,80,60, FF } ;;; $489A: Sprite set 35h - bomb 0 ;;; { ROM1:489A db FC,FC,90,00, FF } ;;; $489F: Sprite set 36h - bomb 1 ;;; { ROM1:489F db FC,FC,91,00, FF } ;;; $48A4: Sprite set 37h ;;; { ROM1:48A4 db 04,F8,05,00, 04,00,07,00, 0C,F8,33,00, 0C,00,29,00, FF } ;;; $48B5: Sprite set 38h ;;; { ROM1:48B5 db 03,F8,07,20, 03,00,29,40, 0B,F8,05,40, 0B,00,33,20, FF } ;;; $48C6: Sprite set 39h ;;; { ROM1:48C6 db 04,F8,29,60, 04,00,33,60, 0C,F8,07,60, 0C,00,05,60, FF } ;;; $48D7: Sprite set 3Ah ;;; { ROM1:48D7 db 03,F8,33,40, 03,00,05,20, 0B,F8,29,20, 0B,00,07,40, FF } ;;; $48E8: Sprite set 3Bh ;;; { ROM1:48E8 db 04,F8,07,20, 04,00,05,20, 0C,F8,29,20, 0C,00,33,20, FF } ;;; $48F9: Sprite set 3Ch ;;; { ROM1:48F9 db 03,F8,29,60, 03,00,07,00, 0B,F8,33,00, 0B,00,05,60, FF } ;;; $490A: Sprite set 3Dh ;;; { ROM1:490A db 04,F8,33,40, 04,00,29,40, 0C,F8,05,40, 0C,00,07,40, FF } ;;; $491B: Sprite set 3Eh ;;; { ROM1:491B db 03,F8,05,00, 03,00,33,60, 0B,F8,07,60, 0B,00,29,00, FF } ;;; $492C: Sprite set 3Fh - blinking HUD Metroid 0 ;;; { ROM1:492C db 00,00,9A,00, 00,08,9A,20, FF } ;;; $4935: Sprite set 40h - blinking HUD Metroid 1 ;;; { ROM1:4935 db 00,00,9B,00, 00,08,9B,20, FF } } ;;; $493E: Update status bar ;;; { ; Externally called by: ; $0154: V-blank interrupt handler ROM1:493E FA CA C3 ld a,(C3CA) ;\ ROM1:4941 A7 and a ;} If [$C3CA] != 0: return ROM1:4942 C0 ret nz ;/ ROM1:4943 FA 6C D0 ld a,(D06C) ;\ ROM1:4946 A7 and a ;} If [item pickup] != 0: return ROM1:4947 C0 ret nz ;/ ROM1:4948 FA 6D D0 ld a,(D06D) ;\ ROM1:494B A7 and a ;} If [$D06D] != 0: return ROM1:494C C0 ret nz ;/ ROM1:494D 21 B7 FF ld hl,FFB7 ;\ ROM1:4950 3E AF ld a,AF ;| ROM1:4952 22 ldi (hl),a ;| ROM1:4953 22 ldi (hl),a ;} Blanks for energy tanks (to be reversed) ROM1:4954 22 ldi (hl),a ;| ROM1:4955 22 ldi (hl),a ;| ROM1:4956 77 ld (hl),a ;/ ROM1:4957 FA 50 D0 ld a,(D050) ;\ ROM1:495A A7 and a ;} If no energy tanks: go to NO_ENERGY_TANKS ROM1:495B 28 1C jr z,4979 ;/ ROM1:495D 47 ld b,a ;\ ROM1:495E 21 B7 FF ld hl,FFB7 ;| ROM1:4961 3E 9C ld a,9C ;| ;} Energy tanks ROM1:4963 22 ldi (hl),a ;| ROM1:4964 05 dec b ;| ROM1:4965 20 FC jr nz,4963 ;/ ROM1:4967 FA 85 D0 ld a,(D085) ;\ ROM1:496A A7 and a ;} If no non-empty energy tanks: go to BRANCH_BETA ROM1:496B 28 10 jr z,497D ;/ ROM1:496D 47 ld b,a ;\ ROM1:496E 21 B7 FF ld hl,FFB7 ;| ROM1:4971 3E 9D ld a,9D ;| ;} Non-empty energy tanks ROM1:4973 22 ldi (hl),a ;| ROM1:4974 05 dec b ;| ROM1:4975 20 FC jr nz,4973 ;/ ROM1:4977 18 04 jr 497D ; Go to BRANCH_ALPHA ; NO_ENERGY_TANKS ROM1:4979 3E AA ld a,AA ;\ ROM1:497B E0 B7 ld (FF00+B7),a ;} The E given when there are no energy tanks ; BRANCH_ALPHA ROM1:497D 21 E0 9B ld hl,9BE0 ; hl = $9BE0 ROM1:4980 FA 8B D0 ld a,(D08B) ;\ ROM1:4983 FE 11 cp 11 ;} If not in Metroid Queen's room: ROM1:4985 28 07 jr z,498E ;/ ROM1:4987 3E 07 ld a,07 ;\ ROM1:4989 E0 4B ld (FF00+4B),a ;} LCD window X = 0 ROM1:498B 21 00 9C ld hl,9C00 ; hl = $9C00 ROM1:498E F0 BB ld a,(FF00+BB) ;\ ROM1:4990 22 ldi (hl),a ;| ROM1:4991 F0 BA ld a,(FF00+BA) ;| ROM1:4993 22 ldi (hl),a ;| ROM1:4994 F0 B9 ld a,(FF00+B9) ;| ROM1:4996 22 ldi (hl),a ;} Energy tanks ROM1:4997 F0 B8 ld a,(FF00+B8) ;| ROM1:4999 22 ldi (hl),a ;| ROM1:499A F0 B7 ld a,(FF00+B7) ;| ROM1:499C 22 ldi (hl),a ;/ ROM1:499D 3E 9E ld a,9E ;\ ROM1:499F 22 ldi (hl),a ;} Dash ROM1:49A0 FA 84 D0 ld a,(D084) ;\ ROM1:49A3 E6 F0 and F0 ;| ROM1:49A5 CB 37 swap a ;| ROM1:49A7 C6 A0 add a,A0 ;| ROM1:49A9 22 ldi (hl),a ;} Samus' health ROM1:49AA FA 84 D0 ld a,(D084) ;| ROM1:49AD E6 0F and 0F ;| ROM1:49AF C6 A0 add a,A0 ;| ROM1:49B1 22 ldi (hl),a ;/ ROM1:49B2 23 inc hl ;\ ROM1:49B3 23 inc hl ;} Skip three tiles ROM1:49B4 23 inc hl ;/ ROM1:49B5 FA 87 D0 ld a,(D087) ;\ ROM1:49B8 E6 0F and 0F ;| ROM1:49BA C6 A0 add a,A0 ;| ROM1:49BC 22 ldi (hl),a ;| ROM1:49BD FA 86 D0 ld a,(D086) ;| ROM1:49C0 E6 F0 and F0 ;| ROM1:49C2 CB 37 swap a ;} Samus' missiles ROM1:49C4 C6 A0 add a,A0 ;| ROM1:49C6 22 ldi (hl),a ;| ROM1:49C7 FA 86 D0 ld a,(D086) ;| ROM1:49CA E6 0F and 0F ;| ROM1:49CC C6 A0 add a,A0 ;| ROM1:49CE 22 ldi (hl),a ;/ ROM1:49CF 23 inc hl ;\ ROM1:49D0 23 inc hl ;| ROM1:49D1 23 inc hl ;} Skip four tiles ROM1:49D2 23 inc hl ;/ ROM1:49D3 F0 9B ld a,(FF00+9B) ;\ ROM1:49D5 FE 08 cp 08 ;} If [game mode] = paused: go to BRANCH_PAUSED ROM1:49D7 28 36 jr z,4A0F ;/ ROM1:49D9 FA 96 D0 ld a,(D096) ;\ ROM1:49DC A7 and a ;} If Metroids remaining shuffle active: go to BRANCH_METROID_REMAINING_SHUFFLE ROM1:49DD 20 13 jr nz,49F2 ;/ ROM1:49DF FA 9A D0 ld a,(D09A) ;\ ROM1:49E2 E6 F0 and F0 ;| ROM1:49E4 CB 37 swap a ;| ROM1:49E6 C6 A0 add a,A0 ;| ROM1:49E8 22 ldi (hl),a ;} Metroids remaining ROM1:49E9 FA 9A D0 ld a,(D09A) ;| ROM1:49EC E6 0F and 0F ;| ROM1:49EE C6 A0 add a,A0 ;| ROM1:49F0 77 ld (hl),a ;/ ROM1:49F1 C9 ret ; BRANCH_METROID_REMAINING_SHUFFLE ROM1:49F2 3D dec a ;\ ROM1:49F3 EA 96 D0 ld (D096),a ;} Decrement Metroids remaining shuffle timer ROM1:49F6 FE 80 cp 80 ;\ ROM1:49F8 D0 ret nc ;} If Metroids remaining shuffle timer != 80h: return ROM1:49F9 F0 04 ld a,(FF00+04) ;\ ROM1:49FB C6 10 add a,10 ;| ROM1:49FD 27 daa ;| ROM1:49FE E6 F0 and F0 ;| ROM1:4A00 CB 37 swap a ;| ROM1:4A02 C6 A0 add a,A0 ;| ROM1:4A04 22 ldi (hl),a ;} Random for Metroid remaining shuffle ROM1:4A05 F0 04 ld a,(FF00+04) ;| ROM1:4A07 3C inc a ;| ROM1:4A08 27 daa ;| ROM1:4A09 E6 0F and 0F ;| ROM1:4A0B C6 A0 add a,A0 ;| ROM1:4A0D 77 ld (hl),a ;/ ROM1:4A0E C9 ret ; BRANCH_PAUSED ROM1:4A0F FA A7 D0 ld a,(D0A7) ;\ ROM1:4A12 FE FF cp FF ;} If [Metroids remaining in area] = FFh: go to BRANCH_NO_METROIDS_IN_AREA ROM1:4A14 28 10 jr z,4A26 ;/ ROM1:4A16 E6 F0 and F0 ;\ ROM1:4A18 CB 37 swap a ;| ROM1:4A1A C6 A0 add a,A0 ;| ROM1:4A1C 22 ldi (hl),a ;| ROM1:4A1D FA A7 D0 ld a,(D0A7) ;} Metroids remaining in area ROM1:4A20 E6 0F and 0F ;| ROM1:4A22 C6 A0 add a,A0 ;| ROM1:4A24 77 ld (hl),a ;/ ROM1:4A25 C9 ret ; BRANCH_NO_METROIDS_IN_AREA ROM1:4A26 3E 9E ld a,9E ;\ ROM1:4A28 22 ldi (hl),a ;} Dashes ROM1:4A29 77 ld (hl),a ;/ ROM1:4A2A C9 ret } ;;; $4A2B: Handle rolling energy and missile counters ;;; { ; Externally called by: ; $04DF: Game mode 4: in-game ROM1:4A2B FA 51 D0 ld a,(D051) ROM1:4A2E E6 0F and 0F ROM1:4A30 FE 0A cp 0A ROM1:4A32 38 0A jr c,4A3E ROM1:4A34 FA 51 D0 ld a,(D051) ROM1:4A37 E6 F0 and F0 ROM1:4A39 C6 09 add a,09 ROM1:4A3B EA 51 D0 ld (D051),a ROM1:4A3E FA 51 D0 ld a,(D051) ROM1:4A41 E6 F0 and F0 ROM1:4A43 FE A0 cp A0 ROM1:4A45 38 0A jr c,4A51 ROM1:4A47 FA 51 D0 ld a,(D051) ROM1:4A4A E6 0F and 0F ROM1:4A4C C6 90 add a,90 ROM1:4A4E EA 51 D0 ld (D051),a ROM1:4A51 FA 52 D0 ld a,(D052) ROM1:4A54 47 ld b,a ROM1:4A55 FA 85 D0 ld a,(D085) ROM1:4A58 B8 cp b ROM1:4A59 28 04 jr z,4A5F ROM1:4A5B 30 33 jr nc,4A90 ROM1:4A5D 18 0C jr 4A6B ROM1:4A5F FA 51 D0 ld a,(D051) ROM1:4A62 47 ld b,a ROM1:4A63 FA 84 D0 ld a,(D084) ROM1:4A66 B8 cp b ROM1:4A67 28 4A jr z,4AB3 ROM1:4A69 30 25 jr nc,4A90 ROM1:4A6B FA 84 D0 ld a,(D084) ROM1:4A6E C6 01 add a,01 ROM1:4A70 27 daa ROM1:4A71 EA 84 D0 ld (D084),a ROM1:4A74 FA 85 D0 ld a,(D085) ROM1:4A77 CE 00 adc a,00 ROM1:4A79 27 daa ROM1:4A7A EA 85 D0 ld (D085),a ROM1:4A7D FA C1 CE ld a,(CEC1) ROM1:4A80 A7 and a ROM1:4A81 20 30 jr nz,4AB3 ROM1:4A83 F0 97 ld a,(FF00+97) ROM1:4A85 E6 03 and 03 ROM1:4A87 20 2A jr nz,4AB3 ROM1:4A89 3E 18 ld a,18 ;\ ROM1:4A8B EA C0 CE ld (CEC0),a ;} Play Samus' health changed sound effect ROM1:4A8E 18 23 jr 4AB3 ROM1:4A90 FA 84 D0 ld a,(D084) ROM1:4A93 D6 01 sub 01 ROM1:4A95 27 daa ROM1:4A96 EA 84 D0 ld (D084),a ROM1:4A99 FA 85 D0 ld a,(D085) ROM1:4A9C DE 00 sbc a,00 ROM1:4A9E 27 daa ROM1:4A9F EA 85 D0 ld (D085),a ROM1:4AA2 FA C1 CE ld a,(CEC1) ROM1:4AA5 A7 and a ROM1:4AA6 20 0B jr nz,4AB3 ROM1:4AA8 F0 97 ld a,(FF00+97) ROM1:4AAA E6 03 and 03 ROM1:4AAC 20 05 jr nz,4AB3 ROM1:4AAE 3E 18 ld a,18 ;\ ROM1:4AB0 EA C0 CE ld (CEC0),a ;} Play Samus' health changed sound effect ROM1:4AB3 FA 54 D0 ld a,(D054) ROM1:4AB6 47 ld b,a ROM1:4AB7 FA 87 D0 ld a,(D087) ROM1:4ABA B8 cp b ROM1:4ABB 28 04 jr z,4AC1 ROM1:4ABD 30 2A jr nc,4AE9 ROM1:4ABF 18 0B jr 4ACC ROM1:4AC1 FA 53 D0 ld a,(D053) ROM1:4AC4 47 ld b,a ROM1:4AC5 FA 86 D0 ld a,(D086) ROM1:4AC8 B8 cp b ROM1:4AC9 C8 ret z ROM1:4ACA 30 1D jr nc,4AE9 ROM1:4ACC FA 86 D0 ld a,(D086) ROM1:4ACF C6 01 add a,01 ROM1:4AD1 27 daa ROM1:4AD2 EA 86 D0 ld (D086),a ROM1:4AD5 FA 87 D0 ld a,(D087) ROM1:4AD8 CE 00 adc a,00 ROM1:4ADA 27 daa ROM1:4ADB EA 87 D0 ld (D087),a ROM1:4ADE F0 97 ld a,(FF00+97) ROM1:4AE0 E6 03 and 03 ROM1:4AE2 C0 ret nz ROM1:4AE3 3E 0C ld a,0C ;\ ROM1:4AE5 EA C0 CE ld (CEC0),a ;} Play picked up missile drop sound effect ROM1:4AE8 C9 ret ROM1:4AE9 FA 86 D0 ld a,(D086) ROM1:4AEC D6 01 sub 01 ROM1:4AEE 27 daa ROM1:4AEF EA 86 D0 ld (D086),a ROM1:4AF2 FA 87 D0 ld a,(D087) ROM1:4AF5 DE 00 sbc a,00 ROM1:4AF7 27 daa ROM1:4AF8 EA 87 D0 ld (D087),a ROM1:4AFB C9 ret } ;;; $4AFC: Add two digits to OAM stack ;;; { ; Externally called by: ; $2CED: Game mode 8: paused ROM1:4AFC E0 99 ld (FF00+99),a ; Two sprite tile numbers = [a] ROM1:4AFE CB 37 swap a ;\ ROM1:4B00 E6 0F and 0F ;} a = ([a] >> 4) + A0h ROM1:4B02 C6 A0 add a,A0 ;/ ROM1:4B04 CD 11 4B call 4B11 ; Execute subroutine $4B11 ROM1:4B07 F0 99 ld a,(FF00+99) ; a = [two sprite tile numbers] } ;;; $4B09: Add digit to OAM stack ;;; { ; Externally called by: ; $2CED: Game mode 8: paused ROM1:4B09 E6 0F and 0F ;\ ROM1:4B0B C6 A0 add a,A0 ;} a = ([a] & Fh) + A0h ROM1:4B0D CD 11 4B call 4B11 ; Execute subroutine $4B11 ROM1:4B10 C9 ret } ;;; $4B11: Add sprite to OAM stack ;;; { ROM1:4B11 E0 98 ld (FF00+98),a ; Sprite tile number = [a] ROM1:4B13 26 C0 ld h,C0 ;\ ROM1:4B15 F0 8D ld a,(FF00+8D) ;} hl = OAM entry ROM1:4B17 6F ld l,a ;/ ROM1:4B18 F0 C4 ld a,(FF00+C4) ;\ ROM1:4B1A 22 ldi (hl),a ;} OAM entry Y position = [sprite Y position] ROM1:4B1B F0 C5 ld a,(FF00+C5) ;\ ROM1:4B1D 22 ldi (hl),a ;} OAM entry X position = [sprite X position] ROM1:4B1E C6 08 add a,08 ;\ ROM1:4B20 E0 C5 ld (FF00+C5),a ;} Sprite X position += 8 ROM1:4B22 F0 98 ld a,(FF00+98) ;\ ROM1:4B24 22 ldi (hl),a ;} OAM entry tile number = [sprite tile number] ROM1:4B25 F0 C7 ld a,(FF00+C7) ;\ ROM1:4B27 22 ldi (hl),a ;} OAM entry attributes = [sprite attributes] ROM1:4B28 7D ld a,l ;\ ROM1:4B29 E0 8D ld (FF00+8D),a ;} OAM stack pointer += 4 ROM1:4B2B C9 ret } ;;; $4B2C: Drawing blinking Metroid in HUD ;;; { ; Externally called by: ; $04DF: Game mode 4: in-game ; $27BA ; $27E3 ; $2CED: Game mode 8: paused ; $2F86: Game mode 6: dying ; $38B9: Handle item pickup - [item pickup] = 7 (varia) ; $3A01: ROM1:4B2C 3E 98 ld a,98 ;\ ROM1:4B2E E0 C4 ld (FF00+C4),a ;} Sprite Y position = 98h ROM1:4B30 FA 8B D0 ld a,(D08B) ;\ ROM1:4B33 FE 11 cp 11 ;| ROM1:4B35 28 14 jr z,4B4B ;| ROM1:4B37 FA 7D D0 ld a,(D07D) ;| ROM1:4B3A A7 and a ;| ROM1:4B3B 20 0A jr nz,4B47 ;} If [$D08B] != 11h and ([$D07D] or 0 < [$D093] < Bh): ROM1:4B3D FA 93 D0 ld a,(D093) ;| (such that the hud is raised by a message box) ROM1:4B40 A7 and a ;| ROM1:4B41 28 08 jr z,4B4B ;| ROM1:4B43 FE 0B cp 0B ;| ROM1:4B45 30 04 jr nc,4B4B ;/ ROM1:4B47 3E 90 ld a,90 ;\ ROM1:4B49 E0 C4 ld (FF00+C4),a ;} Sprite Y position = 90h ROM1:4B4B 3E 80 ld a,80 ;\ ROM1:4B4D E0 C5 ld (FF00+C5),a ;} Sprite X position = 80h ROM1:4B4F 3E 01 ld a,01 ;\ ROM1:4B51 EA 57 D0 ld (D057),a ;} $D057 = 1 ROM1:4B54 F0 97 ld a,(FF00+97) ;\ ROM1:4B56 E6 10 and 10 ;| ROM1:4B58 CB 37 swap a ;} $FFC6 = [frame counter] / 10h % 2 + 3Fh ROM1:4B5A C6 3F add a,3F ;| ROM1:4B5C E0 C6 ld (FF00+C6),a ;/ ROM1:4B5E CD 62 4B call 4B62 ; Load sprite set ROM1:4B61 C9 ret } ;;; $4B62: Load sprite set ;;; { ; $4000 entries are: ; [byte] [byte] [byte] [byte] ; Y offset, X offset, tile number, attributes ; X and Y offsets are added to sprite X and Y positions ; The palette is set if sprite attributes are non-zero ; The priority flag is set if [$D057] is clear ROM1:4B62 3E 01 ld a,01 ;\ ROM1:4B64 EA 4E D0 ld (D04E),a ;} Bank = 1 ROM1:4B67 EA 00 21 ld (2100),a ;/ ROM1:4B6A F0 C6 ld a,(FF00+C6) ;\ ROM1:4B6C 16 00 ld d,00 ;| ROM1:4B6E 5F ld e,a ;| ROM1:4B6F CB 23 sla e ;| ROM1:4B71 CB 12 rl d ;| ROM1:4B73 21 00 40 ld hl,4000 ;} de = [$4000 + [sprite set] * 2] ROM1:4B76 19 add hl,de ;| ROM1:4B77 2A ldi a,(hl) ;| ROM1:4B78 5F ld e,a ;| ROM1:4B79 7E ld a,(hl) ;| ROM1:4B7A 57 ld d,a ;/ ROM1:4B7B 26 C0 ld h,C0 ;\ ROM1:4B7D F0 8D ld a,(FF00+8D) ;} hl = OAM entry ROM1:4B7F 6F ld l,a ;/ ROM1:4B80 F0 C4 ld a,(FF00+C4) ;\ ROM1:4B82 47 ld b,a ;} b = [sprite Y position] ROM1:4B83 F0 C5 ld a,(FF00+C5) ;\ ROM1:4B85 4F ld c,a ;} c = [sprite X position] ; LOOP ROM1:4B86 1A ld a,(de) ;\ ROM1:4B87 FE FF cp FF ;} If [[de]] = FFh: return ROM1:4B89 28 27 jr z,4BB2 ;/ ROM1:4B8B 80 add a,b ;\ ROM1:4B8C 22 ldi (hl),a ;} OAM entry Y position = [[de++]] + [sprite Y position] ROM1:4B8D 13 inc de ;/ ROM1:4B8E 1A ld a,(de) ;\ ROM1:4B8F 81 add a,c ;| ROM1:4B90 22 ldi (hl),a ;} OAM entry X position = [[de++]] + [sprite X position] ROM1:4B91 13 inc de ;/ ROM1:4B92 1A ld a,(de) ;\ ROM1:4B93 22 ldi (hl),a ;} OAM entry tile number = [[de++]] ROM1:4B94 13 inc de ;/ ROM1:4B95 F0 C7 ld a,(FF00+C7) ;\ ROM1:4B97 A7 and a ;} If [sprite attributes] != 0: ROM1:4B98 28 05 jr z,4B9F ;/ ROM1:4B9A 1A ld a,(de) ;\ ROM1:4B9B CB E7 set 4,a ;} OAM entry attributes = [[de]] | 10h ROM1:4B9D 18 01 jr 4BA0 ; Else ([sprite attributes] = 0): ROM1:4B9F 1A ld a,(de) ; OAM entry attributes = [[de]] ROM1:4BA0 77 ld (hl),a ROM1:4BA1 FA 57 D0 ld a,(D057) ;\ ROM1:4BA4 A7 and a ;} If [$D057] = 0: ROM1:4BA5 20 04 jr nz,4BAB ;/ ROM1:4BA7 7E ld a,(hl) ;\ ROM1:4BA8 CB FF set 7,a ;} OAM entry attributes |= 80h ROM1:4BAA 77 ld (hl),a ;/ ROM1:4BAB 23 inc hl ; Next OAM entry ROM1:4BAC 7D ld a,l ;\ ROM1:4BAD E0 8D ld (FF00+8D),a ;} Update OAM stack pointer ROM1:4BAF 13 inc de ; ++de ROM1:4BB0 18 D4 jr 4B86 ; Go to LOOP ROM1:4BB2 C9 ret } ;;; $4BB3: Clear deleted OAM ;;; { ; Externally called by: ; $04DF: Game mode 4: in-game ; $239C: Handle screen transition command set ; $27BA: ; $27E3: ; $2C79: Handle pausing ; $2CED: Game mode 8: paused ; $2F86: Game mode 6: dying ; $38B9: Handle item pickup - [item pickup] = 7 (varia) ; $3A01: ; $3E3F: Game mode 0: boot ROM1:4BB3 F0 8D ld a,(FF00+8D) ;\ ROM1:4BB5 47 ld b,a ;| ROM1:4BB6 FA 6E D0 ld a,(D06E) ;| ROM1:4BB9 4F ld c,a ;} If [OAM stack pointer] > [highest OAM stack pointer]: go to BRANCH_RETURN ROM1:4BBA B8 cp b ;| ROM1:4BBB 38 0B jr c,4BC8 ;/ ROM1:4BBD 26 C0 ld h,C0 ;\ ROM1:4BBF F0 8D ld a,(FF00+8D) ;| ROM1:4BC1 6F ld l,a ;| ;| ROM1:4BC2 AF xor a ;} $C000+[OAM stack pointer]..[highest OAM stack pointer]-1 = 0 ROM1:4BC3 22 ldi (hl),a ;| ROM1:4BC4 7D ld a,l ;| ROM1:4BC5 B9 cp c ;| ROM1:4BC6 38 FA jr c,4BC2 ;/ ; BRANCH_RETURN ROM1:4BC8 F0 8D ld a,(FF00+8D) ;\ ROM1:4BCA EA 6E D0 ld (D06E),a ;} Highest OAM stack pointer = [OAM stack pointer] ROM1:4BCD C9 ret } ;;; $4BCE: Clear OAM ;;; { ; Externally called by: ; $239C: Handle screen transition command set ; $36B0: Game mode 5: dead ; $3ACE: Game mode Ah ; $3B43: Game mode 10h: game cleared ROM1:4BCE 21 00 C0 ld hl,C000 ROM1:4BD1 AF xor a ROM1:4BD2 22 ldi (hl),a ROM1:4BD3 7D ld a,l ROM1:4BD4 FE A0 cp A0 ROM1:4BD6 38 F9 jr c,4BD1 ROM1:4BD8 C9 ret } ;;; $4BD9..4DDE: Draw Samus ;;; { ;;; $4BD9: Draw Samus ;;; { ; Externally called by: ; $04DF: Game mode 4: in-game ; $27BA: ; $27E3: ; $2F86: Game mode 6: dying ; $38B9: Handle item pickup - [item pickup] = 7 (varia) ; $3A01: ROM1:4BD9 FA 4F D0 ld a,(D04F) ;\ ROM1:4BDC A7 and a ;} If [invincibility timer] != 0: ROM1:4BDD 28 09 jr z,4BE8 ;/ ROM1:4BDF 3D dec a ;\ ROM1:4BE0 EA 4F D0 ld (D04F),a ;} Decrement invincibility timer ROM1:4BE3 F0 97 ld a,(FF00+97) ;\ ROM1:4BE5 CB 57 bit 2,a ;} If [frame counter] & 2 = 0: return ROM1:4BE7 C8 ret z ;/ ROM1:4BE8 FA 62 D0 ld a,(D062) ;\ ROM1:4BEB A7 and a ;} If [$D062] != 0: ROM1:4BEC 28 05 jr z,4BF3 ;/ ROM1:4BEE F0 97 ld a,(FF00+97) ;\ ROM1:4BF0 CB 57 bit 2,a ;} If [frame counter] & 2 = 0: return ROM1:4BF2 C8 ret z ;/ } ;;; $4BF3: Draw Samus, no invisible frames ;;; { ; Externally called by: ; $2FA2: Start death sequence ROM1:4BF3 FA 20 D0 ld a,(D020) ;\ ROM1:4BF6 CB 7F bit 7,a ;} If Samus is facing forward: go to $4D33 ROM1:4BF8 C2 33 4D jp nz,4D33 ;/ ROM1:4BFB 06 01 ld b,01 ; b = 1 ROM1:4BFD FA 2B D0 ld a,(D02B) ;\ ROM1:4C00 A7 and a ;} If Samus is facing left: ROM1:4C01 20 02 jr nz,4C05 ;/ ROM1:4C03 06 02 ld b,02 ; b = 2 ROM1:4C05 FA 63 C4 ld a,(C463) ;\ ROM1:4C08 A7 and a ;} If [metroid is hatching flag] != 0: ROM1:4C09 28 05 jr z,4C10 ;/ ROM1:4C0B 78 ld a,b ;\ ROM1:4C0C E0 98 ld (FF00+98),a ;} Sprite tile number = b ROM1:4C0E 18 09 jr 4C19 ROM1:4C10 F0 80 ld a,(FF00+80) ;\ Else ([metroid is hatching flag] = 0): ROM1:4C12 E6 F0 and F0 ;| ROM1:4C14 CB 37 swap a ;} Sprite tile number = [buttons] >> 4 | b ROM1:4C16 B0 or b ;| ROM1:4C17 E0 98 ld (FF00+98),a ;/ ROM1:4C19 FA 20 D0 ld a,(D020) ;\ ROM1:4C1C EF rst 28 ;} Execute Samus pose dependent code ROM1:4C1D dw 4D45,4CBD,4CEE,4D77,4D65,4C94,4C94,4CBD,4C94,4CCC,4CCC,4C6B,4C6B,4C6B,4C6B,4C59, 4C94,4C59,4C94,4D33,4D33,4D33,4D33,4D33,4C94,4C94,4C94,4C94,4C94,4C94 } ;;; $4C59: Draw Samus - knockback / standing bombed ;;; { ROM1:4C59 16 00 ld d,00 ;\ ROM1:4C5B FA 2B D0 ld a,(D02B) ;| ROM1:4C5E 5F ld e,a ;| ROM1:4C5F 21 69 4C ld hl,4C69 ;} Sprite set = [$4C69 + [direction Samus is facing]] ROM1:4C62 19 add hl,de ;| ROM1:4C63 7E ld a,(hl) ;| ROM1:4C64 E0 C6 ld (FF00+C6),a ;/ ROM1:4C66 C3 DF 4D jp 4DDF ; Go to $4DDF ROM1:4C69 db 16, ; Left 09 ; Right } ;;; $4C6B: Draw Samus - spider ball poses ;;; { ROM1:4C6B FA 2B D0 ld a,(D02B) ROM1:4C6E E6 01 and 01 ROM1:4C70 CB 27 sla a ROM1:4C72 CB 27 sla a ROM1:4C74 47 ld b,a ROM1:4C75 FA 72 D0 ld a,(D072) ROM1:4C78 E6 0C and 0C ROM1:4C7A CB 3F srl a ROM1:4C7C CB 3F srl a ROM1:4C7E 80 add a,b ROM1:4C7F 5F ld e,a ROM1:4C80 16 00 ld d,00 ROM1:4C82 21 8C 4C ld hl,4C8C ROM1:4C85 19 add hl,de ROM1:4C86 7E ld a,(hl) ROM1:4C87 E0 C6 ld (FF00+C6),a ROM1:4C89 C3 DF 4D jp 4DDF ROM1:4C8C db 37, 38, 39, 3A, 3B, 3C, 3D, 3E } ;;; $4C94: Draw Samus - morphball poses ;;; { ROM1:4C94 FA 2B D0 ld a,(D02B) ROM1:4C97 E6 01 and 01 ROM1:4C99 CB 27 sla a ROM1:4C9B CB 27 sla a ROM1:4C9D 47 ld b,a ROM1:4C9E FA 72 D0 ld a,(D072) ROM1:4CA1 E6 0C and 0C ROM1:4CA3 CB 3F srl a ROM1:4CA5 CB 3F srl a ROM1:4CA7 80 add a,b ROM1:4CA8 5F ld e,a ROM1:4CA9 16 00 ld d,00 ROM1:4CAB 21 B5 4C ld hl,4CB5 ROM1:4CAE 19 add hl,de ROM1:4CAF 7E ld a,(hl) ROM1:4CB0 E0 C6 ld (FF00+C6),a ROM1:4CB2 C3 DF 4D jp 4DDF ROM1:4CB5 db 1E, 1F, 20, 21, 26, 27, 28, 29 } ;;; $4CBD: Draw Samus - jumping / falling ;;; { ROM1:4CBD 16 00 ld d,00 ROM1:4CBF F0 98 ld a,(FF00+98) ROM1:4CC1 5F ld e,a ROM1:4CC2 21 DE 4C ld hl,4CDE ROM1:4CC5 19 add hl,de ROM1:4CC6 7E ld a,(hl) ROM1:4CC7 E0 C6 ld (FF00+C6),a ROM1:4CC9 C3 DF 4D jp 4DDF } ;;; $4CCC: Draw Samus - starting to jump / starting to spin-jump ;;; { ROM1:4CCC 3E 03 ld a,03 ROM1:4CCE E0 C6 ld (FF00+C6),a ROM1:4CD0 FA 2B D0 ld a,(D02B) ROM1:4CD3 A7 and a ROM1:4CD4 C2 DF 4D jp nz,4DDF ROM1:4CD7 3E 10 ld a,10 ROM1:4CD9 E0 C6 ld (FF00+C6),a ROM1:4CDB C3 DF 4D jp 4DDF ROM1:4CDE db 00, 09, 16, 00, 00, 0A, 17, 00, 00, 0C, 19, 00, 00, 00, 00, 00 } ;;; $4CEE: Draw Samus - spin-jumping ;;; { ROM1:4CEE FA 2B D0 ld a,(D02B) ROM1:4CF1 A7 and a ROM1:4CF2 CA FB 4C jp z,4CFB ROM1:4CF5 21 2B 4D ld hl,4D2B ROM1:4CF8 C3 FE 4C jp 4CFE ROM1:4CFB 21 2F 4D ld hl,4D2F ROM1:4CFE FA 45 D0 ld a,(D045) ROM1:4D01 E6 0C and 0C ROM1:4D03 20 15 jr nz,4D1A ROM1:4D05 FA 72 D0 ld a,(D072) ROM1:4D08 CB 3F srl a ROM1:4D0A E6 0C and 0C ROM1:4D0C CB 3F srl a ROM1:4D0E CB 3F srl a ROM1:4D10 5F ld e,a ROM1:4D11 16 00 ld d,00 ROM1:4D13 19 add hl,de ROM1:4D14 7E ld a,(hl) ROM1:4D15 E0 C6 ld (FF00+C6),a ROM1:4D17 C3 DF 4D jp 4DDF ROM1:4D1A FA 72 D0 ld a,(D072) ROM1:4D1D CB 3F srl a ROM1:4D1F E6 03 and 03 ROM1:4D21 5F ld e,a ROM1:4D22 16 00 ld d,00 ROM1:4D24 19 add hl,de ROM1:4D25 7E ld a,(hl) ROM1:4D26 E0 C6 ld (FF00+C6),a ROM1:4D28 C3 DF 4D jp 4DDF ROM1:4D2B db 1A, 1B, 1C, 1D, 22, 23, 24, 25 } ;;; $4D33: Draw Samus - facing screen ;;; { ROM1:4D33 FA 66 D0 ld a,(D066) ROM1:4D36 A7 and a ROM1:4D37 28 05 jr z,4D3E ROM1:4D39 F0 97 ld a,(FF00+97) ROM1:4D3B E6 03 and 03 ROM1:4D3D C8 ret z ROM1:4D3E 3E 00 ld a,00 ROM1:4D40 E0 C6 ld (FF00+C6),a ROM1:4D42 C3 DF 4D jp 4DDF } ;;; $4D45: Draw Samus - standing ;;; { ROM1:4D45 16 00 ld d,00 ROM1:4D47 F0 98 ld a,(FF00+98) ROM1:4D49 5F ld e,a ROM1:4D4A 21 54 4D ld hl,4D54 ROM1:4D4D 19 add hl,de ROM1:4D4E 7E ld a,(hl) ROM1:4D4F E0 C6 ld (FF00+C6),a ROM1:4D51 C3 DF 4D jp 4DDF ROM1:4D54 db 00, 01, 0E, 00, 00, 02, 0F, 00, 00, 01, 0E, 00, 00, 00, 00, 00, 00 } ;;; $4D65: Draw Samus - crouching ;;; { ROM1:4D65 3E 0B ld a,0B ROM1:4D67 E0 C6 ld (FF00+C6),a ROM1:4D69 FA 2B D0 ld a,(D02B) ROM1:4D6C A7 and a ROM1:4D6D C2 DF 4D jp nz,4DDF ROM1:4D70 3E 18 ld a,18 ROM1:4D72 E0 C6 ld (FF00+C6),a ROM1:4D74 C3 DF 4D jp 4DDF } ;;; $4D77: Draw Samus - running ;;; { ROM1:4D77 FA 22 D0 ld a,(D022) ROM1:4D7A FE 30 cp 30 ROM1:4D7C 38 04 jr c,4D82 ROM1:4D7E AF xor a ROM1:4D7F EA 22 D0 ld (D022),a ROM1:4D82 FA 22 D0 ld a,(D022) ROM1:4D85 E6 07 and 07 ROM1:4D87 20 0B jr nz,4D94 ROM1:4D89 FA D5 CE ld a,(CED5) ;\ ROM1:4D8C A7 and a ;} If [noise channel sound effect to play] = 0: ROM1:4D8D 20 05 jr nz,4D94 ;/ ROM1:4D8F 3E 10 ld a,10 ;\ ROM1:4D91 EA D5 CE ld (CED5),a ;} Play footsteps sound effect ROM1:4D94 FA 2B D0 ld a,(D02B) ROM1:4D97 E6 01 and 01 ROM1:4D99 CB 27 sla a ROM1:4D9B CB 27 sla a ROM1:4D9D 47 ld b,a ROM1:4D9E FA 22 D0 ld a,(D022) ROM1:4DA1 E6 30 and 30 ROM1:4DA3 CB 37 swap a ROM1:4DA5 80 add a,b ROM1:4DA6 5F ld e,a ROM1:4DA7 16 00 ld d,00 ROM1:4DA9 21 C7 4D ld hl,4DC7 ROM1:4DAC F0 80 ld a,(FF00+80) ROM1:4DAE CB 77 bit 6,a ROM1:4DB0 28 05 jr z,4DB7 ROM1:4DB2 21 D7 4D ld hl,4DD7 ROM1:4DB5 18 09 jr 4DC0 ROM1:4DB7 F0 80 ld a,(FF00+80) ROM1:4DB9 CB 4F bit 1,a ROM1:4DBB 28 03 jr z,4DC0 ROM1:4DBD 21 CF 4D ld hl,4DCF ROM1:4DC0 19 add hl,de ROM1:4DC1 7E ld a,(hl) ROM1:4DC2 E0 C6 ld (FF00+C6),a ROM1:4DC4 C3 DF 4D jp 4DDF ROM1:4DC7 db 10, 11, 12, 00, 03, 04, 05, 00, 13, 14, 15, 00, 06, 07, 08, 00, 2E, 2F, 30, 00, 2B, 2C, 2D, 00 } } ;;; $4DDF: Draw Samus sprite set ;;; { ROM1:4DDF CD D5 3E call 3ED5 ; Load room sprite priority ROM1:4DE2 F0 CA ld a,(FF00+CA) ;\ ROM1:4DE4 47 ld b,a ;| ROM1:4DE5 F0 C2 ld a,(FF00+C2) ;| ROM1:4DE7 90 sub b ;| ROM1:4DE8 C6 60 add a,60 ;} Sprite X position = samus' X position on screen = [Samus' X position] - [screen X position] + 60h ROM1:4DEA E0 C5 ld (FF00+C5),a ;| ROM1:4DEC EA 3C D0 ld (D03C),a ;/ ROM1:4DEF F0 C8 ld a,(FF00+C8) ;\ ROM1:4DF1 47 ld b,a ;| ROM1:4DF2 F0 C0 ld a,(FF00+C0) ;| ROM1:4DF4 90 sub b ;| ROM1:4DF5 C6 62 add a,62 ;} Sprite Y position = samus' Y position on screen = [Samus' Y position] - [screen Y position] + 62h ROM1:4DF7 E0 C4 ld (FF00+C4),a ;| ROM1:4DF9 EA 3B D0 ld (D03B),a ;/ ROM1:4DFC AF xor a ;\ ROM1:4DFD E0 C7 ld (FF00+C7),a ;} Sprite attributes = 0 ROM1:4DFF FA 62 D0 ld a,(D062) ;\ ROM1:4E02 A7 and a ;} If [$D062] != 0: go to BRANCH_ALPHA ROM1:4E03 20 06 jr nz,4E0B ;/ ROM1:4E05 FA 4F D0 ld a,(D04F) ;\ ROM1:4E08 A7 and a ;} If [invincibility timer] = 0: go to BRANCH_BETA ROM1:4E09 28 04 jr z,4E0F ;/ ; BRANCH_ALPHA ROM1:4E0B 3E 01 ld a,01 ;\ ROM1:4E0D E0 C7 ld (FF00+C7),a ;} Sprite attributes = 1 ; BRANCH_BETA ROM1:4E0F CD 34 7A call 7A34 ; Modify sprite Y position due to earthquake ROM1:4E12 CD 62 4B call 4B62 ; Load sprite set ROM1:4E15 AF xor a ROM1:4E16 E0 C7 ld (FF00+C7),a ; Sprite attributes = 0 ROM1:4E18 EA 57 D0 ld (D057),a ; Room sprite priority = 0 ROM1:4E1B C9 ret } ;;; $4E1C: Start new game ;;; { ROM1:4E1C AF xor a ;\ ROM1:4E1D EA 79 D0 ld (D079),a ;} $D079 = 0 ROM1:4E20 21 64 4E ld hl,4E64 ;\ ROM1:4E23 11 00 D8 ld de,D800 ;| ROM1:4E26 06 26 ld b,26 ;| ;| ROM1:4E28 2A ldi a,(hl) ;} $D800..25 = [$4E64..89] ROM1:4E29 12 ld (de),a ;| ROM1:4E2A 13 inc de ;| ROM1:4E2B 05 dec b ;| ROM1:4E2C 20 FA jr nz,4E28 ;/ ROM1:4E2E 3E 02 ld a,02 ;\ ROM1:4E30 E0 9B ld (FF00+9B),a ;} Game mode = 2 ROM1:4E32 C9 ret } ;;; $4E33: Load from save ;;; { ROM1:4E33 FA 79 D0 ld a,(D079) ;\ ROM1:4E36 A7 and a ;} If [$D079] = 0: go to game mode Bh ROM1:4E37 28 E3 jr z,4E1C ;/ ROM1:4E39 3E 0A ld a,0A ;\ ROM1:4E3B EA 00 00 ld (0000),a ;} Enable SRAM ROM1:4E3E FA A3 D0 ld a,(D0A3) ;\ ROM1:4E41 CB 27 sla a ;| ROM1:4E43 CB 27 sla a ;| ROM1:4E45 CB 37 swap a ;| ROM1:4E47 C6 08 add a,08 ;| ROM1:4E49 6F ld l,a ;| ROM1:4E4A 26 A0 ld h,A0 ;| ROM1:4E4C 11 00 D8 ld de,D800 ;} $D800..25 = [$A008+[save slot]*40h..$A02D+[save slot]*40h] ROM1:4E4F 06 26 ld b,26 ;| ;| ROM1:4E51 2A ldi a,(hl) ;| ROM1:4E52 12 ld (de),a ;| ROM1:4E53 13 inc de ;| ROM1:4E54 05 dec b ;| ROM1:4E55 20 FA jr nz,4E51 ;/ ROM1:4E57 3E 00 ld a,00 ;\ ROM1:4E59 EA 00 00 ld (0000),a ;} Disable SRAM ROM1:4E5C CD 0A 3E call 3E0A ; Execute subroutine $3E0A ROM1:4E5F 3E 02 ld a,02 ;\ ROM1:4E61 E0 9B ld (FF00+9B),a ;} Game mode = 2 ROM1:4E63 C9 ret } ;;; $4E64: Initial save data ;;; { ROM1:4E64 dx 07D4, ; Samus' Y position 0648, ; Samus' X position 07C0, ; Screen Y position 0640, ; Screen X position 7520, ; Enemy tiles source address 07, ; Background tiles source bank 6000, ; Background tiles source address 5280, ; Metatile definitions source address 4580, ; Tile properties source address 0F, ; Bank for current room 64, ; Samus solid block threshold 64, ; Enemy solid block threshold 64, ; Projectile solid block threshold 00, ; Samus' equipment 00, ; Samus' beam 00, ; Samus' energy tanks 0099, ; Samus' health 0030, ; Samus' max missiles 0030, ; Samus' missiles 01, ; Direction Samus is facing 02, ; Acid damage 08, ; Spike damage 47, ; Real number of Metroids remaining 04, ; Song for room 00, ; In-game timer, minutes 00, ; In-game timer, hours 39 ; Number of Metroids remaining } ;;; $4E8A: Handle firing a projectile ;;; { ROM1:4E8A F0 81 ld a,(FF00+81) ;\ ROM1:4E8C CB 4F bit 1,a ;} If not newly pressed B: ROM1:4E8E 20 0F jr nz,4E9F ;/ ROM1:4E90 F0 80 ld a,(FF00+80) ;\ ROM1:4E92 CB 4F bit 1,a ;} If not pressing B: return ROM1:4E94 C8 ret z ;/ ROM1:4E95 FA 0D D0 ld a,(D00D) ;\ ROM1:4E98 3C inc a ;} Increment auto-fire cooldown counter ROM1:4E99 EA 0D D0 ld (D00D),a ;/ ROM1:4E9C FE 10 cp 10 ;\ ROM1:4E9E D8 ret c ;} If [auto-fire cooldown counter] < 10h: return ; LOOP_SPAZER ROM1:4E9F FA 20 D0 ld a,(D020) ;\ ROM1:4EA2 CB 7F bit 7,a ;} If [Samus' pose] & 80h: return ROM1:4EA4 C0 ret nz ;/ ROM1:4EA5 21 53 56 ld hl,5653 ;\ ROM1:4EA8 FA 20 D0 ld a,(D020) ;| ROM1:4EAB 5F ld e,a ;} hl = $5653 + [Samus' pose] ROM1:4EAC 16 00 ld d,00 ;| ROM1:4EAE 19 add hl,de ;/ ROM1:4EAF 7E ld a,(hl) ;\ ROM1:4EB0 A7 and a ;} If [[hl]] = 0: return ROM1:4EB1 C8 ret z ;/ ROM1:4EB2 FE 80 cp 80 ;\ ROM1:4EB4 CA D9 53 jp z,53D9 ;} If [[hl]] = 80h: go to lay a bomb at Samus' position ROM1:4EB7 47 ld b,a ROM1:4EB8 AF xor a ;\ ROM1:4EB9 EA 0D D0 ld (D00D),a ;} Auto-fire cooldown counter = 0 ROM1:4EBC F0 80 ld a,(FF00+80) ;\ ROM1:4EBE CB 37 swap a ;| ROM1:4EC0 A0 and b ;} If [[hl]] & [buttons] >> 4 = 0: (if not holding a valid direction for pose): ROM1:4EC1 20 0C jr nz,4ECF ;/ ROM1:4EC3 0E 01 ld c,01 ;\ ROM1:4EC5 FA 2B D0 ld a,(D02B) ;| ROM1:4EC8 A7 and a ;| ROM1:4EC9 20 0D jr nz,4ED8 ;} $FF99 = 2 - [direction Samus is facing] ROM1:4ECB 0E 02 ld c,02 ;| ROM1:4ECD 18 09 jr 4ED8 ;/ ROM1:4ECF 21 43 56 ld hl,5643 ;\ Else ([[hl]] & [buttons] >> 4 != 0): (if holding a valid direction for pose) ROM1:4ED2 5F ld e,a ;\ ROM1:4ED3 16 00 ld d,00 ;| ROM1:4ED5 19 add hl,de ;} $FF99 = [$5643 + ([[hl]] & [buttons] >> 4)] (resolve input priority) ROM1:4ED6 7E ld a,(hl) ;| ROM1:4ED7 4F ld c,a ;/ ROM1:4ED8 79 ld a,c ROM1:4ED9 E0 99 ld (FF00+99),a ROM1:4EDB 21 1D 56 ld hl,561D ;\ ROM1:4EDE FA 20 D0 ld a,(D020) ;| ROM1:4EE1 5F ld e,a ;| ROM1:4EE2 16 00 ld d,00 ;| ROM1:4EE4 19 add hl,de ;| ROM1:4EE5 7E ld a,(hl) ;| ROM1:4EE6 47 ld b,a ;| ROM1:4EE7 21 30 56 ld hl,5630 ;| ROM1:4EEA 79 ld a,c ;} $FF9A = [$561D + [Samus' pose]] + [$5630 + [$FF99]] - 4 ROM1:4EEB 5F ld e,a ;| ROM1:4EEC 16 00 ld d,00 ;| ROM1:4EEE 19 add hl,de ;| ROM1:4EEF 7E ld a,(hl) ;| ROM1:4EF0 80 add a,b ;| ROM1:4EF1 D6 04 sub 04 ;| ROM1:4EF3 47 ld b,a ;| ROM1:4EF4 E0 9A ld (FF00+9A),a ;/ ROM1:4EF6 21 FB 55 ld hl,55FB ;\ ROM1:4EF9 CB 21 sla c ;| ROM1:4EFB FA 2B D0 ld a,(D02B) ;| ROM1:4EFE 81 add a,c ;| ROM1:4EFF CB 39 srl c ;| ROM1:4F01 5F ld e,a ;} $FF98 = [$55FB + [$FF99] * 2 + [direction Samus is facing]] - 4 ROM1:4F02 16 00 ld d,00 ;| ROM1:4F04 19 add hl,de ;| ROM1:4F05 7E ld a,(hl) ;| ROM1:4F06 D6 04 sub 04 ;| ROM1:4F08 E0 98 ld (FF00+98),a ;/ ROM1:4F0A FA 4D D0 ld a,(D04D) ;\ ROM1:4F0D FE 04 cp 04 ;} If [weapon equipped] = plasma: go to BRANCH_PLASMA ROM1:4F0F CA 7E 4F jp z,4F7E ;/ ROM1:4F12 CD EE 4F call 4FEE ; hl = free projectile slot ROM1:4F15 7D ld a,l ;\ ROM1:4F16 CB 37 swap a ;| ROM1:4F18 FE 03 cp 03 ;} If [hl] = $DD30: return ROM1:4F1A C8 ret z ;/ ROM1:4F1B FA 4D D0 ld a,(D04D) ;\ ROM1:4F1E FE 08 cp 08 ;{ If [weapon equipped] != missile: go to BRANCH_BEAM ROM1:4F20 20 22 jr nz,4F44 ;/ ROM1:4F22 FA 53 D0 ld a,(D053) ;\ ROM1:4F25 47 ld b,a ;| ROM1:4F26 FA 54 D0 ld a,(D054) ;} If [Samus' missiles] = 0: ROM1:4F29 B0 or b ;| ROM1:4F2A 20 06 jr nz,4F32 ;/ ROM1:4F2C 3E 19 ld a,19 ;\ ROM1:4F2E EA C0 CE ld (CEC0),a ;} Play dud shot sound effect ROM1:4F31 C9 ret ROM1:4F32 FA 53 D0 ld a,(D053) ;\ ROM1:4F35 D6 01 sub 01 ;| ROM1:4F37 27 daa ;| ROM1:4F38 EA 53 D0 ld (D053),a ;| ROM1:4F3B FA 54 D0 ld a,(D054) ;} Decrement Samus' missiles ROM1:4F3E DE 00 sbc a,00 ;| ROM1:4F40 27 daa ;| ROM1:4F41 EA 54 D0 ld (D054),a ;/ ; BRANCH_BEAM ROM1:4F44 FA 4D D0 ld a,(D04D) ;\ ROM1:4F47 22 ldi (hl),a ;} Projectile type = [weapon equipped] ROM1:4F48 F0 99 ld a,(FF00+99) ;\ ROM1:4F4A 22 ldi (hl),a ;} Projectile direction = [$FF99] ROM1:4F4B F0 9A ld a,(FF00+9A) ;\ ROM1:4F4D 47 ld b,a ;| ROM1:4F4E F0 C0 ld a,(FF00+C0) ;} Projectile Y position = [Samus' Y position] + [$FF9A] ROM1:4F50 80 add a,b ;| ROM1:4F51 22 ldi (hl),a ;/ ROM1:4F52 F0 98 ld a,(FF00+98) ;\ ROM1:4F54 47 ld b,a ;| ROM1:4F55 F0 C2 ld a,(FF00+C2) ;} Projectile X position = [Samus' X position] + [$FF98] ROM1:4F57 80 add a,b ;| ROM1:4F58 22 ldi (hl),a ;/ ROM1:4F59 F0 97 ld a,(FF00+97) ;\ ROM1:4F5B E6 10 and 10 ;| ROM1:4F5D CB 3F srl a ;} Projectile wave index = [frame counter] >> 1 & 8 ROM1:4F5F 22 ldi (hl),a ;/ ROM1:4F60 AF xor a ;\ ROM1:4F61 77 ld (hl),a ;} Projectile frame counter = 0 ROM1:4F62 FA 4D D0 ld a,(D04D) ;\ ROM1:4F65 FE 03 cp 03 ;} If [weapon equipped] = spazer: ROM1:4F67 20 06 jr nz,4F6F ;/ ROM1:4F69 7D ld a,l ;\ ROM1:4F6A FE 20 cp 20 ;} If [hl] < $DD20: go to LOOP_SPAZER ROM1:4F6C DA 9F 4E jp c,4E9F ;/ ROM1:4F6F 21 E5 4F ld hl,4FE5 ;\ ROM1:4F72 FA 4D D0 ld a,(D04D) ;| ROM1:4F75 5F ld e,a ;| ROM1:4F76 16 00 ld d,00 ;} Play sound effect [$4FE5 + [weapon equipped]] ROM1:4F78 19 add hl,de ;| ROM1:4F79 7E ld a,(hl) ;| ROM1:4F7A EA C0 CE ld (CEC0),a ;/ ROM1:4F7D C9 ret ; BRANCH_PLASMA ROM1:4F7E 21 00 DD ld hl,DD00 ; hl = $DD00 ROM1:4F81 7E ld a,(hl) ;\ ROM1:4F82 FE FF cp FF ;} If [[hl]] != FFh: return ROM1:4F84 C0 ret nz ;/ ; LOOP_PLASMA ROM1:4F85 F0 99 ld a,(FF00+99) ;\ ROM1:4F87 FE 04 cp 04 ;} If projectile fired horizontally: ROM1:4F89 30 12 jr nc,4F9D ;/ ROM1:4F8B F0 98 ld a,(FF00+98) ;\ ROM1:4F8D D6 08 sub 08 ;} $FF98 -= 8 ROM1:4F8F E0 98 ld (FF00+98),a ;/ ROM1:4F91 7D ld a,l ;\ ROM1:4F92 A7 and a ;} If [hl] != $DD00 ROM1:4F93 28 18 jr z,4FAD ;/ ROM1:4F95 F0 98 ld a,(FF00+98) ;\ ROM1:4F97 C6 10 add a,10 ;} $FF98 += 10h ROM1:4F99 E0 98 ld (FF00+98),a ;/ ROM1:4F9B 18 10 jr 4FAD ROM1:4F9D F0 9A ld a,(FF00+9A) ;\ Else (projectile fired vertically): ROM1:4F9F D6 08 sub 08 ;} $FF9A -= 8 ROM1:4FA1 E0 9A ld (FF00+9A),a ;/ ROM1:4FA3 7D ld a,l ;\ ROM1:4FA4 A7 and a ;} If [hl] != $DD00 ROM1:4FA5 28 06 jr z,4FAD ;/ ROM1:4FA7 F0 9A ld a,(FF00+9A) ;\ ROM1:4FA9 C6 10 add a,10 ;} $FF9A += 10h ROM1:4FAB E0 9A ld (FF00+9A),a ;/ ROM1:4FAD FA 4D D0 ld a,(D04D) ;\ ROM1:4FB0 22 ldi (hl),a ;} Projectile type = [weapon equipped] ROM1:4FB1 F0 99 ld a,(FF00+99) ;\ ROM1:4FB3 22 ldi (hl),a ;} Projectile direction = [$FF99] ROM1:4FB4 F0 9A ld a,(FF00+9A) ;\ ROM1:4FB6 47 ld b,a ;| ROM1:4FB7 F0 C0 ld a,(FF00+C0) ;} Projectile Y position = [Samus' Y position] + [$FF9A] ROM1:4FB9 80 add a,b ;| ROM1:4FBA 22 ldi (hl),a ;/ ROM1:4FBB F0 98 ld a,(FF00+98) ;\ ROM1:4FBD 47 ld b,a ;| ROM1:4FBE F0 C2 ld a,(FF00+C2) ;} Projectile X position = [Samus' X position] + [$FF98] ROM1:4FC0 80 add a,b ;| ROM1:4FC1 22 ldi (hl),a ;/ ROM1:4FC2 F0 97 ld a,(FF00+97) ;\ ROM1:4FC4 E6 10 and 10 ;| ROM1:4FC6 CB 3F srl a ;} Projectile wave index = [frame counter] >> 1 & 8 ROM1:4FC8 22 ldi (hl),a ;/ ROM1:4FC9 AF xor a ;\ ROM1:4FCA 77 ld (hl),a ;} Projectile frame counter = 0 ROM1:4FCB 7D ld a,l ;\ ROM1:4FCC E6 F0 and F0 ;| ROM1:4FCE C6 10 add a,10 ;} hl = ([hl] & F0h) + 10h ROM1:4FD0 6F ld l,a ;/ ROM1:4FD1 FE 30 cp 30 ;\ ROM1:4FD3 DA 85 4F jp c,4F85 ;} If [hl] < $DD30: go to LOOP_PLASMA ROM1:4FD6 21 E5 4F ld hl,4FE5 ;\ ROM1:4FD9 FA 4D D0 ld a,(D04D) ;| ROM1:4FDC 5F ld e,a ;| ROM1:4FDD 16 00 ld d,00 ;} Play sound effect [$4FE5 + [weapon equipped]] ROM1:4FDF 19 add hl,de ;| ROM1:4FE0 7E ld a,(hl) ;| ROM1:4FE1 EA C0 CE ld (CEC0),a ;/ ROM1:4FE4 C9 ret ; Sound effect indices for weapon equipped ROM1:4FE5 db 07, ; Normal 09, ; Ice 16, ; Wave 0B, ; Spazer 0A, ; Plasma 07, 07, 07, 08 ; Missile } ;;; $4FEE: Find free projectile slot ;;; { ;; Returns: ;; hl: Address of free projectile slot, or $DD30 if none available ROM1:4FEE 21 00 DD ld hl,DD00 ; hl = $DD00 ROM1:4FF1 FA 4D D0 ld a,(D04D) ;\ ROM1:4FF4 FE 08 cp 08 ;| ROM1:4FF6 20 05 jr nz,4FFD ;| ROM1:4FF8 3E 02 ld a,02 ;} If [weapon equipped] = missile: hl = $DD20 ROM1:4FFA CB 37 swap a ;| ROM1:4FFC 6F ld l,a ;/ ; LOOP ROM1:4FFD 7E ld a,(hl) ;\ ROM1:4FFE FE FF cp FF ;} If [[hl]] = FFh: return ROM1:5000 C8 ret z ;/ ROM1:5001 11 10 00 ld de,0010 ;\ ROM1:5004 19 add hl,de ;} hl += 10h ROM1:5005 7D ld a,l ;/ ROM1:5006 CB 37 swap a ;\ ROM1:5008 FE 03 cp 03 ;} If [hl] != DD30h: go to LOOP ROM1:500A 20 F1 jr nz,4FFD ;/ ROM1:500C C9 ret } ;;; $500D: Projectile handler ;;; { ; Externally called by: ; $04DF: Game mode 4: in-game ROM1:500D AF xor a ;\ ROM1:500E EA 32 D0 ld (D032),a ;} Projectile index = 0 } ;;; $5011: Projectile handler - loop ;;; { ROM1:5011 3E DD ld a,DD ;\ ROM1:5013 67 ld h,a ;| ROM1:5014 E0 B8 ld (FF00+B8),a ;| ROM1:5016 FA 32 D0 ld a,(D032) ;} hl = $FFB7 = $DD00 + [projectile index] * 10h ROM1:5019 CB 37 swap a ;| ROM1:501B 6F ld l,a ;| ROM1:501C E0 B7 ld (FF00+B7),a ;/ ROM1:501E 2A ldi a,(hl) ;\ ROM1:501F E0 B9 ld (FF00+B9),a ;} $FFB9 = $D08D = projectile type ROM1:5021 EA 8D D0 ld (D08D),a ;/ ROM1:5024 FE FF cp FF ;\ ROM1:5026 CA F3 52 jp z,52F3 ;} If projectile type = FFh: go to projectile handler - next ROM1:5029 2A ldi a,(hl) ;\ ROM1:502A E0 98 ld (FF00+98),a ;} $FF98 = $D012 = projectile direction ROM1:502C EA 12 D0 ld (D012),a ;/ ROM1:502F 2A ldi a,(hl) ;\ ROM1:5030 E0 99 ld (FF00+99),a ;} $FF99 = projectile Y position ROM1:5032 2A ldi a,(hl) ;\ ROM1:5033 E0 9A ld (FF00+9A),a ;} $FF9A = projectile X position ROM1:5035 2A ldi a,(hl) ;\ ROM1:5036 E0 BA ld (FF00+BA),a ;} $FFBA = projectile unknown ROM1:5038 2A ldi a,(hl) ;\ ROM1:5039 3C inc a ;} $FFBB = projectile frame counter + 1 ROM1:503A E0 BB ld (FF00+BB),a ;/ ROM1:503C F0 B9 ld a,(FF00+B9) ;\ ROM1:503E FE 02 cp 02 ;} If projectile type = wave: go to projectile handler - wave ROM1:5040 CA D4 50 jp z,50D4 ;/ ROM1:5043 FE 03 cp 03 ;\ ROM1:5045 28 08 jr z,504F ;} If projectile type = spazer: go to projectile handler - spazer ROM1:5047 FE 08 cp 08 ;\ ROM1:5049 CA C3 51 jp z,51C3 ;} If projectile type = missile: go to projectile handler - missile ROM1:504C C3 16 52 jp 5216 ; Go to projectile handler - normal, ice, plasma: } ;;; $504F: Projectile handler - spazer ;;; { ROM1:504F F0 98 ld a,(FF00+98) ;\ ROM1:5051 CB 47 bit 0,a ;} If projectile direction = right: ROM1:5053 28 0F jr z,5064 ;/ ROM1:5055 CD 9A 50 call 509A ; Projectile handler - spazer - horizontal ROM1:5058 F0 9A ld a,(FF00+9A) ;\ ROM1:505A C6 04 add a,04 ;| ROM1:505C 21 35 D0 ld hl,D035 ;} Projectile X position += [screen right velocity] + 4 ROM1:505F 86 add a,(hl) ;| ROM1:5060 E0 9A ld (FF00+9A),a ;/ ROM1:5062 18 33 jr 5097 ; Go to BRANCH_ALPHA ROM1:5064 CB 4F bit 1,a ;\ ROM1:5066 28 0F jr z,5077 ;} If projectile direction = left: ROM1:5068 CD 9A 50 call 509A ; Projectile handler - spazer - horizontal ROM1:506B F0 9A ld a,(FF00+9A) ;\ ROM1:506D D6 04 sub 04 ;| ROM1:506F 21 36 D0 ld hl,D036 ;} Projectile X position -= [screen left velocity] + 4 ROM1:5072 96 sub (hl) ;| ROM1:5073 E0 9A ld (FF00+9A),a ;/ ROM1:5075 18 20 jr 5097 ; Go to BRANCH_ALPHA ROM1:5077 CB 57 bit 2,a ;\ ROM1:5079 28 0F jr z,508A ;} If projectile direction = up: ROM1:507B CD B7 50 call 50B7 ; Projectile handler - spazer - vertical ROM1:507E F0 99 ld a,(FF00+99) ;\ ROM1:5080 D6 04 sub 04 ;| ROM1:5082 21 37 D0 ld hl,D037 ;} Projectile Y position -= [screen up velocity] + 4 ROM1:5085 96 sub (hl) ;| ROM1:5086 E0 99 ld (FF00+99),a ;/ ROM1:5088 18 0D jr 5097 ; Go to BRANCH_ALPHA ROM1:508A CD B7 50 call 50B7 ; Projectile handler - spazer - vertical ROM1:508D F0 99 ld a,(FF00+99) ;\ ROM1:508F C6 04 add a,04 ;| ROM1:5091 21 38 D0 ld hl,D038 ;} Projectile Y position += [screen down velocity] + 4 ROM1:5094 86 add a,(hl) ;| ROM1:5095 E0 99 ld (FF00+99),a ;/ ; BRANCH_ALPHA ROM1:5097 C3 82 52 jp 5282 ; Go to $5282 } ;;; $509A: Projectile handler - spazer - horizontal ;;; { ROM1:509A F0 BB ld a,(FF00+BB) ;\ ROM1:509C FE 05 cp 05 ;} If projectile frame counter >= 5: return ROM1:509E D0 ret nc ;/ ROM1:509F 7D ld a,l ;\ ROM1:50A0 E6 F0 and F0 ;| ROM1:50A2 FE 10 cp 10 ;} If projectile slot = 1: return ROM1:50A4 C8 ret z ;/ ROM1:50A5 FE 00 cp 00 ;\ ROM1:50A7 20 07 jr nz,50B0 ;} If projectile slot = 0: ROM1:50A9 F0 99 ld a,(FF00+99) ;\ ROM1:50AB D6 02 sub 02 ;} Projectile Y position -= 2 ROM1:50AD E0 99 ld (FF00+99),a ;/ ROM1:50AF C9 ret ROM1:50B0 F0 99 ld a,(FF00+99) ;\ Else (projectile slot = 2): ROM1:50B2 C6 02 add a,02 ;} Projectile Y position += 2 ROM1:50B4 E0 99 ld (FF00+99),a ;/ ROM1:50B6 C9 ret } ;;; $50B7: Projectile handler - spazer - vertical ;;; { ROM1:50B7 F0 BB ld a,(FF00+BB) ;\ ROM1:50B9 FE 05 cp 05 ;} If projectilee frame counter >= 5: return ROM1:50BB D0 ret nc ;/ ROM1:50BC 7D ld a,l ;\ ROM1:50BD E6 F0 and F0 ;| ROM1:50BF FE 10 cp 10 ;} If projectile slot = 1: return ROM1:50C1 C8 ret z ;/ ROM1:50C2 FE 00 cp 00 ;\ ROM1:50C4 20 07 jr nz,50CD ;} If projectile slot = 0: ROM1:50C6 F0 9A ld a,(FF00+9A) ;\ ROM1:50C8 D6 02 sub 02 ;} Projectile X position -= 2 ROM1:50CA E0 9A ld (FF00+9A),a ;/ ROM1:50CC C9 ret ROM1:50CD F0 9A ld a,(FF00+9A) ;\ Else (projectile slot = 2): ROM1:50CF C6 02 add a,02 ;} Projectile X position += 2 ROM1:50D1 E0 9A ld (FF00+9A),a ;/ ROM1:50D3 C9 ret } ;;; $50D4: Projectile handler - wave ;;; { ; LOOP ROM1:50D4 21 83 51 ld hl,5183 ;\ ROM1:50D7 F0 BA ld a,(FF00+BA) ;| ROM1:50D9 5F ld e,a ;} hl = $5183 + [working projectile wave index] ROM1:50DA 16 00 ld d,00 ;| ROM1:50DC 19 add hl,de ;/ ROM1:50DD 7E ld a,(hl) ;\ ROM1:50DE FE 80 cp 80 ;} If [[hl]] = 80h: ROM1:50E0 20 05 jr nz,50E7 ;/ ROM1:50E2 AF xor a ;\ ROM1:50E3 E0 BA ld (FF00+BA),a ;} Working projectile wave index = 0 ROM1:50E5 18 ED jr 50D4 ; Go to LOOP ROM1:50E7 47 ld b,a ;\ ROM1:50E8 F0 98 ld a,(FF00+98) ;| ROM1:50EA E6 0C and 0C ;} If working projectile direction is vertical: go to BRANCH_VERTICAL ROM1:50EC 20 28 jr nz,5116 ;/ ROM1:50EE F0 99 ld a,(FF00+99) ;\ ROM1:50F0 80 add a,b ;} Working projectile Y position += [[hl]] ROM1:50F1 E0 99 ld (FF00+99),a ;/ ROM1:50F3 F0 BA ld a,(FF00+BA) ;\ ROM1:50F5 3C inc a ;} Increment working projectile wave index ROM1:50F6 E0 BA ld (FF00+BA),a ;/ ROM1:50F8 F0 98 ld a,(FF00+98) ;\ ROM1:50FA CB 4F bit 1,a ;} If working projectile direction = right: ROM1:50FC 20 0C jr nz,510A ;/ ROM1:50FE F0 9A ld a,(FF00+9A) ;\ ROM1:5100 C6 02 add a,02 ;| ROM1:5102 21 35 D0 ld hl,D035 ;} Working projectile X position += [screen right velocity] + 2 ROM1:5105 86 add a,(hl) ;| ROM1:5106 E0 9A ld (FF00+9A),a ;/ ROM1:5108 18 32 jr 513C ; Go to BRANCH_MOVE_PROJECTILE_END ROM1:510A F0 9A ld a,(FF00+9A) ;\ Else (working projectile direction = left): ROM1:510C D6 02 sub 02 ;| ROM1:510E 21 36 D0 ld hl,D036 ;} Working projectile X position -= [screen left velocity] + 2 ROM1:5111 96 sub (hl) ;| ROM1:5112 E0 9A ld (FF00+9A),a ;/ ROM1:5114 18 26 jr 513C ; Go to BRANCH_MOVE_PROJECTILE_END ; BRANCH_VERTICAL ROM1:5116 F0 9A ld a,(FF00+9A) ;\ ROM1:5118 80 add a,b ;} Working projectile X position += [[hl]] ROM1:5119 E0 9A ld (FF00+9A),a ;/ ROM1:511B F0 BA ld a,(FF00+BA) ;\ ROM1:511D 3C inc a ;} Increment working projectile wave index ROM1:511E E0 BA ld (FF00+BA),a ;/ ROM1:5120 F0 98 ld a,(FF00+98) ;\ ROM1:5122 CB 57 bit 2,a ;} If working projectile direction = down: ROM1:5124 20 0C jr nz,5132 ;/ ROM1:5126 F0 99 ld a,(FF00+99) ;\ ROM1:5128 C6 02 add a,02 ;| ROM1:512A 21 38 D0 ld hl,D038 ;} Working projectile Y position += [screen down velocity] + 2 ROM1:512D 86 add a,(hl) ;| ROM1:512E E0 99 ld (FF00+99),a ;/ ROM1:5130 18 0A jr 513C ; Go to BRANCH_MOVE_PROJECTILE_END ROM1:5132 F0 99 ld a,(FF00+99) ;\ ROM1:5134 D6 02 sub 02 ;| ROM1:5136 21 37 D0 ld hl,D037 ;} Working projectile Y position -= [screen up velocity] + 2 ROM1:5139 96 sub (hl) ;| ROM1:513A E0 99 ld (FF00+99),a ;/ ; BRANCH_MOVE_PROJECTILE_END ROM1:513C F0 B7 ld a,(FF00+B7) ;\ ROM1:513E 6F ld l,a ;| ROM1:513F F0 B8 ld a,(FF00+B8) ;| ROM1:5141 67 ld h,a ;| ROM1:5142 23 inc hl ;} Projectile Y position = [working projectile Y position] ROM1:5143 23 inc hl ;| ROM1:5144 F0 99 ld a,(FF00+99) ;| ROM1:5146 22 ldi (hl),a ;/ ROM1:5147 C6 04 add a,04 ;\ ROM1:5149 EA 03 C2 ld (C203),a ;} Tile Y = [projectile Y position] + 4 ROM1:514C F0 9A ld a,(FF00+9A) ;\ ROM1:514E 22 ldi (hl),a ;} Projectile X position = [working projectile X position] ROM1:514F C6 04 add a,04 ;\ ROM1:5151 EA 04 C2 ld (C204),a ;} Tile X = [projectile X position] + 4 ROM1:5154 F0 BA ld a,(FF00+BA) ;\ ROM1:5156 77 ld (hl),a ;} Projectile wave index = [working projectile wave index] ROM1:5157 F0 97 ld a,(FF00+97) ;\ ROM1:5159 E6 01 and 01 ;} If even frame: go to projectile-enemy collision handler ROM1:515B CA E0 52 jp z,52E0 ;/ ROM1:515E CD 66 22 call 2266 ; Get tilemap value ROM1:5161 21 8A D0 ld hl,D08A ;\ ROM1:5164 BE cp (hl) ;} If tilemap value >= [projectile solid block threshold]: go to projectile-enemy collision handler ROM1:5165 D2 E0 52 jp nc,52E0 ;/ ROM1:5168 FE 04 cp 04 ;\ ROM1:516A 30 06 jr nc,5172 ;} If tilemap value < 4: ROM1:516C CD 71 56 call 5671 ; Destroy respawning block ROM1:516F C3 F3 52 jp 52F3 ; Go to projectile handler - next ROM1:5172 26 DC ld h,DC ;\ ROM1:5174 6F ld l,a ;| ROM1:5175 7E ld a,(hl) ;} If tilemap value is not a shot block: go to projectile handler - next ROM1:5176 CB 6F bit 5,a ;| ROM1:5178 CA F3 52 jp z,52F3 ;/ ROM1:517B 3E FF ld a,FF ROM1:517D CD E9 56 call 56E9 ; Destroy block ROM1:5180 C3 F3 52 jp 52F3 ; Go to projectile handler - next } ;;; $5183: Wave beam transverse velocity table ;;; { ; ; ___ ; __/ \__ ; / \ ; _/ \_ ; / \ ; / \ ; ___ / \ ___ :| ; \ / ; \ / ; \ _ _ / ; \ / ; \ __ __ / ; \ ___ / ROM1:5183 db 00, 07, 05, 02, 00, FE, FB, F9, 00, F9, FB, FE, 00, 02, 05, 07, 80, } ;;; $5194: ;;; { ; Maybe a beta version of wave beam? Actually could be used as the initial wave beam pattern if the projectile wave index is set to 11h ; / \ / \ / \ ; / \ / \ / \ ; / \ / \ / \ :| ; \ / \ / \ / ; \ / \ / \ / ; \ / \ / \ / ROM1:5194 db 0A, F6, F6, 0A, 0A, F6, F6, 0A, 0A, F6, F6, 0A, 80, } ;;; $51A1: Missile speed table ;;; { ROM1:51A1 db 00, 00, 01, 00, 00, 01, 00, 01, 00, 01, 00, 01, 01, 01, 01, 02, 01, 02, 01, 02, 02, 02, 02, 03, 02, 02, 03, 02, 03, 03, 03, 03, 04, FF } ;;; $51C3: Projectile handler - missile ;;; { ROM1:51C3 F0 BB ld a,(FF00+BB) ;\ ROM1:51C5 5F ld e,a ;| ROM1:51C6 16 00 ld d,00 ;| ROM1:51C8 21 A1 51 ld hl,51A1 ;| ROM1:51CB 19 add hl,de ;} If [$51A1 + [working projectile frame counter]] = FFh: ROM1:51CC 7E ld a,(hl) ;| ROM1:51CD FE FF cp FF ;| ROM1:51CF 20 08 jr nz,51D9 ;/ ROM1:51D1 F0 BB ld a,(FF00+BB) ;\ ROM1:51D3 3D dec a ;| ROM1:51D4 E0 BB ld (FF00+BB),a ;} Decrement working projectile frame counter ROM1:51D6 FA C1 51 ld a,(51C1) ;/ ROM1:51D9 47 ld b,a ROM1:51DA F0 98 ld a,(FF00+98) ;\ ROM1:51DC CB 47 bit 0,a ;} If working projectile direction is right: ROM1:51DE 28 0C jr z,51EC ;/ ROM1:51E0 F0 9A ld a,(FF00+9A) ;\ ROM1:51E2 80 add a,b ;| ROM1:51E3 21 35 D0 ld hl,D035 ;} Working projectile X position += [screen right velocity] + [$51A1 + [working projectile frame counter]] ROM1:51E6 86 add a,(hl) ;| ROM1:51E7 E0 9A ld (FF00+9A),a ;/ ROM1:51E9 C3 82 52 jp 5282 ; Go to projectile handler - shared ROM1:51EC CB 4F bit 1,a ;\ ROM1:51EE 28 0C jr z,51FC ;} If working projectile direction is left: ROM1:51F0 F0 9A ld a,(FF00+9A) ;\ ROM1:51F2 90 sub b ;| ROM1:51F3 21 36 D0 ld hl,D036 ;} Working projectile X position -= [screen left velocity] + [$51A1 + [working projectile frame counter]] ROM1:51F6 96 sub (hl) ;| ROM1:51F7 E0 9A ld (FF00+9A),a ;/ ROM1:51F9 C3 82 52 jp 5282 ; Go to projectile handler - shared ROM1:51FC CB 57 bit 2,a ;\ ROM1:51FE 28 0B jr z,520B ;} If working projectile direction is up: ROM1:5200 F0 99 ld a,(FF00+99) ;\ ROM1:5202 90 sub b ;| ROM1:5203 21 37 D0 ld hl,D037 ;} Working projectile Y position -= [screen up velocity] + [$51A1 + [working projectile frame counter]] ROM1:5206 96 sub (hl) ;| ROM1:5207 E0 99 ld (FF00+99),a ;/ ROM1:5209 18 77 jr 5282 ; Go to projectile handler - shared ROM1:520B F0 99 ld a,(FF00+99) ;\ ROM1:520D 80 add a,b ;| ROM1:520E 21 38 D0 ld hl,D038 ;} Working projectile Y position += [screen down velocity] + [$51A1 + [working projectile frame counter]] ROM1:5211 86 add a,(hl) ;| ROM1:5212 E0 99 ld (FF00+99),a ;/ ROM1:5214 18 6C jr 5282 ; Go to projectile handler - shared } ;;; $5216: Projectile handler - normal, ice, plasma ;;; { ROM1:5216 F0 98 ld a,(FF00+98) ;\ ROM1:5218 CB 47 bit 0,a ;} If working projectile direction = right: ROM1:521A 28 18 jr z,5234 ;/ ROM1:521C F0 9A ld a,(FF00+9A) ;\ ROM1:521E C6 04 add a,04 ;| ROM1:5220 21 35 D0 ld hl,D035 ;} Working projectile X position += [screen right velocity] + 4 ROM1:5223 86 add a,(hl) ;| ROM1:5224 E0 9A ld (FF00+9A),a ;/ ROM1:5226 F0 B9 ld a,(FF00+B9) ;\ ROM1:5228 FE 04 cp 04 ;} If [working projectile type] != plasma: go to projectile handler - shared ROM1:522A 20 56 jr nz,5282 ;/ ROM1:522C F0 9A ld a,(FF00+9A) ;\ ROM1:522E C6 02 add a,02 ;} Working projectile X position += 2 ROM1:5230 E0 9A ld (FF00+9A),a ;/ ROM1:5232 18 4E jr 5282 ; Go to projectile handler - shared ROM1:5234 CB 4F bit 1,a ;\ ROM1:5236 28 18 jr z,5250 ;} If working projectile direction is left: ROM1:5238 F0 9A ld a,(FF00+9A) ;\ ROM1:523A D6 04 sub 04 ;| ROM1:523C 21 36 D0 ld hl,D036 ;} Working projectile X position -= [screen right velocity] + 4 ROM1:523F 96 sub (hl) ;| ROM1:5240 E0 9A ld (FF00+9A),a ;/ ROM1:5242 F0 B9 ld a,(FF00+B9) ;\ ROM1:5244 FE 04 cp 04 ;} If [working projectile type] != plasma: go to projectile handler - shared ROM1:5246 20 3A jr nz,5282 ;/ ROM1:5248 F0 9A ld a,(FF00+9A) ;\ ROM1:524A D6 02 sub 02 ;} Working projectile X position -= 2 ROM1:524C E0 9A ld (FF00+9A),a ;/ ROM1:524E 18 32 jr 5282 ; Go to projectile handler - shared ROM1:5250 CB 57 bit 2,a ;\ ROM1:5252 28 18 jr z,526C ;} If working projectile direction is up: ROM1:5254 F0 99 ld a,(FF00+99) ;\ ROM1:5256 D6 04 sub 04 ;| ROM1:5258 21 37 D0 ld hl,D037 ;} Working projectile Y position -= [screen up velocity] + 4 ROM1:525B 96 sub (hl) ;| ROM1:525C E0 99 ld (FF00+99),a ;/ ROM1:525E F0 B9 ld a,(FF00+B9) ;\ ROM1:5260 FE 04 cp 04 ;} If [working projectile type] != plasma: go to projectile handler - shared ROM1:5262 20 1E jr nz,5282 ;/ ROM1:5264 F0 99 ld a,(FF00+99) ;\ ROM1:5266 D6 02 sub 02 ;} Working projectile Y position -= 2 ROM1:5268 E0 99 ld (FF00+99),a ;/ ROM1:526A 18 16 jr 5282 ; Go to projectile handler - shared ROM1:526C F0 99 ld a,(FF00+99) ;\ ROM1:526E C6 04 add a,04 ;| ROM1:5270 21 38 D0 ld hl,D038 ;} Working projectile Y position += [screen up velocity] + 4 ROM1:5273 86 add a,(hl) ;| ROM1:5274 E0 99 ld (FF00+99),a ;/ ROM1:5276 F0 B9 ld a,(FF00+B9) ;\ ROM1:5278 FE 04 cp 04 ;} If [working projectile type] != plasma: go to projectile handler - shared ROM1:527A 20 06 jr nz,5282 ;/ ROM1:527C F0 99 ld a,(FF00+99) ;\ ROM1:527E C6 02 add a,02 ;} Working projectile Y position += 2 ROM1:5280 E0 99 ld (FF00+99),a ;/ } ;;; $5282: Projectile handler - shared ;;; { ROM1:5282 F0 B7 ld a,(FF00+B7) ;\ ROM1:5284 6F ld l,a ;| ROM1:5285 F0 B8 ld a,(FF00+B8) ;| ROM1:5287 67 ld h,a ;| ROM1:5288 23 inc hl ;} Projectile Y position = [working projectile Y position] ROM1:5289 23 inc hl ;| ROM1:528A F0 99 ld a,(FF00+99) ;| ROM1:528C 22 ldi (hl),a ;/ ROM1:528D C6 04 add a,04 ;\ ROM1:528F EA 03 C2 ld (C203),a ;} Tile Y = [projectile Y position] + 4 ROM1:5292 F0 9A ld a,(FF00+9A) ;\ ROM1:5294 22 ldi (hl),a ;} Projectile X position = [working projectile X position] ROM1:5295 C6 04 add a,04 ;\ ROM1:5297 EA 04 C2 ld (C204),a ;} Tile X = [projectile X position] + 4 ROM1:529A F0 BA ld a,(FF00+BA) ;\ ROM1:529C 22 ldi (hl),a ;} Projectile wave index = [working projectile wave index] ROM1:529D F0 BB ld a,(FF00+BB) ;\ ROM1:529F 77 ld (hl),a ;} Projectile frame counter = [working projectile frame counter] ROM1:52A0 F0 97 ld a,(FF00+97) ;\ ROM1:52A2 E6 01 and 01 ;} If even frame: go to projectile-enemy collision handler ROM1:52A4 28 3A jr z,52E0 ;/ ROM1:52A6 CD 66 22 call 2266 ; Get tilemap value ROM1:52A9 21 8A D0 ld hl,D08A ;\ ROM1:52AC BE cp (hl) ;} If tilemap value >= [projectile solid block threshold]: go to projectile-enemy collision handler ROM1:52AD 30 31 jr nc,52E0 ;/ ROM1:52AF FE 04 cp 04 ;\ ROM1:52B1 30 05 jr nc,52B8 ;} If tilemap value < 4: ROM1:52B3 DC 71 56 call c,5671 ; Destroy respawning block ROM1:52B6 18 0E jr 52C6 ROM1:52B8 26 DC ld h,DC ;\ Else (tilemap value >= 4): ROM1:52BA 6F ld l,a ;| ROM1:52BB 7E ld a,(hl) ;} If tilemap value is a shot block: ROM1:52BC CB 6F bit 5,a ;| ROM1:52BE CA C6 52 jp z,52C6 ;/ ROM1:52C1 3E FF ld a,FF ROM1:52C3 CD E9 56 call 56E9 ; Destroy block ROM1:52C6 F0 B9 ld a,(FF00+B9) ;\ ROM1:52C8 FE 07 cp 07 ;} If [working projectile type] = 7: lay a bomb at working projectile position ROM1:52CA CC AF 53 call z,53AF ;/ ROM1:52CD FE 03 cp 03 ;\ ROM1:52CF 28 22 jr z,52F3 ;} If [working projectile type] = spazer: go to projectile handler - next ROM1:52D1 FE 04 cp 04 ;\ ROM1:52D3 28 1E jr z,52F3 ;} If [working projectile type] = plasma: go to projectile handler - next ROM1:52D5 F0 B7 ld a,(FF00+B7) ;\ ROM1:52D7 6F ld l,a ;| ROM1:52D8 F0 B8 ld a,(FF00+B8) ;| ROM1:52DA 67 ld h,a ;} Projectile type = none ROM1:52DB 3E FF ld a,FF ;| ROM1:52DD 77 ld (hl),a ;/ ROM1:52DE 18 13 jr 52F3 ; Go to projectile handler - next } ;;; $52E0: Projectile-enemy collision handler ;;; { ROM1:52E0 CD B6 31 call 31B6 ; Projectile-enemies collision detection ROM1:52E3 30 0E jr nc,52F3 ; If projectile collided with enemy: ROM1:52E5 3E DD ld a,DD ;\ ROM1:52E7 67 ld h,a ;| ROM1:52E8 E0 B8 ld (FF00+B8),a ;| ROM1:52EA FA 32 D0 ld a,(D032) ;} Projectile slot address = $DD00 + [projectile slot] * 10h ROM1:52ED CB 37 swap a ;| ROM1:52EF 6F ld l,a ;/ ROM1:52F0 3E FF ld a,FF ;\ ROM1:52F2 77 ld (hl),a ;} Projectile type = 0 } ;;; $52F3: Projectile handler - next ;;; { ROM1:52F3 FA 32 D0 ld a,(D032) ;\ ROM1:52F6 3C inc a ;} Increment projectile index ROM1:52F7 EA 32 D0 ld (D032),a ;/ ROM1:52FA FE 03 cp 03 ;\ ROM1:52FC DA 11 50 jp c,5011 ;} If projectile index < 3: go to projectile handler - loop ROM1:52FF C9 ret } ;;; $5300: Projectile GFX handler ;;; { ; Externally called by: ; $04DF: Game mode 4: in-game ROM1:5300 3E 00 ld a,00 ;\ ROM1:5302 EA 32 D0 ld (D032),a ;} Projectile index = 0 ; LOOP_ALPHA ROM1:5305 21 00 DD ld hl,DD00 ;\ ROM1:5308 FA 32 D0 ld a,(D032) ;| ROM1:530B CB 37 swap a ;| ROM1:530D 5F ld e,a ;} hl = $DD00 + [projectile index] * 10h ROM1:530E 16 00 ld d,00 ;| ROM1:5310 19 add hl,de ;/ ROM1:5311 2A ldi a,(hl) ;\ ROM1:5312 57 ld d,a ;} d = projectile type ROM1:5313 FE FF cp FF ;\ ROM1:5315 CA 90 53 jp z,5390 ;} If projectile type = FFh: go to BRANCH_NEXT ROM1:5318 2A ldi a,(hl) ;\ ROM1:5319 4F ld c,a ;} c = projectile direction ROM1:531A FA 05 C2 ld a,(C205) ;\ ROM1:531D 47 ld b,a ;| ROM1:531E 2A ldi a,(hl) ;} Sprite Y position = projectile Y position - [scroll Y] ROM1:531F 90 sub b ;| ROM1:5320 E0 C4 ld (FF00+C4),a ;/ ROM1:5322 FA 06 C2 ld a,(C206) ;\ ROM1:5325 47 ld b,a ;| ROM1:5326 7E ld a,(hl) ;} Sprite X position = projectile X position - [scroll X] ROM1:5327 90 sub b ;| ROM1:5328 E0 C5 ld (FF00+C5),a ;/ ROM1:532A AF xor a ;\ ROM1:532B E0 C7 ld (FF00+C7),a ;} Sprite attributes = 0 ROM1:532D 7A ld a,d ;\ ROM1:532E FE 08 cp 08 ;} If projectile type = missile: ROM1:5330 20 1A jr nz,534C ;/ ROM1:5332 E5 push hl ROM1:5333 21 9D 53 ld hl,539D ;\ ROM1:5336 79 ld a,c ;| ROM1:5337 5F ld e,a ;| ROM1:5338 16 00 ld d,00 ;} Sprite set = [$539D + projectile direction] ROM1:533A 19 add hl,de ;| ROM1:533B 7E ld a,(hl) ;| ROM1:533C E0 C6 ld (FF00+C6),a ;/ ROM1:533E 21 A6 53 ld hl,53A6 ;\ ROM1:5341 79 ld a,c ;| ROM1:5342 5F ld e,a ;| ROM1:5343 16 00 ld d,00 ;} Sprite attributes = [$53A6 + projectile direction] ROM1:5345 19 add hl,de ;| ROM1:5346 7E ld a,(hl) ;| ROM1:5347 E0 C7 ld (FF00+C7),a ;/ ROM1:5349 E1 pop hl ROM1:534A 18 0D jr 5359 ROM1:534C 3E 7E ld a,7E ;\ Else (projectile type != missile): ROM1:534E E0 C6 ld (FF00+C6),a ;} Sprite set = 7Eh ROM1:5350 79 ld a,c ;\ ROM1:5351 E6 03 and 03 ;} If projectile direction is vertical: ROM1:5353 20 04 jr nz,5359 ;/ ROM1:5355 3E 7F ld a,7F ;\ ROM1:5357 E0 C6 ld (FF00+C6),a ;} Sprite set = 7Fh ROM1:5359 F0 C5 ld a,(FF00+C5) ;\ ROM1:535B FE 08 cp 08 ;} If [sprite X position] < 8: go to BRANCH_DELETE_PROJECTILE ROM1:535D 38 2B jr c,538A ;/ ROM1:535F F0 C5 ld a,(FF00+C5) ;\ ROM1:5361 FE A4 cp A4 ;} If [sprite X position] >= A4h: go to BRANCH_DELETE_PROJECTILE ROM1:5363 30 25 jr nc,538A ;/ ROM1:5365 F0 C4 ld a,(FF00+C4) ;\ ROM1:5367 FE 0C cp 0C ;} If [sprite Y position] < Ch: go to BRANCH_DELETE_PROJECTILE ROM1:5369 38 1F jr c,538A ;/ ROM1:536B F0 C4 ld a,(FF00+C4) ;\ ROM1:536D FE 94 cp 94 ;} If [sprite Y position] >= 94h: go to BRANCH_DELETE_PROJECTILE ROM1:536F 30 19 jr nc,538A ;/ ROM1:5371 26 C0 ld h,C0 ;\ ROM1:5373 F0 8D ld a,(FF00+8D) ;| ROM1:5375 6F ld l,a ;| ROM1:5376 F0 C4 ld a,(FF00+C4) ;| ROM1:5378 22 ldi (hl),a ;| ROM1:5379 F0 C5 ld a,(FF00+C5) ;| ROM1:537B 22 ldi (hl),a ;} Push sprite onto OAM stack ROM1:537C F0 C6 ld a,(FF00+C6) ;| ROM1:537E 22 ldi (hl),a ;| ROM1:537F F0 C7 ld a,(FF00+C7) ;| ROM1:5381 22 ldi (hl),a ;| ROM1:5382 7D ld a,l ;| ROM1:5383 E0 8D ld (FF00+8D),a ;/ ROM1:5385 AF xor a ROM1:5386 E0 C7 ld (FF00+C7),a ROM1:5388 18 06 jr 5390 ; Go to BRANCH_NEXT ; BRANCH_DELETE_PROJECTILE ROM1:538A 2B dec hl ;\ ROM1:538B 2B dec hl ;| ROM1:538C 2B dec hl ;} Projectile type = FFh ROM1:538D 3E FF ld a,FF ;| ROM1:538F 77 ld (hl),a ;/ ; BRANCH_NEXT ROM1:5390 FA 32 D0 ld a,(D032) ;\ ROM1:5393 3C inc a ;} Increment projectile index ROM1:5394 EA 32 D0 ld (D032),a ;/ ROM1:5397 FE 03 cp 03 ;\ ROM1:5399 DA 05 53 jp c,5305 ;} If [projectile index] < 3: go to LOOP_ALPHA ROM1:539C C9 ret ; _____________________________ Right ; | _________________________ Left ; | | _________________ Up ; | | | _ Down ; | | | | ROM1:539D db 00, 98, 98, 00, 99, 00, 00, 00, 99 ; Missile sprite set ROM1:53A6 db 00, 00, 20, 00, 00, 00, 00, 00, 40 ; Missile sprite attributes } ;;; $53AF: Lay a bomb at working projectile position ;;; { ROM1:53AF 21 30 DD ld hl,DD30 ; hl = $DD30 ; LOOP_ALPHA ROM1:53B2 7E ld a,(hl) ;\ ROM1:53B3 FE FF cp FF ;} If bomb type != FFh ROM1:53B5 28 0C jr z,53C3 ;/ ROM1:53B7 11 10 00 ld de,0010 ;\ ROM1:53BA 19 add hl,de ;} hl += 10h ROM1:53BB 7D ld a,l ;\ ROM1:53BC CB 37 swap a ;| ROM1:53BE FE 06 cp 06 ;} If [hl] != $DD60: go to LOOP_ALPHA ROM1:53C0 20 F0 jr nz,53B2 ;/ ROM1:53C2 C9 ret ROM1:53C3 3E 01 ld a,01 ;\ ROM1:53C5 22 ldi (hl),a ;} Bomb type = bomb ROM1:53C6 3E 60 ld a,60 ;\ ROM1:53C8 22 ldi (hl),a ;} Bomb timer = 60h ROM1:53C9 F0 99 ld a,(FF00+99) ;\ ROM1:53CB C6 04 add a,04 ;} Bomb Y position = [$FF99] + 4 ROM1:53CD 22 ldi (hl),a ;/ ROM1:53CE F0 9A ld a,(FF00+9A) ;\ ROM1:53D0 C6 04 add a,04 ;} Bomb X position = [$FF9A] + 4 ROM1:53D2 22 ldi (hl),a ;/ ROM1:53D3 3E 13 ld a,13 ;\ ROM1:53D5 EA C0 CE ld (CEC0),a ;} Play bomb laid sound effect ROM1:53D8 C9 ret } ;;; $53D9: Lay a bomb at Samus' position ;;; { ROM1:53D9 FA 45 D0 ld a,(D045) ;\ ROM1:53DC CB 47 bit 0,a ;} If bombs not equipped: return ROM1:53DE C8 ret z ;/ ROM1:53DF F0 81 ld a,(FF00+81) ;\ ROM1:53E1 CB 4F bit 1,a ;} If B not newly pressed: return ROM1:53E3 C8 ret z ;/ ROM1:53E4 21 30 DD ld hl,DD30 ; hl = $DD30 ; LOOP_ALPHA ROM1:53E7 7E ld a,(hl) ;\ ROM1:53E8 FE FF cp FF ;} If bomb type != FFh ROM1:53EA 28 0C jr z,53F8 ;/ ROM1:53EC 11 10 00 ld de,0010 ;\ ROM1:53EF 19 add hl,de ;} hl += 10h ROM1:53F0 7D ld a,l ;\ ROM1:53F1 CB 37 swap a ;| ROM1:53F3 FE 06 cp 06 ;} If [hl] != $DD60: go to LOOP_ALPHA ROM1:53F5 20 F0 jr nz,53E7 ;/ ROM1:53F7 C9 ret ROM1:53F8 3E 01 ld a,01 ;\ ROM1:53FA 22 ldi (hl),a ;} Bomb type = bomb ROM1:53FB 3E 60 ld a,60 ;\ ROM1:53FD 22 ldi (hl),a ;} Bomb timer = 60h ROM1:53FE F0 C0 ld a,(FF00+C0) ;\ ROM1:5400 C6 26 add a,26 ;} Bomb Y position = [Samus' Y position] + 26h ROM1:5402 22 ldi (hl),a ;/ ROM1:5403 F0 C2 ld a,(FF00+C2) ;\ ROM1:5405 C6 10 add a,10 ;} Bomb X position = [Samus' X position] + 10h ROM1:5407 22 ldi (hl),a ;/ ROM1:5408 3E 13 ld a,13 ;\ ROM1:540A EA C0 CE ld (CEC0),a ;} Play bomb laid sound effect ROM1:540D C9 ret } ;;; $540E: ;;; { ROM1:540E AF xor a ROM1:540F EA 32 D0 ld (D032),a ROM1:5412 21 30 DD ld hl,DD30 ROM1:5415 FA 32 D0 ld a,(D032) ROM1:5418 CB 37 swap a ROM1:541A 85 add a,l ROM1:541B 6F ld l,a ROM1:541C 2A ldi a,(hl) ROM1:541D E0 98 ld (FF00+98),a ROM1:541F FE FF cp FF ROM1:5421 28 6D jr z,5490 ROM1:5423 2A ldi a,(hl) ROM1:5424 4F ld c,a ROM1:5425 FA 05 C2 ld a,(C205) ROM1:5428 47 ld b,a ROM1:5429 2A ldi a,(hl) ROM1:542A EA 4A D0 ld (D04A),a ROM1:542D 90 sub b ROM1:542E E0 C4 ld (FF00+C4),a ROM1:5430 FA 06 C2 ld a,(C206) ROM1:5433 47 ld b,a ROM1:5434 7E ld a,(hl) ROM1:5435 EA 4B D0 ld (D04B),a ROM1:5438 90 sub b ROM1:5439 E0 C5 ld (FF00+C5),a ROM1:543B F0 C5 ld a,(FF00+C5) ROM1:543D FE B0 cp B0 ROM1:543F 30 49 jr nc,548A ROM1:5441 F0 C4 ld a,(FF00+C4) ROM1:5443 FE B0 cp B0 ROM1:5445 30 43 jr nc,548A ROM1:5447 F0 98 ld a,(FF00+98) ROM1:5449 FE 01 cp 01 ROM1:544B 20 10 jr nz,545D ROM1:544D 79 ld a,c ROM1:544E E6 08 and 08 ROM1:5450 CB 27 sla a ROM1:5452 CB 37 swap a ROM1:5454 C6 35 add a,35 ROM1:5456 E0 C6 ld (FF00+C6),a ROM1:5458 CD 62 4B call 4B62 ROM1:545B 18 33 jr 5490 ROM1:545D 79 ld a,c ROM1:545E FE 08 cp 08 ROM1:5460 20 1C jr nz,547E ROM1:5462 FA 20 D0 ld a,(D020) ROM1:5465 FE 18 cp 18 ROM1:5467 DC D7 54 call c,54D7 ROM1:546A 79 ld a,c ROM1:546B CB 3F srl a ROM1:546D C6 31 add a,31 ROM1:546F E0 C6 ld (FF00+C6),a ROM1:5471 CD 62 4B call 4B62 ROM1:5474 CD BB 30 call 30BB ROM1:5477 3E 0C ld a,0C ;\ ROM1:5479 EA D5 CE ld (CED5),a ;} Play bomb detonated sound effect ROM1:547C 18 12 jr 5490 ROM1:547E 79 ld a,c ROM1:547F CB 3F srl a ROM1:5481 C6 31 add a,31 ROM1:5483 E0 C6 ld (FF00+C6),a ROM1:5485 CD 62 4B call 4B62 ROM1:5488 18 06 jr 5490 ROM1:548A 2B dec hl ROM1:548B 2B dec hl ROM1:548C 2B dec hl ROM1:548D 3E FF ld a,FF ROM1:548F 77 ld (hl),a ROM1:5490 FA 32 D0 ld a,(D032) ROM1:5493 3C inc a ROM1:5494 EA 32 D0 ld (D032),a ROM1:5497 FE 03 cp 03 ROM1:5499 C2 12 54 jp nz,5412 ROM1:549C C9 ret } ;;; $549D: Bomb handler ;;; { ; Externally called by: ; $04DF: Game mode 4: in-game ROM1:549D AF xor a ;\ ROM1:549E EA 32 D0 ld (D032),a ;} Projectile index = #0 ; LOOP_ALPHA ROM1:54A1 21 30 DD ld hl,DD30 ;\ ROM1:54A4 FA 32 D0 ld a,(D032) ;| ROM1:54A7 CB 37 swap a ;} hl = $DD30 + [$D032] * 10h ROM1:54A9 85 add a,l ;| ROM1:54AA 6F ld l,a ;/ ROM1:54AB 2A ldi a,(hl) ;\ ROM1:54AC 47 ld b,a ;} b = bomb type ROM1:54AD FE FF cp FF ;\ ROM1:54AF 28 17 jr z,54C8 ;} If bomb type = FFh: go to BRANCH_NEXT ROM1:54B1 7E ld a,(hl) ;\ ROM1:54B2 3D dec a ;} Decrement bomb timer ROM1:54B3 77 ld (hl),a ;/ ROM1:54B4 20 12 jr nz,54C8 ; If bomb timer != 0: go to BRANCH_NEXT ROM1:54B6 78 ld a,b ;\ ROM1:54B7 FE 01 cp 01 ;} If bomb type != bomb ROM1:54B9 28 06 jr z,54C1 ;/ ROM1:54BB 2B dec hl ;\ ROM1:54BC 3E FF ld a,FF ;} Delete bomb ROM1:54BE 77 ld (hl),a ;/ ROM1:54BF 18 07 jr 54C8 ROM1:54C1 2B dec hl ;\ Else (bomb type = bomb): ROM1:54C2 3E 02 ld a,02 ;} Bomb type = bomb explosion ROM1:54C4 22 ldi (hl),a ;/ ROM1:54C5 3E 08 ld a,08 ;\ ROM1:54C7 77 ld (hl),a ;} Bomb timer = 8 ; BRANCH_NEXT ROM1:54C8 FA 32 D0 ld a,(D032) ;\ ROM1:54CB 3C inc a ;} Increment projectile index ROM1:54CC EA 32 D0 ld (D032),a ;/ ROM1:54CF FE 03 cp 03 ;\ ROM1:54D1 20 CE jr nz,54A1 ;} If projectile index != 3: go to LOOP_ALPHA ROM1:54D3 CD 0E 54 call 540E ; Execute subroutine $540E ROM1:54D6 C9 ret } ;;; $54D7: ;;; { ROM1:54D7 C5 push bc ROM1:54D8 D5 push de ROM1:54D9 E5 push hl ROM1:54DA F0 C4 ld a,(FF00+C4) ROM1:54DC 47 ld b,a ROM1:54DD FA 3B D0 ld a,(D03B) ROM1:54E0 D6 20 sub 20 ROM1:54E2 B8 cp b ROM1:54E3 30 40 jr nc,5525 ROM1:54E5 FA 3B D0 ld a,(D03B) ROM1:54E8 C6 20 add a,20 ROM1:54EA B8 cp b ROM1:54EB 38 38 jr c,5525 ROM1:54ED F0 C5 ld a,(FF00+C5) ROM1:54EF 47 ld b,a ROM1:54F0 FA 3C D0 ld a,(D03C) ROM1:54F3 D6 10 sub 10 ROM1:54F5 B8 cp b ROM1:54F6 30 2D jr nc,5525 ROM1:54F8 FA 3C D0 ld a,(D03C) ROM1:54FB C6 10 add a,10 ROM1:54FD B8 cp b ROM1:54FE 38 25 jr c,5525 ROM1:5500 0E FF ld c,FF ROM1:5502 FA 3C D0 ld a,(D03C) ROM1:5505 90 sub b ROM1:5506 38 06 jr c,550E ROM1:5508 0E 00 ld c,00 ROM1:550A 28 02 jr z,550E ROM1:550C 0E 01 ld c,01 ROM1:550E 79 ld a,c ROM1:550F EA 0F D0 ld (D00F),a ROM1:5512 3E 40 ld a,40 ROM1:5514 EA 26 D0 ld (D026),a ROM1:5517 FA 20 D0 ld a,(D020) ROM1:551A 5F ld e,a ROM1:551B 16 00 ld d,00 ROM1:551D 21 DD 55 ld hl,55DD ROM1:5520 19 add hl,de ROM1:5521 7E ld a,(hl) ROM1:5522 EA 20 D0 ld (D020),a ROM1:5525 FA 4A D0 ld a,(D04A) ROM1:5528 D6 10 sub 10 ROM1:552A EA 03 C2 ld (C203),a ROM1:552D FA 4B D0 ld a,(D04B) ROM1:5530 EA 04 C2 ld (C204),a ROM1:5533 CD 66 22 call 2266 ROM1:5536 FE 04 cp 04 ROM1:5538 30 05 jr nc,553F ROM1:553A CD 71 56 call 5671 ROM1:553D 18 0E jr 554D ROM1:553F 26 DC ld h,DC ROM1:5541 6F ld l,a ROM1:5542 7E ld a,(hl) ROM1:5543 CB 77 bit 6,a ROM1:5545 CA 4D 55 jp z,554D ROM1:5548 3E FF ld a,FF ROM1:554A CD E9 56 call 56E9 ROM1:554D FA 4A D0 ld a,(D04A) ROM1:5550 EA 03 C2 ld (C203),a ROM1:5553 CD 66 22 call 2266 ROM1:5556 FE 04 cp 04 ROM1:5558 30 05 jr nc,555F ROM1:555A CD 71 56 call 5671 ROM1:555D 18 0E jr 556D ROM1:555F 26 DC ld h,DC ROM1:5561 6F ld l,a ROM1:5562 7E ld a,(hl) ROM1:5563 CB 77 bit 6,a ROM1:5565 CA 6D 55 jp z,556D ROM1:5568 3E FF ld a,FF ROM1:556A CD E9 56 call 56E9 ROM1:556D FA 4A D0 ld a,(D04A) ROM1:5570 C6 10 add a,10 ROM1:5572 EA 03 C2 ld (C203),a ROM1:5575 CD 66 22 call 2266 ROM1:5578 FE 04 cp 04 ROM1:557A 30 05 jr nc,5581 ROM1:557C CD 71 56 call 5671 ROM1:557F 18 0E jr 558F ROM1:5581 26 DC ld h,DC ROM1:5583 6F ld l,a ROM1:5584 7E ld a,(hl) ROM1:5585 CB 77 bit 6,a ROM1:5587 CA 8F 55 jp z,558F ROM1:558A 3E FF ld a,FF ROM1:558C CD E9 56 call 56E9 ROM1:558F FA 4A D0 ld a,(D04A) ROM1:5592 EA 03 C2 ld (C203),a ROM1:5595 FA 4B D0 ld a,(D04B) ROM1:5598 C6 10 add a,10 ROM1:559A EA 04 C2 ld (C204),a ROM1:559D CD 66 22 call 2266 ROM1:55A0 FE 04 cp 04 ROM1:55A2 30 05 jr nc,55A9 ROM1:55A4 CD 71 56 call 5671 ROM1:55A7 18 0E jr 55B7 ROM1:55A9 26 DC ld h,DC ROM1:55AB 6F ld l,a ROM1:55AC 7E ld a,(hl) ROM1:55AD CB 77 bit 6,a ROM1:55AF CA B7 55 jp z,55B7 ROM1:55B2 3E FF ld a,FF ROM1:55B4 CD E9 56 call 56E9 ROM1:55B7 FA 4B D0 ld a,(D04B) ROM1:55BA D6 10 sub 10 ROM1:55BC EA 04 C2 ld (C204),a ROM1:55BF CD 66 22 call 2266 ROM1:55C2 FE 04 cp 04 ROM1:55C4 30 05 jr nc,55CB ROM1:55C6 CD 71 56 call 5671 ROM1:55C9 18 0E jr 55D9 ROM1:55CB 26 DC ld h,DC ROM1:55CD 6F ld l,a ROM1:55CE 7E ld a,(hl) ROM1:55CF CB 77 bit 6,a ROM1:55D1 CA D9 55 jp z,55D9 ROM1:55D4 3E FF ld a,FF ROM1:55D6 CD E9 56 call 56E9 ROM1:55D9 E1 pop hl ROM1:55DA D1 pop de ROM1:55DB C1 pop bc ROM1:55DC C9 ret } ;;; $55DD: ;;; { ; Assuming Samus' pose after being bombed ROM1:55DD db 11, 11, 11, 11, 11, 12, 12, 11, 12, 11, 11, 12, 12, 12, 12, 11, 12, 11, 12, 11, 00, 00, 00, 00, 12, 12, 1A, 1B, 1C, 1D } ;;; $55FB: Projectile X offsets from Samus ;;; { ; ____ Facing left ; | _ Facing right ; | | ROM1:55FB db 00,00, ; Shooting right 18,1C, ; Shooting left 04,08, 10,10, ; Shooting up 0E,12, 10,10, 10,10, 10,10, ; Shooting down 0D,13, 10,10, 10,10, 10,10, 10,10, 10,10, 10,10, 10,10, 10,10 } ;;; $561D: Projectile Y offsets from Samus due to Samus' pose ;;; { ROM1:561D db 17, ; 00: Standing 1F, ; 01: Jumping 00, ; 02: Spin-jumping 14, ; 03: Running (set to 83h when turning) 21, ; 04: Crouching 00, ; 05: Morphball 00, ; 06: Morphball jumping 1D, ; 07: Falling 00, ; 08: Morphball falling 15, ; 09: Starting to jump 15, ; 0A: Starting to spin-jump 00, ; 0B: Spider ball rolling 00, ; 0C: Spider ball falling 00, ; 0D: Spider ball jumping 00, ; 0E: Spider ball 1F, ; 0F: Knockback 00, ; 10: Morphball knockback 1F, ; 11: Standing bombed 00 ; 12: Morphball bombed } ;;; $5630: Projectile Y offsets from Samus due to projectile direction ;;; { ROM1:5630 db 00, 00, ; Shooting right 00, ; Shooting left 00, F0, ; Shooting up 00, 00, 00, 08, ; Shooting down 00, 00, 00, 00, 00, 00, 00, 1F, 00, 00 } ;;; $5643: Shot direction priority ;;; { ; _______ Projectile directions ; | __ User presses ; | | ROM1:5643 db 00, ; | 01, ; > | > 02, ; < | < 01, ; > | <> 04, ; ^ | ^ 04, ; ^ | ^ > 04, ; ^ | ^< 04, ; ^ | ^<> 08, ; v | v 08, ; v | v > 08, ; v | v < 08, ; v | v <> 08, ; v | v^ 08, ; v | v^ > 08, ; v | v^< 08 ; v | v^<> } ;;; $5653: Possible shot directions ;;; { ; 00h means shoot horizontally using direction Samus is facing ; 80h means lay a bomb ; All other values are a mask on allowed directional inputs ROM1:5653 db 07, ; 00: Standing 0F, ; 01: Jumping 00, ; 02: Spin-jumping 07, ; 03: Running (set to 83h when turning) 03, ; 04: Crouching 80, ; 05: Morphball 80, ; 06: Morphball jumping 0F, ; 07: Falling 80, ; 08: Morphball falling 0F, ; 09: Starting to jump 0F, ; 0A: Starting to spin-jump 80, ; 0B: Spider ball rolling 80, ; 0C: Spider ball falling 80, ; 0D: Spider ball jumping 80, ; 0E: Spider ball 0F, ; 0F: Knockback 80, ; 10: Morphball knockback 0F, ; 11: Standing bombed 80, ; 12: Morphball bombed 00, ; 13: Facing screen 00, 00, 00, 00, 00, ; 18: Being eaten by Metroid Queen 80, ; 19: In Metroid Queen's mouth 00, ; 1A: Being swallowed by Metroid Queen 80, ; 1B: In Metroid Queen's stomach 00, ; 1C: Escaping Metroid Queen 80 ; 1D: Escaped Metroid Queen } ;;; $5671: Destroy respawning block ;;; { ROM1:5671 21 00 D9 ld hl,D900 ; hl = respawning block data base address ; LOOP ROM1:5674 7E ld a,(hl) ;\ ROM1:5675 A7 and a ;} If [respawning block entry frame counter] != 0: ROM1:5676 28 09 jr z,5681 ;/ ROM1:5678 7D ld a,l ;\ ROM1:5679 C6 10 add a,10 ;} hl += 10h ROM1:567B 6F ld l,a ;/ ROM1:567C FE 00 cp 00 ;\ ROM1:567E C8 ret z ;} If [hl] = $DA00: return ROM1:567F 18 F3 jr 5674 ; Go to LOOP ROM1:5681 3E 01 ld a,01 ;\ ROM1:5683 22 ldi (hl),a ;} Respawning block entry frame counter = 1 ROM1:5684 FA 03 C2 ld a,(C203) ;\ ROM1:5687 22 ldi (hl),a ;} Respawning block entry Y position = [tile Y] ROM1:5688 FA 04 C2 ld a,(C204) ;\ ROM1:568B 22 ldi (hl),a ;} Respawning block entry X position = [tile X] ROM1:568C 3E 04 ld a,04 ;\ ROM1:568E EA D5 CE ld (CED5),a ;} Play shot block destroyed sound effect ROM1:5691 C9 ret } ;;; $5692: Handle respawning blocks ;;; { ; Externally called by: ; $04DF: Game mode 4: in-game ROM1:5692 21 00 D9 ld hl,D900 ROM1:5695 7E ld a,(hl) ROM1:5696 A7 and a ROM1:5697 28 46 jr z,56DF ROM1:5699 3C inc a ROM1:569A 22 ldi (hl),a ROM1:569B FA 05 C2 ld a,(C205) ROM1:569E 47 ld b,a ROM1:569F 2A ldi a,(hl) ROM1:56A0 EA 03 C2 ld (C203),a ROM1:56A3 90 sub b ROM1:56A4 E6 F0 and F0 ROM1:56A6 FE C0 cp C0 ROM1:56A8 28 2F jr z,56D9 ROM1:56AA FA 06 C2 ld a,(C206) ROM1:56AD 47 ld b,a ROM1:56AE 7E ld a,(hl) ROM1:56AF EA 04 C2 ld (C204),a ROM1:56B2 90 sub b ROM1:56B3 E6 F0 and F0 ROM1:56B5 FE D0 cp D0 ROM1:56B7 28 20 jr z,56D9 ROM1:56B9 2B dec hl ROM1:56BA 2B dec hl ROM1:56BB 7E ld a,(hl) ROM1:56BC FE 02 cp 02 ROM1:56BE CA 42 57 jp z,5742 ROM1:56C1 FE 07 cp 07 ROM1:56C3 CA 69 57 jp z,5769 ROM1:56C6 FE 0D cp 0D ROM1:56C8 28 1F jr z,56E9 ROM1:56CA FE F6 cp F6 ROM1:56CC CA 69 57 jp z,5769 ROM1:56CF FE FA cp FA ROM1:56D1 28 6F jr z,5742 ROM1:56D3 FE FE cp FE ROM1:56D5 28 3B jr z,5712 ROM1:56D7 18 06 jr 56DF ROM1:56D9 7D ld a,l ROM1:56DA E6 F0 and F0 ROM1:56DC 6F ld l,a ROM1:56DD AF xor a ROM1:56DE 77 ld (hl),a ROM1:56DF 7D ld a,l ROM1:56E0 E6 F0 and F0 ROM1:56E2 C6 10 add a,10 ROM1:56E4 6F ld l,a ROM1:56E5 A7 and a ROM1:56E6 20 AD jr nz,5695 ROM1:56E8 C9 ret } ;;; $56E9: Destroy block ;;; { ; Externally called by: ; $3:7D97: ROM1:56E9 CD BC 22 call 22BC ; Get tilemap address ROM1:56EC FA 15 C2 ld a,(C215) ;\ ROM1:56EF E6 DE and DE ;| ROM1:56F1 6F ld l,a ;} hl = [tilemap address] & FFDEh ROM1:56F2 FA 16 C2 ld a,(C216) ;| ROM1:56F5 67 ld h,a ;/ ROM1:56F6 11 1F 00 ld de,001F ROM1:56F9 F0 41 ld a,(FF00+41) ;\ ROM1:56FB E6 03 and 03 ;} Wait for h-blank ROM1:56FD 20 FA jr nz,56F9 ;/ ROM1:56FF F0 41 ld a,(FF00+41) ;\ ROM1:5701 E6 03 and 03 ;} Wait for h-blank ROM1:5703 20 FA jr nz,56FF ;/ ROM1:5705 3E FF ld a,FF ;\ ROM1:5707 22 ldi (hl),a ;} [hl] = FFh ROM1:5708 77 ld (hl),a ; [hl] + 1 = FFh ROM1:5709 19 add hl,de ;\ ROM1:570A 22 ldi (hl),a ;} [hl] + 20h = FFh ROM1:570B 77 ld (hl),a ; [hl] + 21h = FFh ROM1:570C 3E 04 ld a,04 ;\ ROM1:570E EA D5 CE ld (CED5),a ;} Play shot block destroyed sound effect ROM1:5711 C9 ret } ;;; $5712 ;;; { ROM1:5712 AF xor a ROM1:5713 77 ld (hl),a ROM1:5714 CD BC 22 call 22BC ROM1:5717 FA 15 C2 ld a,(C215) ROM1:571A E6 DE and DE ROM1:571C 6F ld l,a ROM1:571D FA 16 C2 ld a,(C216) ROM1:5720 67 ld h,a ROM1:5721 11 1F 00 ld de,001F ROM1:5724 F0 41 ld a,(FF00+41) ;lcd stat ROM1:5726 E6 03 and 03 ROM1:5728 20 FA jr nz,5724 ROM1:572A F0 41 ld a,(FF00+41) ;lcd stat ROM1:572C E6 03 and 03 ROM1:572E 20 FA jr nz,572A ROM1:5730 AF xor a ROM1:5731 22 ldi (hl),a ROM1:5732 3C inc a ROM1:5733 77 ld (hl),a ROM1:5734 19 add hl,de ROM1:5735 3C inc a ROM1:5736 22 ldi (hl),a ROM1:5737 3C inc a ROM1:5738 77 ld (hl),a ROM1:5739 FA 4F D0 ld a,(D04F) ROM1:573C A7 and a ROM1:573D C0 ret nz ROM1:573E CD 90 57 call 5790 ROM1:5741 C9 ret } ;;; $5742 ;;; { ROM1:5742 CD BC 22 call 22BC ROM1:5745 FA 15 C2 ld a,(C215) ROM1:5748 E6 DE and DE ROM1:574A 6F ld l,a ROM1:574B FA 16 C2 ld a,(C216) ROM1:574E 67 ld h,a ROM1:574F 11 1F 00 ld de,001F ROM1:5752 F0 41 ld a,(FF00+41) ;lcd stat ROM1:5754 E6 03 and 03 ROM1:5756 20 FA jr nz,5752 ROM1:5758 F0 41 ld a,(FF00+41) ;lcd stat ROM1:575A E6 03 and 03 ROM1:575C 20 FA jr nz,5758 ROM1:575E 3E 04 ld a,04 ROM1:5760 22 ldi (hl),a ROM1:5761 3C inc a ROM1:5762 77 ld (hl),a ROM1:5763 19 add hl,de ROM1:5764 3C inc a ROM1:5765 22 ldi (hl),a ROM1:5766 3C inc a ROM1:5767 77 ld (hl),a ROM1:5768 C9 ret } ;;; $5769 ;;; { ROM1:5769 CD BC 22 call 22BC ROM1:576C FA 15 C2 ld a,(C215) ROM1:576F E6 DE and DE ROM1:5771 6F ld l,a ROM1:5772 FA 16 C2 ld a,(C216) ROM1:5775 67 ld h,a ROM1:5776 11 1F 00 ld de,001F ROM1:5779 F0 41 ld a,(FF00+41) ;lcd stat ROM1:577B E6 03 and 03 ROM1:577D 20 FA jr nz,5779 ROM1:577F F0 41 ld a,(FF00+41) ;lcd stat ROM1:5781 E6 03 and 03 ROM1:5783 20 FA jr nz,577F ROM1:5785 3E 08 ld a,08 ROM1:5787 22 ldi (hl),a ROM1:5788 3C inc a ROM1:5789 77 ld (hl),a ROM1:578A 19 add hl,de ROM1:578B 3C inc a ROM1:578C 22 ldi (hl),a ROM1:578D 3C inc a ROM1:578E 77 ld (hl),a ROM1:578F C9 ret } ;;; $5790: ;;; { ROM1:5790 21 DF 57 ld hl,57DF ROM1:5793 FA 20 D0 ld a,(D020) ROM1:5796 5F ld e,a ROM1:5797 16 00 ld d,00 ROM1:5799 19 add hl,de ROM1:579A 7E ld a,(hl) ROM1:579B 47 ld b,a ROM1:579C FA 03 C2 ld a,(C203) ROM1:579F D6 10 sub 10 ROM1:57A1 E6 F0 and F0 ROM1:57A3 4F ld c,a ROM1:57A4 E0 98 ld (FF00+98),a ROM1:57A6 F0 C0 ld a,(FF00+C0) ROM1:57A8 C6 18 add a,18 ROM1:57AA 91 sub c ROM1:57AB B8 cp b ROM1:57AC 30 30 jr nc,57DE ROM1:57AE FA 04 C2 ld a,(C204) ROM1:57B1 D6 08 sub 08 ROM1:57B3 E6 F0 and F0 ROM1:57B5 47 ld b,a ROM1:57B6 E0 99 ld (FF00+99),a ROM1:57B8 F0 C2 ld a,(FF00+C2) ROM1:57BA C6 0C add a,0C ROM1:57BC 90 sub b ROM1:57BD FE 18 cp 18 ROM1:57BF 30 1D jr nc,57DE ROM1:57C1 FE 0C cp 0C ROM1:57C3 30 07 jr nc,57CC ROM1:57C5 3E FF ld a,FF ROM1:57C7 EA 23 C4 ld (C423),a ROM1:57CA 18 05 jr 57D1 ROM1:57CC 3E 01 ld a,01 ROM1:57CE EA 23 C4 ld (C423),a ROM1:57D1 3E 01 ld a,01 ROM1:57D3 EA 22 C4 ld (C422),a ROM1:57D6 3E 02 ld a,02 ROM1:57D8 EA 24 C4 ld (C424),a ROM1:57DB CD 71 56 call 5671 ROM1:57DE C9 ret ROM1:57DF db 20, 20, 20, 20, 20, 10, 10, 20, 10, 20, 20, 10, 10, 10, 10, 20, 10, 20, 10 } ;;; $57F2: Handle window display, game saving, metroid earthquake, low heath beep, fade in, and Baby Metroid cry ;;; { ; Externally called by: ; $04DF: Game mode 4: in-game ROM1:57F2 FA 88 D0 ld a,(D088) ;\ ROM1:57F5 A7 and a ;} If [game save cooldown timer] != 0: ROM1:57F6 28 04 jr z,57FC ;/ ROM1:57F8 3D dec a ;\ ROM1:57F9 EA 88 D0 ld (D088),a ;} Decrement game save cooldown timer ROM1:57FC FA 8B D0 ld a,(D08B) ;\ ROM1:57FF FE 11 cp 11 ;} If in Metroid Queen's room: go to BRANCH_WINDOW_END ROM1:5801 28 70 jr z,5873 ;/ ROM1:5803 F0 40 ld a,(FF00+40) ;\ ROM1:5805 CB 6F bit 5,a ;| ROM1:5807 20 04 jr nz,580D ;} Enable window display ROM1:5809 CB EF set 5,a ;| ROM1:580B E0 40 ld (FF00+40),a ;/ ROM1:580D 3E 88 ld a,88 ;\ ROM1:580F E0 4A ld (FF00+4A),a ;} Window Y position = 88h ROM1:5811 FA 7D D0 ld a,(D07D) ;\ ROM1:5814 A7 and a ;} If not on save pillar: ROM1:5815 20 13 jr nz,582A ;/ ROM1:5817 FA 93 D0 ld a,(D093) ;\ ROM1:581A A7 and a ;} If [$D093] = 0: go to BRANCH_WINDOW_END ROM1:581B 28 56 jr z,5873 ;/ ROM1:581D FA 93 D0 ld a,(D093) ;\ ROM1:5820 FE 0B cp 0B ;} If [$D093] >= Bh: go to BRANCH_WINDOW_END ROM1:5822 30 4F jr nc,5873 ;/ ROM1:5824 3E 80 ld a,80 ;\ ROM1:5826 E0 4A ld (FF00+4A),a ;} Window Y position = 80h ROM1:5828 18 49 jr 5873 ; Go to BRANCH_WINDOW_END ROM1:582A 3E 80 ld a,80 ;\ ROM1:582C E0 4A ld (FF00+4A),a ;} Window Y position = 80h ROM1:582E FA 88 D0 ld a,(D088) ;\ ROM1:5831 A7 and a ;} If [game save cooldown timer] = 0: ROM1:5832 20 0F jr nz,5843 ;/ ROM1:5834 F0 81 ld a,(FF00+81) ;\ ROM1:5836 FE 08 cp 08 ;} If [input] = start: ROM1:5838 20 09 jr nz,5843 ;/ ROM1:583A 3E 09 ld a,09 ;\ ROM1:583C E0 9B ld (FF00+9B),a ;} Game mode = save to SRAM ROM1:583E 3E FF ld a,FF ;\ ROM1:5840 EA 88 D0 ld (D088),a ;} Game save cooldown timer = FFh ROM1:5843 FA 88 D0 ld a,(D088) ;\ ROM1:5846 A7 and a ;} If [game save cooldown timer] != 0: ROM1:5847 28 11 jr z,585A ;/ ROM1:5849 3E 98 ld a,98 ;\ ROM1:584B E0 C4 ld (FF00+C4),a ;| ROM1:584D 3E 44 ld a,44 ;| ROM1:584F E0 C5 ld (FF00+C5),a ;} Load sprite set 43h to (44h, 98h) ROM1:5851 3E 43 ld a,43 ;| ROM1:5853 E0 C6 ld (FF00+C6),a ;| ROM1:5855 CD 62 4B call 4B62 ;/ ROM1:5858 18 19 jr 5873 ; Go to BRANCH_WINDOW_END ROM1:585A AF xor a ;\ ROM1:585B EA 7D D0 ld (D07D),a ;} On save pillar flag = 0 ROM1:585E F0 97 ld a,(FF00+97) ;\ ROM1:5860 CB 5F bit 3,a ;} If [frame counter] & 8 != 0: ROM1:5862 28 0F jr z,5873 ;/ ROM1:5864 3E 98 ld a,98 ;\ ROM1:5866 E0 C4 ld (FF00+C4),a ;| ROM1:5868 3E 44 ld a,44 ;| ROM1:586A E0 C5 ld (FF00+C5),a ;} Load sprite set 42h to (44h, 98h) ROM1:586C 3E 42 ld a,42 ;| ROM1:586E E0 C6 ld (FF00+C6),a ;| ROM1:5870 CD 62 4B call 4B62 ;/ ; BRANCH_WINDOW_END ROM1:5873 F0 97 ld a,(FF00+97) ;\ ROM1:5875 A7 and a ;} If [frame counter] = 0: ROM1:5876 20 22 jr nz,589A ;/ ROM1:5878 FA 91 D0 ld a,(D091) ;\ ROM1:587B A7 and a ;} If [metroid earthquake timer] != 0: ROM1:587C 28 1C jr z,589A ;/ ROM1:587E 3D dec a ;\ ROM1:587F EA 91 D0 ld (D091),a ;} Decrement metroid earthquake timer ROM1:5882 20 16 jr nz,589A ; If [metroid earthquake timer] = 0: ROM1:5884 3E FF ld a,FF ;\ ROM1:5886 EA 83 D0 ld (D083),a ;} Earthquake timer = FFh ROM1:5889 3E 0E ld a,0E ;\ ROM1:588B EA DE CE ld (CEDE),a ;} Play earthquake sound effect ROM1:588E FA 89 D0 ld a,(D089) ;\ ROM1:5891 FE 01 cp 01 ;} If [real number of metroids remaining] = 1: ROM1:5893 20 05 jr nz,589A ;/ ROM1:5895 3E 60 ld a,60 ;\ ROM1:5897 EA 83 D0 ld (D083),a ;} Earthquake timer = 60h ROM1:589A FA 20 D0 ld a,(D020) ;\ ROM1:589D FE 13 cp 13 ;} If [Samus' pose] = facing screen: ROM1:589F 20 0A jr nz,58AB ;/ ROM1:58A1 FA 66 D0 ld a,(D066) ;\ ROM1:58A4 47 ld b,a ;| ROM1:58A5 FA 67 D0 ld a,(D067) ;} If [loading timer] != 0: go to BRANCH_LOW_HEALTH_BEEP_END ROM1:58A8 B0 or b ;| ROM1:58A9 20 2D jr nz,58D8 ;/ ROM1:58AB FA 52 D0 ld a,(D052) ;\ ROM1:58AE A7 and a ;| ROM1:58AF 20 1C jr nz,58CD ;| ROM1:58B1 FA 51 D0 ld a,(D051) ;} If [Samus' health] < 50h: ROM1:58B4 FE 50 cp 50 ;| ROM1:58B6 30 15 jr nc,58CD ;/ ROM1:58B8 47 ld b,a ;\ ROM1:58B9 FA A1 D0 ld a,(D0A1) ;| ROM1:58BC B8 cp b ;} If [Samus' health] != [previous low health]: ROM1:58BD 28 19 jr z,58D8 ;/ ROM1:58BF 78 ld a,b ;\ ROM1:58C0 EA A1 D0 ld (D0A1),a ;} Previous low health = [Samus' health] ROM1:58C3 E6 F0 and F0 ;\ ROM1:58C5 CB 37 swap a ;| ROM1:58C7 3C inc a ;} Low health beep to play = [Samus' health] / 10h + 1 ROM1:58C8 EA E5 CF ld (CFE5),a ;/ ROM1:58CB 18 0B jr 58D8 ; Go to BRANCH_LOW_HEALTH_BEEP_END ROM1:58CD FA E6 CF ld a,(CFE6) ;\ ROM1:58D0 A7 and a ;} If [low health beep playing] != 0: ROM1:58D1 28 05 jr z,58D8 ;/ ROM1:58D3 3E FF ld a,FF ;\ ROM1:58D5 EA E5 CF ld (CFE5),a ;} Low health beep to play = FFh ; BRANCH_LOW_HEALTH_BEEP_END ROM1:58D8 FA 9B D0 ld a,(D09B) ;\ ROM1:58DB A7 and a ;} If [fade in timer] != 0: handle fade in ROM1:58DC C4 45 7A call nz,7A45 ;/ ROM1:58DF FA A6 D0 ld a,(D0A6) ;\ ROM1:58E2 A7 and a ;} If Baby Metroid cry enabled: ROM1:58E3 28 0B jr z,58F0 ;/ ROM1:58E5 F0 97 ld a,(FF00+97) ;\ ROM1:58E7 E6 7F and 7F ;} If [frame counter] = 7Fh: ROM1:58E9 20 05 jr nz,58F0 ;/ ROM1:58EB 3E 17 ld a,17 ;\ ROM1:58ED EA D5 CE ld (CED5),a ;} Play Baby Metroid cry sound effect ROM1:58F0 C9 ret } ;;; $58F1: Message tilemap addresses ;;; { ROM1:58F1 dw 5911, 5921, 5931, 5941, 5951, 5961, 5971, 5981, 5991, 59A1, 59B1, 59C1, 59D1, 59E1, 59F1, 5A01 } ;;; $5911: Message tilemaps ;;; { ROM1:5911 db FF,D2,C0,D5,C4,DE,DF,FF,FF,FF,FF,FF,FF,FF,FF,FF ; " SAVE... " (ellipsis is two tiles) ROM1:5921 db FF,FF,FF,FF,FF,CF,CB,C0,D2,CC,C0,FF,C1,C4,C0,CC ; " PLASMA BEAM" ROM1:5931 db FF,FF,FF,FF,FF,FF,C8,C2,C4,FF,C1,C4,C0,CC,FF,FF ; " ICE BEAM " ROM1:5941 db FF,FF,FF,FF,FF,D6,C0,D5,C4,FF,C1,C4,C0,CC,FF,FF ; " WAVE BEAM " ROM1:5951 db FF,FF,FF,FF,FF,FF,D2,CF,C0,D9,C4,D1,FF,FF,FF,FF ; " SPAZER " ROM1:5961 db FF,FF,FF,FF,FF,FF,FF,FF,C1,CE,CC,C1,FF,FF,FF,FF ; " BOMB " ROM1:5971 db FF,FF,FF,FF,D2,C2,D1,C4,D6,FF,C0,D3,D3,C0,C2,CA ; " SCREW ATTACK" ROM1:5981 db FF,FF,FF,FF,FF,FF,D5,C0,D1,C8,C0,FF,FF,FF,FF,FF ; " VARIA " ROM1:5991 db FF,C7,C8,C6,C7,FF,C9,D4,CC,CF,FF,C1,CE,CE,D3,D2 ; " HIGH JUMP BOOTS" ROM1:59A1 db FF,FF,FF,FF,FF,D2,CF,C0,C2,C4,FF,C9,D4,CC,CF,FF ; " SPACE JUMP " ROM1:59B1 db FF,FF,FF,FF,D2,CF,C8,C3,C4,D1,FF,C1,C0,CB,CB,FF ; " SPIDER BALL " ROM1:59C1 db FF,FF,FF,D2,CF,D1,C8,CD,C6,FF,C1,C0,CB,CB,FF,FF ; " SPRING BALL " ROM1:59D1 db FF,FF,FF,FF,C4,CD,C4,D1,C6,D8,FF,D3,C0,CD,CA,FF ; " ENERGY TANK " ROM1:59E1 db FF,FF,FF,FF,CC,C8,D2,D2,C8,CB,C4,FF,D3,C0,CD,CA ; " MISSILE TANK" ROM1:59F1 db FF,FF,FF,FF,FF,FF,FF,C4,CD,C4,D1,C6,D8,FF,FF,FF ; " ENERGY " ROM1:5A01 db FF,FF,FF,FF,FF,FF,CC,C8,D2,D2,C8,CB,C4,D2,FF,FF ; " MISSILES " } ;;; $5A11: Draw enemies ;;; { ; Externally called by: ; $2:4000: Handle enemies ROM1:5A11 FA 26 C4 ld a,(C426) ;\ ROM1:5A14 A7 and a ;} If [$C426] = 0: return ROM1:5A15 C8 ret z ;/ ROM1:5A16 21 00 C6 ld hl,C600 ;\ ROM1:5A19 7D ld a,l ;| ROM1:5A1A EA 54 C4 ld (C454),a ;} $C454 = $C600 ROM1:5A1D 7C ld a,h ;| ROM1:5A1E EA 55 C4 ld (C455),a ;/ ; LOOP ROM1:5A21 7E ld a,(hl) ;\ ROM1:5A22 A7 and a ;} If [[$C454]] = 0: execute add sprite set to OAM ROM1:5A23 CC 3F 5A call z,5A3F ;/ ROM1:5A26 FA 54 C4 ld a,(C454) ;\ ROM1:5A29 6F ld l,a ;| ROM1:5A2A FA 55 C4 ld a,(C455) ;| ROM1:5A2D 67 ld h,a ;| ROM1:5A2E 11 20 00 ld de,0020 ;| ROM1:5A31 19 add hl,de ;} $C454 += 20h ROM1:5A32 7D ld a,l ;| ROM1:5A33 EA 54 C4 ld (C454),a ;| ROM1:5A36 7C ld a,h ;| ROM1:5A37 EA 55 C4 ld (C455),a ;/ ROM1:5A3A FE C8 cp C8 ;\ ROM1:5A3C 20 E3 jr nz,5A21 ;} If [$C454] != $C800: go to LOOP ROM1:5A3E C9 ret } ;;; $5A3F: Add sprite set to OAM ;;; { ROM1:5A3F CD 9A 5A call 5A9A ; Execute $5A9A ROM1:5A42 FA 30 C4 ld a,(C430) ;\ ROM1:5A45 16 00 ld d,00 ;| ROM1:5A47 5F ld e,a ;| ROM1:5A48 CB 23 sla e ;| ROM1:5A4A CB 12 rl d ;| ROM1:5A4C 21 B1 5A ld hl,5AB1 ;} de = [$5AB1 + [enemy sprite ID] * 2] ROM1:5A4F 19 add hl,de ;| ROM1:5A50 2A ldi a,(hl) ;| ROM1:5A51 5F ld e,a ;| ROM1:5A52 7E ld a,(hl) ;| ROM1:5A53 57 ld d,a ;/ ROM1:5A54 26 C0 ld h,C0 ;\ ROM1:5A56 F0 8D ld a,(FF00+8D) ;} hl = $C000 + [OAM stack pointer] ROM1:5A58 6F ld l,a ;/ ROM1:5A59 FA 2E C4 ld a,(C42E) ;\ ROM1:5A5C 47 ld b,a ;} b = [enemy Y position] ROM1:5A5D FA 2F C4 ld a,(C42F) ;\ ROM1:5A60 4F ld c,a ;} c = [enemy X position] ; LOOP ROM1:5A61 1A ld a,(de) ;\ ROM1:5A62 FE FF cp FF ;} If [[de]] = FFh: return ROM1:5A64 28 33 jr z,5A99 ;/ ROM1:5A66 FA 31 C4 ld a,(C431) ;\ ROM1:5A69 CB 77 bit 6,a ;} If [$C431] & 40h != 0: ROM1:5A6B 28 06 jr z,5A73 ;/ ROM1:5A6D 1A ld a,(de) ;\ ROM1:5A6E 2F cpl ;} a = -[[de]] - 8 ROM1:5A6F D6 07 sub 07 ;/ ROM1:5A71 18 01 jr 5A74 ; Else ([$C431] & 40h = 0): ROM1:5A73 1A ld a,(de) ; a = [[de]] ROM1:5A74 80 add a,b ;\ ROM1:5A75 22 ldi (hl),a ;} OAM entry Y position = [b] + [a] ROM1:5A76 13 inc de ROM1:5A77 FA 31 C4 ld a,(C431) ;\ ROM1:5A7A CB 6F bit 5,a ;} If [$C431] & 20h != 0: ROM1:5A7C 28 06 jr z,5A84 ;/ ROM1:5A7E 1A ld a,(de) ;\ ROM1:5A7F 2F cpl ;} a = -[[de] + 1] - 8 ROM1:5A80 D6 07 sub 07 ;/ ROM1:5A82 18 01 jr 5A85 ; Else ([$C431] & 20h = 0): ROM1:5A84 1A ld a,(de) ; a = [[de] + 1] ROM1:5A85 81 add a,c ;\ ROM1:5A86 22 ldi (hl),a ;} OAM entry X position = [c] + [a] ROM1:5A87 13 inc de ROM1:5A88 1A ld a,(de) ;\ ROM1:5A89 22 ldi (hl),a ;} OAM entry tile number = [[de] + 2] ROM1:5A8A 13 inc de ROM1:5A8B E5 push hl ;\ ROM1:5A8C 21 31 C4 ld hl,C431 ;| ROM1:5A8F 1A ld a,(de) ;| ROM1:5A90 AE xor (hl) ;} OAM entry attributes = [[de] + 3] ^ [$C431] ROM1:5A91 E1 pop hl ;| ROM1:5A92 22 ldi (hl),a ;/ ROM1:5A93 7D ld a,l ;\ ROM1:5A94 E0 8D ld (FF00+8D),a ;} OAM stack pointer += 4 ROM1:5A96 13 inc de ; de += 4 ROM1:5A97 18 C8 jr 5A61 ; Go to LOOP ROM1:5A99 C9 ret } ;;; $5A9A: ;;; { ROM1:5A9A 2C inc l ; Increment hl ROM1:5A9B 2A ldi a,(hl) ;\ ROM1:5A9C EA 2E C4 ld (C42E),a ;} $C42E = [enemy Y position], ++hl ROM1:5A9F 2A ldi a,(hl) ;\ ROM1:5AA0 EA 2F C4 ld (C42F),a ;} $C42F = [enemy X position], ++hl ROM1:5AA3 2A ldi a,(hl) ;\ ROM1:5AA4 EA 30 C4 ld (C430),a ;} $C430 = [enemy sprite ID], ++hl ROM1:5AA7 2A ldi a,(hl) ;\ ROM1:5AA8 AE xor (hl) ;| ROM1:5AA9 2C inc l ;| ROM1:5AAA AE xor (hl) ;} $C431 = ([[hl]] ^ [[hl] + 1] ^ [[hl] + 2]) & F0h, hl += 2 ROM1:5AAB E6 F0 and F0 ;| ROM1:5AAD EA 31 C4 ld (C431),a ;/ ROM1:5AB0 C9 ret } ;;; $5AB1: Enemy sprite sets ;;; { ROM1:5AB1 dw 5CB5,5CC6,5CD7,5CE8,5CF9,5D0E,5D23,5D38,5D51,5D56,5D67,5D80,5D91,5D96,5D9B,5DA0, 5DA9,5DBE,5DD3,5DDC,5DE5,5DFE,5E55,5E6E,5E7F,5CB0,5CB0,5E90,5E9D,5EAE,60C4,61AD, 5F12,5F23,5F12,5F23,5CAF,5CAF,5CAF,5CAF,5F34,5F34,5F4D,5F4D,5F66,5F73,5F80,5F91, 5FBE,5FCF,5FE0,5FF1,5FA2,5FA7,5FAC,5FB5,6002,600F,601C,6029,5CB0,5CB0,6069,608A, 60AB,60C4,60D5,60EE,610F,6130,6139,6152,6173,618C,61AD,61C2,61D7,61E4,61ED,61F2, 61FB,6204,6229,625A,628B,6290,6299,62AA,62AF,62B8,62C1,62D2,62DB,62F4,630D,6312, 631F,6334,6351,636E,6393,5E1B,5E38,63B8,63DD,6402,6427,6440,645D,5CB0,64C1,5CAF, 5CAF,5CAF,64C1,64D2,64E7,687E,64FC,650D,651E,6553,6588,65C1,65C6,5CAF,5CAF,5CAF, 7052,7063,7052,7063,7052,7063,7052,7063,7052,7063,7052,7063,7052,7063,7052,7063, 7052,7063,7052,7063,7052,7063,7052,7074,7052,7085,C300,7096,7052,70A7,70B0,70B5, 688F,68C0,5CAF,68E9,6916,6FC1,6FE6,700B,7030,7041,5CAF,5CAF,5CAF,69C3,69A5,69B6, 6A08,5CAF,6A55,6A92,6AC7,6AFC,6B31,6B66,6BA3,6BE0,6C1D,6C5A,6C97,6CD4,6D11,6D1E, 6D73,6DC8,6E1D,6E72,6EC3,6F18,6F69,6F7A,6F8B,6F94,6FA5,6FAE,6FB7,6FBC,6943,6974, 6036,6047,6058,6482,6482,6497,6482,64AC,5EC3,5EE0,5EFD,6FE6,5CAF,5CAF,5CAF,5CAF, 65CB,65D0,65F7,6608,6629,6642,665F,6678,667D,668E,6693,66B4,65D5,65E6,66E5,66EA, 5CAF,5CAF,5CAF,5CAF,5CAF,5CAF,5CAF,5CAF,684D,5CAF,5CAF,5CAF,5CAF,5CAF,5CB0 ; ___________ Y offset. FFh is terminator ; | ________ X offset ; | | _____ Tile number ; | | | __ Attributes. 80h: behind BG, 40h: Y flip, 20h: X flip, 10h: sprite palette 1 ; | | | | ; Empty ROM1:5CAF db FF ; 19h..1Ah: Gawron spawner? ; 3Ch..3Dh: Yumee spawner? ; 6Dh: ; FEh: ROM1:5CB0 db FC,FC,FF,00, FF ; 0: Tsumari ROM1:5CB5 db F8,F8,B4,00, F8,00,B5,00, 00,F8,B6,00, 00,00,B7,00, FF ; 1: Tsumari ROM1:5CC6 db F8,F8,B4,00, F8,00,B5,00, 00,F8,B9,00, 00,00,B8,00, FF ; 2: Tsumari ROM1:5CD7 db F8,F8,BA,00, F8,00,BB,00, 00,F8,BC,00, 00,00,BD,00, FF ; 3: Tsumari ROM1:5CE8 db F8,F8,BA,00, F8,00,BE,00, 00,F8,BC,00, 00,00,BF,00, FF ; 4: Skreek ROM1:5CF9 db FA,F4,C0,00, F8,FC,C1,00, F8,04,C2,00, 00,FC,C3,00, 00,04,C4,00, FF ; 5: Skreek ROM1:5D0E db FA,F4,C5,00, F8,FC,C6,00, F8,04,C7,00, 00,FC,C8,00, 00,04,C9,00, FF ; 6: Skreek ROM1:5D23 db FA,F4,CA,00, F8,FC,CB,00, F8,04,CC,00, 00,FC,CD,00, 00,04,CE,00, FF ; 7: Skreek ROM1:5D38 db F8,F4,CF,00, F8,FC,D0,00, F8,04,C2,00, 00,F4,D1,00, 00,FC,D2,00, 00,04,C4,00, FF ; 8: Skreek projectile ROM1:5D51 db FC,FC,D3,00, FF ; 9: Drivel ROM1:5D56 db FC,F0,D4,00, FC,F8,D5,00, FC,00,D5,20, FC,08,D4,20, FF ; Ah: Drivel ROM1:5D67 db FC,F0,D7,00, FC,F8,D8,00, FC,00,D8,20, FC,08,D7,20, 04,F0,D6,00, 04,08,D6,20, FF ; Bh: Drivel ROM1:5D80 db FC,F8,DA,00, FC,00,DA,20, 04,F8,D9,00, 04,00,D9,20, FF ; Ch: Drivel projectile ROM1:5D91 db FC,FC,DB,00, FF ; Dh: Drivel projectile ROM1:5D96 db FC,FC,DC,00, FF ; Eh: Drivel projectile ROM1:5D9B db FC,FC,DD,00, FF ; Fh: Drivel projectile ROM1:5DA0 db FC,F8,DE,00, FC,00,DE,20, FF ; 10h: Drivel projectile ROM1:5DA9 db F4,FC,DF,00, F6,F6,E0,00, F6,02,E0,20, FC,F4,E1,00, FC,04,E1,20, FF ; 11h: Drivel projectile ROM1:5DBE db E7,FC,DF,00, EF,EF,E0,00, EF,09,E0,20, FC,EC,E1,00, FC,0C,E1,20, FF ; 12h: Yumbo ROM1:5DD3 db FC,F8,B0,00, FC,00,B1,00, FF ; 13h: Yumbo ROM1:5DDC db FC,F8,B2,00, FC,00,B3,00, FF ; 14h: Hornoad ROM1:5DE5 db F8,F4,E2,00, F8,FC,E3,00, F8,04,E4,00, 00,F4,E5,00, 00,FC,E6,00, 00,04,E7,00, FF ; 15h: Hornoad ROM1:5DFE db F8,F4,E2,00, F8,FC,E3,00, F8,04,E4,00, 00,F4,E5,00, 00,FC,E8,00, 00,04,E9,00, 08,04,EA,00, FF ; 65h: Septogg ROM1:5E1B db F4,F8,EB,00, F4,00,EB,20, FC,F4,EC,00, FC,FC,ED,00, FC,04,EC,20, 04,F8,EF,00, 04,00,EF,20, FF ; 66h: Septogg ROM1:5E38 db F4,F8,EB,00, F4,00,EB,20, FC,F4,EE,00, FC,FC,ED,00, FC,04,EE,20, 04,F8,EF,00, 04,00,EF,20, FF ; 16h: Senjoo ROM1:5E55 db F8,F4,B4,00, F8,FC,B5,00, F8,04,B6,00, 00,F4,B7,00, 00,FC,B8,00, 00,04,B9,00, FF ; 17h: Gawron ROM1:5E6E db F8,F8,BC,00, F8,00,BD,00, 00,F8,BE,00, 00,00,BF,00, FF ; 18h: Gawron ROM1:5E7F db F8,F8,C0,00, F8,00,C1,00, 00,F8,BE,00, 00,00,BF,00, FF ; 1Bh: Chute leech ROM1:5E90 db FC,F4,C2,00, FC,FC,C3,00, FC,04,C2,20, FF ; 1Ch: Chute leech ROM1:5E9D db F8,F8,C5,00, F8,00,C5,20, 00,F8,C4,00, 00,00,C4,20, FF ; 1Dh: Chute leech ROM1:5EAE db F8,FC,C9,00, F8,04,CA,00, 00,F4,C6,00, 00,FC,C7,00, 00,04,C8,00, FF ; D8h: Gullugg ROM1:5EC3 db F4,F0,CB,00, F4,F8,CC,00, F4,00,CC,20, F4,08,CB,20, FC,F8,CD,00, FC,00,CE,00, 04,00,CF,00, FF ; D9h: Gullugg ROM1:5EE0 db F4,F0,D0,00, F4,F8,D1,00, F4,00,D1,20, F4,08,D0,20, FC,F8,CD,00, FC,00,CE,00, 04,00,CF,00, FF ; DAh: Gullugg ROM1:5EFD db F4,F8,D2,00, F4,00,D2,20, FC,F8,CD,00, FC,00,CE,00, 04,00,CF,00, FF ; 20h/22h: Needler ROM1:5F12 db F8,F8,E6,00, F8,00,E7,00, 00,F8,E8,00, 00,00,E9,00, FF ; 21h/23h: Needler ROM1:5F23 db F8,F8,EA,00, F8,00,EB,00, 00,F8,EC,00, 00,00,ED,00, FF ; 28h..29h: Skorp ROM1:5F34 db F4,F8,B4,00, F4,00,B4,00, FC,F8,B6,00, FC,00,B7,00, 04,F8,B8,00, 04,00,B9,00, FF ; 2Ah..2Bh: Skorp ROM1:5F4D db F8,F4,BA,00, F8,FC,BB,00, F8,04,B4,00, 00,F4,BC,00, 00,FC,BD,00, 00,04,B4,00, FF ; 2Ch: Glow fly ROM1:5F66 db F4,FC,BE,00, FC,FC,BF,00, 04,FC,C1,00, FF ; 2Dh: Glow fly ROM1:5F73 db F4,FC,BE,00, FC,FC,BF,00, 04,FC,C0,00, FF ; 2Eh: Glow fly ROM1:5F80 db F8,F8,C2,00, F8,00,C3,00, 00,F8,C4,00, 00,00,C5,00, FF ; 2Fh: Glow fly ROM1:5F91 db F8,F8,C6,00, F8,00,C7,00, 00,F8,C8,00, 00,00,C9,00, FF ; 34h: Rock icicle ROM1:5FA2 db FC,FC,D2,00, FF ; 35h: Rock icicle ROM1:5FA7 db FC,FC,D3,00, FF ; 36h: Rock icicle ROM1:5FAC db F8,FC,D4,00, 00,FC,D5,00, FF ; 37h: Rock icicle ROM1:5FB5 db F8,FC,D4,00, 00,FC,D6,00, FF ; 30h: Moheek ROM1:5FBE db F8,F8,D7,00, F8,00,D8,00, 00,F8,DB,00, 00,00,DC,00, FF ; 31h: Moheek ROM1:5FCF db F8,F8,D9,00, F8,00,DA,00, 00,F8,DB,00, 00,00,DD,00, FF ; 32h: Moheek ROM1:5FE0 db F8,F8,DE,00, F8,00,DF,00, 00,F8,E1,00, 00,00,E2,00, FF ; 33h: Moheek ROM1:5FF1 db F8,F8,E3,00, F8,00,E0,00, 00,F8,E4,00, 00,00,E2,00, FF ; 38h: Yumee ROM1:6002 db F8,F8,E5,00, F8,00,E9,00, 00,00,EA,00, FF ; 39h: Yumee ROM1:600F db F8,F8,E5,00, F8,00,E9,00, 00,00,EB,00, FF ; 3Ah: Yumee ROM1:601C db F8,F8,E5,00, F8,00,E6,00, F8,08,E7,00, FF ; 3Bh: Yumee ROM1:6029 db F8,F8,E5,00, F8,00,E6,00, F8,08,E8,00, FF ; D0h: Flitt ROM1:6036 db F8,F8,CA,00, F8,00,CB,00, 00,F8,CC,00, 00,00,CD,00, FF ; D1h: Flitt ROM1:6047 db F8,F8,CE,00, F8,00,CF,00, 00,F8,D0,00, 00,00,D1,00, FF ; D2h: ROM1:6058 db F8,F8,EC,00, F8,00,ED,00, 00,FC,EE,00, 08,FC,EF,00, FF ; 3Eh: Octroll ROM1:6069 db F8,F8,B4,00, F8,00,B4,20, 00,F0,B5,00, 00,F8,B6,00, 00,00,B6,20, 00,08,B5,20, 08,F8,B7,00, 08,00,B7,20, FF ; 3Fh: Octroll ROM1:608A db F8,F8,B4,00, F8,00,B4,20, 00,F0,BA,00, 00,F8,B6,00, 00,00,B6,20, 00,08,BA,20, 08,F8,B7,00, 08,00,B7,20, FF ; 40h: Octroll ROM1:60AB db F8,F8,B4,00, F8,00,B4,20, 00,F0,B8,00, 00,F8,B9,00, 00,00,B9,20, 00,08,B8,20, FF ; 1Eh: ; 41h: Autrack ROM1:60C4 db F8,F8,BB,00, F8,00,BC,00, 00,F8,BD,00, 00,00,BE,00, FF ; 42h: Autrack ROM1:60D5 db F0,F8,BF,00, F0,00,C0,00, F8,F8,C1,00, F8,00,C2,00, 00,F8,BD,00, 00,00,BE,00, FF ; 43h: Autrack ROM1:60EE db E8,F8,BF,00, E8,00,C0,00, F0,F8,C3,00, F0,00,C4,00, F8,F8,C1,00, F8,00,C2,00, 00,F8,BD,00, 00,00,BE,00, FF ; 44h: Autrack ROM1:610F db E8,F8,C5,00, E8,00,C0,00, F0,F8,C3,00, F0,00,C4,00, F8,F8,C1,00, F8,00,C2,00, 00,F8,BD,00, 00,00,BE,00, FF ; 45h: Autrack projectile ROM1:6130 db FC,F8,C6,00, FC,00,C6,00, FF ; 46h: Autoad ROM1:6139 db F8,F4,C8,00, F8,FC,C9,00, F8,04,C8,20, 00,F4,CA,00, 00,FC,CB,00, 00,04,CA,20, FF ; 47h: Autoad ROM1:6152 db F8,F4,C8,00, F8,FC,CF,00, F8,04,C8,20, 00,F4,CC,00, 00,FC,CD,00, 00,04,CC,20, 08,F6,CE,00, 08,02,CE,20, FF ; 48h: ROM1:6173 db F4,F8,D0,00, F4,00,D1,00, FC,F8,D2,00, FC,00,D3,00, 04,F8,D0,40, 04,00,D1,40, FF ; 49h: ROM1:618C db F4,F8,D0,00, F4,00,D4,00, F6,08,D6,00, FC,F8,D7,00, FC,00,D5,00, 02,08,D6,40, 04,F8,D0,40, 04,00,D4,40, FF ; 1Fh: ; 4Ah: Wallfire ROM1:61AD db F4,FC,D8,00, F4,04,D9,00, FC,FC,DA,00, FC,04,DB,00, 04,FC,DC,00, FF ; 4Bh: Wallfire ROM1:61C2 db F4,FC,DD,00, F4,04,DE,00, FC,FC,DA,00, FC,04,E0,00, 04,FC,DC,00, FF ; 4Ch: Wallfire ROM1:61D7 db F4,FC,E5,00, FC,FC,E6,00, 04,FC,E7,00, FF ; 4Dh: Wallfire projectile ROM1:61E4 db FC,F4,E1,00, FC,FC,E2,00, FF ; 4Eh: Wallfire projectile ROM1:61ED db FC,FC,E3,00, FF ; 4Fh: Wallfire projectile ROM1:61F2 db F8,FC,E4,00, 00,FC,E4,40, FF ; 50h: Wallfire projectile ROM1:61FB db F0,FC,E4,00, 08,FC,E4,40, FF ; 51h: Gunzoo ROM1:6204 db F4,F4,B4,00, F4,FC,B5,00, F4,04,B6,00, FC,F4,B7,00, FC,FC,B8,00, FC,04,B9,00, 04,F4,BA,00, 04,FC,BB,00, 04,04,BC,00, FF ; 52h: Gunzoo ROM1:6229 db F4,F4,BD,00, F4,FC,B5,00, F4,04,BF,00, F4,0C,C0,00, FC,F4,B7,00, FC,FC,CD,00, FC,04,C1,00, FC,0C,C2,00, 04,F4,BA,00, 04,FC,C3,00, 04,04,C4,00, 04,0C,C5,00, FF ; 53h: Gunzoo ROM1:625A db F4,F4,B4,00, F4,FC,B5,00, F4,04,BF,00, F4,0C,C0,00, FC,F4,BE,00, FC,FC,CD,00, FC,04,C1,00, FC,0C,C2,00, 04,F4,BA,00, 04,FC,C3,00, 04,04,C4,00, 04,0C,C5,00, FF ; 54h: Gunzoo projectile ROM1:628B db FC,FC,CE,00, FF ; 55h: Gunzoo projectile ROM1:6290 db F8,FC,D0,00, 00,FC,CF,00, FF ; 56h: Gunzoo projectile ROM1:6299 db F0,FC,D2,00, F8,FC,D1,00, 00,FC,D0,00, 08,FC,CF,00, FF ; 57h: Gunzoo projectile ROM1:62AA db FC,FC,C6,00, FF ; 58h: ROM1:62AF db FC,FC,C7,00, FC,04,C8,00, FF ; 59h: Gunzoo projectile ROM1:62B8 db F8,FC,C9,00, 00,FC,C9,40, FF ; 5Ah: Gunzoo projectile ROM1:62C1 db EC,FC,CA,00, F4,FC,CB,00, 04,FC,CB,40, 0C,FC,CA,40, FF ; 5Bh: Gunzoo projectile ROM1:62D2 db E8,FC,CC,00, 10,FC,CC,40, FF ; 5Ch: Autom ROM1:62DB db F4,F4,D3,00, F4,FC,D4,00, FC,F4,D5,00, FC,FC,D6,00, FC,04,D7,00, 04,FC,D8,00, FF ; 5Dh: Autom ROM1:62F4 db F4,F4,D3,00, F4,FC,D4,00, FC,F4,E0,00, FC,FC,D6,00, FC,04,D7,00, 04,FC,D8,00, FF ; 5Eh: Autom projectile ROM1:630D db FC,FC,D9,00, FF ; 5Fh: Autom projectile ROM1:6312 db F4,FC,DA,00, FC,FC,DB,00, 04,FC,D9,00, FF ; 60h: Autom projectile ROM1:631F db EC,FC,DB,00, F4,FC,DA,00, FC,FC,DB,00, 04,FC,DA,00, 0C,FC,D9,00, FF ; 61h: Autom projectile ROM1:6334 db EC,FC,DA,00, F4,FC,DB,00, FC,FC,DA,00, 04,FC,DB,00, 0C,F4,DC,00, 0C,FC,DD,00, 0C,04,DC,20, FF ; 62h: Autom projectile ROM1:6351 db EC,FC,DB,00, F4,FC,DA,00, FC,FC,DB,00, 04,FC,DA,00, 0C,F4,DE,00, 0C,FC,DF,00, 0C,04,DE,20, FF ; 63h: Shirk ROM1:636E db F4,F4,E1,00, F4,FC,E2,00, F4,04,E3,00, FC,F4,E4,00, FC,FC,EF,00, FC,04,E6,00, 04,F4,ED,00, 04,FC,EE,00, 04,04,E9,00, FF ; 64h: Shirk ROM1:6393 db F4,F4,EA,00, F4,FC,EB,00, F4,04,E3,00, FC,F4,EC,00, FC,FC,E5,00, FC,04,E6,00, 04,F4,E7,00, 04,FC,E8,00, 04,04,E9,00, FF ; 67h: Moto ROM1:63B8 db F4,F0,BD,00, F4,F8,BE,00, F4,00,BF,00, FC,F0,C0,00, FC,F8,C1,00, FC,00,C2,00, 04,F0,C3,00, 04,F8,C4,00, 04,00,C5,00, FF ; 68h: Moto ROM1:63DD db F3,F0,BD,00, F3,F8,BE,00, F3,00,BF,00, FB,F0,C0,00, FB,F8,C6,00, FB,00,C7,00, 03,F0,C3,00, 03,F8,C8,00, 03,00,C9,00, FF ; 69h: Moto ROM1:6402 db F4,F0,BD,00, F4,F8,BE,00, F4,00,BF,00, FC,F0,C0,00, FC,F8,C6,00, FC,00,C7,00, 04,F0,C3,00, 04,F8,CA,00, 04,00,CB,00, FF ; 6Ah: Halzyn ROM1:6427 db F8,F4,CC,00, F8,FC,CD,00, F8,04,CE,00, 00,F4,CF,00, 00,FC,D0,00, 00,04,D1,00, FF ; 6Bh: Ramulken ROM1:6440 db F0,FC,D2,00, F8,F4,D3,00, F8,FC,D4,00, F8,04,D5,00, 00,F4,D6,00, 00,FC,D7,00, 00,04,D8,00, FF ; 6Ch: Ramulken ROM1:645D db F0,FC,D2,00, F8,F4,D3,00, F8,FC,D4,00, F8,04,D5,00, 00,F4,D9,00, 00,FC,DA,00, 00,04,DB,00, 08,F8,DC,00, 08,00,DD,00, FF ; D3h/D4h/D6h: Gravitt ROM1:6482 db F0,FC,B8,00, F8,F8,B6,00, F8,00,B7,00, 00,F8,B4,00, 00,00,B5,00, FF ; D5h: Gravitt ROM1:6497 db F0,FC,B8,00, F8,F8,B6,00, F8,00,B7,00, 00,F8,B9,00, 00,00,BA,00, FF ; D7h: Gravitt ROM1:64AC db F0,FC,B8,00, F8,F8,B6,00, F8,00,B7,00, 00,F8,BB,00, 00,00,BC,00, FF ; 6Eh: ; 72h: Proboscum ROM1:64C1 db FC,F4,E4,00, FC,FC,E5,00, FC,04,E6,00, 04,F4,E7,00, FF ; 73h: Proboscum ROM1:64D2 db FC,F4,E4,00, FC,FC,E8,00, 04,F4,E7,00, 04,FC,E9,00, 04,04,EA,00, FF ; 74h: Proboscum ROM1:64E7 db FC,F4,E4,00, FC,FC,EB,00, 04,F4,E7,00, 04,FC,EC,00, 0C,FC,ED,00, FF ; 76h: Arachnus ROM1:64FC db F8,F8,CB,00, F8,00,CC,00, 00,F8,CD,00, 00,00,CE,00, FF ; 77h: Arachnus ROM1:650D db F8,F8,CD,40, F8,00,CB,20, 00,F8,CE,20, 00,00,CC,40, FF ; 78h: Arachnus ROM1:651E db F0,FC,B8,00, F0,04,B9,00, F8,F4,BB,00, F8,FC,BC,00, F8,04,BD,00, FB,EC,BA,00, 00,F4,BF,00, 00,FC,C0,00, 00,04,C1,00, 03,EC,BE,00, 08,F4,C2,00, 08,FC,C3,00, 08,04,C4,00, FF ; 79h: Arachnus ROM1:6553 db F0,FC,B8,00, F0,04,B9,00, F8,E4,C5,00, F8,EC,C6,00, F8,F4,C7,00, F8,FC,BC,00, F8,04,BD,00, 00,F4,C8,00, 00,FC,C0,00, 00,04,C1,00, 08,F4,C2,00, 08,FC,C3,00, 08,04,C4,00, FF ; 7Ah: Arachnus ROM1:6588 db F0,E4,CF,00, F0,FC,B8,00, F0,04,B9,00, F8,E4,D0,00, F8,EC,D1,00, F8,F4,D2,00, F8,FC,BC,00, F8,04,BD,00, 00,F4,C8,00, 00,FC,C0,00, 00,04,C1,00, 08,F4,C2,00, 08,FC,C3,00, 08,04,C4,00, FF ; 7Bh: Arachnus projectile ROM1:65C1 db FC,FC,CA,00, FF ; 7Ch: Arachnus projectile ROM1:65C6 db FC,FC,C9,00, FF ; E0h: Small health drop ROM1:65CB db FC,FC,92,00, FF ; E1h: Small health drop ROM1:65D0 db FC,FC,93,00, FF ; ECh: Big energy drop ROM1:65D5 db F8,F8,94,00, F8,00,94,20, 00,F8,94,40, 00,00,94,60, FF ; EDh: Big energy drop ROM1:65E6 db F8,F8,95,00, F8,00,95,20, 00,F8,95,40, 00,00,95,60, FF ; E2h: Metroid death / missile door / screw attack explosion ROM1:65F7 db F7,FC,89,00, FC,F6,96,20, FC,01,96,20, 01,FC,89,40, FF ; E3h: Metroid death / missile door / screw attack explosion ROM1:6608 db F4,FC,89,00, F6,F6,97,00, F6,02,97,20, FC,F0,96,00, FC,04,96,20, 02,F6,97,40, 02,02,97,60, 04,FC,89,20, FF ; E4h: Metroid death / missile door / screw attack explosion ROM1:6629 db EE,EE,97,00, F3,FC,89,00, FC,EE,96,00, FC,05,96,20, 04,F4,97,40, 04,FC,89,40, FF ; E5h: Metroid death / missile door / screw attack explosion ROM1:6642 db EC,EC,97,00, EC,0B,97,20, F2,FC,89,00, FC,EA,96,00, FC,08,96,20, 08,F0,97,40, 10,FC,89,40, FF ; E6h: Metroid death / missile door / screw attack explosion ROM1:665F db EC,10,89,00, F0,FC,89,20, FC,EC,96,00, FC,0C,96,20, 0C,F0,89,40, 0C,0C,97,60, FF ; E7h: Metroid death / missile door / screw attack explosion ROM1:6678 db FC,EC,96,00, FF ; E8h: Enemy death explosion ROM1:667D db F8,F8,88,00, F8,00,88,20, 00,F8,88,40, 00,00,88,60, FF ; E9h: Enemy death explosion ROM1:668E db FC,FC,8A,00, FF ; EAh: Enemy death explosion ROM1:6693 db F4,F4,85,00, F4,FC,86,00, F4,04,85,20, FC,F4,87,00, FC,04,87,20, 04,F4,85,40, 04,FC,86,40, 04,04,85,60, FF ; EBh: Enemy death explosion ROM1:66B4 db F0,F0,7B,00, F0,F8,7C,00, F0,00,7C,20, F0,08,7B,20, F8,F0,7D,00, F8,08,7D,20, 00,F0,7D,40, 00,08,7D,60, 08,F0,7B,40, 08,F8,7C,40, 08,00,7C,60, 08,08,7B,60, FF ; EEh: Missile drop ROM1:66E5 db FC,FC,99,00, FF ; EFh: Missile drop ROM1:66EA db FC,FC,99,10, FF ; Unused(?) { ; TOOD ROM1:66EF db F8,F8,B8,00,00,F8,C8,00,08,F8,D8,00,FF,F8,F8,B9,00,00,F8,C9,00,08,F8,D9,00,FF,F8,F8,C6,00,F8,00,C7,00,00,F8,D6,00,00,00,D7,00,FF,F8,F8,BA,00,F8,00,BB,00,00,F8,CA,00,00,00,CB,00,FF,F8,F8,DA,00,F8,00,DB,00,00,F8,EA,00,00,00,EB,00,FF,F8,F8,DC,00,F8,00,DD,00,00,F8,EC,00,00,00,ED,00,FF,F8,F8,E4,00,F8,00,E4,20,00,F0,D0,00,00,F8,D1,00,00,00,D1,20,00,08,D0,20,FF,F8,F8,E3,00,F8,00,E3,20,00,F0,D0,00,00,F8,D1,00,00,00,D1,20,00,08,D0,20,FF,F4,F8,D2,00,F4,00,D2,20,FC,F8,E2,00,FC,00,E2,20,04,F0,E0,00,04,F8,E1,00,04,00,E1,20,04,08,E0,20,FF,F4,F8,B1,00,F4,00,B2,00,FC,F0,C0,00,FC,F8,C1,00,FC,00,C2,00,04,F8,B6,00,04,00,B7,00,FF,F4,F8,B1,00,F4,00,B2,00,FC,F0,C0,00,FC,F8,C1,00,FC,00,C2,00,04,F8,B0,00,04,00,D5,00,FF,F0,F4,B3,00,F8,F4,C3,00,F8,FC,C4,00,F8,04,C5,00,00,F4,D3,00,00,FC,D4,00,00,04,D5,00,FF,F0,F4,B3,00,F8,F4,C3,00,F8,FC,B4,00,F8,04,B5,00,00,F4,D3,00,00,FC,D4,00,00,04,D5,00,FF,FC,FC,E5,00,FF,F8,F8,BC,00,F8,00,BD,00,00,F8,CC,00,00,00,CD,00,FF,F8,F8,BE,00,F8,00,BF,00,00,F8,CE,00,00,00,CF,00,FF,FC,F8,DE,00,FC,00,DE,20,FF,F8,FC,DF,00,F0,FC,DF,40,FF } ; F8h: ROM1:684D db E8,E9,F4,20, F0,E9,F5,20, F8,E9,F6,20, 00,E9,F6,60, 08,E9,F5,60, 10,E9,F4,60, E8,10,F4,00, F0,10,F5,00, F8,10,F6,00, 00,10,F6,40, 08,10,F5,40, 10,10,F4,40, FF ; 75h: Missile block ROM1:687E db F8,F8,F7,00, F8,00,F8,00, 00,F8,F9,00, 00,00,FA,00, FF ; A0h: Metroid ROM1:688F db F4,F0,B4,00, F4,F8,B5,00, F4,00,B6,00, F4,08,B7,00, FC,F0,C4,00, FC,F8,C5,00, FC,00,C6,00, FC,08,C7,00, 04,F0,D4,00, 04,F8,D5,00, 04,00,D6,00, 04,08,D7,00, FF ; A1h: Metroid hatching ROM1:68C0 db F4,F4,C8,00, F4,FC,C9,00, F4,04,CA,00, FC,F0,D8,00, FC,F8,D9,00, FC,00,DA,00, FC,08,DB,00, 04,F4,E8,00, 04,FC,E9,00, 04,04,EA,00, FF ; A3h: Alpha metroid ROM1:68E9 db F4,F0,B0,00, F4,F8,B1,00, F4,00,B2,00, F4,08,B3,00, FC,F0,C0,00, FC,F8,C1,00, FC,00,C2,00, FC,08,C3,00, 04,F7,D1,00, 04,FF,D2,00, 04,07,D3,00, FF ; A4h: Alpha metroid ROM1:6916 db F4,F0,B0,00, F4,F8,B1,00, F4,00,E4,00, F4,08,E5,00, FC,F0,B8,00, FC,F8,B9,00, FC,00,E6,00, FC,08,E7,00, 04,F8,D1,00, 04,00,D2,00, 04,08,D3,00, FF ; CEh: Metroid ROM1:6943 db F4,F0,EB,00, F4,F8,EC,00, F4,00,ED,00, F4,08,EE,00, FC,F0,BE,00, FC,F8,C5,00, FC,00,C6,00, FC,08,BF,00, 04,F0,CB,00, 04,F8,CF,00, 04,00,DF,00, 04,08,EF,00, FF ; CFh: Metroid ROM1:6974 db F4,F0,B4,00, F4,F8,D0,00, F4,00,DC,00, F4,08,B7,00, FC,F0,C4,00, FC,F8,DD,00, FC,00,DE,00, FC,08,C7,00, 04,F0,D4,00, 04,F8,D5,00, 04,00,D6,00, 04,08,D7,00, FF ; AEh: Gamma metroid projectile ROM1:69A5 db FC,FC,BE,00, 04,F4,CE,00, 04,FC,CF,00, 0C,F4,BF,00, FF ; AFh: Gamma metroid projectile ROM1:69B6 db FC,EC,ED,00, FC,F4,EE,00, FC,FC,EF,00, FF ; ADh: Gamma metroid ROM1:69C3 db F4,EC,B4,00, F4,F4,B5,00, F4,FC,B6,00, F4,04,B7,00, F4,0C,B8,00, FC,F4,C5,00, FC,FC,C6,00, FC,04,C7,00, FC,0C,C8,00, 04,EC,D4,00, 04,F4,D5,00, 04,FC,D6,00, 04,04,D7,00, 04,0C,D8,00, 0C,FC,E6,00, 0C,04,E7,00, 0C,0C,E8,00, FF ; B0h: Gamma metroid ROM1:6A08 db F0,EC,B4,00, F0,F4,B5,00, F0,FC,B6,00, F0,04,B7,00, F0,0C,B8,00, F8,F4,C5,00, F8,FC,BB,00, F8,04,BC,00, F8,0C,BD,00, 00,EC,D4,00, 00,F4,D5,00, 00,FC,CB,00, 00,04,CC,00, 00,0C,CD,00, 08,FC,DB,00, 08,04,DC,00, 08,0C,DD,00, 10,FC,EB,00, 10,04,EC,00, FF ; B2h: Gamma metroid shell ROM1:6A55 db F4,EC,B4,00, F4,F4,B5,00, F4,FC,C4,00, FC,F4,C5,00, FC,FC,C6,00, FC,04,E5,00, FC,0C,E0,00, 04,EC,D4,00, 04,F4,D5,00, 04,FC,D6,00, 04,04,D7,00, 04,0C,D8,00, 0C,FC,E6,00, 0C,04,E7,00, 0C,0C,E8,00, FF ; B3h: Zeta metroid hatching ROM1:6A92 db F0,F4,B0,00, F0,FC,B1,00, F0,04,B2,00, F8,F4,C0,00, F8,FC,C1,00, F8,04,C2,00, 00,F4,D0,00, 00,FC,D1,00, 00,04,D2,00, 00,0C,BE,00, 00,14,BF,00, 08,FC,E1,00, 08,04,E2,00, FF ; B4h: Zeta metroid ROM1:6AC7 db F0,F4,B0,00, F0,FC,B1,00, F0,04,B2,00, F8,F4,C0,00, F8,FC,C1,00, F8,04,C2,00, 00,F4,D0,00, 00,FC,D1,00, 00,04,D2,00, 00,0C,CE,00, 00,14,CF,00, 08,FC,E1,00, 08,04,E2,00, FF ; B5h: Zeta metroid ROM1:6AFC db F0,F4,B0,00, F0,FC,B1,00, F0,04,B2,00, F8,F4,C0,00, F8,FC,C1,00, F8,04,C2,00, 00,F4,D0,00, 00,FC,D1,00, 00,04,D2,00, 00,0C,DE,00, 00,14,DF,00, 08,FC,E1,00, 08,04,E2,00, FF ; B6h: Zeta metroid ROM1:6B31 db F0,F4,B0,00, F0,FC,B1,00, F0,04,B2,00, F8,F4,C0,00, F8,FC,C1,00, F8,04,C2,00, 00,F4,D0,00, 00,FC,D1,00, 00,04,D2,00, 00,0C,EE,00, 00,14,EF,00, 08,FC,E1,00, 08,04,E2,00, FF ; B7h: Zeta metroid ROM1:6B66 db F0,F4,B0,00, F0,FC,B1,00, F0,04,B2,00, F8,F4,C0,00, F8,FC,C1,00, F8,04,C2,00, 00,F4,D0,00, 00,FC,CA,00, 00,04,CB,00, 00,0C,BE,00, 00,14,BF,00, 08,FC,DA,00, 08,04,DB,00, 10,FC,EA,00, 10,04,EB,00, FF ; B8h: Zeta metroid ROM1:6BA3 db F0,EC,B3,00, F0,F4,B9,00, F0,FC,BA,00, F0,04,B2,00, F8,EC,C3,00, F8,F4,C9,00, F8,FC,C1,00, F8,04,C2,00, 00,F4,D9,00, 00,FC,D1,00, 00,04,D2,00, 00,0C,BE,00, 00,14,BF,00, 08,FC,E1,00, 08,04,E2,00, FF ; B9h: Zeta metroid ROM1:6BE0 db F0,EC,B3,00, F0,F4,B9,00, F0,FC,BA,00, F0,04,B2,00, F8,EC,BB,00, F8,F4,C9,00, F8,FC,C1,00, F8,04,C2,00, 00,F4,CC,00, 00,FC,D1,00, 00,04,D2,00, 00,0C,EE,00, 00,14,EF,00, 08,FC,E1,00, 08,04,E2,00, FF ; BAh: Zeta metroid ROM1:6C1D db F0,F4,B0,00, F0,FC,B1,00, F0,04,B2,00, F8,F4,BD,00, F8,FC,E3,00, F8,04,E9,00, 00,F4,CD,00, 00,FC,D3,00, 00,04,CB,00, 00,0C,BE,00, 00,14,BF,00, 08,FC,DA,00, 08,04,DB,00, 10,FC,EA,00, 10,04,EB,00, FF ; BBh: Zeta metroid ROM1:6C5A db F0,F4,B0,00, F0,FC,B1,00, F0,04,B2,00, F8,F4,BD,00, F8,FC,E3,00, F8,04,E9,00, 00,F4,CD,00, 00,FC,D3,00, 00,04,CB,00, 00,0C,CE,00, 00,14,CF,00, 08,FC,DA,00, 08,04,DB,00, 10,FC,EA,00, 10,04,EB,00, FF ; BCh: Zeta metroid ROM1:6C97 db F0,F4,B0,00, F0,FC,B1,00, F0,04,B2,00, F8,F4,BD,00, F8,FC,E3,00, F8,04,E9,00, 00,F4,CD,00, 00,FC,D3,00, 00,04,CB,00, 00,0C,DE,00, 00,14,DF,00, 08,FC,DA,00, 08,04,DB,00, 10,FC,EA,00, 10,04,EB,00, FF ; BDh: Zeta metroid ROM1:6CD4 db F0,F4,B0,00, F0,FC,B1,00, F0,04,B2,00, F8,F4,BD,00, F8,FC,E3,00, F8,04,E9,00, 00,F4,CD,00, 00,FC,D3,00, 00,04,CB,00, 00,0C,EE,00, 00,14,EF,00, 08,FC,DA,00, 08,04,DB,00, 10,FC,EA,00, 10,04,EB,00, FF ; BEh: Zeta metroid projectile ROM1:6D11 db FC,FC,DC,00, FC,04,DD,00, 04,FC,EC,00, FF ; BFh: Omega metroid ROM1:6D1E db F0,F0,B4,00, F0,F8,B5,00, F8,E8,C3,00, F8,F0,C4,00, F8,F8,C5,00, F8,00,C6,00, F8,08,C7,00, 00,F0,D4,00, 00,F8,D5,00, 00,00,D6,00, 00,08,D7,00, 08,F8,E5,00, 08,00,E6,00, 08,08,E7,00, 10,00,C8,00, 10,08,C9,00, 10,10,CA,00, 18,00,D8,00, 18,08,D9,00, 20,00,E8,00, 20,08,E9,00, FF ; C0h: Omega metroid ROM1:6D73 db F0,F0,B4,00, F0,F8,B5,00, F8,E8,C3,00, F8,F0,C4,00, F8,F8,C5,00, F8,00,C6,00, F8,08,C7,00, 00,F0,D4,00, 00,F8,D5,00, 00,00,D6,00, 00,08,D7,00, 08,F8,E5,00, 08,00,E6,00, 08,08,E7,00, 10,00,C8,00, 10,08,C9,00, 10,10,DA,00, 18,00,D8,00, 18,08,D9,00, 20,00,E8,00, 20,08,E9,00, FF ; C1h: Omega metroid ROM1:6DC8 db F0,F0,B4,00, F0,F8,B5,00, F8,E8,B3,00, F8,F0,C4,00, F8,F8,C5,00, F8,00,C6,00, F8,08,C7,00, 00,F0,E4,00, 00,F8,D5,00, 00,00,D6,00, 00,08,D7,00, 08,F8,E5,00, 08,00,E6,00, 08,08,E7,00, 10,00,C8,00, 10,08,C9,00, 10,10,CA,00, 18,00,D8,00, 18,08,D9,00, 20,00,E8,00, 20,08,E9,00, FF ; C2h: Omega metroid ROM1:6E1D db F0,F0,B4,00, F0,F8,B5,00, F8,E8,B3,00, F8,F0,C4,00, F8,F8,C5,00, F8,00,C6,00, F8,08,C7,00, 00,F0,E4,00, 00,F8,D5,00, 00,00,D6,00, 00,08,D7,00, 08,F8,E5,00, 08,00,E6,00, 08,08,E7,00, 10,00,C8,00, 10,08,C9,00, 10,10,DA,00, 18,00,D8,00, 18,08,D9,00, 20,00,E8,00, 20,08,E9,00, FF ; C3h: Omega metroid ROM1:6E72 db F0,F0,B4,00, F0,F8,B5,00, F8,E8,C3,00, F8,F0,C4,00, F8,F8,C5,00, F8,00,C6,00, F8,08,C7,00, 00,F0,D4,00, 00,F8,D5,00, 00,00,D6,00, 00,08,D7,00, 08,F8,E5,00, 08,00,E6,00, 08,08,E7,00, 10,00,C8,00, 10,08,CB,00, 10,10,DA,00, 18,08,DB,00, 18,10,DC,00, 20,08,EB,00, FF ; C4h: Omega metroid ROM1:6EC3 db F0,F0,B6,00, F0,F8,B7,00, F8,E8,B8,00, F8,F0,B9,00, F8,F8,BA,00, F8,00,C6,00, F8,08,C7,00, 00,F0,BB,00, 00,F8,D5,00, 00,00,D6,00, 00,08,D7,00, 08,F8,E5,00, 08,00,E6,00, 08,08,E7,00, 10,00,C8,00, 10,08,C9,00, 10,10,CA,00, 18,00,D8,00, 18,08,D9,00, 20,00,E8,00, 20,08,E9,00, FF ; C5h: Omega metroid ROM1:6F18 db F0,F0,B6,00, F0,F8,B7,00, F8,E8,B8,00, F8,F0,B9,00, F8,F8,BA,00, F8,00,C6,00, F8,08,C7,00, 00,F0,BB,00, 00,F8,D5,00, 00,00,D6,00, 00,08,D7,00, 08,F8,E5,00, 08,00,E6,00, 08,08,E7,00, 10,00,C8,00, 10,08,CB,00, 10,10,DA,00, 18,08,DB,00, 18,10,DC,00, 20,08,EB,00, FF ; C6h: Omega metroid projectile ROM1:6F69 db F4,FC,BC,00, F4,04,BD,00, FC,FC,CC,00, FC,04,CD,00, FF ; C7h: Omega metroid projectile ROM1:6F7A db F4,FC,D3,00, F4,04,E3,00, FC,FC,CE,00, FC,04,CF,00, FF ; C8h: Omega metroid projectile ROM1:6F8B db FC,F8,DD,00, FC,00,DE,00, FF ; C9h: Omega metroid projectile ROM1:6F94 db FC,EC,EC,00, FC,F4,ED,00, FC,04,ED,20, FC,0C,EC,20, FF ; CAh: Omega metroid projectile ROM1:6FA5 db FC,E8,EE,00, FC,10,EE,20, FF ; CBh: Omega metroid projectile ROM1:6FAE db FC,E4,EF,00, FC,14,EF,20, FF ; CCh: Omega metroid projectile ROM1:6FB7 db FC,FC,DF,00, FF ; CDh: ROM1:6FBC db FC,FC,EA,00, FF ; A5h: Baby metroid egg ROM1:6FC1 db F4,F1,B4,00, F4,F9,B5,00, F4,01,B4,20, FC,F2,B6,00, FC,FA,B7,00, FC,02,B6,20, 04,F3,B8,00, 04,FB,B9,00, 04,03,B8,20, FF ; A6h: Baby metroid egg ; DBh: Baby metroid egg preview ROM1:6FE6 db F4,F4,B4,00, F4,FC,B5,00, F4,04,B4,20, FC,F4,B6,00, FC,FC,B7,00, FC,04,B6,20, 04,F4,B8,00, 04,FC,B9,00, 04,04,B8,20, FF ; A7h: Baby metroid egg ROM1:700B db F4,F7,B4,00, F4,FF,B5,00, F4,07,B4,20, FC,F6,B6,00, FC,FE,B7,00, FC,06,B6,20, 04,F5,B8,00, 04,FD,B9,00, 04,05,B8,20, FF ; A8h: Baby metroid ROM1:7030 db F8,F8,B0,00, F8,00,B0,20, 00,F8,B1,00, 00,00,B1,20, FF ; A9h: Baby metroid ROM1:7041 db F8,F8,B2,00, F8,00,B2,20, 00,F8,B3,00, 00,00,B3,20, FF ; 80h/82h/84h/86h/88h/8Ah/8Ch/8Eh/90h/92h/94h/96h/98h/9Ch: Item orb ROM1:7052 db F8,F8,B0,00, F8,00,B1,00, 00,F8,B2,00, 00,00,B3,00, FF ; 81h/83h/85h/87h/89h/8Bh/8Dh/8Fh/91h/93h/95h: Item ROM1:7063 db F8,F8,B4,00, F8,00,B5,00, 00,F8,B6,00, 00,00,B7,00, FF ; 97h: Energy tank ROM1:7074 db F8,F8,AB,00, F8,00,AC,00, 00,F8,AD,00, 00,00,AE,00, FF ; 99h: Missile tank ROM1:7085 db F8,F8,F0,00, F8,00,F1,00, 00,F8,F2,00, 00,00,F3,00, FF ; 9Bh: Energy refill ROM1:7096 db F8,F8,FD,00, F8,00,FD,20, 00,F8,FD,40, 00,00,FD,60, FF ; 9Dh: Missile refill ROM1:70A7 db F8,FC,FB,00, 00,FC,FC,00, FF ; 9Eh: Blob thrower projectile ROM1:70B0 db FC,FC,E4,00, FF ; 9Fh: Blob thrower projectile ROM1:70B5 db FC,FC,E5,00, FF } ;;; $70BA: ;;; { ; Externally called by: ; $3:6BB2: ROM1:70BA CD C1 70 call 70C1 ROM1:70BD CD FE 70 call 70FE ROM1:70C0 C9 ret ROM1:70C1 21 E1 FF ld hl,FFE1 ROM1:70C4 7E ld a,(hl) ROM1:70C5 C6 10 add a,10 ROM1:70C7 47 ld b,a ROM1:70C8 FA 3B D0 ld a,(D03B) ROM1:70CB 90 sub b ROM1:70CC 38 07 jr c,70D5 ROM1:70CE 06 00 ld b,00 ROM1:70D0 28 07 jr z,70D9 ROM1:70D2 04 inc b ROM1:70D3 18 04 jr 70D9 ROM1:70D5 2F cpl ROM1:70D6 3C inc a ROM1:70D7 06 FF ld b,FF ROM1:70D9 EA 5D C4 ld (C45D),a ROM1:70DC 78 ld a,b ROM1:70DD EA 5B C4 ld (C45B),a ROM1:70E0 2C inc l ROM1:70E1 7E ld a,(hl) ROM1:70E2 C6 10 add a,10 ROM1:70E4 47 ld b,a ROM1:70E5 FA 3C D0 ld a,(D03C) ROM1:70E8 90 sub b ROM1:70E9 38 07 jr c,70F2 ROM1:70EB 06 00 ld b,00 ROM1:70ED 28 07 jr z,70F6 ROM1:70EF 04 inc b ROM1:70F0 18 04 jr 70F6 ROM1:70F2 2F cpl ROM1:70F3 3C inc a ROM1:70F4 06 FF ld b,FF ROM1:70F6 EA 5E C4 ld (C45E),a ROM1:70F9 78 ld a,b ROM1:70FA EA 5A C4 ld (C45A),a ROM1:70FD C9 ret } ;;; $70FE: ;;; { ROM1:70FE FA 5A C4 ld a,(C45A) ROM1:7101 A7 and a ROM1:7102 28 43 jr z,7147 ROM1:7104 4F ld c,a ROM1:7105 FA 5B C4 ld a,(C45B) ROM1:7108 A7 and a ROM1:7109 28 2F jr z,713A ROM1:710B 3C inc a ROM1:710C 28 0B jr z,7119 ROM1:710E 0C inc c ROM1:710F 28 04 jr z,7115 ROM1:7111 3E 04 ld a,04 ROM1:7113 18 0D jr 7122 ROM1:7115 3E 09 ld a,09 ROM1:7117 18 09 jr 7122 ROM1:7119 0C inc c ROM1:711A 28 04 jr z,7120 ROM1:711C 3E 0E ld a,0E ROM1:711E 18 02 jr 7122 ROM1:7120 3E 13 ld a,13 ROM1:7122 EA 5C C4 ld (C45C),a ROM1:7125 CD 70 71 call 7170 ROM1:7128 CD 89 71 call 7189 ROM1:712B FA 5C C4 ld a,(C45C) ROM1:712E 5F ld e,a ROM1:712F 16 00 ld d,00 ROM1:7131 21 58 71 ld hl,7158 ROM1:7134 19 add hl,de ROM1:7135 7E ld a,(hl) ROM1:7136 EA EA FF ld (FFEA),a ROM1:7139 C9 ret ROM1:713A FA 5A C4 ld a,(C45A) ROM1:713D 3D dec a ROM1:713E 28 04 jr z,7144 ROM1:7140 3E 01 ld a,01 ROM1:7142 18 0F jr 7153 ROM1:7144 AF xor a ROM1:7145 18 0C jr 7153 ROM1:7147 FA 5B C4 ld a,(C45B) ROM1:714A 3D dec a ROM1:714B 28 04 jr z,7151 ROM1:714D 3E 03 ld a,03 ROM1:714F 18 02 jr 7153 ROM1:7151 3E 02 ld a,02 ROM1:7153 EA 5C C4 ld (C45C),a ROM1:7156 18 D3 jr 712B ROM1:7158 db 01, 02, 03, 00, 04, 05, 06, 02, 01, 07, 08, 09, 02, 00, 0A, 0B, 0C, 03, 01, 0D, 0E, 0F, 03 } ;;; $7170: ;;; { ROM1:7170 06 64 ld b,64 ROM1:7172 FA 5D C4 ld a,(C45D) ROM1:7175 5F ld e,a ROM1:7176 CD B9 73 call 73B9 ROM1:7179 FA 5E C4 ld a,(C45E) ROM1:717C 4F ld c,a ROM1:717D CD CC 73 call 73CC ROM1:7180 7D ld a,l ROM1:7181 EA 5F C4 ld (C45F),a ROM1:7184 7C ld a,h ROM1:7185 EA 60 C4 ld (C460),a ROM1:7188 C9 ret } ;;; $7189: ;;; { ROM1:7189 FA 60 C4 ld a,(C460) ROM1:718C A7 and a ROM1:718D 20 11 jr nz,71A0 ROM1:718F FA 5F C4 ld a,(C45F) ROM1:7192 FE 14 cp 14 ROM1:7194 38 1B jr c,71B1 ROM1:7196 FE 3C cp 3C ROM1:7198 38 1B jr c,71B5 ROM1:719A FE C8 cp C8 ROM1:719C 38 1B jr c,71B9 ROM1:719E 18 1D jr 71BD ROM1:71A0 FE 02 cp 02 ROM1:71A2 28 04 jr z,71A8 ROM1:71A4 30 1B jr nc,71C1 ROM1:71A6 18 15 jr 71BD ROM1:71A8 FA 5F C4 ld a,(C45F) ROM1:71AB FE 58 cp 58 ROM1:71AD 30 12 jr nc,71C1 ROM1:71AF 18 0C jr 71BD ROM1:71B1 06 00 ld b,00 ROM1:71B3 18 0E jr 71C3 ROM1:71B5 06 01 ld b,01 ROM1:71B7 18 0A jr 71C3 ROM1:71B9 06 02 ld b,02 ROM1:71BB 18 06 jr 71C3 ROM1:71BD 06 03 ld b,03 ROM1:71BF 18 02 jr 71C3 ROM1:71C1 06 04 ld b,04 ROM1:71C3 FA 5C C4 ld a,(C45C) ROM1:71C6 80 add a,b ROM1:71C7 EA 5C C4 ld (C45C),a ROM1:71CA C9 ret } ;;; $71CB: ;;; { ; Externally called by: ; $3:6BB2: ROM1:71CB 21 DB 71 ld hl,71DB ROM1:71CE FA EA FF ld a,(FFEA) ROM1:71D1 87 add a,a ROM1:71D2 5F ld e,a ROM1:71D3 16 00 ld d,00 ROM1:71D5 19 add hl,de ROM1:71D6 2A ldi a,(hl) ROM1:71D7 56 ld d,(hl) ROM1:71D8 62 ld h,d ROM1:71D9 6F ld l,a ROM1:71DA E9 jp hl ROM1:71DB dw 71FB, 71FF, 7203, 7207, 720B, 720F, 7213, 7217, 721B, 721F, 7223, 7227, 722B, 722F, 7233, 7237 } ;;; $71FB: ;;; { ROM1:71FB 01 03 00 ld bc,0003 ROM1:71FE C9 ret } ;;; $71FF: ;;; { ROM1:71FF 01 83 00 ld bc,0083 ROM1:7202 C9 ret } ;;; $7203: ;;; { ROM1:7203 01 00 03 ld bc,0300 ROM1:7206 C9 ret } ;;; $7207: ;;; { ROM1:7207 01 00 83 ld bc,8300 ROM1:720A C9 ret } ;;; $720B: ;;; { ROM1:720B 01 03 01 ld bc,0103 ROM1:720E C9 ret } ;;; $720F: ;;; { ROM1:720F 01 02 02 ld bc,0202 ROM1:7212 C9 ret } ;;; $7213: ;;; { ROM1:7213 01 01 03 ld bc,0301 ROM1:7216 C9 ret } ;;; $7217: ;;; { ROM1:7217 01 83 01 ld bc,0183 ROM1:721A C9 ret } ;;; $721B: ;;; { ROM1:721B 01 82 02 ld bc,0282 ROM1:721E C9 ret } ;;; $721F: ;;; { ROM1:721F 01 81 03 ld bc,0381 ROM1:7222 C9 ret } ;;; $7223: ;;; { ROM1:7223 01 03 81 ld bc,8103 ROM1:7226 C9 ret } ;;; $7227: ;;; { ROM1:7227 01 02 82 ld bc,8202 ROM1:722A C9 ret } ;;; $722B: ;;; { ROM1:722B 01 01 83 ld bc,8301 ROM1:722E C9 ret } ;;; $722F: ;;; { ROM1:722F 01 83 81 ld bc,8183 ROM1:7232 C9 ret } ;;; $7233: ;;; { ROM1:7233 01 82 82 ld bc,8282 ROM1:7236 C9 ret } ;;; $7237: ;;; { ROM1:7237 01 81 83 ld bc,8381 ROM1:723A C9 ret } ;;; $723B: ;;; { ; Externally called by: ; $3:6F60: ; $3:7631: ROM1:723B CD C1 70 call 70C1 ROM1:723E CD 42 72 call 7242 ROM1:7241 C9 ret } ;;; $7242: ;;; { ROM1:7242 FA 5A C4 ld a,(C45A) ROM1:7245 A7 and a ROM1:7246 28 43 jr z,728B ROM1:7248 4F ld c,a ROM1:7249 FA 5B C4 ld a,(C45B) ROM1:724C A7 and a ROM1:724D 28 2F jr z,727E ROM1:724F 3C inc a ROM1:7250 28 0B jr z,725D ROM1:7252 0C inc c ROM1:7253 28 04 jr z,7259 ROM1:7255 3E 04 ld a,04 ROM1:7257 18 0D jr 7266 ROM1:7259 3E 0B ld a,0B ROM1:725B 18 09 jr 7266 ROM1:725D 0C inc c ROM1:725E 28 04 jr z,7264 ROM1:7260 3E 12 ld a,12 ROM1:7262 18 02 jr 7266 ROM1:7264 3E 19 ld a,19 ROM1:7266 EA 5C C4 ld (C45C),a ROM1:7269 CD 70 71 call 7170 ROM1:726C CD BC 72 call 72BC ROM1:726F FA 5C C4 ld a,(C45C) ROM1:7272 5F ld e,a ROM1:7273 16 00 ld d,00 ROM1:7275 21 9C 72 ld hl,729C ROM1:7278 19 add hl,de ROM1:7279 7E ld a,(hl) ROM1:727A EA EA FF ld (FFEA),a ROM1:727D C9 ret ROM1:727E FA 5A C4 ld a,(C45A) ROM1:7281 3D dec a ROM1:7282 28 04 jr z,7288 ROM1:7284 3E 01 ld a,01 ROM1:7286 18 0F jr 7297 ROM1:7288 AF xor a ROM1:7289 18 0C jr 7297 ROM1:728B FA 5B C4 ld a,(C45B) ROM1:728E 3D dec a ROM1:728F 28 04 jr z,7295 ROM1:7291 3E 03 ld a,03 ROM1:7293 18 02 jr 7297 ROM1:7295 3E 02 ld a,02 ROM1:7297 EA 5C C4 ld (C45C),a ROM1:729A 18 D3 jr 726F ROM1:729C db 00, 01, 02, 03, 00, 04, 05, 06, 07, 08, 02, 01, 09, 0A, 0B, 0C, 0D, 02, 00, 0E, 0F, 10, 11, 12, 03, 01, 13, 14, 15, 16, 17, 03 } ;;; $72BC: ;;; { ROM1:72BC FA 60 C4 ld a,(C460) ROM1:72BF A7 and a ROM1:72C0 20 15 jr nz,72D7 ROM1:72C2 FA 5F C4 ld a,(C45F) ROM1:72C5 FE 0C cp 0C ROM1:72C7 38 2E jr c,72F7 ROM1:72C9 FE 26 cp 26 ROM1:72CB 38 2E jr c,72FB ROM1:72CD FE 4B cp 4B ROM1:72CF 38 2E jr c,72FF ROM1:72D1 FE 96 cp 96 ROM1:72D3 38 2E jr c,7303 ROM1:72D5 18 30 jr 7307 ROM1:72D7 FE 03 cp 03 ROM1:72D9 28 0A jr z,72E5 ROM1:72DB 30 32 jr nc,730F ROM1:72DD FE 01 cp 01 ROM1:72DF 28 0D jr z,72EE ROM1:72E1 30 28 jr nc,730B ROM1:72E3 18 22 jr 7307 ROM1:72E5 FA 5F C4 ld a,(C45F) ROM1:72E8 FE 20 cp 20 ROM1:72EA 30 23 jr nc,730F ROM1:72EC 18 1D jr 730B ROM1:72EE FA 5F C4 ld a,(C45F) ROM1:72F1 FE 2C cp 2C ROM1:72F3 30 16 jr nc,730B ROM1:72F5 18 10 jr 7307 ROM1:72F7 06 00 ld b,00 ROM1:72F9 18 16 jr 7311 ROM1:72FB 06 01 ld b,01 ROM1:72FD 18 12 jr 7311 ROM1:72FF 06 02 ld b,02 ROM1:7301 18 0E jr 7311 ROM1:7303 06 03 ld b,03 ROM1:7305 18 0A jr 7311 ROM1:7307 06 04 ld b,04 ROM1:7309 18 06 jr 7311 ROM1:730B 06 05 ld b,05 ROM1:730D 18 02 jr 7311 ROM1:730F 06 06 ld b,06 ROM1:7311 FA 5C C4 ld a,(C45C) ROM1:7314 80 add a,b ROM1:7315 EA 5C C4 ld (C45C),a ROM1:7318 C9 ret } ;;; $7319: ;;; { ; Externally called by: ; $3:6F60: ; $3:7631: ROM1:7319 21 29 73 ld hl,7329 ROM1:731C FA EA FF ld a,(FFEA) ROM1:731F 87 add a,a ROM1:7320 5F ld e,a ROM1:7321 16 00 ld d,00 ROM1:7323 19 add hl,de ROM1:7324 2A ldi a,(hl) ROM1:7325 56 ld d,(hl) ROM1:7326 62 ld h,d ROM1:7327 6F ld l,a ROM1:7328 E9 jp hl ROM1:7329 dw 7359, 735D, 7361, 7365, 7369, 736D, 7371, 7375, 7379, 737D, 7381, 7385, 7389, 738D, 7391, 7395, 7399, 739D, 73A1, 73A5, 73A9, 73AD, 73B1, 73B5 } ;;; $7359: ;;; { ROM1:7359 01 04 00 ld bc,0004 ROM1:735C C9 ret } ;;; $735D: ;;; { ROM1:735D 01 84 00 ld bc,0084 ROM1:7360 C9 ret } ;;; $7361: ;;; { ROM1:7361 01 00 04 ld bc,0400 ROM1:7364 C9 ret } ;;; $7365: ;;; { ROM1:7365 01 00 84 ld bc,8400 ROM1:7368 C9 ret } ;;; $7369: ;;; { ROM1:7369 01 04 01 ld bc,0104 ROM1:736C C9 ret } ;;; $736D: ;;; { ROM1:736D 01 04 02 ld bc,0204 ROM1:7370 C9 ret } ;;; $7371: ;;; { ROM1:7371 01 03 03 ld bc,0303 ROM1:7374 C9 ret } ;;; $7375: ;;; { ROM1:7375 01 02 04 ld bc,0402 ROM1:7378 C9 ret } ;;; $7379: ;;; { ROM1:7379 01 01 04 ld bc,0401 ROM1:737C C9 ret } ;;; $737D: ;;; { ROM1:737D 01 84 01 ld bc,0184 ROM1:7380 C9 ret } ;;; $7381: ;;; { ROM1:7381 01 84 02 ld bc,0284 ROM1:7384 C9 ret } ;;; $7385: ;;; { ROM1:7385 01 83 03 ld bc,0383 ROM1:7388 C9 ret } ;;; $7389: ;;; { ROM1:7389 01 82 04 ld bc,0482 ROM1:738C C9 ret } ;;; $738D: ;;; { ROM1:738D 01 81 04 ld bc,0481 ROM1:7390 C9 ret } ;;; $7391: ;;; { ROM1:7391 01 04 81 ld bc,8104 ROM1:7394 C9 ret } ;;; $7395: ;;; { ROM1:7395 01 04 82 ld bc,8204 ROM1:7398 C9 ret } ;;; $7399: ;;; { ROM1:7399 01 03 83 ld bc,8303 ROM1:739C C9 ret } ;;; $739D: ;;; { ROM1:739D 01 02 84 ld bc,8402 ROM1:73A0 C9 ret } ;;; $73A1: ;;; { ROM1:73A1 01 01 84 ld bc,8401 ROM1:73A4 C9 ret } ;;; $73A5: ;;; { ROM1:73A5 01 84 81 ld bc,8184 ROM1:73A8 C9 ret } ;;; $73A9: ;;; { ROM1:73A9 01 84 82 ld bc,8284 ROM1:73AC C9 ret } ;;; $73AD: ;;; { ROM1:73AD 01 83 83 ld bc,8383 ROM1:73B0 C9 ret } ;;; $73B1: ;;; { ROM1:73B1 01 82 84 ld bc,8482 ROM1:73B4 C9 ret } ;;; $73B5: ;;; { ROM1:73B5 01 81 84 ld bc,8481 ROM1:73B8 C9 ret } ;;; $73B9: ;;; { ROM1:73B9 21 00 00 ld hl,0000 ROM1:73BC 4D ld c,l ROM1:73BD 3E 08 ld a,08 ROM1:73BF CB 38 srl b ROM1:73C1 CB 19 rr c ROM1:73C3 CB 23 sla e ROM1:73C5 30 01 jr nc,73C8 ROM1:73C7 09 add hl,bc ROM1:73C8 3D dec a ROM1:73C9 20 F4 jr nz,73BF ROM1:73CB C9 ret } ;;; $73CC: ;;; { ROM1:73CC 7C ld a,h ROM1:73CD B5 or l ROM1:73CE C8 ret z ROM1:73CF 11 00 00 ld de,0000 ROM1:73D2 06 10 ld b,10 ROM1:73D4 CB 25 sla l ROM1:73D6 CB 14 rl h ROM1:73D8 CB 13 rl e ROM1:73DA CB 12 rl d ROM1:73DC 7B ld a,e ROM1:73DD 91 sub c ROM1:73DE 7A ld a,d ROM1:73DF DE 00 sbc a,00 ROM1:73E1 38 07 jr c,73EA ROM1:73E3 7B ld a,e ROM1:73E4 91 sub c ROM1:73E5 5F ld e,a ROM1:73E6 7A ld a,d ROM1:73E7 DE 00 sbc a,00 ROM1:73E9 57 ld d,a ROM1:73EA 3F ccf ROM1:73EB CB 15 rl l ROM1:73ED CB 14 rl h ROM1:73EF CB 13 rl e ROM1:73F1 CB 12 rl d ROM1:73F3 05 dec b ROM1:73F4 20 E6 jr nz,73DC ROM1:73F6 C9 ret } ;;; $73F7: ;;; { ; Externally called by: ; $5:4118: Title ; $5:5603: ; $5:59B8: ; $5:59C7: ; $5:59D6: ; $5:59F1: ; $5:5A07: ; $5:5A0F: ; $5:5A17: ; $5:5A1F: ; $5:5A27: ; $5:5A2F: ; $5:5A37: ; $5:5A3F: ; $5:5A55: ; $5:5A6B: ; $5:5A7A: ; $5:5A90: ; $5:5AA6: ; $5:5ABC: ; $5:5AD2: ; $5:5AE8: ; $5:5AFE: ROM1:73F7 F0 C6 ld a,(FF00+C6) ROM1:73F9 16 00 ld d,00 ROM1:73FB 5F ld e,a ROM1:73FC CB 23 sla e ROM1:73FE CB 12 rl d ROM1:7400 21 4A 74 ld hl,744A ROM1:7403 19 add hl,de ROM1:7404 2A ldi a,(hl) ROM1:7405 5F ld e,a ROM1:7406 7E ld a,(hl) ROM1:7407 57 ld d,a ROM1:7408 26 C0 ld h,C0 ROM1:740A F0 8D ld a,(FF00+8D) ROM1:740C 6F ld l,a ROM1:740D F0 C4 ld a,(FF00+C4) ROM1:740F 47 ld b,a ROM1:7410 F0 C5 ld a,(FF00+C5) ROM1:7412 4F ld c,a ; LOOP_ALPHA ROM1:7413 1A ld a,(de) ROM1:7414 FE FF cp FF ROM1:7416 28 31 jr z,7449 ROM1:7418 F0 C7 ld a,(FF00+C7) ROM1:741A CB 77 bit 6,a ROM1:741C 28 06 jr z,7424 ROM1:741E 1A ld a,(de) ROM1:741F 2F cpl ROM1:7420 D6 07 sub 07 ROM1:7422 18 01 jr 7425 ROM1:7424 1A ld a,(de) ROM1:7425 80 add a,b ROM1:7426 22 ldi (hl),a ROM1:7427 13 inc de ROM1:7428 F0 C7 ld a,(FF00+C7) ROM1:742A CB 6F bit 5,a ROM1:742C 28 06 jr z,7434 ROM1:742E 1A ld a,(de) ROM1:742F 2F cpl ROM1:7430 D6 07 sub 07 ROM1:7432 18 01 jr 7435 ROM1:7434 1A ld a,(de) ROM1:7435 81 add a,c ROM1:7436 22 ldi (hl),a ROM1:7437 13 inc de ROM1:7438 1A ld a,(de) ROM1:7439 22 ldi (hl),a ROM1:743A 13 inc de ROM1:743B E5 push hl ROM1:743C 21 C7 FF ld hl,FFC7 ROM1:743F 1A ld a,(de) ROM1:7440 AE xor (hl) ROM1:7441 E1 pop hl ROM1:7442 22 ldi (hl),a ROM1:7443 7D ld a,l ROM1:7444 E0 8D ld (FF00+8D),a ROM1:7446 13 inc de ROM1:7447 18 CA jr 7413 ROM1:7449 C9 ret } ;;; $744A: Sprite sets ;;; { ROM1:744A dw 760E,7623,7638,763D,7642,7647,7609,7578, 74A5,74E6,7537,764C,7675,7609,7796,77A7, 77C0,780D,7876,78FB,7910,7935,7946,7957, 7970,7985,7996,79AB,79B0,79B5,79D2,7692, 76D3,7714,7755,7496,749B,74A0 ROM1:7496 db 00,36,FB,80, FF ROM1:749B db 00,36,FC,80, FF ROM1:74A0 db 00,36,FD,80, FF ROM1:74A5 db E8,EC,00,80, E8,F4,01,80, E8,FC,02,80, E8,04,03,80, E8,0C,04,80, F0,EC,05,80, F0,F4,06,80, F0,FC,07,80, F0,04,08,80, F0,0C,09,80, F8,EC,0A,80, F8,F4,0B,80, F8,FC,0C,80, F8,04,0D,80, F8,0C,0E,80, 00,0C,12,80, FF ROM1:74E6 db E8,EC,1A,80, E8,F4,1B,80, E8,FC,1C,80, E8,04,1D,80, E8,0C,1E,80, F0,EC,1F,80, F0,F4,20,80, F0,FC,21,80, F0,04,22,80, F0,0C,23,80, F8,EC,24,80, F8,F4,25,80, F8,FC,26,80, F8,04,27,80, F8,0C,28,80, 00,EC,29,80, 00,F4,2A,80, 00,FC,2B,80, 00,04,2C,80, 00,0C,2D,80, FF ROM1:7537 db E8,EC,35,80, E8,F4,36,80, E8,FC,37,80, E8,04,38,80, E8,0C,39,80, F0,EC,3A,80, F0,F4,3B,80, F0,FC,3C,80, F0,04,3D,80, F0,0C,3E,80, F8,EC,3F,80, F8,F4,40,80, F8,FC,41,80, F8,04,42,80, F8,0C,43,80, 00,EC,44,80, FF ROM1:7578 db E8,EC,53,80, E8,F4,54,80, E8,FC,55,80, E8,04,56,80, E8,0C,57,80, F0,EC,58,80, F0,F4,59,80, F0,FC,5A,80, F0,04,5B,80, F0,0C,5C,80, F8,F0,5D,80, F8,F8,5E,80, F8,00,5F,80, F8,08,60,80, 00,EC,61,80, 00,F4,62,80, 00,FC,63,80, 00,04,64,80, 00,0C,65,80, 08,EC,66,80, 08,F4,67,80, 08,FC,68,80, 08,04,69,80, 08,0C,6A,80, 10,EC,6B,80, 10,F4,6C,80, 10,FC,6D,80, 10,04,6E,80, 18,F4,6F,80, 18,03,6F,A0, 20,F4,70,80, 20,03,70,A0, 28,EC,71,80, 28,F4,72,80, 28,03,72,A0, 28,0B,71,A0, FF ROM1:7609 db 00,00,EF,80, FF ROM1:760E db 00,00,F1,00, 00,08,F2,00, 00,10,F3,00, 00,18,F4,00, 00,20,F5,00, FF ROM1:7623 db 00,00,F6,00, 00,08,F7,00, 00,10,F8,00, 00,18,F9,00, 00,20,FA,00, FF ROM1:7638 db 00,00,ED,00, FF ROM1:763D db 00,00,EE,00, FF ROM1:7642 db 00,00,EF,00, FF ROM1:7647 db 00,00,F0,00, FF ROM1:764C db 00,F4,0F,80, 00,FC,10,80, 00,04,11,80, 08,F8,13,80, 08,00,14,80, 10,F8,15,80, 10,00,16,80, 18,00,17,80, 20,00,18,80, 28,FF,19,80, FF ROM1:7675 db 08,F4,2E,80, 08,FC,2F,80, 08,04,30,80, 10,F8,31,80, 10,00,32,80, 18,FF,33,80, 20,FF,34,80, FF ROM1:7692 db F0,F0,45,80, F0,F8,46,80, F0,00,46,A0, F0,08,45,A0, F8,F0,47,80, F8,F8,48,80, F8,00,48,A0, F8,08,47,A0, 00,F0,49,80, 00,F8,4A,80, 00,00,4A,A0, 00,08,49,A0, 08,F0,4B,80, 08,F8,4C,80, 08,00,4C,A0, 08,08,4B,A0, FF ROM1:76D3 db F0,F0,4D,80, F0,F8,4E,80, F0,00,4E,A0, F0,08,4D,A0, F8,F0,4F,80, F8,F8,50,80, F8,00,50,A0, F8,08,4F,A0, 00,F0,4F,C0, 00,F8,50,C0, 00,00,50,E0, 00,08,4F,E0, 08,F0,4B,80, 08,F8,4C,80, 08,00,4C,A0, 08,08,4B,A0, FF ROM1:7714 db F0,F0,4B,C0, F0,F8,4C,C0, F0,00,4C,E0, F0,08,4B,E0, F8,F0,49,C0, F8,F8,4A,C0, F8,00,4A,E0, F8,08,49,E0, 00,F0,47,C0, 00,F8,48,C0, 00,00,48,E0, 00,08,47,E0, 08,F0,45,C0, 08,F8,46,C0, 08,00,46,E0, 08,08,45,E0, FF ROM1:7755 db F0,F0,4B,C0, F0,F8,4C,C0, F0,00,4C,E0, F0,08,4B,E0, F8,F0,49,C0, F8,F8,4A,C0, F8,00,4A,E0, F8,08,49,E0, 00,F0,49,80, 00,F8,4A,80, 00,00,4A,A0, 00,08,49,A0, 08,F0,4B,80, 08,F8,4C,80, 08,00,4C,A0, 08,08,4B,A0, FF ROM1:7796 db E0,F8,AA,80, E0,00,AB,80, E8,F8,AC,80, E8,00,AD,80, FF ROM1:77A7 db F0,F0,AE,80, F0,F8,AF,80, F8,F0,B2,80, F8,F8,B3,80, 00,F0,B6,80, 08,F0,BA,80, FF ROM1:77C0 db F0,00,B0,80, F0,08,B1,80, F8,00,B4,80, F8,08,B5,80, 00,F8,B7,80, 00,00,B8,80, 00,08,B9,80, 08,F8,BB,80, 08,00,BC,80, 08,08,BD,80, 10,F8,BE,80, 10,00,BF,80, 18,FB,C0,80, 18,03,C1,80, 20,FB,C2,80, 20,03,C3,80, 28,F8,C4,80, 28,00,C5,80, 28,08,C6,80, FF ROM1:780D db 00,F8,90,80, 00,00,91,80, 08,F8,92,80, 08,00,93,80, 08,08,94,80, 08,10,95,80, 10,F0,96,80, 10,F8,97,80, 10,00,98,80, 10,08,99,80, 10,10,9A,80, 18,E8,9B,80, 18,F0,9C,80, 18,F8,9D,80, 18,00,9E,80, 18,08,9F,80, 18,12,A0,80, 20,E8,A1,80, 20,F0,A2,80, 20,F8,A3,80, 20,00,A4,80, 20,08,A5,80, 28,F0,A6,80, 28,F8,A7,80, 28,00,A8,80, 28,08,A9,80, FF ROM1:7876 db 00,EC,53,80, 00,F4,54,80, 00,FC,55,80, 00,04,56,80, 00,0C,57,80, 08,EC,73,80, 08,F4,74,80, 08,FC,75,80, 08,04,76,80, 08,0C,77,80, 10,EC,78,80, 10,F4,79,80, 10,FC,7A,80, 10,04,7B,80, 10,0C,7C,80, 10,14,7D,80, 18,E4,7E,80, 18,EC,7F,80, 18,F4,80,80, 18,FC,81,80, 18,04,82,80, 18,0C,83,80, 18,14,84,80, 20,E4,85,80, 20,EC,86,80, 20,F4,87,80, 20,FC,88,80, 20,04,89,80, 20,0C,8A,80, 28,EC,8B,80, 28,F4,8C,80, 28,FC,8D,80, 28,04,8E,80, FF ROM1:78FB db F0,E8,C7,80, F0,F0,C8,80, F0,F8,C9,80, F8,F0,CA,80, F8,F8,CB,80, FF ROM1:7910 db E0,F0,CC,80, E0,F8,CD,80, E0,00,AB,80, E8,F0,CE,80, E8,F8,CF,80, E8,00,AD,80, F0,F0,D0,80, F0,F8,D1,80, F8,F8,D2,80, FF ROM1:7935 db E0,F8,E3,80, E0,00,E4,80, E8,F8,E5,80, E8,00,E6,80, FF ROM1:7946 db E0,F8,E7,80, E0,00,E8,80, E8,F8,E9,80, E8,00,EA,80, FF ROM1:7957 db E0,F0,D4,80, E0,F8,D5,80, E0,00,D6,80, E8,F0,D7,80, E8,F8,D8,80, E8,00,D9,80, FF ROM1:7970 db E0,F8,DA,80, E0,00,DB,80, E8,F0,DC,80, E8,F8,DD,80, E8,00,DE,80, FF ROM1:7985 db E0,F8,DF,80, E0,00,E0,80, E8,F8,E1,80, E8,00,E2,80, FF ROM1:7996 db E0,F8,DA,80, E0,00,DB,80, E8,F0,EB,80, E8,F8,EC,80, E8,00,ED,80, FF ROM1:79AB db FC,FC,EE,80, FF ROM1:79B0 db FC,FC,EF,80, FF ROM1:79B5 db F8,F0,F0,80, F8,F8,F1,80, F8,00,F2,80, 00,F0,F6,80, 00,F8,F7,80, 00,00,F8,80, 00,08,F9,80, FF ROM1:79D2 db F8,F0,F3,80, F8,F8,F4,80, F8,08,F5,80, 00,F0,FA,80, 00,F8,FB,80, 00,00,FC,80, 00,08,FD,80, FF } ;;; $79EF: Handle earthquake ;;; { ; Externally called by: ; $2366: Calculate scroll offsets ROM1:79EF FA 83 D0 ld a,(D083) ;\ ROM1:79F2 A7 and a ;} If [earthquake timer] = 0: return ROM1:79F3 C8 ret z ;/ ROM1:79F4 E6 02 and 02 ;\ ROM1:79F6 3D dec a ;| ROM1:79F7 47 ld b,a ;| ROM1:79F8 FA 05 C2 ld a,(C205) ;} Scroll Y += ([earthquake timer] & 2) - 1 ROM1:79FB 80 add a,b ;| ROM1:79FC EA 05 C2 ld (C205),a ;/ ROM1:79FF F0 97 ld a,(FF00+97) ;\ ROM1:7A01 E6 01 and 01 ;} If [frame counter] & 1: return ROM1:7A03 C0 ret nz ;/ ROM1:7A04 FA 83 D0 ld a,(D083) ;\ ROM1:7A07 3D dec a ;} Decrement earthquake timer ROM1:7A08 EA 83 D0 ld (D083),a ;/ ROM1:7A0B C0 ret nz ; If [earthquake timer] != 0: return ROM1:7A0C AF xor a ;\ ROM1:7A0D EA DF CE ld (CEDF),a ;} Isolated sound effect playing = 0 ROM1:7A10 FA 8B D0 ld a,(D08B) ;\ ROM1:7A13 FE 10 cp 10 ;} If in Metroid Queen's room: go to BRANCH_QUEEN ROM1:7A15 30 17 jr nc,7A2E ;/ ROM1:7A17 FA A5 D0 ld a,(D0A5) ;\ ROM1:7A1A A7 and a ;} If [song to play after earthquake] != 0: ROM1:7A1B 28 0B jr z,7A28 ;/ ROM1:7A1D EA DC CE ld (CEDC),a ;\ ROM1:7A20 EA 92 D0 ld (D092),a ;} Song for room = song to play = [song to play after earthquake] ROM1:7A23 AF xor a ;\ ROM1:7A24 EA A5 D0 ld (D0A5),a ;} Song to play after earthquake = 0 ROM1:7A27 C9 ret ROM1:7A28 3E 03 ld a,03 ;\ ROM1:7A2A EA DE CE ld (CEDE),a ;} Isolated sound effect to play = 3 (restores some audio state) ROM1:7A2D C9 ret ; BRANCH_QUEEN ROM1:7A2E 3E 01 ld a,01 ;\ ROM1:7A30 EA DC CE ld (CEDC),a ;} Play baby metroid song ROM1:7A33 C9 ret } ;;; $7A34: Modify sprite Y position due to earthquake ;;; { ; Externally called by $4DDF ROM1:7A34 FA 83 D0 ld a,(D083) ;\ ROM1:7A37 A7 and a ;} If [earthquake timer] = 0: return ROM1:7A38 C8 ret z ;/ ROM1:7A39 E6 04 and 04 ;\ ROM1:7A3B CB 3F srl a ;| ROM1:7A3D 3D dec a ;| ROM1:7A3E 47 ld b,a ;} Sprite Y position += ([earthquake timer] >> 1 & 2) - 1 ROM1:7A3F F0 C4 ld a,(FF00+C4) ;| ROM1:7A41 80 add a,b ;| ROM1:7A42 E0 C4 ld (FF00+C4),a ;/ ROM1:7A44 C9 ret } ;;; $7A45: Handle fade in ;;; { ROM1:7A45 21 69 7A ld hl,7A69 ;\ ROM1:7A48 FA 9B D0 ld a,(D09B) ;| ROM1:7A4B E6 F0 and F0 ;| ROM1:7A4D CB 37 swap a ;| ROM1:7A4F 5F ld e,a ;| ROM1:7A50 16 00 ld d,00 ;} BG palette = object 0 palette = [$7A69 + [fade in timer] / 10h] ROM1:7A52 19 add hl,de ;| ROM1:7A53 7E ld a,(hl) ;| ROM1:7A54 EA 7E D0 ld (D07E),a ;| ROM1:7A57 EA 7F D0 ld (D07F),a ;/ ROM1:7A5A FA 9B D0 ld a,(D09B) ;\ ROM1:7A5D 3D dec a ;} Decrement fade in timer ROM1:7A5E EA 9B D0 ld (D09B),a ;/ ROM1:7A61 FE 0E cp 0E ;\ ROM1:7A63 D0 ret nc ;} If [fade in timer] < Eh: ROM1:7A64 AF xor a ;\ ROM1:7A65 EA 9B D0 ld (D09B),a ;} Fade in timer = 0 ROM1:7A68 C9 ret ROM1:7A69 db 93, E7, FB } ;;; $7A6C: ;;; { ; Copies 40h bytes to $C900 + f([$C459]) from $C540, only 02 and FEh are written, with 04 translated to FEh ; Then writes out all of $C900..CABF to SRAM ROM1:7A6C 16 00 ld d,00 ROM1:7A6E FA 59 C4 ld a,(C459) ;\ ROM1:7A71 D6 09 sub 09 ;| ROM1:7A73 CB 37 swap a ;| ROM1:7A75 87 add a,a ;| ROM1:7A76 87 add a,a ;} hl = $C900 + ([$C459] - 9) * 40h ROM1:7A77 5F ld e,a ;| ROM1:7A78 CB 12 rl d ;| ROM1:7A7A 21 00 C9 ld hl,C900 ;| ROM1:7A7D 19 add hl,de ;/ ROM1:7A7E 11 40 C5 ld de,C540 ; de = $C540 ROM1:7A81 06 40 ld b,40 ; b = 40h ; LOOP_ALPHA ROM1:7A83 1A ld a,(de) ;\ ROM1:7A84 FE 02 cp 02 ;} If [[de]] = 2: [hl] = 2 ROM1:7A86 28 0A jr z,7A92 ;/ ROM1:7A88 FE FE cp FE ;\ ROM1:7A8A 28 06 jr z,7A92 ;} If [[de]] = FEh: [hl] = FEh ROM1:7A8C FE 04 cp 04 ;\ ROM1:7A8E 20 03 jr nz,7A93 ;} If [[de]] = 4: [hl] = FEh ROM1:7A90 3E FE ld a,FE ROM1:7A92 77 ld (hl),a ROM1:7A93 2C inc l ; Increment hl ROM1:7A94 1C inc e ; Increment de ROM1:7A95 05 dec b ; Decrement b ROM1:7A96 20 EB jr nz,7A83 ;} If [b] != 0: go to LOOP_ALPHA ROM1:7A98 3E 0A ld a,0A ;\ ROM1:7A9A EA 00 00 ld (0000),a ;} Enable SRAM ROM1:7A9D 11 00 B0 ld de,B000 ;\ ROM1:7AA0 FA A3 D0 ld a,(D0A3) ;| ROM1:7AA3 87 add a,a ;} de = $B000 + [save slot] * 200h ROM1:7AA4 82 add a,d ;| ROM1:7AA5 57 ld d,a ;/ ROM1:7AA6 21 00 C9 ld hl,C900 ;\ ROM1:7AA9 01 C0 01 ld bc,01C0 ;| ;| ROM1:7AAC 2A ldi a,(hl) ;| ROM1:7AAD 12 ld (de),a ;| ROM1:7AAE 13 inc de ;} [de]..[de]+1BFh = [$C900..CABF] ROM1:7AAF 0B dec bc ;| ROM1:7AB0 78 ld a,b ;| ROM1:7AB1 B1 or c ;| ROM1:7AB2 20 F8 jr nz,7AAC ;/ ROM1:7AB4 AF xor a ;\ ROM1:7AB5 EA 00 00 ld (0000),a ;} Disable SRAM ROM1:7AB8 C9 ret } ;;; $7AB9: ;;; { ; Externally called by: ; $1:4E33: Load from save ROM1:7AB9 3E 0A ld a,0A ;\ ROM1:7ABB EA 00 00 ld (0000),a ;} Enable SRAM ROM1:7ABE 11 00 C9 ld de,C900 ;\ ROM1:7AC1 01 C0 01 ld bc,01C0 ;| ROM1:7AC4 21 00 B0 ld hl,B000 ;| ROM1:7AC7 FA A3 D0 ld a,(D0A3) ;} hl = $B000 + [save slot] * 200h ROM1:7ACA 87 add a,a ;| ROM1:7ACB 84 add a,h ;| ROM1:7ACC 67 ld h,a ;/ ;} $C900..CABF = [[hl]..[hl]+1BFh] ROM1:7ACD 2A ldi a,(hl) ;| ROM1:7ACE 12 ld (de),a ;| ROM1:7ACF 13 inc de ;| ROM1:7AD0 0B dec bc ;| ROM1:7AD1 78 ld a,b ;| ROM1:7AD2 B1 or c ;| ROM1:7AD3 20 F8 jr nz,7ACD ;/ ROM1:7AD5 3E 00 ld a,00 ;\ ROM1:7AD7 EA 00 00 ld (0000),a ;} Disable SRAM ROM1:7ADA AF xor a ;\ ROM1:7ADB EA 36 C4 ld (C436),a ;} $C436 = 0 ROM1:7ADE C9 ret } ;;; $7ADF: Save to SRAM ;;; { ROM1:7ADF 3E 0A ld a,0A ;\ ROM1:7AE1 EA 00 00 ld (0000),a ;} Enable SRAM ROM1:7AE4 21 83 20 ld hl,2083 ROM1:7AE7 FA A3 D0 ld a,(D0A3) ;\ ROM1:7AEA CB 27 sla a ;| ROM1:7AEC CB 27 sla a ;| ROM1:7AEE CB 37 swap a ;} de = $A000 | [save slot] << 6 ROM1:7AF0 5F ld e,a ;| ROM1:7AF1 16 A0 ld d,A0 ;| ROM1:7AF3 06 08 ld b,08 ;/ ROM1:7AF5 2A ldi a,(hl) ;\ ROM1:7AF6 12 ld (de),a ;| ROM1:7AF7 13 inc de ;} [de]..[de]+7 = [$2083..8A] ROM1:7AF8 05 dec b ;| ROM1:7AF9 20 FA jr nz,7AF5 ;/ ROM1:7AFB FA A3 D0 ld a,(D0A3) ;\ ROM1:7AFE CB 27 sla a ;| ROM1:7B00 CB 27 sla a ;| ROM1:7B02 CB 37 swap a ;} hl = [de] ROM1:7B04 C6 08 add a,08 ;| ROM1:7B06 6F ld l,a ;| ROM1:7B07 26 A0 ld h,A0 ;/ ROM1:7B09 F0 C0 ld a,(FF00+C0) ;\ ROM1:7B0B 22 ldi (hl),a ;| ROM1:7B0C F0 C1 ld a,(FF00+C1) ;} [hl] + 8 = [Samus' Y position] ROM1:7B0E 22 ldi (hl),a ;/ ROM1:7B0F F0 C2 ld a,(FF00+C2) ;\ ROM1:7B11 22 ldi (hl),a ;| ROM1:7B12 F0 C3 ld a,(FF00+C3) ;} [hl] + Ah = [Samus' X position] ROM1:7B14 22 ldi (hl),a ;/ ROM1:7B15 F0 C8 ld a,(FF00+C8) ;\ ROM1:7B17 22 ldi (hl),a ;| ROM1:7B18 F0 C9 ld a,(FF00+C9) ;} [hl] + Ch = [screen Y position] ROM1:7B1A 22 ldi (hl),a ;/ ROM1:7B1B F0 CA ld a,(FF00+CA) ;\ ROM1:7B1D 22 ldi (hl),a ;| ROM1:7B1E F0 CB ld a,(FF00+CB) ;} [hl] + Eh = [screen X position] ROM1:7B20 22 ldi (hl),a ;/ ROM1:7B21 11 08 D8 ld de,D808 ;\ ROM1:7B24 06 0D ld b,0D ;| ;| ROM1:7B26 1A ld a,(de) ;| ROM1:7B27 13 inc de ;} [hl]+10h..[hl]+1Ch = [$D808..14] ROM1:7B28 22 ldi (hl),a ;| ROM1:7B29 05 dec b ;| ROM1:7B2A 20 FA jr nz,7B26 ;/ ROM1:7B2C FA 45 D0 ld a,(D045) ;\ ROM1:7B2F 22 ldi (hl),a ;} [hl] + 1Dh = [Samus' equipment] ROM1:7B30 FA 55 D0 ld a,(D055) ;\ ROM1:7B33 22 ldi (hl),a ;} [hl] + 1Eh = [Samus' beam] ROM1:7B34 FA 50 D0 ld a,(D050) ;\ ROM1:7B37 22 ldi (hl),a ;} [hl] + 1Fh = [Samus' energy tanks] ROM1:7B38 FA 51 D0 ld a,(D051) ;\ ROM1:7B3B 22 ldi (hl),a ;| ROM1:7B3C FA 52 D0 ld a,(D052) ;} [hl] + 20h = [Samus' health] ROM1:7B3F 22 ldi (hl),a ;/ ROM1:7B40 FA 81 D0 ld a,(D081) ;\ ROM1:7B43 22 ldi (hl),a ;| ROM1:7B44 FA 82 D0 ld a,(D082) ;} [hl] + 22h = [Samus' max missiles] ROM1:7B47 22 ldi (hl),a ;/ ROM1:7B48 FA 53 D0 ld a,(D053) ;\ ROM1:7B4B 22 ldi (hl),a ;| ROM1:7B4C FA 54 D0 ld a,(D054) ;} [hl] + 24h = [Samus' missiles] ROM1:7B4F 22 ldi (hl),a ;/ ROM1:7B50 FA 2B D0 ld a,(D02B) ;\ ROM1:7B53 22 ldi (hl),a ;} [hl] + 26h = [direction Samus is facing] ROM1:7B54 FA 77 D0 ld a,(D077) ;\ ROM1:7B57 22 ldi (hl),a ;} [hl] + 27h = [acid damage] ROM1:7B58 FA 78 D0 ld a,(D078) ;\ ROM1:7B5B 22 ldi (hl),a ;} [hl] + 28h = [spike damage] ROM1:7B5C FA 89 D0 ld a,(D089) ;\ ROM1:7B5F 22 ldi (hl),a ;} [hl] + 29h = [real number of Metroids remaining] ROM1:7B60 FA 92 D0 ld a,(D092) ;\ ROM1:7B63 22 ldi (hl),a ;} [hl] + 2Ah = [song for room] ROM1:7B64 FA 98 D0 ld a,(D098) ;\ ROM1:7B67 22 ldi (hl),a ;} [hl] + 2Bh = [in-game timer, minutes] ROM1:7B68 FA 99 D0 ld a,(D099) ;\ ROM1:7B6B 22 ldi (hl),a ;} [hl] + 2Ch = [in-game timer, hours] ROM1:7B6C FA 9A D0 ld a,(D09A) ;\ ROM1:7B6F 77 ld (hl),a ;} [hl] + 2Dh = [number of Metroids remaining] ROM1:7B70 3E 00 ld a,00 ;\ ROM1:7B72 EA 00 00 ld (0000),a ;} Disable SRAM ROM1:7B75 CD 6C 7A call 7A6C ; Execute subroutine $7A6C ROM1:7B78 3E 1C ld a,1C ;\ ROM1:7B7A EA C0 CE ld (CEC0),a ;} Play saved sound effect ROM1:7B7D 3E 1C ld a,1C ROM1:7B7F EA C0 CE ld (CEC0),a ROM1:7B82 3E 04 ld a,04 ;\ ROM1:7B84 E0 9B ld (FF00+9B),a ;} Game mode = in-game ROM1:7B86 C9 ret } ;;; $7B87: Free space ;;; { ROM1:7B87 fillto $2:4000, $00 }