From 11735c296350fe13ec55ecee832051a19e3152f0 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 11 Sep 2022 22:28:05 +0200 Subject: [PATCH] - floatified handle_se13. --- source/games/duke/src/actors.cpp | 33 ++++++++++++++++---------------- source/games/duke/src/spawn.cpp | 12 ++++++------ 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 432a5f2bc..f9f8cd2a2 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -3619,7 +3619,7 @@ void handle_se12(DDukeActor *actor, int planeonly) //--------------------------------------------------------------------------- // -// +// explosive // //--------------------------------------------------------------------------- @@ -3628,31 +3628,32 @@ void handle_se13(DDukeActor* actor) auto sc = actor->sector(); if (actor->temp_data[2]) { - int j = (actor->spr.yint << 5) | 1; + double amt = ((actor->spr.yint << 5) | 1) * zmaptoworld; - if (actor->spr.angle == DAngle90) + if (actor->spr.intangle == 512) { if (actor->spriteextra) { - if (abs(actor->temp_data[0] - sc->int_ceilingz()) >= j) - sc->add_int_ceilingz(Sgn(actor->temp_data[0] - sc->int_ceilingz()) * j); - else sc->set_int_ceilingz(actor->temp_data[0]); + if (abs(actor->temp_pos.Y - sc->ceilingz) >= amt) + sc->addceilingz(Sgn(actor->temp_pos.Y - sc->ceilingz) * amt); + else sc->setceilingz(actor->temp_pos.Y); } else { - if (abs(actor->temp_data[1] - sc->int_floorz()) >= j) - sc->add_int_floorz(Sgn(actor->temp_data[1] - sc->int_floorz()) * j); - else sc->set_int_floorz(actor->temp_data[1]); + if (abs(actor->temp_pos.Z - sc->floorz) >= amt) + sc->addfloorz(Sgn(actor->temp_pos.Z - sc->floorz) * amt); + else sc->setfloorz(actor->temp_pos.Z); } } else { - if (abs(actor->temp_data[1] - sc->int_floorz()) >= j) - sc->add_int_floorz(Sgn(actor->temp_data[1] - sc->int_floorz()) * j); - else sc->set_int_floorz(actor->temp_data[1]); - if (abs(actor->temp_data[0] - sc->int_ceilingz()) >= j) - sc->add_int_ceilingz(Sgn(actor->temp_data[0] - sc->int_ceilingz()) * j); - sc->set_int_ceilingz(actor->temp_data[0]); + if (abs(actor->temp_pos.Z - sc->floorz) >= amt) + sc->addfloorz(Sgn(actor->temp_pos.Z - sc->floorz) * amt); + else sc->setfloorz(actor->temp_pos.Z); + + if (abs(actor->temp_pos.Y - sc->ceilingz) >= amt) + sc->addceilingz(Sgn(actor->temp_pos.Y - sc->ceilingz) * amt); + sc->setceilingz(actor->temp_pos.Y); } if (actor->temp_data[3] == 1) @@ -3685,7 +3686,7 @@ void handle_se13(DDukeActor* actor) } - if (actor->temp_data[2] == 4 && actor->int_ang() != 512) + if (actor->temp_data[2] == 4 && actor->spr.angle != DAngle90) for (int x = 0; x < 7; x++) RANDOMSCRAP(actor); } diff --git a/source/games/duke/src/spawn.cpp b/source/games/duke/src/spawn.cpp index 09c15e30a..2ae921c6b 100644 --- a/source/games/duke/src/spawn.cpp +++ b/source/games/duke/src/spawn.cpp @@ -694,13 +694,13 @@ void spawneffector(DDukeActor* actor, TArray* actors) case SE_13_EXPLOSIVE: { - actor->temp_data[0] = sectp->int_ceilingz(); - actor->temp_data[1] = sectp->int_floorz(); + actor->temp_pos.Y = sectp->ceilingz; + actor->temp_pos.Z = sectp->floorz; - bool ceiling = (abs(actor->temp_data[0] - actor->int_pos().Z) < abs(actor->temp_data[1] - actor->int_pos().Z)); + bool ceiling = (abs(sectp->ceilingz - actor->spr.pos.Z) < abs(sectp->floorz - actor->spr.pos.Z)); actor->spriteextra = ceiling; - if (actor->spr.angle == DAngle90) + if (actor->spr.intangle == 512) { if (ceiling) sectp->setceilingz(actor->spr.pos.Z); @@ -718,7 +718,7 @@ void spawneffector(DDukeActor* actor, TArray* actors) sectp->ceilingstat ^= CSTAT_SECTOR_SKY; actor->temp_data[3] = 1; - if (!ceiling && actor->spr.angle == DAngle90) + if (!ceiling && actor->spr.intangle == 512) { sectp->ceilingstat ^= CSTAT_SECTOR_SKY; actor->temp_data[3] = 0; @@ -727,7 +727,7 @@ void spawneffector(DDukeActor* actor, TArray* actors) sectp->ceilingshade = sectp->floorshade; - if (actor->spr.angle == DAngle90) + if (actor->spr.intangle == 512) { for (auto& wl : wallsofsector(sectp)) {