Difference between revisions of "Vulture"

From TLoZ: ALTTP Hacking Resources
Jump to: navigation, search
Line 1: Line 1:
{{infobox sprite
+
Sprite $01: The Vulture
| id = $01
+
== Vulture ==
| hp = $06 ($06B174)
+
=== Description ===
| damage = $83 ($06B267)
+
Desert bird of prey. Circles the player and closes in slowly.
| palette = $0B ($06B35A)
 
| found = [[Light World]]
 
}}
 
  
== Description ==
+
=== Combat Strategy ===
Desert bird of prey, circles the player.
+
Spin attacks can be effective when the vulture has closed in on the player.
  
== Combat Strategy ==
+
== Stats And Properties ==
Using spins increases the sword's range to reach the vulture.
+
See [[Sprite Properties]]
  
== Known Bugs ==
+
'''$06B081'''
 +
{| class="wikitable" style="text-align: left;"
 +
|-
 +
!Bit(s)
 +
!Info
 +
!Value
 +
|-
 +
| Bit 7
 +
| Harmless
 +
| 0
 +
|-
 +
| Bit 6
 +
| ?
 +
| 0
 +
|-
 +
| Bit 5
 +
| ?
 +
| 0
 +
|-
 +
| Bits 4-0
 +
| OAM Slots
 +
| 00010 ($02)
 +
|}
  
== Another Section ==
+
'''$06B174'''
 +
{| class="wikitable" style="text-align: left;"
 +
|-
 +
! Bit(s)
 +
! Info
 +
! Value
 +
|-
 +
| Bits 7-0
 +
| HP
 +
| 0000 0110 ($06)
 +
|}
 +
 
 +
'''$06B267'''
 +
{| class="wikitable" style="text-align: left;"
 +
|-
 +
! Bit(s)
 +
! Info
 +
! Value
 +
|-
 +
| Bits 7-4
 +
| ?
 +
| 1000 ($80)
 +
|-
 +
| Bits 3-0
 +
| [[Damage Types|Damage Type]]
 +
| 0011 ($03)
 +
|}
 +
 
 +
'''$06B35A'''
 +
{| class="wikitable" style="text-align: left;"
 +
|-
 +
! Bit(s)
 +
! Info
 +
! Value
 +
|-
 +
| Bit 7
 +
| No Death Animation
 +
| 0
 +
|-
 +
| Bit 6
 +
| Invincible
 +
| 0
 +
|-
 +
| Bit 5
 +
| Adjust Child coordinates
 +
| 0
 +
|-
 +
| Bit 4
 +
| Draw Shadow
 +
| 0
 +
|-
 +
| Bit 3-1
 +
| Palette
 +
| 101 ($05)
 +
|-
 +
| Bit 0
 +
| ?
 +
| 1
 +
|}
 +
 
 +
'''$06B44D'''
 +
{| class="wikitable" style="text-align: left;"
 +
|-
 +
! Bit(s)
 +
! Info
 +
! Value
 +
|-
 +
| Bit 7
 +
| Ignore Collision Settings
 +
| 0
 +
|-
 +
| Bit 6
 +
| Statis
 +
| 0
 +
|-
 +
| Bit 5
 +
| Persist
 +
| 0
 +
|-
 +
| Bits 4-0
 +
| Hit Box Dimensions
 +
| 00000 ($00)
 +
|}
 +
 
 +
'''$06B540'''
 +
{| class="wikitable" style="text-align: left;"
 +
|-
 +
! Bit(s)
 +
! Info
 +
! Value
 +
|-
 +
| Bits 7-4
 +
| Tile Interaction Hit Box
 +
| 0000 ($00)
 +
|-
 +
| Bit 3
 +
| ?
 +
| 0
 +
|-
 +
| Bit 2
 +
| ?
 +
| 0
 +
|-
 +
| Bit 1
 +
| Dies Like A Boss
 +
| 0
 +
|-
 +
| Bit 0
 +
| Falls In Holes
 +
| 0
 +
|}
 +
 
 +
'''$06B633'''
 +
{| class="wikitable" style="text-align: left;"
 +
|-
 +
! Bit(s)
 +
! Info
 +
! Value
 +
|-
 +
| Bit 7
 +
| Disable Tile Interactions
 +
| 1
 +
|-
 +
| Bit 6
 +
| ?
 +
| 0
 +
|-
 +
| Bit 5
 +
| Is shield Blockable
 +
| 0
 +
|-
 +
| Bit 4
 +
| Alternate Damage Sound
 +
| 1
 +
|-
 +
| Bit 3-0
 +
| Prize Pack
 +
| 0110 ($06)
 +
|}
 +
 
 +
'''$06B726'''
 +
{| class="wikitable" style="text-align: left;"
 +
|-
 +
! Bit(s)
 +
! Info
 +
! Value
 +
|-
 +
| Bit 7
 +
| ?
 +
| 0
 +
|-
 +
| Bit 6
 +
| ?
 +
| 0
 +
|-
 +
| Bit 5
 +
| Is Interactive
 +
| 0
 +
|-
 +
| Bit 4
 +
| Deflect Projectiles
 +
| 0
 +
|-
 +
| Bit 3
 +
| Collide With Less Tiles
 +
| 0
 +
|-
 +
| Bit 2
 +
| Impervious To Sword/Hammer
 +
| 0
 +
|-
 +
| Bit 1
 +
| Impervious To Arrows?
 +
| 0
 +
|-
 +
| Bit 0
 +
| ?
 +
| 0
 +
|}
 +
 
 +
== Code ==
 +
<Code>
 +
    ; *$EDC72-$EDC79 LONG
 +
    Sprite_VultureLong:
 +
    {
 +
        PHB : PHK : PLB
 +
       
 +
        JSR Sprite_Vulture
 +
       
 +
        PLB
 +
       
 +
        RTL
 +
    }
 +
 
 +
; ==============================================================================
 +
 
 +
    ; *$EDC7A-$EDC9B LOCAL
 +
    Sprite_Vulture:
 +
    {
 +
        LDA $0B89, X : ORA.b #$30 : STA $0B89, X
 +
       
 +
        JSR Vulture_Draw
 +
        JSR Sprite4_CheckIfActive
 +
        JSR Sprite4_CheckIfRecoiling
 +
        JSR Sprite4_CheckDamage
 +
        JSR Sprite4_Move
 +
       
 +
        LDA $0D80, X
 +
       
 +
        JSL UseImplicitRegIndexedLocalJumpTable
 +
       
 +
        dw Vulture_Dormant
 +
        dw Vulture_Circling
 +
    }
 +
 
 +
; ==============================================================================
 +
 
 +
    ; *$EDC9C-$EDCB4 JUMP LOCATION
 +
    Vulture_Dormant:
 +
    {
 +
        INC $0E80, X : LDA $0E80, X : CMP.b #$A0 : BNE .activation_delay
 +
       
 +
        INC $0D80, X
 +
       
 +
        LDA.b #$1E : JSL Sound_SetSfx3PanLong
 +
       
 +
        LDA.b #$10 : STA $0DF0, X
 +
   
 +
    .activation_delay
 +
   
 +
        RTS
 +
    }
 +
 
 +
; ==============================================================================
 +
 
 +
    ; $EDCB5-$EDCB8 DATA
 +
    pool Vulture_Circling:
 +
    {
 +
   
 +
    .animation_states
 +
        db 1, 2, 3, 2
 +
    }
 +
 
 +
; ==============================================================================
 +
 
 +
    ; *$EDCB9-$EDD1D JUMP LOCATION
 +
    Vulture_Circling:
 +
    {
 +
        LDA $1A : LSR A : AND.b #$03 : TAY
 +
       
 +
        LDA .animation_states, Y : STA $0DC0, X
 +
       
 +
        LDA $0DF0, X : BEQ .finished_ascending
 +
       
 +
        INC $0F70, X
 +
       
 +
        RTS
 +
   
 +
    .finished_ascending
 +
   
 +
        TXA : EOR $1A : AND.b #$01 : BNE .dont_adjust_xy_speeds
 +
       
 +
        TXA : AND.b #$0F : ADD.b #$18
 +
       
 +
        JSL Sprite_ProjectSpeedTowardsPlayerLong
 +
       
 +
        LDA $00 : EOR.b #$FF : INC A : STA $0D50, X
 +
       
 +
        LDA $01 : STA $0D40, X
 +
       
 +
        LDA $0E : ADD.b #$28 : CMP.b #$50 : BCS .too_far_from_player
 +
       
 +
        LDA $0F : ADD.b #$28 : CMP.b #$50 : BCS .too_far_from_player
 +
   
 +
    .dont_adjust_xy_speeds
 +
   
 +
        RTS
 +
   
 +
    .too_far_from_player
 +
   
 +
        ; This mess o' logic keep the vulture from going too far from the
 +
        ; player by apparently reversing somewhat...
 +
        LDA $00 : ASL $00 : PHP : ROR A : PLP : ROR A : ADD $0D40, X : STA $0D40, X
 +
       
 +
        LDA $01 : ASL $01 : PHP : ROR A : PLP : ROR A : ADD $0D50, X : STA $0D50, X
 +
       
 +
        RTS
 +
    }
 +
 
 +
; ==============================================================================
 +
 
 +
    ; $EDD1E-$EDD5D DATA
 +
    pool Vulture_Draw:
 +
    {
 +
   
 +
    .oam_groups
 +
        dw -8,  0 : db $86, $00, $00, $02
 +
        dw  8,  0 : db $86, $40, $00, $02
 +
       
 +
        dw -8,  0 : db $80, $00, $00, $02
 +
        dw  8,  0 : db $80, $40, $00, $02
 +
       
 +
        dw -8,  0 : db $82, $00, $00, $02
 +
        dw  8,  0 : db $82, $40, $00, $02
 +
       
 +
        dw -8,  0 : db $84, $00, $00, $02
 +
        dw  8,  0 : db $84, $40, $00, $02
 +
    }
 +
 
 +
; ==============================================================================
 +
 
 +
    ; *$EDD5E-$EDD7A LOCAL
 +
    Vulture_Draw:
 +
    {
 +
        LDA.b #$00 : XBA
 +
       
 +
        LDA $0DC0, X : REP #$20 : ASL #4 : ADC.w #.oam_groups : STA $08
 +
       
 +
        SEP #$20
 +
       
 +
        LDA.b #$02 : JSR Sprite4_DrawMultiple
 +
       
 +
        JSL Sprite_DrawShadowLong
 +
       
 +
        RTS
 +
    }
 +
 
 +
</Code>

Revision as of 23:26, 17 December 2016

Sprite $01: The Vulture

Vulture

Description

Desert bird of prey. Circles the player and closes in slowly.

Combat Strategy

Spin attacks can be effective when the vulture has closed in on the player.

Stats And Properties

See Sprite Properties

$06B081

Bit(s) Info Value
Bit 7 Harmless 0
Bit 6  ? 0
Bit 5  ? 0
Bits 4-0 OAM Slots 00010 ($02)

$06B174

Bit(s) Info Value
Bits 7-0 HP 0000 0110 ($06)

$06B267

Bit(s) Info Value
Bits 7-4  ? 1000 ($80)
Bits 3-0 Damage Type 0011 ($03)

$06B35A

Bit(s) Info Value
Bit 7 No Death Animation 0
Bit 6 Invincible 0
Bit 5 Adjust Child coordinates 0
Bit 4 Draw Shadow 0
Bit 3-1 Palette 101 ($05)
Bit 0  ? 1

$06B44D

Bit(s) Info Value
Bit 7 Ignore Collision Settings 0
Bit 6 Statis 0
Bit 5 Persist 0
Bits 4-0 Hit Box Dimensions 00000 ($00)

$06B540

Bit(s) Info Value
Bits 7-4 Tile Interaction Hit Box 0000 ($00)
Bit 3  ? 0
Bit 2  ? 0
Bit 1 Dies Like A Boss 0
Bit 0 Falls In Holes 0

$06B633

Bit(s) Info Value
Bit 7 Disable Tile Interactions 1
Bit 6  ? 0
Bit 5 Is shield Blockable 0
Bit 4 Alternate Damage Sound 1
Bit 3-0 Prize Pack 0110 ($06)

$06B726

Bit(s) Info Value
Bit 7  ? 0
Bit 6  ? 0
Bit 5 Is Interactive 0
Bit 4 Deflect Projectiles 0
Bit 3 Collide With Less Tiles 0
Bit 2 Impervious To Sword/Hammer 0
Bit 1 Impervious To Arrows? 0
Bit 0  ? 0

Code

   ; *$EDC72-$EDC79 LONG
   Sprite_VultureLong:
   {
       PHB : PHK : PLB
       
       JSR Sprite_Vulture
       
       PLB
       
       RTL
   }
==============================================================================
   ; *$EDC7A-$EDC9B LOCAL
   Sprite_Vulture:
   {
       LDA $0B89, X : ORA.b #$30 : STA $0B89, X
       
       JSR Vulture_Draw
       JSR Sprite4_CheckIfActive
       JSR Sprite4_CheckIfRecoiling
       JSR Sprite4_CheckDamage
       JSR Sprite4_Move
       
       LDA $0D80, X
       
       JSL UseImplicitRegIndexedLocalJumpTable
       
       dw Vulture_Dormant
       dw Vulture_Circling
   }
==============================================================================
   ; *$EDC9C-$EDCB4 JUMP LOCATION
   Vulture_Dormant:
   {
       INC $0E80, X : LDA $0E80, X : CMP.b #$A0 : BNE .activation_delay
       
       INC $0D80, X
       
       LDA.b #$1E : JSL Sound_SetSfx3PanLong
       
       LDA.b #$10 : STA $0DF0, X
   
   .activation_delay
   
       RTS
   }
==============================================================================
   ; $EDCB5-$EDCB8 DATA
   pool Vulture_Circling:
   {
   
   .animation_states
       db 1, 2, 3, 2
   }
==============================================================================
   ; *$EDCB9-$EDD1D JUMP LOCATION
   Vulture_Circling:
   {
       LDA $1A : LSR A : AND.b #$03 : TAY
       
       LDA .animation_states, Y : STA $0DC0, X
       
       LDA $0DF0, X : BEQ .finished_ascending
       
       INC $0F70, X
       
       RTS
   
   .finished_ascending
   
       TXA : EOR $1A : AND.b #$01 : BNE .dont_adjust_xy_speeds
       
       TXA : AND.b #$0F : ADD.b #$18
       
       JSL Sprite_ProjectSpeedTowardsPlayerLong
       
       LDA $00 : EOR.b #$FF : INC A : STA $0D50, X
       
       LDA $01 : STA $0D40, X
       
       LDA $0E : ADD.b #$28 : CMP.b #$50 : BCS .too_far_from_player
       
       LDA $0F : ADD.b #$28 : CMP.b #$50 : BCS .too_far_from_player
   
   .dont_adjust_xy_speeds
   
       RTS
   
   .too_far_from_player
   
       ; This mess o' logic keep the vulture from going too far from the
       ; player by apparently reversing somewhat...
       LDA $00 : ASL $00 : PHP : ROR A : PLP : ROR A : ADD $0D40, X : STA $0D40, X
       
       LDA $01 : ASL $01 : PHP : ROR A : PLP : ROR A : ADD $0D50, X : STA $0D50, X
       
       RTS
   }
==============================================================================
   ; $EDD1E-$EDD5D DATA
   pool Vulture_Draw:
   {
   
   .oam_groups
       dw -8,  0 : db $86, $00, $00, $02
       dw  8,  0 : db $86, $40, $00, $02
       
       dw -8,  0 : db $80, $00, $00, $02
       dw  8,  0 : db $80, $40, $00, $02
       
       dw -8,  0 : db $82, $00, $00, $02
       dw  8,  0 : db $82, $40, $00, $02
       
       dw -8,  0 : db $84, $00, $00, $02
       dw  8,  0 : db $84, $40, $00, $02
   }
==============================================================================
   ; *$EDD5E-$EDD7A LOCAL
   Vulture_Draw:
   {
       LDA.b #$00 : XBA
       
       LDA $0DC0, X : REP #$20 : ASL #4 : ADC.w #.oam_groups : STA $08
       
       SEP #$20
       
       LDA.b #$02 : JSR Sprite4_DrawMultiple
       
       JSL Sprite_DrawShadowLong
       
       RTS
   }