diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index f65addd26..462cec981 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -1399,7 +1399,8 @@ void movetransports_r(void) { uint8_t warpdir = 0, warpspriteto; int k, p, sectlotag; - int ll2 = 0, ll, onfloorz; + int onfloorz; + double ll, ll2 = 0; Collision coll; //Transporters @@ -1579,7 +1580,7 @@ void movetransports_r(void) case STAT_MISC: case STAT_DUMMYPLAYER: - ll = abs(act2->spr.zvel); + ll = abs(act2->spr.zvel) * zinttoworld; if (isRRRA()) { if (act2->spr.zvel >= 0) @@ -1590,38 +1591,38 @@ void movetransports_r(void) { warpspriteto = 0; - if (ll && sectlotag == ST_2_UNDERWATER && act2->int_pos().Z < (sectp->int_ceilingz() + ll)) + if (ll && sectlotag == ST_2_UNDERWATER && act2->spr.pos.Z < (sectp->ceilingz + ll)) warpspriteto = 1; - if (ll && sectlotag == ST_1_ABOVE_WATER && act2->int_pos().Z > (sectp->int_floorz() - ll)) + if (ll && sectlotag == ST_1_ABOVE_WATER && act2->spr.pos.Z > (sectp->floorz - ll)) if (!isRRRA() || (act2->spr.picnum != CHEERBOAT && act2->spr.picnum != HULKBOAT && act2->spr.picnum != MINIONBOAT)) warpspriteto = 1; if (isRRRA()) { - if (ll && sectlotag == 161 && act2->int_pos().Z < (sectp->int_ceilingz() + ll) && warpdir == 1) + if (ll && sectlotag == 161 && act2->spr.pos.Z < (sectp->ceilingz + ll) && warpdir == 1) { warpspriteto = 1; - ll2 = ll - abs(act2->int_pos().Z - sectp->int_ceilingz()); + ll2 = ll - abs(act2->spr.pos.Z - sectp->ceilingz); } - else if (sectlotag == 161 && act2->int_pos().Z < (sectp->int_ceilingz() + 1000) && warpdir == 1) + else if (sectlotag == 161 && act2->spr.pos.Z < (sectp->ceilingz + 3.90625) && warpdir == 1) { warpspriteto = 1; - ll2 = 1; + ll2 = zmaptoworld; } - if (ll && sectlotag == 160 && act2->int_pos().Z > (sectp->int_floorz() - ll) && warpdir == 2) + if (ll && sectlotag == 160 && act2->spr.pos.Z > (sectp->floorz - ll) && warpdir == 2) { warpspriteto = 1; - ll2 = ll - abs(sectp->int_floorz() - act2->int_pos().Z); + ll2 = ll - abs(sectp->floorz - act2->spr.pos.Z); } - else if (sectlotag == 160 && act2->int_pos().Z > (sectp->int_floorz() - 1000) && warpdir == 2) + else if (sectlotag == 160 && act2->spr.pos.Z > (sectp->floorz - 3.90625) && warpdir == 2) { warpspriteto = 1; - ll2 = 1; + ll2 = zmaptoworld; } } - if (sectlotag == 0 && (onfloorz || abs(act2->int_pos().Z - act->int_pos().Z) < 4096)) + if (sectlotag == 0 && (onfloorz || abs(act2->spr.pos.Z - act->spr.pos.Z) < 16)) { if (Owner->GetOwner() != Owner && onfloorz && act->temp_data[0] > 0 && act2->spr.statnum != 5) { @@ -1670,7 +1671,7 @@ void movetransports_r(void) { if (checkcursectnums(act->sector()) == -1 && checkcursectnums(Owner->sector()) == -1) { - act2->add_int_pos({ (Owner->int_pos().X - act->int_pos().X), (Owner->int_pos().Y - act->int_pos().Y), -(act->int_pos().Z - Owner->sector()->int_floorz()) }); + act2->spr.pos += (Owner->spr.pos - act->spr.pos.XY()).plusZ(-Owner->sector()->floorz); act2->spr.angle = Owner->spr.angle; act2->backupang(); @@ -1692,8 +1693,7 @@ void movetransports_r(void) } else { - act2->spr.pos.X += Owner->spr.pos.X - act->spr.pos.X; - act2->spr.pos.Y += Owner->spr.pos.Y - act->spr.pos.Y; + act2->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY(); act2->spr.pos.Z = Owner->spr.pos.Z + 16; act2->backupz(); @@ -1701,18 +1701,16 @@ void movetransports_r(void) } break; case ST_1_ABOVE_WATER: - act2->spr.pos.X += Owner->spr.pos.X - act->spr.pos.X; - act2->spr.pos.Y += Owner->spr.pos.Y - act->spr.pos.Y; - act2->set_int_z(Owner->sector()->int_ceilingz() + ll); + act2->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY(); + act2->spr.pos.Z = Owner->sector()->ceilingz + ll; act2->backupz(); ChangeActorSect(act2, Owner->sector()); break; case ST_2_UNDERWATER: - act2->spr.pos.X += Owner->spr.pos.X - act->spr.pos.X; - act2->spr.pos.Y += Owner->spr.pos.Y - act->spr.pos.Y; - act2->set_int_z(Owner->sector()->int_floorz() - ll); + act2->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY(); + act2->spr.pos.Z = Owner->sector()->ceilingz - ll; act2->backupz(); ChangeActorSect(act2, Owner->sector()); @@ -1721,9 +1719,8 @@ void movetransports_r(void) case 160: if (!isRRRA()) break; - act2->spr.pos.X += Owner->spr.pos.X - act->spr.pos.X; - act2->spr.pos.Y += Owner->spr.pos.Y - act->spr.pos.Y; - act2->set_int_z(Owner->sector()->int_ceilingz() + ll2); + act2->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY(); + act2->spr.pos.Z = Owner->sector()->ceilingz + ll2; act2->backupz(); ChangeActorSect(act2, Owner->sector()); @@ -1734,8 +1731,8 @@ void movetransports_r(void) break; case 161: if (!isRRRA()) break; - act2->add_int_pos({ (Owner->int_pos().X - act->int_pos().X), (Owner->int_pos().Y - act->int_pos().Y), 0 }); - act2->set_int_z(Owner->sector()->int_floorz() - ll); + act2->spr.pos += Owner->spr.pos.XY() - act->spr.pos.XY(); + act2->spr.pos.Z = Owner->sector()->floorz - ll; act2->backupz(); ChangeActorSect(act2, Owner->sector());