summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_dome.c20
-rw-r--r--src/battle_frontier_1.c118
-rw-r--r--src/battle_tent.c83
-rw-r--r--src/field_specials.c6
-rw-r--r--src/pokemon.c9
-rw-r--r--src/unk_text_util_2.c1
6 files changed, 208 insertions, 29 deletions
diff --git a/src/battle_dome.c b/src/battle_dome.c
index 058d253ab..c54b14ccc 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -39,15 +39,6 @@
#define DOME_FINAL 3
#define DOME_ROUNDS_COUNT 4
-struct FacilityMon
-{
- u16 species;
- u16 moves[4];
- u8 itemTableId;
- u8 evSpread;
- u8 nature;
-};
-
struct BattleDomeStruct
{
u8 arr[DOME_TOURNAMENT_TRAINERS_COUNT];
@@ -66,7 +57,7 @@ extern void sub_81B8558(void);
extern u32 sub_81A39C4(void);
extern u16 sub_8162548(u8, u8);
extern u16 RandomizeFacilityTrainerMonId(u16);
-extern u8 GetFrontierEnemyMonLevel(void);
+extern u8 GetFacilityEnemyMonLevel(void);
extern u16 sub_81A5060(u8 monId, u8 moveSlotId);
extern u8 sub_81A50F0(u8, u8);
extern u8 sub_81A50B0(u8);
@@ -87,7 +78,6 @@ extern u16 gBattle_BG2_X;
extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X;
extern u16 gBattle_BG3_Y;
-extern const struct FacilityMon *gFacilityTrainerMons;
extern void (* const gUnknown_0860D090[])(void);
extern const u32 gUnknown_0860D0EC[][2];
@@ -822,7 +812,7 @@ void InitDomeTrainers(void)
monTypesBits >>= 1;
}
- monLevel = GetFrontierEnemyMonLevel();
+ monLevel = GetFacilityEnemyMonLevel();
statSums[0] += (monTypesCount * monLevel) / 20;
for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
@@ -995,7 +985,7 @@ static void CreateDomeMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentM
s32 i;
u8 happiness = 0xFF;
u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3.
- u8 level = GetFrontierEnemyMonLevel();
+ u8 level = GetFacilityEnemyMonLevel();
CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId],
gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].species,
level,
@@ -3716,7 +3706,7 @@ static u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roun
u16 bestScore = 0;
u16 bestId = 0;
s32 movePower = 0;
- GetFrontierEnemyMonLevel(); // Unused return variable.
+ GetFacilityEnemyMonLevel(); // Unused return variable.
// Calc move points of all 4 moves for all 3 pokemon hitting all 3 target mons.
for (i = 0; i < 3; i++)
@@ -4580,7 +4570,7 @@ static void DecideRoundWinners(u8 roundId)
static void CopyDomeTrainerName(u8 *dst, u16 trainerId)
{
s32 i = 0;
- GetFrontierEnemyMonLevel(); // Unused return value.
+ GetFacilityEnemyMonLevel(); // Unused return value.
if (trainerId == TRAINER_FRONTIER_BRAIN)
{
diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c
new file mode 100644
index 000000000..ee8a42954
--- /dev/null
+++ b/src/battle_frontier_1.c
@@ -0,0 +1,118 @@
+#include "global.h"
+#include "event_data.h"
+#include "battle_setup.h"
+#include "overworld.h"
+#include "random.h"
+#include "battle_tower.h"
+
+extern void sub_8162614(u16, u8);
+
+extern void (* const gUnknown_0860DE50[])(void);
+extern const u32 gUnknown_0860DE98[][2];
+extern const u32 gUnknown_0860DEA8[][2];
+
+// code
+void sub_8195960(void)
+{
+ gUnknown_0860DE50[gSpecialVar_0x8004]();
+}
+
+void sub_8195980(void)
+{
+ u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
+ u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
+
+ gSaveBlock2Ptr->frontier.field_CA8 = 0;
+ gSaveBlock2Ptr->frontier.field_CB2 = 0;
+ gSaveBlock2Ptr->frontier.field_CA9_a = 0;
+ gSaveBlock2Ptr->frontier.field_CA9_b = 0;
+ if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]))
+ gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] = 0;
+
+ saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ gTrainerBattleOpponent_A = 0;
+}
+
+void sub_8195A38(void)
+{
+ u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
+ u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
+
+ switch (gSpecialVar_0x8005)
+ {
+ case 0:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC4[1];
+ break;
+ case 1:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode];
+ break;
+ case 2:
+ gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]) != 0);
+ break;
+ }
+}
+
+void sub_8195AE4(void)
+{
+ u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
+ u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
+
+ switch (gSpecialVar_0x8005)
+ {
+ case 0:
+ gSaveBlock2Ptr->frontier.field_DC4[1] = gSpecialVar_0x8006;
+ break;
+ case 1:
+ gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] = gSpecialVar_0x8006;
+ break;
+ case 2:
+ if (gSpecialVar_0x8006)
+ gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860DE98[battleMode][lvlMode];
+ else
+ gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860DEA8[battleMode][lvlMode];
+ break;
+ }
+}
+
+void sub_8195BB0(void)
+{
+ u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
+ u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
+
+ if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 50)
+ gSpecialVar_Result = Random() % 3;
+ else if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 99)
+ gSpecialVar_Result = 3;
+ else
+ gSpecialVar_Result = 4;
+}
+
+void sub_8195C20(void)
+{
+ gTrainerBattleOpponent_A = 5 *(Random() % 255) / 64u;
+ sub_8162614(gTrainerBattleOpponent_A, 0);
+}
+
+void sub_8195C50(void)
+{
+ if (gTrainerBattleOpponent_A < 300)
+ ConvertBattleFrontierTrainerSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore);
+}
+
+/*
+void sub_8195C7C(void)
+{
+ u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
+ u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
+
+ if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 9999)
+ {
+ u16 wat = 0;
+ gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode]++;
+ if (lvlMode < gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode])
+ wat = 1;
+ if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][wat] != 0)
+ gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode];
+ }
+}
+*/
diff --git a/src/battle_tent.c b/src/battle_tent.c
index dbea37fb7..f39bf8837 100644
--- a/src/battle_tent.c
+++ b/src/battle_tent.c
@@ -11,6 +11,10 @@
#include "constants/items.h"
#include "constants/region_map_sections.h"
+extern const struct BattleFrontierTrainer gSlateportBattleTentTrainers[];
+extern const struct FacilityMon gSlateportBattleTentMons[];
+extern const u16 gBattleFrontierHeldItems[];
+
// This file's functions.
void sub_81B99D4(void);
void sub_81B9A28(void);
@@ -51,7 +55,7 @@ void (*const gUnknown_086160B4[])(void) =
sub_81B9B28
};
-const u16 gUnknown_086160D4[] = {ITEM_NEST_BALL, ITEM_NONE};
+static const u16 sVerdanturfTentRewards[] = {ITEM_NEST_BALL};
void (*const gUnknown_086160D8[])(void) =
{
@@ -64,7 +68,7 @@ void (*const gUnknown_086160D8[])(void) =
sub_81B9CF0
};
-const u16 gUnknown_086160F4[] = {ITEM_HYPER_POTION, ITEM_NONE};
+static const u16 sFallarborTentRewards[] = {ITEM_HYPER_POTION};
void (*const gUnknown_086160F8[])(void) =
{
@@ -80,7 +84,7 @@ void (*const gUnknown_086160F8[])(void) =
sub_81B9EC0
};
-const u16 gUnknown_08616120[] = {ITEM_FULL_HEAL, ITEM_NONE};
+static const u16 sSlateportTentRewards[] = {ITEM_FULL_HEAL};
// code
void sub_81B99B4(void)
@@ -128,7 +132,7 @@ void sub_81B9ABC(void)
void sub_81B9B00(void)
{
- gSaveBlock2Ptr->frontier.field_E6A = gUnknown_086160D4[Random() % 1];
+ gSaveBlock2Ptr->frontier.field_E6A = sVerdanturfTentRewards[Random() % ARRAY_COUNT(sVerdanturfTentRewards)];
}
void sub_81B9B28(void)
@@ -178,7 +182,7 @@ void sub_81B9C2C(void)
void sub_81B9C70(void)
{
- gSaveBlock2Ptr->frontier.field_E6C = gUnknown_086160F4[Random() % 1];
+ gSaveBlock2Ptr->frontier.field_E6C = sFallarborTentRewards[Random() % ARRAY_COUNT(sFallarborTentRewards)];
}
void sub_81B9C98(void)
@@ -233,7 +237,7 @@ void sub_81B9DB4(void)
void sub_81B9DF8(void)
{
- gSaveBlock2Ptr->frontier.field_E6E = gUnknown_08616120[Random() % 1];
+ gSaveBlock2Ptr->frontier.field_E6E = sSlateportTentRewards[Random() % ARRAY_COUNT(sSlateportTentRewards)];
}
void sub_81B9E20(void)
@@ -266,3 +270,70 @@ bool8 sub_81B9E94(void)
return (gMapHeader.regionMapSectionId == MAPSEC_SLATEPORT_CITY
&& ((gMapHeader.mapLayoutId == 385) | (gMapHeader.mapLayoutId == 386)));
}
+
+// This function was written very...oddly.
+/*
+void sub_81B9EC0(void)
+{
+ s32 i, j;
+ u16 currMonId, currSpecies;
+ u16 species[PARTY_SIZE];
+ u16 monIds[PARTY_SIZE];
+ u16 heldItems[PARTY_SIZE];
+ s32 var;
+
+ gFacilityTrainers = gSlateportBattleTentTrainers;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ species[i] = 0;
+ monIds[i] = 0;
+ heldItems[i] = 0;
+ }
+ gFacilityTrainerMons = gSlateportBattleTentMons;
+
+ currSpecies = 0;
+ i = 0;
+ while (i != PARTY_SIZE)
+ {
+ // Cannot have two pokemon of the same species.
+ currMonId = Random() % 70;
+ j = 0;
+ var = 0 + i;
+ while (j < var && monIds[j] != currMonId)
+ {
+ if (species[j] == gFacilityTrainerMons[currMonId].species)
+ {
+ if (currSpecies == 0)
+ currSpecies = gFacilityTrainerMons[currMonId].species;
+ else
+ break;
+ }
+ j++;
+ }
+ if (j != var)
+ continue;
+
+ // Cannot have two same held items.
+ for (j = 0; j < var; j++)
+ {
+ if (heldItems[j] == 0)
+ continue;
+ if (heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId])
+ {
+ if (gFacilityTrainerMons[currMonId].species == currSpecies)
+ currSpecies = 0;
+ else
+ break;
+ }
+ }
+ if (j != var)
+ continue;
+
+ gSaveBlock2Ptr->frontier.field_E70[var].monId = currMonId;
+ species[var] = gFacilityTrainerMons[currMonId].species;
+ heldItems[var] = gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId];
+ monIds[var] = currMonId;
+ i++;
+ }
+}
+*/
diff --git a/src/field_specials.c b/src/field_specials.c
index f5728c3a4..84852e6b5 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -2188,13 +2188,13 @@ void sub_8139F20(void)
}
break;
case 6:
- if (gSaveBlock2Ptr->frontier.field_DC8[0] >= gSaveBlock2Ptr->frontier.field_DC8[1])
+ if (gSaveBlock2Ptr->frontier.field_DC8[0][0] >= gSaveBlock2Ptr->frontier.field_DC8[0][1])
{
- unk = gSaveBlock2Ptr->frontier.field_DC8[0];
+ unk = gSaveBlock2Ptr->frontier.field_DC8[0][0];
}
else
{
- unk = gSaveBlock2Ptr->frontier.field_DC8[1];
+ unk = gSaveBlock2Ptr->frontier.field_DC8[0][1];
}
break;
case 7:
diff --git a/src/pokemon.c b/src/pokemon.c
index eafb0c2cd..9022f69ea 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -81,8 +81,7 @@ extern void set_unknown_box_id(u8);
extern void sub_803FA70(u8 battlerId);
extern u8 sav1_map_get_name(void);
extern const u8 *sub_81A1650(u8, u8 language);
-extern u8 BattleFrontierGetOpponentLvl(u8);
-extern u16 FacilityClassToPicIndex(u16);
+extern u8 GetFrontierEnemyMonLevel(u8);
extern bool8 InBattlePyramid(void);
extern bool8 InBattlePike(void);
extern bool8 sub_806F104(void);
@@ -956,7 +955,7 @@ const u16 gHoennToNationalOrder[] = // Assigns Hoenn Dex Pokémon (Using Nationa
NATIONAL_DEX_BLAZIKEN, // HOENN_DEX_BLAZIKEN
NATIONAL_DEX_MUDKIP, // HOENN_DEX_MUDKIP
NATIONAL_DEX_MARSHTOMP, // HOENN_DEX_MARSHTOMP
- NATIONAL_DEX_SWAMPERT, // HOENN_DEX_SWAMPERT
+ NATIONAL_DEX_SWAMPERT, // HOENN_DEX_SWAMPERT
NATIONAL_DEX_POOCHYENA, // HOENN_DEX_POOCHYENA
NATIONAL_DEX_MIGHTYENA, // HOENN_DEX_MIGHTYENA
NATIONAL_DEX_ZIGZAGOON, // HOENN_DEX_ZIGZAGOON
@@ -2821,7 +2820,7 @@ void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lv
u8 value;
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50)
- level = BattleFrontierGetOpponentLvl(gSaveBlock2Ptr->frontier.lvlMode);
+ level = GetFrontierEnemyMonLevel(gSaveBlock2Ptr->frontier.lvlMode);
else if (lvl50)
level = 50;
else
@@ -2885,7 +2884,7 @@ void sub_8068528(struct Pokemon *mon, const struct UnknownPokemonStruct2 *src, u
CreateMon(mon,
src->mons[monId].species,
- BattleFrontierGetOpponentLvl(src->field_0_1 - 1),
+ GetFrontierEnemyMonLevel(src->field_0_1 - 1),
0x1F,
TRUE,
personality,
diff --git a/src/unk_text_util_2.c b/src/unk_text_util_2.c
index ca8246128..4821ed776 100644
--- a/src/unk_text_util_2.c
+++ b/src/unk_text_util_2.c
@@ -4,6 +4,7 @@
#include "text.h"
#include "sound.h"
+ALIGNED(4)
static const u8 sUnknown_08616124[] = {1, 2, 4};
static const u16 sFont6BrailleGlyphs[] = INCBIN_U16("data/graphics/fonts/font6.fwjpnfont");