Rework job food/alchohol benefits into livers (#55721)

By moving the "special behaviour" of something like security officers
eating donuts, or engineers losing radiation by drinking Screwdrivers,
into traits on the liver, this makes the "origin" of that behaviour more
clearly defined, rather than something that's attached to the mind of
the person. (For example, now if a wizard mindswaps into a Security
Officer, they too can now digest donuts good.)

Having this behaviour be partially visible to the more medically
inclined members of the station (like doctors, and the chaplain for
"entrails reading mystic" themes), means that a dismembered liver tells
a story to those who know how to read it.

Some jobs have more "benefits" than others, for example the only thing
that the liver of a Quartermaster gives them is a sense of inadequacy
when consuming royal carpet.

Clowns having livers that honk make them easier to identify, and plays
into the retconned "bike horns are clown livers lore"? Also, why not cut
out a clown's liver then honk them with it? You monster.
This commit is contained in:
coiax
2021-01-11 19:34:40 +00:00
committed by GitHub
parent 02b83cd9d7
commit 89eea73703
35 changed files with 265 additions and 63 deletions
+25 -2
View File
@@ -129,7 +129,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_HUSK "husk"
#define TRAIT_BADDNA "baddna"
#define TRAIT_CLUMSY "clumsy"
#define TRAIT_CLOWNLIKE "clownlike" //for those creatures that are related to clowns, but not necessarily clumsy
#define TRAIT_CHUNKYFINGERS "chunkyfingers" //means that you can't use weapons with normal trigger guards.
#define TRAIT_DUMB "dumb"
#define TRAIT_ADVANCEDTOOLUSER "advancedtooluser" //Whether a mob is dexterous enough to use machines and certain items or not.
@@ -204,7 +203,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_STRONG_GRABBER "strong_grabber"
#define TRAIT_MAGIC_CHOKE "magic_choke"
#define TRAIT_SOOTHED_THROAT "soothed-throat"
#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism"
#define TRAIT_BOOZE_SLIDER "booze-slider"
#define TRAIT_QUICK_CARRY "quick-carry"
#define TRAIT_QUICKER_CARRY "quicker-carry"
@@ -249,6 +247,27 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
// Being close enough to the supermatter makes it heal at higher temperatures
// and emit less heat. Present on /mob or /datum/mind
#define TRAIT_SUPERMATTER_SOOTHER "supermatter_soother"
/*
* Trait granted by various security jobs, and checked by [/obj/item/food/donut]
* When present in the mob's mind, they will always love donuts.
*/
#define TRAIT_DONUT_LOVER "donut_lover"
// METABOLISMS
// Various jobs on the station have historically had better reactions
// to various drinks and foodstuffs. Security liking donuts is a classic
// example. Through years of training/abuse, their livers have taken
// a liking to those substances. Steal a sec officer's liver, eat donuts good.
// These traits are applied to /obj/item/organ/liver
#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law_enforcement_metabolism"
#define TRAIT_CULINARY_METABOLISM "culinary_metabolism"
#define TRAIT_COMEDY_METABOLISM "comedy_metabolism"
#define TRAIT_MEDICAL_METABOLISM "medical_metabolism"
#define TRAIT_GREYTIDE_METABOLISM "greytide_metabolism"
#define TRAIT_ENGINEER_METABOLISM "engineer_metabolism"
#define TRAIT_ROYAL_METABOLISM "royal_metabolism"
#define TRAIT_PRETENDER_ROYAL_METABOLISM "pretender_royal_metabolism"
// If present on a mob or mobmind, allows them to "suplex" an immovable rod
// turning it into a glorified potted plant, and giving them an
@@ -263,6 +282,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_LIGHTBULB_REMOVER "lightbulb_remover"
#define TRAIT_KNOW_CYBORG_WIRES "know_cyborg_wires"
#define TRAIT_KNOW_ENGI_WIRES "know_engi_wires"
#define TRAIT_ENTRAILS_READER "entrails_reader"
///Movement type traits for movables. See elements/movetype_handler.dm
#define TRAIT_MOVE_GROUND "move_ground"
@@ -458,3 +478,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Trait granted by [/mob/living/silicon/robot]
/// Traits applied to a silicon mob by their module.
#define MODULE_TRAIT "module_trait"
/// Trait from [/datum/antagonist/nukeop/clownop]
#define CLOWNOP_TRAIT "clownop"
-1
View File
@@ -22,7 +22,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_HUSK" = TRAIT_HUSK,
"TRAIT_BADDNA" = TRAIT_BADDNA,
"TRAIT_CLUMSY" = TRAIT_CLUMSY,
"TRAIT_CLOWNLIKE" = TRAIT_CLOWNLIKE,
"TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS,
"TRAIT_DUMB" = TRAIT_DUMB,
"TRAIT_ADVANCEDTOOLUSER" = TRAIT_ADVANCEDTOOLUSER,
+9
View File
@@ -39,6 +39,10 @@
else if(isstructure(parent))
RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, .proc/use_squeak)
if(istype(parent, /obj/item/organ/liver))
// Liver squeaking is depending on them functioning like a clown's liver
RegisterSignal(parent, SIGNAL_REMOVETRAIT(TRAIT_COMEDY_METABOLISM), .proc/on_comedy_metabolism_removal)
override_squeak_sounds = custom_sounds
if(chance_override)
squeak_chance = chance_override
@@ -116,3 +120,8 @@
//If the dir changes it means we're going through a bend in the pipes, let's pretend we bumped the wall
if(old_dir != new_dir)
play_squeak()
/datum/component/squeak/proc/on_comedy_metabolism_removal(datum/source, trait)
SIGNAL_HANDLER
qdel(src)
+1 -1
View File
@@ -171,7 +171,7 @@
/obj/item/bikehorn
name = "bike horn"
desc = "A horn off of a bicycle."
desc = "A horn off of a bicycle. Rumour has it that they're made from recycled clowns."
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "bike_horn"
inhand_icon_state = "bike_horn"
+1 -1
View File
@@ -56,7 +56,7 @@
///Override for checkliked in edible component, because all cops LOVE donuts
/obj/item/food/donut/proc/check_liked(fraction, mob/living/carbon/human/H)
if(HAS_TRAIT(H.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM) && !HAS_TRAIT(H, TRAIT_AGEUSIA))
if(!HAS_TRAIT(H, TRAIT_AGEUSIA) && H.mind && HAS_TRAIT(H.mind, TRAIT_DONUT_LOVER))
return FOOD_LIKED
//Use this donut ingame
+39 -15
View File
@@ -5,22 +5,28 @@
antagpanel_category = "ClownOp"
nukeop_outfit = /datum/outfit/syndicate/clownop
/datum/antagonist/nukeop/leader/clownop
name = "Clown Operative Leader"
roundend_category = "clown operatives"
antagpanel_category = "ClownOp"
nukeop_outfit = /datum/outfit/syndicate/clownop/leader
challengeitem = /obj/item/nuclear_challenge/clownops
/datum/antagonist/nukeop/clownop/admin_add(datum/mind/new_owner,mob/admin)
new_owner.assigned_role = "Clown Operative"
new_owner.add_antag_datum(src)
message_admins("[key_name_admin(admin)] has clown op'ed [key_name_admin(new_owner)].")
log_admin("[key_name(admin)] has clown op'ed [key_name(new_owner)].")
/datum/antagonist/nukeop/clownop/apply_innate_effects(mob/living/mob_override)
. = ..()
var/mob/living/L = owner.current || mob_override
ADD_TRAIT(L, TRAIT_NAIVE, "clownop")
ADD_TRAIT(L, TRAIT_CLOWNLIKE, "clownop")
ADD_TRAIT(L, TRAIT_NAIVE, CLOWNOP_TRAIT)
/datum/antagonist/nukeop/clownop/remove_innate_effects(mob/living/mob_override)
var/mob/living/L = owner.current || mob_override
REMOVE_TRAIT(L, TRAIT_NAIVE, "clownop")
REMOVE_TRAIT(L, TRAIT_CLOWNLIKE, "clownop")
REMOVE_TRAIT(L, TRAIT_NAIVE, CLOWNOP_TRAIT)
return ..()
/datum/antagonist/nukeop/clownop/equip_op()
. = ..()
var/mob/living/current_mob = owner.current
var/obj/item/organ/liver/liver = current_mob.getorganslot(ORGAN_SLOT_LIVER)
if(liver)
ADD_TRAIT(liver, TRAIT_COMEDY_METABOLISM, CLOWNOP_TRAIT)
/datum/antagonist/nukeop/leader/clownop/give_alias()
title = pick("Head Honker", "Slipmaster", "Clown King", "Honkbearer")
@@ -29,8 +35,26 @@
else
owner.current.real_name = "Syndicate [title]"
/datum/antagonist/nukeop/clownop/admin_add(datum/mind/new_owner,mob/admin)
new_owner.assigned_role = "Clown Operative"
new_owner.add_antag_datum(src)
message_admins("[key_name_admin(admin)] has clown op'ed [key_name_admin(new_owner)].")
log_admin("[key_name(admin)] has clown op'ed [key_name(new_owner)].")
/datum/antagonist/nukeop/leader/clownop
name = "Clown Operative Leader"
roundend_category = "clown operatives"
antagpanel_category = "ClownOp"
nukeop_outfit = /datum/outfit/syndicate/clownop/leader
challengeitem = /obj/item/nuclear_challenge/clownops
/datum/antagonist/nukeop/leader/clownop/apply_innate_effects(mob/living/mob_override)
. = ..()
var/mob/living/L = owner.current || mob_override
ADD_TRAIT(L, TRAIT_NAIVE, CLOWNOP_TRAIT)
/datum/antagonist/nukeop/leader/clownop/remove_innate_effects(mob/living/mob_override)
var/mob/living/L = owner.current || mob_override
REMOVE_TRAIT(L, TRAIT_NAIVE, CLOWNOP_TRAIT)
return ..()
/datum/antagonist/nukeop/leader/clownop/equip_op()
. = ..()
var/mob/living/L = owner.current
var/obj/item/organ/liver/liver = L.getorganslot(ORGAN_SLOT_LIVER)
if(liver)
ADD_TRAIT(liver, TRAIT_COMEDY_METABOLISM, CLOWNOP_TRAIT)
+9
View File
@@ -61,6 +61,9 @@
var/list/mind_traits // Traits added to the mind of the mob assigned this job
///Lazylist of traits added to the liver of the mob assigned this job (used for the classic "cops heal from donuts" reaction, among others)
var/list/liver_traits = null
var/display_order = JOB_DISPLAY_ORDER_DEFAULT
var/bounty_types = CIV_JOB_BASIC
@@ -87,6 +90,12 @@
for(var/t in mind_traits)
ADD_TRAIT(H.mind, t, JOB_TRAIT)
var/obj/item/organ/liver/liver = H.getorganslot(ORGAN_SLOT_LIVER)
if(liver)
for(var/t in liver_traits)
ADD_TRAIT(liver, t, JOB_TRAIT)
var/list/roundstart_experience
if(!ishuman(H))
+3
View File
@@ -13,6 +13,9 @@ Assistant
outfit = /datum/outfit/job/assistant
antag_rep = 7
paycheck = PAYCHECK_ASSISTANT // Get a job. Job reassignment changes your paycheck now. Get over it.
liver_traits = list(TRAIT_GREYTIDE_METABOLISM)
paycheck_department = ACCOUNT_CIV
display_order = JOB_DISPLAY_ORDER_ASSISTANT
@@ -16,6 +16,9 @@
minimal_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS, ACCESS_AUX_BASE, ACCESS_CONSTRUCTION, ACCESS_MECH_ENGINE, ACCESS_MINERAL_STOREROOM)
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_ENG
liver_traits = list(TRAIT_ENGINEER_METABOLISM)
display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN
bounty_types = CIV_JOB_ENG
+2
View File
@@ -20,6 +20,8 @@
paycheck = PAYCHECK_COMMAND
paycheck_department = ACCOUNT_SEC
liver_traits = list(TRAIT_ROYAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_CAPTAIN
/datum/job/captain/get_access()
+2
View File
@@ -129,6 +129,8 @@
/obj/item/camera/spooky = 1
)
skillchips = list(/obj/item/skillchip/entrails_reader)
backpack = /obj/item/storage/backpack/cultpack
satchel = /obj/item/storage/backpack/cultpack
+2
View File
@@ -16,6 +16,8 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_MED
liver_traits = list(TRAIT_MEDICAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_CHEMIST
bounty_types = CIV_JOB_CHEM
@@ -27,6 +27,8 @@
paycheck = PAYCHECK_COMMAND
paycheck_department = ACCOUNT_ENG
liver_traits = list(TRAIT_ENGINEER_METABOLISM, TRAIT_ROYAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER
bounty_types = CIV_JOB_ENG
@@ -25,6 +25,8 @@
paycheck = PAYCHECK_COMMAND
paycheck_department = ACCOUNT_MED
liver_traits = list(TRAIT_MEDICAL_METABOLISM, TRAIT_ROYAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER
bounty_types = CIV_JOB_MED
@@ -43,6 +45,8 @@
suit_store = /obj/item/flashlight/pen/paramedic
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced/command=1)
skillchips = list(/obj/item/skillchip/entrails_reader)
backpack = /obj/item/storage/backpack/medic
satchel = /obj/item/storage/backpack/satchel/med
duffelbag = /obj/item/storage/backpack/duffelbag/med
+2 -1
View File
@@ -14,6 +14,8 @@
paycheck = PAYCHECK_MINIMAL
paycheck_department = ACCOUNT_SRV
liver_traits = list(TRAIT_COMEDY_METABOLISM)
display_order = JOB_DISPLAY_ORDER_CLOWN
@@ -55,7 +57,6 @@
H.fully_replace_character_name(H.real_name, pick(GLOB.clown_names)) //rename the mob AFTER they're equipped so their ID gets updated properly.
ADD_TRAIT(H, TRAIT_NAIVE, JOB_TRAIT)
ADD_TRAIT(H, TRAIT_CLOWNLIKE, JOB_TRAIT)
H.dna.add_mutation(CLOWNMUT)
for(var/datum/mutation/human/clumsy/M in H.dna.mutations)
M.mutadone_proof = TRUE
+2
View File
@@ -15,6 +15,8 @@
paycheck = PAYCHECK_EASY
paycheck_department = ACCOUNT_SRV
liver_traits = list(TRAIT_CULINARY_METABOLISM)
display_order = JOB_DISPLAY_ORDER_COOK
bounty_types = CIV_JOB_CHEF
+3 -1
View File
@@ -17,7 +17,9 @@
minimal_access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_MECH_SECURITY, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_SEC
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
mind_traits = list(TRAIT_DONUT_LOVER)
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
display_order = JOB_DISPLAY_ORDER_DETECTIVE
@@ -34,6 +34,8 @@
paycheck_department = ACCOUNT_SRV
bounty_types = CIV_JOB_RANDOM
liver_traits = list(TRAIT_ROYAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL
/datum/outfit/job/hop
@@ -15,7 +15,9 @@
exp_type_department = EXP_TYPE_SECURITY
outfit = /datum/outfit/job/hos
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
mind_traits = list(TRAIT_DONUT_LOVER)
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM, TRAIT_ROYAL_METABOLISM)
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MECH_SECURITY,
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_AUX_BASE,
+3 -1
View File
@@ -14,7 +14,9 @@
minimal_access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS)
paycheck = PAYCHECK_EASY
paycheck_department = ACCOUNT_SRV
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
mind_traits = list(TRAIT_DONUT_LOVER)
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
display_order = JOB_DISPLAY_ORDER_LAWYER
@@ -14,6 +14,8 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_MED
liver_traits = list(TRAIT_MEDICAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_MEDICAL_DOCTOR
bounty_types = CIV_JOB_MED
@@ -34,4 +36,6 @@
duffelbag = /obj/item/storage/backpack/duffelbag/med
box = /obj/item/storage/box/survival/medical
skillchips = list(/obj/item/skillchip/entrails_reader)
chameleon_extras = /obj/item/gun/syringe
+2
View File
@@ -16,6 +16,8 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_MED
liver_traits = list(TRAIT_MEDICAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_PARAMEDIC
bounty_types = CIV_JOB_MED
@@ -14,6 +14,8 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_SRV
liver_traits = list(TRAIT_MEDICAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_PSYCHOLOGIST
/datum/outfit/job/psychologist
@@ -15,6 +15,8 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_CAR
liver_traits = list(TRAIT_PRETENDER_ROYAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_QUARTERMASTER
bounty_types = CIV_JOB_RANDOM
@@ -17,7 +17,9 @@
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MECH_SECURITY, ACCESS_MINERAL_STOREROOM) // See /datum/job/officer/get_access()
paycheck = PAYCHECK_HARD
paycheck_department = ACCOUNT_SEC
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
mind_traits = list(TRAIT_DONUT_LOVER)
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
display_order = JOB_DISPLAY_ORDER_SECURITY_OFFICER
bounty_types = CIV_JOB_SEC
@@ -18,6 +18,8 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_ENG
liver_traits = list(TRAIT_ENGINEER_METABOLISM)
display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER
bounty_types = CIV_JOB_ENG
@@ -16,6 +16,8 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_MED
liver_traits = list(TRAIT_MEDICAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_VIROLOGIST
bounty_types = CIV_JOB_VIRO
+3 -1
View File
@@ -17,7 +17,9 @@
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_MECH_SECURITY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) // See /datum/job/warden/get_access()
paycheck = PAYCHECK_HARD
paycheck_department = ACCOUNT_SEC
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
mind_traits = list(TRAIT_DONUT_LOVER)
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
display_order = JOB_DISPLAY_ORDER_WARDEN
bounty_types = CIV_JOB_SEC
@@ -424,3 +424,12 @@
skill_icon = "save"
activate_message = "<span class='notice'>You feel your mind automatically verifying long serial numbers on disk shaped objects.</span>"
deactivate_message = "<span class='notice'>The innate recognition of absurdly long disk-related serial numbers fades from your mind.</span>"
/obj/item/skillchip/entrails_reader
name = "3NTR41LS skillchip"
auto_traits = list(TRAIT_ENTRAILS_READER)
skill_name = "Entrails Reader"
skill_description = "Be able to learn about a person's life, by looking at their internal organs. Not to be confused with looking into the future."
skill_icon = "lungs"
activate_message = "<span class='notice'>You feel that you know a lot about interpreting organs.</span>"
deactivate_message = "<span class='notice'>Knowledge of liver damage, heart strain and lung scars fades from your mind.</span>"
@@ -532,7 +532,20 @@
id = "bananium golem"
fixed_mut_color = "ff0"
say_mod = "honks"
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS, TRAIT_CLUMSY, TRAIT_CLOWNLIKE, TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
inherent_traits = list(
TRAIT_RESISTHEAT,
TRAIT_NOBREATH,
TRAIT_RESISTCOLD,
TRAIT_RESISTHIGHPRESSURE,
TRAIT_RESISTLOWPRESSURE,
TRAIT_NOFIRE,
TRAIT_CHUNKYFINGERS,
TRAIT_CLUMSY,
TRAIT_RADIMMUNE,
TRAIT_GENELESS,
TRAIT_PIERCEIMMUNE,
TRAIT_NODISMEMBER,
)
punchdamagelow = 0
punchdamagehigh = 1
punchstunthreshold = 2 //Harmless and can't stun
@@ -554,11 +567,18 @@
last_banana = world.time
last_honk = world.time
RegisterSignal(C, COMSIG_MOB_SAY, .proc/handle_speech)
var/obj/item/organ/liver/liver = C.getorganslot(ORGAN_SLOT_LIVER)
if(liver)
ADD_TRAIT(liver, TRAIT_COMEDY_METABOLISM, SPECIES_TRAIT)
/datum/species/golem/bananium/on_species_loss(mob/living/carbon/C)
. = ..()
UnregisterSignal(C, COMSIG_MOB_SAY)
var/obj/item/organ/liver/liver = C.getorganslot(ORGAN_SLOT_LIVER)
if(liver)
REMOVE_TRAIT(liver, TRAIT_COMEDY_METABOLISM, SPECIES_TRAIT)
/datum/species/golem/bananium/random_name(gender,unique,lastname)
var/clown_name = pick(GLOB.clown_names)
var/golem_name = "[uppertext(clown_name)]"
@@ -302,7 +302,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/carbon/M)
if(M.getBruteLoss() && prob(10))
M.heal_bodypart_damage(1)
M.heal_bodypart_damage(brute = 1)
. = 1
return ..() || .
@@ -455,9 +455,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
/datum/reagent/consumable/ethanol/hooch/on_mob_life(mob/living/carbon/M)
if(M.mind && M.mind.assigned_role == "Assistant")
M.heal_bodypart_damage(1,1)
. = 1
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_GREYTIDE_METABOLISM))
M.heal_bodypart_damage(brute = 1, burn = 1)
. = TRUE
return ..() || .
/datum/reagent/consumable/ethanol/ale
@@ -593,7 +594,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
/datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/carbon/M)
if(M.mind && (M.mind.assigned_role in GLOB.engineering_positions)) //Engineers lose radiation poisoning at a massive rate.
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
if(HAS_TRAIT(liver, TRAIT_ENGINEER_METABOLISM))
// Engineers lose radiation poisoning at a massive rate.
M.radiation = max(M.radiation - 25, 0)
return ..()
@@ -707,14 +710,18 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_metabolize(mob/living/carbon/M)
if(HAS_TRAIT(M, TRAIT_ALCOHOL_TOLERANCE))
metabolization_rate = 0.8
if(M.mind != null && !HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM))
// if you don't have a liver, or your liver isn't an officer's liver
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
if(!liver || !HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
B = new()
M.gain_trauma(B, TRAUMA_RESILIENCE_ABSOLUTE)
..()
/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/carbon/M)
M.Jitter(2)
if(M.mind != null && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM))
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
// if you don't have a liver, or your liver isn't an officer's liver
if(!liver || !HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
M.adjustStaminaLoss(-10, 0)
if(prob(20))
new /datum/hallucination/items_other(M)
@@ -729,7 +736,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
return ..()
/datum/reagent/consumable/ethanol/beepsky_smash/overdose_start(mob/living/carbon/M)
if(M.mind != null && !HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM))
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
// if you don't have a liver, or your liver isn't an officer's liver
if(!liver || !HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
M.gain_trauma(/datum/brain_trauma/mild/phobia/security, TRAUMA_RESILIENCE_BASIC)
/datum/reagent/consumable/ethanol/irish_cream
@@ -1203,9 +1212,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "A drink from Clown Heaven."
/datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/carbon/M)
if((ishuman(M) && HAS_TRAIT(M, TRAIT_CLOWNLIKE)) || ismonkey(M))
M.heal_bodypart_damage(1,1)
. = 1
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
if((liver && HAS_TRAIT(liver, TRAIT_COMEDY_METABOLISM)) || ismonkey(M))
M.heal_bodypart_damage(brute = 1, burn = 1)
. = TRUE
return ..() || .
/datum/reagent/consumable/ethanol/silencer
@@ -1545,8 +1555,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/quadruple_sec/on_mob_life(mob/living/carbon/M)
//Securidrink in line with the Screwdriver for engineers or Nothing for mimes
if(M.mind != null && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM))
M.heal_bodypart_damage(1, 1)
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
M.heal_bodypart_damage(brute = 1, burn = 1)
M.adjustBruteLoss(-2,0)
. = 1
return ..()
@@ -1564,8 +1575,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/quintuple_sec/on_mob_life(mob/living/carbon/M)
//Securidrink in line with the Screwdriver for engineers or Nothing for mimes but STRONG..
if(M.mind != null && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM))
M.heal_bodypart_damage(2,2,2)
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
M.heal_bodypart_damage(brute = 2, burn = 2, stamina = 2)
M.adjustBruteLoss(-5,0)
M.adjustOxyLoss(-5,0)
M.adjustFireLoss(-5,0)
@@ -2055,7 +2067,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/wizz_fizz/on_mob_life(mob/living/carbon/M)
//A healing drink similar to Quadruple Sec, Ling Stings, and Screwdrivers for the Wizznerds; the check is consistent with the changeling sting
if(M?.mind?.has_antag_datum(/datum/antagonist/wizard))
M.heal_bodypart_damage(1,1,1)
M.heal_bodypart_damage(brute = 1, burn = 1, stamina = 1)
M.adjustOxyLoss(-1,0)
M.adjustToxLoss(-1,0)
return ..()
@@ -2149,7 +2161,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
if(N.age > 969) //Best not let people get older than this or i might incur G-ds wrath
M.visible_message("<span class='notice'>[M] becomes older than any man should be.. and crumbles into dust!</span>")
M.dust(0,1,0)
M.dust(just_ash = FALSE, drop_items = TRUE, force = FALSE)
return ..()
@@ -127,9 +127,10 @@
glass_desc = "The raw essence of a banana. HONK."
/datum/reagent/consumable/banana/on_mob_life(mob/living/carbon/M)
if((ishuman(M) && HAS_TRAIT(M, TRAIT_CLOWNLIKE)) || ismonkey(M))
M.heal_bodypart_damage(1,1, 0)
. = 1
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
if((liver && HAS_TRAIT(liver, TRAIT_COMEDY_METABOLISM)) || ismonkey(M))
M.heal_bodypart_damage(brute = 1, burn = 1)
. = TRUE
..()
/datum/reagent/consumable/nothing
@@ -685,7 +686,9 @@
M.adjustToxLoss(-0.5, 0)
M.adjustOxyLoss(-0.5, 0)
if(M.nutrition && (M.nutrition - 2 > 0))
if(!(M.mind && (M.mind.assigned_role in GLOB.medical_positions))) //Drains the nutrition of the holder. Not medical doctors though, since it's the Doctor's Delight!
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
if(!(HAS_TRAIT(liver, TRAIT_MEDICAL_METABOLISM)))
// Drains the nutrition of the holder. Not medical doctors though, since it's the Doctor's Delight!
M.adjust_nutrition(-2)
..()
. = 1
@@ -57,7 +57,7 @@
/datum/reagent/consumable/nutriment/on_mob_life(mob/living/carbon/M)
if(prob(50))
M.heal_bodypart_damage(brute_heal,burn_heal, 0)
M.heal_bodypart_damage(brute = brute_heal, burn = burn_heal)
. = 1
..()
@@ -428,11 +428,11 @@
to_chat(M, "<span class='danger'>You can't get the scent of garlic out of your nose! You can barely think...</span>")
M.Paralyze(10)
M.Jitter(10)
else if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.job == "Cook")
else
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_CULINARY_METABOLISM))
if(prob(20)) //stays in the system much longer than sprinkles/banana juice, so heals slower to partially compensate
H.heal_bodypart_damage(1,1, 0)
M.heal_bodypart_damage(brute = 1, burn = 1)
. = 1
..()
@@ -443,8 +443,9 @@
taste_description = "childhood whimsy"
/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/carbon/M)
if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM))
M.heal_bodypart_damage(1,1, 0)
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
M.heal_bodypart_damage(brute = 1, burn = 1)
. = 1
..()
@@ -1677,15 +1677,17 @@
/datum/reagent/carpet/royal/on_mob_life(mob/living/carbon/M)
. = ..()
if(!M.mind?.assigned_role)
return
switch(M.mind.assigned_role)
if("Chief Medical Officer", "Captain", "Chief Engineer", "Research Director", "Head of Personnel")
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
if(liver)
// Heads of staff and the captain have a "royal metabolism"
if(HAS_TRAIT(liver, TRAIT_ROYAL_METABOLISM))
if(prob(10))
to_chat(M, "You feel like royalty.")
if(prob(5))
M.say(pick("Peasants..","This carpet is worth more than your contracts!","I could fire you at any time..."), forced = "royal carpet")
if("Quartermaster")
// The quartermaster, as a semi-head, has a "pretender royal" metabolism
else if(HAS_TRAIT(liver, TRAIT_PRETENDER_ROYAL_METABOLISM))
if(prob(15))
to_chat(M, "You feel like an impostor...")
@@ -2126,9 +2128,6 @@
description = "A colorless liquid that suppresses violence in its subjects. Cheaper to synthesize than normal Pax, but wears off faster."
metabolization_rate = 1.5 * REAGENTS_METABOLISM
/datum/reagent/peaceborg
can_synth = FALSE
/datum/reagent/peaceborg/confuse
name = "Dizzying Solution"
description = "Makes the target off balance and dizzy"
+47
View File
@@ -21,6 +21,53 @@
var/toxLethality = LIVER_DEFAULT_TOX_LETHALITY//affects how much damage toxins do to the liver
var/filterToxins = TRUE //whether to filter toxins
/obj/item/organ/liver/Initialize()
. = ..()
// If the liver handles foods like a clown, it honks like a bike horn
// Don't think about it too much.
RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_COMEDY_METABOLISM), .proc/on_add_comedy_metabolism)
/* Signal handler for the liver gaining the TRAIT_COMEDY_METABOLISM trait
*
* Adds the "squeak" component, so clown livers will act just like their
* bike horns, and honk when you hit them with things, or throw them
* against things, or step on them.
*
* The removal of the component, if this liver loses that trait, is handled
* by the component itself.
*/
/obj/item/organ/liver/proc/on_add_comedy_metabolism()
SIGNAL_HANDLER
// Are clown "bike" horns made from the livers of ex-clowns?
// Would that make the clown more or less likely to honk it
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50, falloff_exponent = 20)
/obj/item/organ/liver/examine(mob/user)
. = ..()
if(HAS_TRAIT(user, TRAIT_ENTRAILS_READER) || (user.mind && HAS_TRAIT(user.mind, TRAIT_ENTRAILS_READER)) || isobserver(user))
if(HAS_TRAIT(src, TRAIT_LAW_ENFORCEMENT_METABOLISM))
. += "Fatty deposits and sprinkle residue, imply that this is the liver of someone in <em>security</em>."
if(HAS_TRAIT(src, TRAIT_CULINARY_METABOLISM))
. += "The high iron content and slight smell of garlic, implies that this is the liver of a <em>cook</em>."
if(HAS_TRAIT(src, TRAIT_COMEDY_METABOLISM))
. += "A smell of bananas, a slippery sheen and <span class='clown'>honking</span> when depressed, implies that this is the liver of a <em>clown</em>."
if(HAS_TRAIT(src, TRAIT_MEDICAL_METABOLISM))
. += "Marks of stress and a faint whiff of medicinal alcohol, imply that this is the liver of a <em>medical worker</em>."
if(HAS_TRAIT(src, TRAIT_GREYTIDE_METABOLISM))
. += "Greyer than most with electrical burn marks, this is the liver of an <em>assistant</em>."
if(HAS_TRAIT(src, TRAIT_ENGINEER_METABOLISM))
. += "Signs of radiation exposure and space adaption, implies that this is the liver of an <em>engineer</em>."
// royal trumps pretender royal
if(HAS_TRAIT(src, TRAIT_ROYAL_METABOLISM))
. += "A rich diet of luxury food, suppleness from soft beds, implies that this is the liver of a <em>head of staff</em>."
else if(HAS_TRAIT(src, TRAIT_PRETENDER_ROYAL_METABOLISM))
. += "A diet of imitation caviar, and signs of insomnia, implies that this is the liver of <em>someone who wants to be a head of staff</em>."
#define HAS_SILENT_TOXIN 0 //don't provide a feedback message if this is the only toxin present
#define HAS_NO_TOXIN 1
#define HAS_PAINFUL_TOXIN 2