From f376b64f31427928b9837c93f3270f2d149d1bdc Mon Sep 17 00:00:00 2001 From: Improvedname Date: Fri, 20 Mar 2020 22:50:57 +0100 Subject: [PATCH] AAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --- code/__DEFINES/components.dm | 2 + code/__DEFINES/is_helpers.dm | 2 +- code/__DEFINES/mobs.dm | 2 + code/__DEFINES/reagents.dm | 14 +++ code/__DEFINES/traits.dm | 2 + code/_globalvars/bitfields.dm | 23 +++- code/_globalvars/lists/poll_ignore.dm | 4 + code/datums/components/mood.dm | 30 +++--- code/datums/ert.dm | 2 +- .../mood_events/generic_negative_events.dm | 7 ++ code/datums/status_effects/debuffs.dm | 13 ++- code/game/objects/items/devices/scanners.dm | 16 ++- code/game/objects/items/handcuffs.dm | 2 + .../antagonists/_common/antag_spawner.dm | 4 +- .../abductor/equipment/abduction_surgery.dm | 2 +- code/modules/antagonists/cult/blood_magic.dm | 15 ++- code/modules/antagonists/cult/cult_items.dm | 1 + code/modules/antagonists/cult/runes.dm | 48 ++------- .../antagonists/revenant/revenant_blight.dm | 33 +++--- .../food_and_drinks/recipes/drinks_recipes.dm | 3 + code/modules/mob/living/carbon/carbon.dm | 11 +- .../carbon/human/species_types/corporate.dm | 2 +- .../carbon/human/species_types/synths.dm | 2 +- code/modules/mob/living/carbon/life.dm | 7 ++ .../living/simple_animal/guardian/guardian.dm | 2 +- .../simple_animal/guardian/types/assassin.dm | 4 +- .../simple_animal/guardian/types/charger.dm | 9 +- .../simple_animal/guardian/types/dextrous.dm | 2 +- .../simple_animal/guardian/types/explosive.dm | 5 +- .../simple_animal/guardian/types/fire.dm | 14 +-- .../simple_animal/guardian/types/lightning.dm | 9 +- .../simple_animal/guardian/types/protector.dm | 12 +-- .../simple_animal/guardian/types/ranged.dm | 5 +- .../simple_animal/guardian/types/standard.dm | 4 +- .../simple_animal/guardian/types/support.dm | 5 +- .../projectiles/guns/energy/energy_gun.dm | 4 +- code/modules/reagents/chemistry/holder.dm | 52 +++++---- .../chemistry/machinery/chem_heater.dm | 9 ++ .../chemistry/machinery/chem_master.dm | 45 +++++++- code/modules/reagents/chemistry/reagents.dm | 91 +++++++++++++--- .../chemistry/reagents/alcohol_reagents.dm | 4 + .../chemistry/reagents/impure_reagents.dm | 26 +++++ .../chemistry/reagents/other_reagents.dm | 4 +- code/modules/reagents/chemistry/recipes.dm | 1 + code/modules/reagents/reagent_containers.dm | 86 +++++++++++---- .../reagents/reagent_containers/blood_pack.dm | 6 ++ .../reagents/reagent_containers/glass.dm | 33 +++--- .../research/designs/medical_designs.dm | 33 +++++- code/modules/research/techweb/all_nodes.dm | 12 +-- .../xenobiology/crossbreeding/_weapons.dm | 4 +- .../bioware/experimental_dissection..dm | 72 +++++++++++++ .../surgery/advanced/bioware/ligament_hook.dm | 45 ++++++++ .../bioware/ligament_reinforcement.dm | 45 ++++++++ code/modules/surgery/bodyparts/bodyparts.dm | 4 +- icons/obj/bloodpack.dmi | Bin 950 -> 1248 bytes icons/obj/chemical.dmi | Bin 45486 -> 47656 bytes icons/obj/drinks.dmi | Bin 94743 -> 97018 bytes icons/obj/janitor.dmi | Bin 23842 -> 25234 bytes .../modules/reagents/chemistry/fermi/fermi.md | 23 ++++ .../reagents/chemistry/reagents/MKUltra.dm | 12 +-- .../reagents/chemistry/reagents/SDGF.dm | 26 ++--- .../reagents/chemistry/reagents/astrogen.dm | 2 +- .../chemistry/reagents/enlargement.dm | 16 +-- .../chemistry/reagents/fermi_reagents.dm | 99 +++++------------- .../reagents/chemistry/reagents/healing.dm | 14 +-- .../reagents/chemistry/recipes/fermi.dm | 20 +++- sound/FermiChem/SoundSources.txt | 1 + sound/FermiChem/heatdam.ogg | Bin 0 -> 21623 bytes tgstation.dme | 4 + 69 files changed, 777 insertions(+), 334 deletions(-) create mode 100644 code/modules/reagents/chemistry/reagents/impure_reagents.dm create mode 100644 code/modules/surgery/advanced/bioware/experimental_dissection..dm create mode 100644 code/modules/surgery/advanced/bioware/ligament_hook.dm create mode 100644 code/modules/surgery/advanced/bioware/ligament_reinforcement.dm create mode 100644 modular_citadel/code/modules/reagents/chemistry/fermi/fermi.md create mode 100644 sound/FermiChem/heatdam.ogg diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index e1d54064..92808872 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -227,6 +227,8 @@ //Mood #define COMSIG_ADD_MOOD_EVENT "add_mood" //Called when you send a mood event from anywhere in the code. #define COMSIG_CLEAR_MOOD_EVENT "clear_mood" //Called when you clear a mood event from anywhere in the code. +#define COMSIG_INCREASE_SANITY "decrease_sanity" //Called when you want to increase sanity from anywhere in the code. +#define COMSIG_DECREASE_SANITY "increase_sanity" //Same as above but to decrease sanity instead. //NTnet #define COMSIG_COMPONENT_NTNET_RECEIVE "ntnet_receive" //called on an object by its NTNET connection component on receive. (sending_id(number), sending_netname(text), data(datum/netdata)) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 5bcee19f..da56e4ef 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -56,7 +56,7 @@ #define isgolem(A) (is_species(A, /datum/species/golem)) #define islizard(A) (is_species(A, /datum/species/lizard)) #define isplasmaman(A) (is_species(A, /datum/species/plasmaman)) -#define ispodperson(A) (is_species(A, /datum/species/podperson)) +#define ispodperson(A) (is_species(A, /datum/species/pod)) #define isflyperson(A) (is_species(A, /datum/species/fly)) #define isjellyperson(A) (is_species(A, /datum/species/jelly)) #define isslimeperson(A) (is_species(A, /datum/species/jelly/slime)) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index a9636b64..be0ac101 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -117,6 +117,8 @@ #define BIOWARE_GENERIC "generic" #define BIOWARE_NERVES "nerves" #define BIOWARE_CIRCULATION "circulation" +#define BIOWARE_LIGAMENTS "ligaments" +#define BIOWARE_DISSECTION "dissected" //Health hud screws for carbon mobs #define SCREWYHUD_NONE 0 diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index 174289d3..b8cdeef6 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -34,3 +34,17 @@ #define DEL_REAGENT 1 // reagent deleted (fully cleared) #define ADD_REAGENT 2 // reagent added #define REM_REAGENT 3 // reagent removed (may still exist) + +//reagent bitflags, used for altering how they works +#define REAGENT_DEAD_PROCESS (1<<0) //calls on_mob_dead() if present in a dead body +#define REAGENT_DONOTSPLIT (1<<1) //Do not split the chem at all during processing +#define REAGENT_ONLYINVERSE (1<<2) //Only invert chem, no splitting +#define REAGENT_ONMOBMERGE (1<<3) //Call on_mob_life proc when reagents are merging. +#define REAGENT_INVISIBLE (1<<4) //Doesn't appear on handheld health analyzers. +#define REAGENT_FORCEONNEW (1<<5) //Forces a on_new() call without a data overhead +#define REAGENT_SNEAKYNAME (1<<6) //When inverted, the inverted chem uses the name of the original chem +#define REAGENT_SPLITRETAINVOL (1<<7) //Retains initial volume of chem when splitting + +//Chemical reaction flags, for determining reaction specialties +#define REACTION_CLEAR_IMPURE (1<<0) //Convert into impure/pure on reaction completion +#define REACTION_CLEAR_INVERSE (1<<1) //Convert into inverse on reaction completion when purity is low enough \ No newline at end of file diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index f56a5683..08b9b6c3 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -95,6 +95,8 @@ #define TRAIT_NOHUNGER "no_hunger" #define TRAIT_EASYDISMEMBER "easy_dismember" #define TRAIT_LIMBATTACHMENT "limb_attach" +#define TRAIT_NOLIMBDISABLE "no_limb_disable" +#define TRAIT_EASYLIMBDISABLE "easy_limb_disable" #define TRAIT_TOXINLOVER "toxinlover" #define TRAIT_NOBREATH "no_breath" #define TRAIT_ANTIMAGIC "anti_magic" diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index b5cd75a5..5c3f3beb 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -171,12 +171,27 @@ GLOBAL_LIST_INIT(bitfields, list( "rad_flags" = list( "RAD_PROTECT_CONTENTS" = RAD_PROTECT_CONTENTS, "RAD_NO_CONTAMINATE" = RAD_NO_CONTAMINATE, - ), + ), "disease_flags" = list( "CURABLE" = CURABLE, "CAN_CARRY" = CAN_CARRY, "CAN_RESIST" = CAN_RESIST - ), + ), + + "chemical_flags" = list( + "REAGENT_DEAD_PROCESS" = REAGENT_DEAD_PROCESS, + "REAGENT_DONOTSPLIT" = REAGENT_DONOTSPLIT, + "REAGENT_ONLYINVERSE" = REAGENT_ONLYINVERSE, + "REAGENT_ONMOBMERGE" = REAGENT_ONMOBMERGE, + "REAGENT_INVISIBLE" = REAGENT_INVISIBLE, + "REAGENT_FORCEONNEW" = REAGENT_FORCEONNEW, + "REAGENT_SNEAKYNAME" = REAGENT_SNEAKYNAME, + "REAGENT_SPLITRETAINVOL" = REAGENT_SPLITRETAINVOL + ), + "clear_conversion" = list( + "REACTION_CLEAR_IMPURE" = REACTION_CLEAR_IMPURE, + "REACTION_CLEAR_INVERSE" = REACTION_CLEAR_INVERSE + ), "organ_flags" = list( "ORGAN_SYNTHETIC" = ORGAN_SYNTHETIC, @@ -185,5 +200,5 @@ GLOBAL_LIST_INIT(bitfields, list( "ORGAN_EXTERNAL" = ORGAN_EXTERNAL, "ORGAN_VITAL" = ORGAN_VITAL, "ORGAN_NO_SPOIL" = ORGAN_NO_SPOIL - ), - )) \ No newline at end of file + ), + )) \ No newline at end of file diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm index 94723cae..b28ee975 100644 --- a/code/_globalvars/lists/poll_ignore.dm +++ b/code/_globalvars/lists/poll_ignore.dm @@ -13,6 +13,8 @@ #define POLL_IGNORE_GOLEM "golem" #define POLL_IGNORE_SWARMER "swarmer" #define POLL_IGNORE_DRONE "drone" +#define POLL_IGNORE_DEMON "demon" +#define POLL_IGNORE_WIZARD "wizard" GLOBAL_LIST_INIT(poll_ignore_desc, list( POLL_IGNORE_SENTIENCE_POTION = "Sentience potion", @@ -28,6 +30,8 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list( POLL_IGNORE_GOLEM = "Golems", POLL_IGNORE_SWARMER = "Swarmer shells", POLL_IGNORE_DRONE = "Drone shells", + POLL_IGNORE_DEMON = "Demons", + POLL_IGNORE_WIZARD = "Wizards", )) GLOBAL_LIST_INIT(poll_ignore, init_poll_ignore()) diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index 730ffa9f..eb381af5 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -21,6 +21,8 @@ RegisterSignal(parent, COMSIG_ADD_MOOD_EVENT, .proc/add_event) RegisterSignal(parent, COMSIG_CLEAR_MOOD_EVENT, .proc/clear_event) + RegisterSignal(parent, COMSIG_INCREASE_SANITY, .proc/IncreaseSanity) + RegisterSignal(parent, COMSIG_DECREASE_SANITY, .proc/DecreaseSanity) RegisterSignal(parent, COMSIG_MOB_HUD_CREATED, .proc/modify_hud) var/mob/living/owner = parent @@ -129,23 +131,23 @@ switch(mood_level) if(1) - DecreaseSanity(0.2) + DecreaseSanity(src, 0.2) if(2) - DecreaseSanity(0.125, SANITY_CRAZY) + DecreaseSanity(src, 0.125, SANITY_CRAZY) if(3) - DecreaseSanity(0.075, SANITY_UNSTABLE) + DecreaseSanity(src, 0.075, SANITY_UNSTABLE) if(4) - DecreaseSanity(0.025, SANITY_DISTURBED) + DecreaseSanity(src, 0.025, SANITY_DISTURBED) if(5) - IncreaseSanity(0.1) + IncreaseSanity(src, 0.1) if(6) - IncreaseSanity(0.15) + IncreaseSanity(src, 0.15) if(7) - IncreaseSanity(0.20) + IncreaseSanity(src, 0.20) if(8) - IncreaseSanity(0.25, SANITY_GREAT) + IncreaseSanity(src, 0.25, SANITY_GREAT) if(9) - IncreaseSanity(0.4, SANITY_GREAT) + IncreaseSanity(src, 0.4, SANITY_GREAT) if(insanity_effect != holdmyinsanityeffect) if(insanity_effect > holdmyinsanityeffect) @@ -218,9 +220,9 @@ master.crit_threshold = (master.crit_threshold - insanity_effect) + newval insanity_effect = newval -/datum/component/mood/proc/DecreaseSanity(amount, minimum = SANITY_INSANE) +/datum/component/mood/proc/DecreaseSanity(datum/source, amount, minimum = SANITY_INSANE) if(sanity < minimum) //This might make KevinZ stop fucking pinging me. - IncreaseSanity(0.5) + IncreaseSanity(src, 0.5) else sanity = max(minimum, sanity - amount) if(sanity < SANITY_UNSTABLE) @@ -229,13 +231,13 @@ else insanity_effect = (MINOR_INSANITY_PEN) -/datum/component/mood/proc/IncreaseSanity(amount, maximum = SANITY_NEUTRAL) +/datum/component/mood/proc/IncreaseSanity(datum/source, amount, maximum = SANITY_NEUTRAL) // Disturbed stops you from getting any more sane - I'm just gonna bung this in here var/mob/living/owner = parent if(HAS_TRAIT(owner, TRAIT_UNSTABLE)) return if(sanity > maximum) - DecreaseSanity(0.5) //Removes some sanity to go back to our current limit. + DecreaseSanity(src, 0.5) //Removes some sanity to go back to our current limit. else sanity = min(maximum, sanity + amount) if(sanity > SANITY_CRAZY) @@ -262,6 +264,8 @@ if(the_event.timeout) addtimer(CALLBACK(src, .proc/clear_event, null, category), the_event.timeout, TIMER_UNIQUE|TIMER_OVERRIDE) + return the_event + /datum/component/mood/proc/clear_event(datum/source, category) var/datum/mood_event/event = mood_events[category] if(!event) diff --git a/code/datums/ert.dm b/code/datums/ert.dm index 8fc0a915..e18c6701 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -61,7 +61,7 @@ teamsize = 1 opendoors = FALSE enforce_human = FALSE - roles = /datum/antagonist/greybois + roles = list(/datum/antagonist/greybois) leader_role = /datum/antagonist/greybois/greygod rename_team = "Emergency Assistants" polldesc = "an Emergency Assistant" diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 69f1a668..a278affa 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -169,3 +169,10 @@ /datum/mood_event/sad_empath/add_effects(mob/sadtarget) description = "[sadtarget.name] seems upset...\n" + +/datum/mood_event/revenant_blight + description = "Just give up, honk...\n" + mood_change = -5 + +/datum/mood_event/revenant_blight/add_effects() + description = "Just give up, [pick("no one will miss you", "there is nothing you can do to help", "even a clown would be more useful than you", "does it even matter in the end?")]...\n" \ No newline at end of file diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 743126e4..420545cc 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -426,19 +426,20 @@ else new /obj/effect/temp_visual/bleed(get_turf(owner)) -/mob/living/proc/apply_necropolis_curse(set_curse) +/mob/living/proc/apply_necropolis_curse(set_curse, duration = 10 MINUTES) var/datum/status_effect/necropolis_curse/C = has_status_effect(STATUS_EFFECT_NECROPOLIS_CURSE) if(!set_curse) set_curse = pick(CURSE_BLINDING, CURSE_SPAWNING, CURSE_WASTING, CURSE_GRASPING) if(QDELETED(C)) - apply_status_effect(STATUS_EFFECT_NECROPOLIS_CURSE, set_curse) + apply_status_effect(STATUS_EFFECT_NECROPOLIS_CURSE, set_curse, duration) + else C.apply_curse(set_curse) - C.duration += 3000 //additional curses add 5 minutes + C.duration += duration * 0.5 //additional curses add half their duration /datum/status_effect/necropolis_curse id = "necrocurse" - duration = 6000 //you're cursed for 10 minutes have fun + duration = 10 MINUTES //you're cursed for 10 minutes have fun tick_interval = 50 alert_type = null var/curse_flags = NONE @@ -446,7 +447,9 @@ var/effect_cooldown = 100 var/obj/effect/temp_visual/curse/wasting_effect = new -/datum/status_effect/necropolis_curse/on_creation(mob/living/new_owner, set_curse) +/datum/status_effect/necropolis_curse/on_creation(mob/living/new_owner, set_curse, _duration) + if(_duration) + duration = _duration . = ..() if(.) apply_curse(set_curse) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index e9fd4a06..779aef86 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -453,7 +453,7 @@ GENE SCANNER if(M.reagents.reagent_list.len) var/list/datum/reagent/reagents = list() for(var/datum/reagent/R in M.reagents.reagent_list) - if(R.invisible) + if(R.chemical_flags & REAGENT_INVISIBLE) continue reagents += R @@ -475,6 +475,20 @@ GENE SCANNER msg += "*---------*" to_chat(user, msg) + if(M.reagents.has_reagent("fermiTox")) + var/datum/reagent/fermiTox = M.reagents.has_reagent("fermiTox") + switch(fermiTox.volume) + if(5 to 10) + msg += "Subject contains a low amount of toxic isomers.\n" + if(10 to 25) + msg += "Subject contains toxic isomers.\n" + if(25 to 50) + msg += "Subject contains a substantial amount of toxic isomers.\n" + if(50 to 95) + msg += "Subject contains a high amount of toxic isomers.\n" + if(95 to INFINITY) + msg += "Subject contains a extremely dangerous amount of toxic isomers.\n" + /obj/item/healthanalyzer/verb/toggle_mode() set name = "Switch Verbosity" set category = "Object" diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index c567a6e7..849e14b4 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -1,5 +1,6 @@ /obj/item/restraints breakouttime = 600 + var/demoralize_criminals = TRUE // checked on carbon/carbon.dm to decide wheter to apply the handcuffed negative moodlet or not. /obj/item/restraints/suicide_act(mob/living/carbon/user) user.visible_message("[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -220,6 +221,7 @@ name = "fake handcuffs" desc = "Fake handcuffs meant for gag purposes." breakouttime = 10 //Deciseconds = 1s + demoralize_criminals = FALSE /obj/item/restraints/handcuffs/fake/kinky name = "kinky handcuffs" diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index a22933be..3f1c437f 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -56,7 +56,7 @@ if(used) to_chat(H, "You already used this contract!") return - var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src) + var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src, ignore_category = POLL_IGNORE_WIZARD) if(LAZYLEN(candidates)) if(QDELETED(src)) return @@ -235,7 +235,7 @@ return if(used) return - var/list/candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, src) + var/list/candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, src, ignore_category = POLL_IGNORE_DEMON) if(LAZYLEN(candidates)) if(used || QDELETED(src)) return diff --git a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm index 819dbafd..98164de0 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm @@ -1,5 +1,5 @@ /datum/surgery/organ_extraction - name = "experimental dissection" + name = "experimental organ replacement" steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/extract_organ, /datum/surgery_step/gland_insert) possible_locs = list(BODY_ZONE_CHEST) ignore_clothes = 1 diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 1dbae4ca..a1bfc067 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -644,6 +644,11 @@ desc = "A spell that will absorb blood from anything you touch.
Touching cultists and constructs can heal them.
Clicking the hand will potentially let you focus the spell into something stronger." color = "#7D1717" +/obj/item/melee/blood_magic/manipulator/examine(mob/user) + . = ..() + if(iscultist(user)) + to_chat(user, "The [name] currently has [uses] blood charges left.") + /obj/item/melee/blood_magic/manipulator/afterattack(atom/target, mob/living/carbon/human/user, proximity) if(proximity) if(ishuman(target)) @@ -678,9 +683,9 @@ if(ratio>1) ratio = 1 uses -= round(overall_damage) - H.visible_message("[H] is fully healed by [H==user ? "[H.p_their()]":"[H]'s"]'s blood magic!") + H.visible_message("[H] is fully healed by [H==user ? "[H.p_their()]":"[user]'s"] blood magic!") else - H.visible_message("[H] is partially healed by [H==user ? "[H.p_their()]":"[H]'s"] blood magic.") + H.visible_message("[H] is partially healed by [H==user ? "[H.p_their()]":"[user]'s"] blood magic.") uses = 0 ratio *= -1 H.adjustOxyLoss((overall_damage*ratio) * (H.getOxyLoss() / overall_damage), 0) @@ -762,7 +767,7 @@ switch(choice) if("Blood Spear (150)") if(uses < 150) - to_chat(user, "You need 200 charges to perform this rite.") + to_chat(user, "You need 150 charges to perform this rite.") else uses -= 150 var/turf/T = get_turf(user) @@ -778,7 +783,7 @@ "A [rite.name] materializes at your feet.") if("Blood Bolt Barrage (300)") if(uses < 300) - to_chat(user, "You need 400 charges to perform this rite.") + to_chat(user, "You need 300 charges to perform this rite.") else var/obj/rite = new /obj/item/gun/ballistic/shotgun/boltaction/enchanted/arcane_barrage/blood() uses -= 300 @@ -790,7 +795,7 @@ qdel(rite) if("Blood Beam (500)") if(uses < 500) - to_chat(user, "You need 600 charges to perform this rite.") + to_chat(user, "You need 500 charges to perform this rite.") else var/obj/rite = new /obj/item/blood_beam() uses -= 500 diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 25e3663c..10759afc 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -666,6 +666,7 @@ righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' slot_flags = 0 force = 17 + force_unwielded = 17 force_wielded = 24 throwforce = 40 throw_speed = 2 diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 541f8f9e..927d4c73 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -185,9 +185,6 @@ structure_check() searches for nearby cultist structures required for the invoca color = RUNE_COLOR_OFFER req_cultists = 1 rune_in_use = FALSE - var/mob/living/currentconversionman - var/conversiontimeout - var/conversionresult /obj/effect/rune/convert/do_invoke_glow() return @@ -236,34 +233,14 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/convert/proc/do_convert(mob/living/convertee, list/invokers) if(invokers.len < 2) for(var/M in invokers) - to_chat(M, "You need at least two invokers to convert [convertee]!") + to_chat(M, "You need at least two invokers to convert [convertee]!") log_game("Offer rune failed - tried conversion with one invoker") return 0 - if(convertee.anti_magic_check(TRUE, TRUE)) + if(convertee.anti_magic_check(TRUE, TRUE, FALSE, 0)) //Not chargecost because it can be spammed for(var/M in invokers) to_chat(M, "Something is shielding [convertee]'s mind!") log_game("Offer rune failed - convertee had anti-magic") return 0 - to_chat(convertee, "The world goes red. All at once you are aware of an evil, eldritch truth taking roots into your mind.\n\ - Click here to become a follower of Nar'sie, or suffer a fate worse than death.") - INVOKE_ASYNC(src, .proc/optinalert, convertee) - currentconversionman = convertee - conversiontimeout = world.time + (14 SECONDS) - convertee.Stun(140) - ADD_TRAIT(convertee, TRAIT_MUTE, "conversionrune") - flash_color(convertee, list("#960000", "#960000", "#960000", rgb(0,0,0)), 50) - conversionresult = FALSE - while(world.time < conversiontimeout && convertee && !conversionresult) - stoplag(1) - currentconversionman = null - if(!convertee) - return FALSE - REMOVE_TRAIT(convertee, TRAIT_MUTE, "conversionrune") - if(get_turf(convertee) != get_turf(src)) - return FALSE - if(!conversionresult) - do_sacrifice(convertee, invokers, TRUE) - return FALSE var/brutedamage = convertee.getBruteLoss() var/burndamage = convertee.getFireLoss() if(brutedamage || burndamage) @@ -275,6 +252,8 @@ structure_check() searches for nearby cultist structures required for the invoca SSticker.mode.add_cultist(convertee.mind, 1) new /obj/item/melee/cultblade/dagger(get_turf(src)) convertee.mind.special_role = ROLE_CULTIST + to_chat(convertee, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ + and something evil takes root.") to_chat(convertee, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\ ") if(ishuman(convertee)) @@ -284,18 +263,7 @@ structure_check() searches for nearby cultist structures required for the invoca H.cultslurring = 0 return 1 -/obj/effect/rune/convert/proc/optinalert(mob/living/convertee) - var/alert = alert(convertee, "Will you embrace the Geometer of Blood or perish in futile resistance?", "Choose your own fate", "Join the Blood Cult", "Suffer a horrible demise") - if(alert == "Join the Blood Cult") - signmeup(convertee) - -/obj/effect/rune/convert/proc/signmeup(mob/living/convertee) - if(currentconversionman == usr) - conversionresult = TRUE - else - to_chat(usr, "Your fate has already been set in stone.") - -/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers, force_a_sac) +/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers) var/mob/living/first_invoker = invokers[1] if(!first_invoker) return FALSE @@ -305,7 +273,7 @@ structure_check() searches for nearby cultist structures required for the invoca var/big_sac = FALSE - if(!force_a_sac && (((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || C.cult_team.is_sacrifice_target(sacrificial.mind)) && invokers.len < 3) + if((((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || C.cult_team.is_sacrifice_target(sacrificial.mind)) && invokers.len < 3) for(var/M in invokers) to_chat(M, "[sacrificial] is too greatly linked to the world! You need three acolytes!") log_game("Offer rune failed - not enough acolytes and target is living or sac target") @@ -345,10 +313,6 @@ structure_check() searches for nearby cultist structures required for the invoca sacrificial.gib() return TRUE -/obj/effect/rune/convert/Topic(href, href_list) - if(href_list["signmeup"]) - signmeup(usr) - /obj/effect/rune/empower cultist_name = "Empower" cultist_desc = "allows cultists to prepare greater amounts of blood magic at far less of a cost." diff --git a/code/modules/antagonists/revenant/revenant_blight.dm b/code/modules/antagonists/revenant/revenant_blight.dm index 7037ecae..89d8de28 100644 --- a/code/modules/antagonists/revenant/revenant_blight.dm +++ b/code/modules/antagonists/revenant/revenant_blight.dm @@ -11,9 +11,9 @@ viable_mobtypes = list(/mob/living/carbon/human) disease_flags = CURABLE permeability_mod = 1 - severity = DISEASE_SEVERITY_HARMFUL - var/stagedamage = 0 //Highest stage reached. + severity = DISEASE_SEVERITY_DANGEROUS var/finalstage = 0 //Because we're spawning off the cure in the final stage, we need to check if we've done the final stage's effects. + var/datum/mood_event/revenant_blight/depression /datum/disease/revblight/cure() if(affected_mob) @@ -21,12 +21,13 @@ if(affected_mob.dna && affected_mob.dna.species) affected_mob.dna.species.handle_mutant_bodyparts(affected_mob) affected_mob.dna.species.handle_hair(affected_mob) - to_chat(affected_mob, "You feel better.") + SEND_SIGNAL(affected_mob, COMSIG_CLEAR_MOOD_EVENT, "rev_blight") ..() /datum/disease/revblight/stage_act() if(!finalstage) - if(affected_mob.lying && prob(stage*6)) + if(affected_mob.lying && prob(stage*4)) + to_chat(affected_mob, "You feel better.") cure() return if(prob(stage*3)) @@ -34,10 +35,6 @@ affected_mob.confused += 8 affected_mob.adjustStaminaLoss(8) new /obj/effect/temp_visual/revenant(affected_mob.loc) - if(stagedamage < stage) - stagedamage++ - affected_mob.adjustToxLoss(stage*2) //should, normally, do about 30 toxin damage. - new /obj/effect/temp_visual/revenant(affected_mob.loc) if(prob(45)) affected_mob.adjustStaminaLoss(stage) ..() //So we don't increase a stage before applying the stage damage. @@ -46,9 +43,13 @@ if(prob(5)) affected_mob.emote("pale") if(3) + if(!depression) + depression = SEND_SIGNAL(affected_mob, COMSIG_ADD_MOOD_EVENT, "rev_blight", /datum/mood_event/revenant_blight) + SEND_SIGNAL(affected_mob, COMSIG_DECREASE_SANITY, 0.12, SANITY_CRAZY) if(prob(10)) affected_mob.emote(pick("pale","shiver")) if(4) + SEND_SIGNAL(affected_mob, COMSIG_DECREASE_SANITY, 0.18, SANITY_CRAZY) if(prob(15)) affected_mob.emote(pick("pale","shiver","cries")) if(5) @@ -56,12 +57,18 @@ finalstage = TRUE to_chat(affected_mob, "You feel like [pick("nothing's worth it anymore", "nobody ever needed your help", "nothing you did mattered", "everything you tried to do was worthless")].") affected_mob.adjustStaminaLoss(45) - new /obj/effect/temp_visual/revenant(affected_mob.loc) - if(affected_mob.dna && affected_mob.dna.species) + if(affected_mob.dna?.species) affected_mob.dna.species.handle_mutant_bodyparts(affected_mob,"#1d2953") affected_mob.dna.species.handle_hair(affected_mob,"#1d2953") affected_mob.visible_message("[affected_mob] looks terrifyingly gaunt...", "You suddenly feel like your skin is wrong...") affected_mob.add_atom_colour("#1d2953", TEMPORARY_COLOUR_PRIORITY) - addtimer(CALLBACK(src, .proc/cure), 100) - else - return + new /obj/effect/temp_visual/revenant(affected_mob.loc) + addtimer(CALLBACK(src, .proc/curses), 150) + +/datum/disease/revblight/proc/curses() + if(QDELETED(affected_mob)) + return + affected_mob.playsound_local(affected_mob, 'sound/effects/curse5.ogg', 40, 1, -1) + to_chat(affected_mob, "You sense the terrific curse of a vengeful ghost befall upon you...") + affected_mob.apply_necropolis_curse(null, 7 MINUTES) //Once the blight has done its course without being cured beforehand, it will cast a necrocurse to compensate how underpowered it's. + cure() diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index ff9e9102..e66870dc 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -410,7 +410,9 @@ FermiChem = TRUE//If the chemical uses the Fermichem reaction mechanics FermiExplode = FALSE //If the chemical explodes in a special way PurityMin = 0 //The minimum purity something has to be above, otherwise it explodes. + clear_conversion = REACTION_CLEAR_INVERSE +/* /datum/chemical_reaction/neurotoxin/FermiFinish(datum/reagents/holder, var/atom/my_atom) var/datum/reagent/consumable/ethanol/neurotoxin/Nt = locate(/datum/reagent/consumable/ethanol/neurotoxin) in my_atom.reagents.reagent_list if(Nt) @@ -418,6 +420,7 @@ if(Nt.purity < 0.5) holder.remove_reagent(src.id, cached_volume) holder.add_reagent("neurosmash", cached_volume) +*/ /datum/chemical_reaction/snowwhite name = "Snow White" diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 89a7ec25..90ce091c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -271,9 +271,13 @@ if(restrained()) changeNext_move(CLICK_CD_BREAKOUT) last_special = world.time + CLICK_CD_BREAKOUT + var/buckle_cd = 600 + if(handcuffed) + var/obj/item/restraints/O = src.get_item_by_slot(SLOT_HANDCUFFED) + buckle_cd = O.breakouttime visible_message("[src] attempts to unbuckle [p_them()]self!", \ - "You attempt to unbuckle yourself... (This will take around one minute and you need to stay still.)") - if(do_after(src, 600, 0, target = src)) + "You attempt to unbuckle yourself... (This will take around [round(buckle_cd/600,1)] minute\s, and you need to stay still.)") + if(do_after(src, buckle_cd, 0, target = src)) if(!buckled) return buckled.user_unbuckle_mob(src,src) @@ -809,7 +813,8 @@ drop_all_held_items() stop_pulling() throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed) - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed) + if(handcuffed.demoralize_criminals) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed) else clear_alert("handcuffed") SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "handcuffed") diff --git a/code/modules/mob/living/carbon/human/species_types/corporate.dm b/code/modules/mob/living/carbon/human/species_types/corporate.dm index 620f0b25..146090b3 100644 --- a/code/modules/mob/living/carbon/human/species_types/corporate.dm +++ b/code/modules/mob/living/carbon/human/species_types/corporate.dm @@ -16,5 +16,5 @@ blacklisted = 1 use_skintones = 0 species_traits = list(NOBLOOD,EYECOLOR,NOGENITALS) - inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER) + inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER) sexes = 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm index 378b97db..915e85f1 100644 --- a/code/modules/mob/living/carbon/human/species_types/synths.dm +++ b/code/modules/mob/living/carbon/human/species_types/synths.dm @@ -12,7 +12,7 @@ damage_overlay_type = "synth" limbs_id = "synth" var/list/initial_species_traits = list(NOTRANSSTING) //for getting these values back for assume_disguise() - var/list/initial_inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH) + var/list/initial_inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOLIMBDISABLE,TRAIT_NOBREATH) var/disguise_fail_health = 75 //When their health gets to this level their synthflesh partially falls off var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 1c2234bb..801a6cd2 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -35,6 +35,7 @@ */ if(stat == DEAD) stop_sound_channel(CHANNEL_HEARTBEAT) + handle_death() rot() //Updates the number of stored chemicals for powers @@ -43,6 +44,12 @@ if(stat != DEAD) return 1 +//Procs called while dead +/mob/living/carbon/proc/handle_death() + for(var/datum/reagent/R in reagents.reagent_list) + if(R.chemical_flags & REAGENT_DEAD_PROCESS) + R.on_mob_dead(src) + /////////////// // BREATHING // /////////////// diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 73274dcf..5aec56b1 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -44,7 +44,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians var/reset = 0 //if the summoner has reset the guardian already var/cooldown = 0 var/mob/living/carbon/summoner - var/range = 10 //how far from the user the spirit can be + var/range = 13 //how far from the user the spirit can be var/toggle_button_type = /obj/screen/guardian/ToggleMode/Inactive //what sort of toggle button the hud uses var/datum/guardianname/namedatum = new/datum/guardianname() var/playstyle_string = "You are a standard Guardian. You shouldn't exist!" diff --git a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm index 45d8c17d..e507a4c8 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm @@ -1,7 +1,5 @@ //Assassin /mob/living/simple_animal/hostile/guardian/assassin - melee_damage_lower = 15 - melee_damage_upper = 15 attacktext = "slashes" attack_sound = 'sound/weapons/bladeslice.ogg' damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) @@ -12,7 +10,7 @@ toggle_button_type = /obj/screen/guardian/ToggleMode/Assassin var/toggle = FALSE - var/stealthcooldown = 160 + var/stealthcooldown = 100 var/obj/screen/alert/canstealthalert var/obj/screen/alert/instealthalert diff --git a/code/modules/mob/living/simple_animal/guardian/types/charger.dm b/code/modules/mob/living/simple_animal/guardian/types/charger.dm index 7a4c454f..3ece5d4e 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/charger.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/charger.dm @@ -1,13 +1,10 @@ //Charger /mob/living/simple_animal/hostile/guardian/charger - melee_damage_lower = 15 - melee_damage_upper = 15 ranged = 1 //technically ranged_message = "charges" - ranged_cooldown_time = 40 - speed = -1 - damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6) - playstyle_string = "As a charger type you do medium damage, have medium damage resistance, move very fast, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding." + ranged_cooldown_time = 20 + damage_coeff = list(BRUTE = 0, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5) + playstyle_string = "As a charger type you do medium damage, take half damage, immunity to brute damage, move very fast, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding." magic_fluff_string = "..And draw the Hunter, an alien master of rapid assault." tech_fluff_string = "Boot sequence complete. Charge modules loaded. Holoparasite swarm online." carp_fluff_string = "CARP CARP CARP! Caught one! It's a charger carp, that likes running at people. But it doesn't have any legs..." diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm index e7dbbda2..a43d4b6d 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm @@ -3,7 +3,7 @@ melee_damage_lower = 10 melee_damage_upper = 10 damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75) - playstyle_string = "As a dextrous type you can hold items, store an item within yourself, and have medium damage resistance, but do low damage on attacks. Recalling and leashing will force you to drop unstored items!" + playstyle_string = "As a dextrous type you can hold items, store an item within yourself, and take half damage, but do low damage on attacks. Recalling and leashing will force you to drop unstored items!" magic_fluff_string = "..And draw the Drone, a dextrous master of construction and repair." tech_fluff_string = "Boot sequence complete. Dextrous combat modules loaded. Holoparasite swarm online." carp_fluff_string = "CARP CARP CARP! You caught one! It can hold stuff in its fins, sort of." diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm index ff2f4532..531c5138 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm @@ -1,10 +1,7 @@ //Bomb /mob/living/simple_animal/hostile/guardian/bomb - melee_damage_lower = 15 - melee_damage_upper = 15 damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6) - range = 13 - playstyle_string = "As an explosive type, you have moderate close combat abilities, may explosively teleport targets on attack, and are capable of converting nearby items and objects into disguised bombs via alt click." + playstyle_string = "As an explosive type, you have moderate close combat abilities, take half damage, may explosively teleport targets on attack, and are capable of converting nearby items and objects into disguised bombs via alt click." magic_fluff_string = "..And draw the Scientist, master of explosive death." tech_fluff_string = "Boot sequence complete. Explosive modules active. Holoparasite swarm online." carp_fluff_string = "CARP CARP CARP! Caught one! It's an explosive carp! Boom goes the fishy." diff --git a/code/modules/mob/living/simple_animal/guardian/types/fire.dm b/code/modules/mob/living/simple_animal/guardian/types/fire.dm index 7a469dd1..b111caae 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/fire.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/fire.dm @@ -1,13 +1,13 @@ //Fire /mob/living/simple_animal/hostile/guardian/fire a_intent = INTENT_HELP - melee_damage_lower = 7 - melee_damage_upper = 7 + melee_damage_lower = 10 + melee_damage_upper = 10 attack_sound = 'sound/items/welder.ogg' attacktext = "ignites" - damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) - range = 7 - playstyle_string = "As a chaos type, you have only light damage resistance, but will ignite any enemy you bump into. In addition, your melee attacks will cause human targets to see everyone as you." + melee_damage_type = BURN + damage_coeff = list(BRUTE = 0.7, BURN = 0, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) + playstyle_string = "As a chaos type, you take 30% damage reduction to all but burn, which you are immune to. You will ignite any enemy you bump into. in addition, your melee attacks will cause human targets to see everyone as you." magic_fluff_string = "..And draw the Wizard, bringer of endless chaos!" tech_fluff_string = "Boot sequence complete. Crowd control modules activated. Holoparasite swarm online." carp_fluff_string = "CARP CARP CARP! You caught one! OH GOD, EVERYTHING'S ON FIRE. Except you and the fish." @@ -38,6 +38,6 @@ /mob/living/simple_animal/hostile/guardian/fire/proc/collision_ignite(AM as mob|obj) if(isliving(AM)) var/mob/living/M = AM - if(!hasmatchingsummoner(M) && M != summoner && M.fire_stacks < 7) - M.fire_stacks = 7 + if(!hasmatchingsummoner(M) && M != summoner && M.fire_stacks < 10) + M.fire_stacks = 10 M.IgniteMob() diff --git a/code/modules/mob/living/simple_animal/guardian/types/lightning.dm b/code/modules/mob/living/simple_animal/guardian/types/lightning.dm index ad1c4773..7b765182 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/lightning.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/lightning.dm @@ -4,14 +4,13 @@ layer = LYING_MOB_LAYER /mob/living/simple_animal/hostile/guardian/beam - melee_damage_lower = 7 - melee_damage_upper = 7 + melee_damage_lower = 10 + melee_damage_upper = 10 attacktext = "shocks" melee_damage_type = BURN attack_sound = 'sound/machines/defib_zap.ogg' damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) - range = 7 - playstyle_string = "As a lightning type, you will apply lightning chains to targets on attack and have a lightning chain to your summoner. Lightning chains will shock anyone near them." + playstyle_string = "As a lightning type, you have 30% damage reduction, apply lightning chains to targets on attack and have a lightning chain to your summoner. Lightning chains will shock anyone near them." magic_fluff_string = "..And draw the Tesla, a shocking, lethal source of power." tech_fluff_string = "Boot sequence complete. Lightning modules active. Holoparasite swarm online." carp_fluff_string = "CARP CARP CARP! Caught one! It's a lightning carp! Everyone else goes zap zap." @@ -31,7 +30,7 @@ var/datum/beam/C = pick(enemychains) qdel(C) enemychains -= C - enemychains += Beam(target, "lightning[rand(1,12)]", time=70, maxdistance=7, beam_type=/obj/effect/ebeam/chain) + enemychains += Beam(target, "lightning[rand(1,12)]", time=70, maxdistance=13, beam_type=/obj/effect/ebeam/chain) /mob/living/simple_animal/hostile/guardian/beam/Destroy() removechains() diff --git a/code/modules/mob/living/simple_animal/guardian/types/protector.dm b/code/modules/mob/living/simple_animal/guardian/types/protector.dm index 14430bb2..53964254 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/protector.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/protector.dm @@ -1,7 +1,5 @@ //Protector /mob/living/simple_animal/hostile/guardian/protector - melee_damage_lower = 15 - melee_damage_upper = 15 range = 15 //worse for it due to how it leashes damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, CLONE = 0.4, STAMINA = 0, OXY = 0.4) playstyle_string = "As a protector type you cause your summoner to leash to you instead of you leashing to them and have two modes; Combat Mode, where you do and take medium damage, and Protection Mode, where you do and take almost no damage, but move slightly slower." @@ -33,9 +31,9 @@ cooldown = world.time + 10 if(toggle) cut_overlays() - melee_damage_lower = initial(melee_damage_lower) - melee_damage_upper = initial(melee_damage_upper) - speed = initial(speed) + melee_damage_lower = 15 + melee_damage_upper = 15 + speed = 0 damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, CLONE = 0.4, STAMINA = 0, OXY = 0.4) to_chat(src, "You switch to combat mode.") toggle = FALSE @@ -44,8 +42,8 @@ if(namedatum) shield_overlay.color = namedatum.colour add_overlay(shield_overlay) - melee_damage_lower = 2 - melee_damage_upper = 2 + melee_damage_lower = 5 + melee_damage_upper = 5 speed = 1 damage_coeff = list(BRUTE = 0.05, BURN = 0.05, TOX = 0.05, CLONE = 0.05, STAMINA = 0, OXY = 0.05) //damage? what's damage? to_chat(src, "You switch to protection mode.") diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm index 5adcc8b2..0e8f632d 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm @@ -16,8 +16,7 @@ ranged_cooldown_time = 1 //fast! projectilesound = 'sound/effects/hit_on_shattered_glass.ogg' ranged = 1 - range = 13 - playstyle_string = "As a ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit." + playstyle_string = "As a ranged type, you have 10% damage reduction, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit." magic_fluff_string = "..And draw the Sentinel, an alien master of ranged combat." tech_fluff_string = "Boot sequence complete. Ranged combat modules active. Holoparasite swarm online." carp_fluff_string = "CARP CARP CARP! Caught one, it's a ranged carp. This fishy can watch people pee in the ocean." @@ -36,7 +35,7 @@ obj_damage = initial(obj_damage) environment_smash = initial(environment_smash) alpha = 255 - range = initial(range) + range = 13 to_chat(src, "You switch to combat mode.") toggle = FALSE else diff --git a/code/modules/mob/living/simple_animal/guardian/types/standard.dm b/code/modules/mob/living/simple_animal/guardian/types/standard.dm index 4edd9d9e..2285167d 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/standard.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/standard.dm @@ -3,9 +3,9 @@ melee_damage_lower = 20 melee_damage_upper = 20 obj_damage = 80 - next_move_modifier = 0.8 //attacks 20% faster + next_move_modifier = 0.5 //attacks 50% faster environment_smash = ENVIRONMENT_SMASH_WALLS - playstyle_string = "As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls." + playstyle_string = "As a standard type you have no special abilities, but take half damage and have powerful attack capable of smashing through walls." magic_fluff_string = "..And draw the Assistant, faceless and generic, but never to be underestimated." tech_fluff_string = "Boot sequence complete. Standard combat modules loaded. Holoparasite swarm online." carp_fluff_string = "CARP CARP CARP! You caught one! It's really boring and standard. Better punch some walls to ease the tension." diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index 794683e6..8bf1874d 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -2,11 +2,8 @@ /mob/living/simple_animal/hostile/guardian/healer a_intent = INTENT_HARM friendly = "heals" - speed = 0 damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) - melee_damage_lower = 15 - melee_damage_upper = 15 - playstyle_string = "As a support type, you may toggle your basic attacks to a healing mode. In addition, Alt-Clicking on an adjacent object or mob will warp them to your bluespace beacon after a short delay." + playstyle_string = "As a support type, you have 30% damage reduction and may toggle your basic attacks to a healing mode. In addition, Alt-Clicking on an adjacent object or mob will warp them to your bluespace beacon after a short delay." magic_fluff_string = "..And draw the CMO, a potent force of life... and death." carp_fluff_string = "CARP CARP CARP! You caught a support carp. It's a kleptocarp!" tech_fluff_string = "Boot sequence complete. Support modules active. Holoparasite swarm online." diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index 54cb9fe5..de738c90 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -118,11 +118,11 @@ switch(fail_tick) if(0 to 200) fail_tick += (2*(fail_chance)) - M.rad_act(40) + M.rad_act(400) to_chat(M, "Your [name] feels warmer.") if(201 to INFINITY) SSobj.processing.Remove(src) - M.rad_act(80) + M.rad_act(800) crit_fail = 1 to_chat(M, "Your [name]'s reactor overloads!") diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 476fc60c..8074bb67 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -1,4 +1,4 @@ -#define CHEMICAL_QUANTISATION_LEVEL 0.0001 + #define CHEMICAL_QUANTISATION_LEVEL 0.001 /proc/build_chemical_reagent_list() //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id @@ -466,7 +466,7 @@ if (C.FermiChem == TRUE && !continue_reacting) if (chem_temp > C.ExplodeTemp) //This is first to ensure explosions. - var/datum/chemical_reaction/fermi/Ferm = selected_reaction + var/datum/chemical_reaction/Ferm = selected_reaction fermiIsReacting = FALSE SSblackbox.record_feedback("tally", "fermi_chem", 1, ("[Ferm] explosion")) Ferm.FermiExplode(src, my_atom, volume = total_volume, temp = chem_temp, pH = pH) @@ -496,7 +496,12 @@ //Standard reaction mechanics: else - if (C.FermiChem == TRUE)//Just to make sure + if (C.FermiChem == TRUE)//Just to make sure, should only proc when grenades are combining. + if (chem_temp > C.ExplodeTemp) //To allow fermigrenades + var/datum/chemical_reaction/fermi/Ferm = selected_reaction + fermiIsReacting = FALSE + SSblackbox.record_feedback("tally", "fermi_chem", 1, ("[Ferm] explosion")) + Ferm.FermiExplode(src, my_atom, volume = total_volume, temp = chem_temp, pH = pH) return 0 for(var/B in cached_required_reagents) // @@ -539,7 +544,7 @@ return 0 /datum/reagents/process() - var/datum/chemical_reaction/fermi/C = fermiReactID + var/datum/chemical_reaction/C = fermiReactID var/list/cached_required_reagents = C.required_reagents//update reagents list var/list/cached_results = C.results//resultant chemical list @@ -575,16 +580,16 @@ return /datum/reagents/proc/fermiEnd() - var/datum/chemical_reaction/fermi/C = fermiReactID + var/datum/chemical_reaction/C = fermiReactID STOP_PROCESSING(SSprocessing, src) fermiIsReacting = FALSE - reactedVol = 0 - targetVol = 0 //pH check, handled at the end to reduce calls. if(istype(my_atom, /obj/item/reagent_containers)) var/obj/item/reagent_containers/RC = my_atom RC.pH_check() - C.FermiFinish(src, my_atom) + C.FermiFinish(src, my_atom, reactedVol) + reactedVol = 0 + targetVol = 0 handle_reactions() update_total() //Reaction sounds and words @@ -595,7 +600,7 @@ to_chat(M, "[iconhtml] [C.mix_message]") /datum/reagents/proc/fermiReact(selected_reaction, cached_temp, cached_pH, reactedVol, targetVol, cached_required_reagents, cached_results, multiplier) - var/datum/chemical_reaction/fermi/C = selected_reaction + var/datum/chemical_reaction/C = selected_reaction var/deltaT = 0 var/deltapH = 0 var/stepChemAmmount = 0 @@ -704,7 +709,7 @@ return (reactedVol) //Currently calculates it irrespective of required reagents at the start -/datum/reagents/proc/reactant_purity(var/datum/chemical_reaction/fermi/C, holder) +/datum/reagents/proc/reactant_purity(var/datum/chemical_reaction/C, holder) var/list/cached_reagents = reagent_list var/i = 0 var/cachedPurity @@ -714,6 +719,14 @@ i++ return cachedPurity/i +/datum/reagents/proc/uncache_purity(id) + var/datum/reagent/R = has_reagent("[id]") + if(!R) + return + if(R.cached_purity == 1) + return + R.purity = R.cached_purity + /datum/reagents/proc/isolate_reagent(reagent) var/list/cached_reagents = reagent_list for(var/_reagent in cached_reagents) @@ -745,11 +758,14 @@ total_volume = 0 for(var/reagent in cached_reagents) var/datum/reagent/R = reagent - if(R.volume < CHEMICAL_QUANTISATION_LEVEL) + if(R.volume == 0) + del_reagent(R.id) + if((R.volume < 0.01) && !fermiIsReacting) del_reagent(R.id) else total_volume += R.volume - + if(!reagent_list) + pH = 7 return 0 /datum/reagents/proc/clear_reagents() @@ -878,17 +894,15 @@ var/datum/reagent/R = A if (R.id == reagent) //IF MERGING //Add amount and equalize purity - R.volume += amount + R.volume += round(amount, CHEMICAL_QUANTISATION_LEVEL) R.purity = ((R.purity * R.volume) + (other_purity * amount)) /((R.volume + amount)) //This should add the purity to the product update_total() if(my_atom) my_atom.on_reagent_change(ADD_REAGENT) if(isliving(my_atom)) - if(R.OnMobMergeCheck == TRUE)//Forces on_mob_add proc when a chem is merged + if(R.chemical_flags & REAGENT_ONMOBMERGE)//Forces on_mob_add proc when a chem is merged R.on_mob_add(my_atom, amount) - //else - // R.on_merge(data, amount, my_atom, other_purity) R.on_merge(data, amount, my_atom, other_purity) if(!no_react) handle_reactions() @@ -900,13 +914,13 @@ var/datum/reagent/R = new D.type(data) cached_reagents += R R.holder = src - R.volume = amount + R.volume = round(amount, CHEMICAL_QUANTISATION_LEVEL) R.purity = other_purity R.loc = get_turf(my_atom) if(data) R.data = data R.on_new(data) - if(R.addProc == TRUE)//Allows on new without data overhead. + if(R.chemical_flags & REAGENT_FORCEONNEW)//Allows on new without data overhead. R.on_new(pH) //Add more as desired. @@ -1134,4 +1148,4 @@ if(initial(R.can_synth)) random_reagents += initial(R.id) var/picked_reagent = pick(random_reagents) - return picked_reagent + return picked_reagent \ No newline at end of file diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 436ee80e..5af53789 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -79,6 +79,15 @@ return return ..() + if(beaker) + if(istype(I, /obj/item/reagent_containers/dropper)) + var/obj/item/reagent_containers/dropper/D = I + D.afterattack(beaker, user, 1) + + if(istype(I, /obj/item/reagent_containers/syringe)) + var/obj/item/reagent_containers/syringe/S = I + S.afterattack(beaker, user, 1) + /obj/machinery/chem_heater/on_deconstruction() replace_beaker() return ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 002c54be..567c1873 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -233,6 +233,12 @@ else reagents.remove_reagent(id, amount) . = TRUE + else if (amount == -1) // -1 means custom amount + useramount = input("Enter the Amount you want to transfer:", name, useramount) as num|null + if (useramount > 0) + end_fermi_reaction() + reagents.trans_id_to(beaker, id, useramount) + . = TRUE if("toggleMode") mode = !mode @@ -332,7 +338,7 @@ var/vol_part = min(reagents.total_volume, 30) if(text2num(many)) amount_full = round(reagents.total_volume / 30) - vol_part = reagents.total_volume % 30 + vol_part = ((reagents.total_volume*1000) % 30000) / 1000 //% operator doesn't support decimals. var/name = stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN) if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) return @@ -379,7 +385,34 @@ reagents.trans_to(P, vol_part) . = TRUE //END CITADEL ADDITIONS - if("analyze") + if("analyzeBeak") + var/datum/reagent/R = GLOB.chemical_reagents_list[params["id"]] + if(R) + var/state = "Unknown" + if(initial(R.reagent_state) == 1) + state = "Solid" + else if(initial(R.reagent_state) == 2) + state = "Liquid" + else if(initial(R.reagent_state) == 3) + state = "Gas" + var/const/P = 3 //The number of seconds between life ticks + var/T = initial(R.metabolization_rate) * (60 / P) + var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.id) + if(Rcr && Rcr.FermiChem) + fermianalyze = TRUE + var/pHpeakCache = (Rcr.OptimalpHMin + Rcr.OptimalpHMax)/2 + var/datum/reagent/targetReagent = beaker.reagents.has_reagent("[R.id]") + + if(!targetReagent) + CRASH("Tried to find a reagent that doesn't exist in the chem_master!") + analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = targetReagent.purity, "inverseRatioF" = initial(R.inverse_chem_val), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache) + else + fermianalyze = FALSE + analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold)) + screen = "analyze" + return + + if("analyzeBuff") var/datum/reagent/R = GLOB.chemical_reagents_list[params["id"]] if(R) var/state = "Unknown" @@ -395,7 +428,11 @@ fermianalyze = TRUE var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.id) var/pHpeakCache = (Rcr.OptimalpHMin + Rcr.OptimalpHMax)/2 - analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = initial(R.purity), "inverseRatioF" = initial(R.InverseChemVal), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache) + var/datum/reagent/targetReagent = reagents.has_reagent("[R.id]") + + if(!targetReagent) + CRASH("Tried to find a reagent that doesn't exist in the chem_master!") + analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = targetReagent.purity, "inverseRatioF" = initial(R.inverse_chem_val), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache) else fermianalyze = FALSE analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold)) @@ -451,4 +488,4 @@ condi = TRUE #undef PILL_STYLE_COUNT -#undef RANDOM_PILL_STYLE +#undef RANDOM_PILL_STYLE \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index c21629ce..aaccc6d0 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -32,19 +32,19 @@ var/addiction_stage3_end = 30 var/addiction_stage4_end = 40 var/overdosed = 0 // You fucked up and this is now triggering its overdose effects, purge that shit quick. - var/self_consuming = FALSE + var/self_consuming = FALSE //I think this uhhh, makes weird stuff happen when metabolising, but... doesn't seem to do what I think, so I'm gonna leave it. //Fermichem vars: - var/purity = 1 //How pure a chemical is from 0 - 1. - var/addProc = FALSE //If the chemical should force an on_new() call + var/purity = 1 //How pure a chemical is from 0 - 1. + var/cached_purity = 1 var/turf/loc = null //Should be the creation location! var/pH = 7 //pH of the specific reagent, used for calculating the sum pH of a holder. - var/ImpureChem = "fermiTox"// What chemical is metabolised with an inpure reaction - var/InverseChemVal = 0.25 // If the impurity is below 0.5, replace ALL of the chem with InverseChem upon metabolising - var/InverseChem = "fermiTox"// What chem is metabolised when purity is below InverseChemVal, this shouldn't be made, but if it does, well, I guess I'll know about it. - var/DoNotSplit = FALSE // If impurity is handled within the main chem itself - var/OnMobMergeCheck = FALSE //Call on_mob_life proc when reagents are merging. + //var/SplitChem = FALSE //If the chem splits on metabolism + var/impure_chem // What chemical is metabolised with an inpure reaction + var/inverse_chem_val = 0 // If the impurity is below 0.5, replace ALL of the chem with inverse_chemupon metabolising + var/inverse_chem // What chem is metabolised when purity is below inverse_chem_val, this shouldn't be made, but if it does, well, I guess I'll know about it. var/metabolizing = FALSE - var/invisible = FALSE //Set to true if it doesn't appear on handheld health analyzers. + var/chemical_flags // See fermi/readme.dm REAGENT_DEAD_PROCESS, REAGENT_DONOTSPLIT, REAGENT_ONLYINVERSE, REAGENT_ONMOBMERGE, REAGENT_INVISIBLE, REAGENT_FORCEONNEW, REAGENT_SNEAKYNAME + /datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references . = ..() @@ -73,8 +73,47 @@ holder.remove_reagent(src.id, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears. return +//called when a mob processes chems when dead. +/datum/reagent/proc/on_mob_dead(mob/living/carbon/M) + if(!(chemical_flags & REAGENT_DEAD_PROCESS)) //justincase + return + current_cycle++ + if(holder) + holder.remove_reagent(src.id, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears. + return + // Called when this reagent is first added to a mob -/datum/reagent/proc/on_mob_add(mob/living/L) +/datum/reagent/proc/on_mob_add(mob/living/L, amount) + if(!iscarbon(L)) + return + var/mob/living/carbon/M = L + if (purity == 1) + log_game("CHEM: [L] ckey: [L.key] has ingested [volume]u of [id]") + return + if(cached_purity == 1) + cached_purity = purity + else if(purity < 0) + CRASH("Purity below 0 for chem: [id], Please let Fermis Know!") + if(chemical_flags & REAGENT_DONOTSPLIT) + return + + if ((inverse_chem_val > purity) && (inverse_chem))//Turns all of a added reagent into the inverse chem + M.reagents.remove_reagent(id, amount, FALSE) + M.reagents.add_reagent(inverse_chem, amount, FALSE, other_purity = 1-cached_purity) + var/datum/reagent/R = M.reagents.has_reagent("[inverse_chem]") + if(R.chemical_flags & REAGENT_SNEAKYNAME) + R.name = name//Negative effects are hidden + if(R.chemical_flags & REAGENT_INVISIBLE) + R.chemical_flags |= (REAGENT_INVISIBLE) + log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [inverse_chem]") + return + else if (impure_chem) + var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem + if(!(chemical_flags & REAGENT_SPLITRETAINVOL)) + M.reagents.remove_reagent(id, (impureVol), FALSE) + M.reagents.add_reagent(impure_chem, impureVol, FALSE, other_purity = 1-cached_purity) + log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume - impureVol]u of [id]") + log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [impure_chem]") return // Called when this reagent is removed while inside a mob @@ -97,7 +136,35 @@ return // Called when two reagents of the same are mixing. -/datum/reagent/proc/on_merge(data) +/datum/reagent/proc/on_merge(data, amount, mob/living/carbon/M, purity) + if(!iscarbon(M)) + return + if (purity == 1) + log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [id]") + return + cached_purity = purity //purity SHOULD be precalculated from the add_reagent, update cache. + if (purity < 0) + CRASH("Purity below 0 for chem: [id], Please let Fermis Know!") + if(chemical_flags & REAGENT_DONOTSPLIT) + return + + if ((inverse_chem_val > purity) && (inverse_chem)) //INVERT + M.reagents.remove_reagent(id, amount, FALSE) + M.reagents.add_reagent(inverse_chem, amount, FALSE, other_purity = 1-cached_purity) + var/datum/reagent/R = M.reagents.has_reagent("[inverse_chem]") + if(R.chemical_flags & REAGENT_SNEAKYNAME) + R.name = name//Negative effects are hidden + if(R.chemical_flags & REAGENT_INVISIBLE) + R.chemical_flags |= (REAGENT_INVISIBLE) + log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [inverse_chem]") + return + else if (impure_chem) //SPLIT + var/impureVol = amount * (1 - purity) + if(!(chemical_flags & REAGENT_SPLITRETAINVOL)) + M.reagents.remove_reagent(id, impureVol, FALSE) + M.reagents.add_reagent(impure_chem, impureVol, FALSE, other_purity = 1-cached_purity) + log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume - impureVol]u of [id]") + log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [impure_chem]") return /datum/reagent/proc/on_update(atom/A) @@ -146,4 +213,4 @@ for (var/datum/reagent/R in reagent_list) rs += "[R.name], [R.volume]" - return rs.Join(" | ") + return rs.Join(" | ") \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 7239da4a..b447802c 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1384,6 +1384,10 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Neurotoxin" glass_desc = "A drink that is guaranteed to knock you silly." pH = 4.3 + //SplitChem = TRUE + impure_chem = "neuroweak" + inverse_chem_val = 0.5 //Clear conversion + inverse_chem = "neuroweak" /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)) diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents.dm new file mode 100644 index 00000000..6251fbf7 --- /dev/null +++ b/code/modules/reagents/chemistry/reagents/impure_reagents.dm @@ -0,0 +1,26 @@ +//Reagents produced by metabolising/reacting fermichems inoptimally, i.e. inverse_chems or impure_chems +//Inverse = Splitting +//Invert = Whole conversion + +/datum/reagent/impure + chemical_flags = REAGENT_INVISIBLE | REAGENT_SNEAKYNAME //by default, it will stay hidden on splitting, but take the name of the source on inverting + + +/datum/reagent/impure/fermiTox + name = "Chemical Isomers" + id = "fermiTox" + description = "Toxic chemical isomers made from impure reactions. At low volumes will cause light toxin damage, but as the volume increases, it deals larger amounts, damages the liver, then eventually the heart." + data = "merge" + color = "FFFFFF" + can_synth = FALSE + var/potency = 1 //potency multiplies the volume when added. + + +//I'm concerned this is too weak, but I also don't want deathmixes. +//TODO: liver damage, 100+ heart +/datum/reagent/impure/fermiTox/on_mob_life(mob/living/carbon/C, method) + if(C.dna && istype(C.dna.species, /datum/species/jelly)) + C.adjustToxLoss(-2) + else + C.adjustToxLoss(2) + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 5ca1e31f..aebeed65 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1587,7 +1587,7 @@ color = "#ffa6ff" //rgb: 255,166,255 taste_description = "a bad idea" id = "laughtervirusfood" - + /datum/reagent/consumable/virus_food/advvirusfood name = "highly unstable virus food" color = "#ffffff" //rgb: 255,255,255 ITS PURE WHITE CMON @@ -2151,7 +2151,7 @@ can_synth = FALSE var/datum/dna/original_dna var/reagent_ticks = 0 - invisible = TRUE + chemical_flags = REAGENT_INVISIBLE /datum/reagent/changeling_string/on_mob_metabolize(mob/living/carbon/C) if(C && C.dna && data["desired_dna"]) diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 32155c9b..a9150874 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -32,6 +32,7 @@ var/RateUpLim = 10 // Optimal/max rate possible if all conditions are perfect var/FermiChem = FALSE // If the chemical uses the Fermichem reaction mechanics//If the chemical uses the Fermichem reaction mechanics var/FermiExplode = FALSE // If the chemical explodes in a special way + var/clear_conversion //bitflags for clear conversions; REACTION_CLEAR_IMPURE or REACTION_CLEAR_INVERSE var/PurityMin = 0.15 //If purity is below 0.15, it explodes too. Set to 0 to disable this. diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index fe9f7d62..5521c40c 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -17,6 +17,7 @@ var/spillable = FALSE var/beaker_weakness_bitflag = NONE//Bitflag! var/container_HP = 2 + var/cached_icon var/splashable = FALSE /obj/item/reagent_containers/Initialize(mapload, vol) @@ -149,30 +150,71 @@ /obj/item/reagent_containers/proc/temp_check() if(beaker_weakness_bitflag & TEMP_WEAK) if(reagents.chem_temp >= 444)//assuming polypropylene - var/list/seen = viewers(5, get_turf(src)) - var/iconhtml = icon2html(src, seen) - for(var/mob/M in seen) - to_chat(M, "[iconhtml] \The [src]'s melts from the temperature!") - playsound(get_turf(src), 'sound/FermiChem/heatmelt.ogg', 80, 1) - to_chat(M, "[iconhtml] Have you tried using glass or meta beakers for high temperature reactions? These are immune to temperature effects.") - SSblackbox.record_feedback("tally", "fermi_chem", 1, "Times beakers have melted from temperature") - qdel(src) + START_PROCESSING(SSobj, src) //melts glass beakers /obj/item/reagent_containers/proc/pH_check() if(beaker_weakness_bitflag & PH_WEAK) - if((reagents.pH < 0.5) || (reagents.pH > 13.5)) - var/list/seen = viewers(5, get_turf(src)) - var/iconhtml = icon2html(src, seen) - container_HP-- - if(container_HP <= 0) - for(var/mob/M in seen) - to_chat(M, "[iconhtml] \The [src]'s melts from the extreme pH!") - playsound(get_turf(src), 'sound/FermiChem/acidmelt.ogg', 80, 1) - SSblackbox.record_feedback("tally", "fermi_chem", 1, "Times beakers have melted from pH") - qdel(src) + if((reagents.pH < 1.5) || (reagents.pH > 12.5)) + START_PROCESSING(SSobj, src) + + +/obj/item/reagent_containers/process() + if(!cached_icon) + cached_icon = icon_state + var/damage + var/cause + if(beaker_weakness_bitflag & PH_WEAK) + if(reagents.pH < 2) + damage = (2 - reagents.pH)/20 + cause = "from the extreme pH" + playsound(get_turf(src), 'sound/FermiChem/bufferadd.ogg', 50, 1) + + if(reagents.pH > 12) + damage = (reagents.pH - 12)/20 + cause = "from the extreme pH" + playsound(get_turf(src), 'sound/FermiChem/bufferadd.ogg', 50, 1) + + if(beaker_weakness_bitflag & TEMP_WEAK) + if(reagents.chem_temp >= 444) + if(damage) + damage += (reagents.chem_temp/444)/5 else - for(var/mob/M in seen) - to_chat(M, "[iconhtml] \The [src]'s is damaged by the extreme pH and begins to deform!") - playsound(get_turf(src), 'sound/FermiChem/bufferadd.ogg', 50, 1) - to_chat(M, "[iconhtml] Have you tried using plastic beakers (XL) or metabeakers for high pH reactions? These beakers are immune to pH effects.") + damage = (reagents.chem_temp/444)/5 + if(cause) + cause += " and " + cause += "from the high temperature" + playsound(get_turf(src), 'sound/FermiChem/heatdam.ogg', 50, 1) + + if(!damage || damage <= 0) + STOP_PROCESSING(SSobj, src) + + container_HP -= damage + + var/list/seen = viewers(5, get_turf(src)) + var/iconhtml = icon2html(src, seen) + + var/damage_percent = ((container_HP / initial(container_HP)*100)) + switch(damage_percent) + if(-INFINITY to 0) + for(var/mob/M in seen) + to_chat(M, "[iconhtml] \The [src]'s melts [cause]!") + playsound(get_turf(src), 'sound/FermiChem/acidmelt.ogg', 80, 1) + SSblackbox.record_feedback("tally", "fermi_chem", 1, "Times beakers have melted") + STOP_PROCESSING(SSobj, src) + qdel(src) + return + if(0 to 35) + icon_state = "[cached_icon]_m3" + desc = "[initial(desc)] It is severely deformed." + if(35 to 70) + icon_state = "[cached_icon]_m2" + desc = "[initial(desc)] It is deformed." + if(70 to 85) + desc = "[initial(desc)] It is mildly deformed." + icon_state = "[cached_icon]_m1" + + update_icon() + if(prob(25)) + for(var/mob/M in seen) + to_chat(M, "[iconhtml] \The [src]'s is damaged by [cause] and begins to deform!") \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 31e893aa..3e555f38 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -90,3 +90,9 @@ update_pack_name() else return ..() + +/obj/item/reagent_containers/blood/bluespace + name = "bluespace blood pack" + desc = "Contains blood used for transfusion, this one has been made with bluespace technology to hold much more blood. Must be attached to an IV drip." + icon_state = "bsbloodpack" + volume = 600 //its a blood bath! \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index b886b2da..6df151fc 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -6,7 +6,7 @@ reagent_flags = OPENCONTAINER spillable = TRUE resistance_flags = ACID_PROOF - container_HP = 3 + container_HP = 2 /obj/item/reagent_containers/glass/attack(mob/M, mob/user, obj/target) @@ -115,7 +115,6 @@ item_state = "beaker" materials = list(MAT_GLASS=500) beaker_weakness_bitflag = PH_WEAK - container_HP = 5 /obj/item/reagent_containers/glass/beaker/Initialize() . = ..() @@ -126,34 +125,36 @@ /obj/item/reagent_containers/glass/beaker/on_reagent_change(changetype) update_icon() - + /obj/item/reagent_containers/glass/bottle/viralbase name = "Highly potent Viral Base Bottle" desc = "A small bottle. Contains a trace amount of a substance found by scientists that can be used to create extremely advanced diseases once exposed to uranium." list_reagents = list("viralbase" = 1) /obj/item/reagent_containers/glass/beaker/update_icon() + if(!cached_icon) + cached_icon = icon_state cut_overlays() if(reagents.total_volume) - var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[icon_state]10") + var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[cached_icon]10") var/percent = round((reagents.total_volume / volume) * 100) switch(percent) if(0 to 9) - filling.icon_state = "[icon_state]-10" + filling.icon_state = "[cached_icon]-10" if(10 to 24) - filling.icon_state = "[icon_state]10" + filling.icon_state = "[cached_icon]10" if(25 to 49) - filling.icon_state = "[icon_state]25" + filling.icon_state = "[cached_icon]25" if(50 to 74) - filling.icon_state = "[icon_state]50" + filling.icon_state = "[cached_icon]50" if(75 to 79) - filling.icon_state = "[icon_state]75" + filling.icon_state = "[cached_icon]75" if(80 to 90) - filling.icon_state = "[icon_state]80" + filling.icon_state = "[cached_icon]80" if(91 to INFINITY) - filling.icon_state = "[icon_state]100" + filling.icon_state = "[cached_icon]100" filling.color = mix_color_from_reagents(reagents.reagent_list) add_overlay(filling) @@ -172,7 +173,7 @@ volume = 100 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,20,25,30,50,100) - container_HP = 6 + container_HP = 3 /obj/item/reagent_containers/glass/beaker/plastic name = "x-large beaker" @@ -232,7 +233,7 @@ volume = 300 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,20,25,30,50,100,300) - container_HP = 8 + container_HP = 4 /obj/item/reagent_containers/glass/beaker/cryoxadone list_reagents = list("cryoxadone" = 30) @@ -289,7 +290,7 @@ SLOT_L_STORE, SLOT_R_STORE,\ SLOT_GENERC_DEXTROUS_STORAGE ) - container_HP = 2 + container_HP = 1 /obj/item/reagent_containers/glass/bucket/Initialize() beaker_weakness_bitflag |= TEMP_WEAK @@ -343,7 +344,7 @@ materials = list(MAT_GLASS=0) volume = 50 amount_per_transfer_from_this = 10 - container_HP = 2 + container_HP = 1 /obj/item/reagent_containers/glass/beaker/waterbottle/Initialize() beaker_weakness_bitflag |= TEMP_WEAK @@ -359,7 +360,7 @@ list_reagents = list("water" = 100) volume = 100 amount_per_transfer_from_this = 20 - container_HP = 2 + container_HP = 1 /obj/item/reagent_containers/glass/beaker/waterbottle/large/empty list_reagents = list() diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index b24b0cff..d95f4eeb 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -738,6 +738,13 @@ research_icon_state = "surgery_any" var/surgery +/datum/design/surgery/experimental_dissection + name = "Experimental Dissection" + desc = "A surgical procedure which deeply analyzes the biology of a corpse, and automatically adds new findings to the research database." + id = "surgery_exp_dissection" + surgery = /datum/surgery/advanced/bioware/experimental_dissection + research_icon_state = "surgery_chest" + /datum/design/surgery/lobotomy name = "Lobotomy" desc = "An invasive surgical procedure which guarantees removal of almost all brain traumas, but might cause another permanent trauma in return." @@ -808,6 +815,22 @@ surgery = /datum/surgery/advanced/bioware/vein_threading research_icon_state = "surgery_chest" +/datum/design/surgery/ligament_hook + name = "Ligament Hook" + desc = "A surgical procedure which reshapes the connections between torso and limbs, making it so limbs can be attached manually if severed. \ + However this weakens the connection, making them easier to detach as well." + id = "surgery_ligament_hook" + surgery = /datum/surgery/advanced/bioware/ligament_hook + research_icon_state = "surgery_chest" + +/datum/design/surgery/ligament_reinforcement + name = "Ligament Reinforcement" + desc = "A surgical procedure which adds a protective tissue and bone cage around the connections between the torso and limbs, preventing dismemberment. \ + However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage." + id = "surgery_ligament_reinforcement" + surgery = /datum/surgery/advanced/bioware/ligament_reinforcement + research_icon_state = "surgery_chest" + /datum/design/surgery/necrotic_revival name = "Necrotic Revival" desc = "An experimental surgical procedure that stimulates the growth of a Romerol tumor inside the patient's brain. Requires zombie powder or rezadone." @@ -907,7 +930,15 @@ category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - +/datum/design/bsblood_bag + name = "Blue Space Empty Blood Bag" + desc = "A large sterilized plastic bag for blood." + id = "bsblood_bag" + build_path = /obj/item/reagent_containers/blood/bluespace + build_type = PROTOLATHE + materials = list(MAT_GLASS = 2500, MAT_PLASTIC = 4500, MAT_BLUESPACE = 250) + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/adv_dis_hypo name = "Disposable Hypospray MK.II" diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 63525f03..80c43540 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -116,7 +116,7 @@ display_name = "Advanced Surgery" description = "When simple medicine doesn't cut it." prereq_ids = list("adv_biotech") - design_ids = list("surgery_lobotomy", "surgery_reconstruction","surgery_toxinhealing", "organbox",) + design_ids = list("surgery_lobotomy", "surgery_reconstruction","surgery_toxinhealing", "organbox", "surgery_exp_dissection") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -125,7 +125,7 @@ display_name = "Experimental Surgery" description = "When evolution isn't fast enough." prereq_ids = list("adv_surgery") - design_ids = list("surgery_revival","surgery_pacify","surgery_vein_thread","surgery_nerve_splice","surgery_nerve_ground","surgery_viral_bond") + design_ids = list("surgery_revival","surgery_pacify","surgery_vein_thread","surgery_nerve_splice","surgery_ligament_hook","surgery_ligament_reinforcement","surgery_nerve_ground","surgery_viral_bond") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) export_price = 5000 @@ -273,7 +273,7 @@ display_name = "Bluespace Pockets" description = "Studies into the mysterious alternate dimension known as bluespace and how to place items in the threads of reality." prereq_ids = list("adv_power", "adv_bluespace", "adv_biotech", "adv_plasma") - design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding") + design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding", "bsblood_bag") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5500) export_price = 5000 @@ -1017,7 +1017,7 @@ prereq_ids = list("biotech","engineering") boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, - /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor, /obj/item/stack/sheet/mineral/abductor) + /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor, /obj/item/stack/sheet/mineral/abductor, /obj/item/stock_parts/cell/infinite/abductor) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) export_price = 20000 hidden = TRUE @@ -1031,7 +1031,7 @@ design_ids = list("alien_scalpel", "alien_hemostat", "alien_retractor", "alien_saw", "alien_drill", "alien_cautery") boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, - /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor) + /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor, /obj/item/stock_parts/cell/infinite/abductor) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 20000 hidden = TRUE @@ -1043,7 +1043,7 @@ prereq_ids = list("alientech", "adv_engi") design_ids = list("alien_wrench", "alien_wirecutters", "alien_screwdriver", "alien_crowbar", "alien_welder", "alien_multitool") boost_item_paths = list(/obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, - /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor) + /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor, /obj/item/stock_parts/cell/infinite/abductor) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 20000 hidden = TRUE diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index 4753abff..1b2f43c5 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -27,9 +27,9 @@ return 0 charge_tick = 0 var/mob/living/M = loc - if(istype(M) && M.blood_volume >= 20) + if(istype(M) && M.blood_volume >= 5) charges++ - M.blood_volume -= 20 + M.blood_volume -= 5 if(charges == 1) recharge_newshot() return 1 diff --git a/code/modules/surgery/advanced/bioware/experimental_dissection..dm b/code/modules/surgery/advanced/bioware/experimental_dissection..dm new file mode 100644 index 00000000..6266480b --- /dev/null +++ b/code/modules/surgery/advanced/bioware/experimental_dissection..dm @@ -0,0 +1,72 @@ +/datum/surgery/advanced/bioware/experimental_dissection + name = "Experimental Dissection" + desc = "A surgical procedure which deeply analyzes the biology of a corpse, and automatically adds new findings to the research database." + steps = list(/datum/surgery_step/incise, + /datum/surgery_step/retract_skin, + /datum/surgery_step/clamp_bleeders, + /datum/surgery_step/incise, + /datum/surgery_step/dissection, + /datum/surgery_step/close) + possible_locs = list(BODY_ZONE_CHEST) + bioware_target = BIOWARE_DISSECTION + +/datum/surgery/advanced/bioware/experimental_dissection/can_start(mob/user, mob/living/carbon/target) + . = ..() + if(iscyborg(user)) + return FALSE //robots cannot be creative + //(also this surgery shouldn't be consistently successful, and cyborgs have a 100% success rate on surgery) + if(target.stat != DEAD) + return FALSE + +/datum/surgery_step/dissection + name = "dissection" + implements = list(/obj/item/scalpel = 60, /obj/item/kitchen/knife = 30, /obj/item/shard = 15) + time = 125 + +/datum/surgery_step/dissection/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You start dissecting [target].", + "[user] starts dissecting [target].", + "[user] starts dissecting [target].") + +/datum/surgery_step/dissection/proc/check_value(mob/living/carbon/target) + if(isalienroyal(target)) + return 10000 + else if(isalienadult(target)) + return 5000 + else if(ismonkey(target)) + return 1000 + else if(ishuman(target)) + var/mob/living/carbon/human/H = target + if(H.dna && H.dna.species) + if(isabductor(H)) + return 8000 + if(isgolem(H) || iszombie(H)) + return 4000 + if(isjellyperson(H) || ispodperson(H)) + return 3000 + return 2000 + +/datum/surgery_step/dissection/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You dissect [target], and add your discoveries to the research database!", + "[user] dissects [target], adding [user.p_their()] discoveries to the research database!", + "[user] dissects [target]!") + SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = check_value(target))) + var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST) + target.apply_damage(80, BRUTE, L) + new /datum/bioware/dissected(target) + return TRUE + +/datum/surgery_step/dissection/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You dissect [target], but do not find anything particularly interesting.", + "[user] dissects [target], however it seems [user.p_they()] didn't find anything useful.", + "[user] dissects [target], but looks a little dissapointed.") + SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = (check_value(target) * 0.2))) + var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST) + target.apply_damage(80, BRUTE, L) + new /datum/bioware/dissected(target) + return TRUE + +/datum/bioware/dissected + name = "Dissected" + desc = "This body has been dissected and analyzed. It is no longer worth experimenting on." + mod_type = BIOWARE_DISSECTION \ No newline at end of file diff --git a/code/modules/surgery/advanced/bioware/ligament_hook.dm b/code/modules/surgery/advanced/bioware/ligament_hook.dm new file mode 100644 index 00000000..2c154436 --- /dev/null +++ b/code/modules/surgery/advanced/bioware/ligament_hook.dm @@ -0,0 +1,45 @@ +/datum/surgery/advanced/bioware/ligament_hook + name = "Ligament Hook" + desc = "A surgical procedure which reshapes the connections between torso and limbs, making it so limbs can be attached manually if severed. \ + However this weakens the connection, making them easier to detach as well." + steps = list(/datum/surgery_step/incise, + /datum/surgery_step/retract_skin, + /datum/surgery_step/clamp_bleeders, + /datum/surgery_step/incise, + /datum/surgery_step/incise, + /datum/surgery_step/reshape_ligaments, + /datum/surgery_step/close) + possible_locs = list(BODY_ZONE_CHEST) + bioware_target = BIOWARE_LIGAMENTS + +/datum/surgery_step/reshape_ligaments + name = "reshape ligaments" + accept_hand = TRUE + time = 125 + +/datum/surgery_step/reshape_ligaments/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You start reshaping [target]'s ligaments into a hook-like shape.", + "[user] starts reshaping [target]'s ligaments into a hook-like shape.", + "[user] starts manipulating [target]'s ligaments.") + +/datum/surgery_step/reshape_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You finish reshaping [target]'s ligaments into a connective hook!", + "[user] finishes reshaping [target]'s ligaments into a connective hook!", + "[user] finishes manipulating [target]'s ligaments!") + new /datum/bioware/hooked_ligaments(target) + return TRUE + +/datum/bioware/hooked_ligaments + name = "Hooked Ligaments" + desc = "The ligaments and nerve endings that connect the torso to the limbs are formed into a hook-like shape, so limbs can be attached without requiring surgery, but are easier to sever." + mod_type = BIOWARE_LIGAMENTS + +/datum/bioware/hooked_ligaments/on_gain() + ..() + ADD_TRAIT(owner, TRAIT_LIMBATTACHMENT, "ligament_hook") + ADD_TRAIT(owner, TRAIT_EASYDISMEMBER, "ligament_hook") + +/datum/bioware/hooked_ligaments/on_lose() + ..() + REMOVE_TRAIT(owner, TRAIT_LIMBATTACHMENT, "ligament_hook") + REMOVE_TRAIT(owner, TRAIT_EASYDISMEMBER, "ligament_hook") \ No newline at end of file diff --git a/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm b/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm new file mode 100644 index 00000000..ac034fce --- /dev/null +++ b/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm @@ -0,0 +1,45 @@ +/datum/surgery/advanced/bioware/ligament_reinforcement + name = "Ligament Reinforcement" + desc = "A surgical procedure which adds a protective tissue and bone cage around the connections between the torso and limbs, preventing dismemberment. \ + However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage." + steps = list(/datum/surgery_step/incise, + /datum/surgery_step/retract_skin, + /datum/surgery_step/clamp_bleeders, + /datum/surgery_step/incise, + /datum/surgery_step/incise, + /datum/surgery_step/reinforce_ligaments, + /datum/surgery_step/close) + possible_locs = list(BODY_ZONE_CHEST) + bioware_target = BIOWARE_LIGAMENTS + +/datum/surgery_step/reinforce_ligaments + name = "reinforce ligaments" + accept_hand = TRUE + time = 125 + +/datum/surgery_step/reinforce_ligaments/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You start reinforcing [target]'s ligaments.", + "[user] starts reinforcing [target]'s ligaments.", + "[user] starts manipulating [target]'s ligaments.") + +/datum/surgery_step/reinforce_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You finish reinforcing [target]'s ligaments!", + "[user] finishes reinforcing [target]'s ligaments!", + "[user] finishes manipulating [target]'s ligaments!") + new /datum/bioware/reinforced_ligaments(target) + return TRUE + +/datum/bioware/reinforced_ligaments + name = "Reinforced Ligaments" + desc = "The ligaments and nerve endings that connect the torso to the limbs are protected by a mix of bone and tissues, and are much harder to separate from the body, but are also easier to disable." + mod_type = BIOWARE_LIGAMENTS + +/datum/bioware/reinforced_ligaments/on_gain() + ..() + ADD_TRAIT(owner, TRAIT_NODISMEMBER, "reinforced_ligaments") + ADD_TRAIT(owner, TRAIT_EASYLIMBDISABLE, "reinforced_ligaments") + +/datum/bioware/reinforced_ligaments/on_lose() + ..() + REMOVE_TRAIT(owner, TRAIT_NODISMEMBER, "reinforced_ligaments") + REMOVE_TRAIT(owner, TRAIT_EASYLIMBDISABLE, "reinforced_ligaments") \ No newline at end of file diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index f79cdaee..4dda78ec 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -235,7 +235,7 @@ return BODYPART_DISABLED_PARALYSIS if(can_dismember() && !HAS_TRAIT(owner, TRAIT_NODISMEMBER)) . = disabled //inertia, to avoid limbs healing 0.1 damage and being re-enabled - if((get_damage(TRUE) >= max_damage)) + if((get_damage(TRUE) >= max_damage) || (HAS_TRAIT(owner, TRAIT_EASYLIMBDISABLE) && (get_damage(TRUE) >= (max_damage * 0.6)))) //Easy limb disable disables the limb at 40% health instead of 0% return BODYPART_DISABLED_DAMAGE if(disabled && (get_damage(TRUE) <= (max_damage * 0.5))) return BODYPART_NOT_DISABLED @@ -861,7 +861,7 @@ icon_state = "default_monkey_r_leg" animal_origin = MONKEY_BODYPART px_y = 4 - + /obj/item/bodypart/r_leg/monkey/teratoma icon_state = "teratoma_r_leg" animal_origin = TERATOMA_BODYPART diff --git a/icons/obj/bloodpack.dmi b/icons/obj/bloodpack.dmi index 3a5b9fd7064661597e7d4888974f7cfca8ff3c7f..82b4c2e543d8d896b1483ba17c06809357e8c164 100644 GIT binary patch delta 1131 zcmV-x1eE)>2jB^i7Y;xO1^@s6s%dfF0001kktK0|;x!}{6I83L;Ogh1;Nt7a1puB@ zI0;-xMLPfh1Q0I@R6m6D~0|!Q%Z0WN;}B!lAO-g zd$Oc|=d1Kxe!BY|zu)isz4uS=Ue0x0rWr4pF2FQq0+=qqG-d*rF2FQiHeJAJAcVL9 zTu*V`a$WZel^8<_5Ji!byqC}CYs17EHh;6(EH5l9EIyi|i-TCMi^TCEl^ULl^(U#V2C+@})zp8Oeq0?&lV;p4jQJA+~>w}2>$97#L~f-9zKR6`hY3_Ge_~;^CUr7YzS>Pn{!#p<(ew_O${{1O$@)b*e zTs|UykGURs;9d3sZmGo79s~=8!rF1ZAP9DK*Q+f4RDfj|ITf?{D%RaH&-K zd1q%wX%^602NVj0H6aAGS`8rt0JT~zwkL@*3Vd>RpJe_{rzc3%`Ic8Ne+EFkUVoq( zQ@aHuXAQ@3Ua;dvGXKWL2CMBhEWgEnqel-YzM>aTdnK5B^AgGHaUq$%-EQ+87GHOM z;NLG#a?B%h9TH9um7?RKD zHOf%S?;e0#9Nffp@+)_NFbwg1AK&)@QmrIE4qV&bj)fO<={EVC3X}vWm&>(sxm=Uv z_V)HtZ5W2}vpPkn=9lE&xRGvuuWfJd>gLxT1SQEdI|)dVX?B=+S{ow&M@;>u=u809 z1(?Q60MiAS#?%X7{L7Hs;4p=$Zvis_Oc!7pGXYE&U>Z{|z);hm*u2oU2kvhDZEmCR z6wnet5^pxGeqY^lAbUb63m`TxIFh*M_4}ny)IBFlA}EaklDy}olLumdU$beYc9F9R ztRi#g14fO^oevl_GIu^; z)Hv1G;YOo@5F)l&MCQ&1j2f9cA24cYwScgY zjHJMEL%9n`5p27+)=jfg&&X#7N-bb(>rM?|bMr&T!^5+C_mkGbil5C2v+GRBuOaRjbn8wr#@E_YN;}6?j&tL!m002ovPDHLkV1iyx5_kXr delta 831 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 delta 6436 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 eP+Sc@gPVV~m*W1o_r3e(kKJT< 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 GBL53LDzl3K delta 38331 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 diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index 687fef6065a24c7a5ba580fe889eaec9afd9b593..6aa4615dc1ae947f3b76f969998772a8f9f5c445 100644 GIT binary patch literal 25234 zcmbq)WmFwO)8@d%AxLnyK(GM8T@o}{LLj)iyI(Z8LvVKj1ec%}mjs94E33X#6p{(H2haG-}ZgqY~(5F%Unan_|;3Ia9_nzu%+B+y3{G zU@?H8Zk4_+=O%J^W4QML_G;U-O=CuH^kRBP5HaluO*@#LY9+V{zkU@Rwz4dJaoV7E zH}n1i%YBt!leAN@3;?JASqX6!_l*5a4=Aq7a=&P9oj$2~lcrWqLK!}sIBqVQHBHD4 z7NrpE~qV94WW&!5r*giqg`Fi|MJKN9W9!3@XR+~Rw3pRGQKH9 zt}CpoJG*~-qwv~df_|4w_RhOq*TaNkW}7!PbriZS*uG-NWm-#&AdVe)>in?<0KXjI zbLaUAtgmw;n zVC?EBwB)^2dL-}MP-~&7P_1@3a6a4+`}EtFSrSoa_fjO zBT18Qu`)-d8Xb6xOAp0rAB5w~_hwkLin1s^?QI8t>vnT$QsH*AoQ6XyWlrI>|91HD zV4>+?;U}|ln~aTjo=F0SUf0t}84A(rS%+mIamopQv>DD$8n;y=B09mq7oPeH4Prn{ z8`Ja=FKo~ZHe5)I@+7&TsE2*H59PLX5_y{*!qhu z3|xj^q`K<9t@@|&7u03J*cBf#iz0XEXIxE&tGbJBot7q?2<4BCJHhe2{AeHkBhTfO)cdScuN-E|IA#Yp zeQT{+neNk3(yOfQzP4>X{v)xBHS{g?S>$)t*AsLW+&z8CYAgrMZH!+vZS0_114(L>tck zQ|{w6c~wd>Kd{zqzkZIToZL&Bv^k4(PD1sqJDzOS0)H@{L5J3V4>OpQq-0hy$NKlt zxXsK$RC_HC0H?5kV4&CZP^ zj3KBrCMCVJhfudE>>$44vYskonibp!CZBy)h@xsWiP1jt{Jq+7H7|eQd+p)Cf1H@X zHqLX*f=C?>O+_suK;7dOV?tI>__p8R(tsVrpULWUJ{9kyRVdrGT@mN{sS*2y99ht7 zTa0zX+e-vsb2FK$$WH10k$;6lj{v2_Tl#~0h}qN_8I4}OYjb%KBm`Y{q;IgRfjfe0 zghY%lT}k1gq3?N@(-V?w-AabSG$^#|B7fddI~ZXj1Hspwp}Sha8TT&%G5M9OfnRK$ z3+bLTuYEE4gvRRLGZf+=i@{9re}$EpX3~YtVR)Int&;In z80`)v{dE`cu|}k7;`r0feo+x1@<63_zNf60i{9}paSda;o8c|mjvy!0p~q_SFyTt4 z%sAyHoK`n@7D^gYKJq1>Xe6uq`h&ehV@$!DwVrbOd8Q$R%qX?bdWVjoR>E8%3AgtR zumjck-bqKIb!6HrM`Gaa`^=o(WjT*=<715Ro3)gahN&I3NM+MK=37hK%J})S*P7gd zqc8rd-@=)v1%Mjyr}km@tMi_H&u7Mna&q;X&Z#utQrOX&$r`gxKeb+@cNdWo*}^T4#7sQaIDi}xO8T&Ge8Qr42+BUjpRzEULw zq&gh_<(SIX%d=Vkf)+qE&&=}LI+T({MS&JVUl4$iLbdn`Tqo%*IT=)9cF-Mt_=uT8 zh4PLL^eX{WD$fo6uNTK27`)zR3X2HinqX^L8Clu5;a9blF|Tmx=U*9jNR+)Ljnalf zg?OxIsUl9l4@#cg0^MT;kg_IbJvBQNv$+BMb}nELK(YbQphsQyJbOe z_M69pAq6P{}T~IV z|DY;&!UJVH`zq)>oK}3F+7`}ypB}E_pG`b$M3O7b9tv$`AsHsFpq-nM{;iC}Ed&18 zzvASlPJ$KO#6|+Qj#=Dc-PJJ35Ws(N(oS+b{oHwl0pKggoMc0+Ro!&EsR8dshrtx*)RY)?zWHvcT-bS)tej(3!ZA< z25oGOa-p@aWI|uG&rd?8_r&@s3I}HO{1ir$85`_g%p;5}aY5vi2FR(8+}lbRaSv%V z5PmGhcT~ry?7h;?SCCnql`iKvry%}X6${`E@1py~_#w|uV4pla{xs%a181vPIfLGA z)RKigbOnlFY-;+ha;95@YyVB3sEX5MF%cXvz1MmJfA6NEroS_E*yt-GD%7^7cz6W43G0Nt5R7+c-f2M~uc6hsB5f!w}s{!bn~k!#6;OG16gWvtGQ+ z>~)LPB3o8U;Dyo*ydUT`N6uG%#9}NB`$6^oS33w^r#-0kPow?6Z;w6rg(a6N44*) zAsiaEAN=5(b8+tt`DT5|-(5pLl}4%V*^A%4=#1@x!gY*8;Z|oK`t33L{qFo3*ZQlR zEjGBm-Kbm9d01AyCv`;j)4aD-!lHiYfO*ZD?omwR*NfuIkklM1YvMY4|e9X{7 zGH*ykkmZ%&!MmL4nih{Pi43jF_bk(U9n^A|B3{&b%eY<@-F7z?Jb<2=a-<6lRW>ecTcGARMElYvLgd#sg7%nS_XxVJ!B8k==Hd0(*xklB+;^<^RV zA5_HgxBuHdBEhqV=?vN-!Hr+)+9GjLWT|EAY5J58@O~#;Ro29S)834o?ptjm?Yf{n z0V_D4`Vb{Pp*syM2^YkM0}i7ecv@g}`*Rd~QA*R|Uz0}Xww6uBjK_VZDC#%<-P&z! zsF2nZ0nAZE42y|E>PULpWXtIjq_P=wDfG7P&hIm{!|+3#nq&W3uy88!7Phu z2ESF5qWrBF54eGUNpd_@cFGmBJ6Wt$mSj^7nq4d)aZ8mXLd1XaZEbxfB;dppp1_;? z7TAG^2%jW6z!942PX5Cc|GsTCB0Zh~Bf@=2MRY_&n+-9g7wRK|04T(ZgnWJ5fubHu z18r1m-yFXkEQ~|{8ZK;ci-}>6aepDYx`n4jt6{40*>gZZ0>cJ0A@aZo`RXRS0i46{ z&O}tLf(WsLu|5Bxp`yOQJ`+>;h8?wdyjb*%)N;v5hQbX#buN+}O%2ubR5mMhJW}nb z{eSxBq=?@q_M&2B3^Ouyue7b3you3@23Bd67%eHjm$Ma3w0<~C^nsf} zzWC1fCFbPHZSD1rf91@w7z6yr>IRD3$}bztasb7Q%jtaJXJzHa>uYzIN3}ULWdJ&N z756Z=BV02c3AZ{_4eb#!fCpr3V1^sqSlju!8y1gOH70(tUE2mwJZM__{WXh(^Fb(U zr+63FLD0t(SJF>4`08hBoM@xuVy>P{=Sr39idk$HHN!|>{pFOD?3R2xhj_Sa$3y4b zQ?VV7O?8ZdX(z?mIC0t9g^(%tfE1S$vxG;+z*%GR@i4oaS;PPxyjIZU^=CeCVlF?B z0L%83s=OWcqwi(x8cDrq%>Z7xPb%60&OKdYYb>r%7xGDpCuCcwH+iUDXk;WtLSiEK zTRpLLO>D>b`1m}HTGJP9m9|_-^0$I~!Z|n(?HLs6kNsx$i;fbGXHI|2r1ntK=|f;C zV`>nDNkl&-L1P2f!@ldgmW}{R1DHs&;`ejI2U%I!v=^j2_7Hh`ZM;-_57oBJo6B9| zKoMLcMBK;oGwYr}xVK6v`dlR3%2Mq`_9E?8j~Tq$rm%glxthKmbxYWCHEJ3r-1qV_ zWPuAnU?G0U%FoPaP?VA=7B4Ve?*S6DjhS=k&P3>bRC&hGvh;R7 zj&_a}qU`qiH*yaE8MjDtD+m3H{V_D~yi`q$45{g@TW|86xhyi`*rP-eYQJz>n_*t!>ems_~^&^0meKKsw09 zv?~u}NO>qFo8~&yo{*#x(8e7`s-ECVzv38Z>B()O*X7Y=j5Ap7Ekz>F55Im({zhPN zS|d%O+i@~q8mpMHX>Ag=S!7t*q z>MWOi=(ELSvqGy*o$EWiyu3f>JUaqzqCoQl{zh3 z&d?a$xEc#I)p1}*Zdf7>bJf|?oaNqsAei&QGnYWZN~=3;61&PTpt77C;SFYJEDHf#4ej+wJt__Iqg~iCNRPQ#&2_j@FtrRBLN$IQDrc z;l^;1hoNZ>KiQKb=JCvYUq0-F4z`dcoBx8|(6x40obMTLYgyAqNzs}ml_>5!_}-wy zKOXryq2s<(v4tfKsoAt1M)rSOtWX(00%LKD6WUe! z{w%(Ynzw(YV7D5Y|1_xKv#k7MgZ0(90OwQJo?3%$B*juzdf`rU4#!GN57q0o>1jBu zjVT(R`FSTRI^i2{RBAM&3|{^Q1+A+Gp`O0J54V(6Pfy+X(r>*sy%ma(5l^Z!RG!+6 zo-hG+hxP7&@n#Nf(}u?h>KLUf2#LS3<&Q=8b6x3-5qsES#S zXdNSh%||pC$)5WWd|H z1f_bsCfakp=0;$B_R3C+S68o7HGA;<$tz@qU&cWsUZ_CqvWXZmCGeEi53LlL1ieGbGos$J}V)44(kLQ0@D?Za{nYw=2 zp1X8s)V@z=C2ZW`GqhXJ+_+ZBns=KV_``fnXVf$?wn%b4bwZBee)MkaPXZiJQO7Pi z(?oh)J5w0ziW<=;OxJvbz4(Jk(nf)fr@}{T!wm`QI&;+6Qhc8zkL*{OV&~{sW6#d2 zQ6q7}5eE~xtu-B9FYOA3xZ_d(E$+nf>O!+!NSmh27Zz}lr1smRHEZVfO{RQ$!$SKS zH|vHO^Zvm@F|-eRGcdf+X-8-TnJ2&cfsl+k5iQz`B-i-`L>;;|p-srOZZ8H{ZR z0LsX)n7wVV))@iiE&3%ypO795i7O2e0-IbbH)pz=A~H)13%4^BI)iW>DQ}GcfVYA5 z{mjm%)jpwcYJlCCF+S`ya3&WWBbm09X8-<_1o(p%JL%i+z+@JU zJdFlxVqQ=;od_eDg0C~~gFB%k><_KyZSijp3LAbp#l!Az_g#Hf(v}p9374y$9_}kC z6S)vOXsneYr!-U!Upy}@Y|;A3)XC0qVdw|>i5CRs_1liytt?0IZ;8k7VW3WSVZ%Js z%~QW&M1PQzHfbUd?r{^@PuS~H|5rR6Nk8ri`|Q9ki+AsXF{r%}FW%=1=J-A#tz8w$ zk$;Sv85?>z!CvR(Ta4r4R1ynrTrX!h`->chF)CU#J1&xAo%e!(hZLqcKj4H6ZVDAE z8n>&BIKDeo>e;JShCAI9%;hJFZR^$yz6fV64s)|cjuqP_p+SqNUKg@=Y9Izg-HV_9 zk1Avp6}KpO54)S3z5%n@*X26xm3t5|>mEy>1H5(Jx*va8I6Ckv&h4SX@mB=~Pr*Ic zUZGQ`a)X3X#vsNpP4K;e&moJADir#kfvMx{TKP{10&^kWnPf(ub z!{450=IjXc^@ObIBiJ<##YX8l@u7RPUS;wY+qWoZ_a}Jx_G%p+yp$;Tjp%l`NDSDo z0#A;jYJGy7tr&A^Odn_Kd7HQO#4T0?gDj?hi;>j`vlFrY+ohyqj{R zUYsqt4X)t4_x*2t@?xtbZGpBe8dAo}vqQ2l{*3+1!;YIMxQ<)9ed-3STy4)An)uo_U%KBmc0;O8S3;VST zu{`~^=ad6k#BwuXwxbn)g%j^D$0~rG>hP1c(o_DVMeg{B*XLLc?ykI5HwDv{3q>Dm z?vVst$2s;u120u-+YFhr3K9}dT{k_cUt7tOp>R1nlr#QGR)(@4hB7xX=f8Pf zrCOOUJTTk~*`6nv9I5ka5|@;%8(TB%9PLf;#il}i9X${%k|&h@eIcbituoQ`I=V2F+GrzgYwAJmfE9%Ia_eyQT%@V2YF zTZfe`5oa_)vqW}SW^=2@%E7z@A4lm7xobRzKhjf!7E0P;FH=wNsJ!j(C35LDJbo~0 z4;=rNzPBOZT)*E~Sxt;NjXRgXs+^(pwt0Q(DUa_XZLv4j<|GWPhP)JUIj&uWFHn=1 zjf$9oL7W+b|^H0@s&0hzp=@cOU1FIG{ z0lClHJcD@(Ac-RK(}$4`@gBd-TJr?;6oW?1qlXk>8{*a&R^GdGoc&J($dK*>qtxZ7 z#}f0jJ#j>Uv9YoK?nI$_gLNv+&($B}{_1*R3@H|z3e`U5<_sJh9N3hUY;ycPPacwz zL7%;OhLky#6E~inBc+&y`J~Vf&gLa1!lbx>KJCh;UtIlZ#C~q|oZ7-Nk#*dUgTL6Y zrfo5;wZulVw-8n1@>*r0ss1Pap1u-4#$*PbZZ32c>cVr6;yZ&_TbF8Xa} zHHVH`y-qKUSSrvbQ*gAHAt&IXOIYk(I|mN&ZRv4xq}idqD(2yoEUe4?+m^`C4Q3&O z>b}O`-nBy&LVcFRKYymzU~crba?L+R%J3=J^j{kh1+tYy;xIF0?9#Ldib=E`I0LWb z&EA}AOLc6IX7?Yjb-#sP+vDNmQ$t_sO@$C2l;=5pA3GQ0^IOBsmUeKc)?r$Y?)-+0 zgX0hSyp8kSN!th1EGixy;N4~!=_0ZoIV(Vs__T)2Iqwjb$k(X6z_d|bQX+0*LRY6* zzT{p#4!*YzOmT0@djFdX;7MZ|oDA1{IT>>CL!8kQp1ai`A}Y0*g7<6JCk+iop;)UI zL-snv0U4pgS(0DQY4_eBd5I{Otx=hqi3^9(*7DJuuW<{}fVGgi+`%mG9Mw zlk@E^Y^o-!`ksU1bKHy{u1B^#*P=Bw)D20x2d_U*}CB)!zixq()&BSqdwqTV%;9ri~4$Nq~4YG2sUB&mJ+udLEiT_F?|mwpxWMnoUKAXyo|0+wY`ON!L2 zg6{1t6o4Oz{;rJ3rqhw2U6)T`hXZ006X|4Yjr+O$UWP`6<|e?@(`{Nfy`wwuQWfFEwLuRXug z&5oX-OyFLTz9@dCWPgnuYccN~c13P3xSu{ls&N*^E3+q8%DHueYhh%VZ|dLiHe!9K zz{}ar^ky&eC5N@)h1;>g2_J3tLryai=oYfqcv9@Bgji&VejbUDFF)Bp`~;jIVJ?|| zq51lzUEfP^{v8TTo7&62=Nsv!(J_T7OST)TBlKzZGDaC8uqK{xhk*a4&G_>+F8L7L_u)goSiOzjKFCHoYWW) zJP1_qUagkW*Hc+q+U3Jw1O|USzDIihDQwUJ)2vamswR)1LS-X=@~8X~c@#r{wIM)V z8c||IvB$3uMrh~1u%8w3`c1UYpSB76-TkiGTTo2l*dmC}T0QGxBW~%KM79Sg5udRk z>084<{Vp-1ZVWZ;y0brhY1q~te!MH+UMqc=XT+jqW5X&eEL5(Xru8;`_aUKs+`0D_ zqv>~CT-=)S%D6i-6Voe3X>D^o?WHHdn513qlb?HDKMUj z4AHJjEE5~i*CoaGU6ZFBcWHJK?}PonMWtEK6yMpT)4$yNANGyq1Q*}^PM(R?!pH2m z`^UzD-+9Q>Beg$3Uf;XpvcWL2U!P-j&fpBwn<+>mE)!r-{pbG-#NS_&VG7%tMZ8vPI z-NUdbNI%Icy~iR+6|H;`vE9|W=%irU7`CJ&Tz1BXOg~Dj523#Z&+AYJO zTR@>j%%SF0L2YkT-nVG{LY9QXCrp<=Lx-4-AGKF-U4A&fhTzP4 zHX=25=F*%^4G=seS^EYHI_^;;N4kjL4b;nXuz$qt&NNk8Hp3Qa9G_Mw!RaSC~Ip|-NgS-&Sl{!^g3@c1J;NU ze?*F9DLxQZh9_>N&`47W*MF8K=X5-I9@fxm9`$f5yIK8dZV$ewMc81~=It0nj zm%QaSFAQM+XY%5U?+|a`&eOR|(ZB%pG0PucKxZ{9ez7F?jYovZC+C% z!WM?VLfk)NdfG#4S~ediQCBj?!NKW5)m2d`7}#^~!J*EvF4+El@IlXV1GjSU)9BP? znS((B#Ozc4AfA7+bNNtr&s_dE_G0<3ZZ2swD_iOxx39SB6V3UaTxzGr!pp2a@!X>d zaUWAZz8U^X*=L0Qx$&UvTi{ub9ftdU4TD6ez&!Cq%_*!$v!hyy@cv5HddXgy2&o|K zrDCN{=S5o?g#p%^OMVCviGupQmaH%mr^HE+*uT@p3D=_0*gP^ros-@Xa_^Gg<7Hk5 z$KFh~$RW8_CWG8MG=gsHlrZn?-)zh{(c`uOaq#lz7I&U%) z2Cf+BrI%cr8qp@~;ot12IAgx8#)1Hz7!-EA?e5Fz+gIx){#a`vR)le?aWS^UB}Bpl zuyVgXYaTCc{X&Ontg7mWhntT=BEK!3I+UpocjXsX1Bk0XMxSc_qFFt)OLBr)c37_c zM(G`xBaVK3CZ~a^RA0!{-TL#f$K=I5+t2MI+zE6)VWAuB-O@7CMH?|B*V=c7

4lUKI=sheuJSgQKIgD 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 yLsF!M4QS$=!uJ5_Yunwuw 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 w9^S^xAyD(s!You feel the synethic cells rest uncomfortably within your body as they start to pulse and grow rapidly.") diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm index d05cfb55..88586b42 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm @@ -28,7 +28,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die var/datum/mind/originalmind var/antiGenetics = 255 var/sleepytime = 0 - InverseChemVal = 0.25 + inverse_chem_val = 0.25 can_synth = FALSE /datum/action/chem/astral diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm index 7c22d9d1..5ebad3b2 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm @@ -26,9 +26,9 @@ taste_description = "a milky ice cream like flavour." overdose_threshold = 17 metabolization_rate = 0.25 - ImpureChem = "BEsmaller" //If you make an inpure chem, it stalls growth - InverseChemVal = 0.35 - InverseChem = "BEsmaller" //At really impure vols, it just becomes 100% inverse + impure_chem = "BEsmaller" //If you make an inpure chem, it stalls growth + inverse_chem_val = 0.35 + inverse_chem = "BEsmaller" //At really impure vols, it just becomes 100% inverse can_synth = FALSE /datum/reagent/fermi/breast_enlarger/on_mob_add(mob/living/carbon/M) @@ -140,7 +140,7 @@ /datum/reagent/fermi/BEsmaller name = "Modesty milk" id = "BEsmaller" - description = "A volatile collodial mixture derived from milk that encourages mammary reduction via a potent estrogen mix." + description = "A volatile collodial mixture derived from milk that encourages mammary reduction via a potent estrogen mix. Produced by reacting impure Succubus milk." color = "#E60584" // rgb: 96, 0, 255 taste_description = "a milky ice cream like flavour." metabolization_rate = 0.25 @@ -211,9 +211,9 @@ taste_description = "chinese dragon powder" overdose_threshold = 17 //ODing makes you male and removes female genitals metabolization_rate = 0.5 - ImpureChem = "PEsmaller" //If you make an inpure chem, it stalls growth - InverseChemVal = 0.35 - InverseChem = "PEsmaller" //At really impure vols, it just becomes 100% inverse and shrinks instead. + impure_chem = "PEsmaller" //If you make an inpure chem, it stalls growth + inverse_chem_val = 0.35 + inverse_chem = "PEsmaller" //At really impure vols, it just becomes 100% inverse and shrinks instead. can_synth = FALSE /datum/reagent/fermi/penis_enlarger/on_mob_add(mob/living/carbon/M) @@ -311,7 +311,7 @@ /datum/reagent/fermi/PEsmaller // Due to cozmo's request...! name = "Chastity draft" id = "PEsmaller" - description = "A volatile collodial mixture derived from various masculine solutions that encourages a smaller gentleman's package via a potent testosterone mix, formula derived from a collaboration from Fermichem and Doctor Ronald Hyatt, who is well known for his phallus palace." + description = "A volatile collodial mixture derived from various masculine solutions that encourages a smaller gentleman's package via a potent testosterone mix. Produced by reacting impure Incubus draft." color = "#888888" // This is greyish..? taste_description = "chinese dragon powder" metabolization_rate = 0.5 diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm index a7c4ea00..4cb8ea0c 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -6,58 +6,20 @@ id = "fermi" taste_description = "affection and love!" can_synth = FALSE + //SplitChem = TRUE + impure_chem = "fermiTox"// What chemical is metabolised with an inpure reaction + inverse_chem_val = 0.25 // If the impurity is below 0.5, replace ALL of the chem with inverse_chemupon metabolising + inverse_chem = "fermiTox" //This should process fermichems to find out how pure they are and what effect to do. /datum/reagent/fermi/on_mob_add(mob/living/carbon/M, amount) . = ..() - if(!M) - return - if(purity < 0) - CRASH("Purity below 0 for chem: [id], Please let Fermis Know!") - if (purity == 1 || DoNotSplit == TRUE) - log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [id]") - return - else if (InverseChemVal > purity)//Turns all of a added reagent into the inverse chem - M.reagents.remove_reagent(id, amount, FALSE) - M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1) - log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [InverseChem]") - return - else - var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem - M.reagents.remove_reagent(id, (impureVol), FALSE) - M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1) - log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume - impureVol]u of [id]") - log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [ImpureChem]") - return + //When merging two fermichems, see above /datum/reagent/fermi/on_merge(data, amount, mob/living/carbon/M, purity)//basically on_mob_add but for merging . = ..() - if(!ishuman(M)) - return - if (purity < 0) - CRASH("Purity below 0 for chem: [id], Please let Fermis Know!") - if (purity == 1 || DoNotSplit == TRUE) - log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [id] in themselves") - return - else if (InverseChemVal > purity) - M.reagents.remove_reagent(id, amount, FALSE) - M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1) - for(var/datum/reagent/fermi/R in M.reagents.reagent_list) - if(R.name == "") - R.name = name//Negative effects are hidden - log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [InverseChem]") - return - else - var/impureVol = amount * (1 - purity) - M.reagents.remove_reagent(id, impureVol, FALSE) - M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1) - for(var/datum/reagent/fermi/R in M.reagents.reagent_list) - if(R.name == "") - R.name = name//Negative effects are hidden - log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume - impureVol]u of [id]") - log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [ImpureChem]") - return + //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -77,7 +39,7 @@ taste_description = "like jerky, whiskey and an off aftertaste of a crypt." metabolization_rate = 0.2 overdose_threshold = 25 - DoNotSplit = TRUE + chemical_flags = REAGENT_DONOTSPLIT pH = 4 can_synth = TRUE @@ -122,9 +84,9 @@ color = "#f9b9bc" // rgb: , 0, 255 taste_description = "dewicious degenyewacy" metabolization_rate = 0.5 * REAGENTS_METABOLISM - InverseChemVal = 0 + inverse_chem_val = 0 var/obj/item/organ/tongue/nT - DoNotSplit = TRUE + chemical_flags = REAGENT_DONOTSPLIT pH = 5 var/obj/item/organ/tongue/T can_synth = TRUE @@ -211,9 +173,9 @@ description = "A stablised EMP that is highly volatile, shocking small nano machines that will kill them off at a rapid rate in a patient's system." color = "#708f8f" overdose_threshold = 15 - ImpureChem = "nanite_b_goneTox" //If you make an inpure chem, it stalls growth - InverseChemVal = 0.25 - InverseChem = "nanite_b_goneTox" //At really impure vols, it just becomes 100% inverse + impure_chem = "nanite_b_goneTox" //If you make an inpure chem, it stalls growth + inverse_chem_val = 0.25 + inverse_chem = "nanite_b_goneTox" //At really impure vols, it just becomes 100% inverse taste_description = "what can only be described as licking a battery." pH = 9 can_synth = FALSE @@ -236,7 +198,7 @@ //empulse((get_turf(C)), 3, 2)//So the nanites randomize var/atom/T = C T.emp_act(EMP_HEAVY) - to_chat(C, "The nanites short circuit within your system!") + to_chat(C, "You feel a strange tingling sensation come from your core.") if(isnull(N)) return ..() N.nanite_volume = -2 @@ -246,10 +208,11 @@ O.emp_act(EMP_HEAVY) /datum/reagent/fermi/nanite_b_goneTox - name = "Naninte bain" + name = "Electromagnetic crystals" id = "nanite_b_goneTox" - description = "Poorly made, and shocks you!" - metabolization_rate = 1 + description = "Causes items upon the patient to sometimes short out, as well as causing a shock in the patient, if the residual charge between the crystals builds up to sufficient quantities" + metabolization_rate = 0.5 + chemical_flags = REAGENT_INVISIBLE //Increases shock events. /datum/reagent/fermi/nanite_b_goneTox/on_mob_life(mob/living/carbon/C)//Damages the taker if their purity is low. Extended use of impure chemicals will make the original die. (thus can't be spammed unless you've very good) @@ -314,7 +277,7 @@ name = "Fermis Test Reagent" id = "fermiTest" description = "You should be really careful with this...! Also, how did you get this?" - addProc = TRUE + chemical_flags = REAGENT_FORCEONNEW can_synth = FALSE /datum/reagent/fermi/fermiTest/on_new(datum/reagents/holder) @@ -345,22 +308,6 @@ playsound(get_turf(M), 'modular_citadel/sound/voice/merowr.ogg', 50, 1) holder.clear_reagents() -/datum/reagent/fermi/fermiTox - name = "FermiTox" - id = "fermiTox" - description = "You should be really careful with this...! Also, how did you get this? You shouldn't have this!" - data = "merge" - color = "FFFFFF" - can_synth = FALSE - -//I'm concerned this is too weak, but I also don't want deathmixes. -/datum/reagent/fermi/fermiTox/on_mob_life(mob/living/carbon/C, method) - if(C.dna && istype(C.dna.species, /datum/species/jelly)) - C.adjustToxLoss(-2) - else - C.adjustToxLoss(2) - ..() - /datum/reagent/fermi/acidic_buffer name = "Acidic buffer" id = "acidic_buffer" @@ -371,9 +318,11 @@ //Consumes self on addition and shifts pH /datum/reagent/fermi/acidic_buffer/on_new(datapH) + if(holder.has_reagent("stabilizing_agent")) + return ..() data = datapH if(LAZYLEN(holder.reagent_list) == 1) - return + return ..() holder.pH = ((holder.pH * holder.total_volume)+(pH * (volume)))/(holder.total_volume + (volume)) var/list/seen = viewers(5, get_turf(holder)) for(var/mob/M in seen) @@ -391,9 +340,11 @@ can_synth = TRUE /datum/reagent/fermi/basic_buffer/on_new(datapH) + if(holder.has_reagent("stabilizing_agent")) + return ..() data = datapH if(LAZYLEN(holder.reagent_list) == 1) - return + return ..() holder.pH = ((holder.pH * holder.total_volume)+(pH * (volume)))/(holder.total_volume + (volume)) var/list/seen = viewers(5, get_turf(holder)) for(var/mob/M in seen) @@ -458,4 +409,4 @@ H.say("*wag")//force update sprites. to_chat(H, "[words]") qdel(catto) - log_game("FERMICHEM: [H] ckey: [H.key] has returned to normal") + log_game("FERMICHEM: [H] ckey: [H.key] has returned to normal") \ No newline at end of file diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm index d5c675ea..12c0ef43 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm @@ -6,9 +6,9 @@ color = "#68e83a" pH = 8.6 overdose_threshold = 35 - ImpureChem = "yamerol_tox" - InverseChemVal = 0.4 - InverseChem = "yamerol_tox" + impure_chem = "yamerol_tox" + inverse_chem_val = 0.4 + inverse_chem = "yamerol_tox" can_synth = TRUE /datum/reagent/fermi/yamerol/on_mob_life(mob/living/carbon/C) @@ -73,15 +73,15 @@ C.adjustOxyLoss(-3) ..() -/datum/reagent/fermi/yamerol_tox - name = "Yamerol" +/datum/reagent/impure/yamerol_tox + name = "Yamer oh no" id = "yamerol_tox" - description = "For when you've trouble speaking or breathing, just yell YAMEROL! A chem that helps soothe any congestion problems and at high concentrations restores damaged lungs and tongues!" + description = "A dangerous, cloying toxin that stucks to a patient’s respiratory system, damaging their tongue, lungs and causing suffocation." taste_description = "a weird, syrupy flavour, yamero" color = "#68e83a" pH = 8.6 -/datum/reagent/fermi/yamerol_tox/on_mob_life(mob/living/carbon/C) +/datum/reagent/impure/yamerol_tox/on_mob_life(mob/living/carbon/C) var/obj/item/organ/tongue/T = C.getorganslot(ORGAN_SLOT_TONGUE) var/obj/item/organ/lungs/L = C.getorganslot(ORGAN_SLOT_LUNGS) diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index e2941519..fbad8c8f 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -6,7 +6,25 @@ return //Called when reaction STOP_PROCESSING -/datum/chemical_reaction/proc/FermiFinish(datum/reagents/holder) +/datum/chemical_reaction/proc/FermiFinish(datum/reagents/holder, var/atom/my_atom, reactVol) + if(clear_conversion == REACTION_CLEAR_IMPURE | REACTION_CLEAR_INVERSE) + for(var/id in results) + var/datum/reagent/R = my_atom.reagents.has_reagent("[id]") + if(R.purity == 1) + continue + + var/cached_volume = R.volume + if(clear_conversion == REACTION_CLEAR_INVERSE && R.inverse_chem) + if(R.inverse_chem_val > R.purity) + my_atom.reagents.remove_reagent(R.id, cached_volume, FALSE) + my_atom.reagents.add_reagent(R.inverse_chem, cached_volume, FALSE, other_purity = 1) + + else if (clear_conversion == REACTION_CLEAR_IMPURE && R.impure_chem) + var/impureVol = cached_volume * (1 - R.purity) + my_atom.reagents.remove_reagent(R.id, (impureVol), FALSE) + my_atom.reagents.add_reagent(R.impure_chem, impureVol, FALSE, other_purity = 1) + R.cached_purity = R.purity + R.purity = 1 return //Called when temperature is above a certain threshold, or if purity is too low. diff --git a/sound/FermiChem/SoundSources.txt b/sound/FermiChem/SoundSources.txt index bd45f866..1420814d 100644 --- a/sound/FermiChem/SoundSources.txt +++ b/sound/FermiChem/SoundSources.txt @@ -6,5 +6,6 @@ heatacid.ogg - from https://freesound.org/people/klankbeeld/sounds/233697/ from bubbles2.ogg from fuse.ogg bufferadd.ogg- https://freesound.org/people/toiletrolltube/sounds/181483/ +heatdamn.ogg - from https://freesound.org/people/klankbeeld/sounds/233697/ Work is licensed under the Creative Commons and Attribution License. \ No newline at end of file diff --git a/sound/FermiChem/heatdam.ogg b/sound/FermiChem/heatdam.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ab8492e9660a47befc7131e7c80ace5d4c80cbe4 GIT binary patch literal 21623 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%0DFrTFZ9~|v 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