Merge branch 'cleanupv2' into sonickart

This commit is contained in:
Sryder 2017-03-07 01:07:55 +00:00
commit cac7171d48
7 changed files with 69 additions and 128 deletions

View File

@ -243,7 +243,6 @@ typedef enum
k_starpostwp, // Temporarily stores player waypoint for... some reason. Used when respawning and finishing.
k_throwdir, // Held dir of controls; 1 = forward, 0 = none, -1 = backward (was "player->heldDir")
k_turndir, // Turn direction for drifting; -1 = Left, 1 = Right, 0 = none
k_camspin, // Used to 180 the camera while a button is held
k_sounds, // Used this to stop and then force music restores as it hits zero
@ -253,7 +252,6 @@ typedef enum
k_spinouttype, // Determines whether to thrust forward or not while spinning out; 0 = move forwards, 1 = stay still
k_drift, // Drifting Left or Right, plus a bigger counter = sharper turn
k_driftangle, // Stores player turn angle for drifting
k_driftcharge, // Charge your drift so you can release a burst of speed
k_driftboost, // Boost you get from drifting
k_boostcharge, // Charge-up for boosting at the start of the race, or when Lakitu drops you

View File

@ -1249,12 +1249,12 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
//{ SRB2kart - Drift support
axis = JoyAxis(AXISTURN);
if (turnleft || axis < 0) // Drifting to the left
if (cmd->angleturn > 0) // Drifting to the left
cmd->buttons |= BT_DRIFTLEFT;
else
cmd->buttons &= ~BT_DRIFTLEFT;
if (turnright || axis > 0) // Drifting to the right
if (cmd->angleturn < 0) // Drifting to the right
cmd->buttons |= BT_DRIFTRIGHT;
else
cmd->buttons &= ~BT_DRIFTRIGHT;
@ -1267,17 +1267,16 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
}
else
{
cmd->angleturn = K_GetKartTurnValue(player, cmd);
//cmd->angleturn = FixedMul(cmd->angleturn, FixedDiv(80 - (players[consoleplayer].speed >> 16), 80));
//if (players[consoleplayer].kartstuff[k_startimer]
// || players[consoleplayer].kartstuff[k_mushroomtimer]
// || players[consoleplayer].kartstuff[k_growshrinktimer] > 0)
// cmd->angleturn = FixedMul(cmd->angleturn, FixedDiv(5*FRACUNIT, 4*FRACUNIT));
cmd->angleturn = K_GetKartTurnValue(player, cmd->angleturn);
if (cmd->angleturn < 0)
cmd->angleturn = (INT16)(cmd->angleturn + K_GetKartDriftValue(player, 1));
else if (cmd->angleturn > 0)
cmd->angleturn = (INT16)(cmd->angleturn + K_GetKartDriftValue(player, -1));
else
cmd->angleturn = (INT16)(cmd->angleturn + K_GetKartDriftValue(player, 0));
// SRB2kart - no additional angle if not moving
if (!(player->mo && player->speed == 0))
if ((player->mo && player->speed > 0) || (leveltime > 140 && (cmd->buttons & BT_ACCELERATE) && (cmd->buttons & BT_BRAKE)))
localangle += (cmd->angleturn<<16);
cmd->angleturn = (INT16)(localangle >> 16);
@ -1581,21 +1580,15 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
//{ SRB2kart - Drift support
axis = Joy2Axis(AXISTURN);
if (turnleft || axis < 0) // Drifting to the left
if (cmd->angleturn > 0) // Drifting to the left
cmd->buttons |= BT_DRIFTLEFT;
else
cmd->buttons &= ~BT_DRIFTLEFT;
if (turnright || axis > 0) // Drifting to the right
if (cmd->angleturn < 0) // Drifting to the right
cmd->buttons |= BT_DRIFTRIGHT;
else
cmd->buttons &= ~BT_DRIFTRIGHT;
if (turnright && turnleft)
{
cmd->buttons &= ~BT_DRIFTLEFT;
cmd->buttons &= ~BT_DRIFTRIGHT;
}
//}
if (player->bot == 1) {
@ -1618,6 +1611,13 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
}
else
{
cmd->angleturn = K_GetKartTurnValue(player, cmd->angleturn);
if (cmd->angleturn < 0)
cmd->angleturn = (INT16)(cmd->angleturn + K_GetKartDriftValue(player, 1));
else if (cmd->angleturn > 0)
cmd->angleturn = (INT16)(cmd->angleturn + K_GetKartDriftValue(player, -1));
else
cmd->angleturn = (INT16)(cmd->angleturn + K_GetKartDriftValue(player, 0));
localangle2 += (cmd->angleturn<<16);
cmd->angleturn = (INT16)(localangle2 >> 16);
}

View File

@ -886,7 +886,7 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
{
// This spawns the drift sparks when k_driftcharge hits 26 + player->kartspeed. Its own AI handles life/death and color
if ((player->kartstuff[k_drift] >= 1 || player->kartstuff[k_drift] <= -1)
if (player->kartstuff[k_drift] != 0
&& player->kartstuff[k_driftcharge] == (26 + player->kartspeed))
P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFT)->target = player->mo;
@ -1365,7 +1365,7 @@ void K_SpawnDriftTrail(player_t *player)
else
ground = player->mo->floorz;
if (player->kartstuff[k_drift])
if (player->kartstuff[k_drift] != 0)
travelangle = player->mo->angle;
else
travelangle = R_PointToAngle2(0, 0, player->rmomx, player->rmomy);
@ -1385,7 +1385,7 @@ void K_SpawnDriftTrail(player_t *player)
ground -= FixedMul(mobjinfo[MT_MUSHROOMTRAIL].height, player->mo->scale);
}
#endif
if ((player->kartstuff[k_drift] >= 1 || player->kartstuff[k_drift] <= -1) && player->kartstuff[k_mushroomtimer] == 0)
if (player->kartstuff[k_drift] != 0 && player->kartstuff[k_mushroomtimer] == 0)
flame = P_SpawnMobj(newx, newy, ground, MT_DRIFTSMOKE);
else
flame = P_SpawnMobj(newx, newy, ground, MT_MUSHROOMTRAIL);
@ -1717,60 +1717,62 @@ static void K_DoLightning(player_t *player, boolean bluelightning)
player->kartstuff[k_sounds] = 50;
}
fixed_t K_GetKartTurnValue(player_t *player, ticcmd_t *cmd)
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
{
fixed_t p_angle = cmd->angleturn;
fixed_t p_maxspeed = FixedMul(K_GetKartSpeed(player, false), 3*FRACUNIT);
fixed_t adjustangle = FixedDiv((p_maxspeed>>16) - (player->speed>>16), (p_maxspeed>>16) + player->kartweight);
p_angle = FixedMul(p_angle, adjustangle); // Weight has a small effect on turning
turnvalue = FixedMul(turnvalue, adjustangle); // Weight has a small effect on turning
if (player->kartstuff[k_startimer] || player->kartstuff[k_mushroomtimer] || player->kartstuff[k_growshrinktimer] > 0)
p_angle = FixedMul(p_angle, FixedDiv(5*FRACUNIT, 4*FRACUNIT));
turnvalue = FixedMul(turnvalue, FixedDiv(5*FRACUNIT, 4*FRACUNIT));
player->kartstuff[k_driftangle] = p_angle;
return p_angle;
return turnvalue;
}
static fixed_t K_GetKartDriftValue(player_t *player, fixed_t turntype)
// turndir is the direction the controls are telling us to turn, 1 if turning right and -1 if turning left
INT16 K_GetKartDriftValue(player_t *player, SINT8 turndir)
{
fixed_t driftangle = FRACUNIT;
fixed_t p_angle = player->kartstuff[k_driftangle];
fixed_t driftweight = player->kartweight*10;
UINT8 turntype = 3;
if (player->kartstuff[k_drift] <= -1)
p_angle *= -1;
// If they aren't drifting or on the ground this doesn't apply
if (player->kartstuff[k_drift] == 0 || !P_IsObjectOnGround(player->mo))
return 0;
if ((player->kartstuff[k_drift] > 0 && turndir == 1) || (player->kartstuff[k_drift] < 0 && turndir == -1))
{
turntype = 2;
}
else if ((player->kartstuff[k_drift] > 0 && turndir == -1) || (player->kartstuff[k_drift] < 0 && turndir == 1))
{
turntype = 1;
}
switch (turntype)
{
case 1:
driftangle = (p_angle + 200 + driftweight)*FRACUNIT; // Drifting outward
driftangle = 200 + driftweight; // Drifting outward
break;
case 2:
driftangle = (p_angle + 700 - driftweight)*FRACUNIT; // Drifting inward
driftangle = 700 - driftweight; // Drifting inward
break;
case 3:
driftangle = (450) *FRACUNIT; // Drifting with no input
driftangle = 450; // Drifting with no input
break;
}
return driftangle;
return driftangle*(player->kartstuff[k_drift] / abs(player->kartstuff[k_drift]));
}
static void K_KartDrift(player_t *player, ticcmd_t *cmd, boolean onground)
static void K_KartDrift(player_t *player, boolean onground)
{
fixed_t dsone = 26 + player->kartspeed;
fixed_t dstwo = 52 + player->kartspeed*2;
// Drifting is actually straffing + automatic turning.
// Holding the Jump button will enable drifting.
if (cmd->buttons & BT_DRIFTRIGHT)
player->kartstuff[k_turndir] = 1;
else if (cmd->buttons & BT_DRIFTLEFT)
player->kartstuff[k_turndir] = -1;
else
player->kartstuff[k_turndir] = 0;
// Drift Release (Moved here so you can't "chain" drifts)
if ((player->kartstuff[k_drift] == 0)
@ -1803,10 +1805,10 @@ static void K_KartDrift(player_t *player, ticcmd_t *cmd, boolean onground)
}
// Drifting: left or right?
if (player->kartstuff[k_turndir] == 1 && player->speed > (10<<16) && player->kartstuff[k_jmp] == 1
if ((player->cmd.buttons & BT_DRIFTLEFT) && player->speed > (10<<16) && player->kartstuff[k_jmp] == 1
&& player->kartstuff[k_drift] < 3 && player->kartstuff[k_drift] > -1) // && player->kartstuff[k_drift] != 1)
player->kartstuff[k_drift] = 1;
else if (player->kartstuff[k_turndir] == -1 && player->speed > (10<<16) && player->kartstuff[k_jmp] == 1
else if ((player->cmd.buttons & BT_DRIFTRIGHT) && player->speed > (10<<16) && player->kartstuff[k_jmp] == 1
&& player->kartstuff[k_drift] > -3 && player->kartstuff[k_drift] < 1) // && player->kartstuff[k_drift] != -1)
player->kartstuff[k_drift] = -1;
else if (player->kartstuff[k_jmp] == 0) // || player->kartstuff[k_turndir] == 0)
@ -1818,64 +1820,17 @@ static void K_KartDrift(player_t *player, ticcmd_t *cmd, boolean onground)
{
player->kartstuff[k_driftcharge]++;
if (player->kartstuff[k_drift] >= 1) // Drifting to the Right
if (player->kartstuff[k_drift] >= 1) // Drifting to the left
{
player->kartstuff[k_drift]++;
if (player->kartstuff[k_drift] > 3)
player->kartstuff[k_drift] = 3;
// Left = +450 Right = -450
// Player 1
if (player == &players[consoleplayer])
{
if (player->kartstuff[k_turndir] == -1) // Turning Left while Drifting Right
localangle -= K_GetKartDriftValue(player, 1);
else if (player->kartstuff[k_turndir] == 1) // Turning Right while Drifting Right
localangle -= K_GetKartDriftValue(player, 2);
else // No Direction while Drifting Right
localangle -= K_GetKartDriftValue(player, 3);
}
// Player 2
if (splitscreen && player == &players[secondarydisplayplayer])
{
if (player->kartstuff[k_turndir] == -1) // Turning Left while Drifting Right
localangle2 -= K_GetKartDriftValue(player, 1);
else if (player->kartstuff[k_turndir] == 1) // Turning Right while Drifting Right
localangle2 -= K_GetKartDriftValue(player, 2);
else // No Direction while Drifting Right
localangle2 -= K_GetKartDriftValue(player, 3);
}
}
else if (player->kartstuff[k_drift] <= -1) // Drifting to the Left
else if (player->kartstuff[k_drift] <= -1) // Drifting to the right
{
player->kartstuff[k_drift]--;
if (player->kartstuff[k_drift] < -3)
player->kartstuff[k_drift] = -3;
// Left = +450 Right = -450
// Player 1
if (player == &players[consoleplayer])
{
if (player->kartstuff[k_turndir] == 1) // Turning Right while Drifting Left
localangle += K_GetKartDriftValue(player, 1);
else if (player->kartstuff[k_turndir] == -1) // Turning Left while Drifting Left
localangle += K_GetKartDriftValue(player, 2);
else // No Direction while Drifting Left
localangle += K_GetKartDriftValue(player, 3);
}
// Player 2
// Player 2
if (splitscreen && player == &players[secondarydisplayplayer])
{
if (player->kartstuff[k_turndir] == 1) // Turning Right while Drifting Left
localangle2 += K_GetKartDriftValue(player, 1);
else if (player->kartstuff[k_turndir] == -1) // Turning Left while Drifting Left
localangle2 += K_GetKartDriftValue(player, 2);
else // No Direction while Drifting Left
localangle2 += K_GetKartDriftValue(player, 3);
}
}
}
@ -2001,8 +1956,9 @@ static boolean K_CheckForHoldItem(player_t *player)
//
// K_MoveKartPlayer
//
void K_MoveKartPlayer(player_t *player, ticcmd_t *cmd, boolean onground)
void K_MoveKartPlayer(player_t *player, boolean onground)
{
ticcmd_t *cmd = &player->cmd;
boolean ATTACK_IS_DOWN = ((cmd->buttons & BT_ATTACK) && !(player->pflags & PF_ATTACKDOWN));
boolean HOLDING_ITEM = K_CheckForHoldItem(player);
boolean NO_BOO = (player->kartstuff[k_boostolentimer] == 0 && player->kartstuff[k_bootaketimer] == 0);
@ -2495,29 +2451,16 @@ void K_MoveKartPlayer(player_t *player, ticcmd_t *cmd, boolean onground)
if (splitscreen && player == &players[secondarydisplayplayer])
CV_SetValue(&cv_cam2_dist, 190);
K_KartDrift(player, cmd, onground);
K_KartDrift(player, onground);
// Quick Turning
// You can't turn your kart when you're not moving.
// So now it's time to burn some rubber!
if (player->speed < 2 && leveltime > 140 && cmd->buttons & BT_ACCELERATE && cmd->buttons & BT_BRAKE)
if (player->speed < 2 && leveltime > 140 && cmd->buttons & BT_ACCELERATE && cmd->buttons & BT_BRAKE
&& ((cmd->buttons & BT_DRIFTLEFT) || (cmd->buttons & BT_DRIFTRIGHT)))
{
if (player->kartstuff[k_turndir])
player->kartstuff[k_drift] = 1;
if (leveltime % 20 == 0 && player->kartstuff[k_drift])
if (leveltime % 20 == 0)
S_StartSound(player->mo, sfx_mkslid);
if (player == &players[consoleplayer] && player->kartstuff[k_turndir] == 1)
localangle -= 800*FRACUNIT;
if (player == &players[consoleplayer] && player->kartstuff[k_turndir] == -1)
localangle += 800*FRACUNIT;
if (splitscreen && player == &players[secondarydisplayplayer]
&& player->kartstuff[k_turndir] == 1)
localangle2 -= 800*FRACUNIT;
if (splitscreen && player == &players[secondarydisplayplayer]
&& player->kartstuff[k_turndir] == -1)
localangle2 += 800*FRACUNIT;
}
// Squishing

View File

@ -22,10 +22,11 @@ void K_ExplodePlayer(player_t *player, mobj_t *source);
void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit);
void K_SpawnDriftTrail(player_t *player);
void K_DoMushroom(player_t *player, boolean doPFlag);
fixed_t K_GetKartTurnValue(player_t *player, ticcmd_t *cmd);
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue);
INT16 K_GetKartDriftValue(player_t *player, SINT8 turndir);
fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower);
fixed_t K_3dKartMovement(player_t *player, boolean onground, boolean forwardmovement);
void K_MoveKartPlayer(player_t *player, ticcmd_t *cmd, boolean onground);
void K_MoveKartPlayer(player_t *player, boolean onground);
void K_LoadKartHUDGraphics(void);
void K_drawKartHUD(void);

View File

@ -2866,13 +2866,13 @@ static void P_PlayerZMovement(mobj_t *mo)
P_SetPlayerMobjState(mo, S_KART_STND);
}
// Drifting Left - S_KART_DRIFT_L1
else if (mo->player->kartstuff[k_drift] < 0 && P_IsObjectOnGround(mo))
else if (mo->player->kartstuff[k_drift] > 0 && P_IsObjectOnGround(mo))
{
if (!(mo->state == &states[S_KART_DRIFT_L1] || mo->state == &states[S_KART_DRIFT_L2]))
P_SetPlayerMobjState(mo, S_KART_DRIFT_L1);
}
// Drifting Right - S_KART_DRIFT_R1
else if (mo->player->kartstuff[k_drift] > 0 && P_IsObjectOnGround(mo))
else if (mo->player->kartstuff[k_drift] < 0 && P_IsObjectOnGround(mo))
{
if (!(mo->state == &states[S_KART_DRIFT_R1] || mo->state == &states[S_KART_DRIFT_R2]))
P_SetPlayerMobjState(mo, S_KART_DRIFT_R1);

View File

@ -4590,11 +4590,11 @@ static void P_3dMovement(player_t *player)
}
else
{
if (player->kartstuff[k_drift] >= 1)
if (player->kartstuff[k_drift] < 0)
{
movepushangle = player->mo->angle+ANGLE_45;
}
else if (player->kartstuff[k_drift] <= -1)
else if (player->kartstuff[k_drift] > 0)
{
movepushangle = player->mo->angle-ANGLE_45;
}
@ -6655,13 +6655,13 @@ static void P_MovePlayer(player_t *player)
P_SetPlayerMobjState(player->mo, S_KART_STND);
}
// Drifting Left - S_KART_DRIFT_L1
else if (player->kartstuff[k_drift] < 0 && onground)
else if (player->kartstuff[k_drift] > 0 && onground)
{
if (!(player->mo->state == &states[S_KART_DRIFT_L1] || player->mo->state == &states[S_KART_DRIFT_L2]))
P_SetPlayerMobjState(player->mo, S_KART_DRIFT_L1);
}
// Drifting Right - S_KART_DRIFT_R1
else if (player->kartstuff[k_drift] > 0 && onground)
else if (player->kartstuff[k_drift] < 0 && onground)
{
if (!(player->mo->state == &states[S_KART_DRIFT_R1] || player->mo->state == &states[S_KART_DRIFT_R2]))
P_SetPlayerMobjState(player->mo, S_KART_DRIFT_R1);
@ -6725,8 +6725,7 @@ static void P_MovePlayer(player_t *player)
{
// Start looping the sound now.
if (leveltime % 50 == 0 && onground
&& ((player->kartstuff[k_drift] >= 1 && player->kartstuff[k_drift] <= 3)
|| (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_drift] >= -3)))
&& player->kartstuff[k_drift] != 0)
S_StartSound(player->mo, sfx_mkdrft);
// Leveltime being 50 might take a while at times. We'll start it up once, isntantly.
else if ((player->kartstuff[k_drift] >= 1 || player->kartstuff[k_drift] <= -1) && !S_SoundPlaying(player->mo, sfx_mkdrft) && onground)
@ -6738,7 +6737,7 @@ static void P_MovePlayer(player_t *player)
}
}
K_MoveKartPlayer(player, cmd, onground);
K_MoveKartPlayer(player, onground);
//}
@ -6990,7 +6989,7 @@ static void P_MovePlayer(player_t *player)
////////////////////////////
// SRB2kart - Drifting smoke and fire
if ((player->kartstuff[k_drift] || player->kartstuff[k_mushroomtimer] > 0) && onground && (leveltime & 1))
if ((player->kartstuff[k_drift] != 0 || player->kartstuff[k_mushroomtimer] > 0) && onground && (leveltime & 1))
K_SpawnDriftTrail(player);
/* // SRB2kart - nadah

View File

@ -102,4 +102,4 @@ ifndef NOHW
endif
# name of the exefile
EXENAME?=lsdl2srb2
EXENAME?=lsdl2srb2kart