From c4dd88bbaee7b4eaac593f044d03b7f3b29dd332 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sun, 15 Mar 2020 21:59:22 -0400 Subject: [PATCH] Turn sparkles that warn you when you're about to hit a new drift spark! --- src/dehacked.c | 6 ++++++ src/info.c | 13 +++++++++---- src/info.h | 7 +++++++ src/k_kart.c | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 4 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index efb39dd7d..061eb9388 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6359,6 +6359,12 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_DRIFTDUST3", "S_DRIFTDUST4", + // Drift Sparkles + "S_DRIFTWARNSPARK1", + "S_DRIFTWARNSPARK2", + "S_DRIFTWARNSPARK3", + "S_DRIFTWARNSPARK4", + // Fast lines "S_FASTLINE1", "S_FASTLINE2", diff --git a/src/info.c b/src/info.c index 6803e8a33..df8f31061 100644 --- a/src/info.c +++ b/src/info.c @@ -57,10 +57,10 @@ char sprnames[NUMSPRITES + 1][5] = "SRBL","SRBM","SRBN","SRBO", //SRB2kart Sprites "RNDM","RPOP","SGNS","FAST","DSHR","BOST","BOSM","KFRE","KINV","KINF", - "WIPD","DRIF","BDRF","DUST","RSHE","FITM","BANA","ORBN","JAWZ","SSMN", - "KRBM","BHOG","BHBM","SPBM","THNS","SINK","SITR","KBLN","DEZL","POKE", - "AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO","CRAB", - "BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB","ARRO","ITEM", + "WIPD","DRIF","BDRF","DUST","DRWS","RSHE","FITM","BANA","ORBN","JAWZ", + "SSMN","KRBM","BHOG","BHBM","SPBM","THNS","SINK","SITR","KBLN","DEZL", + "POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO", + "CRAB","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB","ARRO","ITEM", "ITMO","ITMI","ITMN","WANT","PBOM","HIT1","HIT2","HIT3","RETI","AIDU", "KSPK","LZI1","LZI2","KLIT","FZSM","FZBM","FPRT","SBUS","MARB","FUFO", "RUST","BLON","VAPE","HTZA","HTZB","SGVA","SGVB","SGVC","PGTR","PGF1", @@ -2597,6 +2597,11 @@ state_t states[NUMSTATES] = {SPR_DUST, FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTDUST4}, // S_DRIFTDUST3 {SPR_DUST, FF_TRANS20|3, 3, {NULL}, 0, 0, S_NULL}, // S_DRIFTDUST4 + {SPR_DRWS, FF_FULLBRIGHT|0, 3, {NULL}, 0, 0, S_DRIFTWARNSPARK2}, // S_DRIFTWARNSPARK1 + {SPR_DRWS, FF_FULLBRIGHT|1, 3, {NULL}, 0, 0, S_DRIFTWARNSPARK3}, // S_DRIFTWARNSPARK2 + {SPR_DRWS, FF_FULLBRIGHT|FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTWARNSPARK4}, // S_DRIFTWARNSPARK3 + {SPR_DRWS, FF_FULLBRIGHT|FF_TRANS20|3, 3, {NULL}, 0, 0, S_NULL}, // S_DRIFTWARNSPARK4 + {SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_FASTLINE2}, // S_FASTLINE1 {SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_FASTLINE3}, // S_FASTLINE2 {SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_FASTLINE4}, // S_FASTLINE3 diff --git a/src/info.h b/src/info.h index 50887e93f..78902d297 100644 --- a/src/info.h +++ b/src/info.h @@ -608,6 +608,7 @@ typedef enum sprite SPR_DRIF, // Drift Sparks SPR_BDRF, // Brake drift sparks SPR_DUST, // Drift Dust + SPR_DRWS, // Drift dust sparks // Kart Items SPR_RSHE, // Rocket sneaker @@ -3248,6 +3249,12 @@ typedef enum state S_DRIFTDUST3, S_DRIFTDUST4, + // Drift Sparkles + S_DRIFTWARNSPARK1, + S_DRIFTWARNSPARK2, + S_DRIFTWARNSPARK3, + S_DRIFTWARNSPARK4, + // Fast lines S_FASTLINE1, S_FASTLINE2, diff --git a/src/k_kart.c b/src/k_kart.c index 3a62be45a..3b30b1c3f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3587,6 +3587,47 @@ void K_DriftDustHandling(mobj_t *spawner) S_StartSound(spawner, sfx_screec); K_MatchGenericExtraFlags(dust, spawner); + + // Sparkle-y warning for when you're about to change drift sparks! + if (spawner->player && spawner->player->kartstuff[k_drift]) + { + INT32 driftval = K_GetKartDriftSparkValue(spawner->player); + INT32 warntime = driftval/3; + INT32 dc = spawner->player->kartstuff[k_driftcharge]; + UINT8 c = SKINCOLOR_NONE; + boolean rainbow = false; + + if (dc < 0) + { + c = SKINCOLOR_GOLD; + } + else if (dc >= (driftval - warntime)) + { + if (dc >= ((2*driftval) - warntime)) + { + if (dc >= ((4*driftval) - warntime)) + { + c = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); + rainbow = true; + } + else + { + c = SKINCOLOR_SAPPHIRE; + } + } + else + { + c = SKINCOLOR_KETCHUP; + } + } + + if (c != SKINCOLOR_NONE) + { + P_SetMobjState(dust, S_DRIFTWARNSPARK1); + dust->color = c; + dust->colorized = rainbow; + } + } } }