diff --git a/src/doomdef.h b/src/doomdef.h index be0f81e7..e45a3a0a 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -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 diff --git a/src/g_game.c b/src/g_game.c index 465d4d64..68bcaa76 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -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); diff --git a/src/k_kart.c b/src/k_kart.c index 9cd182af..5bd82cca 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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; diff --git a/src/k_kart.h b/src/k_kart.h index a7050623..dfe7ec39 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -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); diff --git a/src/p_map.c b/src/p_map.c index 43a11341..68c4af74 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -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 diff --git a/src/p_user.c b/src/p_user.c index c1d5678a..6a0598c8 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -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) {