Merge branch 'cd-extra-vfx' into 'master'

Extra effects for Prison Egg CD

See merge request KartKrew/Kart!2017
This commit is contained in:
Oni 2024-03-06 01:53:49 +00:00
commit 6bfa697d7d
8 changed files with 86 additions and 2 deletions

View file

@ -873,6 +873,10 @@ consvar_t cv_1pswap = PlayerCheat("1pswap", "1").min_max(1, MAXSPLITSCREENPLAYER
consvar_t cv_debugfinishline = PlayerCheat("debugfinishline", "Off").on_off().description("Highlight finish lines, respawn lines, death pits and instakill planes with high contrast colors"); consvar_t cv_debugfinishline = PlayerCheat("debugfinishline", "Off").on_off().description("Highlight finish lines, respawn lines, death pits and instakill planes with high contrast colors");
consvar_t cv_debughudtracker = PlayerCheat("debughudtracker", "Off").on_off().description("Highlight overlapping HUD tracker blocks"); consvar_t cv_debughudtracker = PlayerCheat("debughudtracker", "Off").on_off().description("Highlight overlapping HUD tracker blocks");
#ifdef DEVELOP
consvar_t cv_debugprisoncd = PlayerCheat("debugprisoncd", "Off").on_off().description("Always drop a CD from breaking Prisons");
#endif
consvar_t cv_debugrank = PlayerCheat("debugrank", "Off").description("Show GP rank state on the HUD; optionally force a rank grade").values({ consvar_t cv_debugrank = PlayerCheat("debugrank", "Off").description("Show GP rank state on the HUD; optionally force a rank grade").values({
{0, "Off"}, {0, "Off"},
{1, "On"}, {1, "On"},

View file

@ -506,6 +506,10 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
// Prison Egg Drops // Prison Egg Drops
"S_PRISONEGGDROP_CD", "S_PRISONEGGDROP_CD",
"S_PRISONEGGDROP_FLAREA1",
"S_PRISONEGGDROP_FLAREA2",
"S_PRISONEGGDROP_FLAREB1",
"S_PRISONEGGDROP_FLAREB2",
// Bubble Source // Bubble Source
"S_BUBBLES1", "S_BUBBLES1",

View file

@ -1013,6 +1013,10 @@ state_t states[NUMSTATES] =
// Prison Egg Drops // Prison Egg Drops
{SPR_ALTM, 0|FF_PAPERSPRITE|FF_SEMIBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_PRISONEGGDROP_CD {SPR_ALTM, 0|FF_PAPERSPRITE|FF_SEMIBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_PRISONEGGDROP_CD
{SPR_LENS, 14|FF_FULLBRIGHT|FF_ADD|FF_TRANS10, 1, {NULL}, 0, 0, S_PRISONEGGDROP_FLAREA2}, // S_PRISONEGGDROP_FLAREA1
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_PRISONEGGDROP_FLAREA1}, // S_PRISONEGGDROP_FLAREA2
{SPR_LENS, 11|FF_FULLBRIGHT|FF_ADD|FF_TRANS10|FF_ANIMATE, 16, {NULL}, 7, 2, S_PRISONEGGDROP_FLAREB2}, // S_PRISONEGGDROP_FLAREB1
{SPR_LENS, 19|FF_FULLBRIGHT|FF_ADD|FF_TRANS10|FF_ANIMATE, 6, {NULL}, 1, 2, S_NULL}, // S_PRISONEGGDROP_FLAREB2
// Bubble Source // Bubble Source
{SPR_BBLS, 0, 8, {A_BubbleSpawn}, 2048, 0, S_BUBBLES2}, // S_BUBBLES1 {SPR_BBLS, 0, 8, {A_BubbleSpawn}, 2048, 0, S_BUBBLES2}, // S_BUBBLES1

View file

@ -1499,6 +1499,10 @@ typedef enum state
// Prison Egg Drops // Prison Egg Drops
S_PRISONEGGDROP_CD, S_PRISONEGGDROP_CD,
S_PRISONEGGDROP_FLAREA1,
S_PRISONEGGDROP_FLAREA2,
S_PRISONEGGDROP_FLAREB1,
S_PRISONEGGDROP_FLAREB2,
// Bubble Source // Bubble Source
S_BUBBLES1, S_BUBBLES1,

View file

@ -1019,6 +1019,32 @@ cacheprisoneggpickup:
} }
//CONS_Printf("thisprisoneggpickup = %u (MAXCONDITIONSETS is %u)\n", gamedata->thisprisoneggpickup, MAXCONDITIONSETS); //CONS_Printf("thisprisoneggpickup = %u (MAXCONDITIONSETS is %u)\n", gamedata->thisprisoneggpickup, MAXCONDITIONSETS);
#ifdef DEVELOP
extern consvar_t cv_debugprisoncd;
// If all drops are collected, just force the first valid one.
if (cv_debugprisoncd.value && gamedata->thisprisoneggpickup_cached == NULL)
{
for (i = 0; gamedata->thisprisoneggpickup_cached == NULL &&
i < gamedata->numprisoneggpickups; i++)
{
c = &conditionSets[gamedata->prisoneggpickups[i]];
if (c->numconditions)
{
for (j = 0; j < c->numconditions; ++j)
{
cn = &c->condition[j];
if (cn->type != UC_PRISONEGGCD)
continue;
gamedata->thisprisoneggpickup = gamedata->prisoneggpickups[i];
gamedata->thisprisoneggpickup_cached = cn;
break;
}
}
}
}
#endif
} }
static void M_PrecacheLevelLocks(void) static void M_PrecacheLevelLocks(void)

View file

@ -1198,13 +1198,21 @@ static void P_AddBrokenPrison(mobj_t *target, mobj_t *inflictor, mobj_t *source)
secretextratime = TICRATE/2; secretextratime = TICRATE/2;
} }
if (
#ifdef DEVELOP
extern consvar_t cv_debugprisoncd;
#endif
if ((
grandprixinfo.gp == true // Bonus Round grandprixinfo.gp == true // Bonus Round
&& demo.playback == false // Not playback && demo.playback == false // Not playback
&& netgame == false // game design + makes it easier to implement && netgame == false // game design + makes it easier to implement
&& gamedata->thisprisoneggpickup_cached != NULL && gamedata->thisprisoneggpickup_cached != NULL
&& gamedata->prisoneggstothispickup == 0 && gamedata->prisoneggstothispickup == 0
&& gamedata->thisprisoneggpickupgrabbed == false && gamedata->thisprisoneggpickupgrabbed == false
)
#ifdef DEVELOP
|| (cv_debugprisoncd.value && gamedata->thisprisoneggpickup_cached != NULL)
#endif
) )
{ {
// Will be 0 for the next level // Will be 0 for the next level
@ -1218,6 +1226,10 @@ static void P_AddBrokenPrison(mobj_t *target, mobj_t *inflictor, mobj_t *source)
if (secretpickup) if (secretpickup)
{ {
// Grab attention with a long sound effect.
target->hitlag += 56;
S_StartSound(target, sfx_s3k85);
secretpickup->hitlag = target->hitlag; secretpickup->hitlag = target->hitlag;
secretpickup->z -= secretpickup->height/2; secretpickup->z -= secretpickup->height/2;
@ -1244,6 +1256,26 @@ static void P_AddBrokenPrison(mobj_t *target, mobj_t *inflictor, mobj_t *source)
secretpickup, secretpickup->angle, secretpickup, secretpickup->angle,
P_ReturnThrustX(secretpickup, launchangle, launchmomentum) P_ReturnThrustX(secretpickup, launchangle, launchmomentum)
); );
mobj_t *flare = P_SpawnMobj(
target->x, target->y,
target->z + target->height/2,
MT_SPARK
);
if (flare)
{
// Will flicker in place until secretpickup exits hitlag.
flare->colorized = true;
flare->renderflags |= RF_ALWAYSONTOP;
P_InstaScale(flare, 4 * flare->scale);
P_SetTarget(&secretpickup->target, flare);
P_SetMobjStateNF(flare, S_PRISONEGGDROP_FLAREA1);
}
// Darken the level for roughly how long it takes until the last sound effect stops playing.
g_darkness.start = leveltime;
g_darkness.end = leveltime + target->hitlag + TICRATE + DARKNESS_FADE_TIME;
} }
} }
} }

View file

@ -7499,6 +7499,10 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
mobj->z += P_MobjFlip(mobj); mobj->z += P_MobjFlip(mobj);
mobj->flags2 |= MF2_AMBUSH; mobj->flags2 |= MF2_AMBUSH;
// Finish flare animation.
if (mobj->target && !P_MobjWasRemoved(mobj->target))
P_SetMobjStateNF(mobj->target, S_PRISONEGGDROP_FLAREB1);
} }
if (teststate == S_PRISONEGGDROP_CD) if (teststate == S_PRISONEGGDROP_CD)
@ -7538,6 +7542,12 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
sparkle->color = M_RandomChance(FRACUNIT/2) ? SKINCOLOR_ULTRAMARINE : SKINCOLOR_MAGENTA; sparkle->color = M_RandomChance(FRACUNIT/2) ? SKINCOLOR_ULTRAMARINE : SKINCOLOR_MAGENTA;
sparkle->momz += 8 * mobj->scale * P_MobjFlip(mobj); sparkle->momz += 8 * mobj->scale * P_MobjFlip(mobj);
sparkle->scale = 3 * sparkle->scale;
sparkle->scalespeed = abs(sparkle->scale - sparkle->destscale) / 16;
// Colorize flare.
if (mobj->target && !P_MobjWasRemoved(mobj->target))
mobj->target->color = sparkle->color;
} }
} }
} }

View file

@ -534,7 +534,7 @@ sfxinfo_t S_sfx[NUMSFX] =
{"s3k82", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Burst"}, {"s3k82", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Burst"},
{"s3k83", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Collapsing"}, {"s3k83", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Collapsing"},
{"s3k84", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Powering up"}, {"s3k84", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Powering up"},
{"s3k85", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Powering down"}, {"s3k85", false, 64, 24, -1, NULL, 0, -1, -1, LUMPERROR, "Powering down"},
{"s3k86", false, 128, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Alarm"}, {"s3k86", false, 128, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Alarm"},
{"s3k87", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bounce"}, {"s3k87", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bounce"},
{"s3k88", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Metallic squeak"}, {"s3k88", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Metallic squeak"},