Document Battle Pie

This commit is contained in:
DizzyEggg
2018-11-12 14:35:56 +01:00
parent 3b3cffac44
commit d5abd7b696
19 changed files with 464 additions and 421 deletions
+173 -90
View File
@@ -1,4 +1,5 @@
#include "global.h"
#include "battle_pike.h"
#include "event_data.h"
#include "frontier_util.h"
#include "fieldmap.h"
@@ -45,60 +46,142 @@ struct Unk0861231C
struct PikeWildMon
{
u16 species;
u8 unk2;
u8 levelDelta;
u16 moves[4];
};
extern void (* const gUnknown_086125F8[])(void);
extern const struct Unk0861231C gUnknown_0861231C[];
extern const struct PikeWildMon *const *const gUnknown_08612314[2];
extern const u16 gUnknown_086123E4[][6];
extern const u8 gUnknown_0861266C[];
extern bool8 (* const gUnknown_08612688[])(struct Task *);
extern const struct BattleFrontierTrainer gBattleFrontierTrainers[];
extern const u8 gUnknown_086125DC[][4];
extern const u8 gUnknown_08612675[][3];
extern const u32 gUnknown_08612690[];
// IWRAM bss
IWRAM_DATA u8 sRoomType;
IWRAM_DATA u8 sStatusMon;
IWRAM_DATA bool8 gUnknown_0300128E;
IWRAM_DATA u32 sStatusFlags;
IWRAM_DATA u8 gUnknown_03001294;
static IWRAM_DATA u8 sRoomType;
static IWRAM_DATA u8 sStatusMon;
static IWRAM_DATA bool8 sUnknown_0300128E;
static IWRAM_DATA u32 sStatusFlags;
static IWRAM_DATA u8 sUnknown_03001294;
// This file's functions.
u8 GetNextRoomType(void);
void PrepareOneTrainer(bool8 difficult);
u16 sub_81A7B58(void);
void PrepareTwoTrainers(void);
void sub_81A5030(u8);
void TryHealMons(u8 healCount);
void sub_81A7EE4(u8 taskId);
bool8 AtLeastTwoAliveMons(void);
bool8 sub_81A7974(void);
u8 sub_81A890C(u16 species);
bool8 CanEncounterWildMon(u8 monLevel);
u8 sub_81A8590(u8);
static void sub_81A705C(void);
static void sub_81A7140(void);
static void sub_81A7248(void);
static void sub_81A73B8(void);
static void sub_81A7070(void);
static void sub_81A73EC(void);
static void sub_81A7400(void);
static void sub_81A740C(void);
static void sub_81A7418(void);
static void nullsub_76(void);
static void nullsub_124(void);
static void sub_81A7468(void);
static void sub_81A74CC(void);
static void sub_81A74E0(void);
static void sub_81A7508(void);
static void sub_81A7580(void);
static void sub_81A8090(void);
static void sub_81A80DC(void);
static void sub_81A825C(void);
static void sub_81A827C(void);
static void sub_81A84B4(void);
static void sub_81A84EC(void);
static void sub_81A863C(void);
static void sub_81A8658(void);
static void sub_81A869C(void);
static void sub_81A86C0(void);
static void sub_81A8794(void);
static void sub_81A87E8(void);
static void sub_81A8830(void);
static u8 GetNextRoomType(void);
static void PrepareOneTrainer(bool8 difficult);
static u16 sub_81A7B58(void);
static void PrepareTwoTrainers(void);
static void TryHealMons(u8 healCount);
static void sub_81A7EE4(u8 taskId);
static bool8 AtLeastTwoAliveMons(void);
static u8 SpeciesToPikeMonId(u16 species);
static bool8 CanEncounterWildMon(u8 monLevel);
static u8 sub_81A8590(u8);
static bool8 sub_81A7D8C(struct Task *task);
static bool8 sub_81A7DE8(struct Task *task);
u8 GetBattlePikeWildMonHeaderId(void);
bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate);
bool8 InBattlePike(void);
// Const rom data.
static const u8 gUnknown_086125DC[][4] =
{
{0x23, 0x46, 0x23, 0x01},
{0x04, 0x09, 0x05, 0x00},
{0x15, 0x2a, 0x15, 0x01},
{0x1c, 0x38, 0x1c, 0x01},
{0x15, 0x2a, 0x15, 0x01},
{0x1c, 0x8c, 0x38, 0x01},
{0x15, 0x46, 0x23, 0x00},
};
static void (* const gUnknown_086125F8[])(void) =
{
sub_81A705C,
sub_81A7140,
sub_81A7248,
sub_81A73B8,
sub_81A7070,
sub_81A73EC,
sub_81A7400,
sub_81A740C,
sub_81A7418,
nullsub_76,
nullsub_124,
sub_81A7468,
sub_81A74CC,
sub_81A74E0,
sub_81A7508,
sub_81A7580,
sub_81A8090,
sub_81A80DC,
sub_81A825C,
sub_81A827C,
sub_81A84B4,
sub_81A84EC,
sub_81A863C,
sub_81A8658,
sub_81A869C,
sub_81A86C0,
sub_81A8794,
sub_81A87E8,
sub_81A8830
};
static const u8 gUnknown_0861266C[] = {3, 3, 1, 0, 0, 2, 2, 1, 4};
static const u8 gUnknown_08612675[][3] =
{
{2, 1, 0},
{2, 0, 1},
{1, 2, 0},
{1, 0, 2},
{0, 2, 1},
{0, 1, 2},
};
static bool8 (* const gUnknown_08612688[])(struct Task *) =
{
sub_81A7D8C, sub_81A7DE8
};
static const u32 gUnknown_08612690[] = {0x400, 0x800};
// code
void sub_81A703C(void)
void CallBattlePikeFunction(void)
{
gUnknown_086125F8[gSpecialVar_0x8004]();
}
void sub_81A705C(void)
static void sub_81A705C(void)
{
u8 roomType = GetNextRoomType();
sRoomType = roomType;
}
void sub_81A7070(void)
static void sub_81A7070(void)
{
bool32 setPerson1, setPerson2;
u32 person1;
@@ -163,7 +246,7 @@ void sub_81A7070(void)
VarSet(VAR_OBJ_GFX_ID_1, person2);
}
void sub_81A7140(void)
static void sub_81A7140(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
@@ -190,7 +273,7 @@ void sub_81A7140(void)
}
}
void sub_81A7248(void)
static void sub_81A7248(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
@@ -230,7 +313,7 @@ void sub_81A7248(void)
}
}
void sub_81A73B8(void)
static void sub_81A73B8(void)
{
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum >= 15)
gSpecialVar_Result = TRUE;
@@ -238,22 +321,22 @@ void sub_81A73B8(void)
gSpecialVar_Result = FALSE;
}
void sub_81A73EC(void)
static void sub_81A73EC(void)
{
gSpecialVar_Result = sRoomType;
}
void sub_81A7400(void)
static void sub_81A7400(void)
{
gUnknown_0300128E = TRUE;
sUnknown_0300128E = TRUE;
}
void sub_81A740C(void)
static void sub_81A740C(void)
{
gUnknown_0300128E = FALSE;
sUnknown_0300128E = FALSE;
}
void sub_81A7418(void)
static void sub_81A7418(void)
{
gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005;
VarSet(VAR_TEMP_0, 0);
@@ -262,17 +345,17 @@ void sub_81A7418(void)
TrySavingData(SAVE_LINK);
}
void nullsub_76(void)
static void nullsub_76(void)
{
}
void nullsub_124(void)
static void nullsub_124(void)
{
}
void sub_81A7468(void)
static void sub_81A7468(void)
{
switch (sStatusFlags)
{
@@ -294,38 +377,38 @@ void sub_81A7468(void)
}
}
void sub_81A74CC(void)
static void sub_81A74CC(void)
{
gSpecialVar_Result = sStatusMon;
}
void sub_81A74E0(void)
static void sub_81A74E0(void)
{
u16 toHeal = (Random() % 2) + 1;
TryHealMons(toHeal);
gSpecialVar_Result = toHeal;
}
void sub_81A7508(void)
static void sub_81A7508(void)
{
s32 id;
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= 4)
id = gUnknown_0861231C[gUnknown_03001294].unk2;
id = gUnknown_0861231C[sUnknown_03001294].unk2;
else if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= 10)
id = gUnknown_0861231C[gUnknown_03001294].unk3;
id = gUnknown_0861231C[sUnknown_03001294].unk3;
else
id = gUnknown_0861231C[gUnknown_03001294].unk4;
id = gUnknown_0861231C[sUnknown_03001294].unk4;
FrontierSpeechToString(gUnknown_086123E4[id]);
}
void sub_81A7580(void)
static void sub_81A7580(void)
{
CreateTask(sub_81A7EE4, 2);
}
void HealMon(struct Pokemon *mon)
static void HealMon(struct Pokemon *mon)
{
u8 i;
u16 hp;
@@ -355,7 +438,7 @@ void HealMon(struct Pokemon *mon)
SetMonData(mon, MON_DATA_STATUS, data);
}
bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status)
static bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status)
{
u8 ability = GetMonAbility(mon);
bool8 ret = FALSE;
@@ -386,7 +469,7 @@ bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status)
return ret;
}
bool8 DoesTypePreventStatus(u16 species, u32 status)
static bool8 DoesTypePreventStatus(u16 species, u32 status)
{
bool8 ret = FALSE;
@@ -416,7 +499,7 @@ bool8 DoesTypePreventStatus(u16 species, u32 status)
return ret;
}
bool8 TryInflictRandomStatus(void)
static bool8 TryInflictRandomStatus(void)
{
u8 j, i;
u8 count;
@@ -527,7 +610,7 @@ bool8 TryInflictRandomStatus(void)
return TRUE;
}
bool8 AtLeastOneHealthyMon(void)
static bool8 AtLeastOneHealthyMon(void)
{
u8 i;
u8 healthyMonsCount;
@@ -559,7 +642,7 @@ bool8 AtLeastOneHealthyMon(void)
return TRUE;
}
u8 GetNextRoomType(void)
static u8 GetNextRoomType(void)
{
u8 sp[8];
u8 i;
@@ -632,15 +715,15 @@ u8 GetNextRoomType(void)
return ret;
}
u16 sub_81A7B58(void)
static u16 sub_81A7B58(void)
{
gUnknown_03001294 = Random() % 25;
return gUnknown_0861231C[gUnknown_03001294].unk0;
sUnknown_03001294 = Random() % 25;
return gUnknown_0861231C[sUnknown_03001294].unk0;
}
u8 sub_81A7B84(void)
static u8 sub_81A7B84(void)
{
return gUnknown_0300128E;
return sUnknown_0300128E;
}
bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate)
@@ -652,7 +735,7 @@ bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate)
const struct PikeWildMon *const *const wildMons = gUnknown_08612314[lvlMode];
u32 abilityBit;
s32 pikeMonId = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL);
pikeMonId = sub_81A890C(pikeMonId);
pikeMonId = SpeciesToPikeMonId(pikeMonId);
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50)
{
@@ -663,14 +746,14 @@ bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate)
}
else
{
monLevel -= wildMons[headerId][pikeMonId].unk2;
monLevel -= wildMons[headerId][pikeMonId].levelDelta;
if (monLevel < 60)
monLevel = 60;
}
}
else
{
monLevel = 50 - wildMons[headerId][pikeMonId].unk2;
monLevel = 50 - wildMons[headerId][pikeMonId].levelDelta;
}
if (checkKeenEyeIntimidate == TRUE && !CanEncounterWildMon(monLevel))
@@ -710,12 +793,12 @@ u8 GetBattlePikeWildMonHeaderId(void)
return headerId;
}
void sub_81A7D54(u8 taskId)
static void sub_81A7D54(u8 taskId)
{
while (gUnknown_08612688[gTasks[taskId].data[0]](&gTasks[taskId]));
}
bool8 sub_81A7D8C(struct Task *task)
static bool8 sub_81A7D8C(struct Task *task)
{
if (task->data[6] == 0 || --task->data[6] == 0)
{
@@ -734,7 +817,7 @@ bool8 sub_81A7D8C(struct Task *task)
return FALSE;
}
bool8 sub_81A7DE8(struct Task *task)
static bool8 sub_81A7DE8(struct Task *task)
{
if (task->data[6] == 0 || --task->data[6] == 0)
{
@@ -760,7 +843,7 @@ bool8 sub_81A7DE8(struct Task *task)
return FALSE;
}
void sub_81A7E60(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4)
static void sub_81A7E60(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4)
{
u8 taskId = CreateTask(sub_81A7D54, 3);
@@ -772,7 +855,7 @@ void sub_81A7E60(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4)
gTasks[taskId].data[6] = a0;
}
bool8 sub_81A7EC4(void)
static bool8 sub_81A7EC4(void)
{
if (FindTaskIdByFunc(sub_81A7D54) == 0xFF)
return TRUE;
@@ -780,7 +863,7 @@ bool8 sub_81A7EC4(void)
return FALSE;
}
void sub_81A7EE4(u8 taskId)
static void sub_81A7EE4(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
@@ -797,7 +880,7 @@ void sub_81A7EE4(u8 taskId)
}
}
void TryHealMons(u8 healCount)
static void TryHealMons(u8 healCount)
{
u8 j, i, k;
u8 indices[3];
@@ -855,7 +938,7 @@ void TryHealMons(u8 healCount)
}
}
void sub_81A8090(void)
static void sub_81A8090(void)
{
gSpecialVar_Result = InBattlePike();
}
@@ -866,7 +949,7 @@ bool8 InBattlePike(void)
|| gMapHeader.mapLayoutId == 358 || gMapHeader.mapLayoutId == 359);
}
void sub_81A80DC(void)
static void sub_81A80DC(void)
{
u8 i, count, id;
u8 *allocated;
@@ -908,17 +991,17 @@ void sub_81A80DC(void)
}
}
void sub_81A825C(void)
static void sub_81A825C(void)
{
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_E10_1;
}
void sub_81A827C(void)
static void sub_81A827C(void)
{
gSpecialVar_Result = gUnknown_0861266C[gSaveBlock2Ptr->frontier.field_E10_2];
}
void PrepareOneTrainer(bool8 difficult)
static void PrepareOneTrainer(bool8 difficult)
{
s32 i;
u8 lvlMode;
@@ -950,7 +1033,7 @@ void PrepareOneTrainer(bool8 difficult)
gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = gTrainerBattleOpponent_A;
}
void PrepareTwoTrainers(void)
static void PrepareTwoTrainers(void)
{
s32 i;
u16 trainerId;
@@ -989,7 +1072,7 @@ void PrepareTwoTrainers(void)
gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 2] = gTrainerBattleOpponent_B;
}
void sub_81A84B4(void)
static void sub_81A84B4(void)
{
u8 i;
@@ -997,7 +1080,7 @@ void sub_81A84B4(void)
gSaveBlock2Ptr->frontier.field_CB4[i] |= 0xFFFF;
}
void sub_81A84EC(void)
static void sub_81A84EC(void)
{
if (gSpecialVar_0x8005 == 0)
{
@@ -1011,7 +1094,7 @@ void sub_81A84EC(void)
}
}
bool8 AtLeastTwoAliveMons(void)
static bool8 AtLeastTwoAliveMons(void)
{
struct Pokemon *mon;
u8 i, countDead;
@@ -1030,7 +1113,7 @@ bool8 AtLeastTwoAliveMons(void)
return TRUE;
}
u8 sub_81A8590(u8 arg0)
static u8 sub_81A8590(u8 arg0)
{
u8 symbolsCount;
@@ -1062,12 +1145,12 @@ u8 sub_81A8590(u8 arg0)
return ret;
}
void sub_81A863C(void)
static void sub_81A863C(void)
{
gSpecialVar_Result = sub_81A8590(0);
}
void sub_81A8658(void)
static void sub_81A8658(void)
{
u8 toHealCount = gUnknown_08612675[gSaveBlock2Ptr->frontier.field_E10_1][gSpecialVar_0x8007];
@@ -1075,12 +1158,12 @@ void sub_81A8658(void)
gSpecialVar_Result = toHealCount;
}
void sub_81A869C(void)
static void sub_81A869C(void)
{
gSaveBlock2Ptr->frontier.field_E10_3 = gSpecialVar_0x8005;
}
void sub_81A86C0(void)
static void sub_81A86C0(void)
{
u8 i, j;
@@ -1119,7 +1202,7 @@ void sub_81A86C0(void)
}
}
void sub_81A8794(void)
static void sub_81A8794(void)
{
u8 i;
@@ -1131,7 +1214,7 @@ void sub_81A8794(void)
}
}
void sub_81A87E8(void)
static void sub_81A87E8(void)
{
u8 i;
@@ -1143,7 +1226,7 @@ void sub_81A87E8(void)
}
}
void sub_81A8830(void)
static void sub_81A8830(void)
{
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
@@ -1157,7 +1240,7 @@ void sub_81A8830(void)
gBattleOutcome = 0;
}
bool8 CanEncounterWildMon(u8 enemyMonLevel)
static bool8 CanEncounterWildMon(u8 enemyMonLevel)
{
if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3))
{
@@ -1173,7 +1256,7 @@ bool8 CanEncounterWildMon(u8 enemyMonLevel)
return TRUE;
}
u8 sub_81A890C(u16 species)
static u8 SpeciesToPikeMonId(u16 species)
{
u8 ret;
+1 -1
View File
@@ -44,6 +44,7 @@
#include "overworld.h"
#include "party_menu.h"
#include "battle_arena.h"
#include "battle_pike.h"
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG1_Y;
@@ -64,7 +65,6 @@ extern u8* GetMonNickname(struct Pokemon* mon, u8* dst); // party_menu
extern u8 BattleArena_ShowJudgmentWindow(u8* arg0); // battle frontier 2
extern void sub_81B8E80(u8 battlerId, u8, u8); // party menu
extern bool8 sub_81B1250(void); // ?
extern bool8 InBattlePike(void);
extern bool8 InBattlePyramid(void);
extern u16 GetBattlePyramidPickupItemId(void);
extern u8 sub_813B21C(void);
+1 -1
View File
@@ -33,6 +33,7 @@
#include "field_weather.h"
#include "battle_tower.h"
#include "gym_leader_rematch.h"
#include "battle_pike.h"
#include "constants/map_types.h"
#include "constants/battle_frontier.h"
@@ -54,7 +55,6 @@ struct TrainerBattleParameter
};
extern bool8 InBattlePyramid(void);
extern bool8 InBattlePike(void);
extern bool32 InTrainerHill(void);
extern bool32 FieldPoisonEffectIsRunning(void);
extern void RestartWildEncounterImmunitySteps(void);
+1 -2
View File
@@ -13,8 +13,7 @@
#include "battle.h"
#include "fldeff_80F9BCC.h"
#include "field_poison.h"
extern bool8 InBattlePike(void);
#include "battle_pike.h"
static bool32 sub_80F9568(struct Pokemon *pokemon)
{
+1 -2
View File
@@ -47,8 +47,7 @@
#include "menu_helpers.h"
#include "window.h"
#include "apprentice.h"
extern bool8 InBattlePike(void);
#include "battle_pike.h"
void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)());
void CB2_Bag(void);
+2 -4
View File
@@ -36,6 +36,8 @@
#include "pokemon_storage_system.h"
#include "recorded_battle.h"
#include "apprentice.h"
#include "battle_pike.h"
#include "battle_tower.h"
struct SpeciesItem
{
@@ -80,14 +82,10 @@ extern u8 StorageGetCurrentBox(void);
extern void set_unknown_box_id(u8);
extern void sub_803FA70(u8 battlerId);
extern u8 sav1_map_get_name(void);
extern u8 GetFrontierEnemyMonLevel(u8);
extern bool8 InBattlePyramid(void);
extern bool8 InBattlePike(void);
extern bool8 sub_806F104(void);
extern u8 GetTrainerEncounterMusicIdInBattlePyramind(u16 trainerOpponentId);
extern u8 sub_81D63C8(u16 trainerOpponentId);
extern u8 GetFrontierOpponentClass(u16 trainerId);
extern void GetFrontierTrainerName(u8* dest, u16 trainerId);
extern void SummaryScreen_SetUnknownTaskId(u8);
// this file's functions
+1 -2
View File
@@ -34,8 +34,7 @@
#include "constants/songs.h"
#include "field_player_avatar.h"
#include "battle_pyramid_bag.h"
extern bool8 InBattlePike(void);
#include "battle_pike.h"
// Menu actions
enum
+1 -3
View File
@@ -18,6 +18,7 @@
#include "tv.h"
#include "link.h"
#include "script.h"
#include "battle_pike.h"
#include "constants/items.h"
#include "constants/maps.h"
@@ -25,10 +26,7 @@ extern const u8 EventScript_RepelWoreOff[];
#define NUM_FEEBAS_SPOTS 6
extern u8 GetBattlePikeWildMonHeaderId(void);
extern bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate);
extern void GenerateBattlePyramidWildMon(void);
extern bool8 InBattlePike(void);
extern bool8 InBattlePyramid(void);
// this file's functions