mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
[MIRROR] Allergic Reaction Element (And direct_say proc) (#11359)
Co-authored-by: Will <7099514+Willburd@users.noreply.github.com> Co-authored-by: C.L. <killer65311@gmail.com>
This commit is contained in:
committed by
GitHub
parent
dd89859bba
commit
f94efe06a4
@@ -616,6 +616,8 @@
|
||||
#define REAGENT_ID_TOFU "tofu"
|
||||
#define REAGENT_SEAFOOD "seafood protein"
|
||||
#define REAGENT_ID_SEAFOOD "seafood"
|
||||
#define REAGENT_FUNGI "fungal protein"
|
||||
#define REAGENT_ID_FUNGI "fungi"
|
||||
#define REAGENT_CHEESE "cheese"
|
||||
#define REAGENT_ID_CHEESE "cheese"
|
||||
#define REAGENT_EGG "egg yolk"
|
||||
|
||||
@@ -362,6 +362,8 @@
|
||||
#define COMSIG_LIVING_LIFE "living_life"
|
||||
///From /living/handle_disabilities().
|
||||
#define COMSIG_HANDLE_DISABILITIES "handle_disabilities"
|
||||
///From /living/handle_allergens().
|
||||
#define COMSIG_HANDLE_ALLERGENS "handle_allergens"
|
||||
///From /mob/living/proc/updatehealth().
|
||||
#define COMSIG_UPDATE_HEALTH "update_health"
|
||||
#define COMSIG_UPDATE_HEALTH_GOD_MODE (1<<0) //If this will set health to 100 and stat to conscious.
|
||||
|
||||
79
code/__defines/species_flags.dm
Normal file
79
code/__defines/species_flags.dm
Normal file
@@ -0,0 +1,79 @@
|
||||
// Species flags.
|
||||
#define NO_MINOR_CUT 0x1 // Can step on broken glass with no ill-effects. Either thick skin (diona), cut resistant (slimes) or incorporeal (shadows)
|
||||
#define IS_PLANT 0x2 // Is a treeperson.
|
||||
#define NO_SLEEVE 0x4 // Cannot be resleeved by clonepods
|
||||
#define NO_PAIN 0x8 // Cannot suffer halloss/recieves deceptive health indicator.
|
||||
#define NO_SLIP 0x10 // Cannot fall over.
|
||||
#define NO_POISON 0x20 // Cannot not suffer toxloss.
|
||||
#define NO_EMBED 0x40 // Can step on broken glass with no ill-effects and cannot have shrapnel embedded in it.
|
||||
#define NO_HALLUCINATION 0x80 // Don't hallucinate, ever
|
||||
#define NO_BLOOD 0x100 // Never bleed, never show blood amount
|
||||
#define UNDEAD 0x200 // Various things that living things don't do, mostly for skeletons
|
||||
#define NO_INFECT 0x400 // Don't allow infections in limbs or organs, similar to IS_PLANT, without other strings.
|
||||
#define NO_DEFIB 0x800 // Don't allow them to be defibbed
|
||||
#define NO_DNA 0x1000 // Cannot have mutations or have their dna changed by genetics/radiation/genome-stolen.
|
||||
#define THICK_SKIN 0x2000 // Needles have a chain to fail when attempted to be used on them.
|
||||
// unused: 0x8000 - higher than this will overflow
|
||||
|
||||
// Species EMP vuln for carbons
|
||||
#define EMP_PAIN 0x1 // EMPs cause pain
|
||||
#define EMP_BLIND 0x2 // EMPs cause screenflash and blindness
|
||||
#define EMP_DEAFEN 0x4 // EMPs cause deafness
|
||||
#define EMP_CONFUSE 0x8 // EMPs cause disorientation
|
||||
#define EMP_WEAKEN 0x10 // EMPs cause collapsing (at high severity only)
|
||||
#define EMP_BRUTE_DMG 0x20 // EMPs inflict brute damage
|
||||
#define EMP_BURN_DMG 0x40 // EMPs inflict burn damage
|
||||
#define EMP_TOX_DMG 0x80 // EMPs inflict toxin damage
|
||||
#define EMP_OXY_DMG 0x100 // EMPs inflict oxy damage
|
||||
|
||||
// Species spawn flags
|
||||
#define SPECIES_IS_WHITELISTED 0x1 // Must be whitelisted to play.
|
||||
#define SPECIES_IS_RESTRICTED 0x2 // Is not a core/normally playable species. (castes, mutantraces)
|
||||
#define SPECIES_CAN_JOIN 0x4 // Species is selectable in chargen.
|
||||
#define SPECIES_NO_FBP_CONSTRUCTION 0x8 // FBP of this species can't be made in-game.
|
||||
#define SPECIES_NO_FBP_CHARGEN 0x10 // FBP of this species can't be selected at chargen.
|
||||
#define SPECIES_NO_POSIBRAIN 0x20 // FBP of this species cannot have a positronic brain.
|
||||
#define SPECIES_NO_DRONEBRAIN 0x40 // FBP of this species cannot have a drone intelligence.
|
||||
#define SPECIES_WHITELIST_SELECTABLE 0x80 // Can select and customize, but not join as
|
||||
|
||||
// Species appearance flags
|
||||
#define HAS_SKIN_TONE 0x1 // Skin tone selectable in chargen. (0-255)
|
||||
#define HAS_SKIN_COLOR 0x2 // Skin colour selectable in chargen. (RGB)
|
||||
#define HAS_LIPS 0x4 // Lips are drawn onto the mob icon. (lipstick)
|
||||
#define HAS_UNDERWEAR 0x8 // Underwear is drawn onto the mob icon.
|
||||
#define HAS_EYE_COLOR 0x10 // Eye colour selectable in chargen. (RGB)
|
||||
#define HAS_HAIR_COLOR 0x20 // Hair colour selectable in chargen. (RGB)
|
||||
#define RADIATION_GLOWS 0x40 // Radiation causes this character to glow.
|
||||
|
||||
// Species allergens
|
||||
#define ALLERGEN_MEAT 0x1 // Skrell won't like this.
|
||||
#define ALLERGEN_FISH 0x2 // Seperate for completion's sake. Still bad for skrell.
|
||||
#define ALLERGEN_FRUIT 0x4 // An apple a day only keeps the doctor away if they're allergic.
|
||||
#define ALLERGEN_VEGETABLE 0x8 // Taters 'n' carrots. Potato allergy is a thing, apparently.
|
||||
#define ALLERGEN_GRAINS 0x10 // Wheat, oats, etc.
|
||||
#define ALLERGEN_BEANS 0x20 // The musical fruit! Includes soy.
|
||||
#define ALLERGEN_SEEDS 0x40 // Hope you don't have a nut allergy.
|
||||
#define ALLERGEN_DAIRY 0x80 // Lactose intolerance, ho! Also bad for skrell.
|
||||
#define ALLERGEN_FUNGI 0x100 // Delicious shrooms.
|
||||
#define ALLERGEN_COFFEE 0x200 // Mostly here for tajara.
|
||||
#define ALLERGEN_SUGARS 0x400 // For unathi-like reactions
|
||||
#define ALLERGEN_EGGS 0x800 // For Skrell eggs allergy
|
||||
#define ALLERGEN_STIMULANT 0x1000 // Stimulants are what makes the Tajaran heart go ruh roh - not just coffee!
|
||||
#define ALLERGEN_CHOCOLATE 0x2000 // Makes dogs die if they want to?
|
||||
#define ALLERGEN_POLLEN 0x4000 // Teshari sneezes! Grasses and plants make you have a reaction.
|
||||
#define ALLERGEN_SALT 0x8000 // Chefs beware, can't have fast food!
|
||||
|
||||
// Allergen reactions
|
||||
#define AG_PHYS_DMG 0x1 // brute
|
||||
#define AG_BURN_DMG 0x2 // burns
|
||||
#define AG_TOX_DMG 0x4 // the classic
|
||||
#define AG_OXY_DMG 0x8 // intense airway reactions
|
||||
#define AG_EMOTE 0x10 // general emote reactions based on affect type
|
||||
#define AG_PAIN 0x20 // short-lived hurt
|
||||
#define AG_WEAKEN 0x40 // too weak to move, oof
|
||||
#define AG_BLURRY 0x80 // blurred vision!
|
||||
#define AG_SLEEPY 0x100 // fatigue/exhaustion
|
||||
#define AG_CONFUSE 0x200 // disorientation
|
||||
#define AG_GIBBING 0x400 // SPLODE
|
||||
#define AG_SNEEZE 0x800 // sneezes
|
||||
#define AG_COUGH 0x1000 // coughing
|
||||
@@ -1,77 +1,3 @@
|
||||
// Species flags.
|
||||
#define NO_MINOR_CUT 0x1 // Can step on broken glass with no ill-effects. Either thick skin (diona), cut resistant (slimes) or incorporeal (shadows)
|
||||
#define IS_PLANT 0x2 // Is a treeperson.
|
||||
#define NO_SLEEVE 0x4 // Cannot be resleeved by clonepods
|
||||
#define NO_PAIN 0x8 // Cannot suffer halloss/recieves deceptive health indicator.
|
||||
#define NO_SLIP 0x10 // Cannot fall over.
|
||||
#define NO_POISON 0x20 // Cannot not suffer toxloss.
|
||||
#define NO_EMBED 0x40 // Can step on broken glass with no ill-effects and cannot have shrapnel embedded in it.
|
||||
#define NO_HALLUCINATION 0x80 // Don't hallucinate, ever
|
||||
#define NO_BLOOD 0x100 // Never bleed, never show blood amount
|
||||
#define UNDEAD 0x200 // Various things that living things don't do, mostly for skeletons
|
||||
#define NO_INFECT 0x400 // Don't allow infections in limbs or organs, similar to IS_PLANT, without other strings.
|
||||
#define NO_DEFIB 0x800 // Don't allow them to be defibbed
|
||||
#define NO_DNA 0x1000 // Cannot have mutations or have their dna changed by genetics/radiation/genome-stolen.
|
||||
#define THICK_SKIN 0x2000 // Needles have a chain to fail when attempted to be used on them.
|
||||
// unused: 0x8000 - higher than this will overflow
|
||||
|
||||
// Species EMP vuln for carbons
|
||||
#define EMP_PAIN 0x1 // EMPs cause pain
|
||||
#define EMP_BLIND 0x2 // EMPs cause screenflash and blindness
|
||||
#define EMP_DEAFEN 0x4 // EMPs cause deafness
|
||||
#define EMP_CONFUSE 0x8 // EMPs cause disorientation
|
||||
#define EMP_WEAKEN 0x10 // EMPs cause collapsing (at high severity only)
|
||||
#define EMP_BRUTE_DMG 0x20 // EMPs inflict brute damage
|
||||
#define EMP_BURN_DMG 0x40 // EMPs inflict burn damage
|
||||
#define EMP_TOX_DMG 0x80 // EMPs inflict toxin damage
|
||||
#define EMP_OXY_DMG 0x100 // EMPs inflict oxy damage
|
||||
|
||||
// Species allergens
|
||||
#define ALLERGEN_MEAT 0x1 // Skrell won't like this.
|
||||
#define ALLERGEN_FISH 0x2 // Seperate for completion's sake. Still bad for skrell.
|
||||
#define ALLERGEN_FRUIT 0x4 // An apple a day only keeps the doctor away if they're allergic.
|
||||
#define ALLERGEN_VEGETABLE 0x8 // Taters 'n' carrots. Potato allergy is a thing, apparently.
|
||||
#define ALLERGEN_GRAINS 0x10 // Wheat, oats, etc.
|
||||
#define ALLERGEN_BEANS 0x20 // The musical fruit! Includes soy.
|
||||
#define ALLERGEN_SEEDS 0x40 // Hope you don't have a nut allergy.
|
||||
#define ALLERGEN_DAIRY 0x80 // Lactose intolerance, ho! Also bad for skrell.
|
||||
#define ALLERGEN_FUNGI 0x100 // Delicious shrooms.
|
||||
#define ALLERGEN_COFFEE 0x200 // Mostly here for tajara.
|
||||
#define ALLERGEN_SUGARS 0x400 // For unathi-like reactions
|
||||
#define ALLERGEN_EGGS 0x800 // For Skrell eggs allergy
|
||||
#define ALLERGEN_STIMULANT 0x1000 // Stimulants are what makes the Tajaran heart go ruh roh - not just coffee!
|
||||
#define ALLERGEN_CHOCOLATE 0x2000 // Makes dogs die if they want to?
|
||||
|
||||
// Allergen reactions
|
||||
#define AG_PHYS_DMG 0x1 // brute
|
||||
#define AG_BURN_DMG 0x2 // burns
|
||||
#define AG_TOX_DMG 0x4 // the classic
|
||||
#define AG_OXY_DMG 0x8 // intense airway reactions
|
||||
#define AG_EMOTE 0x10 // general emote reactions based on affect type
|
||||
#define AG_PAIN 0x20 // short-lived hurt
|
||||
#define AG_WEAKEN 0x40 // too weak to move, oof
|
||||
#define AG_BLURRY 0x80 // blurred vision!
|
||||
#define AG_SLEEPY 0x100 // fatigue/exhaustion
|
||||
#define AG_CONFUSE 0x200 // disorientation
|
||||
|
||||
// Species spawn flags
|
||||
#define SPECIES_IS_WHITELISTED 0x1 // Must be whitelisted to play.
|
||||
#define SPECIES_IS_RESTRICTED 0x2 // Is not a core/normally playable species. (castes, mutantraces)
|
||||
#define SPECIES_CAN_JOIN 0x4 // Species is selectable in chargen.
|
||||
#define SPECIES_NO_FBP_CONSTRUCTION 0x8 // FBP of this species can't be made in-game.
|
||||
#define SPECIES_NO_FBP_CHARGEN 0x10 // FBP of this species can't be selected at chargen.
|
||||
#define SPECIES_NO_POSIBRAIN 0x20 // FBP of this species cannot have a positronic brain.
|
||||
#define SPECIES_NO_DRONEBRAIN 0x40 // FBP of this species cannot have a drone intelligence.
|
||||
|
||||
// Species appearance flags
|
||||
#define HAS_SKIN_TONE 0x1 // Skin tone selectable in chargen. (0-255)
|
||||
#define HAS_SKIN_COLOR 0x2 // Skin colour selectable in chargen. (RGB)
|
||||
#define HAS_LIPS 0x4 // Lips are drawn onto the mob icon. (lipstick)
|
||||
#define HAS_UNDERWEAR 0x8 // Underwear is drawn onto the mob icon.
|
||||
#define HAS_EYE_COLOR 0x10 // Eye colour selectable in chargen. (RGB)
|
||||
#define HAS_HAIR_COLOR 0x20 // Hair colour selectable in chargen. (RGB)
|
||||
#define RADIATION_GLOWS 0x40 // Radiation causes this character to glow.
|
||||
|
||||
// Languages.
|
||||
#define LANGUAGE_GALCOM "Galactic Common"
|
||||
#define LANGUAGE_EAL "Encoded Audio Language"
|
||||
@@ -81,9 +7,7 @@
|
||||
#define LANGUAGE_SIIK "Siik"
|
||||
#define LANGUAGE_SKRELLIAN "Common Skrellian"
|
||||
#define LANGUAGE_TRADEBAND "Tradeband"
|
||||
//VOREStation edit 08/23/20
|
||||
#define LANGUAGE_GUTTER "Gutterband"
|
||||
//VS edit end
|
||||
#define LANGUAGE_SIGN "Sign Language"
|
||||
#define LANGUAGE_SCHECHI "Schechi"
|
||||
#define LANGUAGE_ROOTLOCAL "Local Rootspeak"
|
||||
@@ -101,6 +25,30 @@
|
||||
#define LANGUAGE_GIBBERISH "Babel"
|
||||
#define LANGUAGE_ROBOT_TALK "Robot Talk"
|
||||
#define LANGUAGE_DRONE_TALK "Drone Talk"
|
||||
#define LANGUAGE_DRUDAKAR "D'Rudak'Ar"
|
||||
#define LANGUAGE_BIRDSONG "Birdsong"
|
||||
#define LANGUAGE_SAGARU "Sagaru"
|
||||
#define LANGUAGE_CANILUNZT "Canilunzt"
|
||||
#define LANGUAGE_ECUREUILIAN "Ecureuilian"
|
||||
#define LANGUAGE_DAEMON "Daemon"
|
||||
#define LANGUAGE_ENOCHIAN "Enochian"
|
||||
#define LANGUAGE_VESPINAE "Vespinae"
|
||||
#define LANGUAGE_SPACER "Spacer"
|
||||
#define LANGUAGE_TAVAN "Tavan"
|
||||
#define LANGUAGE_ECHOSONG "Echo Song"
|
||||
|
||||
#define LANGUAGE_ANIMAL "Animal"
|
||||
#define LANGUAGE_TEPPI "Teppi"
|
||||
#define LANGUAGE_MOUSE "Mouse"
|
||||
#define LANNGUAGE_DRAKE "Drake"
|
||||
|
||||
#define LANGUAGE_SHADEKIN "Shadekin Empathy"
|
||||
#define LANGUAGE_LLEILL "Glamour Speak"
|
||||
|
||||
#define LANGUAGE_SPARKLE "Sparkle"
|
||||
|
||||
#define LANGUAGE_XENOLINGUA "Xenomorph"
|
||||
#define LANGUAGE_HIVEMIND "Hivemind"
|
||||
|
||||
// Language flags.
|
||||
#define WHITELISTED 1 // Language is available if the speaker is whitelisted.
|
||||
|
||||
@@ -1,32 +1,2 @@
|
||||
#define SPECIES_WHITELIST_SELECTABLE 0x20 // Can select and customize, but not join as
|
||||
|
||||
#define LANGUAGE_DRUDAKAR "D'Rudak'Ar"
|
||||
#define LANGUAGE_SLAVIC "Pan-Slavic" //CHOMP reAdd
|
||||
#define LANGUAGE_BIRDSONG "Birdsong"
|
||||
#define LANGUAGE_SAGARU "Sagaru"
|
||||
#define LANGUAGE_CANILUNZT "Canilunzt"
|
||||
#define LANGUAGE_ECUREUILIAN "Ecureuilian"
|
||||
#define LANGUAGE_DAEMON "Daemon"
|
||||
#define LANGUAGE_ENOCHIAN "Enochian"
|
||||
#define LANGUAGE_VESPINAE "Vespinae"
|
||||
#define LANGUAGE_SPACER "Spacer"
|
||||
#define LANGUAGE_TAVAN "Tavan"
|
||||
#define LANGUAGE_ECHOSONG "Echo Song"
|
||||
|
||||
#define LANGUAGE_ANIMAL "Animal"
|
||||
#define LANGUAGE_TEPPI "Teppi"
|
||||
#define LANGUAGE_MOUSE "Mouse"
|
||||
#define LANNGUAGE_DRAKE "Drake"
|
||||
|
||||
#define LANGUAGE_SHADEKIN "Shadekin Empathy"
|
||||
#define LANGUAGE_LLEILL "Glamour Speak"
|
||||
|
||||
#define LANGUAGE_SPARKLE "Sparkle"
|
||||
|
||||
// CHOMPAdd Start
|
||||
#define LANGUAGE_MARISH "Marish"
|
||||
// CHOMPAdd End
|
||||
|
||||
// Xeno languages selectable
|
||||
#define LANGUAGE_XENOLINGUA "Xenolingua"
|
||||
#define LANGUAGE_HIVEMIND "Hivemind"
|
||||
#define LANGUAGE_MARISH "Marish" //CHOMP Add
|
||||
|
||||
@@ -420,12 +420,10 @@ SUBSYSTEM_DEF(internal_wiki)
|
||||
allergies.Add("Stimulant")
|
||||
if(allergens & ALLERGEN_CHOCOLATE)
|
||||
allergies.Add("Chocolate")
|
||||
/* Downstream features
|
||||
if(allergens & ALLERGEN_POLLEN)
|
||||
allergies.Add("Pollen")
|
||||
if(allergens & ALLERGEN_SALT)
|
||||
allergies.Add("Salt")
|
||||
*/
|
||||
return allergies
|
||||
return null
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
RegisterSignal(owner, COMSIG_HANDLE_DISABILITIES, PROC_REF(process_component))
|
||||
|
||||
/datum/component/coughing_disability/proc/process_component()
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if (QDELETED(parent))
|
||||
return
|
||||
if(isbelly(owner.loc))
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
RegisterSignal(owner, COMSIG_HANDLE_DISABILITIES, PROC_REF(process_component))
|
||||
|
||||
/datum/component/epilepsy_disability/proc/process_component()
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if (QDELETED(parent))
|
||||
return
|
||||
if(isbelly(owner.loc))
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
RegisterSignal(owner, COMSIG_HANDLE_DISABILITIES, PROC_REF(process_component))
|
||||
|
||||
/datum/component/gibbing_disability/proc/process_component()
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(QDELETED(parent))
|
||||
return
|
||||
if(isbelly(owner.loc))
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
RegisterSignal(owner, COMSIG_HANDLE_DISABILITIES, PROC_REF(process_component))
|
||||
|
||||
/datum/component/nervousness_disability/proc/process_component()
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(QDELETED(parent))
|
||||
return
|
||||
if(isbelly(owner.loc))
|
||||
|
||||
77
code/datums/components/disabilities/pollen.dm
Normal file
77
code/datums/components/disabilities/pollen.dm
Normal file
@@ -0,0 +1,77 @@
|
||||
/datum/component/pollen_disability
|
||||
var/mob/living/carbon/human/owner
|
||||
var/allergy_chance = 20
|
||||
|
||||
/datum/component/pollen_disability/Initialize()
|
||||
if (!ishuman(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
|
||||
owner = parent
|
||||
RegisterSignal(owner, COMSIG_HANDLE_DISABILITIES, PROC_REF(process_component))
|
||||
|
||||
/datum/component/pollen_disability/proc/process_component()
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(QDELETED(parent))
|
||||
return
|
||||
if(!prob(allergy_chance))
|
||||
return
|
||||
if(!isturf(owner.loc))
|
||||
return
|
||||
if(owner.stat != CONSCIOUS)
|
||||
return
|
||||
if(owner.transforming)
|
||||
return
|
||||
|
||||
// Check for masks or internals
|
||||
if(istype(owner.head,/obj/item/clothing/head/helmet/space) && owner.internal) // Hardsuits
|
||||
return
|
||||
if(owner.wear_mask) // masks block it entirely
|
||||
if(owner.wear_mask.item_flags & AIRTIGHT)
|
||||
if(owner.internal) // gas on
|
||||
return
|
||||
if(owner.wear_mask.item_flags & BLOCK_GAS_SMOKE_EFFECT)
|
||||
return
|
||||
|
||||
// Time to ENGAGE THE ALLERGY
|
||||
if(prob(5) && istype(owner.loc,/turf/simulated/floor/grass))
|
||||
trigger_allergy()
|
||||
return
|
||||
|
||||
// Hand check
|
||||
var/list/things = list()
|
||||
if(prob(32))
|
||||
if(!isnull(owner.r_hand))
|
||||
things += owner.r_hand
|
||||
if(!isnull(owner.l_hand))
|
||||
things += owner.l_hand
|
||||
|
||||
// terrain tests
|
||||
things += owner.loc.contents
|
||||
if(prob(25)) // ranged check
|
||||
things += orange(2,owner.loc)
|
||||
|
||||
// scan irritants!
|
||||
if(things.len)
|
||||
if(locate(/obj/structure/flora) in things)
|
||||
trigger_allergy()
|
||||
return
|
||||
if(locate(/obj/effect/plant) in things)
|
||||
trigger_allergy()
|
||||
return
|
||||
if(locate(/obj/item/toy/bouquet) in things)
|
||||
trigger_allergy()
|
||||
return
|
||||
for(var/obj/machinery/portable_atmospherics/hydroponics/irritant_tray in things)
|
||||
if(!irritant_tray.dead && !isnull(irritant_tray.seed))
|
||||
trigger_allergy()
|
||||
return
|
||||
|
||||
/datum/component/pollen_disability/proc/trigger_allergy()
|
||||
to_chat(owner, span_danger("[pick("The air feels itchy!","Your face feels uncomfortable!","Your body tingles!")]"))
|
||||
owner.add_chemical_effect(CE_ALLERGEN, rand(5,20) * REM)
|
||||
|
||||
/datum/component/pollen_disability/Destroy(force = FALSE)
|
||||
UnregisterSignal(owner, COMSIG_HANDLE_DISABILITIES)
|
||||
owner = null
|
||||
. = ..()
|
||||
@@ -9,6 +9,8 @@
|
||||
RegisterSignal(owner, COMSIG_HANDLE_DISABILITIES, PROC_REF(process_component))
|
||||
|
||||
/datum/component/rotting_disability/proc/process_component()
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if (QDELETED(parent))
|
||||
return
|
||||
if(isbelly(owner.loc))
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
RegisterSignal(owner, COMSIG_HANDLE_DISABILITIES, PROC_REF(process_component))
|
||||
|
||||
/datum/component/tourettes_disability/proc/process_component()
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(QDELETED(parent))
|
||||
return
|
||||
if(isbelly(owner.loc))
|
||||
@@ -18,6 +20,8 @@
|
||||
return
|
||||
if(owner.transforming)
|
||||
return
|
||||
if(owner.client && (owner.client.prefs.muted & MUTE_IC))
|
||||
return
|
||||
if((prob(1) && prob(2) && owner.paralysis <= 1))
|
||||
owner.Stun(10)
|
||||
owner.make_jittery(100)
|
||||
@@ -25,7 +29,7 @@
|
||||
if(1)
|
||||
owner.emote("twitch")
|
||||
if(2 to 3)
|
||||
owner.say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]")
|
||||
owner.direct_say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]")
|
||||
|
||||
|
||||
/datum/component/tourettes_disability/Destroy(force = FALSE)
|
||||
|
||||
95
code/datums/elements/allergy.dm
Normal file
95
code/datums/elements/allergy.dm
Normal file
@@ -0,0 +1,95 @@
|
||||
// Element for handling allergic reactions. This is only added to humans with allergies actually set in their species datum.
|
||||
// Is added to the mob in species.produceCopy() after all traits have been resolved.
|
||||
/datum/element/allergy/Attach(datum/target)
|
||||
. = ..()
|
||||
if(!ishuman(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
RegisterSignal(target, COMSIG_HANDLE_ALLERGENS, PROC_REF(handle_allergic_reaction), override = TRUE)
|
||||
|
||||
/datum/element/allergy/Detach(datum/target)
|
||||
. = ..()
|
||||
UnregisterSignal(target, COMSIG_HANDLE_ALLERGENS)
|
||||
|
||||
/datum/element/allergy/proc/handle_allergic_reaction(datum/source,var/allergen_CE_amount)
|
||||
SIGNAL_HANDLER
|
||||
if(allergen_CE_amount <= 0)
|
||||
return
|
||||
//first, multiply the basic species-level value by our allergen effect rating, so consuming multiple seperate allergen typess simultaneously hurts more
|
||||
var/mob/living/carbon/human/H = source
|
||||
var/datum/species/species = H.species
|
||||
var/damage_severity = species.allergen_damage_severity * allergen_CE_amount
|
||||
var/disable_severity = species.allergen_disable_severity * allergen_CE_amount
|
||||
|
||||
if(species.allergen_reaction & AG_PHYS_DMG)
|
||||
H.adjustBruteLoss(damage_severity)
|
||||
|
||||
if(species.allergen_reaction & AG_BURN_DMG)
|
||||
H.adjustFireLoss(damage_severity)
|
||||
|
||||
if(species.allergen_reaction & AG_TOX_DMG)
|
||||
H.adjustToxLoss(damage_severity)
|
||||
|
||||
if(species.allergen_reaction & AG_OXY_DMG)
|
||||
H.adjustOxyLoss(damage_severity)
|
||||
if(prob(disable_severity/2))
|
||||
H.emote(pick("cough","gasp","choke"))
|
||||
|
||||
if(species.allergen_reaction & AG_EMOTE)
|
||||
if(prob(disable_severity/2))
|
||||
H.emote(pick("pale","shiver","twitch"))
|
||||
|
||||
if(species.allergen_reaction & AG_PAIN)
|
||||
H.adjustHalLoss(disable_severity)
|
||||
|
||||
if(species.allergen_reaction & AG_WEAKEN)
|
||||
H.Weaken(disable_severity)
|
||||
|
||||
if(species.allergen_reaction & AG_BLURRY)
|
||||
H.eye_blurry = max(H.eye_blurry, disable_severity)
|
||||
|
||||
if(species.allergen_reaction & AG_SLEEPY)
|
||||
H.drowsyness = max(H.drowsyness, disable_severity)
|
||||
|
||||
if(species.allergen_reaction & AG_CONFUSE)
|
||||
H.Confuse(disable_severity/4)
|
||||
|
||||
if(species.allergen_reaction & AG_GIBBING)
|
||||
if(prob(disable_severity / 6))
|
||||
addtimer(CALLBACK(src, PROC_REF(allergy_gib), H), rand(3,6), TIMER_DELETE_ME)
|
||||
else if(prob(disable_severity))
|
||||
H.emote(pick(list("whimper","belch","belch","belch","choke","shiver")))
|
||||
H.Weaken(disable_severity / 3)
|
||||
|
||||
if(species.allergen_reaction & AG_SNEEZE)
|
||||
if(prob(disable_severity/3))
|
||||
if(prob(20))
|
||||
to_chat(H, span_warning("You go to sneeze, but it gets caught in your sinuses!"))
|
||||
else if(prob(80))
|
||||
if(prob(30))
|
||||
to_chat(H, span_warning("You feel like you are about to sneeze!"))
|
||||
addtimer(CALLBACK(src, PROC_REF(allergy_sneeze), H), rand(0.75,3) SECOND, TIMER_DELETE_ME)
|
||||
|
||||
if(species.allergen_reaction & AG_COUGH)
|
||||
if(prob(disable_severity/2))
|
||||
H.emote(pick(list("cough","cough","cough","gasp","choke")))
|
||||
if(prob(10))
|
||||
H.drop_item()
|
||||
|
||||
// Helpers for delayed actions
|
||||
/datum/element/allergy/proc/allergy_sneeze(var/mob/living/carbon/human/H)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
PRIVATE_PROC(TRUE)
|
||||
H.emote("sneeze")
|
||||
if(prob(23))
|
||||
H.drop_item()
|
||||
|
||||
/datum/element/allergy/proc/allergy_gib(var/mob/living/carbon/human/H,var/remaining)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
PRIVATE_PROC(TRUE)
|
||||
if(remaining > 0)
|
||||
H.emote(pick(list("whimper","belch","shiver")))
|
||||
remaining--
|
||||
addtimer(CALLBACK(src, PROC_REF(allergy_gib), H, remaining), rand(1,1.2) SECOND, TIMER_DELETE_ME)
|
||||
return
|
||||
H.emote("belch")
|
||||
H.gib()
|
||||
@@ -56,62 +56,66 @@ GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages
|
||||
return
|
||||
GLOB.recentmessages.Add(signal_message)
|
||||
|
||||
// simulate the network lag if necessary
|
||||
if(signal.data["slow"] > 0)
|
||||
sleep(signal.data["slow"]) // simulate the network lag if necessary
|
||||
addtimer(CALLBACK(src, PROC_REF(receive_information_delayed), signal), signal.data["slow"], TIMER_DELETE_ME)
|
||||
return
|
||||
receive_information_delayed(signal)
|
||||
|
||||
signal.data["level"] |= using_map.get_map_levels(listening_level, TRUE, overmap_range)
|
||||
/obj/machinery/telecomms/broadcaster/receive_information_delayed(datum/signal/signal)
|
||||
signal.data["level"] |= using_map.get_map_levels(listening_level, TRUE, overmap_range)
|
||||
|
||||
var/list/forced_radios
|
||||
for(var/datum/weakref/wr in linked_radios_weakrefs)
|
||||
var/obj/item/radio/R = wr.resolve()
|
||||
if(istype(R))
|
||||
LAZYDISTINCTADD(forced_radios, R)
|
||||
var/list/forced_radios
|
||||
for(var/datum/weakref/wr in linked_radios_weakrefs)
|
||||
var/obj/item/radio/R = wr.resolve()
|
||||
if(istype(R))
|
||||
LAZYDISTINCTADD(forced_radios, R)
|
||||
|
||||
/** #### - Normal Broadcast - #### **/
|
||||
if(signal.data["type"] == SIGNAL_NORMAL)
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], DATA_NORMAL,
|
||||
signal.data["compression"], signal.data["level"], signal.frequency,
|
||||
signal.data["verb"], forced_radios)
|
||||
/** #### - Normal Broadcast - #### **/
|
||||
if(signal.data["type"] == SIGNAL_NORMAL)
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], DATA_NORMAL,
|
||||
signal.data["compression"], signal.data["level"], signal.frequency,
|
||||
signal.data["verb"], forced_radios)
|
||||
|
||||
/** #### - Simple Broadcast - #### **/
|
||||
/** #### - Simple Broadcast - #### **/
|
||||
|
||||
if(signal.data["type"] == SIGNAL_SIMPLE)
|
||||
if(signal.data["type"] == SIGNAL_SIMPLE)
|
||||
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
Broadcast_SimpleMessage(signal.data["name"], signal.frequency,
|
||||
signal.data["message"], DATA_NORMAL, null,
|
||||
signal.data["compression"], listening_level, forced_radios)
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
Broadcast_SimpleMessage(signal.data["name"], signal.frequency,
|
||||
signal.data["message"], DATA_NORMAL, null,
|
||||
signal.data["compression"], listening_level, forced_radios)
|
||||
|
||||
|
||||
/** #### - Artificial Broadcast - #### **/
|
||||
// (Imitates a mob)
|
||||
/** #### - Artificial Broadcast - #### **/
|
||||
// (Imitates a mob)
|
||||
|
||||
if(signal.data["type"] == SIGNAL_FAKE)
|
||||
if(signal.data["type"] == SIGNAL_FAKE)
|
||||
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
// Parameter "data" as DATA_FAKE: AI can't track this person/mob
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
// Parameter "data" as DATA_FAKE: AI can't track this person/mob
|
||||
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], DATA_FAKE,
|
||||
signal.data["compression"], signal.data["level"], signal.frequency,
|
||||
signal.data["verb"], forced_radios)
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], DATA_FAKE,
|
||||
signal.data["compression"], signal.data["level"], signal.frequency,
|
||||
signal.data["verb"], forced_radios)
|
||||
|
||||
if(!GLOB.message_delay)
|
||||
GLOB.message_delay = 1
|
||||
spawn(10)
|
||||
GLOB.message_delay = 0
|
||||
GLOB.recentmessages = list()
|
||||
if(!GLOB.message_delay)
|
||||
GLOB.message_delay = 1
|
||||
spawn(10)
|
||||
GLOB.message_delay = 0
|
||||
GLOB.recentmessages = list()
|
||||
|
||||
/* --- Do a snazzy animation! --- */
|
||||
flick("broadcaster_send", src)
|
||||
/* --- Do a snazzy animation! --- */
|
||||
flick("broadcaster_send", src)
|
||||
|
||||
/obj/machinery/telecomms/broadcaster/Destroy()
|
||||
// In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore.
|
||||
|
||||
@@ -23,24 +23,28 @@
|
||||
// Because this is a 'all in one' machine, we're gonna just cheat.
|
||||
//signal.data["level"] = using_map.contact_levels.Copy()
|
||||
|
||||
// simulate the network lag if necessary
|
||||
if(signal.data["slow"] > 0)
|
||||
sleep(signal.data["slow"]) // simulate the network lag if necessary
|
||||
addtimer(CALLBACK(src, PROC_REF(receive_information_delayed), signal), signal.data["slow"], TIMER_DELETE_ME)
|
||||
return
|
||||
receive_information_delayed(signal)
|
||||
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
/obj/machinery/telecomms/allinone/ert/receive_information_delayed(datum/signal/signal)
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
|
||||
var/datum/radio_frequency/connection = signal.data["connection"]
|
||||
var/datum/radio_frequency/connection = signal.data["connection"]
|
||||
|
||||
var/list/forced_radios
|
||||
for(var/datum/weakref/wr in linked_radios_weakrefs)
|
||||
var/obj/item/radio/R = wr.resolve()
|
||||
if(istype(R))
|
||||
LAZYDISTINCTADD(forced_radios, R)
|
||||
var/list/forced_radios
|
||||
for(var/datum/weakref/wr in linked_radios_weakrefs)
|
||||
var/obj/item/radio/R = wr.resolve()
|
||||
if(istype(R))
|
||||
LAZYDISTINCTADD(forced_radios, R)
|
||||
|
||||
if(connection.frequency in CENT_FREQS) // if ert broadcast, just
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], DATA_NORMAL,
|
||||
signal.data["compression"], list(0), connection.frequency,
|
||||
signal.data["verb"], forced_radios)
|
||||
if(connection.frequency in CENT_FREQS) // if ert broadcast, just
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], DATA_NORMAL,
|
||||
signal.data["compression"], list(0), connection.frequency,
|
||||
signal.data["verb"], forced_radios)
|
||||
|
||||
@@ -104,6 +104,11 @@
|
||||
// receive information from linked machinery
|
||||
return
|
||||
|
||||
/obj/machinery/telecomms/proc/receive_information_delayed(datum/signal/signal, obj/machinery/telecomms/machine_from)
|
||||
// The second half of receive_information(), called after the slowness delay from its first half.
|
||||
PROTECTED_PROC(TRUE)
|
||||
return
|
||||
|
||||
/obj/machinery/telecomms/proc/is_freq_listening(datum/signal/signal)
|
||||
// return 1 if found, 0 if not found
|
||||
if(!signal)
|
||||
|
||||
@@ -1146,6 +1146,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/mushroomslice/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_PSILOCYBIN, 3)
|
||||
reagents.add_reagent(REAGENT_ID_FUNGI, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/tomatomeat
|
||||
name = "tomato slice"
|
||||
@@ -1653,6 +1654,7 @@
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_AMATOXIN, 3)
|
||||
reagents.add_reagent(REAGENT_ID_PSILOCYBIN, 1)
|
||||
reagents.add_reagent(REAGENT_ID_FUNGI, 2)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/plump_pie
|
||||
name = "plump pie"
|
||||
@@ -1667,6 +1669,7 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/plump_pie/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_FUNGI, 2)
|
||||
if(prob(10))
|
||||
name = "exceptional plump pie"
|
||||
desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!"
|
||||
@@ -1854,7 +1857,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/carrotfries/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_IMIDAZOLINE, 3)
|
||||
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/cheesyfries
|
||||
name = "Cheesy Fries"
|
||||
@@ -1972,6 +1975,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/spacylibertyduff/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_PSILOCYBIN, 6)
|
||||
reagents.add_reagent(REAGENT_ID_FUNGI, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/amanitajelly
|
||||
name = "Amanita Jelly"
|
||||
@@ -1989,6 +1993,7 @@
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_AMATOXIN, 6)
|
||||
reagents.add_reagent(REAGENT_ID_PSILOCYBIN, 3)
|
||||
reagents.add_reagent(REAGENT_ID_FUNGI, 2)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/poppypretzel
|
||||
name = "Poppy pretzel"
|
||||
@@ -2209,6 +2214,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/fishandchips/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/rofflewaffles
|
||||
name = "Roffle Waffles"
|
||||
@@ -2597,6 +2603,7 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_FUNGI, 1)
|
||||
if(prob(10))
|
||||
name = "exceptional plump helmet biscuit"
|
||||
desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!"
|
||||
@@ -2725,6 +2732,7 @@
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_BANANA, 5)
|
||||
reagents.add_reagent(REAGENT_ID_WATER, 10)
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/vegetablesoup
|
||||
name = "Vegetable soup"
|
||||
@@ -2923,6 +2931,7 @@
|
||||
reagents.add_reagent(REAGENT_ID_TOMATOJUICE, 5)
|
||||
reagents.add_reagent(REAGENT_ID_IMIDAZOLINE, 5)
|
||||
reagents.add_reagent(REAGENT_ID_WATER, 5)
|
||||
reagents.add_reagent(REAGENT_ID_FUNGI, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/bearstew
|
||||
name = "bear stew"
|
||||
@@ -3607,6 +3616,10 @@
|
||||
w_class = ITEMSIZE_TINY
|
||||
nutriment_amt = 1
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/cracker/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/sliceable/grilled_carp
|
||||
name = "Njarir Merana Grill"
|
||||
desc = "A well-dressed fish, seared to perfection and adorned with herbs and spices in a traditional Nerahni Tajaran style. Can be sliced into proper serving sizes."
|
||||
@@ -4067,6 +4080,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 5)
|
||||
reagents.add_reagent(REAGENT_ID_FUNGI, 5)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/slice/mushroompizza
|
||||
name = "Mushroompizza slice"
|
||||
@@ -4650,6 +4664,10 @@
|
||||
nutriment_amt = 2
|
||||
nutriment_desc = list("salt" = 3)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/roastedsunflower/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/roastedpeanuts
|
||||
name = "peanuts"
|
||||
desc = "Stopped being the planetary airline food of Earth in 2120."
|
||||
@@ -4661,6 +4679,10 @@
|
||||
nutriment_amt = 2
|
||||
nutriment_desc = list("salt" = 3)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/roastedpeanuts/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/liquidfood
|
||||
name = "\improper LiquidFood Ration"
|
||||
desc = "A prepackaged grey slurry of all the essential nutrients for a spacefarer on the go. Should this be crunchy?"
|
||||
@@ -4758,6 +4780,11 @@
|
||||
nutriment_desc = list(PLANT_MUSHROOMS = 5, "salt" = 5)
|
||||
bitesize = 3
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/skrellsnacks/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
reagents.add_reagent(REAGENT_ID_FUNGI, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/unajerky
|
||||
name = "Moghes Imported Sissalik Jerky"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
@@ -4959,6 +4986,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/cubannachos/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_CAPSAICIN, 4)
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/curryrice
|
||||
name = "curry rice"
|
||||
@@ -4971,6 +4999,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/curryrice/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_CAPSAICIN, 4)
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/piginblanket
|
||||
name = "pig in a blanket"
|
||||
@@ -6875,6 +6904,10 @@
|
||||
nutriment_desc = list("salt" = 1, "chips" = 2)
|
||||
bitesize = 1
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/chips/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/chips/bbq
|
||||
name = "\improper Legendary BBQ Chips"
|
||||
desc = "You know I can't grab your ghost chips!"
|
||||
@@ -6909,20 +6942,6 @@
|
||||
nutriment_desc = list("bread" = 2, "sweetness" = 3)
|
||||
bitesize = 2
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/skrellsnacks
|
||||
name = "\improper SkrellSnax"
|
||||
desc = "Cured fungus shipped all the way from Qerr'balak, almost like jerky! Almost."
|
||||
description_fluff = "Despite the packaging, most SkrellSnax sold in Vir are produced using locally-grown, Qerr'Balak-native Go'moa fungi in controversial Skrell-owned biodomes on the suface of Sif. SkrellSnax were originally a product of Natuna, designed to welcome Ue-Katish refugees to their colony. The brand was recreated by Centauri Provisions after Natuna and SolGov broke off diplomatic relations."
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
icon_state = "skrellsnacks"
|
||||
trash = /obj/item/trash/skrellsnax
|
||||
filling_color = "#A66829"
|
||||
center_of_mass_x = 15
|
||||
center_of_mass_y = 12
|
||||
nutriment_amt = 10
|
||||
nutriment_desc = list(PLANT_MUSHROOMS = 5, "salt" = 5)
|
||||
bitesize = 3
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/sosjerky
|
||||
name = "Scaredy's Private Reserve Beef Jerky"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
@@ -7018,6 +7037,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/squid/true/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 4)
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/croutons
|
||||
name = "\improper Suhariki"
|
||||
@@ -7048,6 +7068,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/salo/true/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 8)
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/driedfish
|
||||
name = "\improper Vobla"
|
||||
@@ -7065,6 +7086,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/driedfish/Initialize(mapload)
|
||||
.=..()
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 4)
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/no_raisin
|
||||
name = "4no Raisins"
|
||||
@@ -7141,6 +7163,10 @@
|
||||
nutriment_amt = 5
|
||||
bitesize = 2
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/triton/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 10)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/saturn
|
||||
name = "\improper Saturn-Os"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
@@ -7154,6 +7180,10 @@
|
||||
nutriment_amt = 5
|
||||
bitesize = 2
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/saturn/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/jupiter
|
||||
name = "\improper Jove Gello"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
@@ -7271,6 +7301,10 @@
|
||||
nutriment_amt = 4
|
||||
bitesize = 1
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/hakarl/Initialize(mapload)
|
||||
.=..()
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
////////////////////weeb_vend (Nippon-tan!)////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/ricecake
|
||||
@@ -7508,6 +7542,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/canned/caviar/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_SEAFOOD, 5)
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/canned/caviar/true
|
||||
name = "\improper Classic Terran Caviar"
|
||||
@@ -7525,6 +7560,7 @@
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_SEAFOOD, 4)
|
||||
reagents.add_reagent(REAGENT_ID_CARPOTOXIN, 1)
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/canned/maps
|
||||
name = "\improper MAPS"
|
||||
|
||||
@@ -83,6 +83,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/hugemushroomslice/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_PSILOCYBIN, 3)
|
||||
reagents.add_reagent(REAGENT_ID_FUNGI, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/tomatomeat
|
||||
name = "tomato slice"
|
||||
|
||||
@@ -403,6 +403,7 @@
|
||||
bitesize = 3
|
||||
reagents.add_reagent(REAGENT_ID_CAPSAICIN, 4)
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 4)
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/sharkmeatcubes
|
||||
name = "shark cubes"
|
||||
@@ -564,6 +565,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/nachos/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_NUTRIMENT, 1)
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
bitesize = 1
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/cheesenachos
|
||||
@@ -577,6 +579,7 @@
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_NUTRIMENT, 5)
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 2)
|
||||
reagents.add_reagent(REAGENT_ID_SODIUMCHLORIDE, 1)
|
||||
bitesize = 2
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/milosoup
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
seed_noun = "spores"
|
||||
display_name = "chanterelle mushrooms"
|
||||
mutants = list(PLANT_REISHI,PLANT_AMANITA,PLANT_PLUMPHELMET)
|
||||
chems = list(REAGENT_ID_NUTRIMENT = list(1,25))
|
||||
chems = list(REAGENT_ID_NUTRIMENT = list(1,20), REAGENT_ID_FUNGI = list(1,4))
|
||||
splat_type = /obj/effect/plant
|
||||
kitchen_tag = PLANT_MUSHROOMS
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
seed_name = "plump helmet"
|
||||
display_name = "plump helmet mushrooms"
|
||||
mutants = list("walkingmushroom",PLANT_TOWERCAP)
|
||||
chems = list(REAGENT_ID_NUTRIMENT = list(2,10))
|
||||
chems = list(REAGENT_ID_NUTRIMENT = list(5,10), REAGENT_ID_FUNGI = 1)
|
||||
kitchen_tag = PLANT_PLUMPHELMET
|
||||
|
||||
/datum/seed/mushroom/plump/New()
|
||||
@@ -62,7 +62,7 @@
|
||||
seed_name = PLANT_REISHI
|
||||
display_name = PLANT_REISHI
|
||||
mutants = list(PLANT_LIBERTYCAP,PLANT_GLOWSHROOM)
|
||||
chems = list(REAGENT_ID_NUTRIMENT = list(1,50), REAGENT_ID_PSILOCYBIN = list(3,5))
|
||||
chems = list(REAGENT_ID_NUTRIMENT = list(1,50), REAGENT_ID_PSILOCYBIN = list(3,5), REAGENT_ID_FUNGI = list(1,5))
|
||||
|
||||
/datum/seed/mushroom/hallucinogenic/New()
|
||||
..()
|
||||
@@ -80,7 +80,7 @@
|
||||
seed_name = "liberty cap"
|
||||
display_name = "liberty cap mushrooms"
|
||||
mutants = null
|
||||
chems = list(REAGENT_ID_NUTRIMENT = list(1), REAGENT_ID_STOXIN = list(3,3), REAGENT_ID_BLISS = list(1,25))
|
||||
chems = list(REAGENT_ID_NUTRIMENT = list(1), REAGENT_ID_STOXIN = list(3,3), REAGENT_ID_BLISS = list(1,12), REAGENT_ID_FUNGI = list(1,12))
|
||||
|
||||
/datum/seed/mushroom/hallucinogenic/strong/New()
|
||||
..()
|
||||
@@ -96,7 +96,7 @@
|
||||
seed_name = "fly amanita"
|
||||
display_name = "fly amanita mushrooms"
|
||||
mutants = list(PLANT_DESTROYINGANGEL,PLANT_PLASTIC)
|
||||
chems = list(REAGENT_ID_NUTRIMENT = list(1), REAGENT_ID_AMATOXIN = list(3,3), REAGENT_ID_PSILOCYBIN = list(1,25))
|
||||
chems = list(REAGENT_ID_NUTRIMENT = list(1), REAGENT_ID_AMATOXIN = list(3,3), REAGENT_ID_PSILOCYBIN = list(1,25), REAGENT_ID_FUNGI = list(1,4))
|
||||
|
||||
/datum/seed/mushroom/poison/New()
|
||||
..()
|
||||
@@ -114,7 +114,7 @@
|
||||
seed_name = "destroying angel"
|
||||
display_name = "destroying angel mushrooms"
|
||||
mutants = null
|
||||
chems = list(REAGENT_ID_NUTRIMENT = list(1,50), REAGENT_ID_AMATOXIN = list(13,3), REAGENT_ID_PSILOCYBIN = list(1,25))
|
||||
chems = list(REAGENT_ID_NUTRIMENT = list(1,50), REAGENT_ID_AMATOXIN = list(13,3), REAGENT_ID_PSILOCYBIN = list(1,25), REAGENT_ID_FUNGI = list(1,2))
|
||||
|
||||
/datum/seed/mushroom/poison/death/New()
|
||||
..()
|
||||
@@ -146,7 +146,7 @@
|
||||
name = PLANT_REDCAP
|
||||
seed_name = "red cap"
|
||||
display_name = "red caps"
|
||||
chems = list(REAGENT_ID_WOODPULP = list(10,1), REAGENT_ID_TANNIN = list(1,10))
|
||||
chems = list(REAGENT_ID_WOODPULP = list(1,10), REAGENT_ID_TANNIN = list(1,10), REAGENT_ID_FUNGI = list(1,2))
|
||||
mutants = null
|
||||
has_item_product = null
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
seed_name = PLANT_GLOWSHROOM
|
||||
display_name = "glowshrooms"
|
||||
mutants = null
|
||||
chems = list(REAGENT_ID_RADIUM = list(1,20))
|
||||
chems = list(REAGENT_ID_RADIUM = list(1,20), REAGENT_ID_FUNGI = list(1,5))
|
||||
|
||||
/datum/seed/mushroom/glowshroom/New()
|
||||
..()
|
||||
@@ -179,7 +179,7 @@
|
||||
seed_name = "plastellium"
|
||||
display_name = "plastellium"
|
||||
mutants = null
|
||||
chems = list(REAGENT_ID_PLASTICIDE = list(1,10))
|
||||
chems = list(REAGENT_ID_PLASTICIDE = list(1,10), REAGENT_ID_FUNGI = list(2,6))
|
||||
|
||||
/datum/seed/mushroom/plastic/New()
|
||||
..()
|
||||
@@ -197,7 +197,7 @@
|
||||
seed_name = "corpellian"
|
||||
display_name = "corpellian"
|
||||
mutants = null
|
||||
chems = list(REAGENT_ID_SEROTROTIUM = list(5,10), REAGENT_ID_MOLD = list(1,10))
|
||||
chems = list(REAGENT_ID_SEROTROTIUM = list(5,10), REAGENT_ID_MOLD = list(1,10), REAGENT_ID_FUNGI = list(1,4))
|
||||
|
||||
/datum/seed/mushroom/spore/New()
|
||||
..()
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
return (copytext(message, length(message)) == "!") ? 2 : 1
|
||||
|
||||
/datum/language/proc/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
|
||||
log_say("(HIVE) [message]", speaker)
|
||||
INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(log_say), "(HIVE) [message]", speaker) //CHOMP EDIT - TODO: FIX ME (selis logging pr)
|
||||
|
||||
add_verb(speaker, /mob/proc/adjust_hive_range)
|
||||
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
for(var/obj/item/organ/external/E in src.organs)
|
||||
E.droplimb(0,DROPLIMB_EDGE,1)
|
||||
|
||||
sleep(1)
|
||||
|
||||
for(var/obj/item/I in src)
|
||||
drop_from_inventory(I)
|
||||
I.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)), rand(1,3), round(30/I.w_class))
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
handle_pain()
|
||||
|
||||
handle_allergens()
|
||||
SEND_SIGNAL(src,COMSIG_HANDLE_ALLERGENS, chem_effects[CE_ALLERGEN])
|
||||
|
||||
handle_medical_side_effects()
|
||||
|
||||
@@ -830,35 +830,6 @@
|
||||
|
||||
playsound_local(get_turf(src), suit_exhale_sound, 100, pressure_affected = FALSE, volume_channel = VOLUME_CHANNEL_AMBIENCE)
|
||||
|
||||
/mob/living/carbon/human/proc/handle_allergens()
|
||||
if(chem_effects[CE_ALLERGEN])
|
||||
//first, multiply the basic species-level value by our allergen effect rating, so consuming multiple seperate allergen typess simultaneously hurts more
|
||||
var/damage_severity = species.allergen_damage_severity * chem_effects[CE_ALLERGEN]
|
||||
var/disable_severity = species.allergen_disable_severity * chem_effects[CE_ALLERGEN]
|
||||
if(species.allergen_reaction & AG_PHYS_DMG)
|
||||
adjustBruteLoss(damage_severity)
|
||||
if(species.allergen_reaction & AG_BURN_DMG)
|
||||
adjustFireLoss(damage_severity)
|
||||
if(species.allergen_reaction & AG_TOX_DMG)
|
||||
adjustToxLoss(damage_severity)
|
||||
if(species.allergen_reaction & AG_OXY_DMG)
|
||||
adjustOxyLoss(damage_severity)
|
||||
if(prob(disable_severity/2))
|
||||
emote(pick("cough","gasp","choke"))
|
||||
if(species.allergen_reaction & AG_EMOTE)
|
||||
if(prob(disable_severity/2))
|
||||
emote(pick("pale","shiver","twitch"))
|
||||
if(species.allergen_reaction & AG_PAIN)
|
||||
adjustHalLoss(disable_severity)
|
||||
if(species.allergen_reaction & AG_WEAKEN)
|
||||
Weaken(disable_severity)
|
||||
if(species.allergen_reaction & AG_BLURRY)
|
||||
eye_blurry = max(eye_blurry, disable_severity)
|
||||
if(species.allergen_reaction & AG_SLEEPY)
|
||||
drowsyness = max(drowsyness, disable_severity)
|
||||
if(species.allergen_reaction & AG_CONFUSE)
|
||||
Confuse(disable_severity/4)
|
||||
|
||||
/mob/living/carbon/human/proc/handle_species_components()
|
||||
species.handle_species_components(src)
|
||||
|
||||
|
||||
@@ -802,6 +802,11 @@
|
||||
if(H.species.has_vibration_sense)
|
||||
H.motiontracker_subscribe()
|
||||
|
||||
if(H.species.allergens)
|
||||
H.AddElement(/datum/element/allergy)
|
||||
else
|
||||
H.RemoveElement(/datum/element/allergy)
|
||||
|
||||
return new_copy
|
||||
|
||||
//We REALLY don't need to go through every variable. Doing so makes this lag like hell on 515
|
||||
|
||||
@@ -555,6 +555,20 @@
|
||||
custom_only = FALSE
|
||||
allergen = ALLERGEN_CHOCOLATE
|
||||
|
||||
/datum/trait/neutral/allergy/pollen
|
||||
name = "Allergy: Pollen"
|
||||
desc = "You're highly allergic to pollen and many plants. It's probably best to avoid hydroponics in general. Be sure to configure your allergic reactions, otherwise you will die touching grass. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
allergen = ALLERGEN_POLLEN // Gee billy...
|
||||
added_component_path = /datum/component/pollen_disability // Why does mom let you have two things?
|
||||
|
||||
/datum/trait/neutral/allergy/salt
|
||||
name = "Allergy: Salt"
|
||||
desc = "You're highly allergic to sodium chloride aka salt. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance."
|
||||
cost = 0
|
||||
allergen = ALLERGEN_SALT
|
||||
|
||||
/datum/trait/neutral/allergy_reaction
|
||||
name = "Allergy Reaction: Disable Toxicity"
|
||||
desc = "Take this trait to disable the toxic damage effect of being exposed to one of your allergens. Combine with the Disable Suffocation trait to have purely nonlethal reactions."
|
||||
@@ -622,6 +636,28 @@
|
||||
custom_only = FALSE
|
||||
reaction = AG_CONFUSE
|
||||
|
||||
/datum/trait/neutral/allergy_reaction/gibbing
|
||||
name = "Allergy Reaction: Gibbing"
|
||||
desc = "When exposed to one of your allergens, you will explode, god help you. Does nothing if you have no allergens."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
reaction = AG_GIBBING
|
||||
hidden = TRUE // Disabled on virgo for obvious reasons
|
||||
|
||||
/datum/trait/neutral/allergy_reaction/sneeze
|
||||
name = "Allergy Reaction: Sneezing"
|
||||
desc = "When exposed to one of your allergens, you will begin sneezing harmlessly. Does nothing if you have no allergens."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
reaction = AG_SNEEZE
|
||||
|
||||
/datum/trait/neutral/allergy_reaction/cough
|
||||
name = "Allergy Reaction: Coughing"
|
||||
desc = "When exposed to one of your allergens, you will begin coughing, potentially dropping items. Does nothing if you have no allergens."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
reaction = AG_COUGH
|
||||
|
||||
/datum/trait/neutral/allergen_reduced_effect
|
||||
name = "Allergen Reaction: Reduced Intensity"
|
||||
desc = "This trait drastically reduces the effects of allergen reactions. If you don't have any allergens set, it does nothing. It does not apply to special reactions (such as unathi drowsiness from sugars)."
|
||||
|
||||
@@ -165,22 +165,22 @@ var/list/channel_to_radio_key = list()
|
||||
if(stat == DEAD && !forbid_seeing_deadchat)
|
||||
return say_dead(message)
|
||||
return
|
||||
//VOREStation Addition Start
|
||||
if(forced_psay)
|
||||
psay(message)
|
||||
return
|
||||
if(autowhisper)
|
||||
whispering = 1
|
||||
//VOREStation Addition End
|
||||
//Parse the mode
|
||||
var/message_mode = parse_message_mode(message, "headset")
|
||||
|
||||
//Maybe they are using say/whisper to do a quick emote, so do those
|
||||
switch(copytext(message, 1, 2))
|
||||
if("*") return emote(copytext(message, 2))
|
||||
if("^") return custom_emote(VISIBLE_MESSAGE, copytext(message, 2))
|
||||
direct_say(message, speaking, whispering)
|
||||
|
||||
/mob/living/direct_say(var/message, var/datum/language/speaking = null, var/whispering = 0)
|
||||
// Handle automatic whispering mode
|
||||
if(autowhisper)
|
||||
whispering = 1
|
||||
|
||||
//Parse the radio code and consume it
|
||||
var/message_mode = parse_message_mode(message, "headset")
|
||||
if(message_mode)
|
||||
if(message_mode == "headset")
|
||||
message = copytext(message, 2) //it would be really nice if the parse procs could do this for us.
|
||||
@@ -301,7 +301,7 @@ var/list/channel_to_radio_key = list()
|
||||
message_range = 1
|
||||
sound_vol *= 0.5
|
||||
|
||||
//VOREStation edit - allows for custom say verbs, overriding all other say-verb types- e.g. "says loudly" instead of "shouts"
|
||||
//allows for custom say verbs, overriding all other say-verb types- e.g. "says loudly" instead of "shouts"
|
||||
//You'll still stammer if injured or slur if drunk, but it won't have those specific words
|
||||
var/ending = copytext(message, length(message))
|
||||
|
||||
@@ -313,12 +313,12 @@ var/list/channel_to_radio_key = list()
|
||||
verb = "[custom_ask]"
|
||||
else if(custom_say)
|
||||
verb = "[custom_say]"
|
||||
//VOREStation edit ends
|
||||
|
||||
//Handle nonverbal languages here
|
||||
for(var/datum/multilingual_say_piece/S in message_pieces)
|
||||
if((S.speaking.flags & NONVERBAL) || (S.speaking.flags & INAUDIBLE))
|
||||
custom_emote(VISIBLE_MESSAGE, "[pick(S.speaking.signlang_verb)].")
|
||||
var/sign_action = "[pick(S.speaking.signlang_verb)]."
|
||||
automatic_custom_emote(VISIBLE_MESSAGE,sign_action)
|
||||
do_sound = FALSE
|
||||
|
||||
//These will contain the main receivers of the message
|
||||
@@ -358,10 +358,8 @@ var/list/channel_to_radio_key = list()
|
||||
var/image/speech_bubble = generate_speech_bubble(src, "[speech_type][speech_bubble_test]")
|
||||
var/sb_alpha = 255
|
||||
var/atom/loc_before_turf = src
|
||||
//VOREStation Add
|
||||
if(isbelly(loc))
|
||||
speech_bubble.pixel_y = -13 //teehee
|
||||
//VOREStation Add End
|
||||
while(loc_before_turf && !isturf(loc_before_turf.loc))
|
||||
loc_before_turf = loc_before_turf.loc
|
||||
sb_alpha -= 50
|
||||
@@ -376,12 +374,11 @@ var/list/channel_to_radio_key = list()
|
||||
spawn(0) //Using spawns to queue all the messages for AFTER this proc is done, and stop runtimes
|
||||
|
||||
if(M && src) //If we still exist, when the spawn processes
|
||||
//VOREStation Add - Ghosts don't hear whispers
|
||||
// Ghosts don't hear whispers
|
||||
if(whispering && isobserver(M) && (!M.client?.prefs?.read_preference(/datum/preference/toggle/ghost_see_whisubtle) || \
|
||||
(!(client?.prefs?.read_preference(/datum/preference/toggle/whisubtle_vis) || (isbelly(M.loc) && src == M.loc:owner)) && !check_rights_for(M.client, R_HOLDER))))
|
||||
M.show_message(span_game(span_say(span_name(src.name) + " [w_not_heard].")), 2)
|
||||
return
|
||||
//VOREStation Add End
|
||||
|
||||
var/dst = get_dist(get_turf(M),get_turf(src))
|
||||
var/runechat_enabled = M.client?.prefs?.read_preference(/datum/preference/toggle/runechat_mob)
|
||||
@@ -427,12 +424,12 @@ var/list/channel_to_radio_key = list()
|
||||
blooploop(message, extrarange = -6, volume = 25, sound_preference = /datum/preference/toggle/whisper_sounds)
|
||||
// playsound(T, pick(voice_sounds_list), 25, TRUE, extrarange = -6, falloff = 1 , is_global = TRUE, frequency = voice_freq, ignore_walls = TRUE, preference = /datum/preference/toggle/whisper_sounds) //CHOMPEdit - ignore_walls = TRUE
|
||||
|
||||
log_whisper(message, src)
|
||||
INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(log_whisper), message, src) //CHOMP EDIT - TODO: FIX ME (selis logging pr)
|
||||
else
|
||||
if(do_sound && message)
|
||||
blooploop(message, volume = 75)
|
||||
// playsound(T, pick(voice_sounds_list), 75, TRUE, falloff = 1 , is_global = TRUE, frequency = voice_freq, ignore_walls = TRUE, preference = /datum/preference/toggle/say_sounds) //CHOMPEdit - ignore_walls = TRUE
|
||||
log_say(message, src)
|
||||
INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(log_say), message, src) //CHOMP EDIT - TODO: FIX ME (selis logging pr)
|
||||
return 1
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
/mob/proc/say(var/message, var/datum/language/speaking = null, var/whispering = 0)
|
||||
return
|
||||
|
||||
// MUST BE NON-BLOCKING, signals can call this
|
||||
/mob/proc/direct_say(var/message, var/datum/language/speaking = null, var/whispering = 0)
|
||||
SHOULD_NOT_SLEEP(TRUE)
|
||||
return
|
||||
|
||||
/mob/verb/whisper(message as text)
|
||||
set name = "Whisper"
|
||||
set hidden = 1
|
||||
|
||||
@@ -309,6 +309,13 @@
|
||||
taste_description = "tofu"
|
||||
allergen_type = ALLERGEN_BEANS //Made from soy beans
|
||||
|
||||
/datum/reagent/nutriment/protein/fungi
|
||||
name = REAGENT_FUNGI
|
||||
id = REAGENT_ID_FUNGI
|
||||
taste_description = "some sort of mushroom"
|
||||
color = "#979797"
|
||||
allergen_type = ALLERGEN_FUNGI
|
||||
|
||||
/datum/reagent/nutriment/protein/seafood
|
||||
name = REAGENT_SEAFOOD
|
||||
id = REAGENT_ID_SEAFOOD
|
||||
@@ -514,7 +521,7 @@
|
||||
reagent_state = LIQUID
|
||||
nutriment_factor = 2
|
||||
color = "#792300"
|
||||
allergen_type = ALLERGEN_BEANS //Soy (beans)
|
||||
allergen_type = ALLERGEN_BEANS | ALLERGEN_SALT //Soy (beans)
|
||||
cup_prefix = "umami"
|
||||
|
||||
/datum/reagent/nutriment/vinegar
|
||||
@@ -683,6 +690,7 @@
|
||||
color = "#FFFFFF"
|
||||
overdose = REAGENTS_OVERDOSE
|
||||
ingest_met = REM
|
||||
allergen_type = ALLERGEN_SALT
|
||||
cup_prefix = "salty"
|
||||
supply_conversion_value = REFINERYEXPORT_VALUE_COMMON
|
||||
industrial_use = REFINERYEXPORT_REASON_FOOD
|
||||
@@ -4038,7 +4046,7 @@
|
||||
glass_name = REAGENT_ID_MARGARITA
|
||||
glass_desc = "On the rocks with salt on the rim. Arriba~!"
|
||||
|
||||
allergen_type = ALLERGEN_FRUIT //Made from lime juice(fruit)
|
||||
allergen_type = ALLERGEN_FRUIT | ALLERGEN_SALT //Made from lime juice(fruit)
|
||||
|
||||
/datum/reagent/ethanol/mead
|
||||
name = REAGENT_MEAD
|
||||
@@ -4109,6 +4117,8 @@
|
||||
glass_name = "red mead"
|
||||
glass_desc = "A true Viking's beverage, though its color is strange."
|
||||
|
||||
allergen_type = ALLERGEN_SALT
|
||||
|
||||
/datum/reagent/ethanol/sbiten
|
||||
name = REAGENT_SBITEN
|
||||
id = REAGENT_ID_SBITEN
|
||||
|
||||
Reference in New Issue
Block a user