Update 1.0

Refactors lists into #defines, promptly cries. This part is agony and still worked on.

Simplemobs can play injury sounds as well, selecting a sound based off a global list.
Pain emotes occur based on updatehealth(), with respect to silicons and such.
Pain emotes also occur at a 60% chance on traumatic shock.
Simplemobs can also play death sounds based off the species sounds lists.
Add Mouse, Robotic, Spider, None as options to the voice list.
Fixes runtime/bug with Silicons (borgs) trying to get species var.
This commit is contained in:
Rykka Stormheart
2023-02-28 16:02:13 -08:00
parent 6a837244da
commit 2940d67c4d
53 changed files with 720 additions and 171 deletions

View File

@@ -310,37 +310,70 @@ var/list/goon_speak_roach_sound = list('sound/talksounds/goon/roach.ogg', 'sound
var/list/goon_speak_skelly_sound = list('sound/talksounds/goon/skelly.ogg', 'sound/talksounds/goon/skelly_ask.ogg', 'sound/talksounds/goon/skelly_exclaim.ogg')
// CHOMPEdit Start: Species Pain/Scream/Death sounds. This is probably inefficient, but I'm sure someone will yell at me or just do it better later:tm:
var/list/canine_scream_sounds = list('modular_chomp/sound/voice/scream/canine/wolf_scream.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream2.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream3.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream4.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream5.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream6.ogg')
var/list/canine_pain_sounds = list('modular_chomp/sound/voice/pain/canine/wolf_pain.ogg', 'modular_chomp/sound/voice/pain/canine/wolf_pain2.ogg', 'modular_chomp/sound/voice/pain/canine/wolf_pain3.ogg', 'modular_chomp/sound/voice/pain/canine/wolf_pain4.ogg')
var/list/canine_gasp_sounds = list('modular_chomp/sound/voice/gasp/canine/wolf_gasp.ogg')
var/list/canine_death_sounds = list('modular_chomp/sound/voice/death/canine/wolf_death1.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death2.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death3.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death4.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death5.ogg')
var/list/feline_scream_sounds = list('modular_chomp/sound/voice/scream/feline/feline_scream.ogg')
var/list/feline_pain_sounds = list('modular_chomp/sound/voice/pain/feline/feline_pain.ogg')
var/list/feline_gasp_sounds = list('modular_chomp/sound/voice/gasp/feline/feline_gasp.ogg')
var/list/feline_death_sounds = list('modular_chomp/sound/voice/death/feline/feline_death.ogg')
var/list/cervine_scream_sounds = list('modular_chomp/sound/voice/scream/cervine/cervine_scream.ogg')
// var/list/cervine_pain_sounds = list() // Doesn't exist
// var/list/cervine_gasp_sounds = list() // Doesn't exist
var/list/cervine_death_sounds = list('modular_chomp/sound/voice/death/cervine/cervine_death.ogg')
// var/list/avian_scream_sounds = list() // TBD
// var/list/avian_pain_sounds = list() // TBD
// var/list/avian_death_sounds = list() // TBD
var/list/male_generic_scream_sounds = list('modular_chomp/sound/voice/scream/generic/male/male_scream_1.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_2.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_3.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_4.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_5.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_6.ogg')
var/list/male_generic_pain_sounds = list('modular_chomp/sound/voice/pain/generic/male/male_pain_1.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_2.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_3.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_4.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_5.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_6.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_7.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_8.ogg')
var/list/male_generic_gasp_sounds = list('modular_chomp/sound/voice/gasp/generic/male/male_gasp1.ogg', 'modular_chomp/sound/voice/gasp/generic/male/male_gasp2.ogg', 'modular_chomp/sound/voice/gasp/generic/male/male_gasp3.ogg')
var/list/male_generic_death_sounds = list('modular_chomp/sound/voice/death/generic/male/male_death_1.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_2.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_3.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_4.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_5.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_6.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_7.ogg')
var/list/female_generic_scream_sounds = list('modular_chomp/sound/voice/scream/generic/female/female_scream_1.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_2.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_3.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_4.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_5.ogg')
var/list/female_generic_pain_sounds = list('modular_chomp/sound/voice/pain/generic/female/female_pain_1.ogg', 'modular_chomp/sound/voice/pain/generic/female/female_pain_2.ogg', 'modular_chomp/sound/voice/pain/generic/female/female_pain_3.ogg')
var/list/female_generic_gasp_sounds = list('modular_chomp/sound/voice/gasp/generic/female/female_gasp1.ogg', 'modular_chomp/sound/voice/gasp/generic/female/female_gasp2.ogg')
var/list/female_generic_death_sounds = list('modular_chomp/sound/voice/death/generic/female/female_death_1.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_2.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_3.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_4.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_5.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_6.ogg')
#define canine_sounds list("scream" = list('modular_chomp/sound/voice/scream/canine/wolf_scream.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream2.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream3.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream4.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream5.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream6.ogg'), "pain" = list('modular_chomp/sound/voice/pain/canine/wolf_pain.ogg', 'modular_chomp/sound/voice/pain/canine/wolf_pain2.ogg', 'modular_chomp/sound/voice/pain/canine/wolf_pain3.ogg', 'modular_chomp/sound/voice/pain/canine/wolf_pain4.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/canine/wolf_gasp.ogg'), "death" = list('modular_chomp/sound/voice/death/canine/wolf_death1.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death2.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death3.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death4.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death5.ogg'))
#define feline_sounds list("scream" = list('modular_chomp/sound/voice/scream/feline/feline_scream.ogg'), "pain" = list('modular_chomp/sound/voice/pain/feline/feline_pain.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/feline/feline_gasp.ogg'), "death" = list('modular_chomp/sound/voice/death/feline/feline_death.ogg'))
#define cervine_sounds list("scream" = list('modular_chomp/sound/voice/scream/cervine/cervine_scream.ogg'), "pain" = null, "gasp" = null, "death" = list('modular_chomp/sound/voice/death/cervine/cervine_death.ogg'))
#define robot_sounds list("scream" = list('modular_chomp/sound/voice/scream_silicon.ogg', 'modular_chomp/sound/voice/android_scream.ogg', 'modular_chomp/sound/voice/scream/robotic/robot_scream1.ogg', 'modular_chomp/sound/voice/scream/robotic/robot_scream2.ogg', 'modular_chomp/sound/voice/scream/robotic/robot_scream3.ogg'), "pain" = list('modular_chomp/sound/voice/pain/robotic/robot_pain1.ogg', 'modular_chomp/sound/voice/pain/robotic/robot_pain2.ogg', 'modular_chomp/sound/voice/pain/robotic/robot_pain3.ogg'), "gasp" = null, "death" = list('modular_chomp/sound/voice/borg_deathsound.ogg'))
#define male_generic_sounds list("scream" = list('modular_chomp/sound/voice/scream/generic/male/male_scream_1.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_2.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_3.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_4.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_5.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_6.ogg'), "pain" = list('modular_chomp/sound/voice/pain/generic/male/male_pain_1.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_2.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_3.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_4.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_5.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_6.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_7.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_8.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/generic/male/male_gasp1.ogg', 'modular_chomp/sound/voice/gasp/generic/male/male_gasp2.ogg', 'modular_chomp/sound/voice/gasp/generic/male/male_gasp3.ogg'), "death" = list('modular_chomp/sound/voice/death/generic/male/male_death_1.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_2.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_3.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_4.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_5.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_6.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_7.ogg'))
#define female_generic_sounds list("scream" = list('modular_chomp/sound/voice/scream/generic/female/female_scream_1.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_2.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_3.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_4.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_5.ogg'), "pain" = list('modular_chomp/sound/voice/pain/generic/female/female_pain_1.ogg', 'modular_chomp/sound/voice/pain/generic/female/female_pain_2.ogg', 'modular_chomp/sound/voice/pain/generic/female/female_pain_3.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/generic/female/female_gasp1.ogg', 'modular_chomp/sound/voice/gasp/generic/female/female_gasp2.ogg'), "death" = list('modular_chomp/sound/voice/death/generic/female/female_death_1.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_2.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_3.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_4.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_5.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_6.ogg'))
#define spider_sounds list("scream" = list('sound/voice/spiderchitter.ogg'), "pain" = null, "gasp" = null, "death" = list('modular_chomp/sound/voice/death/spider/spider_death.ogg'))
#define mouse_sounds list("scream" = list('sound/effects/mouse_squeak_loud.ogg'), "pain" = list('sound/effects/mouse_squeak.ogg'), "gasp" = list('sound/effects/mouse_squeak.ogg'), "death" = list('sound/effects/mouse_squeak_loud.ogg'))
#define no_sounds list("scream" = null, "pain" = null, "gasp" = null, "death" = null)
#define use_default list("scream" = null, "pain" = null, "gasp" = null, "death" = null)
/*
var/list/vulpine_scream_sounds = list()
var/list/vulpine_pain_sounds = list()
var/list/vulpine_gasp_sounds = list()
var/list/vulpine_death_sounds = list()
var/list/lizard_scream_sounds = list('sound/effects/mob_effects/una_scream1.ogg','sound/effects/mob_effects/una_scream2.ogg')
var/list/lizard_pain_sounds = list()
var/list/lizard_gasp_sounds = list()
var/list/lizard_death_sounds = list()
* TBD Sound Defines below
*/
/*
#define avian_sounds list(
"scream" = list(),
"pain" = list(),
"gasp" = list(),
"death" = list()
)
#define slime_sounds list(
"scream" = list(),
"pain" = list(),
"gasp" = list(),
"death" = list()
)
#define vulpine_sounds list(
"scream" = list(),
"pain" = list(),
"gasp" = list(),
"death" = list()
)
#define lizard_sounds list(
"scream" = list(),
"pain" = list(),
"gasp" = list(),
"death" = list()
)
*/
var/list/species_sounds = list()
var/list/species_sound_map = list(
"Canine" = canine_sounds,
"Feline" = feline_sounds,
"Cervine" = cervine_sounds,
"Robotic" = robot_sounds,
"Human Male" = male_generic_sounds,
"Human Female" = female_generic_sounds,
"Spider" = spider_sounds,
"Mouse" = mouse_sounds,
"None" = no_sounds,
"Unset" = use_default
)
/hook/startup/proc/Init_species_sounds() // The entries we're checking over MUST have unique keys.
for(var/i in species_sound_map)
species_sounds |= species_sound_map[i]
return 1
/proc/get_species_sound(var/sounds)
/*
if(user.pref.species_sounds == "Unset")
return species_sound_map[coalesce(user.pref.custom_base, user.pref.species)]
*/
return species_sound_map[sounds]
// CHOMPEdit End

View File

@@ -62,8 +62,9 @@
pref.size_multiplier = initial(pref.size_multiplier)
if(!(pref.custom_speech_bubble in selectable_speech_bubbles))
pref.custom_speech_bubble = "default"
if(!(pref.species_sound)) // CHOMPEdit
pref.species_sound = "Unset" // CHOMPEdit
// var/datum/species/selected_species = GLOB.all_species[pref.species] // CHOMPEdit
if(!(pref.species_sound)) // CHOMPEdit // && selected_species.selects_bodytype
pref.species_sound = "Unset" // CHOMPEdit - otherwise, we leave this as null or w/e the default is
/datum/category_item/player_setup_item/vore/size/copy_to_mob(var/mob/living/carbon/human/character)
character.weight = pref.weight_vr
@@ -120,10 +121,10 @@
. += "<a href='?src=\ref[src];voice_test=1'><b>Test Selected Voice</b></a><br>"
. += "<b>Custom Speech Bubble:</b> <a href='?src=\ref[src];customize_speech_bubble=1'>[pref.custom_speech_bubble]</a><br>"
// CHOMPEdit Start: Pain/Scream/Death Custom Sounds
var/datum/species/selected_species = GLOB.all_species[pref.species]
if(selected_species.selects_bodytype)
. += "<br>"
. += "<b>Species Sounds:</b> <a href='?src=\ref[src];species_sound_options=1'>[pref.species_sound]</a><br>"
// var/datum/species/selected_species = GLOB.all_species[pref.species]
// if(selected_species.selects_bodytype)
. += "<br>"
. += "<b>Species Injury Sounds:</b> <a href='?src=\ref[src];species_sound_options=1'>[pref.species_sound]</a><br>"
. += "<a href='?src=\ref[src];scream_test=1'><b>Test Scream Sounds</b></a><br>"
. += "<a href='?src=\ref[src];pain_test=1'><b>Test Pain Sounds</b></a><br>"
. += "<a href='?src=\ref[src];gasp_test=1'><b>Test Gasp Sounds</b></a><br>"
@@ -273,26 +274,28 @@
return TOPIC_REFRESH // CHOMPEdit
// CHOMPEdit Start: Pain/Scream/Death sounds
else if(href_list["species_sound_options"]) // You shouldn't be able to see this option if you don't have the option to select a custom icon base, so we don't need to re-check for safety here.
var/list/possible_species_sound_types = list(
"Unset",
"Generic/Human",
"Canine",
"Feline",
"Cervine")
//"Vulpine") TBD! Need moar sounds. :3
var/list/possible_species_sound_types = species_sound_map
testing("Loading species sound types for selection.")
var/choice = tgui_input_list(usr, "Which set of sounds would you like to use for your character's pain, death, gasp, and scream sounds?", "Species Sounds", possible_species_sound_types)
if(!choice)
return TOPIC_REFRESH // No choice? Don't reset our selection
else
pref.species_sound = choice
testing("Setting species sound type to [choice].")
return TOPIC_REFRESH
else if(href_list["scream_test"])
var/datum/species/selected_species = GLOB.all_species[pref.species]
if(selected_species.selects_bodytype)
var/sound/S
// if(selected_species.selects_bodytype)
var/sound/S
testing("About to test our voice. User is [user]. Our chosen species sound is [pref.species_sound].")
testing("Species Sound map returns [get_species_sound(pref.species_sound)].")
testing("We are fetching a sound, and will get [pick(species_sound_map[pref.species_sound["scream"]])].")
S = sound(pick(species_sound_map[pref.species_sound["scream"]]))
//S = sound(pick(get_species_sound(pref.species_sound["scream"])))
/*
switch(pref.species_sound)
if("Canine")
S = sound(pick(canine_scream_sounds))
S = sound(pick(canine_sounds["scream"]))
if("Feline")
S = sound(pick(feline_scream_sounds))
if("Cervine")
@@ -303,38 +306,60 @@
else
S = sound(pick(male_generic_scream_sounds))
if("Unset")
var/datum/species/os = GLOB.all_species[pref.custom_base]
var/datum/species/os
if(!pref.custom_base) // Safety
os = selected_species
else
os = GLOB.all_species[pref.custom_base]
if(pref.identifying_gender == FEMALE)
S = sound(pick(os.female_scream_sound))
else
S = sound(pick(os.male_scream_sound))
S.frequency = pick(pref.voice_freq)
S.volume = 20
SEND_SOUND(user, S)
if("Robotic")
S = sound(pick(robot_scream_sounds))
if("None" || null)
to_chat(user, "<span class='warning'>This set does not have scream sounds!</span>")
return TOPIC_REFRESH
*/
if(pref.species_sound == "Unset")
S = sound(pick(get_species_sound(coalesce(pref.species_sound, pref.custom_base, pref.species))["scream"]))
if(pref.species_sound == "None" || pref.species_sound["scream"] == null || S == null)
to_chat(user, "<span class='warning'>This set does not have scream sounds!</span>")
return TOPIC_REFRESH
S.frequency = pick(pref.voice_freq)
S.volume = 20
SEND_SOUND(user, S)
return TOPIC_REFRESH
/*
else
var/sound/S
var/datum/species/os = GLOB.all_species[pref.custom_base]
if(pref.identifying_gender == FEMALE)
S = sound(pick(os.female_scream_sound))
S = sound(pick(selected_species.female_scream_sound))
else
S = sound(pick(os.male_scream_sound))
S = sound(pick(selected_species.male_scream_sound))
if(S == null)
to_chat(user, "<span class='warning'>This species does not have scream sounds!</span>")
return TOPIC_REFRESH
S.frequency = pick(pref.voice_freq)
S.volume = 20
SEND_SOUND(user, S)
return TOPIC_REFRESH
*/
else if(href_list["pain_test"])
var/datum/species/selected_species = GLOB.all_species[pref.species]
if(selected_species.selects_bodytype)
var/sound/S
//if(selected_species.selects_bodytype)
var/sound/S
S = sound(pick(species_sound_map[pref.species_sound["pain"]]))
//S = sound(pick(get_species_sound(pref.species_sound["pain"])))
/*
switch(pref.species_sound)
if("Canine")
S = sound(pick(canine_pain_sounds))
if("Feline")
S = sound(pick(feline_pain_sounds))
if("Cervine")
to_chat("<span class='warning'>This set does not have pain sounds!</span>")
to_chat(user, "<span class='warning'>This set does not have pain sounds!</span>")
return TOPIC_REFRESH
if("Generic/Human")
if(pref.identifying_gender == FEMALE)
@@ -342,37 +367,59 @@
else
S = sound(pick(male_generic_pain_sounds))
if("Unset")
var/datum/species/os = GLOB.all_species[pref.custom_base]
var/datum/species/os
if(!pref.custom_base) // Safety
os = selected_species
else
os = GLOB.all_species[pref.custom_base]
if(pref.identifying_gender == FEMALE)
S = sound(pick(os.female_pain_sound))
else
S = sound(pick(os.male_pain_sound))
S.frequency = pick(pref.voice_freq)
S.volume = 20
SEND_SOUND(user, S)
if("Robotic")
S = sound(pick(robot_pain_sounds))
if("None" || null)
to_chat(user, "<span class='warning'>This set does not have pain sounds!</span>")
return TOPIC_REFRESH
*/
if(pref.species_sound == "Unset")
S = sound(pick(get_species_sound(coalesce(pref.species_sound, pref.custom_base, pref.species))["pain"]))
if(pref.species_sound == "None" || pref.species_sound["pain"] == null || S == null)
to_chat(user, "<span class='warning'>This set does not have pain sounds!</span>")
return TOPIC_REFRESH
S.frequency = pick(pref.voice_freq)
S.volume = 20
SEND_SOUND(user, S)
return TOPIC_REFRESH
/*
else
var/sound/S
var/datum/species/os = GLOB.all_species[pref.custom_base]
if(pref.identifying_gender == FEMALE)
S = sound(pick(os.female_pain_sound))
S = sound(pick(selected_species.female_pain_sound))
else
S = sound(pick(os.male_pain_sound))
S = sound(pick(selected_species.male_pain_sound))
if(S == null)
to_chat(user, "<span class='warning'>This species does not have pain sounds!</span>")
return TOPIC_REFRESH
S.frequency = pick(pref.voice_freq)
S.volume = 20
SEND_SOUND(user, S)
return TOPIC_REFRESH
*/
else if(href_list["gasp_test"])
var/datum/species/selected_species = GLOB.all_species[pref.species]
if(selected_species.selects_bodytype)
var/sound/S
// if(selected_species.selects_bodytype)
var/sound/S
S = sound(pick(species_sound_map[pref.species_sound["gasp"]]))
//S = sound(pick(get_species_sound(pref.species_sound["gasp"])))
/*
switch(pref.species_sound)
if("Canine")
S = sound(pick(canine_gasp_sounds))
if("Feline")
S = sound(pick(feline_gasp_sounds))
if("Cervine")
to_chat("<span class='warning'>This set does not have gasp sounds!</span>")
to_chat(user, "<span class='warning'>This set does not have gasp sounds!</span>")
return TOPIC_REFRESH
if("Generic/Human")
if(pref.identifying_gender == FEMALE)
@@ -380,30 +427,53 @@
else
S = sound(pick(male_generic_gasp_sounds))
if("Unset")
var/datum/species/os = GLOB.all_species[pref.custom_base]
var/datum/species/os
if(!pref.custom_base) // Safety
os = selected_species
else
os = GLOB.all_species[pref.custom_base]
if(pref.identifying_gender == FEMALE)
S = sound(pick(os.female_gasp_sound))
else
S = sound(pick(os.male_gasp_sound))
S.frequency = pick(pref.voice_freq)
S.volume = 20
SEND_SOUND(user, S)
if("Robotic")
to_chat(user, "<span class='warning'>This set does not have gasp sounds!</span>")
return TOPIC_REFRESH
if("None" || null)
to_chat(user, "<span class='warning'>This set does not have gasp sounds!</span>")
return TOPIC_REFRESH
*/
if(pref.species_sound == "Unset")
S = sound(pick(get_species_sound(coalesce(pref.species_sound, pref.custom_base, pref.species))["gasp"]))
if(pref.species_sound == "None" || pref.species_sound["gasp"] == null || S == null)
to_chat(user, "<span class='warning'>This set does not have gasp sounds!</span>")
return TOPIC_REFRESH
S.frequency = pick(pref.voice_freq)
S.volume = 20
SEND_SOUND(user, S)
return TOPIC_REFRESH
/*
else
var/sound/S
var/datum/species/os = GLOB.all_species[pref.custom_base]
if(pref.identifying_gender == FEMALE)
S = sound(pick(os.female_gasp_sound))
S = sound(pick(selected_species.female_gasp_sound))
else
S = sound(pick(os.male_gasp_sound))
S = sound(pick(selected_species.male_gasp_sound))
if(S == null)
to_chat(user, "<span class='warning'>This species does not have gasp sounds!</span>")
return TOPIC_REFRESH
S.frequency = pick(pref.voice_freq)
S.volume = 20
SEND_SOUND(user, S)
return TOPIC_REFRESH
*/
else if(href_list["death_test"])
var/datum/species/selected_species = GLOB.all_species[pref.species]
if(selected_species.selects_bodytype)
var/sound/S
// if(selected_species.selects_bodytype)
var/sound/S
S = sound(pick(species_sound_map[pref.species_sound["death"]]))
// S = sound(pick(get_species_sound(pref.species_sound["death"])))
/*
switch(pref.species_sound)
if("Canine")
S = sound(pick(canine_death_sounds))
@@ -417,25 +487,44 @@
else
S = sound(pick(male_generic_death_sounds))
if("Unset")
var/datum/species/os = GLOB.all_species[pref.custom_base]
var/datum/species/os
if(!pref.custom_base) // Safety
os = selected_species
else
os = GLOB.all_species[pref.custom_base]
if(pref.identifying_gender == FEMALE)
S = sound(pick(os.female_death_sound))
else
S = sound(pick(os.male_death_sound))
S.frequency = pick(pref.voice_freq)
S.volume = 20
SEND_SOUND(user, S)
if("Robotic")
S = sound(pick(robot_death_sounds))
if("None" || null)
to_chat(user, "<span class='warning'>This set does not have death sounds!</span>")
return TOPIC_REFRESH
*/
if(pref.species_sound == "Unset")
S = sound(pick(get_species_sound(coalesce(pref.species_sound, pref.custom_base, pref.species))["death"]))
if(pref.species_sound == "None" || pref.species_sound["gasp"] == null || S == null)
to_chat(user, "<span class='warning'>This set does not have gasp sounds!</span>")
return TOPIC_REFRESH
S.frequency = pick(pref.voice_freq)
S.volume = 20
SEND_SOUND(user, S)
return TOPIC_REFRESH
/*
else
var/sound/S
var/datum/species/os = GLOB.all_species[pref.custom_base]
if(pref.identifying_gender == FEMALE)
S = sound(pick(os.female_death_sound))
S = sound(pick(selected_species.female_death_sound))
else
S = sound(pick(os.male_death_sound))
S = sound(pick(selected_species.male_death_sound))
if(S == null)
to_chat(user, "<span class='warning'>This species does not have death sounds!</span>")
return TOPIC_REFRESH
S.frequency = pick(pref.voice_freq)
S.volume = 20
SEND_SOUND(user, S)
return TOPIC_REFRESH
*/
// CHOMPEdit End
return ..();

View File

@@ -257,8 +257,12 @@
//Any additional non-trait settings can be applied here
new_S.blood_color = pref.blood_color
if(pref.species_sound && new_S.selects_bodytype && pref.custom_base) // CHOMPEdit: Custom Scream/Death/Gasp/Pain Sounds. Don't try to do this if it doesn't exist, we aren't a custom species, and we don't have a custom base.
/*
if(pref.species_sound) // CHOMPEdit: Custom Scream/Death/Gasp/Pain Sounds. Don't try to do this if it doesn't exist. // && new_S.selects_bodytype && pref.custom_base) // we aren't a custom species, and we don't have a custom base.
new_S.copy_species_sounds(new_S, pref.species_sound, pref.custom_base) // CHOMPEdit: Custom Scream/Death/Gasp/Pain Sounds
*/
// CHOMPEdit: Custom Scream/Death/Gasp/Pain Sounds.
new_S.species_sounds = coalesce(pref.species_sound, pref.custom_base, pref.species)
if(pref.species == SPECIES_CUSTOM)
//Statistics for this would be nice

View File

@@ -1,17 +1,40 @@
/decl/emote/audible/scream/get_emote_sound(var/atom/user)
..()
var/mob/living/carbon/human/H = user
if(H.get_gender() == FEMALE)
return list(
"sound" = H.species.female_scream_sound,
"vol" = 60,
"exr" = 20,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.get_gender() == FEMALE)
return list(
"sound" = H.species.female_scream_sound,
"vol" = 60,
"exr" = 20,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
else
return list(
"sound" = H.species.male_scream_sound,
"vol" = 60,
"exr" = 20,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
/* // Not sure if needed, screams are a carbon-only thing rn.
else
return list(
"sound" = H.species.male_scream_sound,
"vol" = 60,
"exr" = 20,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
var/mob/living/M = user
if((M.get_gender() == FEMALE) && female_scream_sound) // If our mob has custom sounds per-gender defined, most won't.
return list(
"sound" = female_scream_sound,
"vol" = 60,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
else if((M.get_gender() == MALE) && male_scream_sound) // If our mob has custom sounds per-gender defined, most won't.
return list(
"sound" = male_scream_sound,
"vol" = 60,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
else
return list(
"sound" = scream_sound,
"vol" = 60,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
*/

View File

@@ -42,6 +42,8 @@
var/frustration = 0
var/max_frustration = 0
can_pain_emote = FALSE // CHOMPEdit: Sanity/safety, if bots ever get emotes later, undo this
/mob/living/bot/New()
..()
update_icons()
@@ -325,7 +327,7 @@
if(makeStep(patrol_path))
frustration = 0
else if(max_frustration)
frustration++
frustration++
//CHOMPEdit End
return

View File

@@ -9,6 +9,7 @@
icon = 'icons/obj/surgery.dmi'
icon_state = "brain1"
no_vore = TRUE //VOREStation Edit - PLEASE. lol.
can_pain_emote = FALSE // CHOMPEdit: Sanity/safety
/mob/living/carbon/brain/Initialize()
. = ..()

View File

@@ -152,4 +152,39 @@
damage = damage * damage_mod
return damage
return damage
/*
* CHOMPEdit Start: Pain/etc calculations, but more efficient:tm: - this should work for literally anything that applies to health. Far better than slapping emote("pain") everywhere like scream does.
* The reason we're doing this here is to enable carbons to handle pain differently if they need to - in this case, we're going to check if we're synthetic here, anyways. Essentially a dupe of human_damage.dm's updatehealth()
* Human updatehealth() doesn't call parent, so we can safely ignore human checks, but we're going to put sanity in anyways
*/
/mob/living/carbon/updatehealth()
if(status_flags & GODMODE)
health = 100
set_stat(CONSCIOUS)
else
var/initialhealth = health // CHOMPEdit: Getting our health before this check
health = getMaxHealth() - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() - halloss
if(!((ishuman(src)) || (issilicon(src))) && can_feel_pain() || ((src.isSynthetic() && synth_cosmetic_pain))) // Only run this if we're non-human/non-silicon + can feel pain, bc humans already do this. human_damage doesn't call parent, but sanity is better here.
if(health < initialhealth) // Did we lose health?
// Yes. How much by?
var/damage = initialhealth - health // Get our damage (say, 200 - 180 = 20, etc etc)
var/pain_noise
if(species)
pain_noise = (damage * species.pain_mod) // Multiply the incoming damage by our mod. 50 damage becomes 25 x 0.6 on highest strength, meaning prob 15. 50 x 1.4 means prob 35, etc.
else // Sanity, in case we don't have a species
pain_noise = (damage * rand(0.5, 1.5)) // Multiply damage by our rand mod. 50 damage becomes 50 x 0.5, means prob 25. 50 x 1.5 means prob 75, etc.
switch(damage)
if(-INFINITY to 0)
return
if(1 to 25)
if(prob(pain_noise) && !isbelly(loc)) // No pain noises inside bellies.
emote("pain")
if(26 to 50)
if(prob(pain_noise * 1.5) && !isbelly(loc)) // No pain noises inside bellies.
emote("pain")
if(51 to INFINITY)
if(prob(pain_noise * 3) && !isbelly(loc)) // More likely, most severe damage. No pain noises inside bellies.
emote("pain")
// CHOMPEdit End: Pain

View File

@@ -317,7 +317,8 @@ var/list/_simple_mob_default_emotes = list(
/decl/emote/audible/purr,
/decl/emote/audible/purrlong,
//CHOMP Add start
/decl/emote/audible/prbt2
/decl/emote/audible/prbt2,
/decl/emote/audible/pain
//CHOMP Add end
)
//VOREStation Add End

View File

@@ -15,7 +15,30 @@
total_brute += O.brute_dam
total_burn += O.burn_dam
// CHOMPEdit Start: Pain/etc calculations, but more efficient:tm: - this should work for literally anything that applies to health. Far better than slapping emote("pain") everywhere like scream does.
var/initialhealth = health // CHOMPEdit: Getting our health before this check
health = getMaxHealth() - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute
if(can_feel_pain() || ((isSynthetic() && synth_cosmetic_pain))) // Are we capable of feeling pain?
if(health < initialhealth) // Did we lose health?
// Yes. How much by?
var/damage = initialhealth - health // Get our damage (say, 200 - 180 = 20, etc etc)
var/pain_noise = (damage * species.pain_mod) // Multiply the incoming damage by our mod. 50 damage becomes 25 x 0.6 on highest strength, meaning prob 15. 50 x 1.4 means prob 35, etc.
switch(damage)
if(-INFINITY to 0)
//TODO: fix husking
if( ((getMaxHealth() - total_burn) < config.health_threshold_dead * huskmodifier) && stat == DEAD)
ChangeToHusk()
return
if(1 to 25)
if(prob(pain_noise) && !isbelly(loc)) // No pain noises inside bellies.
emote("pain")
if(26 to 50)
if(prob(pain_noise * 1.5) && !isbelly(loc)) // No pain noises inside bellies.
emote("pain")
if(51 to INFINITY)
if(prob(pain_noise * 3) && !isbelly(loc)) // More likely, most severe damage. No pain noises inside bellies.
emote("pain")
// CHOMPEdit End: Pain
//TODO: fix husking
if( ((getMaxHealth() - total_burn) < config.health_threshold_dead * huskmodifier) && stat == DEAD)

View File

@@ -1857,6 +1857,10 @@
if(shock_stage == 40)
if(traumatic_shock >= 80)
to_chat(src, "<span class='danger'>[pick("The pain is excruciating", "Please&#44; just end the pain", "Your whole body is going numb")]!</span>")
// CHOMPEdit: Pain
if(prob(60) && !isbelly(loc)) // Hopefully not spammy, only 60% of the time will we groan in pain + sanity for in-belly
emote("pain")
// CHOMPEdit End
if (shock_stage >= 60)
if(shock_stage == 60 && !isbelly(loc)) //VOREStation Edit
@@ -1864,23 +1868,37 @@
if (prob(2))
if(traumatic_shock >= 80)
to_chat(src, "<span class='danger'>[pick("The pain is excruciating", "Please&#44; just end the pain", "Your whole body is going numb")]!</span>")
// CHOMPEdit: Pain
if(prob(60) && !isbelly(loc)) // Hopefully not spammy, only 60% of the time will we groan in pain + sanity for in-belly
emote("pain")
// CHOMPEdit End
Weaken(20)
if(shock_stage >= 80)
if (prob(5))
if(traumatic_shock >= 80)
to_chat(src, "<span class='danger'>[pick("The pain is excruciating", "Please&#44; just end the pain", "Your whole body is going numb")]!</span>")
// CHOMPEdit: Pain
if(prob(60) && !isbelly(loc)) // Hopefully not spammy, only 80% of the time will we groan in pain + sanity for in-belly
emote("pain")
// CHOMPEdit End
Weaken(20)
if(shock_stage >= 120)
if (prob(2))
if(traumatic_shock >= 80)
to_chat(src, "<span class='danger'>[pick("You black out", "You feel like you could die any moment now", "You are about to lose consciousness")]!</span>")
// CHOMPEdit: Pain
if(prob(60) && !isbelly(loc)) // Hopefully not spammy, only 60% of the time will we groan in pain + sanity for in-belly
emote("pain")
// CHOMPEdit End
Paralyse(5)
if(shock_stage == 150)
if(!isbelly(loc)) //VOREStation Edit
custom_emote(VISIBLE_MESSAGE, "can no longer stand, collapsing!")
if(prob(60)) // Hopefully not spammy, only 60% of the time will we groan in pain
emote("pain")
Weaken(20)
if(shock_stage >= 150)

View File

@@ -26,4 +26,15 @@
for(var/datum/soul_link/S as anything in shared_soul_links)
S.sharer_died(gibbed)
// CHOMPStation Add: All mobs can play a death_sound if set. On carbons, this is going to be handled by species.
if(!gibbed && (male_death_sound || female_death_sound) && !isbelly(loc))
var/gender = src.gender
if(gender == FEMALE)
playsound(src, pick(female_death_sound), 40, 1, 20, volume_channel = VOLUME_CHANNEL_INJ_DEATH)
else // Until we get more, sorry. :c
playsound(src, pick(male_death_sound), 40, 1, 20, volume_channel = VOLUME_CHANNEL_INJ_DEATH)
else if(!gibbed && death_sound && !isbelly(loc))
playsound(src, pick(death_sound), 40, 1, 20, volume_channel = VOLUME_CHANNEL_INJ_DEATH)
// CHOMPStation Add End
. = ..()

View File

@@ -123,7 +123,27 @@
health = 100
set_stat(CONSCIOUS)
else
// CHOMPEdit Start: Pain/etc calculations, but more efficient:tm: - this should work for literally anything that applies to health. Far better than slapping emote("pain") everywhere like scream does.
var/initialhealth = health // CHOMPEdit: Getting our health before this check
health = getMaxHealth() - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() - halloss
if(!((ishuman(src)) || (issilicon(src))) && src.can_pain_emote) // Only run this if we're non-human/non-silicon (bots and mechanical simplemobs should be allowed to make pain sounds) & can emote pain, bc humans + carbons already do this. human_damage doesn't call parent, but sanity is better here.
if(health < initialhealth) // Did we lose health?
// Yes. How much by?
var/damage = initialhealth - health // Get our damage (say, 200 - 180 = 20, etc etc)
var/pain_noise = (damage * rand(0.5, 1.5)) // Multiply damage by our rand mod. 50 damage becomes 50 x 0.5, means prob 25. 50 x 1.5 means prob 75, etc.
switch(damage)
if(-INFINITY to 0)
return
if(1 to 25)
if(prob(pain_noise) && !isbelly(loc)) // No pain noises inside bellies.
emote("pain")
if(26 to 50)
if(prob(pain_noise * 1.5) && !isbelly(loc)) // No pain noises inside bellies.
emote("pain")
if(51 to INFINITY)
if(prob(pain_noise * 3) && !isbelly(loc)) // More likely, most severe damage. No pain noises inside bellies.
emote("pain")
// CHOMPEdit End: Pain
//This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually
//affects them once clothing is factored in. ~Errorage

View File

@@ -118,6 +118,17 @@
)
can_be_drop_prey = FALSE //CHOMP Add
pain_emote_1p = list("chitter", "click") //CHOMP Add
pain_emote_3p = list("chitters", "clicks") //CHOMP Add
// CHOMPAdd: Has to be done on Init or New, bc we can't set a var to a non-constant
/mob/living/simple_mob/animal/giant_spider/Initialize()
pain_sound = get_species_sound(spider_sounds["pain"])
death_sound = get_species_sound(spider_sounds["death"])
. = ..()
// CHOMPAdd End
/mob/living/simple_mob/animal/giant_spider/apply_melee_effects(var/atom/A)
if(isliving(A))
@@ -148,4 +159,4 @@
poison_per_bite *= 1.3
/decl/mob_organ_names/spider
hit_zones = list("cephalothorax", "abdomen", "left forelegs", "right forelegs", "left hind legs", "right hind legs", "pedipalp", "mouthparts")
hit_zones = list("cephalothorax", "abdomen", "left forelegs", "right forelegs", "left hind legs", "right hind legs", "pedipalp", "mouthparts")

View File

@@ -41,14 +41,19 @@
say_list_type = /datum/say_list/mouse
var/body_color //brown, gray and white, leave blank for random
//CHOMP Addition: Added these vore variables in and swapped the booleans from their defaults too.
can_be_drop_prey = TRUE
can_be_drop_pred = FALSE
pain_emote_1p = list("squeak", "squik") // CHOMP Addition: Pain/etc sounds
pain_emote_1p = list("squeaks", "squiks") // CHOMP Addition: Pain/etc sounds
/mob/living/simple_mob/animal/passive/mouse/New()
..()
pain_sound = get_species_sound(mouse_sounds["pain"]) // CHOMP Addition: Pain/etc sounds
verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide
@@ -177,7 +182,7 @@
min_n2 = 0
max_n2 = 0
maxbodytemp = 700
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
//The names Cheese... Agent Cheese

View File

@@ -33,6 +33,11 @@
vore_icons = SA_ICON_LIVING | SA_ICON_REST
center_offset = 0
pain_sound = list('sound/voice/raccoon.ogg')
pain_emote_1p = list("chitter")
pain_emote_3p = list("chitters")
death_sound = list('sound/voice/raccoon.ogg')
/mob/living/simple_mob/animal/passive/raccoon_ch/Initialize()
. = ..()
ghostjoin = 1

View File

@@ -27,6 +27,17 @@
var/obj/item/inventory_head
var/obj/item/inventory_back
// CHOMPAdd: :c
pain_emote_1p = list("yelp", "whine", "bark", "growl")
pain_emote_3p = list("yelps", "whines", "barks", "growls")
// CHOMPAdd: Has to be done on Init or New, bc we can't set a var to a non-constant
/mob/living/simple_mob/animal/passive/dog/Initialize()
pain_sound = get_species_sound(canine_sounds["pain"])
death_sound = get_species_sound(canine_sounds["death"])
. = ..()
// CHOMPAdd End
/mob/living/simple_mob/animal/passive/dog/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O, /obj/item/weapon/newspaper))
@@ -284,4 +295,4 @@
icon_dead = "brittany_dead"
/decl/mob_organ_names/corgi
hit_zones = list("head", "body", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "tail", "heart") //You monster.
hit_zones = list("head", "body", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "tail", "heart") //You monster.

View File

@@ -69,6 +69,12 @@
var/list/friend_loot_list = list(/obj/item/weapon/coin) // What will make this animal non-hostile if held?
var/randomize_size = TRUE
can_be_drop_prey = TRUE //CHOMP Add
// CHOMPAdd: Pain/Death Sounds
pain_sound = list('sound/voice/raccoon.ogg')
pain_emote_1p = list("chitter")
pain_emote_3p = list("chitters")
death_sound = list('sound/voice/raccoon.ogg')
/mob/living/simple_mob/animal/sif/sakimm/verb/remove_hat()
set name = "Remove Hat"

View File

@@ -62,12 +62,16 @@
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
var/rank //pyro, operative, ammo, stealth. more to come. Do not leave blank.
can_be_drop_prey = FALSE //CHOMP Add
pain_emote_1p = list("squeak", "squik") // CHOMP Addition: Pain/etc sounds
pain_emote_1p = list("squeaks", "squiks") // CHOMP Addition: Pain/etc sounds
/mob/living/simple_mob/animal/space/mouse_army/New()
..()
pain_sound = get_species_sound(mouse_sounds["pain"]) // CHOMPAdd: Pain sounds
verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide

View File

@@ -8,6 +8,12 @@
min_n2 = 0 //breathe N2
max_n2 = 0
// CHOMPAdd: Pain sounds
pain_sound = list('sound/voice/shriek1.ogg')
pain_emote_1p = list("shriek")
pain_emote_3p = list("shrieks")
// CHOMPAdd End
/mob/living/simple_mob/vox/armalis
name = "serpentine alien"
real_name = "serpentine alien"

View File

@@ -29,8 +29,10 @@
mob_class = MOB_CLASS_SLIME
ai_holder_type = /datum/ai_holder/simple_mob/melee
can_be_drop_prey = FALSE //CHOMP Add
can_pain_emote = FALSE // CHOMPEdit: Can't feel pain
death_sound = null // CHOMPEdit: Shouldn't trigger death sounds
/mob/living/simple_mob/blob/speech_bubble_appearance()
return "slime"
@@ -88,4 +90,4 @@
return ally
/decl/mob_organ_names/blob
hit_zones = list("mass")
hit_zones = list("mass")

View File

@@ -30,6 +30,9 @@
var/can_infest = FALSE
var/is_infesting = FALSE
can_pain_emote = FALSE // CHOMPEdit: Can't feel pain
death_sound = null // CHOMPEdit: Shouldn't trigger death sounds
/datum/say_list/spore
emote_see = list("sways", "inflates briefly")

View File

@@ -4,6 +4,9 @@
icon = 'icons/mob/horror_show/GHPS.dmi'
icon_gib = "generic_gib"
can_pain_emote = FALSE // CHOMPEdit: Can't feel pain
death_sound = null // CHOMPEdit: Shouldn't trigger death sounds
/datum/ai_holder/simple_mob/horror
hostile = TRUE // The majority of simplemobs are hostile, gaslamps are nice.
cooperative = FALSE
@@ -26,4 +29,4 @@
minbodytemp = 0
maxbodytemp = 700
can_be_drop_prey = FALSE //CHOMP Add
can_be_drop_prey = FALSE //CHOMP Add

View File

@@ -0,0 +1,14 @@
// Basically, all we're doing here (for now) is defining pain/etc sounds for combat use
/mob/living/simple_mob/humanoid
pain_emote_1p = list("shout out in pain", "growl in pain", "grunt in pain", "gasp out in pain")
pain_emote_3p = list("shouts out in pain", "growls in pain", "grunts in pain", "gasps out in pain")
/mob/living/simple_mob/humanoid/Initialize()
pain_sound = get_species_sound(male_generic_sounds["pain"])
female_pain_sound = get_species_sound(female_generic_sounds["pain"])
male_pain_sound = get_species_sound(male_generic_sounds["pain"])
death_sound = get_species_sound(male_generic_sounds["death"])
male_death_sound = get_species_sound(male_generic_sounds["death"])
female_death_sound = get_species_sound(female_generic_sounds["death"])
. = ..()

View File

@@ -47,6 +47,8 @@
ai_holder_type = /datum/ai_holder/simple_mob/merc
say_list_type = /datum/say_list/possessed //Set to Null on silenced.
can_pain_emote = FALSE
death_sound = null
// corpse = /obj/effect/landmark/mobcorpse/possessed
// Will eventually leave a full corpse with an activated RIG on it. But not yet.
@@ -155,4 +157,4 @@
desc = "A blood-red hardsuit featuring some fairly illegal technology. Seems to be worn down and damaged but moving with surprising speed!"
movement_cooldown = 3 //You can try running
base_attack_cooldown = 3 //You will just die tired
melee_miss_chance = 25 //Not very coordinated though
melee_miss_chance = 25 //Not very coordinated though

View File

@@ -24,6 +24,9 @@
var/atom/movable/copying = null // The thing we're trying to look like.
var/realistic = FALSE // If true, things like bullets and weapons will hit it, to be a bit more convincing from a distance.
can_pain_emote = FALSE // CHOMPEdit: Hallucinations can't feel pain and shouldn't take damage anyways, but, sanity
death_sound = null // CHOMPEdit: Hallucinations shouldn't trigger death sounds anyways, but, sanity
/mob/living/simple_mob/illusion/update_icon() // We don't want the appearance changing AT ALL unless by copy_appearance().
return
@@ -113,4 +116,4 @@
/mob/living/simple_mob/illusion/get_catalogue_delay()
if(copying)
return copying.get_catalogue_delay()
return copying.get_catalogue_delay()

View File

@@ -59,9 +59,15 @@
var/evo_limit = 0
var/next
meat_type = /obj/item/toy/figure/bounty_hunter
can_be_drop_prey = FALSE //CHOMP Add
can_pain_emote = TRUE
pain_sound = list('sound/metroid/metroidsee.ogg')
pain_emote_1p = list("skree")
pain_emote_3p = list("skrees")
death_sound = list('sound/metroid/metroiddeath.ogg')
/mob/living/simple_mob/metroid/Initialize()
nutrition = 100 //Have them start off pretty hungry still.
existing_metroids += src //Keep track of how many for the event.
@@ -114,5 +120,5 @@
)
/mob/living/simple_mob/metroid/death()
playsound(src, 'sound/metroid/metroiddeath.ogg', 75, 1)
..()
// playsound(src, 'sound/metroid/metroiddeath.ogg', 75, 1)
..()

View File

@@ -71,7 +71,7 @@ GLOBAL_VAR_INIT(queen_amount, 0) //We only gonna want 1 queen in the world.
/mob/living/simple_mob/metroid/mine/death()
playsound(src, 'sound/metroid/metroiddeath.ogg', 50, 1)
// playsound(src, 'sound/metroid/metroiddeath.ogg', 50, 1)
..()
if(prob(20))
visible_message("<span class='notice'>\The [src] dropped some toy!</span>")
@@ -213,7 +213,7 @@ GLOBAL_VAR_INIT(queen_amount, 0) //We only gonna want 1 queen in the world.
..()
/mob/living/simple_mob/metroid/juvenile/super/death()
playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1)
// playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1)
..()
/mob/living/simple_mob/metroid/juvenile/alpha
@@ -266,7 +266,7 @@ GLOBAL_VAR_INIT(queen_amount, 0) //We only gonna want 1 queen in the world.
..()
/mob/living/simple_mob/metroid/juvenile/alpha/death()
playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1)
// playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1)
..()
/mob/living/simple_mob/metroid/juvenile/alpha //active noms
@@ -343,7 +343,7 @@ GLOBAL_VAR_INIT(queen_amount, 0) //We only gonna want 1 queen in the world.
..()
/mob/living/simple_mob/metroid/juvenile/gamma/death()
playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1)
// playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1)
..()
/mob/living/simple_mob/metroid/juvenile/gamma //active noms
@@ -441,7 +441,7 @@ GLOBAL_VAR_INIT(queen_amount, 0) //We only gonna want 1 queen in the world.
..()
/mob/living/simple_mob/metroid/juvenile/zeta/death()
playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1)
// playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1)
..()
/mob/living/simple_mob/metroid/juvenile/zeta //active noms
@@ -533,12 +533,14 @@ GLOBAL_VAR_INIT(queen_amount, 0) //We only gonna want 1 queen in the world.
evo_limit = 2000
next = "/mob/living/simple_mob/metroid/juvenile/queen"
death_sound = list('sound/metroid/metroidomegadeath.ogg')
/mob/living/simple_mob/metroid/juvenile/omega/Initialize()
playsound(src, 'sound/metroid/metroidomega.ogg', 100, 1)
..()
/mob/living/simple_mob/metroid/juvenile/omega/death()
playsound(src, 'sound/metroid/metroidomegadeath.ogg', 100, 1)
// playsound(src, 'sound/metroid/metroidomegadeath.ogg', 100, 1)
..()
/mob/living/simple_mob/metroid/juvenile/omega //active noms
@@ -628,13 +630,15 @@ GLOBAL_VAR_INIT(queen_amount, 0) //We only gonna want 1 queen in the world.
next = null
is_queen = TRUE
death_sound = list('sound/metroid/metroidqueendeath.ogg')
/mob/living/simple_mob/metroid/juvenile/queen/Initialize()
playsound(src, 'sound/metroid/metroidqueen.ogg', 100, 1)
GLOB.queen_amount++
..()
/mob/living/simple_mob/metroid/juvenile/queen/death()
playsound(src, 'sound/metroid/metroidqueendeath.ogg', 100, 1)
// playsound(src, 'sound/metroid/metroidqueendeath.ogg', 100, 1)
GLOB.queen_amount--
..()

View File

@@ -63,6 +63,8 @@
// var/do_glow = TRUE
can_be_drop_prey = FALSE //CHOMP Add
can_pain_emote = FALSE // CHOMPEdit: Can't feel pain
death_sound = null // CHOMPEdit: Shouldn't trigger death sounds
/mob/living/simple_mob/construct/place_spell_in_hand(var/path)
if(!path || !ispath(path))
@@ -157,4 +159,4 @@
/mob/living/simple_mob/construct/proc/remove_glow()
cut_overlays()
*/
*/

View File

@@ -29,8 +29,10 @@
speak_emote = list("gibbers")
ai_holder_type = /datum/ai_holder/simple_mob/melee
can_be_drop_prey = FALSE //CHOMP Add
can_pain_emote = FALSE // CHOMPEdit: Can't feel pain
death_sound = null // CHOMPEdit: Shouldn't trigger death sounds
// Strong Variant
/mob/living/simple_mob/creature/strong
@@ -72,4 +74,4 @@
melee_damage_upper = 25
/decl/mob_organ_names/abberation
hit_zones = list("fleshy mass", "maw", "eye(?)", "orifice(?)")
hit_zones = list("fleshy mass", "maw", "eye(?)", "orifice(?)")

View File

@@ -41,8 +41,10 @@
min_n2 = 0
max_n2 = 0
minbodytemp = 0
can_be_drop_prey = FALSE //CHOMP Add
can_pain_emote = FALSE // CHOMPEdit: Can't feel pain
death_sound = null // CHOMPEdit: Shouldn't trigger death sounds
/mob/living/simple_mob/faithless/Process_Spacemove(var/check_drift = 0)
return 1
@@ -81,4 +83,4 @@
melee_damage_upper = 28
/decl/mob_organ_names/faithless
hit_zones = list("body", "left appendage", "right appendage", "shadowy tendrils", "head", "right stump", "left stump", "infernal eye")
hit_zones = list("body", "left appendage", "right appendage", "shadowy tendrils", "head", "right stump", "left stump", "infernal eye")

View File

@@ -40,8 +40,10 @@
var/all_special_attacks = list(GA_ADS, GA_CALLDOWN, GA_LINES, GA_BULLETHELL, GA_ILLUSION, GA_CONFUSION, GA_SPEEDUP)
loot_list = list(/obj/item/device/nif/glitch = 100)
can_be_drop_prey = FALSE //CHOMP Add
can_pain_emote = FALSE // CHOMPEdit: Can't feel pain
death_sound = null // CHOMPEdit: Shouldn't trigger death sounds
/obj/item/projectile/energy/slow_orb
name = "TROJAN"
@@ -317,6 +319,9 @@
ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/bossmob_glitch_fake
can_pain_emote = FALSE // CHOMPEdit: Can't feel pain
death_sound = null // CHOMPEdit: Shouldn't trigger death sounds
/mob/living/simple_mob/glitch_boss_fake/strong
maxHealth = 100
health = 100
@@ -346,4 +351,4 @@
pointblank = TRUE
intelligence_level = AI_SMART
vision_range = 9
closest_distance = 4
closest_distance = 4

View File

@@ -28,8 +28,10 @@
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
meat_amount = 4
can_be_drop_prey = FALSE //CHOMP Add
can_pain_emote = FALSE // CHOMPEdit: Can't feel pain and shouldn't take damage anyways, but, sanity
death_sound = null // CHOMPEdit: Shouldn't trigger death sounds anyways, but, sanity
/decl/mob_organ_names/tomato
hit_zones = list("flesh", "leaf", "mouth")
hit_zones = list("flesh", "leaf", "mouth")

View File

@@ -31,8 +31,10 @@
meat_amount = 2
pixel_x = -16
can_be_drop_prey = FALSE //CHOMP Add
can_pain_emote = FALSE // CHOMPEdit: Can't feel pain and shouldn't take damage anyways, but, sanity
death_sound = null // CHOMPEdit: Shouldn't trigger death sounds anyways, but, sanity
/mob/living/simple_mob/animal/space/tree/apply_melee_effects(var/atom/A)
if(isliving(A))
@@ -48,4 +50,4 @@
qdel(src)
/decl/mob_organ_names/tree
hit_zones = list("trunk", "branches", "twigs")
hit_zones = list("trunk", "branches", "twigs")

View File

@@ -81,9 +81,15 @@ var/list/_slime_default_emotes = list(
var/mood = ":3" // Icon to use to display 'mood', as an overlay.
can_enter_vent_with = list(/obj/item/clothing/head)
can_be_drop_prey = FALSE //CHOMP Add
// CHOMPAdd: Pain Sounds
pain_sound = 'sound/effects/slime_squish.ogg'
pain_emote_1p = list("squish", "squelch")
pain_emote_3p = list("squishes", "squelches")
// CHOMPAdd End
/mob/living/simple_mob/slime/get_available_emotes()
return global._slime_default_emotes.Copy()
@@ -253,4 +259,4 @@ var/list/_slime_default_emotes = list(
visible_message("<b>\The [src]</b> squishes!")
/decl/mob_organ_names/slime
hit_zones = list("cytoplasmic membrane")
hit_zones = list("cytoplasmic membrane")

View File

@@ -62,6 +62,8 @@
var/blood_spawn = 0
var/is_shifting = FALSE
can_pain_emote = FALSE
/mob/living/simple_mob/vore/demonAI/init_vore()
if(!voremob_loaded)
return

View File

@@ -50,6 +50,17 @@
say_list_type = /datum/say_list/fennec
ai_holder_type = /datum/ai_holder/simple_mob/passive
// CHOMPAdd: :c
pain_emote_1p = list("yelp", "whine", "bark", "growl")
pain_emote_3p = list("yelps", "whines", "barks", "growls")
/mob/living/simple_mob/vore/fennec/Initialize()
pain_sound = get_species_sound(canine_sounds["pain"])
death_sound = get_species_sound(canine_sounds["death"])
. = ..()
// CHOMPAdd End
// Activate Noms!
/mob/living/simple_mob/vore/fennec
vore_active = 1
@@ -58,12 +69,12 @@
vore_pounce_chance = 40
vore_default_mode = DM_HOLD
vore_icons = SA_ICON_LIVING
/mob/living/simple_mob/vore/fennec/init_vore() // CHOMPEdit - Allow for customizing bellies on vorecritters
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "Warm, slick, and wet. You're somewhere hot, tight, and very cramped, unless you happen to somehow be smaller than the fennec you're in! It's hard to see, as rippling pink walls clench and smother over your form. If you don't want to be here, a newspaper from a friend ought to get you out. ...right?"

View File

@@ -28,6 +28,10 @@
vore_pounce_chance = 35 //More likely to nom
vore_icons = SA_ICON_LIVING | SA_ICON_REST
// CHOMPAdd: Don't think its checked, but just in case
pain_emote_1p = list("yelp", "whine", "bark", "growl")
pain_emote_3p = list("yelps", "whines", "barks", "growls")
/mob/living/simple_mob/otie/zorgoia/New()
..()
switch(rand(9))
@@ -51,6 +55,8 @@
color = "#ff9f00"
if(9)
color = "#393939"
pain_sound = get_species_sound(canine_sounds["pain"]) // CHOMPAdd: Pain
death_sound = get_species_sound(canine_sounds["death"]) // CHOMPAdd: Pain
/mob/living/simple_mob/otie/zorgoia/feral //gets the pet2tame feature. starts out hostile tho so get gamblin'
name = "agressive zorgoia"
@@ -77,4 +83,4 @@
emote_hear = list("chuffs", "murrs", "churls", "hisses", "lets out a cougar like scream", "yawns")
emote_see = list("licks their maw", "stretches", "yawns", "noodles")
say_maybe_target = list("weh?")
say_got_target = list("Rurrr!", "ROAR!", "RAH!")
say_got_target = list("Rurrr!", "ROAR!", "RAH!")

View File

@@ -39,8 +39,18 @@
can_buckle = TRUE
buckle_movable = TRUE
buckle_lying = FALSE
can_be_drop_prey = FALSE //CHOMP Add
// CHOMPAdd: :c
pain_emote_1p = list("yelp", "whine", "bark", "growl")
pain_emote_3p = list("yelps", "whines", "barks", "growls")
/mob/living/simple_mob/vore/greatwolf/Initialize()
pain_sound = get_species_sound(canine_sounds["pain"])
death_sound = get_species_sound(canine_sounds["death"])
. = ..()
// CHOMPAdd End
/mob/living/simple_mob/vore/greatwolf

View File

@@ -48,8 +48,13 @@
vore_bump_emote = "tries to snap up"
nom_mob = TRUE
can_be_drop_prey = FALSE //CHOMP Add
// CHOMPAdd: :c
pain_sound = canine_pain_sounds
pain_emote_1p = list("yelp", "whine", "bark", "growl")
pain_emote_3p = list("yelps", "whines", "barks", "growls")
death_sound = canine_death_sounds
/datum/category_item/catalogue/fauna/leopardmander
name = "Sivian Fauna - Va'aen Drake"

View File

@@ -49,6 +49,16 @@
vore_bump_emote = "tries to snap up"
can_be_drop_prey = FALSE //CHOMP Add
// CHOMPAdd: :c
pain_emote_1p = list("yelp", "whine", "bark", "growl")
pain_emote_3p = list("yelps", "whines", "barks", "growls")
/mob/living/simple_mob/vore/leopardmander/Initialize()
pain_sound = get_species_sound(canine_sounds["pain"])
death_sound = get_species_sound(canine_sounds["death"])
. = ..()
// CHOMPAdd End
/datum/category_item/catalogue/fauna/leopardmander
name = "Sivian Fauna - Va'aen Drake"

View File

@@ -46,8 +46,19 @@
var/mob/living/carbon/human/friend
var/tamed = 0
var/tame_chance = 50 //It's a fiddy-fiddy default you may get a buddy pal or you may get mauled and ate. Win-win!
can_be_drop_prey = FALSE //CHOMP Add
// CHOMPAdd: :c
pain_emote_1p = list("yelp", "whine", "bark", "growl")
pain_emote_3p = list("yelps", "whines", "barks", "growls")
/mob/living/simple_mob/otie/Initialize()
pain_sound = get_species_sound(canine_sounds["pain"])
death_sound = get_species_sound(canine_sounds["death"])
. = ..()
// CHOMPAdd End
// Activate Noms!

View File

@@ -41,8 +41,19 @@
say_list_type = /datum/say_list/panther
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
can_be_drop_prey = FALSE //CHOMP Add
// CHOMPAdd: :c
pain_emote_1p = list("yowl", "growl")
pain_emote_3p = list("yowls", "growls")
/mob/living/simple_mob/vore/aggressive/panther/Initialize()
pain_sound = get_species_sound(feline_sounds["pain"])
death_sound = get_species_sound(feline_sounds["death"])
. = ..()
// CHOMPAdd End
// Activate Noms!
/mob/living/simple_mob/vore/aggressive/panther

View File

@@ -32,19 +32,30 @@
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
catalogue_data = list(/datum/category_item/catalogue/fauna/wolf)
can_be_drop_prey = FALSE //CHOMP Add
// CHOMPAdd: :c
pain_emote_1p = list("yelp", "whine", "bark", "growl")
pain_emote_3p = list("yelps", "whines", "barks", "growls")
/mob/living/simple_mob/animal/wolf/Initialize()
pain_sound = get_species_sound(canine_sounds["pain"])
death_sound = get_species_sound(canine_sounds["death"])
. = ..()
// CHOMPAdd End
// Activate Noms!
/mob/living/simple_mob/animal/wolf
vore_active = 1
vore_icons = SA_ICON_LIVING
/mob/living/simple_mob/animal/wolf/init_vore() // CHOMPEdit - Allow for customizing bellies on vorecritters
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.vore_sound = "Tauric Swallow" // CHOMPedit - Fancy Vore Sounds
B.release_sound = "Pred Escape" // CHOMPedit - Fancy Vore Sounds

View File

@@ -23,8 +23,19 @@
say_list_type = /datum/say_list/wolfgirl
ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative/wolfgirl
can_be_drop_prey = FALSE //CHOMP Add
// CHOMPAdd: :c
pain_emote_1p = list("yelp", "whine", "bark", "growl")
pain_emote_3p = list("yelps", "whines", "barks", "growls")
/mob/living/simple_mob/vore/wolfgirl/Initialize()
pain_sound = get_species_sound(canine_sounds["pain"])
death_sound = get_species_sound(canine_sounds["death"])
. = ..()
// CHOMPAdd End
// Activate Noms!
/mob/living/simple_mob/vore/wolfgirl

View File

@@ -1,2 +1,3 @@
/mob/living/voice
no_vore = TRUE
no_vore = TRUE
can_pain_emote = FALSE // CHOMPEdit: Sanity/safety

View File

@@ -38,12 +38,20 @@
multilimb_pain_time = world.time + (100 - power)
last_pain_message = message
to_chat(src,message)
// CHOMPAdd: Emote in pain for custom pain, too
if(prob(power) && !isbelly(loc)) // No pain noises inside bellies.
emote("pain")
// CHOMPAdd End
else if(force || (message != last_pain_message) || (world.time >= next_pain_time))
last_pain_message = message
to_chat(src,message)
next_pain_time = world.time + (100 - power)
multilimb_pain_time = world.time + (100 - power)
// CHOMPAdd: Emote in pain for custom pain, too
if(prob(power) && !isbelly(loc)) // No pain noises inside bellies.
emote("pain")
// CHOMPAdd End
/mob/living/carbon/human/proc/handle_pain()
if(stat)

View File

@@ -7,28 +7,57 @@
if(ishuman(user))
var/mob/living/carbon/human/H = user
return "You [pick(H.species.pain_verb_1p)] in pain!"
else
var/mob/living/M = user
if(M.pain_emote_1p) // Sanity
return "You [pick(M.pain_emote_1p)]!"
. = ..()
/decl/emote/audible/pain/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params)
if(ishuman(user))
var/mob/living/carbon/human/H = user
return "[pick(H.species.pain_verb_3p)] in pain!"
else
var/mob/living/M = user
if(M.pain_emote_3p) // Sanity
return "[pick(M.pain_emote_3p)]!"
. = ..()
/decl/emote/audible/pain/get_emote_sound(var/atom/user)
..()
var/mob/living/carbon/human/H = user
if(H.get_gender() == FEMALE)
return list(
"sound" = H.species.female_pain_sound,
"vol" = 60,
"exr" = 10,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.get_gender() == FEMALE)
return list(
"sound" = H.species.female_pain_sound,
"vol" = 60,
"exr" = 10,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
else
return list(
"sound" = H.species.male_pain_sound,
"vol" = 60,
"exr" = 10,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
else
return list(
"sound" = H.species.male_pain_sound,
"vol" = 60,
"exr" = 10,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
var/mob/living/M = user
if((M.get_gender() == FEMALE) && M.female_pain_sound) // If our mob has custom sounds per-gender defined, most won't.
return list(
"sound" = M.female_pain_sound,
"vol" = 80,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
else if((M.get_gender() == MALE) && M.male_pain_sound) // If our mob has custom sounds per-gender defined, most won't.
return list(
"sound" = M.male_pain_sound,
"vol" = 80,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)
else
return list(
"sound" = M.pain_sound,
"vol" = 80,
"volchannel" = VOLUME_CHANNEL_INJ_DEATH
)

View File

@@ -19,14 +19,16 @@
var/digi_allowed = FALSE
var/vanity_base_fit //when shapeshifting using vanity_copy_to, this allows you to have add something so they can go back to their original species fit
male_scream_sound = list('modular_chomp/sound/voice/scream/generic/male/male_scream_1.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_2.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_3.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_4.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_5.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_6.ogg')
female_scream_sound = list('modular_chomp/sound/voice/scream/generic/female/female_scream_1.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_2.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_3.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_4.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_5.ogg')
var/male_gasp_sound = list('modular_chomp/sound/voice/gasp/generic/male/male_gasp1.ogg', 'modular_chomp/sound/voice/gasp/generic/male/male_gasp2.ogg', 'modular_chomp/sound/voice/gasp/generic/male/male_gasp3.ogg')
var/female_gasp_sound = list('modular_chomp/sound/voice/gasp/generic/female/female_gasp1.ogg', 'modular_chomp/sound/voice/gasp/generic/female/female_gasp2.ogg')
var/male_pain_sound = list('modular_chomp/sound/voice/pain/generic/male/male_pain_1.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_2.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_3.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_4.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_5.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_6.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_7.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_8.ogg')
var/female_pain_sound = list('modular_chomp/sound/voice/pain/generic/female/female_pain_1.ogg', 'modular_chomp/sound/voice/pain/generic/female/female_pain_2.ogg', 'modular_chomp/sound/voice/pain/generic/female/female_pain_3.ogg')
var/male_death_sound = list('modular_chomp/sound/voice/death/generic/male/male_death_1.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_2.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_3.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_4.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_5.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_6.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_7.ogg')
var/female_death_sound = list('modular_chomp/sound/voice/death/generic/female/female_death_1.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_2.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_3.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_4.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_5.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_6.ogg')
var/species_sounds
male_scream_sound = null
female_scream_sound = null
var/male_gasp_sound = null
var/female_gasp_sound = null
var/male_pain_sound = null
var/female_pain_sound = null
var/male_death_sound = null
var/female_death_sound = null
// Handles non-standard eyes when using a species that utilizes a custom base icon set.
// Eye data is stored in the head organ, and this needs to be handled specially.
@@ -59,3 +61,14 @@
for(var/datum/trait/env_trait in env_traits)
env_trait.handle_environment_special(H)
return
/datum/species/New()
male_scream_sound = get_species_sound(male_generic_sounds["scream"])
female_scream_sound = get_species_sound(female_generic_sounds["scream"])
male_gasp_sound = get_species_sound(male_generic_sounds["gasp"])
female_gasp_sound = get_species_sound(female_generic_sounds["gasp"])
male_pain_sound = get_species_sound(male_generic_sounds["pain"])
female_pain_sound = get_species_sound(female_generic_sounds["pain"])
male_death_sound = get_species_sound(male_generic_sounds["death"])
female_death_sound = get_species_sound(female_generic_sounds["death"])
..()

View File

@@ -1,5 +1,6 @@
/datum/species/proc/copy_species_sounds(var/datum/species/S, var/species_sounds, var/custom_base)
switch(species_sounds)
get_species_sound(species_sounds)
if("Canine")
S.male_scream_sound = canine_scream_sounds
S.female_scream_sound = canine_scream_sounds
@@ -36,8 +37,21 @@
S.female_pain_sound = female_generic_pain_sounds
S.male_death_sound = male_generic_death_sounds
S.female_death_sound = female_generic_death_sounds
if("Robotic")
S.male_scream_sound = robot_scream_sounds
S.female_scream_sound = robot_scream_sounds
S.male_gasp_sound = null
S.female_gasp_sound = null
S.male_pain_sound = robot_pain_sounds
S.female_pain_sound = robot_pain_sounds
S.male_death_sound = robot_death_sounds
S.female_death_sound = robot_death_sounds
if("Unset") // If our users haven't set anything, pick the sounds based off our custom base - Vulp gets canine, etc etc.
var/datum/species/os = GLOB.all_species[custom_base]
var/datum/species/os
if(!custom_base) // Safety
os = base_species
else
os = GLOB.all_species[custom_base]
S.male_scream_sound = os.male_scream_sound
S.female_scream_sound = os.female_scream_sound
S.male_gasp_sound = os.male_gasp_sound
@@ -46,3 +60,12 @@
S.female_pain_sound = os.female_pain_sound
S.male_death_sound = os.male_death_sound
S.female_death_sound = os.female_death_sound
if("None") // If our users intentionally want no sounds
S.male_scream_sound = null
S.female_scream_sound = null
S.male_gasp_sound = null
S.female_gasp_sound = null
S.male_pain_sound = null
S.female_pain_sound = null
S.male_death_sound = null
S.female_death_sound = null

View File

@@ -14,4 +14,25 @@ Maybe later, gotta figure out a way to click yourself when in a locker etc.
/mob/living/New(var/newloc)
..()
verbs |= /mob/living/proc/click_self
*/
*/
/mob/living
/* TL;DR - the following is a lot of copypasta, but allows us to give simplemobs pain and death sounds.
* Different from carbons, where we check species, here we just check on the mob itself.
* TBD: Maybe port over from species to mob?
*/
var/can_pain_emote = TRUE
var/pain_sound = null
var/female_pain_sound = null
var/male_pain_sound = null
var/pain_emote_1p = null
var/pain_emote_3p = null
/* // Not sure if needed, screams aren't a carbon thing rn.
var/scream_sound = null
var/female_scream_sound = null
var/male_scream_sound = null
var/scream_emote = null
*/
var/death_sound = null
var/male_death_sound = null
var/female_death_sound = null

BIN
sound/voice/raccoon.ogg Normal file

Binary file not shown.

View File

@@ -3297,6 +3297,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\clown.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\cultist_ch.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\humanoid.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\humanoid_ch.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\humanoid_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\pirates.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\pirates_ch.dm"
@@ -4584,7 +4585,6 @@
#include "modular_chomp\code\modules\mob\living\carbon\human\update_icons.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\species.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\species_shapeshift_ch.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\species_vr.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\outsider\vox.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\prommie_blob.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\station.dm"