;;; $9379..99AB: Funes ;;; { ;;; $9379: Palette - enemy $E6FF (Fune) ;;; { $A8:9379 dw 3800, 4B9C, 3694, 0929, 0042, 3B18, 2A52, 19AD, 116B, 7F5A, 7EC0, 6DE0, 54E0, 001D, 0014, 000A } ;;; $9399: Instruction list - Fune - Idling, facing left ;;; { ; Fune, facing left $A8:9399 dx 0001,93F9, 812F ; Sleep } ;;; $939F: Instruction list - Fune - Attacking, facing left ;;; { ; Fune, facing left $A8:939F dx 0010,93F9, 0008,9423, 0008,944D, 0008,9477, 9663, ; Spawn Fune Fireball facing left 9625, ; Queue Fune spits SFX 0010,94A1, 0008,9477, 0008,944D, 0008,9423, 9695, ; Set instruction list back to idle 80ED,9399 ; Go to $9399 } ;;; $93C9: Instruction list - Fune - Idling, facing right ;;; { ; Fune, facing right $A8:93C9 dx 0001,94CB, 812F ; Sleep } ;;; $93CF: Instruction list - Fune - Attacking, facing right ;;; { ; Fune, facing right $A8:93CF dx 0010,94CB, 0008,94F5, 0008,951F, 0008,9549, 967C, ; Spawn Fune Fireball facing right 9625, ; Queue Fune spits SFX 0010,9573, 0008,9549, 0008,951F, 0008,94F5, 96B4, ; Set instruction list back to idle 80ED,93C9 ; Go to $93C9 } ;;; $93F9: Fune Spritemaps ;;; { $A8:93F9 dx 0008, 0008,0C,2127, 0000,0C,2126, 8000,FC,2122, 8000,EC,2120, 81F0,FC,2102, 01F8,FC,2125, 01F0,FC,2124, 81F0,EC,2100 $A8:9423 dx 0008, 0006,0C,2127, 01FE,0C,2126, 81FE,FC,2122, 81FE,EC,2120, 81EE,FE,2102, 01F6,FC,2125, 01EE,FC,2124, 81EE,EC,2100 $A8:944D dx 0008, 0004,0C,2127, 01FC,0C,2126, 81FC,FC,2122, 81FC,EC,2120, 81EC,00,2102, 01F4,FC,2125, 01EC,FC,2124, 81EC,EC,2100 $A8:9477 dx 0008, 0002,0C,2127, 01FA,0C,2126, 81FA,FC,2122, 81FA,EC,2120, 81EA,01,2102, 01F2,FC,2125, 01EA,FC,2124, 81EA,EC,2100 $A8:94A1 dx 0008, 0000,0C,2127, 01F8,0C,2126, 81F8,FC,2122, 81F8,EC,2120, 81E8,03,2102, 01F0,FC,2125, 01E8,FC,2124, 81E8,EC,2100 $A8:94CB dx 0008, 01F0,0C,6127, 01F8,0C,6126, 81F0,FC,6122, 81F0,EC,6120, 8000,FC,6102, 0000,FC,6125, 0008,FC,6124, 8000,EC,6100 $A8:94F5 dx 0008, 01F2,0C,6127, 01FA,0C,6126, 81F2,FC,6122, 81F2,EC,6120, 8002,FE,6102, 0002,FC,6125, 000A,FC,6124, 8002,EC,6100 $A8:951F dx 0008, 01F4,0C,6127, 01FC,0C,6126, 81F4,FC,6122, 81F4,EC,6120, 8004,00,6102, 0004,FC,6125, 000C,FC,6124, 8004,EC,6100 $A8:9549 dx 0008, 01F6,0C,6127, 01FE,0C,6126, 81F6,FC,6122, 81F6,EC,6120, 8006,01,6102, 0006,FC,6125, 000E,FC,6124, 8006,EC,6100 $A8:9573 dx 0008, 01F8,0C,6127, 0000,0C,6126, 81F8,FC,6122, 81F8,EC,6120, 8007,02,6102, 0008,FC,6125, 0010,FC,6124, 8008,EC,6100 } ;;; $959D: Palette - enemy $E73F (Namihe) ;;; { $A8:959D dw 3800, 4B9C, 3694, 0929, 0042, 3B18, 2A52, 19AD, 116B, 7F5A, 7EC0, 6DE0, 54E0, 001D, 0014, 000A } ;;; $95BD: Instruction list - Namihe - Idling, facing left ;;; { ; Namihe, facing left $A8:95BD dx 0001,97B4, 812F ; Sleep } ;;; $95C3: Instruction list - Namihe - Attacking, facing left ;;; { ; Namihe, facing left $A8:95C3 dx 0008,97B4, 0008,97DE, 0008,9808, 0008,9832, 0008,985C, 9631, ; Spawn Namihe Fireball facing left 9625, ; Queue Fune spits SFX 0008,9886, 0008,985C, 0008,9832, 0008,9808, 9695, ; Set instruction list back to idle 80ED,95BD ; Go to $95BD } ;;; $95F1: Instruction list - Namihe - Idling, facing right ;;; { ; Namihe, facing right $A8:95F1 dx 0001,98B0, 812F ; Sleep } ;;; $95F7: Instruction list - Namihe - Attacking, facing right ;;; { ; Namihe, facing right $A8:95F7 dx 0008,98B0, 0008,98DA, 0008,9904, 0008,992E, 0008,9958, 964A, ; Spawn Namihe Fireball facing right 9625, ; Queue Fune spits SFX 0008,9982, 0008,9958, 0008,992E, 0008,9904, 96B4, ; Set instruction list back to idle 80ED,95F1 ; Go to $95F1 } ;;; $9625: Instruction - Queue Fune spits SFX ;;; { $A8:9625 5A PHY $A8:9626 DA PHX $A8:9627 A9 1F 00 LDA #$001F ;\ $A8:962A 22 AD 90 80 JSL $8090AD[$80:90AD] ;} Queue sound 1Fh, sound library 2, max queued sounds allowed = 9 (fune spits) $A8:962E FA PLX $A8:962F 7A PLY $A8:9630 6B RTL } ;;; $9631: Instruction - Spawn Namihe Fireball facing left ;;; { $A8:9631 5A PHY $A8:9632 AE 54 0E LDX $0E54 [$7E:0E54] $A8:9635 BD B6 0F LDA $0FB6,x[$7E:10B6] $A8:9638 29 FF 00 AND #$00FF $A8:963B 8D 95 19 STA $1995 [$7E:1995] ; shot velocity $A8:963E A9 00 00 LDA #$0000 ;\ facing left $A8:9641 A0 BC DF LDY #$DFBC ;} Spawn namihe fireball enemy projectile $A8:9644 22 27 80 86 JSL $868027[$86:8027] ;/ $A8:9648 7A PLY $A8:9649 6B RTL } ;;; $964A: Instruction - Spawn Namihe Fireball facing right ;;; { $A8:964A 5A PHY $A8:964B AE 54 0E LDX $0E54 [$7E:0E54] $A8:964E BD B6 0F LDA $0FB6,x[$7E:0FF6] $A8:9651 29 FF 00 AND #$00FF $A8:9654 8D 95 19 STA $1995 [$7E:1995] ; shot velocity $A8:9657 A9 01 00 LDA #$0001 ;\ facing right $A8:965A A0 BC DF LDY #$DFBC ;} Spawn namihe fireball enemy projectile $A8:965D 22 27 80 86 JSL $868027[$86:8027] ;/ $A8:9661 7A PLY $A8:9662 6B RTL } ;;; $9663: Instruction - Spawn Fune Fireball facing left ;;; { $A8:9663 5A PHY $A8:9664 AE 54 0E LDX $0E54 [$7E:0E54] $A8:9667 BD B6 0F LDA $0FB6,x[$7E:1076] $A8:966A 29 FF 00 AND #$00FF $A8:966D 8D 95 19 STA $1995 [$7E:1995] ; shot velocity $A8:9670 A9 00 00 LDA #$0000 ;\ facing left $A8:9673 A0 CA DF LDY #$DFCA ;} Spawn fune fireball enemy projectile $A8:9676 22 27 80 86 JSL $868027[$86:8027] ;/ $A8:967A 7A PLY $A8:967B 6B RTL } ;;; $967C: Instruction - Spawn Fune Fireball facing right ;;; { $A8:967C 5A PHY $A8:967D AE 54 0E LDX $0E54 [$7E:0E54] $A8:9680 BD B6 0F LDA $0FB6,x[$7E:1136] $A8:9683 29 FF 00 AND #$00FF $A8:9686 8D 95 19 STA $1995 [$7E:1995] ; shot velocity $A8:9689 A9 01 00 LDA #$0001 ;\ facing right $A8:968C A0 CA DF LDY #$DFCA ;} Spawn fune fireball enemy projectile $A8:968F 22 27 80 86 JSL $868027[$86:8027] ;/ $A8:9693 7A PLY $A8:9694 6B RTL } ;;; $9695: Instruction - Set instruction list back to idle ;;; { ; Fune / Namihe $A8:9695 AE 54 0E LDX $0E54 [$7E:0E54] $A8:9698 BD A8 0F LDA $0FA8,x[$7E:1068] $A8:969B 1A INC A $A8:969C 1A INC A $A8:969D 1A INC A $A8:969E 1A INC A $A8:969F 9D A8 0F STA $0FA8,x[$7E:1068] ; instruction list pointers pointer += 4 $A8:96A2 A9 37 97 LDA #$9737 ; Fune - Set instruction list to attack after cooldown $A8:96A5 9D AA 0F STA $0FAA,x[$7E:106A] ; next function pointer $A8:96A8 BD AE 0F LDA $0FAE,x[$7E:106E] $A8:96AB F0 06 BEQ $06 [$96B3] ; if Namihe: $A8:96AD A9 5C 97 LDA #$975C ; Namihe - Set instruction list to attack when Samus is near $A8:96B0 9D AA 0F STA $0FAA,x[$7E:10AA] ; next function pointer $A8:96B3 6B RTL } ;;; $96B4: Instruction - Set instruction list back to idle ;;; { ; Fune / Namihe ; clone of $9695 $A8:96B4 AE 54 0E LDX $0E54 [$7E:0E54] $A8:96B7 BD A8 0F LDA $0FA8,x[$7E:1128] $A8:96BA 1A INC A $A8:96BB 1A INC A $A8:96BC 1A INC A $A8:96BD 1A INC A $A8:96BE 9D A8 0F STA $0FA8,x[$7E:1128] ; instruction list pointers pointer += 4 $A8:96C1 A9 37 97 LDA #$9737 ; Fune - Set instruction list to attack after cooldown $A8:96C4 9D AA 0F STA $0FAA,x[$7E:112A] ; next function pointer $A8:96C7 BD AE 0F LDA $0FAE,x[$7E:112E] $A8:96CA F0 06 BEQ $06 [$96D2] ; if Namihe: $A8:96CC A9 5C 97 LDA #$975C ; Namihe - Set instruction list to attack when Samus is near $A8:96CF 9D AA 0F STA $0FAA,x[$7E:0FEA] ; next function pointer $A8:96D2 6B RTL } ;;; $96D3: Instruction list pointers ;;; { ; +4 is initial/idle for Fune, +$C is initial/idle for Namihe, +2 for facing right, -4 when attacking? ; probably +8 for Namihe ; seems mostly unused but the pointer is inc'd/dec'd to index the table ; $96D7 $96DF $A8:96D3 dw 939F, 93CF, 9399, 93C9, 95C3, 95F7, 95BD, 95F1 } ;;; $96E3: Initialisation AI - enemy $E6FF/$E73F (fune / namihe) ;;; { $A8:96E3 AE 54 0E LDX $0E54 [$7E:0E54] $A8:96E6 A9 D7 96 LDA #$96D7 $A8:96E9 9D A8 0F STA $0FA8,x[$7E:1068] ; pointer to instruction list pointers +4 $A8:96EC A9 37 97 LDA #$9737 ; Fune - Set instruction list to attack after cooldown $A8:96EF 9D AA 0F STA $0FAA,x[$7E:106A] ; next function pointer $A8:96F2 BD B4 0F LDA $0FB4,x[$7E:1074] $A8:96F5 29 0F 00 AND #$000F $A8:96F8 9D AE 0F STA $0FAE,x[$7E:106E] ; set species $A8:96FB F0 0C BEQ $0C [$9709] ; if Namihe: $A8:96FD A9 DF 96 LDA #$96DF $A8:9700 9D A8 0F STA $0FA8,x[$7E:0FA8] ; pointer to instruction list pointers +C $A8:9703 A9 5C 97 LDA #$975C ; Namihe - Set instruction list to attack when Samus is near $A8:9706 9D AA 0F STA $0FAA,x[$7E:0FAA] ; next function pointer ; species determined $A8:9709 BD B4 0F LDA $0FB4,x[$7E:1074] $A8:970C 29 F0 00 AND #$00F0 $A8:970F F0 06 BEQ $06 [$9717] ; if facing right: $A8:9711 FE A8 0F INC $0FA8,x[$7E:10A8] $A8:9714 FE A8 0F INC $0FA8,x[$7E:10A8] ; instruction list pointers pointer += 2 $A8:9717 20 9B 97 JSR $979B [$A8:979B] ; Set Fune/Namihe instruction list $A8:971A BD B7 0F LDA $0FB7,x[$7E:1077] $A8:971D 29 FF 00 AND #$00FF $A8:9720 9D AC 0F STA $0FAC,x[$7E:106C] ; set speed1 vertical proximity $A8:9723 BD B5 0F LDA $0FB5,x[$7E:1075] $A8:9726 29 FF 00 AND #$00FF $A8:9729 9D B2 0F STA $0FB2,x[$7E:1072] ; set attack cooldown $A8:972C 9E B0 0F STZ $0FB0,x[$7E:1070] $A8:972F 6B RTL } ;;; $9730: Main AI - enemy $E6FF/$E73F (fune / namihe) ;;; { $A8:9730 AE 54 0E LDX $0E54 [$7E:0E54] $A8:9733 FC AA 0F JSR ($0FAA,x)[$A8:9737] ; execute function pointer $A8:9736 6B RTL } ;;; $9737: Function - Set instruction list to attack after cooldown ;;; { ; Fune ; initial function for Fune $A8:9737 AE 54 0E LDX $0E54 [$7E:0E54] $A8:973A FE B0 0F INC $0FB0,x[$7E:1130] ; counter += 1 $A8:973D BD B0 0F LDA $0FB0,x[$7E:1130] $A8:9740 DD B2 0F CMP $0FB2,x[$7E:1132] $A8:9743 30 16 BMI $16 [$975B] ; if counter < attack cooldown: return $A8:9745 BD A8 0F LDA $0FA8,x[$7E:1128] $A8:9748 3A DEC A $A8:9749 3A DEC A $A8:974A 3A DEC A $A8:974B 3A DEC A $A8:974C 9D A8 0F STA $0FA8,x[$7E:1128] ; instruction list pointers pointer -= 4 $A8:974F 20 9B 97 JSR $979B [$A8:979B] ; Set Fune/Namihe instruction list $A8:9752 A9 8E 97 LDA #$978E ; RTS $A8:9755 9D AA 0F STA $0FAA,x[$7E:112A] ; next function pointer $A8:9758 9E B0 0F STZ $0FB0,x[$7E:1130] ; reset counter $A8:975B 60 RTS } ;;; $975C: Function - Namihe - Set instruction list to attack when Samus is near ;;; { ; Namihe ; initial function for Namihe $A8:975C AE 54 0E LDX $0E54 [$7E:0E54] $A8:975F BD A8 0F LDA $0FA8,x[$7E:10A8] $A8:9762 9F 00 78 7E STA $7E7800,x[$7E:7900]; set previous function pointers pointer $A8:9766 20 90 97 JSR $9790 [$A8:9790] ; Check if Samus is in proximity $A8:9769 F0 1B BEQ $1B [$9786] ; if in proximity: $A8:976B BF 00 78 7E LDA $7E7800,x[$7E:7900] $A8:976F 9D A8 0F STA $0FA8,x[$7E:10A8] ; >.< $A8:9772 3A DEC A $A8:9773 3A DEC A $A8:9774 3A DEC A $A8:9775 3A DEC A $A8:9776 9F 00 78 7E STA $7E7800,x[$7E:7900]; previous function pointers pointer -= 4 $A8:977A 9D A8 0F STA $0FA8,x[$7E:10A8] ; instruction list pointers pointer -= 4 $A8:977D 20 9B 97 JSR $979B [$A8:979B] ; Set Fune/Namihe instruction list $A8:9780 A9 8F 97 LDA #$978F ; RTS $A8:9783 9D AA 0F STA $0FAA,x[$7E:10AA] ; next function pointer $A8:9786 BF 00 78 7E LDA $7E7800,x[$7E:7900] $A8:978A 9D A8 0F STA $0FA8,x[$7E:10A8] ; >.< $A8:978D 60 RTS } ;;; $978E: Function - RTS ;;; { ; Fune $A8:978E 60 RTS } ;;; $978F: Function - RTS ;;; { ; Namihe $A8:978F 60 RTS } ;;; $9790: Check if Samus is in proximity ;;; { ; Namihe $A8:9790 AE 54 0E LDX $0E54 [$7E:0E54] $A8:9793 BD AC 0F LDA $0FAC,x[$7E:10AC] ;\ $A8:9796 22 ED AE A0 JSL $A0AEED[$A0:AEED] ;} Is Samus is within [enemy $0FAC] pixel rows of enemy $A8:979A 60 RTS } ;;; $979B: Set Fune/Namihe instruction list ;;; { ; Fune / Namihe $A8:979B AE 54 0E LDX $0E54 [$7E:0E54] $A8:979E A9 01 00 LDA #$0001 $A8:97A1 9D 94 0F STA $0F94,x[$7E:1054] ; instruction timer = 1 $A8:97A4 9E 90 0F STZ $0F90,x[$7E:1050] ; timer = 0 $A8:97A7 BD A8 0F LDA $0FA8,x[$7E:1068] $A8:97AA A8 TAY $A8:97AB B9 00 00 LDA $0000,y[$A8:96D7] ; $96D3 instruction list pointers $A8:97AE 9D 92 0F STA $0F92,x[$7E:1052] ; set instruction list $A8:97B1 60 RTS } ;;; $97B2: RTL ;;; { ; unused $A8:97B2 6B RTL } ;;; $97B3: RTL ;;; { ; unused $A8:97B3 6B RTL } ;;; $97B4: Namihe Spritemaps ;;; { $A8:97B4 dx 0008, 0008,0C,2127, 0000,0C,2126, 8000,FC,2122, 8000,EC,2120, 81F0,00,2106, 01F8,FC,2135, 01F0,FC,2134, 81F0,EC,2104 $A8:97DE dx 0008, 81F0,00,2106, 01F8,EC,2105, 01F0,EC,2104, 81F0,F4,2108, 0008,0C,2127, 0000,0C,2126, 8000,FC,2122, 8000,EC,2120 $A8:9808 dx 0008, 81EE,02,2106, 01F6,EC,2105, 01EE,EC,2104, 81EE,F4,2108, 0006,0C,2127, 01FE,0C,2126, 81FE,FC,2122, 81FE,EC,2120 $A8:9832 dx 0008, 81EC,03,2106, 01F4,EC,2105, 01EC,EC,2104, 81EC,F4,2108, 0004,0C,2127, 01FC,0C,2126, 81FC,FC,2122, 81FC,EC,2120 $A8:985C dx 0008, 81EA,04,2106, 01F2,EC,2105, 01EA,EC,2104, 81EA,F4,2108, 0002,0C,2127, 01FA,0C,2126, 81FA,FC,2122, 81FA,EC,2120 $A8:9886 dx 0008, 81E9,05,2106, 01F0,EC,2105, 01E8,EC,2104, 81E8,F4,2108, 0000,0C,2127, 01F8,0C,2126, 81F8,FC,2122, 81F8,EC,2120 $A8:98B0 dx 0008, 01F0,0C,6127, 01F8,0C,6126, 81F0,FC,6122, 81F0,EC,6120, 8000,00,6106, 0000,FC,6135, 0008,FC,6134, 8000,EC,6104 $A8:98DA dx 0008, 8000,00,6106, 0000,EC,6105, 0008,EC,6104, 8000,F4,6108, 01F0,0C,6127, 01F8,0C,6126, 81F0,FC,6122, 81F0,EC,6120 $A8:9904 dx 0008, 8002,02,6106, 0002,EC,6105, 000A,EC,6104, 8002,F4,6108, 01F2,0C,6127, 01FA,0C,6126, 81F2,FC,6122, 81F2,EC,6120 $A8:992E dx 0008, 8004,03,6106, 0004,EC,6105, 000C,EC,6104, 8004,F4,6108, 01F4,0C,6127, 01FC,0C,6126, 81F4,FC,6122, 81F4,EC,6120 $A8:9958 dx 0008, 8006,04,6106, 0006,EC,6105, 000E,EC,6104, 8006,F4,6108, 01F6,0C,6127, 01FE,0C,6126, 81F6,FC,6122, 81F6,EC,6120 $A8:9982 dx 0008, 8007,05,6106, 0008,EC,6105, 0010,EC,6104, 8008,F4,6108, 01F8,0C,6127, 0000,0C,6126, 81F8,FC,6122, 81F8,EC,6120 } }