diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index f7e14e78f96a89e490069da4fcadfffdfc59dd7c..f79b1e45e9361d0697852960f9d905f08c3286c9 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -710,6 +710,10 @@ static int player_set(lua_State *L) if (!lua_isnil(L, 3)) mo = *((mobj_t **)luaL_checkudata(L, 3, META_MOBJ)); P_SetTarget(&plr->awayviewmobj, mo); + if (plr == &players[displayplayer]) + P_ResetCamera(plr, &camera); // reset p1 camera on p1 getting an awayviewmobj + else if (splitscreen && plr == &players[secondarydisplayplayer]) + P_ResetCamera(plr, &camera2); // reset p2 camera on p2 getting an awayviewmobj } else if (fastcmp(field,"awayviewtics")) { diff --git a/src/p_spec.c b/src/p_spec.c index aa04a723eb95be92cd6d323742300921c634be9a..8489a227f32be33817bf6f9f3de8ea85f103dd87 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -2669,6 +2669,11 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) { P_SetTarget(&mo->player->awayviewmobj, altview); mo->player->awayviewtics = line->args[1]; + + if (mo->player == &players[displayplayer]) + P_ResetCamera(mo->player, &camera); // reset p1 camera on p1 getting an awayviewmobj + else if (splitscreen && mo->player == &players[secondarydisplayplayer]) + P_ResetCamera(mo->player, &camera2); // reset p2 camera on p2 getting an awayviewmobj } aim = udmf ? altview->spawnpoint->pitch : line->args[2]; diff --git a/src/p_user.c b/src/p_user.c index 0f3282da5582f122c9f383ba9509ea28fa6d458a..42fd0c3104a57f25940107d0b23261eecaec459f 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -11507,15 +11507,24 @@ void P_PlayerThink(player_t *player) if (player->awayviewmobj && P_MobjWasRemoved(player->awayviewmobj)) { P_SetTarget(&player->awayviewmobj, NULL); // remove awayviewmobj asap if invalid - player->awayviewtics = 0; // reset to zero + player->awayviewtics = 1; // reset to one, the below code will immediately set it to zero + } + + if (player->awayviewtics && player->awayviewtics != -1) + { + player->awayviewtics--; + if (!(player->awayviewtics)) + { + if (player == &players[displayplayer]) + P_ResetCamera(player, &camera); // reset p1 camera on p1 running out of awayviewtics + else if (splitscreen && player == &players[secondarydisplayplayer]) + P_ResetCamera(player, &camera2); // reset p2 camera on p2 running out of awayviewtics + } } if (player->flashcount) player->flashcount--; - if (player->awayviewtics && player->awayviewtics != -1) - player->awayviewtics--; - /// \note do this in the cheat code if (player->pflags & PF_NOCLIP) player->mo->flags |= MF_NOCLIP;