Advertisement
Squeetz

atk00

Nov 25th, 2018
1,696
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 7.77 KB | None | 0 0
  1. .thumb
  2.  
  3. .global atk00_attackcanceler
  4.  
  5. .include "equs.txt"
  6.  
  7. .equ AtkCanceller_UnableToUseMove, 0x192D4
  8. .equ abilityBattleEffects, 0x19F18
  9. .equ check_obedience_before_attack, 0x1D438
  10. .equ PressurePPLose, 0x16EC8
  11. .equ b_movescr_stack_push_cursor, 0x17544
  12. .equ b_history__record_ability_usage_of_player, 0xC71D0
  13. .equ IsTwoTurnsMove, 0x2A1C0
  14. .equ CancelMultiTurnMove, 0x172E8
  15.  
  16. .org 0x1D760
  17. atk00_attackcanceler:
  18.     push {r4-r7, lr}
  19.     mov r7, r9
  20.     mov r6, r8
  21.     push {r6-r7}
  22.     sub sp, sp, #0x4
  23.     ldr r0, =(gBattleOutcome)
  24.     ldrb r0, [r0]
  25.     cmp r0, #0x0
  26.     beq loc_1D784
  27.     ldr r1, =(gCurrentActionFuncId)
  28.     mov r0, #12
  29.     strb r0, [r1]
  30.     b loc_1DAFC
  31.  
  32. .align 2, 0
  33. .pool
  34.  
  35. loc_1D784:
  36.     ldr r2, =(battle_data)
  37.     ldr r0, =(b_attacker)
  38.     ldrb r1, [r0]
  39.     mov r0, #0x58
  40.     mul r0, r1
  41.     add r0, r0, r2
  42.     ldrh r0, [r0, #0x28]            @battle_data.current_hp
  43.     cmp r0, #0x0
  44.     bne loc_1D7C8
  45.     ldr r2, =(gHitMarker)
  46.     ldr r1, [r2]
  47.     mov r0, #0x80
  48.     lsl r0, r0, #0x2                @0x200, HITMARKER_NO_ATTACKSTRING
  49.     and r0, r1
  50.     cmp r0, #0x0
  51.     bne loc_1D7C8
  52.     mov r0, #0x80
  53.     lsl r0, r0, #0xC                @0x80000, HITMARKER_UNABLE_TO_USE_MOVE
  54.     orr r1, r0
  55.     str r1, [r2]
  56.     ldr r1, =(b_movescr_cursor)
  57.     ldr r0, =(BattleScript_MoveEnd)
  58.     b loc_1DAFA
  59.    
  60. .align 2, 0
  61. .pool
  62.  
  63. loc_1D7C8:
  64.     bl AtkCanceller_UnableToUseMove
  65.     lsl r0, r0, #0x18
  66.     lsr r2, r0, #0x18
  67.     cmp r2, #0x0
  68.     beq loc_1D7D6
  69.     b loc_1DAFC
  70.    
  71. loc_1D7D6:
  72.     ldr r0, =(b_defender)
  73.     ldrb r1, [r0]
  74.     str r2, [sp]
  75.     mov r0, #ABILITYEFFECT_MOVES_BLOCK
  76.     mov r2, #0x0
  77.     mov r3, #0x0
  78.     bl abilityBattleEffects
  79.     lsl r0, r0, #0x18
  80.     cmp r0, #0x0
  81.     beq loc_1D7EE
  82.     b loc_1DAFC
  83.    
  84. loc_1D7EE:
  85.     ldr r4, =(battle_data)
  86.     ldr r0, =(b_moveset_index)
  87.     ldrb r1, [r0]
  88.     ldr r3, =(b_attacker)
  89.     ldrb r2, [r3]
  90.     mov r0, #0x58
  91.     mul r2, r0
  92.     add r1, r1, r2
  93.     mov r0, r4
  94.     add r0, #0x24                   @battle_data.current_pp
  95.     add r1, r1, r0
  96.     ldrb r0, [r1]
  97.     ldr r5, =(gHitMarker)
  98.     cmp r0, #0x0
  99.     bne loc_1D86C
  100.     ldr r0, =(b_move_to_execute_A)
  101.     ldrh r0, [r0]
  102.     cmp r0, #STRUGGLE
  103.     beq loc_1D86C
  104.     ldr r0, [r5]
  105.     ldr r1, =(0x800200)     @HITMARKER_x800000 | HITMARKER_NO_ATTACKSTRING
  106.     and r0, r1
  107.     cmp r0, #0x0
  108.     bne loc_1D86C
  109.     mov r0, r4
  110.     add r0, #0x50                   @battle_data.status2
  111.     add r0, r2, r0
  112.     ldr r0, [r0]
  113.     mov r1, #0x80
  114.     lsl r1, r1, #0x5                @0x1000, multi_turn_flag
  115.     and r0, r1
  116.     cmp r0, #0x0
  117.     bne loc_1D86C
  118.     ldr r1, =(b_movescr_cursor)
  119.     ldr r0, =(BattleScript_NoPPForMove)
  120.     str r0, [r1]
  121.     ldr r2, =(gMoveResultFlags)
  122.     ldrb r0, [r2]
  123.     mov r1, #MOVE_RESULT_MISSED
  124.     orr r0, r1
  125.     strb r0, [r2]
  126.     b loc_1DAFC
  127.    
  128. .align 2, 0
  129. .pool
  130.  
  131. loc_1D86C:
  132.     ldr r0, [r5]
  133.     ldr r1, =(0xFF7FFFFF)
  134.     and r0, r1
  135.     str r0, [r5]                    @clears HITMARKER_x800000
  136.     mov r6, #0x80
  137.     lsl r6, r6, #0x12               @0x2000000, HITMARKER_OBEYS
  138.     and r0, r6
  139.     cmp r0, #0x0
  140.     bne loc_1D8C4
  141.     ldrb r1, [r3]
  142.     mov r0, #0x58
  143.     mul r0, r1
  144.     mov r1, r4
  145.     add r1, #0x50                   @battle_data.status2
  146.     add r0, r0, r1
  147.     ldr r0, [r0]
  148.     mov r1, #0x80
  149.     lsl r1, r1, #0x5                @0x1000, multi_turn_flag
  150.     and r0, r1
  151.     cmp r0, #0x0
  152.     bne loc_1D8C4
  153.     bl check_obedience_before_attack
  154.     lsl r0, r0, #0x18
  155.     lsr r2, r0, #0x18
  156.     cmp r2, #0x0
  157.     beq loc_1D8C4
  158.     cmp r2, #0x2
  159.     bne loc_1D8B4
  160.     ldr r0, [r5]
  161.     orr r0, r6
  162.     str r0, [r5]
  163.     b loc_1DAFC
  164.    
  165. .align 2, 0
  166. .pool
  167.  
  168. loc_1D8B4:
  169.     ldr r0, =(gMoveResultFlags)
  170.     ldrb r1, [r0]
  171.     mov r2, #MOVE_RESULT_MISSED
  172.     orr r1, r2
  173.     strb r1, [r0]
  174.     b loc_1DAFC
  175.    
  176. .align 2, 0
  177. .pool
  178.  
  179. loc_1D8C4:
  180.     ldr r2, =(gHitMarker)
  181.     ldr r0, [r2]
  182.     mov r1, #0x80
  183.     lsl r1, r1, #0x12               @0x2000000, HITMARKER_OBEYS
  184.     orr r0, r1
  185.     str r0, [r2]
  186.     ldr r2, =(protect_structs)
  187.     ldr r1, =(b_defender)
  188.     ldrb r3, [r1]
  189.     lsl r0, r3, #0x4
  190.     add r0, r0, r2
  191.     ldrb r0, [r0]
  192.     lsl r0, r0, #0x1B
  193.     mov r8, r1
  194.     mov r9, r2
  195.     cmp r0, #0x0
  196.     bge loc_1D94C
  197.     ldr r2, =(move_data)
  198.     ldr r0, =(b_move_to_execute_A)
  199.     ldrh r1, [r0]
  200.     lsl r0, r1, #0x1
  201.     add r0, r0, r1
  202.     lsl r0, r0, #0x2
  203.     add r0, r0, r2
  204.     ldrb r1, [r0, #0x8]             @move.flags
  205.     mov r0, #MOVEFLAG_MAGIC_COAT
  206.     and r0, r1
  207.     cmp r0, #0x0
  208.     beq loc_1D94C
  209.     ldr r0, =(b_attacker)
  210.     ldrb r0, [r0]
  211.     ldr r2, =(MAGIC_COAT)
  212.     mov r1, r3
  213.     bl PressurePPLose
  214.     mov r0, r8
  215.     ldrb r1, [r0]
  216.     lsl r1, r1, #0x4
  217.     add r1, r9
  218.     ldrb r2, [r1]
  219.     mov r0, #0x11
  220.     neg r0, r0
  221.     and r0, r2
  222.     strb r0, [r1]
  223.     bl b_movescr_stack_push_cursor
  224.     ldr r1, =(b_movescr_cursor)
  225.     ldr r0, =(BattleScript_MagicCoatBounce)
  226.     b loc_1DAFA
  227.    
  228. .align 2, 0
  229. .pool
  230.  
  231. loc_1D94C:
  232.     mov r2, #0x0
  233.     ldr r0, =(b_num_active_sides)
  234.     ldrb r0, [r0]
  235.     cmp r2, r0
  236.     bge loc_1D98E
  237.     ldr r6, =(protect_structs)
  238.     ldr r1, =(move_data)
  239.     mov r12, r1
  240.     mov r5, r0
  241.     ldr r7, =(gTurnOrder)
  242.    
  243. loc_1D960:
  244.     add r4, r2, r7
  245.     ldrb r3, [r4]
  246.     lsl r0, r3, #0x4
  247.     add r0, r0, r6
  248.     ldrb r0, [r0]
  249.     lsl r0, r0, #0x1A
  250.     cmp r0, #0x0
  251.     bge loc_1D988
  252.     ldr r0, =(b_move_to_execute_A)
  253.     ldrh r1, [r0]
  254.     lsl r0, r1, #0x1
  255.     add r0, r0, r1
  256.     lsl r0, r0, #0x2
  257.     add r0, r12
  258.     ldrb r1, [r0, #0x8]             @move.flags
  259.     mov r0, #MOVEFLAG_SNATCH
  260.     and r0, r1
  261.     cmp r0, #0x0
  262.     beq loc_1D988
  263.     b loc_1DAB4
  264.    
  265. loc_1D988:
  266.     add r2, #0x1
  267.     cmp r2, r5
  268.     blt loc_1D960
  269.    
  270. loc_1D98E:
  271.     ldr r0, =(gSpecialStatuses)
  272.     mov r1, r8
  273.     ldrb r2, [r1]
  274.     lsl r1, r2, #0x2
  275.     add r1, r1, r2
  276.     lsl r1, r1, #0x2
  277.     add r1, r1, r0
  278.     ldrb r3, [r1]
  279.     lsl r0, r3, #0x1E
  280.     cmp r0, #0x0
  281.     bge loc_1D9EC
  282.     mov r0, #0x3
  283.     neg r0, r0
  284.     and r0, r3
  285.     strb r0, [r1]
  286.     ldr r4, =(b_last_copied_ability)
  287.     mov r0, #LIGHTNINGROD
  288.     strb r0, [r4]
  289.     bl b_movescr_stack_push_cursor
  290.     ldr r1, =(b_movescr_cursor)
  291.     ldr r0, =(BattleScript_TookAttack)
  292.     str r0, [r1]
  293.     mov r1, r8
  294.     ldrb r0, [r1]
  295.     ldrb r1, [r4]
  296.     bl b_history__record_ability_usage_of_player
  297.     b loc_1DAFC
  298.    
  299. .align 2, 0
  300. .pool
  301.  
  302. loc_1D9EC:
  303.     lsl r0, r2, #0x4
  304.     add r0, r9
  305.     ldrb r0, [r0]
  306.     lsl r0, r0, #0x1F
  307.     cmp r0, #0x0
  308.     bne loc_1D9FA
  309.     b loc_1DAF4
  310.    
  311. loc_1D9FA:
  312.     ldr r1, =(move_data)
  313.     ldr r2, =(b_move_to_execute_A)
  314.     ldrh r3, [r2]
  315.     lsl r0, r3, #0x1
  316.     add r0, r0, r3
  317.     lsl r0, r0, #0x2
  318.     add r0, r0, r1
  319.     ldrb r1, [r0, #0x8]             @move.flags
  320.     mov r0, #MOVEFLAG_PROTECT
  321.     and r0, r1
  322.     mov r4, r2
  323.     cmp r0, #0x0
  324.     beq loc_1DAF4
  325.     cmp r3, #CURSE
  326.     bne loc_1DA38
  327.     ldr r2, =(battle_data)
  328.     ldr r0, =(b_attacker)
  329.     ldrb r1, [r0]
  330.     mov r0, #0x58
  331.     mul r0, r1
  332.     add r1, r0, r2
  333.     mov r0, r1
  334.     add r0, #0x21                   @battle_data.type1
  335.     ldrb r0, [r0]
  336.     cmp r0, #ghost_type
  337.     beq loc_1DA38
  338.     mov r0, r1
  339.     add r0, #0x22                   @battle_data.type2
  340.     ldrb r0, [r0]
  341.     cmp r0, #ghost_type
  342.     bne loc_1DAF4
  343.    
  344. loc_1DA38:
  345.     ldrh r0, [r4]
  346.     bl IsTwoTurnsMove
  347.     lsl r0, r0, #0x18
  348.     cmp r0, #0x0
  349.     beq loc_1DA5E
  350.     ldr r1, =(battle_data)
  351.     ldr r0, =(b_attacker)
  352.     ldrb r2, [r0]
  353.     mov r0, #0x58
  354.     mul r0, r2
  355.     add r1, #0x50                   @battle_data.status2
  356.     add r0, r0, r1
  357.     ldr r0, [r0]
  358.     mov r1, #0x80
  359.     lsl r1, r1, #0x5                @0x1000, multi_turn_flag
  360.     and r0, r1
  361.     cmp r0, #0x0
  362.     beq loc_1DAF4
  363.    
  364. loc_1DA5E:
  365.     ldr r0, =(b_attacker)
  366.     ldrb r0, [r0]
  367.     bl CancelMultiTurnMove
  368.     ldr r2, =(gMoveResultFlags)
  369.     ldrb r0, [r2]
  370.     mov r1, #MOVE_RESULT_MISSED
  371.     orr r0, r1
  372.     strb r0, [r2]
  373.     ldr r1, =(gLastLandedMoves)
  374.     ldr r3, =(b_defender)
  375.     ldrb r0, [r3]
  376.     lsl r0, r0, #0x1
  377.     add r0, r0, r1
  378.     mov r2, #0x0
  379.     strh r2, [r0]
  380.     ldr r1, =(gLastHitByType)
  381.     ldrb r0, [r3]
  382.     lsl r0, r0, #0x1
  383.     add r0, r0, r1
  384.     strh r2, [r0]
  385.     ldr r1, =(gBattleCommunication)
  386.     mov r0, #0x1
  387.     strb r0, [r1, #0x6]
  388.     b loc_1DAF4
  389.    
  390. .align 2, 0
  391. .pool
  392.  
  393. loc_1DAB4:
  394.     ldr r0, =(b_attacker)
  395.     ldrb r0, [r0]
  396.     ldr r2, =(SNATCH)
  397.     mov r1, r3
  398.     bl PressurePPLose
  399.     ldrb r1, [r4]
  400.     lsl r1, r1, #0x4
  401.     add r1, r1, r6
  402.     ldrb r2, [r1]
  403.     mov r0, #0x21
  404.     neg r0, r0
  405.     and r0, r2
  406.     strb r0, [r1]
  407.     ldr r1, =(gBattleScripting)
  408.     ldrb r0, [r4]
  409.     strb r0, [r1, #0x17]
  410.     bl b_movescr_stack_push_cursor
  411.     ldr r1, =(b_movescr_cursor)
  412.     ldr r0, =(BattleScript_SnatchedMove)
  413.     b loc_1DAFA
  414.    
  415. .align 2, 0
  416. .pool
  417.  
  418. loc_1DAF4:
  419.     ldr r1, =(b_movescr_cursor)
  420.     ldr r0, [r1]
  421.     add r0, #0x1
  422.    
  423. loc_1DAFA:
  424.     str r0, [r1]
  425.    
  426. loc_1DAFC:
  427.     add sp, sp, #0x4
  428.     pop {r3-r4}
  429.     mov r8, r3
  430.     mov r9, r4
  431.     pop {r4-r7}
  432.     pop {r0}
  433.     bx r0
  434.    
  435. .align 2, 0
  436. .pool
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement