Added a day time exclusive equivalent to FORM_USE_ITEM
Primarily for Shaymin, since it can only change its form with the Gracidea during the day. Special thanks to AsparagusEduardo.
This commit is contained in:
parent
082dd1cb23
commit
234f3290c3
4 changed files with 21 additions and 4 deletions
|
@ -354,6 +354,7 @@
|
|||
#define FORM_ITEM_USE 2
|
||||
#define FORM_MOVE 3
|
||||
#define FORM_WITHDRAW 4
|
||||
#define FORM_ITEM_USE_DAY 5
|
||||
|
||||
// Evolution 'modes,' for GetEvolutionTargetSpecies
|
||||
#define EVO_MODE_NORMAL 0
|
||||
|
|
|
@ -17,6 +17,10 @@ FORM_MOVE:
|
|||
FORM_WITHDRAW:
|
||||
Form change activates when the Pokemon is withdrawn from the PC or Daycare.
|
||||
no parameters
|
||||
|
||||
FORM_ITEM_USE_DAY:
|
||||
Same as FORM_ITEM_USE, but only works during day time.
|
||||
Used by Shaymin's Gracidea-based form change.
|
||||
*/
|
||||
|
||||
#define WHEN_LEARNED FALSE
|
||||
|
@ -28,7 +32,7 @@ static const struct FormChange sGiratinaFormChangeTable[] = {
|
|||
};
|
||||
|
||||
static const struct FormChange sShayminFormChangeTable[] = {
|
||||
{FORM_ITEM_USE, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA},
|
||||
{FORM_ITEM_USE_DAY, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA},
|
||||
{FORM_CHANGE_END},
|
||||
};
|
||||
|
||||
|
|
|
@ -5171,7 +5171,9 @@ bool32 TryItemUseFormChange(u8 taskId, TaskFunc task)
|
|||
{
|
||||
struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_USE, gSpecialVar_ItemId);
|
||||
u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_USE_DAY, gSpecialVar_ItemId);
|
||||
if (targetSpecies == SPECIES_NONE)
|
||||
targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_USE, gSpecialVar_ItemId);
|
||||
if (targetSpecies != SPECIES_NONE)
|
||||
{
|
||||
gPartyMenuUseExitCallback = TRUE;
|
||||
|
|
|
@ -8056,16 +8056,20 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg)
|
|||
u16 targetSpecies = SPECIES_NONE;
|
||||
u16 originalSpecies = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
const struct FormChange *formChanges = gFormChangeTablePointers[originalSpecies];
|
||||
|
||||
if (formChanges == NULL)
|
||||
return SPECIES_NONE;
|
||||
|
||||
for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) {
|
||||
if (method == formChanges[i].method) {
|
||||
for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++)
|
||||
{
|
||||
if (method == formChanges[i].method)
|
||||
{
|
||||
u32 ability = GetAbilityBySpecies(originalSpecies, GetMonData(mon, MON_DATA_ABILITY_NUM, NULL));
|
||||
switch (method)
|
||||
{
|
||||
case FORM_ITEM_HOLD:
|
||||
if (GetMonData(mon, MON_DATA_HELD_ITEM, NULL) == formChanges[i].param1 && (ability == formChanges[i].param2 || formChanges[i].param2 == ABILITY_NONE))
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
case FORM_ITEM_USE:
|
||||
if (arg == formChanges[i].param1 && (ability == formChanges[i].param2 || formChanges[i].param2 == ABILITY_NONE))
|
||||
|
@ -8075,6 +8079,12 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg)
|
|||
if (MonKnowsMove(mon, formChanges[i].param1) != formChanges[i].param2)
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
case FORM_ITEM_USE_DAY:
|
||||
RtcCalcLocalTime();
|
||||
if (arg == formChanges[i].param1 && (ability == formChanges[i].param2 || formChanges[i].param2 == ABILITY_NONE)
|
||||
&& (gLocalTime.hours >= 12 && gLocalTime.hours < 24))
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
default:
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue