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)
 | 
			
		||||
{
 | 
			
		||||
	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)
 | 
			
		||||
	{
 | 
			
		||||
		XBOXSTATIC char buf[2];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,7 +60,6 @@ typedef enum
 | 
			
		|||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	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 aiming; // vertical aiming, see G_BuildTicCmd
 | 
			
		||||
	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];
 | 
			
		||||
angle_t localangle[MAXSPLITSCREENPLAYERS];
 | 
			
		||||
 | 
			
		||||
static fixed_t forwardmove = 50<<FRACBITS>>16;
 | 
			
		||||
static fixed_t sidemove[2] = {2<<FRACBITS>>16, 4<<FRACBITS>>16};
 | 
			
		||||
static fixed_t forwardmove = MAXPLMOVE<<FRACBITS>>16;
 | 
			
		||||
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)
 | 
			
		||||
{
 | 
			
		||||
	INT32 laim, th, tspeed, forward, side, axis; //i
 | 
			
		||||
	INT32 laim, th, tspeed, forward, axis; //i
 | 
			
		||||
	const INT32 speed = 1;
 | 
			
		||||
	// these ones used for multiple conditions
 | 
			
		||||
	boolean turnleft, turnright, mouseaiming, analogjoystickmove, gamepadjoystickmove;
 | 
			
		||||
| 
						 | 
				
			
			@ -1373,7 +1372,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
 | 
			
		|||
		turnright = turnright || (axis > 0);
 | 
			
		||||
		turnleft = turnleft || (axis < 0);
 | 
			
		||||
	}
 | 
			
		||||
	forward = side = 0;
 | 
			
		||||
	forward = 0;
 | 
			
		||||
 | 
			
		||||
	// use two stage accelerative turning
 | 
			
		||||
	// 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->driftturn = (INT16)(cmd->driftturn - (angleturn[tspeed]));
 | 
			
		||||
		side += sidemove[1];
 | 
			
		||||
	}
 | 
			
		||||
	else if (turnleft && !(turnright))
 | 
			
		||||
	{
 | 
			
		||||
		cmd->angleturn = (INT16)(cmd->angleturn + (angleturn[tspeed]));
 | 
			
		||||
		cmd->driftturn = (INT16)(cmd->driftturn + (angleturn[tspeed]));
 | 
			
		||||
		side -= sidemove[1];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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)
 | 
			
		||||
		cmd->angleturn = (INT16)(cmd->angleturn - (((axis * angleturn[1]) >> 10))); // ANALOG!
 | 
			
		||||
		cmd->driftturn = (INT16)(cmd->driftturn - (((axis * angleturn[1]) >> 10)));
 | 
			
		||||
		side += ((axis * sidemove[0]) >> 10);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Specator mouse turning
 | 
			
		||||
| 
						 | 
				
			
			@ -1445,7 +1441,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
 | 
			
		|||
		{
 | 
			
		||||
			cmd->buttons |= BT_ACCELERATE;
 | 
			
		||||
			// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
 | 
			
		||||
			forward += ((axis * forwardmove) >> 10)*2;
 | 
			
		||||
			forward += ((axis * forwardmove) >> 10);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		axis = JoyAxis(AXISBRAKE, ssplayer);
 | 
			
		||||
| 
						 | 
				
			
			@ -1555,21 +1551,12 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
 | 
			
		|||
 | 
			
		||||
	mousex = mousey = mlooky = 0;
 | 
			
		||||
 | 
			
		||||
	if (forward > MAXPLMOVE)
 | 
			
		||||
		forward = MAXPLMOVE;
 | 
			
		||||
	else if (forward < -MAXPLMOVE)
 | 
			
		||||
		forward = -MAXPLMOVE;
 | 
			
		||||
	cmd->forwardmove += (SINT8)forward;
 | 
			
		||||
 | 
			
		||||
	if (side > MAXPLMOVE)
 | 
			
		||||
		side = MAXPLMOVE;
 | 
			
		||||
	else if (side < -MAXPLMOVE)
 | 
			
		||||
		side = -MAXPLMOVE;
 | 
			
		||||
 | 
			
		||||
	if (forward || side)
 | 
			
		||||
	{
 | 
			
		||||
		cmd->forwardmove = (SINT8)(cmd->forwardmove + forward);
 | 
			
		||||
		cmd->sidemove = (SINT8)(cmd->sidemove + side);
 | 
			
		||||
	}
 | 
			
		||||
	if (cmd->forwardmove > MAXPLMOVE)
 | 
			
		||||
		cmd->forwardmove = MAXPLMOVE;
 | 
			
		||||
	else if (cmd->forwardmove < -MAXPLMOVE)
 | 
			
		||||
		cmd->forwardmove = -MAXPLMOVE;
 | 
			
		||||
 | 
			
		||||
	//{ 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
 | 
			
		||||
| 
						 | 
				
			
			@ -1619,7 +1606,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
	//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)
 | 
			
		||||
		displayplayers[0] = consoleplayer;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -4771,13 +4758,12 @@ char *G_BuildMapTitle(INT32 mapnum)
 | 
			
		|||
 | 
			
		||||
// For demos
 | 
			
		||||
#define ZT_FWD     0x01
 | 
			
		||||
#define ZT_SIDE    0x02
 | 
			
		||||
#define ZT_ANGLE   0x04
 | 
			
		||||
#define ZT_BUTTONS 0x08
 | 
			
		||||
#define ZT_AIMING  0x10
 | 
			
		||||
#define ZT_DRIFT   0x20
 | 
			
		||||
#define ZT_LATENCY 0x40
 | 
			
		||||
#define DEMOMARKER 0x80 // demoend
 | 
			
		||||
#define ZT_ANGLE   0x02
 | 
			
		||||
#define ZT_BUTTONS 0x04
 | 
			
		||||
#define ZT_AIMING  0x08
 | 
			
		||||
#define ZT_DRIFT   0x10
 | 
			
		||||
#define ZT_LATENCY 0x20
 | 
			
		||||
#define DEMOMARKER 0x40 // demoend
 | 
			
		||||
 | 
			
		||||
UINT8 demo_extradata[MAXPLAYERS];
 | 
			
		||||
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++)
 | 
			
		||||
	{
 | 
			
		||||
		dest[i].forwardmove = src[i].forwardmove;
 | 
			
		||||
		dest[i].sidemove = src[i].sidemove;
 | 
			
		||||
		dest[i].angleturn = SHORT(src[i].angleturn);
 | 
			
		||||
		dest[i].aiming = (INT16)SHORT(src[i].aiming);
 | 
			
		||||
		dest[i].buttons = (UINT16)SHORT(src[i].buttons);
 | 
			
		||||
| 
						 | 
				
			
			@ -5149,8 +5134,6 @@ void G_ReadDemoTiccmd(ticcmd_t *cmd, INT32 playernum)
 | 
			
		|||
 | 
			
		||||
	if (ziptic & ZT_FWD)
 | 
			
		||||
		oldcmd[playernum].forwardmove = READSINT8(demo_p);
 | 
			
		||||
	if (ziptic & ZT_SIDE)
 | 
			
		||||
		oldcmd[playernum].sidemove = READSINT8(demo_p);
 | 
			
		||||
	if (ziptic & ZT_ANGLE)
 | 
			
		||||
		oldcmd[playernum].angleturn = READINT16(demo_p);
 | 
			
		||||
	if (ziptic & ZT_BUTTONS)
 | 
			
		||||
| 
						 | 
				
			
			@ -5190,13 +5173,6 @@ void G_WriteDemoTiccmd(ticcmd_t *cmd, INT32 playernum)
 | 
			
		|||
		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)
 | 
			
		||||
	{
 | 
			
		||||
		WRITEINT16(demo_p,cmd->angleturn);
 | 
			
		||||
| 
						 | 
				
			
			@ -5710,8 +5686,6 @@ void G_GhostTicker(void)
 | 
			
		|||
 | 
			
		||||
		if (ziptic & ZT_FWD)
 | 
			
		||||
			g->p++;
 | 
			
		||||
		if (ziptic & ZT_SIDE)
 | 
			
		||||
			g->p++;
 | 
			
		||||
		if (ziptic & ZT_ANGLE)
 | 
			
		||||
			g->p += 2;
 | 
			
		||||
		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 rubberband = K_BotRubberband(player) - FRACUNIT;
 | 
			
		||||
	fixed_t newfrict;
 | 
			
		||||
 | 
			
		||||
	if (rubberband <= 0)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -481,8 +482,14 @@ fixed_t K_BotFrictionRubberband(player_t *player, fixed_t frict)
 | 
			
		|||
		return frict;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 128 is a magic number that felt good in-game
 | 
			
		||||
	return FixedDiv(frict, FRACUNIT + (rubberband / 2));
 | 
			
		||||
	newfrict = 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
 | 
			
		||||
	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)
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -743,7 +751,7 @@ void K_BuildBotTiccmd(player_t *player, ticcmd_t *cmd)
 | 
			
		|||
		if (anglediff > 90)
 | 
			
		||||
		{
 | 
			
		||||
			// Wrong way!
 | 
			
		||||
			cmd->forwardmove = -25;
 | 
			
		||||
			cmd->forwardmove = -MAXPLMOVE;
 | 
			
		||||
			cmd->buttons |= BT_BRAKE;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
| 
						 | 
				
			
			@ -777,7 +785,7 @@ void K_BuildBotTiccmd(player_t *player, ticcmd_t *cmd)
 | 
			
		|||
			cmd->buttons |= BT_ACCELERATE;
 | 
			
		||||
 | 
			
		||||
			// Full speed ahead!
 | 
			
		||||
			cmd->forwardmove = 50;
 | 
			
		||||
			cmd->forwardmove = MAXPLMOVE;
 | 
			
		||||
 | 
			
		||||
			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...
 | 
			
		||||
		fixed_t dist = P_AproxDistance(distx, disty);
 | 
			
		||||
		fixed_t nx = FixedDiv(distx, dist);
 | 
			
		||||
		fixed_t ny = FixedDiv(disty, dist);
 | 
			
		||||
		fixed_t nx, ny;
 | 
			
		||||
 | 
			
		||||
		dist = dist ? dist : 1;
 | 
			
		||||
 | 
			
		||||
		nx = FixedDiv(distx, dist);
 | 
			
		||||
		ny = FixedDiv(disty, dist);
 | 
			
		||||
 | 
			
		||||
		distx = FixedMul(mobj1->radius+mobj2->radius, nx);
 | 
			
		||||
		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->rmomy = mobj1->momy - mobj1->player->cmomy;
 | 
			
		||||
		mobj1->player->kartstuff[k_justbumped] = bumptime;
 | 
			
		||||
		mobj1->player->kartstuff[k_spindash] = 0;
 | 
			
		||||
 | 
			
		||||
		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->rmomy = mobj2->momy - mobj2->player->cmomy;
 | 
			
		||||
		mobj2->player->kartstuff[k_justbumped] = bumptime;
 | 
			
		||||
		mobj2->player->kartstuff[k_spindash] = 0;
 | 
			
		||||
 | 
			
		||||
		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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static tic_t K_GetSpindashChargeTime(player_t *player)
 | 
			
		||||
tic_t K_GetSpindashChargeTime(player_t *player)
 | 
			
		||||
{
 | 
			
		||||
	// more charge time for higher speed
 | 
			
		||||
	// Tails = 2s, Mighty = 3s, Fang = 4s, Metal = 4s
 | 
			
		||||
	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
 | 
			
		||||
	// Tails = +6.25%, Fang = +20.31%, Mighty = +20.31%, Metal = +25%
 | 
			
		||||
| 
						 | 
				
			
			@ -2266,13 +2271,32 @@ UINT16 K_GetKartFlashing(player_t *player)
 | 
			
		|||
	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 p_speed = K_GetKartSpeed(player, true);
 | 
			
		||||
	const fixed_t p_accel = K_GetKartAccel(player);
 | 
			
		||||
	fixed_t newspeed, oldspeed, finalspeed;
 | 
			
		||||
	fixed_t movemul = FRACUNIT;
 | 
			
		||||
	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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2301,25 +2325,20 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	finalspeed = newspeed - oldspeed;
 | 
			
		||||
	movemul = abs(forwardmove * FRACUNIT) / 50;
 | 
			
		||||
 | 
			
		||||
	// forwardmove is:
 | 
			
		||||
	//  50 while accelerating,
 | 
			
		||||
	//   0 with no gas, and
 | 
			
		||||
	// -25 when only braking.
 | 
			
		||||
 | 
			
		||||
	if (player->kartstuff[k_sneakertimer] || player->kartstuff[k_spindashboost])
 | 
			
		||||
		forwardmove = 50;
 | 
			
		||||
 | 
			
		||||
	finalspeed *= forwardmove/25;
 | 
			
		||||
	finalspeed /= 2;
 | 
			
		||||
 | 
			
		||||
	if (forwardmove < 0 && finalspeed > mapobjectscale*2)
 | 
			
		||||
		return finalspeed/2;
 | 
			
		||||
	else if (forwardmove < 0)
 | 
			
		||||
		return -mapobjectscale/2;
 | 
			
		||||
 | 
			
		||||
	if (finalspeed < 0)
 | 
			
		||||
		finalspeed = 0;
 | 
			
		||||
	if (forwardmove >= 0)
 | 
			
		||||
	{
 | 
			
		||||
		finalspeed = FixedMul(finalspeed, movemul);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		finalspeed = FixedMul(-mapobjectscale/2, movemul);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return finalspeed;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -3579,7 +3598,7 @@ void K_DriftDustHandling(mobj_t *spawner)
 | 
			
		|||
			if (spawner->player->speed < 5*spawner->scale)
 | 
			
		||||
				return;
 | 
			
		||||
 | 
			
		||||
			if (spawner->player->cmd.forwardmove < 0)
 | 
			
		||||
			if (K_GetForwardMove(spawner->player) < 0)
 | 
			
		||||
				playerangle += ANGLE_180;
 | 
			
		||||
 | 
			
		||||
			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
 | 
			
		||||
		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);
 | 
			
		||||
	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)
 | 
			
		||||
		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]--;
 | 
			
		||||
 | 
			
		||||
	if (player->kartstuff[k_tiregrease])
 | 
			
		||||
| 
						 | 
				
			
			@ -6895,31 +6914,52 @@ static INT32 K_FlameShieldMax(player_t *player)
 | 
			
		|||
boolean K_PlayerEBrake(player_t *player)
 | 
			
		||||
{
 | 
			
		||||
	return (player->cmd.buttons & BT_EBRAKEMASK) == BT_EBRAKEMASK
 | 
			
		||||
	&& P_IsObjectOnGround(player->mo)
 | 
			
		||||
	&& !player->kartstuff[k_drift]
 | 
			
		||||
	&& !player->kartstuff[k_spinouttimer]
 | 
			
		||||
	&& !player->kartstuff[k_boostcharge]
 | 
			
		||||
	&& !(player->kartstuff[k_spindash] < 0)
 | 
			
		||||
	&& !player->kartstuff[k_justbumped]
 | 
			
		||||
	&& !player->kartstuff[k_spindashboost]
 | 
			
		||||
	&& !player->powers[pw_nocontrol];
 | 
			
		||||
	&& P_IsObjectOnGround(player->mo) == true
 | 
			
		||||
	&& player->kartstuff[k_drift] == 0
 | 
			
		||||
	&& player->kartstuff[k_spinouttimer] == 0
 | 
			
		||||
	&& player->kartstuff[k_justbumped] == 0
 | 
			
		||||
	&& player->kartstuff[k_spindash] >= 0
 | 
			
		||||
	&& player->kartstuff[k_spindashboost] == 0
 | 
			
		||||
	&& player->powers[pw_nocontrol] == 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void K_KartSpindash(player_t *player)
 | 
			
		||||
{
 | 
			
		||||
	const tic_t MAXCHARGETIME = K_GetSpindashChargeTime(player);
 | 
			
		||||
	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_spindash] = 0;
 | 
			
		||||
		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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (K_PlayerEBrake(player) == false)
 | 
			
		||||
	{
 | 
			
		||||
		player->kartstuff[k_spindash] = 0;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (player->speed < 6*mapobjectscale && player->powers[pw_flashing] == 0)
 | 
			
		||||
	{
 | 
			
		||||
		const tic_t MAXCHARGETIME = K_GetSpindashChargeTime(player);
 | 
			
		||||
 | 
			
		||||
		if (cmd->driftturn != 0 && leveltime % 8 == 0)
 | 
			
		||||
			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
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -7670,17 +7687,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
 | 
			
		|||
		if (player->kartstuff[k_tiregrease])
 | 
			
		||||
			player->mo->friction += ((FRACUNIT - prevfriction) / greasetics) * player->kartstuff[k_tiregrease];
 | 
			
		||||
 | 
			
		||||
		// Friction
 | 
			
		||||
		if (!player->kartstuff[k_offroad])
 | 
			
		||||
		{
 | 
			
		||||
			if (player->speed > 0 && cmd->forwardmove == 0 && !(cmd->buttons & BT_BRAKE) && player->mo->friction == 59392)
 | 
			
		||||
				player->mo->friction += 4608;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		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;
 | 
			
		||||
		/*
 | 
			
		||||
		if (K_PlayerEBrake(player) == true)
 | 
			
		||||
			player->mo->friction -= 1024;
 | 
			
		||||
		else if (player->speed > 0 && cmd->forwardmove < 0)
 | 
			
		||||
			player->mo->friction -= 512;
 | 
			
		||||
		*/
 | 
			
		||||
 | 
			
		||||
		// Karma ice physics
 | 
			
		||||
		if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -7698,14 +7710,15 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
 | 
			
		|||
				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 > FRACUNIT)
 | 
			
		||||
				player->mo->friction = FRACUNIT;
 | 
			
		||||
			if (player->mo->friction < 0)
 | 
			
		||||
				player->mo->friction = 0;
 | 
			
		||||
 | 
			
		||||
			player->mo->movefactor = FixedDiv(ORIG_FRICTION, player->mo->friction);
 | 
			
		||||
 | 
			
		||||
			if (player->mo->movefactor < FRACUNIT)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -70,11 +70,14 @@ void K_StripItems(player_t *player);
 | 
			
		|||
void K_StripOther(player_t *player);
 | 
			
		||||
void K_MomentumToFacing(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_GetKartSpeed(player_t *player, boolean doboostpower);
 | 
			
		||||
fixed_t K_GetKartAccel(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);
 | 
			
		||||
void K_MoveKartPlayer(player_t *player, boolean onground);
 | 
			
		||||
void K_CheckSpectateStatus(void);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -767,8 +767,6 @@ static int ticcmd_get(lua_State *L)
 | 
			
		|||
 | 
			
		||||
	if (fastcmp(field,"forwardmove"))
 | 
			
		||||
		lua_pushinteger(L, cmd->forwardmove);
 | 
			
		||||
	else if (fastcmp(field,"sidemove"))
 | 
			
		||||
		lua_pushinteger(L, cmd->sidemove);
 | 
			
		||||
	else if (fastcmp(field,"angleturn"))
 | 
			
		||||
		lua_pushinteger(L, cmd->angleturn);
 | 
			
		||||
	else if (fastcmp(field,"aiming"))
 | 
			
		||||
| 
						 | 
				
			
			@ -797,8 +795,6 @@ static int ticcmd_set(lua_State *L)
 | 
			
		|||
 | 
			
		||||
	if (fastcmp(field,"forwardmove"))
 | 
			
		||||
		cmd->forwardmove = (SINT8)luaL_checkinteger(L, 3);
 | 
			
		||||
	else if (fastcmp(field,"sidemove"))
 | 
			
		||||
		cmd->sidemove = (SINT8)luaL_checkinteger(L, 3);
 | 
			
		||||
	else if (fastcmp(field,"angleturn"))
 | 
			
		||||
		cmd->angleturn = (INT16)luaL_checkinteger(L, 3);
 | 
			
		||||
	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);
 | 
			
		||||
		}
 | 
			
		||||
		else if (abs(player->rmomx) < 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))
 | 
			
		||||
			&& abs(player->rmomy) < FixedMul(STOPSPEED, mo->scale)
 | 
			
		||||
			&& (!(K_GetForwardMove(player) && !(twodlevel || mo->flags2 & MF2_TWOD)) && !(player->pflags & PF_SPINNING))
 | 
			
		||||
#ifdef ESLOPE
 | 
			
		||||
			&& !(player->mo->standingslope && (!(player->mo->standingslope->flags & SL_NOPHYSICS)))// && (abs(player->mo->standingslope->zdelta) >= FRACUNIT/2))
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1476,16 +1476,8 @@ static void P_XYFriction(mobj_t *mo, fixed_t oldx, fixed_t oldy)
 | 
			
		|||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			if (oldx == mo->x && oldy == mo->y) // didn't go anywhere
 | 
			
		||||
			{
 | 
			
		||||
				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->momx = FixedMul(mo->momx, mo->friction);
 | 
			
		||||
			mo->momy = FixedMul(mo->momy, mo->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)
 | 
			
		||||
		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;
 | 
			
		||||
	//}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										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)
 | 
			
		||||
{
 | 
			
		||||
	ticcmd_t *cmd;
 | 
			
		||||
	angle_t movepushangle, movepushsideangle; // Analog
 | 
			
		||||
	angle_t movepushangle; // Analog
 | 
			
		||||
	//INT32 topspeed, acceleration, thrustfactor;
 | 
			
		||||
	fixed_t movepushforward = 0, movepushside = 0;
 | 
			
		||||
	fixed_t movepushforward = 0;
 | 
			
		||||
	angle_t dangle; // replaces old quadrants bits
 | 
			
		||||
	//boolean dangleflip = false; // SRB2kart - toaster
 | 
			
		||||
	//fixed_t normalspd = FixedMul(player->normalspeed, player->mo->scale);
 | 
			
		||||
| 
						 | 
				
			
			@ -4039,14 +4039,6 @@ static void P_3dMovement(player_t *player)
 | 
			
		|||
 | 
			
		||||
	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)
 | 
			
		||||
		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
 | 
			
		||||
| 
						 | 
				
			
			@ -4054,8 +4046,6 @@ static void P_3dMovement(player_t *player)
 | 
			
		|||
	else
 | 
			
		||||
		movepushangle = player->mo->angle;
 | 
			
		||||
 | 
			
		||||
	movepushsideangle = movepushangle-ANGLE_90;
 | 
			
		||||
 | 
			
		||||
	// cmomx/cmomy stands for the conveyor belt speed.
 | 
			
		||||
	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.
 | 
			
		||||
	// 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]));
 | 
			
		||||
| 
						 | 
				
			
			@ -4121,7 +4107,7 @@ static void P_3dMovement(player_t *player)
 | 
			
		|||
	// Forward movement
 | 
			
		||||
	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...
 | 
			
		||||
			movepushforward = FixedMul(movepushforward, player->mo->movefactor);
 | 
			
		||||
| 
						 | 
				
			
			@ -4134,18 +4120,6 @@ static void P_3dMovement(player_t *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)
 | 
			
		||||
		&& 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!
 | 
			
		||||
| 
						 | 
				
			
			@ -7223,8 +7197,7 @@ fixed_t t_cam4_rotate = -42;
 | 
			
		|||
// we then throw that ticcmd garbage in the camera and make it move
 | 
			
		||||
 | 
			
		||||
// redefine this
 | 
			
		||||
static fixed_t forwardmove[2] = {25<<FRACBITS>>16, 50<<FRACBITS>>16};
 | 
			
		||||
static fixed_t sidemove[2] = {2<<FRACBITS>>16, 4<<FRACBITS>>16};
 | 
			
		||||
static fixed_t forwardmove = MAXPLMOVE<<FRACBITS>>16;
 | 
			
		||||
static fixed_t angleturn[3] = {KART_FULLTURN/2, KART_FULLTURN, KART_FULLTURN/4}; // + slow turn
 | 
			
		||||
 | 
			
		||||
static ticcmd_t cameracmd;
 | 
			
		||||
| 
						 | 
				
			
			@ -7239,7 +7212,7 @@ void P_InitCameraCmd(void)
 | 
			
		|||
 | 
			
		||||
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;
 | 
			
		||||
	// these ones used for multiple conditions
 | 
			
		||||
	boolean turnleft, turnright, mouseaiming;
 | 
			
		||||
| 
						 | 
				
			
			@ -7288,7 +7261,7 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
 | 
			
		|||
		turnright = turnright || (axis > 0);
 | 
			
		||||
		turnleft = turnleft || (axis < 0);
 | 
			
		||||
	}
 | 
			
		||||
	forward = side = 0;
 | 
			
		||||
	forward = 0;
 | 
			
		||||
 | 
			
		||||
	// use two stage accelerative turning
 | 
			
		||||
	// on the keyboard and joystick
 | 
			
		||||
| 
						 | 
				
			
			@ -7306,12 +7279,10 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
 | 
			
		|||
	if (turnright && !(turnleft))
 | 
			
		||||
	{
 | 
			
		||||
		cmd->angleturn = (INT16)(cmd->angleturn - (angleturn[tspeed]));
 | 
			
		||||
		side += sidemove[1];
 | 
			
		||||
	}
 | 
			
		||||
	else if (turnleft && !(turnright))
 | 
			
		||||
	{
 | 
			
		||||
		cmd->angleturn = (INT16)(cmd->angleturn + (angleturn[tspeed]));
 | 
			
		||||
		side -= sidemove[1];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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;
 | 
			
		||||
	axis = JoyAxis(AXISAIM, 1);
 | 
			
		||||
	if (InputDown(gc_aimforward, 1) || (usejoystick && axis < 0))
 | 
			
		||||
		forward += forwardmove[1];
 | 
			
		||||
		forward += forwardmove;
 | 
			
		||||
	if (InputDown(gc_aimbackward, 1) || (usejoystick && axis > 0))
 | 
			
		||||
		forward -= forwardmove[1];
 | 
			
		||||
		forward -= forwardmove;
 | 
			
		||||
 | 
			
		||||
	// fire with any button/key
 | 
			
		||||
	axis = JoyAxis(AXISFIRE, 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -7367,21 +7338,12 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
 | 
			
		|||
 | 
			
		||||
	mousex = mousey = mlooky = 0;
 | 
			
		||||
 | 
			
		||||
	if (forward > MAXPLMOVE)
 | 
			
		||||
		forward = MAXPLMOVE;
 | 
			
		||||
	else if (forward < -MAXPLMOVE)
 | 
			
		||||
		forward = -MAXPLMOVE;
 | 
			
		||||
	cmd->forwardmove += (SINT8)forward;
 | 
			
		||||
 | 
			
		||||
	if (side > MAXPLMOVE)
 | 
			
		||||
		side = MAXPLMOVE;
 | 
			
		||||
	else if (side < -MAXPLMOVE)
 | 
			
		||||
		side = -MAXPLMOVE;
 | 
			
		||||
 | 
			
		||||
	if (forward || side)
 | 
			
		||||
	{
 | 
			
		||||
		cmd->forwardmove = (SINT8)(cmd->forwardmove + forward);
 | 
			
		||||
		cmd->sidemove = (SINT8)(cmd->sidemove + side);
 | 
			
		||||
	}
 | 
			
		||||
	if (cmd->forwardmove > MAXPLMOVE)
 | 
			
		||||
		cmd->forwardmove = MAXPLMOVE;
 | 
			
		||||
	else if (cmd->forwardmove < -MAXPLMOVE)
 | 
			
		||||
		cmd->forwardmove = -MAXPLMOVE;
 | 
			
		||||
 | 
			
		||||
	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->momx = cam->momy = cam->momz = 0;
 | 
			
		||||
 | 
			
		||||
	if (cmd->forwardmove != 0)
 | 
			
		||||
	{
 | 
			
		||||
 | 
			
		||||
		thrustangle = cam->angle >> ANGLETOFINESHIFT;
 | 
			
		||||
 | 
			
		||||
		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
 | 
			
		||||
		&& !(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->angle += cmd->sidemove<<ANGLETOFINESHIFT; // 2048 --> ANGLE_MAX
 | 
			
		||||
			//player->mo->tracer->target->health += cmd->sidemove;
 | 
			
		||||
			//player->mo->angle += cmd->sidemove<<ANGLETOFINESHIFT; // 2048 --> ANGLE_MAX
 | 
			
		||||
 | 
			
		||||
			if (player == &players[consoleplayer])
 | 
			
		||||
				localangle[0] = player->mo->angle; // Adjust the local control angle.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue