mirror of
https://github.com/DrBeef/Raze.git
synced 2025-02-22 11:41:08 +00:00
- Init(Enemy)Nuke
This commit is contained in:
parent
7436c17469
commit
35d6f7efd5
1 changed files with 27 additions and 36 deletions
|
@ -15167,18 +15167,15 @@ InitBunnyRocket(PLAYERp pp)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int InitNuke(PLAYERp pp)
|
||||||
InitNuke(PLAYERp pp)
|
|
||||||
{
|
{
|
||||||
USERp u = User[pp->PlayerSprite].Data();
|
USERp u = pp->Actor()->u();
|
||||||
|
auto sp = &pp->Actor()->s();
|
||||||
USERp wu;
|
USERp wu;
|
||||||
SPRITEp wp;
|
SPRITEp wp;
|
||||||
int nx, ny, nz;
|
int nx, ny, nz;
|
||||||
short w;
|
|
||||||
int zvel;
|
int zvel;
|
||||||
|
|
||||||
|
|
||||||
// PlayerUpdateAmmo(pp, u->WeaponNum, -1);
|
|
||||||
if (pp->WpnRocketNuke > 0)
|
if (pp->WpnRocketNuke > 0)
|
||||||
pp->WpnRocketNuke = 0; // Bye Bye little nukie.
|
pp->WpnRocketNuke = 0; // Bye Bye little nukie.
|
||||||
else
|
else
|
||||||
|
@ -15201,15 +15198,14 @@ InitNuke(PLAYERp pp)
|
||||||
// Spawn a shot
|
// Spawn a shot
|
||||||
// Inserting and setting up variables
|
// Inserting and setting up variables
|
||||||
|
|
||||||
//nz = pp->posz + pp->bob_z + Z(12);
|
|
||||||
nz = pp->posz + pp->bob_z + Z(8);
|
nz = pp->posz + pp->bob_z + Z(8);
|
||||||
w = SpawnSprite(STAT_MISSILE, BOLT_THINMAN_R0, &s_Rocket[0][0], pp->cursectnum,
|
auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R0, &s_Rocket[0][0], pp->cursectnum,
|
||||||
nx, ny, nz, pp->angle.ang.asbuild(), 700);
|
nx, ny, nz, pp->angle.ang.asbuild(), 700);
|
||||||
|
|
||||||
wp = &sprite[w];
|
wp = &actorNew->s();
|
||||||
wu = User[w].Data();
|
wu = actorNew->u();
|
||||||
|
|
||||||
SetOwner(pp->PlayerSprite, w);
|
SetOwner(pp->Actor(), actorNew);
|
||||||
wp->yrepeat = 128;
|
wp->yrepeat = 128;
|
||||||
wp->xrepeat = 128;
|
wp->xrepeat = 128;
|
||||||
wp->shade = -15;
|
wp->shade = -15;
|
||||||
|
@ -15220,7 +15216,7 @@ InitNuke(PLAYERp pp)
|
||||||
wp->pal = wu->spal = 19;
|
wp->pal = wu->spal = 19;
|
||||||
|
|
||||||
wu->RotNum = 5;
|
wu->RotNum = 5;
|
||||||
NewStateGroup(&swActors[w], &sg_Rocket[0]);
|
NewStateGroup(actorNew, &sg_Rocket[0]);
|
||||||
|
|
||||||
wu->WeaponNum = u->WeaponNum;
|
wu->WeaponNum = u->WeaponNum;
|
||||||
wu->Radius = NUKE_RADIUS;
|
wu->Radius = NUKE_RADIUS;
|
||||||
|
@ -15235,7 +15231,7 @@ InitNuke(PLAYERp pp)
|
||||||
pp->SpriteP->clipdist = 0;
|
pp->SpriteP->clipdist = 0;
|
||||||
|
|
||||||
wp->ang = NORM_ANGLE(wp->ang + 512);
|
wp->ang = NORM_ANGLE(wp->ang + 512);
|
||||||
HelpMissileLateral(w, 900);
|
HelpMissileLateral(actorNew->GetSpriteIndex(), 900);
|
||||||
wp->ang = NORM_ANGLE(wp->ang - 512);
|
wp->ang = NORM_ANGLE(wp->ang - 512);
|
||||||
|
|
||||||
if (TEST(pp->Flags, PF_DIVING) || SpriteInUnderwaterArea(wp))
|
if (TEST(pp->Flags, PF_DIVING) || SpriteInUnderwaterArea(wp))
|
||||||
|
@ -15243,19 +15239,19 @@ InitNuke(PLAYERp pp)
|
||||||
|
|
||||||
// cancel smoke trail
|
// cancel smoke trail
|
||||||
wu->Counter = 1;
|
wu->Counter = 1;
|
||||||
if (TestMissileSetPos(w, DoRocket, 1200, zvel))
|
if (TestMissileSetPos(actorNew->GetSpriteIndex(), DoRocket, 1200, zvel))
|
||||||
{
|
{
|
||||||
pp->SpriteP->clipdist = oclipdist;
|
sp->clipdist = oclipdist;
|
||||||
KillSprite(w);
|
KillActor(actorNew);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// inable smoke trail
|
// inable smoke trail
|
||||||
wu->Counter = 0;
|
wu->Counter = 0;
|
||||||
|
|
||||||
pp->SpriteP->clipdist = oclipdist;
|
sp->clipdist = oclipdist;
|
||||||
|
|
||||||
wp->zvel = zvel >> 1;
|
wp->zvel = zvel >> 1;
|
||||||
if (WeaponAutoAim(pp->SpriteP, w, 32, false) == -1)
|
if (WeaponAutoAim(sp, actorNew->GetSpriteIndex(), 32, false) == -1)
|
||||||
{
|
{
|
||||||
wp->ang = NORM_ANGLE(wp->ang - 5);
|
wp->ang = NORM_ANGLE(wp->ang - 5);
|
||||||
}
|
}
|
||||||
|
@ -15271,20 +15267,17 @@ InitNuke(PLAYERp pp)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int InitEnemyNuke(DSWActor* actor)
|
||||||
InitEnemyNuke(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
SPRITEp sp = &actor->s();
|
||||||
SPRITEp sp = &sprite[SpriteNum];
|
|
||||||
USERp wu;
|
USERp wu;
|
||||||
SPRITEp wp;
|
SPRITEp wp;
|
||||||
int nx, ny, nz;
|
int nx, ny, nz;
|
||||||
short w;
|
|
||||||
int zvel;
|
int zvel;
|
||||||
|
|
||||||
|
|
||||||
PlaySound(DIGI_RIOTFIRE, sp, v3df_dontpan|v3df_doppler);
|
PlaySound(DIGI_RIOTFIRE, actor, v3df_dontpan|v3df_doppler);
|
||||||
|
|
||||||
// Make sprite shade brighter
|
// Make sprite shade brighter
|
||||||
u->Vis = 128;
|
u->Vis = 128;
|
||||||
|
@ -15293,19 +15286,17 @@ InitEnemyNuke(DSWActor* actor)
|
||||||
ny = sp->y;
|
ny = sp->y;
|
||||||
|
|
||||||
// Spawn a shot
|
// Spawn a shot
|
||||||
// Inserting and setting up variables
|
|
||||||
//nz = pp->posz + pp->bob_z + Z(12);
|
|
||||||
nz = sp->z + Z(40);
|
nz = sp->z + Z(40);
|
||||||
w = SpawnSprite(STAT_MISSILE, BOLT_THINMAN_R0, &s_Rocket[0][0], sp->sectnum,
|
auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R0, &s_Rocket[0][0], sp->sectnum,
|
||||||
nx, ny, nz, sp->ang, 700);
|
nx, ny, nz, sp->ang, 700);
|
||||||
|
|
||||||
wp = &sprite[w];
|
wp = &actorNew->s();
|
||||||
wu = User[w].Data();
|
wu = actorNew->u();
|
||||||
|
|
||||||
if (u->ID == ZOMBIE_RUN_R0)
|
if (u->ID == ZOMBIE_RUN_R0)
|
||||||
SetOwner(sp->owner, w);
|
SetOwner(GetOwner(actor), actorNew);
|
||||||
else
|
else
|
||||||
SetOwner(SpriteNum, w);
|
SetOwner(actor, actorNew);
|
||||||
|
|
||||||
wp->yrepeat = 128;
|
wp->yrepeat = 128;
|
||||||
wp->xrepeat = 128;
|
wp->xrepeat = 128;
|
||||||
|
@ -15317,7 +15308,7 @@ InitEnemyNuke(DSWActor* actor)
|
||||||
wp->pal = wu->spal = 19;
|
wp->pal = wu->spal = 19;
|
||||||
|
|
||||||
wu->RotNum = 5;
|
wu->RotNum = 5;
|
||||||
NewStateGroup(&swActors[w], &sg_Rocket[0]);
|
NewStateGroup(actorNew, &sg_Rocket[0]);
|
||||||
|
|
||||||
wu->WeaponNum = u->WeaponNum;
|
wu->WeaponNum = u->WeaponNum;
|
||||||
wu->Radius = NUKE_RADIUS;
|
wu->Radius = NUKE_RADIUS;
|
||||||
|
@ -15327,7 +15318,7 @@ InitEnemyNuke(DSWActor* actor)
|
||||||
SET(wp->cstat, CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN);
|
SET(wp->cstat, CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN);
|
||||||
|
|
||||||
wp->ang = NORM_ANGLE(wp->ang + 512);
|
wp->ang = NORM_ANGLE(wp->ang + 512);
|
||||||
HelpMissileLateral(w, 500);
|
HelpMissileLateral(actorNew->GetSpriteIndex(), 500);
|
||||||
wp->ang = NORM_ANGLE(wp->ang - 512);
|
wp->ang = NORM_ANGLE(wp->ang - 512);
|
||||||
|
|
||||||
if (SpriteInUnderwaterArea(wp))
|
if (SpriteInUnderwaterArea(wp))
|
||||||
|
@ -15335,9 +15326,9 @@ InitEnemyNuke(DSWActor* actor)
|
||||||
|
|
||||||
// cancel smoke trail
|
// cancel smoke trail
|
||||||
wu->Counter = 1;
|
wu->Counter = 1;
|
||||||
if (TestMissileSetPos(w, DoRocket, 1200, zvel))
|
if (TestMissileSetPos(actorNew->GetSpriteIndex(), DoRocket, 1200, zvel))
|
||||||
{
|
{
|
||||||
KillSprite(w);
|
KillActor(actorNew);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15345,7 +15336,7 @@ InitEnemyNuke(DSWActor* actor)
|
||||||
wu->Counter = 0;
|
wu->Counter = 0;
|
||||||
|
|
||||||
wp->zvel = zvel >> 1;
|
wp->zvel = zvel >> 1;
|
||||||
if (WeaponAutoAim(sp, w, 32, false) == -1)
|
if (WeaponAutoAim(sp, actorNew->GetSpriteIndex(), 32, false) == -1)
|
||||||
{
|
{
|
||||||
wp->ang = NORM_ANGLE(wp->ang - 5);
|
wp->ang = NORM_ANGLE(wp->ang - 5);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue