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

View file

@ -82,7 +82,7 @@ int QueueWallBlood(short hit_sprite, short ang);
bool SlopeBounce(short SpriteNum, bool *hit_wall); bool SlopeBounce(short SpriteNum, bool *hit_wall);
bool HitscanSpriteAdjust(short SpriteNum, short 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 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); int SpawnFireballExp(int16_t Weapon);
void SpawnFireballFlames(int16_t SpriteNum,int16_t enemy); void SpawnFireballFlames(int16_t SpriteNum,int16_t enemy);
int SpawnRadiationCloud(DSWActor* actor); int SpawnRadiationCloud(DSWActor* actor);