diff options
-rw-r--r-- | asm/battle_setup.s | 2580 | ||||
-rw-r--r-- | include/fieldmap.h | 4 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/battle_setup.c | 1258 | ||||
-rw-r--r-- | src/wild_encounter.c | 14 |
5 files changed, 1268 insertions, 2590 deletions
diff --git a/asm/battle_setup.s b/asm/battle_setup.s deleted file mode 100644 index 66a305229..000000000 --- a/asm/battle_setup.s +++ /dev/null @@ -1,2580 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start task01_battle_start -task01_battle_start: @ 8081960 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08081980 @ =gTasks + 0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08081984 - cmp r0, 0x1 - beq _0808199A - b _080819BA - .align 2, 0 -_08081980: .4byte gTasks + 0x8 -_08081984: - bl FieldPoisonEffectIsRunning - cmp r0, 0 - bne _080819BA - ldrb r0, [r4, 0x2] - bl sub_811AABC - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _080819BA -_0808199A: - bl sub_811AAE8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080819BA - ldr r0, _080819C0 @ =sub_800E7C4 - bl SetMainCallback2 - bl prev_quest_postbuffer_cursor_backup_reset - bl overworld_poison_timer_set - adds r0, r5, 0 - bl DestroyTask -_080819BA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080819C0: .4byte sub_800E7C4 - thumb_func_end task01_battle_start - - thumb_func_start task_add_01_battle_start -task_add_01_battle_start: @ 80819C4 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 16 - lsrs r5, 16 - ldr r0, _080819F8 @ =task01_battle_start - movs r1, 0x1 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080819FC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xA] - adds r0, r5, 0 - bl current_map_music_set__default_for_battle - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080819F8: .4byte task01_battle_start -_080819FC: .4byte gTasks - thumb_func_end task_add_01_battle_start - - thumb_func_start sub_8081A00 -sub_8081A00: @ 8081A00 - push {lr} - bl GetSafariZoneFlag - cmp r0, 0 - beq _08081A10 - bl sub_8081AA4 - b _08081A14 -_08081A10: - bl sub_8081A18 -_08081A14: - pop {r0} - bx r0 - thumb_func_end sub_8081A00 - - thumb_func_start sub_8081A18 -sub_8081A18: @ 8081A18 - push {lr} - bl ScriptContext2_Enable - bl player_bitmagic - bl sub_80597F4 - ldr r1, _08081A50 @ =gMain - ldr r0, _08081A54 @ =sub_8081C8C - str r0, [r1, 0x8] - ldr r1, _08081A58 @ =gUnknown_020239F8 - movs r0, 0 - strh r0, [r1] - bl sub_8082034 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl task_add_01_battle_start - movs r0, 0x7 - bl sav12_xor_increment - movs r0, 0x8 - bl sav12_xor_increment - pop {r0} - bx r0 - .align 2, 0 -_08081A50: .4byte gMain -_08081A54: .4byte sub_8081C8C -_08081A58: .4byte gUnknown_020239F8 - thumb_func_end sub_8081A18 - - thumb_func_start sub_8081A5C -sub_8081A5C: @ 8081A5C - push {lr} - bl ScriptContext2_Enable - bl player_bitmagic - bl sub_80597F4 - ldr r1, _08081A98 @ =gMain - ldr r0, _08081A9C @ =sub_8081C8C - str r0, [r1, 0x8] - ldr r1, _08081AA0 @ =gUnknown_020239F8 - movs r2, 0x80 - lsls r2, 3 - adds r0, r2, 0 - strh r0, [r1] - bl sub_8082034 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl task_add_01_battle_start - movs r0, 0x7 - bl sav12_xor_increment - movs r0, 0x8 - bl sav12_xor_increment - pop {r0} - bx r0 - .align 2, 0 -_08081A98: .4byte gMain -_08081A9C: .4byte sub_8081C8C -_08081AA0: .4byte gUnknown_020239F8 - thumb_func_end sub_8081A5C - - thumb_func_start sub_8081AA4 -sub_8081AA4: @ 8081AA4 - push {lr} - bl ScriptContext2_Enable - bl player_bitmagic - bl sub_80597F4 - ldr r1, _08081AD0 @ =gMain - ldr r0, _08081AD4 @ =sub_80C824C - str r0, [r1, 0x8] - ldr r1, _08081AD8 @ =gUnknown_020239F8 - movs r0, 0x80 - strh r0, [r1] - bl sub_8082034 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl task_add_01_battle_start - pop {r0} - bx r0 - .align 2, 0 -_08081AD0: .4byte gMain -_08081AD4: .4byte sub_80C824C -_08081AD8: .4byte gUnknown_020239F8 - thumb_func_end sub_8081AA4 - - thumb_func_start task_add_01_battle_start_with_music_and_stats -task_add_01_battle_start_with_music_and_stats: @ 8081ADC - push {lr} - bl sub_8082080 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl task_add_01_battle_start - movs r0, 0x7 - bl sav12_xor_increment - movs r0, 0x9 - bl sav12_xor_increment - pop {r0} - bx r0 - thumb_func_end task_add_01_battle_start_with_music_and_stats - - thumb_func_start sub_8081AFC -sub_8081AFC: @ 8081AFC - push {lr} - ldr r0, _08081B2C @ =gEnemyParty - movs r1, 0xC4 - lsls r1, 1 - movs r2, 0x5 - bl CreateMaleMon - bl ScriptContext2_Enable - ldr r1, _08081B30 @ =gMain - ldr r0, _08081B34 @ =c2_exit_to_overworld_1_continue_scripts_restart_music - str r0, [r1, 0x8] - ldr r1, _08081B38 @ =gUnknown_020239F8 - movs r2, 0x80 - lsls r2, 2 - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0x8 - movs r1, 0 - bl task_add_01_battle_start - pop {r0} - bx r0 - .align 2, 0 -_08081B2C: .4byte gEnemyParty -_08081B30: .4byte gMain -_08081B34: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music -_08081B38: .4byte gUnknown_020239F8 - thumb_func_end sub_8081AFC - - thumb_func_start sub_8081B3C -sub_8081B3C: @ 8081B3C - push {lr} - bl ScriptContext2_Enable - ldr r1, _08081B6C @ =gMain - ldr r0, _08081B70 @ =sub_8081CEC - str r0, [r1, 0x8] - ldr r1, _08081B74 @ =gUnknown_020239F8 - movs r0, 0 - strh r0, [r1] - bl sub_8082034 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl task_add_01_battle_start - movs r0, 0x7 - bl sav12_xor_increment - movs r0, 0x8 - bl sav12_xor_increment - pop {r0} - bx r0 - .align 2, 0 -_08081B6C: .4byte gMain -_08081B70: .4byte sub_8081CEC -_08081B74: .4byte gUnknown_020239F8 - thumb_func_end sub_8081B3C - - thumb_func_start sub_8081B78 -sub_8081B78: @ 8081B78 - push {lr} - bl ScriptContext2_Enable - ldr r1, _08081BAC @ =gMain - ldr r0, _08081BB0 @ =sub_8081CEC - str r0, [r1, 0x8] - ldr r1, _08081BB4 @ =gUnknown_020239F8 - movs r2, 0x80 - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - bl sub_8082034 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl task_add_01_battle_start - movs r0, 0x7 - bl sav12_xor_increment - movs r0, 0x8 - bl sav12_xor_increment - pop {r0} - bx r0 - .align 2, 0 -_08081BAC: .4byte gMain -_08081BB0: .4byte sub_8081CEC -_08081BB4: .4byte gUnknown_020239F8 - thumb_func_end sub_8081B78 - - thumb_func_start sub_8081BB8 -sub_8081BB8: @ 8081BB8 - push {lr} - bl ScriptContext2_Enable - ldr r1, _08081BE8 @ =gMain - ldr r0, _08081BEC @ =sub_8081CEC - str r0, [r1, 0x8] - ldr r1, _08081BF0 @ =gUnknown_020239F8 - movs r2, 0x80 - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08081BF4 @ =0x000001cf - movs r0, 0 - bl task_add_01_battle_start - movs r0, 0x7 - bl sav12_xor_increment - movs r0, 0x8 - bl sav12_xor_increment - pop {r0} - bx r0 - .align 2, 0 -_08081BE8: .4byte gMain -_08081BEC: .4byte sub_8081CEC -_08081BF0: .4byte gUnknown_020239F8 -_08081BF4: .4byte 0x000001cf - thumb_func_end sub_8081BB8 - - thumb_func_start sub_8081BF8 -sub_8081BF8: @ 8081BF8 - push {lr} - bl ScriptContext2_Enable - ldr r1, _08081C20 @ =gMain - ldr r0, _08081C24 @ =sub_8081CEC - str r0, [r1, 0x8] - ldr r1, _08081C28 @ =gUnknown_020239F8 - movs r2, 0xC0 - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08081C2C @ =gGameVersion - ldrb r0, [r0] - cmp r0, 0x2 - bne _08081C34 - ldr r1, _08081C30 @ =0x000001cf - movs r0, 0xB - bl task_add_01_battle_start - b _08081C3C - .align 2, 0 -_08081C20: .4byte gMain -_08081C24: .4byte sub_8081CEC -_08081C28: .4byte gUnknown_020239F8 -_08081C2C: .4byte gGameVersion -_08081C30: .4byte 0x000001cf -_08081C34: - ldr r1, _08081C4C @ =0x000001cf - movs r0, 0x6 - bl task_add_01_battle_start -_08081C3C: - movs r0, 0x7 - bl sav12_xor_increment - movs r0, 0x8 - bl sav12_xor_increment - pop {r0} - bx r0 - .align 2, 0 -_08081C4C: .4byte 0x000001cf - thumb_func_end sub_8081BF8 - - thumb_func_start sub_8081C50 -sub_8081C50: @ 8081C50 - push {lr} - bl ScriptContext2_Enable - ldr r1, _08081C80 @ =gMain - ldr r0, _08081C84 @ =sub_8081CEC - str r0, [r1, 0x8] - ldr r1, _08081C88 @ =gUnknown_020239F8 - movs r2, 0xC0 - lsls r2, 7 - adds r0, r2, 0 - strh r0, [r1] - movs r1, 0xE7 - lsls r1, 1 - movs r0, 0xA - bl task_add_01_battle_start - movs r0, 0x7 - bl sav12_xor_increment - movs r0, 0x8 - bl sav12_xor_increment - pop {r0} - bx r0 - .align 2, 0 -_08081C80: .4byte gMain -_08081C84: .4byte sub_8081CEC -_08081C88: .4byte gUnknown_020239F8 - thumb_func_end sub_8081C50 - - thumb_func_start sub_8081C8C -sub_8081C8C: @ 8081C8C - push {lr} - sub sp, 0x4 - mov r1, sp - movs r0, 0 - strh r0, [r1] - movs r1, 0xA0 - lsls r1, 19 - ldr r2, _08081CC0 @ =0x01000100 - mov r0, sp - bl CpuSet - movs r0, 0 - movs r1, 0x80 - bl ResetOamRange - ldr r0, _08081CC4 @ =gUnknown_02024D26 - ldrb r0, [r0] - bl battle_exit_is_player_defeat - cmp r0, 0x1 - bne _08081CCC - ldr r0, _08081CC8 @ =c2_whiteout - bl SetMainCallback2 - b _08081CD8 - .align 2, 0 -_08081CC0: .4byte 0x01000100 -_08081CC4: .4byte gUnknown_02024D26 -_08081CC8: .4byte c2_whiteout -_08081CCC: - ldr r0, _08081CE0 @ =c2_exit_to_overworld_2_switch - bl SetMainCallback2 - ldr r1, _08081CE4 @ =gUnknown_0300485C - ldr r0, _08081CE8 @ =sub_8080E44 - str r0, [r1] -_08081CD8: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08081CE0: .4byte c2_exit_to_overworld_2_switch -_08081CE4: .4byte gUnknown_0300485C -_08081CE8: .4byte sub_8080E44 - thumb_func_end sub_8081C8C - - thumb_func_start sub_8081CEC -sub_8081CEC: @ 8081CEC - push {lr} - sub sp, 0x4 - mov r1, sp - movs r0, 0 - strh r0, [r1] - movs r1, 0xA0 - lsls r1, 19 - ldr r2, _08081D20 @ =0x01000100 - mov r0, sp - bl CpuSet - movs r0, 0 - movs r1, 0x80 - bl ResetOamRange - ldr r0, _08081D24 @ =gUnknown_02024D26 - ldrb r0, [r0] - bl battle_exit_is_player_defeat - cmp r0, 0x1 - bne _08081D2C - ldr r0, _08081D28 @ =c2_whiteout - bl SetMainCallback2 - b _08081D32 - .align 2, 0 -_08081D20: .4byte 0x01000100 -_08081D24: .4byte gUnknown_02024D26 -_08081D28: .4byte c2_whiteout -_08081D2C: - ldr r0, _08081D38 @ =c2_exit_to_overworld_1_continue_scripts_restart_music - bl SetMainCallback2 -_08081D32: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08081D38: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music - thumb_func_end sub_8081CEC - - thumb_func_start sub_8081D3C -sub_8081D3C: @ 8081D3C - push {r4,r5,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 16 - lsrs r5, r0, 16 - lsls r0, r5, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl MetatileBehavior_IsTallGrass - lsls r0, 24 - cmp r0, 0 - beq _08081D72 - movs r0, 0 - b _08081E86 -_08081D72: - adds r0, r4, 0 - bl MetatileBehavior_IsLongGrass - lsls r0, 24 - cmp r0, 0 - beq _08081D82 - movs r0, 0x1 - b _08081E86 -_08081D82: - adds r0, r4, 0 - bl MetatileBehavior_IsSandOrDeepSand - lsls r0, 24 - cmp r0, 0 - bne _08081E84 - ldr r0, _08081DA4 @ =gMapHeader - ldrb r0, [r0, 0x17] - subs r0, 0x1 - cmp r0, 0x8 - bhi _08081E08 - lsls r0, 2 - ldr r1, _08081DA8 @ =_08081DAC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08081DA4: .4byte gMapHeader -_08081DA8: .4byte _08081DAC - .align 2, 0 -_08081DAC: - .4byte _08081E08 - .4byte _08081E08 - .4byte _08081E08 - .4byte _08081DD0 - .4byte _08081DF4 - .4byte _08081DF8 - .4byte _08081E08 - .4byte _08081DE0 - .4byte _08081DE0 -_08081DD0: - lsls r0, r5, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl sub_80574C4 - lsls r0, 24 - cmp r0, 0 - beq _08081DE4 -_08081DE0: - movs r0, 0x8 - b _08081E86 -_08081DE4: - adds r0, r4, 0 - bl MetatileBehavior_IsSurfableWaterOrUnderwater - lsls r0, 24 - cmp r0, 0 - bne _08081E4C - movs r0, 0x7 - b _08081E86 -_08081DF4: - movs r0, 0x3 - b _08081E86 -_08081DF8: - lsls r0, r5, 24 - lsrs r0, 24 - bl MetatileBehavior_IsSurfableWaterOrUnderwater - lsls r0, 24 - cmp r0, 0 - bne _08081E5E - b _08081E7A -_08081E08: - lsls r0, r5, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl sub_8057568 - lsls r0, 24 - cmp r0, 0 - bne _08081E5E - adds r0, r4, 0 - bl MetatileBehavior_IsSurfableWaterOrUnderwater - lsls r0, 24 - cmp r0, 0 - bne _08081E4C - adds r0, r4, 0 - bl sub_80574D8 - lsls r0, 24 - cmp r0, 0 - beq _08081E34 - movs r0, 0x6 - b _08081E86 -_08081E34: - movs r0, 0x8 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - beq _08081E62 - adds r0, r4, 0 - bl sub_8057450 - lsls r0, 24 - cmp r0, 0 - beq _08081E50 -_08081E4C: - movs r0, 0x5 - b _08081E86 -_08081E50: - adds r0, r4, 0 - bl MetatileBehavior_IsBridge - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08081E62 -_08081E5E: - movs r0, 0x4 - b _08081E86 -_08081E62: - ldr r0, _08081E80 @ =gSaveBlock1 - ldrh r1, [r0, 0x4] - movs r0, 0xE0 - lsls r0, 5 - cmp r1, r0 - beq _08081E84 - bl GetSav1Weather - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x8 - beq _08081E84 -_08081E7A: - movs r0, 0x9 - b _08081E86 - .align 2, 0 -_08081E80: .4byte gSaveBlock1 -_08081E84: - movs r0, 0x2 -_08081E86: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8081D3C - - thumb_func_start sub_8081E90 -sub_8081E90: @ 8081E90 - push {r4,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 16 - lsrs r4, r0, 16 - bl sav1_get_flash_used_on_map - lsls r0, 24 - cmp r0, 0 - beq _08081EC0 - movs r0, 0x2 - b _08081EEA -_08081EC0: - lsls r0, r4, 24 - lsrs r0, 24 - bl MetatileBehavior_IsSurfableWaterOrUnderwater - lsls r0, 24 - cmp r0, 0 - bne _08081EE8 - ldr r0, _08081EE0 @ =gMapHeader - ldrb r0, [r0, 0x17] - cmp r0, 0x4 - beq _08081EE4 - cmp r0, 0x5 - beq _08081EE8 - movs r0, 0 - b _08081EEA - .align 2, 0 -_08081EE0: .4byte gMapHeader -_08081EE4: - movs r0, 0x1 - b _08081EEA -_08081EE8: - movs r0, 0x3 -_08081EEA: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8081E90 - - thumb_func_start sub_8081EF4 -sub_8081EF4: @ 8081EF4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r7, 0 - movs r6, 0 -_08081EFE: - movs r0, 0x64 - adds r1, r6, 0 - muls r1, r0 - ldr r0, _08081F50 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - adds r1, r0, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - beq _08081F42 - cmp r1, 0 - beq _08081F42 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _08081F42 - adds r0, r4, 0 - movs r1, 0x38 - bl GetMonData - adds r0, r7, r0 - lsls r0, 24 - lsrs r7, r0, 24 - subs r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _08081F48 -_08081F42: - adds r6, 0x1 - cmp r6, 0x5 - ble _08081EFE -_08081F48: - adds r0, r7, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08081F50: .4byte gPlayerParty - thumb_func_end sub_8081EF4 - - thumb_func_start reads_trainer_data_byte0 -reads_trainer_data_byte0: @ 8081F54 - push {r4,r5,lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 24 - lsrs r4, r1, 24 - ldr r5, _08081F88 @ =gTrainers - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r2, r1, r5 - adds r0, r2, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, r4 - bcs _08081F74 - adds r4, r0, 0 -_08081F74: - movs r3, 0 - ldrb r0, [r2] - cmp r0, 0x1 - beq _08081FBC - cmp r0, 0x1 - bgt _08081F8C - cmp r0, 0 - beq _08081F96 - b _0808202C - .align 2, 0 -_08081F88: .4byte gTrainers -_08081F8C: - cmp r0, 0x2 - beq _08081FE2 - cmp r0, 0x3 - beq _08082008 - b _0808202C -_08081F96: - adds r0, r5, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r1, [r0] - movs r2, 0 - cmp r3, r4 - bcs _0808202C -_08081FA4: - lsls r0, r2, 3 - adds r0, r1 - ldrb r0, [r0, 0x2] - adds r0, r3, r0 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r4 - bcc _08081FA4 - b _0808202C -_08081FBC: - adds r0, r5, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r1, [r0] - movs r2, 0 - cmp r3, r4 - bcs _0808202C -_08081FCA: - lsls r0, r2, 4 - adds r0, r1 - ldrb r0, [r0, 0x2] - adds r0, r3, r0 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r4 - bcc _08081FCA - b _0808202C -_08081FE2: - adds r0, r5, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r1, [r0] - movs r2, 0 - cmp r3, r4 - bcs _0808202C -_08081FF0: - lsls r0, r2, 3 - adds r0, r1 - ldrb r0, [r0, 0x2] - adds r0, r3, r0 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r4 - bcc _08081FF0 - b _0808202C -_08082008: - adds r0, r5, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r1, [r0] - movs r2, 0 - cmp r3, r4 - bcs _0808202C -_08082016: - lsls r0, r2, 4 - adds r0, r1 - ldrb r0, [r0, 0x2] - adds r0, r3, r0 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r4 - bcc _08082016 -_0808202C: - adds r0, r3, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end reads_trainer_data_byte0 - - thumb_func_start sub_8082034 -sub_8082034: @ 8082034 - push {r4,r5,lr} - bl sub_8081E90 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _08082064 @ =gEnemyParty - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - bl sub_8081EF4 - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bcc _0808206C - ldr r0, _08082068 @ =gBattleTransitionTable_Wild - lsls r1, r5, 1 - adds r0, 0x1 - b _08082070 - .align 2, 0 -_08082064: .4byte gEnemyParty -_08082068: .4byte gBattleTransitionTable_Wild -_0808206C: - ldr r0, _0808207C @ =gBattleTransitionTable_Wild - lsls r1, r5, 1 -_08082070: - adds r1, r0 - ldrb r0, [r1] - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0808207C: .4byte gBattleTransitionTable_Wild - thumb_func_end sub_8082034 - - thumb_func_start sub_8082080 -sub_8082080: @ 8082080 - push {r4-r6,lr} - ldr r4, _080820AC @ =gTrainerBattleOpponent - ldrh r1, [r4] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - beq _080820E4 - ldr r1, _080820B0 @ =gTrainers - ldrh r2, [r4] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - ldrb r1, [r0, 0x1] - cmp r1, 0x18 - bne _080820E0 - adds r1, r2, 0 - ldr r0, _080820B4 @ =0x00000105 - cmp r1, r0 - bne _080820B8 - movs r0, 0xC - b _0808212C - .align 2, 0 -_080820AC: .4byte gTrainerBattleOpponent -_080820B0: .4byte gTrainers -_080820B4: .4byte 0x00000105 -_080820B8: - movs r0, 0x83 - lsls r0, 1 - cmp r1, r0 - bne _080820C4 - movs r0, 0xD - b _0808212C -_080820C4: - ldr r0, _080820D0 @ =0x00000107 - cmp r1, r0 - bne _080820D4 - movs r0, 0xE - b _0808212C - .align 2, 0 -_080820D0: .4byte 0x00000107 -_080820D4: - movs r0, 0x84 - lsls r0, 1 - cmp r1, r0 - bne _080820E4 - movs r0, 0xF - b _0808212C -_080820E0: - cmp r1, 0x20 - bne _080820E8 -_080820E4: - movs r0, 0x10 - b _0808212C -_080820E8: - ldrb r0, [r0, 0x18] - movs r5, 0x1 - cmp r0, 0x1 - bne _080820F2 - movs r5, 0x2 -_080820F2: - bl sub_8081E90 - lsls r0, 24 - lsrs r6, r0, 24 - ldrh r0, [r4] - adds r1, r5, 0 - bl reads_trainer_data_byte0 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - bl sub_8081EF4 - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bcc _08082124 - ldr r0, _08082120 @ =gBattleTransitionTable_Trainer - lsls r1, r6, 1 - adds r0, 0x1 - b _08082128 - .align 2, 0 -_08082120: .4byte gBattleTransitionTable_Trainer -_08082124: - ldr r0, _08082134 @ =gBattleTransitionTable_Trainer - lsls r1, r6, 1 -_08082128: - adds r1, r0 - ldrb r0, [r1] -_0808212C: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08082134: .4byte gBattleTransitionTable_Trainer - thumb_func_end sub_8082080 - - thumb_func_start sub_8082138 -sub_8082138: @ 8082138 - push {r4,lr} - ldr r0, _0808215C @ =gEnemyParty - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - bl sub_8081EF4 - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bcc _08082160 - movs r0, 0x3 - b _08082162 - .align 2, 0 -_0808215C: .4byte gEnemyParty -_08082160: - movs r0, 0x4 -_08082162: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8082138 - - thumb_func_start sub_8082168 -sub_8082168: @ 8082168 - push {lr} - ldr r0, _0808217C @ =CB2_ChooseStarter - bl SetMainCallback2 - ldr r1, _08082180 @ =gMain - ldr r0, _08082184 @ =sub_8082188 - str r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_0808217C: .4byte CB2_ChooseStarter -_08082180: .4byte gMain -_08082184: .4byte sub_8082188 - thumb_func_end sub_8082168 - - thumb_func_start sub_8082188 -sub_8082188: @ 8082188 - push {lr} - sub sp, 0x8 - ldr r0, _080821CC @ =0x00004023 - bl GetVarPointer - ldr r2, _080821D0 @ =gScriptResult - ldrh r1, [r2] - strh r1, [r0] - ldrh r0, [r2] - bl GetStarterPokemon - lsls r0, 16 - lsrs r0, 16 - movs r1, 0 - str r1, [sp] - str r1, [sp, 0x4] - movs r1, 0x5 - movs r2, 0 - movs r3, 0 - bl ScriptGiveMon - bl ResetTasks - bl sub_80408BC - ldr r0, _080821D4 @ =sub_80821D8 - bl SetMainCallback2 - movs r0, 0 - bl sub_811AAD8 - add sp, 0x8 - pop {r0} - bx r0 - .align 2, 0 -_080821CC: .4byte 0x00004023 -_080821D0: .4byte gScriptResult -_080821D4: .4byte sub_80821D8 - thumb_func_end sub_8082188 - - thumb_func_start sub_80821D8 -sub_80821D8: @ 80821D8 - push {lr} - bl UpdatePaletteFade - bl RunTasks - bl sub_811AAE8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08082214 - ldr r1, _08082218 @ =gUnknown_020239F8 - movs r0, 0x10 - strh r0, [r1] - ldr r1, _0808221C @ =gMain - ldr r0, _08082220 @ =sub_8082228 - str r0, [r1, 0x8] - ldr r0, _08082224 @ =sub_800E7C4 - bl SetMainCallback2 - bl prev_quest_postbuffer_cursor_backup_reset - bl overworld_poison_timer_set - movs r0, 0x7 - bl sav12_xor_increment - movs r0, 0x8 - bl sav12_xor_increment -_08082214: - pop {r0} - bx r0 - .align 2, 0 -_08082218: .4byte gUnknown_020239F8 -_0808221C: .4byte gMain -_08082220: .4byte sub_8082228 -_08082224: .4byte sub_800E7C4 - thumb_func_end sub_80821D8 - - thumb_func_start sub_8082228 -sub_8082228: @ 8082228 - push {lr} - bl sav1_reset_battle_music_maybe - ldr r0, _08082238 @ =c2_exit_to_overworld_1_continue_scripts_restart_music - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_08082238: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music - thumb_func_end sub_8082228 - - thumb_func_start TrainerBattleLoadArg32 -TrainerBattleLoadArg32: @ 808223C - adds r2, r0, 0 - ldrb r0, [r2] - ldrb r1, [r2, 0x1] - lsls r1, 8 - orrs r0, r1 - ldrb r1, [r2, 0x2] - lsls r1, 16 - orrs r0, r1 - ldrb r1, [r2, 0x3] - lsls r1, 24 - orrs r0, r1 - bx lr - thumb_func_end TrainerBattleLoadArg32 - - thumb_func_start TrainerBattleLoadArg16 -TrainerBattleLoadArg16: @ 8082254 - adds r1, r0, 0 - ldrb r0, [r1] - ldrb r1, [r1, 0x1] - lsls r1, 8 - orrs r0, r1 - bx lr - thumb_func_end TrainerBattleLoadArg16 - - thumb_func_start TrainerBattleLoadArg8 -TrainerBattleLoadArg8: @ 8082260 - ldrb r0, [r0] - bx lr - thumb_func_end TrainerBattleLoadArg8 - - thumb_func_start trainerflag_opponent -trainerflag_opponent: @ 8082264 - ldr r1, _08082278 @ =gTrainerBattleOpponent - movs r2, 0xA0 - lsls r2, 3 - adds r0, r2, 0 - ldrh r1, [r1] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - bx lr - .align 2, 0 -_08082278: .4byte gTrainerBattleOpponent - thumb_func_end trainerflag_opponent - - thumb_func_start battle_exit_is_player_defeat -battle_exit_is_player_defeat: @ 808227C - push {lr} - subs r0, 0x1 - cmp r0, 0x6 - bhi _080822B4 - lsls r0, 2 - ldr r1, _08082290 @ =_08082294 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08082290: .4byte _08082294 - .align 2, 0 -_08082294: - .4byte _080822B4 - .4byte _080822B0 - .4byte _080822B0 - .4byte _080822B4 - .4byte _080822B4 - .4byte _080822B4 - .4byte _080822B4 -_080822B0: - movs r0, 0x1 - b _080822B6 -_080822B4: - movs r0, 0 -_080822B6: - pop {r1} - bx r1 - thumb_func_end battle_exit_is_player_defeat - - thumb_func_start sub_80822BC -sub_80822BC: @ 80822BC - ldr r0, _080822E8 @ =gTrainerBattleMode - movs r1, 0 - strh r1, [r0] - ldr r0, _080822EC @ =gTrainerBattleOpponent - strh r1, [r0] - ldr r0, _080822F0 @ =gTrainerMapObjectLocalId - strh r1, [r0] - ldr r0, _080822F4 @ =gTrainerIntroSpeech - movs r1, 0 - str r1, [r0] - ldr r0, _080822F8 @ =gTrainerDefeatSpeech - str r1, [r0] - ldr r0, _080822FC @ =gTrainerVictorySpeech - str r1, [r0] - ldr r0, _08082300 @ =gTrainerCannotBattleSpeech - str r1, [r0] - ldr r0, _08082304 @ =gTrainerBattleScriptReturnAddress - str r1, [r0] - ldr r0, _08082308 @ =gTrainerBattleEndScript - str r1, [r0] - bx lr - .align 2, 0 -_080822E8: .4byte gTrainerBattleMode -_080822EC: .4byte gTrainerBattleOpponent -_080822F0: .4byte gTrainerMapObjectLocalId -_080822F4: .4byte gTrainerIntroSpeech -_080822F8: .4byte gTrainerDefeatSpeech -_080822FC: .4byte gTrainerVictorySpeech -_08082300: .4byte gTrainerCannotBattleSpeech -_08082304: .4byte gTrainerBattleScriptReturnAddress -_08082308: .4byte gTrainerBattleEndScript - thumb_func_end sub_80822BC - - thumb_func_start TrainerBattleLoadArgs -TrainerBattleLoadArgs: @ 808230C - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 -_08082312: - ldrb r0, [r4, 0x4] - cmp r0, 0x6 - bhi _08082384 - lsls r0, 2 - ldr r1, _08082324 @ =_08082328 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08082324: .4byte _08082328 - .align 2, 0 -_08082328: - .4byte _08082344 - .4byte _08082352 - .4byte _08082360 - .4byte _0808236E - .4byte _08082376 - .4byte _0808237E - .4byte _08082388 -_08082344: - adds r0, r5, 0 - bl TrainerBattleLoadArg8 - ldr r1, [r4] - strb r0, [r1] - adds r5, 0x1 - b _08082384 -_08082352: - adds r0, r5, 0 - bl TrainerBattleLoadArg16 - ldr r1, [r4] - strh r0, [r1] - adds r5, 0x2 - b _08082384 -_08082360: - adds r0, r5, 0 - bl TrainerBattleLoadArg32 - ldr r1, [r4] - str r0, [r1] - adds r5, 0x4 - b _08082384 -_0808236E: - ldr r1, [r4] - movs r0, 0 - strb r0, [r1] - b _08082384 -_08082376: - ldr r1, [r4] - movs r0, 0 - strh r0, [r1] - b _08082384 -_0808237E: - ldr r1, [r4] - movs r0, 0 - str r0, [r1] -_08082384: - adds r4, 0x8 - b _08082312 -_08082388: - ldr r0, [r4] - str r5, [r0] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end TrainerBattleLoadArgs - - thumb_func_start battle_80801F0 -battle_80801F0: @ 8082394 - push {lr} - ldr r0, _080823B8 @ =gTrainerMapObjectLocalId - ldrh r1, [r0] - cmp r1, 0 - beq _080823B4 - ldr r0, _080823BC @ =gUnknown_0202E8DE - strh r1, [r0] - lsls r0, r1, 24 - lsrs r0, 24 - ldr r2, _080823C0 @ =gSaveBlock1 - ldrb r1, [r2, 0x5] - ldrb r2, [r2, 0x4] - bl GetFieldObjectIdByLocalIdAndMap - ldr r1, _080823C4 @ =gSelectedMapObject - strb r0, [r1] -_080823B4: - pop {r0} - bx r0 - .align 2, 0 -_080823B8: .4byte gTrainerMapObjectLocalId -_080823BC: .4byte gUnknown_0202E8DE -_080823C0: .4byte gSaveBlock1 -_080823C4: .4byte gSelectedMapObject - thumb_func_end battle_80801F0 - - thumb_func_start TrainerBattleConfigure -TrainerBattleConfigure: @ 80823C8 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_80822BC - ldr r4, _080823F0 @ =gTrainerBattleMode - adds r0, r5, 0 - bl TrainerBattleLoadArg8 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4] - ldrh r0, [r4] - subs r0, 0x1 - cmp r0, 0x7 - bhi _080824A4 - lsls r0, 2 - ldr r1, _080823F4 @ =_080823F8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080823F0: .4byte gTrainerBattleMode -_080823F4: .4byte _080823F8 - .align 2, 0 -_080823F8: - .4byte _08082434 - .4byte _08082434 - .4byte _08082418 - .4byte _0808242C - .4byte _0808247C - .4byte _0808243C - .4byte _08082454 - .4byte _0808243C -_08082418: - ldr r0, _08082424 @ =gTrainerBattleSpecs_3 - adds r1, r5, 0 - bl TrainerBattleLoadArgs - ldr r0, _08082428 @ =gUnknown_0819F878 - b _080824B2 - .align 2, 0 -_08082424: .4byte gTrainerBattleSpecs_3 -_08082428: .4byte gUnknown_0819F878 -_0808242C: - ldr r0, _08082430 @ =gTrainerBattleSpecs_2 - b _0808243E - .align 2, 0 -_08082430: .4byte gTrainerBattleSpecs_2 -_08082434: - ldr r0, _08082438 @ =gTrainerBattleSpecs_1 - b _080824A6 - .align 2, 0 -_08082438: .4byte gTrainerBattleSpecs_1 -_0808243C: - ldr r0, _0808244C @ =gTrainerBattleSpecs_4 -_0808243E: - adds r1, r5, 0 - bl TrainerBattleLoadArgs - bl battle_80801F0 - ldr r0, _08082450 @ =gUnknown_0819F840 - b _080824B2 - .align 2, 0 -_0808244C: .4byte gTrainerBattleSpecs_4 -_08082450: .4byte gUnknown_0819F840 -_08082454: - ldr r0, _08082470 @ =gTrainerBattleSpecs_2 - adds r1, r5, 0 - bl TrainerBattleLoadArgs - bl battle_80801F0 - ldr r4, _08082474 @ =gTrainerBattleOpponent - ldrh r0, [r4] - bl sub_8082C4C - strh r0, [r4] - ldr r0, _08082478 @ =gUnknown_0819F8AE - b _080824B2 - .align 2, 0 -_08082470: .4byte gTrainerBattleSpecs_2 -_08082474: .4byte gTrainerBattleOpponent -_08082478: .4byte gUnknown_0819F8AE -_0808247C: - ldr r0, _08082498 @ =gTrainerBattleSpecs_0 - adds r1, r5, 0 - bl TrainerBattleLoadArgs - bl battle_80801F0 - ldr r4, _0808249C @ =gTrainerBattleOpponent - ldrh r0, [r4] - bl sub_8082C4C - strh r0, [r4] - ldr r0, _080824A0 @ =gUnknown_0819F887 - b _080824B2 - .align 2, 0 -_08082498: .4byte gTrainerBattleSpecs_0 -_0808249C: .4byte gTrainerBattleOpponent -_080824A0: .4byte gUnknown_0819F887 -_080824A4: - ldr r0, _080824B8 @ =gTrainerBattleSpecs_0 -_080824A6: - adds r1, r5, 0 - bl TrainerBattleLoadArgs - bl battle_80801F0 - ldr r0, _080824BC @ =gUnknown_0819F818 -_080824B2: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080824B8: .4byte gTrainerBattleSpecs_0 -_080824BC: .4byte gUnknown_0819F818 - thumb_func_end TrainerBattleConfigure - - thumb_func_start TrainerWantsBattle -TrainerWantsBattle: @ 80824C0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080824F4 @ =gSelectedMapObject - strb r0, [r2] - ldr r4, _080824F8 @ =gUnknown_0202E8DE - ldr r3, _080824FC @ =gMapObjects - lsls r2, r0, 3 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - ldrb r0, [r2, 0x8] - strh r0, [r4] - adds r1, 0x1 - adds r0, r1, 0 - bl TrainerBattleConfigure - ldr r0, _08082500 @ =gUnknown_0819F80B - bl ScriptContext1_SetupScript - bl ScriptContext2_Enable - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080824F4: .4byte gSelectedMapObject -_080824F8: .4byte gUnknown_0202E8DE -_080824FC: .4byte gMapObjects -_08082500: .4byte gUnknown_0819F80B - thumb_func_end TrainerWantsBattle - - thumb_func_start GetTrainerFlagFromScriptPointer -GetTrainerFlagFromScriptPointer: @ 8082504 - push {lr} - adds r0, 0x2 - bl TrainerBattleLoadArg16 - lsls r0, 16 - movs r1, 0xA0 - lsls r1, 19 - adds r0, r1 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end GetTrainerFlagFromScriptPointer - - thumb_func_start sub_8082524 -sub_8082524: @ 8082524 - push {r4,lr} - ldr r0, _08082550 @ =gSelectedMapObject - ldrb r0, [r0] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08082554 @ =gMapObjects - adds r4, r0 - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl npc_running_behaviour_by_direction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl npc_set_running_behaviour_etc - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08082550: .4byte gSelectedMapObject -_08082554: .4byte gMapObjects - thumb_func_end sub_8082524 - - thumb_func_start sub_8082558 -sub_8082558: @ 8082558 - ldr r0, _08082560 @ =gTrainerBattleMode - ldrb r0, [r0] - bx lr - .align 2, 0 -_08082560: .4byte gTrainerBattleMode - thumb_func_end sub_8082558 - - thumb_func_start sub_8082564 -sub_8082564: @ 8082564 - push {lr} - bl trainerflag_opponent - lsls r0, 16 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_8082564 - - thumb_func_start sub_808257C -sub_808257C: @ 808257C - push {lr} - bl trainerflag_opponent - lsls r0, 16 - lsrs r0, 16 - bl FlagSet - pop {r0} - bx r0 - thumb_func_end sub_808257C - - thumb_func_start unref_sub_8082590 -unref_sub_8082590: @ 8082590 - push {lr} - bl trainerflag_opponent - lsls r0, 16 - lsrs r0, 16 - bl FlagSet - pop {r0} - bx r0 - thumb_func_end unref_sub_8082590 - - thumb_func_start trainer_flag_check -trainer_flag_check: @ 80825A4 - push {lr} - lsls r0, 16 - movs r1, 0xA0 - lsls r1, 19 - adds r0, r1 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end trainer_flag_check - - thumb_func_start trainer_flag_set -trainer_flag_set: @ 80825BC - push {lr} - lsls r0, 16 - movs r1, 0xA0 - lsls r1, 19 - adds r0, r1 - lsrs r0, 16 - bl FlagSet - pop {r0} - bx r0 - thumb_func_end trainer_flag_set - - thumb_func_start trainer_flag_clear -trainer_flag_clear: @ 80825D0 - push {lr} - lsls r0, 16 - movs r1, 0xA0 - lsls r1, 19 - adds r0, r1 - lsrs r0, 16 - bl FlagReset - pop {r0} - bx r0 - thumb_func_end trainer_flag_clear - - thumb_func_start sub_80825E4 -sub_80825E4: @ 80825E4 - push {lr} - ldr r1, _08082600 @ =gUnknown_020239F8 - movs r0, 0x8 - strh r0, [r1] - ldr r1, _08082604 @ =gMain - ldr r0, _08082608 @ =sub_808260C - str r0, [r1, 0x8] - bl task_add_01_battle_start_with_music_and_stats - bl ScriptContext1_Stop - pop {r0} - bx r0 - .align 2, 0 -_08082600: .4byte gUnknown_020239F8 -_08082604: .4byte gMain -_08082608: .4byte sub_808260C - thumb_func_end sub_80825E4 - - thumb_func_start sub_808260C -sub_808260C: @ 808260C - push {lr} - ldr r0, _08082624 @ =gTrainerBattleOpponent - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _0808262C - ldr r0, _08082628 @ =c2_exit_to_overworld_1_continue_scripts_restart_music - bl SetMainCallback2 - b _08082652 - .align 2, 0 -_08082624: .4byte gTrainerBattleOpponent -_08082628: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music -_0808262C: - ldr r0, _08082640 @ =gUnknown_02024D26 - ldrb r0, [r0] - bl battle_exit_is_player_defeat - cmp r0, 0x1 - bne _08082648 - ldr r0, _08082644 @ =c2_whiteout - bl SetMainCallback2 - b _08082652 - .align 2, 0 -_08082640: .4byte gUnknown_02024D26 -_08082644: .4byte c2_whiteout -_08082648: - ldr r0, _08082658 @ =c2_exit_to_overworld_1_continue_scripts_restart_music - bl SetMainCallback2 - bl sub_808257C -_08082652: - pop {r0} - bx r0 - .align 2, 0 -_08082658: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music - thumb_func_end sub_808260C - - thumb_func_start do_choose_name_or_words_screen -do_choose_name_or_words_screen: @ 808265C - push {lr} - ldr r0, _08082674 @ =gTrainerBattleOpponent - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _0808267C - ldr r0, _08082678 @ =c2_exit_to_overworld_1_continue_scripts_restart_music - bl SetMainCallback2 - b _080826A6 - .align 2, 0 -_08082674: .4byte gTrainerBattleOpponent -_08082678: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music -_0808267C: - ldr r0, _08082690 @ =gUnknown_02024D26 - ldrb r0, [r0] - bl battle_exit_is_player_defeat - cmp r0, 0x1 - bne _08082698 - ldr r0, _08082694 @ =c2_whiteout - bl SetMainCallback2 - b _080826A6 - .align 2, 0 -_08082690: .4byte gUnknown_02024D26 -_08082694: .4byte c2_whiteout -_08082698: - ldr r0, _080826AC @ =c2_exit_to_overworld_1_continue_scripts_restart_music - bl SetMainCallback2 - bl sub_808257C - bl sub_8082CB8 -_080826A6: - pop {r0} - bx r0 - .align 2, 0 -_080826AC: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music - thumb_func_end do_choose_name_or_words_screen - - thumb_func_start sub_80826B0 -sub_80826B0: @ 80826B0 - push {lr} - ldr r1, _080826CC @ =gUnknown_020239F8 - movs r0, 0x8 - strh r0, [r1] - ldr r1, _080826D0 @ =gMain - ldr r0, _080826D4 @ =do_choose_name_or_words_screen - str r0, [r1, 0x8] - bl task_add_01_battle_start_with_music_and_stats - bl ScriptContext1_Stop - pop {r0} - bx r0 - .align 2, 0 -_080826CC: .4byte gUnknown_020239F8 -_080826D0: .4byte gMain -_080826D4: .4byte do_choose_name_or_words_screen - thumb_func_end sub_80826B0 - - thumb_func_start sub_80826D8 -sub_80826D8: @ 80826D8 - push {lr} - bl sub_808281C - bl ShowFieldMessage - pop {r0} - bx r0 - thumb_func_end sub_80826D8 - - thumb_func_start sub_80826E8 -sub_80826E8: @ 80826E8 - push {lr} - ldr r0, _080826F8 @ =gTrainerBattleScriptReturnAddress - ldr r0, [r0] - cmp r0, 0 - bne _080826F4 - ldr r0, _080826FC @ =gUnknown_081C6C02 -_080826F4: - pop {r1} - bx r1 - .align 2, 0 -_080826F8: .4byte gTrainerBattleScriptReturnAddress -_080826FC: .4byte gUnknown_081C6C02 - thumb_func_end sub_80826E8 - - thumb_func_start sub_8082700 -sub_8082700: @ 8082700 - push {lr} - ldr r0, _08082710 @ =gTrainerBattleEndScript - ldr r0, [r0] - cmp r0, 0 - bne _0808270C - ldr r0, _08082714 @ =gUnknown_081C6C02 -_0808270C: - pop {r1} - bx r1 - .align 2, 0 -_08082710: .4byte gTrainerBattleEndScript -_08082714: .4byte gUnknown_081C6C02 - thumb_func_end sub_8082700 - - thumb_func_start sub_8082718 -sub_8082718: @ 8082718 - push {lr} - bl sub_8082880 - bl ShowFieldMessage - pop {r0} - bx r0 - thumb_func_end sub_8082718 - - thumb_func_start sub_8082728 -sub_8082728: @ 8082728 - push {lr} - ldr r0, _08082750 @ =gTrainerBattleMode - ldrh r0, [r0] - cmp r0, 0x1 - beq _08082802 - cmp r0, 0x8 - beq _08082802 - ldr r0, _08082754 @ =gTrainerBattleOpponent - ldrh r0, [r0] - bl sub_803FC58 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xD - bhi _080827FC - lsls r0, 2 - ldr r1, _08082758 @ =_0808275C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08082750: .4byte gTrainerBattleMode -_08082754: .4byte gTrainerBattleOpponent -_08082758: .4byte _0808275C - .align 2, 0 -_0808275C: - .4byte _08082794 - .4byte _0808279A - .4byte _080827A4 - .4byte _080827FC - .4byte _080827AC - .4byte _080827B2 - .4byte _080827BC - .4byte _080827C4 - .4byte _080827CC - .4byte _080827D4 - .4byte _080827DC - .4byte _080827E2 - .4byte _080827EC - .4byte _080827F4 -_08082794: - movs r0, 0xBE - lsls r0, 1 - b _080827FE -_0808279A: - ldr r0, _080827A0 @ =0x00000197 - b _080827FE - .align 2, 0 -_080827A0: .4byte 0x00000197 -_080827A4: - ldr r0, _080827A8 @ =0x0000017b - b _080827FE - .align 2, 0 -_080827A8: .4byte 0x0000017b -_080827AC: - movs r0, 0xD0 - lsls r0, 1 - b _080827FE -_080827B2: - ldr r0, _080827B8 @ =0x000001a1 - b _080827FE - .align 2, 0 -_080827B8: .4byte 0x000001a1 -_080827BC: - ldr r0, _080827C0 @ =0x000001a3 - b _080827FE - .align 2, 0 -_080827C0: .4byte 0x000001a3 -_080827C4: - ldr r0, _080827C8 @ =0x000001b9 - b _080827FE - .align 2, 0 -_080827C8: .4byte 0x000001b9 -_080827CC: - ldr r0, _080827D0 @ =0x00000181 - b _080827FE - .align 2, 0 -_080827D0: .4byte 0x00000181 -_080827D4: - ldr r0, _080827D8 @ =0x000001c1 - b _080827FE - .align 2, 0 -_080827D8: .4byte 0x000001c1 -_080827DC: - movs r0, 0xE1 - lsls r0, 1 - b _080827FE -_080827E2: - ldr r0, _080827E8 @ =0x000001c3 - b _080827FE - .align 2, 0 -_080827E8: .4byte 0x000001c3 -_080827EC: - ldr r0, _080827F0 @ =0x000001c5 - b _080827FE - .align 2, 0 -_080827F0: .4byte 0x000001c5 -_080827F4: - ldr r0, _080827F8 @ =0x0000018d - b _080827FE - .align 2, 0 -_080827F8: .4byte 0x0000018d -_080827FC: - ldr r0, _08082808 @ =0x000001a7 -_080827FE: - bl PlayNewMapMusic -_08082802: - pop {r0} - bx r0 - .align 2, 0 -_08082808: .4byte 0x000001a7 - thumb_func_end sub_8082728 - - thumb_func_start ReturnEmptyStringIfNull -ReturnEmptyStringIfNull: @ 808280C - push {lr} - cmp r0, 0 - bne _08082814 - ldr r0, _08082818 @ =gOtherText_CancelWithTerminator -_08082814: - pop {r1} - bx r1 - .align 2, 0 -_08082818: .4byte gOtherText_CancelWithTerminator - thumb_func_end ReturnEmptyStringIfNull - - thumb_func_start sub_808281C -sub_808281C: @ 808281C - push {lr} - ldr r0, _0808282C @ =gTrainerIntroSpeech - ldr r0, [r0] - bl ReturnEmptyStringIfNull - pop {r1} - bx r1 - .align 2, 0 -_0808282C: .4byte gTrainerIntroSpeech - thumb_func_end sub_808281C - - thumb_func_start sub_8082830 -sub_8082830: @ 8082830 - push {r4,lr} - ldr r0, _08082844 @ =gTrainerBattleOpponent - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _08082848 - bl sub_80BCCE8 - b _0808284C - .align 2, 0 -_08082844: .4byte gTrainerBattleOpponent -_08082848: - ldr r0, _08082864 @ =gTrainerDefeatSpeech - ldr r0, [r0] -_0808284C: - ldr r4, _08082868 @ =gStringVar4 - bl ReturnEmptyStringIfNull - adds r1, r0, 0 - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08082864: .4byte gTrainerDefeatSpeech -_08082868: .4byte gStringVar4 - thumb_func_end sub_8082830 - - thumb_func_start unref_sub_808286C -unref_sub_808286C: @ 808286C - push {lr} - ldr r0, _0808287C @ =gTrainerVictorySpeech - ldr r0, [r0] - bl ReturnEmptyStringIfNull - pop {r1} - bx r1 - .align 2, 0 -_0808287C: .4byte gTrainerVictorySpeech - thumb_func_end unref_sub_808286C - - thumb_func_start sub_8082880 -sub_8082880: @ 8082880 - push {lr} - ldr r0, _08082890 @ =gTrainerCannotBattleSpeech - ldr r0, [r0] - bl ReturnEmptyStringIfNull - pop {r1} - bx r1 - .align 2, 0 -_08082890: .4byte gTrainerCannotBattleSpeech - thumb_func_end sub_8082880 - - thumb_func_start sub_8082894 -sub_8082894: @ 8082894 - push {lr} - lsls r1, 16 - lsrs r1, 16 - movs r3, 0 - adds r2, r0, 0 -_0808289E: - ldrh r0, [r2] - cmp r0, r1 - bne _080828A8 - adds r0, r3, 0 - b _080828B4 -_080828A8: - adds r2, 0x10 - adds r3, 0x1 - cmp r3, 0x37 - ble _0808289E - movs r0, 0x1 - negs r0, r0 -_080828B4: - pop {r1} - bx r1 - thumb_func_end sub_8082894 - - thumb_func_start sub_80828B8 -sub_80828B8: @ 80828B8 - push {r4,r5,lr} - lsls r1, 16 - lsrs r5, r1, 16 - movs r4, 0 - adds r2, r0, 0 -_080828C2: - movs r1, 0 - ldrh r0, [r2] - cmp r0, 0 - beq _080828E8 - movs r3, 0 -_080828CC: - adds r0, r2, r3 - ldrh r0, [r0] - cmp r0, r5 - bne _080828D8 - adds r0, r4, 0 - b _080828F4 -_080828D8: - adds r3, 0x2 - adds r1, 0x1 - cmp r1, 0x4 - bgt _080828E8 - adds r0, r2, r3 - ldrh r0, [r0] - cmp r0, 0 - bne _080828CC -_080828E8: - adds r2, 0x10 - adds r4, 0x1 - cmp r4, 0x37 - ble _080828C2 - movs r0, 0x1 - negs r0, r0 -_080828F4: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80828B8 - - thumb_func_start sub_80828FC -sub_80828FC: @ 80828FC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r7, r0, 0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp] - lsls r2, 16 - lsrs r2, 16 - mov r10, r2 - movs r4, 0 - movs r5, 0 - ldr r0, _08082968 @ =gSaveBlock1 + 0x97A - mov r9, r0 -_0808291E: - lsls r0, r5, 4 - adds r2, r0, r7 - ldrh r1, [r2, 0xA] - adds r6, r0, 0 - adds r0, r5, 0x1 - mov r8, r0 - ldr r0, [sp] - cmp r1, r0 - bne _08082990 - ldrh r0, [r2, 0xC] - cmp r0, r10 - bne _08082990 - mov r1, r9 - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _0808298E - ldrh r0, [r2] - bl trainer_flag_check - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08082990 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1E - bhi _08082990 - movs r4, 0x1 - b _0808296E - .align 2, 0 -_08082968: .4byte gSaveBlock1 + 0x97A -_0808296C: - adds r4, 0x1 -_0808296E: - cmp r4, 0x4 - bgt _08082988 - adds r0, r6, r7 - lsls r1, r4, 1 - adds r1, r0, r1 - ldrh r0, [r1] - cmp r0, 0 - beq _08082988 - bl trainer_flag_check - lsls r0, 24 - cmp r0, 0 - bne _0808296C -_08082988: - mov r1, r9 - adds r0, r5, r1 - strb r4, [r0] -_0808298E: - movs r4, 0x1 -_08082990: - mov r5, r8 - cmp r5, 0x37 - ble _0808291E - adds r0, r4, 0 - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80828FC - - thumb_func_start sub_80829A8 -sub_80829A8: @ 80829A8 - push {r4,r5,lr} - lsls r1, 16 - lsrs r4, r1, 16 - lsls r2, 16 - lsrs r2, 16 - movs r1, 0 - ldr r5, _080829D4 @ =gSaveBlock1 + 0x97A - adds r3, r0, 0 - adds r3, 0xA -_080829BA: - ldrh r0, [r3] - cmp r0, r4 - bne _080829D8 - ldrh r0, [r3, 0x2] - cmp r0, r2 - bne _080829D8 - adds r0, r1, r5 - ldrb r0, [r0] - cmp r0, 0 - beq _080829D8 - movs r0, 0x1 - b _080829E2 - .align 2, 0 -_080829D4: .4byte gSaveBlock1 + 0x97A -_080829D8: - adds r3, 0x10 - adds r1, 0x1 - cmp r1, 0x37 - ble _080829BA - movs r0, 0 -_080829E2: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80829A8 - - thumb_func_start sub_80829E8 -sub_80829E8: @ 80829E8 - push {r4,lr} - lsls r1, 16 - lsrs r4, r1, 16 - lsls r2, 16 - lsrs r2, 16 - movs r1, 0 - adds r3, r0, 0 - adds r3, 0xA -_080829F8: - ldrh r0, [r3] - cmp r0, r4 - bne _08082A08 - ldrh r0, [r3, 0x2] - cmp r0, r2 - bne _08082A08 - movs r0, 0x1 - b _08082A12 -_08082A08: - adds r3, 0x10 - adds r1, 0x1 - cmp r1, 0x37 - ble _080829F8 - movs r0, 0 -_08082A12: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80829E8 - - thumb_func_start sub_8082A18 -sub_8082A18: @ 8082A18 - push {lr} - lsls r1, 16 - lsrs r1, 16 - bl sub_8082894 - adds r1, r0, 0 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08082A4C - cmp r1, 0x63 - bgt _08082A4C - ldr r0, _08082A44 @ =gSaveBlock1 - ldr r2, _08082A48 @ =0x0000097a - adds r0, r2 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, 0 - beq _08082A4C - movs r0, 0x1 - b _08082A4E - .align 2, 0 -_08082A44: .4byte gSaveBlock1 -_08082A48: .4byte 0x0000097a -_08082A4C: - movs r0, 0 -_08082A4E: - pop {r1} - bx r1 - thumb_func_end sub_8082A18 - - thumb_func_start sub_8082A54 -sub_8082A54: @ 8082A54 - push {lr} - lsls r1, 16 - lsrs r1, 16 - bl sub_80828B8 - adds r1, r0, 0 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08082A88 - cmp r1, 0x63 - bgt _08082A88 - ldr r0, _08082A80 @ =gSaveBlock1 - ldr r2, _08082A84 @ =0x0000097a - adds r0, r2 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, 0 - beq _08082A88 - movs r0, 0x1 - b _08082A8A - .align 2, 0 -_08082A80: .4byte gSaveBlock1 -_08082A84: .4byte 0x0000097a -_08082A88: - movs r0, 0 -_08082A8A: - pop {r1} - bx r1 - thumb_func_end sub_8082A54 - - thumb_func_start sub_8082A90 -sub_8082A90: @ 8082A90 - push {r4-r7,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r1, 16 - bl sub_8082894 - adds r1, r0, 0 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _08082AB8 - movs r0, 0 - b _08082ADE -_08082AAA: - subs r0, r6, 0x1 - lsls r0, 1 - adds r0, r7, r0 - ldrh r0, [r0] - b _08082ADE -_08082AB4: - ldrh r0, [r5] - b _08082ADE -_08082AB8: - lsls r0, r1, 4 - adds r7, r4, r0 - movs r6, 0x1 - adds r5, r7, 0x2 - adds r4, r5, 0 -_08082AC2: - ldrh r0, [r4] - cmp r0, 0 - beq _08082AAA - bl trainer_flag_check - lsls r0, 24 - cmp r0, 0 - beq _08082AB4 - adds r4, 0x2 - adds r5, 0x2 - adds r6, 0x1 - cmp r6, 0x4 - ble _08082AC2 - ldrh r0, [r7, 0x8] -_08082ADE: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8082A90 - - thumb_func_start sub_8082AE4 -sub_8082AE4: @ 8082AE4 - push {lr} - lsls r1, 16 - lsrs r1, 16 - bl sub_80828B8 - adds r1, r0, 0 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08082B04 - ldr r0, _08082B08 @ =gSaveBlock1 - ldr r2, _08082B0C @ =0x0000097a - adds r0, r2 - adds r0, r1, r0 - movs r1, 0 - strb r1, [r0] -_08082B04: - pop {r0} - bx r0 - .align 2, 0 -_08082B08: .4byte gSaveBlock1 -_08082B0C: .4byte 0x0000097a - thumb_func_end sub_8082AE4 - - thumb_func_start sub_8082B10 -sub_8082B10: @ 8082B10 - push {r4,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r1, 16 - bl sub_8082894 - adds r1, r0, 0 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08082B3A - lsls r0, r1, 4 - adds r0, r4 - ldrh r0, [r0, 0x2] - bl trainer_flag_check - lsls r0, 24 - cmp r0, 0 - beq _08082B3A - movs r0, 0x1 - b _08082B3C -_08082B3A: - movs r0, 0 -_08082B3C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8082B10 - - thumb_func_start sub_8082B44 -sub_8082B44: @ 8082B44 - push {r4-r6,lr} - movs r6, 0 - movs r5, 0 - ldr r4, _08082B64 @ =gUnknown_0839B1F0 -_08082B4C: - ldrh r0, [r4] - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08082B68 - adds r6, 0x1 - cmp r6, 0x4 - ble _08082B68 - movs r0, 0x1 - b _08082B72 - .align 2, 0 -_08082B64: .4byte gUnknown_0839B1F0 -_08082B68: - adds r4, 0x2 - adds r5, 0x1 - cmp r5, 0x7 - bls _08082B4C - movs r0, 0 -_08082B72: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8082B44 - - thumb_func_start sub_8082B78 -sub_8082B78: @ 8082B78 - push {lr} - bl sub_8082B44 - cmp r0, 0 - beq _08082BA0 - ldr r0, _08082B94 @ =gSaveBlock1 - ldr r2, _08082B98 @ =0x00000978 - adds r1, r0, r2 - ldrh r0, [r1] - cmp r0, 0xFE - bls _08082B9C - movs r0, 0xFF - b _08082B9E - .align 2, 0 -_08082B94: .4byte gSaveBlock1 -_08082B98: .4byte 0x00000978 -_08082B9C: - adds r0, 0x1 -_08082B9E: - strh r0, [r1] -_08082BA0: - pop {r0} - bx r0 - thumb_func_end sub_8082B78 - - thumb_func_start sub_8082BA4 -sub_8082BA4: @ 8082BA4 - push {lr} - bl sub_8082B44 - cmp r0, 0 - beq _08082BC8 - ldr r0, _08082BC0 @ =gSaveBlock1 - ldr r1, _08082BC4 @ =0x00000978 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0xFE - bls _08082BC8 - movs r0, 0x1 - b _08082BCA - .align 2, 0 -_08082BC0: .4byte gSaveBlock1 -_08082BC4: .4byte 0x00000978 -_08082BC8: - movs r0, 0 -_08082BCA: - pop {r1} - bx r1 - thumb_func_end sub_8082BA4 - - thumb_func_start sub_8082BD0 -sub_8082BD0: @ 8082BD0 - push {r4,r5,lr} - lsls r0, 16 - lsrs r5, r0, 16 - lsls r1, 16 - lsrs r4, r1, 16 - bl sub_8082BA4 - cmp r0, 0 - beq _08082BFA - ldr r0, _08082C00 @ =gTrainerEyeTrainers - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_80828FC - cmp r0, 0x1 - bne _08082BFA - ldr r0, _08082C04 @ =gSaveBlock1 - ldr r1, _08082C08 @ =0x00000978 - adds r0, r1 - movs r1, 0 - strh r1, [r0] -_08082BFA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08082C00: .4byte gTrainerEyeTrainers -_08082C04: .4byte gSaveBlock1 -_08082C08: .4byte 0x00000978 - thumb_func_end sub_8082BD0 - - thumb_func_start sub_8082C0C -sub_8082C0C: @ 8082C0C - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - lsls r3, 16 - lsrs r3, 16 - lsls r2, 16 - lsrs r2, 16 - ldr r0, _08082C28 @ =gTrainerEyeTrainers - adds r1, r3, 0 - bl sub_80829A8 - pop {r1} - bx r1 - .align 2, 0 -_08082C28: .4byte gTrainerEyeTrainers - thumb_func_end sub_8082C0C - - thumb_func_start unref_sub_8082C2C -unref_sub_8082C2C: @ 8082C2C - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - lsls r3, 16 - lsrs r3, 16 - lsls r2, 16 - lsrs r2, 16 - ldr r0, _08082C48 @ =gTrainerEyeTrainers - adds r1, r3, 0 - bl sub_80829E8 - pop {r1} - bx r1 - .align 2, 0 -_08082C48: .4byte gTrainerEyeTrainers - thumb_func_end unref_sub_8082C2C - - thumb_func_start sub_8082C4C -sub_8082C4C: @ 8082C4C - push {lr} - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - ldr r0, _08082C64 @ =gTrainerEyeTrainers - bl sub_8082A90 - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_08082C64: .4byte gTrainerEyeTrainers - thumb_func_end sub_8082C4C - - thumb_func_start sub_8082C68 -sub_8082C68: @ 8082C68 - push {r4,r5,lr} - ldr r5, _08082C8C @ =gTrainerEyeTrainers - ldr r4, _08082C90 @ =gTrainerBattleOpponent - ldrh r1, [r4] - adds r0, r5, 0 - bl sub_8082A18 - lsls r0, 24 - cmp r0, 0 - bne _08082C94 - ldrh r1, [r4] - adds r0, r5, 0 - bl sub_8082B10 - lsls r0, 24 - lsrs r0, 24 - b _08082C96 - .align 2, 0 -_08082C8C: .4byte gTrainerEyeTrainers -_08082C90: .4byte gTrainerBattleOpponent -_08082C94: - movs r0, 0x1 -_08082C96: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8082C68 - - thumb_func_start sub_8082C9C -sub_8082C9C: @ 8082C9C - push {lr} - ldr r0, _08082CB0 @ =gTrainerEyeTrainers - ldr r1, _08082CB4 @ =gTrainerBattleOpponent - ldrh r1, [r1] - bl sub_8082A54 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08082CB0: .4byte gTrainerEyeTrainers -_08082CB4: .4byte gTrainerBattleOpponent - thumb_func_end sub_8082C9C - - thumb_func_start sub_8082CB8 -sub_8082CB8: @ 8082CB8 - push {lr} - ldr r0, _08082CCC @ =gTrainerEyeTrainers - ldr r1, _08082CD0 @ =gTrainerBattleOpponent - ldrh r1, [r1] - bl sub_8082AE4 - bl sub_808257C - pop {r0} - bx r0 - .align 2, 0 -_08082CCC: .4byte gTrainerEyeTrainers -_08082CD0: .4byte gTrainerBattleOpponent - thumb_func_end sub_8082CB8 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/fieldmap.h b/include/fieldmap.h index 44f31d5a4..bd28f752a 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -112,7 +112,7 @@ struct MapHeader u8 name; u8 cave; u8 weather; - u8 light; + /* 0x17 */ u8 light; u8 filler_18; u8 escapeRope; u8 flags; @@ -165,7 +165,7 @@ struct MapObject /*0x0C*/ struct Coords16 coords1; /*0x10*/ struct Coords16 coords2; /*0x14*/ struct Coords16 coords3; - /*0x18*/ u8 mapobj_unk_18; + /*0x18*/ u8 mapobj_unk_18:4; /*0x19*/ u8 mapobj_unk_19; /*0x1A*/ u8 mapobj_unk_1A; /*0x1B*/ u8 mapobj_unk_1B; diff --git a/ld_script.txt b/ld_script.txt index b2484d644..7f04049ac 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -97,7 +97,7 @@ SECTIONS { asm/title_screen.o(.text); asm/weather.o(.text); asm/rom_8080874.o(.text); - asm/battle_setup.o(.text); + src/battle_setup.o(.text); asm/cable_club.o(.text); asm/mori_debug_menu.o(.text); asm/trainer_see.o(.text); diff --git a/src/battle_setup.c b/src/battle_setup.c new file mode 100644 index 000000000..8edc637a6 --- /dev/null +++ b/src/battle_setup.c @@ -0,0 +1,1258 @@ +#include "global.h" +#include "main.h" +#include "species.h" +#include "pokemon.h" +#include "songs.h" +#include "task.h" +#include "fieldmap.h" +#include "string_util.h" +#include "rng.h" + +extern void prev_quest_postbuffer_cursor_backup_reset(void); +extern void overworld_poison_timer_set(void); +extern void current_map_music_set__default_for_battle(u16); +extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void); +extern void c2_exit_to_overworld_2_switch(void); +extern void npc_set_running_behaviour_etc(struct MapObject *, u8); +extern u8 FlagGet(u16); +extern u8 FlagSet(u16); +extern void FlagReset(u16); +extern void c2_whiteout(void); +extern void sub_800E7C4(void); +extern void sub_8081AA4(void); +extern void sub_8081A18(void); +extern void sub_8081C8C(void); +extern void sub_80C824C(void); +extern void sub_8081CEC(void); +extern void sub_8080E44(void); +extern void sub_80821D8(void); +extern void sub_8082228(void); +extern void sub_808260C(void); +extern void sub_8082CB8(void); +extern u8 * sub_80BCCE8(void); +extern void ShowFieldMessage(); +extern void CB2_ChooseStarter(void); +extern void sub_811AABC(u8); +extern u8 sub_811AAE8(void); +extern u32 GetMonData(struct Pokemon *mon, s32 field); +extern u8 GetFieldObjectIdByLocalIdAndMap(u8, u8, u8); +extern u32 sub_8082880(void); +extern u8 sub_803FC58(u16); + +extern u16 gScriptResult; + +struct Trainer +{ +/* 0x00 */ u8 partyFlags; +/* 0x01 */ u8 trainerClass; +/* 0x02 */ u8 encounterMusic:7; +/* 0x02 */ u8 gender:1; +/* 0x03 */ u8 trainerPic; +/* 0x04 */ u8 trainerName[12]; +/* 0x10 */ u16 items[4]; +/* 0x18 */ bool8 doubleBattle; +/* 0x1C */ u32 aiFlags; +/* 0x20 */ u8 partySize; +/* 0x24 */ struct TrainerPartyMember *party; +}; + +struct TrainerPartyMember +{ + u16 iv; + u8 level; + u16 species; +}; + +struct TrainerBattleSpec +{ + void *ptr; + u8 ptrType; +}; + +struct MyStruct +{ + u16 arr[8]; +}; + +extern u16 MapGridGetMetatileBehaviorAt(s16, s16); +extern bool8 MetatileBehavior_IsTallGrass(char); +extern bool8 MetatileBehavior_IsLongGrass(char); +extern bool8 MetatileBehavior_IsSandOrDeepSand(char); +extern bool8 MetatileBehavior_IsSurfableWaterOrUnderwater(char); +extern bool8 MetatileBehavior_IsBridge(char); +extern bool8 sub_80574C4(char); +extern bool8 sub_80574D8(char); +extern bool8 sub_8057568(char); +extern u8 TestPlayerAvatarFlags(u8); +extern u8 sub_8057450(u8); +extern u8 GetSav1Weather(void); +extern void PlayNewMapMusic(u16); + +extern u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8); + +extern void (*gUnknown_0300485C)(void); +extern u16 *GetVarPointer(u16); + +extern struct Pokemon gEnemyParty[]; +extern struct Pokemon gPlayerParty[]; +extern struct Trainer gTrainers[]; + +extern u16 gTrainerBattleMode; +extern u16 gTrainerBattleOpponent; +extern u16 gTrainerMapObjectLocalId; +extern u32 gTrainerIntroSpeech; +extern u32 gTrainerDefeatSpeech; +extern u32 gTrainerVictorySpeech; +extern u32 gTrainerCannotBattleSpeech; +extern u32 gTrainerBattleScriptReturnAddress; +extern u32 gTrainerBattleEndScript; + +extern u32 gTrainerEyeTrainers[]; + +extern u32 gOtherText_CancelWithTerminator[]; + +extern u16 gUnknown_020239F8; +extern u16 gUnknown_0202E8DE; +extern u8 gUnknown_02024D26; +extern u16 gUnknown_0839B1F0[]; + +extern struct MapObject gMapObjects[]; + +extern u8 gUnknown_0819F818[]; +extern u8 gUnknown_0819F840[]; +extern u8 gUnknown_0819F878[]; +extern u8 gUnknown_0819F887[]; +extern u8 gUnknown_0819F8AE[]; + +extern u8 gUnknown_0819F80B[]; +extern u8 gUnknown_081C6C02[]; + +extern u8 gTrainerBattleSpecs_0[]; +extern u8 gTrainerBattleSpecs_1[]; +extern u8 gTrainerBattleSpecs_2[]; +extern u8 gTrainerBattleSpecs_3[]; +extern u8 gTrainerBattleSpecs_4[]; + +extern u8 gStringVar4[]; + +extern u8 gBattleTransitionTable_Wild[][2]; +extern u8 gBattleTransitionTable_Trainer[][2]; + +void sub_8082188(void); + +void task01_battle_start(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch(data[0]) + { + case 0: + if ( !FieldPoisonEffectIsRunning() ) // is poison not active? + { + sub_811AABC(data[1]); + ++data[0]; // go to case 1. + } + break; + case 1: + if ( sub_811AAE8() == 1 ) + { + SetMainCallback2(sub_800E7C4); + prev_quest_postbuffer_cursor_backup_reset(); + overworld_poison_timer_set(); + DestroyTask(taskId); + } + break; + } +} + +void task_add_01_battle_start(u8 transition, u16 song) +{ + u8 taskId = CreateTask(task01_battle_start, 1); + + gTasks[taskId].data[1] = transition; + current_map_music_set__default_for_battle(song); +} + +void CheckForSafariZoneAndProceed(void) +{ + if ( GetSafariZoneFlag() ) + sub_8081AA4(); + else + sub_8081A18(); +} + +void sub_8081A18(void) +{ + u8 transition; + + ScriptContext2_Enable(); + player_bitmagic(); + sub_80597F4(); + gMain.field_8 = sub_8081C8C; + gUnknown_020239F8 = 0; + transition = GetHigherOrLowerLevelTransitionForWild(); + task_add_01_battle_start(transition, 0); + sav12_xor_increment(7); + sav12_xor_increment(8); +} + +void sub_8081A5C(void) +{ + u8 transition; + + ScriptContext2_Enable(); + player_bitmagic(); + sub_80597F4(); + gMain.field_8 = sub_8081C8C; + gUnknown_020239F8 = 1024; + transition = GetHigherOrLowerLevelTransitionForWild(); + task_add_01_battle_start(transition, 0); + sav12_xor_increment(7); + sav12_xor_increment(8); +} + +void sub_8081AA4(void) +{ + u8 transition; + + ScriptContext2_Enable(); + player_bitmagic(); + sub_80597F4(); + gMain.field_8 = sub_80C824C; + gUnknown_020239F8 = 128; + transition = GetHigherOrLowerLevelTransitionForWild(); + task_add_01_battle_start(transition, 0); +} + +void task_add_01_battle_start_with_music_and_stats(void) +{ + u8 transition; + + transition = sub_8082080(); + task_add_01_battle_start(transition, 0); + sav12_xor_increment(7); + sav12_xor_increment(9); +} + +void sub_8081AFC(void) +{ + CreateMaleMon(&gEnemyParty, SPECIES_RALTS, 5); + ScriptContext2_Enable(); + gMain.field_8 = c2_exit_to_overworld_1_continue_scripts_restart_music; + gUnknown_020239F8 = 512; + task_add_01_battle_start(8, 0); +} + +void sub_8081B3C(void) +{ + u8 transition; + + ScriptContext2_Enable(); + gMain.field_8 = sub_8081CEC; + gUnknown_020239F8 = 0; + transition = GetHigherOrLowerLevelTransitionForWild(); + task_add_01_battle_start(transition, 0); + sav12_xor_increment(7); + sav12_xor_increment(8); +} + +void sub_8081B78(void) +{ + u8 transition; + + ScriptContext2_Enable(); + gMain.field_8 = sub_8081CEC; + gUnknown_020239F8 = 0x2000; + transition = GetHigherOrLowerLevelTransitionForWild(); + task_add_01_battle_start(transition, 0); + sav12_xor_increment(7); + sav12_xor_increment(8); +} + +void sub_8081BB8(void) +{ + ScriptContext2_Enable(); + gMain.field_8 = sub_8081CEC; + gUnknown_020239F8 = 0x2000; + task_add_01_battle_start(0, BGM_BATTLE34); + sav12_xor_increment(7); + sav12_xor_increment(8); +} + +void sub_8081BF8(void) +{ + ScriptContext2_Enable(); + gMain.field_8 = sub_8081CEC; + gUnknown_020239F8 = 12288; + if ( gGameVersion == 2 ) + task_add_01_battle_start(0xB, BGM_BATTLE34); // KYOGRE + else + task_add_01_battle_start(0x6, BGM_BATTLE34); // GROUDON + sav12_xor_increment(7); + sav12_xor_increment(8); +} + +void sub_8081C50(void) +{ + ScriptContext2_Enable(); + gMain.field_8 = sub_8081CEC; + gUnknown_020239F8 = 24576; + task_add_01_battle_start(0xA, BGM_BATTLE36); + sav12_xor_increment(7); + sav12_xor_increment(8); +} + +void sub_8081C8C(void) +{ + CpuFill16(0, 0x5000000, 0x1000200); + ResetOamRange(0, 0x80); + + if ( battle_exit_is_player_defeat(gUnknown_02024D26) == 1 ) + { + SetMainCallback2(c2_whiteout); + } + else + { + SetMainCallback2(c2_exit_to_overworld_2_switch); + gUnknown_0300485C = sub_8080E44; + } +} + +void sub_8081CEC(void) +{ + CpuFill16(0, 0x5000000, 0x1000200); + ResetOamRange(0, 0x80); + + if ( battle_exit_is_player_defeat(gUnknown_02024D26) == 1 ) + SetMainCallback2(c2_whiteout); + else + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +s8 sub_8081D3C(void) +{ + u16 tileBehavior; + s16 x, y; + + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + + if ( MetatileBehavior_IsTallGrass(tileBehavior) ) + return 0; + if ( MetatileBehavior_IsLongGrass(tileBehavior) ) + return 1; + if ( MetatileBehavior_IsSandOrDeepSand(tileBehavior) ) + return 2; + switch(gMapHeader.light) + { + case 1: + case 2: + case 3: + break; + case 4: + if ( sub_80574C4(tileBehavior) ) + return 8; + if ( MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior) ) + return 5; + return 7; + case 8: + case 9: + return 8; + case 5: + return 3; + case 6: + if ( MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior) ) + return 4; + return 9; + } + if ( sub_8057568(tileBehavior) ) + return 4; + if ( MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior) ) + return 5; + if ( sub_80574D8(tileBehavior) ) + return 6; + if ( TestPlayerAvatarFlags(8) ) + { + if ( sub_8057450(tileBehavior) ) + return 5; + if ( MetatileBehavior_IsBridge(tileBehavior) == 1 ) + return 4; + } + if ( !(gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 28) && GetSav1Weather() != 8 ) + return 9; + else + return 2; +} + +s8 sub_8081E90(void) +{ + u8 flashUsed; + u16 tileBehavior; + s16 x, y; + + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + + flashUsed = sav1_get_flash_used_on_map(); + + if(flashUsed) + return 2; + + if( !(MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) ) + { + switch (gMapHeader.light) + { + case 4: + return 1; + case 5: + return 3; + default: + return 0; + } + } + return 3; +} + +u16 GetSumOfPartyMonLevel(u8 fixCount) +{ + u32 monData; + u8 returnThis = 0; + int loopCounter; + + for (loopCounter = 0; loopCounter <= 5; loopCounter++) + { + monData = GetMonData(&gPlayerParty[loopCounter], MON_DATA_SPECIES2); + if ( monData != 412 && monData ) // if the pokemon in question is either NOT Ten question marks or an egg, proceed + // note that it actually considers the 26 glitch mons to be "valid". + { + if ( GetMonData(&gPlayerParty[loopCounter], MON_DATA_HP)) + { + returnThis += GetMonData(&gPlayerParty[loopCounter], MON_DATA_LEVEL); + + fixCount--; + if ( !fixCount ) // has it reached 0? + break; + } + } + } + return returnThis; +} + +u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 partyCount) +{ + // TODO: Clean this up. + u8 i; + u8 returnThis; // v4 + u32 _partyCount = partyCount; + struct TrainerPartyMember *party; + + if ( gTrainers[trainerNum].partySize < _partyCount ) // is the actual party size smaller than the specified size? + _partyCount = gTrainers[trainerNum].partySize; // if so, set the specified size to the actual size. seems to be error correction? + + returnThis = 0; + switch(gTrainers[trainerNum].partyFlags) + { + case 0: + party = gTrainers[trainerNum].party; + for(i = 0; i < _partyCount; i++) + returnThis += party[i].level; + break; + case 1: + party = gTrainers[trainerNum].party; + for(i = 0; i < _partyCount; i++) + returnThis += party[i * 2].level; + break; + case 2: + party = gTrainers[trainerNum].party; + for(i = 0; i < _partyCount; i++) + returnThis += party[i].level; + break; + case 3: + party = gTrainers[trainerNum].party; + for(i = 0; i < _partyCount; i++) + returnThis += party[i * 2].level; + break; + } + return returnThis; +} + +u8 GetHigherOrLowerLevelTransitionForWild(void) +{ + u8 flashVar = sub_8081E90(); + u8 level = GetMonData(&gEnemyParty, MON_DATA_LEVEL); + + if ( level < (u8)GetSumOfPartyMonLevel(1) ) // is wild mon level than the player's mon level? + return gBattleTransitionTable_Wild[flashVar][0]; + else + return gBattleTransitionTable_Wild[flashVar][1]; // use a white fade in instead of normal transition. +} + +u8 sub_8082080(void) +{ + struct Trainer *trainer; + u8 trainerClass; + u8 partyCount; + u8 flashVar; + u8 level; + + if ( gTrainerBattleOpponent == 1024 ) // link battle? + return 16; + + trainer = gTrainers; + + if ( trainer[gTrainerBattleOpponent].trainerClass == 24 ) // league? + { + if ( gTrainerBattleOpponent == 261 ) + return 12; + if ( gTrainerBattleOpponent == 262 ) + return 13; + if ( gTrainerBattleOpponent == 263 ) + return 14; + if ( gTrainerBattleOpponent == 264 ) + return 15; + return 16; + } + + if ( trainer[gTrainerBattleOpponent].trainerClass == 32 ) // team leader? + return 16; + + if ( trainer[gTrainerBattleOpponent].doubleBattle == TRUE ) + partyCount = 2; // double battles always at least have 2 pokemon. + else + partyCount = 1; + + flashVar = sub_8081E90(); + level = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent, partyCount); + + if ( level < (u8)GetSumOfPartyMonLevel(partyCount) ) // is wild mon level than the player's mon level? + return gBattleTransitionTable_Trainer[flashVar][0]; + else + return gBattleTransitionTable_Trainer[flashVar][1]; +} + +s8 sub_8082138(void) +{ + u8 monData = GetMonData(&gEnemyParty, MON_DATA_LEVEL); + + if ( monData < (u8)GetSumOfPartyMonLevel(1) ) + return 4; + else + return 3; +} + +void sub_8082168(void) +{ + SetMainCallback2(CB2_ChooseStarter); + gMain.field_8 = sub_8082188; +} + +void sub_8082188(void) +{ + u16 starterPoke; + + *GetVarPointer(0x4023) = gScriptResult; + starterPoke = GetStarterPokemon(gScriptResult); + ScriptGiveMon(starterPoke, 5, 0, 0, 0, 0); + ResetTasks(); + sub_80408BC(); + SetMainCallback2(sub_80821D8); + sub_811AAD8(0); +} + +void sub_80821D8(void) +{ + UpdatePaletteFade(); + RunTasks(); + + if ( sub_811AAE8() == 1 ) + { + gUnknown_020239F8 = 16; + gMain.field_8 = sub_8082228; + SetMainCallback2(sub_800E7C4); + prev_quest_postbuffer_cursor_backup_reset(); + overworld_poison_timer_set(); + sav12_xor_increment(7); + sav12_xor_increment(8); + } +} + +void sub_8082228(void) +{ + sav1_reset_battle_music_maybe(); + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +u32 TrainerBattleLoadArg32(u8 *ptr) +{ + return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); +} + +u16 TrainerBattleLoadArg16(u8 *ptr) +{ + return ptr[0] | (ptr[1] << 8); +} + +u8 TrainerBattleLoadArg8(u8 *ptr) +{ + return ptr[0]; +} + +u16 trainerflag_opponent(void) +{ + return gTrainerBattleOpponent + 1280; +} + +bool32 battle_exit_is_player_defeat(u32 a1) +{ + a1--; + + if (a1 > 6) + return 0; + + switch(a1) + { + case 1: + case 2: + return 1; + case 0: + case 3: + case 4: + case 5: + case 6: + return 0; + } +} + +u32 sub_80822BC(void) +{ + u32 *pointer; + + gTrainerBattleMode = 0; + gTrainerBattleOpponent = 0; + gTrainerMapObjectLocalId = 0; + gTrainerIntroSpeech = 0; + gTrainerDefeatSpeech = 0; + gTrainerVictorySpeech = 0; + gTrainerCannotBattleSpeech = 0; + gTrainerBattleScriptReturnAddress = 0; + pointer = &gTrainerBattleEndScript; + gTrainerBattleEndScript = 0; + return pointer; +} + +void TrainerBattleLoadArgs(struct TrainerBattleSpec *specs, u8 *data) +{ + while (1) + { + switch (specs->ptrType) + { + case 0: + *(u8 *)specs->ptr = TrainerBattleLoadArg8(data); + data++; + break; + case 1: + *(u16 *)specs->ptr = TrainerBattleLoadArg16(data); + data += 2; + break; + case 2: + *(u32 *)specs->ptr = TrainerBattleLoadArg32(data); + data += 4; + break; + case 3: + *(u8 *)specs->ptr = 0; + break; + case 4: + *(u16 *)specs->ptr = 0; + break; + case 5: + *(u32 *)specs->ptr = 0; + break; + case 6: + *(u8 **)specs->ptr = data; + return; + } + specs++; + } +} + +void battle_80801F0(void) +{ + if ( gTrainerMapObjectLocalId ) + { + gUnknown_0202E8DE = gTrainerMapObjectLocalId; + gSelectedMapObject = GetFieldObjectIdByLocalIdAndMap(gTrainerMapObjectLocalId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + } +} + +u8 *TrainerBattleConfigure(u8 *a1) +{ + sub_80822BC(); + gTrainerBattleMode = TrainerBattleLoadArg8(a1); + + switch (gTrainerBattleMode) + { + case 3: + TrainerBattleLoadArgs(gTrainerBattleSpecs_3, a1); + return gUnknown_0819F878; + case 4: + TrainerBattleLoadArgs(gTrainerBattleSpecs_2, a1); + battle_80801F0(); + return gUnknown_0819F840; + case 1: + case 2: + TrainerBattleLoadArgs(gTrainerBattleSpecs_1, a1); + battle_80801F0(); + return gUnknown_0819F818; + case 6: + case 8: + TrainerBattleLoadArgs(gTrainerBattleSpecs_4, a1); + battle_80801F0(); + return gUnknown_0819F840; + case 7: + TrainerBattleLoadArgs(gTrainerBattleSpecs_2, a1); + battle_80801F0(); + gTrainerBattleOpponent = sub_8082C4C(gTrainerBattleOpponent); + return gUnknown_0819F8AE; + case 5: + TrainerBattleLoadArgs(gTrainerBattleSpecs_0, a1); + battle_80801F0(); + gTrainerBattleOpponent = sub_8082C4C(gTrainerBattleOpponent); + return gUnknown_0819F887; + default: + TrainerBattleLoadArgs(gTrainerBattleSpecs_0, a1); + battle_80801F0(); + return gUnknown_0819F818; + } +} + +void TrainerWantsBattle(u8 ptr, int a2) +{ + gSelectedMapObject = ptr; + gUnknown_0202E8DE = gMapObjects[ptr].localId; + TrainerBattleConfigure(a2 + 1); + ScriptContext1_SetupScript(gUnknown_0819F80B); + ScriptContext2_Enable(); +} + +u8 GetTrainerFlagFromScriptPointer(int a1) +{ + u32 localFlag; + + localFlag = TrainerBattleLoadArg16(a1 + 2); + return FlagGet(localFlag + 0x500); +} + +void sub_8082524(void) +{ + struct MapObject *mapObject = &gMapObjects[gSelectedMapObject]; + + npc_set_running_behaviour_etc(mapObject, npc_running_behaviour_by_direction(mapObject->mapobj_unk_18)); +} + +u8 sub_8082558(void) +{ + return gTrainerBattleMode; +} + +u8 sub_8082564(void) +{ + return FlagGet(trainerflag_opponent()); +} + +void sub_808257C(void) +{ + FlagSet(trainerflag_opponent()); +} + +void unref_sub_8082590(void) +{ + FlagSet(trainerflag_opponent()); // duplicate function +} + +u8 trainer_flag_check(u16 flag) +{ + return FlagGet(flag + 0x500); +} + +void trainer_flag_set(u16 flag) +{ + FlagSet(flag + 0x500); +} + +void trainer_flag_clear(u16 flag) +{ + FlagReset(flag + 0x500); +} + +void sub_80825E4(void) +{ + gUnknown_020239F8 = 8; + gMain.field_8 = sub_808260C; + task_add_01_battle_start_with_music_and_stats(); + ScriptContext1_Stop(); +} + +void sub_808260C(void) +{ + if ( gTrainerBattleOpponent == 1024 ) + { + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); // link battle? + } + else if ( battle_exit_is_player_defeat(gUnknown_02024D26) == 1 ) + { + SetMainCallback2(c2_whiteout); + } + else + { + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); + sub_808257C(); + } +} + +void do_choose_name_or_words_screen(void) +{ + if ( gTrainerBattleOpponent == 1024 ) + { + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); // link battle? + } + else if ( battle_exit_is_player_defeat(gUnknown_02024D26) == 1 ) + { + SetMainCallback2(c2_whiteout); + } + else + { + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); + sub_808257C(); + sub_8082CB8(); + } +} + +void sub_80826B0(void) +{ + gUnknown_020239F8 = 8; + gMain.field_8 = do_choose_name_or_words_screen; + task_add_01_battle_start_with_music_and_stats(); + ScriptContext1_Stop(); +} + +void sub_80826D8(void) +{ + sub_808281C(); + ShowFieldMessage(); +} + +u32 sub_80826E8(void) +{ + u32 *result = gTrainerBattleScriptReturnAddress; + + if ( !gTrainerBattleScriptReturnAddress ) + return gUnknown_081C6C02; + + return result; +} + +u32 sub_8082700(void) +{ + u32 *result = gTrainerBattleEndScript; + + if ( !gTrainerBattleEndScript ) + return gUnknown_081C6C02; + + return result; +} + +void sub_8082718() +{ + ShowFieldMessage(sub_8082880()); +} + +void sub_8082728(void) // sets the music to be played after a battle +{ + u16 music; + u8 val; + + if ( gTrainerBattleMode != 1 && gTrainerBattleMode != 8 ) + { + val = sub_803FC58(gTrainerBattleOpponent); + if ( val > 13 ) + music = 423; + else + { + switch ( val ) + { + // TODO: Replace with music constants. + case 0: + music = 380; + break; + case 1: + music = 407; + break; + case 2: + music = 379; + break; + case 4: + music = 416; + break; + case 5: + music = 417; + break; + case 6: + music = 419; + break; + case 7: + music = 441; + break; + case 8: + music = 385; + break; + case 9: + music = 449; + break; + case 10: + music = 450; + break; + case 11: + music = 451; + break; + case 12: + music = 453; + break; + case 13: + music = 397; + break; + default: + music = 423; + } + } + PlayNewMapMusic(music); + } +} + +u32 ReturnEmptyStringIfNull(u32 *result) +{ + if ( result ) + return result; + else + return gOtherText_CancelWithTerminator; +} + +u32 sub_808281C(void) +{ + return ReturnEmptyStringIfNull(gTrainerIntroSpeech); +} + +u8 *sub_8082830(void) +{ + u32 *var; + + if ( gTrainerBattleOpponent == 1024 ) + var = sub_80BCCE8(); + else + var = gTrainerDefeatSpeech; + + StringExpandPlaceholders(gStringVar4, ReturnEmptyStringIfNull(var)); + return gStringVar4; +} + +u32 unref_sub_808286C(void) +{ + return ReturnEmptyStringIfNull(gTrainerVictorySpeech); +} + +u32 sub_8082880(void) +{ + return ReturnEmptyStringIfNull(gTrainerCannotBattleSpeech); +} + +s32 sub_8082894(u16 *ptr, u16 var) +{ + s32 i; + + for(i = 0; i <= 55; i++) + { + if(ptr[i * 8] == var) + return i; + } + return -1; +} + +s32 sub_80828B8(struct MyStruct *a, u16 b) +{ + s32 i; + + for(i = 0; i < 56; i++) + { + s32 j; + + for(j = 0; j < 5 && a[i].arr[j] != 0; j++) + { + if(a[i].arr[j] == b) + return i; + } + } + return -1; +} + +u32 sub_80828FC(struct MyStruct *a, u16 b, u16 c) +{ + s32 i; + s32 ret = 0; + + for (i = 0; i < 56; i++) + { + if (a[i].arr[5] == b && a[i].arr[6] == c) + { + if (gSaveBlock1.trainerRematches[i] != 0) + { + ret = 1; + continue; + } + if (trainer_flag_check(a[i].arr[0]) == TRUE && (Random() % 100) <= 0x1E) + { + ret = 1; + + while(ret <= 4 && a[i].arr[ret] != 0 && trainer_flag_check(a[i].arr[ret])) + ret++; + gSaveBlock1.trainerRematches[i] = ret; + ret = 1; + } + } + } + return ret; +} + +s32 sub_80829A8(struct MyStruct *a1, u16 a2, u16 a3) +{ + s32 i; + + for (i = 0; i <= 55; i++) + { + if (a1[i].arr[5] == a2 && a1[i].arr[6] == a3 && gSaveBlock1.trainerRematches[i]) + return 1; + } + return 0; +} + +s32 sub_80829E8(struct MyStruct *a1, u16 a2, u16 a3) +{ + s32 i; + + for (i = 0; i <= 55; i++) + { + if (a1[i].arr[5] == a2 && a1[i].arr[6] == a3 ) + return 1; + } + return 0; +} + +bool8 sub_8082A18(u16 *a1, u16 a2) +{ + s32 v2 = sub_8082894(a1, a2); + + if (v2 != -1 && v2 <= 99 && gSaveBlock1.trainerRematches[v2]) + return TRUE; + else + return FALSE; +} + +bool8 sub_8082A54(u16 *a1, u16 a2) +{ + s32 v2 = sub_80828B8(a1, a2); + + if (v2 != -1 && v2 <= 99 && gSaveBlock1.trainerRematches[v2]) + return TRUE; + else + return FALSE; +} + +__attribute__((naked)) +u16 sub_8082A90(struct MyStruct *a1, u16 a2) +{ + // TODO: decompile. + asm("push {r4-r7,lr}\n\ + add r4, r0, #0\n\ + lsl r1, #16\n\ + lsr r1, #16\n\ + bl sub_8082894\n\ + add r1, r0, #0\n\ + mov r0, #0x1\n\ + neg r0, r0\n\ + cmp r1, r0\n\ + bne _08082AB8\n\ + mov r0, #0\n\ + b _08082ADE\n\ +_08082AAA:\n\ + sub r0, r6, #0x1\n\ + lsl r0, #1\n\ + add r0, r7, r0\n\ + ldrh r0, [r0]\n\ + b _08082ADE\n\ +_08082AB4:\n\ + ldrh r0, [r5]\n\ + b _08082ADE\n\ +_08082AB8:\n\ + lsl r0, r1, #4\n\ + add r7, r4, r0\n\ + mov r6, #0x1\n\ + add r5, r7, #0x2\n\ + add r4, r5, #0\n\ +_08082AC2:\n\ + ldrh r0, [r4]\n\ + cmp r0, #0\n\ + beq _08082AAA\n\ + bl trainer_flag_check\n\ + lsl r0, #24\n\ + cmp r0, #0\n\ + beq _08082AB4\n\ + add r4, #0x2\n\ + add r5, #0x2\n\ + add r6, #0x1\n\ + cmp r6, #0x4\n\ + ble _08082AC2\n\ + ldrh r0, [r7, #0x8]\n\ +_08082ADE:\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n"); +} + +void sub_8082AE4(u16 *a1, u16 a2) +{ + s32 var = sub_80828B8(a1, a2); + + if ( var != -1 ) + gSaveBlock1.trainerRematches[var] = 0; +} + +bool8 sub_8082B10(struct MyStruct *a1, u16 a2) +{ + s32 var = sub_8082894(a1, a2); + + if ( var != -1 && trainer_flag_check(a1[var].arr[1]) ) + return TRUE; + else + return FALSE; +} + +bool32 sub_8082B44(void) +{ + int j = 0; + u32 i = 0; + + for(i = 0; i < 8; ++i) + { + if ( FlagGet(gUnknown_0839B1F0[i]) == 1 && ++j > 4 ) + return 1; + } + return 0; +} + +void sub_8082B78(void) +{ + if (sub_8082B44()) + { + if (gSaveBlock1.trainerRematchStepCounter >= 255) + gSaveBlock1.trainerRematchStepCounter = 255; + else + gSaveBlock1.trainerRematchStepCounter++; + } +} + +bool32 sub_8082BA4(void) +{ + if (sub_8082B44() && gSaveBlock1.trainerRematchStepCounter > 0xFE) + return TRUE; + else + return FALSE; +} + +void sub_8082BD0(u16 a1, u16 a2) +{ + if ( sub_8082BA4() && sub_80828FC(gTrainerEyeTrainers, a1, a2) == 1 ) + gSaveBlock1.trainerRematchStepCounter = 0; +} + +s32 sub_8082C0C(u16 a1, u16 a2) +{ + return sub_80829A8(gTrainerEyeTrainers, a1, a2); +} + +s32 unref_sub_8082C2C(u16 a1, u16 a2) +{ + return sub_80829E8(gTrainerEyeTrainers, a1, a2); +} + +u16 sub_8082C4C(u16 a1) +{ + return sub_8082A90(gTrainerEyeTrainers, a1); +} + +s32 sub_8082C68(void) +{ + if ( sub_8082A18(gTrainerEyeTrainers, gTrainerBattleOpponent) ) + return 1; + else + return sub_8082B10(gTrainerEyeTrainers, gTrainerBattleOpponent); +} + +u8 sub_8082C9C(void) +{ + return sub_8082A54(gTrainerEyeTrainers, gTrainerBattleOpponent); +} + +void sub_8082CB8(void) +{ + sub_8082AE4(gTrainerEyeTrainers, gTrainerBattleOpponent); + sub_808257C(); +} + +/* + thumb_func_start sub_8082A90 +sub_8082A90: @ 8082A90 + push {r4-r7,lr} + adds r4, r0, 0 + lsls r1, 16 + lsrs r1, 16 + bl sub_8082894 + adds r1, r0, 0 + movs r0, 0x1 + negs r0, r0 + cmp r1, r0 + bne _08082AB8 + movs r0, 0 + b _08082ADE +_08082AAA: + subs r0, r6, 0x1 + lsls r0, 1 + adds r0, r7, r0 + ldrh r0, [r0] + b _08082ADE +_08082AB4: + ldrh r0, [r5] + b _08082ADE +_08082AB8: + lsls r0, r1, 4 + adds r7, r4, r0 + movs r6, 0x1 + adds r5, r7, 0x2 + adds r4, r5, 0 +_08082AC2: + ldrh r0, [r4] + cmp r0, 0 + beq _08082AAA + bl trainer_flag_check + lsls r0, 24 + cmp r0, 0 + beq _08082AB4 + adds r4, 0x2 + adds r5, 0x2 + adds r6, 0x1 + cmp r6, 0x4 + ble _08082AC2 + ldrh r0, [r7, 0x8] +_08082ADE: + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_8082A90 +*/
\ No newline at end of file diff --git a/src/wild_encounter.c b/src/wild_encounter.c index c81036587..b2d662e13 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -33,7 +33,7 @@ extern u8 TestPlayerAvatarFlags(u8); extern u8 MetatileBehavior_IsLandWildEncounter(u8); extern u8 sub_81344CC(void); extern u8 MetatileBehavior_IsWaterWildEncounter(u8); -extern void sub_8081A00(void); +extern void CheckForSafariZoneAndProceed(void); extern u8 MetatileBehavior_IsBridge(u8); extern void PlayerGetDestCoords(u16 *x, u16 *y); extern void sub_80BEA50(u16); @@ -501,7 +501,7 @@ bool8 StandardWildEncounter(u16 a, u16 b) { if(DoMassOutbreakEncounterTest() == TRUE && SetUpMassOutbreakEncounter(1) == TRUE) { - sub_8081A00(); + CheckForSafariZoneAndProceed(); return 1; } if (GenerateWildMon(gWildMonHeaders[unk].landMonsInfo, 0, 1) == 1) @@ -540,7 +540,7 @@ bool8 StandardWildEncounter(u16 a, u16 b) { label: //_0808527A - sub_8081A00(); + CheckForSafariZoneAndProceed(); return 1; } } @@ -569,7 +569,7 @@ void RockSmashWildEncounter(void) else if(DoWildEncounterTest(wildPokemonInfo->encounterRate, 1) == TRUE && GenerateWildMon(wildPokemonInfo, 2, 1) == 1) { - sub_8081A00(); + CheckForSafariZoneAndProceed(); gScriptResult = 1; return; } @@ -609,7 +609,7 @@ u8 SweetScentWildEncounter(void) //_08085374 GenerateWildMon(wildPokemonInfo, 0, 0); //_080853D2 - sub_8081A00(); + CheckForSafariZoneAndProceed(); return 1; } //_08085380 @@ -630,7 +630,7 @@ u8 SweetScentWildEncounter(void) else //_080853C8 GenerateWildMon(wildPokemonInfo, 1, 0); - sub_8081A00(); + CheckForSafariZoneAndProceed(); return 1; } } @@ -667,7 +667,7 @@ void FishingWildEncounter(u8 rod) } sav12_xor_increment(12); sub_80BEA50(species); - sub_8081A00(); + CheckForSafariZoneAndProceed(); } u16 GetLocalWildMon(bool8 *isWaterMon) |