From 63f1a968d6f66519323083a777f4ece32bedf887 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 30 Jan 2022 12:25:15 +0100 Subject: [PATCH] - do not update the sector for sector effectors moving themselves. They need to stay in their originally assigned sector forever, or really bad things can happen. If due to some math imprecisions they change their sector, they can screw up the entire map. --- source/games/duke/src/actors.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 56790d9c5b0..022fdb09f3f 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -2914,7 +2914,8 @@ void handle_se14(DDukeActor* actor, bool checkstat, int RPG, int JIBS6) } ms(actor); - SetActor(actor, actor->spr.pos); + // I have no idea why this is here, but the SE's sector must never, *EVER* change, or the map will corrupt. + //SetActor(actor, actor->spr.pos); if ((sc->floorz - sc->ceilingz) < (108 << 8)) { @@ -3078,7 +3079,7 @@ void handle_se30(DDukeActor *actor, int JIBS6) } ms(actor); - SetActor(actor, actor->spr.pos); + //SetActor(actor, actor->spr.pos); if ((sc->floorz - sc->ceilingz) < (108 << 8)) { @@ -3197,7 +3198,7 @@ void handle_se02(DDukeActor* actor) } } ms(actor); - SetActor(actor, actor->spr.pos); + //SetActor(actor, actor->spr.pos); } } @@ -3404,7 +3405,7 @@ void handle_se05(DDukeActor* actor, int FIRELASER) sc->addceilingz(actor->spr.zvel); sector[actor->temp_data[0]].addceilingz(actor->spr.zvel); ms(actor); - SetActor(actor, actor->spr.pos); + //SetActor(actor, actor->spr.pos); } //--------------------------------------------------------------------------- @@ -3561,7 +3562,7 @@ void handle_se11(DDukeActor *actor) actor->temp_data[2] += k; actor->temp_data[4] += k; ms(actor); - SetActor(actor, actor->spr.pos); + //SetActor(actor, actor->spr.pos); for(auto& wal : wallsofsector(sc)) { @@ -3574,7 +3575,7 @@ void handle_se11(DDukeActor *actor) actor->temp_data[2] -= k; actor->temp_data[4] -= k; ms(actor); - SetActor(actor, actor->spr.pos); + //SetActor(actor, actor->spr.pos); return; } } @@ -3585,7 +3586,7 @@ void handle_se11(DDukeActor *actor) actor->temp_data[4] = 0; actor->temp_data[2] &= 0xffffff00; ms(actor); - SetActor(actor, actor->spr.pos); + //SetActor(actor, actor->spr.pos); } } } @@ -3775,7 +3776,7 @@ void handle_se15(DDukeActor* actor) } ms(actor); - SetActor(actor, actor->spr.pos); + //SetActor(actor, actor->spr.pos); } } @@ -3819,7 +3820,7 @@ void handle_se16(DDukeActor* actor, int REACTOR, int REACTOR2) else sc->addceilingz(-512); ms(actor); - SetActor(actor, actor->spr.pos); + //SetActor(actor, actor->spr.pos); } //--------------------------------------------------------------------------- @@ -4313,7 +4314,7 @@ void handle_se26(DDukeActor* actor) } ms(actor); - SetActor(actor, actor->spr.pos); + //SetActor(actor, actor->spr.pos); } //---------------------------------------------------------------------------