Advertisement
Squeetz

atk04

Nov 24th, 2018
1,971
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 3.80 KB | None | 0 0
  1. .thumb
  2.  
  3. .global atk04_critcalc
  4.  
  5. .include "equs.txt"
  6.  
  7. .equ itemid_get_x12, 0x9A924
  8. .equ rand, 0x44EC8
  9. .equ __umodsi3, 0x1E4684
  10. .equ sub_EB2E0, 0xEB2E0
  11.  
  12. .org 0x1E408
  13.     push {r4-r7, lr}
  14.     ldr r1, =(battle_data)
  15.     ldr r0, =(b_attacker)
  16.     ldrb r2, [r0]
  17.     mov r0, #0x58
  18.     mul r0, r2
  19.     add r0, r0, r1
  20.     ldrh r0, [r0, #0x2E]            @battle_data.held_item
  21.     cmp r0, #ENIGMA_BERRY
  22.     bne loc_1E438
  23.     ldr r1, =(sav1_copied_berries_pbs)
  24.     lsl r0, r2, #0x3
  25.     sub r0, r0, r2
  26.     lsl r0, r0, #0x2
  27.     add r0, r0, r1
  28.     ldrb r6, [r0, #0x7]
  29.     b loc_1E440
  30.    
  31. .align 2, 0
  32. .pool
  33.  
  34. loc_1E438:
  35.     bl itemid_get_x12
  36.     lsl r0, r0, #0x18
  37.     lsr r6, r0, #0x18
  38.    
  39. loc_1E440:
  40.     ldr r1, =(gPotentialItemEffectBattler)
  41.     ldr r3, =(b_attacker)
  42.     ldrb r0, [r3]
  43.     strb r0, [r1]
  44.    
  45.     ldr r4, =(battle_data)
  46.     ldrb r1, [r3]
  47.     mov r0, #0x58
  48.     mov r7, r1
  49.     mul r7, r0
  50.     mov r0, r4
  51.     add r0, #0x50
  52.     add r0, r7, r0
  53.     ldr r0, [r0]
  54.     mov r1, #0x80
  55.     lsl r1, r1, #0xD                @0x100000, focus_energy
  56.     and r0, r1
  57.     neg r0, r0
  58.     asr r5, r0, #0x1F
  59.     mov r0, #0x2
  60.     and r5, r0
  61.     ldr r2, =(move_data)
  62.     ldr r0, =(b_move_to_execute_A)
  63.     ldrh r1, [r0]
  64.     lsl r0, r1, #0x1
  65.     add r0, r0, r1
  66.     lsl r0, r0, #0x2
  67.     add r0, r0, r2
  68.     ldrb r1, [r0]
  69.     mov r12, r3
  70.     cmp r1, #MOVE_EFFECT_HIGH_CRIT_CHANCE
  71.     bne loc_1E480
  72.     add r5, #0x1
  73.    
  74. loc_1E480:
  75.     mov r0, r5
  76.     cmp r1, #MOVE_EFFECT_SKY_ATTACK
  77.     bne loc_1E488
  78.     add r0, #0x1
  79.    
  80. loc_1E488:
  81.     cmp r1, #MOVE_EFFECT_BLAZE_KICK
  82.     bne loc_1E48E
  83.     add r0, #0x1
  84.    
  85. loc_1E48E:
  86.     mov r2, r0
  87.     cmp r1, #MOVE_EFFECT_POISON_TAIL
  88.     bne loc_1E496
  89.     add r2, #0x1
  90.    
  91. loc_1E496:
  92.     mov r1, #0x0
  93.     cmp r6, #HOLD_EFFECT_LUCKY_PUNCH
  94.     bne loc_1E4A6
  95.     add r0, r7, r4
  96.     ldrh r0, [r0]
  97.     cmp r0, #113                    @CHANSEY
  98.     bne loc_1E4A6
  99.     mov r1, #0x1
  100.    
  101. loc_1E4A6:
  102.     lsl r5, r1, #0x1
  103.     mov r3, #0x0
  104.     cmp r6, #HOLD_EFFECT_STICK
  105.     bne loc_1E4C0
  106.     mov r0, r12
  107.     ldrb r1, [r0]
  108.     mov r0, #0x58
  109.     mul r0, r1
  110.     add r0, r0, r4
  111.     ldrh r0, [r0]
  112.     cmp r0, #83                     @FARFETCHD
  113.     bne loc_1E4C0
  114.     mov r3, #0x1
  115.    
  116. loc_1E4C0:
  117.     lsl r1, r3, #0x1
  118.     cmp r6, #HOLD_EFFECT_SCOPE_LENS
  119.     bne loc_1E4E0
  120.     add r0, r5, #0x1
  121.     add r0, r2, r0
  122.     b loc_1E4E2
  123.    
  124. .align 2, 0
  125. .pool
  126.  
  127. loc_1E4E0:
  128.     add r0, r2, r5
  129.    
  130. loc_1E4E2:
  131.     add r0, r0, r1
  132.     lsl r0, r0, #0x10
  133.     lsr r0, r0, #0x10
  134.     mov r5, r0
  135.     cmp r5, #4
  136.     bls loc_1E4F0
  137.     mov r5, #4
  138.    
  139. loc_1E4F0:
  140.     ldr r0, =(b_defender)
  141.     ldrb r1, [r0]
  142.     mov r0, #0x58
  143.     mul r0, r1
  144.     add r0, r0, r4
  145.     add r0, #0x20                   @battle_data.ability
  146.     ldrb r4, [r0]
  147.     cmp r4, #BATTLE_ARMOR
  148.     beq atk04_NoCrit
  149.     cmp r4, #SHELL_ARMOR
  150.     beq atk04_NoCrit
  151.     ldr r1, =(status3)
  152.     mov r2, r12
  153.     ldrb r0, [r2]
  154.     lsl r0, r0, #0x2
  155.     add r0, r0, r1
  156.     ldr r0, [r0]
  157.     mov r1, #0x80
  158.     lsl r1, r1, #0x8                @0x8000, STATUS3_CANT_SCORE_A_CRIT
  159.     and r0, r1
  160.     cmp r0, #0x0
  161.     bne atk04_NoCrit
  162.     ldr r4, =(battle_type_flags)
  163.     ldr r0, [r4]
  164.     mov r1, #0x80
  165.     lsl r1, r1, #0x2                @0x200, BATTLETYPE_FIRST_BATTLE
  166.     and r0, r1
  167.     cmp r0, #0x0
  168.     bne atk04_NoCrit
  169.     bl rand
  170.     ldr r2, =(sCriticalHitChance + rom)
  171.     lsl r1, r5, #0x1
  172.     add r1, r1, r2
  173.     lsl r0, r0, #0x10
  174.     lsr r0, r0, #0x10
  175.     ldrh r1, [r1]
  176.     bl __umodsi3
  177.     lsl r0, r0, #0x10
  178.     cmp r0, #0x0
  179.     bne atk04_NoCrit
  180.     ldr r0, [r4]
  181.     mov r1, #0x10
  182.     and r0, r1
  183.     cmp r0, #0x0
  184.     beq loc_1E55A
  185.     mov r0, #0x1
  186.     bl sub_EB2E0
  187.     lsl r0, r0, #0x18
  188.     cmp r0, #0x0
  189.     beq atk04_NoCrit
  190.    
  191. loc_1E55A:
  192.     ldr r0, [r4]
  193.     mov r1, #0x80
  194.     lsl r1, r1, #0x9                @0x10000
  195.     and r0, r1
  196.     cmp r0, #0x0
  197.     bne atk04_NoCrit
  198.     ldr r1, =(b_critical_multiplier)
  199.     mov r0, #0x2
  200.     b loc_1E584
  201.    
  202. .align 2, 0
  203. .pool
  204.  
  205. atk04_NoCrit:
  206.     ldr r1, =(b_critical_multiplier)
  207.     mov r0, #0x1
  208.    
  209. loc_1E584:
  210.     strb r0, [r1]
  211.     ldr r1, =(b_movescr_cursor)
  212.     ldr r0, [r1]
  213.     add r0, #0x1
  214.     str r0, [r1]
  215.     pop {r4-r7}
  216.     pop {r0}
  217.     bx r0
  218.    
  219. .align 2, 0
  220. .pool
  221.  
  222. .org 0x250530
  223. sCriticalHitChance:
  224.     .hword 16           @stage 1, 6%
  225.     .hword 8            @stage 2, 12%
  226.     .hword 4            @stage 3, 25%
  227.     .hword 3            @stage 4, 33%
  228.     .hword 2            @stage 5, 50%
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement