From ae5d5abe245a7e6d7edcc74c8e46e095cb11f9d5 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Mon, 16 Nov 2020 00:51:00 -0500 Subject: [PATCH] Chaos Emeralds now sparkle --- src/dehacked.c | 9 +++++++++ src/info.c | 40 ++++++++++++++++++++++++++++++++++++++-- src/info.h | 10 ++++++++++ src/p_mobj.c | 16 ++++++++++++++++ 4 files changed, 73 insertions(+), 2 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 142a14efc..23359b705 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6273,6 +6273,14 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_CHAOSEMERALD2", "S_CHAOSEMERALD_UNDER", + "S_EMERALDSPARK1", + "S_EMERALDSPARK2", + "S_EMERALDSPARK3", + "S_EMERALDSPARK4", + "S_EMERALDSPARK5", + "S_EMERALDSPARK6", + "S_EMERALDSPARK7", + // Emerald hunt shards "S_SHRD1", "S_SHRD2", @@ -9523,6 +9531,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_BLUEFLAG", // Blue CTF Flag "MT_EMBLEM", "MT_EMERALD", + "MT_EMERALDSPARK", "MT_EMERHUNT", // Emerald Hunt "MT_EMERALDSPAWN", // Emerald spawner w/ delay diff --git a/src/info.c b/src/info.c index 2f9b1faf1..4331e66b0 100644 --- a/src/info.c +++ b/src/info.c @@ -140,6 +140,7 @@ char sprnames[NUMSPRITES + 1][5] = "NSTR", // NiGHTS star "EMBM", // Emblem "EMRC", // Chaos Emeralds + "ESPK", "SHRD", // Emerald Hunt // Interactive Objects @@ -1901,10 +1902,18 @@ state_t states[NUMSTATES] = {SPR_EMBM, 25, -1, {NULL}, 0, 0, S_NULL}, // S_EMBLEM26 // Chaos Emeralds - {SPR_EMRC, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_CHAOSEMERALD2}, // S_CHAOSEMERALD1 + {SPR_EMRC, FF_SEMIBRIGHT, 1, {NULL}, 0, 0, S_CHAOSEMERALD2}, // S_CHAOSEMERALD1 {SPR_EMRC, FF_FULLBRIGHT|FF_TRANSADD, 1, {NULL}, 0, 0, S_CHAOSEMERALD1}, // S_CHAOSEMERALD2 {SPR_EMRC, FF_FULLBRIGHT|1, -1, {NULL}, 1, 0, S_NULL}, // S_CHAOSEMERALD_UNDER + {SPR_ESPK, FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EMERALDSPARK2}, // S_EMERALDSPARK1 + {SPR_ESPK, FF_FULLBRIGHT|1, 3, {NULL}, 0, 0, S_EMERALDSPARK3}, // S_EMERALDSPARK2 + {SPR_ESPK, FF_FULLBRIGHT|2, 3, {NULL}, 0, 0, S_EMERALDSPARK4}, // S_EMERALDSPARK3 + {SPR_ESPK, FF_FULLBRIGHT|3, 3, {NULL}, 0, 0, S_EMERALDSPARK5}, // S_EMERALDSPARK4 + {SPR_ESPK, FF_FULLBRIGHT|4, 3, {NULL}, 0, 0, S_EMERALDSPARK6}, // S_EMERALDSPARK5 + {SPR_ESPK, FF_FULLBRIGHT|5, 3, {NULL}, 0, 0, S_EMERALDSPARK7}, // S_EMERALDSPARK6 + {SPR_ESPK, FF_FULLBRIGHT|6, 3, {NULL}, 0, 0, S_NULL}, // S_EMERALDSPARK7 + // Emerald hunt shards {SPR_SHRD, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHRD1 {SPR_SHRD, 1, -1, {NULL}, 0, 0, S_NULL}, // S_SHRD2 @@ -8248,7 +8257,34 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 16, // mass 0, // damage sfx_None, // activesound - MF_SPECIAL|MF_PICKUPFROMBELOW, // flags + MF_SPECIAL|MF_PICKUPFROMBELOW|MF_DONTENCOREMAP, // flags + S_NULL // raisestate + }, + + { // MT_EMERALDSPARK + -1, // doomednum + S_EMERALDSPARK1,// spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 8*FRACUNIT, // radius + 8*FRACUNIT, // height + 0, // display offset + 16, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_DONTENCOREMAP, // flags S_NULL // raisestate }, diff --git a/src/info.h b/src/info.h index 1bcd03b56..d5946e8e6 100644 --- a/src/info.h +++ b/src/info.h @@ -411,6 +411,7 @@ typedef enum sprite SPR_NSTR, // NiGHTS star SPR_EMBM, // Emblem SPR_EMRC, // Chaos Emeralds + SPR_ESPK, SPR_SHRD, // Emerald Hunt // Interactive Objects @@ -2120,6 +2121,14 @@ typedef enum state S_CHAOSEMERALD2, S_CHAOSEMERALD_UNDER, + S_EMERALDSPARK1, + S_EMERALDSPARK2, + S_EMERALDSPARK3, + S_EMERALDSPARK4, + S_EMERALDSPARK5, + S_EMERALDSPARK6, + S_EMERALDSPARK7, + // Emerald hunt shards S_SHRD1, S_SHRD2, @@ -5410,6 +5419,7 @@ typedef enum mobj_type MT_BLUEFLAG, // Blue CTF Flag MT_EMBLEM, MT_EMERALD, + MT_EMERALDSPARK, MT_EMERHUNT, // Emerald Hunt MT_EMERALDSPAWN, // Emerald spawner w/ delay diff --git a/src/p_mobj.c b/src/p_mobj.c index 3c0df40fe..0b0661a60 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6460,7 +6460,23 @@ static boolean P_MobjRegularThink(mobj_t *mobj) break; case MT_EMERALD: if (mobj->threshold > 0) + { mobj->threshold--; + } + + if (leveltime % 3 == 0) + { + mobj_t *sparkle = P_SpawnMobjFromMobj( + mobj, + P_RandomRange(-48, 48) * FRACUNIT, + P_RandomRange(-48, 48) * FRACUNIT, + P_RandomRange(0, 64) * FRACUNIT, + MT_EMERALDSPARK + ); + + sparkle->color = mobj->color; + sparkle->momz += 8 * mobj->scale * P_MobjFlip(mobj); + } break; case MT_DRIFTEXPLODE: if (!mobj->target || !mobj->target->health)