diff --git a/GainStation13/code/game/sound.dm b/GainStation13/code/game/sound.dm index baa05d75..6c8cb7bb 100644 --- a/GainStation13/code/game/sound.dm +++ b/GainStation13/code/game/sound.dm @@ -1,38 +1,37 @@ -/proc/gs13_get_sfx(soundin) - if(istext(soundin)) - switch(soundin) - if("belch") - soundin = pick( 'GainStation13/sound/voice/belch1.ogg', - 'GainStation13/sound/voice/belch2.ogg', - 'GainStation13/sound/voice/belch3.ogg', - 'GainStation13/sound/voice/belch4.ogg', - 'GainStation13/sound/voice/belch5.ogg', - 'GainStation13/sound/voice/belch6.ogg', - 'GainStation13/sound/voice/belch7.ogg', - 'GainStation13/sound/voice/belch8.ogg', - 'GainStation13/sound/voice/belch9.ogg', - 'GainStation13/sound/voice/belch10.ogg', - 'GainStation13/sound/voice/belch11.ogg') - if("brap") - soundin = pick( 'GainStation13/sound/voice/brap1.ogg', - 'GainStation13/sound/voice/brap2.ogg', - 'GainStation13/sound/voice/brap3.ogg', - 'GainStation13/sound/voice/brap4.ogg', - 'GainStation13/sound/voice/brap5.ogg', - 'GainStation13/sound/voice/brap6.ogg', - 'GainStation13/sound/voice/brap7.ogg', - 'GainStation13/sound/voice/brap8.ogg') - if("burp") - soundin = pick( 'GainStation13/sound/voice/burp1.ogg') - if("burunyu") - soundin = pick( 'GainStation13/sound/voice/funnycat.ogg') - if("fart") - soundin = pick( 'GainStation13/sound/voice/fart1.ogg', - 'GainStation13/sound/voice/fart2.ogg', - 'GainStation13/sound/voice/fart3.ogg', - 'GainStation13/sound/voice/fart4.ogg') - if("gurgle") - soundin = pick( 'GainStation13/sound/voice/gurgle1.ogg', - 'GainStation13/sound/voice/gurgle2.ogg', - 'GainStation13/sound/voice/gurgle3.ogg') - return soundin +/proc/playsound_prefed(atom/source, soundin, pref, vol as num, vary, extrarange as num, falloff, frequency = null, channel = 0, pressure_affected = TRUE, ignore_walls = TRUE, soundenvwet = -10000, soundenvdry = 0) + if(isarea(source)) + throw EXCEPTION("playsound(): source is an area") + return + + var/turf/turf_source = get_turf(source) + + if (!turf_source) + return + + //allocate a channel if necessary now so its the same for everyone + channel = channel || open_sound_channel() + + // Looping through the player list has the added bonus of working for mobs inside containers + var/sound/S = sound(get_sfx(soundin)) + var/maxdistance = (world.view + extrarange) + var/z = turf_source.z + var/list/listeners = SSmobs.clients_by_zlevel[z] + if(!ignore_walls) //these sounds don't carry through walls + listeners = listeners & hearers(maxdistance,turf_source) + + for(var/P in listeners) + var/mob/M = P + if(!M.client) + continue + if((!M.client?.prefs.cit_toggles & pref)) + continue + if(get_dist(M, turf_source) <= maxdistance) + M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, channel, pressure_affected, S, soundenvwet, soundenvdry) + for(var/P in SSmobs.dead_players_by_zlevel[z]) + var/mob/M = P + if(!M.client) + continue + if((!M.client?.prefs.cit_toggles & pref)) + continue + if(get_dist(M, turf_source) <= maxdistance) + M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, channel, pressure_affected, S, soundenvwet, soundenvdry) diff --git a/GainStation13/code/modules/mob/living/emote.dm b/GainStation13/code/modules/mob/living/emote.dm index 0b4bc44f..7bf093de 100644 --- a/GainStation13/code/modules/mob/living/emote.dm +++ b/GainStation13/code/modules/mob/living/emote.dm @@ -1,136 +1,99 @@ -/datum/emote/living/proc/make_noise(var/mob/living/user, noise_name, pref_toggle) - if(!ishuman(user)) - return FALSE - - var/turf/source = get_turf(user) - var/sound/noise = sound(gs13_get_sfx(noise_name)) - for(var/mob/living/M in get_hearers_in_view(3, source)) - if ((pref_toggle == 0) || (M.client && M.client?.prefs?.cit_toggles & pref_toggle)) - M.playsound_local(source, noise_name, 50, 1, S = noise) - -/datum/emote/living/proc/reduce_fullness(var/mob/living/user, fullness_amount) // fullness_amount should be between 5 and 20 for balance and below 80 for functionality - if(!ishuman(user)) - return FALSE - - var/mob/living/N = user - if(N.fullness >= FULLNESS_LEVEL_BLOATED && N.fullness_reducion_timer + FULLNESS_REDUCTION_COOLDOWN < world.time) - N.fullness -= fullness_amount - if(fullness_amount <= 5) - to_chat(N, "You felt that make some space") - if(fullness_amount > 5) - to_chat(N, "You felt that make a lot of space") - -/datum/emote/living/belch - key = "belch" - key_third_person = "belches loudly" - message = "belches" +/datum/emote/living/gurgle + key = "gurgle" + key_third_person = "gurgles" + message = "'s belly gurgles" emote_type = EMOTE_AUDIBLE - //god hates me for this -Metha + sound = 'GainStation13/sound/voice/gurgle1.ogg' -/datum/emote/living/belch/run_emote(mob/living/user, params) +/datum/emote/living/gurgle/get_sound() + return pick('GainStation13/sound/voice/gurgle1.ogg', + 'GainStation13/sound/voice/gurgle2.ogg', + 'GainStation13/sound/voice/gurgle3.ogg') + +/datum/emote/living/gurgle/run_emote(mob/living/user, params) if(!ishuman(user)) - return FALSE - - make_noise(user, "belch", BURPING_NOISES) + return FALSE - . = ..() - reduce_fullness(user, rand(6,12)) + playsound(user, "gurgle") -/datum/emote/living/brap - key = "brap" - key_third_person = "braps" - message = " " - emote_type = EMOTE_AUDIBLE - -/datum/emote/living/brap/select_message_type(var/mob/living/user) - return pick("farts loudly!", "cuts a fat one!", "rips absolute ass!") - -/datum/emote/living/brap/run_emote(var/mob/living/user, params) - if(!ishuman(user)) - return FALSE - - make_noise(user, "brap", FARTING_NOISES) - var/obj/item/storage/book/bible/b = locate(/obj/item/storage/book/bible) in get_turf(user) //Biblefart - if(b) //Devine Retribution - user.visible_message("\The [user] farts on \the [b], causing a violent, otherworldly ripple to echo outwards before they explode in a gorey mess of divine retribution!", - "You feel a deep sense of dread as you release pressure from your rear over \the [b], immediately realizing your mistake as Divine Retribution rends your form into a gorey mess.") - user.emote("scream") - message_admins("[ADMIN_LOOKUPFLW(user)] farted on a bible at [ADMIN_VERBOSEJMP(user)] and was gibbed.") - log_game("[key_name(user)] farted on a bible at [AREACOORD(user)] and was gibbed") - user.gib() - return ..() //Gassy is dead, no fullness to reduce - - . = ..() - reduce_fullness(user, rand(6,12)) + . = ..() /datum/emote/living/burp key = "burp" key_third_person = "burps" message = "burps" emote_type = EMOTE_AUDIBLE + var/reduction_min = 4 + var/reduction_max = 8 + var/noise_type = "burp" + var/noise_pref = BURPING_NOISES /datum/emote/living/burp/run_emote(mob/living/user, params) - if(!ishuman(user)) + . = ..() + if(!.) return FALSE - make_noise(user, "burp", BURPING_NOISES) + playsound_prefed(user, noise_type, noise_pref, 100, TRUE, -7) - . = ..() - reduce_fullness(user, rand(4,8)) + user.reduce_fullness(rand(reduction_min,reduction_max)) -/datum/emote/living/fart +/datum/emote/living/burp/fart //Butt burp. key = "fart" key_third_person = "farts" message = "farts" - emote_type = EMOTE_AUDIBLE //god hates me for this -Metha + noise_type = "fart" + noise_pref = FARTING_NOISES -/datum/emote/living/fart/run_emote(mob/living/user, params) - if(!ishuman(user)) - return FALSE - - make_noise(user, "fart", FARTING_NOISES) - var/obj/item/storage/book/bible/b = locate(/obj/item/storage/book/bible) in get_turf(user) //Biblefart - if(b) //Devine Retribution - user.visible_message("\The [user] farts on \the [b], causing a violent, otherworldly ripple to echo outwards before they explode in a gorey mess of divine retribution!", - "You feel a deep sense of dread as you release pressure from your rear over \the [b], immediately realizing your mistake as Divine Retribution rends your form into a gorey mess.") - user.emote("scream") - message_admins("[ADMIN_LOOKUPFLW(user)] farted on a bible at [ADMIN_VERBOSEJMP(user)] and was gibbed.") - log_game("[key_name(user)] farted on a bible at [AREACOORD(user)] and was gibbed") - user.gib() - return ..() //Gassy is dead, no fullness to reduce - - . = ..() - reduce_fullness(user, rand(4,8)) - -/datum/emote/living/gurgle - key = "gurgle" - key_third_person = "gurgles" - message = "'s belly gurgles" - emote_type = EMOTE_AUDIBLE - -/datum/emote/living/gurgle/run_emote(mob/living/user, params) - if(!ishuman(user)) +/datum/emote/living/burp/fart/run_emote(mob/living/user, params) + . = ..() + if(!.) return FALSE - make_noise(user, "gurgle", 0) + var/obj/item/storage/book/bible/b = locate(/obj/item/storage/book/bible) in get_turf(user) //Biblefart + if(b)//Devine Retribution + var/mob/living/heretic = user //Heresy. + heretic.visible_message( + "\The [heretic] farts on \the [b], causing a violent, otherworldly ripple to echo \ + outwards before they explode in a gorey mess of divine retribution!", + "You feel a deep sense of dread as you release pressure from your rear over \the [b], \ + immediately realizing your mistake as Divine Retribution rends your form into a gorey mess.") + heretic.emote("scream") + message_admins("[ADMIN_LOOKUPFLW(heretic)] farted on a bible at [ADMIN_VERBOSEJMP(heretic)] and was gibbed.") + log_game("[key_name(heretic)] farted on a bible at [AREACOORD(heretic)] and was gibbed") + heretic.gib() + return //Gassy is dead - . = ..() +/datum/emote/living/burp/belch + key = "belch" + key_third_person = "belches loudly" + message = "belches" + //god hates me for this -Metha + reduction_min = 6 + reduction_max = 12 +/datum/emote/living/burp/fart/brap + key = "brap" + key_third_person = "braps" + message = "" + reduction_min = 6 + reduction_max = 12 + +/datum/emote/living/burp/fart/brap/select_message_type(var/mob/living/user) + return pick("farts loudly!", "cuts a fat one!", "rips absolute ass!") + +/datum/emote/living/burp/fart/goon // Fart but it's funny ! + key = "goonfart" + key_third_person = "goonfarts" + noise_type = 'goon/sound/voice/farts/fart4.ogg' + //Shhh... It's a secret! Don't tell or I'll steal your legs /datum/emote/living/burunyu key = "burunyu" key_third_person = "burunyues" message = "emits a strange feline sound" emote_type = EMOTE_AUDIBLE - -/datum/emote/living/burunyu/run_emote(mob/living/user, params) - if(!ishuman(user)) - return FALSE - - make_noise(user, "burunyu", 0) - - . = ..() + sound = 'GainStation13/sound/voice/funnycat.ogg' /datum/emote/living/bellyrub key = "bellyrub" @@ -139,7 +102,8 @@ emote_type = EMOTE_VISIBLE /datum/emote/living/bellyrub/run_emote(mob/living/user, params) - if(!ishuman(user)) - return FALSE . = ..() - reduce_fullness(user, rand(4,16)) + if(!.) + return FALSE + + user.reduce_fullness(rand(4,16), FALSE) diff --git a/GainStation13/code/modules/mob/living/fullness.dm b/GainStation13/code/modules/mob/living/fullness.dm new file mode 100644 index 00000000..a21a7304 --- /dev/null +++ b/GainStation13/code/modules/mob/living/fullness.dm @@ -0,0 +1,16 @@ +/mob/living/proc/reduce_fullness(amount, notify = TRUE) // fullness_amount should be between 5 and 20 for balance and below 80 for functionality + if(!ishuman(src)) + return + + if(fullness >= FULLNESS_LEVEL_BLOATED && fullness_reducion_timer + FULLNESS_REDUCTION_COOLDOWN < world.time) + + fullness -= amount // Remove Fullness + + if(!notify) + return + + if(amount <= 5) + to_chat(src, "You felt that make some space") + if(amount > 5) + to_chat(src, "You felt that make a lot of space") + diff --git a/code/game/sound.dm b/code/game/sound.dm index 11e02610..13edfcef 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -227,4 +227,28 @@ if("slosh") soundin = pick('sound/effects/slosh1.ogg', 'sound/effects/slosh2.ogg') //END OF CIT CHANGES + // GS13 Start - Gainstation sounds + if("belch") + soundin = pick( 'GainStation13/sound/voice/belch1.ogg', 'GainStation13/sound/voice/belch2.ogg', + 'GainStation13/sound/voice/belch3.ogg', 'GainStation13/sound/voice/belch4.ogg', + 'GainStation13/sound/voice/belch5.ogg', 'GainStation13/sound/voice/belch6.ogg', + 'GainStation13/sound/voice/belch7.ogg', 'GainStation13/sound/voice/belch8.ogg', + 'GainStation13/sound/voice/belch9.ogg', 'GainStation13/sound/voice/belch10.ogg', + 'GainStation13/sound/voice/belch11.ogg') + if("brap") + soundin = pick( 'GainStation13/sound/voice/brap1.ogg', 'GainStation13/sound/voice/brap2.ogg', + 'GainStation13/sound/voice/brap3.ogg', 'GainStation13/sound/voice/brap4.ogg', + 'GainStation13/sound/voice/brap5.ogg', 'GainStation13/sound/voice/brap6.ogg', + 'GainStation13/sound/voice/brap7.ogg', 'GainStation13/sound/voice/brap8.ogg') + if("burp") + soundin = pick( 'GainStation13/sound/voice/burp1.ogg') + if("burunyu") + soundin = pick( 'GainStation13/sound/voice/funnycat.ogg') + if("fart") + soundin = pick( 'GainStation13/sound/voice/fart1.ogg', 'GainStation13/sound/voice/fart2.ogg', + 'GainStation13/sound/voice/fart3.ogg', 'GainStation13/sound/voice/fart4.ogg') + if("gurgle") + soundin = pick( 'GainStation13/sound/voice/gurgle1.ogg', 'GainStation13/sound/voice/gurgle2.ogg', + 'GainStation13/sound/voice/gurgle3.ogg') + // GS13 end return soundin diff --git a/goon/sound/voice/farts/fart4.ogg b/goon/sound/voice/farts/fart4.ogg new file mode 100644 index 00000000..429b9ec9 Binary files /dev/null and b/goon/sound/voice/farts/fart4.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 369210fa..bb5a0379 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3127,6 +3127,7 @@ #include "GainStation13\code\modules\mob\living\emote.dm" #include "GainStation13\code\modules\mob\living\emote_modular.dm" #include "GainStation13\code\modules\mob\living\emote_ported.dm" +#include "GainStation13\code\modules\mob\living\fullness.dm" #include "GainStation13\code\modules\mob\living\nutribot.dm" #include "GainStation13\code\modules\mob\living\vore\eating\living_vr.dm" #include "GainStation13\code\modules\mob\living\vore\eating\trasheat_lists.dm"