Merge branch 'master' into doc-wnews
This commit is contained in:
@@ -1379,24 +1379,24 @@ static void Cmd_get_ability(void)
|
||||
return;
|
||||
}
|
||||
|
||||
if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE)
|
||||
if (gSpeciesInfo[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE)
|
||||
{
|
||||
if (gBaseStats[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE)
|
||||
if (gSpeciesInfo[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE)
|
||||
{
|
||||
// AI has no knowledge of opponent, so it guesses which ability.
|
||||
if (Random() & 1)
|
||||
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[0];
|
||||
AI_THINKING_STRUCT->funcResult = gSpeciesInfo[gBattleMons[battlerId].species].abilities[0];
|
||||
else
|
||||
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[1];
|
||||
AI_THINKING_STRUCT->funcResult = gSpeciesInfo[gBattleMons[battlerId].species].abilities[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[0]; // It's definitely ability 1.
|
||||
AI_THINKING_STRUCT->funcResult = gSpeciesInfo[gBattleMons[battlerId].species].abilities[0]; // It's definitely ability 1.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1.
|
||||
AI_THINKING_STRUCT->funcResult = gSpeciesInfo[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1.
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1427,15 +1427,15 @@ static void Cmd_check_ability(void)
|
||||
{
|
||||
ability = gBattleMons[battlerId].ability;
|
||||
}
|
||||
else if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE)
|
||||
else if (gSpeciesInfo[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE)
|
||||
{
|
||||
if (gBaseStats[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE)
|
||||
if (gSpeciesInfo[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE)
|
||||
{
|
||||
u8 abilityDummyVariable = ability; // Needed to match.
|
||||
if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != abilityDummyVariable
|
||||
&& gBaseStats[gBattleMons[battlerId].species].abilities[1] != abilityDummyVariable)
|
||||
if (gSpeciesInfo[gBattleMons[battlerId].species].abilities[0] != abilityDummyVariable
|
||||
&& gSpeciesInfo[gBattleMons[battlerId].species].abilities[1] != abilityDummyVariable)
|
||||
{
|
||||
ability = gBaseStats[gBattleMons[battlerId].species].abilities[0];
|
||||
ability = gSpeciesInfo[gBattleMons[battlerId].species].abilities[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1444,12 +1444,12 @@ static void Cmd_check_ability(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
ability = gBaseStats[gBattleMons[battlerId].species].abilities[0];
|
||||
ability = gSpeciesInfo[gBattleMons[battlerId].species].abilities[0];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ability = gBaseStats[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1.
|
||||
ability = gSpeciesInfo[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1.
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -199,9 +199,9 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
|
||||
|
||||
species = GetMonData(&party[i], MON_DATA_SPECIES);
|
||||
if (GetMonData(&party[i], MON_DATA_ABILITY_NUM) != 0)
|
||||
monAbility = gBaseStats[species].abilities[1];
|
||||
monAbility = gSpeciesInfo[species].abilities[1];
|
||||
else
|
||||
monAbility = gBaseStats[species].abilities[0];
|
||||
monAbility = gSpeciesInfo[species].abilities[0];
|
||||
|
||||
if (absorbingTypeAbility == monAbility && Random() & 1)
|
||||
{
|
||||
@@ -397,9 +397,9 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
|
||||
|
||||
species = GetMonData(&party[i], MON_DATA_SPECIES);
|
||||
if (GetMonData(&party[i], MON_DATA_ABILITY_NUM) != 0)
|
||||
monAbility = gBaseStats[species].abilities[1];
|
||||
monAbility = gSpeciesInfo[species].abilities[1];
|
||||
else
|
||||
monAbility = gBaseStats[species].abilities[0];
|
||||
monAbility = gSpeciesInfo[species].abilities[0];
|
||||
|
||||
moveFlags = AI_TypeCalc(gLastLandedMoves[gActiveBattler], species, monAbility);
|
||||
if (moveFlags & flags)
|
||||
@@ -703,8 +703,8 @@ u8 GetMostSuitableMonToSwitchInto(void)
|
||||
&& i != *(gBattleStruct->monToSwitchIntoId + battlerIn1)
|
||||
&& i != *(gBattleStruct->monToSwitchIntoId + battlerIn2))
|
||||
{
|
||||
u8 type1 = gBaseStats[species].type1;
|
||||
u8 type2 = gBaseStats[species].type2;
|
||||
u8 type1 = gSpeciesInfo[species].type1;
|
||||
u8 type2 = gSpeciesInfo[species].type2;
|
||||
u8 typeDmg = TYPE_MUL_NORMAL;
|
||||
ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type1, type1, type2, &typeDmg);
|
||||
ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type2, type1, type2, &typeDmg);
|
||||
|
||||
@@ -4561,11 +4561,11 @@ static void AnimTipMon_Step(struct Sprite *sprite)
|
||||
|
||||
void AnimTask_SkullBashPosition(u8 taskId)
|
||||
{
|
||||
u8 a;
|
||||
u8 side;
|
||||
|
||||
gTasks[taskId].data[0] = gBattlerSpriteIds[gBattleAnimAttacker];
|
||||
a = GetBattlerSide(gBattleAnimAttacker);
|
||||
gTasks[taskId].data[1] = a;
|
||||
side = GetBattlerSide(gBattleAnimAttacker);
|
||||
gTasks[taskId].data[1] = side;
|
||||
gTasks[taskId].data[2] = 0;
|
||||
switch (gBattleAnimArgs[0])
|
||||
{
|
||||
@@ -4577,7 +4577,7 @@ void AnimTask_SkullBashPosition(u8 taskId)
|
||||
gTasks[taskId].data[3] = 8;
|
||||
gTasks[taskId].data[4] = 0;
|
||||
gTasks[taskId].data[5] = 3;
|
||||
if (a == 0)
|
||||
if (side == B_SIDE_PLAYER)
|
||||
gTasks[taskId].data[5] *= -1;
|
||||
|
||||
gTasks[taskId].func = AnimTask_SkullBashPositionSet;
|
||||
@@ -4586,7 +4586,7 @@ void AnimTask_SkullBashPosition(u8 taskId)
|
||||
gTasks[taskId].data[3] = 8;
|
||||
gTasks[taskId].data[4] = 0x600;
|
||||
gTasks[taskId].data[5] = 0xC0;
|
||||
if (a == 0)
|
||||
if (side == B_SIDE_PLAYER)
|
||||
{
|
||||
gTasks[taskId].data[4] = -gTasks[taskId].data[4];
|
||||
gTasks[taskId].data[5] = -gTasks[taskId].data[5];
|
||||
|
||||
@@ -1163,7 +1163,7 @@ static void Task_GiveExpToMon(u8 taskId)
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u8 level = GetMonData(mon, MON_DATA_LEVEL);
|
||||
u32 currExp = GetMonData(mon, MON_DATA_EXP);
|
||||
u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
|
||||
u32 nextLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1];
|
||||
|
||||
if (currExp + gainedExp >= nextLvlExp)
|
||||
{
|
||||
@@ -1206,11 +1206,11 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
|
||||
u8 level = GetMonData(mon, MON_DATA_LEVEL);
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u32 exp = GetMonData(mon, MON_DATA_EXP);
|
||||
u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level];
|
||||
u32 currLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level];
|
||||
u32 expToNextLvl;
|
||||
|
||||
exp -= currLvlExp;
|
||||
expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
|
||||
expToNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - currLvlExp;
|
||||
SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp);
|
||||
PlaySE(SE_EXP);
|
||||
gTasks[taskId].func = Task_GiveExpWithExpBar;
|
||||
@@ -1242,7 +1242,7 @@ static void Task_GiveExpWithExpBar(u8 taskId)
|
||||
level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
|
||||
currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
|
||||
species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
|
||||
expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1];
|
||||
expOnNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1];
|
||||
|
||||
if (currExp + gainedExp >= expOnNextLvl)
|
||||
{
|
||||
|
||||
@@ -321,7 +321,7 @@ static void Task_GiveExpToMon(u8 taskId)
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u8 level = GetMonData(mon, MON_DATA_LEVEL);
|
||||
u32 currExp = GetMonData(mon, MON_DATA_EXP);
|
||||
u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
|
||||
u32 nextLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1];
|
||||
|
||||
if (currExp + gainedExp >= nextLvlExp)
|
||||
{
|
||||
@@ -364,11 +364,11 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
|
||||
u8 level = GetMonData(mon, MON_DATA_LEVEL);
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u32 exp = GetMonData(mon, MON_DATA_EXP);
|
||||
u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level];
|
||||
u32 currLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level];
|
||||
u32 expToNextLvl;
|
||||
|
||||
exp -= currLvlExp;
|
||||
expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
|
||||
expToNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - currLvlExp;
|
||||
SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp);
|
||||
PlaySE(SE_EXP);
|
||||
gTasks[taskId].func = Task_GiveExpWithExpBar;
|
||||
@@ -400,7 +400,7 @@ static void Task_GiveExpWithExpBar(u8 taskId)
|
||||
level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
|
||||
currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
|
||||
species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
|
||||
expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1];
|
||||
expOnNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1];
|
||||
|
||||
if (currExp + gainedExp >= expOnNextLvl)
|
||||
{
|
||||
|
||||
+25
-25
@@ -2348,8 +2348,8 @@ static void InitDomeTrainers(void)
|
||||
rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPDEF, NULL);
|
||||
rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPEED, NULL);
|
||||
rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_MAX_HP, NULL);
|
||||
monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type1];
|
||||
monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type2];
|
||||
monTypesBits |= gBitTable[gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type1];
|
||||
monTypesBits |= gBitTable[gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type2];
|
||||
}
|
||||
|
||||
// Count the number of types in the players party, to factor into the ranking
|
||||
@@ -2383,8 +2383,8 @@ static void InitDomeTrainers(void)
|
||||
rankingScores[i] += statValues[STAT_SPDEF];
|
||||
rankingScores[i] += statValues[STAT_SPEED];
|
||||
rankingScores[i] += statValues[STAT_HP];
|
||||
monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[DOME_MONS[i][j]].species].type1];
|
||||
monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[DOME_MONS[i][j]].species].type2];
|
||||
monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].type1];
|
||||
monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].type2];
|
||||
}
|
||||
|
||||
for (monTypesCount = 0, j = 0; j < 32; j++)
|
||||
@@ -2448,7 +2448,7 @@ static void InitDomeTrainers(void)
|
||||
|
||||
#define CALC_STAT(base, statIndex) \
|
||||
{ \
|
||||
u8 baseStat = gBaseStats[species].base; \
|
||||
u8 baseStat = gSpeciesInfo[species].base; \
|
||||
stats[statIndex] = (((2 * baseStat + ivs + evs[statIndex] / 4) * level) / 100) + 5; \
|
||||
stats[statIndex] = (u8) ModifyStatByNature(nature, stats[statIndex], statIndex); \
|
||||
}
|
||||
@@ -2481,7 +2481,7 @@ static void CalcDomeMonStats(u16 species, int level, int ivs, u8 evBits, u8 natu
|
||||
}
|
||||
else
|
||||
{
|
||||
int n = 2 * gBaseStats[species].baseHP;
|
||||
int n = 2 * gSpeciesInfo[species].baseHP;
|
||||
stats[STAT_HP] = (((n + ivs + evs[STAT_HP] / 4) * level) / 100) + level + 10;
|
||||
}
|
||||
|
||||
@@ -2750,9 +2750,9 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int mode)
|
||||
if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || gBattleMoves[move].power == 0)
|
||||
return 0;
|
||||
|
||||
defType1 = gBaseStats[targetSpecies].type1;
|
||||
defType2 = gBaseStats[targetSpecies].type2;
|
||||
defAbility = gBaseStats[targetSpecies].abilities[0];
|
||||
defType1 = gSpeciesInfo[targetSpecies].type1;
|
||||
defType2 = gSpeciesInfo[targetSpecies].type2;
|
||||
defAbility = gSpeciesInfo[targetSpecies].abilities[0];
|
||||
moveType = gBattleMoves[move].type;
|
||||
|
||||
if (defAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND)
|
||||
@@ -5204,9 +5204,9 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
|
||||
|
||||
targetSpecies = gFacilityTrainerMons[DOME_MONS[loserTournamentId][k]].species;
|
||||
if (var & 1)
|
||||
targetAbility = gBaseStats[targetSpecies].abilities[1];
|
||||
targetAbility = gSpeciesInfo[targetSpecies].abilities[1];
|
||||
else
|
||||
targetAbility = gBaseStats[targetSpecies].abilities[0];
|
||||
targetAbility = gSpeciesInfo[targetSpecies].abilities[0];
|
||||
|
||||
var = AI_TypeCalc(moveIds[i * MAX_MON_MOVES + j], targetSpecies, targetAbility);
|
||||
if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE && var & MOVE_RESULT_SUPER_EFFECTIVE)
|
||||
@@ -5883,8 +5883,8 @@ static void InitRandomTourneyTreeResults(void)
|
||||
statSums[i] += statValues[STAT_SPDEF];
|
||||
statSums[i] += statValues[STAT_SPEED];
|
||||
statSums[i] += statValues[STAT_HP];
|
||||
monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[DOME_MONS[i][j]].species].type1];
|
||||
monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[DOME_MONS[i][j]].species].type2];
|
||||
monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].type1];
|
||||
monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].type2];
|
||||
}
|
||||
|
||||
// Because GF hates temporary vars, trainerId acts like monTypesCount here.
|
||||
@@ -6010,12 +6010,12 @@ static void DecideRoundWinners(u8 roundId)
|
||||
}
|
||||
}
|
||||
species = gFacilityTrainerMons[DOME_MONS[tournamentId1][monId1]].species;
|
||||
points1 += ( gBaseStats[species].baseHP
|
||||
+ gBaseStats[species].baseAttack
|
||||
+ gBaseStats[species].baseDefense
|
||||
+ gBaseStats[species].baseSpeed
|
||||
+ gBaseStats[species].baseSpAttack
|
||||
+ gBaseStats[species].baseSpDefense) / 10;
|
||||
points1 += ( gSpeciesInfo[species].baseHP
|
||||
+ gSpeciesInfo[species].baseAttack
|
||||
+ gSpeciesInfo[species].baseDefense
|
||||
+ gSpeciesInfo[species].baseSpeed
|
||||
+ gSpeciesInfo[species].baseSpAttack
|
||||
+ gSpeciesInfo[species].baseSpDefense) / 10;
|
||||
}
|
||||
// Random part of the formula.
|
||||
points1 += (Random() & 0x1F);
|
||||
@@ -6033,12 +6033,12 @@ static void DecideRoundWinners(u8 roundId)
|
||||
}
|
||||
}
|
||||
species = gFacilityTrainerMons[DOME_MONS[tournamentId2][monId1]].species;
|
||||
points2 += ( gBaseStats[species].baseHP
|
||||
+ gBaseStats[species].baseAttack
|
||||
+ gBaseStats[species].baseDefense
|
||||
+ gBaseStats[species].baseSpeed
|
||||
+ gBaseStats[species].baseSpAttack
|
||||
+ gBaseStats[species].baseSpDefense) / 10;
|
||||
points2 += ( gSpeciesInfo[species].baseHP
|
||||
+ gSpeciesInfo[species].baseAttack
|
||||
+ gSpeciesInfo[species].baseDefense
|
||||
+ gSpeciesInfo[species].baseSpeed
|
||||
+ gSpeciesInfo[species].baseSpAttack
|
||||
+ gSpeciesInfo[species].baseSpDefense) / 10;
|
||||
}
|
||||
// Random part of the formula.
|
||||
points2 += (Random() & 0x1F);
|
||||
|
||||
@@ -618,9 +618,9 @@ static void GetOpponentMostCommonMonType(void)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
u32 species = gFacilityTrainerMons[gFrontierTempParty[i]].species;
|
||||
typeCounts[gBaseStats[species].type1]++;
|
||||
if (gBaseStats[species].type1 != gBaseStats[species].type2)
|
||||
typeCounts[gBaseStats[species].type2]++;
|
||||
typeCounts[gSpeciesInfo[species].type1]++;
|
||||
if (gSpeciesInfo[species].type1 != gSpeciesInfo[species].type2)
|
||||
typeCounts[gSpeciesInfo[species].type2]++;
|
||||
}
|
||||
|
||||
// Determine which are the two most-common types.
|
||||
|
||||
@@ -2199,9 +2199,9 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
|
||||
species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
level = GetMonData(mon, MON_DATA_LEVEL);
|
||||
exp = GetMonData(mon, MON_DATA_EXP);
|
||||
currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level];
|
||||
currLevelExp = gExperienceTables[gSpeciesInfo[species].growthRate][level];
|
||||
currExpBarValue = exp - currLevelExp;
|
||||
maxExpBarValue = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp;
|
||||
maxExpBarValue = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - currLevelExp;
|
||||
SetBattleBarStruct(battlerId, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles);
|
||||
MoveBattleBar(battlerId, healthboxSpriteId, EXP_BAR, 0);
|
||||
}
|
||||
|
||||
+7
-7
@@ -199,8 +199,8 @@ EWRAM_DATA u32 gHitMarker = 0;
|
||||
EWRAM_DATA static u8 sUnusedBattlersArray[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gUnusedFirstBattleVar2 = 0; // Never read
|
||||
EWRAM_DATA u16 gSideStatuses[2] = {0};
|
||||
EWRAM_DATA struct SideTimer gSideTimers[2] = {0};
|
||||
EWRAM_DATA u16 gSideStatuses[NUM_BATTLE_SIDES] = {0};
|
||||
EWRAM_DATA struct SideTimer gSideTimers[NUM_BATTLE_SIDES] = {0};
|
||||
EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gPauseCounterBattle = 0;
|
||||
@@ -3097,7 +3097,7 @@ static void BattleStartClearSetData(void)
|
||||
gBattleStruct->runTries = 0;
|
||||
gBattleStruct->safariGoNearCounter = 0;
|
||||
gBattleStruct->safariPkblThrowCounter = 0;
|
||||
*(&gBattleStruct->safariCatchFactor) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275;
|
||||
*(&gBattleStruct->safariCatchFactor) = gSpeciesInfo[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275;
|
||||
gBattleStruct->safariEscapeFactor = 3;
|
||||
gBattleStruct->wildVictorySong = 0;
|
||||
gBattleStruct->moneyMultiplier = 1;
|
||||
@@ -3332,8 +3332,8 @@ void FaintClearSetData(void)
|
||||
|
||||
gBattleResources->flags->flags[gActiveBattler] = 0;
|
||||
|
||||
gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1;
|
||||
gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2;
|
||||
gBattleMons[gActiveBattler].type1 = gSpeciesInfo[gBattleMons[gActiveBattler].species].type1;
|
||||
gBattleMons[gActiveBattler].type2 = gSpeciesInfo[gBattleMons[gActiveBattler].species].type2;
|
||||
|
||||
ClearBattlerMoveHistory(gActiveBattler);
|
||||
ClearBattlerAbilityHistory(gActiveBattler);
|
||||
@@ -3400,8 +3400,8 @@ static void BattleIntroDrawTrainersOrMonsSprites(void)
|
||||
for (i = 0; i < sizeof(struct BattlePokemon); i++)
|
||||
ptr[i] = gBattleBufferB[gActiveBattler][4 + i];
|
||||
|
||||
gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1;
|
||||
gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2;
|
||||
gBattleMons[gActiveBattler].type1 = gSpeciesInfo[gBattleMons[gActiveBattler].species].type1;
|
||||
gBattleMons[gActiveBattler].type2 = gSpeciesInfo[gBattleMons[gActiveBattler].species].type2;
|
||||
gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum);
|
||||
hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)];
|
||||
*hpOnSwitchout = gBattleMons[gActiveBattler].hp;
|
||||
|
||||
+8
-8
@@ -845,21 +845,21 @@ static bool8 DoesTypePreventStatus(u16 species, u32 status)
|
||||
switch (status)
|
||||
{
|
||||
case STATUS1_TOXIC_POISON:
|
||||
if (gBaseStats[species].type1 == TYPE_STEEL || gBaseStats[species].type1 == TYPE_POISON
|
||||
|| gBaseStats[species].type2 == TYPE_STEEL || gBaseStats[species].type2 == TYPE_POISON)
|
||||
if (gSpeciesInfo[species].type1 == TYPE_STEEL || gSpeciesInfo[species].type1 == TYPE_POISON
|
||||
|| gSpeciesInfo[species].type2 == TYPE_STEEL || gSpeciesInfo[species].type2 == TYPE_POISON)
|
||||
ret = TRUE;
|
||||
break;
|
||||
case STATUS1_FREEZE:
|
||||
if (gBaseStats[species].type1 == TYPE_ICE || gBaseStats[species].type2 == TYPE_ICE)
|
||||
if (gSpeciesInfo[species].type1 == TYPE_ICE || gSpeciesInfo[species].type2 == TYPE_ICE)
|
||||
ret = TRUE;
|
||||
break;
|
||||
case STATUS1_PARALYSIS:
|
||||
if (gBaseStats[species].type1 == TYPE_GROUND || gBaseStats[species].type1 == TYPE_ELECTRIC
|
||||
|| gBaseStats[species].type2 == TYPE_GROUND || gBaseStats[species].type2 == TYPE_ELECTRIC)
|
||||
if (gSpeciesInfo[species].type1 == TYPE_GROUND || gSpeciesInfo[species].type1 == TYPE_ELECTRIC
|
||||
|| gSpeciesInfo[species].type2 == TYPE_GROUND || gSpeciesInfo[species].type2 == TYPE_ELECTRIC)
|
||||
ret = TRUE;
|
||||
break;
|
||||
case STATUS1_BURN:
|
||||
if (gBaseStats[species].type1 == TYPE_FIRE || gBaseStats[species].type2 == TYPE_FIRE)
|
||||
if (gSpeciesInfo[species].type1 == TYPE_FIRE || gSpeciesInfo[species].type2 == TYPE_FIRE)
|
||||
ret = TRUE;
|
||||
break;
|
||||
case STATUS1_SLEEP:
|
||||
@@ -1138,9 +1138,9 @@ bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate)
|
||||
|
||||
SetMonData(&gEnemyParty[0],
|
||||
MON_DATA_EXP,
|
||||
&gExperienceTables[gBaseStats[wildMons[headerId][pikeMonId].species].growthRate][monLevel]);
|
||||
&gExperienceTables[gSpeciesInfo[wildMons[headerId][pikeMonId].species].growthRate][monLevel]);
|
||||
|
||||
if (gBaseStats[wildMons[headerId][pikeMonId].species].abilities[1])
|
||||
if (gSpeciesInfo[wildMons[headerId][pikeMonId].species].abilities[1])
|
||||
abilityNum = Random() % 2;
|
||||
else
|
||||
abilityNum = 0;
|
||||
|
||||
@@ -1371,7 +1371,7 @@ void GenerateBattlePyramidWildMon(void)
|
||||
}
|
||||
SetMonData(&gEnemyParty[0],
|
||||
MON_DATA_EXP,
|
||||
&gExperienceTables[gBaseStats[wildMons[id].species].growthRate][lvl]);
|
||||
&gExperienceTables[gSpeciesInfo[wildMons[id].species].growthRate][lvl]);
|
||||
|
||||
switch (wildMons[id].abilityNum)
|
||||
{
|
||||
@@ -1381,7 +1381,7 @@ void GenerateBattlePyramidWildMon(void)
|
||||
break;
|
||||
case ABILITY_RANDOM:
|
||||
default:
|
||||
if (gBaseStats[wildMons[id].species].abilities[1])
|
||||
if (gSpeciesInfo[wildMons[id].species].abilities[1])
|
||||
{
|
||||
i = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY, NULL) % 2;
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_ABILITY_NUM, &i);
|
||||
|
||||
@@ -160,7 +160,7 @@ static const struct ListMenuTemplate sListMenuTemplate =
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NARROW,
|
||||
.cursorKind = 0
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
enum {
|
||||
|
||||
@@ -1595,7 +1595,7 @@ u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility)
|
||||
{
|
||||
s32 i = 0;
|
||||
u8 flags = 0;
|
||||
u8 type1 = gBaseStats[targetSpecies].type1, type2 = gBaseStats[targetSpecies].type2;
|
||||
u8 type1 = gSpeciesInfo[targetSpecies].type1, type2 = gSpeciesInfo[targetSpecies].type2;
|
||||
u8 moveType;
|
||||
|
||||
if (move == MOVE_STRUGGLE)
|
||||
@@ -3274,7 +3274,7 @@ static void Cmd_getexp(void)
|
||||
viaExpShare++;
|
||||
}
|
||||
|
||||
calculatedExp = gBaseStats[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7;
|
||||
calculatedExp = gSpeciesInfo[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7;
|
||||
|
||||
if (viaExpShare) // at least one mon is getting exp via exp share
|
||||
{
|
||||
@@ -4604,8 +4604,8 @@ static void Cmd_switchindataupdate(void)
|
||||
for (i = 0; i < sizeof(struct BattlePokemon); i++)
|
||||
monData[i] = gBattleBufferB[gActiveBattler][4 + i];
|
||||
|
||||
gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1;
|
||||
gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2;
|
||||
gBattleMons[gActiveBattler].type1 = gSpeciesInfo[gBattleMons[gActiveBattler].species].type1;
|
||||
gBattleMons[gActiveBattler].type2 = gSpeciesInfo[gBattleMons[gActiveBattler].species].type2;
|
||||
gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum);
|
||||
|
||||
// check knocked off item
|
||||
@@ -8888,10 +8888,10 @@ static void Cmd_trydobeatup(void)
|
||||
|
||||
gBattlescriptCurrInstr += 9;
|
||||
|
||||
gBattleMoveDamage = gBaseStats[GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack;
|
||||
gBattleMoveDamage = gSpeciesInfo[GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack;
|
||||
gBattleMoveDamage *= gBattleMoves[gCurrentMove].power;
|
||||
gBattleMoveDamage *= (GetMonData(&party[gBattleCommunication[0]], MON_DATA_LEVEL) * 2 / 5 + 2);
|
||||
gBattleMoveDamage /= gBaseStats[gBattleMons[gBattlerTarget].species].baseDefense;
|
||||
gBattleMoveDamage /= gSpeciesInfo[gBattleMons[gBattlerTarget].species].baseDefense;
|
||||
gBattleMoveDamage = (gBattleMoveDamage / 50) + 2;
|
||||
if (gProtectStructs[gBattlerAttacker].helpingHand)
|
||||
gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
|
||||
@@ -9568,9 +9568,9 @@ static void Cmd_pickup(void)
|
||||
heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
|
||||
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM))
|
||||
ability = gBaseStats[species].abilities[1];
|
||||
ability = gSpeciesInfo[species].abilities[1];
|
||||
else
|
||||
ability = gBaseStats[species].abilities[0];
|
||||
ability = gSpeciesInfo[species].abilities[0];
|
||||
|
||||
if (ability == ABILITY_PICKUP
|
||||
&& species != SPECIES_NONE
|
||||
@@ -9591,9 +9591,9 @@ static void Cmd_pickup(void)
|
||||
heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
|
||||
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM))
|
||||
ability = gBaseStats[species].abilities[1];
|
||||
ability = gSpeciesInfo[species].abilities[1];
|
||||
else
|
||||
ability = gBaseStats[species].abilities[0];
|
||||
ability = gSpeciesInfo[species].abilities[0];
|
||||
|
||||
if (ability == ABILITY_PICKUP
|
||||
&& species != SPECIES_NONE
|
||||
@@ -9831,7 +9831,7 @@ static void Cmd_handleballthrow(void)
|
||||
if (gLastUsedItem == ITEM_SAFARI_BALL)
|
||||
catchRate = gBattleStruct->safariCatchFactor * 1275 / 100;
|
||||
else
|
||||
catchRate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate;
|
||||
catchRate = gSpeciesInfo[gBattleMons[gBattlerTarget].species].catchRate;
|
||||
|
||||
if (gLastUsedItem > ITEM_SAFARI_BALL)
|
||||
{
|
||||
|
||||
+1
-1
@@ -3539,7 +3539,7 @@ void TrySetLinkBattleTowerEnemyPartyLevel(void)
|
||||
u32 species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL);
|
||||
if (species)
|
||||
{
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_EXP, &gExperienceTables[gBaseStats[species].growthRate][enemyLevel]);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_EXP, &gExperienceTables[gSpeciesInfo[species].growthRate][enemyLevel]);
|
||||
CalculateMonStats(&gEnemyParty[i]);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -2676,7 +2676,7 @@ static void CB2_EndBlenderGame(void)
|
||||
switch (Menu_ProcessInputNoWrapClearOnChoose())
|
||||
{
|
||||
case 1:
|
||||
case -1:
|
||||
case MENU_B_PRESSED:
|
||||
sBerryBlender->yesNoAnswer = 1;
|
||||
sBerryBlender->gameEndState++;
|
||||
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
|
||||
|
||||
+2
-2
@@ -88,7 +88,7 @@ u16 FontFunc_Braille(struct TextPrinter *textPrinter)
|
||||
subStruct->fontId = *textPrinter->printerTemplate.currentChar;
|
||||
textPrinter->printerTemplate.currentChar++;
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_RESET_SIZE:
|
||||
case EXT_CTRL_CODE_RESET_FONT:
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_PAUSE:
|
||||
textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar++;
|
||||
@@ -109,7 +109,7 @@ u16 FontFunc_Braille(struct TextPrinter *textPrinter)
|
||||
case EXT_CTRL_CODE_ESCAPE:
|
||||
char_ = *++textPrinter->printerTemplate.currentChar;
|
||||
break;
|
||||
case EXT_CTRL_CODE_SHIFT_TEXT:
|
||||
case EXT_CTRL_CODE_SHIFT_RIGHT:
|
||||
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar++;
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_SHIFT_DOWN:
|
||||
|
||||
@@ -95,7 +95,7 @@ static void Task_ClearSaveDataScreenYesNoChoice(u8 taskId)
|
||||
gTasks[taskId].func = Task_ClearSaveData;
|
||||
break;
|
||||
case 1:
|
||||
case -1:
|
||||
case MENU_B_PRESSED:
|
||||
PlaySE(SE_SELECT);
|
||||
DestroyTask(taskId);
|
||||
SetMainCallback2(CB2_FadeAndDoReset);
|
||||
|
||||
+1
-1
@@ -5320,7 +5320,7 @@ static void SetMoveSpecificAnimData(u8 contestant)
|
||||
switch (move)
|
||||
{
|
||||
case MOVE_CURSE:
|
||||
if (gBaseStats[species].type1 == TYPE_GHOST || gBaseStats[species].type2 == TYPE_GHOST)
|
||||
if (gSpeciesInfo[species].type1 == TYPE_GHOST || gSpeciesInfo[species].type2 == TYPE_GHOST)
|
||||
gAnimMoveTurn = 0;
|
||||
else
|
||||
gAnimMoveTurn = 1;
|
||||
|
||||
+1
-1
@@ -302,7 +302,7 @@ const union AnimCmd *const gAnims_MonPic[] =
|
||||
#define SPECIES_PAL(species, pal) [SPECIES_##species] = {pal, SPECIES_##species}
|
||||
#define SPECIES_SHINY_PAL(species, pal) [SPECIES_##species] = {pal, SPECIES_##species + SPECIES_SHINY_TAG}
|
||||
|
||||
#include "data/pokemon_graphics/unknown_anims.h"
|
||||
#include "data/pokemon_graphics/unused_anims.h"
|
||||
#include "data/pokemon_graphics/front_pic_coordinates.h"
|
||||
#include "data/pokemon_graphics/still_front_pic_table.h"
|
||||
#include "data/pokemon_graphics/back_pic_coordinates.h"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// 255 (MON_GENDERLESS) is reserved for genderless Pokémon.
|
||||
#define PERCENT_FEMALE(percent) min(254, ((percent * 255) / 100))
|
||||
|
||||
#define OLD_UNOWN_BASE_STATS \
|
||||
#define OLD_UNOWN_SPECIES_INFO \
|
||||
{ \
|
||||
.baseHP = 50, \
|
||||
.baseAttack = 150, \
|
||||
@@ -34,7 +34,7 @@
|
||||
.noFlip = FALSE, \
|
||||
}
|
||||
|
||||
const struct BaseStats gBaseStats[] =
|
||||
const struct SpeciesInfo gSpeciesInfo[] =
|
||||
{
|
||||
[SPECIES_NONE] = {0},
|
||||
|
||||
@@ -8070,55 +8070,55 @@ const struct BaseStats gBaseStats[] =
|
||||
.noFlip = FALSE,
|
||||
},
|
||||
|
||||
[SPECIES_OLD_UNOWN_B] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_B] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_C] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_C] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_D] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_D] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_E] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_E] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_F] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_F] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_G] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_G] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_H] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_H] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_I] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_I] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_J] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_J] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_K] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_K] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_L] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_L] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_M] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_M] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_N] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_N] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_O] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_O] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_P] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_P] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_Q] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_Q] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_R] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_R] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_S] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_S] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_T] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_T] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_U] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_U] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_V] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_V] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_W] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_W] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_X] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_X] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_Y] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_Y] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_OLD_UNOWN_Z] = OLD_UNOWN_BASE_STATS,
|
||||
[SPECIES_OLD_UNOWN_Z] = OLD_UNOWN_SPECIES_INFO,
|
||||
|
||||
[SPECIES_TREECKO] =
|
||||
{
|
||||
+1372
-3070
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+22
-22
@@ -717,9 +717,9 @@ static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = {
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.fontId = 1,
|
||||
.cursorKind = 1
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = CURSOR_INVISIBLE
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_GroupList = {
|
||||
@@ -777,9 +777,9 @@ static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = {
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 1,
|
||||
.fontId = 1,
|
||||
.cursorKind = 0
|
||||
.scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_InviteToActivity = {
|
||||
@@ -815,9 +815,9 @@ static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = {
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.fontId = 1,
|
||||
.cursorKind = 0
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_RegisterForTrade = {
|
||||
@@ -852,9 +852,9 @@ static const struct ListMenuTemplate sListMenuTemplate_RegisterForTrade = {
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.fontId = 1,
|
||||
.cursorKind = 0
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_TradingBoardRequestType = {
|
||||
@@ -904,9 +904,9 @@ static const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = {
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.fontId = 1,
|
||||
.cursorKind = 0
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_TradingBoardHeader = {
|
||||
@@ -930,7 +930,7 @@ static const struct WindowTemplate sWindowTemplate_TradingBoardMain = {
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sTradeBoardListMenuItems[] = {
|
||||
{ sText_EmptyString, -3 },
|
||||
{ sText_EmptyString, LIST_HEADER },
|
||||
{ sText_EmptyString, 0 },
|
||||
{ sText_EmptyString, 1 },
|
||||
{ sText_EmptyString, 2 },
|
||||
@@ -958,9 +958,9 @@ static const struct ListMenuTemplate sTradeBoardListMenuTemplate = {
|
||||
.cursorShadowPal = 13,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.fontId = 1,
|
||||
.cursorKind = 0
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
// Unused
|
||||
@@ -1010,9 +1010,9 @@ static const struct ListMenuTemplate sEmptyListMenuTemplate = {
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 1,
|
||||
.fontId = 1,
|
||||
.cursorKind = 0
|
||||
.scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const struct RfuPlayerData sUnionRoomPlayer_DummyRfu = {0};
|
||||
|
||||
+5
-5
@@ -78,7 +78,7 @@ static const struct ListMenuTemplate sDaycareListMenuLevelTemplate =
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const u8 *const sCompatibilityMessages[] =
|
||||
@@ -842,7 +842,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation)
|
||||
language = LANGUAGE_JAPANESE;
|
||||
SetMonData(mon, MON_DATA_POKEBALL, &ball);
|
||||
SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname);
|
||||
SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles);
|
||||
SetMonData(mon, MON_DATA_FRIENDSHIP, &gSpeciesInfo[species].eggCycles);
|
||||
SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel);
|
||||
SetMonData(mon, MON_DATA_LANGUAGE, &language);
|
||||
if (setHotSpringsLocation)
|
||||
@@ -869,7 +869,7 @@ static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *
|
||||
language = LANGUAGE_JAPANESE;
|
||||
SetMonData(mon, MON_DATA_POKEBALL, &ball);
|
||||
SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname);
|
||||
SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles);
|
||||
SetMonData(mon, MON_DATA_FRIENDSHIP, &gSpeciesInfo[species].eggCycles);
|
||||
SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel);
|
||||
SetMonData(mon, MON_DATA_LANGUAGE, &language);
|
||||
}
|
||||
@@ -1031,8 +1031,8 @@ static u8 GetDaycareCompatibilityScore(struct DayCare *daycare)
|
||||
trainerIds[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_OT_ID);
|
||||
personality = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_PERSONALITY);
|
||||
genders[i] = GetGenderFromSpeciesAndPersonality(species[i], personality);
|
||||
eggGroups[i][0] = gBaseStats[species[i]].eggGroup1;
|
||||
eggGroups[i][1] = gBaseStats[species[i]].eggGroup2;
|
||||
eggGroups[i][0] = gSpeciesInfo[species[i]].eggGroup1;
|
||||
eggGroups[i][1] = gSpeciesInfo[species[i]].eggGroup2;
|
||||
}
|
||||
|
||||
// check unbreedable egg group
|
||||
|
||||
+7
-6
@@ -314,8 +314,9 @@ static const struct ListMenuTemplate sDecorationItemsListMenuTemplate =
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = FALSE,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = FALSE,
|
||||
.fontId = FONT_NARROW
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NARROW,
|
||||
.cursorKind = CURSOR_BLACK_ARROW,
|
||||
};
|
||||
|
||||
#include "data/decoration/icon.h"
|
||||
@@ -890,7 +891,7 @@ static void PrintDecorationItemMenuItems(u8 taskId)
|
||||
|
||||
StringCopy(sDecorationItemsMenu->names[i], gText_Cancel);
|
||||
sDecorationItemsMenu->items[i].name = sDecorationItemsMenu->names[i];
|
||||
sDecorationItemsMenu->items[i].id = -2;
|
||||
sDecorationItemsMenu->items[i].id = LIST_CANCEL;
|
||||
gMultiuseListMenuTemplate = sDecorationItemsListMenuTemplate;
|
||||
gMultiuseListMenuTemplate.windowId = sDecorMenuWindowIds[WINDOW_DECORATION_CATEGORIES];
|
||||
gMultiuseListMenuTemplate.totalItems = sDecorationItemsMenu->numMenuItems;
|
||||
@@ -1976,7 +1977,7 @@ static void SetDecorSelectionMetatiles(struct PlaceDecorationGraphicsDataBuffer
|
||||
shape = data->decoration->shape;
|
||||
for (i = 0; i < sDecorTilemaps[shape].size; i++)
|
||||
{
|
||||
data->tiles[sDecorTilemaps[shape].tiles[i]] = GetMetatile(data->decoration->tiles[sDecorTilemaps[shape].y[i]] * 8 + sDecorTilemaps[shape].x[i]);
|
||||
data->tiles[sDecorTilemaps[shape].tiles[i]] = GetMetatile(data->decoration->tiles[sDecorTilemaps[shape].y[i]] * NUM_TILES_PER_METATILE + sDecorTilemaps[shape].x[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2036,7 +2037,7 @@ static u8 gpu_pal_decompress_alloc_tag_and_upload(struct PlaceDecorationGraphics
|
||||
SetDecorSelectionMetatiles(data);
|
||||
SetDecorSelectionBoxOamAttributes(data->decoration->shape);
|
||||
SetDecorSelectionBoxTiles(data);
|
||||
CopyPalette(data->palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(data->decoration->tiles[0] * 8) + 7] >> 12);
|
||||
CopyPalette(data->palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(data->decoration->tiles[0] * NUM_TILES_PER_METATILE) + 7] >> 12);
|
||||
LoadSpritePalette(&sSpritePal_PlaceDecoration);
|
||||
return CreateSprite(&sDecorationSelectorSpriteTemplate, 0, 0, 0);
|
||||
}
|
||||
@@ -2092,7 +2093,7 @@ static u8 AddDecorationIconObjectFromObjectEvent(u16 tilesTag, u16 paletteTag, u
|
||||
SetDecorSelectionMetatiles(&sPlaceDecorationGraphicsDataBuffer);
|
||||
SetDecorSelectionBoxOamAttributes(sPlaceDecorationGraphicsDataBuffer.decoration->shape);
|
||||
SetDecorSelectionBoxTiles(&sPlaceDecorationGraphicsDataBuffer);
|
||||
CopyPalette(sPlaceDecorationGraphicsDataBuffer.palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0] * 8) + 7] >> 12);
|
||||
CopyPalette(sPlaceDecorationGraphicsDataBuffer.palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0] * NUM_TILES_PER_METATILE) + 7] >> 12);
|
||||
sheet.data = sPlaceDecorationGraphicsDataBuffer.image;
|
||||
sheet.size = sDecorShapeSizes[sPlaceDecorationGraphicsDataBuffer.decoration->shape] * TILE_SIZE_4BPP;
|
||||
sheet.tag = tilesTag;
|
||||
|
||||
+1
-1
@@ -237,7 +237,7 @@ static void DrawMetatileAt(const struct MapLayout *mapLayout, u16 offset, int x,
|
||||
metatiles = mapLayout->secondaryTileset->metatiles;
|
||||
metatileId -= NUM_METATILES_IN_PRIMARY;
|
||||
}
|
||||
DrawMetatile(MapGridGetMetatileLayerTypeAt(x, y), metatiles + metatileId * 8, offset);
|
||||
DrawMetatile(MapGridGetMetatileLayerTypeAt(x, y), metatiles + metatileId * NUM_TILES_PER_METATILE, offset);
|
||||
}
|
||||
|
||||
static void DrawMetatile(s32 metatileLayerType, const u16 *tiles, u16 offset)
|
||||
|
||||
@@ -1196,7 +1196,7 @@ void IsGrassTypeInParty(void)
|
||||
if (GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG))
|
||||
{
|
||||
species = GetMonData(pokemon, MON_DATA_SPECIES);
|
||||
if (gBaseStats[species].type1 == TYPE_GRASS || gBaseStats[species].type2 == TYPE_GRASS)
|
||||
if (gSpeciesInfo[species].type1 == TYPE_GRASS || gSpeciesInfo[species].type2 == TYPE_GRASS)
|
||||
{
|
||||
gSpecialVar_Result = TRUE;
|
||||
return;
|
||||
@@ -2536,9 +2536,9 @@ static void InitScrollableMultichoice(void)
|
||||
gScrollableMultichoice_ListMenuTemplate.cursorShadowPal = 3;
|
||||
gScrollableMultichoice_ListMenuTemplate.lettersSpacing = 0;
|
||||
gScrollableMultichoice_ListMenuTemplate.itemVerticalPadding = 0;
|
||||
gScrollableMultichoice_ListMenuTemplate.scrollMultiple = 0;
|
||||
gScrollableMultichoice_ListMenuTemplate.scrollMultiple = LIST_NO_MULTIPLE_SCROLL;
|
||||
gScrollableMultichoice_ListMenuTemplate.fontId = FONT_NORMAL;
|
||||
gScrollableMultichoice_ListMenuTemplate.cursorKind = 0;
|
||||
gScrollableMultichoice_ListMenuTemplate.cursorKind = CURSOR_BLACK_ARROW;
|
||||
}
|
||||
|
||||
static void ScrollableMultichoice_MoveCursor(s32 itemIndex, bool8 onInit, struct ListMenu *list)
|
||||
|
||||
+1
-1
@@ -365,7 +365,7 @@ const u8 gHealthboxElementsGfxTable[] = INCBIN_U8("graphics/battle_interface/hpb
|
||||
"graphics/battle_interface/hpbar_anim.4bpp",
|
||||
"graphics/battle_interface/misc_frameend.4bpp",
|
||||
"graphics/battle_interface/ball_display.4bpp",
|
||||
"graphics/battle_interface/ball_display_unused_extra.4bpp",
|
||||
"graphics/battle_interface/ball_caught_indicator.4bpp",
|
||||
"graphics/battle_interface/status2.4bpp", // these three duplicate sets of graphics are for the opponent pokemon
|
||||
"graphics/battle_interface/status3.4bpp", // and are also for use in double battles. they use dynamic palettes so
|
||||
"graphics/battle_interface/status4.4bpp", // coloring them is an extreme headache and wont be done for now
|
||||
|
||||
@@ -133,7 +133,7 @@ void PadNameString(u8 *dest, u8 padChar)
|
||||
while (length < PLAYER_NAME_LENGTH - 1)
|
||||
{
|
||||
dest[length] = EXT_CTRL_CODE_BEGIN;
|
||||
dest[length + 1] = EXT_CTRL_CODE_RESET_SIZE;
|
||||
dest[length + 1] = EXT_CTRL_CODE_RESET_FONT;
|
||||
length += 2;
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -259,9 +259,9 @@ static const struct ListMenuTemplate sItemListMenu =
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NARROW,
|
||||
.cursorKind = 0
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const struct MenuAction sItemMenuActions[] = {
|
||||
@@ -987,7 +987,7 @@ static void BagMenu_ItemPrintCallback(u8 windowId, u32 itemIndex, u8 y)
|
||||
else
|
||||
{
|
||||
// Print registered icon
|
||||
if (gSaveBlock1Ptr->registeredItem && gSaveBlock1Ptr->registeredItem == itemId)
|
||||
if (gSaveBlock1Ptr->registeredItem != ITEM_NONE && gSaveBlock1Ptr->registeredItem == itemId)
|
||||
BlitBitmapToWindow(windowId, sRegisteredSelect_Gfx, 96, y - 1, 24, 16);
|
||||
}
|
||||
}
|
||||
@@ -1909,7 +1909,7 @@ static void ItemMenu_Register(u8 taskId)
|
||||
u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
|
||||
|
||||
if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId)
|
||||
gSaveBlock1Ptr->registeredItem = 0;
|
||||
gSaveBlock1Ptr->registeredItem = ITEM_NONE;
|
||||
else
|
||||
gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId;
|
||||
DestroyListMenuTask(tListTaskId, scrollPos, cursorPos);
|
||||
|
||||
+6
-7
@@ -2525,9 +2525,8 @@ u8 RfuGetStatus(void)
|
||||
|
||||
bool32 RfuHasErrored(void)
|
||||
{
|
||||
// RFU_STATUS_OK will underflow here intentionally
|
||||
u32 var = RfuGetStatus() - 1;
|
||||
if (var < RFU_STATUS_CONNECTION_ERROR)
|
||||
u32 status = RfuGetStatus();
|
||||
if (status == RFU_STATUS_FATAL_ERROR || status == RFU_STATUS_CONNECTION_ERROR)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
@@ -2656,7 +2655,7 @@ static u8 GetPartnerIndexByNameAndTrainerID(const u8 *name, u16 id)
|
||||
|
||||
for (i = 0; i < RFU_CHILD_MAX; i++)
|
||||
{
|
||||
u16 trainerId = ReadU16(gRfuLinkStatus->partner[i].gname + 2);
|
||||
u16 trainerId = ReadU16(((struct RfuGameData *)gRfuLinkStatus->partner[i].gname)->compatibility.playerTrainerId);
|
||||
if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[i].serialNo)
|
||||
&& !StringCompare(name, gRfuLinkStatus->partner[i].uname)
|
||||
&& id == trainerId)
|
||||
@@ -2682,9 +2681,9 @@ static void RfuReqDisconnectSlot(u32 slot)
|
||||
|
||||
void RequestDisconnectSlotByTrainerNameAndId(const u8 *name, u16 id)
|
||||
{
|
||||
u8 var = GetPartnerIndexByNameAndTrainerID(name, id);
|
||||
if (var != 0xFF)
|
||||
RfuReqDisconnectSlot(1 << var);
|
||||
u8 index = GetPartnerIndexByNameAndTrainerID(name, id);
|
||||
if (index != 0xFF)
|
||||
RfuReqDisconnectSlot(1 << index);
|
||||
}
|
||||
|
||||
void Rfu_DisconnectPlayerById(u32 playerIdx)
|
||||
|
||||
+47
-41
@@ -13,6 +13,10 @@
|
||||
#include "sound.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
// Cursors after this point are created using a sprite with their own task.
|
||||
// This allows them to have idle animations. Cursors prior to this are simply printed text.
|
||||
#define CURSOR_OBJECT_START CURSOR_RED_OUTLINE
|
||||
|
||||
struct UnkIndicatorsStruct
|
||||
{
|
||||
u8 field_0;
|
||||
@@ -70,7 +74,7 @@ static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAn
|
||||
static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count);
|
||||
static void ListMenuDrawCursor(struct ListMenu *list);
|
||||
static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 onInit);
|
||||
static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind);
|
||||
static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorObjId);
|
||||
static void Task_ScrollIndicatorArrowPair(u8 taskId);
|
||||
static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor);
|
||||
static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor);
|
||||
@@ -78,9 +82,9 @@ static void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y);
|
||||
static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y);
|
||||
static void ListMenuRemoveRedOutlineCursorObject(u8 taskId);
|
||||
static void ListMenuRemoveRedArrowCursorObject(u8 taskId);
|
||||
static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind);
|
||||
static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind);
|
||||
static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind);
|
||||
static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorObjId);
|
||||
static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorObjId);
|
||||
static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorObjId);
|
||||
static void SpriteCallback_ScrollIndicatorArrow(struct Sprite *sprite);
|
||||
static void SpriteCallback_RedArrowCursor(struct Sprite *sprite);
|
||||
|
||||
@@ -301,10 +305,10 @@ static const struct SpriteTemplate sSpriteTemplate_RedArrowCursor =
|
||||
.callback = SpriteCallback_RedArrowCursor,
|
||||
};
|
||||
|
||||
static const u16 sRedArrowPal[] = INCBIN_U16("graphics/interface/red_arrow.gbapal");
|
||||
static const u32 sRedArrowOtherGfx[] = INCBIN_U32("graphics/interface/red_arrow_other.4bpp.lz");
|
||||
static const u32 sSelectorOutlineGfx[] = INCBIN_U32("graphics/interface/selector_outline.4bpp.lz");
|
||||
static const u32 sRedArrowGfx[] = INCBIN_U32("graphics/interface/red_arrow.4bpp.lz");
|
||||
static const u16 sRedInterface_Pal[] = INCBIN_U16("graphics/interface/red.gbapal"); // Shared by all of the below gfx
|
||||
static const u32 sScrollIndicator_Gfx[] = INCBIN_U32("graphics/interface/scroll_indicator.4bpp.lz");
|
||||
static const u32 sOutlineCursor_Gfx[] = INCBIN_U32("graphics/interface/outline_cursor.4bpp.lz");
|
||||
static const u32 sArrowCursor_Gfx[] = INCBIN_U32("graphics/interface/arrow_cursor.4bpp.lz");
|
||||
|
||||
// code
|
||||
static void ListMenuDummyTask(u8 taskId)
|
||||
@@ -477,7 +481,7 @@ void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
|
||||
*selectedRow = list->selectedRow;
|
||||
|
||||
if (list->taskId != TASK_NONE)
|
||||
ListMenuRemoveCursorObject(list->taskId, list->template.cursorKind - 2);
|
||||
ListMenuRemoveCursorObject(list->taskId, list->template.cursorKind - CURSOR_OBJECT_START);
|
||||
|
||||
DestroyTask(listTaskId);
|
||||
}
|
||||
@@ -650,31 +654,33 @@ static void ListMenuDrawCursor(struct ListMenu *list)
|
||||
u8 y = list->selectedRow * yMultiplier + list->template.upText_Y;
|
||||
switch (list->template.cursorKind)
|
||||
{
|
||||
case 0:
|
||||
case CURSOR_BLACK_ARROW:
|
||||
ListMenuPrint(list, gText_SelectorArrow2, x, y);
|
||||
break;
|
||||
case 1:
|
||||
case CURSOR_INVISIBLE:
|
||||
break;
|
||||
case 2:
|
||||
case CURSOR_RED_OUTLINE:
|
||||
if (list->taskId == TASK_NONE)
|
||||
list->taskId = ListMenuAddCursorObject(list, 0);
|
||||
list->taskId = ListMenuAddCursorObject(list, CURSOR_RED_OUTLINE - CURSOR_OBJECT_START);
|
||||
ListMenuUpdateCursorObject(list->taskId,
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 - 1,
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y - 1, 0);
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y - 1,
|
||||
CURSOR_RED_OUTLINE - CURSOR_OBJECT_START);
|
||||
break;
|
||||
case 3:
|
||||
case CURSOR_RED_ARROW:
|
||||
if (list->taskId == TASK_NONE)
|
||||
list->taskId = ListMenuAddCursorObject(list, 1);
|
||||
list->taskId = ListMenuAddCursorObject(list, CURSOR_RED_ARROW - CURSOR_OBJECT_START);
|
||||
ListMenuUpdateCursorObject(list->taskId,
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 + x,
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y, 1);
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y,
|
||||
CURSOR_RED_ARROW - CURSOR_OBJECT_START);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#undef TASK_NONE
|
||||
|
||||
static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind)
|
||||
static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorObjId)
|
||||
{
|
||||
struct CursorStruct cursor;
|
||||
|
||||
@@ -686,13 +692,13 @@ static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind)
|
||||
cursor.palTag = TAG_NONE;
|
||||
cursor.palNum = 15;
|
||||
|
||||
return ListMenuAddCursorObjectInternal(&cursor, cursorKind);
|
||||
return ListMenuAddCursorObjectInternal(&cursor, cursorObjId);
|
||||
}
|
||||
|
||||
static void ListMenuErasePrintedCursor(struct ListMenu *list, u16 selectedRow)
|
||||
{
|
||||
u8 cursorKind = list->template.cursorKind;
|
||||
if (cursorKind == 0)
|
||||
if (cursorKind == CURSOR_BLACK_ARROW)
|
||||
{
|
||||
u8 yMultiplier = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + list->template.itemVerticalPadding;
|
||||
u8 width = GetMenuCursorDimensionByFont(list->template.fontId, 0);
|
||||
@@ -1071,18 +1077,18 @@ u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate *arrowInfo, u16
|
||||
struct ScrollIndicatorPair *data;
|
||||
u8 taskId;
|
||||
|
||||
spriteSheet.data = sRedArrowOtherGfx;
|
||||
spriteSheet.data = sScrollIndicator_Gfx;
|
||||
spriteSheet.size = 0x100;
|
||||
spriteSheet.tag = arrowInfo->tileTag;
|
||||
LoadCompressedSpriteSheet(&spriteSheet);
|
||||
|
||||
if (arrowInfo->palTag == TAG_NONE)
|
||||
{
|
||||
LoadPalette(sRedArrowPal, (16 * arrowInfo->palNum) + 0x100, 0x20);
|
||||
LoadPalette(sRedInterface_Pal, (16 * arrowInfo->palNum) + 0x100, 0x20);
|
||||
}
|
||||
else
|
||||
{
|
||||
spritePal.data = sRedArrowPal;
|
||||
spritePal.data = sRedInterface_Pal;
|
||||
spritePal.tag = arrowInfo->palTag;
|
||||
LoadSpritePalette(&spritePal);
|
||||
}
|
||||
@@ -1190,39 +1196,39 @@ void RemoveScrollIndicatorArrowPair(u8 taskId)
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind)
|
||||
static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorObjId)
|
||||
{
|
||||
switch (cursorKind)
|
||||
switch (cursorObjId)
|
||||
{
|
||||
case 0:
|
||||
case CURSOR_RED_OUTLINE - CURSOR_OBJECT_START:
|
||||
default:
|
||||
return ListMenuAddRedOutlineCursorObject(cursor);
|
||||
case 1:
|
||||
case CURSOR_RED_ARROW - CURSOR_OBJECT_START:
|
||||
return ListMenuAddRedArrowCursorObject(cursor);
|
||||
}
|
||||
}
|
||||
|
||||
static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind)
|
||||
static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorObjId)
|
||||
{
|
||||
switch (cursorKind)
|
||||
switch (cursorObjId)
|
||||
{
|
||||
case 0:
|
||||
case CURSOR_RED_OUTLINE - CURSOR_OBJECT_START:
|
||||
ListMenuUpdateRedOutlineCursorObject(taskId, x, y);
|
||||
break;
|
||||
case 1:
|
||||
case CURSOR_RED_ARROW - CURSOR_OBJECT_START:
|
||||
ListMenuUpdateRedArrowCursorObject(taskId, x, y);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind)
|
||||
static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorObjId)
|
||||
{
|
||||
switch (cursorKind)
|
||||
switch (cursorObjId)
|
||||
{
|
||||
case 0:
|
||||
case CURSOR_RED_OUTLINE - CURSOR_OBJECT_START:
|
||||
ListMenuRemoveRedOutlineCursorObject(taskId);
|
||||
break;
|
||||
case 1:
|
||||
case CURSOR_RED_ARROW - CURSOR_OBJECT_START:
|
||||
ListMenuRemoveRedArrowCursorObject(taskId);
|
||||
break;
|
||||
}
|
||||
@@ -1317,18 +1323,18 @@ static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor)
|
||||
struct SpriteTemplate spriteTemplate;
|
||||
u8 taskId;
|
||||
|
||||
spriteSheet.data = sSelectorOutlineGfx;
|
||||
spriteSheet.data = sOutlineCursor_Gfx;
|
||||
spriteSheet.size = 0x100;
|
||||
spriteSheet.tag = cursor->tileTag;
|
||||
LoadCompressedSpriteSheet(&spriteSheet);
|
||||
|
||||
if (cursor->palTag == TAG_NONE)
|
||||
{
|
||||
LoadPalette(sRedArrowPal, (16 * cursor->palNum) + 0x100, 0x20);
|
||||
LoadPalette(sRedInterface_Pal, (16 * cursor->palNum) + 0x100, 0x20);
|
||||
}
|
||||
else
|
||||
{
|
||||
spritePal.data = sRedArrowPal;
|
||||
spritePal.data = sRedInterface_Pal;
|
||||
spritePal.tag = cursor->palTag;
|
||||
LoadSpritePalette(&spritePal);
|
||||
}
|
||||
@@ -1402,18 +1408,18 @@ static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor)
|
||||
struct SpriteTemplate spriteTemplate;
|
||||
u8 taskId;
|
||||
|
||||
spriteSheet.data = sRedArrowGfx;
|
||||
spriteSheet.data = sArrowCursor_Gfx;
|
||||
spriteSheet.size = 0x80;
|
||||
spriteSheet.tag = cursor->tileTag;
|
||||
LoadCompressedSpriteSheet(&spriteSheet);
|
||||
|
||||
if (cursor->palTag == TAG_NONE)
|
||||
{
|
||||
LoadPalette(sRedArrowPal, (16 * cursor->palNum) + 0x100, 0x20);
|
||||
LoadPalette(sRedInterface_Pal, (16 * cursor->palNum) + 0x100, 0x20);
|
||||
}
|
||||
else
|
||||
{
|
||||
spritePal.data = sRedArrowPal;
|
||||
spritePal.data = sRedInterface_Pal;
|
||||
spritePal.tag = cursor->palTag;
|
||||
LoadSpritePalette(&spritePal);
|
||||
}
|
||||
|
||||
+1
-1
@@ -1631,7 +1631,7 @@ static void Task_NewGameBirchSpeech_ProcessNameYesNoMenu(u8 taskId)
|
||||
NewGameBirchSpeech_StartFadePlatformIn(taskId, 1);
|
||||
gTasks[taskId].func = Task_NewGameBirchSpeech_SlidePlatformAway2;
|
||||
break;
|
||||
case -1:
|
||||
case MENU_B_PRESSED:
|
||||
case 1:
|
||||
PlaySE(SE_SELECT);
|
||||
gTasks[taskId].func = Task_NewGameBirchSpeech_BoyOrGirl;
|
||||
|
||||
@@ -187,7 +187,7 @@ static const struct ListMenuTemplate sMoveRelearnerMovesListTemplate =
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
//--------------
|
||||
@@ -284,7 +284,7 @@ u8 MailboxMenu_CreateList(struct PlayerPCItemPageStruct *page)
|
||||
gMultiuseListMenuTemplate.moveCursorFunc = MailboxMenu_MoveCursorFunc;
|
||||
gMultiuseListMenuTemplate.itemPrintFunc = MailboxMenu_ItemPrintFunc;
|
||||
gMultiuseListMenuTemplate.fontId = FONT_NORMAL;
|
||||
gMultiuseListMenuTemplate.cursorKind = 0;
|
||||
gMultiuseListMenuTemplate.cursorKind = CURSOR_BLACK_ARROW;
|
||||
gMultiuseListMenuTemplate.lettersSpacing = 0;
|
||||
gMultiuseListMenuTemplate.itemVerticalPadding = 0;
|
||||
gMultiuseListMenuTemplate.scrollMultiple = LIST_NO_MULTIPLE_SCROLL;
|
||||
@@ -1538,7 +1538,7 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bg
|
||||
0,
|
||||
15 * i,
|
||||
color,
|
||||
-1,
|
||||
TEXT_SKIP_DRAW,
|
||||
sLvlUpStatStrings[i]);
|
||||
|
||||
StringCopy(text, (statsDiff[i] >= 0) ? gText_Plus : gText_Dash);
|
||||
@@ -1547,7 +1547,7 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bg
|
||||
56,
|
||||
15 * i,
|
||||
color,
|
||||
-1,
|
||||
TEXT_SKIP_DRAW,
|
||||
text);
|
||||
if (abs(statsDiff[i]) <= 9)
|
||||
x = 18;
|
||||
@@ -1560,7 +1560,7 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bg
|
||||
56 + x,
|
||||
15 * i,
|
||||
color,
|
||||
-1,
|
||||
TEXT_SKIP_DRAW,
|
||||
text);
|
||||
}
|
||||
}
|
||||
@@ -1602,7 +1602,7 @@ void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 s
|
||||
0,
|
||||
15 * i,
|
||||
color,
|
||||
-1,
|
||||
TEXT_SKIP_DRAW,
|
||||
sLvlUpStatStrings[i]);
|
||||
|
||||
AddTextPrinterParameterized3(windowId,
|
||||
@@ -1610,7 +1610,7 @@ void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 s
|
||||
56 + x,
|
||||
15 * i,
|
||||
color,
|
||||
-1,
|
||||
TEXT_SKIP_DRAW,
|
||||
text);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -553,7 +553,7 @@ static void DoMoveRelearnerMain(void)
|
||||
gSpecialVar_0x8004 = FALSE;
|
||||
sMoveRelearnerStruct->state = MENU_STATE_FADE_AND_RETURN;
|
||||
}
|
||||
else if (selection == -1 || selection == 1)
|
||||
else if (selection == MENU_B_PRESSED || selection == 1)
|
||||
{
|
||||
if (sMoveRelearnerMenuSate.showContestInfo == FALSE)
|
||||
{
|
||||
@@ -579,14 +579,14 @@ static void DoMoveRelearnerMain(void)
|
||||
break;
|
||||
case MENU_STATE_CONFIRM_DELETE_OLD_MOVE:
|
||||
{
|
||||
s8 var = Menu_ProcessInputNoWrapClearOnChoose();
|
||||
s8 selection = Menu_ProcessInputNoWrapClearOnChoose();
|
||||
|
||||
if (var == 0)
|
||||
if (selection == 0)
|
||||
{
|
||||
FormatAndPrintText(gText_MoveRelearnerWhichMoveToForget);
|
||||
sMoveRelearnerStruct->state = MENU_STATE_PRINT_WHICH_MOVE_PROMPT;
|
||||
}
|
||||
else if (var == -1 || var == 1)
|
||||
else if (selection == MENU_B_PRESSED || selection == 1)
|
||||
{
|
||||
sMoveRelearnerStruct->state = MENU_STATE_PRINT_STOP_TEACHING;
|
||||
}
|
||||
@@ -606,13 +606,13 @@ static void DoMoveRelearnerMain(void)
|
||||
break;
|
||||
case MENU_STATE_CONFIRM_STOP_TEACHING:
|
||||
{
|
||||
s8 var = Menu_ProcessInputNoWrapClearOnChoose();
|
||||
s8 selection = Menu_ProcessInputNoWrapClearOnChoose();
|
||||
|
||||
if (var == 0)
|
||||
if (selection == 0)
|
||||
{
|
||||
sMoveRelearnerStruct->state = MENU_STATE_CHOOSE_SETUP_STATE;
|
||||
}
|
||||
else if (var == MENU_B_PRESSED || var == 1)
|
||||
else if (selection == MENU_B_PRESSED || selection == 1)
|
||||
{
|
||||
// What's the point? It gets set to MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT, anyway.
|
||||
if (sMoveRelearnerMenuSate.showContestInfo == FALSE)
|
||||
|
||||
+10
-10
@@ -234,9 +234,9 @@ static const struct ListMenuTemplate sListMenuTemplate_ThreeOptions = {
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_ReceiveSendToss[] = {
|
||||
@@ -279,9 +279,9 @@ static const struct ListMenuTemplate sListMenu_ReceiveSendToss = {
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenu_ReceiveToss = {
|
||||
@@ -300,9 +300,9 @@ static const struct ListMenuTemplate sListMenu_ReceiveToss = {
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenu_ReceiveSend = {
|
||||
@@ -321,9 +321,9 @@ static const struct ListMenuTemplate sListMenu_ReceiveSend = {
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenu_Receive = {
|
||||
@@ -342,9 +342,9 @@ static const struct ListMenuTemplate sListMenu_Receive = {
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const u8 *const sUnusedMenuTexts[] = {
|
||||
|
||||
+2
-1
@@ -44,6 +44,7 @@
|
||||
#include "berry_powder.h"
|
||||
#include "mystery_gift.h"
|
||||
#include "union_room_chat.h"
|
||||
#include "constants/items.h"
|
||||
|
||||
extern const u8 EventScript_ResetAllMapFlags[];
|
||||
|
||||
@@ -181,7 +182,7 @@ void NewGameInitData(void)
|
||||
ResetPokemonStorageSystem();
|
||||
ClearRoamerData();
|
||||
ClearRoamerLocationData();
|
||||
gSaveBlock1Ptr->registeredItem = 0;
|
||||
gSaveBlock1Ptr->registeredItem = ITEM_NONE;
|
||||
ClearBag();
|
||||
NewGameInitPCItems();
|
||||
ClearPokeblocks();
|
||||
|
||||
+3
-2
@@ -290,8 +290,9 @@ static const struct ListMenuTemplate sListMenuTemplate_ItemStorage =
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = FALSE,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = FALSE,
|
||||
.fontId = FONT_NARROW
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NARROW,
|
||||
.cursorKind = CURSOR_BLACK_ARROW,
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplates_ItemStorage[ITEMPC_WIN_COUNT] =
|
||||
|
||||
+1
-1
@@ -440,7 +440,7 @@ static const struct ListMenuTemplate sPokeblockListMenuTemplate =
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 1
|
||||
.cursorKind = CURSOR_INVISIBLE
|
||||
};
|
||||
|
||||
void OpenPokeblockCase(u8 caseId, void (*callback)(void))
|
||||
|
||||
+5
-5
@@ -4701,7 +4701,7 @@ static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 t
|
||||
{
|
||||
species = NationalPokedexNumToSpecies(sPokedexView->pokedexList[i].dexNum);
|
||||
|
||||
if (bodyColor == gBaseStats[species].bodyColor)
|
||||
if (bodyColor == gSpeciesInfo[species].bodyColor)
|
||||
{
|
||||
sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i];
|
||||
resultsCount++;
|
||||
@@ -4727,8 +4727,8 @@ static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 t
|
||||
{
|
||||
species = NationalPokedexNumToSpecies(sPokedexView->pokedexList[i].dexNum);
|
||||
|
||||
types[0] = gBaseStats[species].type1;
|
||||
types[1] = gBaseStats[species].type2;
|
||||
types[0] = gSpeciesInfo[species].type1;
|
||||
types[1] = gSpeciesInfo[species].type2;
|
||||
if (types[0] == type1 || types[1] == type1)
|
||||
{
|
||||
sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i];
|
||||
@@ -4745,8 +4745,8 @@ static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 t
|
||||
{
|
||||
species = NationalPokedexNumToSpecies(sPokedexView->pokedexList[i].dexNum);
|
||||
|
||||
types[0] = gBaseStats[species].type1;
|
||||
types[1] = gBaseStats[species].type2;
|
||||
types[0] = gSpeciesInfo[species].type1;
|
||||
types[1] = gSpeciesInfo[species].type2;
|
||||
if ((types[0] == type1 && types[1] == type2) || (types[0] == type2 && types[1] == type1))
|
||||
{
|
||||
sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i];
|
||||
|
||||
+35
-35
@@ -1388,7 +1388,7 @@ const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] =
|
||||
#include "data/pokemon/trainer_class_lookups.h"
|
||||
#include "data/pokemon/cry_ids.h"
|
||||
#include "data/pokemon/experience_tables.h"
|
||||
#include "data/pokemon/base_stats.h"
|
||||
#include "data/pokemon/species_info.h"
|
||||
#include "data/pokemon/level_up_learnsets.h"
|
||||
#include "data/pokemon/evolution.h"
|
||||
#include "data/pokemon/level_up_learnset_pointers.h"
|
||||
@@ -2245,8 +2245,8 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
|
||||
SetBoxMonData(boxMon, MON_DATA_LANGUAGE, &gGameLanguage);
|
||||
SetBoxMonData(boxMon, MON_DATA_OT_NAME, gSaveBlock2Ptr->playerName);
|
||||
SetBoxMonData(boxMon, MON_DATA_SPECIES, &species);
|
||||
SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gBaseStats[species].growthRate][level]);
|
||||
SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship);
|
||||
SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gSpeciesInfo[species].growthRate][level]);
|
||||
SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gSpeciesInfo[species].friendship);
|
||||
value = GetCurrentRegionMapSectionId();
|
||||
SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, &value);
|
||||
SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level);
|
||||
@@ -2286,7 +2286,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
|
||||
SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv);
|
||||
}
|
||||
|
||||
if (gBaseStats[species].abilities[1])
|
||||
if (gSpeciesInfo[species].abilities[1])
|
||||
{
|
||||
value = personality & 1;
|
||||
SetBoxMonData(boxMon, MON_DATA_ABILITY_NUM, &value);
|
||||
@@ -2806,7 +2806,7 @@ static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon)
|
||||
|
||||
#define CALC_STAT(base, iv, ev, statIndex, field) \
|
||||
{ \
|
||||
u8 baseStat = gBaseStats[species].base; \
|
||||
u8 baseStat = gSpeciesInfo[species].base; \
|
||||
s32 n = (((2 * baseStat + iv + ev / 4) * level) / 100) + 5; \
|
||||
u8 nature = GetNature(mon); \
|
||||
n = ModifyStatByNature(nature, n, statIndex); \
|
||||
@@ -2841,7 +2841,7 @@ void CalculateMonStats(struct Pokemon *mon)
|
||||
}
|
||||
else
|
||||
{
|
||||
s32 n = 2 * gBaseStats[species].baseHP + hpIV;
|
||||
s32 n = 2 * gSpeciesInfo[species].baseHP + hpIV;
|
||||
newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10;
|
||||
}
|
||||
|
||||
@@ -2901,7 +2901,7 @@ u8 GetLevelFromMonExp(struct Pokemon *mon)
|
||||
u32 exp = GetMonData(mon, MON_DATA_EXP, NULL);
|
||||
s32 level = 1;
|
||||
|
||||
while (level <= MAX_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp)
|
||||
while (level <= MAX_LEVEL && gExperienceTables[gSpeciesInfo[species].growthRate][level] <= exp)
|
||||
level++;
|
||||
|
||||
return level - 1;
|
||||
@@ -2913,7 +2913,7 @@ u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon)
|
||||
u32 exp = GetBoxMonData(boxMon, MON_DATA_EXP, NULL);
|
||||
s32 level = 1;
|
||||
|
||||
while (level <= MAX_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp)
|
||||
while (level <= MAX_LEVEL && gExperienceTables[gSpeciesInfo[species].growthRate][level] <= exp)
|
||||
level++;
|
||||
|
||||
return level - 1;
|
||||
@@ -3442,15 +3442,15 @@ u8 GetBoxMonGender(struct BoxPokemon *boxMon)
|
||||
u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL);
|
||||
u32 personality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL);
|
||||
|
||||
switch (gBaseStats[species].genderRatio)
|
||||
switch (gSpeciesInfo[species].genderRatio)
|
||||
{
|
||||
case MON_MALE:
|
||||
case MON_FEMALE:
|
||||
case MON_GENDERLESS:
|
||||
return gBaseStats[species].genderRatio;
|
||||
return gSpeciesInfo[species].genderRatio;
|
||||
}
|
||||
|
||||
if (gBaseStats[species].genderRatio > (personality & 0xFF))
|
||||
if (gSpeciesInfo[species].genderRatio > (personality & 0xFF))
|
||||
return MON_FEMALE;
|
||||
else
|
||||
return MON_MALE;
|
||||
@@ -3458,15 +3458,15 @@ u8 GetBoxMonGender(struct BoxPokemon *boxMon)
|
||||
|
||||
u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality)
|
||||
{
|
||||
switch (gBaseStats[species].genderRatio)
|
||||
switch (gSpeciesInfo[species].genderRatio)
|
||||
{
|
||||
case MON_MALE:
|
||||
case MON_FEMALE:
|
||||
case MON_GENDERLESS:
|
||||
return gBaseStats[species].genderRatio;
|
||||
return gSpeciesInfo[species].genderRatio;
|
||||
}
|
||||
|
||||
if (gBaseStats[species].genderRatio > (personality & 0xFF))
|
||||
if (gSpeciesInfo[species].genderRatio > (personality & 0xFF))
|
||||
return MON_FEMALE;
|
||||
else
|
||||
return MON_MALE;
|
||||
@@ -4495,9 +4495,9 @@ u8 GetMonsStateToDoubles_2(void)
|
||||
u8 GetAbilityBySpecies(u16 species, u8 abilityNum)
|
||||
{
|
||||
if (abilityNum)
|
||||
gLastUsedAbility = gBaseStats[species].abilities[1];
|
||||
gLastUsedAbility = gSpeciesInfo[species].abilities[1];
|
||||
else
|
||||
gLastUsedAbility = gBaseStats[species].abilities[0];
|
||||
gLastUsedAbility = gSpeciesInfo[species].abilities[0];
|
||||
|
||||
return gLastUsedAbility;
|
||||
}
|
||||
@@ -4651,8 +4651,8 @@ void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex)
|
||||
gBattleMons[battlerId].isEgg = GetMonData(&gPlayerParty[partyIndex], MON_DATA_IS_EGG, NULL);
|
||||
gBattleMons[battlerId].abilityNum = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ABILITY_NUM, NULL);
|
||||
gBattleMons[battlerId].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID, NULL);
|
||||
gBattleMons[battlerId].type1 = gBaseStats[gBattleMons[battlerId].species].type1;
|
||||
gBattleMons[battlerId].type2 = gBaseStats[gBattleMons[battlerId].species].type2;
|
||||
gBattleMons[battlerId].type1 = gSpeciesInfo[gBattleMons[battlerId].species].type1;
|
||||
gBattleMons[battlerId].type2 = gSpeciesInfo[gBattleMons[battlerId].species].type2;
|
||||
gBattleMons[battlerId].ability = GetAbilityBySpecies(gBattleMons[battlerId].species, gBattleMons[battlerId].abilityNum);
|
||||
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname);
|
||||
StringCopy_Nickname(gBattleMons[battlerId].nickname, nickname);
|
||||
@@ -4869,7 +4869,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
||||
if ((itemEffect[i] & ITEM3_LEVEL_UP)
|
||||
&& GetMonData(mon, MON_DATA_LEVEL, NULL) != MAX_LEVEL)
|
||||
{
|
||||
dataUnsigned = gExperienceTables[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1];
|
||||
dataUnsigned = gExperienceTables[gSpeciesInfo[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1];
|
||||
SetMonData(mon, MON_DATA_EXP, &dataUnsigned);
|
||||
CalculateMonStats(mon);
|
||||
retVal = FALSE;
|
||||
@@ -5948,22 +5948,22 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
|
||||
switch (i)
|
||||
{
|
||||
case STAT_HP:
|
||||
evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier;
|
||||
evIncrease = gSpeciesInfo[defeatedSpecies].evYield_HP * multiplier;
|
||||
break;
|
||||
case STAT_ATK:
|
||||
evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier;
|
||||
evIncrease = gSpeciesInfo[defeatedSpecies].evYield_Attack * multiplier;
|
||||
break;
|
||||
case STAT_DEF:
|
||||
evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier;
|
||||
evIncrease = gSpeciesInfo[defeatedSpecies].evYield_Defense * multiplier;
|
||||
break;
|
||||
case STAT_SPEED:
|
||||
evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier;
|
||||
evIncrease = gSpeciesInfo[defeatedSpecies].evYield_Speed * multiplier;
|
||||
break;
|
||||
case STAT_SPATK:
|
||||
evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier;
|
||||
evIncrease = gSpeciesInfo[defeatedSpecies].evYield_SpAttack * multiplier;
|
||||
break;
|
||||
case STAT_SPDEF:
|
||||
evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier;
|
||||
evIncrease = gSpeciesInfo[defeatedSpecies].evYield_SpDefense * multiplier;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -6165,12 +6165,12 @@ bool8 TryIncrementMonLevel(struct Pokemon *mon)
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
|
||||
u8 nextLevel = GetMonData(mon, MON_DATA_LEVEL, 0) + 1;
|
||||
u32 expPoints = GetMonData(mon, MON_DATA_EXP, 0);
|
||||
if (expPoints > gExperienceTables[gBaseStats[species].growthRate][MAX_LEVEL])
|
||||
if (expPoints > gExperienceTables[gSpeciesInfo[species].growthRate][MAX_LEVEL])
|
||||
{
|
||||
expPoints = gExperienceTables[gBaseStats[species].growthRate][MAX_LEVEL];
|
||||
expPoints = gExperienceTables[gSpeciesInfo[species].growthRate][MAX_LEVEL];
|
||||
SetMonData(mon, MON_DATA_EXP, &expPoints);
|
||||
}
|
||||
if (nextLevel > MAX_LEVEL || expPoints < gExperienceTables[gBaseStats[species].growthRate][nextLevel])
|
||||
if (nextLevel > MAX_LEVEL || expPoints < gExperienceTables[gSpeciesInfo[species].growthRate][nextLevel])
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -6494,7 +6494,7 @@ bool32 IsHMMove2(u16 move)
|
||||
|
||||
bool8 IsMonSpriteNotFlipped(u16 species)
|
||||
{
|
||||
return gBaseStats[species].noFlip;
|
||||
return gSpeciesInfo[species].noFlip;
|
||||
}
|
||||
|
||||
s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor)
|
||||
@@ -6615,26 +6615,26 @@ void SetWildMonHeldItem(void)
|
||||
if (rnd < chanceNoItem)
|
||||
return;
|
||||
if (rnd < chanceNotRare)
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon);
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemCommon);
|
||||
else
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemRare);
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemRare);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBaseStats[species].itemCommon == gBaseStats[species].itemRare && gBaseStats[species].itemCommon != ITEM_NONE)
|
||||
if (gSpeciesInfo[species].itemCommon == gSpeciesInfo[species].itemRare && gSpeciesInfo[species].itemCommon != ITEM_NONE)
|
||||
{
|
||||
// Both held items are the same, 100% chance to hold item
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon);
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemCommon);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (rnd < chanceNoItem)
|
||||
return;
|
||||
if (rnd < chanceNotRare)
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon);
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemCommon);
|
||||
else
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemRare);
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemRare);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -901,11 +901,11 @@ u8 GetSpeciesBackAnimSet(u16 species)
|
||||
// as 0xFFFFXXXX instead of the desired 0x02YYXXXX.
|
||||
// By dumb luck, this is not an issue in vanilla. However,
|
||||
// changing the link order revealed this bug.
|
||||
#if MODERN
|
||||
#if MODERN || defined(BUGFIX)
|
||||
#define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | ((u16)gTasks[taskId].tPtrLo)))
|
||||
#else
|
||||
#define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | (gTasks[taskId].tPtrLo)))
|
||||
#endif //MODERN
|
||||
#endif //MODERN || BUGFIX
|
||||
|
||||
static void Task_HandleMonAnimation(u8 taskId)
|
||||
{
|
||||
|
||||
@@ -107,6 +107,7 @@ enum {
|
||||
#define PSS_DATA_WINDOW_MOVE_DESCRIPTION 2
|
||||
|
||||
#define MOVE_SELECTOR_SPRITES_COUNT 10
|
||||
#define TYPE_ICON_SPRITE_COUNT (MAX_MON_MOVES + 1)
|
||||
// for the spriteIds field in PokemonSummaryScreenData
|
||||
enum
|
||||
{
|
||||
@@ -114,7 +115,7 @@ enum
|
||||
SPRITE_ARR_ID_BALL,
|
||||
SPRITE_ARR_ID_STATUS,
|
||||
SPRITE_ARR_ID_TYPE, // 2 for mon types, 5 for move types(4 moves and 1 to learn), used interchangeably, because mon types and move types aren't shown on the same screen
|
||||
SPRITE_ARR_ID_MOVE_SELECTOR1 = SPRITE_ARR_ID_TYPE + 5, // 10 sprites that make up the selector
|
||||
SPRITE_ARR_ID_MOVE_SELECTOR1 = SPRITE_ARR_ID_TYPE + TYPE_ICON_SPRITE_COUNT, // 10 sprites that make up the selector
|
||||
SPRITE_ARR_ID_MOVE_SELECTOR2 = SPRITE_ARR_ID_MOVE_SELECTOR1 + MOVE_SELECTOR_SPRITES_COUNT,
|
||||
SPRITE_ARR_ID_COUNT = SPRITE_ARR_ID_MOVE_SELECTOR2 + MOVE_SELECTOR_SPRITES_COUNT
|
||||
};
|
||||
@@ -2611,8 +2612,8 @@ static void DrawExperienceProgressBar(struct Pokemon *unused)
|
||||
|
||||
if (summary->level < MAX_LEVEL)
|
||||
{
|
||||
u32 expBetweenLevels = gExperienceTables[gBaseStats[summary->species].growthRate][summary->level + 1] - gExperienceTables[gBaseStats[summary->species].growthRate][summary->level];
|
||||
u32 expSinceLastLevel = summary->exp - gExperienceTables[gBaseStats[summary->species].growthRate][summary->level];
|
||||
u32 expBetweenLevels = gExperienceTables[gSpeciesInfo[summary->species].growthRate][summary->level + 1] - gExperienceTables[gSpeciesInfo[summary->species].growthRate][summary->level];
|
||||
u32 expSinceLastLevel = summary->exp - gExperienceTables[gSpeciesInfo[summary->species].growthRate][summary->level];
|
||||
|
||||
// Calculate the number of 1-pixel "ticks" to illuminate in the experience progress bar.
|
||||
// There are 8 tiles that make up the bar, and each tile has 8 "ticks". Hence, the numerator
|
||||
@@ -3412,7 +3413,7 @@ static void PrintExpPointsNextLevel(void)
|
||||
PrintTextOnWindow(windowId, gStringVar1, x, 1, 0, 0);
|
||||
|
||||
if (sum->level < MAX_LEVEL)
|
||||
expToNextLevel = gExperienceTables[gBaseStats[sum->species].growthRate][sum->level + 1] - sum->exp;
|
||||
expToNextLevel = gExperienceTables[gSpeciesInfo[sum->species].growthRate][sum->level + 1] - sum->exp;
|
||||
else
|
||||
expToNextLevel = 0;
|
||||
|
||||
@@ -3759,7 +3760,7 @@ static void CreateMoveTypeIcons(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = SPRITE_ARR_ID_TYPE; i < SPRITE_ARR_ID_TYPE + 5; i++)
|
||||
for (i = SPRITE_ARR_ID_TYPE; i < SPRITE_ARR_ID_TYPE + TYPE_ICON_SPRITE_COUNT; i++)
|
||||
{
|
||||
if (sMonSummaryScreen->spriteIds[i] == SPRITE_NONE)
|
||||
sMonSummaryScreen->spriteIds[i] = CreateSprite(&sSpriteTemplate_MoveTypes, 0, 0, 2);
|
||||
@@ -3788,10 +3789,10 @@ static void SetMonTypeIcons(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
SetTypeSpritePosAndPal(gBaseStats[summary->species].type1, 120, 48, SPRITE_ARR_ID_TYPE);
|
||||
if (gBaseStats[summary->species].type1 != gBaseStats[summary->species].type2)
|
||||
SetTypeSpritePosAndPal(gSpeciesInfo[summary->species].type1, 120, 48, SPRITE_ARR_ID_TYPE);
|
||||
if (gSpeciesInfo[summary->species].type1 != gSpeciesInfo[summary->species].type2)
|
||||
{
|
||||
SetTypeSpritePosAndPal(gBaseStats[summary->species].type2, 160, 48, SPRITE_ARR_ID_TYPE + 1);
|
||||
SetTypeSpritePosAndPal(gSpeciesInfo[summary->species].type2, 160, 48, SPRITE_ARR_ID_TYPE + 1);
|
||||
SetSpriteInvisibility(SPRITE_ARR_ID_TYPE + 1, FALSE);
|
||||
}
|
||||
else
|
||||
|
||||
+5
-5
@@ -59,23 +59,23 @@ struct PlayerRecordRS
|
||||
struct RecordMixingDaycareMail daycareMail;
|
||||
struct RSBattleTowerRecord battleTowerRecord;
|
||||
u16 giftItem;
|
||||
u16 padding[50];
|
||||
u16 filler[50];
|
||||
};
|
||||
|
||||
struct PlayerRecordEmerald
|
||||
{
|
||||
/* 0x0000 */ struct SecretBase secretBases[SECRET_BASES_COUNT];
|
||||
/* 0x0c80 */ TVShow tvShows[TV_SHOWS_COUNT];
|
||||
/* 0x0C80 */ TVShow tvShows[TV_SHOWS_COUNT];
|
||||
/* 0x1004 */ PokeNews pokeNews[POKE_NEWS_COUNT];
|
||||
/* 0x1044 */ OldMan oldMan;
|
||||
/* 0x1084 */ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT];
|
||||
/* 0x10ac */ struct RecordMixingDaycareMail daycareMail;
|
||||
/* 0x10AC */ struct RecordMixingDaycareMail daycareMail;
|
||||
/* 0x1124 */ struct EmeraldBattleTowerRecord battleTowerRecord;
|
||||
/* 0x1210 */ u16 giftItem;
|
||||
/* 0x1214 */ LilycoveLady lilycoveLady;
|
||||
/* 0x1254 */ struct Apprentice apprentices[2];
|
||||
/* 0x12dc */ struct PlayerHallRecords hallRecords;
|
||||
/* 0x1434 */ u8 padding[16];
|
||||
/* 0x12DC */ struct PlayerHallRecords hallRecords;
|
||||
/* 0x1434 */ u8 filler_1434[16];
|
||||
}; // 0x1444
|
||||
|
||||
union PlayerRecord
|
||||
|
||||
+2
-2
@@ -69,7 +69,7 @@ struct GFRomHeader
|
||||
u32 externalEventFlagsOffset;
|
||||
u32 externalEventDataOffset;
|
||||
u32 unk18;
|
||||
const struct BaseStats * baseStats;
|
||||
const struct SpeciesInfo * speciesInfo;
|
||||
const u8 (* abilityNames)[];
|
||||
const u8 * const * abilityDescriptions;
|
||||
const struct Item * items;
|
||||
@@ -150,7 +150,7 @@ static const struct GFRomHeader sGFRomHeader = {
|
||||
.externalEventFlagsOffset = offsetof(struct SaveBlock1, externalEventFlags),
|
||||
.externalEventDataOffset = offsetof(struct SaveBlock1, externalEventData),
|
||||
.unk18 = 0x00000000,
|
||||
.baseStats = gBaseStats,
|
||||
.speciesInfo = gSpeciesInfo,
|
||||
.abilityNames = gAbilityNames,
|
||||
.abilityDescriptions = gAbilityDescriptionPointers,
|
||||
.items = gItems,
|
||||
|
||||
+2
-2
@@ -214,7 +214,7 @@ static const struct ListMenuTemplate sRegistryListMenuTemplate =
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0,
|
||||
.cursorKind = CURSOR_BLACK_ARROW,
|
||||
};
|
||||
|
||||
static void ClearSecretBase(struct SecretBase *secretBase)
|
||||
@@ -953,7 +953,7 @@ static void BuildRegistryMenuItems(u8 taskId)
|
||||
}
|
||||
|
||||
sRegistryMenu->items[count].name = gText_Cancel;
|
||||
sRegistryMenu->items[count].id = -2;
|
||||
sRegistryMenu->items[count].id = LIST_CANCEL;
|
||||
tNumBases = count + 1;
|
||||
if (tNumBases < 8)
|
||||
tMaxShownItems = tNumBases;
|
||||
|
||||
+3
-3
@@ -216,7 +216,7 @@ static const struct ListMenuTemplate sShopBuyMenuListTemplate =
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NARROW,
|
||||
.cursorKind = 0
|
||||
.cursorKind = CURSOR_BLACK_ARROW
|
||||
};
|
||||
|
||||
static const struct BgTemplate sShopBuyMenuBgTemplates[] =
|
||||
@@ -808,9 +808,9 @@ static void BuyMenuDrawMapBg(void)
|
||||
metatileLayerType = METATILE_LAYER_TYPE_COVERED;
|
||||
|
||||
if (metatile < NUM_METATILES_IN_PRIMARY)
|
||||
BuyMenuDrawMapMetatile(i, j, mapLayout->primaryTileset->metatiles + metatile * 8, metatileLayerType);
|
||||
BuyMenuDrawMapMetatile(i, j, mapLayout->primaryTileset->metatiles + metatile * NUM_TILES_PER_METATILE, metatileLayerType);
|
||||
else
|
||||
BuyMenuDrawMapMetatile(i, j, mapLayout->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType);
|
||||
BuyMenuDrawMapMetatile(i, j, mapLayout->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * NUM_TILES_PER_METATILE), metatileLayerType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -996,7 +996,7 @@ static u8 SaveConfirmInputCallback(void)
|
||||
sSaveDialogCallback = SaveFileExistsCallback;
|
||||
return SAVE_IN_PROGRESS;
|
||||
}
|
||||
case -1: // B Button
|
||||
case MENU_B_PRESSED:
|
||||
case 1: // No
|
||||
HideSaveInfoWindow();
|
||||
HideSaveMessageWindow();
|
||||
@@ -1042,7 +1042,7 @@ static u8 SaveOverwriteInputCallback(void)
|
||||
case 0: // Yes
|
||||
sSaveDialogCallback = SaveSavingMessageCallback;
|
||||
return SAVE_IN_PROGRESS;
|
||||
case -1: // B Button
|
||||
case MENU_B_PRESSED:
|
||||
case 1: // No
|
||||
HideSaveInfoWindow();
|
||||
HideSaveMessageWindow();
|
||||
@@ -1161,7 +1161,7 @@ static u8 BattlePyramidRetireInputCallback(void)
|
||||
{
|
||||
case 0: // Yes
|
||||
return SAVE_CANCELED;
|
||||
case -1: // B Button
|
||||
case MENU_B_PRESSED:
|
||||
case 1: // No
|
||||
HideSaveMessageWindow();
|
||||
return SAVE_SUCCESS;
|
||||
|
||||
+8
-8
@@ -484,14 +484,14 @@ const u16 *const gTilesetAnims_BikeShop_BlinkingLights[] = {
|
||||
gTilesetAnims_BikeShop_BlinkingLights_Frame1
|
||||
};
|
||||
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame0[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/0.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame1[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/1.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame2[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/2.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame3[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/3.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame4[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/4.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame5[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/5.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame6[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/6.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame7[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/7.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame0[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/0_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/0_groudon.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame1[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/1_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/1_groudon.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame2[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/2_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/2_groudon.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame3[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/3_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/3_groudon.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame4[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/4_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/4_groudon.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame5[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/5_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/5_groudon.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame6[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/6_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/6_groudon.4bpp");
|
||||
const u16 gTilesetAnims_Sootopolis_StormyWater_Frame7[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/7_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/7_groudon.4bpp");
|
||||
const u16 tileset_anims_space_8[16] = {};
|
||||
|
||||
const u16 gTilesetAnims_Unused1_Frame0[] = INCBIN_U16("data/tilesets/secondary/unused_1/0.4bpp");
|
||||
|
||||
+2
-2
@@ -2465,8 +2465,8 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf
|
||||
else
|
||||
{
|
||||
// Player's Pokémon must be of the type the partner requested
|
||||
if (gBaseStats[playerSpecies2].type1 != requestedType
|
||||
&& gBaseStats[playerSpecies2].type2 != requestedType)
|
||||
if (gSpeciesInfo[playerSpecies2].type1 != requestedType
|
||||
&& gSpeciesInfo[playerSpecies2].type2 != requestedType)
|
||||
return UR_TRADE_MSG_NOT_MON_PARTNER_WANTS;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -924,7 +924,7 @@ u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId)
|
||||
static void SetTrainerHillMonLevel(struct Pokemon *mon, u8 level)
|
||||
{
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
u32 exp = gExperienceTables[gBaseStats[species].growthRate][level];
|
||||
u32 exp = gExperienceTables[gSpeciesInfo[species].growthRate][level];
|
||||
|
||||
SetMonData(mon, MON_DATA_EXP, &exp);
|
||||
SetMonData(mon, MON_DATA_LEVEL, &level);
|
||||
|
||||
+45
-45
@@ -271,7 +271,7 @@ static void GetURoomActivityRejectMsg(u8 *, s32, u32);
|
||||
static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct RfuPlayer *);
|
||||
static void GetURoomActivityStartMsg(u8 *, u8);
|
||||
static void UR_ClearBg0(void);
|
||||
static s32 IsRequestedTypeOrEggInPlayerParty(u32, u32);
|
||||
static s32 IsRequestedTradeInPlayerParty(u32, u32);
|
||||
static bool32 UR_PrintFieldMessage(const u8 *);
|
||||
static s32 GetChatLeaderActionRequestMessage(u8 *, u32, u16 *, struct WirelessLink_URoom *);
|
||||
static void Task_InitUnionRoom(u8 taskId);
|
||||
@@ -319,9 +319,9 @@ static void PrintPlayerNameAndIdOnWindow(u8 windowId)
|
||||
PrintUnionRoomText(windowId, FONT_NORMAL, text, 0, 17, UR_COLOR_DEFAULT);
|
||||
}
|
||||
|
||||
static void GetAwaitingCommunicationText(u8 *dst, u8 caseId)
|
||||
static void GetAwaitingCommunicationText(u8 *dst, u8 activity)
|
||||
{
|
||||
switch (caseId)
|
||||
switch (activity)
|
||||
{
|
||||
case ACTIVITY_BATTLE_SINGLE:
|
||||
case ACTIVITY_BATTLE_DOUBLE:
|
||||
@@ -343,18 +343,18 @@ static void GetAwaitingCommunicationText(u8 *dst, u8 caseId)
|
||||
case ACTIVITY_CONTEST_TOUGH:
|
||||
// BUG: argument *dst isn't used, instead it always prints to gStringVar4
|
||||
// not an issue in practice since Gamefreak never used any other arguments here besides gStringVar4
|
||||
#ifndef BUGFIX
|
||||
#ifndef BUGFIX
|
||||
StringExpandPlaceholders(gStringVar4, sText_AwaitingCommunication);
|
||||
#else
|
||||
#else
|
||||
StringExpandPlaceholders(dst, sText_AwaitingCommunication);
|
||||
#endif
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 IsActivityWithVariableGroupSize(u32 caseId)
|
||||
static bool32 IsActivityWithVariableGroupSize(u32 activity)
|
||||
{
|
||||
switch (caseId)
|
||||
switch (activity)
|
||||
{
|
||||
case ACTIVITY_POKEMON_JUMP:
|
||||
case ACTIVITY_BERRY_CRUSH:
|
||||
@@ -507,11 +507,11 @@ static void Task_TryBecomeLinkLeader(u8 taskId)
|
||||
// BUG: sPlayerActivityGroupSize was meant below, not gPlayerCurrActivity
|
||||
// This will be false for all but ACTIVITY_BATTLE_DOUBLE and ACTIVITY_DECLINE
|
||||
// All this changes is which of two texts gets printed
|
||||
#ifdef BUGFIX
|
||||
#ifdef BUGFIX
|
||||
id = (GROUP_MAX(sPlayerActivityGroupSize) == 2) ? 0 : 1;
|
||||
#else
|
||||
#else
|
||||
id = (GROUP_MAX(gPlayerCurrActivity) == 2) ? 1 : 0;
|
||||
#endif
|
||||
#endif
|
||||
if (PrintOnTextbox(&data->textState, sPlayerUnavailableTexts[id]))
|
||||
{
|
||||
data->playerCount = LeaderPrunePlayerList(data->playerList);
|
||||
@@ -559,6 +559,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId)
|
||||
{
|
||||
if (data->joinRequestAnswer == RFU_STATUS_JOIN_GROUP_OK)
|
||||
{
|
||||
// Sent "OK"
|
||||
data->playerList->players[data->playerCount].newPlayerCountdown = 0;
|
||||
RedrawListMenu(data->listTaskId);
|
||||
data->playerCount++;
|
||||
@@ -596,6 +597,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId)
|
||||
}
|
||||
else if (val == 2)
|
||||
{
|
||||
// Disconnect
|
||||
RfuSetStatus(RFU_STATUS_OK, 0);
|
||||
data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT;
|
||||
}
|
||||
@@ -734,9 +736,9 @@ static void Leader_DestroyResources(struct WirelessLink_Leader *data)
|
||||
Free(data->incomingPlayerList);
|
||||
}
|
||||
|
||||
static void Leader_GetAcceptNewMemberPrompt(u8 *dst, u8 caseId)
|
||||
static void Leader_GetAcceptNewMemberPrompt(u8 *dst, u8 activity)
|
||||
{
|
||||
switch (caseId)
|
||||
switch (activity)
|
||||
{
|
||||
case ACTIVITY_BATTLE_SINGLE:
|
||||
case ACTIVITY_BATTLE_DOUBLE:
|
||||
@@ -765,9 +767,9 @@ static void Leader_GetAcceptNewMemberPrompt(u8 *dst, u8 caseId)
|
||||
}
|
||||
}
|
||||
|
||||
static void GetYouDeclinedTheOfferMessage(u8 *dst, u8 caseId)
|
||||
static void GetYouDeclinedTheOfferMessage(u8 *dst, u8 activity)
|
||||
{
|
||||
switch (caseId)
|
||||
switch (activity)
|
||||
{
|
||||
case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM:
|
||||
case ACTIVITY_TRADE | IN_UNION_ROOM:
|
||||
@@ -780,9 +782,9 @@ static void GetYouDeclinedTheOfferMessage(u8 *dst, u8 caseId)
|
||||
}
|
||||
}
|
||||
|
||||
static void GetYouAskedToJoinGroupPleaseWaitMessage(u8 *dst, u8 caseId)
|
||||
static void GetYouAskedToJoinGroupPleaseWaitMessage(u8 *dst, u8 activity)
|
||||
{
|
||||
switch (caseId)
|
||||
switch (activity)
|
||||
{
|
||||
case ACTIVITY_BATTLE_SINGLE:
|
||||
case ACTIVITY_BATTLE_DOUBLE:
|
||||
@@ -809,9 +811,9 @@ static void GetYouAskedToJoinGroupPleaseWaitMessage(u8 *dst, u8 caseId)
|
||||
}
|
||||
}
|
||||
|
||||
static void GetGroupLeaderSentAnOKMessage(u8 *dst, u8 caseId)
|
||||
static void GetGroupLeaderSentAnOKMessage(u8 *dst, u8 activity)
|
||||
{
|
||||
switch (caseId)
|
||||
switch (activity)
|
||||
{
|
||||
case ACTIVITY_BATTLE_SINGLE:
|
||||
case ACTIVITY_BATTLE_DOUBLE:
|
||||
@@ -1039,7 +1041,7 @@ static void Task_TryJoinLinkGroup(u8 taskId)
|
||||
break;
|
||||
case 0:
|
||||
id = ListMenu_ProcessInput(data->listTaskId);
|
||||
if (JOY_NEW(A_BUTTON) && id != MENU_B_PRESSED)
|
||||
if (JOY_NEW(A_BUTTON) && id != LIST_NOTHING_CHOSEN)
|
||||
{
|
||||
// this unused variable along with the assignment is needed to match
|
||||
u32 activity = data->playerList->players[id].rfu.data.activity;
|
||||
@@ -1469,9 +1471,7 @@ static void Task_CreateTradeMenu(u8 taskId)
|
||||
|
||||
u8 CreateTask_CreateTradeMenu(void)
|
||||
{
|
||||
u8 taskId = CreateTask(Task_CreateTradeMenu, 0);
|
||||
|
||||
return taskId;
|
||||
return CreateTask(Task_CreateTradeMenu, 0);
|
||||
}
|
||||
|
||||
static void Task_StartUnionRoomTrade(u8 taskId)
|
||||
@@ -2147,11 +2147,10 @@ static void Task_CardOrNewsWithFriend(u8 taskId)
|
||||
break;
|
||||
case 0:
|
||||
id = ListMenu_ProcessInput(data->listTaskId);
|
||||
if (JOY_NEW(A_BUTTON) && id != -1)
|
||||
if (JOY_NEW(A_BUTTON) && id != LIST_NOTHING_CHOSEN)
|
||||
{
|
||||
// this unused variable along with the assignment is needed to match
|
||||
u32 unusedVar;
|
||||
unusedVar = data->playerList->players[id].rfu.data.activity;
|
||||
u32 activity = data->playerList->players[id].rfu.data.activity;
|
||||
|
||||
if (data->playerList->players[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->playerList->players[id].rfu.data.startedActivity)
|
||||
{
|
||||
@@ -2504,7 +2503,7 @@ static void Task_RunUnionRoom(u8 taskId)
|
||||
break;
|
||||
case UR_STATE_INIT_OBJECTS:
|
||||
CreateUnionRoomPlayerSprites(uroom->spriteIds, taskData[0]);
|
||||
if (++taskData[0] == 8)
|
||||
if (++taskData[0] == MAX_UNION_ROOM_LEADERS)
|
||||
uroom->state = UR_STATE_INIT_LINK;
|
||||
break;
|
||||
case UR_STATE_INIT_LINK:
|
||||
@@ -2711,7 +2710,7 @@ static void Task_RunUnionRoom(u8 taskId)
|
||||
&uroom->topListMenuId,
|
||||
&sWindowTemplate_InviteToActivity,
|
||||
&sListMenuTemplate_InviteToActivity);
|
||||
if (input != -1)
|
||||
if (input != LIST_NOTHING_CHOSEN)
|
||||
{
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
@@ -2721,7 +2720,7 @@ static void Task_RunUnionRoom(u8 taskId)
|
||||
{
|
||||
uroom->partnerYesNoResponse = 0;
|
||||
playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList);
|
||||
if (input == -2 || input == IN_UNION_ROOM)
|
||||
if (input == LIST_CANCEL || input == IN_UNION_ROOM)
|
||||
{
|
||||
uroom->playerSendBuffer[0] = IN_UNION_ROOM;
|
||||
Rfu_SendPacket(uroom->playerSendBuffer);
|
||||
@@ -3068,9 +3067,9 @@ static void Task_RunUnionRoom(u8 taskId)
|
||||
&uroom->tradeBoardHeaderWindowId,
|
||||
&sWindowTemplate_RegisterForTrade,
|
||||
&sListMenuTemplate_RegisterForTrade);
|
||||
if (input != -1)
|
||||
if (input != LIST_NOTHING_CHOSEN)
|
||||
{
|
||||
if (input == -2 || input == 3)
|
||||
if (input == LIST_CANCEL || input == 3) // Exit
|
||||
{
|
||||
uroom->state = UR_STATE_MAIN;
|
||||
HandleCancelActivity(TRUE);
|
||||
@@ -3090,7 +3089,7 @@ static void Task_RunUnionRoom(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case UR_STATE_REGISTER_SELECT_MON_FADE:
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
|
||||
uroom->state = UR_STATE_REGISTER_SELECT_MON;
|
||||
break;
|
||||
case UR_STATE_REGISTER_SELECT_MON:
|
||||
@@ -3107,11 +3106,11 @@ static void Task_RunUnionRoom(u8 taskId)
|
||||
&uroom->tradeBoardHeaderWindowId,
|
||||
&sWindowTemplate_TradingBoardRequestType,
|
||||
&sMenuTemplate_TradingBoardRequestType);
|
||||
if (input != -1)
|
||||
if (input != LIST_NOTHING_CHOSEN)
|
||||
{
|
||||
switch (input)
|
||||
{
|
||||
case -2:
|
||||
case LIST_CANCEL:
|
||||
case NUMBER_OF_MON_TYPES: // Exit
|
||||
ResetUnionRoomTrade(&sUnionRoomTrade);
|
||||
SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0);
|
||||
@@ -3166,18 +3165,18 @@ static void Task_RunUnionRoom(u8 taskId)
|
||||
&sWindowTemplate_TradingBoardMain,
|
||||
&sTradeBoardListMenuTemplate,
|
||||
uroom->playerList);
|
||||
if (input != -1)
|
||||
if (input != LIST_NOTHING_CHOSEN)
|
||||
{
|
||||
switch (input)
|
||||
{
|
||||
case -2:
|
||||
case LIST_CANCEL:
|
||||
case 8: // EXIT
|
||||
HandleCancelActivity(TRUE);
|
||||
uroom->state = UR_STATE_MAIN;
|
||||
break;
|
||||
default:
|
||||
UR_ClearBg0();
|
||||
switch (IsRequestedTypeOrEggInPlayerParty(uroom->playerList->players[input].rfu.data.tradeType, uroom->playerList->players[input].rfu.data.tradeSpecies))
|
||||
switch (IsRequestedTradeInPlayerParty(uroom->playerList->players[input].rfu.data.tradeType, uroom->playerList->players[input].rfu.data.tradeSpecies))
|
||||
{
|
||||
case UR_TRADE_MATCH:
|
||||
CopyAndTranslatePlayerName(gStringVar1, &uroom->playerList->players[input]);
|
||||
@@ -3707,12 +3706,12 @@ static s32 ListMenuHandler_AllItemsAvailable(u8 *state, u8 *windowId, u8 *listMe
|
||||
ClearStdWindowAndFrame(*windowId, TRUE);
|
||||
RemoveWindow(*windowId);
|
||||
*state = 0;
|
||||
return -2;
|
||||
return LIST_CANCEL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return -1;
|
||||
return LIST_NOTHING_CHOSEN;
|
||||
}
|
||||
|
||||
static s32 TradeBoardMenuHandler(u8 *state, u8 *mainWindowId, u8 *listMenuId, u8 *headerWindowId,
|
||||
@@ -3742,13 +3741,14 @@ static s32 TradeBoardMenuHandler(u8 *state, u8 *mainWindowId, u8 *listMenuId, u8
|
||||
input = ListMenu_ProcessInput(*listMenuId);
|
||||
if (JOY_NEW(A_BUTTON | B_BUTTON))
|
||||
{
|
||||
// Exit or B button
|
||||
if (input == 8 || JOY_NEW(B_BUTTON))
|
||||
{
|
||||
DestroyListMenuTask(*listMenuId, NULL, NULL);
|
||||
RemoveWindow(*mainWindowId);
|
||||
DeleteTradeBoardWindow(*headerWindowId);
|
||||
*state = 0;
|
||||
return -2;
|
||||
return LIST_CANCEL;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -3770,7 +3770,7 @@ static s32 TradeBoardMenuHandler(u8 *state, u8 *mainWindowId, u8 *listMenuId, u8
|
||||
break;
|
||||
}
|
||||
|
||||
return -1;
|
||||
return LIST_NOTHING_CHOSEN;
|
||||
}
|
||||
|
||||
static void UR_ClearBg0(void)
|
||||
@@ -4090,7 +4090,7 @@ static s32 UnionRoomGetPlayerInteractionResponse(struct RfuPlayerList *list, boo
|
||||
}
|
||||
}
|
||||
|
||||
void ItemPrintFunc_EmptyList(u8 windowId, u32 itemId, u8 y)
|
||||
static void ItemPrintFunc_EmptyList(u8 windowId, u32 itemId, u8 y)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -4120,7 +4120,7 @@ static void TradeBoardListMenuItemPrintFunc(u8 windowId, u32 itemId, u8 y)
|
||||
struct WirelessLink_Leader *leader = sWirelessLinkMain.leader;
|
||||
struct RfuGameData *gameData;
|
||||
s32 i, j;
|
||||
u8 playerName[11];
|
||||
u8 playerName[RFU_USER_NAME_LENGTH + 1];
|
||||
|
||||
if (itemId == LIST_HEADER && y == sTradeBoardListMenuTemplate.upText_Y)
|
||||
{
|
||||
@@ -4168,7 +4168,7 @@ static s32 GetUnionRoomPlayerGender(s32 playerIdx, struct RfuPlayerList *list)
|
||||
return list->players[playerIdx].rfu.data.playerGender;
|
||||
}
|
||||
|
||||
static s32 IsRequestedTypeOrEggInPlayerParty(u32 type, u32 species)
|
||||
static s32 IsRequestedTradeInPlayerParty(u32 type, u32 species)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
@@ -4187,7 +4187,7 @@ static s32 IsRequestedTypeOrEggInPlayerParty(u32 type, u32 species)
|
||||
for (i = 0; i < gPlayerPartyCount; i++)
|
||||
{
|
||||
species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
|
||||
if (gBaseStats[species].type1 == type || gBaseStats[species].type2 == type)
|
||||
if (gSpeciesInfo[species].type1 == type || gSpeciesInfo[species].type2 == type)
|
||||
return UR_TRADE_MATCH;
|
||||
}
|
||||
return UR_TRADE_NOTYPE;
|
||||
|
||||
@@ -1171,7 +1171,7 @@ static void Chat_AskQuitChatting(void)
|
||||
input = ProcessMenuInput();
|
||||
switch (input)
|
||||
{
|
||||
case -1:
|
||||
case MENU_B_PRESSED:
|
||||
case 1:
|
||||
StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
|
||||
sChat->funcState = 3;
|
||||
@@ -1210,7 +1210,7 @@ static void Chat_AskQuitChatting(void)
|
||||
input = ProcessMenuInput();
|
||||
switch (input)
|
||||
{
|
||||
case -1:
|
||||
case MENU_B_PRESSED:
|
||||
case 1:
|
||||
StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
|
||||
sChat->funcState = 3;
|
||||
@@ -1512,7 +1512,7 @@ static void Chat_SaveAndExit(void)
|
||||
input = ProcessMenuInput();
|
||||
switch (input)
|
||||
{
|
||||
case -1:
|
||||
case MENU_B_PRESSED:
|
||||
case 1:
|
||||
sChat->funcState = 12;
|
||||
break;
|
||||
@@ -1537,7 +1537,7 @@ static void Chat_SaveAndExit(void)
|
||||
input = ProcessMenuInput();
|
||||
switch (input)
|
||||
{
|
||||
case -1:
|
||||
case MENU_B_PRESSED:
|
||||
case 1:
|
||||
sChat->funcState = 12;
|
||||
break;
|
||||
|
||||
@@ -340,15 +340,10 @@ static void AnimateUnionRoomPlayer(u32 leaderId, struct UnionRoomObject * object
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (object->schedAnim == UNION_ROOM_SPAWN_OUT)
|
||||
{
|
||||
object->state = 3;
|
||||
object->animState = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (object->schedAnim != UNION_ROOM_SPAWN_OUT)
|
||||
break;
|
||||
}
|
||||
object->state = 3;
|
||||
object->animState = 0;
|
||||
// fallthrough
|
||||
case 3:
|
||||
if (AnimateUnionRoomPlayerDespawn(&object->animState, leaderId, object) == 1)
|
||||
|
||||
@@ -379,7 +379,7 @@ static void CreateWildMon(u16 species, u8 level)
|
||||
ZeroEnemyPartyMons();
|
||||
checkCuteCharm = TRUE;
|
||||
|
||||
switch (gBaseStats[species].genderRatio)
|
||||
switch (gSpeciesInfo[species].genderRatio)
|
||||
{
|
||||
case MON_MALE:
|
||||
case MON_FEMALE:
|
||||
@@ -913,7 +913,7 @@ static bool8 TryGetRandomWildMonIndexByType(const struct WildPokemon *wildMon, u
|
||||
|
||||
for (validMonCount = 0, i = 0; i < numMon; i++)
|
||||
{
|
||||
if (gBaseStats[wildMon[i].species].type1 == type || gBaseStats[wildMon[i].species].type2 == type)
|
||||
if (gSpeciesInfo[wildMon[i].species].type1 == type || gSpeciesInfo[wildMon[i].species].type2 == type)
|
||||
validIndexes[validMonCount++] = i;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "union_room.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/union_room.h"
|
||||
#include "constants/rgb.h"
|
||||
|
||||
enum {
|
||||
COLORMODE_NORMAL,
|
||||
@@ -51,9 +52,26 @@ static void Task_WirelessCommunicationScreen(u8);
|
||||
static void WCSS_AddTextPrinterParameterized(u8, u8, const u8 *, u8, u8, u8);
|
||||
static bool32 UpdateCommunicationCounts(u32 *, u32 *, u32 *, u8);
|
||||
|
||||
static const u16 sBgTiles_Pal[] = INCBIN_U16("graphics/link/wireless_info_screen.gbapal");
|
||||
static const u32 sBgTiles_Gfx[] = INCBIN_U32("graphics/link/wireless_info_screen.4bpp.lz");
|
||||
static const u32 sBgTiles_Tilemap[] = INCBIN_U32("graphics/link/wireless_info_screen.bin.lz");
|
||||
static const u16 sPalettes[][16] = {
|
||||
INCBIN_U16("graphics/wireless_status_screen/default.gbapal"),
|
||||
{}, // All black. Never read
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_00.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_01.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_02.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_03.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_04.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_05.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_06.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_07.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_08.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_09.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_10.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_11.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_12.gbapal"),
|
||||
INCBIN_U16("graphics/wireless_status_screen/anim_13.gbapal")
|
||||
};
|
||||
static const u32 sBgTiles_Gfx[] = INCBIN_U32("graphics/wireless_status_screen/bg.4bpp.lz");
|
||||
static const u32 sBgTiles_Tilemap[] = INCBIN_U32("graphics/wireless_status_screen/bg.bin.lz");
|
||||
|
||||
static const struct BgTemplate sBgTemplates[] = {
|
||||
{
|
||||
@@ -193,7 +211,7 @@ static void CB2_InitWirelessCommunicationScreen(void)
|
||||
ChangeBgY(0, 0, BG_COORD_SET);
|
||||
ChangeBgX(1, 0, BG_COORD_SET);
|
||||
ChangeBgY(1, 0, BG_COORD_SET);
|
||||
LoadPalette(sBgTiles_Pal, 0x00, 0x20);
|
||||
LoadPalette(sPalettes, 0x00, 0x20);
|
||||
Menu_LoadStdPalAt(0xF0);
|
||||
DynamicPlaceholderTextUtil_Reset();
|
||||
FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x0F);
|
||||
@@ -218,16 +236,19 @@ static void CB2_ExitWirelessCommunicationStatusScreen(void)
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
static void WCSS_CyclePalette(s16 * counter, s16 * palIdx)
|
||||
// Cycle through palettes that relocate various shades of blue to create the wave effect at the bottom of the screen.
|
||||
static void CyclePalette(s16 * counter, s16 * palIdx)
|
||||
{
|
||||
s32 idx;
|
||||
if (++(*counter) > 5)
|
||||
{
|
||||
if (++(*palIdx) == 14)
|
||||
if (++(*palIdx) == (int)ARRAY_COUNT(sPalettes) - 2)
|
||||
*palIdx = 0;
|
||||
|
||||
*counter = 0;
|
||||
}
|
||||
LoadPalette(sBgTiles_Pal + 16 * (*palIdx + 2), 0, 0x10);
|
||||
idx = *palIdx + 2; // +2 skips over default.pal and the empty black palette after it
|
||||
LoadPalette(sPalettes[idx], 0, 16);
|
||||
}
|
||||
|
||||
static void PrintHeaderTexts(void)
|
||||
@@ -236,12 +257,17 @@ static void PrintHeaderTexts(void)
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(0));
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(0));
|
||||
FillWindowPixelBuffer(2, PIXEL_FILL(0));
|
||||
|
||||
// Print title
|
||||
WCSS_AddTextPrinterParameterized(0, FONT_NORMAL, sHeaderTexts[0], GetStringCenterAlignXOffset(FONT_NORMAL, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN);
|
||||
for (i = 0; i < (int)ARRAY_COUNT(*sHeaderTexts) - 1; i++)
|
||||
{
|
||||
|
||||
// Print label for each group (excluding total)
|
||||
for (i = 0; i < NUM_GROUPTYPES - 1; i++)
|
||||
WCSS_AddTextPrinterParameterized(1, FONT_NORMAL, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY);
|
||||
}
|
||||
|
||||
// Print label for total
|
||||
WCSS_AddTextPrinterParameterized(1, FONT_NORMAL, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_RED);
|
||||
|
||||
PutWindowTilemap(0);
|
||||
CopyWindowToVram(0, COPYWIN_GFX);
|
||||
PutWindowTilemap(1);
|
||||
@@ -260,7 +286,7 @@ static void Task_WirelessCommunicationScreen(u8 taskId)
|
||||
gTasks[taskId].tState++;
|
||||
break;
|
||||
case 1:
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, 0);
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
|
||||
ShowBg(1);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
ShowBg(0);
|
||||
@@ -268,9 +294,7 @@ static void Task_WirelessCommunicationScreen(u8 taskId)
|
||||
break;
|
||||
case 2:
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (UpdateCommunicationCounts(sStatusScreen->groupCounts, sStatusScreen->prevGroupCounts, sStatusScreen->activities, sStatusScreen->rfuTaskId))
|
||||
@@ -293,10 +317,10 @@ static void Task_WirelessCommunicationScreen(u8 taskId)
|
||||
gTasks[sStatusScreen->rfuTaskId].data[15] = 0xFF;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
WCSS_CyclePalette(&gTasks[taskId].data[7], &gTasks[taskId].data[8]);
|
||||
CyclePalette(&gTasks[taskId].data[7], &gTasks[taskId].data[8]);
|
||||
break;
|
||||
case 4:
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, 0);
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
|
||||
gTasks[taskId].tState++;
|
||||
break;
|
||||
case 5:
|
||||
|
||||
Reference in New Issue
Block a user