diff --git a/src/objects/ufo.c b/src/objects/ufo.c index f9a44127b..4921c8d52 100644 --- a/src/objects/ufo.c +++ b/src/objects/ufo.c @@ -56,6 +56,9 @@ enum UFO_PIECE_TYPE_STEM, }; +static sfxenum_t hums[16] = {sfx_claw01, sfx_claw02, sfx_claw03, sfx_claw04, sfx_claw05, sfx_claw06, sfx_claw07, sfx_claw08, sfx_claw09, sfx_claw10, sfx_claw11, sfx_claw12, sfx_claw13, sfx_claw14, sfx_claw15, sfx_claw16}; +static int maxhum = sizeof(hums) / sizeof(hums[0]) - 1; + static void UFOMoveTo(mobj_t *ufo, fixed_t destx, fixed_t desty, fixed_t destz) { ufo->momx = destx - ufo->x; @@ -414,12 +417,34 @@ static void UFOEmeraldVFX(mobj_t *ufo) } } +static boolean UFOHumPlaying(mobj_t *ufo) { + INT32 i; + for (i = 0; i <= maxhum; i++) + { + if (S_SoundPlaying(ufo, hums[i])) + return true; + } + return false; +} + +static void UFOUpdateSound(mobj_t *ufo) { + INT32 maxhealth = max(mobjinfo[MT_SPECIAL_UFO].spawnhealth, 1); + INT32 healthlevel = maxhum * ufo->health / maxhealth; + + if (!UFOEmeraldChase(ufo) && !UFOHumPlaying(ufo)) + { + healthlevel = min(max(healthlevel, 1), maxhum); + S_StartSound(ufo, hums[maxhum - healthlevel]); + } +} + void Obj_SpecialUFOThinker(mobj_t *ufo) { UFOMove(ufo); UFOUpdateAngle(ufo); UFOUpdateDistanceToFinish(ufo); UFOUpdateSpeed(ufo); + UFOUpdateSound(ufo); if (UFOEmeraldChase(ufo) == true) { @@ -609,10 +634,16 @@ boolean Obj_SpecialUFODamage(mobj_t *ufo, mobj_t *inflictor, mobj_t *source, UIN P_LinedefExecute(LE_PINCHPHASE, ufo, NULL); + S_StopSound(ufo); + S_StartSound(ufo, sfx_clawk2); + P_StartQuake(64<health -= damage; return true; } diff --git a/src/sounds.c b/src/sounds.c index b18670667..9e387f8fc 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -1152,6 +1152,28 @@ sfxinfo_t S_sfx[NUMSFX] = {"grownd", false, 64, 16, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X8AWAYSOUND {"invind", false, 64, 16, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X8AWAYSOUND + // SRB2Kart - Claw SFX + {"claw01", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw02", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw03", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw04", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw05", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw06", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw07", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw08", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw09", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw10", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw11", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw12", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw13", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw14", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw15", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"claw16", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X2AWAYSOUND + {"clawht", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X4AWAYSOUND + {"clawzm", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X4AWAYSOUND + {"clawk1", false, 64, 16, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X8AWAYSOUND + {"clawk2", false, 64, 16, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SF_X8AWAYSOUND + // SRB2Kart - Engine sounds // Engine class A {"krta00", false, 48, 65, -1, NULL, 0, -1, -1, LUMPERROR, ""}, diff --git a/src/sounds.h b/src/sounds.h index 0c98c8ac2..b6f910c6f 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -1220,6 +1220,28 @@ typedef enum sfx_grownd, sfx_invind, + // Claw SFX + sfx_claw01, + sfx_claw02, + sfx_claw03, + sfx_claw04, + sfx_claw05, + sfx_claw06, + sfx_claw07, + sfx_claw08, + sfx_claw09, + sfx_claw10, + sfx_claw11, + sfx_claw12, + sfx_claw13, + sfx_claw14, + sfx_claw15, + sfx_claw16, + sfx_clawht, + sfx_clawzm, + sfx_clawk1, + sfx_clawk2, + // Next up: UNIQUE ENGINE SOUNDS! Hoooooo boy... // Engine class A - Low Speed, Low Weight sfx_krta00,