Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .thumb
- .global atk00_attackcanceler
- .include "equs.txt"
- .equ AtkCanceller_UnableToUseMove, 0x192D4
- .equ abilityBattleEffects, 0x19F18
- .equ check_obedience_before_attack, 0x1D438
- .equ PressurePPLose, 0x16EC8
- .equ b_movescr_stack_push_cursor, 0x17544
- .equ b_history__record_ability_usage_of_player, 0xC71D0
- .equ IsTwoTurnsMove, 0x2A1C0
- .equ CancelMultiTurnMove, 0x172E8
- .org 0x1D760
- atk00_attackcanceler:
- push {r4-r7, lr}
- mov r7, r9
- mov r6, r8
- push {r6-r7}
- sub sp, sp, #0x4
- ldr r0, =(gBattleOutcome)
- ldrb r0, [r0]
- cmp r0, #0x0
- beq loc_1D784
- ldr r1, =(gCurrentActionFuncId)
- mov r0, #12
- strb r0, [r1]
- b loc_1DAFC
- .align 2, 0
- .pool
- loc_1D784:
- ldr r2, =(battle_data)
- ldr r0, =(b_attacker)
- ldrb r1, [r0]
- mov r0, #0x58
- mul r0, r1
- add r0, r0, r2
- ldrh r0, [r0, #0x28] @battle_data.current_hp
- cmp r0, #0x0
- bne loc_1D7C8
- ldr r2, =(gHitMarker)
- ldr r1, [r2]
- mov r0, #0x80
- lsl r0, r0, #0x2 @0x200, HITMARKER_NO_ATTACKSTRING
- and r0, r1
- cmp r0, #0x0
- bne loc_1D7C8
- mov r0, #0x80
- lsl r0, r0, #0xC @0x80000, HITMARKER_UNABLE_TO_USE_MOVE
- orr r1, r0
- str r1, [r2]
- ldr r1, =(b_movescr_cursor)
- ldr r0, =(BattleScript_MoveEnd)
- b loc_1DAFA
- .align 2, 0
- .pool
- loc_1D7C8:
- bl AtkCanceller_UnableToUseMove
- lsl r0, r0, #0x18
- lsr r2, r0, #0x18
- cmp r2, #0x0
- beq loc_1D7D6
- b loc_1DAFC
- loc_1D7D6:
- ldr r0, =(b_defender)
- ldrb r1, [r0]
- str r2, [sp]
- mov r0, #ABILITYEFFECT_MOVES_BLOCK
- mov r2, #0x0
- mov r3, #0x0
- bl abilityBattleEffects
- lsl r0, r0, #0x18
- cmp r0, #0x0
- beq loc_1D7EE
- b loc_1DAFC
- loc_1D7EE:
- ldr r4, =(battle_data)
- ldr r0, =(b_moveset_index)
- ldrb r1, [r0]
- ldr r3, =(b_attacker)
- ldrb r2, [r3]
- mov r0, #0x58
- mul r2, r0
- add r1, r1, r2
- mov r0, r4
- add r0, #0x24 @battle_data.current_pp
- add r1, r1, r0
- ldrb r0, [r1]
- ldr r5, =(gHitMarker)
- cmp r0, #0x0
- bne loc_1D86C
- ldr r0, =(b_move_to_execute_A)
- ldrh r0, [r0]
- cmp r0, #STRUGGLE
- beq loc_1D86C
- ldr r0, [r5]
- ldr r1, =(0x800200) @HITMARKER_x800000 | HITMARKER_NO_ATTACKSTRING
- and r0, r1
- cmp r0, #0x0
- bne loc_1D86C
- mov r0, r4
- add r0, #0x50 @battle_data.status2
- add r0, r2, r0
- ldr r0, [r0]
- mov r1, #0x80
- lsl r1, r1, #0x5 @0x1000, multi_turn_flag
- and r0, r1
- cmp r0, #0x0
- bne loc_1D86C
- ldr r1, =(b_movescr_cursor)
- ldr r0, =(BattleScript_NoPPForMove)
- str r0, [r1]
- ldr r2, =(gMoveResultFlags)
- ldrb r0, [r2]
- mov r1, #MOVE_RESULT_MISSED
- orr r0, r1
- strb r0, [r2]
- b loc_1DAFC
- .align 2, 0
- .pool
- loc_1D86C:
- ldr r0, [r5]
- ldr r1, =(0xFF7FFFFF)
- and r0, r1
- str r0, [r5] @clears HITMARKER_x800000
- mov r6, #0x80
- lsl r6, r6, #0x12 @0x2000000, HITMARKER_OBEYS
- and r0, r6
- cmp r0, #0x0
- bne loc_1D8C4
- ldrb r1, [r3]
- mov r0, #0x58
- mul r0, r1
- mov r1, r4
- add r1, #0x50 @battle_data.status2
- add r0, r0, r1
- ldr r0, [r0]
- mov r1, #0x80
- lsl r1, r1, #0x5 @0x1000, multi_turn_flag
- and r0, r1
- cmp r0, #0x0
- bne loc_1D8C4
- bl check_obedience_before_attack
- lsl r0, r0, #0x18
- lsr r2, r0, #0x18
- cmp r2, #0x0
- beq loc_1D8C4
- cmp r2, #0x2
- bne loc_1D8B4
- ldr r0, [r5]
- orr r0, r6
- str r0, [r5]
- b loc_1DAFC
- .align 2, 0
- .pool
- loc_1D8B4:
- ldr r0, =(gMoveResultFlags)
- ldrb r1, [r0]
- mov r2, #MOVE_RESULT_MISSED
- orr r1, r2
- strb r1, [r0]
- b loc_1DAFC
- .align 2, 0
- .pool
- loc_1D8C4:
- ldr r2, =(gHitMarker)
- ldr r0, [r2]
- mov r1, #0x80
- lsl r1, r1, #0x12 @0x2000000, HITMARKER_OBEYS
- orr r0, r1
- str r0, [r2]
- ldr r2, =(protect_structs)
- ldr r1, =(b_defender)
- ldrb r3, [r1]
- lsl r0, r3, #0x4
- add r0, r0, r2
- ldrb r0, [r0]
- lsl r0, r0, #0x1B
- mov r8, r1
- mov r9, r2
- cmp r0, #0x0
- bge loc_1D94C
- ldr r2, =(move_data)
- ldr r0, =(b_move_to_execute_A)
- ldrh r1, [r0]
- lsl r0, r1, #0x1
- add r0, r0, r1
- lsl r0, r0, #0x2
- add r0, r0, r2
- ldrb r1, [r0, #0x8] @move.flags
- mov r0, #MOVEFLAG_MAGIC_COAT
- and r0, r1
- cmp r0, #0x0
- beq loc_1D94C
- ldr r0, =(b_attacker)
- ldrb r0, [r0]
- ldr r2, =(MAGIC_COAT)
- mov r1, r3
- bl PressurePPLose
- mov r0, r8
- ldrb r1, [r0]
- lsl r1, r1, #0x4
- add r1, r9
- ldrb r2, [r1]
- mov r0, #0x11
- neg r0, r0
- and r0, r2
- strb r0, [r1]
- bl b_movescr_stack_push_cursor
- ldr r1, =(b_movescr_cursor)
- ldr r0, =(BattleScript_MagicCoatBounce)
- b loc_1DAFA
- .align 2, 0
- .pool
- loc_1D94C:
- mov r2, #0x0
- ldr r0, =(b_num_active_sides)
- ldrb r0, [r0]
- cmp r2, r0
- bge loc_1D98E
- ldr r6, =(protect_structs)
- ldr r1, =(move_data)
- mov r12, r1
- mov r5, r0
- ldr r7, =(gTurnOrder)
- loc_1D960:
- add r4, r2, r7
- ldrb r3, [r4]
- lsl r0, r3, #0x4
- add r0, r0, r6
- ldrb r0, [r0]
- lsl r0, r0, #0x1A
- cmp r0, #0x0
- bge loc_1D988
- ldr r0, =(b_move_to_execute_A)
- ldrh r1, [r0]
- lsl r0, r1, #0x1
- add r0, r0, r1
- lsl r0, r0, #0x2
- add r0, r12
- ldrb r1, [r0, #0x8] @move.flags
- mov r0, #MOVEFLAG_SNATCH
- and r0, r1
- cmp r0, #0x0
- beq loc_1D988
- b loc_1DAB4
- loc_1D988:
- add r2, #0x1
- cmp r2, r5
- blt loc_1D960
- loc_1D98E:
- ldr r0, =(gSpecialStatuses)
- mov r1, r8
- ldrb r2, [r1]
- lsl r1, r2, #0x2
- add r1, r1, r2
- lsl r1, r1, #0x2
- add r1, r1, r0
- ldrb r3, [r1]
- lsl r0, r3, #0x1E
- cmp r0, #0x0
- bge loc_1D9EC
- mov r0, #0x3
- neg r0, r0
- and r0, r3
- strb r0, [r1]
- ldr r4, =(b_last_copied_ability)
- mov r0, #LIGHTNINGROD
- strb r0, [r4]
- bl b_movescr_stack_push_cursor
- ldr r1, =(b_movescr_cursor)
- ldr r0, =(BattleScript_TookAttack)
- str r0, [r1]
- mov r1, r8
- ldrb r0, [r1]
- ldrb r1, [r4]
- bl b_history__record_ability_usage_of_player
- b loc_1DAFC
- .align 2, 0
- .pool
- loc_1D9EC:
- lsl r0, r2, #0x4
- add r0, r9
- ldrb r0, [r0]
- lsl r0, r0, #0x1F
- cmp r0, #0x0
- bne loc_1D9FA
- b loc_1DAF4
- loc_1D9FA:
- ldr r1, =(move_data)
- ldr r2, =(b_move_to_execute_A)
- ldrh r3, [r2]
- lsl r0, r3, #0x1
- add r0, r0, r3
- lsl r0, r0, #0x2
- add r0, r0, r1
- ldrb r1, [r0, #0x8] @move.flags
- mov r0, #MOVEFLAG_PROTECT
- and r0, r1
- mov r4, r2
- cmp r0, #0x0
- beq loc_1DAF4
- cmp r3, #CURSE
- bne loc_1DA38
- ldr r2, =(battle_data)
- ldr r0, =(b_attacker)
- ldrb r1, [r0]
- mov r0, #0x58
- mul r0, r1
- add r1, r0, r2
- mov r0, r1
- add r0, #0x21 @battle_data.type1
- ldrb r0, [r0]
- cmp r0, #ghost_type
- beq loc_1DA38
- mov r0, r1
- add r0, #0x22 @battle_data.type2
- ldrb r0, [r0]
- cmp r0, #ghost_type
- bne loc_1DAF4
- loc_1DA38:
- ldrh r0, [r4]
- bl IsTwoTurnsMove
- lsl r0, r0, #0x18
- cmp r0, #0x0
- beq loc_1DA5E
- ldr r1, =(battle_data)
- ldr r0, =(b_attacker)
- ldrb r2, [r0]
- mov r0, #0x58
- mul r0, r2
- add r1, #0x50 @battle_data.status2
- add r0, r0, r1
- ldr r0, [r0]
- mov r1, #0x80
- lsl r1, r1, #0x5 @0x1000, multi_turn_flag
- and r0, r1
- cmp r0, #0x0
- beq loc_1DAF4
- loc_1DA5E:
- ldr r0, =(b_attacker)
- ldrb r0, [r0]
- bl CancelMultiTurnMove
- ldr r2, =(gMoveResultFlags)
- ldrb r0, [r2]
- mov r1, #MOVE_RESULT_MISSED
- orr r0, r1
- strb r0, [r2]
- ldr r1, =(gLastLandedMoves)
- ldr r3, =(b_defender)
- ldrb r0, [r3]
- lsl r0, r0, #0x1
- add r0, r0, r1
- mov r2, #0x0
- strh r2, [r0]
- ldr r1, =(gLastHitByType)
- ldrb r0, [r3]
- lsl r0, r0, #0x1
- add r0, r0, r1
- strh r2, [r0]
- ldr r1, =(gBattleCommunication)
- mov r0, #0x1
- strb r0, [r1, #0x6]
- b loc_1DAF4
- .align 2, 0
- .pool
- loc_1DAB4:
- ldr r0, =(b_attacker)
- ldrb r0, [r0]
- ldr r2, =(SNATCH)
- mov r1, r3
- bl PressurePPLose
- ldrb r1, [r4]
- lsl r1, r1, #0x4
- add r1, r1, r6
- ldrb r2, [r1]
- mov r0, #0x21
- neg r0, r0
- and r0, r2
- strb r0, [r1]
- ldr r1, =(gBattleScripting)
- ldrb r0, [r4]
- strb r0, [r1, #0x17]
- bl b_movescr_stack_push_cursor
- ldr r1, =(b_movescr_cursor)
- ldr r0, =(BattleScript_SnatchedMove)
- b loc_1DAFA
- .align 2, 0
- .pool
- loc_1DAF4:
- ldr r1, =(b_movescr_cursor)
- ldr r0, [r1]
- add r0, #0x1
- loc_1DAFA:
- str r0, [r1]
- loc_1DAFC:
- add sp, sp, #0x4
- pop {r3-r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
- .pool
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement