From 02c34d0229479e66a1be96a6dec1942aec777139 Mon Sep 17 00:00:00 2001 From: scawful Date: Mon, 17 Jun 2024 18:19:10 -0400 Subject: [PATCH] add maple sprite as subtype to mermaid slot --- Sprites/NPCs/mermaid.asm | 284 ++++++++++++++++++++++++--------------- 1 file changed, 176 insertions(+), 108 deletions(-) diff --git a/Sprites/NPCs/mermaid.asm b/Sprites/NPCs/mermaid.asm index 01f1204..24491b5 100644 --- a/Sprites/NPCs/mermaid.asm +++ b/Sprites/NPCs/mermaid.asm @@ -1,9 +1,9 @@ -;============================================================================== -; Sprite Properties -;============================================================================== +; ========================================================= +; Mermaid and Maple NPC + !SPRID = $F0 ; The sprite ID you are overwriting (HEX) !NbrTiles = 02 ; Number of tiles used in a frame -!Harmless = 00 ; 00 = Sprite is Harmful, 01 = Sprite is Harmless +!Harmless = 01 ; 00 = Sprite is Harmful, 01 = Sprite is Harmless !HVelocity = 00 ; Is your sprite going super fast? put 01 if it is !Health = 00 ; Number of Health the sprite have !Damage = 00 ; (08 is a whole heart), 04 is half heart @@ -31,16 +31,16 @@ %Set_Sprite_Properties(Sprite_Mermaid_Prep, Sprite_Mermaid_Long) -;================================================================================================== -; Sprite Long Hook for that sprite -; -------------------------------------------------------------------------------------------------- -; This code can be left unchanged -; handle the draw code and if the sprite is active and should move or not -;================================================================================================== + Sprite_Mermaid_Long: PHB : PHK : PLB +LDA.w SprMiscE, X : BEQ .MermaidDraw + JSR Sprite_Maple_Draw + JMP .Continue +.MermaidDraw JSR Sprite_Mermaid_Draw ; Call the draw code +.Continue JSL Sprite_CheckActive ; Check if game is not paused BCC .SpriteIsNotActive ; Skip Main code is sprite is innactive @@ -50,32 +50,29 @@ JSR Sprite_Mermaid_Main ; Call the main sprite code PLB ; Get back the databank we stored previously RTL ; Go back to original code -;================================================================================================== -; Sprite initialization -; -------------------------------------------------------------------------------------------------- -; this code only get called once perfect to initialize sprites substate or timers -; this code as soon as the room transitions/ overworld transition occurs -;================================================================================================== -Sprite_Mermaid_Prep: -PHB : PHK : PLB - - ; Add more code here to initialize data -LDA.b #$40 : STA.w SprTimerA, X -PLB -RTL -;================================================================================================== -; Sprite Main routines code -; -------------------------------------------------------------------------------------------------- -; This is the main local code of your sprite -; This contains all the Subroutines of your sprites you can add more below -;================================================================================================== +Sprite_Mermaid_Prep: +{ + PHB : PHK : PLB + LDA.b #$40 : STA.w SprTimerA, X + STZ.w SprMiscE, X + LDA.w SprSubtype, X : CMP.b #$01 : BNE + + ; Maple Sprite + LDA.b #$01 : STA.w SprMiscE, X + LDA.b #$03 : STA.w SprAction, X + + + PLB + RTL +} + + Sprite_Mermaid_Main: LDA.w SprAction, X; Load the SprAction JSL UseImplicitRegIndexedLocalJumpTable; Goto the SprAction we are currently in dw MermaidWait dw MermaidDive dw MermaidSwim +dw MapleIdle MermaidWait: @@ -116,98 +113,169 @@ RTS } -;================================================================================================== -; Sprite Draw code -; -------------------------------------------------------------------------------------------------- -; Draw the tiles on screen with the data provided by the sprite maker editor -;================================================================================================== +MapleIdle: +{ + %PlayAnimation(0,1,16) + JSL Sprite_PlayerCantPassThrough + RTS +} + Sprite_Mermaid_Draw: -JSL Sprite_PrepOamCoord -JSL Sprite_OAM_AllocateDeferToPlayer +{ + JSL Sprite_PrepOamCoord + JSL Sprite_OAM_AllocateDeferToPlayer -LDA $0DC0, X : CLC : ADC $0D90, X : TAY;Animation Frame -LDA .start_index, Y : STA $06 + 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 + 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 + PHX ; Save current Tile Index? + + TXA : CLC : ADC $06 ; Add Animation Index Offset -PHA ; Keep the value with animation index offset? + PHA ; Keep the value with animation index offset? -ASL A : TAX + ASL A : TAX -REP #$20 + 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 $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 + 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 + 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 + 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 + PLX -RTS + RTS -;================================================================================================== -; Sprite Draw Generated Data -; -------------------------------------------------------------------------------------------------- -; This is where the generated Data for the sprite go -;================================================================================================== -.start_index -db $00, $02, $04, $05 -.nbr_of_tiles -db 1, 1, 0, 1 -.x_offsets -dw 0, 0 -dw -4, 4 -dw 0 -dw 0, 0 -.y_offsets -dw -8, 8 -dw -4, -4 -dw 4 -dw 0, 8 -.chr -db $0E, $2E -db $0B, $0C -db $2B -db $09, $29 -.properties -db $39, $39 -db $39, $39 -db $39 -db $39, $39 -.sizes -db $02, $02 -db $02, $02 -db $02 -db $02, $02 + .start_index + db $00, $02, $04, $05 + .nbr_of_tiles + db 1, 1, 0, 1 + .x_offsets + dw 0, 0 + dw -4, 4 + dw 0 + dw 0, 0 + .y_offsets + dw -8, 8 + dw -4, -4 + dw 4 + dw 0, 8 + .chr + db $0E, $2E + db $0B, $0C + db $2B + db $09, $29 + .properties + db $39, $39 + db $39, $39 + db $39 + db $39, $39 + .sizes + db $02, $02 + db $02, $02 + db $02 + db $02, $02 +} + +Sprite_Maple_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 : 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 #$02 : ORA $0F : STA ($92), Y ; store size in oam buffer + + PLY : INY + + PLX : DEX : BPL .nextTile + + PLX + + RTS + + + .start_index + db $00, $02 + .nbr_of_tiles + db 1, 1 + .y_offsets + dw -8, 0 + dw 0, -8 + .chr + db $13, $23 + db $25, $15 + .properties + db $39, $39 + db $39, $39 +}