- Duke: Clean up player/actor accesses in handle_se30().

This commit is contained in:
Mitchell Richters 2023-10-02 20:41:05 +11:00
parent c19ac0a916
commit 3aea097f87

View file

@ -1909,8 +1909,8 @@ void handle_se14(DDukeActor* actor, bool checkstat, PClassActor* RPG)
void handle_se30(DDukeActor *actor)
{
auto sc = actor->sector();
auto Owner = actor->GetOwner();
if (Owner == nullptr)
{
actor->temp_data[3] = !actor->temp_data[3];
@ -1955,43 +1955,49 @@ void handle_se30(DDukeActor *actor)
{
auto vect = actor->spr.Angles.Yaw.ToVector() * actor->vel.X;
if ((sc->floorz - sc->ceilingz) < 108)
if (ud.clipping == 0)
for (int p = connecthead; p >= 0; p = connectpoint2[p])
{
auto psp = getPlayer(p)->GetActor();
if (psp->spr.extra > 0)
{
auto k = getPlayer(p)->cursector;
updatesector(getPlayer(p)->GetActor()->getPosWithOffsetZ(), &k);
if ((k == nullptr && ud.clipping == 0) || (k == actor->sector() && getPlayer(p)->cursector != actor->sector()))
{
getPlayer(p)->GetActor()->spr.pos.XY() = actor->spr.pos.XY();
getPlayer(p)->setCursector(actor->sector());
if (((sc->floorz - sc->ceilingz) < 108) && (ud.clipping == 0))
{
for (int i = connecthead; i >= 0; i = connectpoint2[i])
{
const auto p = getPlayer(i);
const auto pact = p->GetActor();
SetActor(getPlayer(p)->GetActor(), actor->spr.pos);
quickkill(getPlayer(p));
}
if (pact->spr.extra > 0)
{
auto k = p->cursector;
updatesector(pact->getPosWithOffsetZ(), &k);
if ((k == nullptr && ud.clipping == 0) || (k == actor->sector() && p->cursector != actor->sector()))
{
pact->spr.pos.XY() = actor->spr.pos.XY();
p->setCursector(actor->sector());
SetActor(pact, actor->spr.pos);
quickkill(p);
}
}
for (int p = connecthead; p >= 0; p = connectpoint2[p])
}
}
for (int i = connecthead; i >= 0; i = connectpoint2[i])
{
auto psp = getPlayer(p)->GetActor();
if (psp->sector() == actor->sector())
const auto p = getPlayer(i);
const auto pact = p->GetActor();
if (pact->sector() == actor->sector())
{
getPlayer(p)->GetActor()->spr.pos.XY() += vect;
pact->spr.pos.XY() += vect;
if (numplayers > 1)
{
getPlayer(p)->GetActor()->backupvec2();
pact->backupvec2();
}
getPlayer(p)->bobpos += vect;
p->bobpos += vect;
}
if (po[p].os == actor->sector())
if (po[i].os == actor->sector())
{
po[p].opos += vect;
po[i].opos += vect;
}
}
@ -2015,22 +2021,29 @@ void handle_se30(DDukeActor *actor)
if ((sc->floorz - sc->ceilingz) < 108)
{
if (ud.clipping == 0)
for (int p = connecthead; p >= 0; p = connectpoint2[p])
if (getPlayer(p)->GetActor()->spr.extra > 0)
{
for (int i = connecthead; i >= 0; i = connectpoint2[i])
{
const auto p = getPlayer(i);
const auto pact = p->GetActor();
if (pact->spr.extra > 0)
{
auto k = getPlayer(p)->cursector;
updatesector(getPlayer(p)->GetActor()->getPosWithOffsetZ(), &k);
if ((k == nullptr && ud.clipping == 0) || (k == actor->sector() && getPlayer(p)->cursector != actor->sector()))
auto k = p->cursector;
updatesector(pact->getPosWithOffsetZ(), &k);
if ((k == nullptr && ud.clipping == 0) || (k == actor->sector() && p->cursector != actor->sector()))
{
getPlayer(p)->GetActor()->spr.pos.XY() = actor->spr.pos.XY();
getPlayer(p)->GetActor()->backupvec2();
pact->spr.pos.XY() = actor->spr.pos.XY();
pact->backupvec2();
getPlayer(p)->setCursector(actor->sector());
p->setCursector(actor->sector());
SetActor(getPlayer(p)->GetActor(), actor->spr.pos);
quickkill(getPlayer(p));
SetActor(pact, actor->spr.pos);
quickkill(p);
}
}
}
}
if (Owner)
{