- partial floatification of movetransports_r

This commit is contained in:
Christoph Oelckers 2022-08-20 18:46:45 +02:00
parent a00969fbeb
commit b00c8dbaee

View file

@ -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());