mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-01-31 21:50:48 +00:00
Merge branch 'awayview-fix' into 'next'
Call P_ResetCamera Upon Switching To/From an Away View Camera See merge request STJr/SRB2!2011
This commit is contained in:
commit
31d26c6f55
3 changed files with 42 additions and 11 deletions
|
@ -1278,13 +1278,30 @@ static int player_set(lua_State *L)
|
|||
mobj_t *mo = NULL;
|
||||
if (!lua_isnil(L, 3))
|
||||
mo = *((mobj_t **)luaL_checkudata(L, 3, META_MOBJ));
|
||||
P_SetTarget(&plr->awayviewmobj, mo);
|
||||
if (plr->awayviewmobj != mo) {
|
||||
P_SetTarget(&plr->awayviewmobj, mo);
|
||||
if (plr->awayviewtics) {
|
||||
if (!plr->awayviewmobj)
|
||||
plr->awayviewtics = 0; // can't have a NULL awayviewmobj with awayviewtics!
|
||||
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
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case player_awayviewtics:
|
||||
plr->awayviewtics = (INT32)luaL_checkinteger(L, 3);
|
||||
if (plr->awayviewtics && !plr->awayviewmobj) // awayviewtics must ALWAYS have an awayviewmobj set!!
|
||||
INT32 tics = (INT32)luaL_checkinteger(L, 3);
|
||||
if (tics && !plr->awayviewmobj) // awayviewtics must ALWAYS have an awayviewmobj set!!
|
||||
P_SetTarget(&plr->awayviewmobj, plr->mo); // but since the script might set awayviewmobj immediately AFTER setting awayviewtics, use player mobj as filler for now.
|
||||
if ((tics && !plr->awayviewtics) || (!tics && plr->awayviewtics)) {
|
||||
if (plr == &players[displayplayer])
|
||||
P_ResetCamera(plr, &camera); // reset p1 camera on p1 transitioning to/from zero awayviewtics
|
||||
else if (splitscreen && plr == &players[secondarydisplayplayer])
|
||||
P_ResetCamera(plr, &camera2); // reset p2 camera on p2 transitioning to/from zero awayviewtics
|
||||
}
|
||||
plr->awayviewtics = tics;
|
||||
break;
|
||||
case player_awayviewaiming:
|
||||
plr->awayviewaiming = luaL_checkangle(L, 3);
|
||||
|
|
13
src/p_spec.c
13
src/p_spec.c
|
@ -2657,10 +2657,13 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
|||
// This is not revoked until overwritten; awayviewtics is ignored
|
||||
if (titlemapinaction)
|
||||
titlemapcameraref = altview;
|
||||
else
|
||||
{
|
||||
else if (!mo->player->awayviewtics || mo->player->awayviewmobj != altview) {
|
||||
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];
|
||||
|
@ -2670,8 +2673,10 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
|||
aim <<= 8;
|
||||
if (titlemapinaction)
|
||||
titlemapcameraref->cusval = (angle_t)aim;
|
||||
else
|
||||
else {
|
||||
mo->player->awayviewaiming = (angle_t)aim;
|
||||
mo->player->awayviewtics = line->args[1];
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
17
src/p_user.c
17
src/p_user.c
|
@ -11525,15 +11525,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;
|
||||
|
|
Loading…
Reference in a new issue