diff --git a/Sprites/Enemies/deku_scrub_enemy.asm b/Sprites/Enemies/deku_scrub_enemy.asm index 407abdc..f71493c 100644 --- a/Sprites/Enemies/deku_scrub_enemy.asm +++ b/Sprites/Enemies/deku_scrub_enemy.asm @@ -1,10 +1,10 @@ -!SPRID = $14; The sprite ID you are overwriting (HEX) -!NbrTiles = 03 ; Number of tiles used in a frame +!SPRID = $14 ; The sprite ID you are overwriting (HEX) +!NbrTiles = 03 ; Number of tiles used in a frame !Harmless = 00 ; 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 +!Health = 08 ; Number of Health the sprite have +!Damage = 04 ; (08 is a whole heart), 04 is half heart !DeathAnimation = 00 ; 00 = normal death, 01 = no death animation !ImperviousAll = 00 ; 00 = Can be attack, 01 = attack will clink on it !SmallShadow = 00 ; 01 = small shadow, 00 = no shadow @@ -31,30 +31,30 @@ Sprite_DekuScrubEnemy_Long: { - PHB : PHK : PLB + PHB : PHK : PLB - JSR Sprite_DekuScrubEnemy_Draw ; Call the draw code - JSL Sprite_CheckActive ; Check if game is not paused - BCC .SpriteIsNotActive ; Skip Main code is sprite is innactive + JSR Sprite_DekuScrubEnemy_Draw ; Call the draw code + JSL Sprite_CheckActive ; Check if game is not paused + BCC .SpriteIsNotActive ; Skip Main code is sprite is innactive - JSR Sprite_DekuScrubEnemy_Main ; Call the main sprite code + JSR Sprite_DekuScrubEnemy_Main ; Call the main sprite code .SpriteIsNotActive - PLB ; Get back the databank we stored previously - RTL ; Go back to original code + PLB ; Get back the databank we stored previously + RTL ; Go back to original code } Sprite_DekuScrubEnemy_Prep: { - PHB : PHK : PLB - + PHB : PHK : PLB + LDA SprSubtype, X : CMP #$01 : BNE .normal_scrub - LDA #$06 : STA SprAction, X ; Pea Shot State + LDA #$06 : STA SprAction, X ; Pea Shot State .normal_scrub - PLB - RTL + PLB + RTL } ; 0-2 - Spitting @@ -77,326 +77,311 @@ Sprite_DekuScrubEnemy_Main: dw DekuScrubEnemy_PeaShot + ; 0x00 DekuScrubEnemy_Hiding: { - %StartOnFrame(13) - %PlayAnimation(13,13,1) + %StartOnFrame(13) + %PlayAnimation(13,13,1) - JSL Sprite_IsBelowPlayer : TYA - CMP #$00 : BNE .is_below_player - ; Check if the player is too close - LDA $22 : STA $02 - LDA $20 : STA $03 - LDA SprX, X : STA $04 - LDA SprY, X : STA $05 - JSR GetDistance8bit : CMP.b #$18 : BCC .too_close - ; The player is below the scrub, so it should pop up - LDA #$20 : STA SprTimerA, X - %GotoAction(1) - .too_close - .is_below_player - RTS + JSL Sprite_IsBelowPlayer : TYA + CMP #$00 : BNE .is_below_player + ; Check if the player is too close + LDA $22 : STA $02 + LDA $20 : STA $03 + LDA SprX, X : STA $04 + LDA SprY, X : STA $05 + JSR GetDistance8bit : CMP.b #$18 : BCC .too_close + ; The player is below the scrub, so it should pop up + LDA #$20 : STA SprTimerA, X + %GotoAction(1) + .too_close + .is_below_player + RTS } + ; 0x01 DekuScrubEnemy_Attack: { - %StartOnFrame(0) - %PlayAnimation(0,2,8) - - LDA SprTimerA, X : BNE .not_done - JSR SpawnPeaShot - LDA #$40 : STA SprTimerA, X - INC.w SprAction, X - .not_done + %StartOnFrame(0) + %PlayAnimation(0,2,8) + + LDA SprTimerA, X : BNE .not_done + JSR SpawnPeaShot + LDA #$40 : STA SprTimerA, X + INC.w SprAction, X + .not_done - LDA $22 : STA $02 - LDA $20 : STA $03 - LDA SprX, X : STA $04 - LDA SprY, X : STA $05 - JSR GetDistance8bit : CMP #$18 : BCS .not_too_close - - - %GotoAction(0) - .not_too_close - - - RTS + LDA $22 : STA $02 + LDA $20 : STA $03 + LDA SprX, X : STA $04 + LDA SprY, X : STA $05 + JSR GetDistance8bit : CMP #$18 : BCS .not_too_close + %GotoAction(0) + .not_too_close + RTS } + ; 0x02 DekuScrubEnemy_PostAttack: { %StartOnFrame(0) %PlayAnimation(0,0,4) - #_05BE49: LDA.w $0D10,X - #_05BE4F: STA.b $00 + LDA.w $0D10,X : STA.b $00 + LDA.w $0D30,X : STA.b $08 - #_05BE51: LDA.w $0D30,X - #_05BE56: STA.b $08 - - #_05BE58: LDA.b #$04 - #_05BE5A: STA.b $02 - #_05BE5C: STZ $03 - - #_05BE5E: LDA.w $0D00,X - #_05BE64: STA.b $01 - - #_05BE66: LDA.w $0D20,X - #_05BE6B: STA.b $09 + LDA.b #$04 : STA.b $02 + STZ $03 + LDA.w $0D00,X : STA.b $01 + LDA.w $0D20,X : STA.b $09 LDA Offspring1_Id : TAY JSR Sprite_SetupHitBox JSL CheckIfHitBoxesOverlap : BCC .no_dano - INC.w SprAction, X + INC.w SprAction, X .no_dano ; Wait while the pea shot is on screen ; Link may redirect it towards us LDA SprTimerA, X : BNE .not_done - ; If the pea shot and deku scrub hitboxes intersect - ; We will go to recoil - - - ; However, he may also dodge it and try to attack - ; So if he gets too close, we go back to hiding - %GotoAction(0) - + ; If the pea shot and deku scrub hitboxes intersect + ; We will go to recoil + + ; However, he may also dodge it and try to attack + ; So if he gets too close, we go back to hiding + %GotoAction(0) .not_done RTS } + ; 0x03 DekuScrubEnemy_Recoil: { - %StartOnFrame(3) - %PlayAnimation(3,6,6) + %StartOnFrame(3) + %PlayAnimation(3,6,6) - ; Play the spinning animation for a bit before proceeding - LDA SprTimerA, X : BNE .not_done - LDA #$20 : STA SprTimerA, X - INC.w SprAction, X - .not_done - - RTS + ; Play the spinning animation for a bit before proceeding + LDA SprTimerA, X : BNE .not_done + LDA #$20 : STA SprTimerA, X + INC.w SprAction, X + .not_done + + RTS } + ; 0x04 DekuScrubEnemy_Dazed: { - %StartOnFrame(8) - %PlayAnimation(8,9,11) + %StartOnFrame(8) + %PlayAnimation(8,9,11) - LDA SprTimerA, X : BNE .not_done - %GotoAction(0) + LDA SprTimerA, X : BNE .not_done + %GotoAction(0) .not_done - RTS + RTS } + ; 0x05 DekuScrubEnemy_Subdued: { %StartOnFrame(7) %PlayAnimation(7,7,1) - RTS } + ; 0x06 DekuScrubEnemy_PeaShot: { - %StartOnFrame(10) - %PlayAnimation(10,12,3) + %StartOnFrame(10) + %PlayAnimation(10,12,3) - %DoDamageToPlayerSameLayerOnContact() + %DoDamageToPlayerSameLayerOnContact() - JSL Sprite_MoveVert + JSL Sprite_MoveVert - - - JSL Sprite_CheckDamageFromPlayerLong - BCC .no_damage - ; Apply force in the opposite direction - LDA #-16 : STA SprYSpeed, X - - .no_damage - - RTS + JSL Sprite_CheckDamageFromPlayerLong : BCC .no_damage + ; Apply force in the opposite direction + LDA #-16 : STA SprYSpeed, X + .no_damage + RTS } - } SpawnPeaShot: { - LDA.b #$14 - JSL Sprite_SpawnDynamically : BMI .return ;89 + LDA.b #$14 + JSL Sprite_SpawnDynamically : BMI .return ;89 - LDA.b #$01 : STA $0E30, Y - LDA.b #$06 : STA $0D80, Y + LDA.b #$01 : STA $0E30, Y + LDA.b #$06 : STA $0D80, Y - PHX - - ; Spawn Location - REP #$20 - LDA $0FD8 - SEP #$20 - STA $0D10, Y : XBA : STA $0D30, Y + PHX + + ; Spawn Location + REP #$20 + LDA $0FD8 + SEP #$20 + STA $0D10, Y : XBA : STA $0D30, Y - REP #$20 - LDA $0FDA : CLC : ADC.w #$000C - SEP #$20 - STA $0D00, Y : XBA : STA $0D20, Y + REP #$20 + LDA $0FDA : CLC : ADC.w #$000C + SEP #$20 + STA $0D00, Y : XBA : STA $0D20, Y - TYX - - STZ $0D70, X + TYX + + STZ $0D70, X - LDA #$10 : STA SprYSpeed, X - STA SprYRound, X + LDA #$10 : STA SprYSpeed, X + STA SprYRound, X - STX.w Offspring1_Id - - PLX - + STX.w Offspring1_Id + + PLX -.return - RTS + .return + RTS } Sprite_DekuScrubEnemy_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 + 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 + 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 -.start_index - db $00, $03, $05, $07, $09, $0B, $0D, $0F, $11, $15, $19, $1A, $1B, $1C -.nbr_of_tiles - db 2, 1, 1, 1, 1, 1, 1, 1, 3, 3, 0, 0, 0, 1 -.x_offsets - dw 0, 0, 8 - dw 0, 0 - dw 0, 0 - dw 0, 0 - dw 0, 0 - dw 0, 0 - dw 0, 0 - dw 0, 0 - dw 0, 0, -4, 12 - dw 0, 0, -4, 12 - dw 4 - dw 4 - dw 4 - dw 0, 0 -.y_offsets - dw -8, 8, 8 - dw -8, 0 - dw -8, 0 - dw 0, -8 - dw 0, -16 - dw 0, -8 - dw -8, 0 - dw 0, -8 - dw 0, -8, -8, 0 - dw 0, -8, 0, -8 - dw 4 - dw 4 - dw 4 - dw 0, -4 -.chr - db $84, $B4, $B5 - db $84, $94 - db $84, $A6 - db $AC, $9C - db $A8, $88 - db $AA, $9A - db $98, $A8 - db $AE, $9E - db $AC, $9C, $87, $87 - db $AC, $9C, $87, $87 - db $86 - db $96 - db $97 - db $94, $84 -.properties - db $3B, $3B, $3B - db $3B, $3B - db $3B, $3B - db $3B, $3B - db $3B, $3B - db $3B, $3B - db $7B, $7B - db $3B, $3B - db $3B, $3B, $3B, $3B - db $3B, $3B, $3B, $3B - db $3B - db $3B - db $3B - db $3B, $3B -.sizes - db $02, $00, $00 - db $02, $02 - db $02, $02 - db $02, $02 - db $02, $02 - db $02, $02 - db $02, $02 - db $02, $02 - db $02, $02, $00, $00 - db $02, $02, $00, $00 - db $00 - db $00 - db $00 - db $02, $02 + .start_index + db $00, $03, $05, $07, $09, $0B, $0D, $0F, $11, $15, $19, $1A, $1B, $1C + .nbr_of_tiles + db 2, 1, 1, 1, 1, 1, 1, 1, 3, 3, 0, 0, 0, 1 + .x_offsets + dw 0, 0, 8 + dw 0, 0 + dw 0, 0 + dw 0, 0 + dw 0, 0 + dw 0, 0 + dw 0, 0 + dw 0, 0 + dw 0, 0, -4, 12 + dw 0, 0, -4, 12 + dw 4 + dw 4 + dw 4 + dw 0, 0 + .y_offsets + dw -8, 8, 8 + dw -8, 0 + dw -8, 0 + dw 0, -8 + dw 0, -16 + dw 0, -8 + dw -8, 0 + dw 0, -8 + dw 0, -8, -8, 0 + dw 0, -8, 0, -8 + dw 4 + dw 4 + dw 4 + dw 0, -4 + .chr + db $84, $B4, $B5 + db $84, $94 + db $84, $A6 + db $AC, $9C + db $A8, $88 + db $AA, $9A + db $98, $A8 + db $AE, $9E + db $AC, $9C, $87, $87 + db $AC, $9C, $87, $87 + db $86 + db $96 + db $97 + db $94, $84 + .properties + db $3B, $3B, $3B + db $3B, $3B + db $3B, $3B + db $3B, $3B + db $3B, $3B + db $3B, $3B + db $7B, $7B + db $3B, $3B + db $3B, $3B, $3B, $3B + db $3B, $3B, $3B, $3B + db $3B + db $3B + db $3B + db $3B, $3B + .sizes + db $02, $00, $00 + db $02, $02 + db $02, $02 + db $02, $02 + db $02, $02 + db $02, $02 + db $02, $02 + db $02, $02 + db $02, $02, $00, $00 + db $02, $02, $00, $00 + db $00 + db $00 + db $00 + db $02, $02 } \ No newline at end of file