From 3291b9c47ad847f0a7f1925f71170c754ce82b6f Mon Sep 17 00:00:00 2001 From: Ghommie Date: Fri, 28 Jun 2019 23:17:12 +0200 Subject: [PATCH 1/3] Porting in donut fixes, beepsky smash and Neurotoxin reworks. --- code/__DEFINES/traits.dm | 2 + code/controllers/subsystem/traumas.dm | 20 ++--- code/datums/brain_damage/phobia.dm | 6 +- code/datums/brain_damage/special.dm | 68 +++++++++++++++ .../food_and_drinks/food/snacks_pastry.dm | 37 ++++---- .../food_and_drinks/recipes/drinks_recipes.dm | 4 +- code/modules/jobs/job_types/civilian.dm | 3 + .../jobs/job_types/civilian_chaplain.dm | 1 + code/modules/jobs/job_types/job.dm | 5 ++ code/modules/jobs/job_types/security.dm | 7 ++ .../mob/living/simple_animal/friendly/cat.dm | 8 +- .../chemistry/reagents/alcohol_reagents.dm | 84 ++++++++++++++----- .../chemistry/reagents/food_reagents.dm | 2 +- 13 files changed, 184 insertions(+), 63 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index b42cbb8f00..592915e58f 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -112,6 +112,7 @@ #define TRAIT_PARALYSIS_R_ARM "para-r-arm" #define TRAIT_PARALYSIS_L_LEG "para-l-leg" #define TRAIT_PARALYSIS_R_LEG "para-r-leg" +#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism" //non-mob traits #define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it @@ -151,6 +152,7 @@ #define TRAUMA_TRAIT "trauma" #define SPECIES_TRAIT "species" #define ORGAN_TRAIT "organ" +#define JOB_TRAIT "job" #define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention // unique trait sources, still defines diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index d70493dedf..ee1f5b8c3d 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -72,7 +72,7 @@ SUBSYSTEM_DEF(traumas) "security" = typecacheof(list(/obj/item/clothing/under/rank/security, /obj/item/clothing/under/rank/warden, /obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/det, /obj/item/melee/baton, /obj/item/gun/energy/taser, /obj/item/restraints/handcuffs, - /obj/machinery/door/airlock/security)), + /obj/machinery/door/airlock/security, /obj/effect/hallucination/simple/securitron)), "clowns" = typecacheof(list(/obj/item/clothing/under/rank/clown, /obj/item/clothing/shoes/clown_shoes, /obj/item/clothing/mask/gas/clown_hat, /obj/item/instrument/bikehorn, @@ -160,22 +160,22 @@ SUBSYSTEM_DEF(traumas) /obj/item/grown/bananapeel/mimanapeel, /obj/item/cartridge/virus/mime, /obj/item/clothing/shoes/sneakers/mime, /obj/item/bedsheet/mime, /obj/item/reagent_containers/food/snacks/burger/mime, /obj/item/clothing/head/beret, /obj/item/clothing/mask/gas/sexymime, /obj/item/clothing/under/sexymime, /obj/item/toy/figure/mime, /obj/item/toy/crayon/mime, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, /obj/mecha/combat/reticence)), - + "cats" = typecacheof(list(/obj/item/organ/ears/cat, /obj/item/organ/tail/cat, /obj/item/laser_pointer, /obj/item/toy/cattoy, /obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty, /obj/item/melee/chainofcommand/tailwhip/kitty, /obj/item/stack/sheet/animalhide/cat)), - + "syndicate" = typecacheof(list(/obj/item/stack/tile/mineral/plastitanium, /obj/machinery/computer/shuttle/syndicate, /obj/machinery/computer/shuttle/syndicate/recall, /obj/machinery/computer/shuttle/syndicate/drop_pod, /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate, /obj/machinery/recharge_station, /obj/machinery/porta_turret/syndicate, /obj/structure/closet/syndicate, /obj/machinery/suit_storage_unit/syndicate, /obj/item/clothing/under/syndicate, /obj/item/folder/syndicate, /obj/item/documents/syndicate, /obj/item/clothing/glasses/phantomthief/syndicate, /obj/item/antag_spawner/nuke_ops, /obj/item/storage/box/syndicate, /obj/structure/fluff/empty_sleeper/syndicate, /obj/item/implant/radio/syndicate, /obj/item/clothing/head/helmet/space/syndicate, /obj/machinery/nuclearbomb/syndicate, /obj/item/grenade/syndieminibomb, /obj/item/storage/backpack/duffelbag/syndie, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver/syndie, /obj/item/gun/ballistic/automatic/shotgun/bulldog, /obj/item/gun/ballistic/automatic/c20r, /obj/item/gun/ballistic/automatic/m90, /obj/item/gun/ballistic/automatic/l6_saw, /obj/item/storage/belt/grenade/full, /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate, /obj/item/gun/energy/kinetic_accelerator/crossbow, - /obj/item/melee/transforming/energy/sword/saber, /obj/item/twohanded/dualsaber, /obj/item/melee/powerfist, /obj/item/storage/box/syndie_kit, /obj/item/grenade/spawnergrenade/manhacks, /obj/item/grenade/chem_grenade/bioterrorfoam, /obj/item/reagent_containers/spray/chemsprayer/bioterror, /obj/item/ammo_box/magazine/m10mm, + /obj/item/melee/transforming/energy/sword/saber, /obj/item/twohanded/dualsaber, /obj/item/melee/powerfist, /obj/item/storage/box/syndie_kit, /obj/item/grenade/spawnergrenade/manhacks, /obj/item/grenade/chem_grenade/bioterrorfoam, /obj/item/reagent_containers/spray/chemsprayer/bioterror, /obj/item/ammo_box/magazine/m10mm, /obj/item/ammo_box/magazine/pistolm9mm, /obj/item/ammo_box/a357, /obj/item/ammo_box/magazine/m12g, /obj/item/ammo_box/magazine/mm195x129, /obj/item/antag_spawner/nuke_ops, /obj/mecha/combat/gygax/dark, /obj/mecha/combat/marauder/mauler, /obj/item/soap/syndie, /obj/item/gun/syringe/syndicate, /obj/item/cartridge/virus/syndicate, /obj/item/cartridge/virus/frame, /obj/item/chameleon, /obj/item/storage/box/syndie_kit/cutouts, /obj/item/clothing/suit/space/hardsuit/syndi, /obj/item/card/emag, /obj/item/storage/toolbox/syndicate, /obj/item/storage/book/bible/syndicate, /obj/item/encryptionkey/binary, /obj/item/encryptionkey/syndicate, /obj/item/aiModule/syndicate, - /obj/item/clothing/shoes/magboots/syndie, /obj/item/powersink, /obj/item/sbeacondrop, /obj/item/sbeacondrop/bomb, /obj/item/syndicatedetonator, /obj/item/shield/energy, /obj/item/assault_pod, /obj/item/slimepotion/slime/sentience/nuclear, /obj/item/stack/telecrystal, /obj/item/jammer, /obj/item/codespeak_manual/unlimited, - /obj/item/toy/cards/deck/syndicate, /obj/item/storage/secure/briefcase/syndie, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/toy/syndicateballoon, /obj/item/clothing/gloves/rapid, /obj/item/paper/fluff/ruins/thederelict/syndie_mission, /obj/item/organ/cyberimp/eyes/hud/security/syndicate, /obj/item/clothing/head/HoS/syndicate, - /obj/machinery/computer/pod/old/syndicate, /obj/machinery/vending/medical/syndicate_access, /obj/item/mmi/syndie, /obj/item/target/syndicate, /obj/machinery/vending/cigarette/syndicate, /obj/item/robot_module/syndicate, /obj/item/clothing/mask/gas/syndicate, /obj/machinery/power/singularity_beacon/syndicate, /obj/item/clothing/head/syndicatefake, - /obj/item/radio/headset/syndicate, /obj/item/gun/ballistic/automatic/pistol/antitank/syndicate, /obj/item/pda/syndicate, /obj/item/clothing/suit/armor/vest/capcarapace/syndicate, /obj/item/gun/ballistic/automatic/flechette, /obj/item/ammo_box/magazine/flechette, /obj/item/clothing/suit/toggle/lawyer/black/syndie, /obj/item/melee/transforming/energy/sword/cx/traitor, - /obj/structure/sign/poster/contraband/syndicate_pistol, /obj/structure/sign/poster/contraband/syndicate_recruitment, /obj/item/bedsheet/syndie, /obj/item/borg/upgrade/syndicate, /obj/item/tank/jetpack/oxygen/harness, /obj/item/firing_pin/implant/pindicate, /obj/item/reagent_containers/glass/bottle/traitor, /obj/item/storage/belt/military, + /obj/item/clothing/shoes/magboots/syndie, /obj/item/powersink, /obj/item/sbeacondrop, /obj/item/sbeacondrop/bomb, /obj/item/syndicatedetonator, /obj/item/shield/energy, /obj/item/assault_pod, /obj/item/slimepotion/slime/sentience/nuclear, /obj/item/stack/telecrystal, /obj/item/jammer, /obj/item/codespeak_manual/unlimited, + /obj/item/toy/cards/deck/syndicate, /obj/item/storage/secure/briefcase/syndie, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/toy/syndicateballoon, /obj/item/clothing/gloves/rapid, /obj/item/paper/fluff/ruins/thederelict/syndie_mission, /obj/item/organ/cyberimp/eyes/hud/security/syndicate, /obj/item/clothing/head/HoS/syndicate, + /obj/machinery/computer/pod/old/syndicate, /obj/machinery/vending/medical/syndicate_access, /obj/item/mmi/syndie, /obj/item/target/syndicate, /obj/machinery/vending/cigarette/syndicate, /obj/item/robot_module/syndicate, /obj/item/clothing/mask/gas/syndicate, /obj/machinery/power/singularity_beacon/syndicate, /obj/item/clothing/head/syndicatefake, + /obj/item/radio/headset/syndicate, /obj/item/gun/ballistic/automatic/pistol/antitank/syndicate, /obj/item/pda/syndicate, /obj/item/clothing/suit/armor/vest/capcarapace/syndicate, /obj/item/gun/ballistic/automatic/flechette, /obj/item/ammo_box/magazine/flechette, /obj/item/clothing/suit/toggle/lawyer/black/syndie, /obj/item/melee/transforming/energy/sword/cx/traitor, + /obj/structure/sign/poster/contraband/syndicate_pistol, /obj/structure/sign/poster/contraband/syndicate_recruitment, /obj/item/bedsheet/syndie, /obj/item/borg/upgrade/syndicate, /obj/item/tank/jetpack/oxygen/harness, /obj/item/firing_pin/implant/pindicate, /obj/item/reagent_containers/glass/bottle/traitor, /obj/item/storage/belt/military, /obj/item/twohanded/shockpaddles/syndicate, /obj/item/clothing/mask/cigarette/syndicate, /obj/item/toy/plush/nukeplushie)), "eye" = typecacheof(list(/obj/item/organ/eyes, /obj/item/reagent_containers/syringe)) @@ -199,7 +199,7 @@ SUBSYSTEM_DEF(traumas) "anime" = typecacheof(list(/datum/species/human/felinid)), "cats" = typecacheof(list(/datum/species/human/felinid)), "syndicate" = typecacheof(list(/datum/species/corporate, /datum/species/zombie/infectious)) - ) + ) return ..() diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm index c6ccbee38c..53cc3afa9b 100644 --- a/code/datums/brain_damage/phobia.dm +++ b/code/datums/brain_damage/phobia.dm @@ -81,7 +81,7 @@ /datum/brain_trauma/mild/phobia/on_say(message) for(var/word in trigger_words) var/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i") - + if(findtext(message, reg)) to_chat(owner, "You can't bring yourself to say the word \"[word]\"!") return "" @@ -119,3 +119,7 @@ owner.confused += 10 owner.Jitter(10) owner.stuttering += 10 + +/datum/brain_trauma/mild/phobia/security + phobia_type = "security" + can_gain = FALSE diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index 0bbbf8de08..ce180af34c 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -134,3 +134,71 @@ /datum/brain_trauma/special/psychotic_brawling/bath_salts name = "Chemical Violent Psychosis" + can_gain = FALSE + +/datum/brain_trauma/special/beepsky + name = "Criminal" + desc = "Patient seems to be a criminal." + scan_desc = "criminal mind" + gain_text = "Justice is coming for you." + lose_text = "You were absolved for your crimes." + can_gain = FALSE + var/obj/effect/hallucination/simple/securitron/beepsky + +/datum/brain_trauma/special/beepsky/on_gain() + create_securitron() + ..() + +/datum/brain_trauma/special/beepsky/proc/create_securitron() + var/turf/where = locate(owner.x + pick(-12, 12), owner.y + pick(-12, 12), owner.z) + beepsky = new(where, owner) + beepsky.victim = owner + +/datum/brain_trauma/special/beepsky/on_lose() + QDEL_NULL(beepsky) + ..() + +/datum/brain_trauma/special/beepsky/on_life() + if(QDELETED(beepsky) || !beepsky.loc || beepsky.z != owner.z) + QDEL_NULL(beepsky) + if(prob(30)) + create_securitron() + else + return + if(get_dist(owner, beepsky) >= 10 && prob(20)) + QDEL_NULL(beepsky) + create_securitron() + if(owner.stat != CONSCIOUS) + if(prob(20)) + owner.playsound_local(beepsky, 'sound/voice/beepsky/iamthelaw.ogg', 50) + return + if(get_dist(owner, beepsky) <= 1) + owner.playsound_local(owner, 'sound/weapons/egloves.ogg', 50) + owner.visible_message("[owner]'s body jerks as if it was shocked.", "You feel the fist of the LAW.") + owner.take_bodypart_damage(0,0,rand(40, 70)) + QDEL_NULL(beepsky) + if(prob(20) && get_dist(owner, beepsky) <= 8) + owner.playsound_local(beepsky, 'sound/voice/beepsky/criminal.ogg', 40) + ..() + +/obj/effect/hallucination/simple/securitron + name = "Securitron" + desc = "The LAW is coming." + image_icon = 'icons/mob/aibots.dmi' + image_state = "secbot-c" + var/victim + +/obj/effect/hallucination/simple/securitron/New() + name = pick ( "officer Beepsky", "officer Johnson", "officer Pingsky") + START_PROCESSING(SSfastprocess,src) + ..() + +/obj/effect/hallucination/simple/securitron/process() + if(prob(60)) + forceMove(get_step_towards(src, victim)) + if(prob(5)) + to_chat(victim, "[name] exclaims, \"Level 10 infraction alert!\"") + +/obj/effect/hallucination/simple/securitron/Destroy() + STOP_PROCESSING(SSfastprocess,src) + return ..() \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index 927a7d2697..238bb4f86a 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -8,27 +8,34 @@ icon_state = "donut1" bitesize = 5 bonus_reagents = list("sugar" = 1) - list_reagents = list("nutriment" = 3, "sugar" = 2) - var/extra_reagent = null + list_reagents = list("nutriment" = 3, "sprinkles" = 1, "sugar" = 2) filling_color = "#D2691E" tastes = list("donut" = 1) foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR + var/frosted_icon = "donut2" + var/is_frosted = FALSE + var/extra_reagent = null /obj/item/reagent_containers/food/snacks/donut/Initialize() . = ..() if(prob(30)) - icon_state = "donut2" - name = "frosted donut" - reagents.add_reagent("sprinkles", 2) - bonus_reagents = list("sprinkles" = 2, "sugar" = 1) - filling_color = "#FF69B4" + frost_donut() +/obj/item/reagent_containers/food/snacks/donut/proc/frost_donut() + if(is_frosted || !frosted_icon) + return + is_frosted = TRUE + name = "frosted [name]" + icon_state = frosted_icon //delish~! + reagents.add_reagent("sprinkles", 1) + filling_color = "#FF69B4" + return TRUE /obj/item/reagent_containers/food/snacks/donut/checkLiked(fraction, mob/M) //Sec officers always love donuts if(last_check_time + 50 < world.time) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.mind && H.mind.assigned_role == "Security Officer" || H.mind.assigned_role == "Detective" || H.mind.assigned_role == "Warden" || H.mind.assigned_role == "Head of Security" && !HAS_TRAIT(H, TRAIT_AGEUSIA)) + if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM) && !HAS_TRAIT(H, TRAIT_AGEUSIA)) to_chat(H,"I love this taste!") H.adjust_disgust(-5 + -2.5 * fraction) GET_COMPONENT_FROM(mood, /datum/component/mood, H) @@ -48,18 +55,12 @@ . = ..() extra_reagent = pick("nutriment", "capsaicin", "frostoil", "krokodil", "plasma", "cocoa", "slimejelly", "banana", "berryjuice", "omnizine") reagents.add_reagent("[extra_reagent]", 3) - bonus_reagents = list("[extra_reagent]" = 3, "sugar" = 1) - if(prob(30)) - icon_state = "donut2" - name = "frosted chaos donut" - reagents.add_reagent("sprinkles", 2) - bonus_reagents = list("sprinkles" = 2, "[extra_reagent]" = 3, "sugar" = 1) - filling_color = "#FF69B4" /obj/item/reagent_containers/food/snacks/donut/jelly name = "jelly donut" desc = "You jelly?" icon_state = "jdonut1" + frosted_icon = "jdonut2" bonus_reagents = list("sugar" = 1, "vitamin" = 1) extra_reagent = "berryjuice" tastes = list("jelly" = 1, "donut" = 3) @@ -69,12 +70,6 @@ . = ..() if(extra_reagent) reagents.add_reagent("[extra_reagent]", 3) - if(prob(30)) - icon_state = "jdonut2" - name = "frosted jelly Donut" - reagents.add_reagent("sprinkles", 2) - bonus_reagents = list("sprinkles" = 2, "sugar" = 1) - filling_color = "#FF69B4" /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly name = "jelly donut" diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index f41f6cce80..e93c25a386 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -152,8 +152,8 @@ /datum/chemical_reaction/beepsky_smash name = "Beepksy Smash" id = "beepksysmash" - results = list("beepskysmash" = 4) - required_reagents = list("limejuice" = 2, "whiskey" = 2, "iron" = 1) + results = list("beepskysmash" = 5) + required_reagents = list("limejuice" = 2, "quadruple_sec" = 2, "iron" = 1) /datum/chemical_reaction/doctor_delight name = "The Doctor's Delight" diff --git a/code/modules/jobs/job_types/civilian.dm b/code/modules/jobs/job_types/civilian.dm index 944499470a..46e3d66f55 100644 --- a/code/modules/jobs/job_types/civilian.dm +++ b/code/modules/jobs/job_types/civilian.dm @@ -18,6 +18,7 @@ Clown minimal_access = list(ACCESS_THEATRE) /datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M) + . = ..() H.apply_pref_name("clown", M.client) /datum/outfit/job/clown @@ -174,6 +175,8 @@ Lawyer access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS) minimal_access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS) + mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + /datum/outfit/job/lawyer name = "Lawyer" jobtype = /datum/job/lawyer diff --git a/code/modules/jobs/job_types/civilian_chaplain.dm b/code/modules/jobs/job_types/civilian_chaplain.dm index e44347a208..7e8b0b60f6 100644 --- a/code/modules/jobs/job_types/civilian_chaplain.dm +++ b/code/modules/jobs/job_types/civilian_chaplain.dm @@ -19,6 +19,7 @@ Chaplain minimal_access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE) /datum/job/chaplain/after_spawn(mob/living/H, mob/M) + . = ..() if(H.mind) H.mind.isholy = TRUE diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/job.dm index e441b3e889..f678700735 100644 --- a/code/modules/jobs/job_types/job.dm +++ b/code/modules/jobs/job_types/job.dm @@ -54,10 +54,15 @@ //can be overridden by antag_rep.txt config var/antag_rep = 10 + var/list/mind_traits // Traits added to the mind of the mob assigned this job + //Only override this proc //H is usually a human unless an /equip override transformed it /datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE) //do actions on H but send messages to M as the key may not have been transferred_yet + if(mind_traits) + for(var/t in mind_traits) + ADD_TRAIT(H.mind, t, JOB_TRAIT) /datum/job/proc/announce(mob/living/carbon/human/H) if(head_announce) diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm index e7e0922f62..8d2b9e8681 100644 --- a/code/modules/jobs/job_types/security.dm +++ b/code/modules/jobs/job_types/security.dm @@ -35,6 +35,8 @@ Head of Security ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) + mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + /datum/outfit/job/hos name = "Head of Security" jobtype = /datum/job/hos @@ -92,6 +94,8 @@ Warden access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) //SEE /DATUM/JOB/WARDEN/GET_ACCESS() + mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + /datum/job/warden/get_access() var/list/L = list() L = ..() | check_config_for_sec_maint() @@ -145,6 +149,8 @@ Detective access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) + mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + /datum/outfit/job/detective name = "Detective" jobtype = /datum/job/detective @@ -198,6 +204,7 @@ Security Officer access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) //BUT SEE /DATUM/JOB/WARDEN/GET_ACCESS() + mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) /datum/job/officer/get_access() var/list/L = list() diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 9a08276999..5e5b486435 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -284,12 +284,8 @@ if(health < maxHealth) adjustBruteLoss(-8) //Fast life regen for(var/obj/item/reagent_containers/food/snacks/donut/D in range(1, src)) //Frosts nearby donuts! - if(D.icon_state != "donut2") - D.name = "frosted donut" - D.icon_state = "donut2" - D.reagents.add_reagent("sprinkles", 2) - D.bonus_reagents = list("sprinkles" = 2, "sugar" = 1) - D.filling_color = "#FF69B4" + if(!D.is_frosted) + D.frost_donut() /mob/living/simple_animal/pet/cat/cak/attack_hand(mob/living/L) ..() diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 80e195d5ac..ebe0e0102d 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -633,19 +633,42 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 90 //THE FIST OF THE LAW IS STRONG AND HARD quality = DRINK_GOOD - metabolization_rate = 0.8 + metabolization_rate = 0.5 taste_description = "JUSTICE" glass_icon_state = "beepskysmashglass" glass_name = "Beepsky Smash" glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." + overdose_threshold = 40 + var/datum/brain_trauma/special/beepsky/B + +/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(!HAS_TRAIT(M, 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) - if(HAS_TRAIT(M, TRAIT_ALCOHOL_TOLERANCE)) - M.Stun(30, 0) //this realistically does nothing to prevent chainstunning but will cause them to recover faster once it's out of their system - else - M.Stun(40, 0) + M.Jitter(2) + if(HAS_TRAIT(M, TRAIT_LAW_ENFORCEMENT_METABOLISM)) + M.adjustStaminaLoss(-10, 0) + if(prob(20)) + new /datum/hallucination/items_other(M) + if(prob(10)) + new /datum/hallucination/stray_bullet(M) + ..() + . = TRUE + +/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_end_metabolize(mob/living/carbon/M) + if(B) + QDEL_NULL(B) return ..() +/datum/reagent/consumable/ethanol/beepsky_smash/overdose_start(mob/living/carbon/M) + if(!HAS_TRAIT(M, TRAIT_LAW_ENFORCEMENT_METABOLISM)) + M.gain_trauma(/datum/brain_trauma/mild/phobia/security, TRAUMA_RESILIENCE_BASIC) + /datum/reagent/consumable/ethanol/irish_cream name = "Irish Cream" id = "irishcream" @@ -1319,32 +1342,49 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/neurotoxin name = "Neurotoxin" - id = "neurotoxin" description = "A strong neurotoxin that puts the subject into a death-like state." color = "#2E2E61" // rgb: 46, 46, 97 - boozepwr = 0 //custom drunk effect + boozepwr = 50 quality = DRINK_VERYGOOD taste_description = "a numbing sensation" + metabolization_rate = 1 * REAGENTS_METABOLISM glass_icon_state = "neurotoxinglass" glass_name = "Neurotoxin" glass_desc = "A drink that is guaranteed to knock you silly." +/datum/reagent/consumable/ethanol/neurotoxin/proc/pickt() + return (pick(TRAIT_PARALYSIS_L_ARM,TRAIT_PARALYSIS_R_ARM,TRAIT_PARALYSIS_R_LEG,TRAIT_PARALYSIS_L_LEG)) + /datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/carbon/M) - M.Knockdown(60, 1, 0) + M.set_drugginess(50) M.dizziness +=2 - switch(current_cycle) - if(15 to 45) - M.slurring = max(M.slurring,50) - M.slurring += 3 - if(45 to 55) - if(prob(50)) - M.confused = max(M.confused+3,0) - if(55 to 200) - M.set_drugginess(55) - if(200 to INFINITY) - M.adjustToxLoss(2, 0) + M.adjustBrainLoss(1*REM, 150) + if(prob(20)) + M.adjustStaminaLoss(10) + M.drop_all_held_items() + to_chat(M, "You cant feel your hands!") + if(current_cycle > 5) + if(prob(20)) + var/t = pickt() + ADD_TRAIT(M, t, type) + M.adjustStaminaLoss(10) + if(current_cycle > 30) + M.adjustBrainLoss(2*REM) + if(current_cycle > 50 && prob(15)) + if(!M.undergoing_cardiac_arrest() && M.can_heartattack()) + M.set_heartattack(TRUE) + if(M.stat == CONSCIOUS) + M.visible_message("[M] clutches at [M.p_their()] chest as if [M.p_their()] heart stopped!") + . = TRUE + ..() + +/datum/reagent/consumable/ethanol/neurotoxin/on_mob_end_metabolize(mob/living/carbon/M) + REMOVE_TRAIT(M, TRAIT_PARALYSIS_L_ARM, type) + REMOVE_TRAIT(M, TRAIT_PARALYSIS_R_ARM, type) + REMOVE_TRAIT(M, TRAIT_PARALYSIS_R_LEG, type) + REMOVE_TRAIT(M, TRAIT_PARALYSIS_L_LEG, type) + M.adjustStaminaLoss(10) ..() - . = 1 /datum/reagent/consumable/ethanol/hippies_delight name = "Hippie's Delight" @@ -1468,7 +1508,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "An intimidating and lawful beverage dares you to violate the law and make its day. Still can't drink it on duty, though." /datum/reagent/consumable/ethanol/quadruple_sec/on_mob_life(mob/living/carbon/M) - if(M.mind && M.mind.assigned_role in list("Security Officer", "Detective", "Head of Security", "Warden", "Lawyer")) //Securidrink in line with the screwderiver for engineers or nothing for mimes. + if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM)) //Securidrink in line with the screwderiver for engineers or nothing for mimes. M.heal_bodypart_damage(1, 1) M.adjustBruteLoss(-2,0) . = 1 @@ -1487,7 +1527,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Now you are become law, destroyer of clowns." /datum/reagent/consumable/ethanol/quintuple_sec/on_mob_life(mob/living/carbon/M) - if(M.mind && M.mind.assigned_role in list("Security Officer", "Detective", "Head of Security", "Warden", "Lawyer")) //Securidrink in line with the screwderiver for engineers or nothing for mimes but STRONG.. + if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM)) //Securidrink in line with the screwderiver for engineers or nothing for mimes but STRONG.. M.heal_bodypart_damage(2,2,2) M.adjustBruteLoss(-5,0) M.adjustOxyLoss(-5,0) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 38db62fd2a..cbcd5e39c9 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -433,7 +433,7 @@ taste_description = "childhood whimsy" /datum/reagent/consumable/sprinkles/on_mob_life(mob/living/carbon/M) - if(ishuman(M) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden")) + if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM)) M.heal_bodypart_damage(1,1, 0) . = 1 ..() From d93e63af536cc8a255490a505c30a0b56a68dbe9 Mon Sep 17 00:00:00 2001 From: Ghommie Date: Fri, 28 Jun 2019 23:21:10 +0200 Subject: [PATCH 2/3] we just want the trauma to be niche, not unachievable. --- code/datums/brain_damage/brain_trauma.dm | 5 +++-- code/modules/mob/living/brain/brain_item.dm | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/datums/brain_damage/brain_trauma.dm b/code/datums/brain_damage/brain_trauma.dm index 941e7103c6..3731397170 100644 --- a/code/datums/brain_damage/brain_trauma.dm +++ b/code/datums/brain_damage/brain_trauma.dm @@ -9,7 +9,8 @@ var/obj/item/organ/brain/brain //the poor bastard's brain var/gain_text = "You feel traumatized." var/lose_text = "You no longer feel traumatized." - var/can_gain = TRUE //can this be gained through random traumas? + var/can_gain = TRUE + var/random_gain = TRUE //can this be gained through random traumas? var/resilience = TRAUMA_RESILIENCE_BASIC //how hard is this to cure? /datum/brain_trauma/Destroy() @@ -23,7 +24,7 @@ //Called on life ticks /datum/brain_trauma/proc/on_life() return - + //Called on death /datum/brain_trauma/proc/on_death() return diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 2ced3054c4..dafc6cf5e0 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -265,7 +265,7 @@ var/list/datum/brain_trauma/possible_traumas = list() for(var/T in subtypesof(brain_trauma_type)) var/datum/brain_trauma/BT = T - if(can_gain_trauma(BT, resilience)) + if(can_gain_trauma(BT, resilience) && initial(BT.random_gain)) possible_traumas += BT if(!LAZYLEN(possible_traumas)) From 06ce8c62451ca28acbf26baaa8322f1e30d3eadc Mon Sep 17 00:00:00 2001 From: Ghommie Date: Fri, 28 Jun 2019 23:30:19 +0200 Subject: [PATCH 3/3] I thought I commited these already. turns out I were wrong. --- code/datums/brain_damage/phobia.dm | 2 +- code/datums/brain_damage/special.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm index 53cc3afa9b..71a5f21454 100644 --- a/code/datums/brain_damage/phobia.dm +++ b/code/datums/brain_damage/phobia.dm @@ -122,4 +122,4 @@ /datum/brain_trauma/mild/phobia/security phobia_type = "security" - can_gain = FALSE + random_gain = FALSE diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index ce180af34c..d9e6f00643 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -134,7 +134,7 @@ /datum/brain_trauma/special/psychotic_brawling/bath_salts name = "Chemical Violent Psychosis" - can_gain = FALSE + random_gain = FALSE /datum/brain_trauma/special/beepsky name = "Criminal" @@ -142,7 +142,7 @@ scan_desc = "criminal mind" gain_text = "Justice is coming for you." lose_text = "You were absolved for your crimes." - can_gain = FALSE + random_gain = FALSE var/obj/effect/hallucination/simple/securitron/beepsky /datum/brain_trauma/special/beepsky/on_gain()