From defda4e20fd26a87f9950cf2fa21ee671f3b53b5 Mon Sep 17 00:00:00 2001 From: scawful Date: Thu, 28 Nov 2024 17:52:34 -0500 Subject: [PATCH] Add Eon Leever sprite --- Sprites/Enemies/leever.asm | 209 +++++++++++++++++++++++++++++++++++++ Sprites/all_sprites.asm | 3 + 2 files changed, 212 insertions(+) create mode 100644 Sprites/Enemies/leever.asm diff --git a/Sprites/Enemies/leever.asm b/Sprites/Enemies/leever.asm new file mode 100644 index 0000000..83e2b56 --- /dev/null +++ b/Sprites/Enemies/leever.asm @@ -0,0 +1,209 @@ +; Eon Abyss Leever + +pushpc + +Sprite_71_Leever = $06CBA2 + +org $069365 + dw Sprite_71_Leever_Alt + +; UNREACHABLE_06A540 +org $06A540 +Sprite_71_Leever_Alt: +{ + LDA.w $0FFF : BEQ + + JSL Sprite_Leever_Long + JMP ++ + + + JSR Sprite_71_Leever + ++ + RTS +} +assert pc() <= $06A5C0 + +pullpc + +Sprite_Leever_Long: +{ + PHB : PHK : PLB + LDA.w SprAction, X : BEQ + + JSR Sprite_Leever_Draw + + + JSL Sprite_CheckActive : BCC .SpriteIsNotActive + JSR Sprite_Leever_Main + .SpriteIsNotActive + PLB + RTL +} + +Sprite_Leever_Prep: +{ + PHB : PHK : PLB + LDA.b #$40 : STA.w SprTimerA, X + PLB + RTL +} + +Sprite_Leever_Move: +{ + JSL Sprite_ApplySpeedTowardsPlayer + JSL Sprite_Move + RTS +} + +Sprite_Leever_Main: +{ + LDA.w SprAction, X + JSL UseImplicitRegIndexedLocalJumpTable + + dw Leever_Underground + dw Leever_Emerge + dw Leever_Attack + dw Leever_Dig + + Leever_Underground: + { + LDA.w SprTimerA, X : BNE + + LDA.b #$40 : STA.w SprTimerA, X + INC.w SprAction, X + + + LDA.b #$10 + JSR Sprite_Leever_Move + RTS + } + + Leever_Emerge: + { + %PlayAnimBackwards(3, 2, 10) + LDA.w SprTimerA, X : BNE + + JSL GetRandomInt + AND.b #$3F + ADC.b #$A0 + STA.w $0DF0,X + INC.w SprAction, X + STZ.w SprXSpeed, X : STZ.w SprYSpeed, X + + + RTS + } + + Leever_Attack: + { + %PlayAnimation(0, 1, 10) + LDA.w SprTimerA, X : BNE + + LDA.b #$7F : STA.w SprTimerA, X + INC.w SprAction, X + + + PHX + JSL Sprite_CheckIfRecoiling + JSL Sprite_CheckDamageToPlayerSameLayer + JSL Sprite_CheckDamageFromPlayer + PLX + LDA.b #$0C + JSR Sprite_Leever_Move + RTS + } + + Leever_Dig: + { + %PlayAnimation(2, 3, 10) + LDA.w SprTimerA, X : BNE + + JSL GetRandomInt + AND.b #$1F + ADC.b #$40 + STA.w $0DF0,X + STZ.w SprAction, X + + + LDA.b #$08 + JSR Sprite_Leever_Move + RTS + } + + +} + +Sprite_Leever_Draw: +{ +JSL Sprite_PrepOamCoord +JSL Sprite_OAM_AllocateDeferToPlayer + +LDA $0DC0, X : CLC : ADC $0D90, X : TAY;Animation Frame +LDA .start_index, Y : STA $06 + + +PHX +LDX .nbr_of_tiles, Y ;amount of tiles -1 +LDY.b #$00 +.nextTile + +PHX ; Save current Tile Index? + +TXA : CLC : ADC $06 ; Add Animation Index Offset + +PHA ; Keep the value with animation index offset? + +ASL A : TAX + +REP #$20 + +LDA $00 : CLC : ADC .x_offsets, X : STA ($90), Y +AND.w #$0100 : STA $0E +INY +LDA $02 : CLC : ADC .y_offsets, X : STA ($90), Y +CLC : ADC #$0010 : CMP.w #$0100 +SEP #$20 +BCC .on_screen_y + +LDA.b #$F0 : STA ($90), Y ;Put the sprite out of the way +STA $0E +.on_screen_y + +PLX ; Pullback Animation Index Offset (without the *2 not 16bit anymore) +INY +LDA .chr, X : STA ($90), Y +INY +LDA .properties, X : STA ($90), Y + +PHY + +TYA : LSR #2 : TAY + +LDA .sizes, X : ORA $0F : STA ($92), Y ; store size in oam buffer + +PLY : INY + +PLX : DEX : BPL .nextTile + +PLX + +RTS + +.start_index +db $00, $01, $02, $03 +.nbr_of_tiles +db 0, 0, 0, 0 +.x_offsets +dw 0 +dw 0 +dw 0 +dw 0 +.y_offsets +dw 0 +dw 0 +dw 0 +dw 0 +.chr +db $E0 +db $E2 +db $C2 +db $C0 +.properties +db $33 +db $33 +db $33 +db $33 +.sizes +db $02 +db $02 +db $02 +db $02 +} diff --git a/Sprites/all_sprites.asm b/Sprites/all_sprites.asm index 22bbd38..8c872de 100644 --- a/Sprites/all_sprites.asm +++ b/Sprites/all_sprites.asm @@ -67,6 +67,9 @@ Sprite_Vasu = $D7 incsrc "Sprites/NPCs/vasu.asm" print "End of vasu.asm ", pc +incsrc "Sprites/Enemies/leever.asm" +print "End of leever.asm ", pc + DontTeleportWithoutFlippers: { LDA.l $7EF356 : BNE +