Merge branch 'master' into doc-wnews

This commit is contained in:
GriffinR
2023-01-03 22:28:21 -05:00
committed by GitHub
101 changed files with 4144 additions and 6210 deletions
+13 -13
View File
@@ -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
+6 -6
View File
@@ -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);
+5 -5
View File
@@ -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];
+4 -4
View File
@@ -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)
{
+4 -4
View File
@@ -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
View File
@@ -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);
+3 -3
View File
@@ -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.
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+2 -2
View File
@@ -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);
+1 -1
View File
@@ -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 {
+11 -11
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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:
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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] =
{
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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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)
+3 -3
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+7 -7
View File
@@ -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);
}
}
+7 -7
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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);
}
}
}
+2 -2
View File
@@ -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)
{
+9 -8
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+4 -4
View File
@@ -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;
+3 -8
View File
@@ -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)
+2 -2
View File
@@ -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;
}
+39 -15
View File
@@ -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: