diff --git a/Sprites/Enemies/goriya.asm b/Sprites/Enemies/goriya.asm index 2111d9f..73729d9 100644 --- a/Sprites/Enemies/goriya.asm +++ b/Sprites/Enemies/goriya.asm @@ -2,8 +2,8 @@ ; Goriya Sprite Properties ; ========================================================= -!SPRID = $00 ; The sprite ID you are overwriting (HEX) -!NbrTiles = 00 ; Number of tiles used in a frame +!SPRID = $2C ; 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 @@ -29,6 +29,7 @@ !ImperviousArrow = 00 ; 01 = Impervious to arrows !ImpervSwordHammer = 00 ; 01 = Impervious to sword and hammer attacks !Boss = 00 ; 00 = normal sprite, 01 = sprite is a boss + %Set_Sprite_Properties(Sprite_Goriya_Prep, Sprite_Goriya_Long) ; ========================================================= @@ -37,7 +38,8 @@ Sprite_Goriya_Long: { PHB : PHK : PLB - JSR Sprite_Goriya_Draw ; Call the draw code + JSR Sprite_Goriya_Draw ; Call the draw code + JSL Sprite_DrawShadow JSL Sprite_CheckActive ; Check if game is not paused BCC .SpriteIsNotActive ; Skip Main code is sprite is innactive @@ -53,7 +55,9 @@ Sprite_Goriya_Long: Sprite_Goriya_Prep: { PHB : PHK : PLB - + + LDA.b #$20 : STA.w SprHealth, X + PLB RTL } @@ -65,17 +69,105 @@ Sprite_Goriya_Main: LDA.w SprAction, X JSL UseImplicitRegIndexedLocalJumpTable - dw Goriya_MainAction + dw Goriya_WalkingDown + dw Goriya_WalkingLeftOrRight + dw Goriya_WalkingUp - Goriya_MainAction: + Goriya_WalkingDown: { + %PlayAnimation(0, 1, 10) + JSR Sprite_Goriya_Move + RTS + } + Goriya_WalkingLeftOrRight: + { + %PlayAnimation(2, 3, 10) + JSR Sprite_Goriya_Move + RTS + } + + Goriya_WalkingUp: + { + %PlayAnimation(4, 5, 10) + JSR Sprite_Goriya_Move RTS } } +GoriyaMovementSpeed = 10 + +Sprite_Goriya_Move: +{ + JSL Sprite_Move + JSL Sprite_BounceFromTileCollision + JSL Sprite_PlayerCantPassThrough + + JSL Sprite_DamageFlash_Long + + JSL Sprite_CheckDamageToPlayer + JSL Sprite_CheckDamageFromPlayer + + LDA.w SprTimerC, X : BNE + + JSL GetRandomInt : AND.b #$03 + STA.w SprMiscB, X + %SetTimerC(30) + + + + LDA.w SprMiscB, X + JSL UseImplicitRegIndexedLocalJumpTable + + dw Goriya_MoveUp + dw Goriya_MoveDown + dw Goriya_MoveLeft + dw Goriya_MoveRight + + Goriya_MoveUp: + { + LDA.b #-GoriyaMovementSpeed : STA.w SprYSpeed, X + STZ.w SprXSpeed, X + %GotoAction(2) + LDA.b #$00 : STA.w SprMiscE, X + RTS + } + + Goriya_MoveDown: + { + LDA.b #GoriyaMovementSpeed : STA.w SprYSpeed, X + STZ.w SprXSpeed, X + %GotoAction(0) + LDA.b #$01 : STA.w SprMiscE, X + RTS + } + + Goriya_MoveLeft: + { + STZ.w SprYSpeed, X + LDA.b #GoriyaMovementSpeed : STA.w SprXSpeed, X + %GotoAction(1) + LDA.b #$02 : STA.w SprMiscE, X + RTS + } + + Goriya_MoveRight: + { + STZ.w SprYSpeed, X + LDA.b #-GoriyaMovementSpeed : STA.w SprXSpeed, X + %GotoAction(1) + LDA.b #$03 : STA.w SprMiscE, X + RTS + } +} + ; ========================================================= +!BodyForward = $C6 +!BodyLeft = $E2 +!BodyBackward = $E4 +!HeadLeft = $C4 +!HeadForward = $C2 +!HeadBackward = $C0 + ; 0-1 : Walking Down ; 2-3 : Walking Left ; 4-5 : Walking Up @@ -84,52 +176,47 @@ Sprite_Goriya_Draw: JSL Sprite_PrepOamCoord JSL Sprite_OAM_AllocateDeferToPlayer - LDA $0DC0, X : CLC : ADC $0D90, X : TAY;Animation Frame - LDA .start_index, Y : STA $06 - + LDA.w SprGfx, X : CLC : ADC.w SprFrame, X : TAY;Animation Frame + LDA.w .start_index, Y : STA $06 + LDA.w SprMiscA, X : STA $08 + LDA.w SprMiscE, X : CMP.b #$02 : BCC .not_right + LDA.b $08 : EOR.b #$40 : STA.b $08 + .not_right PHX - LDX .nbr_of_tiles, Y ;amount of tiles -1 - LDY.b #$00 - .nextTile + 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? - PHX ; Save current Tile Index? - - TXA : CLC : ADC $06 ; Add Animation Index Offset + ASL A : TAX - PHA ; Keep the value with animation index offset? + 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 - ASL A : TAX + ; Put the sprite out of the way + LDA.b #$F0 : STA ($90), Y : STA $0E + .on_screen_y - REP #$20 + PLX ; Pullback Animation Index Offset (without the *2 not 16bit anymore) + INY + LDA .chr, X : STA ($90), Y : INY + LDA .properties, X : ORA $08 : STA ($90), 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 - - 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.b #$02 : ORA $0F : STA ($92), Y ; store size in oam buffer + PLY : INY + + PLX : DEX : BPL .nextTile PLX @@ -151,30 +238,23 @@ Sprite_Goriya_Draw: dw 0, 0 .y_offsets dw 0, -10 - dw 0, -11 - dw -10, 0 + dw 0, -10 + dw 0, -10 dw -1, -10 - dw -8, 0 - dw -8, 0 + dw 0, -8 + dw 0, -8 .chr db $C6, $C2 db $C6, $C2 - db $C4, $E2 + db $E2, $C4 db $E0, $C4 - db $C0, $E4 - db $C0, $E4 + db $E4, $C0 + db $E4, $C0 .properties - db $37, $37 - db $77, $37 - db $37, $37 - db $37, $37 - db $37, $37 - db $37, $77 - .sizes - db $02, $02 - db $02, $02 - db $02, $02 - db $02, $02 - db $02, $02 - db $02, $02 + db $63, $63 + db $73, $63 + db $63, $63 + db $73, $63 + db $63, $63 + db $73, $63 } \ No newline at end of file