summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_ai.s2067
-rw-r--r--asm/rom_8080874.s179
-rw-r--r--asm/rom_8094928.s314
-rw-r--r--include/battle.h16
-rw-r--r--include/pokemon.h4
-rw-r--r--include/save_menu_util.h4
-rw-r--r--ld_script.txt3
-rw-r--r--src/battle_ai.c874
-rw-r--r--src/rom_8080874.c85
-rw-r--r--src/rom_8094928.c94
-rw-r--r--src/save_menu_util.c17
-rw-r--r--src/scrcmd.c10
-rw-r--r--src/start_menu.c17
13 files changed, 950 insertions, 2734 deletions
diff --git a/asm/battle_ai.s b/asm/battle_ai.s
deleted file mode 100644
index 426790c89..000000000
--- a/asm/battle_ai.s
+++ /dev/null
@@ -1,2067 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start BattleAICmd_if_status_not_in_party
-BattleAICmd_if_status_not_in_party: @ 8108A28
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _08108A44 @ =gAIScriptPtr
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r2, r0, 0
- cmp r1, 0x1
- bne _08108A4C
- ldr r0, _08108A48 @ =gEnemyParty
- mov r10, r0
- b _08108A50
- .align 2, 0
-_08108A44: .4byte gAIScriptPtr
-_08108A48: .4byte gEnemyParty
-_08108A4C:
- ldr r1, _08108AE4 @ =gPlayerParty
- mov r10, r1
-_08108A50:
- ldr r1, [r2]
- ldrb r7, [r1, 0x2]
- ldrb r0, [r1, 0x3]
- lsls r0, 8
- orrs r7, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 16
- orrs r7, r0
- ldrb r0, [r1, 0x5]
- lsls r0, 24
- orrs r7, r0
- movs r0, 0
- mov r8, r0
- mov r9, r2
-_08108A6C:
- movs r0, 0x64
- mov r4, r8
- muls r4, r0
- add r4, r10
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- cmp r5, 0
- beq _08108AB0
- movs r1, 0xCE
- lsls r1, 1
- cmp r5, r1
- beq _08108AB0
- cmp r6, 0
- beq _08108AB0
- cmp r0, r7
- bne _08108AB0
- mov r1, r9
- ldr r0, [r1]
- adds r0, 0xA
- str r0, [r1]
-_08108AB0:
- movs r0, 0x1
- add r8, r0
- mov r1, r8
- cmp r1, 0x5
- ble _08108A6C
- ldr r3, _08108AE8 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r1, [r2, 0x6]
- ldrb r0, [r2, 0x7]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x8]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x9]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08108AE4: .4byte gPlayerParty
-_08108AE8: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_if_status_not_in_party
-
- thumb_func_start BattleAICmd_unk_36
-BattleAICmd_unk_36: @ 8108AEC
- push {lr}
- ldr r2, _08108B3C @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _08108B00
- ldr r1, _08108B40 @ =0x02016800
- movs r0, 0x1
- str r0, [r1, 0x8]
-_08108B00:
- ldrh r2, [r2]
- movs r0, 0x18
- ands r0, r2
- adds r3, r2, 0
- cmp r0, 0
- beq _08108B12
- ldr r1, _08108B40 @ =0x02016800
- movs r0, 0x2
- str r0, [r1, 0x8]
-_08108B12:
- movs r0, 0x60
- ands r0, r3
- cmp r0, 0
- beq _08108B20
- ldr r1, _08108B40 @ =0x02016800
- movs r0, 0
- str r0, [r1, 0x8]
-_08108B20:
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _08108B2E
- ldr r1, _08108B40 @ =0x02016800
- movs r0, 0x3
- str r0, [r1, 0x8]
-_08108B2E:
- ldr r1, _08108B44 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08108B3C: .4byte gBattleWeather
-_08108B40: .4byte 0x02016800
-_08108B44: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_unk_36
-
- thumb_func_start BattleAICmd_if_effect
-BattleAICmd_if_effect: @ 8108B48
- push {lr}
- ldr r2, _08108B7C @ =gBattleMoves
- ldr r0, _08108B80 @ =0x02016800
- ldrh r1, [r0, 0x2]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r3, _08108B84 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r0, [r0]
- ldrb r1, [r2, 0x1]
- cmp r0, r1
- bne _08108B88
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _08108B8C
- .align 2, 0
-_08108B7C: .4byte gBattleMoves
-_08108B80: .4byte 0x02016800
-_08108B84: .4byte gAIScriptPtr
-_08108B88:
- adds r0, r2, 0x6
- str r0, [r3]
-_08108B8C:
- pop {r0}
- bx r0
- thumb_func_end BattleAICmd_if_effect
-
- thumb_func_start BattleAICmd_if_not_effect
-BattleAICmd_if_not_effect: @ 8108B90
- push {lr}
- ldr r2, _08108BC4 @ =gBattleMoves
- ldr r0, _08108BC8 @ =0x02016800
- ldrh r1, [r0, 0x2]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r3, _08108BCC @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r0, [r0]
- ldrb r1, [r2, 0x1]
- cmp r0, r1
- beq _08108BD0
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _08108BD4
- .align 2, 0
-_08108BC4: .4byte gBattleMoves
-_08108BC8: .4byte 0x02016800
-_08108BCC: .4byte gAIScriptPtr
-_08108BD0:
- adds r0, r2, 0x6
- str r0, [r3]
-_08108BD4:
- pop {r0}
- bx r0
- thumb_func_end BattleAICmd_if_not_effect
-
- thumb_func_start BattleAICmd_if_stat_level_less_than
-BattleAICmd_if_stat_level_less_than: @ 8108BD8
- push {r4,lr}
- ldr r0, _08108BEC @ =gAIScriptPtr
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r4, r0, 0
- cmp r1, 0x1
- bne _08108BF4
- ldr r0, _08108BF0 @ =gUnknown_02024C07
- b _08108BF6
- .align 2, 0
-_08108BEC: .4byte gAIScriptPtr
-_08108BF0: .4byte gUnknown_02024C07
-_08108BF4:
- ldr r0, _08108C2C @ =gUnknown_02024C08
-_08108BF6:
- ldrb r3, [r0]
- ldr r1, _08108C30 @ =gBattleMons
- ldr r2, [r4]
- movs r0, 0x58
- muls r0, r3
- ldrb r3, [r2, 0x2]
- adds r0, r3
- adds r1, 0x18
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- ldrb r1, [r2, 0x3]
- cmp r0, r1
- bge _08108C34
- ldrb r1, [r2, 0x4]
- ldrb r0, [r2, 0x5]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _08108C3A
- .align 2, 0
-_08108C2C: .4byte gUnknown_02024C08
-_08108C30: .4byte gBattleMons
-_08108C34:
- adds r0, r2, 0
- adds r0, 0x8
- str r0, [r4]
-_08108C3A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end BattleAICmd_if_stat_level_less_than
-
- thumb_func_start BattleAICmd_if_stat_level_more_than
-BattleAICmd_if_stat_level_more_than: @ 8108C40
- push {r4,lr}
- ldr r0, _08108C54 @ =gAIScriptPtr
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r4, r0, 0
- cmp r1, 0x1
- bne _08108C5C
- ldr r0, _08108C58 @ =gUnknown_02024C07
- b _08108C5E
- .align 2, 0
-_08108C54: .4byte gAIScriptPtr
-_08108C58: .4byte gUnknown_02024C07
-_08108C5C:
- ldr r0, _08108C94 @ =gUnknown_02024C08
-_08108C5E:
- ldrb r3, [r0]
- ldr r1, _08108C98 @ =gBattleMons
- ldr r2, [r4]
- movs r0, 0x58
- muls r0, r3
- ldrb r3, [r2, 0x2]
- adds r0, r3
- adds r1, 0x18
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- ldrb r1, [r2, 0x3]
- cmp r0, r1
- ble _08108C9C
- ldrb r1, [r2, 0x4]
- ldrb r0, [r2, 0x5]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _08108CA2
- .align 2, 0
-_08108C94: .4byte gUnknown_02024C08
-_08108C98: .4byte gBattleMons
-_08108C9C:
- adds r0, r2, 0
- adds r0, 0x8
- str r0, [r4]
-_08108CA2:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end BattleAICmd_if_stat_level_more_than
-
- thumb_func_start BattleAICmd_if_stat_level_equal
-BattleAICmd_if_stat_level_equal: @ 8108CA8
- push {r4,lr}
- ldr r0, _08108CBC @ =gAIScriptPtr
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r4, r0, 0
- cmp r1, 0x1
- bne _08108CC4
- ldr r0, _08108CC0 @ =gUnknown_02024C07
- b _08108CC6
- .align 2, 0
-_08108CBC: .4byte gAIScriptPtr
-_08108CC0: .4byte gUnknown_02024C07
-_08108CC4:
- ldr r0, _08108CFC @ =gUnknown_02024C08
-_08108CC6:
- ldrb r3, [r0]
- ldr r1, _08108D00 @ =gBattleMons
- ldr r2, [r4]
- movs r0, 0x58
- muls r0, r3
- ldrb r3, [r2, 0x2]
- adds r0, r3
- adds r1, 0x18
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- ldrb r1, [r2, 0x3]
- cmp r0, r1
- bne _08108D04
- ldrb r1, [r2, 0x4]
- ldrb r0, [r2, 0x5]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _08108D0A
- .align 2, 0
-_08108CFC: .4byte gUnknown_02024C08
-_08108D00: .4byte gBattleMons
-_08108D04:
- adds r0, r2, 0
- adds r0, 0x8
- str r0, [r4]
-_08108D0A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end BattleAICmd_if_stat_level_equal
-
- thumb_func_start BattleAICmd_if_stat_level_not_equal
-BattleAICmd_if_stat_level_not_equal: @ 8108D10
- push {r4,lr}
- ldr r0, _08108D24 @ =gAIScriptPtr
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r4, r0, 0
- cmp r1, 0x1
- bne _08108D2C
- ldr r0, _08108D28 @ =gUnknown_02024C07
- b _08108D2E
- .align 2, 0
-_08108D24: .4byte gAIScriptPtr
-_08108D28: .4byte gUnknown_02024C07
-_08108D2C:
- ldr r0, _08108D64 @ =gUnknown_02024C08
-_08108D2E:
- ldrb r3, [r0]
- ldr r1, _08108D68 @ =gBattleMons
- ldr r2, [r4]
- movs r0, 0x58
- muls r0, r3
- ldrb r3, [r2, 0x2]
- adds r0, r3
- adds r1, 0x18
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- ldrb r1, [r2, 0x3]
- cmp r0, r1
- beq _08108D6C
- ldrb r1, [r2, 0x4]
- ldrb r0, [r2, 0x5]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _08108D72
- .align 2, 0
-_08108D64: .4byte gUnknown_02024C08
-_08108D68: .4byte gBattleMons
-_08108D6C:
- adds r0, r2, 0
- adds r0, 0x8
- str r0, [r4]
-_08108D72:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end BattleAICmd_if_stat_level_not_equal
-
- thumb_func_start BattleAICmd_if_can_faint
-BattleAICmd_if_can_faint: @ 8108D78
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r2, _08108E1C @ =gBattleMoves
- ldr r6, _08108E20 @ =0x02016800
- ldrh r1, [r6, 0x2]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- bls _08108E4C
- ldr r0, _08108E24 @ =gUnknown_02024DEC
- movs r1, 0
- strh r1, [r0]
- ldr r2, _08108E28 @ =0xfffff81c
- adds r0, r6, r2
- strb r1, [r0]
- adds r2, 0x3
- adds r0, r6, r2
- movs r2, 0x1
- mov r8, r2
- mov r2, r8
- strb r2, [r0]
- ldr r0, _08108E2C @ =gUnknown_02024C68
- strb r1, [r0]
- ldr r0, _08108E30 @ =gCritMultiplier
- strb r2, [r0]
- ldr r5, _08108E34 @ =gUnknown_02024BE6
- ldrh r0, [r6, 0x2]
- strh r0, [r5]
- ldr r4, _08108E38 @ =gUnknown_02024C07
- ldrb r0, [r4]
- ldr r7, _08108E3C @ =gUnknown_02024C08
- ldrb r1, [r7]
- bl sub_801CAF8
- ldrh r0, [r5]
- ldrb r1, [r4]
- ldrb r2, [r7]
- bl move_effectiveness_something
- ldr r4, _08108E40 @ =gUnknown_02024BEC
- adds r0, r6, 0
- adds r0, 0x18
- ldrb r6, [r6, 0x1]
- adds r0, r6
- ldrb r1, [r0]
- ldr r0, [r4]
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _08108DEE
- mov r0, r8
- str r0, [r4]
-_08108DEE:
- ldr r2, _08108E44 @ =gBattleMons
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r1, [r0, 0x28]
- ldr r0, [r4]
- cmp r1, r0
- bgt _08108E4C
- ldr r3, _08108E48 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _08108E54
- .align 2, 0
-_08108E1C: .4byte gBattleMoves
-_08108E20: .4byte 0x02016800
-_08108E24: .4byte gUnknown_02024DEC
-_08108E28: .4byte 0xfffff81c
-_08108E2C: .4byte gUnknown_02024C68
-_08108E30: .4byte gCritMultiplier
-_08108E34: .4byte gUnknown_02024BE6
-_08108E38: .4byte gUnknown_02024C07
-_08108E3C: .4byte gUnknown_02024C08
-_08108E40: .4byte gUnknown_02024BEC
-_08108E44: .4byte gBattleMons
-_08108E48: .4byte gAIScriptPtr
-_08108E4C:
- ldr r1, _08108E60 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08108E54:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08108E60: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_if_can_faint
-
- thumb_func_start BattleAICmd_if_cant_faint
-BattleAICmd_if_cant_faint: @ 8108E64
- push {r4-r7,lr}
- ldr r2, _08108EF8 @ =gBattleMoves
- ldr r7, _08108EFC @ =0x02016800
- ldrh r1, [r7, 0x2]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- bls _08108F28
- ldr r0, _08108F00 @ =gUnknown_02024DEC
- movs r1, 0
- strh r1, [r0]
- ldr r2, _08108F04 @ =0xfffff81c
- adds r0, r7, r2
- strb r1, [r0]
- adds r2, 0x3
- adds r0, r7, r2
- movs r2, 0x1
- strb r2, [r0]
- ldr r0, _08108F08 @ =gUnknown_02024C68
- strb r1, [r0]
- ldr r0, _08108F0C @ =gCritMultiplier
- strb r2, [r0]
- ldr r6, _08108F10 @ =gUnknown_02024BE6
- ldrh r0, [r7, 0x2]
- strh r0, [r6]
- ldr r4, _08108F14 @ =gUnknown_02024C07
- ldrb r0, [r4]
- ldr r5, _08108F18 @ =gUnknown_02024C08
- ldrb r1, [r5]
- bl sub_801CAF8
- ldrh r0, [r6]
- ldrb r1, [r4]
- ldrb r2, [r5]
- bl move_effectiveness_something
- ldr r4, _08108F1C @ =gUnknown_02024BEC
- adds r0, r7, 0
- adds r0, 0x18
- ldrb r7, [r7, 0x1]
- adds r0, r7
- ldrb r1, [r0]
- ldr r0, [r4]
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- ldr r3, _08108F20 @ =gBattleMons
- ldrb r2, [r5]
- movs r1, 0x58
- muls r1, r2
- adds r1, r3
- ldrh r1, [r1, 0x28]
- cmp r1, r0
- ble _08108F28
- ldr r3, _08108F24 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _08108F30
- .align 2, 0
-_08108EF8: .4byte gBattleMoves
-_08108EFC: .4byte 0x02016800
-_08108F00: .4byte gUnknown_02024DEC
-_08108F04: .4byte 0xfffff81c
-_08108F08: .4byte gUnknown_02024C68
-_08108F0C: .4byte gCritMultiplier
-_08108F10: .4byte gUnknown_02024BE6
-_08108F14: .4byte gUnknown_02024C07
-_08108F18: .4byte gUnknown_02024C08
-_08108F1C: .4byte gUnknown_02024BEC
-_08108F20: .4byte gBattleMons
-_08108F24: .4byte gAIScriptPtr
-_08108F28:
- ldr r1, _08108F38 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08108F30:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08108F38: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_if_cant_faint
-
- thumb_func_start BattleAICmd_unk_3F
-BattleAICmd_unk_3F: @ 8108F3C
- push {r4-r7,lr}
- ldr r1, _08108F58 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r6, r0, 0x2
- ldrb r0, [r0, 0x1]
- adds r4, r1, 0
- cmp r0, 0x1
- beq _08108F64
- cmp r0, 0x1
- bgt _08108F5C
- cmp r0, 0
- beq _08108FA8
- b _08109008
- .align 2, 0
-_08108F58: .4byte gAIScriptPtr
-_08108F5C:
- cmp r0, 0x2
- beq _08108FA8
- cmp r0, 0x3
- bne _08109008
-_08108F64:
- movs r3, 0
- ldr r2, _08108FA0 @ =gBattleMons
- ldr r5, _08108FA4 @ =gUnknown_02024C07
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r2, 0xC
- adds r0, r2
- ldrh r0, [r0]
- ldrh r1, [r6]
- cmp r0, r1
- beq _08108F9A
- adds r7, r5, 0
- movs r6, 0x58
- adds r5, r2, 0
- adds r2, r1, 0
-_08108F84:
- adds r3, 0x1
- cmp r3, 0x3
- bgt _08108F9A
- lsls r1, r3, 1
- ldrb r0, [r7]
- muls r0, r6
- adds r1, r0
- adds r1, r5
- ldrh r0, [r1]
- cmp r0, r2
- bne _08108F84
-_08108F9A:
- cmp r3, 0x4
- beq _08108FDE
- b _08108FF0
- .align 2, 0
-_08108FA0: .4byte gBattleMons
-_08108FA4: .4byte gUnknown_02024C07
-_08108FA8:
- movs r3, 0
- ldr r5, _08108FE8 @ =0x02016a00
- ldr r1, _08108FEC @ =gUnknown_02024C08
- ldrb r0, [r1]
- lsrs r0, 1
- lsls r0, 4
- adds r0, r5
- ldrh r0, [r0]
- ldrh r2, [r6]
- cmp r0, r2
- beq _08108FDA
- adds r6, r5, 0
- adds r5, r1, 0
-_08108FC2:
- adds r3, 0x1
- cmp r3, 0x7
- bgt _08108FDA
- lsls r0, r3, 1
- ldrb r1, [r5]
- lsrs r1, 1
- lsls r1, 4
- adds r0, r1
- adds r0, r6
- ldrh r0, [r0]
- cmp r0, r2
- bne _08108FC2
-_08108FDA:
- cmp r3, 0x8
- bne _08108FF0
-_08108FDE:
- ldr r0, [r4]
- adds r0, 0x8
- str r0, [r4]
- b _08109008
- .align 2, 0
-_08108FE8: .4byte 0x02016a00
-_08108FEC: .4byte gUnknown_02024C08
-_08108FF0:
- ldr r2, [r4]
- ldrb r1, [r2, 0x4]
- ldrb r0, [r2, 0x5]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
-_08109008:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BattleAICmd_unk_3F
-
- thumb_func_start BattleAICmd_unk_40
-BattleAICmd_unk_40: @ 8109010
- push {r4-r7,lr}
- ldr r1, _0810902C @ =gAIScriptPtr
- ldr r0, [r1]
- adds r6, r0, 0x2
- ldrb r0, [r0, 0x1]
- adds r4, r1, 0
- cmp r0, 0x1
- beq _08109038
- cmp r0, 0x1
- bgt _08109030
- cmp r0, 0
- beq _0810907C
- b _081090DC
- .align 2, 0
-_0810902C: .4byte gAIScriptPtr
-_08109030:
- cmp r0, 0x2
- beq _0810907C
- cmp r0, 0x3
- bne _081090DC
-_08109038:
- movs r3, 0
- ldr r2, _08109074 @ =gBattleMons
- ldr r5, _08109078 @ =gUnknown_02024C07
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r2, 0xC
- adds r0, r2
- ldrh r0, [r0]
- ldrh r1, [r6]
- cmp r0, r1
- beq _0810906E
- adds r7, r5, 0
- movs r6, 0x58
- adds r5, r2, 0
- adds r2, r1, 0
-_08109058:
- adds r3, 0x1
- cmp r3, 0x3
- bgt _0810906E
- lsls r1, r3, 1
- ldrb r0, [r7]
- muls r0, r6
- adds r1, r0
- adds r1, r5
- ldrh r0, [r1]
- cmp r0, r2
- bne _08109058
-_0810906E:
- cmp r3, 0x4
- bne _081090B2
- b _081090C4
- .align 2, 0
-_08109074: .4byte gBattleMons
-_08109078: .4byte gUnknown_02024C07
-_0810907C:
- movs r3, 0
- ldr r5, _081090BC @ =0x02016a00
- ldr r1, _081090C0 @ =gUnknown_02024C08
- ldrb r0, [r1]
- lsrs r0, 1
- lsls r0, 4
- adds r0, r5
- ldrh r0, [r0]
- ldrh r2, [r6]
- cmp r0, r2
- beq _081090AE
- adds r6, r5, 0
- adds r5, r1, 0
-_08109096:
- adds r3, 0x1
- cmp r3, 0x7
- bgt _081090AE
- lsls r0, r3, 1
- ldrb r1, [r5]
- lsrs r1, 1
- lsls r1, 4
- adds r0, r1
- adds r0, r6
- ldrh r0, [r0]
- cmp r0, r2
- bne _08109096
-_081090AE:
- cmp r3, 0x8
- beq _081090C4
-_081090B2:
- ldr r0, [r4]
- adds r0, 0x8
- str r0, [r4]
- b _081090DC
- .align 2, 0
-_081090BC: .4byte 0x02016a00
-_081090C0: .4byte gUnknown_02024C08
-_081090C4:
- ldr r2, [r4]
- ldrb r1, [r2, 0x4]
- ldrb r0, [r2, 0x5]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
-_081090DC:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BattleAICmd_unk_40
-
- thumb_func_start BattleAICmd_if_move_effect
-BattleAICmd_if_move_effect: @ 81090E4
- push {r4-r7,lr}
- ldr r1, _081090FC @ =gAIScriptPtr
- ldr r0, [r1]
- ldrb r0, [r0, 0x1]
- adds r4, r1, 0
- cmp r0, 0x1
- beq _08109108
- cmp r0, 0x1
- bgt _08109100
- cmp r0, 0
- beq _0810915C
- b _081091B8
- .align 2, 0
-_081090FC: .4byte gAIScriptPtr
-_08109100:
- cmp r0, 0x2
- beq _0810915C
- cmp r0, 0x3
- bne _081091B8
-_08109108:
- movs r3, 0
- ldr r1, _0810914C @ =gBattleMons
- ldr r0, _08109150 @ =gUnknown_02024C07
- ldrb r2, [r0]
- ldr r6, _08109154 @ =gBattleMoves
- movs r0, 0x58
- muls r0, r2
- adds r1, 0xC
- adds r2, r0, r1
- ldr r5, _08109158 @ =gAIScriptPtr
-_0810911C:
- ldrh r0, [r2]
- cmp r0, 0
- beq _08109136
- adds r1, r0, 0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldr r1, [r5]
- ldrb r0, [r0]
- ldrb r1, [r1, 0x2]
- cmp r0, r1
- beq _0810913E
-_08109136:
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x3
- ble _0810911C
-_0810913E:
- cmp r3, 0x4
- bne _081091A0
- ldr r0, [r4]
- adds r0, 0x7
- str r0, [r4]
- b _081091B8
- .align 2, 0
-_0810914C: .4byte gBattleMons
-_08109150: .4byte gUnknown_02024C07
-_08109154: .4byte gBattleMoves
-_08109158: .4byte gAIScriptPtr
-_0810915C:
- movs r3, 0
- ldr r1, _081091C0 @ =gBattleMons
- ldr r0, _081091C4 @ =gUnknown_02024C07
- ldrb r2, [r0]
- ldr r7, _081091C8 @ =gBattleMoves
- ldr r6, _081091CC @ =0x02016a00
- ldr r5, _081091D0 @ =gUnknown_02024C08
- movs r0, 0x58
- muls r0, r2
- adds r1, 0xC
- adds r2, r0, r1
-_08109172:
- lsls r1, r3, 1
- ldrh r0, [r2]
- cmp r0, 0
- beq _08109198
- ldrb r0, [r5]
- lsrs r0, 1
- lsls r0, 4
- adds r0, r1, r0
- adds r0, r6
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- ldr r1, [r4]
- ldrb r0, [r0]
- ldrb r1, [r1, 0x2]
- cmp r0, r1
- beq _081091A0
-_08109198:
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x7
- ble _08109172
-_081091A0:
- ldr r2, [r4]
- ldrb r1, [r2, 0x3]
- ldrb r0, [r2, 0x4]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
-_081091B8:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081091C0: .4byte gBattleMons
-_081091C4: .4byte gUnknown_02024C07
-_081091C8: .4byte gBattleMoves
-_081091CC: .4byte 0x02016a00
-_081091D0: .4byte gUnknown_02024C08
- thumb_func_end BattleAICmd_if_move_effect
-
- thumb_func_start BattleAICmd_if_not_move_effect
-BattleAICmd_if_not_move_effect: @ 81091D4
- push {r4-r6,lr}
- ldr r1, _081091EC @ =gAIScriptPtr
- ldr r0, [r1]
- ldrb r0, [r0, 0x1]
- adds r4, r1, 0
- cmp r0, 0x1
- beq _081091F8
- cmp r0, 0x1
- bgt _081091F0
- cmp r0, 0
- beq _0810925C
- b _08109294
- .align 2, 0
-_081091EC: .4byte gAIScriptPtr
-_081091F0:
- cmp r0, 0x2
- beq _0810925C
- cmp r0, 0x3
- bne _08109294
-_081091F8:
- movs r3, 0
- ldr r1, _0810924C @ =gBattleMons
- ldr r0, _08109250 @ =gUnknown_02024C07
- ldrb r2, [r0]
- ldr r6, _08109254 @ =gBattleMoves
- movs r0, 0x58
- muls r0, r2
- adds r1, 0xC
- adds r2, r0, r1
- ldr r5, _08109258 @ =gAIScriptPtr
-_0810920C:
- ldrh r0, [r2]
- cmp r0, 0
- beq _08109226
- adds r1, r0, 0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldr r1, [r5]
- ldrb r0, [r0]
- ldrb r1, [r1, 0x2]
- cmp r0, r1
- beq _0810922E
-_08109226:
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x3
- ble _0810920C
-_0810922E:
- cmp r3, 0x4
- bne _0810928E
- ldr r2, [r4]
- ldrb r1, [r2, 0x3]
- ldrb r0, [r2, 0x4]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _08109294
- .align 2, 0
-_0810924C: .4byte gBattleMons
-_08109250: .4byte gUnknown_02024C07
-_08109254: .4byte gBattleMoves
-_08109258: .4byte gAIScriptPtr
-_0810925C:
- movs r3, 0
- ldr r1, _0810929C @ =0x02016a00
- ldr r0, _081092A0 @ =gUnknown_02024C08
- ldrb r0, [r0]
- lsrs r0, 1
- lsls r0, 4
- adds r2, r0, r1
- ldr r5, _081092A4 @ =gBattleMoves
-_0810926C:
- ldrh r0, [r2]
- cmp r0, 0
- beq _08109286
- adds r1, r0, 0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, [r4]
- ldrb r0, [r0]
- ldrb r1, [r1, 0x2]
- cmp r0, r1
- beq _0810928E
-_08109286:
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x7
- ble _0810926C
-_0810928E:
- ldr r0, [r4]
- adds r0, 0x7
- str r0, [r4]
-_08109294:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0810929C: .4byte 0x02016a00
-_081092A0: .4byte gUnknown_02024C08
-_081092A4: .4byte gBattleMoves
- thumb_func_end BattleAICmd_if_not_move_effect
-
- thumb_func_start BattleAICmd_if_last_move_did_damage
-BattleAICmd_if_last_move_did_damage: @ 81092A8
- push {r4,r5,lr}
- ldr r0, _081092BC @ =gAIScriptPtr
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r5, r0, 0
- cmp r1, 0x1
- bne _081092C4
- ldr r0, _081092C0 @ =gUnknown_02024C07
- b _081092C6
- .align 2, 0
-_081092BC: .4byte gAIScriptPtr
-_081092C0: .4byte gUnknown_02024C07
-_081092C4:
- ldr r0, _081092E4 @ =gUnknown_02024C08
-_081092C6:
- ldrb r3, [r0]
- adds r4, r5, 0
- ldr r2, [r4]
- ldrb r0, [r2, 0x2]
- cmp r0, 0
- bne _081092EC
- ldr r0, _081092E8 @ =gUnknown_02024CA8
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r1, r0
- ldrh r0, [r1, 0x4]
- cmp r0, 0
- beq _081092F0
- b _08109306
- .align 2, 0
-_081092E4: .4byte gUnknown_02024C08
-_081092E8: .4byte gUnknown_02024CA8
-_081092EC:
- cmp r0, 0x1
- beq _081092F6
-_081092F0:
- adds r0, r2, 0x7
- str r0, [r4]
- b _08109328
-_081092F6:
- ldr r0, _08109320 @ =gUnknown_02024CA8
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r1, r0
- ldrh r0, [r1, 0x6]
- cmp r0, 0
- beq _08109324
-_08109306:
- ldrb r1, [r2, 0x3]
- ldrb r0, [r2, 0x4]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _08109328
- .align 2, 0
-_08109320: .4byte gUnknown_02024CA8
-_08109324:
- adds r0, r2, 0x7
- str r0, [r5]
-_08109328:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end BattleAICmd_if_last_move_did_damage
-
- thumb_func_start BattleAICmd_if_encored
-BattleAICmd_if_encored: @ 8109330
- push {r4,lr}
- ldr r4, _08109344 @ =gAIScriptPtr
- ldr r3, [r4]
- ldrb r0, [r3, 0x1]
- cmp r0, 0
- beq _08109348
- cmp r0, 0x1
- beq _08109370
- b _081093AC
- .align 2, 0
-_08109344: .4byte gAIScriptPtr
-_08109348:
- ldr r2, _08109364 @ =gUnknown_02024CA8
- ldr r0, _08109368 @ =gUnknown_02024A60
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _0810936C @ =0x02016800
- ldrh r0, [r0, 0x4]
- ldrh r1, [r1, 0x2]
- cmp r0, r1
- beq _08109388
- b _081093AC
- .align 2, 0
-_08109364: .4byte gUnknown_02024CA8
-_08109368: .4byte gUnknown_02024A60
-_0810936C: .4byte 0x02016800
-_08109370:
- ldr r2, _081093A0 @ =gUnknown_02024CA8
- ldr r0, _081093A4 @ =gUnknown_02024A60
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _081093A8 @ =0x02016800
- ldrh r0, [r0, 0x6]
- ldrh r1, [r1, 0x2]
- cmp r0, r1
- bne _081093AC
-_08109388:
- ldrb r1, [r3, 0x2]
- ldrb r0, [r3, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r3, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r3, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _081093B0
- .align 2, 0
-_081093A0: .4byte gUnknown_02024CA8
-_081093A4: .4byte gUnknown_02024A60
-_081093A8: .4byte 0x02016800
-_081093AC:
- adds r0, r3, 0x6
- str r0, [r4]
-_081093B0:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end BattleAICmd_if_encored
-
- thumb_func_start BattleAICmd_unk_45
-BattleAICmd_unk_45: @ 81093B8
- ldr r2, _081093C4 @ =0x02016800
- ldrb r1, [r2, 0x10]
- movs r0, 0xB
- orrs r0, r1
- strb r0, [r2, 0x10]
- bx lr
- .align 2, 0
-_081093C4: .4byte 0x02016800
- thumb_func_end BattleAICmd_unk_45
-
- thumb_func_start BattleAICmd_if_random_2
-BattleAICmd_if_random_2: @ 81093C8
- push {r4,lr}
- ldr r0, _0810940C @ =0x02000000
- ldr r1, _08109410 @ =0x00016088
- adds r0, r1
- ldrb r0, [r0]
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 24
- lsrs r4, 24
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r4
- bcs _08109418
- ldr r3, _08109414 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _08109420
- .align 2, 0
-_0810940C: .4byte 0x02000000
-_08109410: .4byte 0x00016088
-_08109414: .4byte gAIScriptPtr
-_08109418:
- ldr r1, _08109428 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08109420:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08109428: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_if_random_2
-
- thumb_func_start BattleAICmd_unk_47
-BattleAICmd_unk_47: @ 810942C
- ldr r2, _08109438 @ =0x02016800
- ldrb r1, [r2, 0x10]
- movs r0, 0xD
- orrs r0, r1
- strb r0, [r2, 0x10]
- bx lr
- .align 2, 0
-_08109438: .4byte 0x02016800
- thumb_func_end BattleAICmd_unk_47
-
- thumb_func_start BattleAICmd_get_hold_effect
-BattleAICmd_get_hold_effect: @ 810943C
- push {r4,lr}
- ldr r0, _0810944C @ =gAIScriptPtr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- bne _08109454
- ldr r0, _08109450 @ =gUnknown_02024C07
- b _08109456
- .align 2, 0
-_0810944C: .4byte gAIScriptPtr
-_08109450: .4byte gUnknown_02024C07
-_08109454:
- ldr r0, _0810947C @ =gUnknown_02024C08
-_08109456:
- ldrb r4, [r0]
- adds r0, r4, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _08109488
- adds r0, r4, 0
- bl battle_get_per_side_status
- movs r1, 0x1
- ands r1, r0
- ldr r2, _08109480 @ =0x02016800
- ldr r3, _08109484 @ =0x00000222
- adds r0, r2, r3
- adds r1, r0
- ldrb r0, [r1]
- str r0, [r2, 0x8]
- b _0810949E
- .align 2, 0
-_0810947C: .4byte gUnknown_02024C08
-_08109480: .4byte 0x02016800
-_08109484: .4byte 0x00000222
-_08109488:
- ldr r1, _081094AC @ =gBattleMons
- movs r0, 0x58
- muls r0, r4
- adds r0, r1
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffect
- ldr r1, _081094B0 @ =0x02016800
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1, 0x8]
-_0810949E:
- ldr r1, _081094B4 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081094AC: .4byte gBattleMons
-_081094B0: .4byte 0x02016800
-_081094B4: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_get_hold_effect
-
- thumb_func_start BattleAICmd_get_gender
-BattleAICmd_get_gender: @ 81094B8
- push {lr}
- ldr r0, _081094C8 @ =gAIScriptPtr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- bne _081094D0
- ldr r0, _081094CC @ =gUnknown_02024C07
- b _081094D2
- .align 2, 0
-_081094C8: .4byte gAIScriptPtr
-_081094CC: .4byte gUnknown_02024C07
-_081094D0:
- ldr r0, _081094FC @ =gUnknown_02024C08
-_081094D2:
- ldrb r1, [r0]
- ldr r2, _08109500 @ =gBattleMons
- movs r0, 0x58
- muls r1, r0
- adds r0, r1, r2
- ldrh r0, [r0]
- adds r2, 0x48
- adds r1, r2
- ldr r1, [r1]
- bl GetGenderFromSpeciesAndPersonality
- ldr r1, _08109504 @ =0x02016800
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1, 0x8]
- ldr r1, _08109508 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_081094FC: .4byte gUnknown_02024C08
-_08109500: .4byte gBattleMons
-_08109504: .4byte 0x02016800
-_08109508: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_get_gender
-
- thumb_func_start BattleAICmd_is_first_turn
-BattleAICmd_is_first_turn: @ 810950C
- push {r4,lr}
- ldr r0, _08109520 @ =gAIScriptPtr
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r4, r0, 0
- cmp r1, 0x1
- bne _08109528
- ldr r0, _08109524 @ =gUnknown_02024C07
- b _0810952A
- .align 2, 0
-_08109520: .4byte gAIScriptPtr
-_08109524: .4byte gUnknown_02024C07
-_08109528:
- ldr r0, _08109548 @ =gUnknown_02024C08
-_0810952A:
- ldrb r3, [r0]
- ldr r2, _0810954C @ =0x02016800
- ldr r1, _08109550 @ =gUnknown_02024CA8
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x16]
- str r0, [r2, 0x8]
- ldr r0, [r4]
- adds r0, 0x2
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08109548: .4byte gUnknown_02024C08
-_0810954C: .4byte 0x02016800
-_08109550: .4byte gUnknown_02024CA8
- thumb_func_end BattleAICmd_is_first_turn
-
- thumb_func_start BattleAICmd_get_stockpile_count
-BattleAICmd_get_stockpile_count: @ 8109554
- push {r4,lr}
- ldr r0, _08109568 @ =gAIScriptPtr
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r4, r0, 0
- cmp r1, 0x1
- bne _08109570
- ldr r0, _0810956C @ =gUnknown_02024C07
- b _08109572
- .align 2, 0
-_08109568: .4byte gAIScriptPtr
-_0810956C: .4byte gUnknown_02024C07
-_08109570:
- ldr r0, _08109590 @ =gUnknown_02024C08
-_08109572:
- ldrb r3, [r0]
- ldr r2, _08109594 @ =0x02016800
- ldr r1, _08109598 @ =gUnknown_02024CA8
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x9]
- str r0, [r2, 0x8]
- ldr r0, [r4]
- adds r0, 0x2
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08109590: .4byte gUnknown_02024C08
-_08109594: .4byte 0x02016800
-_08109598: .4byte gUnknown_02024CA8
- thumb_func_end BattleAICmd_get_stockpile_count
-
- thumb_func_start BattleAICmd_unk_4C
-BattleAICmd_unk_4C: @ 810959C
- ldr r2, _081095B4 @ =0x02016800
- ldr r0, _081095B8 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- str r0, [r2, 0x8]
- ldr r1, _081095BC @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_081095B4: .4byte 0x02016800
-_081095B8: .4byte gBattleTypeFlags
-_081095BC: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_unk_4C
-
- thumb_func_start BattleAICmd_get_item
-BattleAICmd_get_item: @ 81095C0
- push {lr}
- ldr r0, _081095D4 @ =gAIScriptPtr
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r2, r0, 0
- cmp r1, 0x1
- bne _081095DC
- ldr r0, _081095D8 @ =gUnknown_02024C07
- b _081095DE
- .align 2, 0
-_081095D4: .4byte gAIScriptPtr
-_081095D8: .4byte gUnknown_02024C07
-_081095DC:
- ldr r0, _081095F8 @ =gUnknown_02024C08
-_081095DE:
- ldrb r0, [r0]
- ldr r1, _081095FC @ =0x02016800
- lsls r0, 1
- adds r0, r1
- ldr r3, _08109600 @ =0xfffff8cc
- adds r0, r3
- ldrb r0, [r0]
- str r0, [r1, 0x8]
- ldr r0, [r2]
- adds r0, 0x2
- str r0, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_081095F8: .4byte gUnknown_02024C08
-_081095FC: .4byte 0x02016800
-_08109600: .4byte 0xfffff8cc
- thumb_func_end BattleAICmd_get_item
-
- thumb_func_start BattleAICmd_unk_4E
-BattleAICmd_unk_4E: @ 8109604
- ldr r3, _08109620 @ =0x02016800
- ldr r2, _08109624 @ =gBattleMoves
- ldr r1, [r3, 0x8]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- str r0, [r3, 0x8]
- ldr r1, _08109628 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_08109620: .4byte 0x02016800
-_08109624: .4byte gBattleMoves
-_08109628: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_unk_4E
-
- thumb_func_start BattleAICmd_unk_4F
-BattleAICmd_unk_4F: @ 810962C
- ldr r3, _08109648 @ =0x02016800
- ldr r2, _0810964C @ =gBattleMoves
- ldr r1, [r3, 0x8]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- str r0, [r3, 0x8]
- ldr r1, _08109650 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_08109648: .4byte 0x02016800
-_0810964C: .4byte gBattleMoves
-_08109650: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_unk_4F
-
- thumb_func_start BattleAICmd_unk_50
-BattleAICmd_unk_50: @ 8109654
- ldr r3, _08109670 @ =0x02016800
- ldr r2, _08109674 @ =gBattleMoves
- ldr r1, [r3, 0x8]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- str r0, [r3, 0x8]
- ldr r1, _08109678 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_08109670: .4byte 0x02016800
-_08109674: .4byte gBattleMoves
-_08109678: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_unk_50
-
- thumb_func_start BattleAICmd_get_protect_count
-BattleAICmd_get_protect_count: @ 810967C
- push {r4,lr}
- ldr r0, _08109690 @ =gAIScriptPtr
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r4, r0, 0
- cmp r1, 0x1
- bne _08109698
- ldr r0, _08109694 @ =gUnknown_02024C07
- b _0810969A
- .align 2, 0
-_08109690: .4byte gAIScriptPtr
-_08109694: .4byte gUnknown_02024C07
-_08109698:
- ldr r0, _081096B8 @ =gUnknown_02024C08
-_0810969A:
- ldrb r3, [r0]
- ldr r2, _081096BC @ =0x02016800
- ldr r1, _081096C0 @ =gUnknown_02024CA8
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x8]
- str r0, [r2, 0x8]
- ldr r0, [r4]
- adds r0, 0x2
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081096B8: .4byte gUnknown_02024C08
-_081096BC: .4byte 0x02016800
-_081096C0: .4byte gUnknown_02024CA8
- thumb_func_end BattleAICmd_get_protect_count
-
- thumb_func_start BattleAICmd_unk_52
-BattleAICmd_unk_52: @ 81096C4
- bx lr
- thumb_func_end BattleAICmd_unk_52
-
- thumb_func_start BattleAICmd_unk_53
-BattleAICmd_unk_53: @ 81096C8
- bx lr
- thumb_func_end BattleAICmd_unk_53
-
- thumb_func_start BattleAICmd_unk_54
-BattleAICmd_unk_54: @ 81096CC
- bx lr
- thumb_func_end BattleAICmd_unk_54
-
- thumb_func_start BattleAICmd_unk_55
-BattleAICmd_unk_55: @ 81096D0
- bx lr
- thumb_func_end BattleAICmd_unk_55
-
- thumb_func_start BattleAICmd_unk_56
-BattleAICmd_unk_56: @ 81096D4
- bx lr
- thumb_func_end BattleAICmd_unk_56
-
- thumb_func_start BattleAICmd_unk_57
-BattleAICmd_unk_57: @ 81096D8
- bx lr
- thumb_func_end BattleAICmd_unk_57
-
- thumb_func_start BattleAICmd_call
-BattleAICmd_call: @ 81096DC
- push {r4,lr}
- ldr r4, _08109708 @ =gAIScriptPtr
- ldr r0, [r4]
- adds r0, 0x5
- bl sub_81098C4
- ldr r2, [r4]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08109708: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_call
-
- thumb_func_start BattleAICmd_jump
-BattleAICmd_jump: @ 810970C
- ldr r3, _08109728 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- bx lr
- .align 2, 0
-_08109728: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_jump
-
- thumb_func_start BattleAICmd_unk_5A
-BattleAICmd_unk_5A: @ 810972C
- push {lr}
- bl sub_8109908
- lsls r0, 24
- cmp r0, 0
- bne _08109742
- ldr r2, _08109748 @ =0x02016800
- ldrb r1, [r2, 0x10]
- movs r0, 0x1
- orrs r0, r1
- strb r0, [r2, 0x10]
-_08109742:
- pop {r0}
- bx r0
- .align 2, 0
-_08109748: .4byte 0x02016800
- thumb_func_end BattleAICmd_unk_5A
-
- thumb_func_start BattleAICmd_if_level_cond
-BattleAICmd_if_level_cond: @ 810974C
- push {r4,r5,lr}
- ldr r5, _08109764 @ =gAIScriptPtr
- ldr r4, [r5]
- ldrb r0, [r4, 0x1]
- cmp r0, 0x1
- beq _081097A0
- cmp r0, 0x1
- bgt _08109768
- cmp r0, 0
- beq _0810976E
- b _0810981C
- .align 2, 0
-_08109764: .4byte gAIScriptPtr
-_08109768:
- cmp r0, 0x2
- beq _081097D0
- b _0810981C
-_0810976E:
- ldr r3, _08109794 @ =gBattleMons
- ldr r0, _08109798 @ =gUnknown_02024C07
- ldrb r0, [r0]
- movs r2, 0x58
- adds r1, r0, 0
- muls r1, r2
- adds r1, r3
- adds r1, 0x2A
- ldr r0, _0810979C @ =gUnknown_02024C08
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- adds r0, 0x2A
- ldrb r1, [r1]
- ldrb r0, [r0]
- cmp r1, r0
- bhi _081097F2
- b _08109818
- .align 2, 0
-_08109794: .4byte gBattleMons
-_08109798: .4byte gUnknown_02024C07
-_0810979C: .4byte gUnknown_02024C08
-_081097A0:
- ldr r3, _081097C4 @ =gBattleMons
- ldr r0, _081097C8 @ =gUnknown_02024C07
- ldrb r0, [r0]
- movs r2, 0x58
- adds r1, r0, 0
- muls r1, r2
- adds r1, r3
- adds r1, 0x2A
- ldr r0, _081097CC @ =gUnknown_02024C08
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- adds r0, 0x2A
- ldrb r1, [r1]
- ldrb r0, [r0]
- cmp r1, r0
- bcc _081097F2
- b _08109818
- .align 2, 0
-_081097C4: .4byte gBattleMons
-_081097C8: .4byte gUnknown_02024C07
-_081097CC: .4byte gUnknown_02024C08
-_081097D0:
- ldr r3, _0810980C @ =gBattleMons
- ldr r0, _08109810 @ =gUnknown_02024C07
- ldrb r0, [r0]
- movs r2, 0x58
- adds r1, r0, 0
- muls r1, r2
- adds r1, r3
- adds r1, 0x2A
- ldr r0, _08109814 @ =gUnknown_02024C08
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- adds r0, 0x2A
- ldrb r1, [r1]
- ldrb r0, [r0]
- cmp r1, r0
- bne _08109818
-_081097F2:
- ldrb r1, [r4, 0x2]
- ldrb r0, [r4, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r4, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r4, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r5]
- b _0810981C
- .align 2, 0
-_0810980C: .4byte gBattleMons
-_08109810: .4byte gUnknown_02024C07
-_08109814: .4byte gUnknown_02024C08
-_08109818:
- adds r0, r4, 0x6
- str r0, [r5]
-_0810981C:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end BattleAICmd_if_level_cond
-
- thumb_func_start BattleAICmd_if_taunted
-BattleAICmd_if_taunted: @ 8109824
- push {lr}
- ldr r2, _08109858 @ =gUnknown_02024CA8
- ldr r0, _0810985C @ =gUnknown_02024C08
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x13]
- lsls r0, 28
- cmp r0, 0
- beq _08109864
- ldr r3, _08109860 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0810986C
- .align 2, 0
-_08109858: .4byte gUnknown_02024CA8
-_0810985C: .4byte gUnknown_02024C08
-_08109860: .4byte gAIScriptPtr
-_08109864:
- ldr r1, _08109870 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0810986C:
- pop {r0}
- bx r0
- .align 2, 0
-_08109870: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_if_taunted
-
- thumb_func_start BattleAICmd_if_not_taunted
-BattleAICmd_if_not_taunted: @ 8109874
- push {lr}
- ldr r2, _081098A8 @ =gUnknown_02024CA8
- ldr r0, _081098AC @ =gUnknown_02024C08
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x13]
- lsls r0, 28
- cmp r0, 0
- bne _081098B4
- ldr r3, _081098B0 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _081098BC
- .align 2, 0
-_081098A8: .4byte gUnknown_02024CA8
-_081098AC: .4byte gUnknown_02024C08
-_081098B0: .4byte gAIScriptPtr
-_081098B4:
- ldr r1, _081098C0 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_081098BC:
- pop {r0}
- bx r0
- .align 2, 0
-_081098C0: .4byte gAIScriptPtr
- thumb_func_end BattleAICmd_if_not_taunted
-
- thumb_func_start sub_81098C4
-sub_81098C4: @ 81098C4
- push {r4,lr}
- ldr r4, _081098E0 @ =0x02016c00
- adds r3, r4, 0
- adds r3, 0x20
- ldrb r1, [r3]
- adds r2, r1, 0x1
- strb r2, [r3]
- lsls r1, 24
- lsrs r1, 22
- adds r1, r4
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081098E0: .4byte 0x02016c00
- thumb_func_end sub_81098C4
-
- thumb_func_start unref_sub_81098E4
-unref_sub_81098E4: @ 81098E4
- ldr r3, _08109900 @ =0x02016c00
- adds r2, r3, 0
- adds r2, 0x20
- ldrb r0, [r2]
- adds r1, r0, 0x1
- strb r1, [r2]
- lsls r0, 24
- lsrs r0, 22
- adds r0, r3
- ldr r1, _08109904 @ =gAIScriptPtr
- ldr r1, [r1]
- str r1, [r0]
- bx lr
- .align 2, 0
-_08109900: .4byte 0x02016c00
-_08109904: .4byte gAIScriptPtr
- thumb_func_end unref_sub_81098E4
-
- thumb_func_start sub_8109908
-sub_8109908: @ 8109908
- push {lr}
- ldr r3, _0810991C @ =0x02016c00
- adds r2, r3, 0
- adds r2, 0x20
- ldrb r0, [r2]
- cmp r0, 0
- bne _08109920
- movs r0, 0
- b _08109932
- .align 2, 0
-_0810991C: .4byte 0x02016c00
-_08109920:
- subs r0, 0x1
- strb r0, [r2]
- ldr r1, _08109938 @ =gAIScriptPtr
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- str r0, [r1]
- movs r0, 0x1
-_08109932:
- pop {r1}
- bx r1
- .align 2, 0
-_08109938: .4byte gAIScriptPtr
- thumb_func_end sub_8109908
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/rom_8080874.s b/asm/rom_8080874.s
index 77dad9f9e..28ea3a69f 100644
--- a/asm/rom_8080874.s
+++ b/asm/rom_8080874.s
@@ -6,185 +6,6 @@
.text
- thumb_func_start palette_bg_fill_white
-palette_bg_fill_white: @ 8080874
- push {lr}
- sub sp, 0x4
- ldr r0, _0808088C @ =0x7fff7fff
- str r0, [sp]
- ldr r1, _08080890 @ =gPlttBufferFaded
- ldr r2, _08080894 @ =0x01000100
- mov r0, sp
- bl CpuFastSet
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0808088C: .4byte 0x7fff7fff
-_08080890: .4byte gPlttBufferFaded
-_08080894: .4byte 0x01000100
- thumb_func_end palette_bg_fill_white
-
- thumb_func_start palette_bg_fill_black
-palette_bg_fill_black: @ 8080898
- push {lr}
- sub sp, 0x4
- movs r0, 0
- str r0, [sp]
- ldr r1, _080808B0 @ =gPlttBufferFaded
- ldr r2, _080808B4 @ =0x01000100
- mov r0, sp
- bl CpuFastSet
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_080808B0: .4byte gPlttBufferFaded
-_080808B4: .4byte 0x01000100
- thumb_func_end palette_bg_fill_black
-
- thumb_func_start pal_fill_for_map_transition
-pal_fill_for_map_transition: @ 80808B8
- push {r4,lr}
- bl get_map_light_from_warp0
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sav1_map_get_light_level
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl fade_type_for_given_maplight_pair
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _080808E2
- cmp r0, 0x1
- beq _080808F0
- b _080808FC
-_080808E2:
- movs r0, 0
- movs r1, 0
- bl fade_screen
- bl palette_bg_fill_black
- b _080808FC
-_080808F0:
- movs r0, 0x2
- movs r1, 0
- bl fade_screen
- bl palette_bg_fill_white
-_080808FC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end pal_fill_for_map_transition
-
- thumb_func_start pal_fill_black
-pal_fill_black: @ 8080904
- push {lr}
- movs r0, 0
- movs r1, 0
- bl fade_screen
- bl palette_bg_fill_black
- pop {r0}
- bx r0
- thumb_func_end pal_fill_black
-
- thumb_func_start fade_8080918
-fade_8080918: @ 8080918
- push {r4,lr}
- bl sav1_map_get_light_level
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl warp1_get_mapheader
- ldrb r1, [r0, 0x17]
- adds r0, r4, 0
- bl sub_810CDB8
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _0808093E
- cmp r0, 0x1
- beq _08080948
- b _08080950
-_0808093E:
- movs r0, 0x1
- movs r1, 0
- bl fade_screen
- b _08080950
-_08080948:
- movs r0, 0x3
- movs r1, 0
- bl fade_screen
-_08080950:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end fade_8080918
-
- thumb_func_start sub_8080958
-sub_8080958: @ 8080958
- push {lr}
- lsls r0, 24
- movs r1, 0
- cmp r0, 0
- bne _08080964
- movs r1, 0x1
-_08080964:
- adds r0, r1, 0
- bl sub_8059B88
- pop {r0}
- bx r0
- thumb_func_end sub_8080958
-
- thumb_func_start task0A_asap_script_env_2_enable_and_set_ctx_running
-task0A_asap_script_env_2_enable_and_set_ctx_running: @ 8080970
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8080E70
- cmp r0, 0x1
- bne _08080988
- adds r0, r4, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_08080988:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end task0A_asap_script_env_2_enable_and_set_ctx_running
-
- thumb_func_start sub_8080990
-sub_8080990: @ 8080990
- push {lr}
- bl ScriptContext2_Enable
- bl sub_8053E90
- bl pal_fill_black
- ldr r0, _080809AC @ =task0A_asap_script_env_2_enable_and_set_ctx_running
- movs r1, 0xA
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080809AC: .4byte task0A_asap_script_env_2_enable_and_set_ctx_running
- thumb_func_end sub_8080990
-
- thumb_func_start sub_80809B0
-sub_80809B0: @ 80809B0
- push {lr}
- bl ScriptContext2_Enable
- bl pal_fill_black
- ldr r0, _080809C8 @ =task0A_asap_script_env_2_enable_and_set_ctx_running
- movs r1, 0xA
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080809C8: .4byte task0A_asap_script_env_2_enable_and_set_ctx_running
- thumb_func_end sub_80809B0
-
thumb_func_start task_mpl_807DD60
task_mpl_807DD60: @ 80809CC
push {r4,r5,lr}
diff --git a/asm/rom_8094928.s b/asm/rom_8094928.s
index d272b277a..a9d0e3dcc 100644
--- a/asm/rom_8094928.s
+++ b/asm/rom_8094928.s
@@ -6,320 +6,6 @@
.text
- thumb_func_start unref_sub_8094928
-unref_sub_8094928: @ 8094928
- push {lr}
- ldr r1, _08094938 @ =gPokemonStorage
- ldr r2, _0809493C @ =0x000083d0
- bl memcpy
- pop {r0}
- bx r0
- .align 2, 0
-_08094938: .4byte gPokemonStorage
-_0809493C: .4byte 0x000083d0
- thumb_func_end unref_sub_8094928
-
- thumb_func_start unref_sub_8094940
-unref_sub_8094940: @ 8094940
- push {lr}
- adds r1, r0, 0
- ldr r0, _08094950 @ =gPokemonStorage
- ldr r2, _08094954 @ =0x000083d0
- bl memcpy
- pop {r0}
- bx r0
- .align 2, 0
-_08094950: .4byte gPokemonStorage
-_08094954: .4byte 0x000083d0
- thumb_func_end unref_sub_8094940
-
- thumb_func_start sub_8094958
-sub_8094958: @ 8094958
- push {r4,lr}
- ldr r4, _08094974 @ =gUnknown_02038470
- bl sub_803FBBC
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_8094998
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08094974: .4byte gUnknown_02038470
- thumb_func_end sub_8094958
-
- thumb_func_start sub_8094978
-sub_8094978: @ 8094978
- push {lr}
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r2, 1
- adds r0, r2
- ldr r3, _08094994 @ =0x0201606c
- adds r0, r3
- bl sub_8094A74
- pop {r0}
- bx r0
- .align 2, 0
-_08094994: .4byte 0x0201606c
- thumb_func_end sub_8094978
-
- thumb_func_start sub_8094998
-sub_8094998: @ 8094998
- push {r4-r6,lr}
- sub sp, 0x8
- adds r6, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- bl IsLinkDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080949CE
- cmp r4, 0
- beq _080949C0
- movs r0, 0x30
- strb r0, [r6]
- movs r0, 0x45
- strb r0, [r6, 0x1]
- movs r0, 0x12
- strb r0, [r6, 0x2]
- b _08094A68
-_080949C0:
- movs r0, 0x3
- strb r0, [r6]
- movs r0, 0x12
- strb r0, [r6, 0x1]
- movs r0, 0x45
- strb r0, [r6, 0x2]
- b _08094A68
-_080949CE:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _08094A0C
- movs r5, 0x1
- movs r0, 0
- bl battle_get_side_with_given_state
- mov r2, sp
- ldr r1, _08094A08 @ =gUnknown_02024A6A
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r0, [r0]
- strb r0, [r2]
- movs r4, 0
- mov r1, sp
-_080949F2:
- ldrb r0, [r1]
- cmp r4, r0
- beq _08094A00
- mov r2, sp
- adds r0, r2, r5
- strb r4, [r0]
- adds r5, 0x1
-_08094A00:
- adds r4, 0x1
- cmp r4, 0x5
- ble _080949F2
- b _08094A50
- .align 2, 0
-_08094A08: .4byte gUnknown_02024A6A
-_08094A0C:
- movs r5, 0x2
- movs r0, 0
- bl battle_get_side_with_given_state
- mov r1, sp
- ldr r4, _08094A70 @ =gUnknown_02024A6A
- lsls r0, 24
- lsrs r0, 23
- adds r0, r4
- ldrh r0, [r0]
- strb r0, [r1]
- movs r0, 0x2
- bl battle_get_side_with_given_state
- mov r1, sp
- lsls r0, 24
- lsrs r0, 23
- adds r0, r4
- ldrh r0, [r0]
- strb r0, [r1, 0x1]
- movs r4, 0
-_08094A36:
- ldrb r0, [r1]
- cmp r4, r0
- beq _08094A4A
- ldrb r0, [r1, 0x1]
- cmp r4, r0
- beq _08094A4A
- mov r2, sp
- adds r0, r2, r5
- strb r4, [r0]
- adds r5, 0x1
-_08094A4A:
- adds r4, 0x1
- cmp r4, 0x5
- ble _08094A36
-_08094A50:
- movs r4, 0
- mov r3, sp
-_08094A54:
- adds r0, r6, r4
- ldrb r1, [r3]
- lsls r1, 4
- ldrb r2, [r3, 0x1]
- orrs r1, r2
- strb r1, [r0]
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x2
- ble _08094A54
-_08094A68:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08094A70: .4byte gUnknown_02024A6A
- thumb_func_end sub_8094998
-
- thumb_func_start sub_8094A74
-sub_8094A74: @ 8094A74
- push {r4-r7,lr}
- sub sp, 0x8
- adds r5, r0, 0
- adds r0, r2, 0
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _08094A9C
- movs r0, 0
- bl battle_get_side_with_given_state
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x2
- b _08094AA8
-_08094A9C:
- movs r0, 0x1
- bl battle_get_side_with_given_state
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x3
-_08094AA8:
- bl battle_get_side_with_given_state
- lsls r0, 24
- lsrs r6, r0, 24
- bl IsLinkDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08094ADC
- cmp r7, 0
- beq _08094ACE
- movs r0, 0x30
- strb r0, [r5]
- movs r0, 0x45
- strb r0, [r5, 0x1]
- movs r0, 0x12
- strb r0, [r5, 0x2]
- b _08094B5E
-_08094ACE:
- movs r0, 0x3
- strb r0, [r5]
- movs r0, 0x12
- strb r0, [r5, 0x1]
- movs r0, 0x45
- strb r0, [r5, 0x2]
- b _08094B5E
-_08094ADC:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _08094B14
- movs r3, 0x1
- mov r2, sp
- ldr r1, _08094B10 @ =gUnknown_02024A6A
- lsls r0, r4, 1
- adds r0, r1
- ldrh r0, [r0]
- strb r0, [r2]
- movs r4, 0
- mov r1, sp
-_08094AF8:
- ldrb r0, [r1]
- cmp r4, r0
- beq _08094B06
- mov r2, sp
- adds r0, r2, r3
- strb r4, [r0]
- adds r3, 0x1
-_08094B06:
- adds r4, 0x1
- cmp r4, 0x5
- ble _08094AF8
- b _08094B46
- .align 2, 0
-_08094B10: .4byte gUnknown_02024A6A
-_08094B14:
- movs r3, 0x2
- mov r1, sp
- ldr r2, _08094B68 @ =gUnknown_02024A6A
- lsls r0, r4, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1]
- lsls r0, r6, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1, 0x1]
- movs r4, 0
-_08094B2C:
- ldrb r0, [r1]
- cmp r4, r0
- beq _08094B40
- ldrb r0, [r1, 0x1]
- cmp r4, r0
- beq _08094B40
- mov r2, sp
- adds r0, r2, r3
- strb r4, [r0]
- adds r3, 0x1
-_08094B40:
- adds r4, 0x1
- cmp r4, 0x5
- ble _08094B2C
-_08094B46:
- movs r4, 0
- mov r3, sp
-_08094B4A:
- adds r0, r5, r4
- ldrb r1, [r3]
- lsls r1, 4
- ldrb r2, [r3, 0x1]
- orrs r1, r2
- strb r1, [r0]
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x2
- ble _08094B4A
-_08094B5E:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08094B68: .4byte gUnknown_02024A6A
- thumb_func_end sub_8094A74
-
thumb_func_start sub_8094B6C
sub_8094B6C: @ 8094B6C
push {r4-r7,lr}
diff --git a/include/battle.h b/include/battle.h
index d58b234e3..4f1bc70e1 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -38,7 +38,7 @@ struct AI_ThinkingStruct /* 0x2016800 */
/* 0x01 */ u8 moveConsidered;
/* 0x02 */ u16 unk2;
/* 0x04 */ s8 score[4]; // score?
-/* 0x08 */ u32 unk8;
+/* 0x08 */ u32 funcResult;
/* 0x0C */ u32 aiFlags;
/* 0x10 */ u8 unk10;
/* 0x11 */ u8 aiLogicId;
@@ -54,14 +54,22 @@ struct SmallBattleStruct1
u8 unk4;
};
+struct SmallItemStruct
+{
+ u8 item[2][2];
+};
+
struct BattleStruct /* 0x2000000 */
{
u8 filler0[0x1601C];
struct SmallBattleStruct1 unk;
- u8 filler1[0xAB]; // 0x2016020
+ u8 filler1[0x68]; // 0x2016020
+ u8 unk88;
+ u8 filler1_2[0x42];
/* 0x160CB */ u8 linkPlayerIndex;
- u8 filler2[0x734];
- struct AI_ThinkingStruct ai;
+ struct SmallItemStruct item;
+ u8 filler2[0x730];
+ struct AI_ThinkingStruct ai; /* 0x2016800 */
};
extern struct BattleStruct battle_2000000;
diff --git a/include/pokemon.h b/include/pokemon.h
index 10eb05757..3987bada6 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -370,8 +370,8 @@ struct BattleMove
struct PokemonStorage
{
- u8 currentBox;
- struct BoxPokemon boxes[14][30];
+ /* 0x00 */ u8 currentBox;
+ /* 0x01 */ struct BoxPokemon boxes[14][30];
u8 boxNames[14][9];
u8 unkArray[14];
};
diff --git a/include/save_menu_util.h b/include/save_menu_util.h
index 560a39d89..cf1d3f929 100644
--- a/include/save_menu_util.h
+++ b/include/save_menu_util.h
@@ -2,8 +2,8 @@
#define GUARD_SAVE_MENU_UTIL_H
void HandleDrawSaveWindowInfo(s16 left, s16 top);
-void sub_80946C8(u16 left, u16 top);
-u8 sub_809473C(void);
+void HandleCloseSaveWindow(u16 left, u16 top);
+u8 IsResizeSaveWindowEnabled(void);
void PrintSavePlayerName(s16 x, s16 y);
void PrintSaveMapName(s16 x, s16 y);
void PrintSaveBadges(s16 x, s16 y);
diff --git a/ld_script.txt b/ld_script.txt
index ad2541c74..304d4ebf4 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -113,6 +113,7 @@ SECTIONS {
src/title_screen.o(.text);
src/weather.o(.text);
asm/weather.o(.text);
+ src/rom_8080874.o(.text);
asm/rom_8080874.o(.text);
src/battle_setup.o(.text);
asm/cable_club.o(.text);
@@ -128,6 +129,7 @@ SECTIONS {
asm/pokedex.o(.text);
src/trainer_card.o(.text);
src/save_menu_util.o(.text);
+ src/rom_8094928.o(.text);
asm/rom_8094928.o(.text);
asm/battle_party_menu.o(.text);
asm/pokemon_storage_system.o(.text);
@@ -192,7 +194,6 @@ SECTIONS {
asm/slot_machine.o(.text);
src/contest_painting.o(.text);
src/battle_ai.o(.text);
- asm/battle_ai.o(.text);
asm/trader.o(.text);
src/starter_choose.o(.text);
src/wallclock.o(.text);
diff --git a/src/battle_ai.c b/src/battle_ai.c
index 7c9b7f17e..4727b2eb0 100644
--- a/src/battle_ai.c
+++ b/src/battle_ai.c
@@ -5,12 +5,19 @@
#include "rng.h"
#include "abilities.h"
#include "species.h"
+#include "item.h"
#define AIScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24)
#define AIScriptRead16(ptr) ((ptr)[0] | (ptr)[1] << 8)
#define AIScriptRead8(ptr) ((ptr)[0])
#define AIScriptReadPtr(ptr) (u8*) AIScriptRead32(ptr)
+#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(&battle_2000000 + 0x16800))
+#define AI_ARRAY_160CC ((&battle_2000000 + 0x160CC))
+
+extern void sub_801CAF8(u8, u8);
+extern u8 sub_8109908(void);
+
enum
{
TARGET,
@@ -20,10 +27,11 @@ enum
extern void move_effectiveness_something(u16, u8, u8);
extern u16 gBattleTypeFlags;
+extern u16 gBattleWeather;
extern u8 gUnknown_02024A60;
extern u8 gUnknown_02024A6A[][2];
extern u16 gUnknown_02024BE6;
-extern u32 gUnknown_02024BEC;
+extern int gUnknown_02024BEC;
extern u8 gUnknown_02024C07; // something player?
extern u8 gUnknown_02024C08; // something opponent?
extern u8 gUnknown_02024C0C;
@@ -33,6 +41,7 @@ extern u16 gUnknown_02024C34[];
extern u32 gUnknown_02024ACC[];
extern u32 gUnknown_02024C98[];
extern u16 gUnknown_02024C7A[];
+extern struct BattlePokemon gBattleMons[];
extern struct BattlePokemon gUnknown_02024A8C[];
extern u8 gUnknown_030042E0[];
extern u8 gCritMultiplier;
@@ -40,11 +49,13 @@ extern u16 gTrainerBattleOpponent;
extern u32 gBitTable[];
extern u8 *BattleAIs[];
extern struct Trainer gTrainers[];
-extern struct BattlePokemon gBattleMons[];
extern struct BattleMove gBattleMoves[];
extern struct BaseStats gBaseStats[];
extern void (*gBattleAICmdTable[])(void);
+// needed to match the hack that is get_item, thanks cam, someone else clean this up later.
+extern u8 unk_2000000[];
+
/*
gAIScriptPtr is a pointer to the next battle AI cmd command to read.
when a command finishes processing, gAIScriptPtr is incremented by
@@ -65,16 +76,34 @@ struct UnknownStruct1
struct UnknownStruct3
{
- u8 filler0[0x20];
+ u8 *ptr[4]; // might be 8 pointers
+ u8 filler0[0x10];
u8 unk20;
};
+struct UnknownStruct4
+{
+ u8 filler0[0x3];
+ u16 unk4;
+ u16 unk6;
+ u8 unk8;
+ u8 unk9;
+ u8 fillerA[0x9];
+ u8 taunt:4;
+ u8 unkC:4;
+ u8 fillerD[0x2];
+ u8 unk16;
+ u8 filler17[0x4];
+};
+
extern struct UnknownStruct1 unk_2016A00;
extern struct UnknownStruct3 unk_2016C00;
+extern struct UnknownStruct4 gUnknown_02024CA8[];
void BattleAI_SetupAIData(void);
void BattleAI_DoAIProcessing(void);
void sub_810745C(void);
+void sub_81098C4(u8 *);
// if the AI is a Link battle, safari, battle tower, or ereader, it will ignore considering item uses.
void BattleAI_HandleItemUseBeforeAISetup(void)
@@ -168,13 +197,17 @@ u8 BattleAI_GetAIActionToUse(void)
gAIThinkingSpace.aiLogicId++;
gAIThinkingSpace.moveConsidered = 0;
}
+
+ // will KO, need to use item or switch.
if(gAIThinkingSpace.unk10 & 2)
return 4;
if(gAIThinkingSpace.unk10 & 4)
return 5;
+
r5 = 1;
arr1[0] = gAIThinkingSpace.score[0];
arr2[0] = 0;
+
for(i = 1; i < 4; i++)
{
if(arr1[0] < (s8)gAIThinkingSpace.score[i])
@@ -189,6 +222,7 @@ u8 BattleAI_GetAIActionToUse(void)
arr2[r5++] = i;
}
}
+
return arr2[Random() % r5];
}
@@ -529,7 +563,7 @@ void BattleAICmd_if_not_status4(void)
void BattleAICmd_if_less_than(void)
{
- if (gAIThinkingSpace.unk8 < gAIScriptPtr[1])
+ if (gAIThinkingSpace.funcResult < gAIScriptPtr[1])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
@@ -537,7 +571,7 @@ void BattleAICmd_if_less_than(void)
void BattleAICmd_if_more_than(void)
{
- if (gAIThinkingSpace.unk8 > gAIScriptPtr[1])
+ if (gAIThinkingSpace.funcResult > gAIScriptPtr[1])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
@@ -545,7 +579,7 @@ void BattleAICmd_if_more_than(void)
void BattleAICmd_if_equal(void)
{
- if (gAIThinkingSpace.unk8 == gAIScriptPtr[1])
+ if (gAIThinkingSpace.funcResult == gAIScriptPtr[1])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
@@ -553,7 +587,7 @@ void BattleAICmd_if_equal(void)
void BattleAICmd_if_not_equal(void)
{
- if (gAIThinkingSpace.unk8 != gAIScriptPtr[1])
+ if (gAIThinkingSpace.funcResult != gAIScriptPtr[1])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
@@ -563,7 +597,7 @@ void BattleAICmd_if_less_than_32(void)
{
u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1);
- if (gAIThinkingSpace.unk8 < *temp)
+ if (gAIThinkingSpace.funcResult < *temp)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
else
gAIScriptPtr += 9;
@@ -573,7 +607,7 @@ void BattleAICmd_if_more_than_32(void)
{
u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1);
- if (gAIThinkingSpace.unk8 > *temp)
+ if (gAIThinkingSpace.funcResult > *temp)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
else
gAIScriptPtr += 9;
@@ -583,7 +617,7 @@ void BattleAICmd_if_equal_32(void)
{
u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1);
- if (gAIThinkingSpace.unk8 == *temp)
+ if (gAIThinkingSpace.funcResult == *temp)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
else
gAIScriptPtr += 9;
@@ -593,7 +627,7 @@ void BattleAICmd_if_not_equal_32(void)
{
u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1);
- if (gAIThinkingSpace.unk8 != *temp)
+ if (gAIThinkingSpace.funcResult != *temp)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
else
gAIScriptPtr += 9;
@@ -625,7 +659,7 @@ void BattleAICmd_if_in_bytes(void)
while(*ptr != 0xFF)
{
- if(gAIThinkingSpace.unk8 == *ptr)
+ if(gAIThinkingSpace.funcResult == *ptr)
{
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
return;
@@ -641,7 +675,7 @@ void BattleAICmd_if_not_in_bytes(void)
while(*ptr != 0xFF)
{
- if(gAIThinkingSpace.unk8 == *ptr)
+ if(gAIThinkingSpace.funcResult == *ptr)
{
gAIScriptPtr += 9;
return;
@@ -657,7 +691,7 @@ void BattleAICmd_if_in_words(void)
while(*ptr != 0xFFFF)
{
- if(gAIThinkingSpace.unk8 == *ptr)
+ if(gAIThinkingSpace.funcResult == *ptr)
{
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
return;
@@ -673,7 +707,7 @@ void BattleAICmd_if_not_in_words(void)
while(*ptr != 0xFFFF)
{
- if(gAIThinkingSpace.unk8 == *ptr)
+ if(gAIThinkingSpace.funcResult == *ptr)
{
gAIScriptPtr += 9;
return;
@@ -717,7 +751,7 @@ void BattleAICmd_if_user_cant_damage(void)
void BattleAICmd_unk_21(void)
{
- gAIThinkingSpace.unk8 = gUnknown_030042E0[19];
+ gAIThinkingSpace.funcResult = gUnknown_030042E0[19];
gAIScriptPtr += 1;
}
@@ -728,19 +762,19 @@ void BattleAICmd_get_type(void)
switch(typeVar)
{
case 1:
- gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C07].type1;
+ gAIThinkingSpace.funcResult = gBattleMons[gUnknown_02024C07].type1;
break;
case 0:
- gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C08].type1;
+ gAIThinkingSpace.funcResult = gBattleMons[gUnknown_02024C08].type1;
break;
case 3:
- gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C07].type2;
+ gAIThinkingSpace.funcResult = gBattleMons[gUnknown_02024C07].type2;
break;
case 2:
- gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C08].type2;
+ gAIThinkingSpace.funcResult = gBattleMons[gUnknown_02024C08].type2;
break;
case 4:
- gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].type;
+ gAIThinkingSpace.funcResult = gBattleMoves[gAIThinkingSpace.unk2].type;
break;
}
gAIScriptPtr += 2;
@@ -748,7 +782,7 @@ void BattleAICmd_get_type(void)
void BattleAICmd_unk_23(void)
{
- gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].power;
+ gAIThinkingSpace.funcResult = gBattleMoves[gAIThinkingSpace.unk2].power;
gAIScriptPtr += 1;
}
@@ -999,16 +1033,16 @@ _081083D0: .4byte gAIScriptPtr\n\
void BattleAICmd_get_move(void)
{
if (gAIScriptPtr[1] == USER)
- gAIThinkingSpace.unk8 = gUnknown_02024C34[gUnknown_02024C07];
+ gAIThinkingSpace.funcResult = gUnknown_02024C34[gUnknown_02024C07];
else
- gAIThinkingSpace.unk8 = gUnknown_02024C34[gUnknown_02024C08];
+ gAIThinkingSpace.funcResult = gUnknown_02024C34[gUnknown_02024C08];
gAIScriptPtr += 2;
}
void BattleAICmd_if_type(void)
{
- if ( gAIScriptPtr[1] == gAIThinkingSpace.unk8 )
+ if ( gAIScriptPtr[1] == gAIThinkingSpace.funcResult )
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
@@ -1016,7 +1050,7 @@ void BattleAICmd_if_type(void)
void BattleAICmd_unk_27(void) // if_not_type
{
- if ( gAIScriptPtr[1] != gAIThinkingSpace.unk8 )
+ if ( gAIScriptPtr[1] != gAIThinkingSpace.funcResult )
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
@@ -1052,7 +1086,7 @@ void BattleAICmd_count_alive_pokemon(void)
int i;
u8 var, var2;
- ai->unk8 = 0;
+ ai->funcResult = 0;
if (gAIScriptPtr[1] == USER)
index = gUnknown_02024C07;
@@ -1085,7 +1119,7 @@ void BattleAICmd_count_alive_pokemon(void)
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
{
- ai2->unk8++;
+ ai2->funcResult++;
}
}
@@ -1094,13 +1128,13 @@ void BattleAICmd_count_alive_pokemon(void)
void BattleAICmd_unk_2D(void)
{
- gAIThinkingSpace.unk8 = gAIThinkingSpace.unk2;
+ gAIThinkingSpace.funcResult = gAIThinkingSpace.unk2;
gAIScriptPtr += 1;
}
void BattleAICmd_unk_2E(void)
{
- gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].effect;
+ gAIThinkingSpace.funcResult = gBattleMoves[gAIThinkingSpace.unk2].effect;
gAIScriptPtr += 1;
}
@@ -1119,7 +1153,7 @@ void BattleAICmd_get_ability(void)
if(unk_2016A00.unk20[unk] != 0)
{
- ((struct AI_ThinkingStruct *)((u8 *)&unk_2016A00 - 512))->unk8 = unk_2016A00.unk20[unk];
+ ((struct AI_ThinkingStruct *)((u8 *)&unk_2016A00 - 0x200))->funcResult = unk_2016A00.unk20[unk];
gAIScriptPtr += 2;
return;
}
@@ -1127,7 +1161,7 @@ void BattleAICmd_get_ability(void)
// abilities that prevent fleeing.
if(gBattleMons[var].ability == ABILITY_SHADOW_TAG || gBattleMons[var].ability == ABILITY_MAGNET_PULL || gBattleMons[var].ability == ABILITY_ARENA_TRAP)
{
- gAIThinkingSpace.unk8 = gBattleMons[var].ability;
+ gAIThinkingSpace.funcResult = gBattleMons[var].ability;
gAIScriptPtr += 2;
return;
}
@@ -1139,27 +1173,27 @@ void BattleAICmd_get_ability(void)
// AI is guessing what ability?
if(Random() & 1)
{
- ((struct AI_ThinkingStruct *)((u8 *)&unk_2016A00 - 0x200))->unk8 = gBaseStats[gBattleMons[var].species].ability1;
+ ((struct AI_ThinkingStruct *)((u8 *)&unk_2016A00 - 0x200))->funcResult = gBaseStats[gBattleMons[var].species].ability1;
gAIScriptPtr += 2;
return;
}
else
{
- ((struct AI_ThinkingStruct *)((u8 *)&unk_2016A00 - 0x200))->unk8 = gBaseStats[gBattleMons[var].species].ability2;
+ ((struct AI_ThinkingStruct *)((u8 *)&unk_2016A00 - 0x200))->funcResult = gBaseStats[gBattleMons[var].species].ability2;
gAIScriptPtr += 2;
return;
}
}
else
{
- ((struct AI_ThinkingStruct *)((u8 *)&unk_2016A00 - 0x200))->unk8 = gBaseStats[gBattleMons[var].species].ability1; // it's definitely ability 1.
+ ((struct AI_ThinkingStruct *)((u8 *)&unk_2016A00 - 0x200))->funcResult = gBaseStats[gBattleMons[var].species].ability1; // it's definitely ability 1.
gAIScriptPtr += 2;
return;
}
}
else
{
- ((struct AI_ThinkingStruct *)((u8 *)&unk_2016A00 - 0x200))->unk8 = gBaseStats[gBattleMons[var].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
+ ((struct AI_ThinkingStruct *)((u8 *)&unk_2016A00 - 0x200))->funcResult = gBaseStats[gBattleMons[var].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
gAIScriptPtr += 2;
return;
}
@@ -1167,7 +1201,7 @@ void BattleAICmd_get_ability(void)
else
{
// The AI knows its own ability.
- gAIThinkingSpace.unk8 = gBattleMons[var].ability;
+ gAIThinkingSpace.funcResult = gBattleMons[var].ability;
gAIScriptPtr += 2;
return;
}
@@ -1185,7 +1219,7 @@ void BattleAICmd_unk_30(void)
gUnknown_02024C68 = 0;
gCritMultiplier = 1;
ai = &battle_2000000.ai;
- ai->unk8 = 0;
+ ai->funcResult = 0;
for(i = 0; i < 4; i++)
{
@@ -1210,118 +1244,47 @@ void BattleAICmd_unk_30(void)
gUnknown_02024BEC = 0;
ai2 = &battle_2000000.ai;
- if (ai2->unk8 < gUnknown_02024BEC)
- ai2->unk8 = gUnknown_02024BEC;
+ if (ai2->funcResult < gUnknown_02024BEC)
+ ai2->funcResult = gUnknown_02024BEC;
}
}
gAIScriptPtr += 1;
}
-// same function as above but no for loop.
-__attribute__((naked))
void BattleAICmd_if_damage_bonus(void)
{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- ldr r0, _08108928 @ =gUnknown_02024DEC\n\
- movs r1, 0\n\
- strh r1, [r0]\n\
- ldr r2, _0810892C @ =0x02000000\n\
- ldr r3, _08108930 @ =0x0001601c\n\
- adds r0, r2, r3\n\
- strb r1, [r0]\n\
- adds r3, 0x3\n\
- adds r0, r2, r3\n\
- movs r3, 0x1\n\
- strb r3, [r0]\n\
- ldr r5, _08108934 @ =gUnknown_02024C68\n\
- strb r1, [r5]\n\
- ldr r0, _08108938 @ =gCritMultiplier\n\
- strb r3, [r0]\n\
- ldr r4, _0810893C @ =gUnknown_02024BEC\n\
- movs r0, 0x28\n\
- str r0, [r4]\n\
- ldr r1, _08108940 @ =gUnknown_02024BE6\n\
- movs r0, 0xB4\n\
- lsls r0, 9\n\
- adds r2, r0\n\
- ldrh r0, [r2, 0x2]\n\
- strh r0, [r1]\n\
- ldrh r0, [r1]\n\
- ldr r1, _08108944 @ =gUnknown_02024C07\n\
- ldrb r1, [r1]\n\
- ldr r2, _08108948 @ =gUnknown_02024C08\n\
- ldrb r2, [r2]\n\
- bl move_effectiveness_something\n\
- ldr r0, [r4]\n\
- cmp r0, 0x78\n\
- bne _081088D6\n\
- movs r0, 0x50\n\
- str r0, [r4]\n\
-_081088D6:\n\
- ldr r0, [r4]\n\
- cmp r0, 0xF0\n\
- bne _081088E0\n\
- movs r0, 0xA0\n\
- str r0, [r4]\n\
-_081088E0:\n\
- ldr r0, [r4]\n\
- cmp r0, 0x1E\n\
- bne _081088EA\n\
- movs r0, 0x14\n\
- str r0, [r4]\n\
-_081088EA:\n\
- ldr r0, [r4]\n\
- cmp r0, 0xF\n\
- bne _081088F4\n\
- movs r0, 0xA\n\
- str r0, [r4]\n\
-_081088F4:\n\
- ldrb r1, [r5]\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08108902\n\
- movs r0, 0\n\
- str r0, [r4]\n\
-_08108902:\n\
- ldrb r0, [r4]\n\
- ldr r3, _0810894C @ =gAIScriptPtr\n\
- ldr r2, [r3]\n\
- ldrb r1, [r2, 0x1]\n\
- cmp r0, r1\n\
- bne _08108950\n\
- ldrb r1, [r2, 0x2]\n\
- ldrb r0, [r2, 0x3]\n\
- lsls r0, 8\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x4]\n\
- lsls r0, 16\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x5]\n\
- lsls r0, 24\n\
- orrs r1, r0\n\
- str r1, [r3]\n\
- b _08108954\n\
- .align 2, 0\n\
-_08108928: .4byte gUnknown_02024DEC\n\
-_0810892C: .4byte 0x02000000\n\
-_08108930: .4byte 0x0001601c\n\
-_08108934: .4byte gUnknown_02024C68\n\
-_08108938: .4byte gCritMultiplier\n\
-_0810893C: .4byte gUnknown_02024BEC\n\
-_08108940: .4byte gUnknown_02024BE6\n\
-_08108944: .4byte gUnknown_02024C07\n\
-_08108948: .4byte gUnknown_02024C08\n\
-_0810894C: .4byte gAIScriptPtr\n\
-_08108950:\n\
- adds r0, r2, 0x6\n\
- str r0, [r3]\n\
-_08108954:\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
+ struct AI_ThinkingStruct *ai;
+ u8 damageVar;
+
+ gUnknown_02024DEC = 0;
+ battle_2000000.unk.unk1 = 0;
+ battle_2000000.unk.unk4 = 1;
+ gUnknown_02024C68 = 0;
+ gCritMultiplier = 1;
+
+ gUnknown_02024BEC = 40;
+ gUnknown_02024BE6 = (ai = &battle_2000000.ai)->unk2;
+
+ move_effectiveness_something(gUnknown_02024BE6, gUnknown_02024C07, gUnknown_02024C08);
+
+ if (gUnknown_02024BEC == 120)
+ gUnknown_02024BEC = 80;
+ if(gUnknown_02024BEC == 240)
+ gUnknown_02024BEC = 160;
+ if(gUnknown_02024BEC == 30)
+ gUnknown_02024BEC = 20;
+ if(gUnknown_02024BEC == 15)
+ gUnknown_02024BEC = 10;
+
+ if(gUnknown_02024C68 & 8)
+ gUnknown_02024BEC = 0;
+
+ // i have to store 2024BEC in a local variable before the comparison or else it will not match.
+ damageVar = gUnknown_02024BEC;
+ if(damageVar == gAIScriptPtr[1])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_unk_32(void)
@@ -1366,3 +1329,628 @@ void BattleAICmd_if_status_in_party(void)
gAIScriptPtr += 10;
}
+
+void BattleAICmd_if_status_not_in_party(void)
+{
+ struct Pokemon *party;
+ int i;
+ u32 statusToCompareTo;
+ u8 *partyPtr;
+
+ // what weird code. needed to match
+ switch(gAIScriptPtr[1])
+ {
+ case 1:
+ partyPtr = (u8 *)gEnemyParty;
+ party = (struct Pokemon *)partyPtr;
+ break;
+ default:
+ partyPtr = (u8 *)gPlayerParty;
+ party = (struct Pokemon *)partyPtr;
+ break;
+ }
+
+ statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2);
+
+ for (i = 0; i < 6; i++)
+ {
+ u16 species = GetMonData(&party[i], MON_DATA_SPECIES);
+ u16 hp = GetMonData(&party[i], MON_DATA_HP);
+ u32 status = GetMonData(&party[i], MON_DATA_STATUS);
+
+ // this jump is seemingly bugged. everytime the status is found, the AI's logic jumps further and further past its intended destination.
+ if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo)
+ gAIScriptPtr += 10; // doesnt return?
+ }
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+}
+
+void BattleAICmd_unk_36(void)
+{
+ if(gBattleWeather & 7)
+ gAIThinkingSpace.funcResult = 1;
+ if(gBattleWeather & 0x18)
+ gAIThinkingSpace.funcResult = 2;
+ if(gBattleWeather & 0x60)
+ gAIThinkingSpace.funcResult = 0;
+ if(gBattleWeather & 0x80)
+ gAIThinkingSpace.funcResult = 3;
+
+ gAIScriptPtr += 1;
+}
+
+void BattleAICmd_if_effect(void)
+{
+ if(gBattleMoves[gAIThinkingSpace.unk2].effect == gAIScriptPtr[1])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
+}
+
+void BattleAICmd_if_not_effect(void)
+{
+ if(gBattleMoves[gAIThinkingSpace.unk2].effect != gAIScriptPtr[1])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
+}
+
+void BattleAICmd_if_stat_level_less_than(void)
+{
+ u32 party;
+
+ if(gAIScriptPtr[1] == USER)
+ party = gUnknown_02024C07;
+ else
+ party = gUnknown_02024C08;
+
+ if(gBattleMons[party].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ else
+ gAIScriptPtr += 8;
+}
+
+void BattleAICmd_if_stat_level_more_than(void)
+{
+ u32 party;
+
+ if(gAIScriptPtr[1] == USER)
+ party = gUnknown_02024C07;
+ else
+ party = gUnknown_02024C08;
+
+ if(gBattleMons[party].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ else
+ gAIScriptPtr += 8;
+}
+
+void BattleAICmd_if_stat_level_equal(void)
+{
+ u32 party;
+
+ if(gAIScriptPtr[1] == USER)
+ party = gUnknown_02024C07;
+ else
+ party = gUnknown_02024C08;
+
+ if(gBattleMons[party].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ else
+ gAIScriptPtr += 8;
+}
+
+void BattleAICmd_if_stat_level_not_equal(void)
+{
+ u32 party;
+
+ if(gAIScriptPtr[1] == USER)
+ party = gUnknown_02024C07;
+ else
+ party = gUnknown_02024C08;
+
+ if(gBattleMons[party].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ else
+ gAIScriptPtr += 8;
+}
+
+void BattleAICmd_if_can_faint(void)
+{
+ if(gBattleMoves[gAIThinkingSpace.unk2].power < 2)
+ {
+ gAIScriptPtr += 5;
+ return;
+ }
+ gUnknown_02024DEC = 0;
+ ((struct BattleStruct *)((u8 *)&gAIThinkingSpace - 0x16800))->unk.unk1 = 0;
+ ((struct BattleStruct *)((u8 *)&gAIThinkingSpace - 0x16800))->unk.unk4 = 1;
+ gUnknown_02024C68 = 0;
+ gCritMultiplier = 1;
+ gUnknown_02024BE6 = gAIThinkingSpace.unk2;
+ sub_801CAF8(gUnknown_02024C07, gUnknown_02024C08);
+ move_effectiveness_something(gUnknown_02024BE6, gUnknown_02024C07, gUnknown_02024C08);
+
+ gUnknown_02024BEC = gUnknown_02024BEC * gAIThinkingSpace.unk18[gAIThinkingSpace.moveConsidered] / 100;
+
+ // moves always do at least 1 damage.
+ if(gUnknown_02024BEC == 0)
+ gUnknown_02024BEC = 1;
+
+ if(gBattleMons[gUnknown_02024C08].hp <= gUnknown_02024BEC)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+void BattleAICmd_if_cant_faint(void)
+{
+ if(gBattleMoves[gAIThinkingSpace.unk2].power < 2)
+ {
+ gAIScriptPtr += 5;
+ return;
+ }
+
+ gUnknown_02024DEC = 0;
+ ((struct BattleStruct *)((u8 *)&gAIThinkingSpace - 0x16800))->unk.unk1 = 0;
+ ((struct BattleStruct *)((u8 *)&gAIThinkingSpace - 0x16800))->unk.unk4 = 1;
+ gUnknown_02024C68 = 0;
+ gCritMultiplier = 1;
+ gUnknown_02024BE6 = gAIThinkingSpace.unk2;
+ sub_801CAF8(gUnknown_02024C07, gUnknown_02024C08);
+ move_effectiveness_something(gUnknown_02024BE6, gUnknown_02024C07, gUnknown_02024C08);
+
+ gUnknown_02024BEC = gUnknown_02024BEC * gAIThinkingSpace.unk18[gAIThinkingSpace.moveConsidered] / 100;
+
+ // this macro is missing the damage 0 = 1 assumption.
+
+ if(gBattleMons[gUnknown_02024C08].hp > gUnknown_02024BEC)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+void BattleAICmd_unk_3F(void)
+{
+ int i;
+ u16 *temp_ptr = (u16 *)(gAIScriptPtr + 2);
+
+ switch(gAIScriptPtr[1])
+ {
+ case 1:
+ case 3:
+ for(i = 0; i < 4; i++)
+ {
+ if(gBattleMons[gUnknown_02024C07].moves[i] == *temp_ptr)
+ break;
+ }
+ if(i == 4)
+ {
+ gAIScriptPtr += 8;
+ return;
+ }
+ else
+ {
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ return;
+ }
+ case 0:
+ case 2:
+ for(i = 0; i < 8; i++)
+ {
+ if(unk_2016A00.unk0[gUnknown_02024C08 >> 1][i] == *temp_ptr)
+ break;
+ }
+ if(i == 8)
+ {
+ gAIScriptPtr += 8;
+ return;
+ }
+ else
+ {
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ return;
+ }
+ }
+}
+
+void BattleAICmd_unk_40(void)
+{
+ int i;
+ u16 *temp_ptr = (u16 *)(gAIScriptPtr + 2);
+
+ switch(gAIScriptPtr[1])
+ {
+ case 1:
+ case 3:
+ for(i = 0; i < 4; i++)
+ {
+ if(gBattleMons[gUnknown_02024C07].moves[i] == *temp_ptr)
+ break;
+ }
+ if(i != 4)
+ {
+ gAIScriptPtr += 8;
+ return;
+ }
+ else
+ {
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ return;
+ }
+ case 0:
+ case 2:
+ for(i = 0; i < 8; i++)
+ {
+ if(unk_2016A00.unk0[gUnknown_02024C08 >> 1][i] == *temp_ptr)
+ break;
+ }
+ if(i != 8)
+ {
+ gAIScriptPtr += 8;
+ return;
+ }
+ else
+ {
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ return;
+ }
+ }
+}
+
+void BattleAICmd_if_move_effect(void)
+{
+ int i;
+
+ switch(gAIScriptPtr[1])
+ {
+ case 1:
+ case 3:
+ for(i = 0; i < 4; i++)
+ {
+ if(gBattleMons[gUnknown_02024C07].moves[i] != 0 && gBattleMoves[gBattleMons[gUnknown_02024C07].moves[i]].effect == gAIScriptPtr[2])
+ break;
+ }
+ if(i != 4)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ else
+ gAIScriptPtr += 7;
+ break;
+ case 0:
+ case 2:
+ for(i = 0; i < 8; i++)
+ {
+ if(gBattleMons[gUnknown_02024C07].moves[i] != 0 && gBattleMoves[unk_2016A00.unk0[gUnknown_02024C08 >> 1][i]].effect == gAIScriptPtr[2])
+ break;
+ }
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ }
+}
+
+void BattleAICmd_if_not_move_effect(void)
+{
+ int i;
+
+ switch(gAIScriptPtr[1])
+ {
+ case 1:
+ case 3:
+ for(i = 0; i < 4; i++)
+ {
+ if(gBattleMons[gUnknown_02024C07].moves[i] != 0 && gBattleMoves[gBattleMons[gUnknown_02024C07].moves[i]].effect == gAIScriptPtr[2])
+ break;
+ }
+ if(i != 4)
+ gAIScriptPtr += 7;
+ else
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ break;
+ case 0:
+ case 2:
+ for(i = 0; i < 8; i++)
+ {
+ if(unk_2016A00.unk0[gUnknown_02024C08 >> 1][i] != 0 && gBattleMoves[unk_2016A00.unk0[gUnknown_02024C08 >> 1][i]].effect == gAIScriptPtr[2])
+ break;
+ }
+ gAIScriptPtr += 7;
+ }
+}
+
+void BattleAICmd_if_last_move_did_damage(void)
+{
+ u8 var;
+
+ if(gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ if(gAIScriptPtr[2] == 0)
+ {
+ if(gUnknown_02024CA8[var].unk4 == 0)
+ {
+ gAIScriptPtr += 7;
+ return;
+ }
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ return;
+ }
+ else if(gAIScriptPtr[2] != 1)
+ {
+ gAIScriptPtr += 7;
+ return;
+ }
+ else if(gUnknown_02024CA8[var].unk6 != 0)
+ {
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ return;
+ }
+ gAIScriptPtr += 7;
+}
+
+void BattleAICmd_if_encored(void)
+{
+ switch(gAIScriptPtr[1])
+ {
+ case 0: // _08109348
+ if(gUnknown_02024CA8[gUnknown_02024A60].unk4 == gAIThinkingSpace.unk2)
+ {
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ return;
+ }
+ gAIScriptPtr += 6;
+ return;
+ case 1: // _08109370
+ if(gUnknown_02024CA8[gUnknown_02024A60].unk6 == gAIThinkingSpace.unk2)
+ {
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ return;
+ }
+ gAIScriptPtr += 6;
+ return;
+ default:
+ gAIScriptPtr += 6;
+ return;
+ }
+}
+
+void BattleAICmd_unk_45(void)
+{
+ gAIThinkingSpace.unk10 |= 0xB;
+}
+
+void BattleAICmd_if_random_2(void)
+{
+ u8 var = battle_2000000.unk88 * 5;
+
+ if((u8)(Random() % 100) < var)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+void BattleAICmd_unk_47(void)
+{
+ gAIThinkingSpace.unk10 |= 0xD;
+}
+
+void BattleAICmd_get_hold_effect(void)
+{
+ u8 var;
+ u16 status;
+ u8 *aiPtr;
+
+ if(gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ if(battle_side_get_owner(var) == 0)
+ {
+ // weird pointer arithmetic is needed to match.
+ status = (battle_get_per_side_status(var) & 1);
+ aiPtr = (u8 *)&gAIThinkingSpace;
+ gAIThinkingSpace.funcResult = ((struct UnknownStruct1 *)((u8 *)aiPtr + 0x202))->unk20[status];
+ }
+ else
+ gAIThinkingSpace.funcResult = ItemId_GetHoldEffect(gBattleMons[var].item);
+
+ gAIScriptPtr += 2;
+}
+
+void BattleAICmd_get_gender(void)
+{
+ u8 var;
+
+ if(gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ gAIThinkingSpace.funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[var].species, gBattleMons[var].personality);
+
+ gAIScriptPtr += 2;
+}
+
+void BattleAICmd_is_first_turn(void)
+{
+ u8 var;
+
+ if(gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ gAIThinkingSpace.funcResult = gUnknown_02024CA8[var].unk16;
+
+ gAIScriptPtr += 2;
+}
+
+void BattleAICmd_get_stockpile_count(void)
+{
+ u8 var;
+
+ if(gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ gAIThinkingSpace.funcResult = gUnknown_02024CA8[var].unk9;
+
+ gAIScriptPtr += 2;
+}
+
+void BattleAICmd_unk_4C(void)
+{
+ gAIThinkingSpace.funcResult = gBattleTypeFlags & 1;
+
+ gAIScriptPtr += 1;
+}
+
+void BattleAICmd_get_item(void)
+{
+ u8 var;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ // this hack and a half matches. whatever. i dont care. someone else fix this mess later.
+ ((struct AI_ThinkingStruct *)(unk_2000000 + 0x16800))->funcResult = unk_2000000[0x160CC + var * 2];
+
+ gAIScriptPtr += 2;
+}
+
+void BattleAICmd_unk_4E(void)
+{
+ gAIThinkingSpace.funcResult = gBattleMoves[gAIThinkingSpace.funcResult].type;
+
+ gAIScriptPtr += 1;
+}
+
+void BattleAICmd_unk_4F(void)
+{
+ gAIThinkingSpace.funcResult = gBattleMoves[gAIThinkingSpace.funcResult].power;
+
+ gAIScriptPtr += 1;
+}
+
+void BattleAICmd_unk_50(void)
+{
+ gAIThinkingSpace.funcResult = gBattleMoves[gAIThinkingSpace.funcResult].effect;
+
+ gAIScriptPtr += 1;
+}
+
+void BattleAICmd_get_protect_count(void)
+{
+ u8 var;
+
+ if(gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ gAIThinkingSpace.funcResult = gUnknown_02024CA8[var].unk8;
+
+ gAIScriptPtr += 2;
+}
+
+void BattleAICmd_unk_52(void) {}
+
+void BattleAICmd_unk_53(void) {}
+
+void BattleAICmd_unk_54(void) {}
+
+void BattleAICmd_unk_55(void) {}
+
+void BattleAICmd_unk_56(void) {}
+
+void BattleAICmd_unk_57(void) {}
+
+void BattleAICmd_call(void)
+{
+ sub_81098C4(gAIScriptPtr + 5);
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+}
+
+void BattleAICmd_jump(void)
+{
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+}
+
+void BattleAICmd_unk_5A(void)
+{
+ if(sub_8109908() == 0)
+ gAIThinkingSpace.unk10 |= 1;
+}
+
+void BattleAICmd_if_level_cond(void)
+{
+ switch(gAIScriptPtr[1])
+ {
+ case 0:
+ if(gBattleMons[gUnknown_02024C07].level > gBattleMons[gUnknown_02024C08].level)
+ {
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ return;
+ }
+ gAIScriptPtr += 6;
+ return;
+ case 1:
+ if(gBattleMons[gUnknown_02024C07].level < gBattleMons[gUnknown_02024C08].level)
+ {
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ return;
+ }
+ gAIScriptPtr += 6;
+ return;
+ case 2:
+ if(gBattleMons[gUnknown_02024C07].level == gBattleMons[gUnknown_02024C08].level)
+ {
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ return;
+ }
+ gAIScriptPtr += 6;
+ return;
+ }
+}
+
+void BattleAICmd_if_taunted(void)
+{
+ if(gUnknown_02024CA8[gUnknown_02024C08].taunt)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+void BattleAICmd_if_not_taunted(void)
+{
+ if(!(gUnknown_02024CA8[gUnknown_02024C08].taunt))
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+void sub_81098C4(u8 *var)
+{
+ unk_2016C00.ptr[unk_2016C00.unk20++] = var;
+}
+
+void unref_sub_81098E4(void)
+{
+ unk_2016C00.ptr[unk_2016C00.unk20++] = gAIScriptPtr;
+}
+
+bool8 sub_8109908(void)
+{
+ if(unk_2016C00.unk20 != 0)
+ {
+ --unk_2016C00.unk20;
+ gAIScriptPtr = unk_2016C00.ptr[unk_2016C00.unk20];
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
diff --git a/src/rom_8080874.c b/src/rom_8080874.c
new file mode 100644
index 000000000..8c41b913a
--- /dev/null
+++ b/src/rom_8080874.c
@@ -0,0 +1,85 @@
+#include "global.h"
+#include "global.fieldmap.h"
+#include "gba/syscall.h"
+#include "weather.h"
+#include "task.h"
+#include "script.h"
+
+void palette_bg_fill_white(void);
+void palette_bg_fill_black(void);
+void pal_fill_black(void);
+void task0A_asap_script_env_2_enable_and_set_ctx_running(u8);
+
+extern u8 get_map_light_from_warp0(void);
+extern u8 sav1_map_get_light_level(void);
+extern u8 fade_type_for_given_maplight_pair(u8, u8);
+extern u16 gPlttBufferFaded[];
+extern struct MapHeader * warp1_get_mapheader(void);
+extern void sub_8059B88(u8);
+extern void sub_8053E90(void);
+
+extern u8 sub_810CDB8(u8, u8);
+extern int sub_8080E70(void);
+
+void palette_bg_fill_white (void) {
+ u32 source_color = 0x7fff7fff;
+ CpuFastSet(&source_color, gPlttBufferFaded, 0x100 | (1 << 24));
+}
+
+void palette_bg_fill_black (void) {
+ u32 source_color = 0;
+ CpuFastSet(&source_color, gPlttBufferFaded, 0x100 | (1 << 24));
+}
+
+void pal_fill_for_map_transition (void) {
+ u8 map_light = get_map_light_from_warp0();
+ switch (fade_type_for_given_maplight_pair(map_light, sav1_map_get_light_level())) {
+ case 0:
+ fade_screen(0, 0);
+ palette_bg_fill_black();
+ break;
+ case 1:
+ fade_screen(2, 0);
+ palette_bg_fill_white();
+ }
+}
+
+void pal_fill_black (void) {
+ fade_screen(0, 0);
+ palette_bg_fill_black();
+}
+
+void fade_8080918 (void) {
+ u8 light_level = sav1_map_get_light_level();
+ switch (sub_810CDB8(light_level, warp1_get_mapheader() -> mapType)) {
+ case 0:
+ fade_screen(1, 0);
+ break;
+ case 1:
+ fade_screen(3, 0);
+ }
+}
+
+void sub_8080958 (u8 arg) {
+ sub_8059B88(!arg);
+}
+
+void task0A_asap_script_env_2_enable_and_set_ctx_running (u8 taskID) {
+ if (sub_8080E70() == 1) {
+ DestroyTask(taskID);
+ EnableBothScriptContexts();
+ }
+}
+
+void sub_8080990 (void) {
+ ScriptContext2_Enable();
+ sub_8053E90();
+ pal_fill_black();
+ CreateTask(&task0A_asap_script_env_2_enable_and_set_ctx_running, 0x0a);
+}
+
+void sub_80809B0 (void) {
+ ScriptContext2_Enable();
+ pal_fill_black();
+ CreateTask(&task0A_asap_script_env_2_enable_and_set_ctx_running, 0x0a);
+}
diff --git a/src/rom_8094928.c b/src/rom_8094928.c
new file mode 100644
index 000000000..8cc1857eb
--- /dev/null
+++ b/src/rom_8094928.c
@@ -0,0 +1,94 @@
+#include "global.h"
+#include "pokemon.h"
+
+extern struct PokemonStorage gPokemonStorage;
+extern u8 IsLinkDoubleBattle(void);
+extern u8 IsDoubleBattle(void);
+extern u8 battle_get_side_with_given_state(u8);
+extern u8 battle_side_get_owner(u8);
+void sub_8094998(u8 [3], u8);
+void sub_8094A74(u8 [3], u8, u32);
+
+extern u8 gUnknown_02038470[3];
+extern u8 sub_803FBBC(void);
+extern u16 gUnknown_02024A6A[];
+
+void unref_sub_8094928 (void * ptr) {
+ memcpy(ptr, &gPokemonStorage, 0x83d0);
+}
+
+void unref_sub_8094940 (void * ptr) {
+ memcpy(&gPokemonStorage, ptr, 0x83d0);
+}
+
+void sub_8094958 (void) {
+ sub_8094998(gUnknown_02038470, sub_803FBBC());
+}
+
+void sub_8094978 (u8 arg1, u8 arg2) {
+ sub_8094A74((((u8 (*) [3]) 0x0201606c))[arg1], arg2, arg1);
+}
+
+void sub_8094998 (u8 arg[3], u8 player_number) {
+ int i;
+ u32 pos;
+ u8 temp[6];
+ if (IsLinkDoubleBattle() == 1)
+ if (player_number) {
+ *arg = 0x30;
+ arg[1] = 0x45;
+ arg[2] = 0x12;
+ } else {
+ *arg = 0x03;
+ arg[1] = 0x12;
+ arg[2] = 0x45;
+ }
+ else {
+ if (!IsDoubleBattle()) {
+ pos = 1;
+ *temp = gUnknown_02024A6A[battle_get_side_with_given_state(0)];
+ for (i = 0; i <= 5; i ++) if (i != *temp) temp[pos ++] = i;
+ } else {
+ pos = 2;
+ *temp = gUnknown_02024A6A[battle_get_side_with_given_state(0)];
+ temp[1] = gUnknown_02024A6A[battle_get_side_with_given_state(2)];
+ for (i = 0; i <= 5; i ++) if ((i != *temp) && (i != temp[1])) temp[pos ++] = i;
+ }
+ for (i = 0; i <= 2; i ++) arg[i] = (temp[i << 1] << 4) | temp[(i << 1) + 1];
+ }
+}
+
+void sub_8094A74 (u8 arg[3], u8 player_number, u32 arg3) {
+ int i, j;
+ u8 temp[6];
+ if (!battle_side_get_owner(arg3)) {
+ i = battle_get_side_with_given_state(0);
+ j = battle_get_side_with_given_state(2);
+ } else {
+ i = battle_get_side_with_given_state(1);
+ j = battle_get_side_with_given_state(3);
+ }
+ if (IsLinkDoubleBattle() == 1)
+ if (player_number) {
+ *arg = 0x30;
+ arg[1] = 0x45;
+ arg[2] = 0x12;
+ } else {
+ *arg = 0x03;
+ arg[1] = 0x12;
+ arg[2] = 0x45;
+ }
+ else {
+ if (!IsDoubleBattle()) {
+ int pos = 1;
+ *temp = gUnknown_02024A6A[i];
+ for (i = 0; i <= 5; i ++) if (i != *temp) temp[pos ++] = i;
+ } else {
+ int pos = 2;
+ *temp = gUnknown_02024A6A[i];
+ temp[1] = gUnknown_02024A6A[j];
+ for (i = 0; i <= 5; i ++) if ((i != *temp) && (i != temp[1])) temp[pos ++] = i;
+ }
+ for (i = 0; i <= 2; i ++) arg[i] = (temp[i << 1] << 4) | temp[(i << 1) + 1];
+ }
+}
diff --git a/src/save_menu_util.c b/src/save_menu_util.c
index d2fda59d6..64acd12f7 100644
--- a/src/save_menu_util.c
+++ b/src/save_menu_util.c
@@ -15,7 +15,8 @@ void HandleDrawSaveWindowInfo(s16 left, s16 top)
{
u32 width = 12;
- if (sub_809473C())
+ // old handle for setting window width?
+ if (IsResizeSaveWindowEnabled())
width = 13;
if (FlagGet(SYS_POKEDEX_GET))
@@ -39,11 +40,12 @@ void HandleDrawSaveWindowInfo(s16 left, s16 top)
}
}
-void sub_80946C8(u16 left, u16 top)
+void HandleCloseSaveWindow(u16 left, u16 top)
{
u32 width = 12;
- if (sub_809473C())
+ // old handle for setting window width?
+ if (IsResizeSaveWindowEnabled())
width = 13;
if (FlagGet(SYS_POKEDEX_GET))
@@ -52,9 +54,14 @@ void sub_80946C8(u16 left, u16 top)
MenuZeroFillWindowRect(left, top, left + width, top + 9);
}
-u8 sub_809473C()
+/*
+theory: This function was used to handle the save menu window's width being auto sized from
+either 12 or 13 in an older source. Whatever was here might have either been optimized out by
+GF's compiler or was dummied out to always return a TRUE at some point.
+*/
+u8 IsResizeSaveWindowEnabled(void) // i don't know what else to name it..
{
- return 1;
+ return TRUE;
}
void PrintSavePlayerName(s16 x, s16 y)
diff --git a/src/scrcmd.c b/src/scrcmd.c
index d3d28f923..f41d57ffb 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -561,7 +561,7 @@ bool8 ScrCmd_darken(struct ScriptContext *ctx)
return FALSE;
}
-bool8 sub_8066248(void)
+bool8 IsPaletteNotActive(void)
{
if (!gPaletteFade.active)
return TRUE;
@@ -572,7 +572,7 @@ bool8 sub_8066248(void)
bool8 ScrCmd_fadescreen(struct ScriptContext *ctx)
{
fade_screen(ScriptReadByte(ctx), 0);
- SetupNativeScript(ctx, sub_8066248);
+ SetupNativeScript(ctx, IsPaletteNotActive);
return TRUE;
}
@@ -581,7 +581,7 @@ bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx)
u8 duration = ScriptReadByte(ctx);
u8 delay = ScriptReadByte(ctx);
fade_screen(duration, delay);
- SetupNativeScript(ctx, sub_8066248);
+ SetupNativeScript(ctx, IsPaletteNotActive);
return TRUE;
}
@@ -1170,7 +1170,7 @@ bool8 ScrCmd_closebutton(struct ScriptContext *ctx)
return FALSE;
}
-bool8 sub_80670C0()
+bool8 WaitForAorBPress(void)
{
if (gMain.newKeys & A_BUTTON)
return TRUE;
@@ -1181,7 +1181,7 @@ bool8 sub_80670C0()
bool8 ScrCmd_waitbutton(struct ScriptContext *ctx)
{
- SetupNativeScript(ctx, sub_80670C0);
+ SetupNativeScript(ctx, WaitForAorBPress);
return TRUE;
}
diff --git a/src/start_menu.c b/src/start_menu.c
index 31ba31766..8ef3a9d2b 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -281,22 +281,15 @@ void CreateStartMenuTask(void (*func)(u8))
SetTaskFuncWithFollowupFunc(taskId, Task_StartMenu, func);
}
-struct MyTask {
- TaskFunc func;
- bool8 isActive;
- u8 prev;
- u8 next;
- u8 priority;
- s16 var1;
-};
-
void sub_80712B4(u8 taskId)
{
- switch(((struct MyTask *)&gTasks[taskId])->var1)
+ struct Task *task = &gTasks[taskId];
+
+ switch(task->data[0])
{
case 0:
gCallback_03004AE8 = StartMenu_InputProcessCallback;
- ((struct MyTask *)&gTasks[taskId])->var1++;
+ task->data[0]++;
break;
case 1:
if(gCallback_03004AE8() == 1)
@@ -554,7 +547,7 @@ static void Task_SaveDialog(u8 taskId)
static void sub_8071700(void)
{
- sub_80946C8(0, 0);
+ HandleCloseSaveWindow(0, 0);
}
static void HideSaveDialog(void)