;;; $AAFE..AC1B: Kago ;;; { ;;; $AAFE: Palette - enemy $E7FF (kago) ;;; { $A8:AAFE dw 3800, 57FF, 42F7, 0929, 00A5, 4F5A, 36B5, 2610, 1DCE, 01DF, 001F, 0018, 000A, 06B9, 00EA, 0045 } ;;; $AB1E: Instruction list - Initial, slow animation ;;; { ; initial $A8:AB1E dx 000A,ABDA, 000A,ABF0, 000A,AC06, 000A,ABF0, 80ED,AB1E ; Go to $AB1E } ;;; $AB32: Instruction list - Taken hit, fast animation ;;; { ; release bug $A8:AB32 dx 0003,ABDA, 0003,ABF0, 0003,AC06, 0003,ABF0, 80ED,AB32 ; Go to $AB32 } ;;; $AB46: Initialisation AI - enemy $E7FF (kago) ;;; { $A8:AB46 AE 54 0E LDX $0E54 [$7E:0E54] $A8:AB49 BD 86 0F LDA $0F86,x[$7E:0F86] $A8:AB4C 09 00 20 ORA #$2000 $A8:AB4F 9D 86 0F STA $0F86,x[$7E:0F86] ; set to process instructions $A8:AB52 A9 01 00 LDA #$0001 $A8:AB55 9D 94 0F STA $0F94,x[$7E:0F94] ; instruction timer = 1 $A8:AB58 9E 90 0F STZ $0F90,x[$7E:0F90] ; never read $A8:AB5B 9E B0 0F STZ $0FB0,x[$7E:0FB0] ; never read $A8:AB5E A9 1E AB LDA #$AB1E ; Initial, slow animation $A8:AB61 9D 92 0F STA $0F92,x[$7E:0F92] ; next instruction list $A8:AB64 A9 7B AB LDA #$AB7B ; Set function to RTL $A8:AB67 9D A8 0F STA $0FA8,x[$7E:0FA8] ; next function pointer $A8:AB6A 9E B2 0F STZ $0FB2,x[$7E:0FB2] ; never read $A8:AB6D BD B4 0F LDA $0FB4,x[$7E:0FB4] $A8:AB70 9F 08 78 7E STA $7E7808,x[$7E:7808]; hit points = param 1 $A8:AB74 6B RTL } ;;; $AB75: Main AI - enemy $E7FF (kago) ;;; { ; Kago don't do nothin' $A8:AB75 AE 54 0E LDX $0E54 [$7E:0E54] $A8:AB78 7C A8 0F JMP ($0FA8,x)[$A8:AB7B] } ;;; $AB7B: Function - Set function to RTL ;;; { $A8:AB7B A9 81 AB LDA #$AB81 ; RTL $A8:AB7E 9D A8 0F STA $0FA8,x[$7E:0FE8] ; next function pointer } ;;; $AB81: RTL ;;; { $A8:AB81 6B RTL } ;;; $AB82: RTL ;;; { ; unused $A8:AB82 6B RTL } ;;; $AB83: Enemy shot - enemy $E7FF (kago) ;;; { $A8:AB83 DA PHX $A8:AB84 5A PHY $A8:AB85 22 3D A6 A0 JSL $A0A63D[$A0:A63D] ; Normal enemy shot AI $A8:AB89 A9 02 00 LDA #$0002 ;\ $A8:AB8C 8D 3E 18 STA $183E [$7E:183E] ;} Earthquake type = BG1 only, 1 pixel displacement, diagonal $A8:AB8F A9 10 00 LDA #$0010 ;\ $A8:AB92 8D 40 18 STA $1840 [$7E:1840] ;} Earthquake timer = 10h $A8:AB95 AE 54 0E LDX $0E54 [$7E:0E54] $A8:AB98 BD AA 0F LDA $0FAA,x[$7E:0FEA] $A8:AB9B D0 12 BNE $12 [$ABAF] ; if not taken a hit: $A8:AB9D A9 01 00 LDA #$0001 $A8:ABA0 9D AA 0F STA $0FAA,x[$7E:0FEA] ; set taken hit flag $A8:ABA3 A9 32 AB LDA #$AB32 ; Initial, slow animation $A8:ABA6 9D 92 0F STA $0F92,x[$7E:0FD2] ; next instruction list $A8:ABA9 A9 01 00 LDA #$0001 $A8:ABAC 9D 94 0F STA $0F94,x[$7E:0FD4] ; instruction timer = 1 $A8:ABAF BF 08 78 7E LDA $7E7808,x[$7E:7848] $A8:ABB3 38 SEC $A8:ABB4 E9 01 00 SBC #$0001 $A8:ABB7 9F 08 78 7E STA $7E7808,x[$7E:7848]; hit points -= 1 $A8:ABBB 10 10 BPL $10 [$ABCD] ; if hit points < 0: $A8:ABBD A9 04 00 LDA #$0004 ; A = 4 (big explosion) $A8:ABC0 22 AF A3 A0 JSL $A0A3AF[$A0:A3AF] ; Enemy death $A8:ABC4 AE 54 0E LDX $0E54 [$7E:0E54] $A8:ABC7 A9 01 00 LDA #$0001 $A8:ABCA 9D B2 0F STA $0FB2,x[$7E:0FB2] ; never read $A8:ABCD A0 2E D0 LDY #$D02E ;\ $A8:ABD0 BD 7E 0F LDA $0F7E,x[$7E:0FBE] ;} Spawn kago bug enemy projectile $A8:ABD3 22 27 80 86 JSL $868027[$86:8027] ;/ $A8:ABD7 7A PLY $A8:ABD8 FA PLX $A8:ABD9 6B RTL } ;;; $ABDA: Kago spritemaps ;;; { $A8:ABDA dx 0004, 8000,00,210E, 81F0,00,210C, 8000,F0,2102, 81F0,F0,2100 $A8:ABF0 dx 0004, 8000,00,2122, 81F0,00,2120, 8000,F0,2106, 81F0,F0,2104 $A8:AC06 dx 0004, 8000,00,2126, 81F0,00,2124, 8000,F0,210A, 81F0,F0,2108 } }