Fixed Castform
This commit is contained in:
parent
db5e3342ac
commit
ab6c7a1df0
@ -53,6 +53,7 @@ enum FollowerTransformTypes
|
||||
TRANSFORM_TYPE_NONE,
|
||||
TRANSFORM_TYPE_PERMANENT,
|
||||
TRANSFORM_TYPE_RANDOM_WILD,
|
||||
TRANSFORM_TYPE_WEATHER,
|
||||
};
|
||||
|
||||
#define FIGURE_8_LENGTH 72
|
||||
|
||||
@ -378,6 +378,9 @@ const struct ObjectEventGraphicsInfo gPokemonObjectGraphics[] = {
|
||||
[SPECIES_FEEBAS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Feebas, gDummySpriteAffineAnimTable},
|
||||
[SPECIES_MILOTIC] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Milotic, gDummySpriteAffineAnimTable},
|
||||
[SPECIES_CASTFORM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Castform, gDummySpriteAffineAnimTable},
|
||||
[SPECIES_CASTFORM_SUNNY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_CastformSunny, gDummySpriteAffineAnimTable},
|
||||
[SPECIES_CASTFORM_RAINY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_CastformRainy, gDummySpriteAffineAnimTable},
|
||||
[SPECIES_CASTFORM_SNOWY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_CastformSnowy, gDummySpriteAffineAnimTable},
|
||||
[SPECIES_KECLEON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Kecleon, gDummySpriteAffineAnimTable},
|
||||
[SPECIES_SHUPPET] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Shuppet, gDummySpriteAffineAnimTable},
|
||||
[SPECIES_BANETTE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Banette, gDummySpriteAffineAnimTable},
|
||||
@ -415,10 +418,3 @@ const struct ObjectEventGraphicsInfo gPokemonObjectGraphics[] = {
|
||||
[SPECIES_DEOXYS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Deoxys, gDummySpriteAffineAnimTable},
|
||||
};
|
||||
|
||||
// Normal, sunny, rainy, snowy
|
||||
const struct ObjectEventGraphicsInfo gCastformObjectGraphics[] = {
|
||||
{0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Castform, gDummySpriteAffineAnimTable},
|
||||
{0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_CastformSunny, gDummySpriteAffineAnimTable},
|
||||
{0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_CastformRainy, gDummySpriteAffineAnimTable},
|
||||
{0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_CastformSnowy, gDummySpriteAffineAnimTable},
|
||||
};
|
||||
|
||||
@ -1732,9 +1732,6 @@ static const struct ObjectEventGraphicsInfo * SpeciesToGraphicsInfo(u16 species,
|
||||
form %= NUM_UNOWN_FORMS;
|
||||
graphicsInfo = &gPokemonObjectGraphics[form ? SPECIES_UNOWN_B + form - 1 : species];
|
||||
break;
|
||||
case SPECIES_CASTFORM: // Sunny, rainy, snowy forms stored separately
|
||||
graphicsInfo = &gCastformObjectGraphics[form % NUM_CASTFORM_FORMS];
|
||||
break;
|
||||
default:
|
||||
graphicsInfo = &gPokemonObjectGraphics[species];
|
||||
break;
|
||||
@ -1806,7 +1803,7 @@ static void RefreshFollowerGraphics(struct ObjectEvent *objEvent) {
|
||||
}
|
||||
}
|
||||
|
||||
// Like CastformDataTypeChange, but for overworld weather
|
||||
// Like vanilla's CastformDataTypeChange, but for overworld weather
|
||||
static u8 GetOverworldCastformForm(void) {
|
||||
switch (GetCurrentWeather())
|
||||
{
|
||||
@ -1823,6 +1820,23 @@ static u8 GetOverworldCastformForm(void) {
|
||||
return CASTFORM_NORMAL;
|
||||
}
|
||||
|
||||
static u16 GetOverworldCastformSpecies(void)
|
||||
{
|
||||
switch(GetOverworldCastformForm())
|
||||
{
|
||||
case CASTFORM_FIRE:
|
||||
return SPECIES_CASTFORM_SUNNY;
|
||||
break;
|
||||
case CASTFORM_WATER:
|
||||
return SPECIES_CASTFORM_RAINY;
|
||||
break;
|
||||
case CASTFORM_ICE:
|
||||
return SPECIES_CASTFORM_SNOWY;
|
||||
break;
|
||||
}
|
||||
return SPECIES_CASTFORM;
|
||||
}
|
||||
|
||||
static bool8 GetMonInfo(struct Pokemon * mon, u16 *species, u8 *form, u8 *shiny) {
|
||||
if (!mon) {
|
||||
*species = SPECIES_NONE;
|
||||
@ -1839,7 +1853,7 @@ static bool8 GetMonInfo(struct Pokemon * mon, u16 *species, u8 *form, u8 *shiny)
|
||||
*form = GET_UNOWN_LETTER(mon->box.personality);
|
||||
break;
|
||||
case SPECIES_CASTFORM: // form is based on overworld weather
|
||||
*form = GetOverworldCastformForm();
|
||||
*species = GetOverworldCastformSpecies();
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
@ -4909,13 +4923,15 @@ static bool8 EndFollowerTransformEffect(struct ObjectEvent *objectEvent, struct
|
||||
|
||||
static bool8 TryStartFollowerTransformEffect(struct ObjectEvent *objectEvent, struct Sprite *sprite) {
|
||||
u32 multi;
|
||||
if (OW_SPECIES(objectEvent) == SPECIES_CASTFORM && OW_FORM(objectEvent) != (multi = GetOverworldCastformForm())) {
|
||||
sprite->data[7] = TRANSFORM_TYPE_PERMANENT << 8;
|
||||
objectEvent->graphicsId &= OBJ_EVENT_GFX_SPECIES_MASK;
|
||||
objectEvent->graphicsId |= multi << OBJ_EVENT_GFX_SPECIES_BITS;
|
||||
if (GET_BASE_SPECIES_ID(OW_SPECIES(objectEvent)) == SPECIES_CASTFORM
|
||||
&& OW_SPECIES(objectEvent) != GetOverworldCastformSpecies())
|
||||
{
|
||||
sprite->data[7] = TRANSFORM_TYPE_WEATHER << 8;
|
||||
return TRUE;
|
||||
} else if ((gRngValue >> 16) < 18 && GetLocalWildMon(FALSE)
|
||||
&& (OW_SPECIES(objectEvent) == SPECIES_MEW || OW_SPECIES(objectEvent) == SPECIES_DITTO)) {
|
||||
}
|
||||
else if ((gRngValue >> 16) < 18 && GetLocalWildMon(FALSE)
|
||||
&& (OW_SPECIES(objectEvent) == SPECIES_MEW || OW_SPECIES(objectEvent) == SPECIES_DITTO))
|
||||
{
|
||||
sprite->data[7] = TRANSFORM_TYPE_RANDOM_WILD << 8;
|
||||
PlaySE(SE_M_MINIMIZE);
|
||||
return TRUE;
|
||||
@ -4944,6 +4960,16 @@ static bool8 UpdateFollowerTransformEffect(struct ObjectEvent *objectEvent, stru
|
||||
case TRANSFORM_TYPE_PERMANENT:
|
||||
RefreshFollowerGraphics(objectEvent);
|
||||
break;
|
||||
case TRANSFORM_TYPE_WEATHER:
|
||||
multi = objectEvent->graphicsId;
|
||||
objectEvent->graphicsId = GetOverworldCastformSpecies();
|
||||
if (!objectEvent->graphicsId) {
|
||||
objectEvent->graphicsId = multi;
|
||||
break;
|
||||
}
|
||||
objectEvent->graphicsId += OBJ_EVENT_GFX_MON_BASE;
|
||||
RefreshFollowerGraphics(objectEvent);
|
||||
break;
|
||||
case TRANSFORM_TYPE_RANDOM_WILD:
|
||||
multi = objectEvent->graphicsId;
|
||||
objectEvent->graphicsId = GetLocalWildMon(FALSE);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user