diff --git a/src/deh_tables.c b/src/deh_tables.c index 7266303da..b7aaf262d 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -369,8 +369,8 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_XDEATHSTATE", "S_RAISESTATE", - // Thok "S_THOK", + "S_SHADOW", // SRB2kart Frames "S_KART_STILL", @@ -4705,6 +4705,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_UNKNOWN", "MT_THOK", // Thok! mobj + "MT_SHADOW", // Linkdraw Shadow (for invisible objects) "MT_PLAYER", "MT_KART_LEFTOVER", "MT_KART_TIRE", diff --git a/src/info.c b/src/info.c index 00463602f..8680bc9c7 100644 --- a/src/info.c +++ b/src/info.c @@ -28,6 +28,7 @@ char sprnames[NUMSPRITES + 1][5] = { "NULL", // invisible object + "NONE", // invisible but still rendered "UNKN", "THOK", // Thok! mobj @@ -850,6 +851,7 @@ state_t states[NUMSTATES] = {SPR_UNKN, FF_FULLBRIGHT, -1, {A_InfoState}, 6, 0, S_NULL}, // S_RAISESTATE {SPR_THOK, FF_TRANS50, 8, {NULL}, 0, 0, S_NULL}, // S_THOK + {SPR_NONE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHADOW // Player {SPR_PLAY, SPR2_STIN, 1, {NULL}, 0, 0, S_KART_STILL}, // S_KART_STILL @@ -5364,6 +5366,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_SHADOW + -1, // doomednum + S_SHADOW, // 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 + 8, // speed + 32*FRACUNIT, // radius + 64*FRACUNIT, // height + -1, // display offset + 16, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY|MF_DONTENCOREMAP, // flags + S_NULL // raisestate + }, + { // MT_PLAYER -1, // doomednum S_KART_STILL, // spawnstate diff --git a/src/info.h b/src/info.h index a7e869bd9..e3257fdeb 100644 --- a/src/info.h +++ b/src/info.h @@ -576,6 +576,7 @@ extern boolean actionsoverridden[NUMACTIONS]; typedef enum sprite { SPR_NULL, // invisible object + SPR_NONE, // invisible but still rendered SPR_UNKN, SPR_THOK, // Thok! mobj @@ -1351,8 +1352,8 @@ typedef enum state S_XDEATHSTATE, S_RAISESTATE, - // Thok S_THOK, + S_SHADOW, S_KART_STILL, S_KART_STILL_L, @@ -5723,6 +5724,7 @@ typedef enum mobj_type MT_UNKNOWN, MT_THOK, // Thok! mobj + MT_SHADOW, // Linkdraw Shadow (for invisible objects) MT_PLAYER, MT_KART_LEFTOVER, MT_KART_TIRE, diff --git a/src/p_mobj.c b/src/p_mobj.c index 0dc5ec131..05d802b02 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -5307,6 +5307,15 @@ static void P_MobjSceneryThink(mobj_t *mobj) switch (mobj->type) { + case MT_SHADOW: + if (mobj->tracer) + { + P_MoveOrigin(mobj, + mobj->tracer->x, + mobj->tracer->y, + mobj->tracer->z); + } + break; case MT_BOSSJUNK: mobj->renderflags ^= RF_DONTDRAW; break;