-------
Accelcode now factors in forwardmove value rather than a boolean. This is used to enable clutching (or whatever you call it; accel+brake) to give its own result.
Fixed Thwomps killing players rather than crushing them.
Reverted buggy collision experiment from previous version.
This commit is contained in:
ZTsukei 2017-04-19 21:04:44 -04:00
parent 74589aaea8
commit 04432f7789
6 changed files with 37 additions and 33 deletions

View File

@ -143,16 +143,16 @@ extern FILE *logstream;
#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3
#ifdef DEVELOP
#define VERSION 103 // Game version
#define SUBVERSION 9 // more precise version number
#define SUBVERSION 10 // more precise version number
#define VERSIONSTRING "Development EXE"
#define VERSIONSTRINGW "v1.3.09"
#define VERSIONSTRINGW "v1.3.10"
// most interface strings are ignored in development mode.
// we use comprevision and compbranch instead.
#else
#define VERSION 103 // Game version
#define SUBVERSION 9 // more precise version number
#define VERSIONSTRING "DevEXE v1.3.09"
#define VERSIONSTRINGW L"v1.3.09"
#define SUBVERSION 10 // more precise version number
#define VERSIONSTRING "DevEXE v1.3.10"
#define VERSIONSTRINGW L"v1.3.10"
// Hey! If you change this, add 1 to the MODVERSION below!
// Otherwise we can't force updates!
#endif

View File

@ -1055,12 +1055,12 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
if (PLAYER1INPUTDOWN(gc_accelerate) || player->kartstuff[k_mushroomtimer])
{
cmd->buttons |= BT_ACCELERATE;
forward = forwardmove[speed];
forward = forwardmove[1]; // 50
}
if (PLAYER1INPUTDOWN(gc_brake) && !player->kartstuff[k_mushroomtimer])
if (PLAYER1INPUTDOWN(gc_brake))
{
cmd->buttons |= BT_BRAKE;
forward -= forwardmove[speed];
forward -= forwardmove[0]; // 25 - Halved value so clutching is possible
}
// But forward/backward IS used for aiming.
axis = JoyAxis(AXISMOVE);
@ -1400,15 +1400,15 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
*/
// forward with key or button
if (PLAYER2INPUTDOWN(gc_accelerate))
if (PLAYER2INPUTDOWN(gc_accelerate) || player->kartstuff[k_mushroomtimer])
{
cmd->buttons |= BT_ACCELERATE;
forward = forwardmove[speed];
forward = forwardmove[1];
}
if (PLAYER2INPUTDOWN(gc_brake))
{
cmd->buttons |= BT_BRAKE;
forward -= forwardmove[speed];
forward -= forwardmove[0];
}
// forward/backward is used for aiming.
axis = Joy2Axis(AXISMOVE);

View File

@ -939,10 +939,10 @@ void K_SwapMomentum(mobj_t *mobj1, mobj_t *mobj2, boolean bounce)
fixed_t m1w = 15 + mobj1->player->kartweight;
fixed_t m2w = 15 + mobj2->player->kartweight;
newx = FixedMul(mobj1->momy, FixedDiv(m1w*FRACUNIT, m2w*FRACUNIT));
newy = FixedMul(mobj1->momx, FixedDiv(m1w*FRACUNIT, m2w*FRACUNIT));
mobj1->momx = FixedMul(mobj2->momy, FixedDiv(m2w*FRACUNIT, m1w*FRACUNIT));
mobj1->momy = FixedMul(mobj2->momx, FixedDiv(m2w*FRACUNIT, m1w*FRACUNIT));
newx = FixedMul(mobj1->momx, FixedDiv(m1w*FRACUNIT, m2w*FRACUNIT));
newy = FixedMul(mobj1->momy, FixedDiv(m1w*FRACUNIT, m2w*FRACUNIT));
mobj1->momx = FixedMul(mobj2->momx, FixedDiv(m2w*FRACUNIT, m1w*FRACUNIT));
mobj1->momy = FixedMul(mobj2->momy, FixedDiv(m2w*FRACUNIT, m1w*FRACUNIT));
}
else
{
@ -1313,7 +1313,7 @@ static fixed_t K_GetKartAccel(player_t *player)
return FixedMul(k_accel, K_GetKartBoostPower(player, false));
}
fixed_t K_3dKartMovement(player_t *player, boolean onground, boolean forwardmovement)
fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove)
{
fixed_t accelmax = 4000;
fixed_t newspeed, oldspeed, finalspeed;
@ -1327,10 +1327,19 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, boolean forwardmove
newspeed = FixedDiv(FixedDiv(FixedMul(oldspeed, accelmax - p_accel) + FixedMul(p_speed, p_accel), accelmax), ORIG_FRICTION);
finalspeed = newspeed - oldspeed;
if (!forwardmovement && finalspeed > FRACUNIT*2)
return FRACUNIT/8;
else if (!forwardmovement)
return FRACUNIT/2;
// forwardmove is:
// 50 while accelerating,
// 25 while clutching,
// 0 with no gas, and
// -25 when only braking.
finalspeed *= forwardmove/25;
finalspeed /= 2;
if (forwardmove < 0 && finalspeed > FRACUNIT*2)
return finalspeed/2;
else if (forwardmove < 0)
return -FRACUNIT/2;
if (finalspeed < 0)
finalspeed = 0;

View File

@ -26,7 +26,7 @@ void K_DoMushroom(player_t *player, boolean doPFlag);
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue);
void K_MomentumToFacing(player_t *player);
fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower);
fixed_t K_3dKartMovement(player_t *player, boolean onground, boolean forwardmovement);
fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove);
void K_MoveKartPlayer(player_t *player, boolean onground);
void K_LoadKartHUDGraphics(void);

View File

@ -3938,7 +3938,7 @@ static boolean PIT_ChangeSector(mobj_t *thing, boolean realcrush)
killer = P_SpawnMobj(thing->x, thing->y, thing->z, MT_NULL);
killer->threshold = 44; // Special flag for crushing
}
if (thing->player)
if (!thing->player)
P_DamageMobj(thing, killer, killer, 10000);
else
K_SquishPlayer(thing->player, killer); // SRB2kart - Squish instead of kill

View File

@ -4750,14 +4750,12 @@ static void P_3dMovement(player_t *player)
}
}
else if (!analogmove
&& cmd->forwardmove != 0 && !(player->pflags & PF_GLIDING || player->exiting
//&& cmd->forwardmove != 0
&& !(player->pflags & PF_GLIDING || player->exiting
|| (P_PlayerInPain(player) && !onground)))
{
//movepushforward = cmd->forwardmove * (thrustfactor * acceleration);
if (cmd->forwardmove > 0)
movepushforward = K_3dKartMovement(player, onground, true);
else
movepushforward = -(K_3dKartMovement(player, onground, false));
movepushforward = K_3dKartMovement(player, onground, cmd->forwardmove);
// allow very small movement while in air for gameplay
if (!onground)
@ -4815,10 +4813,7 @@ static void P_3dMovement(player_t *player)
controldirection = R_PointToAngle2(0, 0, cmd->forwardmove*FRACUNIT, -cmd->sidemove*FRACUNIT)+movepushangle;
//movepushforward = max(abs(cmd->sidemove), abs(cmd->forwardmove)) * (thrustfactor * acceleration);
if (max(abs(cmd->sidemove), abs(cmd->forwardmove)) > 0)
movepushforward = K_3dKartMovement(player, onground, true);
else
movepushforward = -(K_3dKartMovement(player, onground, false));
movepushforward = K_3dKartMovement(player, onground, max(abs(cmd->sidemove), abs(cmd->forwardmove)));
// allow very small movement while in air for gameplay
if (!onground)
@ -4857,9 +4852,9 @@ static void P_3dMovement(player_t *player)
{
//movepushside = cmd->sidemove * (thrustfactor * acceleration);
if (cmd->sidemove > 0)
movepushside = K_3dKartMovement(player, onground, true);
movepushside = K_3dKartMovement(player, onground, 50);
else
movepushside = -(K_3dKartMovement(player, onground, true));
movepushside = -(K_3dKartMovement(player, onground, 50));
if (!onground)
{