Reapply "Merge branch 'master' into trash-eat-Mk2"

This reverts commit d638582401.
This commit is contained in:
MrSky12
2024-05-15 23:28:30 +02:00
parent d638582401
commit 6ba955d90c
82 changed files with 1090 additions and 218 deletions

View File

@@ -893,6 +893,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=balls_fluid;task=input'>Femcum</a>"
if(/datum/reagent/consumable/alienhoney)
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=balls_fluid;task=input'>Honey</a>"
if(/datum/reagent/consumable/nutriment)
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=balls_fluid;task=input'>Nutriment</a>"
else
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=balls_fluid;task=input'>Nothing?</a>"
//This else is a safeguard for errors, and if it happened, they wouldn't be able to change this pref,
@@ -940,6 +942,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=breasts_fluid;task=input'>Honey</a>"
if(/datum/reagent/consumable/pinkmilk)
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=breasts_fluid;task=input'>Strawberry Milk</a>"
if(/datum/reagent/consumable/nutriment)
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=breasts_fluid;task=input'>Nutriment</a>"
else
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=breasts_fluid;task=input'>Nothing?</a>"
//This else is a safeguard for errors, and if it happened, they wouldn't be able to change this pref,
@@ -1055,6 +1059,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>Weight Gain - Weapons:</b><a href='?_src_=prefs;preference=weight_gain_weapons'>[weight_gain_weapons == TRUE ? "Enabled" : "Disabled"]</a><BR>"
dat += "<b>Weight Gain - Magic:</b><a href='?_src_=prefs;preference=weight_gain_magic'>[weight_gain_magic == TRUE ? "Enabled" : "Disabled"]</a><BR>"
dat += "<b>Weight Gain - Viruses:</b><a href='?_src_=prefs;preference=weight_gain_viruses'>[weight_gain_viruses == TRUE ? "Enabled" : "Disabled"]</a><BR>"
dat += "<b>Extreme Weight Gain:</b><a href='?_src_=prefs;preference=weight_gain_extreme'>[weight_gain_extreme == TRUE ? "Enabled" : "Disabled"]</a><BR>"
//Add the Hyper stuff below here
dat += "<h2>Hyper Preferences</h2>"
@@ -2381,6 +2386,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["balls_fluid"] = /datum/reagent/consumable/alienhoney
if("Strawberry Milk")
features["balls_fluid"] = /datum/reagent/consumable/pinkmilk
if("Nutriment")
features["balls_fluid"] = /datum/reagent/consumable/nutriment
if("egg_size")
var/new_size
@@ -2426,6 +2433,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["breasts_fluid"] = /datum/reagent/consumable/alienhoney
if("Strawberry Milk")
features["breasts_fluid"] = /datum/reagent/consumable/pinkmilk
if("Nutriment")
features["breasts_fluid"] = /datum/reagent/consumable/nutriment
if("breasts_color")
var/new_breasts_color = input(user, "Breast Color:", "Character Preference", "#"+features["breasts_color"]) as color|null
@@ -2615,6 +2624,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
weight_gain_magic = !weight_gain_magic
if("weight_gain_viruses")
weight_gain_viruses = !weight_gain_viruses
if("weight_gain_extreme")
weight_gain_extreme = !weight_gain_extreme
if("noncon_weight_gain")
noncon_weight_gain = !noncon_weight_gain
if("max_fatness")

View File

@@ -153,6 +153,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["weight_gain_magic"] >> weight_gain_magic
S["weight_gain_viruses"] >> weight_gain_viruses
S["weight_gain_weapons"] >> weight_gain_weapons
S["weight_gain_extreme"] >> weight_gain_extreme
S["wg_rate"] >> wg_rate
S["wl_rate"] >> wl_rate
S["noncon_weight_gain"] >> noncon_weight_gain
@@ -292,6 +293,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["weight_gain_viruses"], weight_gain_viruses)
WRITE_FILE(S["weight_gain_chems"], weight_gain_chems)
WRITE_FILE(S["weight_gain_weapons"], weight_gain_weapons)
WRITE_FILE(S["weight_gain_extreme"], weight_gain_extreme)
WRITE_FILE(S["wg_rate"], wg_rate)
WRITE_FILE(S["wl_rate"], wl_rate)
WRITE_FILE(S["noncon_weight_gain"], noncon_weight_gain)

View File

@@ -58,6 +58,23 @@
message = "mumbles!"
emote_type = EMOTE_AUDIBLE
/datum/emote/living/carbon/human/scream
key = "scream"
key_third_person = "screams"
message = "screams!"
emote_type = EMOTE_AUDIBLE
//cooldown = 10 SECONDS
vary = TRUE
/datum/emote/living/carbon/human/scream/get_sound(mob/living/user)
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
if(H.mind?.miming)
return
if(H.dna?.species) //Stealing yog's implementation, lol
return H.dna.species.get_scream_sound(H)
/datum/emote/living/carbon/human/pale
key = "pale"
message = "goes pale for a second."
@@ -159,36 +176,44 @@
var/turf/T = loc
T.Entered(src)
/datum/emote/sound/human
mob_type_allowed_typecache = list(/mob/living/carbon/human)
emote_type = EMOTE_AUDIBLE
/datum/emote/living/carbon/human/robot_tongue/can_run_emote(mob/user, status_check, intentional)
//var/obj/item/organ/tongue/T = user.getorganslot("tongue")
//return T?.status == ORGAN_ROBOTIC && ..()
return ..() //Remove this if we do want to restrict this to synthetic tongues.
/datum/emote/sound/human/buzz
/datum/emote/living/carbon/human/robot_tongue/beep
key = "beep"
key_third_person = "beeps"
message = "beeps."
message_param = "beeps at %t."
sound = 'sound/machines/twobeep.ogg'
/datum/emote/living/carbon/human/robot_tongue/buzz
key = "buzz"
key_third_person = "buzzes"
message = "buzzes."
message_param = "buzzes at %t."
sound = 'sound/machines/buzz-sigh.ogg'
/datum/emote/sound/human/buzz2
/datum/emote/living/carbon/human/robot_tongue/buzz2
key = "buzz2"
message = "buzzes twice."
sound = 'sound/machines/buzz-two.ogg'
/datum/emote/sound/human/ping
/datum/emote/living/carbon/human/robot_tongue/ping
key = "ping"
key_third_person = "pings"
message = "pings."
message_param = "pings at %t."
sound = 'sound/machines/ping.ogg'
/datum/emote/sound/human/chime
/datum/emote/living/carbon/human/robot_tongue/chime
key = "chime"
key_third_person = "chimes"
message = "chimes."
sound = 'sound/machines/chime.ogg'
/datum/emote/sound/human/squeak
/datum/emote/living/carbon/human/robot_tongue/squeak
key = "squeak"
key_third_person = "squeaks"
message = "lets out a squeak."

View File

@@ -3,91 +3,150 @@
GLOBAL_LIST_EMPTY(roundstart_races)
/datum/species
var/id // if the game needs to manually check your race to do something not included in a proc here, it will use this
var/limbs_id //this is used if you want to use a different species limb sprites. Mainly used for angels as they look like humans.
var/name // this is the fluff name. these will be left generic (such as 'Lizardperson' for the lizard race) so servers can change them to whatever
var/default_color = "#FFF" // if alien colors are disabled, this is the color that will be used by that race
var/sexes = 1 // whether or not the race has sexual characteristics. at the moment this is only 0 for skeletons and shadows
/// if the game needs to manually check your race to do something not included in a proc here, it will use this
var/id
///this is used if you want to use a different species limb sprites. Mainly used for angels as they look like humans.
var/limbs_id
/// this is the fluff name. these will be left generic (such as 'Lizardperson' for the lizard race) so servers can change them to whatever
var/name
/// if alien colors are disabled, this is the color that will be used by that race
var/default_color = "#FFF"
/// whether or not the race has sexual characteristics. at the moment this is only 0 for skeletons and shadows
var/sexes = 1
///A list that contains pixel offsets for various clothing features, if your species is a different shape
var/list/offset_features = list(OFFSET_UNIFORM = list(0,0), OFFSET_ID = list(0,0), OFFSET_GLOVES = list(0,0), OFFSET_GLASSES = list(0,0), OFFSET_EARS = list(0,0), OFFSET_SHOES = list(0,0), OFFSET_S_STORE = list(0,0), OFFSET_FACEMASK = list(0,0), OFFSET_HEAD = list(0,0), OFFSET_FACE = list(0,0), OFFSET_BELT = list(0,0), OFFSET_BACK = list(0,0), OFFSET_SUIT = list(0,0), OFFSET_NECK = list(0,0))
var/hair_color // this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color
var/hair_alpha = 255 // the alpha used by the hair. 255 is completely solid, 0 is transparent.
/// this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color
var/hair_color
/// the alpha used by the hair. 255 is completely solid, 0 is transparent.
var/hair_alpha = 255
var/wing_color
// GS13: Hair gradients from Skyrat
var/grad_style // The gradient style used for the mob's hair.
var/grad_color // The gradient color used to color the gradient.
/// The gradient style used for the mob's hair.
var/grad_style
/// The gradient color used to color the gradient.
var/grad_color
var/use_skintones = 0 // does it use skintones or not? (spoiler alert this is only used by humans)
var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id.
var/exotic_bloodtype = "" //If your race uses a non standard bloodtype (A+, O-, AB-, etc)
var/meat = /obj/item/reagent_containers/food/snacks/meat/slab/human //What the species drops on gibbing
/// does it use skintones or not? (spoiler alert this is only used by humans)
var/use_skintones = FALSE
/// If your race wants to bleed something other than bog standard blood, change this to reagent id.
var/exotic_blood = ""
///If your race uses a non standard bloodtype (A+, O-, AB-, etc)
var/exotic_bloodtype = ""
///What the species drops on gibbing
var/meat = /obj/item/reagent_containers/food/snacks/meat/slab/human
var/list/gib_types = list(/obj/effect/gibspawner/human, /obj/effect/gibspawner/human/bodypartless)
///What, if any, leather will be droppe
var/skinned_type
///What kind of foods the species loves
var/liked_food = NONE
///What kind of foods the species dislikes!
var/disliked_food = GROSS
///What kind of foods cause harm to the species
var/toxic_food = TOXIC
var/list/no_equip = list() // slots the race can't equip stuff to
var/nojumpsuit = 0 // this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids
var/blacklisted = 0 //Flag to exclude from green slime core species.
var/dangerous_existence //A flag for transformation spells that tells them "hey if you turn a person into one of these without preperation, they'll probably die!"
var/say_mod = "says" // affects the speech message
var/list/default_features = list() // Default mutant bodyparts for this species. Don't forget to set one for every mutant bodypart you allow this species to have.
var/list/mutant_bodyparts = list() // Visible CURRENT bodyparts that are unique to a species. DO NOT USE THIS AS A LIST OF ALL POSSIBLE BODYPARTS AS IT WILL FUCK SHIT UP! Changes to this list for non-species specific bodyparts (ie cat ears and tails) should be assigned at organ level if possible. Layer hiding is handled by handle_mutant_bodyparts() below.
var/list/mutant_organs = list() //Internal organs that are unique to this race.
var/speedmod = 0 // this affects the race's speed. positive numbers make it move slower, negative numbers make it move faster
var/armor = 0 // overall defense for the race... or less defense, if it's negative.
var/brutemod = 1 // multiplier for brute damage
var/burnmod = 1 // multiplier for burn damage
var/coldmod = 1 // multiplier for cold damage
var/heatmod = 1 // multiplier for heat damage
var/stunmod = 1 // multiplier for stun duration
var/punchdamagelow = 0 //lowest possible punch damage
var/punchdamagehigh = 9 //highest possible punch damage
var/punchstunthreshold = 9//damage at which punches from this race will stun //yes it should be to the attacked race but it's not useful that way even if it's logical
var/siemens_coeff = 1 //base electrocution coefficient
var/damage_overlay_type = "human" //what kind of damage overlays (if any) appear on our species when wounded?
var/fixed_mut_color = "" //to use MUTCOLOR with a fixed color that's independent of dna.feature["mcolor"]
var/inert_mutation = DWARFISM //special mutation that can be found in the genepool. Dont leave empty or changing species will be a headache
var/list/special_step_sounds //Sounds to override barefeet walkng
var/grab_sound //Special sound for grabbing
/// slots the race can't equip stuff to
var/list/no_equip = list()
// this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids
var/nojumpsuit = 0
///Flag to exclude from green slime core species.
var/blacklisted = 0
///A flag for transformation spells that tells them "hey if you turn a person into one of these without preperation, they'll probably die!"
var/dangerous_existence
/// affects the speech message
var/say_mod = "says"
/// Default mutant bodyparts for this species. Don't forget to set one for every mutant bodypart you allow this species to have.
var/list/default_features = list()
/// Visible CURRENT bodyparts that are unique to a species. DO NOT USE THIS AS A LIST OF ALL POSSIBLE BODYPARTS AS IT WILL FUCK SHIT UP! Changes to this list for non-species specific bodyparts (ie cat ears and tails) should be assigned at organ level if possible. Layer hiding is handled by handle_mutant_bodyparts() below.
var/list/mutant_bodyparts = list()
///Internal organs that are unique to this race.
var/list/mutant_organs = list()
/// this affects the race's speed. positive numbers make it move slower, negative numbers make it move faster
var/speedmod = 0
/// overall defense for the race... or less defense, if it's negative.
var/armor = 0
/// multiplier for brute damage
var/brutemod = 1
/// multiplier for burn damage
var/burnmod = 1
/// multiplier for cold damage
var/coldmod = 1
/// multiplier for heat damage
var/heatmod = 1
/// multiplier for stun duration
var/stunmod = 1
///lowest possible punch damage
var/punchdamagelow = 0
///highest possible punch damage
var/punchdamagehigh = 9
///damage at which punches from this race will stun //yes it should be to the attacked race but it's not useful that way even if it's logical
var/punchstunthreshold = 9
///base electrocution coefficient
var/siemens_coeff = 1
///what kind of damage overlays (if any) appear on our species when wounded?
var/damage_overlay_type = "human"
///to use MUTCOLOR with a fixed color that's independent of dna.feature["mcolor"]
var/fixed_mut_color = ""
///special mutation that can be found in the genepool. Dont leave empty or changing species will be a headache
var/inert_mutation = DWARFISM
///Sounds to override barefeet walkng
var/list/special_step_sounds
///Special sound for grabbing
var/grab_sound
/// audio of a species' scream //Stolen from yogs lol
var/screamsound
// species-only traits. Can be found in DNA.dm
/// species-only traits. Can be found in DNA.dm
var/list/species_traits = list()
// generic traits tied to having the species
/// generic traits tied to having the species
var/list/inherent_traits = list()
///biotypes, used for viruses and the like
var/list/inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID
var/attack_verb = "punch" // punch-specific attack verb
/// punch-specific attack verb
var/attack_verb = "punch"
///the melee attack sound
var/sound/attack_sound = 'sound/weapons/punch1.ogg'
///the swing and miss sound
var/sound/miss_sound = 'sound/weapons/punchmiss.ogg'
var/mob/living/list/ignored_by = list() // list of mobs that will ignore this species
/// list of mobs that will ignore this species
var/mob/living/list/ignored_by = list()
//Breathing!
var/obj/item/organ/lungs/mutantlungs = null
///what type of gas is breathed
var/breathid = "o2"
///Replaces default brain with a different organ
var/obj/item/organ/brain/mutant_brain = /obj/item/organ/brain
///Replaces default heart with a different organ
var/obj/item/organ/heart/mutant_heart = /obj/item/organ/heart
///Replaces default lungs with a different organ
var/obj/item/organ/lungs/mutantlungs = null
///Replaces default eyes with a different organ
var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes
///Replaces default ears with a different organ
var/obj/item/organ/ears/mutantears = /obj/item/organ/ears
var/obj/item/mutanthands
///Replaces default tongue with a different organ
var/obj/item/organ/tongue/mutanttongue = /obj/item/organ/tongue
var/obj/item/organ/tail/mutanttail = null
///Replaces default liver with a different organ
var/obj/item/organ/liver/mutantliver
///Replaces default stomach with a different organ
var/obj/item/organ/stomach/mutantstomach
///Forces a species tail
var/obj/item/organ/tail/mutanttail = null
///Forces an item into this species' hands. Only an honorary mutantthing because this is not an organ and not loaded in the same way, you've been warned to do your research.
var/obj/item/mutanthands
var/override_float = FALSE
//Citadel snowflake
var/fixed_mut_color2 = ""
var/fixed_mut_color3 = ""
var/whitelisted = 0 //Is this species restricted to certain players?
var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666") Spaces & capitalization can be included or ignored entirely for each key as it checks for both.
///Is this species restricted to certain players?
var/whitelisted = 0
///List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666") Spaces & capitalization can be included or ignored entirely for each key as it checks for both.
var/whitelist = list()
var/icon_limbs //Overrides the icon used for the limbs of this species. Mainly for downstream, and also because hardcoded icons disgust me. Implemented and maintained as a favor in return for a downstream's implementation of synths.
///Overrides the icon used for the limbs of this species. Mainly for downstream, and also because hardcoded icons disgust me. Implemented and maintained as a favor in return for a downstream's implementation of synths.
var/icon_limbs
/// Our default override for typing indicator state
var/typing_indicator_state
@@ -2451,3 +2510,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
/datum/species/proc/start_wagging_tail(mob/living/carbon/human/H)
/datum/species/proc/stop_wagging_tail(mob/living/carbon/human/H)
//Gainstation add: Screamcode I stole from yogs
/datum/species/proc/get_scream_sound(mob/living/carbon/human/H)
if(islist(screamsound))
return pick(screamsound)
return screamsound
//Gainstation add End

View File

@@ -13,6 +13,8 @@
liked_food = MEAT | RAW | DAIRY
disliked_food = FRIED | FRUIT
screamsound = list('sound/voice/catpeople/scream1.ogg', 'sound/voice/catpeople/scream2.ogg', 'sound/voice/catpeople/scream3.ogg')
/datum/species/human/felinid/qualifies_for_rank(rank, list/features)
return TRUE

View File

@@ -12,6 +12,8 @@
liked_food = GROSS
exotic_bloodtype = "BUG"
screamsound = 'modular_citadel/sound/voice/scream_moth.ogg'
/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
if(chem.type == /datum/reagent/toxin/pestkiller)
H.adjustToxLoss(3)

View File

@@ -10,6 +10,18 @@
disliked_food = GROSS | RAW
liked_food = JUNKFOOD | FRIED
var/list/female_screams = list('sound/voice/human/femalescream_1.ogg', 'sound/voice/human/femalescream_2.ogg', 'sound/voice/human/femalescream_3.ogg', 'sound/voice/human/femalescream_4.ogg', 'sound/voice/human/femalescream_5.ogg')
var/list/male_screams = list('sound/voice/human/malescream_1.ogg', 'sound/voice/human/malescream_2.ogg', 'sound/voice/human/malescream_3.ogg', 'sound/voice/human/malescream_4.ogg', 'sound/voice/human/malescream_5.ogg')
/datum/species/human/get_scream_sound(mob/living/carbon/human/H)
if(H.gender == FEMALE)
return pick(female_screams)
else
if(prob(1))
return sound = pick('modular_citadel/sound/voice/scream_m1.ogg', 'modular_citadel/sound/voice/scream_m2.ogg', \
'sound/voice/human/wilhelm_scream.ogg')
return pick(male_screams)
/datum/species/human/qualifies_for_rank(rank, list/features)
return TRUE //Pure humans are always allowed in all roles.

View File

@@ -23,6 +23,8 @@
liked_food = GROSS | MEAT
inert_mutation = FIREBREATH
screamsound = 'modular_citadel/sound/voice/scream_lizard.ogg'
/datum/species/lizard/after_equip_job(datum/job/J, mob/living/carbon/human/H)
H.grant_language(/datum/language/draconic)

View File

@@ -15,6 +15,8 @@
disliked_food = FRUIT | GROSS
toxic_food = MEAT | RAW
exotic_bloodtype = "BUG"
screamsound = 'sound/voice/moth/scream_moth.ogg'
/datum/species/moth/on_species_gain(mob/living/carbon/C)
. = ..()

View File

@@ -13,6 +13,8 @@
damage_overlay_type = ""//let's not show bloody wounds or burns over bones.
disliked_food = NONE
liked_food = GROSS | MEAT | RAW | DAIRY
screamsound = 'modular_citadel/sound/voice/scream_skeleton.ogg'
/datum/species/skeleton/check_roundstart_eligible()
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])

View File

@@ -16,6 +16,8 @@
var/list/initial_inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOTHIRST,TRAIT_NOLIMBDISABLE,TRAIT_NOBREATH)
var/disguise_fail_health = 75 //When their health gets to this level their synthflesh partially falls off
var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged
screamsound = list('goon/sound/robot_scream.ogg', 'modular_citadel/sound/voice/scream_silicon.ogg')
/datum/species/synth/military
name = "Military Synth"

View File

@@ -277,6 +277,12 @@
message = "screams."
message_mime = "acts out a scream!"
emote_type = EMOTE_AUDIBLE
mob_type_blacklist_typecache = list(/mob/living/carbon/human) //Humans get specialized scream.
/datum/emote/living/scream/select_message_type(mob/user, intentional)
. = ..()
if(!intentional && isanimal(user))
return "makes a loud and pained whimper."
/datum/emote/living/scowl
key = "scowl"
@@ -525,13 +531,13 @@
to_chat(user, message)
/datum/emote/sound/beep
/datum/emote/beep
key = "beep"
key_third_person = "beeps"
message = "beeps."
message_param = "beeps at %t."
sound = 'sound/machines/twobeep.ogg'
mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon, /mob/living/carbon/human)
mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon)
/datum/emote/living/circle
key = "circle"
@@ -561,91 +567,3 @@
to_chat(user, "<span class='notice'>You ready your slapping hand.</span>")
else
to_chat(user, "<span class='warning'>You're incapable of slapping in your current state.</span>")
//Carl wuz here
//FUCK YOU CARL SUCK MY BALLS YOU WHORE
/datum/emote/living/tesh_sneeze
key = "tesh_sneeze"
key_third_person = "sneezes"
message = "sneezes."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/tesh_sneeze/can_run_emote(mob/living/user, status_check = TRUE)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
return !C.silent
/datum/emote/living/tesh_sneeze/run_emote(mob/user, params)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
if(!C.mind || C.mind.miming)//no cute sneezing for you.
return
if(ishumanbasic(C))
playsound(C, pick('hyperstation/sound/voice/emotes/tesh_sneeze1.ogg', 'hyperstation/sound/voice/emotes/tesh_sneeze1b.ogg'), 50, 1)
if(is_species(user, /datum/species/avian))//This is required(related to subtypes), otherwise it doesn't play the noises. Sometimes. Always sometimes. Just how it be.
playsound(C, pick('hyperstation/sound/voice/emotes/tesh_sneeze1.ogg', 'hyperstation/sound/voice/emotes/tesh_sneeze1b.ogg'), 50, 1)
if(is_species(user, /datum/species/mammal))//Just because the avian subspecies doesn't have proper sprites. Some people can't use it.
playsound(C, pick('hyperstation/sound/voice/emotes/tesh_sneeze1.ogg', 'hyperstation/sound/voice/emotes/tesh_sneeze1b.ogg'), 50, 1)
/datum/emote/living/racc
key = "racc_chitter"
key_third_person = "chitters"
message = "chitters."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/racc/can_run_emote(mob/living/user, status_check = TRUE)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
return !C.silent
/datum/emote/living/racc/run_emote(mob/user, params)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
if(!C.mind || C.mind.miming)
return
if(ishumanbasic(C))
playsound(C, pick('hyperstation/sound/voice/emotes/racc_chitter_1.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_2.ogg',\
'hyperstation/sound/voice/emotes/racc_chitter_3.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_4.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_5.ogg',\
'hyperstation/sound/voice/emotes/racc_chitter_6.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_7.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_8.ogg'), 50, 1)
if(is_species(user, /datum/species/mammal))
playsound(C, pick('hyperstation/sound/voice/emotes/racc_chitter_1.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_2.ogg',\
'hyperstation/sound/voice/emotes/racc_chitter_3.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_4.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_5.ogg',\
'hyperstation/sound/voice/emotes/racc_chitter_6.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_7.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_8.ogg'), 50, 1)
/datum/emote/living/bat
key = "bat_chitter"
key_third_person = "chitters"
message = "chitters."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/bat/can_run_emote(mob/living/user, status_check = TRUE)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
return !C.silent
/datum/emote/living/bat/run_emote(mob/user, params)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
if(!C.mind || C.mind.miming)
return
if(ishumanbasic(C))
playsound(C, pick('hyperstation/sound/voice/emotes/bat_c1.ogg', 'hyperstation/sound/voice/emotes/bat_c2.ogg', 'hyperstation/sound/voice/emotes/bat_c3.ogg',\
'hyperstation/sound/voice/emotes/bat_c4.ogg', 'hyperstation/sound/voice/emotes/bat_c5.ogg',\
'hyperstation/sound/voice/emotes/bat_c6.ogg', 'hyperstation/sound/voice/emotes/bat_c7.ogg', 'hyperstation/sound/voice/emotes/bat_c8.ogg',\
'hyperstation/sound/voice/emotes/bat_c9.ogg'), 50, 1)
if(is_species(user, /datum/species/mammal))
playsound(C, pick('hyperstation/sound/voice/emotes/bat_c1.ogg', 'hyperstation/sound/voice/emotes/bat_c2.ogg', 'hyperstation/sound/voice/emotes/bat_c3.ogg',\
'hyperstation/sound/voice/emotes/bat_c4.ogg', 'hyperstation/sound/voice/emotes/bat_c5.ogg',\
'hyperstation/sound/voice/emotes/bat_c6.ogg', 'hyperstation/sound/voice/emotes/bat_c7.ogg', 'hyperstation/sound/voice/emotes/bat_c8.ogg',\
'hyperstation/sound/voice/emotes/bat_c9.ogg'), 50, 1)
if(is_species(user, /datum/species/avian))//this and mammal should be considered the same AAAAAAAAAAAA
playsound(C, pick('hyperstation/sound/voice/emotes/bat_c1.ogg', 'hyperstation/sound/voice/emotes/bat_c2.ogg', 'hyperstation/sound/voice/emotes/bat_c3.ogg',\
'hyperstation/sound/voice/emotes/bat_c4.ogg', 'hyperstation/sound/voice/emotes/bat_c5.ogg',\
'hyperstation/sound/voice/emotes/bat_c6.ogg', 'hyperstation/sound/voice/emotes/bat_c7.ogg', 'hyperstation/sound/voice/emotes/bat_c8.ogg',\
'hyperstation/sound/voice/emotes/bat_c9.ogg'), 50, 1)

View File

@@ -2,59 +2,55 @@
mob_type_allowed_typecache = list(/mob/living/silicon)
emote_type = EMOTE_AUDIBLE
/datum/emote/sound/silicon
mob_type_allowed_typecache = list(/mob/living/silicon)
emote_type = EMOTE_AUDIBLE
/datum/emote/silicon/boop
key = "boop"
key_third_person = "boops"
message = "boops."
/datum/emote/sound/silicon/buzz
/datum/emote/silicon/buzz
key = "buzz"
key_third_person = "buzzes"
message = "buzzes."
message_param = "buzzes at %t."
sound = 'sound/machines/buzz-sigh.ogg'
/datum/emote/sound/silicon/buzz2
/datum/emote/silicon/buzz2
key = "buzz2"
message = "buzzes twice."
sound = 'sound/machines/buzz-two.ogg'
/datum/emote/sound/silicon/chime
/datum/emote/silicon/chime
key = "chime"
key_third_person = "chimes"
message = "chimes."
sound = 'sound/machines/chime.ogg'
/datum/emote/sound/silicon/honk
/datum/emote/silicon/honk
key = "honk"
key_third_person = "honks"
message = "honks."
vary = TRUE
sound = 'sound/items/bikehorn.ogg'
/datum/emote/sound/silicon/ping
/datum/emote/silicon/ping
key = "ping"
key_third_person = "pings"
message = "pings."
message_param = "pings at %t."
sound = 'sound/machines/ping.ogg'
/datum/emote/sound/silicon/chime
/datum/emote/silicon/chime
key = "chime"
key_third_person = "chimes"
message = "chimes."
sound = 'sound/machines/chime.ogg'
/datum/emote/sound/silicon/sad
/datum/emote/silicon/sad
key = "sad"
message = "plays a sad trombone..."
sound = 'sound/misc/sadtrombone.ogg'
/datum/emote/sound/silicon/warn
/datum/emote/silicon/warn
key = "warn"
message = "blares an alarm!"
sound = 'sound/machines/warning-buzzer.ogg'

View File

@@ -1,8 +1,8 @@
/datum/emote/sound/gorilla
/datum/emote/gorilla
mob_type_allowed_typecache = /mob/living/simple_animal/hostile/gorilla
mob_type_blacklist_typecache = list()
/datum/emote/sound/gorilla/ooga
/datum/emote/gorilla/ooga
key = "ooga"
key_third_person = "oogas"
message = "oogas."

View File

@@ -222,6 +222,7 @@
glass_desc = "White and nutritious goodness!"
pH = 6.5
hydration = 3
nutriment_factor = 15 * REAGENTS_METABOLISM
/datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M)
if(HAS_TRAIT(M, TRAIT_CALCIUM_HEALER))

View File

@@ -12,7 +12,7 @@
"destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab",
"space_heater", "xlarge_beaker", "sec_rshot", "sec_bshot", "sec_slug", "sec_Islug", "sec_dart", "sec_38", "sec_38lethal",
"rglass","plasteel","plastitanium","plasmaglass","plasmareinforcedglass","titaniumglass","plastitaniumglass","chem_pack","medkit_cabinet",
"disposable_hypospray","plastic_knife","plastic_fork","plastic_spoon","large_beaker")
"disposable_hypospray","plastic_knife","plastic_fork","plastic_spoon","large_beaker", "adipoelectric_generator")
/datum/techweb_node/mmi
id = "mmi"

View File

@@ -1,9 +1,27 @@
/**
* Get the organ object from the mob matching the passed in typepath
*
* Arguments:
* * typepath The typepath of the organ to get
*/
/mob/proc/getorgan(typepath)
return
/**
* Get organ objects by zone
*
* This will return a list of all the organs that are relevant to the zone that is passedin
*
* Arguments:
* * zone [a BODY_ZONE_X define](https://github.com/tgstation/tgstation/blob/master/code/__DEFINES/combat.dm#L187-L200)
*/
/mob/proc/getorganszone(zone)
return
/**
* Get an organ relating to a specific slot
*
* Arguments:
* * slot Slot to get the organ from
*/
/mob/proc/getorganslot(slot)
return