diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-01-10 23:17:43 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-01-10 20:17:43 -0800 |
commit | f88eeb607409528dadbf841f2cb8e805d6e86deb (patch) | |
tree | 6b4f6411a0e02bff918cb924251b68a5038ae1f8 | |
parent | 6b0268e0c0fb98014cb72f8a918a33c0645162d2 (diff) |
more labels and finish decompiling battle_ai.c except for unk_24 (#184)
* labels for save_menu_util.c
* formatting, i suck at it
* fix sub_80712B4 to not use MyTask struct
* pls don't kill me
* current changes
* decompile BattleAICmd_if_damage_bonus
* formatting
* label thinking struct unk8
* decompile BattleAICMd_if_status_not_in_party
* decompile more battle_ai.c functions
* Began decompilation of a random file
* decompile BattleAICmd_if_can_faint and BattleAICmd_if_cant_faint
* decompile unk_3F and unk_40
* decompile if_move_effect and if_not_move_effect
* formatting, silly
* decompile if_last_move_did_damage and if_encored
* decompile unk_45 if_random_2 and unk_47
* decompile get_hold_effect and get_gender
* decompile is_first_turn and get_stockpile_count
* decompile unk_4C and get_item
* decompile unk_4E unk_4F and unk_50
* decompile get_protect_count and the remaining stub macros
* decompile call jump and unk_5A
* decompile if_level_cond
* decompile the last AI macros besides unk_24
* finish decompiling battle_ai.c except for unk_24
-rw-r--r-- | asm/battle_ai.s | 2067 | ||||
-rw-r--r-- | asm/rom_8080874.s | 179 | ||||
-rw-r--r-- | asm/rom_8094928.s | 314 | ||||
-rw-r--r-- | include/battle.h | 16 | ||||
-rw-r--r-- | include/pokemon.h | 4 | ||||
-rw-r--r-- | include/save_menu_util.h | 4 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/battle_ai.c | 874 | ||||
-rw-r--r-- | src/rom_8080874.c | 85 | ||||
-rw-r--r-- | src/rom_8094928.c | 94 | ||||
-rw-r--r-- | src/save_menu_util.c | 17 | ||||
-rw-r--r-- | src/scrcmd.c | 10 | ||||
-rw-r--r-- | src/start_menu.c | 17 |
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) |