mirror of
https://github.com/DrBeef/Raze.git
synced 2025-04-07 00:01:57 +00:00
- DoMicroMini, SpawnExtraMicroMini, DoMicro, DoUziBullet, DoBoltSeeker
This commit is contained in:
parent
acc9a09db9
commit
dd528c5eab
1 changed files with 36 additions and 59 deletions
|
@ -8039,10 +8039,8 @@ DSWActor* PickEnemyTarget(DSWActor* actor, short aware_range)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
int
|
||||
MissileSeek(int16_t Weapon, int16_t delay_tics, int16_t aware_range/*, int16_t dang_shift, int16_t turn_limit, int16_t z_limit*/)
|
||||
int MissileSeek(DSWActor* actor, int16_t delay_tics, int16_t aware_range/*, int16_t dang_shift, int16_t turn_limit, int16_t z_limit*/)
|
||||
{
|
||||
auto actor = &swActors[Weapon];
|
||||
SPRITEp sp = &actor->s();
|
||||
USERp u = actor->u();
|
||||
|
||||
|
@ -8465,8 +8463,6 @@ DoPlasma(DSWActor* actor)
|
|||
oy = sp->y;
|
||||
oz = sp->z;
|
||||
|
||||
//MissileSeek(int16_t Weapon, int16_t delay_tics, int16_t aware_range/*, int16_t dang_shift, int16_t turn_limit, int16_t z_limit*/)
|
||||
//MissileSeek(Weapon, 20, 1024/*, 6, 80, 6*/);
|
||||
DoBlurExtend(Weapon, 0, 4);
|
||||
|
||||
dax = MOVEx(sp->xvel, sp->ang);
|
||||
|
@ -9957,7 +9953,6 @@ DoRocket(DSWActor* actor)
|
|||
|
||||
if (TEST(u->Flags, SPR_FIND_PLAYER))
|
||||
{
|
||||
//MissileSeek(Weapon, 10, 768/*, 3, 48, 6*/);
|
||||
VectorMissileSeek(Weapon, 30, 16, 128, 768);
|
||||
}
|
||||
|
||||
|
@ -10026,22 +10021,20 @@ DoRocket(DSWActor* actor)
|
|||
return false;
|
||||
}
|
||||
|
||||
int
|
||||
DoMicroMini(DSWActor* actor)
|
||||
int DoMicroMini(DSWActor* actor)
|
||||
{
|
||||
USER* u = actor->u();
|
||||
int Weapon = u->SpriteNum;
|
||||
short i;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
SetCollision(u, move_missile(Weapon, u->xchange, u->ychange, u->zchange, u->ceiling_dist, u->floor_dist, CLIPMASK_MISSILE, MISSILEMOVETICS));
|
||||
SetCollision(u, move_missile(actor->GetSpriteIndex(), u->xchange, u->ychange, u->zchange, u->ceiling_dist, u->floor_dist, CLIPMASK_MISSILE, MISSILEMOVETICS));
|
||||
|
||||
MissileHitDiveArea(actor);
|
||||
|
||||
if (u->ret)
|
||||
if (u->coll.type != kHitNone)
|
||||
{
|
||||
if (WeaponMoveHit(Weapon))
|
||||
if (WeaponMoveHit(actor->GetSpriteIndex()))
|
||||
{
|
||||
SpawnMicroExp(actor);
|
||||
KillActor(actor);
|
||||
|
@ -10053,30 +10046,27 @@ DoMicroMini(DSWActor* actor)
|
|||
return false;
|
||||
}
|
||||
|
||||
int
|
||||
SpawnExtraMicroMini(DSWActor* actor)
|
||||
int SpawnExtraMicroMini(DSWActor* actor)
|
||||
{
|
||||
USER* u = actor->u();
|
||||
int Weapon = u->SpriteNum;
|
||||
SPRITEp sp = &sprite[Weapon];
|
||||
SPRITEp wp;
|
||||
USERp wu;
|
||||
short w;
|
||||
|
||||
w = SpawnSprite(STAT_MISSILE, BOLT_THINMAN_R0, &s_Micro[0][0], sp->sectnum,
|
||||
auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R0, &s_Micro[0][0], sp->sectnum,
|
||||
sp->x, sp->y, sp->z, sp->ang, sp->xvel);
|
||||
|
||||
wp = &sprite[w];
|
||||
wu = User[w].Data();
|
||||
wp = &actorNew->s();
|
||||
wu = actorNew->u();
|
||||
|
||||
SetOwner(sp->owner, w);
|
||||
SetOwner(GetOwner(actor), actorNew);
|
||||
wp->yrepeat = wp->xrepeat = sp->xrepeat;
|
||||
//wp->xrepeat = 64;
|
||||
wp->shade = sp->shade;
|
||||
wp->clipdist = sp->clipdist;
|
||||
|
||||
wu->RotNum = 5;
|
||||
NewStateGroup(&swActors[w], &sg_MicroMini[0]);
|
||||
NewStateGroup(actorNew, &sg_MicroMini[0]);
|
||||
wu->WeaponNum = u->WeaponNum;
|
||||
wu->Radius = u->Radius;
|
||||
wu->ceiling_dist = u->ceiling_dist;
|
||||
|
@ -10093,16 +10083,14 @@ SpawnExtraMicroMini(DSWActor* actor)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
DoMicro(DSWActor* actor)
|
||||
int DoMicro(DSWActor* actor)
|
||||
{
|
||||
USER* u = actor->u();
|
||||
int Weapon = u->SpriteNum;
|
||||
SPRITEp sp = &sprite[Weapon];
|
||||
SPRITEp sp = &actor->s();
|
||||
|
||||
if (SW_SHAREWARE) return false; // JBF: verify
|
||||
|
||||
SetCollision(u, move_missile(Weapon, u->xchange, u->ychange, u->zchange,
|
||||
SetCollision(u, move_missile(actor->GetSpriteIndex(), u->xchange, u->ychange, u->zchange,
|
||||
u->ceiling_dist, u->floor_dist, CLIPMASK_MISSILE, MISSILEMOVETICS));
|
||||
|
||||
MissileHitDiveArea(actor);
|
||||
|
@ -10110,8 +10098,6 @@ DoMicro(DSWActor* actor)
|
|||
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
|
||||
SpawnBubble(actor);
|
||||
|
||||
//DoDamageTest(Weapon);
|
||||
|
||||
if (!u->Counter)
|
||||
{
|
||||
SPRITEp np;
|
||||
|
@ -10155,9 +10141,9 @@ DoMicro(DSWActor* actor)
|
|||
|
||||
|
||||
// hit something
|
||||
if (u->ret)
|
||||
if (u->coll.type != kHitNone)
|
||||
{
|
||||
if (WeaponMoveHit(Weapon))
|
||||
if (WeaponMoveHit(actor->GetSpriteIndex()))
|
||||
{
|
||||
SpawnMicroExp(actor);
|
||||
KillActor(actor);
|
||||
|
@ -10168,12 +10154,10 @@ DoMicro(DSWActor* actor)
|
|||
return false;
|
||||
}
|
||||
|
||||
int
|
||||
DoUziBullet(DSWActor* actor)
|
||||
int DoUziBullet(DSWActor* actor)
|
||||
{
|
||||
USER* u = actor->u();
|
||||
int Weapon = u->SpriteNum;
|
||||
SPRITEp sp = &sprite[Weapon];
|
||||
SPRITEp sp = &actor->s();
|
||||
int32_t dax, day, daz;
|
||||
int sx,sy;
|
||||
short i;
|
||||
|
@ -10188,7 +10172,7 @@ DoUziBullet(DSWActor* actor)
|
|||
|
||||
sx = sp->x;
|
||||
sy = sp->y;
|
||||
SetCollision(u, move_missile(Weapon, dax, day, daz, u->ceiling_dist, u->floor_dist, CLIPMASK_MISSILE, MISSILEMOVETICS));
|
||||
SetCollision(u, move_missile(actor->GetSpriteIndex(), dax, day, daz, u->ceiling_dist, u->floor_dist, CLIPMASK_MISSILE, MISSILEMOVETICS));
|
||||
u->Dist += Distance(sx, sy, sp->x, sp->y);
|
||||
|
||||
MissileHitDiveArea(actor);
|
||||
|
@ -10196,37 +10180,35 @@ DoUziBullet(DSWActor* actor)
|
|||
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 128)
|
||||
SpawnBubble(actor);
|
||||
|
||||
if (u->ret)
|
||||
if (u->coll.type != kHitNone)
|
||||
{
|
||||
SPRITEp wp;
|
||||
short j;
|
||||
|
||||
WeaponMoveHit(Weapon);
|
||||
WeaponMoveHit(actor->GetSpriteIndex());
|
||||
|
||||
j = SpawnSprite(STAT_MISSILE, UZI_SMOKE, s_UziSmoke, sp->sectnum, sp->x, sp->y, sp->z, sp->ang, 0);
|
||||
wp = &sprite[j];
|
||||
auto actorNew = SpawnActor(STAT_MISSILE, UZI_SMOKE, s_UziSmoke, sp->sectnum, sp->x, sp->y, sp->z, sp->ang, 0);
|
||||
wp = &actorNew->s();
|
||||
wp->shade = -40;
|
||||
wp->xrepeat = UZI_SMOKE_REPEAT;
|
||||
wp->yrepeat = UZI_SMOKE_REPEAT;
|
||||
SetOwner(sp->owner, j);
|
||||
SetOwner(GetOwner(actor), actorNew);
|
||||
wp->ang = sp->ang;
|
||||
wp->clipdist = 128 >> 2;
|
||||
SET(wp->cstat, CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_YCENTER);
|
||||
|
||||
if (!TEST(u->Flags, SPR_UNDERWATER))
|
||||
{
|
||||
j = SpawnSprite(STAT_MISSILE, UZI_SPARK, s_UziSpark, wp->sectnum, wp->x, wp->y, wp->z, 0, 0);
|
||||
wp = &sprite[j];
|
||||
actorNew = SpawnActor(STAT_MISSILE, UZI_SPARK, s_UziSpark, wp->sectnum, wp->x, wp->y, wp->z, 0, 0);
|
||||
wp = &actorNew->s();
|
||||
wp->shade = -40;
|
||||
wp->xrepeat = UZI_SPARK_REPEAT;
|
||||
wp->yrepeat = UZI_SPARK_REPEAT;
|
||||
SetOwner(sp->owner, j);
|
||||
SetOwner(GetOwner(actor), actorNew);
|
||||
wp->ang = sp->ang;
|
||||
SET(wp->cstat, CSTAT_SPRITE_YCENTER);
|
||||
}
|
||||
|
||||
KillActor(actor);
|
||||
|
||||
return true;
|
||||
}
|
||||
else if (u->Dist > 8000)
|
||||
|
@ -10235,43 +10217,38 @@ DoUziBullet(DSWActor* actor)
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
DoBoltSeeker(DSWActor* actor)
|
||||
int DoBoltSeeker(DSWActor* actor)
|
||||
{
|
||||
USER* u = actor->u();
|
||||
int Weapon = u->SpriteNum;
|
||||
SPRITEp sp = &sprite[Weapon];
|
||||
SPRITEp sp = &actor->s();
|
||||
int32_t dax, day, daz;
|
||||
|
||||
MissileSeek(Weapon, 30, 768/*, 4, 48, 6*/);
|
||||
DoBlurExtend(Weapon, 0, 4);
|
||||
MissileSeek(actor, 30, 768/*, 4, 48, 6*/);
|
||||
DoBlurExtend(actor->GetSpriteIndex(), 0, 4);
|
||||
|
||||
dax = MOVEx(sp->xvel, sp->ang);
|
||||
day = MOVEy(sp->xvel, sp->ang);
|
||||
daz = sp->zvel;
|
||||
|
||||
SetCollision(u, move_missile(Weapon, dax, day, daz, CEILING_DIST, FLOOR_DIST, CLIPMASK_MISSILE, MISSILEMOVETICS));
|
||||
SetCollision(u, move_missile(actor->GetSpriteIndex(), dax, day, daz, CEILING_DIST, FLOOR_DIST, CLIPMASK_MISSILE, MISSILEMOVETICS));
|
||||
|
||||
MissileHitDiveArea(actor);
|
||||
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
|
||||
SpawnBubble(actor);
|
||||
|
||||
if (u->ret)
|
||||
if (u->coll.type != kHitNone)
|
||||
{
|
||||
if (WeaponMoveHit(Weapon))
|
||||
if (WeaponMoveHit(actor->GetSpriteIndex()))
|
||||
{
|
||||
SpawnBoltExp(actor);
|
||||
KillActor(actor);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -10295,7 +10272,7 @@ int DoElectro(DSWActor* actor)
|
|||
|
||||
// only seek on Electro's after a hit on an actor
|
||||
if (u->Counter > 0)
|
||||
MissileSeek(actor->GetSpriteIndex(), 30, 512/*, 3, 52, 2*/);
|
||||
MissileSeek(actor, 30, 512/*, 3, 52, 2*/);
|
||||
|
||||
dax = MOVEx(sp->xvel, sp->ang);
|
||||
day = MOVEy(sp->xvel, sp->ang);
|
||||
|
@ -10433,7 +10410,7 @@ int SpawnCoolieExp(DSWActor* actor)
|
|||
|
||||
void SpawnFireballFlames(DSWActor* actor, DSWActor* enemyActor)
|
||||
{
|
||||
SPRITEp sp = &actor->s(), ep;
|
||||
SPRITEp sp = &actor->s(), ep = nullptr;
|
||||
USERp u = actor->u(), eu = nullptr;
|
||||
|
||||
if (TEST(u->Flags, SPR_UNDERWATER))
|
||||
|
|
Loading…
Reference in a new issue