mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'cd-extra-vfx' into 'master'
Extra effects for Prison Egg CD See merge request KartKrew/Kart!2017
This commit is contained in:
commit
6bfa697d7d
8 changed files with 86 additions and 2 deletions
|
|
@ -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_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({
|
||||
{0, "Off"},
|
||||
{1, "On"},
|
||||
|
|
|
|||
|
|
@ -506,6 +506,10 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
|
||||
// Prison Egg Drops
|
||||
"S_PRISONEGGDROP_CD",
|
||||
"S_PRISONEGGDROP_FLAREA1",
|
||||
"S_PRISONEGGDROP_FLAREA2",
|
||||
"S_PRISONEGGDROP_FLAREB1",
|
||||
"S_PRISONEGGDROP_FLAREB2",
|
||||
|
||||
// Bubble Source
|
||||
"S_BUBBLES1",
|
||||
|
|
|
|||
|
|
@ -1013,6 +1013,10 @@ state_t states[NUMSTATES] =
|
|||
|
||||
// Prison Egg Drops
|
||||
{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
|
||||
{SPR_BBLS, 0, 8, {A_BubbleSpawn}, 2048, 0, S_BUBBLES2}, // S_BUBBLES1
|
||||
|
|
|
|||
|
|
@ -1499,6 +1499,10 @@ typedef enum state
|
|||
|
||||
// Prison Egg Drops
|
||||
S_PRISONEGGDROP_CD,
|
||||
S_PRISONEGGDROP_FLAREA1,
|
||||
S_PRISONEGGDROP_FLAREA2,
|
||||
S_PRISONEGGDROP_FLAREB1,
|
||||
S_PRISONEGGDROP_FLAREB2,
|
||||
|
||||
// Bubble Source
|
||||
S_BUBBLES1,
|
||||
|
|
|
|||
26
src/m_cond.c
26
src/m_cond.c
|
|
@ -1019,6 +1019,32 @@ cacheprisoneggpickup:
|
|||
}
|
||||
|
||||
//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)
|
||||
|
|
|
|||
|
|
@ -1198,13 +1198,21 @@ static void P_AddBrokenPrison(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
|||
secretextratime = TICRATE/2;
|
||||
}
|
||||
|
||||
if (
|
||||
|
||||
#ifdef DEVELOP
|
||||
extern consvar_t cv_debugprisoncd;
|
||||
#endif
|
||||
if ((
|
||||
grandprixinfo.gp == true // Bonus Round
|
||||
&& demo.playback == false // Not playback
|
||||
&& netgame == false // game design + makes it easier to implement
|
||||
&& gamedata->thisprisoneggpickup_cached != NULL
|
||||
&& gamedata->prisoneggstothispickup == 0
|
||||
&& gamedata->thisprisoneggpickupgrabbed == false
|
||||
)
|
||||
#ifdef DEVELOP
|
||||
|| (cv_debugprisoncd.value && gamedata->thisprisoneggpickup_cached != NULL)
|
||||
#endif
|
||||
)
|
||||
{
|
||||
// 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)
|
||||
{
|
||||
// Grab attention with a long sound effect.
|
||||
target->hitlag += 56;
|
||||
S_StartSound(target, sfx_s3k85);
|
||||
|
||||
secretpickup->hitlag = target->hitlag;
|
||||
|
||||
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,
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
10
src/p_mobj.c
10
src/p_mobj.c
|
|
@ -7499,6 +7499,10 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
|
||||
mobj->z += P_MobjFlip(mobj);
|
||||
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)
|
||||
|
|
@ -7538,6 +7542,12 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
|
||||
sparkle->color = M_RandomChance(FRACUNIT/2) ? SKINCOLOR_ULTRAMARINE : SKINCOLOR_MAGENTA;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -534,7 +534,7 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"s3k82", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Burst"},
|
||||
{"s3k83", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Collapsing"},
|
||||
{"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"},
|
||||
{"s3k87", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bounce"},
|
||||
{"s3k88", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Metallic squeak"},
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue