- handle u-> in player.cpp

This commit is contained in:
Christoph Oelckers 2021-12-26 01:38:19 +01:00
parent bfea02a192
commit cf88bcbecb

View file

@ -1071,23 +1071,22 @@ void DoPlayerSpriteThrow(PLAYERp pp)
int DoPlayerSpriteReset(DSWActor* actor) int DoPlayerSpriteReset(DSWActor* actor)
{ {
USER* u = actor->u();
PLAYERp pp; PLAYERp pp;
if (!u->PlayerP) if (!actor->user.PlayerP)
return 0; return 0;
pp = u->PlayerP; pp = actor->user.PlayerP;
// need to figure out what frames to put sprite into // need to figure out what frames to put sprite into
if (pp->DoPlayerAction == DoPlayerCrawl) if (pp->DoPlayerAction == DoPlayerCrawl)
NewStateGroup(pp->Actor(), u->ActorActionSet->Crawl); NewStateGroup(pp->Actor(), actor->user.ActorActionSet->Crawl);
else else
{ {
if (TEST(pp->Flags, PF_PLAYER_MOVED)) if (TEST(pp->Flags, PF_PLAYER_MOVED))
NewStateGroup(pp->Actor(), u->ActorActionSet->Run); NewStateGroup(pp->Actor(), actor->user.ActorActionSet->Run);
else else
NewStateGroup(pp->Actor(), u->ActorActionSet->Stand); NewStateGroup(pp->Actor(), actor->user.ActorActionSet->Stand);
} }
return 0; return 0;
@ -1133,7 +1132,6 @@ DSWActor* DoPickTarget(DSWActor* actor, uint32_t max_delta_ang, int skip_targets
short angle2, delta_ang; short angle2, delta_ang;
int dist, zh; int dist, zh;
int16_t* shp; int16_t* shp;
USERp u = actor->u();
int ezh, ezhl, ezhm; int ezh, ezhl, ezhm;
unsigned ndx; unsigned ndx;
TARGET_SORTp ts; TARGET_SORTp ts;
@ -1188,8 +1186,8 @@ DSWActor* DoPickTarget(DSWActor* actor, uint32_t max_delta_ang, int skip_targets
if (delta_ang > (int)max_delta_ang) if (delta_ang > (int)max_delta_ang)
continue; continue;
if (u && u->PlayerP) if (actor->hasU() && actor->user.PlayerP)
zh = u->PlayerP->pos.Z; zh = actor->user.PlayerP->pos.Z;
else else
zh = ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2); zh = ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2);
@ -1257,12 +1255,11 @@ void DoPlayerResetMovement(PLAYERp pp)
void DoPlayerTeleportPause(PLAYERp pp) void DoPlayerTeleportPause(PLAYERp pp)
{ {
DSWActor* actor = pp->actor; DSWActor* actor = pp->actor;
USERp u = actor->u();
// set this so we don't get stuck in teleporting loop // set this so we don't get stuck in teleporting loop
pp->lastcursector = pp->cursector; pp->lastcursector = pp->cursector;
if ((u->WaitTics-=synctics) <= 0) if ((actor->user.WaitTics-=synctics) <= 0)
{ {
//RESET(actor->spr.cstat, CSTAT_SPRITE_TRANSLUCENT); //RESET(actor->spr.cstat, CSTAT_SPRITE_TRANSLUCENT);
RESET(pp->Flags2, PF2_TELEPORTED); RESET(pp->Flags2, PF2_TELEPORTED);
@ -1887,7 +1884,6 @@ void DoPlayerSlide(PLAYERp pp)
{ {
DSWActor* actor = pp->actor; DSWActor* actor = pp->actor;
USERp u = actor->u();
int push_ret; int push_ret;
if ((pp->slide_xvect|pp->slide_yvect) == 0) if ((pp->slide_xvect|pp->slide_yvect) == 0)
@ -1907,7 +1903,7 @@ void DoPlayerSlide(PLAYERp pp)
{ {
if (!TEST(pp->Flags, PF_DEAD)) if (!TEST(pp->Flags, PF_DEAD))
{ {
PlayerUpdateHealth(pp, -u->Health); // Make sure he dies! PlayerUpdateHealth(pp, -actor->user.Health); // Make sure he dies!
PlayerCheckDeath(pp, nullptr); PlayerCheckDeath(pp, nullptr);
if (TEST(pp->Flags, PF_DEAD)) if (TEST(pp->Flags, PF_DEAD))
@ -1924,7 +1920,7 @@ void DoPlayerSlide(PLAYERp pp)
{ {
if (!TEST(pp->Flags, PF_DEAD)) if (!TEST(pp->Flags, PF_DEAD))
{ {
PlayerUpdateHealth(pp, -u->Health); // Make sure he dies! PlayerUpdateHealth(pp, -actor->user.Health); // Make sure he dies!
PlayerCheckDeath(pp, nullptr); PlayerCheckDeath(pp, nullptr);
if (TEST(pp->Flags, PF_DEAD)) if (TEST(pp->Flags, PF_DEAD))
@ -1982,7 +1978,6 @@ void PlayerSectorBound(PLAYERp pp, int amt)
void DoPlayerMove(PLAYERp pp) void DoPlayerMove(PLAYERp pp)
{ {
DSWActor* actor = pp->actor; DSWActor* actor = pp->actor;
USERp u = actor->u();
int friction; int friction;
int push_ret = 0; int push_ret = 0;
@ -2072,7 +2067,7 @@ void DoPlayerMove(PLAYERp pp)
{ {
if (!TEST(pp->Flags, PF_DEAD)) if (!TEST(pp->Flags, PF_DEAD))
{ {
PlayerUpdateHealth(pp, -u->Health); // Make sure he dies! PlayerUpdateHealth(pp, -actor->user.Health); // Make sure he dies!
PlayerCheckDeath(pp, nullptr); PlayerCheckDeath(pp, nullptr);
if (TEST(pp->Flags, PF_DEAD)) if (TEST(pp->Flags, PF_DEAD))
@ -2101,7 +2096,7 @@ void DoPlayerMove(PLAYERp pp)
if (!TEST(pp->Flags, PF_DEAD)) if (!TEST(pp->Flags, PF_DEAD))
{ {
PlayerUpdateHealth(pp, -u->Health); // Make sure he dies! PlayerUpdateHealth(pp, -actor->user.Health); // Make sure he dies!
PlayerCheckDeath(pp, nullptr); PlayerCheckDeath(pp, nullptr);
if (TEST(pp->Flags, PF_DEAD)) if (TEST(pp->Flags, PF_DEAD))
@ -2366,7 +2361,6 @@ void DriveCrush(PLAYERp pp, int *x, int *y)
int testpointinquad(int x, int y, int *qx, int *qy); int testpointinquad(int x, int y, int *qx, int *qy);
SECTOR_OBJECTp sop = pp->sop_control; SECTOR_OBJECTp sop = pp->sop_control;
USERp u;
short stat; short stat;
SECTORp *sectp; SECTORp *sectp;
@ -2381,8 +2375,6 @@ void DriveCrush(PLAYERp pp, int *x, int *y)
SWSectIterator it(sop->op_main_sector); SWSectIterator it(sop->op_main_sector);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
u = actor->u();
if (testpointinquad(actor->spr.pos.X, actor->spr.pos.Y, x, y)) if (testpointinquad(actor->spr.pos.X, actor->spr.pos.Y, x, y))
{ {
if (TEST(actor->spr.extra, SPRX_BREAKABLE) && HitBreakSprite(actor, 0)) if (TEST(actor->spr.extra, SPRX_BREAKABLE) && HitBreakSprite(actor, 0))
@ -2396,7 +2388,7 @@ void DriveCrush(PLAYERp pp, int *x, int *y)
if (TEST(actor->spr.extra, SPRX_PLAYER_OR_ENEMY)) if (TEST(actor->spr.extra, SPRX_PLAYER_OR_ENEMY))
{ {
if (!TEST(u->Flags, SPR_DEAD) && !TEST(actor->spr.extra, SPRX_BREAKABLE)) if (!TEST(actor->user.Flags, SPR_DEAD) && !TEST(actor->spr.extra, SPRX_BREAKABLE))
continue; continue;
} }
@ -2464,9 +2456,7 @@ void DriveCrush(PLAYERp pp, int *x, int *y)
if (actor == nullptr) if (actor == nullptr)
continue; continue;
u = actor->u(); if (actor->user.PlayerP == pp)
if (u->PlayerP == pp)
continue; continue;
if (testpointinquad(actor->spr.pos.X, actor->spr.pos.Y, x, y)) if (testpointinquad(actor->spr.pos.X, actor->spr.pos.Y, x, y))
@ -2477,10 +2467,10 @@ void DriveCrush(PLAYERp pp, int *x, int *y)
if (actor->spr.pos.Z < sop->crush_z) if (actor->spr.pos.Z < sop->crush_z)
continue; continue;
damage = -(u->Health + 100); damage = -(actor->user.Health + 100);
PlayerDamageSlide(u->PlayerP, damage, pp->angle.ang.asbuild()); PlayerDamageSlide(actor->user.PlayerP, damage, pp->angle.ang.asbuild());
PlayerUpdateHealth(u->PlayerP, damage); PlayerUpdateHealth(actor->user.PlayerP, damage);
PlayerCheckDeath(u->PlayerP, pp->Actor()); PlayerCheckDeath(actor->user.PlayerP, pp->Actor());
} }
} }
@ -2491,8 +2481,6 @@ void DriveCrush(PLAYERp pp, int *x, int *y)
it.Reset(*sectp); it.Reset(*sectp);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
u = actor->u();
// give some extra buffer // give some extra buffer
if (actor->spr.pos.Z < sop->crush_z + Z(40)) if (actor->spr.pos.Z < sop->crush_z + Z(40))
continue; continue;
@ -2518,7 +2506,6 @@ void DoPlayerMoveVehicle(PLAYERp pp)
DSWActor* actor = pp->sop->sp_child; DSWActor* actor = pp->sop->sp_child;
if (!actor) return; if (!actor) return;
DSWActor* plActor = pp->actor; DSWActor* plActor = pp->actor;
USERp u = actor->u();
int x[4], y[4], ox[4], oy[4]; int x[4], y[4], ox[4], oy[4];
int wallcount; int wallcount;
int count=0; int count=0;
@ -2640,11 +2627,11 @@ void DoPlayerMoveVehicle(PLAYERp pp)
if (FindDistance2D(hit.hitpos.X - hit_pos.X, hit.hitpos.Y - hit_pos.Y) < 800) if (FindDistance2D(hit.hitpos.X - hit_pos.X, hit.hitpos.Y - hit_pos.Y) < 800)
{ {
if (hit.hitWall) if (hit.hitWall)
u->coll.setWall(wallnum(hit.hitWall)); actor->user.coll.setWall(wallnum(hit.hitWall));
else if (hit.actor()) else if (hit.actor())
u->coll.setSprite(hit.actor()); actor->user.coll.setSprite(hit.actor());
else else
u->coll.setNone(); actor->user.coll.setNone();
VehicleMoveHit(actor); VehicleMoveHit(actor);
} }
@ -2678,17 +2665,17 @@ void DoPlayerMoveVehicle(PLAYERp pp)
{ {
vec3_t clippos = { pp->pos.X, pp->pos.Y, z }; vec3_t clippos = { pp->pos.X, pp->pos.Y, z };
Collision coll; Collision coll;
clipmove(clippos, &pp->cursector, pp->xvect, pp->yvect, (int)pp->sop->clipdist, Z(4), floor_dist, CLIPMASK_PLAYER, u->coll); clipmove(clippos, &pp->cursector, pp->xvect, pp->yvect, (int)pp->sop->clipdist, Z(4), floor_dist, CLIPMASK_PLAYER, actor->user.coll);
pp->pos.vec2 = clippos.vec2; pp->pos.vec2 = clippos.vec2;
} }
else else
{ {
u->coll = MultiClipMove(pp, z, floor_dist); actor->user.coll = MultiClipMove(pp, z, floor_dist);
} }
plActor->spr.cstat = save_cstat; plActor->spr.cstat = save_cstat;
if (u->coll.type != kHitNone) if (actor->user.coll.type != kHitNone)
{ {
int vel; int vel;
@ -6332,56 +6319,53 @@ void PlayerStateControl(DSWActor* actor)
{ {
if (actor == nullptr || !actor->hasU()) return; if (actor == nullptr || !actor->hasU()) return;
auto u = actor->u(); actor->user.Tics += synctics;
u->Tics += synctics;
// Skip states if too much time has passed // Skip states if too much time has passed
while (u->Tics >= TEST(u->State->Tics, SF_TICS_MASK)) while (actor->user.Tics >= TEST(actor->user.State->Tics, SF_TICS_MASK))
{ {
// Set Tics // Set Tics
u->Tics -= TEST(u->State->Tics, SF_TICS_MASK); actor->user.Tics -= TEST(actor->user.State->Tics, SF_TICS_MASK);
// Transition to the next state // Transition to the next state
u->State = u->State->NextState; actor->user.State = actor->user.State->NextState;
// !JIM! Added this so I can do quick calls in player states! // !JIM! Added this so I can do quick calls in player states!
// Need this in order for floor blood and footprints to not get called more than once. // Need this in order for floor blood and footprints to not get called more than once.
while (TEST(u->State->Tics, SF_QUICK_CALL)) while (TEST(actor->user.State->Tics, SF_QUICK_CALL))
{ {
// Call it once and go to the next state // Call it once and go to the next state
(*u->State->Animator)(actor); (*actor->user.State->Animator)(actor);
// if still on the same QUICK_CALL should you // if still on the same QUICK_CALL should you
// go to the next state. // go to the next state.
if (TEST(u->State->Tics, SF_QUICK_CALL)) if (TEST(actor->user.State->Tics, SF_QUICK_CALL))
u->State = u->State->NextState; actor->user.State = actor->user.State->NextState;
} }
if (!u->State->Pic) if (!actor->user.State->Pic)
{ {
NewStateGroup(actor, (STATEp *) u->State->NextState); NewStateGroup(actor, (STATEp *) actor->user.State->NextState);
} }
} }
// Set picnum to the correct pic // Set picnum to the correct pic
if (u->RotNum > 1) if (actor->user.RotNum > 1)
actor->spr.picnum = u->Rot[0]->Pic; actor->spr.picnum = actor->user.Rot[0]->Pic;
else else
actor->spr.picnum = u->State->Pic; actor->spr.picnum = actor->user.State->Pic;
// Call the correct animator // Call the correct animator
if (TEST(u->State->Tics, SF_PLAYER_FUNC)) if (TEST(actor->user.State->Tics, SF_PLAYER_FUNC))
if (u->State->Animator) if (actor->user.State->Animator)
(*u->State->Animator)(actor); (*actor->user.State->Animator)(actor);
return; return;
} }
void MoveSkipSavePos(void) void MoveSkipSavePos(void)
{ {
USERp u;
int i; int i;
short pnum; short pnum;
PLAYERp pp; PLAYERp pp;
@ -6414,10 +6398,8 @@ void MoveSkipSavePos(void)
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
if (!actor->hasU()) continue; if (!actor->hasU()) continue;
u = actor->u();
actor->spr.backuppos(); actor->spr.backuppos();
u->oz = actor->spr.opos.Z; actor->user.oz = actor->spr.opos.Z;
} }
} }
} }
@ -6433,10 +6415,8 @@ void MoveSkipSavePos(void)
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
if (!actor->hasU()) continue; if (!actor->hasU()) continue;
u = actor->u();
actor->spr.backuppos(); actor->spr.backuppos();
u->oz = actor->spr.opos.Z; actor->user.oz = actor->spr.opos.Z;
} }
} }
} }
@ -6976,17 +6956,15 @@ void InitMultiPlayerInfo(void)
// If player stepped in something gooey, track it all over the place. // If player stepped in something gooey, track it all over the place.
int DoFootPrints(DSWActor* actor) int DoFootPrints(DSWActor* actor)
{ {
USER* u = actor->u(); if (actor->user.PlayerP)
if (u->PlayerP)
{ {
if (!u->PlayerP->insector()) if (!actor->user.PlayerP->insector())
return 0; return 0;
if (FAF_ConnectArea(u->PlayerP->cursector)) if (FAF_ConnectArea(actor->user.PlayerP->cursector))
return 0; return 0;
if (u->PlayerP->NumFootPrints > 0) if (actor->user.PlayerP->NumFootPrints > 0)
{ {
QueueFootPrint(actor); QueueFootPrint(actor);
} }