Updated the way in which ScriptGiveMonParameterized and ScrCmd_givemon chooe a default ability (#4192)
* Updated the way in which ScrCmd_givemon and ScriptGiveMon assign a default ability When an abilityNum is not assigned in a call to givemon performed inside of an overworld script, ScriptGiveMonParameterized will make sure to generate an abilityNum of 0 or 1 in the same way vanilla does it; by defaulting to 0, and then tweaking it based on the least relevant bit of the Pokémon's personality. ScriptGiveMon will set the default ability of a Pokémon in the same way now too, because even though it was rewritten in #3924, it should ideally produce a Pokémon in a similar way than vanilla does it. * Removed pointless abilityNum setup in ScriptGiveMonParameterized
This commit is contained in:
parent
7f6e1e2aea
commit
eb7ddeb66c
2 changed files with 10 additions and 3 deletions
|
@ -323,6 +323,9 @@
|
|||
#define NUM_NORMAL_ABILITY_SLOTS 2
|
||||
#define NUM_HIDDEN_ABILITY_SLOTS 1
|
||||
|
||||
// Used as a signal for givemon to generate a default ability in the vanilla Pokémon Emerald way.
|
||||
#define NUM_ABILITY_VANILLA 0xFF
|
||||
|
||||
#define LEGENDARY_PERFECT_IV_COUNT 3
|
||||
|
||||
#endif // GUARD_CONSTANTS_POKEMON_H
|
||||
|
|
|
@ -345,7 +345,11 @@ u32 ScriptGiveMonParameterized(u16 species, u8 level, u16 item, u8 ball, u8 natu
|
|||
}
|
||||
|
||||
// ability
|
||||
if (abilityNum >= NUM_ABILITY_SLOTS || GetAbilityBySpecies(species, abilityNum) == ABILITY_NONE)
|
||||
if (abilityNum == NUM_ABILITY_VANILLA)
|
||||
{
|
||||
abilityNum = GetMonData(&mon, MON_DATA_PERSONALITY) & 1;
|
||||
}
|
||||
else if (abilityNum > NUM_NORMAL_ABILITY_SLOTS || GetAbilityBySpecies(species, abilityNum) == ABILITY_NONE)
|
||||
{
|
||||
do {
|
||||
abilityNum = Random() % NUM_ABILITY_SLOTS; // includes hidden abilities
|
||||
|
@ -410,7 +414,7 @@ u32 ScriptGiveMon(u16 species, u8 level, u16 item)
|
|||
MAX_PER_STAT_IVS + 1, MAX_PER_STAT_IVS + 1, MAX_PER_STAT_IVS + 1}; // ScriptGiveMonParameterized won't touch the stats' IV.
|
||||
u16 moves[MAX_MON_MOVES] = {MOVE_NONE, MOVE_NONE, MOVE_NONE, MOVE_NONE};
|
||||
|
||||
return ScriptGiveMonParameterized(species, level, item, ITEM_POKE_BALL, NUM_NATURES, NUM_ABILITY_SLOTS, MON_GENDERLESS, evs, ivs, moves, FALSE, FALSE, NUMBER_OF_MON_TYPES);
|
||||
return ScriptGiveMonParameterized(species, level, item, ITEM_POKE_BALL, NUM_NATURES, NUM_ABILITY_VANILLA, MON_GENDERLESS, evs, ivs, moves, FALSE, FALSE, NUMBER_OF_MON_TYPES);
|
||||
}
|
||||
|
||||
#define PARSE_FLAG(n, default_) (flags & (1 << (n))) ? VarGet(ScriptReadHalfword(ctx)) : (default_)
|
||||
|
@ -424,7 +428,7 @@ void ScrCmd_givemon(struct ScriptContext *ctx)
|
|||
u16 item = PARSE_FLAG(0, ITEM_NONE);
|
||||
u8 ball = PARSE_FLAG(1, ITEM_POKE_BALL);
|
||||
u8 nature = PARSE_FLAG(2, NUM_NATURES);
|
||||
u8 abilityNum = PARSE_FLAG(3, NUM_ABILITY_SLOTS);
|
||||
u8 abilityNum = PARSE_FLAG(3, NUM_ABILITY_VANILLA);
|
||||
u8 gender = PARSE_FLAG(4, MON_GENDERLESS); // TODO: Find a better way to assign a random gender.
|
||||
u8 hpEv = PARSE_FLAG(5, 0);
|
||||
u8 atkEv = PARSE_FLAG(6, 0);
|
||||
|
|
Loading…
Reference in a new issue