- made ps an array of player_struct like it originally was.

This commit is contained in:
Christoph Oelckers 2020-07-15 00:26:58 +02:00
parent 2fd2ad2212
commit 99161e2e4a
10 changed files with 77 additions and 96 deletions

View File

@ -103,7 +103,7 @@ static int osdcmd_demo(CCmdFuncPtr parm)
return CCMD_OK;
}
//if (g_player[myconnectindex].ps->gm & MODE_GAME)
//if (ps[myconnectindex].gm & MODE_GAME)
//{
// Printf("demo: Must not be in a game.\n");
// return CCMD_OK;

View File

@ -53,7 +53,7 @@
/* Notes
RedNukem has this for the toggle autorun command. Todo: Check what this is supposed to accomplish. The implementation makes no sense at all.
(!RRRA || (!g_player[myconnectindex].ps->on_motorcycle && !g_player[myconnectindex].ps->on_boat)))
(!RRRA || (!ps[myconnectindex].on_motorcycle && !ps[myconnectindex].on_boat)))
*/

View File

@ -418,7 +418,7 @@ static void G_DrawOverheadMap(int32_t cposx, int32_t cposy, int32_t czoom, int16
{
if (ud.scrollmode && p == screenpeek) continue;
auto const pPlayer = g_player[p].ps;
auto const pPlayer = &ps[p];
auto const pSprite = (uspriteptr_t)&sprite[pPlayer->i];
ox = pSprite->x - cposx;

View File

@ -295,15 +295,7 @@ void stopinterpolation(int* posptr);
void dointerpolations(int smoothratio);
// Hack struct to allow old code to access the EDuke-style player data without changing it.
struct psaccess
{
struct player_struct& operator[](int index)
{
return *g_player[index].ps;
}
};
extern psaccess ps;
extern player_struct ps[MAXPLAYERS];
extern int spriteqamount;

View File

@ -48,7 +48,6 @@ enum gamemode_t {
typedef struct
{
struct player_struct *ps;
input_t *input;
bool horizRecenter;

View File

@ -3397,11 +3397,11 @@ void processinput_r(int snum)
g_player[snum].horizAngleAdjust = 0;
g_player[snum].horizSkew = 0;
sb_snum = g_player[snum].input->bits;// sync[snum].bits;
sb_snum = PlayerInputBits(snum, SKB_ALL);
auto sb_fvel = g_player[snum].input->fvel; // TRANSITIONAL
auto sb_svel = g_player[snum].input->svel;
auto sb_avel = g_player[snum].input->q16avel;
auto sb_fvel = PlayerInputForwardVel(snum);
auto sb_svel = PlayerInputSideVel(snum);
auto sb_avel = PlayerInputAngVel(snum);
psect = p->cursectnum;
if (p->OnMotorcycle && s->extra > 0)

View File

@ -76,13 +76,14 @@ int32_t actor_tog;
static int32_t nonsharedtimer;
weaponhit hittype[MAXSPRITES];
ActorInfo actorinfo[MAXTILES];
player_struct ps[MAXPLAYERS];
static void gameTimerHandler(void)
{
S_Update();
// we need CONTROL_GetInput in order to pick up joystick button presses
if (!(g_player[myconnectindex].ps->gm & MODE_GAME))
if (!(ps[myconnectindex].gm & MODE_GAME))
{
ControlInfo noshareinfo;
CONTROL_GetInput(&noshareinfo);
@ -112,7 +113,7 @@ void G_HandleLocalKeys(void)
CONTROL_GetInput(&noshareinfo);
}
if (!ALT_IS_PRESSED && ud.overhead_on == 0 && (g_player[myconnectindex].ps->gm & MODE_TYPE) == 0)
if (!ALT_IS_PRESSED && ud.overhead_on == 0 && (ps[myconnectindex].gm & MODE_TYPE) == 0)
{
if (buttonMap.ButtonDown(gamefunc_Enlarge_Screen))
{
@ -149,7 +150,7 @@ void G_HandleLocalKeys(void)
}
}
if ((g_player[myconnectindex].ps->gm&(MODE_MENU|MODE_TYPE)) || System_WantGuiCapture())
if ((ps[myconnectindex].gm&(MODE_MENU|MODE_TYPE)) || System_WantGuiCapture())
return;
if (buttonMap.ButtonDown(gamefunc_See_Coop_View) && (ud.coop || ud.recstat == 2))
@ -163,14 +164,14 @@ void G_HandleLocalKeys(void)
{
buttonMap.ClearButton(gamefunc_Show_Opponents_Weapon);
ud.ShowOpponentWeapons = ud.showweapons = 1-ud.showweapons;
FTA(QUOTE_WEAPON_MODE_OFF-ud.showweapons,g_player[screenpeek].ps);
FTA(QUOTE_WEAPON_MODE_OFF-ud.showweapons,&ps[screenpeek]);
}
if (buttonMap.ButtonDown(gamefunc_Toggle_Crosshair))
{
buttonMap.ClearButton(gamefunc_Toggle_Crosshair);
cl_crosshair = !cl_crosshair;
FTA(QUOTE_CROSSHAIR_OFF-cl_crosshair,g_player[screenpeek].ps);
FTA(QUOTE_CROSSHAIR_OFF-cl_crosshair,&ps[screenpeek]);
}
if (ud.overhead_on && buttonMap.ButtonDown(gamefunc_Map_Follow_Mode))
@ -179,11 +180,11 @@ void G_HandleLocalKeys(void)
ud.scrollmode = 1-ud.scrollmode;
if (ud.scrollmode)
{
ud.folx = g_player[screenpeek].ps->oposx;
ud.foly = g_player[screenpeek].ps->oposy;
ud.fola = fix16_to_int(g_player[screenpeek].ps->oq16ang);
ud.folx = ps[screenpeek].oposx;
ud.foly = ps[screenpeek].oposy;
ud.fola = fix16_to_int(ps[screenpeek].oq16ang);
}
FTA(QUOTE_MAP_FOLLOW_OFF+ud.scrollmode,g_player[myconnectindex].ps);
FTA(QUOTE_MAP_FOLLOW_OFF+ud.scrollmode,&ps[myconnectindex]);
}
@ -223,14 +224,14 @@ void G_HandleLocalKeys(void)
{
buttonMap.ClearButton(gamefunc_Third_Person_View);
if (!isRRRA() || (!g_player[myconnectindex].ps->OnMotorcycle && !g_player[myconnectindex].ps->OnBoat))
if (!isRRRA() || (!ps[myconnectindex].OnMotorcycle && !ps[myconnectindex].OnBoat))
{
g_player[myconnectindex].ps->over_shoulder_on = !g_player[myconnectindex].ps->over_shoulder_on;
ps[myconnectindex].over_shoulder_on = !ps[myconnectindex].over_shoulder_on;
cameradist = 0;
cameraclock = (int32_t) totalclock;
FTA(QUOTE_VIEW_MODE_OFF + g_player[myconnectindex].ps->over_shoulder_on, g_player[myconnectindex].ps);
FTA(QUOTE_VIEW_MODE_OFF + ps[myconnectindex].over_shoulder_on, &ps[myconnectindex]);
}
}
@ -240,17 +241,17 @@ void G_HandleLocalKeys(void)
nonsharedtimer += timerOffset;
if (buttonMap.ButtonDown(gamefunc_Enlarge_Screen))
g_player[myconnectindex].ps->zoom += mulscale6(timerOffset, max<int>(g_player[myconnectindex].ps->zoom, 256));
ps[myconnectindex].zoom += mulscale6(timerOffset, max<int>(ps[myconnectindex].zoom, 256));
if (buttonMap.ButtonDown(gamefunc_Shrink_Screen))
g_player[myconnectindex].ps->zoom -= mulscale6(timerOffset, max<int>(g_player[myconnectindex].ps->zoom, 256));
ps[myconnectindex].zoom -= mulscale6(timerOffset, max<int>(ps[myconnectindex].zoom, 256));
g_player[myconnectindex].ps->zoom = clamp(g_player[myconnectindex].ps->zoom, 48, 2048);
ps[myconnectindex].zoom = clamp(ps[myconnectindex].zoom, 48, 2048);
}
}
#if 0 // fixme: We should not query Esc here, this needs to be done differently
if (I_EscapeTrigger() && ud.overhead_on && g_player[myconnectindex].ps->newowner == -1)
if (I_EscapeTrigger() && ud.overhead_on && ps[myconnectindex].newowner == -1)
{
I_EscapeTriggerClear();
ud.last_overhead = ud.overhead_on;
@ -286,7 +287,6 @@ static void G_Cleanup(void)
for (i=MAXPLAYERS-1; i>=0; i--)
{
Xfree(g_player[i].ps);
Xfree(g_player[i].input);
}
@ -413,11 +413,11 @@ static void G_Startup(void)
static void P_SetupMiscInputSettings(void)
{
struct player_struct *ps = g_player[myconnectindex].ps;
struct player_struct *pp = &ps[myconnectindex];
ps->aim_mode = in_mousemode;
ps->auto_aim = cl_autoaim;
ps->weaponswitch = cl_weaponswitch;
pp->aim_mode = in_mousemode;
pp->auto_aim = cl_autoaim;
pp->weaponswitch = cl_weaponswitch;
}
void G_UpdatePlayerFromMenu(void)
@ -428,25 +428,25 @@ void G_UpdatePlayerFromMenu(void)
if (numplayers > 1)
{
//Net_SendClientInfo();
if (sprite[g_player[myconnectindex].ps->i].picnum == TILE_APLAYER && sprite[g_player[myconnectindex].ps->i].pal != 1)
sprite[g_player[myconnectindex].ps->i].pal = g_player[myconnectindex].pcolor;
if (sprite[ps[myconnectindex].i].picnum == TILE_APLAYER && sprite[ps[myconnectindex].i].pal != 1)
sprite[ps[myconnectindex].i].pal = g_player[myconnectindex].pcolor;
}
else
{
P_SetupMiscInputSettings();
g_player[myconnectindex].ps->palookup = g_player[myconnectindex].pcolor = G_CheckPlayerColor(playercolor);
ps[myconnectindex].palookup = g_player[myconnectindex].pcolor = G_CheckPlayerColor(playercolor);
g_player[myconnectindex].pteam = playerteam;
if (sprite[g_player[myconnectindex].ps->i].picnum == TILE_APLAYER && sprite[g_player[myconnectindex].ps->i].pal != 1)
sprite[g_player[myconnectindex].ps->i].pal = g_player[myconnectindex].pcolor;
if (sprite[ps[myconnectindex].i].picnum == TILE_APLAYER && sprite[ps[myconnectindex].i].pal != 1)
sprite[ps[myconnectindex].i].pal = g_player[myconnectindex].pcolor;
}
}
void G_BackToMenu(void)
{
boardfilename[0] = 0;
g_player[myconnectindex].ps->gm = 0;
ps[myconnectindex].gm = 0;
M_StartControlPanel(false);
M_SetMenu(NAME_Mainmenu);
inputState.keyFlushChars();
@ -454,8 +454,6 @@ void G_BackToMenu(void)
void G_MaybeAllocPlayer(int32_t pnum)
{
if (g_player[pnum].ps == NULL)
g_player[pnum].ps = (struct player_struct *)Xcalloc(1, sizeof(struct player_struct));
if (g_player[pnum].input == NULL)
g_player[pnum].input = (input_t *)Xcalloc(1, sizeof(input_t));
}
@ -554,7 +552,7 @@ int GameInterface::app_main()
checkcommandline();
g_player[0].ps->aim_mode = 1;
ps[0].aim_mode = 1;
ud.ShowOpponentWeapons = 0;
ud.camerasprite = -1;
ud.camera_time = 0;//4;
@ -592,14 +590,14 @@ int GameInterface::app_main()
G_Startup(); // a bunch of stuff including compiling cons
g_player[myconnectindex].ps->palette = BASEPAL;
ps[myconnectindex].palette = BASEPAL;
for (int i=1, j=numplayers; j<ud.multimode; j++)
{
Bsprintf(g_player[j].user_name,"%s %d", GStrings("PLAYER"),j+1);
g_player[j].pteam = i;
g_player[j].ps->weaponswitch = 3;
g_player[j].ps->auto_aim = 0;
ps[j].weaponswitch = 3;
ps[j].auto_aim = 0;
i = 1-i;
}
@ -649,14 +647,13 @@ int GameInterface::app_main()
void app_loop()
{
auto &myplayer = g_player[myconnectindex].ps;
MAIN_LOOP_RESTART:
totalclock = 0;
ototalclock = 0;
lockclock = 0;
g_player[myconnectindex].ps->ftq = 0;
ps[myconnectindex].ftq = 0;
//if (ud.warp_on == 0)
{
@ -693,15 +690,15 @@ MAIN_LOOP_RESTART:
P_SetupMiscInputSettings();
g_player[myconnectindex].pteam = playerteam;
if (playercolor) g_player[myconnectindex].ps->palookup = g_player[myconnectindex].pcolor = G_CheckPlayerColor(playercolor);
else g_player[myconnectindex].ps->palookup = g_player[myconnectindex].pcolor;
if (playercolor) ps[myconnectindex].palookup = g_player[myconnectindex].pcolor = G_CheckPlayerColor(playercolor);
else ps[myconnectindex].palookup = g_player[myconnectindex].pcolor;
inputState.ClearKeyStatus(sc_Pause); // JBF: I hate the pause key
do //main loop
{
handleevents();
if (g_player[myconnectindex].ps->gm == MODE_DEMO)
if (ps[myconnectindex].gm == MODE_DEMO)
{
M_ClearMenus();
goto MAIN_LOOP_RESTART;
@ -717,19 +714,19 @@ MAIN_LOOP_RESTART:
gameupdatetime.Reset();
gameupdatetime.Clock();
while ((!(g_player[myconnectindex].ps->gm & (MODE_MENU|MODE_DEMO))) && (int)(totalclock - ototalclock) >= TICSPERFRAME)
while ((!(ps[myconnectindex].gm & (MODE_MENU|MODE_DEMO))) && (int)(totalclock - ototalclock) >= TICSPERFRAME)
{
ototalclock += TICSPERFRAME;
if (isRRRA() && g_player[myconnectindex].ps->OnMotorcycle)
if (isRRRA() && ps[myconnectindex].OnMotorcycle)
P_GetInputMotorcycle(myconnectindex);
else if (isRRRA() && g_player[myconnectindex].ps->OnBoat)
else if (isRRRA() && ps[myconnectindex].OnBoat)
P_GetInputBoat(myconnectindex);
else
P_GetInput(myconnectindex);
// this is where we fill the input_t struct that is actually processed by P_ProcessInput()
auto const pPlayer = g_player[myconnectindex].ps;
auto const pPlayer = &ps[myconnectindex];
auto const q16ang = fix16_to_int(pPlayer->q16ang);
auto& input = nextinput(myconnectindex);
@ -744,8 +741,8 @@ MAIN_LOOP_RESTART:
advancequeue(myconnectindex);
if (((!System_WantGuiCapture() && (g_player[myconnectindex].ps->gm&MODE_MENU) != MODE_MENU) || ud.recstat == 2 || (ud.multimode > 1)) &&
(g_player[myconnectindex].ps->gm&MODE_GAME))
if (((!System_WantGuiCapture() && (ps[myconnectindex].gm&MODE_MENU) != MODE_MENU) || ud.recstat == 2 || (ud.multimode > 1)) &&
(ps[myconnectindex].gm&MODE_GAME))
{
moveloop();
}
@ -754,7 +751,7 @@ MAIN_LOOP_RESTART:
gameUpdate = true;
gameupdatetime.Unclock();
if (g_player[myconnectindex].ps->gm & (MODE_EOL|MODE_RESTART))
if (ps[myconnectindex].gm & (MODE_EOL|MODE_RESTART))
{
switch (exitlevel())
{
@ -766,9 +763,9 @@ MAIN_LOOP_RESTART:
if (G_FPSLimit())
{
if (isRRRA() && g_player[myconnectindex].ps->OnMotorcycle)
if (isRRRA() && ps[myconnectindex].OnMotorcycle)
P_GetInputMotorcycle(myconnectindex);
else if (isRRRA() && g_player[myconnectindex].ps->OnBoat)
else if (isRRRA() && ps[myconnectindex].OnBoat)
P_GetInputBoat(myconnectindex);
else
P_GetInput(myconnectindex);
@ -783,7 +780,7 @@ MAIN_LOOP_RESTART:
videoNextPage();
}
if (g_player[myconnectindex].ps->gm&MODE_DEMO)
if (ps[myconnectindex].gm&MODE_DEMO)
goto MAIN_LOOP_RESTART;
}
while (1);
@ -800,8 +797,5 @@ void GameInterface::FreeGameData()
return new GameInterface;
}
// access wrappers that alias old names to current data.
psaccess ps;
END_DUKE_NS

View File

@ -58,7 +58,7 @@ enum inputlock_t
static int P_CheckLockedMovement(int const playerNum)
{
auto const pPlayer = g_player[playerNum].ps;
auto const pPlayer = &ps[playerNum];
if (pPlayer->on_crane >= 0)
return IL_NOMOVE|IL_NOANGLE;
@ -87,7 +87,7 @@ static double scaleAdjustmentToInterval(double x)
void P_GetInput(int const playerNum)
{
auto &thisPlayer = g_player[playerNum];
auto const pPlayer = thisPlayer.ps;
auto const pPlayer = &ps[playerNum];
ControlInfo info;
auto const currentHiTicks = timerGetHiTicks();
@ -443,7 +443,7 @@ void P_GetInput(int const playerNum)
void P_GetInputMotorcycle(int playerNum)
{
auto &thisPlayer = g_player[playerNum];
auto const pPlayer = thisPlayer.ps;
auto const pPlayer = &ps[playerNum];
ControlInfo info;
if ((pPlayer->gm & (MODE_MENU|MODE_TYPE)) || (ud.pause_on && !inputState.GetKeyStatus(sc_Pause)))
@ -635,7 +635,7 @@ void P_GetInputMotorcycle(int playerNum)
void P_GetInputBoat(int playerNum)
{
auto &thisPlayer = g_player[playerNum];
auto const pPlayer = thisPlayer.ps;
auto const pPlayer = &ps[playerNum];
ControlInfo info;
if ((pPlayer->gm & (MODE_MENU|MODE_TYPE)) || (ud.pause_on && !inputState.GetKeyStatus(sc_Pause)))

View File

@ -142,9 +142,9 @@ int32_t G_LoadPlayer(const char *path)
if (status < 0 || h.numplayers != ud.multimode)
{
if (status == -4 || status == -3 || status == 1)
FTA(QUOTE_SAVE_BAD_VERSION, g_player[myconnectindex].ps);
FTA(QUOTE_SAVE_BAD_VERSION, &ps[myconnectindex]);
else if (h.numplayers != ud.multimode)
FTA(QUOTE_SAVE_BAD_PLAYERS, g_player[myconnectindex].ps);
FTA(QUOTE_SAVE_BAD_PLAYERS, &ps[myconnectindex]);
ototalclock = totalclock;
ready2send = 1;
@ -242,7 +242,7 @@ bool G_SavePlayer(FSaveGameNode *sv)
{
Printf("Saved: %s\n", fn.GetChars());
quoteMgr.InitializeQuote(QUOTE_RESERVED4, "Game Saved");
FTA(QUOTE_RESERVED4, g_player[myconnectindex].ps);
FTA(QUOTE_RESERVED4, &ps[myconnectindex]);
}
ready2send = 1;
@ -260,16 +260,16 @@ bool GameInterface::LoadGame(FSaveGameNode* sv)
if (ud.multimode > 1)
{
quoteMgr.InitializeQuote(QUOTE_RESERVED4, "Multiplayer Loading Not Yet Supported");
FTA(QUOTE_RESERVED4, g_player[myconnectindex].ps);
FTA(QUOTE_RESERVED4, &ps[myconnectindex]);
// g_player[myconnectindex].ps->gm = MODE_GAME;
// ps[myconnectindex].gm = MODE_GAME;
return false;
}
else
{
int32_t c = G_LoadPlayer(sv->Filename);
if (c == 0)
g_player[myconnectindex].ps->gm = MODE_GAME;
ps[myconnectindex].gm = MODE_GAME;
return !c;
}
}
@ -279,7 +279,7 @@ bool GameInterface::SaveGame(FSaveGameNode* sv)
if (ud.multimode > 1)
{
quoteMgr.InitializeQuote(QUOTE_RESERVED4, "Multiplayer Saving Not Yet Supported");
FTA(QUOTE_RESERVED4, g_player[myconnectindex].ps);
FTA(QUOTE_RESERVED4, &ps[myconnectindex]);
return false;
}
else
@ -932,9 +932,6 @@ static void sv_postanimateptr()
static void sv_restsave()
{
uint8_t * mem = savegame_restdata;
struct player_struct dummy_ps;
Bmemset(&dummy_ps, 0, sizeof(struct player_struct));
#define CPDAT(ptr,sz) do { Bmemcpy(mem, ptr, sz), mem+=sz ; } while (0)
for (int i = 0; i < MAXPLAYERS; i++)
@ -942,7 +939,7 @@ static void sv_restsave()
CPDAT(g_player[i].user_name, 32);
CPDAT(&g_player[i].pcolor, sizeof(g_player[0].pcolor));
CPDAT(&g_player[i].pteam, sizeof(g_player[0].pteam));
CPDAT(g_player[i].ps ? g_player[i].ps : &dummy_ps, sizeof(struct player_struct));
CPDAT(&ps[i], sizeof(struct player_struct));
}
Bassert((savegame_restdata + SVARDATALEN) - mem == 0);
@ -951,7 +948,6 @@ static void sv_restsave()
static void sv_restload()
{
uint8_t * mem = savegame_restdata;
struct player_struct dummy_ps;
#define CPDAT(ptr,sz) Bmemcpy(ptr, mem, sz), mem+=sz
for (int i = 0; i < MAXPLAYERS; i++)
@ -959,12 +955,12 @@ static void sv_restload()
CPDAT(g_player[i].user_name, 32);
CPDAT(&g_player[i].pcolor, sizeof(g_player[0].pcolor));
CPDAT(&g_player[i].pteam, sizeof(g_player[0].pteam));
CPDAT(g_player[i].ps ? g_player[i].ps : &dummy_ps, sizeof(struct player_struct));
CPDAT(&ps[i], sizeof(struct player_struct));
}
#undef CPDAT
if (g_player[myconnectindex].ps)
g_player[myconnectindex].ps->auto_aim = cl_autoaim;
if (&ps[myconnectindex])
ps[myconnectindex].auto_aim = cl_autoaim;
}
#ifdef DEBUGGINGAIDS
@ -1062,11 +1058,11 @@ static void postloadplayer(int32_t savegamep)
int32_t i;
//1
if (g_player[myconnectindex].ps->over_shoulder_on != 0)
if (ps[myconnectindex].over_shoulder_on != 0)
{
cameradist = 0;
cameraclock = 0;
g_player[myconnectindex].ps->over_shoulder_on = 1;
ps[myconnectindex].over_shoulder_on = 1;
}
//2
@ -1079,15 +1075,15 @@ static void postloadplayer(int32_t savegamep)
Mus_ResumeSaved();
Mus_SetPaused(false);
g_player[myconnectindex].ps->gm = MODE_GAME;
ps[myconnectindex].gm = MODE_GAME;
ud.recstat = 0;
if (g_player[myconnectindex].ps->jetpack_on)
A_PlaySound(DUKE_JETPACK_IDLE, g_player[myconnectindex].ps->i);
if (ps[myconnectindex].jetpack_on)
A_PlaySound(DUKE_JETPACK_IDLE, ps[myconnectindex].i);
}
//3
setpal(g_player[myconnectindex].ps);
setpal(&ps[myconnectindex]);
//4
if (savegamep)
@ -1139,7 +1135,7 @@ static void postloadplayer(int32_t savegamep)
}
#endif
for (i=0; i<MAXPLAYERS; i++)
g_player[i].ps->drug_timer = 0;
ps[i].drug_timer = 0;
}

View File

@ -144,7 +144,7 @@ static int osdcmd_spawn(CCmdFuncPtr parm)
int16_t set=0, idx;
vec3_t vect;
if (numplayers > 1 || !(g_player[myconnectindex].ps->gm & MODE_GAME))
if (numplayers > 1 || !(ps[myconnectindex].gm & MODE_GAME))
{
Printf("spawn: Can't spawn sprites in multiplayer games or demos\n");
return CCMD_OK;
@ -213,7 +213,7 @@ static int osdcmd_spawn(CCmdFuncPtr parm)
return CCMD_SHOWHELP;
}
idx = A_Spawn(g_player[myconnectindex].ps->i, picnum);
idx = A_Spawn(ps[myconnectindex].i, picnum);
if (set & 1) sprite[idx].pal = (uint8_t)pal;
if (set & 2) sprite[idx].cstat = (int16_t)cstat;
if (set & 4) sprite[idx].ang = ang;