diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index fc3772e66ff2..16e7c69bc254 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -33,6 +33,8 @@ #define EMOTE_IMPORTANT (1<<2) /// Does the emote not have a message? #define EMOTE_NO_MESSAGE (1<<3) +/// Can only code call this event instead of the player. +#define EMOTE_FORCED_AUDIO (1<<4) // Bitflags for Working Joe emotes /// Working Joe emote diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 6e84052720d4..f8f1fe681cf9 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -262,6 +262,9 @@ return FALSE if(is_type_in_typecache(user, mob_type_blacklist_typecache)) return FALSE + if(intentional) + if(emote_type & EMOTE_FORCED_AUDIO) + return FALSE if(status_check && !is_type_in_typecache(user, mob_type_ignore_stat_typecache)) if(user.stat > stat_allowed) if(!intentional) diff --git a/code/game/sound.dm b/code/game/sound.dm index fab66dc1a1a5..5d53c75ce82b 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -373,6 +373,10 @@ sound = pick('sound/voice/warcry/male_go.ogg', 'sound/voice/warcry/male_attack.ogg', 'sound/voice/warcry/male_charge.ogg', 'sound/voice/warcry/male_charge2.ogg', 'sound/voice/warcry/warcry_male_1.ogg', 'sound/voice/warcry/warcry_male_2.ogg', 'sound/voice/warcry/warcry_male_3.ogg', 'sound/voice/warcry/warcry_male_4.ogg', 'sound/voice/warcry/warcry_male_5.ogg', 'sound/voice/warcry/warcry_male_6.ogg', 'sound/voice/warcry/warcry_male_7.ogg', 'sound/voice/warcry/warcry_male_8.ogg', 'sound/voice/warcry/warcry_male_9.ogg', 'sound/voice/warcry/warcry_male_10.ogg', 'sound/voice/warcry/warcry_male_11.ogg', 'sound/voice/warcry/warcry_male_12.ogg', 'sound/voice/warcry/warcry_male_13.ogg', 'sound/voice/warcry/warcry_male_14.ogg', 'sound/voice/warcry/warcry_male_15.ogg', 'sound/voice/warcry/warcry_male_16.ogg', 'sound/voice/warcry/warcry_male_17.ogg', 'sound/voice/warcry/warcry_male_18.ogg', 'sound/voice/warcry/warcry_male_19.ogg', 'sound/voice/warcry/warcry_male_20.ogg', 'sound/voice/warcry/warcry_male_21.ogg', 'sound/voice/warcry/warcry_male_22.ogg', 'sound/voice/warcry/warcry_male_23.ogg', 'sound/voice/warcry/warcry_male_24.ogg', 'sound/voice/warcry/warcry_male_25.ogg', 'sound/voice/warcry/warcry_male_26.ogg', 'sound/voice/warcry/warcry_male_27.ogg', 'sound/voice/warcry/warcry_male_28.ogg', 'sound/voice/warcry/warcry_male_29.ogg', 'sound/voice/warcry/warcry_male_30.ogg', 'sound/voice/warcry/warcry_male_31.ogg', 'sound/voice/warcry/warcry_male_32.ogg', 'sound/voice/warcry/warcry_male_33.ogg', 'sound/voice/warcry/warcry_male_34.ogg', 'sound/voice/warcry/warcry_male_35.ogg', 5;'sound/voice/warcry/warcry_male_rare_1.ogg', 5;'sound/voice/warcry/warcry_male_rare_2.ogg', 5;'sound/voice/warcry/warcry_male_rare_3.ogg', 5;'sound/voice/warcry/warcry_male_rare_4.ogg', 5;'sound/voice/warcry/warcry_male_rare_5.ogg') if("male_upp_warcry") sound = pick('sound/voice/upp_warcry/warcry_male_1.ogg', 'sound/voice/upp_warcry/warcry_male_2.ogg') + if("male_preburst") + sound = pick("sound/voice/human_male_preburst1.ogg", 'sound/voice/human_male_preburst2.ogg', 'sound/voice/human_male_preburst3.ogg', 'sound/voice/human_male_preburst4.ogg', 'sound/voice/human_male_preburst5.ogg', 'sound/voice/human_male_preburst6.ogg', 'sound/voice/human_male_preburst7.ogg', 'sound/voice/human_male_preburst8.ogg', 'sound/voice/human_male_preburst9.ogg') + if("male_hugged") + sound = pick("sound/voice/human_male_facehugged1.ogg", 'sound/voice/human_male_facehugged2.ogg', 'sound/voice/human_male_facehugged3.ogg') if("female_scream") sound = pick('sound/voice/human_female_scream_1.ogg','sound/voice/human_female_scream_2.ogg','sound/voice/human_female_scream_3.ogg','sound/voice/human_female_scream_4.ogg',5;'sound/voice/human_female_scream_5.ogg') if("female_pain") @@ -383,6 +387,10 @@ sound = pick('sound/voice/warcry/female_charge.ogg', 'sound/voice/warcry/female_yell1.ogg', 'sound/voice/warcry/warcry_female_1.ogg', 'sound/voice/warcry/warcry_female_2.ogg', 'sound/voice/warcry/warcry_female_3.ogg', 'sound/voice/warcry/warcry_female_4.ogg', 'sound/voice/warcry/warcry_female_5.ogg', 'sound/voice/warcry/warcry_female_6.ogg', 'sound/voice/warcry/warcry_female_7.ogg', 'sound/voice/warcry/warcry_female_8.ogg', 'sound/voice/warcry/warcry_female_9.ogg', 'sound/voice/warcry/warcry_female_10.ogg', 'sound/voice/warcry/warcry_female_11.ogg', 'sound/voice/warcry/warcry_female_12.ogg', 'sound/voice/warcry/warcry_female_13.ogg', 'sound/voice/warcry/warcry_female_14.ogg', 'sound/voice/warcry/warcry_female_15.ogg', 'sound/voice/warcry/warcry_female_16.ogg', 'sound/voice/warcry/warcry_female_17.ogg', 'sound/voice/warcry/warcry_female_18.ogg', 'sound/voice/warcry/warcry_female_19.ogg', 'sound/voice/warcry/warcry_female_20.ogg') if("female_upp_warcry") sound = pick('sound/voice/upp_warcry/warcry_female_1.ogg', 'sound/voice/upp_warcry/warcry_female_2.ogg') + if("female_preburst") + sound = pick("sound/voice/human_female_preburst1.ogg", 'sound/voice/human_female_preburst2.ogg', 'sound/voice/human_female_preburst3.ogg', 'sound/voice/human_female_preburst4.ogg', 'sound/voice/human_female_preburst5.ogg', 'sound/voice/human_female_preburst6.ogg', 'sound/voice/human_female_preburst7.ogg') + if("female_hugged") + sound = pick("sound/voice/human_female_facehugged1.ogg", 'sound/voice/human_female_facehugged2.ogg') if("rtb_handset") sound = pick('sound/machines/telephone/rtb_handset_1.ogg', 'sound/machines/telephone/rtb_handset_2.ogg', 'sound/machines/telephone/rtb_handset_3.ogg', 'sound/machines/telephone/rtb_handset_4.ogg', 'sound/machines/telephone/rtb_handset_5.ogg') if("talk_phone") @@ -396,6 +404,8 @@ sound = pick('sound/voice/cat_meow_1.ogg','sound/voice/cat_meow_2.ogg','sound/voice/cat_meow_3.ogg','sound/voice/cat_meow_4.ogg','sound/voice/cat_meow_5.ogg','sound/voice/cat_meow_6.ogg','sound/voice/cat_meow_7.ogg') if("pred_pain") sound = pick('sound/voice/pred_pain1.ogg','sound/voice/pred_pain2.ogg','sound/voice/pred_pain3.ogg','sound/voice/pred_pain4.ogg','sound/voice/pred_pain5.ogg',5;'sound/voice/pred_pain_rare1.ogg') + if("pred_preburst") + sound = pick('sound/voice/pred_pain_rare1.ogg') if("clownstep") sound = pick('sound/effects/clownstep1.ogg', 'sound/effects/clownstep2.ogg') if("giant_lizard_growl") diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 7da0376bbef1..785cc7b3cd2c 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -219,6 +219,7 @@ var/pain_message = pick("OW!!", "AGH!!", "ARGH!!", "OUCH!!", "ACK!!", "OUF!") user.langchat_speech(pain_message, group, GLOB.all_languages, skip_language_check = TRUE, animation_style = LANGCHAT_FAST_POP, additional_styles = list("langchat_yell")) + /datum/emote/living/carbon/human/salute key = "salute" key_third_person = "salutes" @@ -382,3 +383,24 @@ return user.show_speech_bubble("scream") + +/datum/emote/living/carbon/human/burstscream + key = "burstscream" + message = "screams in agony!" + emote_type = EMOTE_FORCED_AUDIO|EMOTE_AUDIBLE|EMOTE_VISIBLE + stat_allowed = UNCONSCIOUS + +/datum/emote/living/carbon/human/burstscream/get_sound(mob/living/carbon/human/user) + if(!user.species) + return + if(user.species.burstscreams[user.gender]) + return user.species.burstscreams[user.gender] + if(user.species.burstscreams[NEUTER]) + return user.species.burstscreams[NEUTER] + +/datum/emote/living/carbon/human/burstscream/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(!.) + return FALSE + + user.show_speech_bubble("pain") diff --git a/code/modules/mob/living/carbon/human/species/human.dm b/code/modules/mob/living/carbon/human/species/human.dm index 320aa9504826..e8fa59cb062b 100644 --- a/code/modules/mob/living/carbon/human/species/human.dm +++ b/code/modules/mob/living/carbon/human/species/human.dm @@ -91,6 +91,8 @@ uses_skin_color = TRUE special_body_types = TRUE + burstscreams = list(MALE = "male_preburst", FEMALE = "female_preburst") + /datum/species/human/handle_on_fire(humanoidmob) . = ..() INVOKE_ASYNC(humanoidmob, TYPE_PROC_REF(/mob, emote), pick("pain", "scream")) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 42338c2c40a2..a38a49f9a784 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -119,6 +119,9 @@ var/has_species_tab_items = FALSE + //Species specific emote sound lists + var/list/burstscreams = list() + /datum/species/New() if(unarmed_type) unarmed = new unarmed_type() diff --git a/code/modules/mob/living/carbon/human/species/yautja/_species.dm b/code/modules/mob/living/carbon/human/species/yautja/_species.dm index 042c9917af61..9a7d36f68efd 100644 --- a/code/modules/mob/living/carbon/human/species/yautja/_species.dm +++ b/code/modules/mob/living/carbon/human/species/yautja/_species.dm @@ -34,6 +34,8 @@ bloodsplatter_type = /obj/effect/temp_visual/dir_setting/bloodsplatter/yautjasplatter + burstscreams = list(MALE = "pred_preburst", FEMALE = "pred_preburst") + heat_level_1 = 500 heat_level_2 = 700 heat_level_3 = 1000 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 6b2739780288..8586d65cc25d 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -694,11 +694,14 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, /mob/living/carbon/human/update_burst() remove_overlay(BURST_LAYER) var/image/standing + var/bursting_icon = "stand" + if(isyautja(src)) + bursting_icon = "yautja_stand" switch(chestburst) if(1) - standing = image("icon" = 'icons/mob/xenos/effects.dmi',"icon_state" = "burst_stand", "layer" = -BURST_LAYER) + standing = image("icon" = 'icons/mob/xenos/effects.dmi',"icon_state" = "burst_[bursting_icon]", "layer" = -BURST_LAYER) if(2) - standing = image("icon" = 'icons/mob/xenos/effects.dmi',"icon_state" = "bursted_stand", "layer" = -BURST_LAYER) + standing = image("icon" = 'icons/mob/xenos/effects.dmi',"icon_state" = "bursted_[bursting_icon]", "layer" = -BURST_LAYER) else return overlays_standing[BURST_LAYER] = standing diff --git a/code/modules/mob/living/carbon/xenomorph/Embryo.dm b/code/modules/mob/living/carbon/xenomorph/Embryo.dm index 4a82c4fb0b86..0567d4aeb6dd 100644 --- a/code/modules/mob/living/carbon/xenomorph/Embryo.dm +++ b/code/modules/mob/living/carbon/xenomorph/Embryo.dm @@ -309,20 +309,18 @@ if(loc != victim) victim.chestburst = 0 return + if(ishuman(victim) || isyautja(victim)) + victim.emote("burstscream") + sleep(25) //Sound delay victim.update_burst() - sleep(6) //Sprite delay + sleep(10) //Sprite delay if(!victim || !victim.loc) return if(loc != victim) - victim.chestburst = 0 //if a doc removes the larva during the sleep(6), we must remove the 'bursting' overlay on the human + victim.chestburst = 0 //if a doc removes the larva during the sleep(10), we must remove the 'bursting' overlay on the human victim.update_burst() return - if(isyautja(victim)) - victim.emote("roar") - else - victim.emote("scream") - var/burstcount = 0 victim.spawn_gibs() diff --git a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm index 9a87f10d74a3..2ee9642c6067 100644 --- a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm +++ b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm @@ -293,7 +293,7 @@ human.disable_lights() human.disable_special_items() if(ishuman_strict(human)) - playsound(loc, human.gender == "male" ? 'sound/misc/facehugged_male.ogg' : 'sound/misc/facehugged_female.ogg' , 25, 0) + playsound(loc, human.gender == "male" ? "male_hugged" : "female_hugged" , 25, 0) else if(isyautja(human)) playsound(loc, 'sound/voice/pred_facehugged.ogg', 65, FALSE) if(!sterile) diff --git a/icons/mob/xenos/effects.dmi b/icons/mob/xenos/effects.dmi index 132c5f78b0d7..dfdcbf95d54b 100644 Binary files a/icons/mob/xenos/effects.dmi and b/icons/mob/xenos/effects.dmi differ diff --git a/sound/misc/facehugged_female.ogg b/sound/voice/human_female_facehugged1.ogg similarity index 100% rename from sound/misc/facehugged_female.ogg rename to sound/voice/human_female_facehugged1.ogg diff --git a/sound/voice/human_female_facehugged2.ogg b/sound/voice/human_female_facehugged2.ogg new file mode 100644 index 000000000000..01352c449d9f Binary files /dev/null and b/sound/voice/human_female_facehugged2.ogg differ diff --git a/sound/voice/human_female_preburst1.ogg b/sound/voice/human_female_preburst1.ogg new file mode 100644 index 000000000000..8e4923eb93f4 Binary files /dev/null and b/sound/voice/human_female_preburst1.ogg differ diff --git a/sound/voice/human_female_preburst2.ogg b/sound/voice/human_female_preburst2.ogg new file mode 100644 index 000000000000..f4e8990f49d8 Binary files /dev/null and b/sound/voice/human_female_preburst2.ogg differ diff --git a/sound/voice/human_female_preburst3.ogg b/sound/voice/human_female_preburst3.ogg new file mode 100644 index 000000000000..481063183201 Binary files /dev/null and b/sound/voice/human_female_preburst3.ogg differ diff --git a/sound/voice/human_female_preburst4.ogg b/sound/voice/human_female_preburst4.ogg new file mode 100644 index 000000000000..6d2141b47ba3 Binary files /dev/null and b/sound/voice/human_female_preburst4.ogg differ diff --git a/sound/voice/human_female_preburst5.ogg b/sound/voice/human_female_preburst5.ogg new file mode 100644 index 000000000000..8cab84545179 Binary files /dev/null and b/sound/voice/human_female_preburst5.ogg differ diff --git a/sound/voice/human_female_preburst6.ogg b/sound/voice/human_female_preburst6.ogg new file mode 100644 index 000000000000..8f50196853e5 Binary files /dev/null and b/sound/voice/human_female_preburst6.ogg differ diff --git a/sound/voice/human_female_preburst7.ogg b/sound/voice/human_female_preburst7.ogg new file mode 100644 index 000000000000..691115dfe098 Binary files /dev/null and b/sound/voice/human_female_preburst7.ogg differ diff --git a/sound/misc/facehugged_male.ogg b/sound/voice/human_male_facehugged1.ogg similarity index 100% rename from sound/misc/facehugged_male.ogg rename to sound/voice/human_male_facehugged1.ogg diff --git a/sound/voice/human_male_facehugged2.ogg b/sound/voice/human_male_facehugged2.ogg new file mode 100644 index 000000000000..b701e1f50ea4 Binary files /dev/null and b/sound/voice/human_male_facehugged2.ogg differ diff --git a/sound/voice/human_male_facehugged3.ogg b/sound/voice/human_male_facehugged3.ogg new file mode 100644 index 000000000000..6d1292d0918a Binary files /dev/null and b/sound/voice/human_male_facehugged3.ogg differ diff --git a/sound/voice/human_male_preburst1.ogg b/sound/voice/human_male_preburst1.ogg new file mode 100644 index 000000000000..6f3e76997acc Binary files /dev/null and b/sound/voice/human_male_preburst1.ogg differ diff --git a/sound/voice/human_male_preburst2.ogg b/sound/voice/human_male_preburst2.ogg new file mode 100644 index 000000000000..40aea6a8ae8d Binary files /dev/null and b/sound/voice/human_male_preburst2.ogg differ diff --git a/sound/voice/human_male_preburst3.ogg b/sound/voice/human_male_preburst3.ogg new file mode 100644 index 000000000000..813c123ac8f2 Binary files /dev/null and b/sound/voice/human_male_preburst3.ogg differ diff --git a/sound/voice/human_male_preburst4.ogg b/sound/voice/human_male_preburst4.ogg new file mode 100644 index 000000000000..b58b7e6cabd6 Binary files /dev/null and b/sound/voice/human_male_preburst4.ogg differ diff --git a/sound/voice/human_male_preburst5.ogg b/sound/voice/human_male_preburst5.ogg new file mode 100644 index 000000000000..1d54adcaa7aa Binary files /dev/null and b/sound/voice/human_male_preburst5.ogg differ diff --git a/sound/voice/human_male_preburst6.ogg b/sound/voice/human_male_preburst6.ogg new file mode 100644 index 000000000000..c5b0f3d27a56 Binary files /dev/null and b/sound/voice/human_male_preburst6.ogg differ diff --git a/sound/voice/human_male_preburst7.ogg b/sound/voice/human_male_preburst7.ogg new file mode 100644 index 000000000000..adc8ea3a8c7b Binary files /dev/null and b/sound/voice/human_male_preburst7.ogg differ diff --git a/sound/voice/human_male_preburst8.ogg b/sound/voice/human_male_preburst8.ogg new file mode 100644 index 000000000000..f52d9da063b9 Binary files /dev/null and b/sound/voice/human_male_preburst8.ogg differ diff --git a/sound/voice/human_male_preburst9.ogg b/sound/voice/human_male_preburst9.ogg new file mode 100644 index 000000000000..c10942822113 Binary files /dev/null and b/sound/voice/human_male_preburst9.ogg differ