editing enemy damage class weaknesses/immunities

View previous topic View next topic Go down

editing enemy damage class weaknesses/immunities

Post by wizzrobemaster on Sun 27 Dec 2015 - 21:01

how difficult is it to edit the damage class of enemies such as red eyegores and koppies (which can only be killed by arrows) to allow them to get killed by sword strikes or other attacks?  is there multiple sprite data that needs to be edited or can it be a few hex codes?

wizzrobemaster
Crystal Maiden
Crystal Maiden

Since : 2015-01-04

Back to top Go down

Re: editing enemy damage class weaknesses/immunities

Post by SunGodPortal on Sun 27 Dec 2015 - 21:16

I haven't used it in a while so I don't remember, but does Hyrule Add-ons not do this?
avatar
SunGodPortal



Since : 2015-01-26

Back to top Go down

Re: editing enemy damage class weaknesses/immunities

Post by SePH on Sun 27 Dec 2015 - 21:26

Boy you sure have many questions!

It's very difficult.

A good place to start looking would be in MathOnNapkins disassembly as he did separated the coding of many enemies into separate files.

Then it's a matter of knowing a little bit how asm translates to hex and you can figure out how to change many things in the game on your own, like I did....but it takes time.

His disassembly probably contains all answers to your questions...and beyond...you just have to understand it!

SePH



Since : 2012-06-19

Back to top Go down

Re: editing enemy damage class weaknesses/immunities

Post by wizzrobemaster on Sun 27 Dec 2015 - 22:05

will mathonnapkins disassembly make the editing much easier?

wizzrobemaster
Crystal Maiden
Crystal Maiden

Since : 2015-01-04

Back to top Go down

Re: editing enemy damage class weaknesses/immunities

Post by SePH on Sun 27 Dec 2015 - 23:11

Yes, if you know what you're looking for.

No, if you don't.

Here's the sprite code you wanted, for exemple:

Code:

; ==============================================================================

    ; *$F4700-$F4720 LONG
    SpritePrep_Eyegore:
    {
        LDA $048E
        
        CMP.b #$0C : BEQ .is_goriya
        CMP.b #$1B : BEQ .is_goriya
        CMP.b #$4B : BEQ .is_goriya
        CMP.b #$6B : BNE .not_goriya
    
    .is_goriya:
    
        INC $0DA0, X
        
        LDA $0E20, X : CMP.b #$83 : BNE .not_red_goriya
        
        ; Disable some of the invulnerability properties.
        STZ $0CAA, X
    
    .not_red_goriya
    .not_goriya
    
        RTL
    }

; ==============================================================================

    ; $F4721-$F4790 DATA
    {
    
    }

; ==============================================================================

    ; *$F4791-$F479A BRANCH LOCATION
    Goriya_StayStill:
    {
        STZ $0D90, X
        
        JSR Sprite3_CheckDamage
        JSR Sprite3_CheckTileCollision
        
        RTS
    }

; ==============================================================================

    ; *$F479B-$F4838 JUMP LOCATION
    Sprite_Eyegore:
    {
        LDA $0DA0, X : BNE Sprite_Goriya
        
        JMP Eyegore_Main
    
    Sprite_Goriya:
    
        JSL Goriya_Draw
        JSR Sprite3_CheckIfActive
        JSR Sprite3_CheckIfRecoiling
        
        LDA $0E00, X : BEQ .phlegm_inhibit
        CMP.b #$08   : BNE .phlegm_delay
        
        JSL Sprite_SpawnFirePhlegm
    
    .phlegm_delay
    .phlegm_inhibit
    
        ; Ignore the player just pressing against a wall
        LDA $0048 : CMP.b #$00 : BNE Goriya_StayStill
        
        LDY $0E20, X
        
        LDA $F0 : AND.b #$0F : BEQ Goriya_StayStill
        
        CPY.b #$84 : BNE .not_faster_goriya
        
        ORA.b #$10
    
    .not_faster_goriya
    
        TAY
        
        LDA $C761, Y : STA $0DE0, X
        
        LDA $C721, Y : STA $0D50, X
        
        LDA $C741, Y : STA $0D40, X
        
        LDA $0E70, X : BNE .tile_collision
        
        JSR Sprite3_Move
    
    .tile_collision
    
        JSR Sprite3_CheckDamage
        JSR Sprite3_CheckTileCollision
        
        INC $0E80, X : LDA $0E80, X : AND.b #$0C : ORA $0DE0, X : TAY
        
        LDA $C781, Y : STA $0DC0, X
        
        LDA $0E20, X : CMP.b #$84 : BNE .no_fire_phlegm_logic
        
        JSR Sprite3_DirectionToFacePlayer
        
        LDA $0F : ADD.b #$08 : CMP.b #$10 : BCC .in_firing_line
        LDA $0E : ADD.b #$08 : CMP.b #$10 : BCS .not_in_firing_line
    
    .in_firing_line
    
        TYA : CMP $0DE0, X : BNE .not_facing_player
        
        LDA $0D90, X : AND.b #$1F : BNE .phlegm_charge_counter_not_maxed
        
        LDA.b #$10 : STA $0E00, X
    
    .phlegm_charge_counter_not_maxed
    
        INC $0D90, X
        
        RTS
    
    .not_facing_player
    .not_in_firing_line
    .no_fire_phlegm_logic
    
        STZ $0D90, X
        
        RTS
    }
    
; ==============================================================================

    ; *$F4839-$F4863 ALTERNATE ENTRY POINT
    Eyegore_Main:
    {
        JSR Eyegore_Draw
        JSR Sprite3_CheckIfActive
        JSR Sprite3_CheckIfRecoiling
        JSR Sprite3_CheckDamage
        
        LDA $0E60, X : ORA.b #$40 : STA $0E60, X
        LDA $0CAA, X : ORA.b #$04 : STA $0CAA, X
        
        LDA $0D80, X
        
        JSL UseImplicitRegIndexedLocalJumpTable
        
        dw Eyegore_WaitUntilPlayerNearby
        dw Eyegore_OpeningEye
        dw Eyegore_ChasePlayer
        dw Eyegore_ClosingEye
    }

; ==============================================================================

    ; $F4864-$F4867 DATA
    pool Eyegore:
    {
    
    .timers
        db $60, $80, $A0, $80
    }

; ==============================================================================

    ; *$F4868-$F488A JUMP LOCATION
    Eyegore_WaitUntilPlayerNearby:
    {
        LDA $0DF0, X : BNE .delay
        
        JSR Sprite3_DirectionToFacePlayer
        
        LDA $0E : ADD.b #$30 : CMP.b #$60 : BCS .player_not_close
        
        LDA $0F : ADD.b #$30 : CMP.b #$60 : BCS .player_not_close
        
        INC $0D80, X
        
        LDA.b #$3F : STA $0DF0, X
    
    .player_not_close
    .delay
    
        RTS
    }

; ==============================================================================

    ; $F488B-$F4892 DATA
    pool Eyegore_OpeningEye:
    {
        db $02, $02, $02, $02, $01, $01, $00, $00
    }

; ==============================================================================

    ; *$F4893-$F48BA JUMP LOCATION
    Eyegore_OpeningEye:
    {
        LDA $0DF0, X : BNE .delay
        
        JSR Sprite3_DirectionToFacePlayer : TYA : STA $0DE0, X
        
        INC $0D80, X
        
        JSL GetRandomInt : AND.b #$03 : TAY
        
        LDA Eyegore.timers, Y : STA $0DF0, X
        
        RTS
    
    .delay
    
        LSR #3 : TAY
        
        LDA .animation_states, Y : STA $0DC0, X
        
        RTS
    
    }

; ==============================================================================

    ; $F48BB-$F48CA DATA
    pool Eyegore_ChasePlayer:
    {
    
    .animation_states
        db $07, $05, $02, $09, $08, $06, $03, $0A
        db $07, $05, $02, $09, $08, $06, $04, $0B
    }

; ==============================================================================

    ; *$F48CB-$F492D JUMP LOCATION
    Eyegore_ChasePlayer:
    {
        LDA $0E60, X : AND.b #$BF : STA $0E60, X
        
        LDA $0E20, X : CMP.b #$84 : BEQ .is_red_eyegore
        
        LDA $0CAA, X : AND.b #$FB : STA $0CAA, X
    
    .is_red_eyegore
    
        LDA $0DF0, X : BNE .close_eye_delay
        
        LDA.b #$3F : STA $0DF0, X
        
        INC $0D80, X
        
        STZ $0DC0, X
        
        RTS
    
    .close_eye_delay
    
        TXA : EOR $1A : AND.b #$1F : BNE .face_player_delay
        
        JSR Sprite3_DirectionToFacePlayer
        
        TYA : STA $0DE0, X
    
    .face_player_delay
    
        LDY $0DE0, X
        
        LDA Sprite3_Shake.x_speeds, Y : STA $0D50, X
        
        LDA Sprite3_Shake.y_speeds, Y : STA $0D40, X
        
        LDA $0E70, X : BNE .collided_with_tile
        
        JSR Sprite3_Move
    
    .collided_with_tile
    
        JSR Sprite3_CheckTileCollision
        
        INC $0E80, X : LDA $0E80, X : AND.b #$0C : ORA $0DE0, X : TAY
        
        LDA .animation_states, Y : STA $0DC0, X
        
        RTS
    }

; ==============================================================================

    ; $F492E-$F4935 DATA
    pool Eyegore_ClosingEye:
    {
    
    .animation_states
        db $00, $00, $01, $01, $02, $02, $02, $02
    }

; ==============================================================================

    ; *$F4936-$F494E JUMP LOCATION
    Eyegore_ClosingEye:
    {
        LDA $0DF0, X : BNE .delay
        
        STZ $0D80, X
        
        LDA.b #$60 : STA $0DF0, X
        
        RTS
    
    .delay
    
        LSR #3 : TAY
        
        LDA .animation_states, Y : STA $0DC0, X
        
        RTS
    }

; ==============================================================================

    ; $F494F-$F4ACE DATA
    pool Eyegore_Draw:
    {
    
    .oam_groups
        dw -4, -4 : db $A2, $00, $00, $02
        dw  4, -4 : db $A2, $40, $00, $02
        dw -4,  4 : db $9C, $00, $00, $02
        dw  4,  4 : db $9C, $40, $00, $02
        
        dw -4, -4 : db $A4, $00, $00, $02
        dw  4, -4 : db $A4, $40, $00, $02
        dw -4,  4 : db $9C, $00, $00, $02
        dw  4,  4 : db $9C, $40, $00, $02
        
        dw -4, -4 : db $8C, $00, $00, $02
        dw  4, -4 : db $8C, $40, $00, $02
        dw -4,  4 : db $9C, $00, $00, $02
        dw  4,  4 : db $9C, $40, $00, $02
        
        dw -4, -3 : db $8C, $00, $00, $02
        dw 12, -3 : db $8C, $40, $00, $00
        dw -4, 13 : db $BC, $00, $00, $00
        dw  4,  5 : db $8A, $40, $00, $02
        
        dw -4, -3 : db $8C, $00, $00, $00
        dw  4, -3 : db $8C, $40, $00, $02
        dw -4,  5 : db $8A, $00, $00, $02
        dw 12, 13 : db $BC, $40, $00, $00
        
        dw  0, -4 : db $AA, $00, $00, $02
        dw  0,  4 : db $A6, $00, $00, $02
        dw  0, -4 : db $AA, $00, $00, $02
        dw  0,  4 : db $A6, $00, $00, $02
        
        dw  0, -3 : db $AA, $00, $00, $02
        dw  0,  4 : db $A8, $00, $00, $02
        dw  0, -3 : db $AA, $00, $00, $02
        dw  0,  4 : db $A8, $00, $00, $02
        
        dw  0, -4 : db $AA, $40, $00, $02
        dw  0,  4 : db $A6, $40, $00, $02
        dw  0, -4 : db $AA, $40, $00, $02
        dw  0,  4 : db $A6, $40, $00, $02
        
        dw  0, -3 : db $AA, $40, $00, $02
        dw  0,  4 : db $A8, $40, $00, $02
        dw  0, -3 : db $AA, $40, $00, $02
        dw  0,  4 : db $A8, $40, $00, $02
        
        dw -4, -4 : db $8E, $00, $00, $02
        dw  4, -4 : db $8E, $40, $00, $02
        dw -4,  4 : db $9E, $00, $00, $02
        dw  4,  4 : db $9E, $40, $00, $02
        
        dw -4, -3 : db $8E, $00, $00, $02
        dw 12, -3 : db $8E, $40, $00, $00
        dw -4, 13 : db $BD, $00, $00, $00
        dw  4,  5 : db $A0, $40, $00, $02
        
        dw -4, -3 : db $8E, $00, $00, $00
        dw  4, -3 : db $8E, $40, $00, $02
        dw -4,  5 : db $A0, $00, $00, $02
        dw 12, 13 : db $BD, $40, $00, $00  
    }

; ==============================================================================

    ; *$F4ACF-$F4AF3 LOCAL
    Eyegore_Draw:
    {
        LDA.b #$00   : XBA
        LDA $0DC0, X : REP #$20 : ASL #5 : ADC.w #(.oam_groups) : STA $08
        
        SEP #$20
        
        LDA.b #$04 : JSR Sprite3_DrawMultiple
        
        ; \note I don't get this. Most other sprites don't have this check,
        ; do they?
        LDA $0F00, X : BNE .dont_draw_shadow
        
        LDA.b #$0E : JSL Sprite_DrawShadowLong.variable
    
    .dont_draw_shadow
    
        RTS
    }

; ==============================================================================

^^Your answer lies somewhere in that mumbo jumbo! Razz (Conn)

SePH



Since : 2012-06-19

Back to top Go down

Re: editing enemy damage class weaknesses/immunities

Post by SePH on Sun 27 Dec 2015 - 23:16

*$F4700-$F4720
*$F479B-$F4838
*$F4839-$F4863

etc... those are all hex addresses, so with some digging you can actually find hex values for everything he documented.


; $F4864-$F4867 DATA
   pool Eyegore:
   {
   
   .timers
       db $60, $80, $A0, $80


^^ places like these are amongst the easiest things you can edit without asm knowledge, that's basically four hex bytes only.

SePH



Since : 2012-06-19

Back to top Go down

Re: editing enemy damage class weaknesses/immunities

Post by SePH on Sun 27 Dec 2015 - 23:39

Here's an exemple... I opened the chicken file:

Code:

; ==============================================================================

    ; \unused Presumably
    ; $32540-$325BF DATA
    {
        dw -24,  -8,   8,  24, -24,  -8,   8,  24
        dw -24,  -8,   8,  24, -24,  -8,   8,  24
        dw -22,  -7,   7,  22, -22,  -7,   7,  22
        dw -22,  -7,   7,  22, -22,  -7,   7,  22
        dw -24, -24, -24, -24,  -8,  -8,  -8,  -8
        dw   8,   8,   8,   8,  24,  24,  24,  24
        dw -22, -22, -22, -22,  -7,  -7,  -7,  -7
        dw   7,   7,   7,   7,  22,  22,  22,  22
    }

    ; $325C0-$325C1 DATA
    {
    
    .h_flip
        db $40, $00
    }

; ==============================================================================

    ; *$325C2-$326B0 JUMP LOCATION
    Sprite_Chicken:
    {
        LDA $0D50, X : BEQ .x_speed_at_rest
        
        ; Change h-flip status mainly when
        ASL A : ROL A : AND.b #$01 : TAY
        
        LDA $0F50, X : AND.b #$BF : ORA .h_flip, Y : STA $0F50, X
    
    .x_speed_at_rest
    
        JSR Sprite_PrepAndDrawSingleLarge
        
        LDA $0EB0, X : BEQ .not_transmutable_to_human
        
        LDA.b #$3D : STA $0E20, X
        
        JSL Sprite_LoadProperties
        
        INC $0E30, X
        
        LDA.b #$30 : STA $0DF0, X
        
        LDA.b #$15 : STA $012E : STA $0BA0, X
        
        RTS
    
    .not_transmutable_to_human
    
        LDA $0DD0, X : CMP.b #$0A : BNE .not_being_held_by_player
        
        LDA.b #$03 : STA $0D80, X
        
        LDA $11 : BNE .inactive_game_submodule
        
        JSR Chicken_SlowAnimate
        JSR Chicken_DrawDistressMarker
        
        LDA $1A : AND.b #$0F : BNE .no_bawk_bawk
        
        JSR Chicken_BawkBawk
    
    .no_bawk_bawk
    .inactive_game_submodule
    .not_being_held_by_player
    
        JSR Sprite_CheckIfActive
        
        LDA $0DB0, X : BEQ .not_part_of_horde
        
        LDA $0F50, X : ORA.b #$10 : STA $0F50, X
        
        JSR Sprite_Move
        
        LDA.b #$0C : STA $0F70, X : STA $0BA0, X
        
        TXA : EOR $1A : AND.b #$07 : BNE .horde_damage_delay
        
        JSR Sprite_CheckDamageToPlayer
    
    .horde_damage_delay
    
        JMP Chicken_FastAnimate
    
    .not_part_of_horde
    
        LDA.b #$FF : STA $0E50, X
        
        ; Begin spawning attack chickens if the player has hit this chicken
        ; too many times.
        LDA $0DA0, X : CMP.b #$23 : BCC .anospawn_attack_chicken
        
        JSR Chicken_SpawnAvengerChicken
    
    .anospawn_attack_chicken
    
        LDA $0EA0, X : BEQ .no_new_hits_from_player
        
        STZ $0EA0, X
        
        ; If saturated, don't make this particular chicken bawk, because the
        ; others will be doing a lot of it.
        LDA $0DA0, X : CMP.b #$23 : BCS .saturated_with_hits
        
        INC $0DA0, X
        
        JSR Chicken_BawkBawk
    
    .saturated_with_hits
    
        LDA.b #$02 : STA $0D80, X
    
    .no_new_hits_from_player
    
        JSR Sprite_CheckDamageFromPlayer
        
        LDA $0D80, X : BEQ .calm
        CMP.b #$01   : BEQ Chicken_Hopping
        CMP.b #$02   : BNE .aloft
        
        JMP Chicken_FleeingPlayer
    
    .aloft
    
        JMP Chicken_Aloft
    
    .calm
    
        LDA $0DF0, X : BNE .delay_direction_change
        
        JSL GetRandomInt : AND.b #$0F
        
        PHX : TXY
        
        TAX
        
        LDA $05AAE4, X : STA $0D50, Y
        
        LDA $05AAF4, X : STA $0D40, Y
        
        PLX
        
        JSL GetRandomInt : AND.b #$1F : ADC.b #$10 : STA $0DF0, X
        
        INC $0D80, X
    
    .delay_direction_change
    
        STZ $0DC0, X
    
    ; *$326AD ALTERNATE ENTRY POINT
    shared Chicken_CheckIfLifted:
    
        JSR Sprite_CheckIfLifted
        
        RTS
    }

; ==============================================================================

    ; *$326B1-$326FB BRANCH LOCATION
    Chicken_Hopping:
    {
        TXA : EOR $1A : LSR A : BCC .skip_tile_collision_logic
        
        JSR Chicken_Move_XY_AndCheckTileCollision : BEQ .no_tile_collision
        
        STZ $0D80, X
    
    .no_tile_collision
    .skip_tile_collision_logic
    
        JSR Sprite_MoveAltitude
        
        DEC $0F80, X : DEC $0F80, X
        
        LDA $0F70, X : BPL .tick_animation_counter
        
        STZ $0F70, X
        
        LDA $0DF0, X : BNE .delay_hopping_halt
        
        LDA.b #$20 : STA $0DF0, X
        
        STZ $0D80, X
    
    .delay_hopping_halt
    
        LDA.b #$0A : STA $0F80, X
    
    .tick_animation_counter
    
    ; *$326E2 ALTERNATE ENTRY POINT
    shared Chicken_FastAnimate:
    
        INC $0E80, X
    
    ; *$326E5 ALTERNATE ENTRY POINT
    shared Chicken_SlowAnimate:
    
        INC $0E80, X : INC $0E80, X : INC $0E80, X
        
        LDA $0E80, X : LSR #4 : AND.b #$01 : STA $0DC0, X
        
        BRA Chicken_CheckIfLifted
    }

; ==============================================================================

    ; *$326FC-$3272E JUMP LOCATION
    Chicken_FleeingPlayer:
    {
        JSR Chicken_CheckIfLifted
        JSR Chicken_Move_XY_AndCheckTileCollision
        
        STZ $0F70, X
        
        TXA : EOR $1A : AND.b #$1F : BNE .flee_delay
    
    ; *$3270C ALTERNATE ENTRY POINT
    shared Chicken_SetFleePlayerSpeeds:
    
        LDA.b #$10 : JSR Sprite_ProjectSpeedTowardsPlayer
        
        LDA $00 : EOR.b #$FF : INC A : STA $0D40, X
        LDA $01 : EOR.b #$FF : INC A : STA $0D50, X
    
    .flee_delay
    
        INC $0E80, X
        
        JSR Chicken_FastAnimate
    
    ; *$32727 ALTERNATE ENTRY POINT
    shared Chicken_DrawDistressMarker:
    
        JSR Sprite_PrepOamCoord
        JSL Sprite_DrawDistressMarker
        
        RTS
    }

; ==============================================================================

    ; *$3272F-$3278D LONG
    Sprite_DrawDistressMarker:
    {
        LDA $1A : STA $06
    
    ; *$32733 ALTERNATE ENTRY POINT
    shared Sprite_CustomTimedDrawDistressMarker:
    
        ; Allocate some oam space...
        LDA.b #$10 : JSL OAM_AllocateFromRegionA
        
        LDA $06 : AND.b #$18 : BEQ .return
        
        PHX
        
        LDX.b #$03
        LDY.b #$00
    
    .next_oam_entry
    
        PHX : PHX
        
        TXA : ASL A : TAX
        
        REP #$20
        
        LDA $00 : ADD.l .x_offsets, X       : STA ($90), Y
        
        AND.w #$0100 : STA $0E
        
        LDA $02 : ADD.l .y_offsets, X : INY : STA ($90), Y
        
        ADD.w #$0010 : CMP.w #$0100 : SEP #$20 : BCC .on_screen_y
        
        LDA.b #$F0 : STA ($90), Y
    
    .on_screen_y
    
        PLX
        
        LDA.b #$83 : INY : STA ($90), Y
        LDA.b #$22 : INY : STA ($90), Y
        
        PHY : TYA : LSR #2 : TAY
        
        LDA $0F : STA ($92), Y
        
        PLY : INY
        
        PLX : DEX : BPL .next_oam_entry
        
        PLX
    
    .return
    
        RTL
    }

; ==============================================================================

    ; *$3278E-$327B7 LOCAL
    Chicken_Aloft:
    {
        JSR Chicken_Move_XYZ_AndCheckTileCollision : BEQ .no_tile_collision
        
        JSR Sprite_Invert_XY_Speeds
        JSR Sprite_Move
        JSR Sprite_Halve_XY_Speeds
        JSR Sprite_Halve_XY_Speeds
        JSR Chicken_BawkBawk
    
    .no_tile_collision
    
        DEC $0F80, X
        
        LDA $0F70, X : BPL .not_grounded
        
        STZ $0F70, X
        
        LDA.b #$02 : STA $0D80, X
        
        JMP Chicken_SetFleePlayerSpeeds:
    
    .not_grounded
    
        JMP Chicken_FastAnimate
    }
    
; ==============================================================================

    ; *$327B8-$327C2 ALTERNATE ENTRY POINT
    Chicken_Move_XYZ_AndCheckTileCollision:
    {
    
        JSR Sprite_MoveAltitude
    
    ; $327BB ALTERNATE ENTRY POINT
    shared Chicken_Move_XY_AndCheckTileCollision:
    
        JSR Sprite_Move
        JSL Sprite_CheckTileCollisionLong
        
        RTS
    }

; ==============================================================================

    ; $327C3-$327D2 DATA
    pool Sprite_DrawDistressMarker:
    {
    
    ; \task Name this pool / routine.
    .x_offsets
        dw -3,  2,  7, 11
    
    .y_offsets
        dw -5, -7, -7, -5
    }

; ==============================================================================

    ; *$327D3-$32852 LOCAL
    Chicken_SpawnAvengerChicken:
    {
        TXA : EOR $1A : AND.b #$0F : ORA $1B : BNE .spawn_delay
        
        LDA.b #$0B
        LDY.b #$0A
        
        JSL Sprite_SpawnDynamically.arbitrary : BMI .spawn_failed
        
        PHX
        
        TYX
        
        LDA.b #$1E : JSL Sound_SetSfx3PanLong
        
        PLX
        
        LDA.b #$01 : STA $0DB0, Y
        
        PHX
        
        JSL GetRandomInt : STA $0F : AND.b #$02 : BEQ .vertical_entry_point
        
        LDA $0F : ADC $E2    : STA $0D10, Y
        LDA $E3 : ADC.b #$00 : STA $0D30, Y
        
        LDA $0F : AND.b #$01 : TAX
        
        LDA $9F3C, X : ADC $E8    : STA $0D00, Y
        LDA $E9      : ADC.b #$00 : STA $0D20, Y
        
        BRA .set_velocity
    
    .vertical_entry_point
    
        LDA $0F : ADC $E8    : STA $0D00, Y
        LDA $E9 : ADC.b #$00 : STA $0D20, Y
        
        LDA $0F : AND.b #$01 : TAX
        
        LDA $9F3C, X : ADC $E2    : STA $0D10, Y
        LDA $E3      : ADC.b #$00 : STA $0D30, Y
    
    .set_velocity
    
        TYX
        
        LDA.b #$20 : JSR Sprite_ApplySpeedTowardsPlayer
        
        PLX
    
    ; *$3284C ALTERNATE ENTRY POINT
    shared Chicken_BawkBawk:
    
        LDA.b #$30 : JSL Sound_SetSfx2PanLong
    
    .spawn_failed
    .spawn_delay
    
        RTS
    }

; ==============================================================================

Found this particularly interesting part:

       ; Begin spawning attack chickens if the player has hit this chicken
       ; too many times.
       LDA $0DA0, X : CMP.b #$23 : BCC .anospawn_attack_chicken


Isolated the 0x32649 hex address as the number of times you need to hit them before their special attack...

...and then changed the default value of 23 to 01 instead, just for fun...



^^and there's the results of less then 20 minutes of digging! Blue1

SePH



Since : 2012-06-19

Back to top Go down

Re: editing enemy damage class weaknesses/immunities

Post by wizzrobemaster on Mon 28 Dec 2015 - 2:45

that does seem as complicated as the beamos edit.

wizzrobemaster
Crystal Maiden
Crystal Maiden

Since : 2015-01-04

Back to top Go down

Re: editing enemy damage class weaknesses/immunities

Post by Puzzledude on Mon 28 Dec 2015 - 5:44

wizrobemaster wrote:how difficult is it to edit the damage class of enemies such as red eyegores and koppies (which can only be killed by arrows) to allow them to get killed by sword strikes or other attacks?  is there multiple sprite data that needs to be edited or can it be a few hex codes?
You can not just make a sprite which is vulnerable only by arrows to suddenly be vulnerable to sword. This means pretty much the same as before with Beamos (reprograming the sprite).
avatar
Puzzledude



Since : 2012-06-20

Back to top Go down

Re: editing enemy damage class weaknesses/immunities

Post by assassin17 on Mon 28 Dec 2015 - 7:30

you asked the same thing about damage class editing here:
[You must be registered and logged in to see this link.]

what specifically about the replies given in that topic didn't work?
avatar
assassin17
Witch
Witch

Since : 2015-03-14

http://assassin17.brinkster.net/

Back to top Go down

Re: editing enemy damage class weaknesses/immunities

Post by wizzrobemaster on Tue 9 Feb 2016 - 13:18

I found an easier way how to deal with trinexx: change the damage class of the somarian block to 15. that way you do not have to worry about crystal switches getting destroyed. if you find 15 too strong then set the class to one that has a damage half to the fighter sword. it also works against most enemies that require a specific item to kill them and it works against agahnim and ganon when he is invisible. it will also destroy small blade traps. of the bosses not affected, only masked helmasaur king and wart when the fuzzies are attached to him. by changing this damage class, the cane of somaria becomes a lot more versatile. the downside of course is that enemies will not flinch.

wizzrobemaster
Crystal Maiden
Crystal Maiden

Since : 2015-01-04

Back to top Go down

View previous topic View next topic Back to top


 
Permissions in this forum:
You cannot reply to topics in this forum