mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
I tore apart the entire code to try and fix braking friction and gave up, so now it's back to v1
My rewrites clean up a LOT of weird/misleading behavior anyway, so I'm gonna push this regardless. Someone else will have to figure out another way to reimplement braking friction though -- we can't use it as is because it prevents being able to bump people.
This commit is contained in:
parent
b08459cbee
commit
69b6ba2f18
9 changed files with 145 additions and 200 deletions
|
|
@ -4315,7 +4315,6 @@ static void HandlePacketFromAwayNode(SINT8 node)
|
||||||
static boolean CheckForSpeedHacks(UINT8 p)
|
static boolean CheckForSpeedHacks(UINT8 p)
|
||||||
{
|
{
|
||||||
if (netcmds[maketic%TICQUEUE][p].forwardmove > MAXPLMOVE || netcmds[maketic%TICQUEUE][p].forwardmove < -MAXPLMOVE
|
if (netcmds[maketic%TICQUEUE][p].forwardmove > MAXPLMOVE || netcmds[maketic%TICQUEUE][p].forwardmove < -MAXPLMOVE
|
||||||
|| netcmds[maketic%TICQUEUE][p].sidemove > MAXPLMOVE || netcmds[maketic%TICQUEUE][p].sidemove < -MAXPLMOVE
|
|
||||||
|| netcmds[maketic%TICQUEUE][p].driftturn > KART_FULLTURN || netcmds[maketic%TICQUEUE][p].driftturn < -KART_FULLTURN)
|
|| netcmds[maketic%TICQUEUE][p].driftturn > KART_FULLTURN || netcmds[maketic%TICQUEUE][p].driftturn < -KART_FULLTURN)
|
||||||
{
|
{
|
||||||
XBOXSTATIC char buf[2];
|
XBOXSTATIC char buf[2];
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,6 @@ typedef enum
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
SINT8 forwardmove; // -MAXPLMOVE to MAXPLMOVE (50)
|
SINT8 forwardmove; // -MAXPLMOVE to MAXPLMOVE (50)
|
||||||
SINT8 sidemove; // -MAXPLMOVE to MAXPLMOVE (50)
|
|
||||||
INT16 angleturn; // <<16 for angle delta - saved as 1 byte into demos
|
INT16 angleturn; // <<16 for angle delta - saved as 1 byte into demos
|
||||||
INT16 aiming; // vertical aiming, see G_BuildTicCmd
|
INT16 aiming; // vertical aiming, see G_BuildTicCmd
|
||||||
UINT16 buttons;
|
UINT16 buttons;
|
||||||
|
|
|
||||||
58
src/g_game.c
58
src/g_game.c
|
|
@ -1256,13 +1256,12 @@ INT32 JoyAxis(axis_input_e axissel, UINT8 p)
|
||||||
INT32 localaiming[MAXSPLITSCREENPLAYERS];
|
INT32 localaiming[MAXSPLITSCREENPLAYERS];
|
||||||
angle_t localangle[MAXSPLITSCREENPLAYERS];
|
angle_t localangle[MAXSPLITSCREENPLAYERS];
|
||||||
|
|
||||||
static fixed_t forwardmove = 50<<FRACBITS>>16;
|
static fixed_t forwardmove = MAXPLMOVE<<FRACBITS>>16;
|
||||||
static fixed_t sidemove[2] = {2<<FRACBITS>>16, 4<<FRACBITS>>16};
|
|
||||||
static fixed_t angleturn[3] = {KART_FULLTURN/2, KART_FULLTURN, KART_FULLTURN/4}; // + slow turn
|
static fixed_t angleturn[3] = {KART_FULLTURN/2, KART_FULLTURN, KART_FULLTURN/4}; // + slow turn
|
||||||
|
|
||||||
void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
{
|
{
|
||||||
INT32 laim, th, tspeed, forward, side, axis; //i
|
INT32 laim, th, tspeed, forward, axis; //i
|
||||||
const INT32 speed = 1;
|
const INT32 speed = 1;
|
||||||
// these ones used for multiple conditions
|
// these ones used for multiple conditions
|
||||||
boolean turnleft, turnright, mouseaiming, analogjoystickmove, gamepadjoystickmove;
|
boolean turnleft, turnright, mouseaiming, analogjoystickmove, gamepadjoystickmove;
|
||||||
|
|
@ -1373,7 +1372,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
turnright = turnright || (axis > 0);
|
turnright = turnright || (axis > 0);
|
||||||
turnleft = turnleft || (axis < 0);
|
turnleft = turnleft || (axis < 0);
|
||||||
}
|
}
|
||||||
forward = side = 0;
|
forward = 0;
|
||||||
|
|
||||||
// use two stage accelerative turning
|
// use two stage accelerative turning
|
||||||
// on the keyboard and joystick
|
// on the keyboard and joystick
|
||||||
|
|
@ -1394,13 +1393,11 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
{
|
{
|
||||||
cmd->angleturn = (INT16)(cmd->angleturn - (angleturn[tspeed]));
|
cmd->angleturn = (INT16)(cmd->angleturn - (angleturn[tspeed]));
|
||||||
cmd->driftturn = (INT16)(cmd->driftturn - (angleturn[tspeed]));
|
cmd->driftturn = (INT16)(cmd->driftturn - (angleturn[tspeed]));
|
||||||
side += sidemove[1];
|
|
||||||
}
|
}
|
||||||
else if (turnleft && !(turnright))
|
else if (turnleft && !(turnright))
|
||||||
{
|
{
|
||||||
cmd->angleturn = (INT16)(cmd->angleturn + (angleturn[tspeed]));
|
cmd->angleturn = (INT16)(cmd->angleturn + (angleturn[tspeed]));
|
||||||
cmd->driftturn = (INT16)(cmd->driftturn + (angleturn[tspeed]));
|
cmd->driftturn = (INT16)(cmd->driftturn + (angleturn[tspeed]));
|
||||||
side -= sidemove[1];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (analogjoystickmove && axis != 0)
|
if (analogjoystickmove && axis != 0)
|
||||||
|
|
@ -1408,7 +1405,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
// JOYAXISRANGE should be 1023 (divide by 1024)
|
// JOYAXISRANGE should be 1023 (divide by 1024)
|
||||||
cmd->angleturn = (INT16)(cmd->angleturn - (((axis * angleturn[1]) >> 10))); // ANALOG!
|
cmd->angleturn = (INT16)(cmd->angleturn - (((axis * angleturn[1]) >> 10))); // ANALOG!
|
||||||
cmd->driftturn = (INT16)(cmd->driftturn - (((axis * angleturn[1]) >> 10)));
|
cmd->driftturn = (INT16)(cmd->driftturn - (((axis * angleturn[1]) >> 10)));
|
||||||
side += ((axis * sidemove[0]) >> 10);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Specator mouse turning
|
// Specator mouse turning
|
||||||
|
|
@ -1445,7 +1441,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
{
|
{
|
||||||
cmd->buttons |= BT_ACCELERATE;
|
cmd->buttons |= BT_ACCELERATE;
|
||||||
// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
|
// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
|
||||||
forward += ((axis * forwardmove) >> 10)*2;
|
forward += ((axis * forwardmove) >> 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
axis = JoyAxis(AXISBRAKE, ssplayer);
|
axis = JoyAxis(AXISBRAKE, ssplayer);
|
||||||
|
|
@ -1555,21 +1551,12 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
|
|
||||||
mousex = mousey = mlooky = 0;
|
mousex = mousey = mlooky = 0;
|
||||||
|
|
||||||
if (forward > MAXPLMOVE)
|
cmd->forwardmove += (SINT8)forward;
|
||||||
forward = MAXPLMOVE;
|
|
||||||
else if (forward < -MAXPLMOVE)
|
|
||||||
forward = -MAXPLMOVE;
|
|
||||||
|
|
||||||
if (side > MAXPLMOVE)
|
if (cmd->forwardmove > MAXPLMOVE)
|
||||||
side = MAXPLMOVE;
|
cmd->forwardmove = MAXPLMOVE;
|
||||||
else if (side < -MAXPLMOVE)
|
else if (cmd->forwardmove < -MAXPLMOVE)
|
||||||
side = -MAXPLMOVE;
|
cmd->forwardmove = -MAXPLMOVE;
|
||||||
|
|
||||||
if (forward || side)
|
|
||||||
{
|
|
||||||
cmd->forwardmove = (SINT8)(cmd->forwardmove + forward);
|
|
||||||
cmd->sidemove = (SINT8)(cmd->sidemove + side);
|
|
||||||
}
|
|
||||||
|
|
||||||
//{ SRB2kart - Drift support
|
//{ SRB2kart - Drift support
|
||||||
// Not grouped with the rest of turn stuff because it needs to know what buttons you're pressing for rubber-burn turn
|
// Not grouped with the rest of turn stuff because it needs to know what buttons you're pressing for rubber-burn turn
|
||||||
|
|
@ -1619,7 +1606,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//Reset away view if a command is given.
|
//Reset away view if a command is given.
|
||||||
if ((cmd->forwardmove || cmd->sidemove || cmd->buttons)
|
if ((cmd->forwardmove || cmd->buttons)
|
||||||
&& !r_splitscreen && displayplayers[0] != consoleplayer && ssplayer == 1)
|
&& !r_splitscreen && displayplayers[0] != consoleplayer && ssplayer == 1)
|
||||||
displayplayers[0] = consoleplayer;
|
displayplayers[0] = consoleplayer;
|
||||||
}
|
}
|
||||||
|
|
@ -4771,13 +4758,12 @@ char *G_BuildMapTitle(INT32 mapnum)
|
||||||
|
|
||||||
// For demos
|
// For demos
|
||||||
#define ZT_FWD 0x01
|
#define ZT_FWD 0x01
|
||||||
#define ZT_SIDE 0x02
|
#define ZT_ANGLE 0x02
|
||||||
#define ZT_ANGLE 0x04
|
#define ZT_BUTTONS 0x04
|
||||||
#define ZT_BUTTONS 0x08
|
#define ZT_AIMING 0x08
|
||||||
#define ZT_AIMING 0x10
|
#define ZT_DRIFT 0x10
|
||||||
#define ZT_DRIFT 0x20
|
#define ZT_LATENCY 0x20
|
||||||
#define ZT_LATENCY 0x40
|
#define DEMOMARKER 0x40 // demoend
|
||||||
#define DEMOMARKER 0x80 // demoend
|
|
||||||
|
|
||||||
UINT8 demo_extradata[MAXPLAYERS];
|
UINT8 demo_extradata[MAXPLAYERS];
|
||||||
UINT8 demo_writerng; // 0=no, 1=yes, 2=yes but on a timeout
|
UINT8 demo_writerng; // 0=no, 1=yes, 2=yes but on a timeout
|
||||||
|
|
@ -4840,7 +4826,6 @@ ticcmd_t *G_MoveTiccmd(ticcmd_t* dest, const ticcmd_t* src, const size_t n)
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
dest[i].forwardmove = src[i].forwardmove;
|
dest[i].forwardmove = src[i].forwardmove;
|
||||||
dest[i].sidemove = src[i].sidemove;
|
|
||||||
dest[i].angleturn = SHORT(src[i].angleturn);
|
dest[i].angleturn = SHORT(src[i].angleturn);
|
||||||
dest[i].aiming = (INT16)SHORT(src[i].aiming);
|
dest[i].aiming = (INT16)SHORT(src[i].aiming);
|
||||||
dest[i].buttons = (UINT16)SHORT(src[i].buttons);
|
dest[i].buttons = (UINT16)SHORT(src[i].buttons);
|
||||||
|
|
@ -5149,8 +5134,6 @@ void G_ReadDemoTiccmd(ticcmd_t *cmd, INT32 playernum)
|
||||||
|
|
||||||
if (ziptic & ZT_FWD)
|
if (ziptic & ZT_FWD)
|
||||||
oldcmd[playernum].forwardmove = READSINT8(demo_p);
|
oldcmd[playernum].forwardmove = READSINT8(demo_p);
|
||||||
if (ziptic & ZT_SIDE)
|
|
||||||
oldcmd[playernum].sidemove = READSINT8(demo_p);
|
|
||||||
if (ziptic & ZT_ANGLE)
|
if (ziptic & ZT_ANGLE)
|
||||||
oldcmd[playernum].angleturn = READINT16(demo_p);
|
oldcmd[playernum].angleturn = READINT16(demo_p);
|
||||||
if (ziptic & ZT_BUTTONS)
|
if (ziptic & ZT_BUTTONS)
|
||||||
|
|
@ -5190,13 +5173,6 @@ void G_WriteDemoTiccmd(ticcmd_t *cmd, INT32 playernum)
|
||||||
ziptic |= ZT_FWD;
|
ziptic |= ZT_FWD;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmd->sidemove != oldcmd[playernum].sidemove)
|
|
||||||
{
|
|
||||||
WRITEUINT8(demo_p,cmd->sidemove);
|
|
||||||
oldcmd[playernum].sidemove = cmd->sidemove;
|
|
||||||
ziptic |= ZT_SIDE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmd->angleturn != oldcmd[playernum].angleturn)
|
if (cmd->angleturn != oldcmd[playernum].angleturn)
|
||||||
{
|
{
|
||||||
WRITEINT16(demo_p,cmd->angleturn);
|
WRITEINT16(demo_p,cmd->angleturn);
|
||||||
|
|
@ -5710,8 +5686,6 @@ void G_GhostTicker(void)
|
||||||
|
|
||||||
if (ziptic & ZT_FWD)
|
if (ziptic & ZT_FWD)
|
||||||
g->p++;
|
g->p++;
|
||||||
if (ziptic & ZT_SIDE)
|
|
||||||
g->p++;
|
|
||||||
if (ziptic & ZT_ANGLE)
|
if (ziptic & ZT_ANGLE)
|
||||||
g->p += 2;
|
g->p += 2;
|
||||||
if (ziptic & ZT_BUTTONS)
|
if (ziptic & ZT_BUTTONS)
|
||||||
|
|
|
||||||
22
src/k_bot.c
22
src/k_bot.c
|
|
@ -474,6 +474,7 @@ fixed_t K_BotTopSpeedRubberband(player_t *player)
|
||||||
fixed_t K_BotFrictionRubberband(player_t *player, fixed_t frict)
|
fixed_t K_BotFrictionRubberband(player_t *player, fixed_t frict)
|
||||||
{
|
{
|
||||||
fixed_t rubberband = K_BotRubberband(player) - FRACUNIT;
|
fixed_t rubberband = K_BotRubberband(player) - FRACUNIT;
|
||||||
|
fixed_t newfrict;
|
||||||
|
|
||||||
if (rubberband <= 0)
|
if (rubberband <= 0)
|
||||||
{
|
{
|
||||||
|
|
@ -481,8 +482,14 @@ fixed_t K_BotFrictionRubberband(player_t *player, fixed_t frict)
|
||||||
return frict;
|
return frict;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 128 is a magic number that felt good in-game
|
newfrict = FixedDiv(frict, FRACUNIT + (rubberband / 2));
|
||||||
return FixedDiv(frict, FRACUNIT + (rubberband / 2));
|
|
||||||
|
if (newfrict < 0)
|
||||||
|
newfrict = 0;
|
||||||
|
if (newfrict > FRACUNIT)
|
||||||
|
newfrict = FRACUNIT;
|
||||||
|
|
||||||
|
return newfrict;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
|
|
@ -698,11 +705,12 @@ void K_BuildBotTiccmd(player_t *player, ticcmd_t *cmd)
|
||||||
// Start boost handler
|
// Start boost handler
|
||||||
if (leveltime <= starttime)
|
if (leveltime <= starttime)
|
||||||
{
|
{
|
||||||
tic_t boosthold = starttime - TICRATE;
|
tic_t length = (TICRATE/6);
|
||||||
|
tic_t boosthold = starttime - K_GetSpindashChargeTime(player);
|
||||||
|
|
||||||
cmd->buttons |= BT_ACCELERATE|BT_BRAKE;
|
cmd->buttons |= BT_EBRAKEMASK;
|
||||||
|
|
||||||
boosthold -= (MAXBOTDIFFICULTY - player->botvars.difficulty);
|
boosthold -= (MAXBOTDIFFICULTY - player->botvars.difficulty) * length;
|
||||||
|
|
||||||
if (leveltime >= boosthold)
|
if (leveltime >= boosthold)
|
||||||
{
|
{
|
||||||
|
|
@ -743,7 +751,7 @@ void K_BuildBotTiccmd(player_t *player, ticcmd_t *cmd)
|
||||||
if (anglediff > 90)
|
if (anglediff > 90)
|
||||||
{
|
{
|
||||||
// Wrong way!
|
// Wrong way!
|
||||||
cmd->forwardmove = -25;
|
cmd->forwardmove = -MAXPLMOVE;
|
||||||
cmd->buttons |= BT_BRAKE;
|
cmd->buttons |= BT_BRAKE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -777,7 +785,7 @@ void K_BuildBotTiccmd(player_t *player, ticcmd_t *cmd)
|
||||||
cmd->buttons |= BT_ACCELERATE;
|
cmd->buttons |= BT_ACCELERATE;
|
||||||
|
|
||||||
// Full speed ahead!
|
// Full speed ahead!
|
||||||
cmd->forwardmove = 50;
|
cmd->forwardmove = MAXPLMOVE;
|
||||||
|
|
||||||
if (dirdist <= rad)
|
if (dirdist <= rad)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
165
src/k_kart.c
165
src/k_kart.c
|
|
@ -1143,10 +1143,13 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid)
|
||||||
|
|
||||||
{ // Normalize distance to the sum of the two objects' radii, since in a perfect world that would be the distance at the point of collision...
|
{ // Normalize distance to the sum of the two objects' radii, since in a perfect world that would be the distance at the point of collision...
|
||||||
fixed_t dist = P_AproxDistance(distx, disty);
|
fixed_t dist = P_AproxDistance(distx, disty);
|
||||||
fixed_t nx = FixedDiv(distx, dist);
|
fixed_t nx, ny;
|
||||||
fixed_t ny = FixedDiv(disty, dist);
|
|
||||||
|
|
||||||
dist = dist ? dist : 1;
|
dist = dist ? dist : 1;
|
||||||
|
|
||||||
|
nx = FixedDiv(distx, dist);
|
||||||
|
ny = FixedDiv(disty, dist);
|
||||||
|
|
||||||
distx = FixedMul(mobj1->radius+mobj2->radius, nx);
|
distx = FixedMul(mobj1->radius+mobj2->radius, nx);
|
||||||
disty = FixedMul(mobj1->radius+mobj2->radius, ny);
|
disty = FixedMul(mobj1->radius+mobj2->radius, ny);
|
||||||
|
|
||||||
|
|
@ -1222,6 +1225,7 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid)
|
||||||
mobj1->player->rmomx = mobj1->momx - mobj1->player->cmomx;
|
mobj1->player->rmomx = mobj1->momx - mobj1->player->cmomx;
|
||||||
mobj1->player->rmomy = mobj1->momy - mobj1->player->cmomy;
|
mobj1->player->rmomy = mobj1->momy - mobj1->player->cmomy;
|
||||||
mobj1->player->kartstuff[k_justbumped] = bumptime;
|
mobj1->player->kartstuff[k_justbumped] = bumptime;
|
||||||
|
mobj1->player->kartstuff[k_spindash] = 0;
|
||||||
|
|
||||||
if (mobj1->player->kartstuff[k_spinouttimer])
|
if (mobj1->player->kartstuff[k_spinouttimer])
|
||||||
{
|
{
|
||||||
|
|
@ -1247,6 +1251,7 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid)
|
||||||
mobj2->player->rmomx = mobj2->momx - mobj2->player->cmomx;
|
mobj2->player->rmomx = mobj2->momx - mobj2->player->cmomx;
|
||||||
mobj2->player->rmomy = mobj2->momy - mobj2->player->cmomy;
|
mobj2->player->rmomy = mobj2->momy - mobj2->player->cmomy;
|
||||||
mobj2->player->kartstuff[k_justbumped] = bumptime;
|
mobj2->player->kartstuff[k_justbumped] = bumptime;
|
||||||
|
mobj2->player->kartstuff[k_spindash] = 0;
|
||||||
|
|
||||||
if (mobj2->player->kartstuff[k_spinouttimer])
|
if (mobj2->player->kartstuff[k_spinouttimer])
|
||||||
{
|
{
|
||||||
|
|
@ -2042,14 +2047,14 @@ static fixed_t K_FlameShieldDashVar(INT32 val)
|
||||||
return (3*FRACUNIT/4) + (((val * FRACUNIT) / TICRATE) / 2);
|
return (3*FRACUNIT/4) + (((val * FRACUNIT) / TICRATE) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static tic_t K_GetSpindashChargeTime(player_t *player)
|
tic_t K_GetSpindashChargeTime(player_t *player)
|
||||||
{
|
{
|
||||||
// more charge time for higher speed
|
// more charge time for higher speed
|
||||||
// Tails = 2s, Mighty = 3s, Fang = 4s, Metal = 4s
|
// Tails = 2s, Mighty = 3s, Fang = 4s, Metal = 4s
|
||||||
return (player->kartspeed + 4) * (TICRATE/3);
|
return (player->kartspeed + 4) * (TICRATE/3);
|
||||||
}
|
}
|
||||||
|
|
||||||
static fixed_t K_GetSpindashChargeSpeed(player_t *player)
|
fixed_t K_GetSpindashChargeSpeed(player_t *player)
|
||||||
{
|
{
|
||||||
// more speed for higher weight & speed
|
// more speed for higher weight & speed
|
||||||
// Tails = +6.25%, Fang = +20.31%, Mighty = +20.31%, Metal = +25%
|
// Tails = +6.25%, Fang = +20.31%, Mighty = +20.31%, Metal = +25%
|
||||||
|
|
@ -2266,13 +2271,32 @@ UINT16 K_GetKartFlashing(player_t *player)
|
||||||
return tics;
|
return tics;
|
||||||
}
|
}
|
||||||
|
|
||||||
fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove)
|
SINT8 K_GetForwardMove(player_t *player)
|
||||||
|
{
|
||||||
|
SINT8 forwardmove = player->cmd.forwardmove;
|
||||||
|
|
||||||
|
if ((player->pflags & PF_STASIS) || (player->pflags & PF_SLIDING) || player->kartstuff[k_spinouttimer] || K_PlayerEBrake(player))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->kartstuff[k_sneakertimer] || player->kartstuff[k_spindashboost])
|
||||||
|
{
|
||||||
|
return MAXPLMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return forwardmove;
|
||||||
|
}
|
||||||
|
|
||||||
|
fixed_t K_3dKartMovement(player_t *player, boolean onground)
|
||||||
{
|
{
|
||||||
const fixed_t accelmax = 4000;
|
const fixed_t accelmax = 4000;
|
||||||
const fixed_t p_speed = K_GetKartSpeed(player, true);
|
const fixed_t p_speed = K_GetKartSpeed(player, true);
|
||||||
const fixed_t p_accel = K_GetKartAccel(player);
|
const fixed_t p_accel = K_GetKartAccel(player);
|
||||||
fixed_t newspeed, oldspeed, finalspeed;
|
fixed_t newspeed, oldspeed, finalspeed;
|
||||||
|
fixed_t movemul = FRACUNIT;
|
||||||
fixed_t orig = ORIG_FRICTION;
|
fixed_t orig = ORIG_FRICTION;
|
||||||
|
SINT8 forwardmove = K_GetForwardMove(player);
|
||||||
|
|
||||||
if (!onground) return 0; // If the player isn't on the ground, there is no change in speed
|
if (!onground) return 0; // If the player isn't on the ground, there is no change in speed
|
||||||
|
|
||||||
|
|
@ -2301,25 +2325,20 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove
|
||||||
}
|
}
|
||||||
|
|
||||||
finalspeed = newspeed - oldspeed;
|
finalspeed = newspeed - oldspeed;
|
||||||
|
movemul = abs(forwardmove * FRACUNIT) / 50;
|
||||||
|
|
||||||
// forwardmove is:
|
// forwardmove is:
|
||||||
// 50 while accelerating,
|
// 50 while accelerating,
|
||||||
// 0 with no gas, and
|
// 0 with no gas, and
|
||||||
// -25 when only braking.
|
// -25 when only braking.
|
||||||
|
if (forwardmove >= 0)
|
||||||
if (player->kartstuff[k_sneakertimer] || player->kartstuff[k_spindashboost])
|
{
|
||||||
forwardmove = 50;
|
finalspeed = FixedMul(finalspeed, movemul);
|
||||||
|
}
|
||||||
finalspeed *= forwardmove/25;
|
else
|
||||||
finalspeed /= 2;
|
{
|
||||||
|
finalspeed = FixedMul(-mapobjectscale/2, movemul);
|
||||||
if (forwardmove < 0 && finalspeed > mapobjectscale*2)
|
}
|
||||||
return finalspeed/2;
|
|
||||||
else if (forwardmove < 0)
|
|
||||||
return -mapobjectscale/2;
|
|
||||||
|
|
||||||
if (finalspeed < 0)
|
|
||||||
finalspeed = 0;
|
|
||||||
|
|
||||||
return finalspeed;
|
return finalspeed;
|
||||||
}
|
}
|
||||||
|
|
@ -3579,7 +3598,7 @@ void K_DriftDustHandling(mobj_t *spawner)
|
||||||
if (spawner->player->speed < 5*spawner->scale)
|
if (spawner->player->speed < 5*spawner->scale)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (spawner->player->cmd.forwardmove < 0)
|
if (K_GetForwardMove(spawner->player) < 0)
|
||||||
playerangle += ANGLE_180;
|
playerangle += ANGLE_180;
|
||||||
|
|
||||||
anglediff = abs((signed)(playerangle - R_PointToAngle2(0, 0, spawner->player->rmomx, spawner->player->rmomy)));
|
anglediff = abs((signed)(playerangle - R_PointToAngle2(0, 0, spawner->player->rmomx, spawner->player->rmomy)));
|
||||||
|
|
@ -5161,10 +5180,10 @@ static void K_UpdateEngineSounds(player_t *player, ticcmd_t *cmd)
|
||||||
|
|
||||||
if (player->respawn.state == RESPAWNST_DROP) // Dropdashing
|
if (player->respawn.state == RESPAWNST_DROP) // Dropdashing
|
||||||
targetsnd = ((cmd->buttons & BT_ACCELERATE) ? 12 : 0);
|
targetsnd = ((cmd->buttons & BT_ACCELERATE) ? 12 : 0);
|
||||||
else if (K_PlayerEBrake(player)) // Spindashing
|
else if (K_PlayerEBrake(player) == true) // Spindashing
|
||||||
targetsnd = ((cmd->buttons & BT_DRIFT) ? 12 : 0);
|
targetsnd = ((cmd->buttons & BT_DRIFT) ? 12 : 0);
|
||||||
else
|
else
|
||||||
targetsnd = (((6*cmd->forwardmove)/25) + ((player->speed / mapobjectscale)/5))/2;
|
targetsnd = (((6*K_GetForwardMove(player))/25) + ((player->speed / mapobjectscale)/5))/2;
|
||||||
|
|
||||||
if (targetsnd < 0)
|
if (targetsnd < 0)
|
||||||
targetsnd = 0;
|
targetsnd = 0;
|
||||||
|
|
@ -5809,7 +5828,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->kartstuff[k_justbumped])
|
if (player->kartstuff[k_justbumped] > 0)
|
||||||
player->kartstuff[k_justbumped]--;
|
player->kartstuff[k_justbumped]--;
|
||||||
|
|
||||||
if (player->kartstuff[k_tiregrease])
|
if (player->kartstuff[k_tiregrease])
|
||||||
|
|
@ -6895,31 +6914,52 @@ static INT32 K_FlameShieldMax(player_t *player)
|
||||||
boolean K_PlayerEBrake(player_t *player)
|
boolean K_PlayerEBrake(player_t *player)
|
||||||
{
|
{
|
||||||
return (player->cmd.buttons & BT_EBRAKEMASK) == BT_EBRAKEMASK
|
return (player->cmd.buttons & BT_EBRAKEMASK) == BT_EBRAKEMASK
|
||||||
&& P_IsObjectOnGround(player->mo)
|
&& P_IsObjectOnGround(player->mo) == true
|
||||||
&& !player->kartstuff[k_drift]
|
&& player->kartstuff[k_drift] == 0
|
||||||
&& !player->kartstuff[k_spinouttimer]
|
&& player->kartstuff[k_spinouttimer] == 0
|
||||||
&& !player->kartstuff[k_boostcharge]
|
&& player->kartstuff[k_justbumped] == 0
|
||||||
&& !(player->kartstuff[k_spindash] < 0)
|
&& player->kartstuff[k_spindash] >= 0
|
||||||
&& !player->kartstuff[k_justbumped]
|
&& player->kartstuff[k_spindashboost] == 0
|
||||||
&& !player->kartstuff[k_spindashboost]
|
&& player->powers[pw_nocontrol] == 0;
|
||||||
&& !player->powers[pw_nocontrol];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void K_KartSpindash(player_t *player)
|
static void K_KartSpindash(player_t *player)
|
||||||
{
|
{
|
||||||
|
const tic_t MAXCHARGETIME = K_GetSpindashChargeTime(player);
|
||||||
ticcmd_t *cmd = &player->cmd;
|
ticcmd_t *cmd = &player->cmd;
|
||||||
|
|
||||||
if (!(K_PlayerEBrake(player) || (player->kartstuff[k_spindash] && !(cmd->buttons & BT_BRAKE))))
|
if (player->kartstuff[k_spindash] > 0 && (cmd->buttons & (BT_DRIFT|BT_BRAKE)) != (BT_DRIFT|BT_BRAKE))
|
||||||
{
|
{
|
||||||
if (player->kartstuff[k_spindash])
|
player->kartstuff[k_spindashspeed] = (player->kartstuff[k_spindash] * FRACUNIT) / MAXCHARGETIME;
|
||||||
player->kartstuff[k_spindash] = 0;
|
player->kartstuff[k_spindashboost] = TICRATE;
|
||||||
|
|
||||||
|
if (!player->kartstuff[k_tiregrease])
|
||||||
|
{
|
||||||
|
UINT8 i;
|
||||||
|
for (i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
mobj_t *grease;
|
||||||
|
grease = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_TIREGREASE);
|
||||||
|
P_SetTarget(&grease->target, player->mo);
|
||||||
|
grease->angle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
|
||||||
|
grease->extravalue1 = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
player->kartstuff[k_tiregrease] = 2*TICRATE;
|
||||||
|
|
||||||
|
player->kartstuff[k_spindash] = 0;
|
||||||
|
S_StartSound(player->mo, sfx_s23c);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (K_PlayerEBrake(player) == false)
|
||||||
|
{
|
||||||
|
player->kartstuff[k_spindash] = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->speed < 6*mapobjectscale && player->powers[pw_flashing] == 0)
|
if (player->speed < 6*mapobjectscale && player->powers[pw_flashing] == 0)
|
||||||
{
|
{
|
||||||
const tic_t MAXCHARGETIME = K_GetSpindashChargeTime(player);
|
|
||||||
|
|
||||||
if (cmd->driftturn != 0 && leveltime % 8 == 0)
|
if (cmd->driftturn != 0 && leveltime % 8 == 0)
|
||||||
S_StartSound(player->mo, sfx_ruburn);
|
S_StartSound(player->mo, sfx_ruburn);
|
||||||
|
|
||||||
|
|
@ -6948,29 +6988,6 @@ static void K_KartSpindash(player_t *player)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (player->kartstuff[k_spindash])
|
|
||||||
{
|
|
||||||
player->kartstuff[k_spindashspeed] = (player->kartstuff[k_spindash] * FRACUNIT) / MAXCHARGETIME;
|
|
||||||
player->kartstuff[k_spindashboost] = TICRATE;
|
|
||||||
|
|
||||||
if (!player->kartstuff[k_tiregrease])
|
|
||||||
{
|
|
||||||
UINT8 i;
|
|
||||||
for (i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
mobj_t *grease;
|
|
||||||
grease = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_TIREGREASE);
|
|
||||||
P_SetTarget(&grease->target, player->mo);
|
|
||||||
grease->angle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
|
|
||||||
grease->extravalue1 = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
player->kartstuff[k_tiregrease] = 2*TICRATE;
|
|
||||||
|
|
||||||
player->kartstuff[k_spindash] = 0;
|
|
||||||
S_StartSound(player->mo, sfx_s23c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -7670,17 +7687,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
if (player->kartstuff[k_tiregrease])
|
if (player->kartstuff[k_tiregrease])
|
||||||
player->mo->friction += ((FRACUNIT - prevfriction) / greasetics) * player->kartstuff[k_tiregrease];
|
player->mo->friction += ((FRACUNIT - prevfriction) / greasetics) * player->kartstuff[k_tiregrease];
|
||||||
|
|
||||||
// Friction
|
/*
|
||||||
if (!player->kartstuff[k_offroad])
|
if (K_PlayerEBrake(player) == true)
|
||||||
{
|
player->mo->friction -= 1024;
|
||||||
if (player->speed > 0 && cmd->forwardmove == 0 && !(cmd->buttons & BT_BRAKE) && player->mo->friction == 59392)
|
else if (player->speed > 0 && cmd->forwardmove < 0)
|
||||||
player->mo->friction += 4608;
|
player->mo->friction -= 512;
|
||||||
}
|
*/
|
||||||
|
|
||||||
if (K_PlayerEBrake(player))
|
|
||||||
player->mo->friction -= 3072;
|
|
||||||
else if (player->speed > 0 && cmd->forwardmove < 0) // change friction while braking no matter what, otherwise it's not any more effective than just letting go off accel
|
|
||||||
player->mo->friction -= 2048;
|
|
||||||
|
|
||||||
// Karma ice physics
|
// Karma ice physics
|
||||||
if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0)
|
if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0)
|
||||||
|
|
@ -7698,14 +7710,15 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
player->mo->friction -= 9824;
|
player->mo->friction -= 9824;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Friction was changed, so we must recalculate a bunch of stuff
|
// Cap between intended values
|
||||||
|
if (player->mo->friction > FRACUNIT)
|
||||||
|
player->mo->friction = FRACUNIT;
|
||||||
|
if (player->mo->friction < 0)
|
||||||
|
player->mo->friction = 0;
|
||||||
|
|
||||||
|
// Friction was changed, so we must recalculate movefactor
|
||||||
if (player->mo->friction != prevfriction)
|
if (player->mo->friction != prevfriction)
|
||||||
{
|
{
|
||||||
if (player->mo->friction > FRACUNIT)
|
|
||||||
player->mo->friction = FRACUNIT;
|
|
||||||
if (player->mo->friction < 0)
|
|
||||||
player->mo->friction = 0;
|
|
||||||
|
|
||||||
player->mo->movefactor = FixedDiv(ORIG_FRICTION, player->mo->friction);
|
player->mo->movefactor = FixedDiv(ORIG_FRICTION, player->mo->friction);
|
||||||
|
|
||||||
if (player->mo->movefactor < FRACUNIT)
|
if (player->mo->movefactor < FRACUNIT)
|
||||||
|
|
|
||||||
|
|
@ -70,11 +70,14 @@ void K_StripItems(player_t *player);
|
||||||
void K_StripOther(player_t *player);
|
void K_StripOther(player_t *player);
|
||||||
void K_MomentumToFacing(player_t *player);
|
void K_MomentumToFacing(player_t *player);
|
||||||
boolean K_ApplyOffroad(player_t *player);
|
boolean K_ApplyOffroad(player_t *player);
|
||||||
|
tic_t K_GetSpindashChargeTime(player_t *player);
|
||||||
|
fixed_t K_GetSpindashChargeSpeed(player_t *player);
|
||||||
fixed_t K_GetKartSpeedFromStat(UINT8 kartspeed);
|
fixed_t K_GetKartSpeedFromStat(UINT8 kartspeed);
|
||||||
fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower);
|
fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower);
|
||||||
fixed_t K_GetKartAccel(player_t *player);
|
fixed_t K_GetKartAccel(player_t *player);
|
||||||
UINT16 K_GetKartFlashing(player_t *player);
|
UINT16 K_GetKartFlashing(player_t *player);
|
||||||
fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove);
|
SINT8 K_GetForwardMove(player_t *player);
|
||||||
|
fixed_t K_3dKartMovement(player_t *player, boolean onground);
|
||||||
boolean K_PlayerEBrake(player_t *player);
|
boolean K_PlayerEBrake(player_t *player);
|
||||||
void K_MoveKartPlayer(player_t *player, boolean onground);
|
void K_MoveKartPlayer(player_t *player, boolean onground);
|
||||||
void K_CheckSpectateStatus(void);
|
void K_CheckSpectateStatus(void);
|
||||||
|
|
|
||||||
|
|
@ -767,8 +767,6 @@ static int ticcmd_get(lua_State *L)
|
||||||
|
|
||||||
if (fastcmp(field,"forwardmove"))
|
if (fastcmp(field,"forwardmove"))
|
||||||
lua_pushinteger(L, cmd->forwardmove);
|
lua_pushinteger(L, cmd->forwardmove);
|
||||||
else if (fastcmp(field,"sidemove"))
|
|
||||||
lua_pushinteger(L, cmd->sidemove);
|
|
||||||
else if (fastcmp(field,"angleturn"))
|
else if (fastcmp(field,"angleturn"))
|
||||||
lua_pushinteger(L, cmd->angleturn);
|
lua_pushinteger(L, cmd->angleturn);
|
||||||
else if (fastcmp(field,"aiming"))
|
else if (fastcmp(field,"aiming"))
|
||||||
|
|
@ -797,8 +795,6 @@ static int ticcmd_set(lua_State *L)
|
||||||
|
|
||||||
if (fastcmp(field,"forwardmove"))
|
if (fastcmp(field,"forwardmove"))
|
||||||
cmd->forwardmove = (SINT8)luaL_checkinteger(L, 3);
|
cmd->forwardmove = (SINT8)luaL_checkinteger(L, 3);
|
||||||
else if (fastcmp(field,"sidemove"))
|
|
||||||
cmd->sidemove = (SINT8)luaL_checkinteger(L, 3);
|
|
||||||
else if (fastcmp(field,"angleturn"))
|
else if (fastcmp(field,"angleturn"))
|
||||||
cmd->angleturn = (INT16)luaL_checkinteger(L, 3);
|
cmd->angleturn = (INT16)luaL_checkinteger(L, 3);
|
||||||
else if (fastcmp(field,"aiming"))
|
else if (fastcmp(field,"aiming"))
|
||||||
|
|
|
||||||
18
src/p_mobj.c
18
src/p_mobj.c
|
|
@ -1461,8 +1461,8 @@ static void P_XYFriction(mobj_t *mo, fixed_t oldx, fixed_t oldy)
|
||||||
mo->momy = FixedMul(mo->momy, ns);
|
mo->momy = FixedMul(mo->momy, ns);
|
||||||
}
|
}
|
||||||
else if (abs(player->rmomx) < FixedMul(STOPSPEED, mo->scale)
|
else if (abs(player->rmomx) < FixedMul(STOPSPEED, mo->scale)
|
||||||
&& abs(player->rmomy) < FixedMul(STOPSPEED, mo->scale)
|
&& abs(player->rmomy) < FixedMul(STOPSPEED, mo->scale)
|
||||||
&& (!(player->cmd.forwardmove && !(twodlevel || mo->flags2 & MF2_TWOD)) && !player->cmd.sidemove && !(player->pflags & PF_SPINNING))
|
&& (!(K_GetForwardMove(player) && !(twodlevel || mo->flags2 & MF2_TWOD)) && !(player->pflags & PF_SPINNING))
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
&& !(player->mo->standingslope && (!(player->mo->standingslope->flags & SL_NOPHYSICS)))// && (abs(player->mo->standingslope->zdelta) >= FRACUNIT/2))
|
&& !(player->mo->standingslope && (!(player->mo->standingslope->flags & SL_NOPHYSICS)))// && (abs(player->mo->standingslope->zdelta) >= FRACUNIT/2))
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1476,16 +1476,8 @@ static void P_XYFriction(mobj_t *mo, fixed_t oldx, fixed_t oldy)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (oldx == mo->x && oldy == mo->y) // didn't go anywhere
|
mo->momx = FixedMul(mo->momx, mo->friction);
|
||||||
{
|
mo->momy = FixedMul(mo->momy, mo->friction);
|
||||||
mo->momx = FixedMul(mo->momx, ORIG_FRICTION);
|
|
||||||
mo->momy = FixedMul(mo->momy, ORIG_FRICTION);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mo->momx = FixedMul(mo->momx, mo->friction);
|
|
||||||
mo->momy = FixedMul(mo->momy, mo->friction);
|
|
||||||
}
|
|
||||||
|
|
||||||
mo->friction = ORIG_FRICTION;
|
mo->friction = ORIG_FRICTION;
|
||||||
}
|
}
|
||||||
|
|
@ -1961,7 +1953,7 @@ void P_XYMovement(mobj_t *mo)
|
||||||
if (mo->type == MT_FLINGRING || mo->type == MT_BALLHOG || mo->type == MT_BUBBLESHIELDTRAP)
|
if (mo->type == MT_FLINGRING || mo->type == MT_BALLHOG || mo->type == MT_BUBBLESHIELDTRAP)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (mo->player && (mo->player->kartstuff[k_spinouttimer] && !mo->player->kartstuff[k_wipeoutslow]) && mo->player->speed <= K_GetKartSpeed(mo->player, false)/2)
|
if (player && (player->kartstuff[k_spinouttimer] && !player->kartstuff[k_wipeoutslow]) && player->speed <= FixedDiv(20*mapobjectscale, player->kartstuff[k_offroad] + FRACUNIT))
|
||||||
return;
|
return;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
|
||||||
71
src/p_user.c
71
src/p_user.c
|
|
@ -4020,9 +4020,9 @@ static void P_2dMovement(player_t *player)
|
||||||
static void P_3dMovement(player_t *player)
|
static void P_3dMovement(player_t *player)
|
||||||
{
|
{
|
||||||
ticcmd_t *cmd;
|
ticcmd_t *cmd;
|
||||||
angle_t movepushangle, movepushsideangle; // Analog
|
angle_t movepushangle; // Analog
|
||||||
//INT32 topspeed, acceleration, thrustfactor;
|
//INT32 topspeed, acceleration, thrustfactor;
|
||||||
fixed_t movepushforward = 0, movepushside = 0;
|
fixed_t movepushforward = 0;
|
||||||
angle_t dangle; // replaces old quadrants bits
|
angle_t dangle; // replaces old quadrants bits
|
||||||
//boolean dangleflip = false; // SRB2kart - toaster
|
//boolean dangleflip = false; // SRB2kart - toaster
|
||||||
//fixed_t normalspd = FixedMul(player->normalspeed, player->mo->scale);
|
//fixed_t normalspd = FixedMul(player->normalspeed, player->mo->scale);
|
||||||
|
|
@ -4039,14 +4039,6 @@ static void P_3dMovement(player_t *player)
|
||||||
|
|
||||||
cmd = &player->cmd;
|
cmd = &player->cmd;
|
||||||
|
|
||||||
if (player->pflags & PF_STASIS || player->kartstuff[k_spinouttimer]) // pw_introcam?
|
|
||||||
{
|
|
||||||
cmd->forwardmove = cmd->sidemove = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(player->pflags & PF_FORCESTRAFE) && !player->kartstuff[k_pogospring])
|
|
||||||
cmd->sidemove = 0;
|
|
||||||
|
|
||||||
if (player->kartstuff[k_drift] != 0)
|
if (player->kartstuff[k_drift] != 0)
|
||||||
movepushangle = player->mo->angle-(ANGLE_45/5)*player->kartstuff[k_drift];
|
movepushangle = player->mo->angle-(ANGLE_45/5)*player->kartstuff[k_drift];
|
||||||
else if (player->kartstuff[k_spinouttimer] || player->kartstuff[k_wipeoutslow]) // if spun out, use the boost angle
|
else if (player->kartstuff[k_spinouttimer] || player->kartstuff[k_wipeoutslow]) // if spun out, use the boost angle
|
||||||
|
|
@ -4054,8 +4046,6 @@ static void P_3dMovement(player_t *player)
|
||||||
else
|
else
|
||||||
movepushangle = player->mo->angle;
|
movepushangle = player->mo->angle;
|
||||||
|
|
||||||
movepushsideangle = movepushangle-ANGLE_90;
|
|
||||||
|
|
||||||
// cmomx/cmomy stands for the conveyor belt speed.
|
// cmomx/cmomy stands for the conveyor belt speed.
|
||||||
if (player->onconveyor == 2) // Wind/Current
|
if (player->onconveyor == 2) // Wind/Current
|
||||||
{
|
{
|
||||||
|
|
@ -4108,10 +4098,6 @@ static void P_3dMovement(player_t *player)
|
||||||
*/
|
*/
|
||||||
//}
|
//}
|
||||||
|
|
||||||
// When sliding, don't allow forward/back
|
|
||||||
if (player->pflags & PF_SLIDING)
|
|
||||||
cmd->forwardmove = 0;
|
|
||||||
|
|
||||||
// Do not let the player control movement if not onground.
|
// Do not let the player control movement if not onground.
|
||||||
// SRB2Kart: pogo spring and speed bumps are supposed to control like you're on the ground
|
// SRB2Kart: pogo spring and speed bumps are supposed to control like you're on the ground
|
||||||
onground = (P_IsObjectOnGround(player->mo) || (player->kartstuff[k_pogospring]));
|
onground = (P_IsObjectOnGround(player->mo) || (player->kartstuff[k_pogospring]));
|
||||||
|
|
@ -4121,7 +4107,7 @@ static void P_3dMovement(player_t *player)
|
||||||
// Forward movement
|
// Forward movement
|
||||||
if (!(P_PlayerInPain(player) && !onground))
|
if (!(P_PlayerInPain(player) && !onground))
|
||||||
{
|
{
|
||||||
movepushforward = K_3dKartMovement(player, onground, cmd->forwardmove);
|
movepushforward = K_3dKartMovement(player, onground);
|
||||||
|
|
||||||
if (player->mo->movefactor != FRACUNIT) // Friction-scaled acceleration...
|
if (player->mo->movefactor != FRACUNIT) // Friction-scaled acceleration...
|
||||||
movepushforward = FixedMul(movepushforward, player->mo->movefactor);
|
movepushforward = FixedMul(movepushforward, player->mo->movefactor);
|
||||||
|
|
@ -4134,18 +4120,6 @@ static void P_3dMovement(player_t *player)
|
||||||
K_MomentumToFacing(player);
|
K_MomentumToFacing(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sideways movement
|
|
||||||
if (cmd->sidemove != 0 && !((player->exiting || mapreset) || player->kartstuff[k_spinouttimer]))
|
|
||||||
{
|
|
||||||
if (cmd->sidemove > 0)
|
|
||||||
movepushside = (cmd->sidemove * FRACUNIT/128) + FixedDiv(player->speed, K_GetKartSpeed(player, true));
|
|
||||||
else
|
|
||||||
movepushside = (cmd->sidemove * FRACUNIT/128) - FixedDiv(player->speed, K_GetKartSpeed(player, true));
|
|
||||||
|
|
||||||
totalthrust.x += P_ReturnThrustX(player->mo, movepushsideangle, movepushside);
|
|
||||||
totalthrust.y += P_ReturnThrustY(player->mo, movepushsideangle, movepushside);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((totalthrust.x || totalthrust.y)
|
if ((totalthrust.x || totalthrust.y)
|
||||||
&& player->mo->standingslope && (!(player->mo->standingslope->flags & SL_NOPHYSICS)) && abs(player->mo->standingslope->zdelta) > FRACUNIT/2) {
|
&& player->mo->standingslope && (!(player->mo->standingslope->flags & SL_NOPHYSICS)) && abs(player->mo->standingslope->zdelta) > FRACUNIT/2) {
|
||||||
// Factor thrust to slope, but only for the part pushing up it!
|
// Factor thrust to slope, but only for the part pushing up it!
|
||||||
|
|
@ -7223,8 +7197,7 @@ fixed_t t_cam4_rotate = -42;
|
||||||
// we then throw that ticcmd garbage in the camera and make it move
|
// we then throw that ticcmd garbage in the camera and make it move
|
||||||
|
|
||||||
// redefine this
|
// redefine this
|
||||||
static fixed_t forwardmove[2] = {25<<FRACBITS>>16, 50<<FRACBITS>>16};
|
static fixed_t forwardmove = MAXPLMOVE<<FRACBITS>>16;
|
||||||
static fixed_t sidemove[2] = {2<<FRACBITS>>16, 4<<FRACBITS>>16};
|
|
||||||
static fixed_t angleturn[3] = {KART_FULLTURN/2, KART_FULLTURN, KART_FULLTURN/4}; // + slow turn
|
static fixed_t angleturn[3] = {KART_FULLTURN/2, KART_FULLTURN, KART_FULLTURN/4}; // + slow turn
|
||||||
|
|
||||||
static ticcmd_t cameracmd;
|
static ticcmd_t cameracmd;
|
||||||
|
|
@ -7239,7 +7212,7 @@ void P_InitCameraCmd(void)
|
||||||
|
|
||||||
static ticcmd_t *P_CameraCmd(camera_t *cam)
|
static ticcmd_t *P_CameraCmd(camera_t *cam)
|
||||||
{
|
{
|
||||||
INT32 laim, th, tspeed, forward, side, axis; //i
|
INT32 laim, th, tspeed, forward, axis; //i
|
||||||
const INT32 speed = 1;
|
const INT32 speed = 1;
|
||||||
// these ones used for multiple conditions
|
// these ones used for multiple conditions
|
||||||
boolean turnleft, turnright, mouseaiming;
|
boolean turnleft, turnright, mouseaiming;
|
||||||
|
|
@ -7288,7 +7261,7 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
|
||||||
turnright = turnright || (axis > 0);
|
turnright = turnright || (axis > 0);
|
||||||
turnleft = turnleft || (axis < 0);
|
turnleft = turnleft || (axis < 0);
|
||||||
}
|
}
|
||||||
forward = side = 0;
|
forward = 0;
|
||||||
|
|
||||||
// use two stage accelerative turning
|
// use two stage accelerative turning
|
||||||
// on the keyboard and joystick
|
// on the keyboard and joystick
|
||||||
|
|
@ -7306,12 +7279,10 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
|
||||||
if (turnright && !(turnleft))
|
if (turnright && !(turnleft))
|
||||||
{
|
{
|
||||||
cmd->angleturn = (INT16)(cmd->angleturn - (angleturn[tspeed]));
|
cmd->angleturn = (INT16)(cmd->angleturn - (angleturn[tspeed]));
|
||||||
side += sidemove[1];
|
|
||||||
}
|
}
|
||||||
else if (turnleft && !(turnright))
|
else if (turnleft && !(turnright))
|
||||||
{
|
{
|
||||||
cmd->angleturn = (INT16)(cmd->angleturn + (angleturn[tspeed]));
|
cmd->angleturn = (INT16)(cmd->angleturn + (angleturn[tspeed]));
|
||||||
side -= sidemove[1];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd->angleturn = (INT16)(cmd->angleturn - ((mousex*(encoremode ? -1 : 1)*8)));
|
cmd->angleturn = (INT16)(cmd->angleturn - ((mousex*(encoremode ? -1 : 1)*8)));
|
||||||
|
|
@ -7324,9 +7295,9 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
|
||||||
cmd->buttons |= BT_BRAKE;
|
cmd->buttons |= BT_BRAKE;
|
||||||
axis = JoyAxis(AXISAIM, 1);
|
axis = JoyAxis(AXISAIM, 1);
|
||||||
if (InputDown(gc_aimforward, 1) || (usejoystick && axis < 0))
|
if (InputDown(gc_aimforward, 1) || (usejoystick && axis < 0))
|
||||||
forward += forwardmove[1];
|
forward += forwardmove;
|
||||||
if (InputDown(gc_aimbackward, 1) || (usejoystick && axis > 0))
|
if (InputDown(gc_aimbackward, 1) || (usejoystick && axis > 0))
|
||||||
forward -= forwardmove[1];
|
forward -= forwardmove;
|
||||||
|
|
||||||
// fire with any button/key
|
// fire with any button/key
|
||||||
axis = JoyAxis(AXISFIRE, 1);
|
axis = JoyAxis(AXISFIRE, 1);
|
||||||
|
|
@ -7367,21 +7338,12 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
|
||||||
|
|
||||||
mousex = mousey = mlooky = 0;
|
mousex = mousey = mlooky = 0;
|
||||||
|
|
||||||
if (forward > MAXPLMOVE)
|
cmd->forwardmove += (SINT8)forward;
|
||||||
forward = MAXPLMOVE;
|
|
||||||
else if (forward < -MAXPLMOVE)
|
|
||||||
forward = -MAXPLMOVE;
|
|
||||||
|
|
||||||
if (side > MAXPLMOVE)
|
if (cmd->forwardmove > MAXPLMOVE)
|
||||||
side = MAXPLMOVE;
|
cmd->forwardmove = MAXPLMOVE;
|
||||||
else if (side < -MAXPLMOVE)
|
else if (cmd->forwardmove < -MAXPLMOVE)
|
||||||
side = -MAXPLMOVE;
|
cmd->forwardmove = -MAXPLMOVE;
|
||||||
|
|
||||||
if (forward || side)
|
|
||||||
{
|
|
||||||
cmd->forwardmove = (SINT8)(cmd->forwardmove + forward);
|
|
||||||
cmd->sidemove = (SINT8)(cmd->sidemove + side);
|
|
||||||
}
|
|
||||||
|
|
||||||
lang += (cmd->angleturn<<16);
|
lang += (cmd->angleturn<<16);
|
||||||
|
|
||||||
|
|
@ -7426,11 +7388,10 @@ void P_DemoCameraMovement(camera_t *cam)
|
||||||
cam->aiming = R_PointToAngle2(0, cam->z, R_PointToDist2(cam->x, cam->y, lastp->mo->x, lastp->mo->y), lastp->mo->z + lastp->mo->scale*128*P_MobjFlip(lastp->mo)); // This is still unholy. Aim a bit above their heads.
|
cam->aiming = R_PointToAngle2(0, cam->z, R_PointToDist2(cam->x, cam->y, lastp->mo->x, lastp->mo->y), lastp->mo->z + lastp->mo->scale*128*P_MobjFlip(lastp->mo)); // This is still unholy. Aim a bit above their heads.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
cam->momx = cam->momy = cam->momz = 0;
|
cam->momx = cam->momy = cam->momz = 0;
|
||||||
|
|
||||||
if (cmd->forwardmove != 0)
|
if (cmd->forwardmove != 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
thrustangle = cam->angle >> ANGLETOFINESHIFT;
|
thrustangle = cam->angle >> ANGLETOFINESHIFT;
|
||||||
|
|
||||||
cam->x += FixedMul(cmd->forwardmove*mapobjectscale, FINECOSINE(thrustangle));
|
cam->x += FixedMul(cmd->forwardmove*mapobjectscale, FINECOSINE(thrustangle));
|
||||||
|
|
@ -9493,8 +9454,8 @@ void P_PlayerAfterThink(player_t *player)
|
||||||
if (!(player->mo->tracer->target->flags & MF_SLIDEME) // Noclimb on chain parameters gives this
|
if (!(player->mo->tracer->target->flags & MF_SLIDEME) // Noclimb on chain parameters gives this
|
||||||
&& !(twodlevel || player->mo->flags2 & MF2_TWOD)) // why on earth would you want to turn them in 2D mode?
|
&& !(twodlevel || player->mo->flags2 & MF2_TWOD)) // why on earth would you want to turn them in 2D mode?
|
||||||
{
|
{
|
||||||
player->mo->tracer->target->health += cmd->sidemove;
|
//player->mo->tracer->target->health += cmd->sidemove;
|
||||||
player->mo->angle += cmd->sidemove<<ANGLETOFINESHIFT; // 2048 --> ANGLE_MAX
|
//player->mo->angle += cmd->sidemove<<ANGLETOFINESHIFT; // 2048 --> ANGLE_MAX
|
||||||
|
|
||||||
if (player == &players[consoleplayer])
|
if (player == &players[consoleplayer])
|
||||||
localangle[0] = player->mo->angle; // Adjust the local control angle.
|
localangle[0] = player->mo->angle; // Adjust the local control angle.
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue