play sound when hitting animated floor (#931)

* play sound when hitting animated floor

* play sounds instead of "oof" only

* fix sound group

* add support for "small" splash sounds when merely stepping down into liquid

* fix build

* compat fix

* introduce a flatterrain[] lookup table

* comments
This commit is contained in:
Fabian Greffrath 2023-03-12 14:44:33 +01:00 committed by GitHub
parent 3a97d652d7
commit cba9bd5454
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 94 additions and 3 deletions

View File

@ -657,6 +657,13 @@ struct {
{sfx_itmbk, sfx_getpow}, {sfx_itmbk, sfx_getpow},
{sfx_getpow, sfx_itemup}, {sfx_getpow, sfx_itemup},
{sfx_itemup, sfx_None}, {sfx_itemup, sfx_None},
{sfx_splash, sfx_oof},
{sfx_ploosh, sfx_oof},
{sfx_lvsiz, sfx_oof},
{sfx_splsml, sfx_None},
{sfx_plosml, sfx_None},
{sfx_lavsml, sfx_None},
}; };
// //

View File

@ -523,8 +523,10 @@ floater:
P_DamageMobj(mo, NULL, NULL, mo->health); P_DamageMobj(mo, NULL, NULL, mo->health);
else else
if (mo->player && // killough 5/12/98: exclude voodoo dolls if (mo->player && // killough 5/12/98: exclude voodoo dolls
mo->player->mo == mo && mo->player->mo == mo)
mo->momz < -GRAVITY*8) {
int oof = 0;
if (mo->momz < -GRAVITY*8)
{ {
// Squat down. // Squat down.
// Decrease viewheight for a moment // Decrease viewheight for a moment
@ -532,8 +534,10 @@ floater:
// and utter appropriate sound. // and utter appropriate sound.
mo->player->deltaviewheight = mo->momz>>3; mo->player->deltaviewheight = mo->momz>>3;
S_StartSound (mo, sfx_oof); oof = 1;
} }
P_HitFloor(mo, oof); // [FG] play sound when hitting animated floor
}
mo->momz = 0; mo->momz = 0;
} }

View File

@ -57,11 +57,21 @@
#include "r_sky.h" // R_GetSkyColor #include "r_sky.h" // R_GetSkyColor
#include "m_swap.h" #include "m_swap.h"
#include "i_video.h" // [FG] uncapped #include "i_video.h" // [FG] uncapped
#include "m_misc2.h"
// //
// Animating textures and planes // Animating textures and planes
// There is another anim_t used in wi_stuff, unrelated. // There is another anim_t used in wi_stuff, unrelated.
// //
typedef enum
{
terrain_solid,
terrain_water,
terrain_slime,
terrain_lava
} terrain_t;
typedef struct typedef struct
{ {
boolean istexture; boolean istexture;
@ -159,6 +169,33 @@ void P_InitPicAnims (void)
lastanim->picnum = R_FlatNumForName (animdefs[i].endname); lastanim->picnum = R_FlatNumForName (animdefs[i].endname);
lastanim->basepic = R_FlatNumForName (animdefs[i].startname); lastanim->basepic = R_FlatNumForName (animdefs[i].startname);
if (lastanim->picnum >= lastanim->basepic)
{
char *startname;
terrain_t terrain;
int j;
startname = M_StringDuplicate(animdefs[i].startname);
M_ForceUppercase(startname);
// [FG] play sound when hitting animated floor
if (strstr(startname, "WATER") || strstr(startname, "BLOOD"))
terrain = terrain_water;
else if (strstr(startname, "NUKAGE") || strstr(startname, "SLIME"))
terrain = terrain_slime;
else if (strstr(startname, "LAVA"))
terrain = terrain_lava;
else
terrain = terrain_solid;
free(startname);
for (j = lastanim->basepic; j <= lastanim->picnum; j++)
{
flatterrain[j] = terrain;
}
}
} }
lastanim->istexture = animdefs[i].istexture; lastanim->istexture = animdefs[i].istexture;
@ -179,6 +216,22 @@ void P_InitPicAnims (void)
Z_ChangeTag (animdefs,PU_CACHE); //jff 3/23/98 allow table to be freed Z_ChangeTag (animdefs,PU_CACHE); //jff 3/23/98 allow table to be freed
} }
// [FG] play sound when hitting animated floor
void P_HitFloor (mobj_t *mo, int oof)
{
const short floorpic = mo->subsector->sector->floorpic;
terrain_t terrain = flatterrain[floorpic];
int hitsound[][2] = {
{sfx_None, sfx_oof}, // terrain_solid
{sfx_splsml, sfx_splash}, // terrain_water
{sfx_plosml, sfx_ploosh}, // terrain_slime
{sfx_lavsml, sfx_lvsiz} // terrain_lava
};
S_StartSound(mo, hitsound[terrain][oof]);
}
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
// //
// Linedef and Sector Special Implementation Utility Functions // Linedef and Sector Special Implementation Utility Functions

View File

@ -1009,6 +1009,8 @@ int P_ActivateInStasisCeiling(line_t *line);
mobj_t *P_GetPushThing(int); // phares 3/23/98 mobj_t *P_GetPushThing(int); // phares 3/23/98
void P_HitFloor (mobj_t *mo, int oof); // [FG] play sound when hitting animated floor
#endif #endif
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------

View File

@ -122,6 +122,7 @@ unsigned **texturecolumnofs2;
byte **texturecomposite; byte **texturecomposite;
byte **texturecomposite2; byte **texturecomposite2;
int *flattranslation; // for global animation int *flattranslation; // for global animation
int *flatterrain;
int *texturetranslation; int *texturetranslation;
const byte **texturebrightmap; // [crispy] brightmaps const byte **texturebrightmap; // [crispy] brightmaps
@ -780,8 +781,14 @@ void R_InitFlats(void)
flattranslation = flattranslation =
Z_Malloc((numflats+1)*sizeof(*flattranslation), PU_STATIC, 0); Z_Malloc((numflats+1)*sizeof(*flattranslation), PU_STATIC, 0);
flatterrain =
Z_Malloc((numflats+1)*sizeof(*flatterrain), PU_STATIC, 0);
for (i=0 ; i<numflats ; i++) for (i=0 ; i<numflats ; i++)
{
flattranslation[i] = i; flattranslation[i] = i;
flatterrain[i] = 0; // terrain_solid
}
} }
// //

View File

@ -62,6 +62,8 @@ extern int firstflat;
extern int *flattranslation; extern int *flattranslation;
extern int *texturetranslation; extern int *texturetranslation;
extern int *flatterrain;
// Sprite.... // Sprite....
extern int firstspritelump; extern int firstspritelump;
extern int lastspritelump; extern int lastspritelump;

View File

@ -262,6 +262,14 @@ sfxinfo_t original_S_sfx[NUMSFX] = {
// [crispy] play DSSECRET if available // [crispy] play DSSECRET if available
SOUND("secret", sg_none, 100), SOUND("secret", sg_none, 100),
// [FG] play sound when hitting animated floor
SOUND("splash", sg_oof, 96),
SOUND("ploosh", sg_oof, 96),
SOUND("lvsiz", sg_oof, 96),
SOUND("splsml", sg_oof, 96),
SOUND("plosml", sg_oof, 96),
SOUND("lavsml", sg_oof, 96),
[500] = SOUND("fre000", sg_none, 127), [500] = SOUND("fre000", sg_none, 127),
[501] = SOUND("fre001", sg_none, 127), [501] = SOUND("fre001", sg_none, 127),
[502] = SOUND("fre002", sg_none, 127), [502] = SOUND("fre002", sg_none, 127),

View File

@ -317,6 +317,14 @@ typedef enum {
// [crispy] play DSSECRET if available // [crispy] play DSSECRET if available
sfx_secret, sfx_secret,
// [FG] play sound when hitting animated floor
sfx_splash,
sfx_ploosh,
sfx_lvsiz,
sfx_splsml,
sfx_plosml,
sfx_lavsml,
sfx_fre000 = 500, sfx_fre000 = 500,
sfx_fre001, sfx_fre001,
sfx_fre002, sfx_fre002,