- large batch of set_int_pos, minus Exhumed

This commit is contained in:
Christoph Oelckers 2022-08-16 23:46:18 +02:00
parent 5f586ee40c
commit 64391c52f9
8 changed files with 22 additions and 34 deletions

View file

@ -429,6 +429,7 @@ struct walltype
walltype* point2Wall() const;
vec2_t delta() const { return point2Wall()->wall_int_pos() - wall_int_pos(); }
vec2_t center() const { return(point2Wall()->wall_int_pos() + wall_int_pos()) / 2; }
DVector2 fcenter() const { return(point2Wall()->pos + pos) / 2; }
int deltax() const { return point2Wall()->wall_int_pos().X - wall_int_pos().X; }
int deltay() const { return point2Wall()->wall_int_pos().Y - wall_int_pos().Y; }
bool twoSided() const { return nextsector >= 0; }

View file

@ -4541,9 +4541,7 @@ static Collision MoveThing(DBloodActor* actor)
actor->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL;
if ((actor->GetOwner()) && !cl_bloodvanillaexplosions && !VanillaMode())
enginecompatibility_mode = ENGINECOMPATIBILITY_NONE; // improved clipmove accuracy
auto pos = actor->int_pos();
ClipMove(pos, &pSector, actor->vel.X >> 12, actor->vel.Y >> 12, actor->spr.clipdist << 2, (actor->int_pos().Z - top) / 4, (bottom - actor->int_pos().Z) / 4, CLIPMASK0, lhit);
actor->set_int_pos(pos);
ClipMove(actor->spr.pos, &pSector, actor->vel.X >> 12, actor->vel.Y >> 12, actor->spr.clipdist << 2, (actor->int_pos().Z - top) / 4, (bottom - actor->int_pos().Z) / 4, CLIPMASK0, lhit);
actor->hit.hit = lhit;
enginecompatibility_mode = bakCompat; // restore
actor->spr.cstat = bakCstat;
@ -4763,9 +4761,7 @@ void MoveDude(DBloodActor* actor)
{
auto bakCstat = actor->spr.cstat;
actor->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL;
auto pos = actor->int_pos();
ClipMove(pos, &pSector, actor->vel.X >> 12, actor->vel.Y >> 12, wd, tz, bz, CLIPMASK0, actor->hit.hit);
actor->set_int_pos(pos);
ClipMove(actor->spr.pos, &pSector, actor->vel.X >> 12, actor->vel.Y >> 12, wd, tz, bz, CLIPMASK0, actor->hit.hit);
if (pSector == nullptr)
{
pSector = actor->sector();

View file

@ -444,7 +444,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF
break;
sectortype* pSector = pTSprite->sectp;
pNSprite->set_int_pos({ pTSprite->int_pos().X, pTSprite->int_pos().Y, pSector->int_ceilingz() });
pNSprite->pos = { pTSprite->pos.X, pTSprite->pos.Y, pSector->ceilingz };
pNSprite->picnum = 624;
pNSprite->shade = ((pTSprite->int_pos().Z - pSector->int_ceilingz()) >> 8) - 64;
@ -462,7 +462,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF
break;
sectortype* pSector = pTSprite->sectp;
pNSprite->set_int_pos({ pTSprite->int_pos().X, pTSprite->int_pos().Y, pSector->int_floorz() });
pNSprite->pos = { pTSprite->pos.X, pTSprite->pos.Y, pSector->floorz };
pNSprite->picnum = 624;
uint8_t nShade = (pSector->int_floorz() - pTSprite->int_pos().Z) >> 8;
pNSprite->shade = nShade - 32;
@ -499,7 +499,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF
if (!pNSprite)
break;
pNSprite->set_int_pos({ pTSprite->int_pos().X, pTSprite->int_pos().Y, pTSprite->int_pos().Z - (32 << 8) - (weaponIcon.zOffset << 8) });
pNSprite->pos = pTSprite->pos.plusZ(-32 - weaponIcon.zOffset);
pNSprite->picnum = nTile;
pNSprite->shade = pTSprite->shade;
pNSprite->xrepeat = 32;

View file

@ -47,6 +47,13 @@ void GetZRange(DBloodActor* pSprite, int* ceilZ, Collision* ceilHit, int* floorZ
void GetZRangeAtXYZ(int x, int y, int z, sectortype* pSector, int* ceilZ, Collision* ceilHit, int* floorZ, Collision* floorHit, int nDist, unsigned int nMask, unsigned int nClipParallax = 0);
int GetDistToLine(int x1, int y1, int x2, int y2, int x3, int y3);
void ClipMove(vec3_t& pos, sectortype** pSector, int xv, int yv, int wd, int cd, int fd, unsigned int nMask, CollisionBase& hit, int tracecount = 3);
inline void ClipMove(DVector3& pos, sectortype** pSector, int xv, int yv, int wd, int cd, int fd, unsigned int nMask, CollisionBase& hit, int tracecount = 3)
{
// this uses floats only partially.
vec3_t ipos = { int(pos.X * worldtoint), int(pos.Y * worldtoint), int(pos.Z * zworldtoint)};
ClipMove(ipos, pSector, xv, yv, wd, cd, fd, nMask, hit, tracecount);
pos = { ipos.X * inttoworld, ipos.Y * inttoworld, ipos.Z * zinttoworld };
}
BitArray GetClosestSpriteSectors(sectortype* pSector, int x, int y, int nDist, TArray<walltype*>* pWalls, bool newSectCheckMethod = false);
int picWidth(int nPic, int repeat);
int picHeight(int nPic, int repeat);

View file

@ -977,7 +977,7 @@ static DBloodActor* randomDropPickupObject(DBloodActor* sourceactor, int prevIte
if (spawned)
{
sourceactor->xspr.dropMsg = uint8_t(spawned->spr.type); // store dropped item type in dropMsg
spawned->set_int_pos(sourceactor->int_pos());
spawned->spr.pos = sourceactor->spr.pos;
if ((sourceactor->spr.flags & kModernTypeFlag1) && (sourceactor->xspr.txID > 0 || (sourceactor->xspr.txID != 3 && sourceactor->xspr.lockMsg > 0)))
{
@ -1676,10 +1676,8 @@ void debrisMove(int listIndex)
auto oldcstat = actor->spr.cstat;
actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN);
auto pos = actor->int_pos();
ClipMove(pos, &pSector, actor->vel.X >> 12,
ClipMove(actor->spr.pos, &pSector, actor->vel.X >> 12,
actor->vel.Y >> 12, clipDist, ceilDist, floorDist, CLIPMASK0, moveHit);
actor->set_int_pos(pos);
actor->hit.hit = moveHit;
actor->spr.cstat = oldcstat;

View file

@ -2957,16 +2957,11 @@ static void fireflyflyingeffect(DDukeActor *actor)
else
actor->spr.cstat &= ~CSTAT_SPRITE_INVISIBLE;
double dx = Owner->int_pos().X - ps[p].GetActor()->int_pos().X;
double dy = Owner->int_pos().Y - ps[p].GetActor()->int_pos().Y;
double dist = sqrt(dx * dx + dy * dy);
if (dist != 0.0)
{
dx /= dist;
dy /= dist;
}
auto dvec = Owner->spr.pos.XY() - ps[p].GetActor()->spr.pos.XY();
double dist = dvec.Length();
actor->set_int_pos({ (int)(Owner->int_pos().X - (dx * -10.0)), (int)(Owner->int_pos().Y - (dy * -10.0)), Owner->int_pos().Z + 2048 });
if (dist != 0.0) dvec /= dist;
actor->spr.pos = Owner->spr.pos + DVector3(dvec.X * -0.625, dvec.Y * -0.625, 8);
if (Owner->spr.extra <= 0)
{

View file

@ -427,7 +427,6 @@ void DoMotionBlur(tspriteArray& tsprites, tspritetype const * const tsp)
void WarpCopySprite(tspriteArray& tsprites)
{
int spnum;
int xoff,yoff,zoff;
int match;
// look for the first one
@ -456,15 +455,7 @@ void WarpCopySprite(tspriteArray& tsprites)
tspritetype* newTSpr = renderAddTsprite(tsprites, itActor2);
newTSpr->statnum = 0;
xoff = itActor->int_pos().X - newTSpr->int_pos().X;
yoff = itActor->int_pos().Y - newTSpr->int_pos().Y;
zoff = itActor->int_pos().Z - newTSpr->int_pos().Z;
newTSpr->set_int_pos({
itActor1->int_pos().X - xoff,
itActor1->int_pos().Y - yoff,
itActor1->int_pos().Z - zoff });
newTSpr->pos += itActor1->spr.pos - itActor->spr.pos;
newTSpr->sectp = itActor1->sector();
}
@ -481,7 +472,7 @@ void WarpCopySprite(tspriteArray& tsprites)
newTSpr->statnum = 0;
auto off = itActor1->int_pos() - newTSpr->int_pos();
newTSpr->set_int_pos(itActor->int_pos() - off);
newTSpr->pos += itActor->spr.pos - itActor1->spr.pos;
newTSpr->sectp = itActor->sector();
}
}

View file

@ -1716,7 +1716,7 @@ void UpdatePlayerUnderSprite(PLAYER* pp)
DSWActor* act_under = pp->PlayerUnderActor;
act_under->set_int_pos(act_over->int_pos());
act_under->spr.pos = act_over->spr.pos;
ChangeActorSect(act_under, act_over->sector());
SpriteWarpToUnderwater(act_under);