From e8a4d7b7b8dd5717edbf47b842b5408d36b72566 Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Tue, 5 Apr 2016 20:56:48 +0100 Subject: [PATCH 1/4] Fix replay camera not being turnable when climbing, sliding ...and several other things. If in analog mode, this does not apply (also analog mode replay camera no longer borks) --- src/g_game.c | 9 +++++---- src/p_local.h | 1 + src/p_map.c | 33 ++++++++++++++++++++------------ src/p_spec.c | 46 +++++++++++++++++++++++++-------------------- src/p_user.c | 52 +++++++++++++++++++++++++++++++-------------------- 5 files changed, 85 insertions(+), 56 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index 9578cbf8f..b89d2c337 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1009,10 +1009,10 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics) } if (cv_analog.value || twodlevel || (player->mo && (player->mo->flags2 & MF2_TWOD)) - || player->climbing + || (!demoplayback && (player->climbing || (player->pflags & PF_NIGHTSMODE) || (player->pflags & PF_SLIDING) - || (player->pflags & PF_FORCESTRAFE)) // Analog + || (player->pflags & PF_FORCESTRAFE)))) // Analog forcestrafe = true; if (forcestrafe) // Analog { @@ -1184,8 +1184,9 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics) if (!mouseaiming && cv_mousemove.value) forward += mousey; - if (cv_analog.value || player->climbing - || (player->pflags & PF_SLIDING)) // Analog for mouse + if (cv_analog.value || + (!demoplayback && (player->climbing + || (player->pflags & PF_SLIDING)))) // Analog for mouse side += mousex*2; else cmd->angleturn = (INT16)(cmd->angleturn - (mousex*8)); diff --git a/src/p_local.h b/src/p_local.h index d035925c8..562b8dd41 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -169,6 +169,7 @@ void P_NukeEnemies(mobj_t *inflictor, mobj_t *source, fixed_t radius); void P_HomingAttack(mobj_t *source, mobj_t *enemy); /// \todo doesn't belong in p_user boolean P_SuperReady(player_t *player); void P_DoJump(player_t *player, boolean soundandstate); +boolean P_AnalogMove(player_t *player); boolean P_TransferToNextMare(player_t *player); UINT8 P_FindLowestMare(void); void P_FindEmerald(void); diff --git a/src/p_map.c b/src/p_map.c index 669f1ad38..304f286f2 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -189,10 +189,13 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) { object->angle = spring->angle; - if (object->player == &players[consoleplayer]) - localangle = spring->angle; - else if (object->player == &players[secondarydisplayplayer]) - localangle2 = spring->angle; + if (!demoplayback || P_AnalogMove(object->player)) + { + if (object->player == &players[consoleplayer]) + localangle = spring->angle; + else if (object->player == &players[secondarydisplayplayer]) + localangle2 = spring->angle; + } } pflags = object->player->pflags & (PF_JUMPED|PF_SPINNING|PF_THOKKED); // I still need these. @@ -662,10 +665,13 @@ static boolean PIT_CheckThing(mobj_t *thing) thing->angle = tmthing->angle; - if (thing->player == &players[consoleplayer]) - localangle = thing->angle; - else if (thing->player == &players[secondarydisplayplayer]) - localangle2 = thing->angle; + if (!demoplayback || P_AnalogMove(thing->player)) + { + if (thing->player == &players[consoleplayer]) + localangle = thing->angle; + else if (thing->player == &players[secondarydisplayplayer]) + localangle2 = thing->angle; + } return true; } @@ -2641,10 +2647,13 @@ isblocking: && P_IsClimbingValid(slidemo->player, climbangle)) { slidemo->angle = climbangle; - if (slidemo->player == &players[consoleplayer]) - localangle = slidemo->angle; - else if (slidemo->player == &players[secondarydisplayplayer]) - localangle2 = slidemo->angle; + if (!demoplayback || P_AnalogMove(slidemo->player)) + { + if (slidemo->player == &players[consoleplayer]) + localangle = slidemo->angle; + else if (slidemo->player == &players[secondarydisplayplayer]) + localangle2 = slidemo->angle; + } if (!slidemo->player->climbing) { diff --git a/src/p_spec.c b/src/p_spec.c index 76c3484c6..86a25170c 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -3669,10 +3669,13 @@ DoneSection2: player->mo->angle = lineangle; - if (player == &players[consoleplayer]) - localangle = player->mo->angle; - else if (player == &players[secondarydisplayplayer]) - localangle2 = player->mo->angle; + if (!demoplayback || P_AnalogMove(player)) + { + if (player == &players[consoleplayer]) + localangle = player->mo->angle; + else if (player == &players[secondarydisplayplayer]) + localangle2 = player->mo->angle; + } if (!(lines[i].flags & ML_EFFECT4)) { @@ -7497,24 +7500,27 @@ void T_Pusher(pusher_t *p) P_SetPlayerMobjState (thing, thing->info->painstate); // Whee! thing->angle = R_PointToAngle2 (0, 0, xspeed<<(FRACBITS-PUSH_FACTOR), yspeed<<(FRACBITS-PUSH_FACTOR)); - if (thing->player == &players[consoleplayer]) + if (!demoplayback || P_AnalogMove(thing->player)) { - if (thing->angle - localangle > ANGLE_180) - localangle -= (localangle - thing->angle) / 8; - else - localangle += (thing->angle - localangle) / 8; + if (thing->player == &players[consoleplayer]) + { + if (thing->angle - localangle > ANGLE_180) + localangle -= (localangle - thing->angle) / 8; + else + localangle += (thing->angle - localangle) / 8; + } + else if (thing->player == &players[secondarydisplayplayer]) + { + if (thing->angle - localangle2 > ANGLE_180) + localangle2 -= (localangle2 - thing->angle) / 8; + else + localangle2 += (thing->angle - localangle2) / 8; + } + /*if (thing->player == &players[consoleplayer]) + localangle = thing->angle; + else if (thing->player == &players[secondarydisplayplayer]) + localangle2 = thing->angle;*/ } - else if (thing->player == &players[secondarydisplayplayer]) - { - if (thing->angle - localangle2 > ANGLE_180) - localangle2 -= (localangle2 - thing->angle) / 8; - else - localangle2 += (thing->angle - localangle2) / 8; - } - /*if (thing->player == &players[consoleplayer]) - localangle = thing->angle; - else if (thing->player == &players[secondarydisplayplayer]) - localangle2 = thing->angle;*/ } if (p->exclusive) diff --git a/src/p_user.c b/src/p_user.c index 45dd47639..87075460d 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2705,10 +2705,13 @@ static void P_DoClimbing(player_t *player) P_InstaThrust(player->mo, player->mo->angle, FixedMul(-4*FRACUNIT, player->mo->scale)); } - if (player == &players[consoleplayer]) - localangle = player->mo->angle; - else if (player == &players[secondarydisplayplayer]) - localangle2 = player->mo->angle; + if (!demoplayback || P_AnalogMove(player)) + { + if (player == &players[consoleplayer]) + localangle = player->mo->angle; + else if (player == &players[secondarydisplayplayer]) + localangle2 = player->mo->angle; + } if (player->climbing == 0) P_SetPlayerMobjState(player->mo, S_PLAY_ATK1); @@ -3566,10 +3569,13 @@ void P_DoJump(player_t *player, boolean soundandstate) player->mo->angle = player->mo->angle - ANGLE_180; // Turn around from the wall you were climbing. - if (player == &players[consoleplayer]) - localangle = player->mo->angle; // Adjust the local control angle. - else if (player == &players[secondarydisplayplayer]) - localangle2 = player->mo->angle; + if (!demoplayback || P_AnalogMove(player)) + { + if (player == &players[consoleplayer]) + localangle = player->mo->angle; // Adjust the local control angle. + else if (player == &players[secondarydisplayplayer]) + localangle2 = player->mo->angle; + } player->climbing = 0; // Stop climbing, duh! P_InstaThrust(player->mo, player->mo->angle, FixedMul(6*FRACUNIT, player->mo->scale)); // Jump off the wall. @@ -4219,7 +4225,7 @@ static void P_DoJumpStuff(player_t *player, ticcmd_t *cmd) } } -static boolean P_AnalogMove(player_t *player) +boolean P_AnalogMove(player_t *player) { return player->pflags & PF_ANALOGMODE; } @@ -7543,7 +7549,7 @@ void P_HomingAttack(mobj_t *source, mobj_t *enemy) // Home in on your target // change angle source->angle = R_PointToAngle2(source->x, source->y, enemy->x, enemy->y); - if (source->player) + if (source->player && (!demoplayback || P_AnalogMove(player))) { if (source->player == &players[consoleplayer]) localangle = source->angle; @@ -7945,6 +7951,8 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall angle = R_PointToAngle2(player->mo->x, player->mo->y, player->mo->target->x, player->mo->target->y); } } + else if (P_AnalogMove(player)) // Analog + angle = R_PointToAngle2(thiscam->x, thiscam->y, mo->x, mo->y); else if (demoplayback) { angle = focusangle; @@ -7957,8 +7965,6 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall localangle -= abs((signed)(focusangle - localangle))>>5; } } - else if (P_AnalogMove(player)) // Analog - angle = R_PointToAngle2(thiscam->x, thiscam->y, mo->x, mo->y); else angle = focusangle + FixedAngle(camrotate*FRACUNIT); @@ -9330,10 +9336,13 @@ void P_PlayerAfterThink(player_t *player) { player->mo->angle = player->mo->tracer->angle; - if (player == &players[consoleplayer]) - localangle = player->mo->angle; - else if (player == &players[secondarydisplayplayer]) - localangle2 = player->mo->angle; + if (!demoplayback || P_AnalogMove(player)) + { + if (player == &players[consoleplayer]) + localangle = player->mo->angle; + else if (player == &players[secondarydisplayplayer]) + localangle2 = player->mo->angle; + } } if (P_AproxDistance(player->mo->x - player->mo->tracer->x, player->mo->y - player->mo->tracer->y) > player->mo->radius) @@ -9400,10 +9409,13 @@ void P_PlayerAfterThink(player_t *player) player->mo->tracer->target->health += cmd->sidemove; player->mo->angle += cmd->sidemove< ANGLE_MAX - if (player == &players[consoleplayer]) - localangle = player->mo->angle; // Adjust the local control angle. - else if (player == &players[secondarydisplayplayer]) - localangle2 = player->mo->angle; + if (!demoplayback || P_AnalogMove(player)) + { + if (player == &players[consoleplayer]) + localangle = player->mo->angle; // Adjust the local control angle. + else if (player == &players[secondarydisplayplayer]) + localangle2 = player->mo->angle; + } } } From 29f030154026b76c9e270ef1b6948e1edee11ce0 Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Tue, 5 Apr 2016 21:21:45 +0100 Subject: [PATCH 2/4] Whoops --- src/p_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index 87075460d..73702517c 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -7549,7 +7549,7 @@ void P_HomingAttack(mobj_t *source, mobj_t *enemy) // Home in on your target // change angle source->angle = R_PointToAngle2(source->x, source->y, enemy->x, enemy->y); - if (source->player && (!demoplayback || P_AnalogMove(player))) + if (source->player && (!demoplayback || P_AnalogMove(source->player))) { if (source->player == &players[consoleplayer]) localangle = source->angle; From 1c81f192d86d232e26b9daef8b8ee94d6d0ece41 Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Fri, 6 May 2016 21:52:00 -0700 Subject: [PATCH 3/4] it isn't settled until you add in the deprecation warning --- src/lua_mathlib.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lua_mathlib.c b/src/lua_mathlib.c index 8ae432fc5..b98c51529 100644 --- a/src/lua_mathlib.c +++ b/src/lua_mathlib.c @@ -85,11 +85,16 @@ static int lib_finetangent(lua_State *L) boolean newtan = lua_optboolean(L, 2); if (newtan) + { // HACK: add ANGLE_90 to make tan() in Lua start at 0 like it should // use & 4095 instead of & FINEMASK (8191), so it doesn't go out of the array's bounds lua_pushfixed(L, FINETANGENT(((luaL_checkangle(L, 1)+ANGLE_90)>>ANGLETOFINESHIFT) & 4095)); + } else + { + LUA_Deprecated(L, "tan(angle)", "tan(angle, true)"); lua_pushfixed(L, FINETANGENT((luaL_checkangle(L, 1)>>ANGLETOFINESHIFT) & 4095)); + } return 1; } From fe20a35aee95b62f256abdd0ad5bf6caba9216f4 Mon Sep 17 00:00:00 2001 From: Nipples the Enchilada Date: Sat, 7 May 2016 04:51:54 -0400 Subject: [PATCH 4/4] Disable camera rotate buttons if you aren't viewing yourself They don't affect what you're viewing anyway and cause cam_rotate to get messed up. --- src/p_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index 4aca886b8..9fee0fc36 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -7993,7 +7993,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall thiscam->angle = angle; } - if (!objectplacing && !(twodlevel || (mo->flags2 & MF2_TWOD)) && !(player->pflags & PF_NIGHTSMODE)) + if (!objectplacing && !(twodlevel || (mo->flags2 & MF2_TWOD)) && !(player->pflags & PF_NIGHTSMODE) && displayplayer == consoleplayer) { #ifdef REDSANALOG if ((player->cmd.buttons & (BT_CAMLEFT|BT_CAMRIGHT)) == (BT_CAMLEFT|BT_CAMRIGHT)); else