diff --git a/src/info.c b/src/info.c index b23860213..bf2329272 100644 --- a/src/info.c +++ b/src/info.c @@ -31041,7 +31041,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 0, // mass 0, // damage sfx_None, // activesound - MF_NOGRAVITY|MF_NOCLIP|MF_DONTENCOREMAP, // flags + MF_SCENERY|MF_NOGRAVITY|MF_NOCLIP|MF_DONTENCOREMAP, // flags S_NULL // raisestate }, diff --git a/src/objects/battle-ufo.cpp b/src/objects/battle-ufo.cpp index a99617bab..5c3f34148 100644 --- a/src/objects/battle-ufo.cpp +++ b/src/objects/battle-ufo.cpp @@ -247,9 +247,4 @@ INT32 Obj_RandomBattleUFOSpawnerID(void) void Obj_BattleUFOBeamThink(mobj_t *beam) { P_SetObjectMomZ(beam, beam->info->speed, true); - - if (P_IsObjectOnGround(beam)) - { - P_RemoveMobj(beam); - } } diff --git a/src/p_map.c b/src/p_map.c index ca91cfbe2..fa8fa8b0d 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -785,6 +785,11 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing) return BMIT_CONTINUE; // overhead } + if (tm.thing->z + tm.thing->height < thing->floorz) + { + return BMIT_CONTINUE; // underneath + } + if (!tm.thing->player || !tm.thing->player->fastfall) { fixed_t tractorHeight = 211*mapobjectscale; diff --git a/src/p_mobj.c b/src/p_mobj.c index 689970281..0fc6d7552 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3167,6 +3167,14 @@ boolean P_SceneryZMovement(mobj_t *mo) return false; } break; + case MT_BATTLEUFO_BEAM: + Obj_BattleUFOBeamThink(mo); + if (mo->momz <= 0 && mo->z + mo->momz <= mo->floorz) + { + P_RemoveMobj(mo); + return false; + } + break; default: break; } @@ -9013,11 +9021,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj) Obj_BattleUFOLegThink(mobj); break; } - case MT_BATTLEUFO_BEAM: - { - Obj_BattleUFOBeamThink(mobj); - break; - } case MT_ROCKETSNEAKER: if (!mobj->target || !mobj->target->health) {