- replaced USER::tgt_sp with an actor pointer.

Most access is still through a wrapper.
This commit is contained in:
Christoph Oelckers 2021-10-30 13:15:02 +02:00
parent d819d5c862
commit 697d4f2253
18 changed files with 187 additions and 176 deletions

View file

@ -222,7 +222,7 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath)
}
u->ActorActionFunc = nullptr;
// Get angle to player
sp->ang = NORM_ANGLE(getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y) + 1024);
sp->ang = NORM_ANGLE(getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y) + 1024);
break;
case UZI_SMOKE+1: // Shotgun
@ -245,7 +245,7 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath)
DoActorBeginJump(actor);
u->ActorActionFunc = nullptr;
// Get angle to player
sp->ang = NORM_ANGLE(getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y) + 1024);
sp->ang = NORM_ANGLE(getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y) + 1024);
break;
default:

View file

@ -291,7 +291,7 @@ bool CanSeePlayer(DSWActor* actor)
//if (FAF_Sector(sp->sectnum))
// return(true);
if (u->tgt_sp && FAFcansee(sp->x, sp->y, look_height, sp->sectnum, u->tgt_sp->x, u->tgt_sp->y, SPRITEp_UPPER(u->tgt_sp), u->tgt_sp->sectnum))
if (u->tgt_sp() && FAFcansee(sp->x, sp->y, look_height, sp->sectnum, u->tgt_sp()->x, u->tgt_sp()->y, SPRITEp_UPPER(u->tgt_sp()), u->tgt_sp()->sectnum))
return true;
else
return false;
@ -312,7 +312,7 @@ int CanHitPlayer(DSWActor* actor)
zhs = sp->z - DIV2(SPRITEp_SIZE_Z(sp));
auto hp = u->tgt_sp;
auto hp = u->tgt_sp();
// get angle to target
ang = getangle(hp->x - sp->x, hp->y - sp->y);
@ -345,7 +345,7 @@ int CanHitPlayer(DSWActor* actor)
if (hitinfo.sect < 0)
return false;
if (hitinfo.sprite == u->tgt_sp - sprite)
if (hitinfo.sprite == u->tgt_sp() - sprite)
return true;
////DSPRINTF(ds,"CanHit %s",ret ? "true" : "false");
@ -375,7 +375,7 @@ int DoActorPickClosePlayer(DSWActor* actor)
goto TARGETACTOR;
// Set initial target to Player 0
u->tgt_sp = Player->SpriteP;
u->targetActor = Player->Actor();
if (TEST(u->Flags2, SPR2_DONT_TARGET_OWNER))
{
@ -386,7 +386,7 @@ int DoActorPickClosePlayer(DSWActor* actor)
if (sp->owner == pp->PlayerSprite)
continue;
u->tgt_sp = pp->SpriteP;
u->targetActor = pp->Actor();
break;
}
}
@ -417,7 +417,7 @@ int DoActorPickClosePlayer(DSWActor* actor)
if (dist < near_dist)
{
near_dist = dist;
u->tgt_sp = pp->SpriteP;
u->targetActor = pp->Actor();
}
}
@ -448,7 +448,7 @@ int DoActorPickClosePlayer(DSWActor* actor)
if (dist < near_dist && FAFcansee(sp->x, sp->y, look_height, sp->sectnum, pp->SpriteP->x, pp->SpriteP->y, SPRITEp_UPPER(pp->SpriteP), pp->SpriteP->sectnum))
{
near_dist = dist;
u->tgt_sp = pp->SpriteP;
u->targetActor = pp->Actor();
found = true;
}
}
@ -463,6 +463,7 @@ TARGETACTOR:
StatIterator it(STAT_ENEMY);
while ((i = it.NextIndex()) >= 0)
{
auto itActor = &swActors[i];
if (i == SpriteNum)
continue;
@ -474,7 +475,7 @@ TARGETACTOR:
if (dist < near_dist && FAFcansee(sp->x, sp->y, look_height, sp->sectnum, sprite[i].x, sprite[i].y, SPRITEp_UPPER(&sprite[i]), sprite[i].sectnum))
{
near_dist = dist;
u->tgt_sp = &sprite[i];
u->targetActor = itActor;
}
}
}
@ -493,7 +494,7 @@ GetPlayerSpriteNum(short SpriteNum)
{
pp = &Player[pnum];
if (pp->SpriteP == u->tgt_sp)
if (pp->SpriteP == u->tgt_sp())
{
return pp->PlayerSprite;
}
@ -595,7 +596,7 @@ DECISION GenericFlaming[] =
every time through the loop. This would be too slow. It is only called when
the actor needs to know what to do next such as running into something or being
targeted. It makes decisions based on the distance and viewablity of its target
(u->tgt_sp). When it figures out the situatation with its target it calls
(u->tgt_sp()). When it figures out the situatation with its target it calls
ChooseAction which does a random table lookup to decide what action to initialize.
Once this action is initialized it will be called until it can't figure out what to
do anymore and then this routine is called again.
@ -621,7 +622,7 @@ DoActorActionDecide(short SpriteNum)
action = InitActorDecide;
// target is gone.
if (u->tgt_sp == nullptr)
if (u->targetActor == nullptr)
{
return action;
}
@ -649,8 +650,8 @@ DoActorActionDecide(short SpriteNum)
// CODE BELOW = CRAP, DON'T USE IT OR IT MAKES ACTORS NOT ANIMATE SOMETIMES!!!!!
// If target was actor, retarget to player it actor died
// or just randomly give the target actor a break
//if ((User[u->tgt_sp-sprite] &&
// User[u->tgt_sp-sprite]->Health <= 0) || RandomRange(1000) > 950)
//if ((User[u->tgt_sp()-sprite] &&
// User[u->tgt_sp()-sprite]->Health <= 0) || RandomRange(1000) > 950)
// {
// DoActorPickClosePlayer(actor);
// InitActorReposition(SpriteNum);
@ -661,7 +662,7 @@ DoActorActionDecide(short SpriteNum)
DoActorOperate(SpriteNum);
// if far enough away and cannot see the player
dist = Distance(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist > 30000 && !ICanSee)
{
@ -679,7 +680,7 @@ DoActorActionDecide(short SpriteNum)
pu = User[GetPlayerSpriteNum(SpriteNum)].Data();
// check for short range attack possibility
if ((dist < CloseRangeDist(sp, u->tgt_sp) && ICanSee) ||
if ((dist < CloseRangeDist(sp, u->tgt_sp()) && ICanSee) ||
(pu && pu->WeaponNum == WPN_FIST && u->ID != RIPPER2_RUN_R0 && u->ID != RIPPER_RUN_R0))
{
if ((u->ID == COOLG_RUN_R0 && TEST(sp->cstat, CSTAT_SPRITE_TRANSLUCENT)) || TEST(sp->cstat, CSTAT_SPRITE_INVISIBLE))
@ -691,7 +692,7 @@ DoActorActionDecide(short SpriteNum)
}
// if player is facing me and I'm being attacked
if (FACING(sp, u->tgt_sp) && TEST(u->Flags, SPR_ATTACKED) && ICanSee)
if (FACING(sp, u->tgt_sp()) && TEST(u->Flags, SPR_ATTACKED) && ICanSee)
{
// if I'm a target - at least one missile comming at me
if (TEST(u->Flags, SPR_TARGETED))
@ -752,10 +753,10 @@ DoActorActionDecide(short SpriteNum)
DoActorPickClosePlayer(actor);
// if close by
dist = Distance(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist < 15000 || ICanSee)
{
if ((FACING(sp, u->tgt_sp) && dist < 10000) || ICanSee)
if ((FACING(sp, u->tgt_sp()) && dist < 10000) || ICanSee)
{
DoActorOperate(SpriteNum);
@ -829,18 +830,18 @@ DoActorDecide(DSWActor* actor)
return 0; // Just let the actor do as it was doing before in this case
// Target is gone.
if (u->tgt_sp == nullptr)
if (u->targetActor == nullptr)
return 0;
// zombie is attacking a player
if (actor_action == InitActorAttack && u->ID == ZOMBIE_RUN_R0 && User[u->tgt_sp-sprite]->PlayerP)
if (actor_action == InitActorAttack && u->ID == ZOMBIE_RUN_R0 && User[u->tgt_sp()-sprite]->PlayerP)
{
// Don't let zombies shoot at master
if (sp->owner == (u->tgt_sp - sprite))
if (sp->owner == (u->tgt_sp() - sprite))
return 0;
// if this player cannot take damage from this zombie(weapon) return out
if (!PlayerTakeDamage(User[u->tgt_sp-sprite]->PlayerP, SpriteNum))
if (!PlayerTakeDamage(User[u->tgt_sp()-sprite]->PlayerP, SpriteNum))
return 0;
}
@ -1160,7 +1161,7 @@ DoActorMoveCloser(DSWActor* actor)
else
{
// turn to face player
sp->ang = getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y);
sp->ang = getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y);
}
}
@ -1219,7 +1220,7 @@ FindTrackToPlayer(USERp u)
//MONO_PRINT("FindTrackToPlayer\n");
zdiff = SPRITEp_UPPER(u->tgt_sp) - (sp->z - SPRITEp_SIZE_Z(sp) + Z(8));
zdiff = SPRITEp_UPPER(u->tgt_sp()) - (sp->z - SPRITEp_SIZE_Z(sp) + Z(8));
if (labs(zdiff) <= Z(20))
{
@ -1413,25 +1414,25 @@ InitActorAttack(DSWActor* actor)
SPRITEp sp = User[SpriteNum]->SpriteP;
// zombie is attacking a player
if (u->ID == ZOMBIE_RUN_R0 && User[u->tgt_sp-sprite]->PlayerP)
if (u->ID == ZOMBIE_RUN_R0 && User[u->tgt_sp()-sprite]->PlayerP)
{
// Don't let zombies shoot at master
if (sp->owner == (u->tgt_sp - sprite))
if (sp->owner == (u->tgt_sp() - sprite))
return 0;
// if this player cannot take damage from this zombie(weapon) return out
if (!PlayerTakeDamage(User[u->tgt_sp-sprite]->PlayerP, SpriteNum))
if (!PlayerTakeDamage(User[u->tgt_sp()-sprite]->PlayerP, SpriteNum))
return 0;
}
if (TEST(sprite[u->tgt_sp-sprite].cstat, CSTAT_SPRITE_TRANSLUCENT))
if (TEST(sprite[u->tgt_sp()-sprite].cstat, CSTAT_SPRITE_TRANSLUCENT))
{
InitActorRunAway(actor);
return 0;
}
if (User[u->tgt_sp-sprite].Data() &&
User[u->tgt_sp-sprite]->Health <= 0)
if (User[u->tgt_sp()-sprite].Data() &&
User[u->tgt_sp()-sprite]->Health <= 0)
{
DoActorPickClosePlayer(actor);
InitActorReposition(actor);
@ -1446,9 +1447,9 @@ InitActorAttack(DSWActor* actor)
// if the guy you are after is dead, look for another and
// reposition
if (User[u->tgt_sp-sprite].Data() &&
User[u->tgt_sp-sprite]->PlayerP &&
TEST(User[u->tgt_sp-sprite]->PlayerP->Flags, PF_DEAD))
if (User[u->tgt_sp()-sprite].Data() &&
User[u->tgt_sp()-sprite]->PlayerP &&
TEST(User[u->tgt_sp()-sprite]->PlayerP->Flags, PF_DEAD))
{
DoActorPickClosePlayer(actor);
InitActorReposition(actor);
@ -1461,10 +1462,10 @@ InitActorAttack(DSWActor* actor)
//NewStateGroup(SpriteNum, u->ActorActionSet->Stand);
// face player when attacking
sp->ang = NORM_ANGLE(getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y));
sp->ang = NORM_ANGLE(getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y));
// If it's your own kind, lay off!
if (u->ID == User[u->tgt_sp - sprite]->ID && !User[u->tgt_sp - sprite]->PlayerP)
if (u->ID == User[u->tgt_sp() - sprite]->ID && !User[u->tgt_sp() - sprite]->PlayerP)
{
InitActorRunAway(actor);
return 0;
@ -1523,10 +1524,10 @@ DoActorAttack(DSWActor* actor)
DoActorNoise(ChooseAction(u->Personality->Broadcast),actor);
DISTANCE(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y, dist, a, b, c);
DISTANCE(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y, dist, a, b, c);
pu = User[GetPlayerSpriteNum(SpriteNum)].Data();
if ((u->ActorActionSet->CloseAttack[0] && dist < CloseRangeDist(sp, u->tgt_sp)) ||
if ((u->ActorActionSet->CloseAttack[0] && dist < CloseRangeDist(sp, u->tgt_sp())) ||
(pu && pu->WeaponNum == WPN_FIST)) // JBF: added null check
{
rand_num = ChooseActionNumber(u->ActorActionSet->CloseAttackPercent);
@ -1658,7 +1659,7 @@ InitActorDuck(DSWActor* actor)
u->ActorActionFunc = DoActorDuck;
NewStateGroup(SpriteNum, u->ActorActionSet->Duck);
dist = Distance(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist > 8000)
{
@ -1823,7 +1824,7 @@ FindNewAngle(short SpriteNum, signed char dir, int DistToMove)
DistToMove = DIV4(DistToMove) + DIV8(DistToMove);
// Find angle to from the player
oang = NORM_ANGLE(getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y));
oang = NORM_ANGLE(getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y));
// choose a random angle array
switch (dir)
@ -1973,7 +1974,7 @@ InitActorReposition(DSWActor* actor)
u->Dist = 0;
rnum = RANDOM_P2(8<<8)>>8;
dist = Distance(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist < PlayerDist[rnum] || TEST(u->Flags, SPR_RUN_AWAY))
{

View file

@ -856,7 +856,7 @@ DoBunnyBeginJumpAttack(DSWActor* actor)
USER* u = actor->u();
int SpriteNum = u->SpriteNum;
SPRITEp sp = &sprite[SpriteNum];
SPRITEp psp = User[SpriteNum]->tgt_sp;
SPRITEp psp = User[SpriteNum]->tgt_sp();
short tang;
tang = getangle(psp->x - sp->x, psp->y - sp->y);
@ -937,8 +937,9 @@ DoPickCloseBunny(USERp u)
StatIterator it(STAT_ENEMY);
while ((i = it.NextIndex()) >= 0)
{
tsp = &sprite[i];
tu = User[i].Data();
auto itActor = &swActors[i];
tsp = &itActor->s();
tu = itActor->u();
if (sp == tsp) continue;
@ -953,7 +954,8 @@ DoPickCloseBunny(USERp u)
if (ICanSee && dist < near_dist && tu->ID == BUNNY_RUN_R0)
{
near_dist = dist;
u->tgt_sp = u->lo_sp = tsp;
u->targetActor = itActor;
u->lo_sp = tsp;
//Bunny_Result = i;
return i;
}
@ -1040,8 +1042,8 @@ DoBunnyQuickJump(DSWActor* actor)
DoActorPickClosePlayer(actor);
if (User[u->tgt_sp-sprite]->PlayerP)
pp = User[u->tgt_sp-sprite]->PlayerP;
if (User[u->tgt_sp()-sprite]->PlayerP)
pp = User[u->tgt_sp()-sprite]->PlayerP;
if (tu->spal != PALETTE_PLAYER0)
{
@ -1056,7 +1058,7 @@ DoBunnyQuickJump(DSWActor* actor)
if (pp == Player+myconnectindex)
{
choose_snd = STD_RANDOM_RANGE(2<<8)>>8;
if (FAFcansee(sp->x,sp->y,SPRITEp_TOS(sp),sp->sectnum,pp->posx, pp->posy, pp->posz, pp->cursectnum) && FACING(sp, u->tgt_sp))
if (FAFcansee(sp->x,sp->y,SPRITEp_TOS(sp),sp->sectnum,pp->posx, pp->posy, pp->posz, pp->cursectnum) && FACING(sp, u->tgt_sp()))
PlayerSound(fagsnds[choose_snd], v3df_doppler|v3df_follow|v3df_dontpan,pp);
}
}
@ -1072,7 +1074,7 @@ DoBunnyQuickJump(DSWActor* actor)
if (pp == Player+myconnectindex)
{
choose_snd = STD_RANDOM_RANGE(3<<8)>>8;
if (FAFcansee(sp->x,sp->y,SPRITEp_TOS(sp),sp->sectnum,pp->posx, pp->posy, pp->posz, pp->cursectnum) && FACING(sp, u->tgt_sp))
if (FAFcansee(sp->x,sp->y,SPRITEp_TOS(sp),sp->sectnum,pp->posx, pp->posy, pp->posz, pp->cursectnum) && FACING(sp, u->tgt_sp()))
PlayerSound(straightsnds[choose_snd], v3df_doppler|v3df_follow|v3df_dontpan,pp);
}
}
@ -1144,7 +1146,7 @@ int DoBunnyRipHeart(DSWActor* actor)
int SpriteNum = u->SpriteNum;
SPRITEp sp = &sprite[SpriteNum];
SPRITEp tsp = u->tgt_sp;
SPRITEp tsp = u->tgt_sp();
NewStateGroup(SpriteNum, sg_BunnyHeart);
u->WaitTics = 6 * 120;

View file

@ -633,7 +633,7 @@ int DoCoolgMatchPlayerZ(short SpriteNum)
{
SPRITEp sp = &sprite[SpriteNum];
USERp u = User[SpriteNum].Data();
SPRITEp tsp = User[SpriteNum]->tgt_sp;
SPRITEp tsp = User[SpriteNum]->tgt_sp();
int zdiff,zdist;
int loz,hiz;

View file

@ -633,7 +633,7 @@ int DoCoolieMove(DSWActor* actor)
return 0;
}
if (Distance(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y) < 1200)
if (Distance(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y) < 1200)
{
//DoActorDie(SpriteNum, -3);
UpdateSinglePlayKills(SpriteNum);

View file

@ -433,7 +433,7 @@ int DoEelMatchPlayerZ(DSWActor* actor)
USER* u = actor->u();
int SpriteNum = u->SpriteNum;
SPRITEp sp = &sprite[SpriteNum];
SPRITEp tsp = User[SpriteNum]->tgt_sp;
SPRITEp tsp = User[SpriteNum]->tgt_sp();
int zdiff,zdist;
int loz,hiz;
int dist,a,b,c;
@ -480,7 +480,7 @@ int DoEelMatchPlayerZ(DSWActor* actor)
loz -= Z(FixedToInt(SectUser[u->lo_sectp - sector]->depth_fixed)) - Z(8);
// lower bound
if (u->lo_sp && u->tgt_sp == u->hi_sp)
if (u->lo_sp && u->tgt_sp() == u->hi_sp)
{
DISTANCE(sp->x, sp->y, u->lo_sp->x, u->lo_sp->y, dist, a, b, c);
if (dist <= 300)
@ -497,7 +497,7 @@ int DoEelMatchPlayerZ(DSWActor* actor)
}
// upper bound
if (u->hi_sp && u->tgt_sp == u->hi_sp)
if (u->hi_sp && u->tgt_sp() == u->hi_sp)
{
DISTANCE(sp->x, sp->y, u->hi_sp->x, u->hi_sp->y, dist, a, b, c);
if (dist <= 300)
@ -579,7 +579,7 @@ int DoEelMove(DSWActor* actor)
ASSERT(u->Rot != nullptr);
if (SpriteOverlap(SpriteNum, int16_t(u->tgt_sp - sprite)))
if (SpriteOverlap(SpriteNum, int16_t(u->tgt_sp() - sprite)))
NewStateGroup(SpriteNum, u->ActorActionSet->CloseAttack[0]);
if (TEST(u->Flags,SPR_SLIDING))

View file

@ -1174,7 +1174,8 @@ struct USER
// target player for the enemy - can only handle one player at at time
//PLAYERp tgt_player;
SPRITEp tgt_sp;
DSWActor* targetActor;
SPRITEp tgt_sp();
// scaling
short scale_speed;
@ -2240,6 +2241,12 @@ Collision USER::hitCode() const
{
return Collision(ret);
}
SPRITEp USER::tgt_sp()
{
return targetActor == nullptr? nullptr : &targetActor->s();
}
END_SW_NS
#endif

View file

@ -352,7 +352,7 @@ int DoHornetMatchPlayerZ(short SpriteNum)
{
SPRITEp sp = &sprite[SpriteNum];
USERp u = User[SpriteNum].Data();
SPRITEp tsp = User[SpriteNum]->tgt_sp;
SPRITEp tsp = User[SpriteNum]->tgt_sp();
int zdiff,zdist;
int loz,hiz;
@ -567,14 +567,14 @@ int DoCheckSwarm(DSWActor* actor)
if (!MoveSkip8) return 0; // Don't over check
if (!u->tgt_sp) return 0;
if (!u->tgt_sp()) return 0;
// Who's the closest meat!?
DoActorPickClosePlayer(actor);
if (User[u->tgt_sp - sprite]->PlayerP)
if (User[u->tgt_sp() - sprite]->PlayerP)
{
pp = User[u->tgt_sp - sprite]->PlayerP;
pp = User[u->tgt_sp() - sprite]->PlayerP;
DISTANCE(sp->x, sp->y, pp->posx, pp->posy, pdist, a, b, c);
}
else
@ -584,8 +584,9 @@ int DoCheckSwarm(DSWActor* actor)
StatIterator it(STAT_ENEMY);
while ((i = it.NextIndex()) >= 0)
{
tsp = &sprite[i];
tu = User[i].Data();
auto itActor = &swActors[i];
tsp = &itActor->s();
tu = itActor->u();
if (!tu) continue;
@ -595,7 +596,7 @@ int DoCheckSwarm(DSWActor* actor)
if (dist < pdist && u->ID == tu->ID) // Only flock to your own kind
{
u->tgt_sp = tsp; // Set target to swarm center
u->targetActor = itActor; // Set target to swarm center
}
}

View file

@ -157,7 +157,7 @@ int DoToiletGirl(DSWActor* actor)
bool ICanSee = false;
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);
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)
{
@ -216,7 +216,7 @@ int NullToiletGirl(DSWActor* actor)
bool ICanSee = false;
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);
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))
KeepActorOnFloor(actor);
@ -400,7 +400,7 @@ int DoWashGirl(DSWActor* actor)
bool ICanSee = false;
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);
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)
{
@ -465,7 +465,7 @@ int NullWashGirl(DSWActor* actor)
bool ICanSee = false;
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);
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))
KeepActorOnFloor(actor);
@ -1280,7 +1280,7 @@ int DoCarGirl(DSWActor* actor)
bool ICanSee = false;
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);
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)
{
@ -1330,7 +1330,7 @@ int NullCarGirl(DSWActor* actor)
bool ICanSee = false;
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);
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))
KeepActorOnFloor(actor);
@ -1502,7 +1502,7 @@ int DoMechanicGirl(DSWActor* actor)
bool ICanSee = false;
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);
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)
{
@ -1552,7 +1552,7 @@ int NullMechanicGirl(DSWActor* actor)
bool ICanSee = false;
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);
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))
KeepActorOnFloor(actor);
@ -1725,7 +1725,7 @@ int DoSailorGirl(DSWActor* actor)
bool ICanSee = false;
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);
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)
{
@ -1780,7 +1780,7 @@ int NullSailorGirl(DSWActor* actor)
static short alreadythrew = 0;
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);
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))
KeepActorOnFloor(actor);
@ -1940,7 +1940,7 @@ int DoPruneGirl(DSWActor* actor)
bool ICanSee = false;
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);
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)
{
@ -2006,7 +2006,7 @@ int NullPruneGirl(DSWActor* actor)
bool ICanSee = false;
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);
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))
KeepActorOnFloor(actor);

View file

@ -1093,7 +1093,7 @@ DoRipperBeginJumpAttack(DSWActor* actor)
USER* u = actor->u();
int SpriteNum = u->SpriteNum;
SPRITEp sp = &sprite[SpriteNum];
SPRITEp psp = User[SpriteNum]->tgt_sp;
SPRITEp psp = User[SpriteNum]->tgt_sp();
short tang;
tang = getangle(psp->x - sp->x, psp->y - sp->y);
@ -1214,7 +1214,7 @@ int DoRipperRipHeart(short SpriteNum)
SPRITEp sp = &sprite[SpriteNum];
USERp u = User[SpriteNum].Data();
SPRITEp tsp = u->tgt_sp;
SPRITEp tsp = u->tgt_sp();
NewStateGroup(SpriteNum, sg_RipperHeart);
u->WaitTics = 6 * 120;

View file

@ -1035,7 +1035,7 @@ DoRipper2MoveHang(DSWActor* actor)
short w, nw;
// Don't keep clinging and going ever higher!
if (abs(sp->z - u->tgt_sp->z) > (4000<<4))
if (abs(sp->z - u->tgt_sp()->z) > (4000<<4))
break;
hit_wall = NORM_WALL(u->ret);
@ -1098,7 +1098,7 @@ DoRipper2BeginJumpAttack(DSWActor* actor)
USER* u = actor->u();
int SpriteNum = u->SpriteNum;
SPRITEp sp = &sprite[SpriteNum];
SPRITEp psp = User[SpriteNum]->tgt_sp;
SPRITEp psp = User[SpriteNum]->tgt_sp();
short tang;
tang = getangle(psp->x - sp->x, psp->y - sp->y);
@ -1223,7 +1223,7 @@ int DoRipper2RipHeart(short SpriteNum)
SPRITEp sp = &sprite[SpriteNum];
USERp u = User[SpriteNum].Data();
SPRITEp tsp = u->tgt_sp;
SPRITEp tsp = u->tgt_sp();
NewStateGroup(SpriteNum, sg_Ripper2Heart);
u->WaitTics = 6 * 120;

View file

@ -890,7 +890,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, USER& w, USER* def
("Radius", w.Radius, def->Radius)
("OverlapZ", w.OverlapZ, def->OverlapZ)
("flame", w.flame, def->flame)
("tgt_sp", w.tgt_sp, def->tgt_sp)
("tgt_sp", w.targetActor, def->targetActor)
("scale_speed", w.scale_speed, def->scale_speed)
("scale_value", w.scale_value, def->scale_value)
("scale_tgt", w.scale_tgt, def->scale_tgt)

View file

@ -2180,7 +2180,7 @@ OperateTripTrigger(PLAYERp pp)
{
if (Distance(sp->x, sp->y, pp->posx, pp->posy) < dist)
{
u->tgt_sp = pp->SpriteP;
u->targetActor = pp->Actor();
RESET(u->Flags, SPR_WAIT_FOR_TRIGGER);
}
}

View file

@ -394,10 +394,10 @@ int DoSkullJump(DSWActor* actor)
int dist,a,b,c;
DISTANCE(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y, dist, a, b, c);
DISTANCE(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y, dist, a, b, c);
if (dist < 1000 &&
SpriteOverlapZ(SpriteNum, short(u->tgt_sp - sprite), Z(32)))
SpriteOverlapZ(SpriteNum, short(u->tgt_sp() - sprite), Z(32)))
{
UpdateSinglePlayKills(SpriteNum);
DoSkullBeginDeath(actor);
@ -467,7 +467,7 @@ int DoSkullWait(DSWActor* actor)
SPRITEp sp = &sprite[SpriteNum];
int a,b,c,dist;
DISTANCE(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y, dist, a, b, c);
DISTANCE(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y, dist, a, b, c);
DoActorPickClosePlayer(actor);
@ -501,7 +501,7 @@ int DoSkullWait(DSWActor* actor)
if (dist < 8000)
{
sp->ang = getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y);
sp->ang = getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y);
sp->xvel = 128 + (RANDOM_P2(256<<8)>>8);
u->jump_speed = -700;
NewStateGroup(SpriteNum, sg_SkullJump);
@ -813,10 +813,10 @@ int DoBettyJump(DSWActor* actor)
{
int dist,a,b,c;
DISTANCE(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y, dist, a, b, c);
DISTANCE(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y, dist, a, b, c);
if (dist < 1000 &&
SpriteOverlapZ(SpriteNum, short(u->tgt_sp - sprite), Z(32)))
SpriteOverlapZ(SpriteNum, short(u->tgt_sp() - sprite), Z(32)))
{
UpdateSinglePlayKills(SpriteNum);
DoBettyBeginDeath(actor);
@ -882,7 +882,7 @@ int DoBettyWait(DSWActor* actor)
SPRITEp sp = &sprite[SpriteNum];
int a,b,c,dist;
DISTANCE(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y, dist, a, b, c);
DISTANCE(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y, dist, a, b, c);
DoActorPickClosePlayer(actor);
@ -916,7 +916,7 @@ int DoBettyWait(DSWActor* actor)
if (dist < 8000)
{
sp->ang = getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y);
sp->ang = getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y);
sp->xvel = 128 + (RANDOM_P2(256<<8)>>8);
u->jump_speed = -700;
NewStateGroup(SpriteNum, sg_BettyJump);

View file

@ -770,7 +770,7 @@ KillSprite(int16_t SpriteNum)
while ((i = it.NextIndex()) >= 0)
{
auto itActor = &swActors[i];
if ((unsigned)i < MAXSPRITES && User[i].Data() != nullptr && User[i]->tgt_sp == sp)
if ((unsigned)i < MAXSPRITES && User[i].Data() != nullptr && User[i]->tgt_sp() == sp)
{
DoActorPickClosePlayer(itActor);
}
@ -802,7 +802,7 @@ KillSprite(int16_t SpriteNum)
{
if (u->hi_sp == sp) u->hi_sp = nullptr;
if (u->lo_sp == sp) u->lo_sp = nullptr;
if (u->tgt_sp == sp) u->tgt_sp = nullptr;
if (u->tgt_sp() == sp) u->targetActor = nullptr;
}
}
}
@ -890,7 +890,7 @@ SpawnUser(short SpriteNum, short id, STATEp state)
u->WpnGoal = -1; // for weapons
u->Attach = -1;
u->track = -1;
u->tgt_sp = Player[0].SpriteP;
u->targetActor = Player[0].Actor();
u->Radius = 220;
u->Sibling = -1;
u->flame = -1;

View file

@ -219,14 +219,14 @@ ActorFindTrack(short SpriteNum, int8_t player_dir, int track_type, short *track_
// to
if (player_dir == TOWARD_PLAYER)
{
if (!TrackTowardPlayer(u->tgt_sp, t, tp))
if (!TrackTowardPlayer(u->tgt_sp(), t, tp))
{
continue;
}
}
else if (player_dir == AWAY_FROM_PLAYER)
{
if (TrackTowardPlayer(u->tgt_sp, t, tp))
if (TrackTowardPlayer(u->tgt_sp(), t, tp))
{
continue;
}
@ -2933,7 +2933,7 @@ DoAutoTurretObject(SECTOR_OBJECTp sop)
u->WaitTics -= synctics;
// check for new player if doesn't have a target or time limit expired
if (!u->tgt_sp || u->WaitTics < 0)
if (!u->tgt_sp() || u->WaitTics < 0)
{
// 4 seconds
u->WaitTics = 4*120;
@ -2949,7 +2949,7 @@ DoAutoTurretObject(SECTOR_OBJECTp sop)
shootp = &sprite[sop->sp_num[i]];
if (!FAFcansee(shootp->x, shootp->y, shootp->z-Z(4), shootp->sectnum,
u->tgt_sp->x, u->tgt_sp->y, SPRITEp_UPPER(u->tgt_sp), u->tgt_sp->sectnum))
u->tgt_sp()->x, u->tgt_sp()->y, SPRITEp_UPPER(u->tgt_sp()), u->tgt_sp()->sectnum))
{
return;
}
@ -2983,8 +2983,8 @@ DoAutoTurretObject(SECTOR_OBJECTp sop)
}
}
//sop->ang_tgt = getangle(sop->xmid - u->tgt_sp->x, sop->ymid - u->tgt_sp->y);
sop->ang_tgt = getangle(u->tgt_sp->x - sop->xmid, u->tgt_sp->y - sop->ymid);
//sop->ang_tgt = getangle(sop->xmid - u->tgt_sp()->x, sop->ymid - u->tgt_sp()->y);
sop->ang_tgt = getangle(u->tgt_sp()->x - sop->xmid, u->tgt_sp()->y - sop->ymid);
// get delta to target angle
delta_ang = getincangle(sop->ang, sop->ang_tgt);
@ -3656,7 +3656,7 @@ ActorFollowTrack(short SpriteNum, short locktics)
if (Distance(sp->x, sp->y, pp->posx, pp->posy) < u->Dist)
{
u->tgt_sp = pp->SpriteP;
u->targetActor = pp->Actor();
RESET(u->Flags, SPR_WAIT_FOR_PLAYER);
return true;
}

View file

@ -5346,7 +5346,7 @@ ActorHealth(short SpriteNum, short amt)
PlaySound(DIGI_NINJACHOKE, sp, v3df_follow);
InitPlasmaFountain(nullptr, sp);
InitBloodSpray(SpriteNum,false,105);
sp->ang = NORM_ANGLE(getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y) + 1024);
sp->ang = NORM_ANGLE(getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y) + 1024);
RESET(sp->cstat, CSTAT_SPRITE_YFLIP);
if (sw_ninjahack)
NewStateGroup(SpriteNum, sg_NinjaHariKari);
@ -5486,7 +5486,7 @@ ActorStdMissile(short SpriteNum, short Weapon)
// if (User[wp->owner]->PlayerP || User[wp->owner]->SpriteP)
if (User[wp->owner]->PlayerP && sp->owner != wp->owner)
{
u->tgt_sp = &sprite[wp->owner];
u->targetActor = &swActors[wp->owner];
}
}
@ -10149,7 +10149,7 @@ DoRocket(DSWActor* actor)
if ((u->FlagOwner -= ACTORMOVETICS)<=0 && u->spal == 20)
{
DISTANCE(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y, dist, a, b, c);
DISTANCE(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y, dist, a, b, c);
u->FlagOwner = dist>>6;
// Special warn sound attached to each seeker spawned
PlaySound(DIGI_MINEBEEP, sp, v3df_follow);
@ -12810,12 +12810,12 @@ DoSerpRing(DSWActor* actor)
if (u->Counter2 > 0)
{
if (!User[ou->tgt_sp-sprite].Data() ||
!User[ou->tgt_sp-sprite]->PlayerP ||
!TEST(User[ou->tgt_sp-sprite]->PlayerP->Flags, PF_DEAD))
if (!User[ou->tgt_sp()-sprite].Data() ||
!User[ou->tgt_sp()-sprite]->PlayerP ||
!TEST(User[ou->tgt_sp()-sprite]->PlayerP->Flags, PF_DEAD))
{
u->tgt_sp = ou->tgt_sp;
DISTANCE(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y, dist, a,b,c);
u->targetActor = ou->targetActor;
DISTANCE(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y, dist, a,b,c);
// if ((dist ok and random ok) OR very few skulls left)
if ((dist < 18000 && (RANDOM_P2(2048<<5)>>5) < 16) || User[sp->owner]->Counter < 4)
@ -12828,7 +12828,7 @@ DoSerpRing(DSWActor* actor)
{
extern STATEp sg_SkullJump[];
u->ID = SKULL_R0;
sp->ang = getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y);
sp->ang = getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y);
sp->xvel = dist>>5;
sp->xvel += DIV2(sp->xvel);
sp->xvel += (RANDOM_P2(128<<8)>>8);
@ -12878,7 +12878,7 @@ InitLavaThrow(DSWActor* actor)
//PlaySound(DIGI_NINJAROCKETATTACK, sp, v3df_none);
// get angle to player and also face player when attacking
sp->ang = nang = getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y);
sp->ang = nang = getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y);
nx = sp->x;
ny = sp->y;
@ -12917,10 +12917,10 @@ InitLavaThrow(DSWActor* actor)
MissileSetPos(w, DoLavaBoulder, 1200);
// find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(wp->x, wp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp) - wp->z)) / dist;
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp()) - wp->z)) / dist;
return w;
}
@ -13243,10 +13243,10 @@ InitEnemyNapalm(DSWActor* actor)
}
// find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(wp->x, wp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp) - wp->z)) / dist;
wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp()) - wp->z)) / dist;
wu->xchange = MOVEx(wp->xvel, wp->ang);
wu->ychange = MOVEy(wp->xvel, wp->ang);
@ -13352,10 +13352,10 @@ InitEnemyMirv(DSWActor* actor)
MissileSetPos(w, DoMirv, 600);
// find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(wp->x, wp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp) - wp->z)) / dist;
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp()) - wp->z)) / dist;
return 0;
}
@ -13812,10 +13812,10 @@ InitSumoNapalm(short SpriteNum)
}
// find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(wp->x, wp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp) - wp->z)) / dist;
wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp()) - wp->z)) / dist;
wu->xchange = MOVEx(wp->xvel, wp->ang);
wu->ychange = MOVEy(wp->xvel, wp->ang);
@ -13910,7 +13910,7 @@ InitSumoStompAttack(short SpriteNum)
{
tsp = &sprite[i];
if (tsp != u->tgt_sp)
if (tsp != u->tgt_sp())
break;
if (!TEST(tsp->extra, SPRX_PLAYER_OR_ENEMY))
@ -13941,29 +13941,29 @@ InitMiniSumoClap(short SpriteNum)
short reach;
if (!u->tgt_sp) return 0;
if (!u->tgt_sp()) return 0;
dist = Distance(sp->x, sp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(sp->x, sp->y, u->tgt_sp()->x, u->tgt_sp()->y);
reach = 10000;
if (dist < CLOSE_RANGE_DIST_FUDGE(u->tgt_sp, sp, 1000))
if (dist < CLOSE_RANGE_DIST_FUDGE(u->tgt_sp(), sp, 1000))
{
if (SpriteOverlapZ(SpriteNum, short(u->tgt_sp - sprite), Z(20)))
if (SpriteOverlapZ(SpriteNum, short(u->tgt_sp() - sprite), Z(20)))
{
if (FAFcansee(u->tgt_sp->x,u->tgt_sp->y,SPRITEp_MID(u->tgt_sp),u->tgt_sp->sectnum,sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum))
if (FAFcansee(u->tgt_sp()->x,u->tgt_sp()->y,SPRITEp_MID(u->tgt_sp()),u->tgt_sp()->sectnum,sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum))
{
PlaySound(DIGI_CGTHIGHBONE, sp, v3df_follow|v3df_dontpan);
DoDamage(short(u->tgt_sp - sprite), SpriteNum);
DoDamage(short(u->tgt_sp() - sprite), SpriteNum);
}
}
}
else if (dist < CLOSE_RANGE_DIST_FUDGE(u->tgt_sp, sp, reach))
else if (dist < CLOSE_RANGE_DIST_FUDGE(u->tgt_sp(), sp, reach))
{
if (FAFcansee(u->tgt_sp->x,u->tgt_sp->y,SPRITEp_MID(u->tgt_sp),u->tgt_sp->sectnum,sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum))
if (FAFcansee(u->tgt_sp()->x,u->tgt_sp()->y,SPRITEp_MID(u->tgt_sp()),u->tgt_sp()->sectnum,sp->x,sp->y,SPRITEp_MID(sp),sp->sectnum))
{
PlaySound(DIGI_30MMEXPLODE, sp, v3df_none);
SpawnFireballFlames(SpriteNum, short(u->tgt_sp - sprite));
SpawnFireballFlames(SpriteNum, short(u->tgt_sp() - sprite));
}
}
@ -14123,10 +14123,10 @@ AimHitscanToTarget(SPRITEp sp, int *z, short *ang, int z_ratio)
SPRITEp hp;
USERp hu;
if (!u->tgt_sp)
if (!u->tgt_sp())
return -1;
hit_sprite = short(u->tgt_sp - sprite);
hit_sprite = short(u->tgt_sp() - sprite);
hp = &sprite[hit_sprite];
hu = User[hit_sprite].Data();
@ -16033,7 +16033,7 @@ InitSerpSpell(DSWActor* actor)
for (i = 0; i < 2; i++)
{
sp->ang = getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y);
sp->ang = getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y);
New = SpawnSprite(STAT_MISSILE, SERP_METEOR, &sg_SerpMeteor[0][0], sp->sectnum,
sp->x, sp->y, sp->z, sp->ang, 1500);
@ -16070,9 +16070,9 @@ InitSerpSpell(DSWActor* actor)
np->ang = NORM_ANGLE(np->ang - lat_ang[i]);
// find the distance to the target (player)
dist = Distance(np->x, np->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(np->x, np->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
np->zvel = (np->xvel * (SPRITEp_UPPER(u->tgt_sp) - np->z)) / dist;
np->zvel = (np->xvel * (SPRITEp_UPPER(u->tgt_sp()) - np->z)) / dist;
np->ang = NORM_ANGLE(np->ang + delta_ang[i]);
@ -16153,7 +16153,7 @@ InitSerpMonstSpell(DSWActor* actor)
for (i = 0; i < 1; i++)
{
sp->ang = getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y);
sp->ang = getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y);
New = SpawnSprite(STAT_MISSILE, SERP_METEOR, &sg_SerpMeteor[0][0], sp->sectnum,
sp->x, sp->y, sp->z, sp->ang, 500);
@ -16190,9 +16190,9 @@ InitSerpMonstSpell(DSWActor* actor)
np->ang = NORM_ANGLE(np->ang - lat_ang[i]);
// find the distance to the target (player)
dist = Distance(np->x, np->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(np->x, np->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
np->zvel = (np->xvel * (SPRITEp_UPPER(u->tgt_sp) - np->z)) / dist;
np->zvel = (np->xvel * (SPRITEp_UPPER(u->tgt_sp()) - np->z)) / dist;
np->ang = NORM_ANGLE(np->ang + delta_ang[i]);
@ -16239,7 +16239,7 @@ InitEnemyRocket(DSWActor* actor)
PlaySound(DIGI_NINJARIOTATTACK, sp, v3df_none);
// get angle to player and also face player when attacking
sp->ang = nang = getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y);
sp->ang = nang = getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y);
nx = sp->x;
ny = sp->y;
@ -16247,9 +16247,9 @@ InitEnemyRocket(DSWActor* actor)
// Spawn a shot
// wp = &sprite[w = SpawnSprite(STAT_MISSILE, STAR1, s_Star, sp->sectnum,
// nx, ny, nz, u->tgt_sp->ang, 250)];
// nx, ny, nz, u->tgt_sp()->ang, 250)];
w = SpawnSprite(STAT_MISSILE, BOLT_THINMAN_R2, &s_Rocket[0][0], sp->sectnum,
nx, ny, nz-Z(8), u->tgt_sp->ang, NINJA_BOLT_VELOCITY);
nx, ny, nz-Z(8), u->tgt_sp()->ang, NINJA_BOLT_VELOCITY);
wp = &sprite[w];
wu = User[w].Data();
@ -16285,10 +16285,10 @@ InitEnemyRocket(DSWActor* actor)
MissileSetPos(w, DoBoltThinMan, 400);
// find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(wp->x, wp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp) - wp->z)) / dist;
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp()) - wp->z)) / dist;
return w;
}
@ -16319,7 +16319,7 @@ InitEnemyRail(DSWActor* actor)
pp = &Player[pnum];
psp = &sprite[pp->PlayerSprite];
if (u->tgt_sp == psp)
if (u->targetActor == pp->Actor())
return 0;
}
}
@ -16327,7 +16327,7 @@ InitEnemyRail(DSWActor* actor)
PlaySound(DIGI_RAILFIRE, sp, v3df_dontpan|v3df_doppler);
// get angle to player and also face player when attacking
sp->ang = nang = getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y);
sp->ang = nang = getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y);
// add a bit of randomness
if (RANDOM_P2(1024) < 512)
@ -16380,10 +16380,10 @@ InitEnemyRail(DSWActor* actor)
}
// find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(wp->x, wp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp) - wp->z)) / dist;
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp()) - wp->z)) / dist;
return w;
}
@ -16418,7 +16418,7 @@ InitZillaRocket(DSWActor* actor)
PlaySound(DIGI_NINJARIOTATTACK, sp, v3df_none);
// get angle to player and also face player when attacking
sp->ang = nang = getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y);
sp->ang = nang = getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y);
for (i = 0; i < (int)SIZ(mp); i++)
{
@ -16428,9 +16428,9 @@ InitZillaRocket(DSWActor* actor)
// Spawn a shot
// wp = &sprite[w = SpawnSprite(STAT_MISSILE, STAR1, s_Star, sp->sectnum,
// nx, ny, nz, u->tgt_sp->ang, 250)];
// nx, ny, nz, u->tgt_sp()->ang, 250)];
w = SpawnSprite(STAT_MISSILE, BOLT_THINMAN_R2, &s_Rocket[0][0], sp->sectnum,
nx, ny, nz-Z(8), u->tgt_sp->ang, NINJA_BOLT_VELOCITY);
nx, ny, nz-Z(8), u->tgt_sp()->ang, NINJA_BOLT_VELOCITY);
wp = &sprite[w];
wu = User[w].Data();
@ -16470,10 +16470,10 @@ InitZillaRocket(DSWActor* actor)
MissileSetPos(w, DoBoltThinMan, mp[i].dist_out);
// find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(wp->x, wp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp) - wp->z)) / dist;
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp()) - wp->z)) / dist;
}
return w;
@ -16490,7 +16490,7 @@ InitEnemyStar(DSWActor* actor)
short w;
// get angle to player and also face player when attacking
sp->ang = nang = NORM_ANGLE(getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y));
sp->ang = nang = NORM_ANGLE(getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y));
nx = sp->x;
ny = sp->y;
@ -16498,7 +16498,7 @@ InitEnemyStar(DSWActor* actor)
// Spawn a shot
wp = &sprite[w = SpawnSprite(STAT_MISSILE, STAR1, s_Star, sp->sectnum,
nx, ny, nz, u->tgt_sp->ang, NINJA_STAR_VELOCITY)];
nx, ny, nz, u->tgt_sp()->ang, NINJA_STAR_VELOCITY)];
wu = User[w].Data();
@ -16518,10 +16518,10 @@ InitEnemyStar(DSWActor* actor)
MissileSetPos(w, DoStar, 400);
// find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(wp->x, wp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp) - wp->z)) / dist;
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp()) - wp->z)) / dist;
//
// Star Power Up Code
@ -16581,7 +16581,7 @@ InitEnemyCrossbow(DSWActor* actor)
short w;
// get angle to player and also face player when attacking
sp->ang = nang = NORM_ANGLE(getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y));
sp->ang = nang = NORM_ANGLE(getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y));
nx = sp->x;
ny = sp->y;
@ -16589,7 +16589,7 @@ InitEnemyCrossbow(DSWActor* actor)
// Spawn a shot
wp = &sprite[w = SpawnSprite(STAT_MISSILE, CROSSBOLT, &s_CrossBolt[0][0], sp->sectnum,
nx, ny, nz, u->tgt_sp->ang, 800)];
nx, ny, nz, u->tgt_sp()->ang, 800)];
wu = User[w].Data();
@ -16614,10 +16614,10 @@ InitEnemyCrossbow(DSWActor* actor)
MissileSetPos(w, DoStar, 400);
// find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(wp->x, wp->y, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp) - wp->z)) / dist;
wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp()) - wp->z)) / dist;
//
// Star Power Up Code
@ -16680,7 +16680,7 @@ InitSkelSpell(DSWActor* actor)
PlaySound(DIGI_SPELEC, sp, v3df_none);
// get angle to player and also face player when attacking
sp->ang = nang = NORM_ANGLE(getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y));
sp->ang = nang = NORM_ANGLE(getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y));
nx = sp->x;
ny = sp->y;
@ -16688,7 +16688,7 @@ InitSkelSpell(DSWActor* actor)
// Spawn a shot
w = SpawnSprite(STAT_MISSILE, ELECTRO_ENEMY, s_Electro, sp->sectnum,
nx, ny, nz, u->tgt_sp->ang, SKEL_ELECTRO_VELOCITY);
nx, ny, nz, u->tgt_sp()->ang, SKEL_ELECTRO_VELOCITY);
wp = &sprite[w];
wu = User[w].Data();
@ -16703,10 +16703,10 @@ InitSkelSpell(DSWActor* actor)
SET(wp->cstat, CSTAT_SPRITE_YCENTER);
// find the distance to the target (player)
dist = Distance(nx, ny, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(nx, ny, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp) - nz)) / dist;
wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp()) - nz)) / dist;
wu->xchange = MOVEx(wp->xvel, wp->ang);
wu->ychange = MOVEy(wp->xvel, wp->ang);
@ -16729,7 +16729,7 @@ InitCoolgFire(DSWActor* actor)
short w;
// get angle to player and also face player when attacking
sp->ang = nang = NORM_ANGLE(getangle(u->tgt_sp->x - sp->x, u->tgt_sp->y - sp->y));
sp->ang = nang = NORM_ANGLE(getangle(u->tgt_sp()->x - sp->x, u->tgt_sp()->y - sp->y));
nx = sp->x;
ny = sp->y;
@ -16742,7 +16742,7 @@ InitCoolgFire(DSWActor* actor)
PlaySound(DIGI_CGMAGIC, sp, v3df_follow);
w = SpawnSprite(STAT_MISSILE, COOLG_FIRE, s_CoolgFire, sp->sectnum,
nx, ny, nz, u->tgt_sp->ang, COOLG_FIRE_VELOCITY);
nx, ny, nz, u->tgt_sp()->ang, COOLG_FIRE_VELOCITY);
wp = &sprite[w];
wu = User[w].Data();
@ -16766,12 +16766,12 @@ InitCoolgFire(DSWActor* actor)
PlaySound(DIGI_MAGIC1, wp, v3df_follow|v3df_doppler);
// find the distance to the target (player)
dist = Distance(nx, ny, u->tgt_sp->x, u->tgt_sp->y);
dist = Distance(nx, ny, u->tgt_sp()->x, u->tgt_sp()->y);
if (dist != 0)
// (velocity * difference between the target and the throwing star) /
// distance
wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp) - nz)) / dist;
wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp()) - nz)) / dist;
wu->xchange = MOVEx(wp->xvel, wp->ang);
wu->ychange = MOVEy(wp->xvel, wp->ang);
@ -16911,7 +16911,7 @@ InitEelFire(DSWActor* actor)
if (i == SpriteNum)
continue;
if (hp != u->tgt_sp)
if (hp != u->tgt_sp())
continue;
if ((unsigned)FindDistance3D(sp->x - hp->x, sp->y - hp->y, sp->z - hp->z) > hu->Radius + u->Radius)
@ -17055,10 +17055,10 @@ InitSpearTrap(short SpriteNum)
//MissileSetPos(w, DoStar, 400);
// find the distance to the target (player)
//int dist = Distance(wp->x, wp->y, u->tgt_sp->x, u->tgt_sp->y);
//int dist = Distance(wp->x, wp->y, u->tgt_sp()->x, u->tgt_sp()->y);
//if (dist != 0)
//wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp) - wp->z)) / dist;
//wu->zchange = wp->zvel = (wp->xvel * (SPRITEp_UPPER(u->tgt_sp()) - wp->z)) / dist;
PlaySound(DIGI_STAR, sp, v3df_none);
return w;
@ -19348,7 +19348,7 @@ InitEnemyFireball(DSWActor* actor)
ASSERT(SpriteNum >= 0);
tsp = u->tgt_sp;
tsp = u->tgt_sp();
PlaySound(DIGI_FIREBALL1, sp, v3df_none);

View file

@ -804,7 +804,7 @@ SpawnZombie(PLAYERp pp, short Weapon)
SET(np->cstat, CSTAT_SPRITE_TRANSLUCENT);
DoActorPickClosePlayer(actorNew);
//nu->tgt_sp = pp->SpriteP; // Make it target last killed player initially
//nu->tgt_sp() = pp->SpriteP; // Make it target last killed player initially
// make immediately active
SET(nu->Flags, SPR_ACTIVE);
@ -868,7 +868,7 @@ SpawnZombie2(short Weapon)
SET(np->cstat, CSTAT_SPRITE_TRANSLUCENT);
DoActorPickClosePlayer(actorNew);
//nu->tgt_sp = pp->SpriteP; // Make it target last killed player initially
//nu->tgt_sp() = pp->SpriteP; // Make it target last killed player initially
// make immediately active
SET(nu->Flags, SPR_ACTIVE);
@ -897,7 +897,7 @@ DoZombieMove(DSWActor* actor)
return 0;
}
if (u->tgt_sp && User[u->tgt_sp-sprite].Data() && TEST(User[u->tgt_sp-sprite]->Flags, PF_DEAD)) // JBF: added User[] null check
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(actor);
// jumping and falling
@ -948,7 +948,7 @@ NullZombie(DSWActor* actor)
return 0;
}
if (u->tgt_sp && User[u->tgt_sp-sprite].Data() && TEST(User[u->tgt_sp-sprite]->Flags, PF_DEAD))
if (u->tgt_sp() && User[u->tgt_sp()-sprite].Data() && TEST(User[u->tgt_sp()-sprite]->Flags, PF_DEAD))
DoActorPickClosePlayer(actor);
if (u->WaitTics > 0)