mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-28 06:02:13 +00:00
- InitEnemyRail, InitZillaRocket, InitEnemyStar
This commit is contained in:
parent
289856a1fc
commit
63870b6077
1 changed files with 36 additions and 92 deletions
|
@ -16138,16 +16138,13 @@ InitEnemyRocket(DSWActor* actor)
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int InitEnemyRail(DSWActor* actor)
|
||||||
InitEnemyRail(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
SPRITEp sp = &actor->s();
|
||||||
SPRITEp sp = u->SpriteP;
|
|
||||||
USERp wu;
|
USERp wu;
|
||||||
SPRITEp wp;
|
SPRITEp wp;
|
||||||
int nx, ny, nz, dist, nang;
|
int nx, ny, nz, dist, nang;
|
||||||
short w;
|
|
||||||
short pnum=0;
|
short pnum=0;
|
||||||
|
|
||||||
if (SW_SHAREWARE) return false; // JBF: verify
|
if (SW_SHAREWARE) return false; // JBF: verify
|
||||||
|
@ -16156,20 +16153,17 @@ InitEnemyRail(DSWActor* actor)
|
||||||
if (gNet.MultiGameType == MULTI_GAME_COOPERATIVE && u->ID == ZOMBIE_RUN_R0)
|
if (gNet.MultiGameType == MULTI_GAME_COOPERATIVE && u->ID == ZOMBIE_RUN_R0)
|
||||||
{
|
{
|
||||||
PLAYERp pp;
|
PLAYERp pp;
|
||||||
SPRITEp psp;
|
|
||||||
|
|
||||||
// Check all players
|
// Check all players
|
||||||
TRAVERSE_CONNECT(pnum)
|
TRAVERSE_CONNECT(pnum)
|
||||||
{
|
{
|
||||||
pp = &Player[pnum];
|
pp = &Player[pnum];
|
||||||
psp = &sprite[pp->PlayerSprite];
|
|
||||||
|
|
||||||
if (u->targetActor == pp->Actor())
|
if (u->targetActor == pp->Actor())
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaySound(DIGI_RAILFIRE, sp, v3df_dontpan|v3df_doppler);
|
PlaySound(DIGI_RAILFIRE, actor, v3df_dontpan|v3df_doppler);
|
||||||
|
|
||||||
// get angle to player and also face player when attacking
|
// get angle to player and also face player when attacking
|
||||||
sp->ang = nang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y);
|
sp->ang = nang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y);
|
||||||
|
@ -16185,16 +16179,17 @@ InitEnemyRail(DSWActor* actor)
|
||||||
// Spawn a shot
|
// Spawn a shot
|
||||||
// Inserting and setting up variables
|
// Inserting and setting up variables
|
||||||
|
|
||||||
w = SpawnSprite(STAT_MISSILE, BOLT_THINMAN_R1, &s_Rail[0][0], sp->sectnum,
|
auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R1, &s_Rail[0][0], sp->sectnum,
|
||||||
nx, ny, nz, sp->ang, 1200);
|
nx, ny, nz, sp->ang, 1200);
|
||||||
|
|
||||||
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 = 52;
|
wp->yrepeat = 52;
|
||||||
wp->xrepeat = 52;
|
wp->xrepeat = 52;
|
||||||
|
@ -16202,7 +16197,7 @@ InitEnemyRail(DSWActor* actor)
|
||||||
wp->zvel = 0;
|
wp->zvel = 0;
|
||||||
|
|
||||||
wu->RotNum = 5;
|
wu->RotNum = 5;
|
||||||
NewStateGroup(&swActors[w], &sg_Rail[0]);
|
NewStateGroup(actorNew, &sg_Rail[0]);
|
||||||
|
|
||||||
wu->Radius = 200;
|
wu->Radius = 200;
|
||||||
wu->ceiling_dist = Z(1);
|
wu->ceiling_dist = Z(1);
|
||||||
|
@ -16211,16 +16206,15 @@ InitEnemyRail(DSWActor* actor)
|
||||||
SET(wp->cstat, CSTAT_SPRITE_YCENTER|CSTAT_SPRITE_INVISIBLE);
|
SET(wp->cstat, CSTAT_SPRITE_YCENTER|CSTAT_SPRITE_INVISIBLE);
|
||||||
SET(wp->cstat, CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN);
|
SET(wp->cstat, CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN);
|
||||||
|
|
||||||
wp->clipdist = 64L>>2;
|
wp->clipdist = 64 >> 2;
|
||||||
|
|
||||||
wu->xchange = MOVEx(wp->xvel, wp->ang);
|
wu->xchange = MOVEx(wp->xvel, wp->ang);
|
||||||
wu->ychange = MOVEy(wp->xvel, wp->ang);
|
wu->ychange = MOVEy(wp->xvel, wp->ang);
|
||||||
wu->zchange = wp->zvel;
|
wu->zchange = wp->zvel;
|
||||||
|
|
||||||
if (TestMissileSetPos(w, DoRailStart, 600, wp->zvel))
|
if (TestMissileSetPos(actorNew->GetSpriteIndex(), DoRailStart, 600, wp->zvel))
|
||||||
{
|
{
|
||||||
//sprite->clipdist = oclipdist;
|
KillActor(actorNew);
|
||||||
KillSprite(w);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16230,16 +16224,14 @@ InitEnemyRail(DSWActor* actor)
|
||||||
if (dist != 0)
|
if (dist != 0)
|
||||||
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
|
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
|
||||||
|
|
||||||
return w;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int InitZillaRocket(DSWActor* actor)
|
||||||
InitZillaRocket(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
SPRITEp sp = &actor->s(), wp;
|
||||||
SPRITEp sp = &sprite[SpriteNum], wp;
|
|
||||||
USERp wu;
|
USERp wu;
|
||||||
int nx, ny, nz, dist, nang;
|
int nx, ny, nz, dist, nang;
|
||||||
short w, i;
|
short w, i;
|
||||||
|
@ -16250,7 +16242,7 @@ InitZillaRocket(DSWActor* actor)
|
||||||
short ang;
|
short ang;
|
||||||
} MISSILE_PLACEMENT;
|
} MISSILE_PLACEMENT;
|
||||||
|
|
||||||
static MISSILE_PLACEMENT mp[] =
|
static const MISSILE_PLACEMENT mp[] =
|
||||||
{
|
{
|
||||||
{600 * 6, 400, 512},
|
{600 * 6, 400, 512},
|
||||||
{900 * 6, 400, 512},
|
{900 * 6, 400, 512},
|
||||||
|
@ -16260,7 +16252,7 @@ InitZillaRocket(DSWActor* actor)
|
||||||
{1100 * 6, 400, -512},
|
{1100 * 6, 400, -512},
|
||||||
};
|
};
|
||||||
|
|
||||||
PlaySound(DIGI_NINJARIOTATTACK, sp, v3df_none);
|
PlaySound(DIGI_NINJARIOTATTACK, actor, v3df_none);
|
||||||
|
|
||||||
// get angle to player and also face player when attacking
|
// get angle to player and also face player when attacking
|
||||||
sp->ang = nang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y);
|
sp->ang = nang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y);
|
||||||
|
@ -16272,14 +16264,12 @@ InitZillaRocket(DSWActor* actor)
|
||||||
nz = sp->z - DIV2(SPRITEp_SIZE_Z(sp))-Z(8);
|
nz = sp->z - DIV2(SPRITEp_SIZE_Z(sp))-Z(8);
|
||||||
|
|
||||||
// Spawn a shot
|
// Spawn a shot
|
||||||
// wp = &sprite[w = SpawnSprite(STAT_MISSILE, STAR1, s_Star, sp->sectnum,
|
auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R2, &s_Rocket[0][0], sp->sectnum,
|
||||||
// nx, ny, nz, u->targetActor->s().ang, 250)];
|
|
||||||
w = SpawnSprite(STAT_MISSILE, BOLT_THINMAN_R2, &s_Rocket[0][0], sp->sectnum,
|
|
||||||
nx, ny, nz-Z(8), u->targetActor->s().ang, NINJA_BOLT_VELOCITY);
|
nx, ny, nz-Z(8), u->targetActor->s().ang, NINJA_BOLT_VELOCITY);
|
||||||
wp = &sprite[w];
|
wp = &actorNew->s();
|
||||||
wu = User[w].Data();
|
wu = actorNew->u();
|
||||||
|
|
||||||
SetOwner(SpriteNum, w);
|
SetOwner(actor, actorNew);
|
||||||
wp->yrepeat = 28;
|
wp->yrepeat = 28;
|
||||||
wp->xrepeat = 28;
|
wp->xrepeat = 28;
|
||||||
wp->shade = -15;
|
wp->shade = -15;
|
||||||
|
@ -16288,7 +16278,7 @@ InitZillaRocket(DSWActor* actor)
|
||||||
wp->clipdist = 64L>>2;
|
wp->clipdist = 64L>>2;
|
||||||
|
|
||||||
wu->RotNum = 5;
|
wu->RotNum = 5;
|
||||||
NewStateGroup(&swActors[w], &sg_Rocket[0]);
|
NewStateGroup(actorNew, &sg_Rocket[0]);
|
||||||
wu->Radius = 200;
|
wu->Radius = 200;
|
||||||
SET(wp->cstat, CSTAT_SPRITE_YCENTER);
|
SET(wp->cstat, CSTAT_SPRITE_YCENTER);
|
||||||
|
|
||||||
|
@ -16308,11 +16298,11 @@ InitZillaRocket(DSWActor* actor)
|
||||||
if (mp[i].dist_over != 0)
|
if (mp[i].dist_over != 0)
|
||||||
{
|
{
|
||||||
wp->ang = NORM_ANGLE(wp->ang + mp[i].ang);
|
wp->ang = NORM_ANGLE(wp->ang + mp[i].ang);
|
||||||
HelpMissileLateral(w, mp[i].dist_over);
|
HelpMissileLateral(actorNew->GetSpriteIndex(), mp[i].dist_over);
|
||||||
wp->ang = NORM_ANGLE(wp->ang - mp[i].ang);
|
wp->ang = NORM_ANGLE(wp->ang - mp[i].ang);
|
||||||
}
|
}
|
||||||
|
|
||||||
MissileSetPos(w, DoBoltThinMan, mp[i].dist_out);
|
MissileSetPos(actorNew->GetSpriteIndex(), DoBoltThinMan, mp[i].dist_out);
|
||||||
|
|
||||||
// find the distance to the target (player)
|
// find the distance to the target (player)
|
||||||
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y);
|
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y);
|
||||||
|
@ -16321,18 +16311,15 @@ InitZillaRocket(DSWActor* actor)
|
||||||
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
|
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
|
||||||
}
|
}
|
||||||
|
|
||||||
return w;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int InitEnemyStar(DSWActor* actor)
|
||||||
InitEnemyStar(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
SPRITEp sp = &actor->s(), wp;
|
||||||
SPRITEp sp = &sprite[SpriteNum], wp;
|
|
||||||
USERp wu;
|
USERp wu;
|
||||||
int nx, ny, nz, dist, nang;
|
int nx, ny, nz, dist, nang;
|
||||||
short w;
|
|
||||||
|
|
||||||
// get angle to player and also face player when attacking
|
// get angle to player and also face player when attacking
|
||||||
sp->ang = nang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y));
|
sp->ang = nang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y));
|
||||||
|
@ -16342,13 +16329,13 @@ InitEnemyStar(DSWActor* actor)
|
||||||
nz = SPRITEp_MID(sp);
|
nz = SPRITEp_MID(sp);
|
||||||
|
|
||||||
// Spawn a shot
|
// Spawn a shot
|
||||||
wp = &sprite[w = SpawnSprite(STAT_MISSILE, STAR1, s_Star, sp->sectnum,
|
auto actorNew = SpawnActor(STAT_MISSILE, STAR1, s_Star, sp->sectnum,
|
||||||
nx, ny, nz, u->targetActor->s().ang, NINJA_STAR_VELOCITY)];
|
nx, ny, nz, u->targetActor->s().ang, NINJA_STAR_VELOCITY);
|
||||||
|
|
||||||
wu = User[w].Data();
|
wp = &actorNew->s();
|
||||||
|
wu = actorNew->u();
|
||||||
|
|
||||||
|
SetOwner(actor, actorNew);
|
||||||
SetOwner(SpriteNum, w);
|
|
||||||
wp->yrepeat = 16;
|
wp->yrepeat = 16;
|
||||||
wp->xrepeat = 16;
|
wp->xrepeat = 16;
|
||||||
wp->shade = -25;
|
wp->shade = -25;
|
||||||
|
@ -16360,7 +16347,7 @@ InitEnemyStar(DSWActor* actor)
|
||||||
wu->ychange = MOVEy(wp->xvel, wp->ang);
|
wu->ychange = MOVEy(wp->xvel, wp->ang);
|
||||||
wu->zchange = wp->zvel;
|
wu->zchange = wp->zvel;
|
||||||
|
|
||||||
MissileSetPos(w, DoStar, 400);
|
MissileSetPos(actorNew->GetSpriteIndex(), DoStar, 400);
|
||||||
|
|
||||||
// find the distance to the target (player)
|
// find the distance to the target (player)
|
||||||
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y);
|
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y);
|
||||||
|
@ -16368,51 +16355,8 @@ InitEnemyStar(DSWActor* actor)
|
||||||
if (dist != 0)
|
if (dist != 0)
|
||||||
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
|
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
|
||||||
|
|
||||||
//
|
PlaySound(DIGI_STAR, actor, v3df_none);
|
||||||
// Star Power Up Code
|
return 0;
|
||||||
//
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (sp->pal == PALETTE_PLAYER0)
|
|
||||||
{
|
|
||||||
static short dang[] = {-28, 28};
|
|
||||||
char i;
|
|
||||||
SPRITEp np;
|
|
||||||
USERp nu;
|
|
||||||
short sn;
|
|
||||||
|
|
||||||
PlaySound(DIGI_STAR, sp, v3df_none);
|
|
||||||
for (i = 0; i < SIZ(dang); i++)
|
|
||||||
{
|
|
||||||
sn = SpawnSprite(STAT_MISSILE, STAR1, s_Star, sp->sectnum, wp->x, wp->y, wp->z, NORM_ANGLE(wp->ang + dang[i]), wp->xvel);
|
|
||||||
np = &sprite[sn];
|
|
||||||
nu = User[sn];
|
|
||||||
|
|
||||||
SetOwner(wp->owner, sn);
|
|
||||||
np->yrepeat = wp->yrepeat;
|
|
||||||
np->xrepeat = wp->xrepeat;
|
|
||||||
np->shade = wp->shade;
|
|
||||||
nu->WeaponNum = wu->WeaponNum;
|
|
||||||
nu->Radius = wu->Radius;
|
|
||||||
nu->xchange = wu->xchange;
|
|
||||||
nu->ychange = wu->ychange;
|
|
||||||
nu->zchange = 0;
|
|
||||||
np->zvel = 0;
|
|
||||||
|
|
||||||
MissileSetPos(sn, DoStar, 400);
|
|
||||||
|
|
||||||
nu->zchange = wu->zchange;
|
|
||||||
np->zvel = wp->zvel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PlaySound(DIGI_STAR, sp, v3df_none);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return w;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int InitEnemyCrossbow(DSWActor* actor)
|
int InitEnemyCrossbow(DSWActor* actor)
|
||||||
|
|
Loading…
Reference in a new issue