summaryrefslogtreecommitdiff
path: root/src/battle_setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle_setup.c')
-rw-r--r--src/battle_setup.c259
1 files changed, 108 insertions, 151 deletions
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 15b09645f..1c3e8e836 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -1,59 +1,32 @@
#include "global.h"
+#include "battle_setup.h"
+#include "asm.h"
+#include "safari_zone.h"
+#include "weather.h"
+#include "palette.h"
+#include "field_player_avatar.h"
+#include "rom4.h"
#include "battle.h"
#include "main.h"
#include "species.h"
-#include "pokemon.h"
#include "songs.h"
+#include "sound.h"
#include "task.h"
-#include "fieldmap.h"
#include "string_util.h"
#include "rng.h"
-#include "flag.h"
-#include "var.h"
+#include "event_data.h"
#include "script.h"
#include "field_message_box.h"
#include "trainer.h"
+#include "starter_choose.h"
+#include "metatile_behavior.h"
#define NUM_TRAINER_EYE_TRAINERS 56
#define TRAINER_REMATCH_STEPS 255
-extern void prev_quest_postbuffer_cursor_backup_reset(void);
-extern void overworld_poison_timer_set(void);
-extern void current_map_music_set__default_for_battle(u16);
-extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
-extern void c2_exit_to_overworld_2_switch(void);
-extern void npc_set_running_behaviour_etc(struct MapObject *, u8);
-extern void c2_whiteout(void);
-extern void sub_800E7C4(void);
-extern void sub_8081AA4(void);
-extern void sub_8081A18(void);
-extern void sub_8081C8C(void);
-extern void sub_80C824C(void);
-extern void sub_8081CEC(void);
-extern void sub_8080E44(void);
-extern void sub_80821D8(void);
-extern void sub_8082228(void);
-extern void sub_808260C(void);
-extern void sub_8082CB8(void);
-extern u8 *sub_80BCCE8(void);
-extern void CB2_ChooseStarter(void);
-extern void sub_811AABC(u8);
-extern u8 sub_811AAE8(void);
-extern u8 GetFieldObjectIdByLocalIdAndMap(u8, u8, u8);
-extern u8 *sub_8082880(void);
-extern u8 sub_803FC58(u16);
-extern bool32 FieldPoisonEffectIsRunning(void);
-extern bool32 GetSafariZoneFlag(void);
-extern void player_bitmagic(void);
-
-u8 GetWildBattleTransition(void);
-u8 GetTrainerBattleTransition(void);
-bool32 battle_exit_is_player_defeat(u32 a1);
-u8 *sub_808281C(void);
-u16 sub_8082C4C(u16 a1);
-
extern u16 gScriptResult;
+// IV + LEVEL + SPECIES
struct TrainerPartyMember0
{
u16 iv;
@@ -61,6 +34,7 @@ struct TrainerPartyMember0
u16 species;
};
+// IV + LEVEL + SPECIES + MOVES
struct TrainerPartyMember1
{
u16 iv;
@@ -69,6 +43,7 @@ struct TrainerPartyMember1
u16 moves[4];
};
+// IV + LEVEL + SPECIES + ITEMS
struct TrainerPartyMember2
{
u16 iv;
@@ -77,6 +52,7 @@ struct TrainerPartyMember2
u16 heldItem;
};
+// IV + LEVEL + SPECIES + ITEMS + MOVES
struct TrainerPartyMember3
{
u16 iv;
@@ -99,22 +75,6 @@ struct TrainerEyeTrainer
u16 mapNum;
};
-extern u16 MapGridGetMetatileBehaviorAt(s16, s16);
-extern bool8 MetatileBehavior_IsTallGrass(char);
-extern bool8 MetatileBehavior_IsLongGrass(char);
-extern bool8 MetatileBehavior_IsSandOrDeepSand(char);
-extern bool8 MetatileBehavior_IsSurfableWaterOrUnderwater(char);
-extern bool8 MetatileBehavior_IsBridge(char);
-extern bool8 sub_80574C4(char);
-extern bool8 sub_80574D8(char);
-extern bool8 sub_8057568(char);
-extern u8 TestPlayerAvatarFlags(u8);
-extern u8 sub_8057450(u8);
-extern u8 GetSav1Weather(void);
-extern void PlayNewMapMusic(u16);
-
-extern u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
-
extern void (*gUnknown_0300485C)(void);
extern struct Pokemon gEnemyParty[];
@@ -135,7 +95,7 @@ extern struct TrainerEyeTrainer gTrainerEyeTrainers[];
extern u8 gOtherText_CancelWithTerminator[];
-extern u16 gUnknown_020239F8;
+extern u16 gBattleTypeFlags;
extern u16 gScriptLastTalked;
extern u8 gUnknown_02024D26;
extern u16 gBadgeFlags[];
@@ -162,8 +122,6 @@ extern u8 gStringVar4[];
extern u8 gBattleTransitionTable_Wild[][2];
extern u8 gBattleTransitionTable_Trainer[][2];
-void sub_8082188(void);
-
void task01_battle_start(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -200,123 +158,123 @@ void task_add_01_battle_start(u8 transition, u16 song)
void CheckForSafariZoneAndProceed(void)
{
if (GetSafariZoneFlag())
- sub_8081AA4();
+ StartBattle_Safari();
else
- sub_8081A18();
+ StartBattle_StandardWild();
}
-void sub_8081A18(void)
+void StartBattle_StandardWild(void)
{
ScriptContext2_Enable();
- player_bitmagic();
+ FreezeMapObjects();
sub_80597F4();
- gMain.field_8 = sub_8081C8C;
- gUnknown_020239F8 = 0;
+ gMain.savedCallback = HandleWildBattleEnd;
+ gBattleTypeFlags = 0;
task_add_01_battle_start(GetWildBattleTransition(), 0);
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
-void sub_8081A5C(void)
+void StartBattle_Roamer(void)
{
ScriptContext2_Enable();
- player_bitmagic();
+ FreezeMapObjects();
sub_80597F4();
- gMain.field_8 = sub_8081C8C;
- gUnknown_020239F8 = 1024;
+ gMain.savedCallback = HandleWildBattleEnd;
+ gBattleTypeFlags = BATTLE_TYPE_ROAMER;
task_add_01_battle_start(GetWildBattleTransition(), 0);
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
-void sub_8081AA4(void)
+void StartBattle_Safari(void)
{
ScriptContext2_Enable();
- player_bitmagic();
+ FreezeMapObjects();
sub_80597F4();
- gMain.field_8 = sub_80C824C;
- gUnknown_020239F8 = 128;
+ gMain.savedCallback = sub_80C824C;
+ gBattleTypeFlags = BATTLE_TYPE_SAFARI;
task_add_01_battle_start(GetWildBattleTransition(), 0);
}
void task_add_01_battle_start_with_music_and_stats(void)
{
task_add_01_battle_start(GetTrainerBattleTransition(), 0);
- sav12_xor_increment(7);
- sav12_xor_increment(9);
+ IncrementGameStat(7);
+ IncrementGameStat(9);
}
//Initiates battle where Wally catches Ralts
-void sub_8081AFC(void)
+void StartBattle_WallyTutorial(void)
{
CreateMaleMon(&gEnemyParty[0], SPECIES_RALTS, 5);
ScriptContext2_Enable();
- gMain.field_8 = c2_exit_to_overworld_1_continue_scripts_restart_music;
- gUnknown_020239F8 = 512;
+ gMain.savedCallback = c2_exit_to_overworld_1_continue_scripts_restart_music;
+ gBattleTypeFlags = BATTLE_TYPE_WALLY_TUTORIAL;
task_add_01_battle_start(8, 0);
}
-void sub_8081B3C(void)
+void StartBattle_ScriptedWild(void)
{
ScriptContext2_Enable();
- gMain.field_8 = sub_8081CEC;
- gUnknown_020239F8 = 0;
+ gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gBattleTypeFlags = 0;
task_add_01_battle_start(GetWildBattleTransition(), 0);
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
-void sub_8081B78(void)
+void StartBattle_SouthernIsland(void)
{
ScriptContext2_Enable();
- gMain.field_8 = sub_8081CEC;
- gUnknown_020239F8 = 0x2000;
+ gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
task_add_01_battle_start(GetWildBattleTransition(), 0);
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
-void sub_8081BB8(void)
+void StartBattle_Rayquaza(void)
{
ScriptContext2_Enable();
- gMain.field_8 = sub_8081CEC;
- gUnknown_020239F8 = 0x2000;
+ gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
task_add_01_battle_start(0, BGM_BATTLE34);
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
-void sub_8081BF8(void)
+void StartBattle_GroudonKyogre(void)
{
ScriptContext2_Enable();
- gMain.field_8 = sub_8081CEC;
- gUnknown_020239F8 = 12288;
+ gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON;
if (gGameVersion == 2)
task_add_01_battle_start(0xB, BGM_BATTLE34); // KYOGRE
else
task_add_01_battle_start(0x6, BGM_BATTLE34); // GROUDON
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
-void sub_8081C50(void)
+void StartBattle_Regi(void)
{
ScriptContext2_Enable();
- gMain.field_8 = sub_8081CEC;
- gUnknown_020239F8 = 24576;
+ gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI;
task_add_01_battle_start(0xA, BGM_BATTLE36);
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
-void sub_8081C8C(void)
+void HandleWildBattleEnd(void)
{
CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE);
ResetOamRange(0, 128);
if (battle_exit_is_player_defeat(gUnknown_02024D26) == TRUE)
{
- SetMainCallback2(c2_whiteout);
+ SetMainCallback2(CB2_WhiteOut);
}
else
{
@@ -325,18 +283,18 @@ void sub_8081C8C(void)
}
}
-void sub_8081CEC(void)
+void HandleScriptedWildBattleEnd(void)
{
CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE);
ResetOamRange(0, 128);
if (battle_exit_is_player_defeat(gUnknown_02024D26) == TRUE)
- SetMainCallback2(c2_whiteout);
+ SetMainCallback2(CB2_WhiteOut);
else
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
}
-s8 sub_8081D3C(void)
+s8 GetBattleTerrain(void)
{
u16 tileBehavior;
s16 x, y;
@@ -350,24 +308,24 @@ s8 sub_8081D3C(void)
return 1;
if (MetatileBehavior_IsSandOrDeepSand(tileBehavior))
return 2;
- switch (gMapHeader.light)
+ switch (gMapHeader.mapType)
{
- case 1:
- case 2:
- case 3:
+ case MAP_TYPE_TOWN:
+ case MAP_TYPE_CITY:
+ case MAP_TYPE_ROUTE:
break;
- case 4:
+ case MAP_TYPE_UNDERGROUND:
if (sub_80574C4(tileBehavior))
return 8;
if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior))
return 5;
return 7;
- case 8:
- case 9:
+ case MAP_TYPE_INDOOR:
+ case MAP_TYPE_SECRET_BASE:
return 8;
- case 5:
+ case MAP_TYPE_UNDERWATER:
return 3;
- case 6:
+ case MAP_TYPE_6:
if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior))
return 4;
return 9;
@@ -378,7 +336,7 @@ s8 sub_8081D3C(void)
return 5;
if (sub_80574D8(tileBehavior))
return 6;
- if (TestPlayerAvatarFlags(8))
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
{
if (sub_8057450(tileBehavior))
return 5;
@@ -392,7 +350,7 @@ s8 sub_8081D3C(void)
return 9;
}
-s8 sub_8081E90(void)
+s8 GetBattleTransitionTypeByMap(void)
{
u8 flashUsed;
u16 tileBehavior;
@@ -408,11 +366,11 @@ s8 sub_8081E90(void)
if (!MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior))
{
- switch (gMapHeader.light)
+ switch (gMapHeader.mapType)
{
- case 4:
+ case MAP_TYPE_UNDERGROUND:
return 1;
- case 5:
+ case MAP_TYPE_UNDERWATER:
return 3;
default:
return 0;
@@ -430,7 +388,7 @@ u16 GetSumOfPartyMonLevel(u8 numMons)
{
u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
- if (species != 412 && species != 0 && GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0)
+ if (species != SPECIES_EGG && species != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0)
{
sum += GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
numMons--;
@@ -482,7 +440,7 @@ u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons)
u8 GetWildBattleTransition(void)
{
- u8 flashVar = sub_8081E90();
+ u8 flashVar = GetBattleTransitionTypeByMap();
u8 level = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL);
if (level < (u8)GetSumOfPartyMonLevel(1)) // is wild mon level than the player's mon level?
@@ -494,8 +452,7 @@ u8 GetWildBattleTransition(void)
u8 GetTrainerBattleTransition(void)
{
struct Trainer *trainer;
- u8 trainerClass;
- u8 partyCount;
+ u8 minPartyCount;
u8 flashVar;
u8 level;
@@ -521,14 +478,14 @@ u8 GetTrainerBattleTransition(void)
return 16;
if (trainer[gTrainerBattleOpponent].doubleBattle == TRUE)
- partyCount = 2; // double battles always at least have 2 pokemon.
+ minPartyCount = 2; // double battles always at least have 2 pokemon.
else
- partyCount = 1;
+ minPartyCount = 1;
- flashVar = sub_8081E90();
- level = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent, partyCount);
+ flashVar = GetBattleTransitionTypeByMap();
+ level = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent, minPartyCount);
- if (level < (u8)GetSumOfPartyMonLevel(partyCount)) // is wild mon level than the player's mon level?
+ if (level < (u8)GetSumOfPartyMonLevel(minPartyCount)) // is wild mon level than the player's mon level?
return gBattleTransitionTable_Trainer[flashVar][0];
else
return gBattleTransitionTable_Trainer[flashVar][1];
@@ -544,13 +501,13 @@ u8 GetBattleTowerBattleTransition(void)
return 3;
}
-void sub_8082168(void)
+void ChooseStarter(void)
{
SetMainCallback2(CB2_ChooseStarter);
- gMain.field_8 = sub_8082188;
+ gMain.savedCallback = CB2_GiveStarter;
}
-void sub_8082188(void)
+void CB2_GiveStarter(void)
{
u16 starterPoke;
@@ -559,28 +516,28 @@ void sub_8082188(void)
ScriptGiveMon(starterPoke, 5, 0, 0, 0, 0);
ResetTasks();
sub_80408BC();
- SetMainCallback2(sub_80821D8);
+ SetMainCallback2(CB2_StartFirstBattle);
sub_811AAD8(0);
}
-void sub_80821D8(void)
+void CB2_StartFirstBattle(void)
{
UpdatePaletteFade();
RunTasks();
if (sub_811AAE8() == TRUE)
{
- gUnknown_020239F8 = 16;
- gMain.field_8 = sub_8082228;
+ gBattleTypeFlags = BATTLE_TYPE_FIRST_BATTLE;
+ gMain.savedCallback = HandleFirstBattleEnd;
SetMainCallback2(sub_800E7C4);
prev_quest_postbuffer_cursor_backup_reset();
overworld_poison_timer_set();
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
}
-void sub_8082228(void)
+void HandleFirstBattleEnd(void)
{
sav1_reset_battle_music_maybe();
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
@@ -730,7 +687,7 @@ void TrainerWantsBattle(u8 trainerMapObjId, u8 *trainerScript)
ScriptContext2_Enable();
}
-u8 GetTrainerFlagFromScriptPointer(u8 *data)
+bool32 GetTrainerFlagFromScriptPointer(u8 *data)
{
u32 flag = TrainerBattleLoadArg16(data + 2);
return FlagGet(TRAINER_FLAG_START + flag);
@@ -780,8 +737,8 @@ void trainer_flag_clear(u16 flag)
void sub_80825E4(void)
{
- gUnknown_020239F8 = 8;
- gMain.field_8 = sub_808260C;
+ gBattleTypeFlags = BATTLE_TYPE_TRAINER;
+ gMain.savedCallback = sub_808260C;
task_add_01_battle_start_with_music_and_stats();
ScriptContext1_Stop();
}
@@ -794,7 +751,7 @@ void sub_808260C(void)
}
else if (battle_exit_is_player_defeat(gUnknown_02024D26) == TRUE)
{
- SetMainCallback2(c2_whiteout);
+ SetMainCallback2(CB2_WhiteOut);
}
else
{
@@ -811,7 +768,7 @@ void do_choose_name_or_words_screen(void)
}
else if (battle_exit_is_player_defeat(gUnknown_02024D26) == TRUE)
{
- SetMainCallback2(c2_whiteout);
+ SetMainCallback2(CB2_WhiteOut);
}
else
{
@@ -823,8 +780,8 @@ void do_choose_name_or_words_screen(void)
void sub_80826B0(void)
{
- gUnknown_020239F8 = 8;
- gMain.field_8 = do_choose_name_or_words_screen;
+ gBattleTypeFlags = BATTLE_TYPE_TRAINER;
+ gMain.savedCallback = do_choose_name_or_words_screen;
task_add_01_battle_start_with_music_and_stats();
ScriptContext1_Stop();
}