mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Fix these godforsaken rideroids
This commit is contained in:
parent
a710237fde
commit
32620fbb4f
3 changed files with 61 additions and 47 deletions
|
|
@ -725,9 +725,9 @@ struct player_t
|
||||||
//////////////
|
//////////////
|
||||||
boolean rideroid; // on rideroid y/n
|
boolean rideroid; // on rideroid y/n
|
||||||
boolean rdnodepull; // being pulled by rideroid node. mo target is set to the node while this is true.
|
boolean rdnodepull; // being pulled by rideroid node. mo target is set to the node while this is true.
|
||||||
angle_t rideroidangle; // angle the rideroid is going at. This doesn't change once we're on it.
|
INT32 rideroidangle; // angle the rideroid is going at. This doesn't change once we're on it. INT32 because the code was originally written in lua and fuckshit happens with angle_t.
|
||||||
fixed_t rideroidspeed; // speed the rideroid is to be moving at.
|
fixed_t rideroidspeed; // speed the rideroid is to be moving at.
|
||||||
fixed_t rideroidrollangle; // rollangle while turning
|
INT32 rideroidrollangle; // rollangle while turning
|
||||||
fixed_t rdaddmomx; // some speed variables to smoothe things out without fighting with the regular momentum system.
|
fixed_t rdaddmomx; // some speed variables to smoothe things out without fighting with the regular momentum system.
|
||||||
fixed_t rdaddmomy;
|
fixed_t rdaddmomy;
|
||||||
fixed_t rdaddmomz;
|
fixed_t rdaddmomz;
|
||||||
|
|
|
||||||
|
|
@ -307,34 +307,34 @@ void Obj_RideroidThink(mobj_t *mo)
|
||||||
// now actual movement:
|
// now actual movement:
|
||||||
|
|
||||||
// first, do the movement for this frame
|
// first, do the movement for this frame
|
||||||
P_InstaThrust(pmo, mo->angle, p->rideroidspeed*mapobjectscale);
|
P_InstaThrust(pmo, (angle_t)p->rideroidangle, p->rideroidspeed*mapobjectscale);
|
||||||
|
basemomx = p->mo->momx;
|
||||||
|
basemomy = p->mo->momy;
|
||||||
|
|
||||||
pmo->momx += p->rdaddmomx;
|
pmo->momx += p->rdaddmomx;
|
||||||
pmo->momy += p->rdaddmomy;
|
pmo->momy += p->rdaddmomy;
|
||||||
pmo->momz += p->rdaddmomz;
|
pmo->momz += p->rdaddmomz;
|
||||||
pmo->angle = mo->angle;
|
pmo->angle = (angle_t)p->rideroidangle;
|
||||||
p->drawangle = mo->angle;
|
p->drawangle = (angle_t)p->rideroidangle;
|
||||||
P_SetPlayerAngle(pmo->player, mo->angle);
|
P_SetPlayerAngle(pmo->player, (angle_t)p->rideroidangle);
|
||||||
pmo->rollangle = p->rideroidrollangle;
|
pmo->rollangle = p->rideroidrollangle;
|
||||||
mo->rollangle = p->rideroidrollangle;
|
mo->rollangle = p->rideroidrollangle;
|
||||||
pmo->pitch = 0;
|
pmo->pitch = 0;
|
||||||
|
|
||||||
// update the rideroid object (me) to be below the target player
|
// update the rideroid object (me) to be below the target player
|
||||||
Obj_updateRideroidPos(mo);
|
Obj_updateRideroidPos(mo);
|
||||||
|
|
||||||
|
|
||||||
// now compute all the shit for the *next* frame!
|
|
||||||
basemomx = p->rideroidspeed*FINECOSINE(mo->angle >> ANGLETOFINESHIFT);
|
|
||||||
basemomy = p->rideroidspeed*FINESINE(mo->angle >> ANGLETOFINESHIFT);
|
|
||||||
|
|
||||||
// turning left/right
|
// turning left/right
|
||||||
if (p->cmd.turning)
|
if (p->cmd.turning)
|
||||||
{
|
{
|
||||||
fixed_t savemomx = pmo->momx;
|
fixed_t savemomx = pmo->momx;
|
||||||
fixed_t savemomy = pmo->momy;
|
fixed_t savemomy = pmo->momy;
|
||||||
UINT8 dir = 0;
|
SINT8 dir = 0;
|
||||||
|
INT32 a;
|
||||||
|
|
||||||
if (p->cmd.turning < -400)
|
if (p->cmd.turning < -400)
|
||||||
{
|
{
|
||||||
|
a = (INT32)(mo->angle) - ANG1*90;
|
||||||
P_Thrust(pmo, mo->angle - ANGLE_90, 2*mapobjectscale);
|
P_Thrust(pmo, mo->angle - ANGLE_90, 2*mapobjectscale);
|
||||||
p->rideroidrollangle -= ANG1*3;
|
p->rideroidrollangle -= ANG1*3;
|
||||||
|
|
||||||
|
|
@ -346,6 +346,7 @@ void Obj_RideroidThink(mobj_t *mo)
|
||||||
}
|
}
|
||||||
else if (p->cmd.turning > 400)
|
else if (p->cmd.turning > 400)
|
||||||
{
|
{
|
||||||
|
a = (INT32)(mo->angle) + ANG1*90;
|
||||||
P_Thrust(pmo, mo->angle + ANGLE_90, 2*mapobjectscale);
|
P_Thrust(pmo, mo->angle + ANGLE_90, 2*mapobjectscale);
|
||||||
p->rideroidrollangle += ANG1*3;
|
p->rideroidrollangle += ANG1*3;
|
||||||
|
|
||||||
|
|
@ -360,38 +361,51 @@ void Obj_RideroidThink(mobj_t *mo)
|
||||||
p->rideroidspeed -= 1;
|
p->rideroidspeed -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// save the added momentum
|
if (dir != 0)
|
||||||
p->rdaddmomx = pmo->momx - basemomx;
|
{
|
||||||
p->rdaddmomy = pmo->momy - basemomy;
|
|
||||||
|
// save the added momentum
|
||||||
/*CONS_Printf("CURR: %d, %d\n", pmo->momx/mapobjectscale, pmo->momy/mapobjectscale);
|
p->rdaddmomx = pmo->momx - basemomx;
|
||||||
CONS_Printf("BASE: %d, %d\n", basemomx/mapobjectscale, basemomy/mapobjectscale);
|
p->rdaddmomy = pmo->momy - basemomy;
|
||||||
CONS_Printf("ADD: %d, %d\n", p->rdaddmomx/mapobjectscale, p->rdaddmomy/mapobjectscale);*/
|
|
||||||
|
|
||||||
// find out how much addmomx and addmomy we can actually get.
|
|
||||||
// we do this by misusing P_Thrust to calc our values then immediately cancelling it.
|
|
||||||
basemomx = pmo->momx;
|
|
||||||
basemomy = pmo->momy;
|
|
||||||
|
|
||||||
if (mo->angle > ANGLE_90 && mo->angle < ANGLE_270)
|
|
||||||
P_Thrust(pmo, mo->angle - ANGLE_90, RIDEROIDMAXADD*6*mapobjectscale);
|
|
||||||
else
|
|
||||||
P_Thrust(pmo, mo->angle + ANGLE_90, RIDEROIDMAXADD*6*mapobjectscale);
|
|
||||||
|
|
||||||
xthreshold = pmo->momx - basemomx;
|
|
||||||
ythreshold = pmo->momy - basemomy;
|
|
||||||
|
|
||||||
// clamp the momentums using the calculated thresholds.
|
|
||||||
p->rdaddmomx = max(p->rdaddmomx, -abs(xthreshold));
|
|
||||||
p->rdaddmomy = max(p->rdaddmomy, -abs(ythreshold));
|
|
||||||
p->rdaddmomx = min(p->rdaddmomx, abs(xthreshold));
|
|
||||||
p->rdaddmomy = min(p->rdaddmomy, abs(ythreshold));
|
|
||||||
|
|
||||||
// now cancel it.
|
CONS_Printf("AX1: %d, AY1: %d\n", p->rdaddmomx/mapobjectscale, p->rdaddmomy/mapobjectscale);
|
||||||
pmo->momx = savemomx;
|
|
||||||
pmo->momy = savemomy;
|
pmo->momx = basemomx;
|
||||||
//CONS_Printf("NEWCURR: %d, %d\n", pmo->momx/mapobjectscale, pmo->momy/mapobjectscale);
|
pmo->momy = basemomy;
|
||||||
|
|
||||||
|
/*CONS_Printf("CURR: %d, %d\n", pmo->momx/mapobjectscale, pmo->momy/mapobjectscale);
|
||||||
|
CONS_Printf("BASE: %d, %d\n", basemomx/mapobjectscale, basemomy/mapobjectscale);
|
||||||
|
CONS_Printf("ADD: %d, %d\n", p->rdaddmomx/mapobjectscale, p->rdaddmomy/mapobjectscale);*/
|
||||||
|
|
||||||
|
// find out how much addmomx and addmomy we can actually get.
|
||||||
|
// we do this by misusing P_Thrust to calc our values then immediately cancelling it.
|
||||||
|
basemomx = pmo->momx;
|
||||||
|
basemomy = pmo->momy;
|
||||||
|
|
||||||
|
a = (INT32)(mo->angle) - dir*ANG1*90;
|
||||||
|
P_Thrust(pmo, (angle_t)a, RIDEROIDMAXADD*3*mapobjectscale);
|
||||||
|
|
||||||
|
xthreshold = pmo->momx - basemomx;
|
||||||
|
ythreshold = pmo->momy - basemomy;
|
||||||
|
|
||||||
|
//CONS_Printf("XT: %d (%d), YT: %d (%d)\n", xthreshold/mapobjectscale, abs(xthreshold/mapobjectscale), ythreshold/mapobjectscale, abs(ythreshold/mapobjectscale));
|
||||||
|
|
||||||
|
// clamp the momentums using the calculated thresholds.
|
||||||
|
|
||||||
|
// the fixedmul check checks if both numbers are of the same sign.
|
||||||
|
if (abs(p->rdaddmomx) > abs(xthreshold))
|
||||||
|
p->rdaddmomx = xthreshold;
|
||||||
|
|
||||||
|
if (abs(p->rdaddmomy) > abs(ythreshold))
|
||||||
|
p->rdaddmomy = ythreshold;
|
||||||
|
|
||||||
|
//CONS_Printf("AX2: %d, AY2: %d\n", p->rdaddmomx/mapobjectscale, p->rdaddmomy/mapobjectscale);
|
||||||
|
|
||||||
|
// now cancel it.
|
||||||
|
pmo->momx = savemomx;
|
||||||
|
pmo->momy = savemomy;
|
||||||
|
//CONS_Printf("NEWCURR: %d, %d\n", pmo->momx/mapobjectscale, pmo->momy/mapobjectscale);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else // not turning
|
else // not turning
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -556,9 +556,9 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
||||||
|
|
||||||
WRITEUINT8(save->p, players[i].rideroid);
|
WRITEUINT8(save->p, players[i].rideroid);
|
||||||
WRITEUINT8(save->p, players[i].rdnodepull);
|
WRITEUINT8(save->p, players[i].rdnodepull);
|
||||||
WRITEANGLE(save->p, players[i].rideroidangle);
|
WRITEINT32(save->p, players[i].rideroidangle);
|
||||||
WRITEFIXED(save->p, players[i].rideroidspeed);
|
WRITEFIXED(save->p, players[i].rideroidspeed);
|
||||||
WRITEANGLE(save->p, players[i].rideroidrollangle);
|
WRITEINT32(save->p, players[i].rideroidrollangle);
|
||||||
WRITEFIXED(save->p, players[i].rdaddmomx);
|
WRITEFIXED(save->p, players[i].rdaddmomx);
|
||||||
WRITEFIXED(save->p, players[i].rdaddmomy);
|
WRITEFIXED(save->p, players[i].rdaddmomy);
|
||||||
WRITEFIXED(save->p, players[i].rdaddmomz);
|
WRITEFIXED(save->p, players[i].rdaddmomz);
|
||||||
|
|
@ -1063,9 +1063,9 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
||||||
|
|
||||||
players[i].rideroid = READUINT8(save->p);
|
players[i].rideroid = READUINT8(save->p);
|
||||||
players[i].rdnodepull = READUINT8(save->p);
|
players[i].rdnodepull = READUINT8(save->p);
|
||||||
players[i].rideroidangle = READANGLE(save->p);
|
players[i].rideroidangle = READINT32(save->p);
|
||||||
players[i].rideroidspeed = READFIXED(save->p);
|
players[i].rideroidspeed = READFIXED(save->p);
|
||||||
players[i].rideroidrollangle = READANGLE(save->p);
|
players[i].rideroidrollangle = READINT32(save->p);
|
||||||
players[i].rdaddmomx = READFIXED(save->p);
|
players[i].rdaddmomx = READFIXED(save->p);
|
||||||
players[i].rdaddmomy = READFIXED(save->p);
|
players[i].rdaddmomy = READFIXED(save->p);
|
||||||
players[i].rdaddmomz = READFIXED(save->p);
|
players[i].rdaddmomz = READFIXED(save->p);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue