mirror of
https://github.com/DrBeef/Raze.git
synced 2025-01-31 21:20:39 +00:00
- replaced USER::tgt_sp with an actor pointer.
Most access is still through a wrapper.
This commit is contained in:
parent
d819d5c862
commit
697d4f2253
18 changed files with 187 additions and 176 deletions
|
@ -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:
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue