Waver Boss A0:F7D3 0006 8786 E204 2800 0800 0800 A3 00 4700 0000 XXXX 01000000 ZZZZ 0A80 4C80 4180 0000 0000 00000000 WWWW 000000000000 VVVV YYYY 000000 86AE 05 00F2 1CEC 87E1 tile pal hp dmg wide high Bank # of hurt Boss AI Norm Grap Hurt Froz XRay die PB Tch. Beam tile | | | | get ptr Ptr "hurt" snd. num Init Move AI AI AI or anim Pntr Pntr Pntr set | | | name pointer lgth frames Run AI? Rsrv | | pointer to enemy resistances ??? Once AI | pointer to enemy drop chances, CHANGE 00068786E204280008000800A300470000008FF301000000B2F30A804C80418000000000000000001EF400000000000030F40CF400000086AE0500F21CEC87E1 Plenty of room in bank A3: F320 - FFFF. Some upgrades since the original stuff is horrid Waver Queen AI Initialization A3:XXXX (F38F) LDA $7ED828 BIT #$0001 ;This will be its boss bit. BNE NormalWaver LDA $1776 BEQ QueenWaver NormalWaver: INC $1776 LDX $0E54 LDA #$D63F STA $0F78,X LDA #$001E STA $0F8C,X QueenWaver: JMP $F320 AF28D87E890100D005AD7617F012EE7617AE540EA93FD69D780FA91E009D8C0F4C20F3 Not entirely sure that will delete the waver as wanted. Waver AI Initialization A3:F320 LDX $0E54 ;Enemy Index STZ $0FA8,X STZ $0FAA,X LDA $0FB4,X AND #$0F00 BEQ Normal CMP #$0400 BNE Multiply JSL $808111 AND #$0F00 Multiply: SEP #$20 XBA STA $4202 LDA #$60 STA $4203 REP #$20 NOP NOP LDA $4216 PHA BRA Direction Normal: LDA #$0180 PHA Direction: LDA $0FB4,X AND #$0001 STA $0FB2,X BEQ Backwards PLA STA $0FA9,X BRA Next Backwards: SEP #$20 LDA #$FF STA $0FAB,X PLA EOR #$FF INC STA $0FA9,X PLA EOR #$FF ADC #$00 STA $0FAA,X REP #$20 Next: STZ $0FAC, X ;Custom use, previous orientation STZ $0FB0, X ;Custom use, orientation clear trigger LDA #$86A7 STA $0F92, X ;Pointer to current Enemy Instruction JSR $87FE ; $1187FE IN ROM RTL AE540E9EA80F9EAA0FBDB40F29000FF021C90004D0072211818029000FE220EB8D0242A9608D0342C220EAEAAD1642488004A9800148BDB40F2901009DB20FF006689DA90F8018E220A9FF9DAB0F6849FF1A9DA90F6849FF69009DAA0FC2209EAC0F9EB00FA9A7869D920F20FE876B Let's make it 8 wavers, including the queen. Let's see. Normal Movement AI will have the new code for the randomly timed swap. In psuedo-code: Run normal movement with JSR. Calculate randomly timed swap, let's say 1/100 (in hex), but must not currently be hurt. If it fails, RTS. Load own index, (loop start) subtract 40. If it's negative, add 200. Check type, if self, RTS. Check health, if alive, check hurt. If both are good, swap type, hp, store 7 to 0F9C?. If dead or being hurt, branch back to loop start. Looks simple and good. A3:ZZZZ (F3B2) JSL $A3874C LDA $0F9C,X BNE End LDA $05E5 AND #$00FF BNE End LoopStart: TXA SEC SBC #$0040 BPL Positive ADC #$0200 Positive: TAX LDA $0F78,X CMP #$F7D3 BEQ End LDA $0F9E,X BNE LoopStart LDA $0F9C,X BNE LoopStart LDA $0F8C,X BEQ LoopStart PHX PHA LDA #$F7D3 STA $0F78,X LDA #$0007 STA $0F9C,X LDX $0E54 STA $0F9C,X LDY $0F8C,X PLA STA $0F8C,X LDA #$D63F STA $0F78,X PLX TYA STA $0F8C,X End: RTL 224C87A3BD9C0FD050ADE50529FF00D0488A38E940001003690002AABD780FC9D3F7F035BD9E0FD0E8BD9C0FD0E3BD8C0FF0DEDA48A9D3F79D780FA907009D9C0FAE540E9D9C0FBC8C0F689D8C0FA93FD69D780FFA989D8C0F6B Gotta have a unique damage pointers so it sets its bits correctly when killed. ::grumble:: ;A3:YYYY (F40C) LDX $0E54 LDA $0F86,X AND #$BFFF STA $0F86,X JSL $A0A63D BRA Clear ;A3:WWWW (F41E) LDX $0E54 LDA $0F86,X AND #$BFFF STA $0F86,X JSL $A0A597 BRA Clear ;A3:VVVV (F430) LDX $0E54 LDA $0F86,X AND #$BFFF STA $0F86,X JSL $A0A477 Clear: LDX $0E54 LDA $0F86,X ORA #$4000 STA $0F86,X LDA $0F8C,X BNE NotDead LDA $7ED828 ORA #$0001 STA $7ED828 NotDead: RTL AE540EBD860F29FFBF9D860F223DA6A08022 AE540EBD860F29FFBF9D860F2297A5A08010 AE540EBD860F29FFBF9D860F2277A4A0AE540EBD860F0900409D860FBD8C0FD00BAF28D87E0901008F28D87E6B AE540EBD860F29FFBF9D860F223DA6A08022AE540EBD860F29FFBF9D860F2297A5A08010AE540EBD860F29FFBF9D860F2277A4A0AE540EBD860F0900409D860FBD8C0FD00BAF28D87E0901008F28D87E6B A3:F38F AF28D87E890100D005AD7617F012EE7617AE540EA93FD69D780FA91E009D8C0F4C20F3224C87A3BD9C0FD050ADE50529FF00D0488A38E940001003690002AABD780FC9D3F7F035BD9E0FD0E8BD9C0FD0E3BD8C0FF0DEDA48A9D3F79D780FA907009D9C0FAE540E9D9C0FBC8C0F689D8C0FA93FD69D780FFA989D8C0F6BAE540EBD860F29FFBF9D860F223DA6A08022AE540EBD860F29FFBF9D860F2297A5A08010AE540EBD860F29FFBF9D860F2277A4A0AE540EBD860F0900409D860FBD8C0FD00BAF28D87E0901008F28D87E6B