- besttarget and Player::nTarget.

This commit is contained in:
Christoph Oelckers 2021-10-21 22:18:29 +02:00
parent 8e13bb6e35
commit 076a995c6e
8 changed files with 31 additions and 36 deletions

View file

@ -153,7 +153,7 @@ short bInDemo = false;
short bSlipMode = false;
short bDoFlashes = true;
short besttarget;
DExhumedActor* bestTarget;
short scan_char = 0;
@ -429,11 +429,11 @@ void GameInterface::Ticker()
sPlayerInput[nLocalPlayer].xVel = lPlayerXVel;
sPlayerInput[nLocalPlayer].yVel = lPlayerYVel;
sPlayerInput[nLocalPlayer].buttons = lLocalCodes;
sPlayerInput[nLocalPlayer].nTarget = besttarget;
sPlayerInput[nLocalPlayer].pTarget = bestTarget;
sPlayerInput[nLocalPlayer].nAngle = localInput.avel;
sPlayerInput[nLocalPlayer].pan = localInput.horz;
Ra[nLocalPlayer].pTarget = &exhumedActors[besttarget];
Ra[nLocalPlayer].pTarget = bestTarget;
lLocalCodes = 0;
@ -521,8 +521,8 @@ void DeleteActor(DExhumedActor* actor)
deletesprite(actor->GetSpriteIndex());
actor->s().ox = 0x80000000;
if (actor->GetSpriteIndex() == besttarget) {
besttarget = -1;
if (actor == bestTarget) {
bestTarget = nullptr;
}
}
@ -625,7 +625,7 @@ void SerializeState(FSerializer& arc)
InitEnergyTile();
}
arc ("besttarget", besttarget)
arc ("besttarget", bestTarget)
("creaturestotal", nCreaturesTotal)
("creatureskilled", nCreaturesKilled)
("freeze", nFreeze)

View file

@ -66,7 +66,6 @@ void TintPalette(int a, int b, int c);
void EraseScreen(int eax);
void mychangespritesect(int nSprite, int nSector);
void DeleteActor(DExhumedActor* actor);
void GrabPalette();

View file

@ -824,27 +824,22 @@ loc_flag:
int h = PlayerList[nLocalPlayer].horizon.horiz.asq16() >> 14;
nHeight -= h;
int target = 0;
bool gottarg = false;
if (sPlayerInput[nPlayer].nTarget >= 0 && Autoaim(nPlayer))
DExhumedActor* target = nullptr;
if (sPlayerInput[nPlayer].pTarget != nullptr && Autoaim(nPlayer))
{
int t = sPlayerInput[nPlayer].nTarget;
if (t >= 0 && t < MAXSPRITES)
auto t = sPlayerInput[nPlayer].pTarget;
// only autoaim if target is in front of the player.
auto pTargetSprite = &t->s();
assert(pTargetSprite->sectnum < kMaxSectors);
int angletotarget = bvectangbam(pTargetSprite->x - pPlayerSprite->x, pTargetSprite->y - pPlayerSprite->y).asbuild();
int anglediff = (pPlayerSprite->ang - angletotarget) & 2047;
if (anglediff < 512 || anglediff > 1536)
{
// only autoaim if target is in front of the player.
auto pTargetSprite = &sprite[t];
assert(pTargetSprite->sectnum < kMaxSectors);
int angletotarget = bvectangbam(pTargetSprite->x - pPlayerSprite->x, pTargetSprite->y - pPlayerSprite->y).asbuild();
int anglediff = (pPlayerSprite->ang - angletotarget) & 2047;
if (anglediff < 512 || anglediff > 1536)
{
target = t;
gottarg = true;
}
target = t;
}
}
BuildBullet(pPlayerActor, nAmmoType, nHeight, nAngle,gottarg? &exhumedActors[target] : nullptr, var_1C);
BuildBullet(pPlayerActor, nAmmoType, nHeight, nAngle, target, var_1C);
break;
}

View file

@ -33,10 +33,10 @@ enum {
// 32 bytes
struct PlayerInput
{
DExhumedActor* pTarget;
int xVel;
int yVel;
uint16_t buttons;
short nTarget;
float nAngle;
float pan;
int8_t nItem;

View file

@ -177,7 +177,7 @@ void AIRa::Tick(RunListEvent* ev)
bool bVal = false;
Ra[nPlayer].pTarget = sPlayerInput[nPlayer].nTarget <= -1? nullptr : &exhumedActors[sPlayerInput[nPlayer].nTarget] ;
Ra[nPlayer].pTarget = sPlayerInput[nPlayer].pTarget;
pSprite->picnum = seq_GetSeqPicnum2(nSeq, Ra[nPlayer].nFrame);
if (Ra[nPlayer].nAction)

View file

@ -178,9 +178,9 @@ void BuildSnake(short nPlayer, short zVal)
if (hitactor && hitactor->s().statnum >= 90 && hitactor->s().statnum <= 199) {
pTarget = hitactor;
}
else if (sPlayerInput[nPlayer].nTarget >= 0)
else if (sPlayerInput[nPlayer].pTarget != nullptr)
{
pTarget = &exhumedActors[sPlayerInput[nPlayer].nTarget];
pTarget = sPlayerInput[nPlayer].pTarget;
}
short nSnake = GrabSnake();

View file

@ -94,7 +94,7 @@ static void analyzesprites(spritetype* tsprite, int& spritesortcnt, int x, int y
spritetype *pPlayerSprite = &sprite[nPlayerSprite];
besttarget = -1;
bestTarget = nullptr;
short nSector = pPlayerSprite->sectnum;
@ -107,7 +107,8 @@ static void analyzesprites(spritetype* tsprite, int& spritesortcnt, int x, int y
for (nTSprite = spritesortcnt-1, pTSprite = &tsprite[nTSprite]; nTSprite >= 0; nTSprite--, pTSprite--)
{
int nSprite = pTSprite->owner;
spritetype *pSprite = &sprite[nSprite];
auto pActor = &exhumedActors[nSprite];
spritetype *pSprite = &pActor->s();
if (pTSprite->sectnum >= 0)
{
@ -151,7 +152,7 @@ static void analyzesprites(spritetype* tsprite, int& spritesortcnt, int x, int y
edx = (abs(edx) * 32) / ebx;
if (ebx < 1000 && ebx < var_2C && edx < 10)
{
besttarget = nSprite;
bestTarget = pActor;
var_38 = edx;
var_2C = ebx;
}
@ -162,21 +163,21 @@ static void analyzesprites(spritetype* tsprite, int& spritesortcnt, int x, int y
{
var_38 = edx;
var_2C = ebx;
besttarget = nSprite;
bestTarget = pActor;
}
}
}
}
}
if (besttarget != -1)
if (bestTarget != nullptr)
{
spritetype *pTarget = &sprite[besttarget];
spritetype *pTarget = &bestTarget->s();
nCreepyTimer = kCreepyCount;
if (!cansee(x, y, z, nSector, pTarget->x, pTarget->y, pTarget->z - GetSpriteHeight(besttarget), pTarget->sectnum))
if (!cansee(x, y, z, nSector, pTarget->x, pTarget->y, pTarget->z - GetActorHeight(bestTarget), pTarget->sectnum))
{
besttarget = -1;
bestTarget = nullptr;
}
}

View file

@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
BEGIN_PS_NS
extern short bSubTitles;
extern short besttarget;
extern DExhumedActor* bestTarget;
extern bool bCamera;
void DrawStatusBar();