- DoActorPickClosePlayer

This commit is contained in:
Christoph Oelckers 2021-10-30 13:05:07 +02:00
parent 125159772d
commit d819d5c862
9 changed files with 38 additions and 36 deletions

View file

@ -124,7 +124,7 @@ bool ActorMoveHitReact(DSWActor* actor)
if (hitActor->hasU() && hitActor->u()->PlayerP)
{
// if you ran into a player - call close range functions
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
auto action = ChooseAction(u->Personality->TouchTarget);
if (action)
{
@ -297,8 +297,7 @@ bool CanSeePlayer(DSWActor* actor)
return false;
}
int
CanHitPlayer(DSWActor* actor)
int CanHitPlayer(DSWActor* actor)
{
USERp u = actor->u();
SPRITEp sp = &actor->s();
@ -359,12 +358,11 @@ CanHitPlayer(DSWActor* actor)
!AIC - Pick a nearby player to be the actors target
*/
int
DoActorPickClosePlayer(short SpriteNum)
int DoActorPickClosePlayer(DSWActor* actor)
{
//extern short Zombies;
USERp u = User[SpriteNum].Data();
SPRITEp sp = User[SpriteNum]->SpriteP;
USERp u = actor->u();
SPRITEp sp = &actor->s();
int SpriteNum = actor->GetSpriteIndex();
int dist, near_dist = MAX_ACTIVE_RANGE, a,b,c;
short pnum;
PLAYERp pp;
@ -654,7 +652,7 @@ DoActorActionDecide(short SpriteNum)
//if ((User[u->tgt_sp-sprite] &&
// User[u->tgt_sp-sprite]->Health <= 0) || RandomRange(1000) > 950)
// {
// DoActorPickClosePlayer(SpriteNum);
// DoActorPickClosePlayer(actor);
// InitActorReposition(SpriteNum);
// return(action);
// }
@ -751,7 +749,7 @@ DoActorActionDecide(short SpriteNum)
// try and find another player
// pick a closeby player as the (new) target
if (sp->hitag != TAG_SWARMSPOT)
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
// if close by
dist = Distance(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y);
@ -1435,7 +1433,7 @@ InitActorAttack(DSWActor* actor)
if (User[u->tgt_sp-sprite].Data() &&
User[u->tgt_sp-sprite]->Health <= 0)
{
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
InitActorReposition(actor);
return 0;
}
@ -1452,7 +1450,7 @@ InitActorAttack(DSWActor* actor)
User[u->tgt_sp-sprite]->PlayerP &&
TEST(User[u->tgt_sp-sprite]->PlayerP->Flags, PF_DEAD))
{
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
InitActorReposition(actor);
return 0;
}
@ -1594,7 +1592,7 @@ InitActorWanderAround(DSWActor* actor)
u->ActorActionFunc = DoActorDecide;
NewStateGroup(SpriteNum, u->ActorActionSet->Run);
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
u->track = FindWanderTrack(u);

View file

@ -74,7 +74,7 @@ void DebugMoveHit(DSWActor* actor);
bool ActorMoveHitReact(DSWActor* actor);
short ChooseActionNumber(short decision[]);
bool CanSeePlayer(DSWActor* actor);
int DoActorPickClosePlayer(short SpriteNum);
int DoActorPickClosePlayer(DSWActor* actor);
int CloseRangeDist(SPRITEp sp1,SPRITEp sp2);
int InitActorDecide(DSWActor* actor);
int DoActorDecide(DSWActor* actor);

View file

@ -1038,7 +1038,7 @@ DoBunnyQuickJump(DSWActor* actor)
if (RandomRange(1000) < 995 && tu->spal != PALETTE_PLAYER0) return false;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
if (User[u->tgt_sp-sprite]->PlayerP)
pp = User[u->tgt_sp-sprite]->PlayerP;

View file

@ -570,7 +570,7 @@ int DoCheckSwarm(DSWActor* actor)
if (!u->tgt_sp) return 0;
// Who's the closest meat!?
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
if (User[u->tgt_sp - sprite]->PlayerP)
{

View file

@ -156,7 +156,7 @@ int DoToiletGirl(DSWActor* actor)
SPRITEp sp = User[SpriteNum]->SpriteP;
bool ICanSee = false;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum,u->tgt_sp->x,u->tgt_sp->y,SPRITEp_MID(u->tgt_sp),u->tgt_sp->sectnum);
if (u->FlagOwner != 1)
@ -215,7 +215,7 @@ int NullToiletGirl(DSWActor* actor)
SPRITEp sp = User[SpriteNum]->SpriteP;
bool ICanSee = false;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum,u->tgt_sp->x,u->tgt_sp->y,u->tgt_sp->z,u->tgt_sp->sectnum);
if (!TEST(u->Flags,SPR_CLIMBING))
@ -399,7 +399,7 @@ int DoWashGirl(DSWActor* actor)
SPRITEp sp = User[SpriteNum]->SpriteP;
bool ICanSee = false;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum,u->tgt_sp->x,u->tgt_sp->y,SPRITEp_MID(u->tgt_sp),u->tgt_sp->sectnum);
if (RandomRange(1000) > 980 && u->ShellNum <= 0)
@ -464,7 +464,7 @@ int NullWashGirl(DSWActor* actor)
SPRITEp sp = User[SpriteNum]->SpriteP;
bool ICanSee = false;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum,u->tgt_sp->x,u->tgt_sp->y,u->tgt_sp->z,u->tgt_sp->sectnum);
if (!TEST(u->Flags,SPR_CLIMBING))
@ -1279,7 +1279,7 @@ int DoCarGirl(DSWActor* actor)
SPRITEp sp = User[SpriteNum]->SpriteP;
bool ICanSee = false;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum,u->tgt_sp->x,u->tgt_sp->y,SPRITEp_MID(u->tgt_sp),u->tgt_sp->sectnum);
if (u->FlagOwner == 1)
@ -1329,7 +1329,7 @@ int NullCarGirl(DSWActor* actor)
SPRITEp sp = User[SpriteNum]->SpriteP;
bool ICanSee = false;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum,u->tgt_sp->x,u->tgt_sp->y,u->tgt_sp->z,u->tgt_sp->sectnum);
if (!TEST(u->Flags,SPR_CLIMBING))
@ -1501,7 +1501,7 @@ int DoMechanicGirl(DSWActor* actor)
SPRITEp sp = User[SpriteNum]->SpriteP;
bool ICanSee = false;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum,u->tgt_sp->x,u->tgt_sp->y,SPRITEp_MID(u->tgt_sp),u->tgt_sp->sectnum);
if (u->FlagOwner == 1)
@ -1551,7 +1551,7 @@ int NullMechanicGirl(DSWActor* actor)
SPRITEp sp = User[SpriteNum]->SpriteP;
bool ICanSee = false;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum,u->tgt_sp->x,u->tgt_sp->y,u->tgt_sp->z,u->tgt_sp->sectnum);
if (!TEST(u->Flags,SPR_CLIMBING))
@ -1724,7 +1724,7 @@ int DoSailorGirl(DSWActor* actor)
SPRITEp sp = User[SpriteNum]->SpriteP;
bool ICanSee = false;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum,u->tgt_sp->x,u->tgt_sp->y,SPRITEp_MID(u->tgt_sp),u->tgt_sp->sectnum);
if (u->FlagOwner == 1)
@ -1779,7 +1779,7 @@ int NullSailorGirl(DSWActor* actor)
bool ICanSee = false;
static short alreadythrew = 0;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum,u->tgt_sp->x,u->tgt_sp->y,u->tgt_sp->z,u->tgt_sp->sectnum);
if (!TEST(u->Flags,SPR_CLIMBING))
@ -1939,7 +1939,7 @@ int DoPruneGirl(DSWActor* actor)
SPRITEp sp = User[SpriteNum]->SpriteP;
bool ICanSee = false;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum,u->tgt_sp->x,u->tgt_sp->y,SPRITEp_MID(u->tgt_sp),u->tgt_sp->sectnum);
if (u->FlagOwner == 1)
@ -2005,7 +2005,7 @@ int NullPruneGirl(DSWActor* actor)
SPRITEp sp = User[SpriteNum]->SpriteP;
bool ICanSee = false;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum,u->tgt_sp->x,u->tgt_sp->y,u->tgt_sp->z,u->tgt_sp->sectnum);
if (!TEST(u->Flags,SPR_CLIMBING))

View file

@ -469,7 +469,7 @@ int DoSkullWait(DSWActor* actor)
DISTANCE(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y, dist, a, b, c);
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
//if (dist < u->active_range)
// return(0);
@ -884,7 +884,7 @@ int DoBettyWait(DSWActor* actor)
DISTANCE(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y, dist, a, b, c);
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
//if (dist < u->active_range)
// return(0);

View file

@ -769,9 +769,10 @@ KillSprite(int16_t SpriteNum)
StatIterator it(STAT_ENEMY);
while ((i = it.NextIndex()) >= 0)
{
auto itActor = &swActors[i];
if ((unsigned)i < MAXSPRITES && User[i].Data() != nullptr && User[i]->tgt_sp == sp)
{
DoActorPickClosePlayer(i);
DoActorPickClosePlayer(itActor);
}
}
}

View file

@ -2919,6 +2919,7 @@ void
DoAutoTurretObject(SECTOR_OBJECTp sop)
{
short SpriteNum = short(sop->sp_child - sprite);
auto actor = &swActors[SpriteNum];
SPRITEp shootp;
USERp u = User[SpriteNum].Data();
short delta_ang;
@ -2936,7 +2937,7 @@ DoAutoTurretObject(SECTOR_OBJECTp sop)
{
// 4 seconds
u->WaitTics = 4*120;
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
}
if (MoveSkip2 == 0)

View file

@ -790,6 +790,7 @@ SpawnZombie(PLAYERp pp, short Weapon)
//Zombies++;
New = SpawnSprite(STAT_ENEMY, ZOMBIE_RUN_R0, s_ZombieRun[0], pp->cursectnum, pp->posx, pp->posy, pp->posz, pp->angle.ang.asbuild(), 0);
auto actorNew = &swActors[New];
np = &sprite[New];
nu = User[New].Data();
np->sectnum = pp->cursectnum;
@ -802,7 +803,7 @@ SpawnZombie(PLAYERp pp, short Weapon)
SET(nu->Flags2, SPR2_DONT_TARGET_OWNER);
SET(np->cstat, CSTAT_SPRITE_TRANSLUCENT);
DoActorPickClosePlayer(New);
DoActorPickClosePlayer(actorNew);
//nu->tgt_sp = pp->SpriteP; // Make it target last killed player initially
// make immediately active
@ -853,6 +854,7 @@ SpawnZombie2(short Weapon)
//Zombies++;
New = SpawnSprite(STAT_ENEMY, ZOMBIE_RUN_R0, s_ZombieRun[0], sp->sectnum, sp->x, sp->y, sp->z, sp->ang, 0);
auto actorNew = &swActors[New];
np = &sprite[New];
nu = User[New].Data();
nu->Counter3 = 0;
@ -865,7 +867,7 @@ SpawnZombie2(short Weapon)
SET(nu->Flags2, SPR2_DONT_TARGET_OWNER);
SET(np->cstat, CSTAT_SPRITE_TRANSLUCENT);
DoActorPickClosePlayer(New);
DoActorPickClosePlayer(actorNew);
//nu->tgt_sp = pp->SpriteP; // Make it target last killed player initially
// make immediately active
@ -896,7 +898,7 @@ DoZombieMove(DSWActor* actor)
}
if (u->tgt_sp && User[u->tgt_sp-sprite].Data() && TEST(User[u->tgt_sp-sprite]->Flags, PF_DEAD)) // JBF: added User[] null check
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
// jumping and falling
if (TEST(u->Flags, SPR_JUMPING | SPR_FALLING))
@ -947,7 +949,7 @@ NullZombie(DSWActor* actor)
}
if (u->tgt_sp && User[u->tgt_sp-sprite].Data() && TEST(User[u->tgt_sp-sprite]->Flags, PF_DEAD))
DoActorPickClosePlayer(SpriteNum);
DoActorPickClosePlayer(actor);
if (u->WaitTics > 0)
u->WaitTics -= ACTORMOVETICS;