diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-10-21 03:07:59 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-10-21 03:08:10 +0800 |
commit | b0400ef6ba6e6cf49ad2bdc19a29eb2abef26701 (patch) | |
tree | 60276257dd8cccfa1278bb0302cf948ae8ab79fa | |
parent | e48725d9b54ed9f71f65c3ba5577cffa8f4887d1 (diff) |
battle_setup funcs
41 files changed, 1105 insertions, 2346 deletions
diff --git a/asm/battle_anim_effects_2.s b/asm/battle_anim_effects_2.s index 67ac6a13e..4fc69864c 100644 --- a/asm/battle_anim_effects_2.s +++ b/asm/battle_anim_effects_2.s @@ -3902,7 +3902,7 @@ _080A8C60: subs r0, r4 strh r0, [r1] _080A8C6A: - ldr r1, _080A8C80 @ =sub_8075D9C + ldr r1, _080A8C80 @ =AnimSparklingParticle str r1, [r6, 0x1C] adds r0, r6, 0 bl _call_via_r1 @@ -3912,7 +3912,7 @@ _080A8C6A: bx r0 .align 2, 0 _080A8C7C: .4byte gBattleAnimArgs -_080A8C80: .4byte sub_8075D9C +_080A8C80: .4byte AnimSparklingParticle thumb_func_end sub_80A8BC4 thumb_func_start sub_80A8C84 @@ -4233,7 +4233,7 @@ _080A8F0E: adds r0, r4, 0 movs r1, 0x1 bl StartSpriteAffineAnim - ldr r1, _080A8F34 @ =sub_8075D9C + ldr r1, _080A8F34 @ =AnimSparklingParticle str r1, [r4, 0x1C] adds r0, r4, 0 bl _call_via_r1 @@ -4244,7 +4244,7 @@ _080A8F0E: _080A8F28: .4byte 0x000027db _080A8F2C: .4byte 0x01010000 _080A8F30: .4byte gBattleAnimArgs -_080A8F34: .4byte sub_8075D9C +_080A8F34: .4byte AnimSparklingParticle thumb_func_end sub_80A8EE8 thumb_func_start sub_80A8F38 diff --git a/asm/battle_setup.s b/asm/battle_setup.s deleted file mode 100644 index a43be8703..000000000 --- a/asm/battle_setup.s +++ /dev/null @@ -1,2180 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Task_BattleStart -Task_BattleStart: @ 807F620 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0807F640 @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0807F644 - cmp r0, 0x1 - beq _0807F65E - b _0807F686 - .align 2, 0 -_0807F640: .4byte gTasks+0x8 -_0807F644: - bl FldEffPoison_IsActive - cmp r0, 0 - bne _0807F686 - bl HelpSystem_Disable - ldrb r0, [r4, 0x2] - bl BT_StartOnField - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0807F686 -_0807F65E: - bl BT_IsDone - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0807F686 - bl HelpSystem_Enable - bl CleanupOverworldWindowsAndTilemaps - ldr r0, _0807F68C @ =CB2_InitBattle - bl SetMainCallback2 - bl RestartWildEncounterImmunitySteps - bl ClearPoisonStepCounter - adds r0, r5, 0 - bl DestroyTask -_0807F686: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807F68C: .4byte CB2_InitBattle - thumb_func_end Task_BattleStart - - thumb_func_start CreateBattleStartTask -CreateBattleStartTask: @ 807F690 - 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, _0807F6C4 @ =Task_BattleStart - movs r1, 0x1 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0807F6C8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xA] - adds r0, r5, 0 - bl PlayMapChosenOrBattleBGM - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807F6C4: .4byte Task_BattleStart -_0807F6C8: .4byte gTasks - thumb_func_end CreateBattleStartTask - - thumb_func_start CheckSilphScopeInPokemonTower -CheckSilphScopeInPokemonTower: @ 807F6CC - push {lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - lsrs r1, 16 - cmp r0, 0x1 - bne _0807F6FC - adds r0, r1, 0 - subs r0, 0x58 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x6 - bhi _0807F6FC - ldr r0, _0807F6F8 @ =0x00000167 - movs r1, 0x1 - bl CheckBagHasItem - lsls r0, 24 - cmp r0, 0 - bne _0807F6FC - movs r0, 0x1 - b _0807F6FE - .align 2, 0 -_0807F6F8: .4byte 0x00000167 -_0807F6FC: - movs r0, 0 -_0807F6FE: - pop {r1} - bx r1 - thumb_func_end CheckSilphScopeInPokemonTower - - thumb_func_start BattleSetup_StartWildBattle -BattleSetup_StartWildBattle: @ 807F704 - push {lr} - bl GetSafariZoneFlag - cmp r0, 0 - beq _0807F714 - bl BattleSetup_StartSafariBattle - b _0807F744 -_0807F714: - ldr r0, _0807F73C @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0x4 - ldrsb r0, [r1, r0] - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r1, 0x5] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl CheckSilphScopeInPokemonTower - lsls r0, 24 - cmp r0, 0 - beq _0807F740 - bl BattleSetup_StartGhostBattle - b _0807F744 - .align 2, 0 -_0807F73C: .4byte gSaveBlock1Ptr -_0807F740: - bl BattleSetup_StandardWildBattle -_0807F744: - pop {r0} - bx r0 - thumb_func_end BattleSetup_StartWildBattle - - thumb_func_start BattleSetup_StandardWildBattle -BattleSetup_StandardWildBattle: @ 807F748 - push {lr} - bl ScriptContext2_Enable - bl FreezeEventObjects - bl sub_805C780 - ldr r1, _0807F780 @ =gMain - ldr r0, _0807F784 @ =CB2_EndWildBattle - str r0, [r1, 0x8] - ldr r1, _0807F788 @ =gBattleTypeFlags - movs r0, 0 - str r0, [r1] - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl CreateBattleStartTask - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - .align 2, 0 -_0807F780: .4byte gMain -_0807F784: .4byte CB2_EndWildBattle -_0807F788: .4byte gBattleTypeFlags - thumb_func_end BattleSetup_StandardWildBattle - - thumb_func_start BattleSetup_StartRoamerBattle -BattleSetup_StartRoamerBattle: @ 807F78C - push {lr} - bl ScriptContext2_Enable - bl FreezeEventObjects - bl sub_805C780 - ldr r1, _0807F7C8 @ =gMain - ldr r0, _0807F7CC @ =CB2_EndWildBattle - str r0, [r1, 0x8] - ldr r1, _0807F7D0 @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 3 - str r0, [r1] - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0807F7D4 @ =0x00000155 - bl CreateBattleStartTask - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - .align 2, 0 -_0807F7C8: .4byte gMain -_0807F7CC: .4byte CB2_EndWildBattle -_0807F7D0: .4byte gBattleTypeFlags -_0807F7D4: .4byte 0x00000155 - thumb_func_end BattleSetup_StartRoamerBattle - - thumb_func_start BattleSetup_StartSafariBattle -BattleSetup_StartSafariBattle: @ 807F7D8 - push {lr} - bl ScriptContext2_Enable - bl FreezeEventObjects - bl sub_805C780 - ldr r1, _0807F804 @ =gMain - ldr r0, _0807F808 @ =CB2_EndSafariBattle - str r0, [r1, 0x8] - ldr r1, _0807F80C @ =gBattleTypeFlags - movs r0, 0x80 - str r0, [r1] - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl CreateBattleStartTask - pop {r0} - bx r0 - .align 2, 0 -_0807F804: .4byte gMain -_0807F808: .4byte CB2_EndSafariBattle -_0807F80C: .4byte gBattleTypeFlags - thumb_func_end BattleSetup_StartSafariBattle - - thumb_func_start BattleSetup_StartGhostBattle -BattleSetup_StartGhostBattle: @ 807F810 - push {lr} - bl ScriptContext2_Enable - bl FreezeEventObjects - bl sub_805C780 - ldr r1, _0807F854 @ =gMain - ldr r0, _0807F858 @ =CB2_EndWildBattle - str r0, [r1, 0x8] - ldr r1, _0807F85C @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 8 - str r0, [r1] - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl CreateBattleStartTask - ldr r0, _0807F860 @ =gEnemyParty - ldr r2, _0807F864 @ =gUnknown_841D148 - movs r1, 0x2 - bl SetMonData - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - .align 2, 0 -_0807F854: .4byte gMain -_0807F858: .4byte CB2_EndWildBattle -_0807F85C: .4byte gBattleTypeFlags -_0807F860: .4byte gEnemyParty -_0807F864: .4byte gUnknown_841D148 - thumb_func_end BattleSetup_StartGhostBattle - - thumb_func_start sub_807F868 -sub_807F868: @ 807F868 - push {lr} - bl GetTrainerBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl CreateBattleStartTask - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x9 - bl IncrementGameStat - pop {r0} - bx r0 - thumb_func_end sub_807F868 - - thumb_func_start BattleSetup_StartOldManTutorialBattle -BattleSetup_StartOldManTutorialBattle: @ 807F888 - push {lr} - ldr r0, _0807F8B4 @ =gEnemyParty - movs r1, 0xD - movs r2, 0x5 - bl CreateMaleMon - bl ScriptContext2_Enable - ldr r1, _0807F8B8 @ =gMain - ldr r0, _0807F8BC @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - str r0, [r1, 0x8] - ldr r1, _0807F8C0 @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 2 - str r0, [r1] - movs r0, 0x8 - movs r1, 0 - bl CreateBattleStartTask - pop {r0} - bx r0 - .align 2, 0 -_0807F8B4: .4byte gEnemyParty -_0807F8B8: .4byte gMain -_0807F8BC: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic -_0807F8C0: .4byte gBattleTypeFlags - thumb_func_end BattleSetup_StartOldManTutorialBattle - - thumb_func_start BattleSetup_StartScriptedWildBattle -BattleSetup_StartScriptedWildBattle: @ 807F8C4 - push {lr} - bl ScriptContext2_Enable - ldr r1, _0807F8F8 @ =gMain - ldr r0, _0807F8FC @ =CB2_EndScriptedWildBattle - str r0, [r1, 0x8] - ldr r1, _0807F900 @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 10 - str r0, [r1] - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl CreateBattleStartTask - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - .align 2, 0 -_0807F8F8: .4byte gMain -_0807F8FC: .4byte CB2_EndScriptedWildBattle -_0807F900: .4byte gBattleTypeFlags - thumb_func_end BattleSetup_StartScriptedWildBattle - - thumb_func_start BattleSetup_StartMarowakBattle -BattleSetup_StartMarowakBattle: @ 807F904 - push {lr} - sub sp, 0xC - bl ScriptContext2_Enable - ldr r1, _0807F944 @ =gMain - ldr r0, _0807F948 @ =CB2_EndMarowakBattle - str r0, [r1, 0x8] - ldr r0, _0807F94C @ =0x00000167 - movs r1, 0x1 - bl CheckBagHasItem - lsls r0, 24 - cmp r0, 0 - beq _0807F958 - ldr r1, _0807F950 @ =gBattleTypeFlags - movs r0, 0xA0 - lsls r0, 8 - str r0, [r1] - ldr r0, _0807F954 @ =gEnemyParty - movs r1, 0xFE - str r1, [sp] - movs r1, 0xC - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x69 - movs r2, 0x1E - movs r3, 0x1F - bl CreateMonWithGenderNatureLetter - b _0807F960 - .align 2, 0 -_0807F944: .4byte gMain -_0807F948: .4byte CB2_EndMarowakBattle -_0807F94C: .4byte 0x00000167 -_0807F950: .4byte gBattleTypeFlags -_0807F954: .4byte gEnemyParty -_0807F958: - ldr r1, _0807F98C @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 8 - str r0, [r1] -_0807F960: - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl CreateBattleStartTask - ldr r0, _0807F990 @ =gEnemyParty - ldr r2, _0807F994 @ =gUnknown_841D148 - movs r1, 0x2 - bl SetMonData - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - add sp, 0xC - pop {r0} - bx r0 - .align 2, 0 -_0807F98C: .4byte gBattleTypeFlags -_0807F990: .4byte gEnemyParty -_0807F994: .4byte gUnknown_841D148 - thumb_func_end BattleSetup_StartMarowakBattle - - thumb_func_start sub_807F998 -sub_807F998: @ 807F998 - push {lr} - bl ScriptContext2_Enable - ldr r1, _0807F9CC @ =gMain - ldr r0, _0807F9D0 @ =CB2_EndScriptedWildBattle - str r0, [r1, 0x8] - ldr r1, _0807F9D4 @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 6 - str r0, [r1] - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl CreateBattleStartTask - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - .align 2, 0 -_0807F9CC: .4byte gMain -_0807F9D0: .4byte CB2_EndScriptedWildBattle -_0807F9D4: .4byte gBattleTypeFlags - thumb_func_end sub_807F998 - - thumb_func_start BattleSetup_StartLegendaryBattle -BattleSetup_StartLegendaryBattle: @ 807F9D8 - push {lr} - bl ScriptContext2_Enable - ldr r1, _0807FA0C @ =gMain - ldr r0, _0807FA10 @ =CB2_EndScriptedWildBattle - str r0, [r1, 0x8] - ldr r1, _0807FA14 @ =gBattleTypeFlags - movs r0, 0x84 - lsls r0, 11 - str r0, [r1] - ldr r0, _0807FA18 @ =gEnemyParty - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - adds r1, r0, 0 - cmp r0, 0x96 - beq _0807FA2E - cmp r0, 0x96 - bgt _0807FA1C - cmp r0, 0x92 - bgt _0807FA4C - cmp r0, 0x90 - blt _0807FA4C - b _0807FA3C - .align 2, 0 -_0807FA0C: .4byte gMain -_0807FA10: .4byte CB2_EndScriptedWildBattle -_0807FA14: .4byte gBattleTypeFlags -_0807FA18: .4byte gEnemyParty -_0807FA1C: - cmp r1, 0xF9 - blt _0807FA4C - cmp r1, 0xFA - ble _0807FA3C - movs r0, 0xCD - lsls r0, 1 - cmp r1, r0 - beq _0807FA34 - b _0807FA4C -_0807FA2E: - movs r1, 0xAA - lsls r1, 1 - b _0807FA3E -_0807FA34: - ldr r1, _0807FA38 @ =0x00000153 - b _0807FA3E - .align 2, 0 -_0807FA38: .4byte 0x00000153 -_0807FA3C: - ldr r1, _0807FA48 @ =0x00000155 -_0807FA3E: - movs r0, 0 - bl CreateBattleStartTask - b _0807FA56 - .align 2, 0 -_0807FA48: .4byte 0x00000155 -_0807FA4C: - movs r1, 0x85 - lsls r1, 1 - movs r0, 0 - bl CreateBattleStartTask -_0807FA56: - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - thumb_func_end BattleSetup_StartLegendaryBattle - - thumb_func_start BattleSetup_StartIceCaveBattle -BattleSetup_StartIceCaveBattle: @ 807FA68 - push {lr} - bl ScriptContext2_Enable - ldr r1, _0807FA90 @ =gMain - ldr r0, _0807FA94 @ =CB2_EndScriptedWildBattle - str r0, [r1, 0x8] - ldr r1, _0807FA98 @ =gBattleTypeFlags - movs r0, 0xC0 - lsls r0, 6 - str r0, [r1] - ldr r0, _0807FA9C @ =gGameVersion - ldrb r0, [r0] - cmp r0, 0x4 - bne _0807FAA0 - movs r1, 0x85 - lsls r1, 1 - movs r0, 0xB - bl CreateBattleStartTask - b _0807FAAA - .align 2, 0 -_0807FA90: .4byte gMain -_0807FA94: .4byte CB2_EndScriptedWildBattle -_0807FA98: .4byte gBattleTypeFlags -_0807FA9C: .4byte gGameVersion -_0807FAA0: - movs r1, 0x85 - lsls r1, 1 - movs r0, 0xB - bl CreateBattleStartTask -_0807FAAA: - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - thumb_func_end BattleSetup_StartIceCaveBattle - - thumb_func_start sub_807FABC -sub_807FABC: @ 807FABC - push {lr} - bl ScriptContext2_Enable - ldr r1, _0807FAEC @ =gMain - ldr r0, _0807FAF0 @ =CB2_EndScriptedWildBattle - str r0, [r1, 0x8] - ldr r1, _0807FAF4 @ =gBattleTypeFlags - movs r0, 0xC0 - lsls r0, 7 - str r0, [r1] - movs r1, 0x85 - lsls r1, 1 - movs r0, 0 - bl CreateBattleStartTask - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - .align 2, 0 -_0807FAEC: .4byte gMain -_0807FAF0: .4byte CB2_EndScriptedWildBattle -_0807FAF4: .4byte gBattleTypeFlags - thumb_func_end sub_807FABC - - thumb_func_start sub_807FAF8 -sub_807FAF8: @ 807FAF8 - push {lr} - bl LoadPlayerParty - bl CB2_EndWildBattle - pop {r0} - bx r0 - thumb_func_end sub_807FAF8 - - thumb_func_start sub_807FB08 -sub_807FB08: @ 807FB08 - push {lr} - bl ScriptContext2_Enable - bl FreezeEventObjects - bl sub_805C780 - ldr r1, _0807FB38 @ =gMain - ldr r0, _0807FB3C @ =sub_807FAF8 - str r0, [r1, 0x8] - bl SavePlayerParty - bl sub_8159F40 - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl CreateBattleStartTask - pop {r0} - bx r0 - .align 2, 0 -_0807FB38: .4byte gMain -_0807FB3C: .4byte sub_807FAF8 - thumb_func_end sub_807FB08 - - thumb_func_start CB2_EndWildBattle -CB2_EndWildBattle: @ 807FB40 - push {lr} - sub sp, 0x4 - mov r1, sp - movs r0, 0 - strh r0, [r1] - movs r1, 0xA0 - lsls r1, 19 - ldr r2, _0807FB74 @ =0x01000100 - mov r0, sp - bl CpuSet - movs r0, 0 - movs r1, 0x80 - bl ResetOamRange - ldr r0, _0807FB78 @ =gBattleOutcome - ldrb r0, [r0] - bl IsPlayerDefeated - cmp r0, 0x1 - bne _0807FB80 - ldr r0, _0807FB7C @ =c2_whiteout - bl SetMainCallback2 - b _0807FB8C - .align 2, 0 -_0807FB74: .4byte 0x01000100 -_0807FB78: .4byte gBattleOutcome -_0807FB7C: .4byte c2_whiteout -_0807FB80: - ldr r0, _0807FB94 @ =CB2_ReturnToField - bl SetMainCallback2 - ldr r1, _0807FB98 @ =gFieldCallback - ldr r0, _0807FB9C @ =sub_807E3EC - str r0, [r1] -_0807FB8C: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0807FB94: .4byte CB2_ReturnToField -_0807FB98: .4byte gFieldCallback -_0807FB9C: .4byte sub_807E3EC - thumb_func_end CB2_EndWildBattle - - thumb_func_start CB2_EndScriptedWildBattle -CB2_EndScriptedWildBattle: @ 807FBA0 - push {lr} - sub sp, 0x4 - mov r1, sp - movs r0, 0 - strh r0, [r1] - movs r1, 0xA0 - lsls r1, 19 - ldr r2, _0807FBD4 @ =0x01000100 - mov r0, sp - bl CpuSet - movs r0, 0 - movs r1, 0x80 - bl ResetOamRange - ldr r0, _0807FBD8 @ =gBattleOutcome - ldrb r0, [r0] - bl IsPlayerDefeated - cmp r0, 0x1 - bne _0807FBE0 - ldr r0, _0807FBDC @ =c2_whiteout - bl SetMainCallback2 - b _0807FBE6 - .align 2, 0 -_0807FBD4: .4byte 0x01000100 -_0807FBD8: .4byte gBattleOutcome -_0807FBDC: .4byte c2_whiteout -_0807FBE0: - ldr r0, _0807FBEC @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 -_0807FBE6: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0807FBEC: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end CB2_EndScriptedWildBattle - - thumb_func_start CB2_EndMarowakBattle -CB2_EndMarowakBattle: @ 807FBF0 - push {r4,lr} - sub sp, 0x4 - mov r1, sp - movs r0, 0 - strh r0, [r1] - movs r1, 0xA0 - lsls r1, 19 - ldr r2, _0807FC24 @ =0x01000100 - mov r0, sp - bl CpuSet - movs r0, 0 - movs r1, 0x80 - bl ResetOamRange - ldr r4, _0807FC28 @ =gBattleOutcome - ldrb r0, [r4] - bl IsPlayerDefeated - adds r1, r0, 0 - cmp r1, 0 - beq _0807FC30 - ldr r0, _0807FC2C @ =c2_whiteout - bl SetMainCallback2 - b _0807FC4C - .align 2, 0 -_0807FC24: .4byte 0x01000100 -_0807FC28: .4byte gBattleOutcome -_0807FC2C: .4byte c2_whiteout -_0807FC30: - ldrb r0, [r4] - cmp r0, 0x1 - bne _0807FC40 - ldr r0, _0807FC3C @ =gSpecialVar_Result - strh r1, [r0] - b _0807FC46 - .align 2, 0 -_0807FC3C: .4byte gSpecialVar_Result -_0807FC40: - ldr r1, _0807FC54 @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] -_0807FC46: - ldr r0, _0807FC58 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 -_0807FC4C: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0807FC54: .4byte gSpecialVar_Result -_0807FC58: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end CB2_EndMarowakBattle - - thumb_func_start BattleSetup_GetTerrainId -BattleSetup_GetTerrainId: @ 807FC5C - 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_2 - lsls r0, 24 - cmp r0, 0 - beq _0807FC92 - movs r0, 0 - b _0807FD88 -_0807FC92: - adds r0, r4, 0 - bl MetatileBehavior_ReturnFalse_3 - lsls r0, 24 - cmp r0, 0 - beq _0807FCA2 - movs r0, 0x1 - b _0807FD88 -_0807FCA2: - adds r0, r4, 0 - bl MetatileBehavior_IsMB21OrWaterfallBottom - lsls r0, 24 - cmp r0, 0 - beq _0807FCB2 - movs r0, 0x2 - b _0807FD88 -_0807FCB2: - ldr r0, _0807FCC8 @ =gMapHeader - ldrb r0, [r0, 0x17] - subs r0, 0x1 - cmp r0, 0x8 - bhi _0807FD2C - lsls r0, 2 - ldr r1, _0807FCCC @ =_0807FCD0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807FCC8: .4byte gMapHeader -_0807FCCC: .4byte _0807FCD0 - .align 2, 0 -_0807FCD0: - .4byte _0807FD2C - .4byte _0807FD2C - .4byte _0807FD2C - .4byte _0807FCF4 - .4byte _0807FD18 - .4byte _0807FD1C - .4byte _0807FD2C - .4byte _0807FD04 - .4byte _0807FD04 -_0807FCF4: - lsls r0, r5, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl MetatileBehavior_IsMB0B - lsls r0, 24 - cmp r0, 0 - beq _0807FD08 -_0807FD04: - movs r0, 0x8 - b _0807FD88 -_0807FD08: - adds r0, r4, 0 - bl MetatileBehavior_IsSurfable - lsls r0, 24 - cmp r0, 0 - bne _0807FD70 - movs r0, 0x7 - b _0807FD88 -_0807FD18: - movs r0, 0x3 - b _0807FD88 -_0807FD1C: - lsls r0, r5, 24 - lsrs r0, 24 - bl MetatileBehavior_IsSurfable - lsls r0, 24 - cmp r0, 0 - bne _0807FD82 - b _0807FD86 -_0807FD2C: - lsls r0, r5, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl MetatileBehavior_IsDeepSemiDeepOrSplashingWater - lsls r0, 24 - cmp r0, 0 - bne _0807FD82 - adds r0, r4, 0 - bl MetatileBehavior_IsSurfable - lsls r0, 24 - cmp r0, 0 - bne _0807FD70 - adds r0, r4, 0 - bl MetatileBehavior_IsMB0C - lsls r0, 24 - cmp r0, 0 - beq _0807FD58 - movs r0, 0x6 - b _0807FD88 -_0807FD58: - movs r0, 0x8 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - beq _0807FD86 - adds r0, r4, 0 - bl MetatileBehavior_ReturnFalse_7 - lsls r0, 24 - cmp r0, 0 - beq _0807FD74 -_0807FD70: - movs r0, 0x5 - b _0807FD88 -_0807FD74: - adds r0, r4, 0 - bl MetatileBehavior_ReturnFalse_6 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0807FD86 -_0807FD82: - movs r0, 0x4 - b _0807FD88 -_0807FD86: - movs r0, 0x9 -_0807FD88: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end BattleSetup_GetTerrainId - - thumb_func_start GetBattleTransitionTypeByMap -GetBattleTransitionTypeByMap: @ 807FD90 - 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 Overworld_GetFlashLevel - lsls r0, 24 - cmp r0, 0 - beq _0807FDC0 - movs r0, 0x2 - b _0807FDEA -_0807FDC0: - lsls r0, r4, 24 - lsrs r0, 24 - bl MetatileBehavior_IsSurfable - lsls r0, 24 - cmp r0, 0 - bne _0807FDE8 - ldr r0, _0807FDE0 @ =gMapHeader - ldrb r0, [r0, 0x17] - cmp r0, 0x4 - beq _0807FDE4 - cmp r0, 0x5 - beq _0807FDE8 - movs r0, 0 - b _0807FDEA - .align 2, 0 -_0807FDE0: .4byte gMapHeader -_0807FDE4: - movs r0, 0x1 - b _0807FDEA -_0807FDE8: - movs r0, 0x3 -_0807FDEA: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetBattleTransitionTypeByMap - - thumb_func_start GetSumOfPlayerPartyLevel -GetSumOfPlayerPartyLevel: @ 807FDF4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r7, 0 - movs r6, 0 -_0807FDFE: - movs r0, 0x64 - adds r1, r6, 0 - muls r1, r0 - ldr r0, _0807FE50 @ =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 _0807FE42 - cmp r1, 0 - beq _0807FE42 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _0807FE42 - 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 _0807FE48 -_0807FE42: - adds r6, 0x1 - cmp r6, 0x5 - ble _0807FDFE -_0807FE48: - adds r0, r7, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0807FE50: .4byte gPlayerParty - thumb_func_end GetSumOfPlayerPartyLevel - - thumb_func_start GetSumOfEnemyPartyLevel -GetSumOfEnemyPartyLevel: @ 807FE54 - push {r4,r5,lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 24 - lsrs r4, r1, 24 - ldr r5, _0807FE88 @ =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 _0807FE74 - adds r4, r0, 0 -_0807FE74: - movs r3, 0 - ldrb r0, [r2] - cmp r0, 0x1 - beq _0807FEBC - cmp r0, 0x1 - bgt _0807FE8C - cmp r0, 0 - beq _0807FE96 - b _0807FF2C - .align 2, 0 -_0807FE88: .4byte gTrainers -_0807FE8C: - cmp r0, 0x2 - beq _0807FEE2 - cmp r0, 0x3 - beq _0807FF08 - b _0807FF2C -_0807FE96: - adds r0, r5, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r1, [r0] - movs r2, 0 - cmp r3, r4 - bcs _0807FF2C -_0807FEA4: - 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 _0807FEA4 - b _0807FF2C -_0807FEBC: - adds r0, r5, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r1, [r0] - movs r2, 0 - cmp r3, r4 - bcs _0807FF2C -_0807FECA: - 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 _0807FECA - b _0807FF2C -_0807FEE2: - adds r0, r5, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r1, [r0] - movs r2, 0 - cmp r3, r4 - bcs _0807FF2C -_0807FEF0: - 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 _0807FEF0 - b _0807FF2C -_0807FF08: - adds r0, r5, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r1, [r0] - movs r2, 0 - cmp r3, r4 - bcs _0807FF2C -_0807FF16: - 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 _0807FF16 -_0807FF2C: - adds r0, r3, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end GetSumOfEnemyPartyLevel - - thumb_func_start GetWildBattleTransition -GetWildBattleTransition: @ 807FF34 - push {r4,r5,lr} - bl GetBattleTransitionTypeByMap - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0807FF64 @ =gEnemyParty - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - bl GetSumOfPlayerPartyLevel - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bcc _0807FF6C - ldr r0, _0807FF68 @ =sBattleTransitionTable_Wild - lsls r1, r5, 1 - adds r0, 0x1 - b _0807FF70 - .align 2, 0 -_0807FF64: .4byte gEnemyParty -_0807FF68: .4byte sBattleTransitionTable_Wild -_0807FF6C: - ldr r0, _0807FF7C @ =sBattleTransitionTable_Wild - lsls r1, r5, 1 -_0807FF70: - adds r1, r0 - ldrb r0, [r1] - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0807FF7C: .4byte sBattleTransitionTable_Wild - thumb_func_end GetWildBattleTransition - - thumb_func_start GetTrainerBattleTransition -GetTrainerBattleTransition: @ 807FF80 - push {r4-r6,lr} - ldr r4, _0807FFB4 @ =gTrainerBattleOpponent_A - ldrh r1, [r4] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - beq _0808000C - ldr r1, _0807FFB8 @ =gTrainers - ldrh r2, [r4] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - ldrb r1, [r0, 0x1] - cmp r1, 0x57 - bne _08080008 - adds r1, r2, 0 - movs r0, 0xCD - lsls r0, 1 - cmp r1, r0 - beq _0807FFB0 - ldr r0, _0807FFBC @ =0x000002df - cmp r1, r0 - bne _0807FFC0 -_0807FFB0: - movs r0, 0xC - b _08080054 - .align 2, 0 -_0807FFB4: .4byte gTrainerBattleOpponent_A -_0807FFB8: .4byte gTrainers -_0807FFBC: .4byte 0x000002df -_0807FFC0: - ldr r0, _0807FFD4 @ =0x0000019b - cmp r1, r0 - beq _0807FFCE - movs r0, 0xB8 - lsls r0, 2 - cmp r1, r0 - bne _0807FFD8 -_0807FFCE: - movs r0, 0xD - b _08080054 - .align 2, 0 -_0807FFD4: .4byte 0x0000019b -_0807FFD8: - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - beq _0807FFE6 - ldr r0, _0807FFEC @ =0x000002e1 - cmp r1, r0 - bne _0807FFF0 -_0807FFE6: - movs r0, 0xE - b _08080054 - .align 2, 0 -_0807FFEC: .4byte 0x000002e1 -_0807FFF0: - ldr r0, _08080000 @ =0x0000019d - cmp r1, r0 - beq _0807FFFC - ldr r0, _08080004 @ =0x000002e2 - cmp r1, r0 - bne _0808000C -_0807FFFC: - movs r0, 0xF - b _08080054 - .align 2, 0 -_08080000: .4byte 0x0000019d -_08080004: .4byte 0x000002e2 -_08080008: - cmp r1, 0x5A - bne _08080010 -_0808000C: - movs r0, 0x10 - b _08080054 -_08080010: - ldrb r0, [r0, 0x18] - movs r5, 0x1 - cmp r0, 0x1 - bne _0808001A - movs r5, 0x2 -_0808001A: - bl GetBattleTransitionTypeByMap - lsls r0, 24 - lsrs r6, r0, 24 - ldrh r0, [r4] - adds r1, r5, 0 - bl GetSumOfEnemyPartyLevel - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - bl GetSumOfPlayerPartyLevel - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bcc _0808004C - ldr r0, _08080048 @ =sBattleTransitionTable_Trainer - lsls r1, r6, 1 - adds r0, 0x1 - b _08080050 - .align 2, 0 -_08080048: .4byte sBattleTransitionTable_Trainer -_0808004C: - ldr r0, _0808005C @ =sBattleTransitionTable_Trainer - lsls r1, r6, 1 -_08080050: - adds r1, r0 - ldrb r0, [r1] -_08080054: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0808005C: .4byte sBattleTransitionTable_Trainer - thumb_func_end GetTrainerBattleTransition - - thumb_func_start sub_8080060 -sub_8080060: @ 8080060 - push {r4,lr} - ldr r0, _08080084 @ =gEnemyParty - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - bl GetSumOfPlayerPartyLevel - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bcc _08080088 - movs r0, 0x3 - b _0808008A - .align 2, 0 -_08080084: .4byte gEnemyParty -_08080088: - movs r0, 0x4 -_0808008A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8080060 - - thumb_func_start TrainerBattleLoadArg32 -TrainerBattleLoadArg32: @ 8080090 - 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: @ 80800A8 - 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: @ 80800B4 - ldrb r0, [r0] - bx lr - thumb_func_end TrainerBattleLoadArg8 - - thumb_func_start GetTrainerAFlag -GetTrainerAFlag: @ 80800B8 - ldr r1, _080800CC @ =gTrainerBattleOpponent_A - 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 -_080800CC: .4byte gTrainerBattleOpponent_A - thumb_func_end GetTrainerAFlag - - thumb_func_start IsPlayerDefeated -IsPlayerDefeated: @ 80800D0 - push {lr} - subs r0, 0x1 - cmp r0, 0x6 - bhi _08080108 - lsls r0, 2 - ldr r1, _080800E4 @ =_080800E8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080800E4: .4byte _080800E8 - .align 2, 0 -_080800E8: - .4byte _08080108 - .4byte _08080104 - .4byte _08080104 - .4byte _08080108 - .4byte _08080108 - .4byte _08080108 - .4byte _08080108 -_08080104: - movs r0, 0x1 - b _0808010A -_08080108: - movs r0, 0 -_0808010A: - pop {r1} - bx r1 - thumb_func_end IsPlayerDefeated - - thumb_func_start InitTrainerBattleVariables -InitTrainerBattleVariables: @ 8080110 - ldr r0, _08080140 @ =sTrainerBattleMode - movs r1, 0 - strh r1, [r0] - ldr r0, _08080144 @ =gTrainerBattleOpponent_A - strh r1, [r0] - ldr r0, _08080148 @ =sTrainerEventObjectLocalId - strh r1, [r0] - ldr r0, _0808014C @ =sTrainerAIntroSpeech - movs r1, 0 - str r1, [r0] - ldr r0, _08080150 @ =sTrainerADefeatSpeech - str r1, [r0] - ldr r0, _08080154 @ =sTrainerBDefeatSpeech - str r1, [r0] - ldr r0, _08080158 @ =sTrainerCannotBattleSpeech - str r1, [r0] - ldr r0, _0808015C @ =sTrainerBattleEndScript - str r1, [r0] - ldr r0, _08080160 @ =sTrainerABattleScriptRetAddr - str r1, [r0] - ldr r0, _08080164 @ =gUnknown_20386CC - strh r1, [r0] - bx lr - .align 2, 0 -_08080140: .4byte sTrainerBattleMode -_08080144: .4byte gTrainerBattleOpponent_A -_08080148: .4byte sTrainerEventObjectLocalId -_0808014C: .4byte sTrainerAIntroSpeech -_08080150: .4byte sTrainerADefeatSpeech -_08080154: .4byte sTrainerBDefeatSpeech -_08080158: .4byte sTrainerCannotBattleSpeech -_0808015C: .4byte sTrainerBattleEndScript -_08080160: .4byte sTrainerABattleScriptRetAddr -_08080164: .4byte gUnknown_20386CC - thumb_func_end InitTrainerBattleVariables - - thumb_func_start TrainerBattleLoadArgs -TrainerBattleLoadArgs: @ 8080168 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 -_0808016E: - ldrb r0, [r4, 0x4] - cmp r0, 0x6 - bhi _080801E0 - lsls r0, 2 - ldr r1, _08080180 @ =_08080184 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080180: .4byte _08080184 - .align 2, 0 -_08080184: - .4byte _080801A0 - .4byte _080801AE - .4byte _080801BC - .4byte _080801CA - .4byte _080801D2 - .4byte _080801DA - .4byte _080801E4 -_080801A0: - adds r0, r5, 0 - bl TrainerBattleLoadArg8 - ldr r1, [r4] - strb r0, [r1] - adds r5, 0x1 - b _080801E0 -_080801AE: - adds r0, r5, 0 - bl TrainerBattleLoadArg16 - ldr r1, [r4] - strh r0, [r1] - adds r5, 0x2 - b _080801E0 -_080801BC: - adds r0, r5, 0 - bl TrainerBattleLoadArg32 - ldr r1, [r4] - str r0, [r1] - adds r5, 0x4 - b _080801E0 -_080801CA: - ldr r1, [r4] - movs r0, 0 - strb r0, [r1] - b _080801E0 -_080801D2: - ldr r1, [r4] - movs r0, 0 - strh r0, [r1] - b _080801E0 -_080801DA: - ldr r1, [r4] - movs r0, 0 - str r0, [r1] -_080801E0: - adds r4, 0x8 - b _0808016E -_080801E4: - ldr r0, [r4] - str r5, [r0] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end TrainerBattleLoadArgs - - thumb_func_start SetMapVarsToTrainer -SetMapVarsToTrainer: @ 80801F0 - push {lr} - ldr r0, _08080218 @ =sTrainerEventObjectLocalId - ldrh r1, [r0] - cmp r1, 0 - beq _08080212 - ldr r0, _0808021C @ =gSpecialVar_LastTalked - strh r1, [r0] - lsls r0, r1, 24 - lsrs r0, 24 - ldr r1, _08080220 @ =gSaveBlock1Ptr - ldr r2, [r1] - ldrb r1, [r2, 0x5] - ldrb r2, [r2, 0x4] - bl GetFieldObjectIdByLocalIdAndMap - ldr r1, _08080224 @ =gSelectedEventObject - strb r0, [r1] -_08080212: - pop {r0} - bx r0 - .align 2, 0 -_08080218: .4byte sTrainerEventObjectLocalId -_0808021C: .4byte gSpecialVar_LastTalked -_08080220: .4byte gSaveBlock1Ptr -_08080224: .4byte gSelectedEventObject - thumb_func_end SetMapVarsToTrainer - - thumb_func_start BattleSetup_ConfigureTrainerBattle -BattleSetup_ConfigureTrainerBattle: @ 8080228 - push {r4,r5,lr} - adds r5, r0, 0 - bl InitTrainerBattleVariables - ldr r4, _08080250 @ =sTrainerBattleMode - adds r0, r5, 0 - bl TrainerBattleLoadArg8 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4] - ldrh r0, [r4] - subs r0, 0x1 - cmp r0, 0x8 - bhi _08080318 - lsls r0, 2 - ldr r1, _08080254 @ =_08080258 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080250: .4byte sTrainerBattleMode -_08080254: .4byte _08080258 - .align 2, 0 -_08080258: - .4byte _0808028C - .4byte _0808028C - .4byte _0808027C - .4byte _08080284 - .4byte _080802D8 - .4byte _08080294 - .4byte _080802AC - .4byte _08080294 - .4byte _08080304 -_0808027C: - ldr r0, _08080280 @ =sOrdinaryNoIntroBattleParams - b _08080306 - .align 2, 0 -_08080280: .4byte sOrdinaryNoIntroBattleParams -_08080284: - ldr r0, _08080288 @ =sDoubleBattleParams - b _08080296 - .align 2, 0 -_08080288: .4byte sDoubleBattleParams -_0808028C: - ldr r0, _08080290 @ =sContinueScriptBattleParams - b _0808031A - .align 2, 0 -_08080290: .4byte sContinueScriptBattleParams -_08080294: - ldr r0, _080802A4 @ =sContinueScriptDoubleBattleParams -_08080296: - adds r1, r5, 0 - bl TrainerBattleLoadArgs - bl SetMapVarsToTrainer - ldr r0, _080802A8 @ =EventScript_TryDoDoubleTrainerBattle - b _08080326 - .align 2, 0 -_080802A4: .4byte sContinueScriptDoubleBattleParams -_080802A8: .4byte EventScript_TryDoDoubleTrainerBattle -_080802AC: - bl sub_811231C - ldr r0, _080802CC @ =sDoubleBattleParams - adds r1, r5, 0 - bl TrainerBattleLoadArgs - bl SetMapVarsToTrainer - ldr r4, _080802D0 @ =gTrainerBattleOpponent_A - ldrh r0, [r4] - bl sub_810CE64 - strh r0, [r4] - ldr r0, _080802D4 @ =EventScript_TryDoDoubleRematchBattle - b _08080326 - .align 2, 0 -_080802CC: .4byte sDoubleBattleParams -_080802D0: .4byte gTrainerBattleOpponent_A -_080802D4: .4byte EventScript_TryDoDoubleRematchBattle -_080802D8: - bl sub_811231C - ldr r0, _080802F8 @ =sOrdinaryBattleParams - adds r1, r5, 0 - bl TrainerBattleLoadArgs - bl SetMapVarsToTrainer - ldr r4, _080802FC @ =gTrainerBattleOpponent_A - ldrh r0, [r4] - bl sub_810CE64 - strh r0, [r4] - ldr r0, _08080300 @ =EventScript_TryDoRematchBattle - b _08080326 - .align 2, 0 -_080802F8: .4byte sOrdinaryBattleParams -_080802FC: .4byte gTrainerBattleOpponent_A -_08080300: .4byte EventScript_TryDoRematchBattle -_08080304: - ldr r0, _08080310 @ =gUnknown_83C6A20 -_08080306: - adds r1, r5, 0 - bl TrainerBattleLoadArgs - ldr r0, _08080314 @ =EventScript_DoTrainerBattle - b _08080326 - .align 2, 0 -_08080310: .4byte gUnknown_83C6A20 -_08080314: .4byte EventScript_DoTrainerBattle -_08080318: - ldr r0, _0808032C @ =sOrdinaryBattleParams -_0808031A: - adds r1, r5, 0 - bl TrainerBattleLoadArgs - bl SetMapVarsToTrainer - ldr r0, _08080330 @ =EventScript_TryDoNormalTrainerBattle -_08080326: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0808032C: .4byte sOrdinaryBattleParams -_08080330: .4byte EventScript_TryDoNormalTrainerBattle - thumb_func_end BattleSetup_ConfigureTrainerBattle - - thumb_func_start ConfigureAndSetUpOneTrainerBattle -ConfigureAndSetUpOneTrainerBattle: @ 8080334 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08080368 @ =gSelectedEventObject - strb r0, [r2] - ldr r4, _0808036C @ =gSpecialVar_LastTalked - ldr r3, _08080370 @ =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 BattleSetup_ConfigureTrainerBattle - ldr r0, _08080374 @ =gUnknown_81A4EB4 - bl ScriptContext1_SetupScript - bl ScriptContext2_Enable - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08080368: .4byte gSelectedEventObject -_0808036C: .4byte gSpecialVar_LastTalked -_08080370: .4byte gMapObjects -_08080374: .4byte gUnknown_81A4EB4 - thumb_func_end ConfigureAndSetUpOneTrainerBattle - - thumb_func_start GetTrainerFlagFromScriptPointer -GetTrainerFlagFromScriptPointer: @ 8080378 - 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 SetUpTrainerMovement -SetUpTrainerMovement: @ 8080398 - push {r4,lr} - ldr r0, _080803C4 @ =gSelectedEventObject - ldrb r0, [r0] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _080803C8 @ =gMapObjects - adds r4, r0 - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl GetTrainerFacingDirectionMovementType - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl SetTrainerMovementType - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080803C4: .4byte gSelectedEventObject -_080803C8: .4byte gMapObjects - thumb_func_end SetUpTrainerMovement - - thumb_func_start GetTrainerBattleMode -GetTrainerBattleMode: @ 80803CC - ldr r0, _080803D4 @ =sTrainerBattleMode - ldrb r0, [r0] - bx lr - .align 2, 0 -_080803D4: .4byte sTrainerBattleMode - thumb_func_end GetTrainerBattleMode - - thumb_func_start sub_80803D8 -sub_80803D8: @ 80803D8 - ldr r0, _080803E0 @ =gUnknown_20386CC - ldrh r0, [r0] - bx lr - .align 2, 0 -_080803E0: .4byte gUnknown_20386CC - thumb_func_end sub_80803D8 - - thumb_func_start ScrSpecial_HasTrainerBeenFought -ScrSpecial_HasTrainerBeenFought: @ 80803E4 - push {lr} - bl GetTrainerAFlag - lsls r0, 16 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end ScrSpecial_HasTrainerBeenFought - - thumb_func_start SetBattledTrainerFlag -SetBattledTrainerFlag: @ 80803FC - push {lr} - bl GetTrainerAFlag - lsls r0, 16 - lsrs r0, 16 - bl FlagSet - pop {r0} - bx r0 - thumb_func_end SetBattledTrainerFlag - - thumb_func_start SetBattledTrainerFlag2 -SetBattledTrainerFlag2: @ 8080410 - push {lr} - bl GetTrainerAFlag - lsls r0, 16 - lsrs r0, 16 - bl FlagSet - pop {r0} - bx r0 - thumb_func_end SetBattledTrainerFlag2 - - thumb_func_start HasTrainerAlreadyBeenFought -HasTrainerAlreadyBeenFought: @ 8080424 - 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 HasTrainerAlreadyBeenFought - - thumb_func_start SetTrainerFlag -SetTrainerFlag: @ 808043C - 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 SetTrainerFlag - - thumb_func_start ClearTrainerFlag -ClearTrainerFlag: @ 8080450 - push {lr} - lsls r0, 16 - movs r1, 0xA0 - lsls r1, 19 - adds r0, r1 - lsrs r0, 16 - bl FlagClear - pop {r0} - bx r0 - thumb_func_end ClearTrainerFlag - - thumb_func_start BattleSetup_StartTrainerBattle -BattleSetup_StartTrainerBattle: @ 8080464 - push {r4,lr} - ldr r4, _080804A0 @ =gBattleTypeFlags - movs r0, 0x8 - str r0, [r4] - bl GetTrainerBattleMode - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x9 - bne _0808048C - bl sub_80803D8 - movs r1, 0x3 - ands r1, r0 - cmp r1, 0 - beq _0808048C - ldr r0, [r4] - movs r1, 0x10 - orrs r0, r1 - str r0, [r4] -_0808048C: - ldr r1, _080804A4 @ =gMain - ldr r0, _080804A8 @ =CB2_EndTrainerBattle - str r0, [r1, 0x8] - bl sub_807F868 - bl ScriptContext1_Stop - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080804A0: .4byte gBattleTypeFlags -_080804A4: .4byte gMain -_080804A8: .4byte CB2_EndTrainerBattle - thumb_func_end BattleSetup_StartTrainerBattle - - thumb_func_start CB2_EndTrainerBattle -CB2_EndTrainerBattle: @ 80804AC - push {lr} - ldr r0, _080804D8 @ =sTrainerBattleMode - ldrh r0, [r0] - cmp r0, 0x9 - bne _08080508 - ldr r0, _080804DC @ =gBattleOutcome - ldrb r0, [r0] - bl IsPlayerDefeated - adds r1, r0, 0 - cmp r1, 0x1 - bne _080804E8 - ldr r0, _080804E0 @ =gSpecialVar_Result - strh r1, [r0] - ldr r0, _080804E4 @ =gUnknown_20386CC - ldrh r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _08080530 - bl sp000_heal_pokemon - b _080804EE - .align 2, 0 -_080804D8: .4byte sTrainerBattleMode -_080804DC: .4byte gBattleOutcome -_080804E0: .4byte gSpecialVar_Result -_080804E4: .4byte gUnknown_20386CC -_080804E8: - ldr r0, _08080500 @ =gSpecialVar_Result - movs r1, 0 - strh r1, [r0] -_080804EE: - ldr r0, _08080504 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - bl SetBattledTrainerFlag - bl sub_81139BC - b _0808054E - .align 2, 0 -_08080500: .4byte gSpecialVar_Result -_08080504: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic -_08080508: - ldr r0, _0808051C @ =gTrainerBattleOpponent_A - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _08080524 - ldr r0, _08080520 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - b _0808054E - .align 2, 0 -_0808051C: .4byte gTrainerBattleOpponent_A -_08080520: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic -_08080524: - ldr r0, _08080538 @ =gBattleOutcome - ldrb r0, [r0] - bl IsPlayerDefeated - cmp r0, 0x1 - bne _08080540 -_08080530: - ldr r0, _0808053C @ =c2_whiteout - bl SetMainCallback2 - b _0808054E - .align 2, 0 -_08080538: .4byte gBattleOutcome -_0808053C: .4byte c2_whiteout -_08080540: - ldr r0, _08080554 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - bl SetBattledTrainerFlag - bl sub_81139BC -_0808054E: - pop {r0} - bx r0 - .align 2, 0 -_08080554: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end CB2_EndTrainerBattle - - thumb_func_start CB2_EndRematchBattle -CB2_EndRematchBattle: @ 8080558 - push {lr} - ldr r0, _08080570 @ =gTrainerBattleOpponent_A - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _08080578 - ldr r0, _08080574 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - b _080805A6 - .align 2, 0 -_08080570: .4byte gTrainerBattleOpponent_A -_08080574: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic -_08080578: - ldr r0, _0808058C @ =gBattleOutcome - ldrb r0, [r0] - bl IsPlayerDefeated - cmp r0, 0x1 - bne _08080594 - ldr r0, _08080590 @ =c2_whiteout - bl SetMainCallback2 - b _080805A6 - .align 2, 0 -_0808058C: .4byte gBattleOutcome -_08080590: .4byte c2_whiteout -_08080594: - ldr r0, _080805AC @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - bl SetBattledTrainerFlag - bl sub_810CDE8 - bl sub_81138F8 -_080805A6: - pop {r0} - bx r0 - .align 2, 0 -_080805AC: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end CB2_EndRematchBattle - - thumb_func_start BattleSetup_StartRematchBattle -BattleSetup_StartRematchBattle: @ 80805B0 - push {lr} - ldr r1, _080805CC @ =gBattleTypeFlags - movs r0, 0x8 - str r0, [r1] - ldr r1, _080805D0 @ =gMain - ldr r0, _080805D4 @ =CB2_EndRematchBattle - str r0, [r1, 0x8] - bl sub_807F868 - bl ScriptContext1_Stop - pop {r0} - bx r0 - .align 2, 0 -_080805CC: .4byte gBattleTypeFlags -_080805D0: .4byte gMain -_080805D4: .4byte CB2_EndRematchBattle - thumb_func_end BattleSetup_StartRematchBattle - - thumb_func_start ShowTrainerIntroSpeech -ShowTrainerIntroSpeech: @ 80805D8 - push {lr} - bl GetIntroSpeechOfApproachingTrainer - bl ShowFieldMessage - pop {r0} - bx r0 - thumb_func_end ShowTrainerIntroSpeech - - thumb_func_start BattleSetup_GetScriptAddrAfterBattle -BattleSetup_GetScriptAddrAfterBattle: @ 80805E8 - push {lr} - ldr r0, _080805F8 @ =sTrainerBattleEndScript - ldr r0, [r0] - cmp r0, 0 - bne _080805F4 - ldr r0, _080805FC @ =gUnknown_81C555B -_080805F4: - pop {r1} - bx r1 - .align 2, 0 -_080805F8: .4byte sTrainerBattleEndScript -_080805FC: .4byte gUnknown_81C555B - thumb_func_end BattleSetup_GetScriptAddrAfterBattle - - thumb_func_start BattleSetup_GetTrainerPostBattleScript -BattleSetup_GetTrainerPostBattleScript: @ 8080600 - push {lr} - ldr r0, _08080610 @ =sTrainerABattleScriptRetAddr - ldr r0, [r0] - cmp r0, 0 - bne _0808060C - ldr r0, _08080614 @ =gUnknown_81C555B -_0808060C: - pop {r1} - bx r1 - .align 2, 0 -_08080610: .4byte sTrainerABattleScriptRetAddr -_08080614: .4byte gUnknown_81C555B - thumb_func_end BattleSetup_GetTrainerPostBattleScript - - thumb_func_start ShowTrainerCantBattleSpeech -ShowTrainerCantBattleSpeech: @ 8080618 - push {lr} - bl GetTrainerCantBattleSpeech - bl ShowFieldMessage - pop {r0} - bx r0 - thumb_func_end ShowTrainerCantBattleSpeech - - thumb_func_start SetUpTrainerEncounterMusic -SetUpTrainerEncounterMusic: @ 8080628 - push {lr} - ldr r0, _08080660 @ =gUnknown_203ADFA - ldrb r0, [r0] - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _080806BE - ldr r0, _08080664 @ =sTrainerBattleMode - ldrh r0, [r0] - cmp r0, 0x1 - beq _080806BE - cmp r0, 0x8 - beq _080806BE - ldr r0, _08080668 @ =gTrainerBattleOpponent_A - ldrh r0, [r0] - bl GetTrainerEncounterMusicId - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xD - bhi _080806B8 - lsls r0, 2 - ldr r1, _0808066C @ =_08080670 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080660: .4byte gUnknown_203ADFA -_08080664: .4byte sTrainerBattleMode -_08080668: .4byte gTrainerBattleOpponent_A -_0808066C: .4byte _08080670 - .align 2, 0 -_08080670: - .4byte _080806AE - .4byte _080806A8 - .4byte _080806A8 - .4byte _080806B8 - .4byte _080806AE - .4byte _080806AE - .4byte _080806B8 - .4byte _080806B8 - .4byte _080806AE - .4byte _080806A8 - .4byte _080806AE - .4byte _080806AE - .4byte _080806AE - .4byte _080806AE -_080806A8: - movs r0, 0x8E - lsls r0, 1 - b _080806BA -_080806AE: - ldr r0, _080806B4 @ =0x0000011d - b _080806BA - .align 2, 0 -_080806B4: .4byte 0x0000011d -_080806B8: - ldr r0, _080806C4 @ =0x0000011b -_080806BA: - bl PlayNewMapMusic -_080806BE: - pop {r0} - bx r0 - .align 2, 0 -_080806C4: .4byte 0x0000011b - thumb_func_end SetUpTrainerEncounterMusic - - thumb_func_start ReturnEmptyStringIfNull -ReturnEmptyStringIfNull: @ 80806C8 - push {lr} - cmp r0, 0 - bne _080806D0 - ldr r0, _080806D4 @ =gString_Dummy -_080806D0: - pop {r1} - bx r1 - .align 2, 0 -_080806D4: .4byte gString_Dummy - thumb_func_end ReturnEmptyStringIfNull - - thumb_func_start GetIntroSpeechOfApproachingTrainer -GetIntroSpeechOfApproachingTrainer: @ 80806D8 - push {lr} - ldr r0, _080806E8 @ =sTrainerAIntroSpeech - ldr r0, [r0] - bl ReturnEmptyStringIfNull - pop {r1} - bx r1 - .align 2, 0 -_080806E8: .4byte sTrainerAIntroSpeech - thumb_func_end GetIntroSpeechOfApproachingTrainer - - thumb_func_start GetTrainerALoseText -GetTrainerALoseText: @ 80806EC - push {r4,lr} - ldr r0, _08080708 @ =sTrainerADefeatSpeech - ldr r0, [r0] - ldr r4, _0808070C @ =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 -_08080708: .4byte sTrainerADefeatSpeech -_0808070C: .4byte gStringVar4 - thumb_func_end GetTrainerALoseText - - thumb_func_start GetTrainerBLoseText -GetTrainerBLoseText: @ 8080710 - push {r4,lr} - ldr r4, _0808072C @ =gStringVar4 - ldr r0, _08080730 @ =sTrainerBDefeatSpeech - ldr r0, [r0] - 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 -_0808072C: .4byte gStringVar4 -_08080730: .4byte sTrainerBDefeatSpeech - thumb_func_end GetTrainerBLoseText - - thumb_func_start GetTrainerCantBattleSpeech -GetTrainerCantBattleSpeech: @ 8080734 - push {lr} - ldr r0, _08080744 @ =sTrainerCannotBattleSpeech - ldr r0, [r0] - bl ReturnEmptyStringIfNull - pop {r1} - bx r1 - .align 2, 0 -_08080744: .4byte sTrainerCannotBattleSpeech - thumb_func_end GetTrainerCantBattleSpeech - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index be79c3b21..7003a10f2 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -134,13 +134,13 @@ npc_pal_op: @ 80DAE54 cmp r0, 0 bne _080DAEB0 ldrb r0, [r5, 0x1F] - bl MetatileBehavior_ReturnFalse_7 + bl MetatileBehavior_GetBridgeType lsls r0, 24 lsrs r0, 24 cmp r0, 0 bne _080DAE96 ldrb r0, [r5, 0x1E] - bl MetatileBehavior_ReturnFalse_7 + bl MetatileBehavior_GetBridgeType lsls r0, 24 lsrs r0, 24 cmp r0, 0 @@ -1251,7 +1251,7 @@ _080DB6E8: cmp r0, 0 bne _080DB73C adds r0, r4, 0 - bl MetatileBehavior_ReturnFalse_3 + bl MetatileBehavior_IsLongGrass lsls r0, 24 cmp r0, 0 beq _080DB73C diff --git a/asm/field_ground_effect.s b/asm/field_ground_effect.s index 56af66346..b5ec3a622 100644 --- a/asm/field_ground_effect.s +++ b/asm/field_ground_effect.s @@ -224,7 +224,7 @@ GetGroundEffectFlags_LongGrassOnSpawn: @ 8067CE8 push {r4,lr} adds r4, r1, 0 ldrb r0, [r0, 0x1E] - bl MetatileBehavior_ReturnFalse_3 + bl MetatileBehavior_IsLongGrass lsls r0, 24 cmp r0, 0 beq _08067D00 @@ -243,7 +243,7 @@ GetGroundEffectFlags_LongGrassOnBeginStep: @ 8067D08 push {r4,lr} adds r4, r1, 0 ldrb r0, [r0, 0x1E] - bl MetatileBehavior_ReturnFalse_3 + bl MetatileBehavior_IsLongGrass lsls r0, 24 cmp r0, 0 beq _08067D20 @@ -838,12 +838,12 @@ FieldObjectSetSpriteOamTableForLongGrass: @ 8068154 cmp r0, 0 blt _080681A8 ldrb r0, [r5, 0x1E] - bl MetatileBehavior_ReturnFalse_3 + bl MetatileBehavior_IsLongGrass lsls r0, 24 cmp r0, 0 beq _080681A8 ldrb r0, [r5, 0x1F] - bl MetatileBehavior_ReturnFalse_3 + bl MetatileBehavior_IsLongGrass lsls r0, 24 cmp r0, 0 beq _080681A8 diff --git a/asm/overworld.s b/asm/overworld.s index 6b8b921d9..45b1ad9f9 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -3522,8 +3522,8 @@ _0805669C: .4byte sub_8056534 _080566A0: .4byte sub_80565B4 thumb_func_end CB2_NewGame - thumb_func_start c2_whiteout -c2_whiteout: @ 80566A4 + thumb_func_start CB2_WhiteOut +CB2_WhiteOut: @ 80566A4 push {lr} sub sp, 0x4 ldr r1, _08056708 @ =gMain @@ -3569,7 +3569,7 @@ _0805670C: .4byte gFieldCallback _08056710: .4byte sub_807F5F0 _08056714: .4byte sub_8056534 _08056718: .4byte sub_80565B4 - thumb_func_end c2_whiteout + thumb_func_end CB2_WhiteOut thumb_func_start CB2_LoadMap CB2_LoadMap: @ 805671C diff --git a/asm/post_battle_event_funcs.s b/asm/post_battle_event_funcs.s index 20455093a..4752d13c1 100644 --- a/asm/post_battle_event_funcs.s +++ b/asm/post_battle_event_funcs.s @@ -109,13 +109,13 @@ _080CA3C0: .4byte CB2_DoHallOfFameScreen thumb_func_start sub_80CA3C4 sub_80CA3C4: @ 80CA3C4 push {lr} - ldr r0, _080CA3D4 @ =c2_whiteout + ldr r0, _080CA3D4 @ =CB2_WhiteOut bl SetMainCallback2 movs r0, 0 pop {r1} bx r1 .align 2, 0 -_080CA3D4: .4byte c2_whiteout +_080CA3D4: .4byte CB2_WhiteOut thumb_func_end sub_80CA3C4 .align 2, 0 @ Don't pad with nop. diff --git a/asm/wild_encounter.s b/asm/wild_encounter.s index a452f63a6..c72bc8a18 100644 --- a/asm/wild_encounter.s +++ b/asm/wild_encounter.s @@ -878,7 +878,7 @@ _08082D78: bl sub_8058F1C lsls r0, 24 lsrs r0, 24 - bl MetatileBehavior_ReturnFalse_6 + bl MetatileBehavior_IsBridge lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 diff --git a/data/map_event_scripts.inc b/data/map_event_scripts.inc index 4e61859a6..8d33ad951 100644 --- a/data/map_event_scripts.inc +++ b/data/map_event_scripts.inc @@ -790,7 +790,7 @@ EventScript_TryDoNormalTrainerBattle:: @ 81A4EC1 faceplayer applymovement VAR_LAST_TALKED, Movement_1A4FC5 waitmovement 0 - specialvar VAR_RESULT, ScrSpecial_HasTrainerBeenFought + specialvar VAR_RESULT, GetTrainerFlag compare_var_to_value VAR_RESULT, 0 goto_if 5, EventScript_1A4EE8 special SetUpTrainerEncounterMusic @@ -804,7 +804,7 @@ EventScript_TryDoDoubleTrainerBattle:: @ 81A4EE9 lock faceplayer call EventScript_1A4FBA - specialvar VAR_RESULT, ScrSpecial_HasTrainerBeenFought + specialvar VAR_RESULT, GetTrainerFlag compare_var_to_value VAR_RESULT, 0 goto_if 5, EventScript_1A4F20 special CheckForAlivePartyMons diff --git a/data/specials.inc b/data/specials.inc index 3968d01d3..c88cf8340 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -63,7 +63,7 @@ gSpecials:: @ 815FD60 def_special GetTrainerBattleMode def_special ShowTrainerIntroSpeech def_special ShowTrainerCantBattleSpeech - def_special ScrSpecial_HasTrainerBeenFought + def_special GetTrainerFlag def_special ScrSpecial_EndTrainerApproach def_special SetUpTrainerEncounterMusic def_special sub_810CD4C diff --git a/include/battle.h b/include/battle.h index e0d75fde3..f1f53e57d 100644 --- a/include/battle.h +++ b/include/battle.h @@ -101,17 +101,6 @@ #define MAX_TRAINER_ITEMS 4 #define MAX_MON_MOVES 4 -#define BATTLE_TERRAIN_GRASS 0 -#define BATTLE_TERRAIN_LONG_GRASS 1 -#define BATTLE_TERRAIN_SAND 2 -#define BATTLE_TERRAIN_UNDERWATER 3 -#define BATTLE_TERRAIN_WATER 4 -#define BATTLE_TERRAIN_POND 5 -#define BATTLE_TERRAIN_ROCK 6 -#define BATTLE_TERRAIN_CAVE 7 -#define BATTLE_TERRAIN_INSIDE 8 -#define BATTLE_TERRAIN_PLAIN 9 - // array entries for battle communication #define MULTIUSE_STATE 0x0 #define CURSOR_POSITION 0x1 diff --git a/include/battle_anim.h b/include/battle_anim.h index aa3b73cea..7260c1dfb 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -240,7 +240,7 @@ void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor); u32 sub_8075BE8(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7); u32 sub_8075CB8(u8 a1, u8 a2, u8 a3, u8 a4); u8 sub_8075D80(u8 a1); -void sub_8075D9C(struct Sprite *sprite); +void AnimSparklingParticle(struct Sprite *sprite); void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite); void sub_8075E80(struct Sprite *sprite); void sub_8075F0C(struct Sprite *sprite); diff --git a/include/battle_setup.h b/include/battle_setup.h index fefaf9e1b..833845f12 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -5,17 +5,17 @@ void BattleSetup_StartScriptedWildBattle(void); u8 BattleSetup_GetTerrainId(void); -u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data); +const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data); void BattleSetup_StartBattlePikeWildBattle(void); void BattleSetup_StartWildBattle(void); void BattleSetup_StartRoamerBattle(void); -u8 HasTrainerAlreadyBeenFought(u16); +u8 HasTrainerBeenFought(u16); void SetTrainerFlag(u16); void ClearTrainerFlag(u16); void BattleSetup_StartTrainerBattle(void); -u8 *BattleSetup_GetScriptAddrAfterBattle(void); -u8 *BattleSetup_GetTrainerPostBattleScript(void); +const u8 *BattleSetup_GetScriptAddrAfterBattle(void); +const u8 *BattleSetup_GetTrainerPostBattleScript(void); void SetBattledTrainerFlag(void); u8 sub_8080060(void); u8 GetTrainerBattleMode(void); diff --git a/include/constants/battle.h b/include/constants/battle.h index a0099d23f..bbea92d05 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -56,13 +56,13 @@ #define BATTLE_TYPE_OLDMAN_TUTORIAL 0x0200 #define BATTLE_TYPE_ROAMER 0x0400 #define BATTLE_TYPE_EREADER_TRAINER 0x0800 -#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000 +#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000 // TODO: used, rename later #define BATTLE_TYPE_LEGENDARY 0x2000 -#define BATTLE_TYPE_REGI 0x4000 +#define BATTLE_TYPE_REGI 0x4000 // TODO: used, rename later #define BATTLE_TYPE_GHOST 0x8000 #define BATTLE_TYPE_POKEDUDE 0x10000 -#define BATTLE_TYPE_PALACE 0x20000 -#define BATTLE_TYPE_ARENA 0x40000 +#define BATTLE_TYPE_PALACE 0x20000 // TODO: used, rename later +#define BATTLE_TYPE_ARENA 0x40000 // TODO: used rename later #define BATTLE_TYPE_TRAINER_TOWER 0x80000 #define BATTLE_TYPE_PIKE 0x100000 #define BATTLE_TYPE_PYRAMID 0x200000 diff --git a/include/constants/battle_setup.h b/include/constants/battle_setup.h new file mode 100644 index 000000000..8f700dc04 --- /dev/null +++ b/include/constants/battle_setup.h @@ -0,0 +1,15 @@ +#ifndef GUARD_CONSTANTS_BATTLE_SETUP_H +#define GUARD_CONSTANTS_BATTLE_SETUP_H + +#define TRAINER_BATTLE_SINGLE 0 +#define TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC 1 +#define TRAINER_BATTLE_CONTINUE_SCRIPT 2 +#define TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT 3 +#define TRAINER_BATTLE_DOUBLE 4 +#define TRAINER_BATTLE_REMATCH 5 +#define TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE 6 +#define TRAINER_BATTLE_REMATCH_DOUBLE 7 +#define TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC 8 +#define TRAINER_BATTLE_TUTORIAL 9 + +#endif // GUARD_CONSTANTS_BATTLE_SETUP_H diff --git a/include/constants/map_types.h b/include/constants/map_types.h new file mode 100644 index 000000000..94fb99a57 --- /dev/null +++ b/include/constants/map_types.h @@ -0,0 +1,28 @@ +#ifndef GUARD_CONSTANTS_MAP_TYPES_H +#define GUARD_CONSTANTS_MAP_TYPES_H + +#define MAP_TYPE_0 0 +#define MAP_TYPE_TOWN 1 +#define MAP_TYPE_CITY 2 +#define MAP_TYPE_ROUTE 3 +#define MAP_TYPE_UNDERGROUND 4 +#define MAP_TYPE_UNDERWATER 5 +#define MAP_TYPE_OCEAN_ROUTE 6 +#define MAP_TYPE_7 7 +#define MAP_TYPE_INDOOR 8 +#define MAP_TYPE_SECRET_BASE 9 + +enum +{ + MAP_BATTLE_SCENE_NORMAL, // 0 + MAP_BATTLE_SCENE_GYM, // 1 + MAP_BATTLE_SCENE_MAGMA, // 2 + MAP_BATTLE_SCENE_AQUA, // 3 + MAP_BATTLE_SCENE_SIDNEY, // 4 + MAP_BATTLE_SCENE_PHOEBE, // 5 + MAP_BATTLE_SCENE_GLACIA, // 6 + MAP_BATTLE_SCENE_DRAKE, // 7 + MAP_BATTLE_SCENE_BATTLE_TOWER, // 8 +}; + +#endif // GUARD_CONSTANTS_MAP_TYPES_H
\ No newline at end of file diff --git a/include/event_data.h b/include/event_data.h index 7c62ac92b..d1946d173 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -57,9 +57,6 @@ extern u16 gSpecialVar_MonBoxId; extern u16 gSpecialVar_MonBoxPos; extern u16 gSpecialVar_0x8014; -extern u16 gSpecialVar_Result; -extern u16 gSpecialVar_0x8004; - extern u16 gUnknown_20370DA; extern u16 gUnknown_20370DC; diff --git a/include/event_scripts.h b/include/event_scripts.h index 99b453c85..772b683af 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1155,6 +1155,15 @@ extern const u8 EventScript_SafariOutOfBalls[]; extern const u8 EventScript_ItemfinderDigUpUnderfootItem[]; +// battle_setup +extern const u8 EventScript_DoTrainerBattle[]; +extern const u8 EventScript_TryDoDoubleTrainerBattle[]; +extern const u8 EventScript_TryDoNormalTrainerBattle[]; +extern const u8 EventScript_TryDoDoubleRematchBattle[]; +extern const u8 EventScript_TryDoRematchBattle[]; +extern const u8 gUnknown_81A4EB4[]; +extern const u8 gUnknown_81C555B[]; + // new_game extern const u8 EventScript_ResetAllMapFlags[]; diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index 0a33138b3..ecb622de5 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -5,4 +5,7 @@ extern u32 gUnknown_3005078; +void RestartWildEncounterImmunitySteps(void); +void ClearPoisonStepCounter(void); + #endif //GUARD_FIELD_CONTROL_AVATAR_H diff --git a/include/field_map_obj.h b/include/field_map_obj.h index f14140189..2628f5ca5 100644 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -94,6 +94,8 @@ void npc_paltag_set_load(u8 mode); bool8 FieldObjectIsMovementOverridden(struct MapObject *mapObject); u8 FieldObjectCheckHeldMovementStatus(struct MapObject *mapObject); u8 sub_8063F84(u8 direction); +u8 GetTrainerFacingDirectionMovementType(u8 direction); + // Exported data declarations diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 2c408afc9..1d431771b 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -13,8 +13,8 @@ u8 player_get_direction_upper_nybble(void); u8 player_get_x22(void); void sub_808D074(u8); -void sub_805C270(); -void sub_805C780(); +void sub_805C270(void); +void sub_805C780(void); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); u8 sub_805C808(u8); void SetPlayerAvatarStateMask(u8 mask); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index bf142d265..9c132db61 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -13,35 +13,6 @@ enum CONNECTION_EMERGE }; -// map types -enum -{ - MAP_TYPE_0, - MAP_TYPE_TOWN, - MAP_TYPE_CITY, - MAP_TYPE_ROUTE, - MAP_TYPE_UNDERGROUND, - MAP_TYPE_UNDERWATER, - MAP_TYPE_6, - MAP_TYPE_7, - MAP_TYPE_INDOOR, - MAP_TYPE_SECRET_BASE -}; - -// map battle scenes -enum -{ - MAP_BATTLE_SCENE_NORMAL, // 0 - MAP_BATTLE_SCENE_GYM, // 1 - MAP_BATTLE_SCENE_MAGMA, // 2 - MAP_BATTLE_SCENE_AQUA, // 3 - MAP_BATTLE_SCENE_SIDNEY, // 4 - MAP_BATTLE_SCENE_PHOEBE, // 5 - MAP_BATTLE_SCENE_GLACIA, // 6 - MAP_BATTLE_SCENE_DRAKE, // 7 - MAP_BATTLE_SCENE_BATTLE_TOWER, // 8 -}; - typedef void (*TilesetCB)(void); struct Tileset @@ -241,7 +212,7 @@ struct MapObject /*0x0C*/ struct Coords16 coords1; /*0x10*/ struct Coords16 coords2; /*0x14*/ struct Coords16 coords3; - /*0x18*/ u8 mapobj_unk_18:4; //current direction? + /*0x18*/ u8 facingDirection:4; //current direction? /*0x18*/ u8 placeholder18:4; /*0x19*/ union MapObjectRange range; /*0x1A*/ u8 mapobj_unk_1A; diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index 62bcfdd38..df03001bf 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -10,7 +10,7 @@ bool8 MetatileBehavior_IsJumpNorth(u8 metatileBehavior); bool8 MetatileBehavior_IsJumpSouth(u8 metatileBehavior); bool8 MetatileBehavior_IsTallGrass(u8 metatileBehavior); bool8 MetatileBehavior_IsMB21OrSand(u8 metatileBehavior); -bool8 MetatileBehavior_IsMB21OrWaterfallBottom(u8 metatileBehavior); +bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior); bool8 MetatileBehavior_ReturnFalse(u8 metatileBehavior); bool8 MetatileBehavior_IsReflective(u8 metatileBehavior); bool8 MetatileBehavior_IsIce(u8 metatileBehavior); @@ -53,15 +53,15 @@ bool8 MetatileBehavior_IsPC(u8 metatileBehavior); bool8 MetatileBehavior_IsPondWaterOrPuddle(u8 metatileBehavior); bool8 MetatileBehavior_IsPuddle(u8 metatileBehavior); bool8 MetatileBehavior_IsTallGrass_2(u8 metatileBehavior); -bool8 MetatileBehavior_ReturnFalse_3(u8 metatileBehavior); +bool8 MetatileBehavior_IsLongGrass(u8 metatileBehavior); bool8 MetatileBehavior_ReturnFalse_4(u8 metatileBehavior); bool8 MetatileBehavior_ReturnFalse_5(u8 metatileBehavior); -bool8 MetatileBehavior_ReturnFalse_6(u8 metatileBehavior); -bool8 MetatileBehavior_ReturnFalse_7(u8 metatileBehavior); +bool8 MetatileBehavior_IsBridge(u8 metatileBehavior); +bool8 MetatileBehavior_GetBridgeType(u8 metatileBehavior); bool8 MetatileBehavior_UnusedIsMB_01(u8 metatileBehavior); bool8 MetatileBehavior_UnusedIsTallGrass(u8 metatileBehavior); -bool8 MetatileBehavior_IsMB0B(u8 metatileBehavior); -bool8 MetatileBehavior_IsMB0C(u8 metatileBehavior); +bool8 MetatileBehavior_IsIndoorEncounter(u8 metatileBehavior); +bool8 MetatileBehavior_IsMountain(u8 metatileBehavior); bool8 MetatileBehavior_IsDeepOrSemiDeepWater(u8 metatileBehavior); bool8 MetatileBehavior_IsMB19(u8 metatileBehavior); bool8 MetatileBehavior_IsWaterfallBottom(u8 metatileBehavior); diff --git a/include/overworld.h b/include/overworld.h index 38c213707..c2b759df6 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -61,7 +61,7 @@ void sub_8084EBC(s16, s16); void player_avatar_init_params_reset(void); void Overworld_SetFlashLevel(s32 a1); -//u8 Overworld_GetFlashLevel(void); +u8 Overworld_GetFlashLevel(void); void sub_8085524(u16); void Overworld_SetSavedMusic(u16); @@ -140,5 +140,6 @@ bool32 Overworld_DoScrollSceneForCredits(u8 *, const struct CreditsOverworldCmd bool32 sub_8058318(void); void CB2_ReturnToStartMenu(void); +void CB2_WhiteOut(void); #endif //GUARD_OVERWORLD_H diff --git a/include/pokemon.h b/include/pokemon.h index 372b2abb6..24328e44e 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -169,35 +169,6 @@ enum EGG_GROUP_UNDISCOVERED }; -enum -{ - NATURE_HARDY, - NATURE_LONELY, - NATURE_BRAVE, - NATURE_ADAMANT, - NATURE_NAUGHTY, - NATURE_BOLD, - NATURE_DOCILE, - NATURE_RELAXED, - NATURE_IMPISH, - NATURE_LAX, - NATURE_TIMID, - NATURE_HASTY, - NATURE_SERIOUS, - NATURE_JOLLY, - NATURE_NAIVE, - NATURE_MODEST, - NATURE_MILD, - NATURE_QUIET, - NATURE_BASHFUL, - NATURE_RASH, - NATURE_CALM, - NATURE_GENTLE, - NATURE_SASSY, - NATURE_CAREFUL, - NATURE_QUIRKY, -}; - struct PokemonSubstruct0 { u16 species; diff --git a/include/quest_log.h b/include/quest_log.h index 3a2f31780..ddcbb1bf0 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -43,5 +43,7 @@ u8 sub_8112CAC(void); void sub_81138F8(void); void sub_812C224(void); void sub_812BFDC(void); +void sub_811231C(void); +void sub_81139BC(void); #endif //GUARD_QUEST_LOG_H diff --git a/include/script_pokemon_util_80A0058.h b/include/script_pokemon_util_80A0058.h index e1d228589..768e838dd 100644 --- a/include/script_pokemon_util_80A0058.h +++ b/include/script_pokemon_util_80A0058.h @@ -4,5 +4,6 @@ bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3); bool8 ScriptGiveEgg(u16 species); void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot); +void sp000_heal_pokemon(void); #endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H diff --git a/include/vs_seeker.h b/include/vs_seeker.h index a9599d324..fdd6839df 100644 --- a/include/vs_seeker.h +++ b/include/vs_seeker.h @@ -6,7 +6,7 @@ void Task_VsSeeker_0(u8 taskId); void sub_810CB90(void); void sub_810CDE8(void); -int sub_810CE64(u16 a0); +int GetRematchTrainerId(u16 a0); bool8 sub_810CF04(u8 a0); u8 sub_810CF54(); void sub_810D0D0(void); diff --git a/ld_script.txt b/ld_script.txt index d0f391018..063a8dd78 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -119,8 +119,9 @@ SECTIONS { src/reset_save_heap.o(.text); asm/field_weather.o(.text); asm/field_weather_effects.o(.text); - src/field_fadetransition.o(.text);; + src/field_fadetransition.o(.text); asm/field_screen_effect.o(.text); + src/battle_setup.o(.text); asm/battle_setup.o(.text); asm/cable_club.o(.text); asm/trainer_see.o(.text); diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index e871937e7..7bb62af69 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -1336,7 +1336,7 @@ static u8 GetBattlerAtPosition_(u8 position) return GetBattlerAtPosition(position); } -void sub_8075D9C(struct Sprite *sprite) +void AnimSparklingParticle(struct Sprite *sprite) { bool8 var; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 46120085a..aec6eec8e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -48,6 +48,7 @@ #include "constants/abilities.h" #include "constants/pokemon.h" #include "constants/trainers.h" +#include "constants/map_types.h" #define DEFENDER_IS_PROTECTED ((gProtectStructs[gBattlerTarget].protected) && (gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) @@ -9451,7 +9452,6 @@ static void atkEF_handleballthrow(void) catchRate = gBattleStruct->safariCatchFactor * 1275 / 100; else catchRate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate; - if (gLastUsedItem > ITEM_SAFARI_BALL) { switch (gLastUsedItem) diff --git a/src/battle_setup.c b/src/battle_setup.c new file mode 100644 index 000000000..3e06437da --- /dev/null +++ b/src/battle_setup.c @@ -0,0 +1,974 @@ +#include "global.h" +#include "task.h" +#include "help_system.h" +#include "overworld.h" +#include "item.h" +#include "sound.h" +#include "pokemon.h" +#include "load_save.h" +#include "safari_zone.h" +#include "quest_log.h" +#include "script.h" +#include "script_pokemon_util_80A0058.h" +#include "strings.h" +#include "string_util.h" +#include "event_data.h" +#include "unk_8159F40.h" +#include "map_obj_80688E4.h" +#include "metatile_behavior.h" +#include "event_scripts.h" +#include "fldeff.h" +#include "fieldmap.h" +#include "field_control_avatar.h" +#include "field_player_avatar.h" +#include "field_screen_effect.h" +#include "field_message_box.h" +#include "field_map_obj.h" +#include "vs_seeker.h" +#include "battle.h" +#include "battle_setup.h" +#include "battle_transition.h" +#include "constants/battle_setup.h" +#include "constants/flags.h" +#include "constants/items.h" +#include "constants/maps.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "constants/pokemon.h" +#include "constants/trainers.h" +#include "constants/trainer_classes.h" +#include "constants/map_types.h" + +enum +{ + TRAINER_PARAM_LOAD_VAL_8BIT, + TRAINER_PARAM_LOAD_VAL_16BIT, + TRAINER_PARAM_LOAD_VAL_32BIT, + TRAINER_PARAM_CLEAR_VAL_8BIT, + TRAINER_PARAM_CLEAR_VAL_16BIT, + TRAINER_PARAM_CLEAR_VAL_32BIT, + TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR, +}; + +struct TrainerBattleParameter +{ + void *varPtr; + u8 ptrType; +}; + +void BattleSetup_StartSafariBattle(void); +void BattleSetup_StartGhostBattle(void); +void BattleSetup_StandardWildBattle(void); +void CB2_EndWildBattle(void); +u8 GetWildBattleTransition(void); +void CB2_EndSafariBattle(void); +u8 GetTrainerBattleTransition(void); +void CB2_EndScriptedWildBattle(void); +void CB2_EndMarowakBattle(void); +bool32 IsPlayerDefeated(u32 battleOutcome); +void CB2_EndTrainerBattle(void); +const u8 *GetIntroSpeechOfApproachingTrainer(void); +const u8 *GetTrainerCantBattleSpeech(void); + +EWRAM_DATA u16 sTrainerBattleMode = 0; +EWRAM_DATA u16 gTrainerBattleOpponent_A = 0; +EWRAM_DATA u16 sTrainerEventObjectLocalId = 0; +EWRAM_DATA u8 *sTrainerAIntroSpeech = NULL; +EWRAM_DATA u8 *sTrainerADefeatSpeech = NULL; +EWRAM_DATA u8 *sTrainerBDefeatSpeech = NULL; +EWRAM_DATA u8 *sTrainerCannotBattleSpeech = NULL; +EWRAM_DATA u8 *sTrainerBattleEndScript = NULL; +EWRAM_DATA u8 *sTrainerABattleScriptRetAddr = NULL; +EWRAM_DATA u16 gUnknown_20386CC = 0; + +extern const u8 sBattleTransitionTable_Wild[][2]; +extern const u8 sBattleTransitionTable_Trainer[][2]; +extern const struct TrainerBattleParameter sOrdinaryBattleParams[]; +extern const struct TrainerBattleParameter sOrdinaryNoIntroBattleParams[]; +extern const struct TrainerBattleParameter sDoubleBattleParams[]; +extern const struct TrainerBattleParameter sContinueScriptBattleParams[]; +extern const struct TrainerBattleParameter sContinueScriptDoubleBattleParams[]; +extern const struct TrainerBattleParameter gUnknown_83C6A20[]; + +#define tState data[0] +#define tTransition data[1] + +void Task_BattleStart(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (tState) + { + case 0: + if (!FldEffPoison_IsActive()) + { + HelpSystem_Disable(); + BT_StartOnField(tTransition); + ++tState; + } + break; + case 1: + if (BT_IsDone() == TRUE) + { + HelpSystem_Enable(); + CleanupOverworldWindowsAndTilemaps(); + SetMainCallback2(CB2_InitBattle); + RestartWildEncounterImmunitySteps(); + ClearPoisonStepCounter(); + DestroyTask(taskId); + } + break; + } +} + +void CreateBattleStartTask(u8 transition, u16 song) // song == 0 means default music for current map +{ + u8 taskId = CreateTask(Task_BattleStart, 1); + + gTasks[taskId].tTransition = transition; + PlayMapChosenOrBattleBGM(song); +} + +bool8 CheckSilphScopeInPokemonTower(u16 mapGroup, u16 mapNum) +{ + if (mapGroup == MAP_GROUP(POKEMON_TOWER_1F) + && ((u16)(mapNum - MAP_NUM(POKEMON_TOWER_1F)) <= 6) + && !(CheckBagHasItem(ITEM_SILPH_SCOPE, 1))) + return TRUE; + else + return FALSE; +} + +void BattleSetup_StartWildBattle(void) +{ + if (GetSafariZoneFlag()) + BattleSetup_StartSafariBattle(); + else if (CheckSilphScopeInPokemonTower(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)) + BattleSetup_StartGhostBattle(); + else + BattleSetup_StandardWildBattle(); +} + +void BattleSetup_StandardWildBattle(void) +{ + ScriptContext2_Enable(); + FreezeEventObjects(); + sub_805C780(); + gMain.savedCallback = CB2_EndWildBattle; + gBattleTypeFlags = 0; + CreateBattleStartTask(GetWildBattleTransition(), 0); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void BattleSetup_StartRoamerBattle(void) +{ + ScriptContext2_Enable(); + FreezeEventObjects(); + sub_805C780(); + gMain.savedCallback = CB2_EndWildBattle; + gBattleTypeFlags = BATTLE_TYPE_ROAMER; + CreateBattleStartTask(GetWildBattleTransition(), MUS_VS_DEN); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void BattleSetup_StartSafariBattle(void) +{ + ScriptContext2_Enable(); + FreezeEventObjects(); + sub_805C780(); + gMain.savedCallback = CB2_EndSafariBattle; + gBattleTypeFlags = BATTLE_TYPE_SAFARI; + CreateBattleStartTask(GetWildBattleTransition(), 0); +} + +void BattleSetup_StartGhostBattle(void) +{ + ScriptContext2_Enable(); + FreezeEventObjects(); + sub_805C780(); + gMain.savedCallback = CB2_EndWildBattle; + gBattleTypeFlags = BATTLE_TYPE_GHOST; + CreateBattleStartTask(GetWildBattleTransition(), 0); + SetMonData(&gEnemyParty[0], MON_DATA_NICKNAME, gUnknown_841D148); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void DoTrainerBattle(void) +{ + CreateBattleStartTask(GetTrainerBattleTransition(), 0); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_TRAINER_BATTLES); +} + +void BattleSetup_StartOldManTutorialBattle(void) +{ + CreateMaleMon(&gEnemyParty[0], SPECIES_WEEDLE, 5); + ScriptContext2_Enable(); + gMain.savedCallback = CB2_ReturnToFieldContinueScriptPlayMapMusic; + gBattleTypeFlags = BATTLE_TYPE_OLDMAN_TUTORIAL; + CreateBattleStartTask(B_TRANSITION_SLICED_SCREEN, 0); +} + +void BattleSetup_StartScriptedWildBattle(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = CB2_EndScriptedWildBattle; + gBattleTypeFlags = BATTLE_TYPE_PALACE; + CreateBattleStartTask(GetWildBattleTransition(), 0); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void BattleSetup_StartMarowakBattle(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = CB2_EndMarowakBattle; + if (CheckBagHasItem(ITEM_SILPH_SCOPE, 1)) + { + gBattleTypeFlags = BATTLE_TYPE_GHOST | BATTLE_TYPE_LEGENDARY; + CreateMonWithGenderNatureLetter(gEnemyParty, SPECIES_MAROWAK, 30, 31, MON_FEMALE, NATURE_SERIOUS, 0); + } + else + { + gBattleTypeFlags = BATTLE_TYPE_GHOST; + } + CreateBattleStartTask(GetWildBattleTransition(), 0); + SetMonData(&gEnemyParty[0], MON_DATA_NICKNAME, gUnknown_841D148); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void sub_807F998(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = CB2_EndScriptedWildBattle; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; + CreateBattleStartTask(GetWildBattleTransition(), 0); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void BattleSetup_StartLegendaryBattle(void) +{ + u16 species; + + ScriptContext2_Enable(); + gMain.savedCallback = CB2_EndScriptedWildBattle; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_ARENA; + species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES); + switch (species) + { + case SPECIES_MEWTWO: + CreateBattleStartTask(B_TRANSITION_BLUR, MUS_VS_MYU2); + break; + case SPECIES_DEOXYS: + CreateBattleStartTask(B_TRANSITION_BLUR, MUS_VS_DEO); + break; + case SPECIES_MOLTRES: + case SPECIES_ARTICUNO: + case SPECIES_ZAPDOS: + case SPECIES_HO_OH: + case SPECIES_LUGIA: + CreateBattleStartTask(B_TRANSITION_BLUR, MUS_VS_DEN); + break; + default: + CreateBattleStartTask(B_TRANSITION_BLUR, MUS_BATTLE20); + break; + } + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void BattleSetup_StartIceCaveBattle(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = CB2_EndScriptedWildBattle; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON; + if (gGameVersion == VERSION_FIRE_RED) + CreateBattleStartTask(B_TRANSITION_BLACK_DOODLES, MUS_BATTLE20); + else // pointless, exactly the same + CreateBattleStartTask(B_TRANSITION_BLACK_DOODLES, MUS_BATTLE20); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void sub_807FABC(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = CB2_EndScriptedWildBattle; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI; + CreateBattleStartTask(B_TRANSITION_BLUR, MUS_BATTLE20); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +// not used +void sub_807FAF8(void) +{ + LoadPlayerParty(); + CB2_EndWildBattle(); +} + +//not used +void sub_807FB08(void) +{ + ScriptContext2_Enable(); + FreezeEventObjects(); + sub_805C780(); + gMain.savedCallback = sub_807FAF8; + SavePlayerParty(); + sub_8159F40(); + CreateBattleStartTask(GetWildBattleTransition(), 0); +} + +void CB2_EndWildBattle(void) +{ + CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE); + ResetOamRange(0, 128); + if (IsPlayerDefeated(gBattleOutcome) == TRUE) + { + SetMainCallback2(CB2_WhiteOut); + } + else + { + SetMainCallback2(CB2_ReturnToField); + gFieldCallback = sub_807E3EC; + } +} + +void CB2_EndScriptedWildBattle(void) +{ + CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE); + ResetOamRange(0, 128); + if (IsPlayerDefeated(gBattleOutcome) == TRUE) + SetMainCallback2(CB2_WhiteOut); + else + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void CB2_EndMarowakBattle(void) +{ + CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE); + ResetOamRange(0, 128); + if (IsPlayerDefeated(gBattleOutcome)) + { + SetMainCallback2(CB2_WhiteOut); + } + else + { + if (gBattleOutcome == B_OUTCOME_WON) + gSpecialVar_Result = 0; + else + gSpecialVar_Result = 1; + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + } +} + +u8 BattleSetup_GetTerrainId(void) +{ + u16 tileBehavior; + s16 x, y; + + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if (MetatileBehavior_IsTallGrass_2(tileBehavior)) + return BATTLE_TERRAIN_GRASS; + if (MetatileBehavior_IsLongGrass(tileBehavior)) + return BATTLE_TERRAIN_LONG_GRASS; + if (MetatileBehavior_IsSandOrDeepSand(tileBehavior)) + return BATTLE_TERRAIN_SAND; + switch (gMapHeader.mapType) + { + case MAP_TYPE_TOWN: + case MAP_TYPE_CITY: + case MAP_TYPE_ROUTE: + break; + case MAP_TYPE_UNDERGROUND: + if (MetatileBehavior_IsIndoorEncounter(tileBehavior)) + return BATTLE_TERRAIN_BUILDING; + if (MetatileBehavior_IsSurfable(tileBehavior)) + return BATTLE_TERRAIN_POND; + return BATTLE_TERRAIN_CAVE; + case MAP_TYPE_INDOOR: + case MAP_TYPE_SECRET_BASE: + return BATTLE_TERRAIN_BUILDING; + case MAP_TYPE_UNDERWATER: + return BATTLE_TERRAIN_UNDERWATER; + case MAP_TYPE_OCEAN_ROUTE: + if (MetatileBehavior_IsSurfable(tileBehavior)) + return BATTLE_TERRAIN_WATER; + return BATTLE_TERRAIN_PLAIN; + } + if (MetatileBehavior_IsDeepSemiDeepOrSplashingWater(tileBehavior)) + return BATTLE_TERRAIN_WATER; + if (MetatileBehavior_IsSurfable(tileBehavior)) + return BATTLE_TERRAIN_POND; + if (MetatileBehavior_IsMountain(tileBehavior)) + return BATTLE_TERRAIN_MOUNTAIN; + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + { + if (MetatileBehavior_GetBridgeType(tileBehavior)) + return BATTLE_TERRAIN_POND; + if (MetatileBehavior_IsBridge(tileBehavior) == TRUE) + return BATTLE_TERRAIN_WATER; + } + return BATTLE_TERRAIN_PLAIN; +} + +u8 GetBattleTransitionTypeByMap(void) +{ + u16 tileBehavior; + s16 x, y; + + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if (Overworld_GetFlashLevel()) + return B_TRANSITION_HORIZONTAL_CORRUGATE; + if (!MetatileBehavior_IsSurfable(tileBehavior)) + { + switch (gMapHeader.mapType) + { + case MAP_TYPE_UNDERGROUND: + return B_TRANSITION_DISTORTED_WAVE; + case MAP_TYPE_UNDERWATER: + return B_TRANSITION_BIG_POKEBALL; + default: + return B_TRANSITION_BLUR; + } + } + return B_TRANSITION_BIG_POKEBALL; +} + +u16 GetSumOfPlayerPartyLevel(u8 numMons) +{ + u8 sum = 0; + s32 i; + + for (i = 0; i < PARTY_SIZE; ++i) + { + u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + + if (species != SPECIES_EGG && species != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0) + { + sum += GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + if (--numMons == 0) + break; + } + } + return sum; +} + +u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons) +{ + u8 i; + u8 sum; + u32 count = numMons; + + if (gTrainers[opponentId].partySize < count) + count = gTrainers[opponentId].partySize; + sum = 0; + switch (gTrainers[opponentId].partyFlags) + { + case 0: + { + const struct TrainerMonNoItemDefaultMoves *party; + + party = gTrainers[opponentId].party.NoItemDefaultMoves; + for (i = 0; i < count; ++i) + sum += party[i].lvl; + } + break; + case F_TRAINER_PARTY_CUSTOM_MOVESET: + { + const struct TrainerMonNoItemCustomMoves *party; + + party = gTrainers[opponentId].party.NoItemCustomMoves; + for (i = 0; i < count; ++i) + sum += party[i].lvl; + } + break; + case F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemDefaultMoves *party; + + party = gTrainers[opponentId].party.ItemDefaultMoves; + for (i = 0; i < count; ++i) + sum += party[i].lvl; + } + break; + case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemCustomMoves *party; + + party = gTrainers[opponentId].party.ItemCustomMoves; + for (i = 0; i < count; ++i) + sum += party[i].lvl; + } + break; + } + return sum; +} + +u8 GetWildBattleTransition(void) +{ + u8 transitionType = GetBattleTransitionTypeByMap(); + u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); + u8 playerLevel = GetSumOfPlayerPartyLevel(1); + + if (enemyLevel < playerLevel) + return sBattleTransitionTable_Wild[transitionType][0]; + else + return sBattleTransitionTable_Wild[transitionType][1]; +} + +u8 GetTrainerBattleTransition(void) +{ + u8 minPartyCount; + u8 transitionType; + u8 enemyLevel; + u8 playerLevel; + + if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) + return B_TRANSITION_BLUE; + if (gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_ELITE_FOUR_2) + { + if (gTrainerBattleOpponent_A == 410 || gTrainerBattleOpponent_A == 735) // TODO: replace these with enums + return B_TRANSITION_LORELEI; + if (gTrainerBattleOpponent_A == 411 || gTrainerBattleOpponent_A == 736) + return B_TRANSITION_BRUNO; + if (gTrainerBattleOpponent_A == 412 || gTrainerBattleOpponent_A == 737) + return B_TRANSITION_AGATHA; + if (gTrainerBattleOpponent_A == 413 || gTrainerBattleOpponent_A == 738) + return B_TRANSITION_LANCE; + return B_TRANSITION_BLUE; + } + if (gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_CHAMPION_2) + return B_TRANSITION_BLUE; + if (gTrainers[gTrainerBattleOpponent_A].doubleBattle == TRUE) + minPartyCount = 2; // double battles always at least have 2 pokemon. + else + minPartyCount = 1; + transitionType = GetBattleTransitionTypeByMap(); + enemyLevel = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent_A, minPartyCount); + playerLevel = GetSumOfPlayerPartyLevel(minPartyCount); + if (enemyLevel < playerLevel) + return sBattleTransitionTable_Trainer[transitionType][0]; + else + return sBattleTransitionTable_Trainer[transitionType][1]; +} + +u8 sub_8080060(void) +{ + u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); + u8 playerLevel = GetSumOfPlayerPartyLevel(1); + + if (enemyLevel < playerLevel) + return 4; + else + return 3; +} + +u32 TrainerBattleLoadArg32(const u8 *ptr) +{ + return T1_READ_32(ptr); +} + +u16 TrainerBattleLoadArg16(const u8 *ptr) +{ + return T1_READ_16(ptr); +} + +u8 TrainerBattleLoadArg8(const u8 *ptr) +{ + return T1_READ_8(ptr); +} + +u16 GetTrainerAFlag(void) +{ + return FLAG_TRAINER_FLAG_START + gTrainerBattleOpponent_A; +} + +bool32 IsPlayerDefeated(u32 battleOutcome) +{ + switch (battleOutcome) + { + case B_OUTCOME_LOST: + case B_OUTCOME_DREW: + return TRUE; + case B_OUTCOME_WON: + case B_OUTCOME_RAN: + case B_OUTCOME_PLAYER_TELEPORTED: + case B_OUTCOME_MON_FLED: + case B_OUTCOME_CAUGHT: + return FALSE; + default: + return FALSE; + } +} + +void InitTrainerBattleVariables(void) +{ + sTrainerBattleMode = 0; + gTrainerBattleOpponent_A = 0; + sTrainerEventObjectLocalId = 0; + sTrainerAIntroSpeech = NULL; + sTrainerADefeatSpeech = NULL; + sTrainerBDefeatSpeech = NULL; + sTrainerCannotBattleSpeech = NULL; + sTrainerBattleEndScript = NULL; + sTrainerABattleScriptRetAddr = NULL; + gUnknown_20386CC = 0; +} + +static inline void SetU8(void *ptr, u8 value) +{ + *(u8 *)(ptr) = value; +} + +static inline void SetU16(void *ptr, u16 value) +{ + *(u16 *)(ptr) = value; +} + +static inline void SetU32(void *ptr, u32 value) +{ + *(u32 *)(ptr) = value; +} + +static inline void SetPtr(const void *ptr, const void* value) +{ + *(const void **)(ptr) = value; +} + +void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8 *data) +{ + while (1) + { + switch (specs->ptrType) + { + case TRAINER_PARAM_LOAD_VAL_8BIT: + SetU8(specs->varPtr, TrainerBattleLoadArg8(data)); + data += 1; + break; + case TRAINER_PARAM_LOAD_VAL_16BIT: + SetU16(specs->varPtr, TrainerBattleLoadArg16(data)); + data += 2; + break; + case TRAINER_PARAM_LOAD_VAL_32BIT: + SetU32(specs->varPtr, TrainerBattleLoadArg32(data)); + data += 4; + break; + case TRAINER_PARAM_CLEAR_VAL_8BIT: + SetU8(specs->varPtr, 0); + break; + case TRAINER_PARAM_CLEAR_VAL_16BIT: + SetU16(specs->varPtr, 0); + break; + case TRAINER_PARAM_CLEAR_VAL_32BIT: + SetU32(specs->varPtr, 0); + break; + case TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR: + SetPtr(specs->varPtr, data); + return; + } + ++specs; + } +} + +void SetMapVarsToTrainer(void) +{ + if (sTrainerEventObjectLocalId != 0) + { + gSpecialVar_LastTalked = sTrainerEventObjectLocalId; + gSelectedEventObject = GetFieldObjectIdByLocalIdAndMap(sTrainerEventObjectLocalId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); + } +} + +const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data) +{ + InitTrainerBattleVariables(); + sTrainerBattleMode = TrainerBattleLoadArg8(data); + switch (sTrainerBattleMode) + { + case TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT: + TrainerBattleLoadArgs(sOrdinaryNoIntroBattleParams, data); + return EventScript_DoTrainerBattle; + case TRAINER_BATTLE_DOUBLE: + TrainerBattleLoadArgs(sDoubleBattleParams, data); + SetMapVarsToTrainer(); + return EventScript_TryDoDoubleTrainerBattle; + case TRAINER_BATTLE_CONTINUE_SCRIPT: + case TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC: + TrainerBattleLoadArgs(sContinueScriptBattleParams, data); + SetMapVarsToTrainer(); + return EventScript_TryDoNormalTrainerBattle; + case TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE: + case TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC: + TrainerBattleLoadArgs(sContinueScriptDoubleBattleParams, data); + SetMapVarsToTrainer(); + return EventScript_TryDoDoubleTrainerBattle; + case TRAINER_BATTLE_REMATCH_DOUBLE: + sub_811231C(); + TrainerBattleLoadArgs(sDoubleBattleParams, data); + SetMapVarsToTrainer(); + gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A); + return EventScript_TryDoDoubleRematchBattle; + case TRAINER_BATTLE_REMATCH: + sub_811231C(); + TrainerBattleLoadArgs(sOrdinaryBattleParams, data); + SetMapVarsToTrainer(); + gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A); + return EventScript_TryDoRematchBattle; + case TRAINER_BATTLE_TUTORIAL: + TrainerBattleLoadArgs(gUnknown_83C6A20, data); + return EventScript_DoTrainerBattle; + default: + TrainerBattleLoadArgs(sOrdinaryBattleParams, data); + SetMapVarsToTrainer(); + return EventScript_TryDoNormalTrainerBattle; + } +} + +void ConfigureAndSetUpOneTrainerBattle(u8 trainerEventObjId, const u8 *trainerScript) +{ + gSelectedEventObject = trainerEventObjId; + gSpecialVar_LastTalked = gMapObjects[trainerEventObjId].localId; + BattleSetup_ConfigureTrainerBattle(trainerScript + 1); + ScriptContext1_SetupScript(gUnknown_81A4EB4); + ScriptContext2_Enable(); +} + +bool32 GetTrainerFlagFromScriptPointer(const u8 *data) +{ + u32 flag = TrainerBattleLoadArg16(data + 2); + + return FlagGet(FLAG_TRAINER_FLAG_START + flag); +} + +void SetUpTrainerMovement(void) +{ + struct MapObject *eventObject = &gMapObjects[gSelectedEventObject]; + + SetTrainerMovementType(eventObject, GetTrainerFacingDirectionMovementType(eventObject->facingDirection)); +} + +u8 GetTrainerBattleMode(void) +{ + return sTrainerBattleMode; +} + +u16 sub_80803D8(void) +{ + return gUnknown_20386CC; +} + +u16 GetTrainerFlag(void) +{ + return FlagGet(GetTrainerAFlag()); +} + +void SetBattledTrainerFlag(void) +{ + FlagSet(GetTrainerAFlag()); +} + +// not used +void SetBattledTrainerFlag2(void) +{ + FlagSet(GetTrainerAFlag()); +} + +bool8 HasTrainerBeenFought(u16 trainerId) +{ + return FlagGet(FLAG_TRAINER_FLAG_START + trainerId); +} + +void SetTrainerFlag(u16 trainerId) +{ + FlagSet(FLAG_TRAINER_FLAG_START + trainerId); +} + +void ClearTrainerFlag(u16 trainerId) +{ + FlagClear(FLAG_TRAINER_FLAG_START + trainerId); +} + +void BattleSetup_StartTrainerBattle(void) +{ + gBattleTypeFlags = BATTLE_TYPE_TRAINER; + if (GetTrainerBattleMode() == TRAINER_BATTLE_TUTORIAL + && sub_80803D8() & 3) + gBattleTypeFlags |= BATTLE_TYPE_FIRST_BATTLE; + gMain.savedCallback = CB2_EndTrainerBattle; + DoTrainerBattle(); + ScriptContext1_Stop(); +} + +void CB2_EndTrainerBattle(void) +{ + if (sTrainerBattleMode == TRAINER_BATTLE_TUTORIAL) + { + if (IsPlayerDefeated(gBattleOutcome) == TRUE) + { + gSpecialVar_Result = 1; + if (gUnknown_20386CC & 1) + { + sp000_heal_pokemon(); + } + else + { + SetMainCallback2(CB2_WhiteOut); + return; + } + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + SetBattledTrainerFlag(); + sub_81139BC(); + } + else + { + gSpecialVar_Result = 0; + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + SetBattledTrainerFlag(); + sub_81139BC(); + } + + } + else + { + if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + } + else if (IsPlayerDefeated(gBattleOutcome) == TRUE) + { + SetMainCallback2(CB2_WhiteOut); + } + else + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + SetBattledTrainerFlag(); + sub_81139BC(); + } + } +} + +void CB2_EndRematchBattle(void) +{ + if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + } + else if (IsPlayerDefeated(gBattleOutcome) == TRUE) + { + SetMainCallback2(CB2_WhiteOut); + } + else + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + SetBattledTrainerFlag(); + sub_810CDE8(); + sub_81138F8(); + } +} + +void BattleSetup_StartRematchBattle(void) +{ + gBattleTypeFlags = BATTLE_TYPE_TRAINER; + gMain.savedCallback = CB2_EndRematchBattle; + DoTrainerBattle(); + ScriptContext1_Stop(); +} + +void ShowTrainerIntroSpeech(void) +{ + ShowFieldMessage(GetIntroSpeechOfApproachingTrainer()); +} + +const u8 *BattleSetup_GetScriptAddrAfterBattle(void) +{ + if (sTrainerBattleEndScript != NULL) + return sTrainerBattleEndScript; + else + return gUnknown_81C555B; +} + +const u8 *BattleSetup_GetTrainerPostBattleScript(void) +{ + if (sTrainerABattleScriptRetAddr != NULL) + return sTrainerABattleScriptRetAddr; + else + return gUnknown_81C555B; +} + +void ShowTrainerCantBattleSpeech(void) +{ + ShowFieldMessage(GetTrainerCantBattleSpeech()); +} + +void SetUpTrainerEncounterMusic(void) +{ + u16 music; + + if ((u8)(gUnknown_203ADFA - 2) > 1 + && sTrainerBattleMode != TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC + && sTrainerBattleMode != TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC) + { + switch (GetTrainerEncounterMusicId(gTrainerBattleOpponent_A)) + { + case 1: // TODO: replace these with enums + case 2: + case 9: + music = MUS_SHOUJO; + break; + case 0: + case 4: + case 5: + case 8: + case 10: + case 11: + case 12: + case 13: + music = MUS_SHOUNEN; + break; + default: + music = MUS_ROCKET; + break; + } + PlayNewMapMusic(music); + } +} + +const u8 *ReturnEmptyStringIfNull(const u8 *string) +{ + if (string == NULL) + return gString_Dummy; + else + return string; +} + +const u8 *GetIntroSpeechOfApproachingTrainer(void) +{ + return ReturnEmptyStringIfNull(sTrainerAIntroSpeech); +} + +const u8 *GetTrainerALoseText(void) +{ + const u8 *string = sTrainerADefeatSpeech; + + StringExpandPlaceholders(gStringVar4, ReturnEmptyStringIfNull(string)); + return gStringVar4; +} + +const u8 *GetTrainerBLoseText(void) +{ + StringExpandPlaceholders(gStringVar4, ReturnEmptyStringIfNull(sTrainerBDefeatSpeech)); + return gStringVar4; +} + +const u8 *GetTrainerCantBattleSpeech(void) +{ + return ReturnEmptyStringIfNull(sTrainerCannotBattleSpeech); +} diff --git a/src/fame_checker.c b/src/fame_checker.c index e803a9700..945b5ffe6 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -878,7 +878,7 @@ static void FC_DestroyWindow(u8 windowId) static u8 AdjustGiovanniIndexIfBeatenInGym(u8 a0) { - if (HasTrainerAlreadyBeenFought(0x15e) == TRUE) + if (HasTrainerBeenFought(0x15e) == TRUE) { if (a0 == 9) return FAMECHECKER_GIOVANNI; diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 56a607fff..90abda81f 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -16,6 +16,7 @@ #include "field_map_obj.h" #include "constants/songs.h" #include "constants/map_objects.h" +#include "constants/map_types.h" static void task08_080C9820(u8 taskId); static void sub_80C98FC(u8 taskId); diff --git a/src/item_use.c b/src/item_use.c index 8602d6f72..416edfe88 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -42,6 +42,7 @@ #include "constants/maps.h" #include "constants/moves.h" #include "constants/songs.h" +#include "constants/map_types.h" EWRAM_DATA void (*sItemUseOnFieldCB)(u8 taskId) = NULL; @@ -259,7 +260,7 @@ bool8 ItemUseCheckFunc_Rod(void) { if (MetatileBehavior_IsSurfable(behavior) && !MapGridIsImpassableAt(x, y)) return TRUE; - if (MetatileBehavior_ReturnFalse_6(behavior) == TRUE) + if (MetatileBehavior_IsBridge(behavior) == TRUE) return TRUE; } return FALSE; diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 62a102a09..bca99d38f 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -69,7 +69,7 @@ bool8 MetatileBehavior_IsMB21OrSand(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsMB21OrWaterfallBottom(u8 metatileBehavior) +bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior) { if(metatileBehavior == MB_21 || metatileBehavior == MB_WATERFALL_BOTTOM) return TRUE; @@ -428,11 +428,11 @@ bool8 MetatileBehavior_IsTallGrass_2(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_ReturnFalse_3(u8 metatileBehavior) { return FALSE; } +bool8 MetatileBehavior_IsLongGrass(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_ReturnFalse_4(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_ReturnFalse_5(u8 metatileBehavior) { return FALSE; } -bool8 MetatileBehavior_ReturnFalse_6(u8 metatileBehavior) { return FALSE; } -bool8 MetatileBehavior_ReturnFalse_7(u8 metatileBehavior) { return FALSE; } +bool8 MetatileBehavior_IsBridge(u8 metatileBehavior) { return FALSE; } +bool8 MetatileBehavior_GetBridgeType(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_UnusedIsMB_01(u8 metatileBehavior) { @@ -450,7 +450,7 @@ bool8 MetatileBehavior_UnusedIsTallGrass(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsMB0B(u8 metatileBehavior) +bool8 MetatileBehavior_IsIndoorEncounter(u8 metatileBehavior) { if(metatileBehavior == MB_0B) return TRUE; @@ -458,7 +458,7 @@ bool8 MetatileBehavior_IsMB0B(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsMB0C(u8 metatileBehavior) +bool8 MetatileBehavior_IsMountain(u8 metatileBehavior) { if(metatileBehavior == MB_0C) return TRUE; diff --git a/src/psychic.c b/src/psychic.c index 662320a2b..b37820d02 100644 --- a/src/psychic.c +++ b/src/psychic.c @@ -47,7 +47,7 @@ const struct SpriteTemplate gUnknown_83E6DF8 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6DF4, - .callback = sub_8075D9C, + .callback = AnimSparklingParticle, }; const struct SpriteTemplate gUnknown_83E6E10 = @@ -376,7 +376,7 @@ const struct SpriteTemplate gUnknown_83E7148 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7144, - .callback = sub_8075D9C, + .callback = AnimSparklingParticle, }; static const union AffineAnimCmd gUnknown_83E7160[] = diff --git a/src/quest_log_8150454.c b/src/quest_log_8150454.c index 3d61dee72..fbd3b4487 100644 --- a/src/quest_log_8150454.c +++ b/src/quest_log_8150454.c @@ -88,7 +88,7 @@ void sub_8150530(void) else { sub_81507BC(mapObject, sub_805C808(4)); - StartSpriteAnim(sprite, sub_80634F0(mapObject->mapobj_unk_18)); + StartSpriteAnim(sprite, sub_80634F0(mapObject->facingDirection)); } } @@ -103,7 +103,7 @@ void sub_81505C4(u8 taskId) FieldObjectClearAnimIfSpecialAnimActive(mapObject); mapObject->mapobj_bit_11 = TRUE; sub_81507BC(mapObject, sub_805C808(4)); - StartSpriteAnim(sprite, sub_80634F0(mapObject->mapobj_unk_18)); + StartSpriteAnim(sprite, sub_80634F0(mapObject->facingDirection)); gTasks[taskId].data[0]++; gTasks[taskId].data[1] = 0; break; diff --git a/src/scrcmd.c b/src/scrcmd.c index ae994fceb..540474a7e 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1916,7 +1916,7 @@ bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx) { u16 index = VarGet(ScriptReadHalfword(ctx)); - ctx->comparisonResult = HasTrainerAlreadyBeenFought(index); + ctx->comparisonResult = HasTrainerBeenFought(index); return FALSE; } diff --git a/src/unk_8159F40.c b/src/unk_8159F40.c index ab27cea63..a9a567c51 100644 --- a/src/unk_8159F40.c +++ b/src/unk_8159F40.c @@ -78,7 +78,7 @@ void sub_815A008(struct QuestLog * questLog) questLog->unk_008[i].mapobj_bit_24 = gMapObjects[i].mapobj_bit_24; questLog->unk_008[i].mapobj_bit_25 = gMapObjects[i].mapobj_bit_25; questLog->unk_008[i].mapobj_bit_26 = gMapObjects[i].mapobj_bit_26; - questLog->unk_008[i].mapobj_unk_18 = gMapObjects[i].mapobj_unk_18; + questLog->unk_008[i].mapobj_unk_18 = gMapObjects[i].facingDirection; questLog->unk_008[i].mapobj_unk_0B_0 = gMapObjects[i].mapobj_unk_0B_0; questLog->unk_008[i].elevation = gMapObjects[i].elevation; questLog->unk_008[i].graphicsId = gMapObjects[i].graphicsId; diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 2c339cceb..15dc30234 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -928,7 +928,7 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0) if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[vsSeekerIdx]) == 1) { r8 = sVsSeeker->trainerInfo[vsSeekerIdx].trainerIdx; - if (!HasTrainerAlreadyBeenFought(r8)) + if (!HasTrainerBeenFought(r8)) { StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], gUnknown_8453F60); sVsSeeker->trainerHasNotYetBeenFought = 1; @@ -1024,7 +1024,7 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0) "\tadds r0, r5\n" "\tldrh r0, [r0, 0x4]\n" "\tmov r8, r0\n" - "\tbl HasTrainerAlreadyBeenFought\n" + "\tbl HasTrainerBeenFought\n" "\tlsls r0, 24\n" "\tcmp r0, 0\n" "\tbne _0810CA20\n" @@ -1236,10 +1236,10 @@ void sub_810CB90(void) TryGetFieldObjectIdByLocalIdAndMap(r4[r8].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &sp0); r4_2 = &gMapObjects[sp0]; sub_810CF54(&r4[r8]); // You are using this function incorrectly. Please consult the manual. - sub_805FE7C(r4_2, gUnknown_8453F67[r4_2->mapobj_unk_18]); + sub_805FE7C(r4_2, gUnknown_8453F67[r4_2->facingDirection]); gSaveBlock1Ptr->trainerRematches[r4[r8].localId] = 0; if (gSelectedEventObject == sp0) - r4_2->animPattern = gUnknown_8453F67[r4_2->mapobj_unk_18]; + r4_2->animPattern = gUnknown_8453F67[r4_2->facingDirection]; else r4_2->animPattern = 0x08; } @@ -1316,7 +1316,7 @@ static bool8 HasRematchTrainerAlreadyBeenFought(const VsSeekerData *vsSeekerData if (rematchIdx == -1) return FALSE; - if (!HasTrainerAlreadyBeenFought(vsSeekerData[rematchIdx].trainerIdxs[0])) + if (!HasTrainerBeenFought(vsSeekerData[rematchIdx].trainerIdxs[0])) return FALSE; return TRUE; } @@ -1350,7 +1350,7 @@ static s32 sub_810CE10(const VsSeekerData * a0, u16 a1) return -1; } -s32 sub_810CE64(u16 a0) +s32 GetRematchTrainerId(u16 a0) { u8 i; u8 j; @@ -1526,7 +1526,7 @@ static u8 GetNextAvailableRematchTrainer(const VsSeekerData * vsSeekerData, u16 return j - 1; if (vsSeekerData[i].trainerIdxs[j] == 0xffff) continue; - if (HasTrainerAlreadyBeenFought(vsSeekerData[i].trainerIdxs[j])) + if (HasTrainerBeenFought(vsSeekerData[i].trainerIdxs[j])) continue; return j; } @@ -1547,7 +1547,7 @@ static u8 GetRematchableTrainerLocalId(void) { if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[i]) == 1) { - if (HasTrainerAlreadyBeenFought(sVsSeeker->trainerInfo[i].trainerIdx) != 1 || GetNextAvailableRematchTrainer(sVsSeekerData, sVsSeeker->trainerInfo[i].trainerIdx, &idx)) + if (HasTrainerBeenFought(sVsSeeker->trainerInfo[i].trainerIdx) != 1 || GetNextAvailableRematchTrainer(sVsSeekerData, sVsSeeker->trainerInfo[i].trainerIdx, &idx)) return sVsSeeker->trainerInfo[i].localId; } } diff --git a/sym_ewram.txt b/sym_ewram.txt index 8dd5a9f24..b9df77ff9 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -327,35 +327,8 @@ gUnknown_20386A4: @ 20386A4 gUnknown_20386A8: @ 20386A8 .space 0x4 -sTrainerBattleMode: @ 20386AC - .space 0x2 - -gTrainerBattleOpponent_A: @ 20386AE - .space 0x2 - -sTrainerEventObjectLocalId: @ 20386B0 - .space 0x4 - -sTrainerAIntroSpeech: @ 20386B4 - .space 0x4 - -sTrainerADefeatSpeech: @ 20386B8 - .space 0x4 - -sTrainerBDefeatSpeech: @ 20386BC - .space 0x4 - -sTrainerCannotBattleSpeech: @ 20386C0 - .space 0x4 - -sTrainerBattleEndScript: @ 20386C4 - .space 0x4 - -sTrainerABattleScriptRetAddr: @ 20386C8 - .space 0x4 - -gUnknown_20386CC: @ 20386CC - .space 0x4 + .include "src/battle_setup.o" + .align 2 gUnknown_20386D0: @ 20386D0 .space 0xC |