From d9575402589a5e6c97be12fb18d630aaa8f6d569 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 25 Dec 2021 01:43:36 +0100 Subject: [PATCH] - targeting stuff in weapon.cpp --- source/games/sw/src/track.cpp | 5 +-- source/games/sw/src/weapon.cpp | 70 ++++++++++++++++------------------ 2 files changed, 34 insertions(+), 41 deletions(-) diff --git a/source/games/sw/src/track.cpp b/source/games/sw/src/track.cpp index ae8ae7fc6..2f3e6ccf7 100644 --- a/source/games/sw/src/track.cpp +++ b/source/games/sw/src/track.cpp @@ -698,10 +698,9 @@ void SectorObjectSetupBounds(SECTOR_OBJECTp sop) { I_Error("SOP bound sprite with hitag %d not found", 500 + (int(sop - SectorObject) * 5)); } - auto BoundSprite = &BoundActor->s(); - xlow = BoundSprite->pos.X; - ylow = BoundSprite->pos.Y; + xlow = BoundActor->spr.pos.X; + ylow = BoundActor->spr.pos.Y; KillActor(BoundActor); diff --git a/source/games/sw/src/weapon.cpp b/source/games/sw/src/weapon.cpp index 2b33fbe9e..f241f474b 100644 --- a/source/games/sw/src/weapon.cpp +++ b/source/games/sw/src/weapon.cpp @@ -13013,37 +13013,35 @@ DSWActor* WeaponAutoAimHitscan(DSWActor* actor, int *z, short *ang, bool test) } } - DSWActor* hitActor; - if ((hitActor = DoPickTarget(actor, *ang, test)) != nullptr) + DSWActor* picked; + if ((picked = DoPickTarget(actor, *ang, test)) != nullptr) { - SPRITEp hp = &hitActor->s(); - USERp hu = hitActor->u(); - SET(hu->Flags, SPR_TARGETED); - SET(hu->Flags, SPR_ATTACKED); + SET(picked->user.Flags, SPR_TARGETED); + SET(picked->user.Flags, SPR_ATTACKED); - *ang = NORM_ANGLE(getangle(hp->pos.X - actor->spr.pos.X, hp->pos.Y - actor->spr.pos.Y)); + *ang = NORM_ANGLE(getangle(picked->spr.pos.X - actor->spr.pos.X, picked->spr.pos.Y - actor->spr.pos.Y)); // 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 - picked->spr.pos.X) + SQ(actor->spr.pos.Y - picked->spr.pos.Y)); if (dist != 0) { - zh = GetSpriteZOfTop(hp) + (GetSpriteSizeZ(hp) >> 2); + zh = ActorZOfTop(picked) + (ActorSizeZ(picked) >> 2); xvect = bcos(*ang); yvect = bsin(*ang); - if (hp->pos.X - actor->spr.pos.X != 0) - *z = Scale(xvect,zh - *z,hp->pos.X - actor->spr.pos.X); - else if (hp->pos.Y - actor->spr.pos.Y != 0) - *z = Scale(yvect,zh - *z,hp->pos.Y - actor->spr.pos.Y); + if (picked->spr.pos.X - actor->spr.pos.X != 0) + *z = Scale(xvect,zh - *z,picked->spr.pos.X - actor->spr.pos.X); + else if (picked->spr.pos.Y - actor->spr.pos.Y != 0) + *z = Scale(yvect,zh - *z,picked->spr.pos.Y - actor->spr.pos.Y); else *z = 0; } } - return hitActor; + return picked; } void WeaponHitscanShootFeet(DSWActor* actor, DSWActor* hitActor, int *zvect) @@ -14174,11 +14172,11 @@ int InitMicro(PLAYERp pp) { DSWActor* actor = pp->actor; USERp u = actor->u(); - USERp wu,hu; - SPRITEp hp; + USERp wu; int nx, ny, nz, dist; short i,ang; TARGET_SORTp ts = TargetSort; + DSWActor* picked = nullptr; nx = pp->pos.X; ny = pp->pos.Y; @@ -14197,17 +14195,15 @@ int InitMicro(PLAYERp pp) { if (ts < &TargetSort[TargetSortCount] && ts->actor != nullptr) { - hp = &ts->actor->s(); - hu = ts->actor->u(); + picked = ts->actor; - ang = getangle(hp->pos.X - nx, hp->pos.Y - ny); + ang = getangle(picked->spr.pos.X - nx, picked->spr.pos.Y - ny); ts++; } else { - hp = nullptr; - hu = nullptr; + picked = nullptr; ang = pp->angle.ang.asbuild(); } @@ -14273,19 +14269,19 @@ int InitMicro(PLAYERp pp) const int MICRO_ANG = 400; - if (hp) + if (picked) { - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, hp->pos.X, hp->pos.Y); + dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, picked->spr.pos.X, picked->spr.pos.Y); if (dist != 0) { int zh; - zh = GetSpriteZOfTop(hp) + (GetSpriteSizeZ(hp) >> 2); + zh = ActorZOfTop(picked) + (ActorSizeZ(picked) >> 2); actorNew->spr.zvel = (actorNew->spr.xvel * (zh - actorNew->spr.pos.Z)) / dist; } wu->WpnGoalActor = ts->actor; - SET(hu->Flags, SPR_TARGETED); - SET(hu->Flags, SPR_ATTACKED); + SET(picked->user.Flags, SPR_TARGETED); + SET(picked->user.Flags, SPR_ATTACKED); } else { @@ -16045,11 +16041,11 @@ int InitTurretMicro(DSWActor* actor, PLAYERp pp) USERp u = actor->u(); USERp pu = pp->Actor()->u(); - USERp wu,hu; - SPRITEp hp; + USERp wu; int nx, ny, nz, dist; short i,ang; TARGET_SORTp ts = TargetSort; + DSWActor* picked = nullptr; if (SW_SHAREWARE) return false; // JBF: verify @@ -16068,17 +16064,15 @@ int InitTurretMicro(DSWActor* actor, PLAYERp pp) { if (ts < &TargetSort[TargetSortCount] && ts->actor != nullptr) { - hp = &ts->actor->s(); - hu = ts->actor->u(); + picked = ts->actor; - ang = getangle(hp->pos.X - nx, hp->pos.Y - ny); + ang = getangle(picked->spr.pos.X - nx, picked->spr.pos.Y - ny); ts++; } else { - hp = nullptr; - hu = nullptr; + picked = nullptr; ang = actor->spr.ang; } @@ -16118,19 +16112,19 @@ int InitTurretMicro(DSWActor* actor, PLAYERp pp) const int MICRO_ANG = 400; - if (hp) + if (picked) { - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, hp->pos.X, hp->pos.Y); + dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, picked->spr.pos.X, picked->spr.pos.Y); if (dist != 0) { int zh; - zh = GetSpriteZOfTop(hp) + (GetSpriteSizeZ(hp) >> 2); + zh = ActorZOfTop(picked) + (ActorSizeZ(picked) >> 2); actorNew->spr.zvel = (actorNew->spr.xvel * (zh - actorNew->spr.pos.Z)) / dist; } wu->WpnGoalActor = ts->actor; - SET(hu->Flags, SPR_TARGETED); - SET(hu->Flags, SPR_ATTACKED); + SET(picked->user.Flags, SPR_TARGETED); + SET(picked->user.Flags, SPR_ATTACKED); } else {