- splash functions.

This commit is contained in:
Christoph Oelckers 2021-11-01 09:23:52 +01:00
parent cf8aaf7ff2
commit e3e9e4030e
3 changed files with 28 additions and 33 deletions

View file

@ -2150,7 +2150,7 @@ int PlayerInitChemBomb(PLAYERp pp); // jweapon.c
int PlayerInitFlashBomb(PLAYERp pp); // jweapon.c
int PlayerInitCaltrops(PLAYERp pp); // jweapon.c
int InitPhosphorus(int16_t SpriteNum); // jweapon.c
void SpawnFloorSplash(short SpriteNum); // jweapon.c
void SpawnFloorSplash(DSWActor*); // jweapon.c
int SaveGame(short save_num); // save.c
int LoadGame(short save_num); // save.c

View file

@ -256,12 +256,10 @@ STATE s_BloodSprayDrip[] =
/////////////////////////////////////////////////////////////////////////////////////////////
int
DoWallBloodDrip(DSWActor* actor)
int DoWallBloodDrip(DSWActor* actor)
{
USER* u = actor->u();
int SpriteNum = u->SpriteNum;
SPRITEp sp = &sprite[SpriteNum];
SPRITEp sp = &actor->s();
//sp->z += (300+RandomRange(2300)) >> 1;
@ -289,7 +287,7 @@ DoWallBloodDrip(DSWActor* actor)
if (sp->z >= u->loz)
{
sp->z = u->loz;
SpawnFloorSplash(SpriteNum);
SpawnFloorSplash(actor);
KillActor(actor);
return 0;
}
@ -298,19 +296,18 @@ DoWallBloodDrip(DSWActor* actor)
}
void
SpawnMidSplash(short SpriteNum)
SpawnMidSplash(DSWActor* actor)
{
SPRITEp sp = &sprite[SpriteNum];
USERp u = User[SpriteNum].Data();
SPRITEp sp = &actor->s();
USERp u = actor->u();
SPRITEp np;
USERp nu;
short New;
New = SpawnSprite(STAT_MISSILE, GOREDrip, s_GoreSplash, sp->sectnum,
auto actorNew = SpawnActor(STAT_MISSILE, GOREDrip, s_GoreSplash, sp->sectnum,
sp->x, sp->y, SPRITEp_MID(sp), sp->ang, 0);
np = &sprite[New];
nu = User[New].Data();
np = &actorNew->s();
nu = actorNew->u();
np->shade = -12;
np->xrepeat = 70-RandomRange(20);
@ -330,20 +327,18 @@ SpawnMidSplash(short SpriteNum)
SET(nu->Flags, SPR_UNDERWATER);
}
void
SpawnFloorSplash(short SpriteNum)
void SpawnFloorSplash(DSWActor* actor)
{
SPRITEp sp = &sprite[SpriteNum];
USERp u = User[SpriteNum].Data();
SPRITEp sp = &actor->s();
USERp u = actor->u();
SPRITEp np;
USERp nu;
short New;
New = SpawnSprite(STAT_MISSILE, GOREDrip, s_GoreFloorSplash, sp->sectnum,
auto actorNew = SpawnActor(STAT_MISSILE, GOREDrip, s_GoreFloorSplash, sp->sectnum,
sp->x, sp->y, sp->z, sp->ang, 0);
np = &sprite[New];
nu = User[New].Data();
np = &actorNew->s();
nu = actorNew->u();
np->shade = -12;
np->xrepeat = 70-RandomRange(20);
@ -395,7 +390,7 @@ DoBloodSpray(DSWActor* actor)
if (sp->z >= fz)
{
sp->z = fz;
SpawnFloorSplash(Weapon);
SpawnFloorSplash(actor);
KillActor(actor);
return true;
}
@ -425,7 +420,7 @@ DoBloodSpray(DSWActor* actor)
if (TEST(hsp->cstat, CSTAT_SPRITE_ALIGNMENT_WALL))
{
wall_ang = NORM_ANGLE(hsp->ang);
SpawnMidSplash(Weapon);
SpawnMidSplash(actor);
QueueWallBlood(Weapon, hsp->ang);
WallBounce(Weapon, wall_ang);
ScaleSpriteVector(Weapon, 32000);
@ -433,7 +428,7 @@ DoBloodSpray(DSWActor* actor)
else
{
u->xchange = u->ychange = 0;
SpawnMidSplash(Weapon);
SpawnMidSplash(actor);
QueueWallBlood(Weapon, hsp->ang);
KillActor(actor);
return true;
@ -463,7 +458,7 @@ DoBloodSpray(DSWActor* actor)
nw = wall[hit_wall].point2;
wall_ang = NORM_ANGLE(getangle(wall[nw].x - wph->x, wall[nw].y - wph->y) + 512);
SpawnMidSplash(Weapon);
SpawnMidSplash(actor);
wb = QueueWallBlood(Weapon, NORM_ANGLE(wall_ang+1024));
if (wb < 0)
@ -522,7 +517,7 @@ DoBloodSpray(DSWActor* actor)
#if 0
if (!TEST(u->Flags, SPR_BOUNCE))
{
SpawnFloorSplash(Weapon);
SpawnFloorSplash(actor);
SET(u->Flags, SPR_BOUNCE);
SetCollision(u, 0);
u->Counter = 0;
@ -534,7 +529,7 @@ DoBloodSpray(DSWActor* actor)
#endif
{
u->xchange = u->ychange = 0;
SpawnFloorSplash(Weapon);
SpawnFloorSplash(actor);
KillActor(actor);
return true;
}

View file

@ -108,7 +108,7 @@ bool TestDontStickSector(short hit_sect);
ANIMATOR SpawnShrapX;
bool WeaponMoveHit(short SpriteNum);
int HelpMissileLateral(int16_t Weapon, int dist);
void SpawnMidSplash(short SpriteNum);
void SpawnMidSplash(DSWActor* actor);
int SopDamage(SECTOR_OBJECTp sop,short amt);
int SopCheckKill(SECTOR_OBJECTp sop);
@ -6467,7 +6467,7 @@ DoDamage(short SpriteNum, short Weapon)
if (RandomRange(1000) > 900)
InitBloodSpray(SpriteNum,false,105);
if (RandomRange(1000) > 900)
SpawnMidSplash(SpriteNum);
SpawnMidSplash(actor);
break;
}
}
@ -6517,7 +6517,7 @@ DoDamage(short SpriteNum, short Weapon)
break;
default:
if (RandomRange(1000) > 950)
SpawnMidSplash(SpriteNum);
SpawnMidSplash(actor);
break;
}
@ -21036,7 +21036,7 @@ ShrapKillSprite(short SpriteNum)
case GORE_Lung:
if (RandomRange(1000) > 500) break;
sp->clipdist = SPRITEp_SIZE_X(sp);
SpawnFloorSplash(SpriteNum);
SpawnFloorSplash(actor);
if (RandomRange(1000) < 500)
PlaySound(DIGI_GIBS1, sp, v3df_none);
else
@ -21058,7 +21058,7 @@ ShrapKillSprite(short SpriteNum)
case GORE_Liver:
if (RandomRange(1000) > 500) break;
sp->clipdist = SPRITEp_SIZE_X(sp);
SpawnFloorSplash(SpriteNum);
SpawnFloorSplash(actor);
if (RandomRange(1000) < 500)
PlaySound(DIGI_GIBS1, sp, v3df_none);
else
@ -21080,7 +21080,7 @@ ShrapKillSprite(short SpriteNum)
case GORE_SkullCap:
if (RandomRange(1000) > 500) break;
sp->clipdist = SPRITEp_SIZE_X(sp);
SpawnFloorSplash(SpriteNum);
SpawnFloorSplash(actor);
if (rnd_num > 683)
{
QueueGeneric(SpriteNum,930);