mirror of
https://github.com/DrBeef/Raze.git
synced 2025-03-23 01:30:58 +00:00
- Duke: Swap out the internals of the player's pos methods and get the game going again.
This commit is contained in:
parent
202137ed69
commit
dd5834444e
8 changed files with 32 additions and 45 deletions
|
@ -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++;
|
||||
|
|
|
@ -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, §, 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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -146,8 +146,6 @@ struct Duke native
|
|||
|
||||
struct DukePlayer native
|
||||
{
|
||||
native Vector3 PlayerNowPosition;
|
||||
|
||||
/*
|
||||
// player's horizon and angle structs.
|
||||
PlayerHorizon horizon;
|
||||
|
|
Loading…
Reference in a new issue