- changed most places where a player index is calculated by subtracting the player array's base access.

This commit is contained in:
Christoph Oelckers 2019-02-01 17:31:11 +01:00
parent d358e401ee
commit 202f3d7d80
10 changed files with 27 additions and 25 deletions

View file

@ -270,7 +270,7 @@ int FParser::T_GetPlayerNum(const svalue_t &arg)
//script_error("mobj not a player!\n"); //script_error("mobj not a player!\n");
return -1; return -1;
} }
playernum = int(arg.value.mobj->player - players); playernum = Level->PlayerNum(arg.value.mobj->player);
} }
else else
playernum = intvalue(arg); playernum = intvalue(arg);
@ -734,7 +734,7 @@ void FParser::SF_PlayerName(void)
{ {
player_t *pl=NULL; player_t *pl=NULL;
if (Script->trigger) pl = Script->trigger->player; if (Script->trigger) pl = Script->trigger->player;
if(pl) plnum = int(pl - players); if(pl) plnum = Level->PlayerNum(pl);
else plnum=-1; else plnum=-1;
} }
else else
@ -765,7 +765,7 @@ void FParser::SF_PlayerObj(void)
{ {
player_t *pl=NULL; player_t *pl=NULL;
if (Script->trigger) pl = Script->trigger->player; if (Script->trigger) pl = Script->trigger->player;
if(pl) plnum = int(pl - players); if(pl) plnum = Level->PlayerNum(pl);
else plnum=-1; else plnum=-1;
} }
else else
@ -805,7 +805,7 @@ void FParser::SF_Player(void)
if(mo && mo->player) // haleyjd: added mo->player if(mo && mo->player) // haleyjd: added mo->player
{ {
t_return.value.i = (int)(mo->player - players); t_return.value.i = Level->PlayerNum(mo->player);
} }
else else
{ {

View file

@ -675,9 +675,9 @@ void FLevelLocals::ChangeLevel(const char *levelname, int position, int flags, i
for(int i = 0; i < MAXPLAYERS; i++) for(int i = 0; i < MAXPLAYERS; i++)
{ {
if (playeringame[i]) if (PlayerInGame(i))
{ {
player_t *player = &players[i]; player_t *player = Players[i];
// Un-crouch all players here. // Un-crouch all players here.
player->Uncrouch(); player->Uncrouch();

View file

@ -9648,7 +9648,7 @@ scriptwait:
} }
else else
{ {
PushToStack (int(activator->player - players)); PushToStack (Level->PlayerNum(activator->player));
} }
break; break;
@ -10351,7 +10351,7 @@ static void addDefered (level_info_t *i, acsdefered_t::EType type, int script, c
} }
if (who != NULL && who->player != NULL) if (who != NULL && who->player != NULL)
{ {
def.playernum = int(who->player - players); def.playernum = who->Level->PlayerNum(who->player);
} }
else else
{ {

View file

@ -746,10 +746,10 @@ void P_StartConversation (AActor *npc, AActor *pc, bool facetalker, bool saveang
// anyone else talk to the NPC. // anyone else talk to the NPC.
for (i = 0; i < MAXPLAYERS; i++) for (i = 0; i < MAXPLAYERS; i++)
{ {
if (!playeringame[i] || pc->player == &players[i]) if (!Level->PlayerInGame(i) || pc->player == Level->Players[i])
continue; continue;
if (npc == players[i].ConversationNPC) if (npc == Level->Players[i]->ConversationNPC)
return; return;
} }

View file

@ -401,7 +401,7 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf
// fair to count them toward a player's score. // fair to count them toward a player's score.
if (player && Level->maptime) if (player && Level->maptime)
{ {
source->player->frags[player - players]++; source->player->frags[Level->PlayerNum(player)]++;
if (player == source->player) // [RH] Cumulative frag count if (player == source->player) // [RH] Cumulative frag count
{ {
char buff[256]; char buff[256];
@ -560,7 +560,7 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf
ClientObituary (this, inflictor, source, dmgflags, MeansOfDeath); ClientObituary (this, inflictor, source, dmgflags, MeansOfDeath);
// [ZZ] fire player death hook // [ZZ] fire player death hook
E_PlayerDied(int(player - players)); E_PlayerDied(Level->PlayerNum(player));
// Death script execution, care of Skull Tag // Death script execution, care of Skull Tag
Level->Behaviors.StartTypedScripts (SCRIPT_Death, this, true); Level->Behaviors.StartTypedScripts (SCRIPT_Death, this, true);
@ -593,7 +593,7 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf
// count environment kills against you // count environment kills against you
if (!source) if (!source)
{ {
player->frags[player - players]++; player->frags[Level->PlayerNum(player)]++;
player->fragcount--; // [RH] Cumulative frag count player->fragcount--; // [RH] Cumulative frag count
} }

View file

@ -384,7 +384,7 @@ void AActor::PostSerialize()
AddToHash(); AddToHash();
if (player) if (player)
{ {
if (playeringame[player - players] && if (Level->PlayerInGame(player) &&
player->cls != NULL && player->cls != NULL &&
!(flags4 & MF4_NOSKIN) && !(flags4 & MF4_NOSKIN) &&
state->sprite == GetDefaultByType(player->cls)->SpawnState->sprite) state->sprite == GetDefaultByType(player->cls)->SpawnState->sprite)
@ -489,7 +489,7 @@ int AActor::GetTics(FState * newstate)
bool AActor::SetState (FState *newstate, bool nofunction) bool AActor::SetState (FState *newstate, bool nofunction)
{ {
if (debugfile && player && (player->cheats & CF_PREDICTING)) if (debugfile && player && (player->cheats & CF_PREDICTING))
fprintf (debugfile, "for pl %td: SetState while predicting!\n", player-players); fprintf (debugfile, "for pl %d: SetState while predicting!\n", Level->PlayerNum(player));
do do
{ {
if (newstate == NULL) if (newstate == NULL)
@ -5155,7 +5155,7 @@ AActor *FLevelLocals::SpawnPlayer (FPlayerStart *mthing, int playernum, int flag
DObject::StaticPointerSubstitution (oldactor, p->mo); DObject::StaticPointerSubstitution (oldactor, p->mo);
E_PlayerRespawned(int(p - players)); E_PlayerRespawned(PlayerNum(p));
Behaviors.StartTypedScripts (SCRIPT_Respawn, p->mo, true); Behaviors.StartTypedScripts (SCRIPT_Respawn, p->mo, true);
} }
} }
@ -6765,7 +6765,7 @@ int AActor::GetTeam()
// Check for monsters that belong to a player on the team but aren't part of the team themselves. // Check for monsters that belong to a player on the team but aren't part of the team themselves.
if (myTeam == TEAM_NONE && FriendPlayer != 0) if (myTeam == TEAM_NONE && FriendPlayer != 0)
{ {
myTeam = players[FriendPlayer - 1].userinfo.GetTeam(); myTeam = Level->Players[FriendPlayer - 1]->userinfo.GetTeam();
} }
return myTeam; return myTeam;

View file

@ -588,13 +588,13 @@ void P_SerializePlayers(FLevelLocals *Level, FSerializer &arc, bool skipload)
// Record each player's name, followed by their data. // Record each player's name, followed by their data.
for (i = 0; i < MAXPLAYERS; ++i) for (i = 0; i < MAXPLAYERS; ++i)
{ {
if (playeringame[i]) if (Level->PlayerInGame(i))
{ {
if (arc.BeginObject(nullptr)) if (arc.BeginObject(nullptr))
{ {
const char *n = players[i].userinfo.GetName(); const char *n = Level->Players[i]->userinfo.GetName();
arc.StringPtr("playername", n); arc.StringPtr("playername", n);
players[i].Serialize(arc); Level->Players[i]->Serialize(arc);
arc.EndObject(); arc.EndObject();
} }
} }

View file

@ -676,9 +676,10 @@ bool player_t::Resurrect()
mo->special1 = 0; // required for the Hexen fighter's fist attack. mo->special1 = 0; // required for the Hexen fighter's fist attack.
// This gets set by AActor::Die as flag for the wimpy death and must be reset here. // This gets set by AActor::Die as flag for the wimpy death and must be reset here.
mo->SetState(mo->SpawnState); mo->SetState(mo->SpawnState);
int pnum = mo->Level->PlayerNum(this);
if (!(mo->flags2 & MF2_DONTTRANSLATE)) if (!(mo->flags2 & MF2_DONTTRANSLATE))
{ {
mo->Translation = TRANSLATION(TRANSLATION_Players, uint8_t(this - players)); mo->Translation = TRANSLATION(TRANSLATION_Players, uint8_t(pnum));
} }
if (ReadyWeapon != nullptr) if (ReadyWeapon != nullptr)
{ {
@ -693,7 +694,7 @@ bool player_t::Resurrect()
// player is now alive. // player is now alive.
// fire E_PlayerRespawned and start the ACS SCRIPT_Respawn. // fire E_PlayerRespawned and start the ACS SCRIPT_Respawn.
E_PlayerRespawned(int(this - players)); E_PlayerRespawned(pnum);
// //
mo->Level->Behaviors.StartTypedScripts(SCRIPT_Respawn, mo, true); mo->Level->Behaviors.StartTypedScripts(SCRIPT_Respawn, mo, true);
return true; return true;
@ -1124,7 +1125,7 @@ void P_CheckMusicChange(player_t *player)
S_ChangeMusic("*"); S_ChangeMusic("*");
} }
} }
DPrintf(DMSG_NOTIFY, "MUSINFO change for player %d to %d\n", (int)(player - players), player->MUSINFOactor->args[0]); DPrintf(DMSG_NOTIFY, "MUSINFO change for player %d to %d\n", (int)player->mo->Level->PlayerNum(player), player->MUSINFOactor->args[0]);
} }
} }
} }

View file

@ -23,6 +23,7 @@
#include "vm.h" #include "vm.h"
#include "d_player.h" #include "d_player.h"
#include "hw_postprocessshader.h" #include "hw_postprocessshader.h"
#include "g_levellocals.h"
TArray<PostProcessShader> PostProcessShaders; TArray<PostProcessShader> PostProcessShaders;
@ -32,7 +33,7 @@ static bool IsConsolePlayer(player_t *player)
AActor *activator = player ? player->mo : nullptr; AActor *activator = player ? player->mo : nullptr;
if (activator == nullptr || activator->player == nullptr) if (activator == nullptr || activator->player == nullptr)
return false; return false;
return int(activator->player - players) == consoleplayer; return activator->player == activator->Level->GetConsolePlayer();
} }
static void ShaderSetEnabled(player_t *player, const FString &shaderName, bool value) static void ShaderSetEnabled(player_t *player, const FString &shaderName, bool value)

View file

@ -566,7 +566,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, RestoreDamage, RestoreDamage)
static int PlayerNumber(AActor *self) static int PlayerNumber(AActor *self)
{ {
return self->player ? int(self->player - players) : 0; return self->player ? self->Level->PlayerNum(self->player) : 0;
} }
DEFINE_ACTION_FUNCTION_NATIVE(AActor, PlayerNumber, PlayerNumber) DEFINE_ACTION_FUNCTION_NATIVE(AActor, PlayerNumber, PlayerNumber)