- refactored GetSpriteZOfMiddle (and all s() close by)

This commit is contained in:
Christoph Oelckers 2021-12-24 22:12:28 +01:00
parent 123e19e355
commit 8e8f59caa1
6 changed files with 25 additions and 42 deletions

View file

@ -425,7 +425,6 @@ int NullEel(DSWActor* actor)
int DoEelMatchPlayerZ(DSWActor* actor)
{
USER* u = actor->u();
SPRITEp tsp = &u->targetActor->s();
int zdiff,zdist;
int loz,hiz;
int dist,a,b,c;
@ -448,7 +447,7 @@ int DoEelMatchPlayerZ(DSWActor* actor)
// actor does a sine wave about u->sz - this is the z mid point
zdiff = (GetSpriteZOfBottom(tsp) - Z(8)) - u->sz;
zdiff = (ActorZOfBottom(u->targetActor) - Z(8)) - u->sz;
// check z diff of the player and the sprite
zdist = Z(20 + RandomRange(64)); // put a random amount

View file

@ -266,11 +266,6 @@ inline int GetSpriteZOfBottom(const spritetypebase* sp)
}
// mid and upper/lower sprite calculations
inline int GetSpriteZOfMiddle(const spritetypebase* sp)
{
return (GetSpriteZOfTop(sp) + GetSpriteZOfBottom(sp)) >> 1;
}
constexpr int Z(int value)
{
return value << 8;
@ -2181,7 +2176,6 @@ inline int ActorZOfMiddle(DSWActor* actor)
return (ActorZOfTop(actor) + ActorZOfBottom(actor)) >> 1;
}
inline int ActorSizeZ(DSWActor* actor)
{
return (tileHeight(actor->spr.picnum) * actor->spr.yrepeat) << 2;
@ -2208,11 +2202,6 @@ inline int ActorSizeToBottom(DSWActor* a)
return ((ActorSizeZ(a)) - (tileTopOffset(a->spr.picnum) << 8)) >> 1;
}
inline int ActorMid(DSWActor* actor)
{
return GetSpriteZOfMiddle(&actor->s());
}
inline int ActorSizeX(DSWActor* sp)
{
return MulScale(tileWidth(sp->spr.picnum), sp->spr.xrepeat, 6);

View file

@ -347,7 +347,6 @@ enum { HORNET_BOB_AMT = (Z(16)) };
int DoHornetMatchPlayerZ(DSWActor* actor)
{
USERp u = actor->u();
SPRITEp tsp = &u->targetActor->s();
int zdiff,zdist;
int loz,hiz;
@ -355,7 +354,7 @@ int DoHornetMatchPlayerZ(DSWActor* actor)
// actor does a sine wave about u->sz - this is the z mid point
zdiff = (GetSpriteZOfMiddle(tsp)) - u->sz;
zdiff = (ActorZOfMiddle(u->targetActor)) - u->sz;
// check z diff of the player and the sprite
zdist = Z(20 + RandomRange(200)); // put a random amount

View file

@ -2011,15 +2011,14 @@ int DoCarryFlag(DSWActor* actor)
SPRITEp fp = &fown->s();
USERp fu = fown->u();
DSWActor* attached = u->attachActor;
// if no Owner then die
if (u->attachActor != nullptr)
if (attached != nullptr)
{
SPRITEp ap = &u->attachActor->s();
vec3_t pos = { ap->pos.X, ap->pos.Y, GetSpriteZOfMiddle(ap) };
vec3_t pos = { attached->spr.pos.X, attached->spr.pos.Y, ActorZOfMiddle(attached) };
SetActorZ(actor, &pos);
actor->spr.ang = NORM_ANGLE(ap->ang + 1536);
actor->spr.ang = NORM_ANGLE(attached->spr.ang + 1536);
}
// not activated yet
@ -2160,8 +2159,8 @@ int DoCarryFlagNoDet(DSWActor* actor)
{
USER* u = actor->u();
SPRITEp ap = &u->attachActor->s();
USERp au = u->attachActor->u();
DSWActor* attached = u->attachActor;
USERp au = attached->u();
DSWActor* fown = u->flagOwnerActor;
if (!fown) return 0;
SPRITEp fp = &fown->s();
@ -2172,12 +2171,12 @@ int DoCarryFlagNoDet(DSWActor* actor)
fu->WaitTics = 30 * 120; // Keep setting respawn tics so it won't respawn
// if no Owner then die
if (ap != nullptr)
if (attached != nullptr)
{
vec3_t pos = { ap->pos.X, ap->pos.Y, GetSpriteZOfMiddle(ap) };
vec3_t pos = { attached->spr.pos.X, attached->spr.pos.Y, ActorZOfMiddle(attached) };
SetActorZ(actor, &pos);
actor->spr.ang = NORM_ANGLE(ap->ang + 1536);
actor->spr.pos.Z = ap->pos.Z - DIV2(GetSpriteSizeZ(ap));
actor->spr.ang = NORM_ANGLE(attached->spr.ang + 1536);
actor->spr.pos.Z = attached->spr.pos.Z - (ActorSizeZ(attached) >> 1);
}
if (!au || au->Health <= 0)

View file

@ -3581,7 +3581,7 @@ int ActorCoughItem(DSWActor* actor)
actorNew->spr.extra = 0;
actorNew->spr.pos.X = sp->pos.X;
actorNew->spr.pos.Y = sp->pos.Y;
actorNew->spr.pos.Z = GetSpriteZOfMiddle(sp);
actorNew->spr.pos.Z = ActorZOfMiddle(actor);
actorNew->spr.ang = 0;
actorNew->spr.extra = 0;
@ -3622,7 +3622,7 @@ int ActorCoughItem(DSWActor* actor)
actorNew->spr.extra = 0;
actorNew->spr.pos.X = sp->pos.X;
actorNew->spr.pos.Y = sp->pos.Y;
actorNew->spr.pos.Z = GetSpriteZOfMiddle(sp);
actorNew->spr.pos.Z = ActorZOfMiddle(actor);
actorNew->spr.ang = 0;
actorNew->spr.extra = 0;
@ -3650,7 +3650,7 @@ int ActorCoughItem(DSWActor* actor)
actorNew->spr.extra = 0;
actorNew->spr.pos.X = sp->pos.X;
actorNew->spr.pos.Y = sp->pos.Y;
actorNew->spr.pos.Z = GetSpriteZOfMiddle(sp);
actorNew->spr.pos.Z = ActorZOfMiddle(actor);
actorNew->spr.ang = 0;
actorNew->spr.extra = 0;
@ -3681,7 +3681,7 @@ int ActorCoughItem(DSWActor* actor)
actorNew->spr.extra = 0;
actorNew->spr.pos.X = sp->pos.X;
actorNew->spr.pos.Y = sp->pos.Y;
actorNew->spr.pos.Z = GetSpriteZOfMiddle(sp);
actorNew->spr.pos.Z = ActorZOfMiddle(actor);
actorNew->spr.ang = 0;
actorNew->spr.extra = 0;
@ -3743,7 +3743,7 @@ int ActorCoughItem(DSWActor* actor)
actorNew->spr.extra = 0;
actorNew->spr.pos.X = sp->pos.X;
actorNew->spr.pos.Y = sp->pos.Y;
actorNew->spr.pos.Z = GetSpriteZOfMiddle(sp);
actorNew->spr.pos.Z = ActorZOfMiddle(actor);
actorNew->spr.ang = 0;
actorNew->spr.extra = 0;
@ -5988,7 +5988,7 @@ KeyMain:
RESET(actorNew->spr.cstat, CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN);
SET(actorNew->spr.cstat, CSTAT_SPRITE_ALIGNMENT_WALL);
SetAttach(pp->Actor(), actorNew);
nu->sz = GetSpriteZOfMiddle(&pp->Actor()->s()); // Set mid way up who it hit
nu->sz = ActorZOfMiddle(pp->Actor()); // Set mid way up who it hit
nu->spal = actorNew->spr.pal = sp->pal; // Set the palette of the flag
SetOwner(pp->Actor(), actorNew); // Player now owns the flag

View file

@ -11539,7 +11539,6 @@ int DoRing(DSWActor* actor)
auto own = GetOwner(actor);
if (!own) return 0; // this would crash.
PLAYERp pp = own->user.PlayerP;;
SPRITEp so = &own->s();
int cz,fz;
if (TEST(u->Flags, SPR_UNDERWATER))
@ -11554,12 +11553,12 @@ int DoRing(DSWActor* actor)
}
// move the center with the player
actor->spr.pos.X = so->pos.X;
actor->spr.pos.Y = so->pos.Y;
actor->spr.pos.X = own->spr.pos.X;
actor->spr.pos.Y = own->spr.pos.Y;
if (pp)
actor->spr.pos.Z = pp->pos.Z + Z(20);
else
actor->spr.pos.Z = GetSpriteZOfMiddle(so) + Z(30);
actor->spr.pos.Z = ActorZOfMiddle(own) + Z(30);
// go out until its time to come back in
if (u->Counter2 == false)
@ -12492,7 +12491,7 @@ int InitFistAttack(PLAYERp pp)
{
if (SpriteOverlapZ(pp->Actor(), itActor, Z(20)) || face == 190)
{
if (FAFcansee(itActor->spr.pos.X, itActor->spr.pos.Y, ActorZOfMiddle(itActor), itActor->spr.sector(), psp->pos.X, psp->pos.Y, GetSpriteZOfMiddle(psp), psp->sector()))
if (FAFcansee(itActor->spr.pos.X, itActor->spr.pos.Y, ActorZOfMiddle(itActor), itActor->spr.sector(), psp->pos.X, psp->pos.Y, ActorZOfMiddle(plActor), psp->sector()))
DoDamage(itActor, plActor);
if (face == 190)
{
@ -12775,21 +12774,19 @@ int InitSumoStompAttack(DSWActor* actor)
SWStatIterator it(StatDamageList[stat]);
while (auto itActor = it.Next())
{
tsp = &itActor->s();
if (itActor != u->targetActor)
break;
if (!TEST(tsp->extra, SPRX_PLAYER_OR_ENEMY))
if (!TEST(itActor->spr.extra, SPRX_PLAYER_OR_ENEMY))
continue;
dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, tsp->pos.X, tsp->pos.Y);
dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, itActor->spr.pos.X, itActor->spr.pos.Y);
reach = 16384;
if (dist < CloseRangeDist(itActor, actor, reach))
{
if (FAFcansee(tsp->pos.X,tsp->pos.Y,GetSpriteZOfMiddle(tsp),tsp->sector(),actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->spr.sector()))
if (FAFcansee(itActor->spr.pos.X, itActor->spr.pos.Y, ActorZOfMiddle(itActor), itActor->spr.sector(), actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor), actor->spr.sector()))
DoDamage(itActor, actor);
}
}