Implemented lava splish. Feel free to suggest a different "splish" sound.

This commit is contained in:
MascaraSnake 2019-10-05 10:00:59 +02:00
parent 5c1fabfaae
commit cabc4e0294
9 changed files with 69 additions and 13 deletions

View File

@ -6598,6 +6598,9 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_SPLISH8", "S_SPLISH8",
"S_SPLISH9", "S_SPLISH9",
// Lava splish
"S_LAVASPLISH",
// added water splash // added water splash
"S_SPLASH1", "S_SPLASH1",
"S_SPLASH2", "S_SPLASH2",
@ -7769,6 +7772,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_RAIN", // Rain "MT_RAIN", // Rain
"MT_SNOWFLAKE", // Snowflake "MT_SNOWFLAKE", // Snowflake
"MT_SPLISH", // Water splish! "MT_SPLISH", // Water splish!
"MT_LAVASPLISH", // Lava splish!
"MT_SMOKE", "MT_SMOKE",
"MT_SMALLBUBBLE", // small bubble "MT_SMALLBUBBLE", // small bubble
"MT_MEDIUMBUBBLE", // medium bubble "MT_MEDIUMBUBBLE", // medium bubble

View File

@ -477,6 +477,7 @@ light_t *t_lspr[NUMSPRITES] =
&lspr[NOLIGHT], // SPR_RAIN &lspr[NOLIGHT], // SPR_RAIN
&lspr[NOLIGHT], // SPR_SNO1 &lspr[NOLIGHT], // SPR_SNO1
&lspr[NOLIGHT], // SPR_SPLH &lspr[NOLIGHT], // SPR_SPLH
&lspr[NOLIGHT], // SPR_LSPL
&lspr[NOLIGHT], // SPR_SPLA &lspr[NOLIGHT], // SPR_SPLA
&lspr[NOLIGHT], // SPR_SMOK &lspr[NOLIGHT], // SPR_SMOK
&lspr[NOLIGHT], // SPR_BUBL &lspr[NOLIGHT], // SPR_BUBL

View File

@ -372,6 +372,7 @@ char sprnames[NUMSPRITES + 1][5] =
"RAIN", // Rain "RAIN", // Rain
"SNO1", // Snowflake "SNO1", // Snowflake
"SPLH", // Water Splish "SPLH", // Water Splish
"LSPL", // Lava Splish
"SPLA", // Water Splash "SPLA", // Water Splash
"SMOK", "SMOK",
"BUBL", // Bubble "BUBL", // Bubble
@ -3233,6 +3234,9 @@ state_t states[NUMSTATES] =
{SPR_SPLH, FF_TRANS50|7, 2, {NULL}, 0, 0, S_SPLISH9}, // S_SPLISH8 {SPR_SPLH, FF_TRANS50|7, 2, {NULL}, 0, 0, S_SPLISH9}, // S_SPLISH8
{SPR_SPLH, FF_TRANS50|8, 2, {NULL}, 0, 0, S_NULL}, // S_SPLISH9 {SPR_SPLH, FF_TRANS50|8, 2, {NULL}, 0, 0, S_NULL}, // S_SPLISH9
// Lava splish
{SPR_LSPL, FF_ANIMATE, 16, {NULL}, 7, 2, S_NULL}, // S_LAVASPLISH
// Water Splash // Water Splash
{SPR_SPLA, FF_TRANS50 , 3, {NULL}, 0, 0, S_SPLASH2}, // S_SPLASH1 {SPR_SPLA, FF_TRANS50 , 3, {NULL}, 0, 0, S_SPLASH2}, // S_SPLASH1
{SPR_SPLA, FF_TRANS70|1, 3, {NULL}, 0, 0, S_SPLASH3}, // S_SPLASH2 {SPR_SPLA, FF_TRANS70|1, 3, {NULL}, 0, 0, S_SPLASH3}, // S_SPLASH2
@ -16823,6 +16827,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_LAVASPLISH
-1, // doomednum
S_LAVASPLISH, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
6*FRACUNIT, // radius
1*FRACUNIT, // height
0, // display offset
100, // mass
1, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY, // flags
S_NULL // raisestate
},
{ // MT_SMOKE { // MT_SMOKE
-1, // doomednum -1, // doomednum
S_SMOKE1, // spawnstate S_SMOKE1, // spawnstate

View File

@ -626,6 +626,7 @@ typedef enum sprite
SPR_RAIN, // Rain SPR_RAIN, // Rain
SPR_SNO1, // Snowflake SPR_SNO1, // Snowflake
SPR_SPLH, // Water Splish SPR_SPLH, // Water Splish
SPR_LSPL, // Lava Splish
SPR_SPLA, // Water Splash SPR_SPLA, // Water Splash
SPR_SMOK, SPR_SMOK,
SPR_BUBL, // Bubble SPR_BUBL, // Bubble
@ -3353,6 +3354,9 @@ typedef enum state
S_SPLISH8, S_SPLISH8,
S_SPLISH9, S_SPLISH9,
// Lava Splish
S_LAVASPLISH,
// added water splash // added water splash
S_SPLASH1, S_SPLASH1,
S_SPLASH2, S_SPLASH2,
@ -4546,6 +4550,7 @@ typedef enum mobj_type
MT_RAIN, // Rain MT_RAIN, // Rain
MT_SNOWFLAKE, // Snowflake MT_SNOWFLAKE, // Snowflake
MT_SPLISH, // Water splish! MT_SPLISH, // Water splish!
MT_LAVASPLISH, // Lava splish!
MT_SMOKE, MT_SMOKE,
MT_SMALLBUBBLE, // small bubble MT_SMALLBUBBLE, // small bubble
MT_MEDIUMBUBBLE, // medium bubble MT_MEDIUMBUBBLE, // medium bubble

View File

@ -12042,7 +12042,7 @@ void A_MineExplode(mobj_t *actor)
#undef dist #undef dist
if (actor->watertop != INT32_MAX) if (actor->watertop != INT32_MAX)
P_SpawnMobj(actor->x, actor->y, actor->watertop, MT_SPLISH); P_SpawnMobj(actor->x, actor->y, actor->watertop, (actor->eflags & MFE_TOUCHLAVA) ? MT_LAVASPLISH : MT_SPLISH);
} }
} }

View File

@ -1778,6 +1778,7 @@ static mobj_t *SearchMarioNode(msecnode_t *node)
case MT_RAIN: case MT_RAIN:
case MT_SNOWFLAKE: case MT_SNOWFLAKE:
case MT_SPLISH: case MT_SPLISH:
case MT_LAVASPLISH:
case MT_SMOKE: case MT_SMOKE:
case MT_SMALLBUBBLE: case MT_SMALLBUBBLE:
case MT_MEDIUMBUBBLE: case MT_MEDIUMBUBBLE:

View File

@ -3318,7 +3318,7 @@ void P_MobjCheckWater(mobj_t *mobj)
mobj->watertop = mobj->waterbottom = mobj->z - 1000*FRACUNIT; mobj->watertop = mobj->waterbottom = mobj->z - 1000*FRACUNIT;
// Reset water state. // Reset water state.
mobj->eflags &= ~(MFE_UNDERWATER|MFE_TOUCHWATER|MFE_GOOWATER); mobj->eflags &= ~(MFE_UNDERWATER|MFE_TOUCHWATER|MFE_GOOWATER|MFE_TOUCHLAVA);
for (rover = sector->ffloors; rover; rover = rover->next) for (rover = sector->ffloors; rover; rover = rover->next)
{ {
@ -3359,16 +3359,18 @@ void P_MobjCheckWater(mobj_t *mobj)
// Just touching the water? // Just touching the water?
if (((mobj->eflags & MFE_VERTICALFLIP) && thingtop - height < bottomheight) if (((mobj->eflags & MFE_VERTICALFLIP) && thingtop - height < bottomheight)
|| (!(mobj->eflags & MFE_VERTICALFLIP) && mobj->z + height > topheight)) || (!(mobj->eflags & MFE_VERTICALFLIP) && mobj->z + height > topheight))
{
mobj->eflags |= MFE_TOUCHWATER; mobj->eflags |= MFE_TOUCHWATER;
if (rover->flags & FF_GOOWATER && !(mobj->flags & MF_NOGRAVITY))
mobj->eflags |= MFE_GOOWATER;
}
// Actually in the water? // Actually in the water?
if (((mobj->eflags & MFE_VERTICALFLIP) && thingtop - (height>>1) > bottomheight) if (((mobj->eflags & MFE_VERTICALFLIP) && thingtop - (height>>1) > bottomheight)
|| (!(mobj->eflags & MFE_VERTICALFLIP) && mobj->z + (height>>1) < topheight)) || (!(mobj->eflags & MFE_VERTICALFLIP) && mobj->z + (height>>1) < topheight))
{
mobj->eflags |= MFE_UNDERWATER; mobj->eflags |= MFE_UNDERWATER;
if (mobj->eflags & (MFE_TOUCHWATER|MFE_TOUCHLAVA))
{
if (GETSECSPECIAL(rover->master->frontsector->special, 1) == 3)
mobj->eflags |= MFE_TOUCHLAVA;
if (rover->flags & FF_GOOWATER && !(mobj->flags & MF_NOGRAVITY)) if (rover->flags & FF_GOOWATER && !(mobj->flags & MF_NOGRAVITY))
mobj->eflags |= MFE_GOOWATER; mobj->eflags |= MFE_GOOWATER;
} }
@ -3446,14 +3448,15 @@ void P_MobjCheckWater(mobj_t *mobj)
{ {
// Spawn a splash // Spawn a splash
mobj_t *splish; mobj_t *splish;
mobjtype_t splishtype = (mobj->eflags & MFE_TOUCHLAVA) ? MT_LAVASPLISH : MT_SPLISH;
if (mobj->eflags & MFE_VERTICALFLIP) if (mobj->eflags & MFE_VERTICALFLIP)
{ {
splish = P_SpawnMobj(mobj->x, mobj->y, mobj->waterbottom-FixedMul(mobjinfo[MT_SPLISH].height, mobj->scale), MT_SPLISH); splish = P_SpawnMobj(mobj->x, mobj->y, mobj->waterbottom-FixedMul(mobjinfo[splishtype].height, mobj->scale), splishtype);
splish->flags2 |= MF2_OBJECTFLIP; splish->flags2 |= MF2_OBJECTFLIP;
splish->eflags |= MFE_VERTICALFLIP; splish->eflags |= MFE_VERTICALFLIP;
} }
else else
splish = P_SpawnMobj(mobj->x, mobj->y, mobj->watertop, MT_SPLISH); splish = P_SpawnMobj(mobj->x, mobj->y, mobj->watertop, splishtype);
splish->destscale = mobj->scale; splish->destscale = mobj->scale;
P_SetScale(splish, mobj->scale); P_SetScale(splish, mobj->scale);
} }
@ -3481,14 +3484,15 @@ void P_MobjCheckWater(mobj_t *mobj)
{ {
// Spawn a splash // Spawn a splash
mobj_t *splish; mobj_t *splish;
mobjtype_t splishtype = (mobj->eflags & MFE_TOUCHLAVA) ? MT_LAVASPLISH : MT_SPLISH;
if (mobj->eflags & MFE_VERTICALFLIP) if (mobj->eflags & MFE_VERTICALFLIP)
{ {
splish = P_SpawnMobj(mobj->x, mobj->y, mobj->waterbottom-FixedMul(mobjinfo[MT_SPLISH].height, mobj->scale), MT_SPLISH); splish = P_SpawnMobj(mobj->x, mobj->y, mobj->waterbottom-FixedMul(mobjinfo[splishtype].height, mobj->scale), splishtype);
splish->flags2 |= MF2_OBJECTFLIP; splish->flags2 |= MF2_OBJECTFLIP;
splish->eflags |= MFE_VERTICALFLIP; splish->eflags |= MFE_VERTICALFLIP;
} }
else else
splish = P_SpawnMobj(mobj->x, mobj->y, mobj->watertop, MT_SPLISH); splish = P_SpawnMobj(mobj->x, mobj->y, mobj->watertop, splishtype);
splish->destscale = mobj->scale; splish->destscale = mobj->scale;
P_SetScale(splish, mobj->scale); P_SetScale(splish, mobj->scale);
} }
@ -3504,6 +3508,8 @@ void P_MobjCheckWater(mobj_t *mobj)
if (mobj->eflags & MFE_GOOWATER || wasingoo) if (mobj->eflags & MFE_GOOWATER || wasingoo)
S_StartSound(mobj, sfx_ghit); S_StartSound(mobj, sfx_ghit);
else if (mobj->eflags & MFE_TOUCHLAVA)
S_StartSound(mobj, sfx_splash);
else else
S_StartSound(mobj, sfx_splish); // And make a sound! S_StartSound(mobj, sfx_splish); // And make a sound!

View File

@ -242,6 +242,8 @@ typedef enum
// Compute and trigger on mobj angle relative to tracer // Compute and trigger on mobj angle relative to tracer
// See Linedef Exec 457 (Track mobj angle to point) // See Linedef Exec 457 (Track mobj angle to point)
MFE_TRACERANGLE = 1<<10, MFE_TRACERANGLE = 1<<10,
// The mobj is touching a lava block
MFE_TOUCHLAVA = 1<<11,
// free: to and including 1<<15 // free: to and including 1<<15
} mobjeflag_t; } mobjeflag_t;

View File

@ -7150,10 +7150,13 @@ static void P_NiGHTSMovement(player_t *player)
&& player->mo->z + player->mo->height - P_GetPlayerHeight(player) <= player->mo->waterbottom && player->mo->z + player->mo->height >= player->mo->waterbottom)) && player->mo->z + player->mo->height - P_GetPlayerHeight(player) <= player->mo->waterbottom && player->mo->z + player->mo->height >= player->mo->waterbottom))
&& player->speed > 9000 && leveltime % (TICRATE/7) == 0 && !player->spectator) && player->speed > 9000 && leveltime % (TICRATE/7) == 0 && !player->spectator)
{ {
mobjtype_t splishtype = (player->mo->eflags & MFE_TOUCHLAVA) ? MT_LAVASPLISH : MT_SPLISH;
mobj_t *water = P_SpawnMobj(player->mo->x, player->mo->y, mobj_t *water = P_SpawnMobj(player->mo->x, player->mo->y,
((player->mo->eflags & MFE_VERTICALFLIP) ? player->mo->waterbottom - FixedMul(mobjinfo[MT_SPLISH].height, player->mo->scale) : player->mo->watertop), MT_SPLISH); ((player->mo->eflags & MFE_VERTICALFLIP) ? player->mo->waterbottom - FixedMul(mobjinfo[splishtype].height, player->mo->scale) : player->mo->watertop), splishtype);
if (player->mo->eflags & MFE_GOOWATER) if (player->mo->eflags & MFE_GOOWATER)
S_StartSound(water, sfx_ghit); S_StartSound(water, sfx_ghit);
else if (player->mo->eflags & MFE_TOUCHLAVA)
S_StartSound(water, sfx_splash);
else else
S_StartSound(water, sfx_wslap); S_StartSound(water, sfx_wslap);
if (player->mo->eflags & MFE_VERTICALFLIP) if (player->mo->eflags & MFE_VERTICALFLIP)
@ -7915,10 +7918,13 @@ static void P_MovePlayer(player_t *player)
&& (player->speed > runspd || (player->pflags & PF_STARTDASH)) && (player->speed > runspd || (player->pflags & PF_STARTDASH))
&& leveltime % (TICRATE/7) == 0 && player->mo->momz == 0 && !(player->pflags & PF_SLIDING) && !player->spectator) && leveltime % (TICRATE/7) == 0 && player->mo->momz == 0 && !(player->pflags & PF_SLIDING) && !player->spectator)
{ {
mobjtype_t splishtype = (player->mo->eflags & MFE_TOUCHLAVA) ? MT_LAVASPLISH : MT_SPLISH;
mobj_t *water = P_SpawnMobj(player->mo->x - P_ReturnThrustX(NULL, player->mo->angle, player->mo->radius), player->mo->y - P_ReturnThrustY(NULL, player->mo->angle, player->mo->radius), mobj_t *water = P_SpawnMobj(player->mo->x - P_ReturnThrustX(NULL, player->mo->angle, player->mo->radius), player->mo->y - P_ReturnThrustY(NULL, player->mo->angle, player->mo->radius),
((player->mo->eflags & MFE_VERTICALFLIP) ? player->mo->waterbottom - FixedMul(mobjinfo[MT_SPLISH].height, player->mo->scale) : player->mo->watertop), MT_SPLISH); ((player->mo->eflags & MFE_VERTICALFLIP) ? player->mo->waterbottom - FixedMul(mobjinfo[splishtype].height, player->mo->scale) : player->mo->watertop), splishtype);
if (player->mo->eflags & MFE_GOOWATER) if (player->mo->eflags & MFE_GOOWATER)
S_StartSound(water, sfx_ghit); S_StartSound(water, sfx_ghit);
else if (player->mo->eflags & MFE_TOUCHLAVA)
S_StartSound(water, sfx_splash);
else else
S_StartSound(water, sfx_wslap); S_StartSound(water, sfx_wslap);
if (player->mo->eflags & MFE_VERTICALFLIP) if (player->mo->eflags & MFE_VERTICALFLIP)