diff --git a/src/dehacked.c b/src/dehacked.c index c546f44313e285940491d8ba4becfe671815d580..f70615af62b99000d96f045f41676a80b701fbdd 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -7517,6 +7517,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_DUSTLAYER", "MT_ARIDDUST", "MT_MINECART", + "MT_MINECARTSEG", "MT_MINECARTSPAWNER", "MT_MINECARTEND", "MT_MINECARTENDSOLID", diff --git a/src/info.c b/src/info.c index 93d6f1b64d107fb1e27e8b0734d7d7bcd09f032e..09d2c5184f7ffb6d08e3dd3bc9321601566023f0 100644 --- a/src/info.c +++ b/src/info.c @@ -11881,6 +11881,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = MT_MINECARTSIDEMARK // raisestate }, + { // MT_MINECARTSEG + -1, // doomednum + S_INVISIBLE, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 0, // 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 + FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIP, // flags + S_NULL // raisestate + }, + { // MT_MINECARTSPAWNER 1219, // doomednum S_INVISIBLE, // spawnstate diff --git a/src/info.h b/src/info.h index 717f659c93234fbb49dcb8af996ecd061ea47664..3e4243bdb43eff29f4976ba0cdbf707dc662262e 100644 --- a/src/info.h +++ b/src/info.h @@ -4302,6 +4302,7 @@ typedef enum mobj_type MT_DUSTLAYER, MT_ARIDDUST, MT_MINECART, + MT_MINECARTSEG, MT_MINECARTSPAWNER, MT_MINECARTEND, MT_MINECARTENDSOLID, diff --git a/src/p_mobj.c b/src/p_mobj.c index 776495ccd67e0cc10baaedeed0f0385ce4b01162..bfec5af7874a0403d5f2d31da38b0ef9c5c0bd8f 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6740,7 +6740,7 @@ static void P_SpawnMinecartSegments(mobj_t *mobj, boolean mode) for (i = 0; i < 4; i++) { - seg = P_SpawnMobj(x, y, z, MT_PARTICLE); + seg = P_SpawnMobj(x, y, z, MT_MINECARTSEG); P_SetMobjState(seg, (statenum_t)(S_MINECARTSEG_FRONT + i)); if (i >= 2) seg->extravalue1 = (i == 2) ? -18 : 18; @@ -8640,6 +8640,10 @@ void P_MobjThinker(mobj_t *mobj) // Check fuse if (mobj->fuse) { + + if (mobj->type == MT_SNAPPER_HEAD || mobj->type == MT_SNAPPER_LEG || mobj->type == MT_MINECARTSEG) + mobj->flags2 ^= MF2_DONTDRAW; + mobj->fuse--; if (!mobj->fuse) {