- SpawnBubble.

This commit is contained in:
Christoph Oelckers 2021-11-01 21:58:16 +01:00
parent d3302d6cf9
commit c40fc488e5
4 changed files with 44 additions and 49 deletions

View file

@ -604,7 +604,7 @@ int DoPhosphorus(DSWActor* actor)
MissileHitDiveArea(actor->GetSpriteIndex());
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(actor->GetSpriteIndex());
SpawnBubble(actor);
{
switch (u->coll.type)
@ -822,7 +822,7 @@ int DoChemBomb(DSWActor* actor)
MissileHitDiveArea(actor->GetSpriteIndex());
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(actor->GetSpriteIndex());
SpawnBubble(actor);
{
switch (u->coll.type)

View file

@ -4607,21 +4607,20 @@ void DoPlayerDive(PLAYERp pp)
if ((!Prediction && pp->z_speed && ((RANDOM_P2(1024<<5)>>5) < 64)) ||
(PLAYER_MOVING(pp) && (RANDOM_P2(1024<<5)>>5) < 64))
{
short bubble;
SPRITEp bp;
int nx,ny;
PlaySound(DIGI_BUBBLES, pp, v3df_none);
bubble = SpawnBubble(short(pp->SpriteP - sprite));
if (bubble >= 0)
auto bubble = SpawnBubble(pp->Actor());
if (bubble != nullptr)
{
bp = &sprite[bubble];
bp = &bubble->s();
// back it up a bit to get it out of your face
nx = MOVEx((128+64), NORM_ANGLE(bp->ang + 1024));
ny = MOVEy((128+64), NORM_ANGLE(bp->ang + 1024));
move_sprite(bubble, nx, ny, 0L, u->ceiling_dist, u->floor_dist, 0, synctics);
move_sprite(bubble->GetSpriteIndex(), nx, ny, 0L, u->ceiling_dist, u->floor_dist, 0, synctics);
}
}
}

View file

@ -7932,7 +7932,7 @@ DoStar(DSWActor* actor)
if (vel > 100)
{
if ((RANDOM_P2(1024 << 4) >> 4) < 128)
SpawnBubble(Weapon);
SpawnBubble(actor);
}
sp->z += 128 * MISSILEMOVETICS;
@ -8682,7 +8682,7 @@ DoPlasma(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
//DoDamageTest(Weapon);
if (u->ret)
@ -8719,7 +8719,7 @@ DoCoolgFire(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
// !JIM! //!FRANK WHY???
//DoDamageTest(Weapon);
@ -8746,7 +8746,7 @@ DoEelFire(DSWActor* actor)
int Weapon = u->SpriteNum;
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
//DoDamageTest(Weapon);
@ -8905,7 +8905,7 @@ DoGrenade(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
////DSPRINTF(ds, "dist %d, u->ret %d", FindDistance3D(u->xchange, u->ychange, u->zchange), u->ret);
//MONO_PRINT(ds);
@ -9560,7 +9560,7 @@ DoMine(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
if (u->ret)
{
@ -9743,7 +9743,7 @@ DoBoltThinMan(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
//DoDamageTest(Weapon);
@ -10157,7 +10157,7 @@ DoRocket(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
//DoDamageTest(Weapon);
@ -10299,7 +10299,7 @@ DoMicro(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
//DoDamageTest(Weapon);
@ -10385,7 +10385,7 @@ DoUziBullet(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 128)
SpawnBubble(Weapon);
SpawnBubble(actor);
if (u->ret)
{
@ -10450,7 +10450,7 @@ DoBoltSeeker(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
//DoDamageTest(Weapon);
if (u->ret)
@ -10501,7 +10501,7 @@ DoElectro(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
//DoDamageTest(Weapon);
if (TEST(u->Flags, SPR_SUICIDE))
@ -10548,7 +10548,7 @@ DoLavaBoulder(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
//DoDamageTest(Weapon);
if (TEST(u->Flags, SPR_SUICIDE))
@ -10579,7 +10579,7 @@ DoSpear(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
//DoDamageTest(Weapon);
@ -12059,7 +12059,7 @@ DoNapalm(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
if (u->ret)
{
@ -12316,7 +12316,7 @@ DoMirvMissile(DSWActor* actor)
SetCollision(u, move_missile(Weapon, u->xchange, u->ychange, u->zchange, u->ceiling_dist, u->floor_dist, CLIPMASK_MISSILE, MISSILEMOVETICS));
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
if (u->ret)
{
@ -12353,7 +12353,7 @@ DoMirv(DSWActor* actor)
MissileHitDiveArea(Weapon);
if (TEST(u->Flags, SPR_UNDERWATER) && (RANDOM_P2(1024 << 4) >> 4) < 256)
SpawnBubble(Weapon);
SpawnBubble(actor);
u->Counter++;
@ -13305,7 +13305,7 @@ InitSwordAttack(PLAYERp pp)
if (TEST(pp->Flags, PF_DIVING))
{
short bubble;
DSWActor* bubble;
SPRITEp bp;
int nx,ny;
short random_amt;
@ -13318,10 +13318,10 @@ InitSwordAttack(PLAYERp pp)
for (i = 0; i < (int)SIZ(dangs); i++)
{
if (RandomRange(1000) < 500) continue; // Don't spawn bubbles every time
bubble = SpawnBubble(short(pp->SpriteP - sprite));
if (bubble >= 0)
bubble = SpawnBubble(pp->Actor());
if (bubble != nullptr)
{
bp = &sprite[bubble];
bp = &bubble->s();
bp->ang = pp->angle.ang.asbuild();
@ -13331,7 +13331,7 @@ InitSwordAttack(PLAYERp pp)
nx = MOVEx((1024+256)*3, NORM_ANGLE(bp->ang + dangs[i] + random_amt));
ny = MOVEy((1024+256)*3, NORM_ANGLE(bp->ang + dangs[i] + random_amt));
move_missile(bubble, nx, ny, 0L, u->ceiling_dist, u->floor_dist, CLIPMASK_PLAYER, 1);
move_missile(bubble->GetSpriteIndex(), nx, ny, 0L, u->ceiling_dist, u->floor_dist, CLIPMASK_PLAYER, 1);
}
}
}
@ -13484,7 +13484,7 @@ InitFistAttack(PLAYERp pp)
if (TEST(pp->Flags, PF_DIVING))
{
short bubble;
DSWActor* bubble;
SPRITEp bp;
int nx,ny;
short random_amt;
@ -13496,10 +13496,10 @@ InitFistAttack(PLAYERp pp)
for (i = 0; i < (int)SIZ(dangs); i++)
{
bubble = SpawnBubble(short(pp->SpriteP - sprite));
if (bubble >= 0)
bubble = SpawnBubble(pp->Actor());
if (bubble != nullptr)
{
bp = &sprite[bubble];
bp = &bubble->s();
bp->ang = pp->angle.ang.asbuild();
@ -13509,7 +13509,7 @@ InitFistAttack(PLAYERp pp)
nx = MOVEx((1024+256)*3, NORM_ANGLE(bp->ang + dangs[i] + random_amt));
ny = MOVEy((1024+256)*3, NORM_ANGLE(bp->ang + dangs[i] + random_amt));
move_missile(bubble, nx, ny, 0L, u->ceiling_dist, u->floor_dist, CLIPMASK_PLAYER, 1);
move_missile(bubble->GetSpriteIndex(), nx, ny, 0L, u->ceiling_dist, u->floor_dist, CLIPMASK_PLAYER, 1);
}
}
}
@ -16793,8 +16793,8 @@ GenerateDrips(DSWActor* actor)
if (TEST_BOOL2(sp))
{
w = SpawnBubble(SpriteNum);
return w;
auto ww = SpawnBubble(actor);
return 1;
}
nx = sp->x;
@ -16821,7 +16821,7 @@ GenerateDrips(DSWActor* actor)
DoFindGroundPoint(actor);
}
return w;
return 1;
}
int
@ -19847,21 +19847,17 @@ MissileHitDiveArea(short SpriteNum)
return false;
}
int
SpawnBubble(short SpriteNum)
DSWActor* SpawnBubble(DSWActor* actor)
{
SPRITEp sp = &sprite[SpriteNum], bp;
SPRITEp sp = &actor->s(), bp;
USERp bu;
short b;
if (Prediction)
return -1;
return nullptr;
b = SpawnSprite(STAT_MISSILE, BUBBLE, s_Bubble, sp->sectnum, sp->x, sp->y, sp->z, sp->ang, 0);
bp = &sprite[b];
bu = User[b].Data();
//PlaySound(DIGI_BUBBLES, sp, v3df_none);
auto bActor = SpawnActor(STAT_MISSILE, BUBBLE, s_Bubble, sp->sectnum, sp->x, sp->y, sp->z, sp->ang, 0);
bp = &bActor->s();
bu = bActor->u();
bp->xrepeat = 8 + (RANDOM_P2(8 << 8) >> 8);
bp->yrepeat = bp->xrepeat;
@ -19877,7 +19873,7 @@ SpawnBubble(short SpriteNum)
SET(bu->Flags, SPR_UNDERWATER);
bp->shade = -60; // Make em brighter
return b;
return bActor;
}
int

View file

@ -82,7 +82,7 @@ int QueueWallBlood(short hit_sprite, short ang);
bool SlopeBounce(short SpriteNum, bool *hit_wall);
bool HitscanSpriteAdjust(short SpriteNum, short hit_wall);
int SpawnSwordSparks(PLAYERp pp, short hit_sect, short hit_wall, int hit_x, int hit_y, int hit_z, short hit_ang);
int SpawnBubble(short SpriteNum);
DSWActor* SpawnBubble(DSWActor*);
int SpawnFireballExp(int16_t Weapon);
void SpawnFireballFlames(int16_t SpriteNum,int16_t enemy);
int SpawnRadiationCloud(DSWActor* actor);