summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_factory.c184
-rw-r--r--src/battle_factory_screen.c57
-rw-r--r--src/crt0.s80
-rw-r--r--src/field_specials.c2
-rw-r--r--src/libgcnmultiboot.s86
-rw-r--r--src/pokemon.c24
-rw-r--r--src/starter_choose.c291
7 files changed, 360 insertions, 364 deletions
diff --git a/src/battle_factory.c b/src/battle_factory.c
index 913b1b1a0..940e71f7d 100644
--- a/src/battle_factory.c
+++ b/src/battle_factory.c
@@ -39,7 +39,7 @@ static void GenerateInitialRentalMons(void);
static void GetOpponentMostCommonMonType(void);
static void GetOpponentBattleStyle(void);
static void RestorePlayerPartyHeldItems(void);
-static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2);
+static u16 GetFactoryMonId(u8 lvlMode, u8 challengeNum, bool8 arg2);
static u8 GetMoveBattleStyle(u16 move);
// Const rom data.
@@ -159,24 +159,27 @@ static const u8 sFixedIVTable[][2] =
{31, 31},
};
-static const u16 sMonsToChooseFrom[][2] =
-{
- {0x006e, 0x00c7},
- {0x00a2, 0x010a},
- {0x010b, 0x0173},
- {0x0174, 0x01d3},
- {0x01d4, 0x0233},
- {0x0234, 0x0293},
- {0x0294, 0x02f3},
- {0x0174, 0x0351},
- {0x0174, 0x01d3},
- {0x01d4, 0x0233},
- {0x0234, 0x0293},
- {0x0294, 0x02f3},
- {0x0174, 0x0371},
- {0x0174, 0x0371},
- {0x0174, 0x0371},
- {0x0174, 0x0371},
+static const u16 sInitialRentalMonRanges[][2] =
+{
+ // Level 50
+ {FRONTIER_MON_GRIMER, FRONTIER_MON_FURRET_1}, // 110 - 199
+ {FRONTIER_MON_DELCATTY_1, FRONTIER_MON_CLOYSTER_1}, // 162 - 266
+ {FRONTIER_MON_DELCATTY_2, FRONTIER_MON_CLOYSTER_2}, // 267 - 371
+ {FRONTIER_MON_DUGTRIO_1, FRONTIER_MON_SLAKING_1}, // 372 - 467
+ {FRONTIER_MON_DUGTRIO_2, FRONTIER_MON_SLAKING_2}, // 468 - 563
+ {FRONTIER_MON_DUGTRIO_3, FRONTIER_MON_SLAKING_3}, // 564 - 659
+ {FRONTIER_MON_DUGTRIO_4, FRONTIER_MON_SLAKING_4}, // 660 - 755
+ {FRONTIER_MON_DUGTRIO_1, FRONTIER_MONS_HIGH_TIER}, // 372 - 849
+
+ // Open level
+ {FRONTIER_MON_DUGTRIO_1, FRONTIER_MON_SLAKING_1}, // 372 - 467
+ {FRONTIER_MON_DUGTRIO_2, FRONTIER_MON_SLAKING_2}, // 468 - 563
+ {FRONTIER_MON_DUGTRIO_3, FRONTIER_MON_SLAKING_3}, // 564 - 659
+ {FRONTIER_MON_DUGTRIO_4, FRONTIER_MON_SLAKING_4}, // 660 - 755
+ {FRONTIER_MON_DUGTRIO_1, NUM_FRONTIER_MONS - 1}, // 372 - 881
+ {FRONTIER_MON_DUGTRIO_1, NUM_FRONTIER_MONS - 1}, // 372 - 881
+ {FRONTIER_MON_DUGTRIO_1, NUM_FRONTIER_MONS - 1}, // 372 - 881
+ {FRONTIER_MON_DUGTRIO_1, NUM_FRONTIER_MONS - 1}, // 372 - 881
};
// code
@@ -320,24 +323,24 @@ static void GenerateOpponentMons(void)
i = 0;
while (i != FRONTIER_PARTY_SIZE)
{
- u16 monSetId = GetMonSetId(lvlMode, challengeNum, FALSE);
- if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN)
+ u16 monId = GetFactoryMonId(lvlMode, challengeNum, FALSE);
+ if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
continue;
for (j = 0; j < 6; j++)
{
- if (gFacilityTrainerMons[monSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
+ if (gFacilityTrainerMons[monId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
break;
}
if (j != 6)
continue;
- if (lvlMode == FRONTIER_LVL_50 && monSetId > FRONTIER_MONS_HIGH_TIER)
+ if (lvlMode == FRONTIER_LVL_50 && monId > FRONTIER_MONS_HIGH_TIER)
continue;
for (k = firstMonId; k < firstMonId + i; k++)
{
- if (species[k] == gFacilityTrainerMons[monSetId].species)
+ if (species[k] == gFacilityTrainerMons[monId].species)
break;
}
if (k != firstMonId + i)
@@ -345,15 +348,15 @@ static void GenerateOpponentMons(void)
for (k = firstMonId; k < firstMonId + i; k++)
{
- if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
+ if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
break;
}
if (k != firstMonId + i)
continue;
- species[i] = gFacilityTrainerMons[monSetId].species;
- heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
- gUnknown_03006298[i] = monSetId;
+ species[i] = gFacilityTrainerMons[monId].species;
+ heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
+ gUnknown_03006298[i] = monId;
i++;
}
}
@@ -388,7 +391,7 @@ static void SetPlayerAndOpponentParties(void)
int count = 0;
u8 bits = 0;
u8 monLevel;
- u16 monSetId;
+ u16 monId;
u16 evs;
u8 ivs;
u8 friendship;
@@ -412,17 +415,17 @@ static void SetPlayerAndOpponentParties(void)
ZeroPlayerPartyMons();
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
+ monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
ivs = gSaveBlock2Ptr->frontier.rentalMons[i].ivs;
CreateMon(&gPlayerParty[i],
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
monLevel,
ivs,
TRUE, gSaveBlock2Ptr->frontier.rentalMons[i].personality,
OT_ID_PLAYER_ID, 0);
count = 0;
- bits = gFacilityTrainerMons[monSetId].evSpread;
+ bits = gFacilityTrainerMons[monId].evSpread;
for (j = 0; j < NUM_STATS; bits >>= 1, j++)
{
if (bits & 1)
@@ -433,16 +436,16 @@ static void SetPlayerAndOpponentParties(void)
bits = 1;
for (j = 0; j < NUM_STATS; bits <<= 1, j++)
{
- if (gFacilityTrainerMons[monSetId].evSpread & bits)
+ if (gFacilityTrainerMons[monId].evSpread & bits)
SetMonData(&gPlayerParty[i], MON_DATA_HP_EV + j, &evs);
}
CalculateMonStats(&gPlayerParty[i]);
friendship = 0;
for (k = 0; k < MAX_MON_MOVES; k++)
- SetMonMoveAvoidReturn(&gPlayerParty[i], gFacilityTrainerMons[monSetId].moves[k], k);
+ SetMonMoveAvoidReturn(&gPlayerParty[i], gFacilityTrainerMons[monId].moves[k], k);
SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
SetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i].abilityNum);
}
}
@@ -453,17 +456,17 @@ static void SetPlayerAndOpponentParties(void)
case 2:
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- monSetId = gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId;
+ monId = gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId;
ivs = gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs;
CreateMon(&gEnemyParty[i],
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
monLevel,
ivs,
TRUE, gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality,
OT_ID_PLAYER_ID, 0);
count = 0;
- bits = gFacilityTrainerMons[monSetId].evSpread;
+ bits = gFacilityTrainerMons[monId].evSpread;
for (j = 0; j < NUM_STATS; bits >>= 1, j++)
{
if (bits & 1)
@@ -474,14 +477,14 @@ static void SetPlayerAndOpponentParties(void)
bits = 1;
for (j = 0; j < NUM_STATS; bits <<= 1, j++)
{
- if (gFacilityTrainerMons[monSetId].evSpread & bits)
+ if (gFacilityTrainerMons[monId].evSpread & bits)
SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &evs);
}
CalculateMonStats(&gEnemyParty[i]);
for (k = 0; k < MAX_MON_MOVES; k++)
- SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monSetId].moves[k], k);
- SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monId].moves[k], k);
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
SetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityNum);
}
break;
@@ -497,8 +500,8 @@ static void GenerateInitialRentalMons(void)
u8 challengeNum;
u8 factoryLvlMode;
u8 factoryBattleMode;
- u8 var_40;
- u16 monSetId;
+ u8 rentalRank;
+ u16 monId;
u16 currSpecies;
u16 species[PARTY_SIZE];
u16 monIds[PARTY_SIZE];
@@ -530,30 +533,30 @@ static void GenerateInitialRentalMons(void)
factoryLvlMode = FRONTIER_LVL_50;
firstMonId = 0;
}
- var_40 = GetNumPastRentalsRank(factoryBattleMode, factoryLvlMode);
+ rentalRank = GetNumPastRentalsRank(factoryBattleMode, factoryLvlMode);
currSpecies = SPECIES_NONE;
i = 0;
while (i != PARTY_SIZE)
{
- if (i < var_40)
- monSetId = GetMonSetId(factoryLvlMode, challengeNum, TRUE);
+ if (i < rentalRank) // The more times the player has rented, the more initial rentals are generated from a better set of pokemon
+ monId = GetFactoryMonId(factoryLvlMode, challengeNum, TRUE);
else
- monSetId = GetMonSetId(factoryLvlMode, challengeNum, FALSE);
+ monId = GetFactoryMonId(factoryLvlMode, challengeNum, FALSE);
- if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN)
+ if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
continue;
// Cannot have two pokemon of the same species.
for (j = firstMonId; j < firstMonId + i; j++)
{
- u16 monId = monIds[j];
- if (monId == monSetId)
+ u16 existingMonId = monIds[j];
+ if (existingMonId == monId)
break;
- if (species[j] == gFacilityTrainerMons[monSetId].species)
+ if (species[j] == gFacilityTrainerMons[monId].species)
{
if (currSpecies == SPECIES_NONE)
- currSpecies = gFacilityTrainerMons[monSetId].species;
+ currSpecies = gFacilityTrainerMons[monId].species;
else
break;
}
@@ -564,9 +567,9 @@ static void GenerateInitialRentalMons(void)
// Cannot have two same held items.
for (j = firstMonId; j < firstMonId + i; j++)
{
- if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
+ if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
{
- if (gFacilityTrainerMons[monSetId].species == currSpecies)
+ if (gFacilityTrainerMons[monId].species == currSpecies)
currSpecies = SPECIES_NONE;
break;
}
@@ -574,10 +577,10 @@ static void GenerateInitialRentalMons(void)
if (j != firstMonId + i)
continue;
- gSaveBlock2Ptr->frontier.rentalMons[i].monId = monSetId;
- species[i] = gFacilityTrainerMons[monSetId].species;
- heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
- monIds[i] = monSetId;
+ gSaveBlock2Ptr->frontier.rentalMons[i].monId = monId;
+ species[i] = gFacilityTrainerMons[monId].species;
+ heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
+ monIds[i] = monId;
i++;
}
}
@@ -629,10 +632,10 @@ static void GetOpponentBattleStyle(void)
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- u16 monSetId = gUnknown_03006298[i];
+ u16 monId = gUnknown_03006298[i];
for (j = 0; j < MAX_MON_MOVES; j++)
{
- u8 battleStyle = GetMoveBattleStyle(gFacilityTrainerMons[monSetId].moves[j]);
+ u8 battleStyle = GetMoveBattleStyle(gFacilityTrainerMons[monId].moves[j]);
stylePoints[battleStyle]++;
}
}
@@ -724,16 +727,16 @@ void FillFactoryBrainParty(void)
while (i != FRONTIER_PARTY_SIZE)
{
- u16 monSetId = GetMonSetId(lvlMode, challengeNum, FALSE);
+ u16 monId = GetFactoryMonId(lvlMode, challengeNum, FALSE);
- if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN)
+ if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
continue;
- if (monLevel == 50 && monSetId > FRONTIER_MONS_HIGH_TIER)
+ if (monLevel == 50 && monId > FRONTIER_MONS_HIGH_TIER)
continue;
for (j = 0; j < 6; j++)
{
- if (monSetId == gSaveBlock2Ptr->frontier.rentalMons[j].monId)
+ if (monId == gSaveBlock2Ptr->frontier.rentalMons[j].monId)
break;
}
if (j != 6)
@@ -741,7 +744,7 @@ void FillFactoryBrainParty(void)
for (k = 0; k < i; k++)
{
- if (species[k] == gFacilityTrainerMons[monSetId].species)
+ if (species[k] == gFacilityTrainerMons[monId].species)
break;
}
if (k != i)
@@ -749,35 +752,35 @@ void FillFactoryBrainParty(void)
for (k = 0; k < i; k++)
{
- if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
+ if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
break;
}
if (k != i)
continue;
- species[i] = gFacilityTrainerMons[monSetId].species;
- heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
+ species[i] = gFacilityTrainerMons[monId].species;
+ heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i],
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
monLevel,
- gFacilityTrainerMons[monSetId].nature,
+ gFacilityTrainerMons[monId].nature,
fixedIV,
- gFacilityTrainerMons[monSetId].evSpread,
+ gFacilityTrainerMons[monId].evSpread,
otId);
friendship = 0;
for (k = 0; k < MAX_MON_MOVES; k++)
- SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monSetId].moves[k], k);
+ SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monId].moves[k], k);
SetMonData(&gEnemyParty[i], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
i++;
}
}
-static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2)
+static u16 GetFactoryMonId(u8 lvlMode, u8 challengeNum, bool8 useBetterRange)
{
- u16 range, monSetId;
- u16 adder;
+ u16 numMons, monId;
+ u16 adder; // Used to skip past early mons for open level
if (lvlMode == FRONTIER_LVL_50)
adder = 0;
@@ -786,30 +789,31 @@ static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2)
if (challengeNum < 7)
{
- if (arg2)
+ if (useBetterRange)
{
- range = (sMonsToChooseFrom[adder + challengeNum + 1][1] - sMonsToChooseFrom[adder + challengeNum + 1][0]) + 1;
- monSetId = Random() % range;
- monSetId += sMonsToChooseFrom[adder + challengeNum + 1][0];
+ numMons = (sInitialRentalMonRanges[adder + challengeNum + 1][1] - sInitialRentalMonRanges[adder + challengeNum + 1][0]) + 1;
+ monId = Random() % numMons;
+ monId += sInitialRentalMonRanges[adder + challengeNum + 1][0];
}
else
{
- range = (sMonsToChooseFrom[adder + challengeNum][1] - sMonsToChooseFrom[adder + challengeNum][0]) + 1;
- monSetId = Random() % range;
- monSetId += sMonsToChooseFrom[adder + challengeNum][0];
+ numMons = (sInitialRentalMonRanges[adder + challengeNum][1] - sInitialRentalMonRanges[adder + challengeNum][0]) + 1;
+ monId = Random() % numMons;
+ monId += sInitialRentalMonRanges[adder + challengeNum][0];
}
}
else
{
- u16 num = challengeNum;
- if (num != 7)
- num = 7;
- range = (sMonsToChooseFrom[adder + num][1] - sMonsToChooseFrom[adder + num][0]) + 1;
- monSetId = Random() % range;
- monSetId += sMonsToChooseFrom[adder + num][0];
+ u16 challenge = challengeNum;
+ if (challenge != 7)
+ challenge = 7; // why bother assigning it above at all
+
+ numMons = (sInitialRentalMonRanges[adder + challenge][1] - sInitialRentalMonRanges[adder + challenge][0]) + 1;
+ monId = Random() % numMons;
+ monId += sInitialRentalMonRanges[adder + challenge][0];
}
- return monSetId;
+ return monId;
}
u8 GetNumPastRentalsRank(u8 battleMode, u8 lvlMode)
diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c
index de2f3a10c..388881a1c 100644
--- a/src/battle_factory_screen.c
+++ b/src/battle_factory_screen.c
@@ -24,6 +24,7 @@
#include "pokedex.h"
#include "util.h"
#include "trainer_pokemon_sprites.h"
+#include "starter_choose.h"
#include "constants/battle_frontier.h"
#include "constants/songs.h"
#include "constants/rgb.h"
@@ -57,7 +58,7 @@
struct FactorySelecteableMon
{
- u16 monSetId;
+ u16 monId;
u16 spriteId;
u8 selectedId; // 0 - not selected, 1 - first pokemon, 2 - second pokemon, 3 - third pokemon
struct Pokemon monData;
@@ -132,8 +133,6 @@ struct FactorySwapMonsStruct
bool8 unk30;
};
-extern const u32 gUnknown_085B18AC[];
-
// This file's functions.
static void sub_819A44C(struct Sprite *sprite);
static void CB2_InitSelectScreen(void);
@@ -168,7 +167,7 @@ static u8 sub_819BC9C(void);
static u8 Select_OptionSummary(void);
static u8 Select_OptionOthers(void);
static u8 Select_OptionRentDeselect(void);
-static bool32 Select_AreSpeciesValid(u16 monSetId);
+static bool32 Select_AreSpeciesValid(u16 monId);
static void Swap_DestroyAllSprites(void);
static void Swap_ShowYesNoOptions(void);
static void sub_819E8EC(void);
@@ -263,7 +262,7 @@ static const struct SpriteSheet gUnknown_086103BC[] =
static const struct CompressedSpriteSheet gUnknown_086103E4[] =
{
- {gUnknown_085B18AC, 0x800, TAG_TILE_64},
+ {gPokeballSelection_Gfx, 0x800, TAG_TILE_64},
{},
};
@@ -616,7 +615,7 @@ static const struct SpriteSheet gUnknown_08610650[] =
static const struct CompressedSpriteSheet gUnknown_086106A0[] =
{
- {gUnknown_085B18AC, 0x800, TAG_TILE_64},
+ {gPokeballSelection_Gfx, 0x800, TAG_TILE_64},
{},
};
@@ -1665,7 +1664,7 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId)
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7;
- u8 var_28 = 0;
+ u8 rentalRank = 0;
gFacilityTrainerMons = gBattleFrontierMons;
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50)
@@ -1673,29 +1672,29 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId)
else
level = 50;
- var_28 = GetNumPastRentalsRank(battleMode, lvlMode);
+ rentalRank = GetNumPastRentalsRank(battleMode, lvlMode);
otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId);
for (i = 0; i < SELECTABLE_MONS_COUNT; i++)
{
- u16 monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
- sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId;
- if (i < var_28)
+ u16 monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
+ sFactorySelectScreen->mons[i + firstMonId].monId = monId;
+ if (i < rentalRank)
ivs = GetFactoryMonFixedIV(challengeNum + 1, 0);
else
ivs = GetFactoryMonFixedIV(challengeNum, 0);
CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData,
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
level,
- gFacilityTrainerMons[monSetId].nature,
+ gFacilityTrainerMons[monId].nature,
ivs,
- gFacilityTrainerMons[monSetId].evSpread,
+ gFacilityTrainerMons[monId].evSpread,
otId);
happiness = 0;
for (j = 0; j < MAX_MON_MOVES; j++)
- SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j);
+ SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].moves[j], j);
SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness);
- SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
}
}
@@ -1712,20 +1711,20 @@ static void CreateTentFactorySelectableMons(u8 firstMonId)
for (i = 0; i < SELECTABLE_MONS_COUNT; i++)
{
- u16 monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
- sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId;
+ u16 monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
+ sFactorySelectScreen->mons[i + firstMonId].monId = monId;
CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData,
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
level,
- gFacilityTrainerMons[monSetId].nature,
+ gFacilityTrainerMons[monId].nature,
ivs,
- gFacilityTrainerMons[monSetId].evSpread,
+ gFacilityTrainerMons[monId].evSpread,
otId);
happiness = 0;
for (j = 0; j < MAX_MON_MOVES; j++)
- SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j);
+ SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].moves[j], j);
SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness);
- SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
}
}
@@ -1740,7 +1739,7 @@ static void Select_CopyMonsToPlayerParty(void)
if (sFactorySelectScreen->mons[j].selectedId == i + 1)
{
gPlayerParty[i] = sFactorySelectScreen->mons[j].monData;
- gSaveBlock2Ptr->frontier.rentalMons[i].monId = sFactorySelectScreen->mons[j].monSetId;
+ gSaveBlock2Ptr->frontier.rentalMons[i].monId = sFactorySelectScreen->mons[j].monId;
gSaveBlock2Ptr->frontier.rentalMons[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY, NULL);
gSaveBlock2Ptr->frontier.rentalMons[i].abilityNum = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ABILITY_NUM, NULL);
gSaveBlock2Ptr->frontier.rentalMons[i].ivs = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ATK_IV, NULL);
@@ -1871,8 +1870,8 @@ static u8 Select_RunMenuOptionFunc(void)
static u8 Select_OptionRentDeselect(void)
{
u8 selectedId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].selectedId;
- u16 monSetId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monSetId;
- if (selectedId == 0 && !Select_AreSpeciesValid(monSetId))
+ u16 monId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monId;
+ if (selectedId == 0 && !Select_AreSpeciesValid(monId))
{
Select_PrintCantSelectSameMon();
sub_819B958(3);
@@ -2160,10 +2159,10 @@ static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V)
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ);
}
-static bool32 Select_AreSpeciesValid(u16 monSetId)
+static bool32 Select_AreSpeciesValid(u16 monId)
{
u8 i, j;
- u32 species = gFacilityTrainerMons[monSetId].species;
+ u32 species = gFacilityTrainerMons[monId].species;
u8 selectState = sFactorySelectScreen->selectingMonsState;
for (i = 1; i < selectState; i++)
@@ -2172,7 +2171,7 @@ static bool32 Select_AreSpeciesValid(u16 monSetId)
{
if (sFactorySelectScreen->mons[j].selectedId == i)
{
- if (gFacilityTrainerMons[sFactorySelectScreen->mons[j].monSetId].species == species)
+ if (gFacilityTrainerMons[sFactorySelectScreen->mons[j].monId].species == species)
return FALSE;
break;
diff --git a/src/crt0.s b/src/crt0.s
index 3ab711713..cb7c93a6b 100644
--- a/src/crt0.s
+++ b/src/crt0.s
@@ -82,10 +82,10 @@ GPIOPortReadEnable: @ 80000C8
.align 2, 0
.global Init
Init: @ 8000204
- mov r0, PSR_IRQ_MODE
+ mov r0, #PSR_IRQ_MODE
msr cpsr_cf, r0
ldr sp, sp_irq
- mov r0, PSR_SYS_MODE
+ mov r0, #PSR_SYS_MODE
msr cpsr_cf, r0
ldr sp, sp_sys
ldr r1, =INTR_VECTOR
@@ -106,91 +106,91 @@ sp_irq: .word IWRAM_END - 0x60
.align 2, 0
.global IntrMain
IntrMain: @ 8000248
- mov r3, REG_BASE
- add r3, r3, 0x200
- ldr r2, [r3, OFFSET_REG_IE - 0x200]
- ldrh r1, [r3, OFFSET_REG_IME - 0x200]
+ mov r3, #REG_BASE
+ add r3, r3, #OFFSET_REG_IE
+ ldr r2, [r3]
+ ldrh r1, [r3, #OFFSET_REG_IME - 0x200]
mrs r0, spsr
- stmdb sp!, {r0-r3,lr}
- mov r0, 0
- strh r0, [r3, OFFSET_REG_IME - 0x200]
- and r1, r2, r2, lsr 16
- mov r12, 0
- ands r0, r1, INTR_FLAG_VCOUNT
+ stmfd sp!, {r0-r3,lr}
+ mov r0, #0
+ strh r0, [r3, #OFFSET_REG_IME - 0x200]
+ and r1, r2, r2, lsr #16
+ mov r12, #0
+ ands r0, r1, #INTR_FLAG_VCOUNT
bne IntrMain_FoundIntr
add r12, r12, 0x4
mov r0, 0x1
- strh r0, [r3, OFFSET_REG_IME - 0x200]
- ands r0, r1, INTR_FLAG_SERIAL
+ strh r0, [r3, #OFFSET_REG_IME - 0x200]
+ ands r0, r1, #INTR_FLAG_SERIAL
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_TIMER3
+ ands r0, r1, #INTR_FLAG_TIMER3
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_HBLANK
+ ands r0, r1, #INTR_FLAG_HBLANK
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_VBLANK
+ ands r0, r1, #INTR_FLAG_VBLANK
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_TIMER0
+ ands r0, r1, #INTR_FLAG_TIMER0
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_TIMER1
+ ands r0, r1, #INTR_FLAG_TIMER1
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_TIMER2
+ ands r0, r1, #INTR_FLAG_TIMER2
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_DMA0
+ ands r0, r1, #INTR_FLAG_DMA0
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_DMA1
+ ands r0, r1, #INTR_FLAG_DMA1
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_DMA2
+ ands r0, r1, #INTR_FLAG_DMA2
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_DMA3
+ ands r0, r1, #INTR_FLAG_DMA3
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_KEYPAD
+ ands r0, r1, #INTR_FLAG_KEYPAD
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_GAMEPAK
- strbne r0, [r3, OFFSET_REG_SOUNDCNT_X - 0x200]
+ ands r0, r1, #INTR_FLAG_GAMEPAK
+ strbne r0, [r3, #REG_SOUNDCNT_X - REG_IE]
bne . @ spin
IntrMain_FoundIntr:
- strh r0, [r3, OFFSET_REG_IF - 0x200]
+ strh r0, [r3, #OFFSET_REG_IF - 0x200]
bic r2, r2, r0
ldr r0, =gSTWIStatus
ldr r0, [r0]
ldrb r0, [r0, 0xA]
mov r1, 0x8
- mov r0, r1, lsl r0
- orr r0, r0, INTR_FLAG_GAMEPAK
- orr r1, r0, INTR_FLAG_SERIAL | INTR_FLAG_TIMER3 | INTR_FLAG_VCOUNT | INTR_FLAG_HBLANK
+ lsl r0, r1, r0
+ orr r0, r0, #INTR_FLAG_GAMEPAK
+ orr r1, r0, #INTR_FLAG_SERIAL | INTR_FLAG_TIMER3 | INTR_FLAG_VCOUNT | INTR_FLAG_HBLANK
and r1, r1, r2
- strh r1, [r3, OFFSET_REG_IE - 0x200]
+ strh r1, [r3, #OFFSET_REG_IE - 0x200]
mrs r3, cpsr
- bic r3, r3, PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
- orr r3, r3, PSR_SYS_MODE
+ bic r3, r3, #PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
+ orr r3, r3, #PSR_SYS_MODE
msr cpsr_cf, r3
ldr r1, =gIntrTable
add r1, r1, r12
ldr r0, [r1]
- stmdb sp!, {lr}
+ stmfd sp!, {lr}
adr lr, IntrMain_RetAddr
bx r0
IntrMain_RetAddr:
- ldmia sp!, {lr}
+ ldmfd sp!, {lr}
mrs r3, cpsr
- bic r3, r3, PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
- orr r3, r3, PSR_I_BIT | PSR_IRQ_MODE
+ bic r3, r3, #PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
+ orr r3, r3, #PSR_I_BIT | PSR_IRQ_MODE
msr cpsr_cf, r3
ldmia sp!, {r0-r3,lr}
- strh r2, [r3, OFFSET_REG_IE - 0x200]
- strh r1, [r3, OFFSET_REG_IME - 0x200]
+ strh r2, [r3, #OFFSET_REG_IE - 0x200]
+ strh r1, [r3, #OFFSET_REG_IME - 0x200]
msr spsr_cf, r0
bx lr
diff --git a/src/field_specials.c b/src/field_specials.c
index 11d1d96e1..86b929491 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -3687,7 +3687,7 @@ void Unused_SetWeatherSunny(void)
SetCurrentAndNextWeather(WEATHER_SUNNY);
}
-// Always returns 1
+// All mart employees have a local id of 1, so function always returns 1
u32 GetMartEmployeeObjectEventId(void)
{
static const u8 sPokeMarts[][3] =
diff --git a/src/libgcnmultiboot.s b/src/libgcnmultiboot.s
index 0e418e51f..dbf70ccf8 100644
--- a/src/libgcnmultiboot.s
+++ b/src/libgcnmultiboot.s
@@ -22,7 +22,7 @@ GameCubeMultiBoot_Hash: @ 82DED70
movs r2, 0x20
GameCubeMultiBoot_Hash_Loop:
- lsrs r3, 1
+ lsrs r3, #1
bcc GameCubeMultiBoot_Hash_SkipEor
eors r3, r4
@@ -37,8 +37,8 @@ GameCubeMultiBoot_Hash_SkipEor:
thumb_func_start GameCubeMultiBoot_Main
@ void GameCubeMultiBoot_Main(struct GameCubeMultiBoot *mb);
GameCubeMultiBoot_Main: @ 82DED84
- ldr r1, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER]
- cmp r1, 0
+ ldr r1, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER]
+ cmp r1, #0
beq _082DEDAA
ldrb r1, [r0, 0x1]
adds r1, 0x1
@@ -47,30 +47,30 @@ GameCubeMultiBoot_Main: @ 82DED84
cmp r1, 0x2
beq _082DEDF4
ldr r3, pool_InterruptRegs
- ldrh r2, [r3, OFFSET_REG_IME - 0x200]
+ ldrh r2, [r3, #OFFSET_REG_IME - 0x200]
movs r1, 0
- strh r1, [r3, OFFSET_REG_IME - 0x200]
+ strh r1, [r3, #OFFSET_REG_IME - 0x200]
ldrb r1, [r0]
cmp r1, 0xA
bgt _082DEDA8
adds r1, 0x1
strb r1, [r0]
_082DEDA8:
- strh r2, [r3, OFFSET_REG_IME - 0x200]
+ strh r2, [r3, #OFFSET_REG_IME - 0x200]
_082DEDAA:
bcs GameCubeMultiBoot_Init
ldrb r1, [r0, 0x2]
cmp r1, 0
bne _082DEDF6
- ldr r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
- ldr r2, [r0, GCMB_STRUCT_BASE_DEST_PTR]
+ ldr r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
+ ldr r2, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
subs r1, r2
beq _082DEE76
cmp r1, 0xA0
bcc _082DEE76
push {r4-r6}
movs r1, 0x98
- adds r2, ROM_HEADER_NINTENDO_LOGO_OFFSET
+ adds r2, #ROM_HEADER_NINTENDO_LOGO_OFFSET
ldr r4, pool_NintendoLogo
_082DEDC6:
ldm r2!, {r5}
@@ -82,8 +82,8 @@ _082DEDC6:
ldm r2!, {r5}
ldm r4!, {r6}
eors r5, r6
- lsrs r5, 8
- str r2, [r0, GCMB_STRUCT_BASE_DEST_PTR]
+ lsrs r5, #8
+ str r2, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
_082DEDDC:
pop {r4-r6}
bne GameCubeMultiBoot_Init
@@ -100,11 +100,11 @@ _082DEDDC:
_082DEDF4:
bx lr
_082DEDF6:
- ldr r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
+ ldr r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
mov r12, r1
ldr r3, [r0, 0x18]
push {r4-r7}
- ldr r4, [r0, GCMB_STRUCT_BASE_DEST_PTR]
+ ldr r4, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
ldr r5, pool_Kawa
ldr r6, [r0, 0x14]
ldr r7, pool_HashVal
@@ -118,7 +118,7 @@ _082DEE06:
eors r3, r1
movs r2, 0x20
_082DEE16:
- lsrs r3, 1
+ lsrs r3, #1
bcc _082DEE1C
eors r3, r7
_082DEE1C:
@@ -128,22 +128,22 @@ _082DEE1C:
adds r6, 0x1
b _082DEE06
_082DEE26:
- str r4, [r0, GCMB_STRUCT_BASE_DEST_PTR]
+ str r4, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
str r6, [r0, 0x14]
pop {r4-r7}
str r3, [r0, 0x18]
ldrh r1, [r0, 0x12]
- cmp r1, 0
+ cmp r1, #0
bne _082DEE76
- ldr r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
- ldr r2, [r0, GCMB_STRUCT_BASE_DEST_PTR]
+ ldr r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
+ ldr r2, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
cmp r1, r2
bne _082DEE76
ldr r1, [r0, 0xC]
- cmp r1, 0
+ cmp r1, #0
beq _082DEE60
ldrh r1, [r0, 0x10]
- cmp r1, 0
+ cmp r1, #0
beq _082DEDF4
mov r12, lr
movs r1, 0xBB
@@ -159,11 +159,11 @@ _082DEE26:
_082DEE60:
mov r12, lr
ldrb r1, [r0, 0x3]
- lsls r1, 24
+ lsls r1, #24
subs r1, 0x1
str r1, [r0, 0xC]
bl GameCubeMultiBoot_Hash
- lsls r3, 8
+ lsls r3, #8
adds r3, 0xFF
str r3, [r0, 0x1C]
bx r12
@@ -186,8 +186,8 @@ GameCubeMultiBoot_ExecuteProgram: @ 82DEE84
cmp r1, 0x2
bne GameCubeMultiBoot_ExecuteProgram_Fail
ldr r3, pool_InterruptRegs
- movs r1, 0
- strh r1, [r3, OFFSET_REG_IME - 0x200]
+ movs r1, #0
+ strh r1, [r3, #OFFSET_REG_IME - 0x200]
ldr r1, pool_MultiBootLoadAddr
adds r1, 0xC0
bx r1
@@ -201,25 +201,25 @@ GameCubeMultiBoot_Init: @ 82DEE98
ldr r3, pool_InterruptRegs
@ Save IME register.
- ldrh r2, [r3, OFFSET_REG_IME - 0x200]
+ ldrh r2, [r3, #OFFSET_REG_IME - 0x200]
@ Disable interrupts.
movs r1, 0
- strh r1, [r3, OFFSET_REG_IME - 0x200]
+ strh r1, [r3, #OFFSET_REG_IME - 0x200]
@ Set the handler to the "Stop" routine.
@ Unless the first command that is received is a device reset command, the
@ "Stop" routine will be executed and no further commands will be processed.
adr r3, GcMbIntrHandler_Stop
- str r3, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER]
+ str r3, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER]
ldrb r3, [r0, 0x3]
push {r3}
ldrb r3, [r0, 0x1]
push {r0,r3}
- adds r3, r0, 0
- adds r3, GCMB_STRUCT_BASE_DEST_PTR
+ adds r3, r0, #0
+ adds r3, #GCMB_STRUCT_BASE_DEST_PTR
@ clear all but the last 3 fields of the struct
GameCubeMultiBoot_Init_ClearStructLoop:
@@ -261,7 +261,7 @@ GameCubeMultiBoot_Init_ClearStructLoop:
strh r1, [r3, OFFSET_REG_IE - 0x200]
@ Restore IME register.
- strh r2, [r3, OFFSET_REG_IME - 0x200]
+ strh r2, [r3, #OFFSET_REG_IME - 0x200]
bx lr
thumb_func_end GameCubeMultiBoot_Init
@@ -275,11 +275,11 @@ GameCubeMultiBoot_HandleSerialInterrupt: @ 82DEEE2
ldrh r1, [r3, OFFSET_REG_JOYCNT - 0x120]
strh r1, [r3, OFFSET_REG_JOYCNT - 0x120]
- movs r2, 0
+ movs r2, #0
strb r2, [r0]
- ldr r2, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER]
- cmp r2, 0
+ ldr r2, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER]
+ cmp r2, #0
beq GameCubeMultiBoot_HandleSerialInterruptDone
lsrs r1, 1 @ was a device reset command received?
@@ -297,7 +297,7 @@ GcMbIntrHandler_Stop:
strh r2, [r3, OFFSET_REG_JOYSTAT - 0x120]
GameCubeMultiBoot_SetInterruptHandler:
- str r2, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER]
+ str r2, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER]
GameCubeMultiBoot_ReadVCount:
ldr r3, pool_RegDispstat
@@ -319,8 +319,8 @@ GameCubeMultiBoot_BeginHandshake:
cmp r1, 0
bne GcMbIntrHandler_Stop
ldr r1, pool_MultiBootLoadAddr
- str r1, [r0, GCMB_STRUCT_BASE_DEST_PTR]
- str r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
+ str r1, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
+ str r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
adr r2, GcMbIntrHandler_CheckGameCodeSent
b GameCubeMultiBoot_SetInterruptHandler
@@ -417,8 +417,8 @@ _082DEF94:
_082DEFA6:
bne GcMbIntrHandler_Stop
ldr r1, pool_MultiBootLoadAddr
- str r1, [r0, GCMB_STRUCT_BASE_DEST_PTR]
- str r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
+ str r1, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
+ str r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
adr r2, GcMbIntrHandler_82DEFB4
b GameCubeMultiBoot_SetInterruptHandler
@@ -427,7 +427,7 @@ _082DEFA6:
GcMbIntrHandler_82DEFB4: @ 82DEFB4
lsrs r1, 1 @ is receive complete?
bcc GcMbIntrHandler_Stop @ branch if not
- ldr r2, [r0, GCMB_STRUCT_CUR_DEST_PTR]
+ ldr r2, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
movs r1, 0x4
ands r1, r2
adds r1, 0x8
@@ -435,7 +435,7 @@ GcMbIntrHandler_82DEFB4: @ 82DEFB4
strh r1, [r3, OFFSET_REG_JOYSTAT - 0x120]
ldr r1, [r3, OFFSET_REG_JOY_RECV - 0x120]
stm r2!, {r1}
- str r2, [r0, GCMB_STRUCT_CUR_DEST_PTR]
+ str r2, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
ldrh r1, [r0, 0x12]
subs r1, 0x1
strh r1, [r0, 0x12]
@@ -500,11 +500,11 @@ GameCubeMultiBoot_Quit: @ 82DF012
ldr r3, pool_InterruptRegs
@ Save IME register.
- ldrh r2, [r3, OFFSET_REG_IME - 0x200]
+ ldrh r2, [r3, #OFFSET_REG_IME - 0x200]
@ Disable interrupts.
movs r1, 0
- strh r1, [r3, OFFSET_REG_IME - 0x200]
+ strh r1, [r3, #OFFSET_REG_IME - 0x200]
ldr r3, pool_SerialRegs
@@ -528,7 +528,7 @@ GameCubeMultiBoot_Quit: @ 82DF012
strh r1, [r3, OFFSET_REG_IE - 0x200]
@ Restore IME register.
- strh r2, [r3, OFFSET_REG_IME - 0x200]
+ strh r2, [r3, #OFFSET_REG_IME - 0x200]
bx lr
thumb_func_end GameCubeMultiBoot_Quit
diff --git a/src/pokemon.c b/src/pokemon.c
index 3e769961e..80e93c568 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -5836,7 +5836,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
u16 totalEVs = 0;
u16 heldItem;
u8 holdEffect;
- int i;
+ int i, multiplier;
for (i = 0; i < NUM_STATS; i++)
{
@@ -5846,43 +5846,37 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
for (i = 0; i < NUM_STATS; i++)
{
- u8 hasHadPokerus;
- int multiplier;
-
if (totalEVs >= MAX_TOTAL_EVS)
break;
-
- hasHadPokerus = CheckPartyHasHadPokerus(mon, 0);
-
- if (hasHadPokerus)
+
+ if (CheckPartyHasHadPokerus(mon, 0))
multiplier = 2;
else
multiplier = 1;
switch (i)
{
- case 0:
+ case STAT_HP:
evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier;
break;
- case 1:
+ case STAT_ATK:
evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier;
break;
- case 2:
+ case STAT_DEF:
evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier;
break;
- case 3:
+ case STAT_SPEED:
evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier;
break;
- case 4:
+ case STAT_SPATK:
evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier;
break;
- case 5:
+ case STAT_SPDEF:
evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier;
break;
}
heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
-
if (heldItem == ITEM_ENIGMA_BERRY)
{
if (gMain.inBattle)
diff --git a/src/starter_choose.c b/src/starter_choose.c
index dbdb1a8b3..6295e33ca 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -14,6 +14,7 @@
#include "sound.h"
#include "sprite.h"
#include "starter_choose.h"
+#include "strings.h"
#include "task.h"
#include "text.h"
#include "text_window.h"
@@ -27,54 +28,45 @@
#define STARTER_MON_COUNT 3
// Position of the sprite of the selected starter Pokemon
-#define STARTER_PKMN_POS_X 120
+#define STARTER_PKMN_POS_X (DISPLAY_WIDTH / 2)
#define STARTER_PKMN_POS_Y 64
-// text
-extern const u8 gText_BirchInTrouble[];
-extern const u8 gText_ConfirmStarterChoice[];
-
-// this file's functions
-static void MainCallback2_StarterChoose(void);
-static void sub_8134604(void);
-static void Task_StarterChoose1(u8 taskId);
-static void Task_StarterChoose2(u8 taskId);
-static void Task_StarterChoose3(u8 taskId);
-static void Task_StarterChoose4(u8 taskId);
-static void Task_StarterChoose5(u8 taskId);
-static void Task_StarterChoose6(u8 taskId);
+#define TAG_POKEBALL_SELECT 0x1000
+#define TAG_STARTER_CIRCLE 0x1001
+
+static void CB2_StarterChoose(void);
+static void ClearStarterLabel(void);
+static void Task_StarterChoose(u8 taskId);
+static void Task_HandleStarterChooseInput(u8 taskId);
+static void Task_WaitForStarterSprite(u8 taskId);
+static void Task_AskConfirmStarter(u8 taskId);
+static void Task_HandleConfirmStarterInput(u8 taskId);
+static void Task_DeclineStarter(u8 taskId);
static void Task_MoveStarterChooseCursor(u8 taskId);
-static void sub_8134668(u8 taskId);
+static void Task_CreateStarterLabel(u8 taskId);
static void CreateStarterPokemonLabel(u8 selection);
static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y);
-void sub_81346DC(struct Sprite *sprite);
-void sub_813473C(struct Sprite *sprite);
-void StarterPokemonSpriteCallback(struct Sprite *sprite);
+static void SpriteCB_SelectionHand(struct Sprite *sprite);
+static void SpriteCB_Pokeball(struct Sprite *sprite);
+static void SpriteCB_StarterPokemon(struct Sprite *sprite);
-static u16 sStarterChooseWindowId;
+static u16 sStarterLabelWindowId;
-// .rodata
const u16 gBirchBagGrassPal[][16] =
{
INCBIN_U16("graphics/misc/birch_bag.gbapal"),
INCBIN_U16("graphics/misc/birch_grass.gbapal"),
};
-const u16 gBirchBallarrow_Pal[] = INCBIN_U16("graphics/misc/birch_ballarrow.gbapal");
-
-const u16 gBirchCircle_Pal[] = INCBIN_U16("graphics/misc/birch_circle.gbapal");
-
+static const u16 sPokeballSelection_Pal[] = INCBIN_U16("graphics/misc/pokeball_selection.gbapal");
+static const u16 sStarterCircle_Pal[] = INCBIN_U16("graphics/misc/starter_circle.gbapal");
const u32 gBirchBagTilemap[] = INCBIN_U32("graphics/misc/birch_bag_map.bin.lz");
-
const u32 gBirchGrassTilemap[] = INCBIN_U32("graphics/misc/birch_grass_map.bin.lz");
+const u32 gBirchHelpGfx[] = INCBIN_U32("graphics/misc/birch_help.4bpp.lz"); // Birch bag and grass combined
+const u32 gPokeballSelection_Gfx[] = INCBIN_U32("graphics/misc/pokeball_selection.4bpp.lz");
+static const u32 sStarterCircle_Gfx[] = INCBIN_U32("graphics/misc/starter_circle.4bpp.lz");
-const u32 gBirchHelpGfx[] = INCBIN_U32("graphics/misc/birch_help.4bpp.lz");
-
-const u32 gUnknown_085B18AC[] = INCBIN_U32("graphics/misc/birch_ballarrow.4bpp.lz");
-
-const u32 gUnknown_085B1BCC[] = INCBIN_U32("graphics/misc/birch_circle.4bpp.lz");
-
-static const struct WindowTemplate gUnknown_085B1DCC[] =
+static const struct WindowTemplate sWindowTemplates[] =
{
{
.bg = 0,
@@ -88,7 +80,7 @@ static const struct WindowTemplate gUnknown_085B1DCC[] =
DUMMY_WIN_TEMPLATE,
};
-static const struct WindowTemplate gUnknown_085B1DDC =
+static const struct WindowTemplate sWindowTemplate_ConfirmStarter =
{
.bg = 0,
.tilemapLeft = 24,
@@ -99,7 +91,7 @@ static const struct WindowTemplate gUnknown_085B1DDC =
.baseBlock = 0x0260
};
-static const struct WindowTemplate gUnknown_085B1DE4 =
+static const struct WindowTemplate sWindowTemplate_StarterLabel =
{
.bg = 0,
.tilemapLeft = 0,
@@ -117,7 +109,7 @@ static const u8 sPokeballCoords[STARTER_MON_COUNT][2] =
{180, 64},
};
-static const u8 sStarterLabelCoords[][2] =
+static const u8 sStarterLabelCoords[STARTER_MON_COUNT][2] =
{
{0, 9},
{16, 10},
@@ -131,7 +123,7 @@ static const u16 sStarterMon[STARTER_MON_COUNT] =
SPECIES_MUDKIP,
};
-static const struct BgTemplate gUnknown_085B1E00[3] =
+static const struct BgTemplate sBgTemplates[3] =
{
{
.bg = 0,
@@ -164,7 +156,7 @@ static const struct BgTemplate gUnknown_085B1E00[3] =
static const u8 sTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY};
-static const struct OamData gOamData_85B1E10 =
+static const struct OamData sOam_Hand =
{
.y = 160,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -181,7 +173,7 @@ static const struct OamData gOamData_85B1E10 =
.affineParam = 0,
};
-static const struct OamData gOamData_85B1E18 =
+static const struct OamData sOam_Pokeball =
{
.y = 160,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -198,7 +190,7 @@ static const struct OamData gOamData_85B1E18 =
.affineParam = 0,
};
-static const struct OamData gOamData_85B1E20 =
+static const struct OamData sOam_StarterCircle =
{
.y = 160,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -222,19 +214,19 @@ static const u8 sCursorCoords[][2] =
{180, 32},
};
-static const union AnimCmd gSpriteAnim_85B1E30[] =
+static const union AnimCmd sAnim_Hand[] =
{
ANIMCMD_FRAME(48, 30),
ANIMCMD_END,
};
-static const union AnimCmd gSpriteAnim_85B1E38[] =
+static const union AnimCmd sAnim_Pokeball_Still[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_END,
};
-static const union AnimCmd gSpriteAnim_85B1E40[] =
+static const union AnimCmd sAnim_Pokeball_Moving[] =
{
ANIMCMD_FRAME(16, 4),
ANIMCMD_FRAME(0, 4),
@@ -256,109 +248,109 @@ static const union AnimCmd gSpriteAnim_85B1E40[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd gSpriteAnim_85B1E88[] =
+static const union AnimCmd sAnim_StarterCircle[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_END,
};
-static const union AnimCmd * const gSpriteAnimTable_85B1E90[] =
+static const union AnimCmd * const sAnims_Hand[] =
{
- gSpriteAnim_85B1E30,
+ sAnim_Hand,
};
-static const union AnimCmd * const gSpriteAnimTable_85B1E94[] =
+static const union AnimCmd * const sAnims_Pokeball[] =
{
- gSpriteAnim_85B1E38,
- gSpriteAnim_85B1E40,
+ sAnim_Pokeball_Still,
+ sAnim_Pokeball_Moving,
};
-static const union AnimCmd * const gSpriteAnimTable_85B1E9C[] =
+static const union AnimCmd * const sAnims_StarterCircle[] =
{
- gSpriteAnim_85B1E88,
+ sAnim_StarterCircle,
};
-static const union AffineAnimCmd gSpriteAffineAnim_85B1EA0[] =
+static const union AffineAnimCmd sAffineAnim_StarterPokemon[] =
{
AFFINEANIMCMD_FRAME(16, 16, 0, 0),
AFFINEANIMCMD_FRAME(16, 16, 0, 15),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gSpriteAffineAnim_85B1EB8[] =
+static const union AffineAnimCmd sAffineAnim_StarterCircle[] =
{
AFFINEANIMCMD_FRAME(20, 20, 0, 0),
AFFINEANIMCMD_FRAME(20, 20, 0, 15),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd * const gUnknown_085B1ED0 = {gSpriteAffineAnim_85B1EA0};
-static const union AffineAnimCmd * const gSpriteAffineAnimTable_85B1ED4[] = {gSpriteAffineAnim_85B1EB8};
+static const union AffineAnimCmd * const sAffineAnims_StarterPokemon = {sAffineAnim_StarterPokemon};
+static const union AffineAnimCmd * const sAffineAnims_StarterCircle[] = {sAffineAnim_StarterCircle};
-static const struct CompressedSpriteSheet gUnknown_085B1ED8[] =
+static const struct CompressedSpriteSheet sSpriteSheet_PokeballSelect[] =
{
{
- .data = gUnknown_085B18AC,
+ .data = gPokeballSelection_Gfx,
.size = 0x0800,
- .tag = 0x1000
+ .tag = TAG_POKEBALL_SELECT
},
{}
};
-static const struct CompressedSpriteSheet gUnknown_085B1EE8[] =
+static const struct CompressedSpriteSheet sSpriteSheet_StarterCircle[] =
{
{
- .data = gUnknown_085B1BCC,
+ .data = sStarterCircle_Gfx,
.size = 0x0800,
- .tag = 0x1001
+ .tag = TAG_STARTER_CIRCLE
},
{}
};
-static const struct SpritePalette gUnknown_085B1EF8[] =
+static const struct SpritePalette sSpritePalettes_StarterChoose[] =
{
{
- .data = gBirchBallarrow_Pal,
- .tag = 0x1000
+ .data = sPokeballSelection_Pal,
+ .tag = TAG_POKEBALL_SELECT
},
{
- .data = gBirchCircle_Pal,
- .tag = 0x1001
+ .data = sStarterCircle_Pal,
+ .tag = TAG_STARTER_CIRCLE
},
{},
};
static const struct SpriteTemplate sSpriteTemplate_Hand =
{
- .tileTag = 0x1000,
- .paletteTag = 0x1000,
- .oam = &gOamData_85B1E10,
- .anims = gSpriteAnimTable_85B1E90,
+ .tileTag = TAG_POKEBALL_SELECT,
+ .paletteTag = TAG_POKEBALL_SELECT,
+ .oam = &sOam_Hand,
+ .anims = sAnims_Hand,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81346DC
+ .callback = SpriteCB_SelectionHand
};
-static const struct SpriteTemplate sSpriteTemplate_PokeBall =
+static const struct SpriteTemplate sSpriteTemplate_Pokeball =
{
- .tileTag = 0x1000,
- .paletteTag = 0x1000,
- .oam = &gOamData_85B1E18,
- .anims = gSpriteAnimTable_85B1E94,
+ .tileTag = TAG_POKEBALL_SELECT,
+ .paletteTag = TAG_POKEBALL_SELECT,
+ .oam = &sOam_Pokeball,
+ .anims = sAnims_Pokeball,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_813473C
+ .callback = SpriteCB_Pokeball
};
-static const struct SpriteTemplate gUnknown_085B1F40 =
+static const struct SpriteTemplate sSpriteTemplate_StarterCircle =
{
- .tileTag = 0x1001,
- .paletteTag = 0x1001,
- .oam = &gOamData_85B1E20,
- .anims = gSpriteAnimTable_85B1E9C,
+ .tileTag = TAG_STARTER_CIRCLE,
+ .paletteTag = TAG_STARTER_CIRCLE,
+ .oam = &sOam_StarterCircle,
+ .anims = sAnims_StarterCircle,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_85B1ED4,
- .callback = StarterPokemonSpriteCallback
+ .affineAnims = sAffineAnims_StarterCircle,
+ .callback = SpriteCB_StarterPokemon
};
// .text
@@ -376,10 +368,15 @@ static void VblankCB_StarterChoose(void)
TransferPlttBuffer();
}
+// Data for Task_StarterChoose
#define tStarterSelection data[0]
#define tPkmnSpriteId data[1]
#define tCircleSpriteId data[2]
+// Data for sSpriteTemplate_Pokeball
+#define sTaskId data[0]
+#define sBallId data[1]
+
void CB2_ChooseStarter(void)
{
u16 savedIme;
@@ -412,8 +409,8 @@ void CB2_ChooseStarter(void)
LZ77UnCompVram(gBirchGrassTilemap, (void *)(BG_SCREEN_ADDR(7)));
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_085B1E00, ARRAY_COUNT(gUnknown_085B1E00));
- InitWindows(gUnknown_085B1DCC);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 0x2A8, 0xD0);
@@ -427,17 +424,17 @@ void CB2_ChooseStarter(void)
LoadPalette(GetOverworldTextboxPalettePtr(), 0xE0, 0x20);
LoadPalette(gBirchBagGrassPal, 0, 0x40);
- LoadCompressedSpriteSheet(&gUnknown_085B1ED8[0]);
- LoadCompressedSpriteSheet(&gUnknown_085B1EE8[0]);
- LoadSpritePalettes(gUnknown_085B1EF8);
+ LoadCompressedSpriteSheet(&sSpriteSheet_PokeballSelect[0]);
+ LoadCompressedSpriteSheet(&sSpriteSheet_StarterCircle[0]);
+ LoadSpritePalettes(sSpritePalettes_StarterChoose);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
EnableInterrupts(DISPSTAT_VBLANK);
SetVBlankCallback(VblankCB_StarterChoose);
- SetMainCallback2(MainCallback2_StarterChoose);
+ SetMainCallback2(CB2_StarterChoose);
- SetGpuReg(REG_OFFSET_WININ, 0x3F);
- SetGpuReg(REG_OFFSET_WINOUT, 0x1F);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ);
SetGpuReg(REG_OFFSET_WIN0H, 0);
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN);
@@ -449,7 +446,7 @@ void CB2_ChooseStarter(void)
ShowBg(2);
ShowBg(3);
- taskId = CreateTask(Task_StarterChoose1, 0);
+ taskId = CreateTask(Task_StarterChoose, 0);
gTasks[taskId].tStarterSelection = 1;
// Create hand sprite
@@ -457,22 +454,22 @@ void CB2_ChooseStarter(void)
gSprites[spriteId].data[0] = taskId;
// Create three Pokeball sprites
- spriteId = CreateSprite(&sSpriteTemplate_PokeBall, sPokeballCoords[0][0], sPokeballCoords[0][1], 2);
- gSprites[spriteId].data[0] = taskId;
- gSprites[spriteId].data[1] = 0;
+ spriteId = CreateSprite(&sSpriteTemplate_Pokeball, sPokeballCoords[0][0], sPokeballCoords[0][1], 2);
+ gSprites[spriteId].sTaskId = taskId;
+ gSprites[spriteId].sBallId = 0;
- spriteId = CreateSprite(&sSpriteTemplate_PokeBall, sPokeballCoords[1][0], sPokeballCoords[1][1], 2);
- gSprites[spriteId].data[0] = taskId;
- gSprites[spriteId].data[1] = 1;
+ spriteId = CreateSprite(&sSpriteTemplate_Pokeball, sPokeballCoords[1][0], sPokeballCoords[1][1], 2);
+ gSprites[spriteId].sTaskId = taskId;
+ gSprites[spriteId].sBallId = 1;
- spriteId = CreateSprite(&sSpriteTemplate_PokeBall, sPokeballCoords[2][0], sPokeballCoords[2][1], 2);
- gSprites[spriteId].data[0] = taskId;
- gSprites[spriteId].data[1] = 2;
+ spriteId = CreateSprite(&sSpriteTemplate_Pokeball, sPokeballCoords[2][0], sPokeballCoords[2][1], 2);
+ gSprites[spriteId].sTaskId = taskId;
+ gSprites[spriteId].sBallId = 2;
- sStarterChooseWindowId = 0xFF;
+ sStarterLabelWindowId = 0xFF;
}
-static void MainCallback2_StarterChoose(void)
+static void CB2_StarterChoose(void)
{
RunTasks();
AnimateSprites();
@@ -481,71 +478,71 @@ static void MainCallback2_StarterChoose(void)
UpdatePaletteFade();
}
-static void Task_StarterChoose1(u8 taskId)
+static void Task_StarterChoose(u8 taskId)
{
CreateStarterPokemonLabel(gTasks[taskId].tStarterSelection);
DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x2A8, 0xD);
AddTextPrinterParameterized(0, 1, gText_BirchInTrouble, 0, 1, 0, NULL);
PutWindowTilemap(0);
ScheduleBgCopyTilemapToVram(0);
- gTasks[taskId].func = Task_StarterChoose2;
+ gTasks[taskId].func = Task_HandleStarterChooseInput;
}
-static void Task_StarterChoose2(u8 taskId)
+static void Task_HandleStarterChooseInput(u8 taskId)
{
u8 selection = gTasks[taskId].tStarterSelection;
- if (gMain.newKeys & A_BUTTON)
+ if (JOY_NEW(A_BUTTON))
{
u8 spriteId;
- sub_8134604();
+ ClearStarterLabel();
// Create white circle background
- spriteId = CreateSprite(&gUnknown_085B1F40, sPokeballCoords[selection][0], sPokeballCoords[selection][1], 1);
+ spriteId = CreateSprite(&sSpriteTemplate_StarterCircle, sPokeballCoords[selection][0], sPokeballCoords[selection][1], 1);
gTasks[taskId].tCircleSpriteId = spriteId;
// Create Pokemon sprite
spriteId = CreatePokemonFrontSprite(GetStarterPokemon(gTasks[taskId].tStarterSelection), sPokeballCoords[selection][0], sPokeballCoords[selection][1]);
- gSprites[spriteId].affineAnims = &gUnknown_085B1ED0;
- gSprites[spriteId].callback = StarterPokemonSpriteCallback;
+ gSprites[spriteId].affineAnims = &sAffineAnims_StarterPokemon;
+ gSprites[spriteId].callback = SpriteCB_StarterPokemon;
gTasks[taskId].tPkmnSpriteId = spriteId;
- gTasks[taskId].func = Task_StarterChoose3;
+ gTasks[taskId].func = Task_WaitForStarterSprite;
}
- else if ((gMain.newKeys & DPAD_LEFT) && selection > 0)
+ else if (JOY_NEW(DPAD_LEFT) && selection > 0)
{
gTasks[taskId].tStarterSelection--;
gTasks[taskId].func = Task_MoveStarterChooseCursor;
}
- else if ((gMain.newKeys & DPAD_RIGHT) && selection < (STARTER_MON_COUNT - 1))
+ else if (JOY_NEW(DPAD_RIGHT) && selection < STARTER_MON_COUNT - 1)
{
gTasks[taskId].tStarterSelection++;
gTasks[taskId].func = Task_MoveStarterChooseCursor;
}
}
-static void Task_StarterChoose3(u8 taskId)
+static void Task_WaitForStarterSprite(u8 taskId)
{
if (gSprites[gTasks[taskId].tCircleSpriteId].affineAnimEnded &&
- gSprites[gTasks[taskId].tCircleSpriteId].pos1.x == STARTER_PKMN_POS_X &&
- gSprites[gTasks[taskId].tCircleSpriteId].pos1.y == STARTER_PKMN_POS_Y)
+ gSprites[gTasks[taskId].tCircleSpriteId].pos1.x == STARTER_PKMN_POS_X &&
+ gSprites[gTasks[taskId].tCircleSpriteId].pos1.y == STARTER_PKMN_POS_Y)
{
- gTasks[taskId].func = Task_StarterChoose4;
+ gTasks[taskId].func = Task_AskConfirmStarter;
}
}
-static void Task_StarterChoose4(u8 taskId)
+static void Task_AskConfirmStarter(u8 taskId)
{
PlayCry1(GetStarterPokemon(gTasks[taskId].tStarterSelection), 0);
FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized(0, 1, gText_ConfirmStarterChoice, 0, 1, 0, NULL);
ScheduleBgCopyTilemapToVram(0);
- CreateYesNoMenu(&gUnknown_085B1DDC, 0x2A8, 0xD, 0);
- gTasks[taskId].func = Task_StarterChoose5;
+ CreateYesNoMenu(&sWindowTemplate_ConfirmStarter, 0x2A8, 0xD, 0);
+ gTasks[taskId].func = Task_HandleConfirmStarterInput;
}
-static void Task_StarterChoose5(u8 taskId)
+static void Task_HandleConfirmStarterInput(u8 taskId)
{
u8 spriteId;
@@ -558,7 +555,7 @@ static void Task_StarterChoose5(u8 taskId)
SetMainCallback2(gMain.savedCallback);
break;
case 1: // NO
- case -1: // B button
+ case MENU_B_PRESSED:
PlaySE(SE_SELECT);
spriteId = gTasks[taskId].tPkmnSpriteId;
FreeOamMatrix(gSprites[spriteId].oam.matrixNum);
@@ -567,14 +564,14 @@ static void Task_StarterChoose5(u8 taskId)
spriteId = gTasks[taskId].tCircleSpriteId;
FreeOamMatrix(gSprites[spriteId].oam.matrixNum);
DestroySprite(&gSprites[spriteId]);
- gTasks[taskId].func = Task_StarterChoose6;
+ gTasks[taskId].func = Task_DeclineStarter;
break;
}
}
-static void Task_StarterChoose6(u8 taskId)
+static void Task_DeclineStarter(u8 taskId)
{
- gTasks[taskId].func = Task_StarterChoose1;
+ gTasks[taskId].func = Task_StarterChoose;
}
static void CreateStarterPokemonLabel(u8 selection)
@@ -589,20 +586,20 @@ static void CreateStarterPokemonLabel(u8 selection)
CopyMonCategoryText(SpeciesToNationalPokedexNum(species), categoryText);
speciesName = gSpeciesNames[species];
- winTemplate = gUnknown_085B1DE4;
+ winTemplate = sWindowTemplate_StarterLabel;
winTemplate.tilemapLeft = sStarterLabelCoords[selection][0];
winTemplate.tilemapTop = sStarterLabelCoords[selection][1];
- sStarterChooseWindowId = AddWindow(&winTemplate);
- FillWindowPixelBuffer(sStarterChooseWindowId, PIXEL_FILL(0));
+ sStarterLabelWindowId = AddWindow(&winTemplate);
+ FillWindowPixelBuffer(sStarterLabelWindowId, PIXEL_FILL(0));
width = GetStringCenterAlignXOffset(7, categoryText, 0x68);
- AddTextPrinterParameterized3(sStarterChooseWindowId, 7, width, 1, sTextColors, 0, categoryText);
+ AddTextPrinterParameterized3(sStarterLabelWindowId, 7, width, 1, sTextColors, 0, categoryText);
width = GetStringCenterAlignXOffset(1, speciesName, 0x68);
- AddTextPrinterParameterized3(sStarterChooseWindowId, 1, width, 0x11, sTextColors, 0, speciesName);
+ AddTextPrinterParameterized3(sStarterLabelWindowId, 1, width, 17, sTextColors, 0, speciesName);
- PutWindowTilemap(sStarterChooseWindowId);
+ PutWindowTilemap(sStarterLabelWindowId);
ScheduleBgCopyTilemapToVram(0);
labelLeft = sStarterLabelCoords[selection][0] * 8 - 4;
@@ -613,12 +610,12 @@ static void CreateStarterPokemonLabel(u8 selection)
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(labelTop, labelBottom));
}
-static void sub_8134604(void)
+static void ClearStarterLabel(void)
{
- FillWindowPixelBuffer(sStarterChooseWindowId, PIXEL_FILL(0));
- ClearWindowTilemap(sStarterChooseWindowId);
- RemoveWindow(sStarterChooseWindowId);
- sStarterChooseWindowId = 0xFF;
+ FillWindowPixelBuffer(sStarterLabelWindowId, PIXEL_FILL(0));
+ ClearWindowTilemap(sStarterLabelWindowId);
+ RemoveWindow(sStarterLabelWindowId);
+ sStarterLabelWindowId = 0xFF;
SetGpuReg(REG_OFFSET_WIN0H, 0);
SetGpuReg(REG_OFFSET_WIN0V, 0);
ScheduleBgCopyTilemapToVram(0);
@@ -626,14 +623,14 @@ static void sub_8134604(void)
static void Task_MoveStarterChooseCursor(u8 taskId)
{
- sub_8134604();
- gTasks[taskId].func = sub_8134668;
+ ClearStarterLabel();
+ gTasks[taskId].func = Task_CreateStarterLabel;
}
-static void sub_8134668(u8 taskId)
+static void Task_CreateStarterLabel(u8 taskId)
{
CreateStarterPokemonLabel(gTasks[taskId].tStarterSelection);
- gTasks[taskId].func = Task_StarterChoose2;
+ gTasks[taskId].func = Task_HandleStarterChooseInput;
}
static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y)
@@ -645,25 +642,27 @@ static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y)
return spriteId;
}
-void sub_81346DC(struct Sprite *sprite)
+static void SpriteCB_SelectionHand(struct Sprite *sprite)
{
+ // Float up and down above selected pokeball
sprite->pos1.x = sCursorCoords[gTasks[sprite->data[0]].tStarterSelection][0];
sprite->pos1.y = sCursorCoords[gTasks[sprite->data[0]].tStarterSelection][1];
sprite->pos2.y = Sin(sprite->data[1], 8);
sprite->data[1] = (u8)(sprite->data[1]) + 4;
}
-void sub_813473C(struct Sprite *sprite)
+static void SpriteCB_Pokeball(struct Sprite *sprite)
{
- if (gTasks[sprite->data[0]].tStarterSelection == sprite->data[1])
+ // Animate pokeball if currently selected
+ if (gTasks[sprite->sTaskId].tStarterSelection == sprite->sBallId)
StartSpriteAnimIfDifferent(sprite, 1);
else
StartSpriteAnimIfDifferent(sprite, 0);
}
-void StarterPokemonSpriteCallback(struct Sprite *sprite)
+static void SpriteCB_StarterPokemon(struct Sprite *sprite)
{
- //Move sprite to upper center of screen
+ // Move sprite to upper center of screen
if (sprite->pos1.x > STARTER_PKMN_POS_X)
sprite->pos1.x -= 4;
if (sprite->pos1.x < STARTER_PKMN_POS_X)