Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .thumb
- .global move_damage_calc
- .equ rom, 0x08000000
- @ addresses
- .equ b_cur_move_power, 0x02024020
- .equ move_data, 0x08250C04
- .equ sav1_copied_berries_pbs, 0x02023F54
- .equ battle_type_flags, 0x02022B4C
- .equ b_critical_multiplier, 0x02023D71
- .equ fractions_stat_buffs, 0x0825DEAD
- .equ weather, 0x02023F1C
- .equ b_move_to_execute_A, 0x02023D4A
- .equ b_resources, 0x02023FF4
- @ functions
- .equ itemid_get_x12, 0x9A924
- .equ itemid_get_quality, 0x9A948
- .equ __divsi3, 0x1E4018
- .equ flag_check, 0x6E6D0
- .equ battle_side_get_owner, 0x751C4
- .equ ability_something, 0x19F18
- .equ __udivsi3, 0x1E460C
- .equ sub_3F5B4, 0x3F5B4
- @ stack arguments
- .equ move_power_override, 0x4C
- .equ move_type_override, 0x50
- .equ arg_bank_attacker, 0x54
- .equ arg_bank_defender, 0x58
- @ status
- .equ STATUS_BURN, 0x10
- @ types
- .equ normal_type, 0x0
- .equ fighting_type, 0x1
- .equ flying_type, 0x2
- .equ poison_type, 0x3
- .equ ground_type, 0x4
- .equ rock_type, 0x5
- .equ bug_type, 0x6
- .equ ghost_type, 0x7
- .equ steel_type, 0x8
- .equ mystery_type, 0x9
- .equ fire_type, 0xA
- .equ water_type, 0xB
- .equ grass_type, 0xC
- .equ electric_type, 0xD
- .equ psychic_type, 0xE
- .equ ice_type, 0xF
- .equ dragon_type, 0x10
- .equ dark_type, 0x11
- @ moves & effects
- .equ EFFECT_EXPLOSION, 0x7
- .equ SOLARBEAM, 0x4C
- @ abilities
- .equ HUGE_POWER, 0x25
- .equ PURE_POWER, 0x4A
- .equ THICK_FAT, 0x2F
- .equ HUSTLE, 0x37
- .equ PLUS, 0x39
- .equ MINUS, 0x3A
- .equ GUTS, 0x3E
- .equ MARVEL_SCALE, 0x3F
- .equ OVERGROW, 0x41
- .equ BLAZE, 0x42
- .equ TORRENT, 0x43
- .equ SWARM, 0x44
- .equ CLOUD_NINE, 0xD
- .equ AIR_LOCK, 0x4D
- @ items
- .equ ENIGMA_BERRY, 0xAF
- @ item effects
- .equ HOLD_EFFECT_CHOICE_BAND, 29
- .equ HOLD_EFFECT_SOUL_DEW, 34
- .equ HOLD_EFFECT_DEEPSEATOOTH, 35
- .equ HOLD_EFFECT_DEEPSEASCALE, 36
- .equ HOLD_EFFECT_LIGHT_BALL, 45
- .equ HOLD_EFFECT_METAL_POWDER, 64
- .equ HOLD_EFFECT_THICK_CLUB, 65
- .equ HOLD_EFFECT_BUG_POWER, 31
- .equ HOLD_EFFECT_STEEL_POWER, 42
- .equ HOLD_EFFECT_GROUND_POWER, 46
- .equ HOLD_EFFECT_ROCK_POWER, 47
- .equ HOLD_EFFECT_GRASS_POWER, 48
- .equ HOLD_EFFECT_DARK_POWER, 49
- .equ HOLD_EFFECT_FIGHTING_POWER, 50
- .equ HOLD_EFFECT_ELECTRIC_POWER, 51
- .equ HOLD_EFFECT_WATER_POWER, 52
- .equ HOLD_EFFECT_FLYING_POWER, 53
- .equ HOLD_EFFECT_POISON_POWER, 54
- .equ HOLD_EFFECT_ICE_POWER, 55
- .equ HOLD_EFFECT_GHOST_POWER, 56
- .equ HOLD_EFFECT_PSYCHIC_POWER, 57
- .equ HOLD_EFFECT_FIRE_POWER, 58
- .equ HOLD_EFFECT_DRAGON_POWER, 59
- .equ HOLD_EFFECT_NORMAL_POWER, 60
- @ stack
- .equ battle_data_defender, 0x4
- .equ move_id, 0x8
- .equ sidestatus, 0xC
- .equ bank_attacker, 0x10
- .equ defender_defense, 0x14
- .equ defender_spdef, 0x18
- .equ defender_item_effect, 0x1C
- .equ attacker_item_quality, 0x20
- .equ attacker_data_ability, 0x24
- .equ defender_data_ability, 0x28
- /*
- registers:
- r6 = attacker's battle_data
- r7 = attacker's attack
- r8 = attacker's spatk
- r9 = move type
- r10 = attacker's held item effect
- */
- .org 0x3ECEC
- push {r4-r7, lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, sp, #0x2C
- mov r6, r0
- str r1, [sp, #battle_data_defender]
- str r2, [sp, #move_id]
- ldr r0, [sp, #move_power_override]
- ldr r1, [sp, #move_type_override]
- ldr r2, [sp, #arg_bank_attacker]
- ldr r4, [sp, #arg_bank_defender]
- lsl r3, r3, #0x10
- lsr r3, r3, #0x10
- str r3, [sp, #sidestatus]
- lsl r0, r0, #0x10
- lsr r3, r0, #0x10
- lsl r1, r1, #0x18
- lsr r7, r1, #0x18
- lsl r2, r2, #0x18
- lsr r2, r2, #0x18
- str r2, [sp, #bank_attacker]
- lsl r4, r4, #0x18
- lsr r4, r4, #0x18
- mov r5, #0x0
- cmp r3, #0x0 @move_power_override
- bne loc_3ED40
- ldr r2, =(b_cur_move_power)
- ldr r1, =(move_data)
- ldr r3, [sp, #move_id]
- lsl r0, r3, #0x1
- add r0, r0, r3
- lsl r0, r0, #0x2
- add r0, r0, r1
- ldrb r0, [r0, #0x1] @move.power
- strh r0, [r2]
- b loc_3ED44
- .align 2
- .pool
- loc_3ED40:
- ldr r0, =(b_cur_move_power)
- strh r3, [r0]
- loc_3ED44:
- cmp r7, #0x0 @move_type_override
- bne loc_3ED64
- ldr r1, =(move_data)
- ldr r7, [sp, #move_id]
- lsl r0, r7, #0x1
- add r0, r0, r7
- lsl r0, r0, #0x2
- add r0, r0, r1
- ldrb r0, [r0, #0x2] @move.type
- mov r9, r0
- b loc_3ED6E
- .align 2
- .pool
- loc_3ED64:
- mov r0, #0x3F
- mov r9, r0
- mov r1, r9
- and r1, r7
- mov r9, r1 @r9 = move type
- loc_3ED6E:
- ldrh r7, [r6, #0x2] @battle_data.attack
- ldr r2, [sp, #battle_data_defender]
- ldrh r2, [r2, #0x4] @battle_data.defense
- str r2, [sp, #defender_defense]
- ldrh r3, [r6, #0x8] @battle_data.spatk
- mov r8, r3
- ldr r0, [sp, #battle_data_defender]
- ldrh r0, [r0, #0xA] @battle_data.spdef
- str r0, [sp, #defender_spdef]
- ldrh r0, [r6, #0x2E] @battle_data.item
- cmp r0, #ENIGMA_BERRY
- bne loc_3EDA0
- ldr r1, =(sav1_copied_berries_pbs)
- ldr r2, [sp, #bank_attacker]
- lsl r0, r2, #0x3
- sub r0, r0, r2
- lsl r0, r0, #0x2
- add r0, r0, r1
- ldrb r3, [r0, #0x7]
- mov r10, r3
- ldrb r0, [r0, #0x1A]
- b loc_3EDB6
- .align 2
- .pool
- loc_3EDA0:
- ldrh r0, [r6, #0x2E] @battle_data.item
- bl itemid_get_x12
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- mov r10, r0
- ldrh r0, [r6, #0x2E] @battle_data.item
- bl itemid_get_quality
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- loc_3EDB6:
- str r0, [sp, #attacker_item_quality]
- ldr r1, [sp, #battle_data_defender]
- ldrh r0, [r1, #0x2E] @battle_data.item
- cmp r0, #ENIGMA_BERRY
- bne loc_3EDE6
- ldr r1, =(sav1_copied_berries_pbs)
- lsl r0, r4, #0x3
- sub r0, r0, r4
- lsl r0, r0, #0x2
- add r0, r0, r1
- ldrb r0, [r0, #0x7]
- str r0, [sp, #defender_item_effect]
- b loc_3EDFC
- .align 2
- .pool
- loc_3EDD4:
- ldr r0, [sp, #attacker_item_quality]
- add r0, #100
- mul r0, r7
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r7, r0, #0x10
- b loc_3EF44
- loc_3EDE6:
- ldr r2, [sp, #battle_data_defender]
- ldrh r0, [r2, #0x2E]
- bl itemid_get_x12
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- str r0, [sp, #defender_item_effect]
- ldr r3, [sp, #battle_data_defender]
- ldrh r0, [r3, #0x2E]
- bl itemid_get_quality
- loc_3EDFC:
- mov r0, r6
- add r0, #0x20 @attacker's ability
- ldrb r1, [r0]
- str r0, [sp, #attacker_data_ability]
- cmp r1, #HUGE_POWER
- beq loc_3EE0C
- cmp r1, #PURE_POWER
- bne loc_3EE10
- loc_3EE0C:
- lsl r0, r7, #0x11
- lsr r7, r0, #0x10 @atk *= 2
- loc_3EE10:
- ldr r0, =(battle_type_flags)
- ldr r0, [r0]
- ldr r1, =(0x802) @link/ereader battle
- and r0, r1
- cmp r0, #0x0
- bne loc_3EEE8
- mov r0, #0x82
- lsl r0, r0, #0x4 @0x820, badge 1
- bl flag_check
- lsl r0, r0, #0x18
- cmp r0, #0x0
- beq loc_3EE44
- ldr r0, [sp, #bank_attacker]
- bl battle_side_get_owner
- lsl r0, r0, #0x18
- cmp r0, #0x0
- bne loc_3EE44
- mov r0, #110
- mul r0, r7
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r7, r0, #0x10
- loc_3EE44:
- ldr r0, =(battle_type_flags)
- ldr r0, [r0]
- ldr r1, =(0x802)
- and r0, r1
- cmp r0, #0x0
- bne loc_3EEE8
- ldr r0, =(0x824) @badge 5
- bl flag_check
- lsl r0, r0, #0x18
- cmp r0, #0x0
- beq loc_3EE7A
- mov r0, r4
- bl battle_side_get_owner
- lsl r0, r0, #0x18
- cmp r0, #0x0
- bne loc_3EE7A
- mov r0, #110
- ldr r1, [sp, #defender_defense]
- mul r0, r1
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #defender_defense]
- loc_3EE7A:
- ldr r0, =(battle_type_flags)
- ldr r0, [r0]
- ldr r1, =(0x802)
- and r0, r1
- cmp r0, #0x0
- bne loc_3EEE8
- ldr r0, =(0x826) @badge 7
- bl flag_check
- lsl r0, r0, #0x18
- cmp r0, #0x0
- beq loc_3EEB2
- ldr r0, [sp, #bank_attacker]
- bl battle_side_get_owner
- lsl r0, r0, #0x18
- cmp r0, #0x0
- bne loc_3EEB2
- mov r0, #110
- mov r2, r8
- mul r2, r0
- mov r0, r2
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- mov r8, r0
- loc_3EEB2:
- ldr r0, =(battle_type_flags)
- ldr r0, [r0]
- ldr r1, =(0x802)
- and r0, r1
- cmp r0, #0x0
- bne loc_3EEE8
- ldr r0, =(0x826) @badge 7
- bl flag_check
- lsl r0, r0, #0x18
- cmp r0, #0x0
- beq loc_3EEE8
- mov r0, r4
- bl battle_side_get_owner
- lsl r0, r0, #0x18
- cmp r0, #0x0
- bne loc_3EEE8
- mov r0, #110
- ldr r3, [sp, #defender_spdef]
- mul r0, r3
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #defender_spdef]
- loc_3EEE8:
- mov r2, #0x0
- ldr r4, =(gHoldEffectToType + rom)
- ldr r0, [sp, #battle_data_defender]
- add r0, #0x20
- str r0, [sp, #defender_data_ability]
- mov r3, r4
- loc_3EEF4:
- lsl r1, r2, #0x1
- ldrb r0, [r3]
- cmp r10, r0
- bne loc_3EF3C
- add r0, r4, #0x1
- add r0, r1, r0
- ldrb r0, [r0]
- cmp r9, r0
- bne loc_3EF3C
- mov r1, r9
- cmp r1, #0x8
- bhi loc_3EF0E
- b loc_3EDD4
- loc_3EF0E:
- ldr r0, [sp, #attacker_item_quality]
- add r0, #100
- mov r2, r8
- mul r2, r0
- mov r0, r2
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- mov r8, r0
- b loc_3EF44
- .align 2
- .pool
- loc_3EF3C:
- add r3, #2
- add r2, #1
- cmp r2, #0x10
- bls loc_3EEF4
- loc_3EF44:
- mov r3, r10
- cmp r3, #HOLD_EFFECT_CHOICE_BAND
- bne loc_3EF58
- mov r0, #150
- mul r0, r7
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r7, r0, #0x10
- loc_3EF58:
- mov r0, r10
- cmp r0, #HOLD_EFFECT_SOUL_DEW
- bne loc_3EF90
- ldr r0, =(battle_type_flags)
- ldr r0, [r0]
- mov r1, #0x80
- lsl r1, r1, #0x1 @0x100
- and r0, r1
- cmp r0, #0x0 @battle tower
- bne loc_3EF90
- ldr r1, =(0xFFFFFE69) @-407
- mov r0, r1
- ldrh r2, [r6] @attacker species
- add r0, r0, r2
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- cmp r0, #0x1 @ if not Latias or Latios
- bhi loc_3EF90
- mov r0, #150
- mov r3, r8
- mul r3, r0
- mov r0, r3
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- mov r8, r0 @spatk + 50%
- loc_3EF90:
- ldr r0, [sp, #defender_item_effect]
- cmp r0, #HOLD_EFFECT_SOUL_DEW
- bne loc_3EFC8
- ldr r0, =(battle_type_flags)
- ldr r0, [r0]
- mov r1, #0x80
- lsl r1, r1, #0x1
- and r0, r1
- cmp r0, #0x0
- bne loc_3EFC8
- ldr r1, =(0xFFFFFE69)
- mov r0, r1
- ldr r2, [sp, #battle_data_defender]
- ldrh r2, [r2]
- add r0, r0, r2
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- cmp r0, #0x1
- bhi loc_3EFC8
- mov r0, #150
- ldr r3, [sp, #defender_spdef]
- mul r0, r3
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #defender_spdef]
- loc_3EFC8:
- mov r0, r10
- cmp r0, #HOLD_EFFECT_DEEPSEATOOTH
- bne loc_3EFDE
- ldrh r1, [r6]
- ldr r0, =(0x175) @clamperl
- cmp r1, r0
- bne loc_3EFDE
- mov r1, r8
- lsl r0, r1, #0x11
- lsr r0, r0, #0x10
- mov r8, r0 @spatk *= 2
- loc_3EFDE:
- ldr r2, [sp, #defender_item_effect]
- cmp r2, #HOLD_EFFECT_DEEPSEASCALE
- bne loc_3EFF6
- ldr r3, [sp, #battle_data_defender]
- ldrh r1, [r3]
- ldr r0, =(0x175) @clamperl
- cmp r1, r0
- bne loc_3EFF6
- ldr r1, [sp, #defender_spdef]
- lsl r0, r1, #0x11
- lsr r0, r0, #0x10
- str r0, [sp, #defender_spdef]
- loc_3EFF6:
- mov r2, r10
- cmp r2, #HOLD_EFFECT_LIGHT_BALL
- bne loc_3F00A
- ldrh r0, [r6]
- cmp r0, #25 @pikachu
- bne loc_3F00A
- mov r3, r8
- lsl r0, r3, #0x11
- lsr r0, r0, #0x10
- mov r8, r0
- loc_3F00A:
- ldr r0, [sp, #defender_item_effect]
- cmp r0, #HOLD_EFFECT_METAL_POWDER
- bne loc_3F020
- ldr r1, [sp, #battle_data_defender]
- ldrh r0, [r1]
- cmp r0, #132 @ditto
- bne loc_3F020
- ldr r2, [sp, #defender_defense]
- lsl r0, r2, #0x11
- lsr r0, r0, #0x10
- str r0, [sp, #defender_defense]
- loc_3F020:
- mov r3, r10
- cmp r3, #HOLD_EFFECT_THICK_CLUB
- bne loc_3F036
- ldrh r0, [r6]
- sub r0, #104 @cubone
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- cmp r0, #0x1 @if species higher than marowak
- bhi loc_3F036
- lsl r0, r7, #0x11
- lsr r7, r0, #0x10
- loc_3F036:
- ldr r1, [sp, #defender_data_ability]
- ldrb r0, [r1]
- cmp r0, #THICK_FAT
- bne loc_3F04E
- mov r2, r9
- cmp r2, #fire_type
- beq loc_3F048
- cmp r2, #ice_type
- bne loc_3F04E
- loc_3F048:
- mov r3, r8
- lsr r3, r3, #0x1
- mov r8, r3
- loc_3F04E:
- ldr r0, [sp, #attacker_data_ability]
- ldrb r4, [r0]
- cmp r4, #HUSTLE
- bne loc_3F064
- mov r0, #150
- mul r0, r7
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r7, r0, #0x10
- loc_3F064:
- cmp r4, #PLUS
- bne loc_3F092
- mov r0, #0x0
- str r0, [sp]
- mov r0, #0xE
- mov r1, #0x0
- mov r2, #MINUS
- mov r3, #0x0
- bl ability_something
- lsl r0, r0, #0x18
- cmp r0, #0x0
- beq loc_3F092
- mov r0, #150
- mov r1, r8
- mul r1, r0
- mov r0, r1
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- mov r8, r0
- loc_3F092:
- ldr r2, [sp, #attacker_data_ability]
- ldrb r0, [r2]
- cmp r0, #MINUS
- bne loc_3F0C4
- mov r0, #0x0
- str r0, [sp]
- mov r0, #0xE @is ability present
- mov r1, #0x0
- mov r2, #PLUS
- mov r3, #0x0
- bl ability_something
- lsl r0, r0, #0x18
- cmp r0, #0x0
- beq loc_3F0C4
- mov r0, #150
- mov r3, r8
- mul r3, r0
- mov r0, r3
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- mov r8, r0
- loc_3F0C4:
- ldr r1, [sp, #attacker_data_ability]
- ldrb r0, [r1]
- cmp r0, #GUTS
- bne loc_3F0E0
- ldr r0, [r6, #0x4C] @status1
- cmp r0, #0x0
- beq loc_3F0E0
- mov r0, #150
- mul r0, r7
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r7, r0, #0x10
- loc_3F0E0:
- ldr r2, [sp, #defender_data_ability]
- ldrb r0, [r2]
- cmp r0, #MARVEL_SCALE
- bne loc_3F102
- ldr r3, [sp, #battle_data_defender]
- ldr r0, [r3, #0x4C] @status1
- cmp r0, #0x0
- beq loc_3F102
- mov r0, #150
- ldr r1, [sp, #defender_defense]
- mul r0, r1
- mov r1, #100
- bl __divsi3
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #defender_defense]
- loc_3F102:
- mov r2, r9
- cmp r2, #electric_type
- bne loc_3F126
- mov r0, #0x0
- str r0, [sp]
- mov r0, #0xE
- mov r1, #0x0
- mov r2, #0x0
- mov r3, #0xFD @mud sport
- bl ability_something
- lsl r0, r0, #0x18
- cmp r0, #0x0
- beq loc_3F126
- ldr r1, =(b_cur_move_power)
- ldrh r0, [r1]
- lsr r0, r0, #0x1 @mud sport is present, half power
- strh r0, [r1]
- loc_3F126:
- mov r3, r9
- cmp r3, #fire_type
- bne loc_3F14A
- mov r0, #0x0
- str r0, [sp]
- mov r0, #0xE
- mov r1, #0x0
- mov r2, #0x0
- mov r3, #0xFE @water sport
- bl ability_something
- lsl r0, r0, #0x18
- cmp r0, #0x0
- beq loc_3F14A
- ldr r1, =(b_cur_move_power)
- ldrh r0, [r1]
- lsr r0, r0, #0x1 @water sport is present, half power
- strh r0, [r1]
- loc_3F14A:
- mov r0, r9
- cmp r0, #grass_type
- bne loc_3F17A
- ldr r1, [sp, #attacker_data_ability]
- ldrb r0, [r1]
- cmp r0, #OVERGROW
- bne loc_3F17A
- ldrh r0, [r6, #0x2C] @battle_data.max_hp
- mov r1, #3
- bl __udivsi3
- ldrh r1, [r6, #0x28] @battle_data.current_hp
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- cmp r1, r0
- bhi loc_3F17A
- ldr r4, =(b_cur_move_power)
- ldrh r1, [r4]
- mov r0, #150
- mul r0, r1
- mov r1, #100
- bl __divsi3
- strh r0, [r4]
- loc_3F17A:
- mov r2, r9
- cmp r2, #fire_type
- bne loc_3F1AA
- ldr r3, [sp, #attacker_data_ability]
- ldrb r0, [r3]
- cmp r0, #BLAZE
- bne loc_3F1AA
- ldrh r0, [r6, #0x2C]
- mov r1, #3
- bl __udivsi3
- ldrh r1, [r6, #0x28]
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- cmp r1, r0
- bhi loc_3F1AA
- ldr r4, =(b_cur_move_power)
- ldrh r1, [r4]
- mov r0, #150
- mul r0, r1
- mov r1, #100
- bl __divsi3
- strh r0, [r4]
- loc_3F1AA:
- mov r0, r9
- cmp r0, #water_type
- bne loc_3F1DA
- ldr r1, [sp, #attacker_data_ability]
- ldrb r0, [r1]
- cmp r0, #TORRENT
- bne loc_3F1DA
- ldrh r0, [r6, #0x2C]
- mov r1, #3
- bl __udivsi3
- ldrh r1, [r6, #0x28]
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- cmp r1, r0
- bhi loc_3F1DA
- ldr r4, =(b_cur_move_power)
- ldrh r1, [r4]
- mov r0, #150
- mul r0, r1
- mov r1, #100
- bl __divsi3
- strh r0, [r4]
- loc_3F1DA:
- mov r2, r9
- cmp r2, #bug_type
- bne loc_3F20A
- ldr r3, [sp, #attacker_data_ability]
- ldrb r0, [r3]
- cmp r0, #SWARM
- bne loc_3F20A
- ldrh r0, [r6, #0x2C]
- mov r1, #3
- bl __udivsi3
- ldrh r1, [r6, #0x28]
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- cmp r1, r0
- bhi loc_3F20A
- ldr r4, =(b_cur_move_power)
- ldrh r1, [r4]
- mov r0, #150
- mul r0, r1
- mov r1, #100
- bl __divsi3
- strh r0, [r4]
- loc_3F20A:
- 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 r0, [r0]
- cmp r0, #EFFECT_EXPLOSION
- bne loc_3F224
- ldr r0, [sp, #defender_defense]
- lsr r0, r0, #0x1
- str r0, [sp, #defender_defense]
- loc_3F224:
- mov r1, r9
- cmp r1, #0x8
- bls loc_3F22C
- b loc_3F38A
- loc_3F22C:
- ldr r0, =(b_critical_multiplier)
- ldrb r1, [r0]
- mov r4, r0
- cmp r1, #2
- bne loc_3F268
- mov r0, #0x19
- ldrsb r0, [r6, r0]
- cmp r0, #6
- ble loc_3F264
- ldr r2, =(fractions_stat_buffs)
- b loc_3F26E
- .align 2
- .pool
- loc_3F264:
- mov r5, r7
- b loc_3F286
- loc_3F268:
- ldr r2, =(fractions_stat_buffs)
- mov r0, #0x19
- ldrsb r0, [r6, r0]
- loc_3F26E:
- lsl r0, r0, #0x1
- add r1, r0, r2
- ldrb r1, [r1]
- mov r5, r7
- mul r5, r1
- add r2, #0x1
- add r0, r0, r2
- ldrb r1, [r0]
- mov r0, r5
- bl __divsi3
- mov r5, r0
- loc_3F286:
- ldr r0, =(b_cur_move_power)
- ldrh r0, [r0]
- mul r5, r0
- mov r0, r6
- add r0, #0x2A @battle_data.level
- ldrb r0, [r0]
- lsl r0, r0, #0x1
- mov r1, #5
- bl __divsi3
- add r0, #0x2
- mul r5, r0
- ldrb r0, [r4]
- cmp r0, #0x2
- bne loc_3F2C4
- ldr r2, [sp, #battle_data_defender]
- mov r0, #0x1A
- ldrsb r0, [r2, r0]
- cmp r0, #0x5
- bgt loc_3F2C0
- ldr r2, =(fractions_stat_buffs)
- ldr r3, [sp, #battle_data_defender]
- mov r0, #0x1A
- ldrsb r0, [r3, r0]
- b loc_3F2CC
- .pool
- loc_3F2C0:
- ldr r3, [sp, #defender_defense]
- b loc_3F2E6
- loc_3F2C4:
- ldr r2, =(fractions_stat_buffs)
- ldr r1, [sp, #battle_data_defender]
- mov r0, #0x1A
- ldrsb r0, [r1, r0]
- loc_3F2CC:
- lsl r0, r0, #0x1
- add r1, r0, r2
- ldrb r1, [r1]
- ldr r7, [sp, #defender_defense]
- mov r3, r7
- mul r3, r1
- add r2, #0x1
- add r0, r0, r2
- ldrb r1, [r0]
- mov r0, r3
- bl __divsi3
- mov r3, r0
- loc_3F2E6:
- mov r0, r5
- mov r1, r3
- bl __divsi3
- mov r5, r0
- mov r1, #50
- bl __divsi3
- mov r5, r0
- ldr r0, [r6, #0x4C]
- mov r1, #STATUS_BURN
- and r0, r1
- cmp r0, #0x0
- beq loc_3F310
- ldr r1, [sp, #attacker_data_ability]
- ldrb r0, [r1]
- cmp r0, #GUTS
- beq loc_3F310
- lsr r0, r5, #0x1F
- add r0, r5, r0
- asr r5, r0, #0x1
- loc_3F310:
- mov r0, #0x1
- ldr r2, [sp, #sidestatus]
- and r0, r2
- cmp r0, #0x0
- beq loc_3F352
- ldrb r1, [r4]
- cmp r1, #0x1
- bne loc_3F352
- ldr r0, =(battle_type_flags)
- ldr r0, [r0]
- and r0, r1
- cmp r0, #0x0
- beq loc_3F34C
- mov r0, #0x2
- bl sub_3F5B4
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x2
- bne loc_3F34C
- mov r0, r5
- mov r1, #0x3
- bl __divsi3
- lsl r5, r0, #0x1
- b loc_3F352
- .pool
- loc_3F34C:
- lsr r0, r5, #0x1F
- add r0, r5, r0
- asr r5, r0, #0x1
- loc_3F352:
- ldr r0, =(battle_type_flags)
- ldr r0, [r0]
- mov r1, #0x1
- and r0, r1
- cmp r0, #0x0
- beq loc_3F384
- ldr r0, =(move_data)
- ldr r3, [sp, #move_id]
- lsl r1, r3, #0x1
- add r1, r1, r3
- lsl r1, r1, #0x2
- add r1, r1, r0
- ldrb r0, [r1, #0x6] @move.target
- cmp r0, #0x8 @both foes
- bne loc_3F384
- mov r0, #0x2
- bl sub_3F5B4
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x2
- bne loc_3F384
- lsr r0, r5, #0x1F
- add r0, r5, r0
- asr r5, r0, #0x1
- loc_3F384:
- cmp r5, #0x0
- bne loc_3F38A
- mov r5, #0x1
- loc_3F38A:
- mov r7, r9
- cmp r7, #0x9
- bne loc_3F392
- mov r5, #0x0
- loc_3F392:
- mov r0, r9
- cmp r0, #0x9
- bhi loc_3F39A
- b loc_3F59C
- loc_3F39A:
- ldr r0, =(b_critical_multiplier)
- ldrb r1, [r0]
- mov r4, r0
- cmp r1, #0x2
- bne loc_3F3C4
- mov r0, #0x1C @spatk buff
- ldrsb r0, [r6, r0]
- cmp r0, #0x6
- ble loc_3F3C0
- ldr r2, =(fractions_stat_buffs)
- b loc_3F3CA
- .pool
- loc_3F3C0:
- mov r5, r8
- b loc_3F3E2
- loc_3F3C4:
- ldr r2, =(fractions_stat_buffs)
- mov r0, #0x1C
- ldrsb r0, [r6, r0]
- loc_3F3CA:
- lsl r0, r0, #0x1
- add r1, r0, r2
- ldrb r1, [r1]
- mov r5, r8
- mul r5, r1
- add r2, #0x1
- add r0, r0, r2
- ldrb r1, [r0]
- mov r0, r5
- bl __divsi3
- mov r5, r0
- loc_3F3E2:
- ldr r0, =(b_cur_move_power)
- ldrh r0, [r0]
- mul r5, r0
- mov r0, r6
- add r0, #0x2A @battle_data.level
- ldrb r0, [r0]
- lsl r0, r0, #0x1
- mov r1, #5
- bl __divsi3
- add r0, #0x2
- mul r5, r0
- ldrb r0, [r4]
- cmp r0, #0x2
- bne loc_3F41C
- ldr r1, [sp, #battle_data_defender]
- mov r0, #0x1D @spdef buff
- ldrsb r0, [r1, r0]
- cmp r0, #0x5
- bgt loc_3F418
- ldr r2, =(fractions_stat_buffs)
- b loc_3F424
- .align 2
- .pool
- loc_3F418:
- ldr r3, [sp, #defender_spdef]
- b loc_3F43E
- loc_3F41C:
- ldr r2, =(fractions_stat_buffs)
- ldr r7, [sp, #battle_data_defender]
- mov r0, #0x1D @spdef buff
- ldrsb r0, [r7, r0]
- loc_3F424:
- lsl r0, r0, #0x1
- add r1, r0, r2
- ldrb r1, [r1]
- ldr r6, [sp, #defender_spdef]
- mov r3, r6
- mul r3, r1
- add r2, #0x1
- add r0, r0, r2
- ldrb r1, [r0]
- mov r0, r3
- bl __divsi3
- mov r3, r0
- loc_3F43E:
- mov r0, r5
- mov r1, r3
- bl __divsi3
- mov r5, r0
- mov r1, #50
- bl __divsi3
- mov r5, r0
- mov r0, #0x2
- ldr r7, [sp, #sidestatus]
- and r0, r7
- cmp r0, #0x0
- beq loc_3F492
- ldrb r1, [r4]
- cmp r1, #0x1
- bne loc_3F492
- ldr r0, =(battle_type_flags)
- ldr r0, [r0]
- and r0, r1
- cmp r0, #0x0
- beq loc_3F48C
- @ double battle:
- mov r0, #0x2
- bl sub_3F5B4
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x2
- bne loc_3F48C
- mov r0, r5
- mov r1, #3
- bl __divsi3
- lsl r5, r0, #0x1
- b loc_3F492
- .pool
- loc_3F48C:
- lsr r0, r5, #0x1F
- add r0, r5, r0
- asr r5, r0, #0x1
- loc_3F492:
- ldr r0, =(battle_type_flags)
- ldr r0, [r0]
- mov r1, #0x1
- and r0, r1
- cmp r0, #0x0
- beq loc_3F4C4
- @ double battle:
- ldr r0, =(move_data)
- ldr r2, [sp, #move_id]
- lsl r1, r2, #0x1
- add r1, r1, r2
- lsl r1, r1, #0x2
- add r1, r1, r0
- ldrb r0, [r1, #0x6] @move.target
- cmp r0, #0x8 @both foes
- bne loc_3F4C4
- mov r0, #0x2
- bl sub_3F5B4
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x2
- bne loc_3F4C4
- lsr r0, r5, #0x1F
- add r0, r5, r0
- asr r5, r0, #0x1
- loc_3F4C4:
- mov r0, #0x0
- str r0, [sp]
- mov r0, #0xE @0xE = check if ability is present
- mov r1, #0x0
- mov r2, #CLOUD_NINE
- mov r3, #0x0
- bl ability_something
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x0
- bne loc_3F574
- str r0, [sp]
- mov r0, #0xE @0xE = check if ability is present
- mov r1, #0x0
- mov r2, #AIR_LOCK
- mov r3, #0x0
- bl ability_something
- lsl r0, r0, #0x18
- cmp r0, #0x0
- bne loc_3F574
- ldr r2, =(weather)
- ldrh r1, [r2]
- mov r0, #0x1 @rainy
- and r0, r1
- mov r4, r2
- cmp r0, #0x0
- beq loc_3F52C
- mov r3, r9
- cmp r3, #fire_type
- beq loc_3F518
- cmp r3, #water_type
- beq loc_3F520
- b loc_3F52C
- .align 2
- .pool
- loc_3F518:
- lsr r0, r5, #0x1F @fire move, half power
- add r0, r5, r0
- asr r5, r0, #0x1
- b loc_3F52C
- loc_3F520:
- lsl r0, r5, #0x4 @water move, boost by 50%
- sub r0, r0, r5
- mov r1, #10
- bl __divsi3
- mov r5, r0
- loc_3F52C:
- ldrh r1, [r4]
- mov r0, #0x9F @any other weather than sunny
- and r0, r1
- cmp r0, #0x0
- beq loc_3F544
- ldr r0, =(b_move_to_execute_A)
- ldrh r0, [r0]
- cmp r0, #SOLARBEAM
- bne loc_3F544
- lsr r0, r5, #0x1F @halve solarbeam's power
- add r0, r5, r0
- asr r5, r0, #0x1
- loc_3F544:
- ldrh r1, [r4]
- mov r0, #0x60 @sunny
- and r0, r1
- cmp r0, #0x0
- beq loc_3F574
- mov r6, r9
- cmp r6, #fire_type
- beq loc_3F560
- cmp r6, #water_type
- beq loc_3F56E
- b loc_3F574
- .align 2
- .pool
- loc_3F560:
- lsl r0, r5, #0x4 @fire move, boost by 50%
- sub r0, r0, r5
- mov r1, #10
- bl __divsi3
- mov r5, r0
- b loc_3F574
- loc_3F56E: @water move, half power
- lsr r0, r5, #0x1F
- add r0, r5, r0
- asr r5, r0, #0x1
- loc_3F574:
- ldr r0, =(b_resources)
- ldr r0, [r0]
- ldr r0, [r0, #0x4]
- ldr r7, [sp, #bank_attacker]
- lsl r1, r7, #0x2
- add r0, r0, r1
- ldr r0, [r0]
- mov r1, #0x1
- and r0, r1
- cmp r0, #0x0 @flash fire
- beq loc_3F59C
- mov r0, r9 @if move type = fire
- cmp r0, #fire_type
- bne loc_3F59C
- lsl r0, r5, #0x4
- sub r0, r0, r5
- mov r1, #10
- bl __divsi3
- mov r5, r0
- loc_3F59C:
- add r0, r5, #0x2
- add sp, sp, #0x2C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2
- .pool
- .org 0x25DECC
- gHoldEffectToType:
- .byte HOLD_EFFECT_BUG_POWER, bug_type
- .byte HOLD_EFFECT_STEEL_POWER, steel_type
- .byte HOLD_EFFECT_GROUND_POWER, ground_type
- .byte HOLD_EFFECT_ROCK_POWER, rock_type
- .byte HOLD_EFFECT_GRASS_POWER, grass_type
- .byte HOLD_EFFECT_DARK_POWER, dark_type
- .byte HOLD_EFFECT_FIGHTING_POWER, fighting_type
- .byte HOLD_EFFECT_ELECTRIC_POWER, electric_type
- .byte HOLD_EFFECT_WATER_POWER, water_type
- .byte HOLD_EFFECT_FLYING_POWER, flying_type
- .byte HOLD_EFFECT_POISON_POWER, poison_type
- .byte HOLD_EFFECT_ICE_POWER, ice_type
- .byte HOLD_EFFECT_GHOST_POWER, ghost_type
- .byte HOLD_EFFECT_PSYCHIC_POWER, psychic_type
- .byte HOLD_EFFECT_FIRE_POWER, fire_type
- .byte HOLD_EFFECT_DRAGON_POWER, dragon_type
- .byte HOLD_EFFECT_NORMAL_POWER, normal_type
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement