diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm index 45390b5ff3c..555dd98c786 100644 --- a/code/__DEFINES/achievements.dm +++ b/code/__DEFINES/achievements.dm @@ -11,6 +11,12 @@ ///the priority of the achievements score. NO achievement should have a priority equal or lower than this. #define AWARD_PRIORITY_LAST 0 +/// preferences for the sound played when unlocking an achievement +#define CHEEVO_SOUND_TADA "Tada Fanfare" +#define CHEEVO_SOUND_JINGLE "Beeps Jingle" +#define CHEEVO_SOUND_PING "Success Ping" +#define CHEEVO_SOUND_OFF "Disabled" + //Misc Medal hub IDs #define MEDAL_METEOR "Your Life Before Your Eyes" #define MEDAL_PULSE "Jackpot" diff --git a/code/_globalvars/lists/achievements.dm b/code/_globalvars/lists/achievements.dm index 2963dfb4139..283931f9984 100644 --- a/code/_globalvars/lists/achievements.dm +++ b/code/_globalvars/lists/achievements.dm @@ -1,3 +1,9 @@ GLOBAL_LIST_EMPTY(commendations) ///A list of the current achievement categories supported by the UI and checked by the achievement unit test GLOBAL_LIST_INIT(achievement_categories, list("Bosses", "Jobs", "Skills", "Misc", "Mafia", "Scores")) +///A list of sounds that can be played when unlocking an achievement, set in the preferences. +GLOBAL_LIST_INIT(achievement_sounds, list( + CHEEVO_SOUND_PING = sound('sound/effects/glockenspiel_ping.ogg', volume = 70), + CHEEVO_SOUND_JINGLE = sound('sound/effects/beeps_jingle.ogg', volume = 70), + CHEEVO_SOUND_TADA = sound('sound/effects/tada_fanfare.ogg', volume = 30), +)) diff --git a/code/datums/achievements/_awards.dm b/code/datums/achievements/_awards.dm index b7500d54d45..7a7701e0cf1 100644 --- a/code/datums/achievements/_awards.dm +++ b/code/datums/achievements/_awards.dm @@ -110,6 +110,10 @@ . = ..() to_chat(user, span_greenannounce("Achievement unlocked: [name]!")) user.client.give_award(/datum/award/score/achievements_score, user, 1) + var/sound/sound_to_send = LAZYACCESS(GLOB.achievement_sounds, user.client.prefs.read_preference(/datum/preference/choiced/sound_achievement)) + if(sound_to_send) + SEND_SOUND(user, sound_to_send) + times_achieved++ if(SSachievements.most_unlocked_achievement?.times_achieved < times_achieved) SSachievements.most_unlocked_achievement = src diff --git a/code/modules/client/preferences/sounds.dm b/code/modules/client/preferences/sounds.dm index 21a549f522b..f56430b5363 100644 --- a/code/modules/client/preferences/sounds.dm +++ b/code/modules/client/preferences/sounds.dm @@ -50,6 +50,22 @@ /datum/preference/numeric/sound_tts_volume/create_default_value() return maximum +/datum/preference/choiced/sound_achievement + category = PREFERENCE_CATEGORY_GAME_PREFERENCES + savefile_key = "sound_achievement" + savefile_identifier = PREFERENCE_PLAYER + +/datum/preference/choiced/sound_achievement/init_possible_values() + return list(CHEEVO_SOUND_PING, CHEEVO_SOUND_JINGLE, CHEEVO_SOUND_TADA, CHEEVO_SOUND_OFF) + +/datum/preference/choiced/sound_achievement/create_default_value() + return CHEEVO_SOUND_PING + +/datum/preference/choiced/sound_achievement/apply_to_client_updated(client/client, value) + var/sound/sound_to_send = LAZYACCESS(GLOB.achievement_sounds, value) + if(sound_to_send) + SEND_SOUND(client.mob, sound_to_send) + /// Controls hearing dance machines /datum/preference/toggle/sound_jukebox category = PREFERENCE_CATEGORY_GAME_PREFERENCES diff --git a/sound/effects/beeps_jingle.ogg b/sound/effects/beeps_jingle.ogg new file mode 100644 index 00000000000..0d4b647f88d Binary files /dev/null and b/sound/effects/beeps_jingle.ogg differ diff --git a/sound/effects/glockenspiel_ping.ogg b/sound/effects/glockenspiel_ping.ogg new file mode 100644 index 00000000000..f2530007129 Binary files /dev/null and b/sound/effects/glockenspiel_ping.ogg differ diff --git a/sound/effects/tada_fanfare.ogg b/sound/effects/tada_fanfare.ogg new file mode 100644 index 00000000000..055635e9dec Binary files /dev/null and b/sound/effects/tada_fanfare.ogg differ diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx index d4bb7a94718..fb54f8d9447 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx @@ -83,3 +83,13 @@ export const sound_elevator: FeatureToggle = { category: 'SOUND', component: CheckboxInput, }; + +export const sound_achievement: FeatureChoiced = { + name: 'Achievement unlock sound', + category: 'SOUND', + description: multiline` + The sound that's played when unlocking an achievement. + If disabled, no sound will be played. + `, + component: FeatureDropdownInput, +};