- the final s() in SW.

This commit is contained in:
Christoph Oelckers 2021-12-25 18:33:45 +01:00
parent 6729dbd684
commit 4dad58e557

View file

@ -10929,7 +10929,6 @@ int DoFireball(DSWActor* actor)
{ {
case kHitSprite: case kHitSprite:
{ {
SPRITEp hsp;
USERp hu; USERp hu;
auto hitActor = u->coll.actor(); auto hitActor = u->coll.actor();
@ -11654,16 +11653,15 @@ int DoSerpRing(DSWActor* actor)
u->ID = SKULL_SERP; u->ID = SKULL_SERP;
return 0; return 0;
} }
auto osp = &own->s();
auto ou = own->u(); auto ou = own->u();
// move the center with the player // move the center with the player
actor->spr.pos.X = osp->pos.X; actor->spr.pos.X = own->spr.pos.X;
actor->spr.pos.Y = osp->pos.Y; actor->spr.pos.Y = own->spr.pos.Y;
actor->spr.pos.Z += actor->spr.zvel; actor->spr.pos.Z += actor->spr.zvel;
if (actor->spr.pos.Z > osp->pos.Z - u->sz) if (actor->spr.pos.Z > own->spr.pos.Z - u->sz)
actor->spr.pos.Z = osp->pos.Z - u->sz; actor->spr.pos.Z = own->spr.pos.Z - u->sz;
// go out until its time to come back in // go out until its time to come back in
if (u->Counter2 == false) if (u->Counter2 == false)
@ -12214,7 +12212,6 @@ int InitSwordAttack(PLAYERp pp)
if (TEST(pp->Flags, PF_DIVING)) if (TEST(pp->Flags, PF_DIVING))
{ {
DSWActor* bubble; DSWActor* bubble;
SPRITEp bp;
int nx, ny; int nx, ny;
short random_amt; short random_amt;
@ -12229,15 +12226,13 @@ int InitSwordAttack(PLAYERp pp)
bubble = SpawnBubble(pp->Actor()); bubble = SpawnBubble(pp->Actor());
if (bubble != nullptr) if (bubble != nullptr)
{ {
bp = &bubble->s(); bubble->spr.ang = pp->angle.ang.asbuild();
bp->ang = pp->angle.ang.asbuild();
random_amt = (RANDOM_P2(32 << 8) >> 8) - 16; random_amt = (RANDOM_P2(32 << 8) >> 8) - 16;
// back it up a bit to get it out of your face // back it up a bit to get it out of your face
nx = MOVEx((1024 + 256) * 3, NORM_ANGLE(bp->ang + dangs[i] + random_amt)); nx = MOVEx((1024 + 256) * 3, NORM_ANGLE(bubble->spr.ang + dangs[i] + random_amt));
ny = MOVEy((1024 + 256) * 3, NORM_ANGLE(bp->ang + dangs[i] + random_amt)); ny = MOVEy((1024 + 256) * 3, NORM_ANGLE(bubble->spr.ang + dangs[i] + random_amt));
move_missile(bubble, nx, ny, 0, u->ceiling_dist, u->floor_dist, CLIPMASK_PLAYER, 1); move_missile(bubble, nx, ny, 0, u->ceiling_dist, u->floor_dist, CLIPMASK_PLAYER, 1);
} }
@ -12382,7 +12377,6 @@ int InitFistAttack(PLAYERp pp)
{ {
DSWActor* plActor = pp->actor; DSWActor* plActor = pp->actor;
USERp u = plActor->u(),tu; USERp u = plActor->u(),tu;
auto psp = &plActor->s();
unsigned stat; unsigned stat;
int dist; int dist;
short reach,face; short reach,face;
@ -12392,7 +12386,6 @@ int InitFistAttack(PLAYERp pp)
if (TEST(pp->Flags, PF_DIVING)) if (TEST(pp->Flags, PF_DIVING))
{ {
DSWActor* bubble; DSWActor* bubble;
SPRITEp bp;
int nx,ny; int nx,ny;
short random_amt; short random_amt;
@ -12406,15 +12399,13 @@ int InitFistAttack(PLAYERp pp)
bubble = SpawnBubble(pp->Actor()); bubble = SpawnBubble(pp->Actor());
if (bubble != nullptr) if (bubble != nullptr)
{ {
bp = &bubble->s(); bubble->spr.ang = pp->angle.ang.asbuild();
bp->ang = pp->angle.ang.asbuild();
random_amt = (RANDOM_P2(32<<8)>>8) - 16; random_amt = (RANDOM_P2(32<<8)>>8) - 16;
// back it up a bit to get it out of your face // back it up a bit to get it out of your face
nx = MOVEx((1024+256)*3, NORM_ANGLE(bp->ang + dangs[i] + random_amt)); nx = MOVEx((1024+256)*3, NORM_ANGLE(bubble->spr.ang + dangs[i] + random_amt));
ny = MOVEy((1024+256)*3, NORM_ANGLE(bp->ang + dangs[i] + random_amt)); ny = MOVEy((1024+256)*3, NORM_ANGLE(bubble->spr.ang + dangs[i] + random_amt));
move_missile(bubble, nx, ny, 0L, u->ceiling_dist, u->floor_dist, CLIPMASK_PLAYER, 1); move_missile(bubble, nx, ny, 0L, u->ceiling_dist, u->floor_dist, CLIPMASK_PLAYER, 1);
} }
@ -12449,7 +12440,7 @@ int InitFistAttack(PLAYERp pp)
{ {
if (SpriteOverlapZ(pp->Actor(), itActor, Z(20)) || face == 190) 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, ActorZOfMiddle(plActor), psp->sector())) if (FAFcansee(itActor->spr.pos.X, itActor->spr.pos.Y, ActorZOfMiddle(itActor), itActor->spr.sector(), plActor->spr.pos.X, plActor->spr.pos.Y, ActorZOfMiddle(plActor), plActor->spr.sector()))
DoDamage(itActor, plActor); DoDamage(itActor, plActor);
if (face == 190) if (face == 190)
{ {
@ -12761,9 +12752,8 @@ int InitMiniSumoClap(DSWActor* actor)
auto targetActor = u->targetActor; auto targetActor = u->targetActor;
if (!targetActor) return 0; if (!targetActor) return 0;
auto tsp = &targetActor->s();
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, targetActor->spr.pos.X, targetActor->spr.pos.Y);
reach = 10000; reach = 10000;
@ -12771,7 +12761,7 @@ int InitMiniSumoClap(DSWActor* actor)
{ {
if (SpriteOverlapZ(actor, targetActor, Z(20))) if (SpriteOverlapZ(actor, targetActor, Z(20)))
{ {
if (FAFcansee(tsp->pos.X, tsp->pos.Y, ActorZOfMiddle(targetActor), tsp->sector(), actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor), actor->spr.sector())) if (FAFcansee(targetActor->spr.pos.X, targetActor->spr.pos.Y, ActorZOfMiddle(targetActor), targetActor->spr.sector(), actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor), actor->spr.sector()))
{ {
PlaySound(DIGI_CGTHIGHBONE, actor, v3df_follow | v3df_dontpan); PlaySound(DIGI_CGTHIGHBONE, actor, v3df_follow | v3df_dontpan);
DoDamage(targetActor, actor); DoDamage(targetActor, actor);
@ -12780,7 +12770,7 @@ int InitMiniSumoClap(DSWActor* actor)
} }
else if (dist < CloseRangeDist(targetActor, actor, reach)) else if (dist < CloseRangeDist(targetActor, actor, reach))
{ {
if (FAFcansee(tsp->pos.X, tsp->pos.Y, ActorZOfMiddle(targetActor), tsp->sector(), actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor), actor->spr.sector())) if (FAFcansee(targetActor->spr.pos.X, targetActor->spr.pos.Y, ActorZOfMiddle(targetActor), targetActor->spr.sector(), actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor), actor->spr.sector()))
{ {
PlaySound(DIGI_30MMEXPLODE, actor, v3df_none); PlaySound(DIGI_30MMEXPLODE, actor, v3df_none);
SpawnFireballFlames(actor, targetActor); SpawnFireballFlames(actor, targetActor);
@ -12921,16 +12911,15 @@ DSWActor* AimHitscanToTarget(DSWActor* actor, int *z, short *ang, int z_ratio)
if (hitActor == nullptr) if (hitActor == nullptr)
return nullptr; return nullptr;
hp = &hitActor->s();
hu = hitActor->u(); hu = hitActor->u();
SET(hu->Flags, SPR_TARGETED); SET(hu->Flags, SPR_TARGETED);
SET(hu->Flags, SPR_ATTACKED); SET(hu->Flags, SPR_ATTACKED);
*ang = getangle(hp->pos.X - actor->spr.pos.X, hp->pos.Y - actor->spr.pos.Y); *ang = getangle(hitActor->spr.pos.X - actor->spr.pos.X, hitActor->spr.pos.Y - actor->spr.pos.Y);
// find the distance to the target // find the distance to the target
dist = ksqrt(SQ(actor->spr.pos.X - hp->pos.X) + SQ(actor->spr.pos.Y - hp->pos.Y)); dist = ksqrt(SQ(actor->spr.pos.X - hitActor->spr.pos.X) + SQ(actor->spr.pos.Y - hitActor->spr.pos.Y));
if (dist != 0) if (dist != 0)
{ {
@ -12939,10 +12928,10 @@ DSWActor* AimHitscanToTarget(DSWActor* actor, int *z, short *ang, int z_ratio)
xvect = bcos(*ang); xvect = bcos(*ang);
yvect = bsin(*ang); yvect = bsin(*ang);
if (hp->pos.X - actor->spr.pos.X != 0) if (hitActor->spr.pos.X - actor->spr.pos.X != 0)
*z = Scale(xvect,zh - *z,hp->pos.X - actor->spr.pos.X); *z = Scale(xvect,zh - *z,hitActor->spr.pos.X - actor->spr.pos.X);
else if (hp->pos.Y - actor->spr.pos.Y != 0) else if (hitActor->spr.pos.Y - actor->spr.pos.Y != 0)
*z = Scale(yvect,zh - *z,hp->pos.Y - actor->spr.pos.Y); *z = Scale(yvect,zh - *z,hitActor->spr.pos.Y - actor->spr.pos.Y);
else else
*z = 0; *z = 0;
@ -13008,7 +12997,6 @@ DSWActor* WeaponAutoAimHitscan(DSWActor* actor, int *z, short *ang, bool test)
void WeaponHitscanShootFeet(DSWActor* actor, DSWActor* hitActor, int *zvect) void WeaponHitscanShootFeet(DSWActor* actor, DSWActor* hitActor, int *zvect)
{ {
auto hp = &hitActor->s();
int dist; int dist;
int zh; int zh;
int xvect; int xvect;
@ -13016,25 +13004,25 @@ void WeaponHitscanShootFeet(DSWActor* actor, DSWActor* hitActor, int *zvect)
int z; int z;
short ang; short ang;
ang = NORM_ANGLE(getangle(hp->pos.X - actor->spr.pos.X, hp->pos.Y - actor->spr.pos.Y)); ang = NORM_ANGLE(getangle(hitActor->spr.pos.X - actor->spr.pos.X, hitActor->spr.pos.Y - actor->spr.pos.Y));
// find the distance to the target // find the distance to the target
dist = ksqrt(SQ(actor->spr.pos.X - hp->pos.X) + SQ(actor->spr.pos.Y - hp->pos.Y)); dist = ksqrt(SQ(actor->spr.pos.X - hitActor->spr.pos.X) + SQ(actor->spr.pos.Y - hitActor->spr.pos.Y));
if (dist != 0) if (dist != 0)
{ {
zh = GetSpriteZOfBottom(hp) + Z(20); zh = ActorZOfBottom(hitActor) + Z(20);
z = actor->spr.pos.Z; z = actor->spr.pos.Z;
xvect = bcos(ang); xvect = bcos(ang);
yvect = bsin(ang); yvect = bsin(ang);
if (hp->pos.X - actor->spr.pos.X != 0) if (hitActor->spr.pos.X - actor->spr.pos.X != 0)
//*z = xvect * ((zh - *z)/(hp->pos.X - actor->spr.pos.X)); //*z = xvect * ((zh - *z)/(hitActor->spr.pos.X - actor->spr.pos.X));
*zvect = Scale(xvect,zh - z, hp->pos.X - actor->spr.pos.X); *zvect = Scale(xvect,zh - z, hitActor->spr.pos.X - actor->spr.pos.X);
else if (hp->pos.Y - actor->spr.pos.Y != 0) else if (hitActor->spr.pos.Y - actor->spr.pos.Y != 0)
//*z = yvect * ((zh - *z)/(hp->pos.Y - actor->spr.pos.Y)); //*z = yvect * ((zh - *z)/(hitActor->spr.pos.Y - actor->spr.pos.Y));
*zvect = Scale(yvect,zh - z, hp->pos.Y - actor->spr.pos.Y); *zvect = Scale(yvect,zh - z, hitActor->spr.pos.Y - actor->spr.pos.Y);
else else
*zvect = 0; *zvect = 0;
} }
@ -17343,12 +17331,13 @@ int InitEnemyFireball(DSWActor* actor)
512, -512 512, -512
}; };
tsp = &u->targetActor->s(); auto targetActor = u->targetActor;
if (!targetActor) return 0;
PlaySound(DIGI_FIREBALL1, actor, v3df_none); PlaySound(DIGI_FIREBALL1, actor, v3df_none);
// get angle to player and also face player when attacking // get angle to player and also face player when attacking
actor->spr.ang = NORM_ANGLE(getangle(tsp->pos.X - actor->spr.pos.X, tsp->pos.Y - actor->spr.pos.Y)); actor->spr.ang = NORM_ANGLE(getangle(targetActor->spr.pos.X - actor->spr.pos.X, targetActor->spr.pos.Y - actor->spr.pos.Y));
size_z = Z(ActorSizeY(actor)); size_z = Z(ActorSizeY(actor));
nz = actor->spr.pos.Z - size_z + (size_z >> 2) + (size_z >> 3) + Z(4); nz = actor->spr.pos.Z - size_z + (size_z >> 2) + (size_z >> 3) + Z(4);
@ -17388,11 +17377,10 @@ int InitEnemyFireball(DSWActor* actor)
lastvel = actorNew->spr.zvel; lastvel = actorNew->spr.zvel;
// find the distance to the target (player) // find the distance to the target (player)
dist = ksqrt(SQ(actorNew->spr.pos.X - tsp->pos.X) + SQ(actorNew->spr.pos.Y - tsp->pos.Y)); dist = ksqrt(SQ(actorNew->spr.pos.X - targetActor->spr.pos.X) + SQ(actorNew->spr.pos.Y - targetActor->spr.pos.Y));
//dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, tsp->pos.X, tsp->pos.Y);
// Determine target Z value // Determine target Z value
targ_z = tsp->pos.Z - (Z(ActorSizeY(actor)) >> 1); targ_z = targetActor->spr.pos.Z - (Z(ActorSizeY(actor)) >> 1);
// (velocity * difference between the target and the throwing star) / // (velocity * difference between the target and the throwing star) /
// distance // distance
@ -17814,29 +17802,27 @@ bool MissileHitDiveArea(DSWActor* actor)
DSWActor* SpawnBubble(DSWActor* actor) DSWActor* SpawnBubble(DSWActor* actor)
{ {
SPRITEp bp;
USERp bu; USERp bu;
if (Prediction) if (Prediction)
return nullptr; return nullptr;
auto actorNew = SpawnActor(STAT_MISSILE, BUBBLE, s_Bubble, actor->spr.sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); auto actorNew = SpawnActor(STAT_MISSILE, BUBBLE, s_Bubble, actor->spr.sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0);
bp = &actorNew->s();
bu = actorNew->u(); bu = actorNew->u();
bp->xrepeat = 8 + (RANDOM_P2(8 << 8) >> 8); actorNew->spr.xrepeat = 8 + (RANDOM_P2(8 << 8) >> 8);
bp->yrepeat = bp->xrepeat; actorNew->spr.yrepeat = actorNew->spr.xrepeat;
bu->sx = bp->xrepeat; bu->sx = actorNew->spr.xrepeat;
bu->sy = bp->yrepeat; bu->sy = actorNew->spr.yrepeat;
bu->ceiling_dist = Z(1); bu->ceiling_dist = Z(1);
bu->floor_dist = Z(1); bu->floor_dist = Z(1);
bp->shade = actor->spr.sector()->floorshade - 10; actorNew->spr.shade = actor->spr.sector()->floorshade - 10;
bu->WaitTics = 120 * 120; bu->WaitTics = 120 * 120;
bp->zvel = 512; actorNew->spr.zvel = 512;
bp->clipdist = 12 >> 2; actorNew->spr.clipdist = 12 >> 2;
SET(bp->cstat, CSTAT_SPRITE_YCENTER); SET(actorNew->spr.cstat, CSTAT_SPRITE_YCENTER);
SET(bu->Flags, SPR_UNDERWATER); SET(bu->Flags, SPR_UNDERWATER);
bp->shade = -60; // Make em brighter actorNew->spr.shade = -60; // Make em brighter
return actorNew; return actorNew;
} }