mirror of
https://github.com/pret/pokefirered.git
synced 2026-05-15 00:30:05 -05:00
natures refactoring
This commit is contained in:
parent
e9661be94a
commit
3cb3ccb6df
|
|
@ -588,6 +588,14 @@ struct Ability
|
|||
u8 failsOnImposter:1; // doesn't work on an Imposter mon; when can we actually use this?
|
||||
};
|
||||
|
||||
struct NatureInfo
|
||||
{
|
||||
const u8 *name;
|
||||
u8 statUp;
|
||||
u8 statDown;
|
||||
u8 backAnim;
|
||||
};
|
||||
|
||||
#define SPINDA_SPOT_WIDTH 16
|
||||
#define SPINDA_SPOT_HEIGHT 16
|
||||
|
||||
|
|
@ -656,7 +664,7 @@ extern const struct SpriteTemplate gSpriteTemplates_Battlers[];
|
|||
extern const u8 gPPUpGetMask[];
|
||||
extern const u32 sExpCandyExperienceTable[];
|
||||
extern const struct Ability gAbilitiesInfo[];
|
||||
extern const s8 gNatureStatTable[][5];
|
||||
extern const struct NatureInfo gNaturesInfo[];
|
||||
|
||||
void ZeroBoxMonData(struct BoxPokemon *boxMon);
|
||||
void ZeroMonData(struct Pokemon *mon);
|
||||
|
|
|
|||
|
|
@ -3,9 +3,6 @@
|
|||
|
||||
#include "main.h"
|
||||
|
||||
extern const u8 *const gMoveDescriptionPointers[];
|
||||
extern const u8 *const gNatureNamePointers[];
|
||||
|
||||
void ShowSelectMovePokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u16);
|
||||
u8 GetMoveSlotToReplace(void);
|
||||
void SummaryScreen_SetUnknownTaskId(u8 a0);
|
||||
|
|
|
|||
|
|
@ -995,7 +995,7 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon)
|
|||
barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBattlerPosition(gSprites[healthboxSpriteId].sBattlerId) * 384)];
|
||||
var = 5;
|
||||
nature = GetNature(mon);
|
||||
StringCopy(text + 6, gNatureNamePointers[nature]);
|
||||
StringCopy(text + 6, gNaturesInfo[nature].name);
|
||||
RenderTextHandleBold(barFontGfx, 0, text);
|
||||
|
||||
for (j = 6, i = 0; i < var; i++, j++)
|
||||
|
|
|
|||
269
src/pokemon.c
269
src/pokemon.c
|
|
@ -593,62 +593,184 @@ static const struct SpindaSpot sSpindaSpotGraphics[] =
|
|||
{.x = 34, .y = 26, .image = INCBIN_U16("graphics/spinda_spots/spot_3.bin")}
|
||||
};
|
||||
|
||||
const u8 *const gNatureNamePointers[NUM_NATURES] =
|
||||
{
|
||||
[NATURE_HARDY] = COMPOUND_STRING("Hardy"),
|
||||
[NATURE_LONELY] = COMPOUND_STRING("Lonely"),
|
||||
[NATURE_BRAVE] = COMPOUND_STRING("Brave"),
|
||||
[NATURE_ADAMANT] = COMPOUND_STRING("Adamant"),
|
||||
[NATURE_NAUGHTY] = COMPOUND_STRING("Naughty"),
|
||||
[NATURE_BOLD] = COMPOUND_STRING("Bold"),
|
||||
[NATURE_DOCILE] = COMPOUND_STRING("Docile"),
|
||||
[NATURE_RELAXED] = COMPOUND_STRING("Relaxed"),
|
||||
[NATURE_IMPISH] = COMPOUND_STRING("Impish"),
|
||||
[NATURE_LAX] = COMPOUND_STRING("Lax"),
|
||||
[NATURE_TIMID] = COMPOUND_STRING("Timid"),
|
||||
[NATURE_HASTY] = COMPOUND_STRING("Hasty"),
|
||||
[NATURE_SERIOUS] = COMPOUND_STRING("Serious"),
|
||||
[NATURE_JOLLY] = COMPOUND_STRING("Jolly"),
|
||||
[NATURE_NAIVE] = COMPOUND_STRING("Naive"),
|
||||
[NATURE_MODEST] = COMPOUND_STRING("Modest"),
|
||||
[NATURE_MILD] = COMPOUND_STRING("Mild"),
|
||||
[NATURE_QUIET] = COMPOUND_STRING("Quiet"),
|
||||
[NATURE_BASHFUL] = COMPOUND_STRING("Bashful"),
|
||||
[NATURE_RASH] = COMPOUND_STRING("Rash"),
|
||||
[NATURE_CALM] = COMPOUND_STRING("Calm"),
|
||||
[NATURE_GENTLE] = COMPOUND_STRING("Gentle"),
|
||||
[NATURE_SASSY] = COMPOUND_STRING("Sassy"),
|
||||
[NATURE_CAREFUL] = COMPOUND_STRING("Careful"),
|
||||
[NATURE_QUIRKY] = COMPOUND_STRING("Quirky"),
|
||||
};
|
||||
|
||||
const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] =
|
||||
{ // Attack Defense Speed Sp.Atk Sp. Def
|
||||
[NATURE_HARDY] = { 0, 0, 0, 0, 0 },
|
||||
[NATURE_LONELY] = { +1, -1, 0, 0, 0 },
|
||||
[NATURE_BRAVE] = { +1, 0, -1, 0, 0 },
|
||||
[NATURE_ADAMANT] = { +1, 0, 0, -1, 0 },
|
||||
[NATURE_NAUGHTY] = { +1, 0, 0, 0, -1 },
|
||||
[NATURE_BOLD] = { -1, +1, 0, 0, 0 },
|
||||
[NATURE_DOCILE] = { 0, 0, 0, 0, 0 },
|
||||
[NATURE_RELAXED] = { 0, +1, -1, 0, 0 },
|
||||
[NATURE_IMPISH] = { 0, +1, 0, -1, 0 },
|
||||
[NATURE_LAX] = { 0, +1, 0, 0, -1 },
|
||||
[NATURE_TIMID] = { -1, 0, +1, 0, 0 },
|
||||
[NATURE_HASTY] = { 0, -1, +1, 0, 0 },
|
||||
[NATURE_SERIOUS] = { 0, 0, 0, 0, 0 },
|
||||
[NATURE_JOLLY] = { 0, 0, +1, -1, 0 },
|
||||
[NATURE_NAIVE] = { 0, 0, +1, 0, -1 },
|
||||
[NATURE_MODEST] = { -1, 0, 0, +1, 0 },
|
||||
[NATURE_MILD] = { 0, -1, 0, +1, 0 },
|
||||
[NATURE_QUIET] = { 0, 0, -1, +1, 0 },
|
||||
[NATURE_BASHFUL] = { 0, 0, 0, 0, 0 },
|
||||
[NATURE_RASH] = { 0, 0, 0, +1, -1 },
|
||||
[NATURE_CALM] = { -1, 0, 0, 0, +1 },
|
||||
[NATURE_GENTLE] = { 0, -1, 0, 0, +1 },
|
||||
[NATURE_SASSY] = { 0, 0, -1, 0, +1 },
|
||||
[NATURE_CAREFUL] = { 0, 0, 0, -1, +1 },
|
||||
[NATURE_QUIRKY] = { 0, 0, 0, 0, 0 },
|
||||
const struct NatureInfo gNaturesInfo[NUM_NATURES] =
|
||||
{
|
||||
[NATURE_HARDY] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Hardy"),
|
||||
.statUp = STAT_ATK,
|
||||
.statDown = STAT_ATK,
|
||||
.backAnim = 0,
|
||||
},
|
||||
[NATURE_LONELY] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Lonely"),
|
||||
.statUp = STAT_ATK,
|
||||
.statDown = STAT_DEF,
|
||||
.backAnim = 2,
|
||||
},
|
||||
[NATURE_BRAVE] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Brave"),
|
||||
.statUp = STAT_ATK,
|
||||
.statDown = STAT_SPEED,
|
||||
.backAnim = 0,
|
||||
},
|
||||
[NATURE_ADAMANT] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Adamant"),
|
||||
.statUp = STAT_ATK,
|
||||
.statDown = STAT_SPATK,
|
||||
.backAnim = 0,
|
||||
},
|
||||
[NATURE_NAUGHTY] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Naughty"),
|
||||
.statUp = STAT_ATK,
|
||||
.statDown = STAT_SPDEF,
|
||||
.backAnim = 0,
|
||||
},
|
||||
[NATURE_BOLD] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Bold"),
|
||||
.statUp = STAT_DEF,
|
||||
.statDown = STAT_ATK,
|
||||
.backAnim = 1,
|
||||
},
|
||||
[NATURE_DOCILE] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Docile"),
|
||||
.statUp = STAT_DEF,
|
||||
.statDown = STAT_DEF,
|
||||
.backAnim = 1,
|
||||
},
|
||||
[NATURE_RELAXED] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Relaxed"),
|
||||
.statUp = STAT_DEF,
|
||||
.statDown = STAT_SPEED,
|
||||
.backAnim = 1,
|
||||
},
|
||||
[NATURE_IMPISH] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Impish"),
|
||||
.statUp = STAT_DEF,
|
||||
.statDown = STAT_SPATK,
|
||||
.backAnim = 0,
|
||||
},
|
||||
[NATURE_LAX] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Lax"),
|
||||
.statUp = STAT_DEF,
|
||||
.statDown = STAT_SPDEF,
|
||||
.backAnim = 1,
|
||||
},
|
||||
[NATURE_TIMID] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Timid"),
|
||||
.statUp = STAT_SPEED,
|
||||
.statDown = STAT_ATK,
|
||||
.backAnim = 2,
|
||||
},
|
||||
[NATURE_HASTY] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Hasty"),
|
||||
.statUp = STAT_SPEED,
|
||||
.statDown = STAT_DEF,
|
||||
.backAnim = 0,
|
||||
},
|
||||
[NATURE_SERIOUS] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Serious"),
|
||||
.statUp = STAT_SPEED,
|
||||
.statDown = STAT_SPEED,
|
||||
.backAnim = 1,
|
||||
},
|
||||
[NATURE_JOLLY] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Jolly"),
|
||||
.statUp = STAT_SPEED,
|
||||
.statDown = STAT_SPATK,
|
||||
.backAnim = 0,
|
||||
},
|
||||
[NATURE_NAIVE] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Naive"),
|
||||
.statUp = STAT_SPEED,
|
||||
.statDown = STAT_SPDEF,
|
||||
.backAnim = 0,
|
||||
},
|
||||
[NATURE_MODEST] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Modest"),
|
||||
.statUp = STAT_SPATK,
|
||||
.statDown = STAT_ATK,
|
||||
.backAnim = 2,
|
||||
},
|
||||
[NATURE_MILD] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Mild"),
|
||||
.statUp = STAT_SPATK,
|
||||
.statDown = STAT_DEF,
|
||||
.backAnim = 2,
|
||||
},
|
||||
[NATURE_QUIET] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Quiet"),
|
||||
.statUp = STAT_SPATK,
|
||||
.statDown = STAT_SPEED,
|
||||
.backAnim = 2,
|
||||
},
|
||||
[NATURE_BASHFUL] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Bashful"),
|
||||
.statUp = STAT_SPATK,
|
||||
.statDown = STAT_SPATK,
|
||||
.backAnim = 2,
|
||||
},
|
||||
[NATURE_RASH] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Rash"),
|
||||
.statUp = STAT_SPATK,
|
||||
.statDown = STAT_SPDEF,
|
||||
.backAnim = 1,
|
||||
},
|
||||
[NATURE_CALM] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Calm"),
|
||||
.statUp = STAT_SPDEF,
|
||||
.statDown = STAT_ATK,
|
||||
.backAnim = 1,
|
||||
},
|
||||
[NATURE_GENTLE] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Gentle"),
|
||||
.statUp = STAT_SPDEF,
|
||||
.statDown = STAT_DEF,
|
||||
.backAnim = 2,
|
||||
},
|
||||
[NATURE_SASSY] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Sassy"),
|
||||
.statUp = STAT_SPDEF,
|
||||
.statDown = STAT_SPEED,
|
||||
.backAnim = 1,
|
||||
},
|
||||
[NATURE_CAREFUL] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Careful"),
|
||||
.statUp = STAT_SPDEF,
|
||||
.statDown = STAT_SPATK,
|
||||
.backAnim = 2,
|
||||
},
|
||||
[NATURE_QUIRKY] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Quirky"),
|
||||
.statUp = STAT_SPDEF,
|
||||
.statDown = STAT_SPDEF,
|
||||
.backAnim = 1,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -4606,38 +4728,15 @@ u8 GetTrainerEncounterMusicId(u16 trainerId)
|
|||
|
||||
u16 ModifyStatByNature(u8 nature, u16 stat, u8 statIndex)
|
||||
{
|
||||
// Because this is a u16 it will be unable to store the
|
||||
// result of the multiplication for any stat > 595 for a
|
||||
// positive nature and > 728 for a negative nature.
|
||||
// Neither occur in the base game, but this can happen if
|
||||
// any Nature-affected base stat is increased to a value
|
||||
// above 248. The closest by default is Shuckle at 230.
|
||||
// #ifdef BUGFIX
|
||||
u32 retVal;
|
||||
// #else
|
||||
// u16 retVal;
|
||||
// #endif
|
||||
|
||||
// Don't modify HP, Accuracy, or Evasion by nature
|
||||
if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS)
|
||||
if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS || gNaturesInfo[nature].statUp == gNaturesInfo[nature].statDown)
|
||||
return stat;
|
||||
else if (statIndex == gNaturesInfo[nature].statUp)
|
||||
return stat * 110 / 100;
|
||||
else if (statIndex == gNaturesInfo[nature].statDown)
|
||||
return stat * 90 / 100;
|
||||
else
|
||||
return stat;
|
||||
|
||||
switch (gNatureStatTable[nature][statIndex - 1])
|
||||
{
|
||||
case 1:
|
||||
retVal = stat * 110;
|
||||
retVal /= 100;
|
||||
break;
|
||||
case -1:
|
||||
retVal = stat * 90;
|
||||
retVal /= 100;
|
||||
break;
|
||||
default:
|
||||
retVal = stat;
|
||||
break;
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
void AdjustFriendship(struct Pokemon *mon, u8 event)
|
||||
|
|
|
|||
|
|
@ -2244,15 +2244,15 @@ static void ApplyNatureColor(u8 *str, u8 stat)
|
|||
const u8 red[] = _("{COLOR 1}");
|
||||
const u8 none[] = _("");
|
||||
u8 nature = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_HIDDEN_NATURE);
|
||||
const s8 *natureMods = gNatureStatTable[nature];
|
||||
s8 mod = natureMods[stat - 1];
|
||||
u8 tmp[20];
|
||||
|
||||
StringCopy(tmp, str);
|
||||
|
||||
if (mod > 0)
|
||||
if (gNaturesInfo[nature].statUp == gNaturesInfo[nature].statDown)
|
||||
StringCopy(str, none);
|
||||
else if (gNaturesInfo[nature].statUp == stat)
|
||||
StringCopy(str, red);
|
||||
else if (mod < 0)
|
||||
else if (gNaturesInfo[nature].statDown == stat)
|
||||
StringCopy(str, blue);
|
||||
else
|
||||
StringCopy(str, none);
|
||||
|
|
@ -2782,7 +2782,7 @@ static void PokeSum_PrintTrainerMemo_Mon_HeldByOT(void)
|
|||
|
||||
DynamicPlaceholderTextUtil_Reset();
|
||||
nature = GetNature(&sMonSummaryScreen->currentMon);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gNatureNamePointers[nature]);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gNaturesInfo[nature].name);
|
||||
level = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_MET_LEVEL);
|
||||
|
||||
if (level == 0)
|
||||
|
|
@ -2856,7 +2856,7 @@ static void PokeSum_PrintTrainerMemo_Mon_NotHeldByOT(void)
|
|||
|
||||
DynamicPlaceholderTextUtil_Reset();
|
||||
nature = GetNature(&sMonSummaryScreen->currentMon);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gNatureNamePointers[nature]);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gNaturesInfo[nature].name);
|
||||
|
||||
level = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_MET_LEVEL);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user