- Duke: Swap out the internals of the player's pos methods and get the game going again.

This commit is contained in:
Mitchell Richters 2022-11-21 14:55:33 +11:00 committed by Christoph Oelckers
parent 202137ed69
commit dd5834444e
8 changed files with 32 additions and 45 deletions

View file

@ -1980,7 +1980,7 @@ int ParseState::parse(void)
break;
case concmd_larrybird:
insptr++;
ps[g_p].GetActor()->spr.pos.Z = ps[g_p].PlayerNowPosition.Z = ps[g_p].GetActor()->sector()->ceilingz;
ps[g_p].GetActor()->spr.pos.Z = ps[g_p].GetActor()->sector()->ceilingz;
break;
case concmd_destroyit:
insptr++;

View file

@ -69,7 +69,7 @@ void pickrandomspot(int snum)
i = krand()%numplayersprites;
else i = snum;
p->posSet(po[i].opos);
p->GetActor()->spr.pos = po[i].opos;
p->backupxyz();
p->setbobpos();
p->angle.oang = p->angle.ang = po[i].oa;
@ -505,14 +505,14 @@ void resetprestat(int snum,int g)
//
//---------------------------------------------------------------------------
void resetpspritevars(int g)
void resetpspritevars(int g, const DVector3& startpos)
{
int i, j;
int circ;
int aimmode[MAXPLAYERS];
STATUSBARTYPE tsbar[MAXPLAYERS];
auto newActor = CreateActor(ps[0].cursector, ps[0].posGet(),
auto newActor = CreateActor(ps[0].cursector, startpos.plusZ(gs.playerheight),
TILE_APLAYER, 0, DVector2(0, 0), ps[0].angle.ang, 0., 0., nullptr, 10);
newActor->viewzoffset = -gs.playerheight;
@ -625,10 +625,7 @@ void resetpspritevars(int g)
ps[j].frag_ps = j;
act->SetOwner(act);
ps[j].posSet(act->spr.pos);
ps[j].backupxyz();
ps[j].setbobpos();
act->backuppos();
ps[j].angle.oang = ps[j].angle.ang = act->spr.angle;
updatesector(act->spr.pos, &ps[j].cursector);
@ -979,7 +976,6 @@ static int LoadTheMap(MapRecord *mi, player_struct*p, int gamemode)
SpawnSpriteDef sprites;
DVector3 pos;
loadMap(mi->fileName, isShareware(), &pos, &lbang, &sect, sprites);
p->posSet(pos);
p->cursector = sect;
SECRET_SetMapName(mi->DisplayName(), mi->name);
@ -998,7 +994,7 @@ static int LoadTheMap(MapRecord *mi, player_struct*p, int gamemode)
SpawnPortals();
allignwarpelevators();
resetpspritevars(gamemode);
resetpspritevars(gamemode, pos);
if (isRR()) cacheit_r(); else cacheit_d();
return 0;

View file

@ -76,10 +76,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, player_struct& w,
{
if (arc.BeginObject(keyname))
{
arc("posx", w.posX())
("posy", w.posY())
("posz", w.PlayerNowPosition.Z)
("angle", w.angle)
arc("angle", w.angle)
("horizon", w.horizon)
.Array("gotweapon", w.gotweapon, MAX_WEAPONS)
("pals", w.pals)

View file

@ -318,7 +318,7 @@ void S_GetCamera(DVector3* c, DAngle* ca, sectortype** cs)
if (ud.cameraactor == nullptr)
{
auto p = &ps[screenpeek];
if (c) *c = p->posGet();
if (c && p->GetActor()) *c = p->posGet();
if (cs) *cs = p->cursector;
if (ca) *ca = p->angle.ang;
}

View file

@ -176,7 +176,6 @@ struct player_orig
struct player_struct
{
DVector3 vel;
DVector3 PlayerNowPosition, PlayerOldPosition;
DVector2 bobpos;
DVector2 fric;
DVector2 Exit;
@ -333,103 +332,103 @@ struct player_struct
void backupxyz()
{
PlayerOldPosition = PlayerNowPosition;
GetActor()->opos = GetActor()->spr.pos;
}
void restorexyz()
{
PlayerNowPosition = PlayerOldPosition;
GetActor()->spr.pos = GetActor()->opos;
}
void backupxy()
{
PlayerOldPosition.X = PlayerNowPosition.X;
PlayerOldPosition.Y = PlayerNowPosition.Y;
GetActor()->opos.X = GetActor()->spr.pos.X;
GetActor()->opos.Y = GetActor()->spr.pos.Y;
}
void backupz()
{
PlayerOldPosition.Z = PlayerNowPosition.Z;
GetActor()->opos.Z = GetActor()->spr.pos.Z;
}
void setbobpos()
{
bobpos = PlayerNowPosition.XY();
bobpos = GetActor()->spr.pos.XY();
}
double& posX()
{
return PlayerNowPosition.X;
return GetActor()->spr.pos.X;
}
double& posY()
{
return PlayerNowPosition.Y;
return GetActor()->spr.pos.Y;
}
DVector2& posXY()
{
return PlayerNowPosition.XY();
return GetActor()->spr.pos.XY();
}
void posZset(const double val)
{
PlayerNowPosition.Z = val;
GetActor()->spr.pos.Z = val - GetActor()->viewzoffset;
}
void posZadd(const double val)
{
PlayerNowPosition.Z += val;
GetActor()->spr.pos.Z += val;
}
double posZget()
{
return PlayerNowPosition.Z;
return GetActor()->spr.pos.Z + GetActor()->viewzoffset;
}
void posSet(const DVector3& val)
{
PlayerNowPosition = val;
GetActor()->spr.pos = val.plusZ(-GetActor()->viewzoffset);
}
void posAdd(const DVector3& val)
{
PlayerNowPosition += val;
GetActor()->spr.pos += val;
}
void posAdd(const DVector2& val)
{
PlayerNowPosition.XY() += val;
GetActor()->spr.pos.XY() += val;
}
DVector3 posGet()
{
return PlayerNowPosition;
return GetActor()->spr.pos.plusZ(GetActor()->viewzoffset);
}
double& posoldX()
{
return PlayerOldPosition.X;
return GetActor()->opos.X;
}
double& posoldY()
{
return PlayerOldPosition.Y;
return GetActor()->opos.Y;
}
DVector2& posoldXY()
{
return PlayerOldPosition.XY();
return GetActor()->opos.XY();
}
void posoldZset(const double val)
{
PlayerOldPosition.Z = val;
GetActor()->opos.Z = val - GetActor()->viewzoffset;
}
double posoldZget()
{
return PlayerOldPosition.Z;
return GetActor()->opos.Z + GetActor()->viewzoffset;
}
void posoldAdd(const DVector3& val)
{
PlayerOldPosition += val;
GetActor()->opos += val;
}
DVector3 posoldGet()
{
return PlayerOldPosition;
return GetActor()->opos.plusZ(GetActor()->viewzoffset);
}
};

View file

@ -513,7 +513,6 @@ DEFINE_FIELD_X(DukePlayer, player_struct, loogcnt)
DEFINE_FIELD_X(DukePlayer, player_struct, invdisptime)
//DEFINE_FIELD_X(DukePlayer, player_struct, bobposx)
//DEFINE_FIELD_X(DukePlayer, player_struct, bobposy)
DEFINE_FIELD_X(DukePlayer, player_struct, PlayerNowPosition)
DEFINE_FIELD_X(DukePlayer, player_struct, pyoff)
DEFINE_FIELD_X(DukePlayer, player_struct, opyoff)
//DEFINE_FIELD_X(DukePlayer, player_struct, posxv)

View file

@ -235,10 +235,8 @@ class DukeCrane : DukeActor
else if (self.isactive)
{
let ang = p.angle();
p.backupxyz();
p.PlayerNowPosition.XY = self.pos.XY - CRANE_STEP * ang.ToVector();
p.PlayerNowPosition.Z = self.pos.Z + 2;
p.actor.SetPosition(p.PlayerNowPosition);
p.actor.backuppos();
p.actor.SetPosition((self.pos.XY - CRANE_STEP * ang.ToVector(), self.pos.Z + 2 - p.actor.viewzoffset));
p.cursector = p.actor.sector;
}
}

View file

@ -146,8 +146,6 @@ struct Duke native
struct DukePlayer native
{
native Vector3 PlayerNowPosition;
/*
// player's horizon and angle structs.
PlayerHorizon horizon;