From 9461f16e11ff9c88b64543a3c4b5d2337663dc6a Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 23 Nov 2014 14:09:47 +1030 Subject: [PATCH 01/90] First pass on xenoflora expansion. --- code/modules/hydroponics/grown_inedible.dm | 27 +- code/modules/hydroponics/hydro_tools.dm | 17 +- code/modules/hydroponics/hydro_tray.dm | 7 +- code/modules/hydroponics/seed_datums.dm | 140 ++++--- .../reagent_containers/food/snacks/grown.dm | 389 +++++++----------- 5 files changed, 262 insertions(+), 318 deletions(-) diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index d82807f738..4dec3cd92c 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -8,7 +8,7 @@ var/plantname var/potency = 1 -/obj/item/weapon/grown/New() +/obj/item/weapon/grown/New(newloc,planttype) ..() @@ -17,21 +17,20 @@ R.my_atom = src //Handle some post-spawn var stuff. - spawn(1) - // Fill the object up with the appropriate reagents. - if(!isnull(plantname)) - var/datum/seed/S = seed_types[plantname] - if(!S || !S.chems) - return + if(planttype) + plantname = planttype + var/datum/seed/S = seed_types[plantname] + if(!S || !S.chems) + return - potency = S.potency + potency = S.potency - for(var/rid in S.chems) - var/list/reagent_data = S.chems[rid] - var/rtotal = reagent_data[1] - if(reagent_data.len > 1 && potency > 0) - rtotal += round(potency/reagent_data[2]) - reagents.add_reagent(rid,max(1,rtotal)) + for(var/rid in S.chems) + var/list/reagent_data = S.chems[rid] + var/rtotal = reagent_data[1] + if(reagent_data.len > 1 && potency > 0) + rtotal += round(potency/reagent_data[2]) + reagents.add_reagent(rid,max(1,rtotal)) /obj/item/weapon/grown/log name = "towercap" diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 328e1a020e..6e3aaf4e79 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -136,7 +136,7 @@ switch(grown_seed.spread) if(1) - dat += "
It is capable of growing beyond the confines of a tray." + dat += "
It is able to be planted outside of a tray." if(2) dat += "
It is a robust and vigorous vine that will spread rapidly." @@ -156,6 +156,21 @@ if(grown_seed.flowers) dat += "
It has [grown_seed.flower_colour ? "flowers" : "flowers"]." + if(grown_seed.produces_power) + user << "
The fruit will function as a battery if prepared appropriately." + + if(grown_seed.thorny) + user << "
The fruit is covered in sharp, hollow thorns." + + if(grown_seed.juicy) + user << "
The fruit is excessively juicy." + + if(grown_seed.explosive) + user << "
The fruit is internally unstable." + + if(grown_seed.teleporting) + user << "
The fruit is temporal/spatially unstable." + if(dat) user << browse(dat,"window=plant_analyzer") diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index eafff17b07..b082a609bc 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -642,12 +642,7 @@ user << "You plant the [S.seed.seed_name] [S.seed.seed_noun]." - if(S.seed.spread == 1) - msg_admin_attack("[key_name(user)] has planted a creeper packet.") - var/obj/effect/plant_controller/creeper/PC = new(get_turf(src)) - if(PC) - PC.seed = S.seed - else if(S.seed.spread == 2) + if(S.seed.spread == 2) msg_admin_attack("[key_name(user)] has planted a spreading vine packet.") var/obj/effect/plant_controller/PC = new(get_turf(src)) if(PC) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 33e6f47c57..490481fdd1 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -113,6 +113,70 @@ proc/populate_seed_list() var/flower_icon = "vine_fruit" // Which overlay to use. var/flower_colour // Which colour to use. + // Special traits. + var/produces_power // Can be used to make a battery. + var/thorny // Harvested thorns can act as syringes for injecting plant reagents. + var/juicy // When thrown, causes a splatter decal. + var/explosive // When thrown, acts as a grenade. + var/teleporting // Uses the bluespace tomato effect. + var/splat_type = /obj/effect/decal/cleanable/tomato_smudge + +//Applies an effect to a target atom. +/datum/seed/proc/thrown_at(var/obj/item/thrown,var/atom/target) + + var/splatted + + if(istype(target,/mob/living)) + splatted = apply_special_effect(target,thrown) + else if(istype(target,/turf)) + splatted = 1 + for(var/mob/living/M in target,thrown) + apply_special_effect(M) + + if(juicy && splatted) + + if(thrown.reagents) + thrown.reagents.reaction(get_turf(target)) + for(var/atom/hit_atom in get_turf(target)) + thrown.reagents.reaction(hit_atom) + + new splat_type (get_turf(thrown)) + thrown.visible_message("The [thrown.name] splatters against [target]!") + del(thrown) + +/datum/seed/proc/apply_special_effect(var/mob/living/target,var/obj/item/thrown) + + var/impact = 1 + + // Thorns have a chance of injecting reagents. + if(thorny && prob(50)) + target << "Several thorns are embedded in your flesh!" + //Todo: cause brute, transfer some reagents over. + + // Bluespace tomato code copied over from grown.dm. + if(teleporting) + + //Plant potency determines radius of teleport. + var/outer_teleport_radius = potency/10 + var/inner_teleport_radius = potency/15 + + var/list/turfs + if(inner_teleport_radius > 0) + turfs = orange(target,outer_teleport_radius) - orange(target,inner_teleport_radius) + + if(!turfs.len) + target.visible_message("The [thrown.name] has been squashed.","You hear a smack.") + del(thrown) + return + + // Moves the mob, causes sparks. + var/turf/picked = pick(turfs) + new/obj/effect/decal/cleanable/molten_item(picked) //Leave a pile of goo behind for dramatic effect... + target.loc = picked//And teleport them to the chosen location. + impact = 1 + + return impact + //Creates a random seed. MAKE SURE THE LINE HAS DIVERGED BEFORE THIS IS CALLED. /datum/seed/proc/randomize() @@ -598,7 +662,14 @@ proc/populate_seed_list() currently_querying = list() for(var/i = 0;i 1 && potency > 0) + rtotal += round(potency/reagent_data[2]) + reagents.add_reagent(rid,max(1,rtotal)) + + if(reagents.total_volume > 0) + bitesize = 1+round(reagents.total_volume / 2, 1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(var/mob/living/M) + if(seed && seed.juicy) + if(istype(M)) + + if(M.buckled) return - potency = S.potency + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.shoes && H.shoes.flags & NOSLIP) + return - for(var/rid in S.chems) - var/list/reagent_data = S.chems[rid] - var/rtotal = reagent_data[1] - if(reagent_data.len > 1 && potency > 0) - rtotal += round(potency/reagent_data[2]) - reagents.add_reagent(rid,max(1,rtotal)) + M.stop_pulling() + M << "\blue You slipped on the [name]!" + playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) + M.Stun(8) + M.Weaken(5) - if(reagents.total_volume > 0) - bitesize = 1+round(reagents.total_volume / 2, 1) +/obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom) + ..() + if(!seed) + return + seed.thrown_at(src,hit_atom) + +/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if(seed && seed.produces_power) + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if(C.use(5)) + //TODO: generalize this. + user << "You add some cable to the [src.name] and slide it inside the battery encasing." + var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(user.loc) + pocell.maxcharge = src.potency * 10 + pocell.charge = pocell.maxcharge + del(src) + return + +/obj/item/weapon/reagent_containers/food/snacks/grown/attack_self(mob/user as mob) + + if(!seed || !seed.spread != 1) + return + + if(istype(user.loc,/turf/space)) + return + + // TODO: Generalize. + var/obj/effect/glowshroom/planted = new /obj/effect/glowshroom(user.loc) + planted.delay = 50 + planted.endurance = 100 + planted.potency = potency + + user << "You plant the [src.name]." + del(src) + +/obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user) + if(seed && seed.biolum) + user.SetLuminosity(user.luminosity + seed.biolum) + SetLuminosity(0) + +/obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user) + if(seed && seed.biolum) + user.SetLuminosity(user.luminosity - seed.biolum) + SetLuminosity(seed.biolum) + +// Food object defines follow. /obj/item/weapon/reagent_containers/food/snacks/grown/corn name = "ear of corn" desc = "Needs some butter!" @@ -82,18 +143,6 @@ filling_color = "#E6E8DA" plantname = "potato" -/obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if(C.use(5)) - user << "You add some cable to the potato and slide it inside the battery encasing." - var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(user.loc) - pocell.maxcharge = src.potency * 10 - pocell.charge = pocell.maxcharge - del(src) - return - /obj/item/weapon/reagent_containers/food/snacks/grown/grapes name = "bunch of grapes" desc = "Nutritious!" @@ -139,62 +188,13 @@ filling_color = "#C4C4C4" plantname = "plastic" -/obj/item/weapon/reagent_containers/food/snacks/grown/shand - name = "S'rendarr's Hand leaf" - desc = "A leaf sample from a lowland thicket shrub. Smells strongly like wax." - icon_state = "shand" - filling_color = "#70C470" - plantname = "shand" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mtear - name = "sprig of Messa's Tear" - desc = "A mountain climate herb with a soft, cold blue flower, known to contain an abundance of healing chemicals." - icon_state = "mtear" - filling_color = "#70C470" - plantname = "mtear" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mtear/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - var/obj/item/stack/medical/ointment/tajaran/poultice = new /obj/item/stack/medical/ointment/tajaran(user.loc) - - poultice.heal_burn = potency - del(src) - - user << "You mash the petals into a poultice." - -/obj/item/weapon/reagent_containers/food/snacks/grown/shand/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - var/obj/item/stack/medical/bruise_pack/tajaran/poultice = new /obj/item/stack/medical/bruise_pack/tajaran(user.loc) - - poultice.heal_brute = potency - del(src) - - user << "You mash the leaves into a poultice." - /obj/item/weapon/reagent_containers/food/snacks/grown/glowberries name = "bunch of glow-berries" desc = "Nutritious!" - var/light_on = 1 - var/brightness_on = 2 //luminosity when on filling_color = "#D3FF9E" icon_state = "glowberrypile" plantname = "glowberries" -/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/Del() - if(istype(loc,/mob)) - loc.SetLuminosity(round(loc.luminosity - potency/5,1)) - ..() - -/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/pickup(mob/user) - src.SetLuminosity(0) - user.SetLuminosity(round(user.luminosity + (potency/5),1)) - -/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/dropped(mob/user) - user.SetLuminosity(round(user.luminosity - (potency/5),1)) - src.SetLuminosity(round(potency/5,1)) - /obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod name = "cocoa pod" desc = "Can be ground into cocoa powder." @@ -279,22 +279,6 @@ slices_num = 5 plantname = "watermelon" -/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin - name = "pumpkin" - desc = "It's large and scary." - icon_state = "pumpkin" - potency = 10 - filling_color = "#FAB728" - plantname = "pumpkin" - -/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/twohanded/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/melee/energy)) - user.show_message("You carve a face into [src]!", 1) - new /obj/item/clothing/head/pumpkinhead (user.loc) - del(src) - return - /obj/item/weapon/reagent_containers/food/snacks/grown/lime name = "lime" desc = "It's so sour, your face will twist." @@ -313,7 +297,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/orange name = "orange" - desc = "It's a tangy fruit." + desc = "It's an tangy fruit." icon_state = "orange" potency = 20 filling_color = "#FAAD28" @@ -367,30 +351,6 @@ potency = 10 plantname = "tomato" -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/tomato_smudge(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - del(src) - return - -/obj/item/weapon/reagent_containers/food/snacks/grown/killertomato - name = "killer-tomato" - desc = "I say to-mah-to, you say tom-mae-to... OH GOD IT'S EATING MY LEGS!!" - icon_state = "killertomato" - potency = 10 - filling_color = "#FF0000" - potency = 30 - plantname = "killertomato" - -/obj/item/weapon/reagent_containers/food/snacks/grown/killertomato/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - new /mob/living/simple_animal/tomato(user.loc) - del(src) - - user << "You plant the killer-tomato." - /obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato name = "blood-tomato" desc = "So bloody...so...very...bloody....AHHHH!!!!" @@ -399,16 +359,6 @@ filling_color = "#FF0000" plantname = "bloodtomato" -/obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato/throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/blood/splatter(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - src.reagents.reaction(get_turf(hit_atom)) - for(var/atom/A in get_turf(hit_atom)) - src.reagents.reaction(A) - del(src) - return - /obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato name = "blue-tomato" desc = "I say blue-mah-to, you say blue-mae-to." @@ -417,21 +367,6 @@ filling_color = "#586CFC" plantname = "bluetomato" -/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/blood/oil(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - src.reagents.reaction(get_turf(hit_atom)) - for(var/atom/A in get_turf(hit_atom)) - src.reagents.reaction(A) - del(src) - return - -/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/Crossed(AM as mob|obj) - if (istype(AM, /mob/living)) - var/mob/living/M = AM - M.slip("the [src]!") - /obj/item/weapon/reagent_containers/food/snacks/grown/wheat name = "wheat" desc = "Sigh... wheat... a-grain?" @@ -518,14 +453,6 @@ potency = 30 plantname = "walkingmushroom" -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - new /mob/living/simple_animal/mushroom(user.loc) - del(src) - - user << "You plant the walking mushroom." - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle name = "chanterelle cluster" desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!" @@ -541,37 +468,6 @@ potency = 30 plantname = "glowshroom" -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - var/obj/effect/glowshroom/planted = new /obj/effect/glowshroom(user.loc) - - planted.delay = 50 - planted.endurance = 100 - planted.potency = potency - del(src) - - user << "You plant the glowshroom." - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/Del() - if(istype(loc,/mob)) - loc.SetLuminosity(round(loc.luminosity - potency/10,1)) - ..() - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/pickup(mob/user) - SetLuminosity(0) - user.SetLuminosity(round(user.luminosity + (potency/10),1)) - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/dropped(mob/user) - user.SetLuminosity(round(user.luminosity - (potency/10),1)) - SetLuminosity(round(potency/10,1)) - - -// ************************************* -// Complex Grown Object Defines - -// Putting these at the bottom so they don't clutter the list up. -Cheridan -// ************************************* - /obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato name = "blue-space tomato" desc = "So lubricated, you might slip through space-time." @@ -581,52 +477,53 @@ filling_color = "#91F8FF" plantname = "bluespacetomato" -/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato/throw_impact(atom/hit_atom) - ..() - var/mob/M = usr - var/outer_teleport_radius = potency/10 //Plant potency determines radius of teleport. - var/inner_teleport_radius = potency/15 - var/list/turfs = new/list() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - if(inner_teleport_radius < 1) //Wasn't potent enough, it just splats. - new/obj/effect/decal/cleanable/blood/oil(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - del(src) +// Super special snowflake grown items below. +/obj/item/weapon/reagent_containers/food/snacks/grown/shand + name = "S'rendarr's Hand leaf" + desc = "A leaf sample from a lowland thicket shrub. Smells strongly like wax." + icon_state = "shand" + filling_color = "#70C470" + plantname = "shand" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mtear + name = "sprig of Messa's Tear" + desc = "A mountain climate herb with a soft, cold blue flower, known to contain an abundance of healing chemicals." + icon_state = "mtear" + filling_color = "#70C470" + plantname = "mtear" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mtear/attack_self(mob/user as mob) + if(istype(user.loc,/turf/space)) return - for(var/turf/T in orange(M,outer_teleport_radius)) - if(T in orange(M,inner_teleport_radius)) continue - if(istype(T,/turf/space)) continue - if(T.density) continue - if(T.x>world.maxx-outer_teleport_radius || T.xworld.maxy-outer_teleport_radius || T.yThe [src.name] has been squashed, causing a distortion in space-time.","You hear a splat and a crackle.") + var/obj/item/stack/medical/ointment/tajaran/poultice = new /obj/item/stack/medical/ointment/tajaran(user.loc) + + poultice.heal_burn = potency del(src) - return \ No newline at end of file + + user << "You mash the petals into a poultice." + +/obj/item/weapon/reagent_containers/food/snacks/grown/shand/attack_self(mob/user as mob) + if(istype(user.loc,/turf/space)) + return + var/obj/item/stack/medical/bruise_pack/tajaran/poultice = new /obj/item/stack/medical/bruise_pack/tajaran(user.loc) + + poultice.heal_brute = potency + del(src) + + user << "You mash the leaves into a poultice." + +/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin + name = "pumpkin" + desc = "It's large and scary." + icon_state = "pumpkin" + potency = 10 + filling_color = "#FAB728" + plantname = "pumpkin" + +/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/twohanded/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/melee/energy)) + user.show_message("You carve a face into [src]!", 1) + new /obj/item/clothing/head/pumpkinhead (user.loc) + del(src) + return \ No newline at end of file From b9d9a51b8f55c9ec73816f683c0185de6b2c6302 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 24 Jan 2015 10:37:23 +1030 Subject: [PATCH 02/90] Added a fruit spawning debug proc. --- code/modules/admin/admin.dm | 14 ++++++++++++++ code/modules/admin/admin_verbs.dm | 1 + code/modules/hydroponics/seed_datums.dm | 23 +++++++++++++---------- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index f090d8665d..2d2003bb85 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -993,6 +993,20 @@ var/global/floorIsLava = 0 else return "Error: Invalid sabotage target: [target]" */ + +/datum/admins/proc/spawn_fruit() + set category = "Debug" + set desc = "(seed index) Spawn the product of a seed." + set name = "Spawn Fruit" + + if(!check_rights(R_SPAWN)) return + + var/seedtype = input("Select a seed type", "Spawn Fruit") as null|anything in seed_types + if(!seedtype || !seed_types[seedtype]) + return + var/datum/seed/S = seed_types[seedtype] + S.harvest(usr,0,0,1) + /datum/admins/proc/spawn_atom(var/object as text) set category = "Debug" set desc = "(atom path) Spawn an atom" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index d20105a67e..8db6658139 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -106,6 +106,7 @@ var/list/admin_verbs_fun = list( /client/proc/editappear ) var/list/admin_verbs_spawn = list( + /datum/admins/proc/spawn_fruit, /datum/admins/proc/spawn_atom, /*allows us to spawn instances*/ /client/proc/respawn_character ) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 490481fdd1..dfc510b649 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -624,7 +624,7 @@ proc/populate_seed_list() return (P ? P : 0) //Place the plant products at the feet of the user. -/datum/seed/proc/harvest(var/mob/user,var/yield_mod,var/harvest_sample) +/datum/seed/proc/harvest(var/mob/user,var/yield_mod,var/harvest_sample,var/force_amount) if(!user) return @@ -633,8 +633,8 @@ proc/populate_seed_list() if(!isnull(products) && products.len && yield > 0) got_product = 1 - if(!got_product && !harvest_sample) - user << "\red You fail to harvest anything useful." + if(!force_amount && !got_product && !harvest_sample) + user << "You fail to harvest anything useful." else user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]." @@ -651,13 +651,16 @@ proc/populate_seed_list() return var/total_yield = 0 - if(yield > -1) - if(isnull(yield_mod) || yield_mod < 1) - yield_mod = 0 - total_yield = yield - else - total_yield = yield + rand(yield_mod) - total_yield = max(1,total_yield) + if(!isnull(force_amount)) + total_yield = force_amount + else + if(yield > -1) + if(isnull(yield_mod) || yield_mod < 1) + yield_mod = 0 + total_yield = yield + else + total_yield = yield + rand(yield_mod) + total_yield = max(1,total_yield) currently_querying = list() for(var/i = 0;i Date: Sat, 24 Jan 2015 12:49:11 +1030 Subject: [PATCH 03/90] Tweaks/fixes for fruit effects. --- code/modules/hydroponics/seed_datums.dm | 70 ++++++++++++++----- code/modules/hydroponics/vines.dm | 33 +-------- .../reagent_containers/food/snacks/grown.dm | 35 ++++++---- 3 files changed, 75 insertions(+), 63 deletions(-) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index dfc510b649..c36e87f449 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -115,12 +115,45 @@ proc/populate_seed_list() // Special traits. var/produces_power // Can be used to make a battery. - var/thorny // Harvested thorns can act as syringes for injecting plant reagents. var/juicy // When thrown, causes a splatter decal. + var/thorny // Can cause damage/inject reagents when thrown or handled. var/explosive // When thrown, acts as a grenade. var/teleporting // Uses the bluespace tomato effect. var/splat_type = /obj/effect/decal/cleanable/tomato_smudge +// Adds reagents to a target. +/datum/seed/proc/do_thorns(var/mob/living/carbon/human/target) + if(!istype(target)) + return + + var/datum/organ/external/affecting = target.get_organ(pick("l_foot","r_foot","l_leg","r_leg","l_hand","r_hand","l_arm", "r_arm","head","chest","groin")) + var/damage = 0 + + if(carnivorous == 2) + target << "The thorns pierce your flesh greedily!" + damage = potency/2 + else + if(affecting) + target << "Several thorns dig deeply into your [affecting.display_name]!" + else + target << "Several thorns dig deeply into your flesh!" + damage = potency/5 + + if(affecting) + affecting.take_damage(damage, 0) + affecting.add_autopsy_data("Thorns",damage) + else + target.adjustBruteLoss(damage) + target.UpdateDamageIcon() + target.updatehealth() + + // Inject some chems. + if(chems && chems.len) + target << "You feel something seeping into your flesh!" + for(var/rid in chems) + var/injecting = min(5,max(1,potency/5)) + target.reagents.add_reagent(rid,injecting) + //Applies an effect to a target atom. /datum/seed/proc/thrown_at(var/obj/item/thrown,var/atom/target) @@ -130,11 +163,10 @@ proc/populate_seed_list() splatted = apply_special_effect(target,thrown) else if(istype(target,/turf)) splatted = 1 - for(var/mob/living/M in target,thrown) + for(var/mob/living/M in target.contents) apply_special_effect(M) if(juicy && splatted) - if(thrown.reagents) thrown.reagents.reaction(get_turf(target)) for(var/atom/hit_atom in get_turf(target)) @@ -147,33 +179,33 @@ proc/populate_seed_list() /datum/seed/proc/apply_special_effect(var/mob/living/target,var/obj/item/thrown) var/impact = 1 - // Thorns have a chance of injecting reagents. - if(thorny && prob(50)) - target << "Several thorns are embedded in your flesh!" - //Todo: cause brute, transfer some reagents over. + if(thorny && prob(potency*5)) + do_thorns(target) // Bluespace tomato code copied over from grown.dm. if(teleporting) //Plant potency determines radius of teleport. - var/outer_teleport_radius = potency/10 + var/outer_teleport_radius = potency/5 var/inner_teleport_radius = potency/15 - var/list/turfs + var/list/turfs = list() if(inner_teleport_radius > 0) - turfs = orange(target,outer_teleport_radius) - orange(target,inner_teleport_radius) + for(var/turf/T in orange(target,outer_teleport_radius)) + if(get_dist(target,T) >= inner_teleport_radius) + turfs |= T - if(!turfs.len) - target.visible_message("The [thrown.name] has been squashed.","You hear a smack.") - del(thrown) - return + if(turfs.len) + // Moves the mob, causes sparks. + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, get_turf(target)) + s.start() + var/turf/picked = get_turf(pick(turfs)) // Just in case... + new/obj/effect/decal/cleanable/molten_item(get_turf(target)) // Leave a pile of goo behind for dramatic effect... + target.loc = picked // And teleport them to the chosen location. - // Moves the mob, causes sparks. - var/turf/picked = pick(turfs) - new/obj/effect/decal/cleanable/molten_item(picked) //Leave a pile of goo behind for dramatic effect... - target.loc = picked//And teleport them to the chosen location. - impact = 1 + impact = 1 return impact diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/vines.dm index 699063fec4..72de7c61a2 100644 --- a/code/modules/hydroponics/vines.dm +++ b/code/modules/hydroponics/vines.dm @@ -140,38 +140,7 @@ // FEED ME, SEYMOUR. if(buckled_mob && seed && (buckled_mob.stat != DEAD)) //Don't bother with a dead mob. - - var/mob/living/M = buckled_mob - if(!istype(M)) return - var/mob/living/carbon/human/H = buckled_mob - - // Drink some blood/cause some brute. - if(seed.carnivorous == 2) - buckled_mob << "\The [src] pierces your flesh greedily!" - - var/damage = rand(round(seed.potency/2),seed.potency) - if(!istype(H)) - H.adjustBruteLoss(damage) - return - - var/datum/organ/external/affecting = H.get_organ(pick("l_foot","r_foot","l_leg","r_leg","l_hand","r_hand","l_arm", "r_arm","head","chest","groin")) - - if(affecting) - affecting.take_damage(damage, 0) - if(affecting.parent) - affecting.parent.add_autopsy_data("[plant_damage_noun]", damage) - else - H.adjustBruteLoss(damage) - - H.UpdateDamageIcon() - H.updatehealth() - - // Inject some chems. - if(seed.chems && seed.chems.len && istype(H)) - H << "You feel something seeping into your skin!" - for(var/rid in seed.chems) - var/injecting = min(5,max(1,seed.potency/5)) - H.reagents.add_reagent(rid,injecting) + seed.do_thorns(buckled_mob) /obj/effect/plantsegment/proc/update() if(!seed) return diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index bc925d8822..38d0127806 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -62,26 +62,37 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() - if(seed && seed.produces_power) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if(C.use(5)) - //TODO: generalize this. - user << "You add some cable to the [src.name] and slide it inside the battery encasing." - var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(user.loc) - pocell.maxcharge = src.potency * 10 - pocell.charge = pocell.maxcharge - del(src) - return + if(seed && seed.produces_power && istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if(C.use(5)) + //TODO: generalize this. + user << "You add some cable to the [src.name] and slide it inside the battery encasing." + var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(get_turf(user)) + if(src.loc == user && !(user.l_hand && user.r_hand) && istype(user,/mob/living/carbon/human)) + user.put_in_hands(pocell) + pocell.maxcharge = src.potency * 10 + pocell.charge = pocell.maxcharge + del(src) + return /obj/item/weapon/reagent_containers/food/snacks/grown/attack_self(mob/user as mob) - if(!seed || !seed.spread != 1) + if(!seed) return if(istype(user.loc,/turf/space)) return + if(user.a_intent == "hurt") + user.visible_message("\The [user] squashes \the [src]!") + seed.thrown_at(src,user) + sleep(-1) + if(src) del(src) + return + + if(seed.spread == 0) + return + // TODO: Generalize. var/obj/effect/glowshroom/planted = new /obj/effect/glowshroom(user.loc) planted.delay = 50 From 1c232302ebb94280ba2fcca7ec01996bf266f303 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 24 Jan 2015 14:04:35 +1030 Subject: [PATCH 04/90] Refactored nettles and sunflowers into regular plants. --- code/modules/food/recipes_microwave.dm | 2 +- code/modules/hydroponics/grown_inedible.dm | 107 +--------------- code/modules/hydroponics/hydro_tools.dm | 4 +- code/modules/hydroponics/seed_datums.dm | 42 +++--- code/modules/hydroponics/vines.dm | 3 +- code/modules/reagents/Chemistry-Machinery.dm | 4 +- code/modules/reagents/reagent_containers.dm | 4 +- .../reagent_containers/food/snacks.dm | 10 +- .../reagent_containers/food/snacks/grown.dm | 120 ++++++++++++++++-- 9 files changed, 151 insertions(+), 145 deletions(-) diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 87617d95ce..94ef9b3bdf 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -607,7 +607,7 @@ I said no! /datum/recipe/nettlesoup reagents = list("water" = 10) items = list( - /obj/item/weapon/grown/nettle, + /obj/item/weapon/reagent_containers/food/snacks/grown/nettle, /obj/item/weapon/reagent_containers/food/snacks/grown/potato, /obj/item/weapon/reagent_containers/food/snacks/egg, ) diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 4dec3cd92c..88bcfa6cfd 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -62,111 +62,6 @@ del(src) return -/obj/item/weapon/grown/sunflower // FLOWER POWER! - plantname = "sunflowers" - name = "sunflower" - desc = "It's beautiful! A certain person might beat you to death if you trample these." - icon = 'icons/obj/harvest.dmi' - icon_state = "sunflower" - damtype = "fire" - force = 0 - flags = TABLEPASS - throwforce = 1 - w_class = 1.0 - throw_speed = 1 - throw_range = 3 - -/obj/item/weapon/grown/sunflower/attack(mob/M as mob, mob/user as mob) - M << " [user] smacks you with a sunflower!FLOWER POWER" - user << " Your sunflower's FLOWER POWER strikes [M]" - -/obj/item/weapon/grown/nettle // -- Skie - plantname = "nettle" - desc = "It's probably not wise to touch it with bare hands..." - icon = 'icons/obj/weapons.dmi' - name = "nettle" - icon_state = "nettle" - damtype = "fire" - force = 15 - flags = TABLEPASS - throwforce = 1 - w_class = 2.0 - throw_speed = 1 - throw_range = 3 - origin_tech = "combat=1" - attack_verb = list("stung") - hitsound = "" - - var/potency_divisior = 5 - -/obj/item/weapon/grown/nettle/New() - ..() - spawn(5) - force = round((5+potency/potency_divisior), 1) - -/obj/item/weapon/grown/nettle/pickup(mob/living/carbon/human/user as mob) - if(istype(user) && !user.gloves) - user << "\red The nettle burns your bare hand!" - if(istype(user, /mob/living/carbon/human)) - var/organ = ((user.hand ? "l_":"r_") + "arm") - var/datum/organ/external/affecting = user.get_organ(organ) - if(affecting.take_damage(0,force)) - user.UpdateDamageIcon() - else - user.take_organ_damage(0,force) - return 1 - return 0 - -/obj/item/weapon/grown/nettle/proc/lose_leaves(var/mob/user) - if(force > 0) - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) - force -= rand(1,(force/3)+1) // When you whack someone with it, leaves fall off - - sleep(1) - - if(force <= 0) - if(user) - user << "All the leaves have fallen off \the [src] from violent whacking." - user.drop_from_inventory(src) - del(src) - -/obj/item/weapon/grown/nettle/death // -- Skie - plantname = "deathnettle" - desc = "The \red glowing \black nettle incites \redrage\black in you just from looking at it!" - name = "deathnettle" - icon_state = "deathnettle" - origin_tech = "combat=3" - potency_divisior = 2.5 - -/obj/item/weapon/grown/nettle/death/pickup(mob/living/carbon/human/user as mob) - - if(..() && prob(50)) - user.Paralyse(5) - user << "\red You are stunned by the deathnettle when you try picking it up!" - -/obj/item/weapon/grown/nettle/attack(mob/living/carbon/M as mob, mob/user as mob) - - if(!..()) return - - lose_leaves(user) - -/obj/item/weapon/grown/nettle/death/attack(mob/living/carbon/M as mob, mob/user as mob) - - if(!..()) return - - if(istype(M, /mob/living)) - M << "\red You are stunned by the powerful acid of the deathnettle!" - - M.attack_log += text("\[[time_stamp()]\] Had the [src.name] used on them by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] on [M.name] ([M.ckey])") - msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] on [M.name] ([M.ckey]) (JMP)") - - M.eye_blurry += force/7 - if(prob(20)) - M.Paralyse(force/6) - M.Weaken(force/15) - M.drop_item() - /obj/item/weapon/corncob name = "corn cob" desc = "A reminder of meals gone by." @@ -184,4 +79,4 @@ user << "You use [W] to fashion a pipe out of the corn cob!" new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc) del(src) - return + return \ No newline at end of file diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 6e3aaf4e79..6de670f417 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -159,8 +159,8 @@ if(grown_seed.produces_power) user << "
The fruit will function as a battery if prepared appropriately." - if(grown_seed.thorny) - user << "
The fruit is covered in sharp, hollow thorns." + if(grown_seed.stings) + user << "
The fruit is covered in stinging spines." if(grown_seed.juicy) user << "
The fruit is excessively juicy." diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index c36e87f449..fdb031dde9 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -99,7 +99,7 @@ proc/populate_seed_list() var/spread = 0 // 0 limits plant to tray, 1 = creepers, 2 = vines. var/carnivorous = 0 // 0 = none, 1 = eat pests in tray, 2 = eat living things (when a vine). var/parasite = 0 // 0 = no, 1 = gain health from weed level. - var/immutable = 0 // If set, plant will never mutate. If -1, plant is highly mutable. + var/immutable = 0 // If set, plant will never mutate. If -1, plant is highly mutable. var/alter_temp // If set, the plant will periodically alter local temp by this amount. // Cosmetics. @@ -116,27 +116,32 @@ proc/populate_seed_list() // Special traits. var/produces_power // Can be used to make a battery. var/juicy // When thrown, causes a splatter decal. - var/thorny // Can cause damage/inject reagents when thrown or handled. + var/stings // Can cause damage/inject reagents when thrown or handled. var/explosive // When thrown, acts as a grenade. var/teleporting // Uses the bluespace tomato effect. var/splat_type = /obj/effect/decal/cleanable/tomato_smudge -// Adds reagents to a target. -/datum/seed/proc/do_thorns(var/mob/living/carbon/human/target) - if(!istype(target)) +// Does brute damage to a target. +/datum/seed/proc/do_thorns(var/mob/living/carbon/human/target, var/obj/item/fruit, var/target_limb) + + if(!istype(target) || !carnivorous) return - var/datum/organ/external/affecting = target.get_organ(pick("l_foot","r_foot","l_leg","r_leg","l_hand","r_hand","l_arm", "r_arm","head","chest","groin")) + if(!target_limb) target_limb = pick("l_foot","r_foot","l_leg","r_leg","l_hand","r_hand","l_arm", "r_arm","head","chest","groin") + var/datum/organ/external/affecting = target.get_organ(target_limb) var/damage = 0 if(carnivorous == 2) - target << "The thorns pierce your flesh greedily!" + if(affecting) + target << "\The [fruit]'s thorns pierce your [affecting.display_name] greedily!" + else + target << "\The [fruit]'s thorns pierce your flesh greedily!" damage = potency/2 else if(affecting) - target << "Several thorns dig deeply into your [affecting.display_name]!" + target << "\The [fruit]'s thorns dig deeply into your [affecting.display_name]!" else - target << "Several thorns dig deeply into your flesh!" + target << "\The [fruit]'s thorns dig deeply into your flesh!" damage = potency/5 if(affecting) @@ -147,9 +152,12 @@ proc/populate_seed_list() target.UpdateDamageIcon() target.updatehealth() - // Inject some chems. +// Adds reagents to a target. +/datum/seed/proc/do_sting(var/mob/living/carbon/human/target, var/obj/item/fruit) + if(!stings) + return if(chems && chems.len) - target << "You feel something seeping into your flesh!" + target << "You are stung by \the [fruit]!" for(var/rid in chems) var/injecting = min(5,max(1,potency/5)) target.reagents.add_reagent(rid,injecting) @@ -179,9 +187,8 @@ proc/populate_seed_list() /datum/seed/proc/apply_special_effect(var/mob/living/target,var/obj/item/thrown) var/impact = 1 - // Thorns have a chance of injecting reagents. - if(thorny && prob(potency*5)) - do_thorns(target) + do_sting(target,thrown) + do_thorns(target,thrown) // Bluespace tomato code copied over from grown.dm. if(teleporting) @@ -877,7 +884,7 @@ proc/populate_seed_list() name = "nettle" seed_name = "nettle" display_name = "nettles" - products = list(/obj/item/weapon/grown/nettle) + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/nettle) mutants = list("deathnettle") packet_icon = "seed-nettle" plant_icon = "nettle" @@ -889,12 +896,13 @@ proc/populate_seed_list() yield = 4 potency = 10 growth_stages = 5 + stings = 1 /datum/seed/nettle/death name = "deathnettle" seed_name = "death nettle" display_name = "death nettles" - products = list(/obj/item/weapon/grown/nettle/death) + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/nettle/death) mutants = null packet_icon = "seed-deathnettle" plant_icon = "deathnettle" @@ -1275,7 +1283,7 @@ proc/populate_seed_list() seed_name = "sunflower" display_name = "sunflowers" packet_icon = "seed-sunflower" - products = list(/obj/item/weapon/grown/sunflower) + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sunflower) plant_icon = "sunflower" lifespan = 25 diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/vines.dm index 72de7c61a2..5d2ac2b15f 100644 --- a/code/modules/hydroponics/vines.dm +++ b/code/modules/hydroponics/vines.dm @@ -140,7 +140,8 @@ // FEED ME, SEYMOUR. if(buckled_mob && seed && (buckled_mob.stat != DEAD)) //Don't bother with a dead mob. - seed.do_thorns(buckled_mob) + seed.do_thorns(buckled_mob,src) + seed.do_sting(buckled_mob,src) /obj/effect/plantsegment/proc/update() if(!seed) return diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index a2ea7c6f0c..84905a4efb 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -831,8 +831,8 @@ /obj/item/stack/sheet/mineral/uranium = list("uranium" = 20), /obj/item/stack/sheet/mineral/silver = list("silver" = 20), /obj/item/stack/sheet/mineral/gold = list("gold" = 20), - /obj/item/weapon/grown/nettle/death = list("pacid" = 0), - /obj/item/weapon/grown/nettle = list("sacid" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/nettle/death = list("pacid" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/nettle = list("sacid" = 0), //Blender Stuff /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0), diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 827c400898..72bb60b4c6 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -28,8 +28,8 @@ return /obj/item/weapon/reagent_containers/attack(mob/M as mob, mob/user as mob, def_zone) - if (can_operate(M)) //Checks if mob is lying down on table for surgery - if (do_surgery(M,user,src)) + if(can_operate(M)) //Checks if mob is lying down on table for surgery + if(do_surgery(M,user,src)) return // this prevented pills, food, and other things from being picked up by bags. diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 7aaad7a678..1a964e6650 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -32,9 +32,10 @@ return /obj/item/weapon/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone) - if(!reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it. - user << "\red None of [src] left, oh no!" - M.drop_from_inventory(src) //so icons update :[ + + if(!reagents.total_volume) + user << "None of [src] left!" + user.drop_from_inventory(src) del(src) return 0 @@ -106,9 +107,6 @@ return 0 -/obj/item/weapon/reagent_containers/food/snacks/afterattack(obj/target, mob/user, proximity) - return ..() - /obj/item/weapon/reagent_containers/food/snacks/examine(mob/user) if(!..(user, 1)) return diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index 38d0127806..c49f38c434 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -54,11 +54,8 @@ M.Weaken(5) /obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom) - ..() - if(!seed) - return - seed.thrown_at(src,hit_atom) + if(seed) seed.thrown_at(src,hit_atom) /obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() @@ -66,7 +63,7 @@ var/obj/item/stack/cable_coil/C = W if(C.use(5)) //TODO: generalize this. - user << "You add some cable to the [src.name] and slide it inside the battery encasing." + user << "You add some cable to the [src.name] and slide it inside the battery casing." var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(get_turf(user)) if(src.loc == user && !(user.l_hand && user.r_hand) && istype(user,/mob/living/carbon/human)) user.put_in_hands(pocell) @@ -75,6 +72,67 @@ del(src) return +/obj/item/weapon/reagent_containers/food/snacks/grown/attack(var/mob/living/carbon/M, var/mob/user, var/def_zone) + if(user == M) + return ..() + + if(user.a_intent == "hurt") + + // This is being copypasted here because reagent_containers (WHY DOES FOOD DESCEND FROM THAT) overrides it completely. + // TODO: refactor all food paths to be less horrible and difficult to work with in this respect. ~Z + if(!istype(M) || (can_operate(M) && do_surgery(M,user,src))) return 0 + + user.lastattacked = M + M.lastattacker = user + user.attack_log += "\[[time_stamp()]\] Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" + M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" + msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" ) + + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/hit = H.attacked_by(src, user, def_zone) + if(hit && hitsound) + playsound(loc, hitsound, 50, 1, -1) + return hit + else + if(attack_verb.len) + user.visible_message("[M] has been [pick(attack_verb)] with [src] by [user]!") + else + user.visible_message("[M] has been attacked with [src] by [user]!") + + if (hitsound) + playsound(loc, hitsound, 50, 1, -1) + switch(damtype) + if("brute") + M.take_organ_damage(force) + if(prob(33)) + var/turf/simulated/location = get_turf(M) + if(istype(location)) location.add_blood_floor(M) + if("fire") + if (!(COLD_RESISTANCE in M.mutations)) + M.take_organ_damage(0, force) + M.updatehealth() + + if(seed && seed.stings) + if(!reagents || reagents.total_volume <= 0) + return + reagents.remove_any(rand(1,3)) + seed.thrown_at(src,M) + sleep(-1) + if(!src) + return + if(prob(35)) + if(user) + user << "\The [src] has fallen to bits." + user.drop_from_inventory(src) + del(src) + + add_fingerprint(user) + return 1 + + else + ..() + /obj/item/weapon/reagent_containers/food/snacks/grown/attack_self(mob/user as mob) if(!seed) @@ -103,12 +161,26 @@ del(src) /obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user) - if(seed && seed.biolum) + ..() + if(!seed) + return + if(seed.biolum) user.SetLuminosity(user.luminosity + seed.biolum) SetLuminosity(0) + if(seed.stings) + var/mob/living/carbon/human/H = user + if(istype(H) && H.gloves) + return + if(!reagents || reagents.total_volume <= 0) + return + reagents.remove_any(rand(1,3)) + seed.do_thorns(H,src) + seed.do_sting(H,src,pick("r_hand","l_hand")) /obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user) - if(seed && seed.biolum) + if(!..() || !seed) + return + if(seed.biolum) user.SetLuminosity(user.luminosity - seed.biolum) SetLuminosity(seed.biolum) @@ -537,4 +609,36 @@ user.show_message("You carve a face into [src]!", 1) new /obj/item/clothing/head/pumpkinhead (user.loc) del(src) - return \ No newline at end of file + return + +/obj/item/weapon/reagent_containers/food/snacks/grown/sunflower // FLOWER POWER! + plantname = "sunflowers" + name = "sunflower" + desc = "A beautiful yellow flower." + icon_state = "sunflower" + damtype = "fire" + force = 0 + throw_speed = 1 + throw_range = 3 + +/obj/item/weapon/reagent_containers/food/snacks/grown/nettle + plantname = "nettle" + desc = "It's probably not wise to touch it with bare hands..." + icon = 'icons/obj/weapons.dmi' + name = "nettle" + icon_state = "nettle" + damtype = "fire" + force = 15 + w_class = 2.0 + throw_speed = 1 + throw_range = 3 + origin_tech = "combat=1" + attack_verb = list("stung") + hitsound = "" + +/obj/item/weapon/reagent_containers/food/snacks/grown/nettle/death + plantname = "deathnettle" + desc = "A cruel and toxic-looking plant." + name = "deathnettle" + icon_state = "deathnettle" + origin_tech = "combat=3" \ No newline at end of file From 53e4447378491573a236eb3aee4d27740b4a382f Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 24 Jan 2015 15:53:14 +1030 Subject: [PATCH 05/90] Adds exploding fruits. --- .../objects/effects/decals/Cleanable/misc.dm | 10 ++ code/modules/hydroponics/seed_datums.dm | 125 ++++++++++++++++-- 2 files changed, 125 insertions(+), 10 deletions(-) diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index d52fd60b7e..4c85144d1e 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -133,3 +133,13 @@ layer = 2 icon = 'icons/effects/tomatodecal.dmi' random_icon_states = list("smashed_pie") + +/obj/effect/decal/cleanable/fruit_smudge + name = "smudge" + desc = "Some kind of fruit smear." + density = 0 + anchored = 1 + layer = 2 + icon = 'icons/effects/blood.dmi' + icon_state = "mfloor1" + random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") \ No newline at end of file diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index fdb031dde9..0ff3935fda 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -119,7 +119,7 @@ proc/populate_seed_list() var/stings // Can cause damage/inject reagents when thrown or handled. var/explosive // When thrown, acts as a grenade. var/teleporting // Uses the bluespace tomato effect. - var/splat_type = /obj/effect/decal/cleanable/tomato_smudge + var/splat_type = /obj/effect/decal/cleanable/fruit_smudge // Does brute damage to a target. /datum/seed/proc/do_thorns(var/mob/living/carbon/human/target, var/obj/item/fruit, var/target_limb) @@ -162,10 +162,106 @@ proc/populate_seed_list() var/injecting = min(5,max(1,potency/5)) target.reagents.add_reagent(rid,injecting) +//Splatter a turf. +/datum/seed/proc/splatter(var/turf/T,var/obj/item/thrown) + if(splat_type) + var/obj/effect/decal/cleanable/fruit_smudge/splat = new splat_type(T) + splat.name = "[thrown.name] [pick("smear","smudge","splatter")]" + if(biolum) + if(biolum_colour) + splat.l_color = biolum_colour + splat.SetLuminosity(biolum) + if(istype(splat)) + if(product_colour) + splat.color = product_colour + + if(chems) + for(var/mob/living/M in T.contents) + if(!M.reagents) + continue + for(var/chem in chems) + var/injecting = min(5,max(1,potency/3)) + M.reagents.add_reagent(chem,injecting) + //Applies an effect to a target atom. /datum/seed/proc/thrown_at(var/obj/item/thrown,var/atom/target) var/splatted + var/turf/origin_turf = get_turf(target) + + if(explosive) + + var/flood_dist = min(10,max(1,potency/10)) + var/list/open_turfs = list() + var/list/closed_turfs = list() + var/list/valid_turfs = list() + open_turfs |= origin_turf + + // Flood fill to get affected turfs. + while(open_turfs.len) + var/turf/T = pick(open_turfs) + open_turfs -= T + closed_turfs |= T + valid_turfs |= T + + for(var/dir in alldirs) + var/turf/neighbor = get_step(T,dir) + if(!neighbor || (neighbor in closed_turfs) || (neighbor in open_turfs)) + continue + if(neighbor.density || get_dist(neighbor,origin_turf) > flood_dist || istype(neighbor,/turf/space)) + closed_turfs |= neighbor + continue + // Check for windows. + var/no_los + for(var/turf/target_turf in getline(origin_turf,neighbor)) + if(target_turf.density) + no_los = 1 + break + + if(!no_los) + var/los_dir = get_dir(neighbor,origin_turf) + var/list/blocked = list() + for(var/obj/machinery/door/D in neighbor.contents) + if(istype(D,/obj/machinery/door/window)) + blocked |= D.dir + else + if(D.density) + no_los = 1 + break + for(var/obj/structure/window/W in neighbor.contents) + if(W.is_fulltile()) + no_los = 1 + break + blocked |= W.dir + if(!no_los) + switch(los_dir) + if(NORTHEAST) + if((NORTH in blocked) && (EAST in blocked)) + no_los = 1 + if(SOUTHEAST) + if((SOUTH in blocked) && (EAST in blocked)) + no_los = 1 + if(NORTHWEST) + if((NORTH in blocked) && (WEST in blocked)) + no_los = 1 + if(SOUTHWEST) + if((SOUTH in blocked) && (WEST in blocked)) + no_los = 1 + else + if(los_dir in blocked) + no_los = 1 + if(no_los) + closed_turfs |= neighbor + continue + open_turfs |= neighbor + + for(var/turf/T in valid_turfs) + for(var/mob/living/M in T.contents) + apply_special_effect(M) + splatter(T,thrown) + origin_turf.visible_message("The [thrown.name] violently explodes against [target]!") + del(thrown) + return if(istype(target,/mob/living)) splatted = apply_special_effect(target,thrown) @@ -175,13 +271,8 @@ proc/populate_seed_list() apply_special_effect(M) if(juicy && splatted) - if(thrown.reagents) - thrown.reagents.reaction(get_turf(target)) - for(var/atom/hit_atom in get_turf(target)) - thrown.reagents.reaction(hit_atom) - - new splat_type (get_turf(thrown)) - thrown.visible_message("The [thrown.name] splatters against [target]!") + splatter(origin_turf,thrown) + origin_turf.visible_message("The [thrown.name] splatters against [target]!") del(thrown) /datum/seed/proc/apply_special_effect(var/mob/living/target,var/obj/item/thrown) @@ -295,6 +386,20 @@ proc/populate_seed_list() if(prob(20)) harvest_repeat = 1 + if(prob(15)) + juicy = 1 + + if(prob(5)) + stings = 1 + + if(prob(5)) + produces_power = 1 + + if(prob(1)) + explosive = 1 + else if(prob(1)) + teleporting = 1 + if(prob(5)) consume_gasses = list() var/gas = pick("oxygen","nitrogen","phoron","carbon_dioxide") @@ -964,7 +1069,6 @@ proc/populate_seed_list() packet_icon = "seed-bluetomato" plant_icon = "bluetomato" chems = list("nutriment" = list(1,20), "lube" = list(1,5)) - splat_type = /obj/effect/decal/cleanable/blood/oil /datum/seed/tomato/blue/teleport name = "bluespacetomato" @@ -1131,7 +1235,6 @@ proc/populate_seed_list() packet_icon = "mycelium-reishi" plant_icon = "reishi" chems = list("nutriment" = list(1,50), "psilocybin" = list(3,5)) - maturation = 10 production = 5 yield = 4 @@ -1209,6 +1312,8 @@ proc/populate_seed_list() lifespan = 120 maturation = 15 yield = 3 + explosive = 1 + splat_type = /obj/effect/glowshroom potency = 30 growth_stages = 4 biolum = 1 From 9ac361d602205aaee1343d4541515e9e7bda09e9 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 28 Jan 2015 14:58:50 +1030 Subject: [PATCH 06/90] Fixes #7960, reduces time on xenohydro procs. --- code/modules/hydroponics/seed_machines.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 8b4295d72b..725f51ebca 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -16,7 +16,7 @@ /obj/item/weapon/disk/botany/attack_self(var/mob/user as mob) if(genes.len) var/choice = alert(user, "Are you sure you want to wipe the disk?", "Xenobotany Data", "No", "Yes") - if(src && user && genes && choice == "Yes") + if(src && user && genes && choice && choice == "Yes" && user.Adjacent(get_turf(src))) user << "You wipe the disk data." name = initial(name) desc = initial(name) @@ -44,7 +44,7 @@ var/open = 0 var/active = 0 - var/action_time = 50 + var/action_time = 5 var/last_action = 0 var/eject_disk = 0 var/failed_task = 0 From 4791ef2b7412d518baf4633be02f1af1b97dbe1b Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 23 Nov 2014 14:09:47 +1030 Subject: [PATCH 07/90] First pass on xenoflora expansion. --- code/modules/hydroponics/grown_inedible.dm | 27 +- code/modules/hydroponics/hydro_tools.dm | 17 +- code/modules/hydroponics/hydro_tray.dm | 7 +- code/modules/hydroponics/seed_datums.dm | 140 ++++--- .../reagent_containers/food/snacks/grown.dm | 389 +++++++----------- 5 files changed, 262 insertions(+), 318 deletions(-) diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 717d3ea8a8..df1afc6670 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -8,7 +8,7 @@ var/plantname var/potency = 1 -/obj/item/weapon/grown/New() +/obj/item/weapon/grown/New(newloc,planttype) ..() @@ -17,21 +17,20 @@ R.my_atom = src //Handle some post-spawn var stuff. - spawn(1) - // Fill the object up with the appropriate reagents. - if(!isnull(plantname)) - var/datum/seed/S = seed_types[plantname] - if(!S || !S.chems) - return + if(planttype) + plantname = planttype + var/datum/seed/S = seed_types[plantname] + if(!S || !S.chems) + return - potency = S.potency + potency = S.potency - for(var/rid in S.chems) - var/list/reagent_data = S.chems[rid] - var/rtotal = reagent_data[1] - if(reagent_data.len > 1 && potency > 0) - rtotal += round(potency/reagent_data[2]) - reagents.add_reagent(rid,max(1,rtotal)) + for(var/rid in S.chems) + var/list/reagent_data = S.chems[rid] + var/rtotal = reagent_data[1] + if(reagent_data.len > 1 && potency > 0) + rtotal += round(potency/reagent_data[2]) + reagents.add_reagent(rid,max(1,rtotal)) /obj/item/weapon/grown/log name = "towercap" diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 957ef5173f..10a22efe88 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -136,7 +136,7 @@ switch(grown_seed.spread) if(1) - dat += "
It is capable of growing beyond the confines of a tray." + dat += "
It is able to be planted outside of a tray." if(2) dat += "
It is a robust and vigorous vine that will spread rapidly." @@ -156,6 +156,21 @@ if(grown_seed.flowers) dat += "
It has [grown_seed.flower_colour ? "flowers" : "flowers"]." + if(grown_seed.produces_power) + user << "
The fruit will function as a battery if prepared appropriately." + + if(grown_seed.thorny) + user << "
The fruit is covered in sharp, hollow thorns." + + if(grown_seed.juicy) + user << "
The fruit is excessively juicy." + + if(grown_seed.explosive) + user << "
The fruit is internally unstable." + + if(grown_seed.teleporting) + user << "
The fruit is temporal/spatially unstable." + if(dat) user << browse(dat,"window=plant_analyzer") diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index eafff17b07..b082a609bc 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -642,12 +642,7 @@ user << "You plant the [S.seed.seed_name] [S.seed.seed_noun]." - if(S.seed.spread == 1) - msg_admin_attack("[key_name(user)] has planted a creeper packet.") - var/obj/effect/plant_controller/creeper/PC = new(get_turf(src)) - if(PC) - PC.seed = S.seed - else if(S.seed.spread == 2) + if(S.seed.spread == 2) msg_admin_attack("[key_name(user)] has planted a spreading vine packet.") var/obj/effect/plant_controller/PC = new(get_turf(src)) if(PC) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 33e6f47c57..490481fdd1 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -113,6 +113,70 @@ proc/populate_seed_list() var/flower_icon = "vine_fruit" // Which overlay to use. var/flower_colour // Which colour to use. + // Special traits. + var/produces_power // Can be used to make a battery. + var/thorny // Harvested thorns can act as syringes for injecting plant reagents. + var/juicy // When thrown, causes a splatter decal. + var/explosive // When thrown, acts as a grenade. + var/teleporting // Uses the bluespace tomato effect. + var/splat_type = /obj/effect/decal/cleanable/tomato_smudge + +//Applies an effect to a target atom. +/datum/seed/proc/thrown_at(var/obj/item/thrown,var/atom/target) + + var/splatted + + if(istype(target,/mob/living)) + splatted = apply_special_effect(target,thrown) + else if(istype(target,/turf)) + splatted = 1 + for(var/mob/living/M in target,thrown) + apply_special_effect(M) + + if(juicy && splatted) + + if(thrown.reagents) + thrown.reagents.reaction(get_turf(target)) + for(var/atom/hit_atom in get_turf(target)) + thrown.reagents.reaction(hit_atom) + + new splat_type (get_turf(thrown)) + thrown.visible_message("The [thrown.name] splatters against [target]!") + del(thrown) + +/datum/seed/proc/apply_special_effect(var/mob/living/target,var/obj/item/thrown) + + var/impact = 1 + + // Thorns have a chance of injecting reagents. + if(thorny && prob(50)) + target << "Several thorns are embedded in your flesh!" + //Todo: cause brute, transfer some reagents over. + + // Bluespace tomato code copied over from grown.dm. + if(teleporting) + + //Plant potency determines radius of teleport. + var/outer_teleport_radius = potency/10 + var/inner_teleport_radius = potency/15 + + var/list/turfs + if(inner_teleport_radius > 0) + turfs = orange(target,outer_teleport_radius) - orange(target,inner_teleport_radius) + + if(!turfs.len) + target.visible_message("The [thrown.name] has been squashed.","You hear a smack.") + del(thrown) + return + + // Moves the mob, causes sparks. + var/turf/picked = pick(turfs) + new/obj/effect/decal/cleanable/molten_item(picked) //Leave a pile of goo behind for dramatic effect... + target.loc = picked//And teleport them to the chosen location. + impact = 1 + + return impact + //Creates a random seed. MAKE SURE THE LINE HAS DIVERGED BEFORE THIS IS CALLED. /datum/seed/proc/randomize() @@ -598,7 +662,14 @@ proc/populate_seed_list() currently_querying = list() for(var/i = 0;i 1 && potency > 0) + rtotal += round(potency/reagent_data[2]) + reagents.add_reagent(rid,max(1,rtotal)) + + if(reagents.total_volume > 0) + bitesize = 1+round(reagents.total_volume / 2, 1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(var/mob/living/M) + if(seed && seed.juicy) + if(istype(M)) + + if(M.buckled) return - potency = S.potency + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.shoes && H.shoes.flags & NOSLIP) + return - for(var/rid in S.chems) - var/list/reagent_data = S.chems[rid] - var/rtotal = reagent_data[1] - if(reagent_data.len > 1 && potency > 0) - rtotal += round(potency/reagent_data[2]) - reagents.add_reagent(rid,max(1,rtotal)) + M.stop_pulling() + M << "\blue You slipped on the [name]!" + playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) + M.Stun(8) + M.Weaken(5) - if(reagents.total_volume > 0) - bitesize = 1+round(reagents.total_volume / 2, 1) +/obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom) + ..() + if(!seed) + return + seed.thrown_at(src,hit_atom) + +/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if(seed && seed.produces_power) + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if(C.use(5)) + //TODO: generalize this. + user << "You add some cable to the [src.name] and slide it inside the battery encasing." + var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(user.loc) + pocell.maxcharge = src.potency * 10 + pocell.charge = pocell.maxcharge + del(src) + return + +/obj/item/weapon/reagent_containers/food/snacks/grown/attack_self(mob/user as mob) + + if(!seed || !seed.spread != 1) + return + + if(istype(user.loc,/turf/space)) + return + + // TODO: Generalize. + var/obj/effect/glowshroom/planted = new /obj/effect/glowshroom(user.loc) + planted.delay = 50 + planted.endurance = 100 + planted.potency = potency + + user << "You plant the [src.name]." + del(src) + +/obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user) + if(seed && seed.biolum) + user.SetLuminosity(user.luminosity + seed.biolum) + SetLuminosity(0) + +/obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user) + if(seed && seed.biolum) + user.SetLuminosity(user.luminosity - seed.biolum) + SetLuminosity(seed.biolum) + +// Food object defines follow. /obj/item/weapon/reagent_containers/food/snacks/grown/corn name = "ear of corn" desc = "Needs some butter!" @@ -82,18 +143,6 @@ filling_color = "#E6E8DA" plantname = "potato" -/obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if(C.use(5)) - user << "You add some cable to the potato and slide it inside the battery encasing." - var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(user.loc) - pocell.maxcharge = src.potency * 10 - pocell.charge = pocell.maxcharge - del(src) - return - /obj/item/weapon/reagent_containers/food/snacks/grown/grapes name = "bunch of grapes" desc = "Nutritious!" @@ -139,62 +188,13 @@ filling_color = "#C4C4C4" plantname = "plastic" -/obj/item/weapon/reagent_containers/food/snacks/grown/shand - name = "S'rendarr's Hand leaf" - desc = "A leaf sample from a lowland thicket shrub. Smells strongly like wax." - icon_state = "shand" - filling_color = "#70C470" - plantname = "shand" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mtear - name = "sprig of Messa's Tear" - desc = "A mountain climate herb with a soft, cold blue flower, known to contain an abundance of healing chemicals." - icon_state = "mtear" - filling_color = "#70C470" - plantname = "mtear" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mtear/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - var/obj/item/stack/medical/ointment/tajaran/poultice = new /obj/item/stack/medical/ointment/tajaran(user.loc) - - poultice.heal_burn = potency - del(src) - - user << "You mash the petals into a poultice." - -/obj/item/weapon/reagent_containers/food/snacks/grown/shand/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - var/obj/item/stack/medical/bruise_pack/tajaran/poultice = new /obj/item/stack/medical/bruise_pack/tajaran(user.loc) - - poultice.heal_brute = potency - del(src) - - user << "You mash the leaves into a poultice." - /obj/item/weapon/reagent_containers/food/snacks/grown/glowberries name = "bunch of glow-berries" desc = "Nutritious!" - var/light_on = 1 - var/brightness_on = 2 //luminosity when on filling_color = "#D3FF9E" icon_state = "glowberrypile" plantname = "glowberries" -/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/Del() - if(istype(loc,/mob)) - loc.SetLuminosity(round(loc.luminosity - potency/5,1)) - ..() - -/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/pickup(mob/user) - src.SetLuminosity(0) - user.SetLuminosity(round(user.luminosity + (potency/5),1)) - -/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/dropped(mob/user) - user.SetLuminosity(round(user.luminosity - (potency/5),1)) - src.SetLuminosity(round(potency/5,1)) - /obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod name = "cocoa pod" desc = "Can be ground into cocoa powder." @@ -279,22 +279,6 @@ slices_num = 5 plantname = "watermelon" -/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin - name = "pumpkin" - desc = "It's large and scary." - icon_state = "pumpkin" - potency = 10 - filling_color = "#FAB728" - plantname = "pumpkin" - -/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/twohanded/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/melee/energy)) - user.show_message("You carve a face into [src]!", 1) - new /obj/item/clothing/head/pumpkinhead (user.loc) - del(src) - return - /obj/item/weapon/reagent_containers/food/snacks/grown/lime name = "lime" desc = "It's so sour, your face will twist." @@ -313,7 +297,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/orange name = "orange" - desc = "It's a tangy fruit." + desc = "It's an tangy fruit." icon_state = "orange" potency = 20 filling_color = "#FAAD28" @@ -367,30 +351,6 @@ potency = 10 plantname = "tomato" -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/tomato_smudge(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - del(src) - return - -/obj/item/weapon/reagent_containers/food/snacks/grown/killertomato - name = "killer-tomato" - desc = "I say to-mah-to, you say tom-mae-to... OH GOD IT'S EATING MY LEGS!!" - icon_state = "killertomato" - potency = 10 - filling_color = "#FF0000" - potency = 30 - plantname = "killertomato" - -/obj/item/weapon/reagent_containers/food/snacks/grown/killertomato/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - new /mob/living/simple_animal/tomato(user.loc) - del(src) - - user << "You plant the killer-tomato." - /obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato name = "blood-tomato" desc = "So bloody...so...very...bloody....AHHHH!!!!" @@ -399,16 +359,6 @@ filling_color = "#FF0000" plantname = "bloodtomato" -/obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato/throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/blood/splatter(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - src.reagents.reaction(get_turf(hit_atom)) - for(var/atom/A in get_turf(hit_atom)) - src.reagents.reaction(A) - del(src) - return - /obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato name = "blue-tomato" desc = "I say blue-mah-to, you say blue-mae-to." @@ -417,21 +367,6 @@ filling_color = "#586CFC" plantname = "bluetomato" -/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/blood/oil(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - src.reagents.reaction(get_turf(hit_atom)) - for(var/atom/A in get_turf(hit_atom)) - src.reagents.reaction(A) - del(src) - return - -/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/Crossed(AM as mob|obj) - if (istype(AM, /mob/living)) - var/mob/living/M = AM - M.slip("the [src]!") - /obj/item/weapon/reagent_containers/food/snacks/grown/wheat name = "wheat" desc = "Sigh... wheat... a-grain?" @@ -518,14 +453,6 @@ potency = 30 plantname = "walkingmushroom" -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - new /mob/living/simple_animal/mushroom(user.loc) - del(src) - - user << "You plant the walking mushroom." - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle name = "chanterelle cluster" desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!" @@ -541,37 +468,6 @@ potency = 30 plantname = "glowshroom" -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - var/obj/effect/glowshroom/planted = new /obj/effect/glowshroom(user.loc) - - planted.delay = 50 - planted.endurance = 100 - planted.potency = potency - del(src) - - user << "You plant the glowshroom." - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/Del() - if(istype(loc,/mob)) - loc.SetLuminosity(round(loc.luminosity - potency/10,1)) - ..() - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/pickup(mob/user) - SetLuminosity(0) - user.SetLuminosity(round(user.luminosity + (potency/10),1)) - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/dropped(mob/user) - user.SetLuminosity(round(user.luminosity - (potency/10),1)) - SetLuminosity(round(potency/10,1)) - - -// ************************************* -// Complex Grown Object Defines - -// Putting these at the bottom so they don't clutter the list up. -Cheridan -// ************************************* - /obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato name = "blue-space tomato" desc = "So lubricated, you might slip through space-time." @@ -581,52 +477,53 @@ filling_color = "#91F8FF" plantname = "bluespacetomato" -/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato/throw_impact(atom/hit_atom) - ..() - var/mob/M = usr - var/outer_teleport_radius = potency/10 //Plant potency determines radius of teleport. - var/inner_teleport_radius = potency/15 - var/list/turfs = new/list() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - if(inner_teleport_radius < 1) //Wasn't potent enough, it just splats. - new/obj/effect/decal/cleanable/blood/oil(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - del(src) +// Super special snowflake grown items below. +/obj/item/weapon/reagent_containers/food/snacks/grown/shand + name = "S'rendarr's Hand leaf" + desc = "A leaf sample from a lowland thicket shrub. Smells strongly like wax." + icon_state = "shand" + filling_color = "#70C470" + plantname = "shand" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mtear + name = "sprig of Messa's Tear" + desc = "A mountain climate herb with a soft, cold blue flower, known to contain an abundance of healing chemicals." + icon_state = "mtear" + filling_color = "#70C470" + plantname = "mtear" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mtear/attack_self(mob/user as mob) + if(istype(user.loc,/turf/space)) return - for(var/turf/T in orange(M,outer_teleport_radius)) - if(T in orange(M,inner_teleport_radius)) continue - if(istype(T,/turf/space)) continue - if(T.density) continue - if(T.x>world.maxx-outer_teleport_radius || T.xworld.maxy-outer_teleport_radius || T.yThe [src.name] has been squashed, causing a distortion in space-time.","You hear a splat and a crackle.") + var/obj/item/stack/medical/ointment/tajaran/poultice = new /obj/item/stack/medical/ointment/tajaran(user.loc) + + poultice.heal_burn = potency del(src) - return \ No newline at end of file + + user << "You mash the petals into a poultice." + +/obj/item/weapon/reagent_containers/food/snacks/grown/shand/attack_self(mob/user as mob) + if(istype(user.loc,/turf/space)) + return + var/obj/item/stack/medical/bruise_pack/tajaran/poultice = new /obj/item/stack/medical/bruise_pack/tajaran(user.loc) + + poultice.heal_brute = potency + del(src) + + user << "You mash the leaves into a poultice." + +/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin + name = "pumpkin" + desc = "It's large and scary." + icon_state = "pumpkin" + potency = 10 + filling_color = "#FAB728" + plantname = "pumpkin" + +/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/twohanded/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/melee/energy)) + user.show_message("You carve a face into [src]!", 1) + new /obj/item/clothing/head/pumpkinhead (user.loc) + del(src) + return \ No newline at end of file From b791c92c6ec5efcdffe9c93988ec2b6a7a15ce52 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 24 Jan 2015 10:37:23 +1030 Subject: [PATCH 08/90] Added a fruit spawning debug proc. --- code/modules/admin/admin.dm | 14 ++++++++++++++ code/modules/admin/admin_verbs.dm | 1 + code/modules/hydroponics/seed_datums.dm | 23 +++++++++++++---------- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index fdfb9f0e3e..9ddb6b8903 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -993,6 +993,20 @@ var/global/floorIsLava = 0 else return "Error: Invalid sabotage target: [target]" */ + +/datum/admins/proc/spawn_fruit() + set category = "Debug" + set desc = "(seed index) Spawn the product of a seed." + set name = "Spawn Fruit" + + if(!check_rights(R_SPAWN)) return + + var/seedtype = input("Select a seed type", "Spawn Fruit") as null|anything in seed_types + if(!seedtype || !seed_types[seedtype]) + return + var/datum/seed/S = seed_types[seedtype] + S.harvest(usr,0,0,1) + /datum/admins/proc/spawn_atom(var/object as text) set category = "Debug" set desc = "(atom path) Spawn an atom" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 823fb69f80..0835c311fa 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -107,6 +107,7 @@ var/list/admin_verbs_fun = list( /client/proc/editappear ) var/list/admin_verbs_spawn = list( + /datum/admins/proc/spawn_fruit, /datum/admins/proc/spawn_atom, /*allows us to spawn instances*/ /client/proc/respawn_character ) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 490481fdd1..dfc510b649 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -624,7 +624,7 @@ proc/populate_seed_list() return (P ? P : 0) //Place the plant products at the feet of the user. -/datum/seed/proc/harvest(var/mob/user,var/yield_mod,var/harvest_sample) +/datum/seed/proc/harvest(var/mob/user,var/yield_mod,var/harvest_sample,var/force_amount) if(!user) return @@ -633,8 +633,8 @@ proc/populate_seed_list() if(!isnull(products) && products.len && yield > 0) got_product = 1 - if(!got_product && !harvest_sample) - user << "\red You fail to harvest anything useful." + if(!force_amount && !got_product && !harvest_sample) + user << "You fail to harvest anything useful." else user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]." @@ -651,13 +651,16 @@ proc/populate_seed_list() return var/total_yield = 0 - if(yield > -1) - if(isnull(yield_mod) || yield_mod < 1) - yield_mod = 0 - total_yield = yield - else - total_yield = yield + rand(yield_mod) - total_yield = max(1,total_yield) + if(!isnull(force_amount)) + total_yield = force_amount + else + if(yield > -1) + if(isnull(yield_mod) || yield_mod < 1) + yield_mod = 0 + total_yield = yield + else + total_yield = yield + rand(yield_mod) + total_yield = max(1,total_yield) currently_querying = list() for(var/i = 0;i Date: Sat, 24 Jan 2015 12:49:11 +1030 Subject: [PATCH 09/90] Tweaks/fixes for fruit effects. --- code/modules/hydroponics/seed_datums.dm | 70 ++++++++++++++----- code/modules/hydroponics/vines.dm | 33 +-------- .../reagent_containers/food/snacks/grown.dm | 35 ++++++---- 3 files changed, 75 insertions(+), 63 deletions(-) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index dfc510b649..c36e87f449 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -115,12 +115,45 @@ proc/populate_seed_list() // Special traits. var/produces_power // Can be used to make a battery. - var/thorny // Harvested thorns can act as syringes for injecting plant reagents. var/juicy // When thrown, causes a splatter decal. + var/thorny // Can cause damage/inject reagents when thrown or handled. var/explosive // When thrown, acts as a grenade. var/teleporting // Uses the bluespace tomato effect. var/splat_type = /obj/effect/decal/cleanable/tomato_smudge +// Adds reagents to a target. +/datum/seed/proc/do_thorns(var/mob/living/carbon/human/target) + if(!istype(target)) + return + + var/datum/organ/external/affecting = target.get_organ(pick("l_foot","r_foot","l_leg","r_leg","l_hand","r_hand","l_arm", "r_arm","head","chest","groin")) + var/damage = 0 + + if(carnivorous == 2) + target << "The thorns pierce your flesh greedily!" + damage = potency/2 + else + if(affecting) + target << "Several thorns dig deeply into your [affecting.display_name]!" + else + target << "Several thorns dig deeply into your flesh!" + damage = potency/5 + + if(affecting) + affecting.take_damage(damage, 0) + affecting.add_autopsy_data("Thorns",damage) + else + target.adjustBruteLoss(damage) + target.UpdateDamageIcon() + target.updatehealth() + + // Inject some chems. + if(chems && chems.len) + target << "You feel something seeping into your flesh!" + for(var/rid in chems) + var/injecting = min(5,max(1,potency/5)) + target.reagents.add_reagent(rid,injecting) + //Applies an effect to a target atom. /datum/seed/proc/thrown_at(var/obj/item/thrown,var/atom/target) @@ -130,11 +163,10 @@ proc/populate_seed_list() splatted = apply_special_effect(target,thrown) else if(istype(target,/turf)) splatted = 1 - for(var/mob/living/M in target,thrown) + for(var/mob/living/M in target.contents) apply_special_effect(M) if(juicy && splatted) - if(thrown.reagents) thrown.reagents.reaction(get_turf(target)) for(var/atom/hit_atom in get_turf(target)) @@ -147,33 +179,33 @@ proc/populate_seed_list() /datum/seed/proc/apply_special_effect(var/mob/living/target,var/obj/item/thrown) var/impact = 1 - // Thorns have a chance of injecting reagents. - if(thorny && prob(50)) - target << "Several thorns are embedded in your flesh!" - //Todo: cause brute, transfer some reagents over. + if(thorny && prob(potency*5)) + do_thorns(target) // Bluespace tomato code copied over from grown.dm. if(teleporting) //Plant potency determines radius of teleport. - var/outer_teleport_radius = potency/10 + var/outer_teleport_radius = potency/5 var/inner_teleport_radius = potency/15 - var/list/turfs + var/list/turfs = list() if(inner_teleport_radius > 0) - turfs = orange(target,outer_teleport_radius) - orange(target,inner_teleport_radius) + for(var/turf/T in orange(target,outer_teleport_radius)) + if(get_dist(target,T) >= inner_teleport_radius) + turfs |= T - if(!turfs.len) - target.visible_message("The [thrown.name] has been squashed.","You hear a smack.") - del(thrown) - return + if(turfs.len) + // Moves the mob, causes sparks. + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, get_turf(target)) + s.start() + var/turf/picked = get_turf(pick(turfs)) // Just in case... + new/obj/effect/decal/cleanable/molten_item(get_turf(target)) // Leave a pile of goo behind for dramatic effect... + target.loc = picked // And teleport them to the chosen location. - // Moves the mob, causes sparks. - var/turf/picked = pick(turfs) - new/obj/effect/decal/cleanable/molten_item(picked) //Leave a pile of goo behind for dramatic effect... - target.loc = picked//And teleport them to the chosen location. - impact = 1 + impact = 1 return impact diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/vines.dm index 24e7502669..59b057028d 100644 --- a/code/modules/hydroponics/vines.dm +++ b/code/modules/hydroponics/vines.dm @@ -107,38 +107,7 @@ // FEED ME, SEYMOUR. if(buckled_mob && seed && (buckled_mob.stat != DEAD)) //Don't bother with a dead mob. - - var/mob/living/M = buckled_mob - if(!istype(M)) return - var/mob/living/carbon/human/H = buckled_mob - - // Drink some blood/cause some brute. - if(seed.carnivorous == 2) - buckled_mob << "\The [src] pierces your flesh greedily!" - - var/damage = rand(round(seed.potency/2),seed.potency) - if(!istype(H)) - H.adjustBruteLoss(damage) - return - - var/datum/organ/external/affecting = H.get_organ(pick("l_foot","r_foot","l_leg","r_leg","l_hand","r_hand","l_arm", "r_arm","head","chest","groin")) - - if(affecting) - affecting.take_damage(damage, 0) - if(affecting.parent) - affecting.parent.add_autopsy_data("[plant_damage_noun]", damage) - else - H.adjustBruteLoss(damage) - - H.UpdateDamageIcon() - H.updatehealth() - - // Inject some chems. - if(seed.chems && seed.chems.len && istype(H)) - H << "You feel something seeping into your skin!" - for(var/rid in seed.chems) - var/injecting = min(5,max(1,seed.potency/5)) - H.reagents.add_reagent(rid,injecting) + seed.do_thorns(buckled_mob) /obj/effect/plantsegment/proc/update() if(!seed) return diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index bc925d8822..38d0127806 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -62,26 +62,37 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() - if(seed && seed.produces_power) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if(C.use(5)) - //TODO: generalize this. - user << "You add some cable to the [src.name] and slide it inside the battery encasing." - var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(user.loc) - pocell.maxcharge = src.potency * 10 - pocell.charge = pocell.maxcharge - del(src) - return + if(seed && seed.produces_power && istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if(C.use(5)) + //TODO: generalize this. + user << "You add some cable to the [src.name] and slide it inside the battery encasing." + var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(get_turf(user)) + if(src.loc == user && !(user.l_hand && user.r_hand) && istype(user,/mob/living/carbon/human)) + user.put_in_hands(pocell) + pocell.maxcharge = src.potency * 10 + pocell.charge = pocell.maxcharge + del(src) + return /obj/item/weapon/reagent_containers/food/snacks/grown/attack_self(mob/user as mob) - if(!seed || !seed.spread != 1) + if(!seed) return if(istype(user.loc,/turf/space)) return + if(user.a_intent == "hurt") + user.visible_message("\The [user] squashes \the [src]!") + seed.thrown_at(src,user) + sleep(-1) + if(src) del(src) + return + + if(seed.spread == 0) + return + // TODO: Generalize. var/obj/effect/glowshroom/planted = new /obj/effect/glowshroom(user.loc) planted.delay = 50 From 5538ce5589aa0839ee5af880a721127c95a059af Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 24 Jan 2015 14:04:35 +1030 Subject: [PATCH 10/90] Refactored nettles and sunflowers into regular plants. --- code/modules/food/recipes_microwave.dm | 2 +- code/modules/hydroponics/grown_inedible.dm | 106 +--------------- code/modules/hydroponics/hydro_tools.dm | 4 +- code/modules/hydroponics/seed_datums.dm | 42 +++--- code/modules/hydroponics/vines.dm | 3 +- code/modules/reagents/Chemistry-Machinery.dm | 4 +- code/modules/reagents/reagent_containers.dm | 4 +- .../reagent_containers/food/snacks.dm | 10 +- .../reagent_containers/food/snacks/grown.dm | 120 ++++++++++++++++-- 9 files changed, 152 insertions(+), 143 deletions(-) diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 87617d95ce..94ef9b3bdf 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -607,7 +607,7 @@ I said no! /datum/recipe/nettlesoup reagents = list("water" = 10) items = list( - /obj/item/weapon/grown/nettle, + /obj/item/weapon/reagent_containers/food/snacks/grown/nettle, /obj/item/weapon/reagent_containers/food/snacks/grown/potato, /obj/item/weapon/reagent_containers/food/snacks/egg, ) diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index df1afc6670..88bcfa6cfd 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -39,6 +39,7 @@ icon = 'icons/obj/harvest.dmi' icon_state = "logs" force = 5 + flags = TABLEPASS throwforce = 5 w_class = 3.0 throw_speed = 3 @@ -61,109 +62,6 @@ del(src) return -/obj/item/weapon/grown/sunflower // FLOWER POWER! - plantname = "sunflowers" - name = "sunflower" - desc = "It's beautiful! A certain person might beat you to death if you trample these." - icon = 'icons/obj/harvest.dmi' - icon_state = "sunflower" - damtype = "fire" - force = 0 - throwforce = 1 - w_class = 1.0 - throw_speed = 1 - throw_range = 3 - -/obj/item/weapon/grown/sunflower/attack(mob/M as mob, mob/user as mob) - M << " [user] smacks you with a sunflower!FLOWER POWER" - user << " Your sunflower's FLOWER POWER strikes [M]" - -/obj/item/weapon/grown/nettle // -- Skie - plantname = "nettle" - desc = "It's probably not wise to touch it with bare hands..." - icon = 'icons/obj/weapons.dmi' - name = "nettle" - icon_state = "nettle" - damtype = "fire" - force = 15 - throwforce = 1 - w_class = 2.0 - throw_speed = 1 - throw_range = 3 - origin_tech = "combat=1" - attack_verb = list("stung") - hitsound = "" - - var/potency_divisior = 5 - -/obj/item/weapon/grown/nettle/New() - ..() - spawn(5) - force = round((5+potency/potency_divisior), 1) - -/obj/item/weapon/grown/nettle/pickup(mob/living/carbon/human/user as mob) - if(istype(user) && !user.gloves) - user << "\red The nettle burns your bare hand!" - if(istype(user, /mob/living/carbon/human)) - var/organ = ((user.hand ? "l_":"r_") + "arm") - var/datum/organ/external/affecting = user.get_organ(organ) - if(affecting.take_damage(0,force)) - user.UpdateDamageIcon() - else - user.take_organ_damage(0,force) - return 1 - return 0 - -/obj/item/weapon/grown/nettle/proc/lose_leaves(var/mob/user) - if(force > 0) - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) - force -= rand(1,(force/3)+1) // When you whack someone with it, leaves fall off - - sleep(1) - - if(force <= 0) - if(user) - user << "All the leaves have fallen off \the [src] from violent whacking." - user.drop_from_inventory(src) - del(src) - -/obj/item/weapon/grown/nettle/death // -- Skie - plantname = "deathnettle" - desc = "The \red glowing \black nettle incites \redrage\black in you just from looking at it!" - name = "deathnettle" - icon_state = "deathnettle" - origin_tech = "combat=3" - potency_divisior = 2.5 - -/obj/item/weapon/grown/nettle/death/pickup(mob/living/carbon/human/user as mob) - - if(..() && prob(50)) - user.Paralyse(5) - user << "\red You are stunned by the deathnettle when you try picking it up!" - -/obj/item/weapon/grown/nettle/attack(mob/living/carbon/M as mob, mob/user as mob) - - if(!..()) return - - lose_leaves(user) - -/obj/item/weapon/grown/nettle/death/attack(mob/living/carbon/M as mob, mob/user as mob) - - if(!..()) return - - if(istype(M, /mob/living)) - M << "\red You are stunned by the powerful acid of the deathnettle!" - - M.attack_log += text("\[[time_stamp()]\] Had the [src.name] used on them by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] on [M.name] ([M.ckey])") - msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] on [M.name] ([M.ckey]) (JMP)") - - M.eye_blurry += force/7 - if(prob(20)) - M.Paralyse(force/6) - M.Weaken(force/15) - M.drop_item() - /obj/item/weapon/corncob name = "corn cob" desc = "A reminder of meals gone by." @@ -181,4 +79,4 @@ user << "You use [W] to fashion a pipe out of the corn cob!" new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc) del(src) - return + return \ No newline at end of file diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 10a22efe88..02af4524be 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -159,8 +159,8 @@ if(grown_seed.produces_power) user << "
The fruit will function as a battery if prepared appropriately." - if(grown_seed.thorny) - user << "
The fruit is covered in sharp, hollow thorns." + if(grown_seed.stings) + user << "
The fruit is covered in stinging spines." if(grown_seed.juicy) user << "
The fruit is excessively juicy." diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index c36e87f449..fdb031dde9 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -99,7 +99,7 @@ proc/populate_seed_list() var/spread = 0 // 0 limits plant to tray, 1 = creepers, 2 = vines. var/carnivorous = 0 // 0 = none, 1 = eat pests in tray, 2 = eat living things (when a vine). var/parasite = 0 // 0 = no, 1 = gain health from weed level. - var/immutable = 0 // If set, plant will never mutate. If -1, plant is highly mutable. + var/immutable = 0 // If set, plant will never mutate. If -1, plant is highly mutable. var/alter_temp // If set, the plant will periodically alter local temp by this amount. // Cosmetics. @@ -116,27 +116,32 @@ proc/populate_seed_list() // Special traits. var/produces_power // Can be used to make a battery. var/juicy // When thrown, causes a splatter decal. - var/thorny // Can cause damage/inject reagents when thrown or handled. + var/stings // Can cause damage/inject reagents when thrown or handled. var/explosive // When thrown, acts as a grenade. var/teleporting // Uses the bluespace tomato effect. var/splat_type = /obj/effect/decal/cleanable/tomato_smudge -// Adds reagents to a target. -/datum/seed/proc/do_thorns(var/mob/living/carbon/human/target) - if(!istype(target)) +// Does brute damage to a target. +/datum/seed/proc/do_thorns(var/mob/living/carbon/human/target, var/obj/item/fruit, var/target_limb) + + if(!istype(target) || !carnivorous) return - var/datum/organ/external/affecting = target.get_organ(pick("l_foot","r_foot","l_leg","r_leg","l_hand","r_hand","l_arm", "r_arm","head","chest","groin")) + if(!target_limb) target_limb = pick("l_foot","r_foot","l_leg","r_leg","l_hand","r_hand","l_arm", "r_arm","head","chest","groin") + var/datum/organ/external/affecting = target.get_organ(target_limb) var/damage = 0 if(carnivorous == 2) - target << "The thorns pierce your flesh greedily!" + if(affecting) + target << "\The [fruit]'s thorns pierce your [affecting.display_name] greedily!" + else + target << "\The [fruit]'s thorns pierce your flesh greedily!" damage = potency/2 else if(affecting) - target << "Several thorns dig deeply into your [affecting.display_name]!" + target << "\The [fruit]'s thorns dig deeply into your [affecting.display_name]!" else - target << "Several thorns dig deeply into your flesh!" + target << "\The [fruit]'s thorns dig deeply into your flesh!" damage = potency/5 if(affecting) @@ -147,9 +152,12 @@ proc/populate_seed_list() target.UpdateDamageIcon() target.updatehealth() - // Inject some chems. +// Adds reagents to a target. +/datum/seed/proc/do_sting(var/mob/living/carbon/human/target, var/obj/item/fruit) + if(!stings) + return if(chems && chems.len) - target << "You feel something seeping into your flesh!" + target << "You are stung by \the [fruit]!" for(var/rid in chems) var/injecting = min(5,max(1,potency/5)) target.reagents.add_reagent(rid,injecting) @@ -179,9 +187,8 @@ proc/populate_seed_list() /datum/seed/proc/apply_special_effect(var/mob/living/target,var/obj/item/thrown) var/impact = 1 - // Thorns have a chance of injecting reagents. - if(thorny && prob(potency*5)) - do_thorns(target) + do_sting(target,thrown) + do_thorns(target,thrown) // Bluespace tomato code copied over from grown.dm. if(teleporting) @@ -877,7 +884,7 @@ proc/populate_seed_list() name = "nettle" seed_name = "nettle" display_name = "nettles" - products = list(/obj/item/weapon/grown/nettle) + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/nettle) mutants = list("deathnettle") packet_icon = "seed-nettle" plant_icon = "nettle" @@ -889,12 +896,13 @@ proc/populate_seed_list() yield = 4 potency = 10 growth_stages = 5 + stings = 1 /datum/seed/nettle/death name = "deathnettle" seed_name = "death nettle" display_name = "death nettles" - products = list(/obj/item/weapon/grown/nettle/death) + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/nettle/death) mutants = null packet_icon = "seed-deathnettle" plant_icon = "deathnettle" @@ -1275,7 +1283,7 @@ proc/populate_seed_list() seed_name = "sunflower" display_name = "sunflowers" packet_icon = "seed-sunflower" - products = list(/obj/item/weapon/grown/sunflower) + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sunflower) plant_icon = "sunflower" lifespan = 25 diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/vines.dm index 59b057028d..d97fc91dc1 100644 --- a/code/modules/hydroponics/vines.dm +++ b/code/modules/hydroponics/vines.dm @@ -107,7 +107,8 @@ // FEED ME, SEYMOUR. if(buckled_mob && seed && (buckled_mob.stat != DEAD)) //Don't bother with a dead mob. - seed.do_thorns(buckled_mob) + seed.do_thorns(buckled_mob,src) + seed.do_sting(buckled_mob,src) /obj/effect/plantsegment/proc/update() if(!seed) return diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index b2ac133cc5..074c5dbce3 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -831,8 +831,8 @@ /obj/item/stack/sheet/mineral/uranium = list("uranium" = 20), /obj/item/stack/sheet/mineral/silver = list("silver" = 20), /obj/item/stack/sheet/mineral/gold = list("gold" = 20), - /obj/item/weapon/grown/nettle/death = list("pacid" = 0), - /obj/item/weapon/grown/nettle = list("sacid" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/nettle/death = list("pacid" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/nettle = list("sacid" = 0), //Blender Stuff /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0), diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 827c400898..72bb60b4c6 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -28,8 +28,8 @@ return /obj/item/weapon/reagent_containers/attack(mob/M as mob, mob/user as mob, def_zone) - if (can_operate(M)) //Checks if mob is lying down on table for surgery - if (do_surgery(M,user,src)) + if(can_operate(M)) //Checks if mob is lying down on table for surgery + if(do_surgery(M,user,src)) return // this prevented pills, food, and other things from being picked up by bags. diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 292f998318..fc70d9ecde 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -32,9 +32,10 @@ return /obj/item/weapon/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone) - if(!reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it. - user << "\red None of [src] left, oh no!" - M.drop_from_inventory(src) //so icons update :[ + + if(!reagents.total_volume) + user << "None of [src] left!" + user.drop_from_inventory(src) del(src) return 0 @@ -106,9 +107,6 @@ return 0 -/obj/item/weapon/reagent_containers/food/snacks/afterattack(obj/target, mob/user, proximity) - return ..() - /obj/item/weapon/reagent_containers/food/snacks/examine(mob/user) if(!..(user, 1)) return diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index 38d0127806..c49f38c434 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -54,11 +54,8 @@ M.Weaken(5) /obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom) - ..() - if(!seed) - return - seed.thrown_at(src,hit_atom) + if(seed) seed.thrown_at(src,hit_atom) /obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() @@ -66,7 +63,7 @@ var/obj/item/stack/cable_coil/C = W if(C.use(5)) //TODO: generalize this. - user << "You add some cable to the [src.name] and slide it inside the battery encasing." + user << "You add some cable to the [src.name] and slide it inside the battery casing." var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(get_turf(user)) if(src.loc == user && !(user.l_hand && user.r_hand) && istype(user,/mob/living/carbon/human)) user.put_in_hands(pocell) @@ -75,6 +72,67 @@ del(src) return +/obj/item/weapon/reagent_containers/food/snacks/grown/attack(var/mob/living/carbon/M, var/mob/user, var/def_zone) + if(user == M) + return ..() + + if(user.a_intent == "hurt") + + // This is being copypasted here because reagent_containers (WHY DOES FOOD DESCEND FROM THAT) overrides it completely. + // TODO: refactor all food paths to be less horrible and difficult to work with in this respect. ~Z + if(!istype(M) || (can_operate(M) && do_surgery(M,user,src))) return 0 + + user.lastattacked = M + M.lastattacker = user + user.attack_log += "\[[time_stamp()]\] Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" + M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" + msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" ) + + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/hit = H.attacked_by(src, user, def_zone) + if(hit && hitsound) + playsound(loc, hitsound, 50, 1, -1) + return hit + else + if(attack_verb.len) + user.visible_message("[M] has been [pick(attack_verb)] with [src] by [user]!") + else + user.visible_message("[M] has been attacked with [src] by [user]!") + + if (hitsound) + playsound(loc, hitsound, 50, 1, -1) + switch(damtype) + if("brute") + M.take_organ_damage(force) + if(prob(33)) + var/turf/simulated/location = get_turf(M) + if(istype(location)) location.add_blood_floor(M) + if("fire") + if (!(COLD_RESISTANCE in M.mutations)) + M.take_organ_damage(0, force) + M.updatehealth() + + if(seed && seed.stings) + if(!reagents || reagents.total_volume <= 0) + return + reagents.remove_any(rand(1,3)) + seed.thrown_at(src,M) + sleep(-1) + if(!src) + return + if(prob(35)) + if(user) + user << "\The [src] has fallen to bits." + user.drop_from_inventory(src) + del(src) + + add_fingerprint(user) + return 1 + + else + ..() + /obj/item/weapon/reagent_containers/food/snacks/grown/attack_self(mob/user as mob) if(!seed) @@ -103,12 +161,26 @@ del(src) /obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user) - if(seed && seed.biolum) + ..() + if(!seed) + return + if(seed.biolum) user.SetLuminosity(user.luminosity + seed.biolum) SetLuminosity(0) + if(seed.stings) + var/mob/living/carbon/human/H = user + if(istype(H) && H.gloves) + return + if(!reagents || reagents.total_volume <= 0) + return + reagents.remove_any(rand(1,3)) + seed.do_thorns(H,src) + seed.do_sting(H,src,pick("r_hand","l_hand")) /obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user) - if(seed && seed.biolum) + if(!..() || !seed) + return + if(seed.biolum) user.SetLuminosity(user.luminosity - seed.biolum) SetLuminosity(seed.biolum) @@ -537,4 +609,36 @@ user.show_message("You carve a face into [src]!", 1) new /obj/item/clothing/head/pumpkinhead (user.loc) del(src) - return \ No newline at end of file + return + +/obj/item/weapon/reagent_containers/food/snacks/grown/sunflower // FLOWER POWER! + plantname = "sunflowers" + name = "sunflower" + desc = "A beautiful yellow flower." + icon_state = "sunflower" + damtype = "fire" + force = 0 + throw_speed = 1 + throw_range = 3 + +/obj/item/weapon/reagent_containers/food/snacks/grown/nettle + plantname = "nettle" + desc = "It's probably not wise to touch it with bare hands..." + icon = 'icons/obj/weapons.dmi' + name = "nettle" + icon_state = "nettle" + damtype = "fire" + force = 15 + w_class = 2.0 + throw_speed = 1 + throw_range = 3 + origin_tech = "combat=1" + attack_verb = list("stung") + hitsound = "" + +/obj/item/weapon/reagent_containers/food/snacks/grown/nettle/death + plantname = "deathnettle" + desc = "A cruel and toxic-looking plant." + name = "deathnettle" + icon_state = "deathnettle" + origin_tech = "combat=3" \ No newline at end of file From 26fe1a11a49d891e31113624549dd16af424ebd6 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 24 Jan 2015 15:53:14 +1030 Subject: [PATCH 11/90] Adds exploding fruits. --- .../objects/effects/decals/Cleanable/misc.dm | 10 ++ code/modules/hydroponics/seed_datums.dm | 125 ++++++++++++++++-- 2 files changed, 125 insertions(+), 10 deletions(-) diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index d52fd60b7e..4c85144d1e 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -133,3 +133,13 @@ layer = 2 icon = 'icons/effects/tomatodecal.dmi' random_icon_states = list("smashed_pie") + +/obj/effect/decal/cleanable/fruit_smudge + name = "smudge" + desc = "Some kind of fruit smear." + density = 0 + anchored = 1 + layer = 2 + icon = 'icons/effects/blood.dmi' + icon_state = "mfloor1" + random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") \ No newline at end of file diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index fdb031dde9..0ff3935fda 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -119,7 +119,7 @@ proc/populate_seed_list() var/stings // Can cause damage/inject reagents when thrown or handled. var/explosive // When thrown, acts as a grenade. var/teleporting // Uses the bluespace tomato effect. - var/splat_type = /obj/effect/decal/cleanable/tomato_smudge + var/splat_type = /obj/effect/decal/cleanable/fruit_smudge // Does brute damage to a target. /datum/seed/proc/do_thorns(var/mob/living/carbon/human/target, var/obj/item/fruit, var/target_limb) @@ -162,10 +162,106 @@ proc/populate_seed_list() var/injecting = min(5,max(1,potency/5)) target.reagents.add_reagent(rid,injecting) +//Splatter a turf. +/datum/seed/proc/splatter(var/turf/T,var/obj/item/thrown) + if(splat_type) + var/obj/effect/decal/cleanable/fruit_smudge/splat = new splat_type(T) + splat.name = "[thrown.name] [pick("smear","smudge","splatter")]" + if(biolum) + if(biolum_colour) + splat.l_color = biolum_colour + splat.SetLuminosity(biolum) + if(istype(splat)) + if(product_colour) + splat.color = product_colour + + if(chems) + for(var/mob/living/M in T.contents) + if(!M.reagents) + continue + for(var/chem in chems) + var/injecting = min(5,max(1,potency/3)) + M.reagents.add_reagent(chem,injecting) + //Applies an effect to a target atom. /datum/seed/proc/thrown_at(var/obj/item/thrown,var/atom/target) var/splatted + var/turf/origin_turf = get_turf(target) + + if(explosive) + + var/flood_dist = min(10,max(1,potency/10)) + var/list/open_turfs = list() + var/list/closed_turfs = list() + var/list/valid_turfs = list() + open_turfs |= origin_turf + + // Flood fill to get affected turfs. + while(open_turfs.len) + var/turf/T = pick(open_turfs) + open_turfs -= T + closed_turfs |= T + valid_turfs |= T + + for(var/dir in alldirs) + var/turf/neighbor = get_step(T,dir) + if(!neighbor || (neighbor in closed_turfs) || (neighbor in open_turfs)) + continue + if(neighbor.density || get_dist(neighbor,origin_turf) > flood_dist || istype(neighbor,/turf/space)) + closed_turfs |= neighbor + continue + // Check for windows. + var/no_los + for(var/turf/target_turf in getline(origin_turf,neighbor)) + if(target_turf.density) + no_los = 1 + break + + if(!no_los) + var/los_dir = get_dir(neighbor,origin_turf) + var/list/blocked = list() + for(var/obj/machinery/door/D in neighbor.contents) + if(istype(D,/obj/machinery/door/window)) + blocked |= D.dir + else + if(D.density) + no_los = 1 + break + for(var/obj/structure/window/W in neighbor.contents) + if(W.is_fulltile()) + no_los = 1 + break + blocked |= W.dir + if(!no_los) + switch(los_dir) + if(NORTHEAST) + if((NORTH in blocked) && (EAST in blocked)) + no_los = 1 + if(SOUTHEAST) + if((SOUTH in blocked) && (EAST in blocked)) + no_los = 1 + if(NORTHWEST) + if((NORTH in blocked) && (WEST in blocked)) + no_los = 1 + if(SOUTHWEST) + if((SOUTH in blocked) && (WEST in blocked)) + no_los = 1 + else + if(los_dir in blocked) + no_los = 1 + if(no_los) + closed_turfs |= neighbor + continue + open_turfs |= neighbor + + for(var/turf/T in valid_turfs) + for(var/mob/living/M in T.contents) + apply_special_effect(M) + splatter(T,thrown) + origin_turf.visible_message("The [thrown.name] violently explodes against [target]!") + del(thrown) + return if(istype(target,/mob/living)) splatted = apply_special_effect(target,thrown) @@ -175,13 +271,8 @@ proc/populate_seed_list() apply_special_effect(M) if(juicy && splatted) - if(thrown.reagents) - thrown.reagents.reaction(get_turf(target)) - for(var/atom/hit_atom in get_turf(target)) - thrown.reagents.reaction(hit_atom) - - new splat_type (get_turf(thrown)) - thrown.visible_message("The [thrown.name] splatters against [target]!") + splatter(origin_turf,thrown) + origin_turf.visible_message("The [thrown.name] splatters against [target]!") del(thrown) /datum/seed/proc/apply_special_effect(var/mob/living/target,var/obj/item/thrown) @@ -295,6 +386,20 @@ proc/populate_seed_list() if(prob(20)) harvest_repeat = 1 + if(prob(15)) + juicy = 1 + + if(prob(5)) + stings = 1 + + if(prob(5)) + produces_power = 1 + + if(prob(1)) + explosive = 1 + else if(prob(1)) + teleporting = 1 + if(prob(5)) consume_gasses = list() var/gas = pick("oxygen","nitrogen","phoron","carbon_dioxide") @@ -964,7 +1069,6 @@ proc/populate_seed_list() packet_icon = "seed-bluetomato" plant_icon = "bluetomato" chems = list("nutriment" = list(1,20), "lube" = list(1,5)) - splat_type = /obj/effect/decal/cleanable/blood/oil /datum/seed/tomato/blue/teleport name = "bluespacetomato" @@ -1131,7 +1235,6 @@ proc/populate_seed_list() packet_icon = "mycelium-reishi" plant_icon = "reishi" chems = list("nutriment" = list(1,50), "psilocybin" = list(3,5)) - maturation = 10 production = 5 yield = 4 @@ -1209,6 +1312,8 @@ proc/populate_seed_list() lifespan = 120 maturation = 15 yield = 3 + explosive = 1 + splat_type = /obj/effect/glowshroom potency = 30 growth_stages = 4 biolum = 1 From 4a8470bfc0eec0a61225aed9f51fdf3307d8822f Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 28 Jan 2015 19:15:18 +1030 Subject: [PATCH 12/90] Split hydroponics.dmi into multiple files, converted tray icons into greyscale products and plants. --- icons/obj/hydroponics.dmi | Bin 162544 -> 0 bytes icons/obj/hydroponics_growing.dmi | Bin 0 -> 61932 bytes icons/obj/hydroponics_growing.png | Bin 0 -> 64190 bytes icons/obj/hydroponics_machines.dmi | Bin 0 -> 14407 bytes icons/obj/hydroponics_product.png | Bin 0 -> 13166 bytes icons/obj/hydroponics_products.dmi | Bin 0 -> 5693 bytes icons/obj/hydroponics_vines.dmi | Bin 0 -> 10381 bytes 7 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 icons/obj/hydroponics.dmi create mode 100644 icons/obj/hydroponics_growing.dmi create mode 100644 icons/obj/hydroponics_growing.png create mode 100644 icons/obj/hydroponics_machines.dmi create mode 100644 icons/obj/hydroponics_product.png create mode 100644 icons/obj/hydroponics_products.dmi create mode 100644 icons/obj/hydroponics_vines.dmi diff --git a/icons/obj/hydroponics.dmi b/icons/obj/hydroponics.dmi deleted file mode 100644 index 3118d5d30d25a9a149e7f1020c14bdb7dc7c4ccb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162544 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 diff --git a/icons/obj/hydroponics_growing.dmi b/icons/obj/hydroponics_growing.dmi new file mode 100644 index 0000000000000000000000000000000000000000..936384a19f894b5a8f5478ed60b99663daf2b1bb GIT binary patch literal 61932 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%0AxCwGoUMd}gw?z2gCzR=C(b*Q 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�A9k>-2aWD3Ha0icZEtI% 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 W<2yQVaWaI0|8zACH14Zg2mU`*sLihc literal 0 HcmV?d00001 diff --git a/icons/obj/hydroponics_growing.png b/icons/obj/hydroponics_growing.png new file mode 100644 index 0000000000000000000000000000000000000000..27ade12e281d400e43688d200653726396cc45dd GIT binary patch literal 64190 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⩔lS1p2<_IlWIjj3?we*AuJQejZJb&UlE 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 I!pQ%>0mKhwK>z>% literal 0 HcmV?d00001 diff --git a/icons/obj/hydroponics_product.png b/icons/obj/hydroponics_product.png new file mode 100644 index 0000000000000000000000000000000000000000..40761f4f0ab799db4d0fb7faf278ed71cf99de8d GIT binary patch literal 13166 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 literal 0 HcmV?d00001 diff --git a/icons/obj/hydroponics_products.dmi b/icons/obj/hydroponics_products.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1e1e09d8d29c6be63ec6dc2f9d091712ab79de0d GIT binary patch literal 5693 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 Npe(O0S1Dr|_CNP{CHVjV literal 0 HcmV?d00001 From 78e61d9ccd3c0f2584f8d3f5b3a5b01697b2de95 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 28 Jan 2015 21:13:43 +1030 Subject: [PATCH 13/90] Tweaks to xenoflora, added plant icons and colours to all plants. --- code/game/machinery/bees_apiary.dm | 2 +- code/game/machinery/seed_extractor.dm | 2 +- .../game/objects/items/weapons/hydroponics.dm | 2 +- .../objects/items/weapons/storage/bags.dm | 2 +- code/modules/admin/admin.dm | 2 +- code/modules/hydroponics/hydro_tools.dm | 2 +- code/modules/hydroponics/hydro_tray.dm | 51 +- code/modules/hydroponics/seed_datums.dm | 717 ++++++++++-------- code/modules/hydroponics/seed_machines.dm | 6 +- code/modules/hydroponics/vines.dm | 4 +- .../reagents/reagent_containers/spray.dm | 2 +- icons/obj/hydroponics_growing.dmi | Bin 61932 -> 61933 bytes icons/obj/hydroponics_products.dmi | Bin 5693 -> 5265 bytes 13 files changed, 429 insertions(+), 363 deletions(-) diff --git a/code/game/machinery/bees_apiary.dm b/code/game/machinery/bees_apiary.dm index d4e6aa6307..24fe5f8685 100644 --- a/code/game/machinery/bees_apiary.dm +++ b/code/game/machinery/bees_apiary.dm @@ -3,7 +3,7 @@ /obj/machinery/apiary name = "apiary tray" - icon = 'icons/obj/hydroponics.dmi' + icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "hydrotray3" density = 1 anchored = 1 diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm index 9c5dfab8e4..a1132ae08a 100644 --- a/code/game/machinery/seed_extractor.dm +++ b/code/game/machinery/seed_extractor.dm @@ -1,7 +1,7 @@ /obj/machinery/seed_extractor name = "seed extractor" desc = "Extracts and bags seeds from produce." - icon = 'icons/obj/hydroponics.dmi' + icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "sextractor" density = 1 anchored = 1 diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm index 0b492c2659..933675beea 100644 --- a/code/game/objects/items/weapons/hydroponics.dm +++ b/code/game/objects/items/weapons/hydroponics.dm @@ -4,7 +4,7 @@ //uncomment when this is updated to match storage update /* /obj/item/weapon/seedbag - icon = 'icons/obj/hydroponics.dmi' + icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "seedbag" name = "Seed Bag" desc = "A small satchel made for organizing seeds." diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 88db6abd3e..c355447d5b 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -88,7 +88,7 @@ /obj/item/weapon/storage/bag/plants name = "plant bag" - icon = 'icons/obj/hydroponics.dmi' + icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "plantbag" storage_slots = 50; //the number of plant pieces it can carry. max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 9ddb6b8903..d78524b294 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -996,7 +996,7 @@ var/global/floorIsLava = 0 /datum/admins/proc/spawn_fruit() set category = "Debug" - set desc = "(seed index) Spawn the product of a seed." + set desc = "Spawn the product of a seed." set name = "Spawn Fruit" if(!check_rights(R_SPAWN)) return diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 02af4524be..1d18a8be16 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -181,7 +181,7 @@ // ************************************* /obj/item/weapon/plantspray - icon = 'icons/obj/hydroponics.dmi' + icon = 'icons/obj/hydroponics_machines.dmi' item_state = "spray" flags = NOBLUDGEON slot_flags = SLOT_BELT diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index b082a609bc..6970ac0615 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -1,8 +1,9 @@ #define HYDRO_SPEED_MULTIPLIER 1 +var/global/list/plant_icon_cache = list() /obj/machinery/portable_atmospherics/hydroponics name = "hydroponics tray" - icon = 'icons/obj/hydroponics.dmi' + icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "hydrotray3" density = 1 anchored = 1 @@ -455,21 +456,40 @@ overlays += "over_lowhealth3" if(dead) - overlays += "[seed.plant_icon]-dead" - else if(harvest) - overlays += "[seed.plant_icon]-harvest" - else if(age < seed.maturation) - - var/t_growthstate - if(age >= seed.maturation) - t_growthstate = seed.growth_stages - else - t_growthstate = round(seed.maturation / seed.growth_stages) - - overlays += "[seed.plant_icon]-grow[t_growthstate]" - lastproduce = age + var/ikey = "[seed.plant_icon]-dead" + var/image/dead_overlay = plant_icon_cache["[ikey]"] + if(!dead_overlay) + dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]") + overlays |= dead_overlay else - overlays += "[seed.plant_icon]-grow[seed.growth_stages]" + if(!seed.growth_stages) + seed.update_growth_stages() + if(!seed.growth_stages) + world << "Seed type [seed.plant_icon] cannot find a growth stage value." + return + var/overlay_stage = 1 + if(age >= seed.maturation) + overlay_stage = seed.growth_stages + lastproduce = age + else + overlay_stage = max(1,round(seed.maturation / seed.growth_stages)) + + var/ikey = "[seed.plant_icon]-[overlay_stage]" + var/image/plant_overlay = plant_icon_cache["[ikey]-[seed.plant_colour]"] + if(!plant_overlay) + plant_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]") + plant_overlay.color = seed.plant_colour + plant_icon_cache["[ikey]-[seed.plant_colour]"] = plant_overlay + overlays |= plant_overlay + + if(harvest) + ikey = "[seed.product_icon]" + var/image/harvest_overlay = plant_icon_cache["product-[ikey]-[seed.product_colour]"] + if(!harvest_overlay) + harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]") + harvest_overlay.color = seed.product_colour + plant_icon_cache["product-[ikey]-[seed.product_colour]"] = harvest_overlay + overlays |= harvest_overlay //Draw the cover. if(closed_system) @@ -793,7 +813,6 @@ /obj/machinery/portable_atmospherics/hydroponics/soil name = "soil" - icon = 'icons/obj/hydroponics.dmi' icon_state = "soil" density = 0 use_power = 0 diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 0ff3935fda..07d9af4600 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1,6 +1,50 @@ var/global/list/seed_types = list() // A list of all seed data. var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. +// Index is the root icon_state, value is the number of states. +var/global/list/plant_sprites = list( + "bush" = 6, "bush2" = 6, "bush3" = 6, "bush4" = 6, "bush5" = 5, "bush6" = 4, "bush7" = 4, + "mushroom" = 3, "mushroom2" = 3, "mushroom3" = 3, "mushroom4" = 3, "mushroom5" = 3, + "mushroom6" = 4, "mushroom7" = 4, "mushroom8" = 3, "mushroom9" = 3, "mushroom10" = 3, + "tree" = 6, "tree2" = 5, "tree3" = 5, "tree4" = 6, "tree5" = 6, + "alien" = 4, "alien2" = 4, "alien3" = 3, "alien4" = 6, + "flower" = 4, "flower2" = 3, "flower3" = 3, + "grass" = 2, "grass2" = 4, + "stalk" = 4, "stalk2" = 6, + "vine" = 2, "vine2" = 4, + "carrot" = 4, "carrot2" = 6, + "ambrosia" = 6 + ) + +var/global/list/plant_product_sprites = list( + "berry", + "chili", + "eggplant", + "bean", + "tomato", + "wheat", + "nuts", + "nettles", + "bananas", + "treefruit", + "cash", + "rice", + "potato", + "corn", + "cabbage", + "vine", + "diona", + "stalk", + "ambrosia", + "unknown", + "carrot", "carrot2", + "grass", "grass2", + "flowers", "flower2", "flower3", "flower4", "flower5", + "alien", "alien2", "alien3", "alien4", "alien5", + "mushroom", "mushroom2", "mushroom3", "mushroom4", "mushroom5", + "mushroom6", "mushroom7", "mushroom8", "mushroom9", "mushroom10", "mushroom11" + ) + // Debug for testing seed genes. /client/proc/show_plant_genes() set category = "Debug" @@ -104,6 +148,7 @@ proc/populate_seed_list() // Cosmetics. var/plant_icon // Icon to use for the plant growing in the tray. + var/plant_colour = "#4BC445" // Colour of the plant icon. var/product_icon // Base to use for fruit coming from this plant (if a vine). var/product_colour // Colour to apply to product base (if a vine). var/packet_icon = "seed" // Icon to use for physical seed packet item. @@ -319,69 +364,12 @@ proc/populate_seed_list() products = list(pick(typesof(/obj/item/weapon/reagent_containers/food/snacks/grown)-/obj/item/weapon/reagent_containers/food/snacks/grown)) potency = rand(5,30) - var/list/plant_icons = pick(list( - list("seed-chili", "chili"), - list("seed-icepepper", "chiliice"), - list("seed-berry", "berry"), - list("seed-glowberry", "glowberry"), - list("seed-poisonberry", "poisonberry"), - list("seed-deathberry", "deathberry"), - list("seed-nettle", "nettle"), - list("seed-deathnettle", "deathnettle"), - list("seed-tomato", "tomato"), - list("seed-bloodtomato", "bloodtomato"), - list("seed-killertomato", "killertomato"), - list("seed-bluetomato", "bluetomato"), - list("seed-bluespacetomato", "bluespacetomato"), - list("seed-eggplant", "eggplant"), - list("seed-eggy", "eggy"), - list("seed-apple", "apple"), - list("seed-goldapple", "goldapple"), - list("seed-ambrosiavulgaris", "ambrosiavulgaris"), - list("seed-ambrosiadeus", "ambrosiadeus"), - list("mycelium-chanter", "chanter"), - list("mycelium-plump", "plump"), - list("mycelium-reishi", "reishi"), - list("mycelium-liberty", "liberty"), - list("mycelium-amanita", "amanita"), - list("mycelium-angel", "angel"), - list("mycelium-tower", "towercap"), - list("mycelium-glowshroom", "glowshroom"), - list("mycelium-walkingmushroom","walkingmushroom"), - list("mycelium-plast", "plastellium"), - list("seed-harebell", "harebell"), - list("seed-poppy", "poppy"), - list("seed-sunflower", "sunflower"), - list("seed-grapes", "grape"), - list("seed-greengrapes", "greengrape"), - list("seed-peanut", "peanut"), - list("seed-cabbage", "cabbage"), - list("seed-shand", "shand"), - list("seed-mtear", "mtear"), - list("seed-banana", "banana"), - list("seed-corn", "corn"), - list("seed-potato", "potato"), - list("seed-soybean", "soybean"), - list("seed-wheat", "wheat"), - list("seed-rice", "rice"), - list("seed-carrot", "carrot"), - list("seed-ambrosiavulgaris", "weeds"), - list("seed-whitebeet", "whitebeet"), - list("seed-sugarcane", "sugarcane"), - list("seed-watermelon", "watermelon"), - list("seed-pumpkin", "pumpkin"), - list("seed-lime", "lime"), - list("seed-lemon", "lemon"), - list("seed-orange", "orange"), - list("seed-grass", "grass"), - list("seed-cocoapod", "cocoapod"), - list("seed-cherry", "cherry"), - list("seed-kudzu", "kudzu"), - list("seed-replicapod", "replicapod") - )) - - packet_icon = plant_icons[1] - plant_icon = plant_icons[2] + packet_icon = "seed-replicapod" + product_icon = pick(plant_product_sprites) + plant_icon = pick(plant_sprites) + plant_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" + product_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" + update_growth_stages() if(prob(20)) harvest_repeat = 1 @@ -524,24 +512,27 @@ proc/populate_seed_list() if(!degree || immutable > 0) return - source_turf.visible_message("\blue \The [display_name] quivers!") + source_turf.visible_message("\The [display_name] quivers!") //This looks like shit, but it's a lot easier to read/change this way. var/total_mutations = rand(1,1+degree) for(var/i = 0;i\The [display_name] withers rapidly!") if(1) nutrient_consumption = max(0, min(5, nutrient_consumption + rand(-(degree*0.1),(degree*0.1)))) water_consumption = max(0, min(50, water_consumption + rand(-degree,degree))) + juicy = (juicy ? 0 : 1) + stings = (stings ? 0 : 1) if(2) ideal_heat = max(70, min(800, ideal_heat + (rand(-5,5) * degree))) heat_tolerance = max(70, min(800, heat_tolerance + (rand(-5,5) * degree))) lowkpa_tolerance = max(0, min(80, lowkpa_tolerance + (rand(-5,5) * degree))) highkpa_tolerance = max(110, min(500,highkpa_tolerance + (rand(-5,5) * degree))) + explosive = 1 if(3) ideal_light = max(0, min(30, ideal_light + (rand(-1,1) * degree))) light_tolerance = max(0, min(10, light_tolerance + (rand(-2,2) * degree))) @@ -552,7 +543,7 @@ proc/populate_seed_list() if(prob(degree*5)) carnivorous = max(0, min(2, carnivorous + rand(-degree,degree))) if(carnivorous) - source_turf.visible_message("\blue \The [display_name] shudders hungrily.") + source_turf.visible_message("\The [display_name] shudders hungrily.") if(6) weed_tolerance = max(0, min(10, weed_tolerance + (rand(-2,2) * degree))) if(prob(degree*5)) parasite = !parasite @@ -566,7 +557,7 @@ proc/populate_seed_list() potency = max(0, min(200, potency + (rand(-20,20) * degree))) if(prob(degree*5)) spread = max(0, min(2, spread + rand(-1,1))) - source_turf.visible_message("\blue \The [display_name] spasms visibly, shifting in the tray.") + source_turf.visible_message("\The [display_name] spasms visibly, shifting in the tray.") if(9) maturation = max(0, min(30, maturation + (rand(-1,1) * degree))) if(prob(degree*5)) @@ -575,22 +566,25 @@ proc/populate_seed_list() if(prob(degree*2)) biolum = !biolum if(biolum) - source_turf.visible_message("\blue \The [display_name] begins to glow!") + source_turf.visible_message("\The [display_name] begins to glow!") if(prob(degree*2)) biolum_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - source_turf.visible_message("\blue \The [display_name]'s glow changes colour!") + source_turf.visible_message("\The [display_name]'s glow changes colour!") else - source_turf.visible_message("\blue \The [display_name]'s glow dims...") + source_turf.visible_message("\The [display_name]'s glow dims...") if(11) if(prob(degree*2)) flowers = !flowers if(flowers) - source_turf.visible_message("\blue \The [display_name] sprouts a bevy of flowers!") + source_turf.visible_message("\The [display_name] sprouts a bevy of flowers!") if(prob(degree*2)) flower_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - source_turf.visible_message("\blue \The [display_name]'s flowers changes colour!") + source_turf.visible_message("\The [display_name]'s flowers changes colour!") else - source_turf.visible_message("\blue \The [display_name]'s flowers wither and fall off.") + source_turf.visible_message("\The [display_name]'s flowers wither and fall off.") + if(12) + teleporting = 1 + return //Mutates a specific trait/set of traits. @@ -642,6 +636,10 @@ proc/populate_seed_list() alter_temp = gene.values[4] potency = gene.values[5] harvest_repeat = gene.values[6] + produces_power = gene.values[7] + juicy = gene.values[8] + product_icon = gene.values[9] + plant_icon = gene.values[10] if("consumption") @@ -654,6 +652,7 @@ proc/populate_seed_list() water_consumption = gene.values[5] carnivorous = gene.values[6] parasite = gene.values[7] + stings = gene.values[8] if("environment") @@ -665,6 +664,7 @@ proc/populate_seed_list() light_tolerance = gene.values[4] lowkpa_tolerance = gene.values[5] highkpa_tolerance = gene.values[6] + explosive = gene.values[7] if("resistance") @@ -684,12 +684,13 @@ proc/populate_seed_list() spread = gene.values[4] maturation = gene.values[5] production = gene.values[6] + teleporting = gene.values[7] if("flowers") if(gene.values.len < 7) return - product_icon = gene.values[1] + plant_colour = gene.values[1] product_colour = gene.values[2] biolum = gene.values[3] biolum_colour = gene.values[4] @@ -697,6 +698,8 @@ proc/populate_seed_list() flower_icon = gene.values[6] flower_colour = gene.values[7] + update_growth_stages() + //Returns a list of the desired trait values. /datum/seed/proc/get_gene(var/genetype) @@ -713,7 +716,11 @@ proc/populate_seed_list() (exude_gasses ? exude_gasses : 0), (alter_temp ? alter_temp : 0), (potency ? potency : 0), - (harvest_repeat ? harvest_repeat : 0) + (harvest_repeat ? harvest_repeat : 0), + (produces_power ? produces_power : 0), + (juicy ? juicy : 0), + (product_icon ? product_icon : 0), + (plant_icon ? plant_icon : 0) ) if("consumption") @@ -724,7 +731,8 @@ proc/populate_seed_list() (requires_water ? requires_water : 0), (water_consumption ? water_consumption : 0), (carnivorous ? carnivorous : 0), - (parasite ? parasite : 0) + (parasite ? parasite : 0), + (stings ? stings : 0) ) if("environment") @@ -734,7 +742,8 @@ proc/populate_seed_list() (ideal_light ? ideal_light : 0), (light_tolerance ? light_tolerance : 0), (lowkpa_tolerance ? lowkpa_tolerance : 0), - (highkpa_tolerance ? highkpa_tolerance : 0) + (highkpa_tolerance ? highkpa_tolerance : 0), + (explosive ? explosive : 0) ) if("resistance") @@ -751,12 +760,13 @@ proc/populate_seed_list() (lifespan ? lifespan : 0), (spread ? spread : 0), (maturation ? maturation : 0), - (production ? production : 0) + (production ? production : 0), + (teleporting ? teleporting : 0), ) if("flowers") P.values = list( - (product_icon ? product_icon : 0), + (plant_colour ? plant_colour : 0), (product_colour ? product_colour : 0), (biolum ? biolum : 0), (biolum_colour ? biolum_colour : 0), @@ -829,7 +839,7 @@ proc/populate_seed_list() //Handle spawning in living, mobile products (like dionaea). if(istype(product,/mob/living)) - product.visible_message("\blue The pod disgorges [product]!") + product.visible_message("The pod disgorges [product]!") handle_living_product(product) // When the seed in this machine mutates/is modified, the tray seed value @@ -874,13 +884,13 @@ proc/populate_seed_list() new_seed.lifespan = lifespan new_seed.maturation = maturation new_seed.production = production - new_seed.growth_stages = growth_stages new_seed.harvest_repeat = harvest_repeat new_seed.potency = potency new_seed.spread = spread new_seed.carnivorous = carnivorous new_seed.parasite = parasite new_seed.plant_icon = plant_icon + new_seed.plant_colour = plant_colour new_seed.product_icon = product_icon new_seed.product_colour = product_colour new_seed.packet_icon = packet_icon @@ -889,28 +899,40 @@ proc/populate_seed_list() new_seed.flowers = flowers new_seed.flower_icon = flower_icon new_seed.alter_temp = alter_temp - + new_seed.update_growth_stages() return new_seed +/datum/seed/proc/update_growth_stages() + if(plant_icon) + growth_stages = plant_sprites[plant_icon] + else + growth_stages = 0 + +/datum/seed/New() + ..() + spawn(5) + sleep(-1) + update_growth_stages() + // Actual roundstart seed types after this point. // Chili plants/variants. /datum/seed/chili - name = "chili" seed_name = "chili" display_name = "chili plants" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/chili) chems = list("capsaicin" = list(3,5), "nutriment" = list(1,25)) mutants = list("icechili") - packet_icon = "seed-chili" - plant_icon = "chili" harvest_repeat = 1 - lifespan = 20 maturation = 5 production = 5 yield = 4 potency = 20 + packet_icon = "seed-chili" + product_icon = "chili" + product_colour = "#ED3300" + plant_icon = "bush2" /datum/seed/chili/ice name = "icechili" @@ -919,11 +941,10 @@ proc/populate_seed_list() mutants = null products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper) chems = list("frostoil" = list(3,5), "nutriment" = list(1,50)) - packet_icon = "seed-icepepper" - plant_icon = "chiliice" - maturation = 4 production = 4 + packet_icon = "seed-icepepper" + product_colour = "#00EDC6" // Berry plants/variants. /datum/seed/berry @@ -932,17 +953,18 @@ proc/populate_seed_list() display_name = "berry bush" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/berries) mutants = list("glowberries","poisonberries") - packet_icon = "seed-berry" - plant_icon = "berry" harvest_repeat = 1 chems = list("nutriment" = list(1,10)) juicy = 1 - lifespan = 20 maturation = 5 production = 5 yield = 2 potency = 10 + packet_icon = "seed-berry" + product_icon = "berry" + product_colour = "#FA1616" + plant_icon = "bush" /datum/seed/berry/glow name = "glowberries" @@ -950,16 +972,18 @@ proc/populate_seed_list() display_name = "glowberry bush" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries) mutants = null - packet_icon = "seed-glowberry" - plant_icon = "glowberry" chems = list("nutriment" = list(1,10), "uranium" = list(3,5)) spread = 1 - + biolum = 1 + biolum_colour = "#006622" lifespan = 30 maturation = 5 production = 5 yield = 2 potency = 10 + packet_icon = "seed-glowberry" + product_colour = "C9FA16" + biolum /datum/seed/berry/poison name = "poisonberries" @@ -967,9 +991,9 @@ proc/populate_seed_list() display_name = "poison berry bush" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries) mutants = list("deathberries") - packet_icon = "seed-poisonberry" - plant_icon = "poisonberry" chems = list("nutriment" = list(1), "toxin" = list(3,5)) + packet_icon = "seed-poisonberry" + product_colour = "#6DC961" /datum/seed/berry/poison/death name = "deathberries" @@ -977,12 +1001,11 @@ proc/populate_seed_list() display_name = "death berry bush" mutants = null products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/deathberries) - packet_icon = "seed-deathberry" - plant_icon = "deathberry" chems = list("nutriment" = list(1), "toxin" = list(3,3), "lexorin" = list(1,5)) - yield = 3 potency = 50 + packet_icon = "seed-deathberry" + product_colour = "#7A5454" // Nettles/variants. /datum/seed/nettle @@ -991,8 +1014,6 @@ proc/populate_seed_list() display_name = "nettles" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/nettle) mutants = list("deathnettle") - packet_icon = "seed-nettle" - plant_icon = "nettle" harvest_repeat = 1 chems = list("nutriment" = list(1,50), "sacid" = list(0,1)) lifespan = 30 @@ -1000,8 +1021,11 @@ proc/populate_seed_list() production = 6 yield = 4 potency = 10 - growth_stages = 5 stings = 1 + packet_icon = "seed-nettle" + plant_icon = "bush5" + product_icon = "nettles" + product_colour = "#728A54" /datum/seed/nettle/death name = "deathnettle" @@ -1009,12 +1033,12 @@ proc/populate_seed_list() display_name = "death nettles" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/nettle/death) mutants = null - packet_icon = "seed-deathnettle" - plant_icon = "deathnettle" chems = list("nutriment" = list(1,50), "pacid" = list(0,1)) - maturation = 8 yield = 2 + packet_icon = "seed-deathnettle" + product_colour = "#8C5030" + plant_colour = "#634941" //Tomatoes/variants. /datum/seed/tomato @@ -1023,30 +1047,31 @@ proc/populate_seed_list() display_name = "tomato plant" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/tomato) mutants = list("bluetomato","bloodtomato") - packet_icon = "seed-tomato" - plant_icon = "tomato" harvest_repeat = 1 chems = list("nutriment" = list(1,10)) juicy = 1 - lifespan = 25 maturation = 8 production = 6 yield = 2 potency = 10 + packet_icon = "seed-tomato" + product_icon = "tomato" + product_colour = "#D10000" + plant_icon = "bush3" + /datum/seed/tomato/blood name = "bloodtomato" seed_name = "blood tomato" display_name = "blood tomato plant" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato) mutants = list("killer") - packet_icon = "seed-bloodtomato" - plant_icon = "bloodtomato" chems = list("nutriment" = list(1,10), "blood" = list(1,5)) splat_type = /obj/effect/decal/cleanable/blood/splatter - yield = 3 + packet_icon = "seed-bloodtomato" + product_colour = "#FF0000" /datum/seed/tomato/killer name = "killertomato" @@ -1054,11 +1079,9 @@ proc/populate_seed_list() display_name = "killer tomato plant" products = list(/mob/living/simple_animal/tomato) mutants = null - packet_icon = "seed-killertomato" - plant_icon = "killertomato" - yield = 2 - growth_stages = 2 + packet_icon = "seed-killertomato" + product_colour = "#A86747" /datum/seed/tomato/blue name = "bluetomato" @@ -1066,9 +1089,10 @@ proc/populate_seed_list() display_name = "blue tomato plant" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato) mutants = list("bluespacetomato") - packet_icon = "seed-bluetomato" - plant_icon = "bluetomato" chems = list("nutriment" = list(1,20), "lube" = list(1,5)) + packet_icon = "seed-bluetomato" + product_colour = "#4D86E8" + plant_colour = "#070AAD" /datum/seed/tomato/blue/teleport name = "bluespacetomato" @@ -1077,9 +1101,12 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato) mutants = null packet_icon = "seed-bluespacetomato" - plant_icon = "bluespacetomato" chems = list("nutriment" = list(1,20), "singulo" = list(1,5)) teleporting = 1 + packet_icon = "seed-bluespacetomato" + product_colour = "#00E5FF" + biolum = 1 + biolum_colour = "#4DA4A8" //Eggplants/varieties. /datum/seed/eggplant @@ -1088,16 +1115,17 @@ proc/populate_seed_list() display_name = "eggplants" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant) mutants = list("realeggplant") - packet_icon = "seed-eggplant" - plant_icon = "eggplant" harvest_repeat = 1 chems = list("nutriment" = list(1,10)) - lifespan = 25 maturation = 6 production = 6 yield = 2 potency = 20 + packet_icon = "seed-eggplant" + product_icon = "eggplant" + product_colour = "#892694" + plant_icon = "bush4" /datum/seed/eggplant/eggs name = "realeggplant" @@ -1105,30 +1133,29 @@ proc/populate_seed_list() display_name = "egg-plants" products = list(/obj/item/weapon/reagent_containers/food/snacks/egg) mutants = null - packet_icon = "seed-eggy" - plant_icon = "eggy" - lifespan = 75 production = 12 + packet_icon = "seed-eggy" + product_colour = "#E7EDD1" //Apples/varieties. - /datum/seed/apple name = "apple" seed_name = "apple" display_name = "apple tree" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/apple) mutants = list("poisonapple","goldapple") - packet_icon = "seed-apple" - plant_icon = "apple" harvest_repeat = 1 chems = list("nutriment" = list(1,10)) - lifespan = 55 maturation = 6 production = 6 yield = 5 potency = 10 + packet_icon = "seed-apple" + product_icon = "treefruit" + product_colour = "#FF540A" + plant_icon = "tree2" /datum/seed/apple/poison name = "poisonapple" @@ -1142,13 +1169,13 @@ proc/populate_seed_list() display_name = "gold apple tree" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/goldapple) mutants = null - packet_icon = "seed-goldapple" - plant_icon = "goldapple" chems = list("nutriment" = list(1,10), "gold" = list(1,5)) - maturation = 10 production = 10 yield = 3 + packet_icon = "seed-goldapple" + product_colour = "#FFDD00" + plant_colour = "#D6B44D" //Ambrosia/varieties. /datum/seed/ambrosia @@ -1157,16 +1184,17 @@ proc/populate_seed_list() display_name = "ambrosia vulgaris" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris) mutants = list("ambrosiadeus") - packet_icon = "seed-ambrosiavulgaris" - plant_icon = "ambrosiavulgaris" harvest_repeat = 1 chems = list("nutriment" = list(1), "space_drugs" = list(1,8), "kelotane" = list(1,8,1), "bicaridine" = list(1,10,1), "toxin" = list(1,10)) - lifespan = 60 maturation = 6 production = 6 yield = 6 potency = 5 + packet_icon = "seed-ambrosiavulgaris" + product_icon = "ambrosia" + product_colour = "#9FAD55" + plant_icon = "ambrosia" /datum/seed/ambrosia/deus name = "ambrosiadeus" @@ -1174,9 +1202,10 @@ proc/populate_seed_list() display_name = "ambrosia deus" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus) mutants = null - packet_icon = "seed-ambrosiadeus" - plant_icon = "ambrosiadeus" chems = list("nutriment" = list(1), "bicaridine" = list(1,8), "synaptizine" = list(1,8,1), "hyperzine" = list(1,10,1), "space_drugs" = list(1,10)) + packet_icon = "seed-ambrosiadeus" + product_colour = "#A3F0AD" + plant_colour = "#2A9C61" //Mushrooms/varieties. /datum/seed/mushroom @@ -1186,16 +1215,17 @@ proc/populate_seed_list() display_name = "chanterelle mushrooms" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle) mutants = list("reishi","amanita","plumphelmet") - packet_icon = "mycelium-chanter" - plant_icon = "chanter" chems = list("nutriment" = list(1,25)) - lifespan = 35 maturation = 7 production = 1 yield = 5 potency = 1 - growth_stages = 3 + packet_icon = "mycelium-chanter" + product_icon = "mushroom4" + product_colour = "#DBDA72" + plant_colour = "#D9C94E" + plant_icon = "mushroom" /datum/seed/mushroom/mold name = "mold" @@ -1203,13 +1233,14 @@ proc/populate_seed_list() display_name = "brown mold" products = null mutants = null - //mutants = list("wallrot") //TBD. - plant_icon = "mold" spread = 1 - lifespan = 50 maturation = 10 yield = -1 + product_icon = "mushroom5" + product_colour = "#7A5F20" + plant_colour = "#7A5F20" + plant_icon = "mushroom9" /datum/seed/mushroom/plump name = "plumphelmet" @@ -1217,14 +1248,28 @@ proc/populate_seed_list() display_name = "plump helmet mushrooms" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet) mutants = list("walkingmushroom","towercap") - packet_icon = "mycelium-plump" - plant_icon = "plump" chems = list("nutriment" = list(2,10)) - lifespan = 25 maturation = 8 yield = 4 potency = 0 + packet_icon = "mycelium-plump" + product_icon = "mushroom10" + product_colour = "#B57BB0" + plant_colour = "#9E4F9D" + plant_icon = "mushroom2" + +/datum/seed/mushroom/plump/walking + name = "walkingmushroom" + seed_name = "walking mushroom" + display_name = "walking mushrooms" + products = list(/mob/living/simple_animal/mushroom) + mutants = null + maturation = 5 + yield = 1 + packet_icon = "mycelium-walkingmushroom" + product_colour = "#FAC0F2" + plant_colour = "#C4B1C2" /datum/seed/mushroom/hallucinogenic name = "reishi" @@ -1232,14 +1277,16 @@ proc/populate_seed_list() display_name = "reishi" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi) mutants = list("libertycap","glowshroom") - packet_icon = "mycelium-reishi" - plant_icon = "reishi" chems = list("nutriment" = list(1,50), "psilocybin" = list(3,5)) maturation = 10 production = 5 yield = 4 potency = 15 - growth_stages = 4 + packet_icon = "mycelium-reishi" + product_icon = "mushroom11" + product_colour = "#FFB70F" + plant_colour = "#F58A18" + plant_icon = "mushroom6" /datum/seed/mushroom/hallucinogenic/strong name = "libertycap" @@ -1247,14 +1294,15 @@ proc/populate_seed_list() display_name = "liberty cap mushrooms" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap) mutants = null - packet_icon = "mycelium-liberty" - plant_icon = "liberty" chems = list("nutriment" = list(1), "stoxin" = list(3,3), "space_drugs" = list(1,25)) - lifespan = 25 production = 1 potency = 15 - growth_stages = 3 + packet_icon = "mycelium-liberty" + product_icon = "mushroom8" + product_colour = "#F2E550" + plant_colour = "#D1CA82" + plant_icon = "mushroom3" /datum/seed/mushroom/poison name = "amanita" @@ -1262,15 +1310,17 @@ proc/populate_seed_list() display_name = "fly amanita mushrooms" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita) mutants = list("destroyingangel","plastic") - packet_icon = "mycelium-amanita" - plant_icon = "amanita" chems = list("nutriment" = list(1), "amatoxin" = list(3,3), "psilocybin" = list(1,25)) - lifespan = 50 maturation = 10 production = 5 yield = 4 potency = 10 + packet_icon = "mycelium-amanita" + product_icon = "mushroom" + product_colour = "#FF4545" + plant_colour = "#F5F2D0" + plant_icon = "mushroom4" /datum/seed/mushroom/poison/death name = "destroyingangel" @@ -1278,13 +1328,15 @@ proc/populate_seed_list() display_name = "destroying angel mushrooms" mutants = null products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel) - packet_icon = "mycelium-angel" - plant_icon = "angel" chems = list("nutriment" = list(1,50), "amatoxin" = list(13,3), "psilocybin" = list(1,25)) - maturation = 12 yield = 2 potency = 35 + packet_icon = "mycelium-angel" + product_icon = "mushroom3" + product_colour = "#EDE8EA" + plant_colour = "#E6D8DD" + plant_icon = "mushroom5" /datum/seed/mushroom/towercap name = "towercap" @@ -1293,47 +1345,35 @@ proc/populate_seed_list() mutants = null products = list(/obj/item/weapon/grown/log) packet_icon = "mycelium-tower" - plant_icon = "towercap" - lifespan = 80 maturation = 15 + product_icon = "mushroom7" + product_colour = "#79A36D" + plant_colour = "#857F41" + plant_icon = "mushroom8" + /datum/seed/mushroom/glowshroom name = "glowshroom" seed_name = "glowshroom" display_name = "glowshrooms" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom) mutants = null - packet_icon = "mycelium-glowshroom" - plant_icon = "glowshroom" chems = list("radium" = list(1,20)) spread = 1 - lifespan = 120 maturation = 15 yield = 3 explosive = 1 splat_type = /obj/effect/glowshroom potency = 30 - growth_stages = 4 biolum = 1 biolum_colour = "#006622" - -/datum/seed/mushroom/walking - name = "walkingmushroom" - seed_name = "walking mushroom" - display_name = "walking mushrooms" - products = list(/mob/living/simple_animal/mushroom) - mutants = null - packet_icon = "mycelium-walkingmushroom" - plant_icon = "walkingmushroom" - chems = list("nutriment" = list(2,10)) - - lifespan = 30 - maturation = 5 - yield = 1 - potency = 0 - growth_stages = 3 + packet_icon = "mycelium-glowshroom" + product_icon = "mushroom2" + product_colour = "#DDFAB6" + plant_colour = "#EFFF8A" + plant_icon = "mushroom7" /datum/seed/mushroom/plastic name = "plastic" @@ -1341,15 +1381,17 @@ proc/populate_seed_list() display_name = "plastellium" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/plastellium) mutants = null - packet_icon = "mycelium-plast" - plant_icon = "plastellium" chems = list("plasticide" = list(1,10)) - lifespan = 15 maturation = 5 production = 6 yield = 6 potency = 20 + packet_icon = "mycelium-plast" + product_icon = "mushroom6" + product_colour = "#E6E6E6" + plant_colour = "#E6E6E6" + plant_icon = "mushroom10" //Flowers/varieties /datum/seed/flower @@ -1357,465 +1399,470 @@ proc/populate_seed_list() seed_name = "harebell" display_name = "harebells" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/harebell) - packet_icon = "seed-harebell" - plant_icon = "harebell" chems = list("nutriment" = list(1,20)) - lifespan = 100 maturation = 7 production = 1 yield = 2 - growth_stages = 4 + packet_icon = "seed-harebell" + product_icon = "flower5" + product_colour = "#C492D6" + plant_colour = "#6B8C5E" + plant_icon = "flower" /datum/seed/flower/poppy name = "poppies" seed_name = "poppy" display_name = "poppies" - packet_icon = "seed-poppy" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/poppy) - plant_icon = "poppy" chems = list("nutriment" = list(1,20), "bicaridine" = list(1,10)) - lifespan = 25 potency = 20 maturation = 8 production = 6 yield = 6 - growth_stages = 3 + packet_icon = "seed-poppy" + product_icon = "flower3" + product_colour = "#B33715" + plant_icon = "flower3" /datum/seed/flower/sunflower name = "sunflowers" seed_name = "sunflower" display_name = "sunflowers" - packet_icon = "seed-sunflower" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sunflower) - plant_icon = "sunflower" - lifespan = 25 maturation = 6 - growth_stages = 3 + packet_icon = "seed-sunflower" + product_icon = "flower2" + product_colour = "#FFF700" + plant_icon = "flower2" //Grapes/varieties /datum/seed/grapes name = "grapes" seed_name = "grape" display_name = "grapevines" - packet_icon = "seed-grapes" mutants = list("greengrapes") products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/grapes) - plant_icon = "grape" harvest_repeat = 1 chems = list("nutriment" = list(1,10), "sugar" = list(1,5)) - lifespan = 50 maturation = 3 production = 5 yield = 4 potency = 10 + packet_icon = "seed-grapes" + product_icon = "grapes" + product_colour = "#BB6AC4" + plant_colour = "#378F2E" + plant_icon = "grapes" /datum/seed/grapes/green name = "greengrapes" seed_name = "green grape" display_name = "green grapevines" - packet_icon = "seed-greengrapes" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/greengrapes) mutants = null - plant_icon = "greengrape" chems = list("nutriment" = list(1,10), "kelotane" = list(3,5)) + packet_icon = "seed-greengrapes" + product_colour = "42ED2F" //Everything else /datum/seed/peanuts name = "peanut" seed_name = "peanut" display_name = "peanut vines" - packet_icon = "seed-peanut" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/peanut) - plant_icon = "peanut" harvest_repeat = 1 chems = list("nutriment" = list(1,10)) - lifespan = 55 maturation = 6 production = 6 yield = 6 potency = 10 + packet_icon = "seed-peanut" + product_icon = "potato" + product_colour = "#96855D" + plant_icon = "bush2" /datum/seed/cabbage name = "cabbage" seed_name = "cabbage" display_name = "cabbages" - packet_icon = "seed-cabbage" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage) - plant_icon = "cabbage" harvest_repeat = 1 chems = list("nutriment" = list(1,10)) - lifespan = 50 maturation = 3 production = 5 yield = 4 potency = 10 - growth_stages = 1 - -/datum/seed/shand - name = "shand" - seed_name = "S'randar's hand" - display_name = "S'randar's hand leaves" - packet_icon = "seed-shand" - products = list(/obj/item/stack/medical/bruise_pack/tajaran) - plant_icon = "shand" - chems = list("bicaridine" = list(0,10)) - - lifespan = 50 - maturation = 3 - production = 5 - yield = 4 - potency = 10 - growth_stages = 3 - -/datum/seed/mtear - name = "mtear" - seed_name = "Messa's tear" - display_name = "Messa's tear leaves" - packet_icon = "seed-mtear" - products = list(/obj/item/stack/medical/ointment/tajaran) - plant_icon = "mtear" - chems = list("honey" = list(1,10), "kelotane" = list(3,5)) - - lifespan = 50 - maturation = 3 - production = 5 - yield = 4 - potency = 10 - growth_stages = 3 + packet_icon = "seed-cabbage" + product_icon = "cabbage" + product_colour = "#84BD82" + plant_colour = "#6D9C6B" + plant_icon = "vine2" /datum/seed/banana name = "banana" seed_name = "banana" display_name = "banana tree" - packet_icon = "seed-banana" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/banana) - plant_icon = "banana" harvest_repeat = 1 chems = list("banana" = list(1,10)) - lifespan = 50 maturation = 6 production = 6 yield = 3 + packet_icon = "seed-banana" + product_icon = "bananas" + product_colour = "#FFEC1F" + plant_colour = "#69AD50" + plant_icon = "tree4" /datum/seed/corn name = "corn" seed_name = "corn" display_name = "ears of corn" - packet_icon = "seed-corn" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/corn) - plant_icon = "corn" chems = list("nutriment" = list(1,10)) - lifespan = 25 maturation = 8 production = 6 yield = 3 potency = 20 - growth_stages = 3 + packet_icon = "seed-corn" + product_icon = "corn" + product_colour = "#FFF23B" + plant_colour = "#87C969" + plant_icon = "corn" /datum/seed/potato name = "potato" seed_name = "potato" display_name = "potatoes" - packet_icon = "seed-potato" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/potato) - plant_icon = "potato" chems = list("nutriment" = list(1,10)) produces_power = 1 - lifespan = 30 maturation = 10 production = 1 yield = 4 potency = 10 - growth_stages = 4 + packet_icon = "seed-potato" + product_icon = "potato" + product_colour = "#D4CAB4" + plant_icon = "bush2" /datum/seed/soybean name = "soybean" seed_name = "soybean" display_name = "soybeans" - packet_icon = "seed-soybean" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans) - plant_icon = "soybean" harvest_repeat = 1 chems = list("nutriment" = list(1,20)) - lifespan = 25 maturation = 4 production = 4 yield = 3 potency = 5 + packet_icon = "seed-soybean" + product_icon = "bean" + product_colour = "#EBE7C0" + plant_icon = "stalk4" /datum/seed/wheat name = "wheat" seed_name = "wheat" display_name = "wheat stalks" - packet_icon = "seed-wheat" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/wheat) - plant_icon = "wheat" chems = list("nutriment" = list(1,25)) - lifespan = 25 maturation = 6 production = 1 yield = 4 potency = 5 + packet_icon = "seed-wheat" + product_icon = "wheat" + product_colour = "#DBD37D" + plant_colour = "#BFAF82" + plant_icon = "stalk2" /datum/seed/rice name = "rice" seed_name = "rice" display_name = "rice stalks" - packet_icon = "seed-rice" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/ricestalk) - plant_icon = "rice" chems = list("nutriment" = list(1,25)) - lifespan = 25 maturation = 6 production = 1 yield = 4 potency = 5 - growth_stages = 4 + packet_icon = "seed-rice" + product_icon = "rice" + product_colour = "#D5E6D1" + plant_colour = "#8ED17D" + plant_icon = "stalk2" /datum/seed/carrots name = "carrot" seed_name = "carrot" display_name = "carrots" - packet_icon = "seed-carrot" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/carrot) - plant_icon = "carrot" chems = list("nutriment" = list(1,20), "imidazoline" = list(3,5)) - lifespan = 25 maturation = 10 production = 1 yield = 5 potency = 10 - growth_stages = 3 + packet_icon = "seed-carrot" + product_icon = "carrot" + product_colour = "#FFDB4A" + plant_icon = "carrot" /datum/seed/weeds name = "weeds" seed_name = "weed" display_name = "weeds" - packet_icon = "seed-ambrosiavulgaris" - plant_icon = "weeds" - lifespan = 100 maturation = 5 production = 1 yield = -1 potency = -1 - growth_stages = 4 immutable = -1 + packet_icon = "seed-ambrosiavulgaris" + product_icon = "flower4" + product_colour = "#FCEB2B" + plant_colour = "#59945A" + plant_icon = "bush6" /datum/seed/whitebeets name = "whitebeet" seed_name = "white-beet" display_name = "white-beets" - packet_icon = "seed-whitebeet" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet) - plant_icon = "whitebeet" chems = list("nutriment" = list(0,20), "sugar" = list(1,5)) - lifespan = 60 maturation = 6 production = 6 yield = 6 potency = 10 + packet_icon = "seed-whitebeet" + product_icon = "carrot2" + product_colour = "#EEF5B0" + plant_colour = "#4D8F53" + plant_icon = "carrot2" /datum/seed/sugarcane name = "sugarcane" seed_name = "sugarcane" display_name = "sugarcanes" - packet_icon = "seed-sugarcane" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane) - plant_icon = "sugarcane" harvest_repeat = 1 chems = list("sugar" = list(4,5)) - lifespan = 60 maturation = 3 production = 6 yield = 4 potency = 10 - growth_stages = 3 + packet_icon = "seed-sugarcane" + product_icon = "stalk" + product_colour = "#B4D6BD" + plant_colour = "#6BBD68" + plant_icon = "stalk4" /datum/seed/watermelon name = "watermelon" seed_name = "watermelon" display_name = "watermelon vine" - packet_icon = "seed-watermelon" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon) - plant_icon = "watermelon" harvest_repeat = 1 chems = list("nutriment" = list(1,6)) juicy = 1 - lifespan = 50 maturation = 6 production = 6 yield = 3 potency = 1 + packet_icon = "seed-watermelon" + product_icon = "vine" + product_colour = "#326B30" + plant_colour = "#257522" + plant_icon = "vine2" /datum/seed/pumpkin name = "pumpkin" seed_name = "pumpkin" display_name = "pumpkin vine" - packet_icon = "seed-pumpkin" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin) - plant_icon = "pumpkin" harvest_repeat = 1 chems = list("nutriment" = list(1,6)) - lifespan = 50 maturation = 6 production = 6 yield = 3 potency = 10 - growth_stages = 3 + packet_icon = "seed-pumpkin" + product_icon = "vine" + product_colour = "#B4D4B9" + plant_colour = "#BAE8C1" + plant_icon = "vine2" -/datum/seed/lime +/datum/seed/citrus name = "lime" seed_name = "lime" display_name = "lime trees" - packet_icon = "seed-lime" - products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/lime) - plant_icon = "lime" + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown) harvest_repeat = 1 chems = list("nutriment" = list(1,20)) juicy = 1 - lifespan = 55 maturation = 6 production = 6 yield = 4 potency = 15 + packet_icon = "seed-lime" + product_icon = "treefruit" + product_colour = "#3AF026" + plant_icon = "tree" -/datum/seed/lemon +/datum/seed/citrus/lemon name = "lemon" seed_name = "lemon" display_name = "lemon trees" - packet_icon = "seed-lemon" - products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/lemon) - plant_icon = "lemon" - harvest_repeat = 1 - chems = list("nutriment" = list(1,20)) produces_power = 1 - juicy = 1 + packet_icon = "seed-lemon" + product_colour = "#F0E226" - lifespan = 55 - maturation = 6 - production = 6 - yield = 4 - potency = 10 - -/datum/seed/orange +/datum/seed/citrus/orange name = "orange" seed_name = "orange" display_name = "orange trees" packet_icon = "seed-orange" - products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/orange) - plant_icon = "orange" - harvest_repeat = 1 - chems = list("nutriment" = list(1,20)) - juicy = 1 - - lifespan = 60 - maturation = 6 - production = 6 - yield = 5 - potency = 1 + product_colour = "#FFC20A" /datum/seed/grass name = "grass" seed_name = "grass" display_name = "grass" - packet_icon = "seed-grass" products = list(/obj/item/stack/tile/grass) - plant_icon = "grass" harvest_repeat = 1 - lifespan = 60 maturation = 2 production = 5 yield = 5 - growth_stages = 2 + packet_icon = "seed-grass" + product_icon = "grass" + product_colour = "#09FF00" + plant_colour = "#07D900" + plant_icon = "grass" /datum/seed/cocoa name = "cocoa" seed_name = "cacao" display_name = "cacao tree" - packet_icon = "seed-cocoapod" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod) - plant_icon = "cocoapod" harvest_repeat = 1 chems = list("nutriment" = list(1,10), "coco" = list(4,5)) - lifespan = 20 maturation = 5 production = 5 yield = 2 potency = 10 - growth_stages = 5 + packet_icon = "seed-cocoapod" + product_icon = "treefruit" + product_colour = "#CCA935" + plant_icon = "tree2" /datum/seed/cherries name = "cherry" seed_name = "cherry" seed_noun = "pits" display_name = "cherry tree" - packet_icon = "seed-cherry" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/cherries) - plant_icon = "cherry" harvest_repeat = 1 chems = list("nutriment" = list(1,15), "sugar" = list(1,15)) juicy = 1 - lifespan = 35 maturation = 5 production = 5 yield = 3 potency = 10 - growth_stages = 5 + packet_icon = "seed-cherry" + product_icon = "treefruit" + product_colour = "#8C0101" + plant_icon = "tree2" /datum/seed/kudzu name = "kudzu" seed_name = "kudzu" display_name = "kudzu vines" - packet_icon = "seed-kudzu" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod) - plant_icon = "kudzu" - product_colour = "#96D278" chems = list("nutriment" = list(1,50), "anti_toxin" = list(1,25)) - lifespan = 20 maturation = 6 production = 6 yield = 4 potency = 10 - growth_stages = 4 spread = 2 + packet_icon = "seed-kudzu" + product_icon = "treefruit" + product_colour = "#96D278" + plant_colour = "#6F7A63" + plant_icon = "vine2" /datum/seed/diona name = "diona" seed_name = "diona" seed_noun = "nodes" display_name = "replicant pods" - packet_icon = "seed-replicapod" products = list(/mob/living/carbon/alien/diona) - plant_icon = "replicapod" product_requires_player = 1 immutable = 1 - lifespan = 50 endurance = 8 maturation = 5 production = 10 yield = 1 potency = 30 + packet_icon = "seed-replicapod" + product_icon = "diona" + product_colour = "#799957" + plant_colour = "#66804B" + plant_icon = "alien4" + +/datum/seed/shand + name = "shand" + seed_name = "S'randar's hand" + display_name = "S'randar's hand leaves" + products = list(/obj/item/stack/medical/bruise_pack/tajaran) + chems = list("bicaridine" = list(0,10)) + lifespan = 50 + maturation = 3 + production = 5 + yield = 4 + potency = 10 + packet_icon = "seed-shand" + product_icon = "alien3" + product_colour = "#378C61" + plant_colour = "#378C61" + plant_icon = "tree5" + +/datum/seed/mtear + name = "mtear" + seed_name = "Messa's tear" + display_name = "Messa's tear leaves" + products = list(/obj/item/stack/medical/ointment/tajaran) + chems = list("honey" = list(1,10), "kelotane" = list(3,5)) + lifespan = 50 + maturation = 3 + production = 5 + yield = 4 + potency = 10 + packet_icon = "seed-mtear" + product_icon = "alien4" + product_colour = "#4CC5C7" + plant_colour = "#4CC789" + plant_icon = "bush7" \ No newline at end of file diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 725f51ebca..7ffbb0d236 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -1,7 +1,7 @@ /obj/item/weapon/disk/botany name = "flora data disk" desc = "A small disk used for carrying data on plant genetics." - icon = 'icons/obj/hydroponics.dmi' + icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "disk" w_class = 1.0 @@ -33,7 +33,7 @@ new /obj/item/weapon/disk/botany(src) /obj/machinery/botany - icon = 'icons/obj/hydroponics.dmi' + icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "hydrotray3" density = 1 anchored = 1 @@ -96,7 +96,7 @@ if(istype(W,/obj/item/weapon/screwdriver)) open = !open - user << "\blue You [open ? "open" : "close"] the maintenance panel." + user << "You [open ? "open" : "close"] the maintenance panel." return if(open) diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/vines.dm index d97fc91dc1..f9334dc265 100644 --- a/code/modules/hydroponics/vines.dm +++ b/code/modules/hydroponics/vines.dm @@ -132,13 +132,13 @@ lastproduce = age if(harvest) - var/image/fruit_overlay = image('icons/obj/hydroponics.dmi',"") + var/image/fruit_overlay = image('icons/obj/hydroponics_vines.dmi',"") if(seed.product_colour) fruit_overlay.color = seed.product_colour overlays += fruit_overlay if(seed.flowers) - var/image/flower_overlay = image('icons/obj/hydroponics.dmi',"[seed.flower_icon]") + var/image/flower_overlay = image('icons/obj/hydroponics_vines.dmi',"[seed.flower_icon]") if(seed.flower_colour) flower_overlay.color = seed.flower_colour overlays += flower_overlay diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index cc9778eb4f..d76d7037c0 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -237,7 +237,7 @@ /obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie name = "Plant-B-Gone" desc = "Kills those pesky weeds!" - icon = 'icons/obj/hydroponics.dmi' + icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "plantbgone" item_state = "plantbgone" volume = 100 diff --git a/icons/obj/hydroponics_growing.dmi b/icons/obj/hydroponics_growing.dmi index 936384a19f894b5a8f5478ed60b99663daf2b1bb..d387557fc503d1deceb188edf024b9409e6b4b14 100644 GIT binary patch delta 261 zcmV+g0s8*z;{)yE1CS&EHIXGk1p3Y=`H^dy0nd{L0o7njllvJ!cyV$!1DJk51BiV7 zk6$3T3b{1_gfisT1Q6@D zQD67PDl^Y_(AS2h``XZSUmKbgmwW~y%L9{>I|8tO!S3oo)X+muO{WjuVi`vtmMCndKRxAS8;uREB*jA=dpC`^%hnD03ZNK LL_t)uX#<1q`^J0@ delta 261 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 M07*qoM6N<$f=q|2ga7~l delta 5476 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 atN#Z~ssFBtq8j1=0000gQ From 9dac693da16f9bdd8bb5e7d852e2217b960b723d Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 28 Jan 2015 21:56:46 +1030 Subject: [PATCH 14/90] Deleted a couple of accidental includes. --- icons/obj/hydroponics_growing.png | Bin 64190 -> 0 bytes icons/obj/hydroponics_product.png | Bin 13166 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 icons/obj/hydroponics_growing.png delete mode 100644 icons/obj/hydroponics_product.png diff --git a/icons/obj/hydroponics_growing.png b/icons/obj/hydroponics_growing.png deleted file mode 100644 index 27ade12e281d400e43688d200653726396cc45dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64190 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⩔lS1p2<_IlWIjj3?we*AuJQejZJb&UlE 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 From e5935e01f17c148e701d5c85c3464a6f341f854c Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 28 Jan 2015 21:59:45 +1030 Subject: [PATCH 15/90] Span classes. --- code/modules/hydroponics/hydro_tray.dm | 20 +++++++++---------- code/modules/hydroponics/seed_mobs.dm | 2 +- .../reagent_containers/food/snacks/grown.dm | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 6970ac0615..cf555ba5e0 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -536,7 +536,7 @@ var/global/list/plant_icon_cache = list() pestlevel = 0 sampled = 0 update_icon() - visible_message("\blue [src] has been overtaken by [seed.display_name].") + visible_message("[src] has been overtaken by [seed.display_name].") return @@ -593,7 +593,7 @@ var/global/list/plant_icon_cache = list() weedlevel = 0 update_icon() - visible_message("\red The \blue [previous_plant] \red has suddenly mutated into \blue [seed.display_name]!") + visible_message("The [previous_plant] has suddenly mutated into [seed.display_name]!") return @@ -682,16 +682,16 @@ var/global/list/plant_icon_cache = list() update_icon() else - user << "\red \The [src] already has seeds in it!" + user << "\The [src] already has seeds in it!" else if (istype(O, /obj/item/weapon/minihoe)) // The minihoe if(weedlevel > 0) - user.visible_message("\red [user] starts uprooting the weeds.", "\red You remove the weeds from the [src].") + user.visible_message("[user] starts uprooting the weeds.", "You remove the weeds from the [src].") weedlevel = 0 update_icon() else - user << "\red This plot is completely devoid of weeds. It doesn't need uprooting." + user << "This plot is completely devoid of weeds. It doesn't need uprooting." else if (istype(O, /obj/item/weapon/storage/bag/plants)) @@ -730,7 +730,7 @@ var/global/list/plant_icon_cache = list() else if(istype(O, /obj/item/apiary)) if(seed) - user << "\red [src] is already occupied!" + user << "[src] is already occupied!" else user.drop_item() del(O) @@ -762,17 +762,17 @@ var/global/list/plant_icon_cache = list() else if(seed && !dead) - usr << "[src] has \blue [seed.display_name] \black planted." + usr << "[src] has [seed.display_name] planted." if(health <= (seed.endurance / 2)) - usr << "The plant looks \red unhealthy." + usr << "The plant looks unhealthy." else usr << "[src] is empty." usr << "Water: [round(waterlevel,0.1)]/100" usr << "Nutrient: [round(nutrilevel,0.1)]/10" if(weedlevel >= 5) - usr << "[src] is \red filled with weeds!" + usr << "[src] is filled with weeds!" if(pestlevel >= 5) - usr << "[src] is \red filled with tiny worms!" + usr << "[src] is filled with tiny worms!" if(!istype(src,/obj/machinery/portable_atmospherics/hydroponics/soil)) diff --git a/code/modules/hydroponics/seed_mobs.dm b/code/modules/hydroponics/seed_mobs.dm index 9fe3702eac..09553c7a1d 100644 --- a/code/modules/hydroponics/seed_mobs.dm +++ b/code/modules/hydroponics/seed_mobs.dm @@ -14,7 +14,7 @@ if(!host.ckey && !host.client) host.death() // This seems redundant, but a lot of mobs don't host.stat = 2 // handle death() properly. Better safe than etc. - host.visible_message("\red [host] is malformed and unable to survive. It expires pitifully, leaving behind some seeds.") + host.visible_message("[host] is malformed and unable to survive. It expires pitifully, leaving behind some seeds.") var/total_yield = rand(1,3) for(var/j = 0;j<=total_yield;j++) diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index c49f38c434..12bb705903 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -380,7 +380,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/orange name = "orange" - desc = "It's an tangy fruit." + desc = "It's a tangy fruit." icon_state = "orange" potency = 20 filling_color = "#FAAD28" @@ -436,7 +436,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato name = "blood-tomato" - desc = "So bloody...so...very...bloody....AHHHH!!!!" + desc = "So juicy." icon_state = "bloodtomato" potency = 10 filling_color = "#FF0000" From b3e31bfa14d40dd6b4c32db9160b88153295b1d2 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 28 Jan 2015 23:54:41 +1030 Subject: [PATCH 16/90] Reduced darkness of hydro icons. --- code/modules/hydroponics/seed_datums.dm | 3 ++- icons/obj/hydroponics_growing.dmi | Bin 61933 -> 62016 bytes icons/obj/hydroponics_products.dmi | Bin 5265 -> 4343 bytes 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 07d9af4600..36c5537342 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -13,7 +13,8 @@ var/global/list/plant_sprites = list( "stalk" = 4, "stalk2" = 6, "vine" = 2, "vine2" = 4, "carrot" = 4, "carrot2" = 6, - "ambrosia" = 6 + "ambrosia" = 6, + "corn" = 4 ) var/global/list/plant_product_sprites = list( diff --git a/icons/obj/hydroponics_growing.dmi b/icons/obj/hydroponics_growing.dmi index d387557fc503d1deceb188edf024b9409e6b4b14..e3b5e8df9517c132e67e1df9a458bc74898adc90 100644 GIT binary patch literal 62016 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

CncmCS|BgIC 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 YJlpt=4qTiJq2NDVO#_Yl>ehk(4{TA-9smFU diff --git a/icons/obj/hydroponics_products.dmi b/icons/obj/hydroponics_products.dmi index 333f04f01f672b493e07d32923f0199312b83fea..0af08a1bf7d65b269f70f36b428b09306f77b844 100644 GIT binary patch literal 4343 zcmVx>c6N4ha&nQ8kz8C{hlhuBbabJip_!SPnwpxAkB@wOd>9xQ zprD{-Wo0`%J6~U4ot>SvwY93Ms=d9vaBy(Eyu8K5#jmfg&CShWVPUeevbeaou&}VH zsj1S^(t3J&OG`_~$H#zxfJaA1NJvP(zrQ*7ZYQr!L2k>+96rsJ3rtLm@*k!bg9@cko5+ycu>>xW0d;6K0 z9CjFgk&6UBa4ZRVTYX$Uuea*_buAyn!FX4_SI4JaSuCcDIwgmFS!gnYjyVZYMM~jD zSwn797M9U)wkm$K_;V9wDZL$AW1I$u^ME(q$LYZsGRI-oY-{>!<(!pK~*k z>`1cYS00d@ej%~t*pj}P(a5%J!`Ms}1dT?$Et}fpg{lz%AYz?On=M2O!{%CRt=Vej zuL}TmiV#{~U$4C_@ih>!4q@18wVKVfH3VG4*|nTiLB4BgePd%ImvD2_`Bfum2*99n zvCU>kge?KMR>)VMaDAig1mtX+TTVv8YjhB?vIUzQj`+egX+-OK01-!nX#m|8+>*Wl zZop2XLzvaeCBm>3u7yNM3EN6keuSUm<<$18S2;ek&T>2yWY%`XfB?~i9I(--;Hc!E zYt#nA7TORQTj;Wu;_(%6#5@ab?{v4THxed16yq080R7Y=3NanBU?AhEYRTPQePulv zwzy+b48<1_u7xa%2qgf!J9~(@U!E%!dFbXQY;C#nZZt#_L_p$$hC;Y|pb_rw{-mXO zgb@-=5L;u|v>+ycZa&zCtlLFWR5(6{NG^l$=st!S-=>ibb6o@RS5bd%9H61oF z%!JLbi61z_BPl1e1G1ccunS%MgKjM+Wgx}2bRR_^+JoUf3Y-ndRn=(olabZ#p_&S@ z6=GLU-YHrmS<%)E2`|d4;t|rtT{x-*$l*4#KVO6Qe~1_W$HJW%il-Xjfw7I2M!u%- zPi{WsYdLpkq5{B}3>Y7|8=-SgW)rxRZi+yoh&v?k*b)T7k`3xFv^Z*7P*q3)l>c!m zq9sJbfbxgsjS$?B$4D3-+xP?-_Vf-y44uG@h-GOW%G)0CBnFeN3T53y;9*Efyb{}D zXz3_8Ap(m2(52&}qhs6h_4WpzN6{3+9cXrAc(ON%)NJ(XQ`1$(LTi9R?x7Z z8&CwC=dvOvHDuO>r?rJT5pRPT7fm;KzKCjJOzyquwYIuir z>$yl}ba4fl!fH9Y39}EBiG_2@=wb;nV5yIuvUK#5q@$BxIG}8S*@jry1T#ImwGC=p zzLZ@zu1v3x38Jkj_reo|MLq5i^zf@*$XFVLBI()ZNz7IF~?}nWBZJv)1*$P&)u92aj;PE z2@4V!=Mxq@<`y%h3t(0oqXX zKf*_euTwscfsiuuas?sLQm}dMns|A6d3kwN)0}r93hv68!3o!*t>bwTCbuOx>rnK4 zxia#;?)RrTt|%(|XIcNB9d&@hU!X)Gxm)*Pj=Q;_Drbf6RD=ah;4RD+upT-S?>7K$P1%rx|*@X zFj-Ih20eWvW!pUS7x3BZmY6H+s9C@|J-Gx-x9J`Cj2zOW!)|2-aC+)IX=!m(qa_yZ z$v9*J!nPA|Iw2o_*)yBaq`qoKnp*Z_Y8y=b@*Iwo6=IXOVgbo!r>AXvIS3~-mM$XA zqhMFcs-C?|QxlqJrv6&797rvgzvX_No7nRt?8gI3e#x?8u^Mrz$n9YoQjP(qQXyb= zXQn1$_6xx@5S-aQekS52JN6HfHOwt4$5aHzW7Mm_giy48-+H}>Fv8k7rmzS59mzS59*Z-UF=xX%bb(pJ0 zGdj2Wa<$}q#kGf}_E3mkxP6SXdDTz~rJkY$cn255$yXPc9@;l6k#V6l7x4=q zT=+hm4EwcF2@+gj0;V98dAhzIRRny+KVS3D50>wv{-rsf3Gh*zL_Zak`GxqdU^o

;>HXsqcmh->zPxZlv5x{SJ*ntM7WeJq%B;y45@s5zLdKYhp4BlS! zcnY1=R+G{7WhoRJcHKC7&Jr{3F@CRv`ZQHR(&jL2IlO*-fr%S{aWdL-1)th{m7!>w z?e-^J1{Or@uSZBY8eJ+S6!~PjVlBK^MEF_qG4?yY4-?39ePFw%+*FYa^pIV@Tzx_Z zMGr+F{)tZd>FP_bm$bvtC5O7^`y)swG4<-JhP2u*@4^8#@mxMVU~q7o65eqmGB#ju zwh?ffVZHdROF#XCm-Pp}Pg)ZT3XO$>4q?<85j>HR1!;;u1uY#8B_AfQX`5@20o64F zs505yR_WlMQ>;TwcaKNHlb`Z%26`!-S1~(+t=KP_Nx>abzNZVwOX(YuE*V28Ju zzQaY6r(~WZ%x5&;zi_^BhJe4aoi~h|GA&LYdDJ^{jyA-}P$ttwYK5isFR#gtfROC+ zvTD?rc&Uzh$hsgL@|M2n@=uoDBl>S{Ek*&R@%s)tLt=3k?$?s#4u{z;L0vYQ)Cs+l zx0h?)9!)nbRQij!8svcIE{2rk=cSijcMmr=Dv_C9cHKRq0PbArW!IfJpRv7t zXHPG^?m)aIfO`7n>AvDK%aDa$cdm39H6C*wvh;rI`Y-KY$$hzcSo`~J*}R|drRlzl zuPU{><8r3s;;YXa?ajYk!!_@3e!CubPQ%A!!N;xteEjxT>+R#CeFIZZ-KQ?6OgJk8 z<|{5fE8l28yzhi|!aq;pG2|y&AH_+kFAsmbzv-axi&7PM8axdK^pOG%2KR&ea^@b5Hc=#n$?0HG|MV_kX!8Kq( z2*QxDTm+ANQQ11SZy>yx`~q#b`DPmo&Qp31Vd6P?v8U0Cl=gV3O=zyArDMVO2$P)o zd=^S`w`bzTy#3itjj9# zPvN6%#(W9aG-%*Vlv0pbaSjeT{c#qU7rj@`QXvcG(E>9PM%BVh&YAMef0?QLlc8(& z_mC_3m`{kAXbjroj6tlAYc-!KRjmp+fbg3+7MfjBBuAf6rILnUX5AF5vx#&-BWH8q zug1M;lOi46pLtd}XSBz@0!+eKjpqZ-P!?mVxAv&Z%sH9Pd6Ibg5V)F^n`o`dWhUeN zXp%oPm+;JO;6UVQwz^7QTCPUwtvTvek}t2#O|L2L2u)*V)gp~qFqSXDdCajI67uf8 zvv=}~=exKlTtzkJc+$4ij@(jztr5DSE@A@*wWtZJ3DH_ zblI>vovQD)*i`xGR_PToPd2qLuB#Fz%QcvBd|UQFK7Yq6XYq`r+cgI;)9e;`s$vS2 z?ijTlkmX?W^72|4t$ff~k}ji;#^NCO#UJt1RlP&R<@(imCQDP2?6h}>czJu?yw zvTP#^_RwHmgu*xD4oVhWyaZKVvjELn~6kIwh5KRC!vnSt$nI zF5Dwai$aQeZd%SaCySRz=_6V7h1Qq}!wQk+rAW3wqaoTsszlOdQo7f@ntacD{lh}E z`hfP!mX{o`m2kXjyapg8R*P`u0qMyW%74iohpPr?xmI$; l05e*lZo|vV%gbwZ^*>xF`|kmLW*h(j002ovPDHLkV1oV3Yuo?; literal 5265 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 X_UW#Jb?bNh00000NkvXXu0mjfo{kV# From 983ca55c9d31eaae9228c2f6e21f9947e2ae7ded Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Thu, 29 Jan 2015 01:05:16 +1030 Subject: [PATCH 17/90] Autopopulates the plant and product icon lists at roundstart. Should make missing plant icons obnoxiously easy to spot due to a world output in bright red. --- code/modules/hydroponics/seed_datums.dm | 67 +++++++------------ .../reagent_containers/food/snacks.dm | 2 +- 2 files changed, 24 insertions(+), 45 deletions(-) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 36c5537342..f01aae7f42 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -2,49 +2,8 @@ var/global/list/seed_types = list() // A list of all seed data. var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. // Index is the root icon_state, value is the number of states. -var/global/list/plant_sprites = list( - "bush" = 6, "bush2" = 6, "bush3" = 6, "bush4" = 6, "bush5" = 5, "bush6" = 4, "bush7" = 4, - "mushroom" = 3, "mushroom2" = 3, "mushroom3" = 3, "mushroom4" = 3, "mushroom5" = 3, - "mushroom6" = 4, "mushroom7" = 4, "mushroom8" = 3, "mushroom9" = 3, "mushroom10" = 3, - "tree" = 6, "tree2" = 5, "tree3" = 5, "tree4" = 6, "tree5" = 6, - "alien" = 4, "alien2" = 4, "alien3" = 3, "alien4" = 6, - "flower" = 4, "flower2" = 3, "flower3" = 3, - "grass" = 2, "grass2" = 4, - "stalk" = 4, "stalk2" = 6, - "vine" = 2, "vine2" = 4, - "carrot" = 4, "carrot2" = 6, - "ambrosia" = 6, - "corn" = 4 - ) - -var/global/list/plant_product_sprites = list( - "berry", - "chili", - "eggplant", - "bean", - "tomato", - "wheat", - "nuts", - "nettles", - "bananas", - "treefruit", - "cash", - "rice", - "potato", - "corn", - "cabbage", - "vine", - "diona", - "stalk", - "ambrosia", - "unknown", - "carrot", "carrot2", - "grass", "grass2", - "flowers", "flower2", "flower3", "flower4", "flower5", - "alien", "alien2", "alien3", "alien4", "alien5", - "mushroom", "mushroom2", "mushroom3", "mushroom4", "mushroom5", - "mushroom6", "mushroom7", "mushroom8", "mushroom9", "mushroom10", "mushroom11" - ) +var/global/list/plant_sprites = list() +var/global/list/plant_product_sprites = list() // Debug for testing seed genes. /client/proc/show_plant_genes() @@ -68,6 +27,26 @@ var/global/list/plant_product_sprites = list( proc/populate_seed_list() + // Build the icon lists. + for(var/icostate in icon_states('icons/obj/hydroponics_growing.dmi')) + var/split = findtext(icostate,"-") + if(!split) + // invalid icon_state + continue + + var/ikey = copytext(icostate,(split+1)) + if(ikey == "dead") + // don't count dead icons + continue + ikey = text2num(ikey) + var/base = copytext(icostate,1,split) + + if(!(plant_sprites[base]) || (plant_sprites[base][user] nibbles away at the [src].","You nibble away at the [src].") + user.visible_message("[user] nibbles away at \the [src].","You nibble away at \the [src].") bitecount++ if(reagents && user.reagents) reagents.trans_to_ingest(user, bitesize) From 06f26604d14550730ca13342c47e170c1001948c Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Thu, 29 Jan 2015 01:42:42 +1030 Subject: [PATCH 18/90] Xenoflora is now a sub-department of Xenobio rather than Science. --- code/game/jobs/job/science.dm | 7 +- code/modules/hydroponics/seed_datums.dm | 29 ++--- maps/exodus-1.dmm | 137 ++++++++++++------------ 3 files changed, 89 insertions(+), 84 deletions(-) diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index e387e0d4be..c583228064 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -42,13 +42,13 @@ flag = SCIENTIST department_flag = MEDSCI faction = "Station" - total_positions = 6 + total_positions = 5 spawn_positions = 3 supervisors = "the research director" selection_color = "#ffeeff" access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch) minimal_access = list(access_tox, access_tox_storage, access_research, access_xenoarch) - alt_titles = list("Xenoarcheologist", "Anomalist", "Phoron Researcher", "Xenobotanist") + alt_titles = list("Xenoarcheologist", "Anomalist", "Phoron Researcher") minimal_player_age = 14 @@ -74,12 +74,13 @@ flag = XENOBIOLOGIST department_flag = MEDSCI faction = "Station" - total_positions = 2 + total_positions = 3 spawn_positions = 2 supervisors = "the research director" selection_color = "#ffeeff" access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology) minimal_access = list(access_research, access_xenobiology) + alt_titles = list("Xenobotanist") minimal_player_age = 14 diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index f01aae7f42..875583f92a 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -128,9 +128,9 @@ proc/populate_seed_list() // Cosmetics. var/plant_icon // Icon to use for the plant growing in the tray. - var/plant_colour = "#4BC445" // Colour of the plant icon. - var/product_icon // Base to use for fruit coming from this plant (if a vine). - var/product_colour // Colour to apply to product base (if a vine). + var/plant_colour = "#6EF86A" // Colour of the plant icon. + var/product_icon // Icon to use for fruit coming from this plant. + var/product_colour // Colour to apply to product icon. var/packet_icon = "seed" // Icon to use for physical seed packet item. var/biolum // Plant is bioluminescent. var/biolum_colour // The colour of the plant's radiance. @@ -156,18 +156,21 @@ proc/populate_seed_list() var/datum/organ/external/affecting = target.get_organ(target_limb) var/damage = 0 - if(carnivorous == 2) - if(affecting) - target << "\The [fruit]'s thorns pierce your [affecting.display_name] greedily!" + if(carnivorous) + if(carnivorous == 2) + if(affecting) + target << "\The [fruit]'s thorns pierce your [affecting.display_name] greedily!" + else + target << "\The [fruit]'s thorns pierce your flesh greedily!" + damage = potency/2 else - target << "\The [fruit]'s thorns pierce your flesh greedily!" - damage = potency/2 + if(affecting) + target << "\The [fruit]'s thorns dig deeply into your [affecting.display_name]!" + else + target << "\The [fruit]'s thorns dig deeply into your flesh!" + damage = potency/5 else - if(affecting) - target << "\The [fruit]'s thorns dig deeply into your [affecting.display_name]!" - else - target << "\The [fruit]'s thorns dig deeply into your flesh!" - damage = potency/5 + return if(affecting) affecting.take_damage(damage, 0) diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index a8252f6e3b..452c5b61ea 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -372,9 +372,9 @@ "ahh" = (/obj/machinery/photocopier,/obj/machinery/newscaster/security_unit{pixel_x = -30; pixel_y = 30},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "ahi" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/camera{c_tag = "Security Warden Office"; dir = 2; network = list("SS13")},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "ahj" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) -"ahk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig) -"ahl" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access_txt = "1"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig) -"ahm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig) +"ahk" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{department = "Warden's Office"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) +"ahl" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/item/weapon/stamp/denied{pixel_x = 5},/obj/item/weapon/stamp,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) +"ahm" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/item/weapon/paper{info = "\[center]\[Large]\[b]NSS Exodus\[/b]\[/large]\[br] \[small]Armoury Inventory\[/small]\[/center] \[hr] \[hr] \[br] \[b]Weaponry\[/b]\[br] \[field] Energy Gun(s)\[br] \[field] Laser Gun(s)\[br] \[field] Ion Rifle(s)\[br] \[field] Combat Shotgun(s) \[hr] \[b]Armour\[/b]\[br] \[field] Bulletproof Vest(s)\[br] \[field] Abalative Vest(s)\[br] \[field] Biohazard Suit(s)\[br] \[field] Bomb Suit(s) \[hr] \[b]Auxiliary Equipment\[/b]\[br] \[field] Gasmask(s)\[br] \[field] box(es) of Flashbangs\[br] \[field] box(es) of Handcuffs\[br] \[field] box(es) of R.O.B.U.S.T. Cartridges \[hr] \[b]Riot Equipment\[/b]\[br] \[field] Stun Baton(s)\[br] \[field] Riot Suit(s)\[br] \[field] Riot Shield(s) \[hr] \[b]Tactical Equipment\[/b]\[br] \[field] Tactical Armour(s)\[br] \[field] Tactical Helmet(s)\[br] \[field] Tactical Jumpsuit(s)\[br] \[field] Green Balaclava(s)\[br] \[field] Tactical HUD(s)\[br] \[field] Combat Belt(s)\[br] \[field] Black Glove(s)\[br] \[field] Jackboot(s) \[hr] \[b]Implants\[/b]\[br] \[field] Tracking Implant Box(es)\[br] \[field] Chemical Implant Box(es) \[hr] \[b]Defense Systems\[/b]\[br] \[field] Deployable Barrier(s)\[br] \[field] Portable Flasher(s) \[hr] \[b]Other\[/b]\[br] \[field] Holobadge Box(es) \[hr] \[b]\[center]Warden's's Signature:\[/b] \[field]\[/center] \[hr]"; name = "Armory Inventory"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "ahn" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/security/main) "aho" = (/obj/structure/flora/pottedplant{tag = "icon-plant-22"; icon_state = "plant-22"},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main) "ahp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos) @@ -431,7 +431,7 @@ "aio" = (/obj/machinery/camera{c_tag = "Security Processing"; dir = 4; network = list("SS13")},/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/turf/simulated/floor,/area/security/brig) "aip" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/security/brig) "aiq" = (/obj/structure/table,/turf/simulated/floor,/area/security/brig) -"air" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig) +"air" = (/obj/machinery/computer/secure_data,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "ais" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Warden"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "ait" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "aiu" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) @@ -457,8 +457,8 @@ "aiO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/brig) "aiP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/brig) "aiQ" = (/obj/machinery/computer/secure_data,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/security/brig) -"aiR" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) -"aiS" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/security{pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) +"aiR" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/security{pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) +"aiS" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "aiT" = (/obj/machinery/computer/prisoner,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "aiU" = (/obj/structure/table/rack,/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/weapon/wrench,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "aiV" = (/obj/structure/closet/secure_closet/warden,/obj/item/device/megaphone,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1475; listening = 1; name = "Station Intercom (Security)"; pixel_x = 30; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) @@ -483,9 +483,9 @@ "ajo" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/security{name = "Evidence Storage"; req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/brig) "ajp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig) "ajq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig) -"ajr" = (/obj/machinery/computer/secure_data,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) -"ajs" = (/obj/machinery/camera{c_tag = "Common Brig Northwest"; dir = 4; network = list("SS13","Prison")},/obj/machinery/computer/arcade,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/prison) -"ajt" = (/obj/machinery/door/airlock/glass_security{id_tag = "prisonentry"; name = "Brig Entry"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison) +"ajr" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access_txt = "1"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig) +"ajs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig) +"ajt" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig) "aju" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig) "ajv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig) "ajw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig) @@ -693,7 +693,7 @@ "anq" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard) "anr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/disposaloutlet,/turf/simulated/wall,/area/security/prison) "ans" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard) -"ant" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/item/weapon/paper{info = "\[center]\[Large]\[b]NSS Exodus\[/b]\[/large]\[br] \[small]Armoury Inventory\[/small]\[/center] \[hr] \[hr] \[br] \[b]Weaponry\[/b]\[br] \[field] Energy Gun(s)\[br] \[field] Laser Gun(s)\[br] \[field] Ion Rifle(s)\[br] \[field] Combat Shotgun(s) \[hr] \[b]Armour\[/b]\[br] \[field] Bulletproof Vest(s)\[br] \[field] Abalative Vest(s)\[br] \[field] Biohazard Suit(s)\[br] \[field] Bomb Suit(s) \[hr] \[b]Auxiliary Equipment\[/b]\[br] \[field] Gasmask(s)\[br] \[field] box(es) of Flashbangs\[br] \[field] box(es) of Handcuffs\[br] \[field] box(es) of R.O.B.U.S.T. Cartridges \[hr] \[b]Riot Equipment\[/b]\[br] \[field] Stun Baton(s)\[br] \[field] Riot Suit(s)\[br] \[field] Riot Shield(s) \[hr] \[b]Tactical Equipment\[/b]\[br] \[field] Tactical Armour(s)\[br] \[field] Tactical Helmet(s)\[br] \[field] Tactical Jumpsuit(s)\[br] \[field] Green Balaclava(s)\[br] \[field] Tactical HUD(s)\[br] \[field] Combat Belt(s)\[br] \[field] Black Glove(s)\[br] \[field] Jackboot(s) \[hr] \[b]Implants\[/b]\[br] \[field] Tracking Implant Box(es)\[br] \[field] Chemical Implant Box(es) \[hr] \[b]Defense Systems\[/b]\[br] \[field] Deployable Barrier(s)\[br] \[field] Portable Flasher(s) \[hr] \[b]Other\[/b]\[br] \[field] Holobadge Box(es) \[hr] \[b]\[center]Warden's's Signature:\[/b] \[field]\[/center] \[hr]"; name = "Armory Inventory"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) +"ant" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig) "anu" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard) "anv" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/security/prison) "anw" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard) @@ -735,7 +735,7 @@ "aog" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/security/prison) "aoh" = (/obj/machinery/camera{c_tag = "Brig Cell 2"; dir = 2; network = list("SS13","Prison")},/obj/structure/closet/secure_closet/brig{id = "Cell 2"; name = "Cell 2 Locker"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison) "aoi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison) -"aoj" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/item/weapon/stamp/denied{pixel_x = 5},/obj/item/weapon/stamp,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) +"aoj" = (/obj/machinery/door/airlock/glass_security{id_tag = "prisonentry"; name = "Brig Entry"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison) "aok" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/prison) "aol" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/security/prison) "aom" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southleft,/turf/simulated/floor,/area/security/prison) @@ -1147,7 +1147,7 @@ "awc" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets{pixel_x = -3; pixel_y = -3},/turf/simulated/floor,/area/security/prison) "awd" = (/obj/structure/table,/obj/item/weapon/minihoe,/obj/item/device/analyzer/plant_analyzer,/obj/item/clothing/head/greenbandana,/turf/simulated/floor,/area/security/prison) "awe" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor,/area/security/prison) -"awf" = (/obj/machinery/seed_storage/garden,/turf/simulated/floor,/area/hydroponics) +"awf" = (/obj/machinery/camera{c_tag = "Common Brig Northwest"; dir = 4; network = list("SS13","Prison")},/obj/machinery/computer/arcade,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/prison) "awg" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/simulated/floor,/area/security/prison) "awh" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/item/clothing/head/soft/orange,/obj/item/clothing/shoes/sandal,/turf/simulated/floor,/area/security/prison) "awi" = (/obj/machinery/light,/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor,/area/security/prison) @@ -2198,7 +2198,7 @@ "aQn" = (/turf/simulated/floor,/area/hydroponics) "aQo" = (/obj/structure/disposalpipe/segment,/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "green"; dir = 4},/area/hydroponics) "aQp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hydroponics) -"aQq" = (/obj/machinery/seed_storage/garden,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics) +"aQq" = (/obj/machinery/seed_storage/garden,/turf/simulated/floor,/area/security/prison) "aQr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hydroponics) "aQs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hydroponics) "aQt" = (/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/hydroponics) @@ -2262,7 +2262,7 @@ "aRz" = (/obj/machinery/biogenerator,/turf/simulated/floor,/area/hydroponics) "aRA" = (/obj/machinery/seed_extractor,/turf/simulated/floor,/area/hydroponics) "aRB" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor,/area/hydroponics) -"aRC" = (/obj/machinery/seed_storage/garden,/turf/simulated/floor,/area/security/prison) +"aRC" = (/obj/machinery/seed_storage/garden,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics) "aRD" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/hydroponics) "aRE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hydroponics) "aRF" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics) @@ -3329,7 +3329,7 @@ "bma" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{dir = 2; icon_state = "purple"},/area/hallway/primary/starboard) "bmb" = (/turf/simulated/floor{dir = 6; icon_state = "purple"},/area/hallway/primary/starboard) "bmc" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/exit) -"bmd" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{department = "Warden's Office"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) +"bmd" = (/obj/machinery/seed_storage/garden,/turf/simulated/floor,/area/hydroponics) "bme" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall,/area/hallway/secondary/exit) "bmf" = (/obj/machinery/light{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/secondary/entry/aft) "bmg" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/turf/simulated/floor/plating,/area/maintenance/disposal) @@ -3570,9 +3570,9 @@ "bqH" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "bqI" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "bqJ" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) -"bqK" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"bqK" = (/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_y = 22; req_access_txt = "10"},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/plating,/area/engine/engine_room) "bqL" = (/turf/simulated/wall/r_wall,/area/medical/chemistry) -"bqM" = (/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_y = 22; req_access_txt = "10"},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/plating,/area/engine/engine_room) +"bqM" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating{icon_state = "platebotc"},/area/engine/engine_room) "bqN" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/reception) "bqO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/reception) "bqP" = (/turf/simulated/floor{dir = 4; icon_state = "whiteblue_ex"; tag = "icon-whiteblue (EAST)"},/area/medical/reception) @@ -5670,12 +5670,12 @@ "cfb" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) "cfc" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor{tag = "icon-whitegreen_v (NORTHEAST)"; icon_state = "whitegreen_v"; dir = 5},/area/rnd/xenobiology/xenoflora_storage) "cfd" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/rnd/xenobiology) -"cfe" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Xenobiology Research"; req_access_txt = "47"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"cfe" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/exit) "cff" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/rnd/xenobiology) "cfg" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = 32},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cfh" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) -"cfi" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) -"cfj" = (/obj/machinery/seed_storage/xenobotany,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"cfi" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Xenobiology Research"; req_access_txt = "55"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"cfj" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cfk" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cfl" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/table,/obj/item/weapon/storage/box/botanydisk,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cfm" = (/obj/machinery/botany/editor,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) @@ -5754,7 +5754,7 @@ "cgH" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cgI" = (/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cgJ" = (/turf/simulated/floor{tag = "icon-whitegreen_v (SOUTHWEST)"; icon_state = "whitegreen_v"; dir = 10},/area/rnd/xenobiology/xenoflora) -"cgK" = (/obj/structure/stool,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"cgK" = (/obj/machinery/seed_storage/xenobotany,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cgL" = (/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cgM" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cgN" = (/turf/simulated/wall/r_wall,/area/maintenance/starboardsolar) @@ -5807,11 +5807,11 @@ "chI" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) "chJ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora_storage) "chK" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) -"chL" = (/obj/machinery/door/airlock/research{name = "Xenoflora Storage"; req_access_txt = "47"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"chL" = (/obj/structure/stool,/obj/effect/landmark/start{name = "Xenobiologist"},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "chM" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "chN" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "chO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"chP" = (/obj/machinery/door/airlock/research{name = "Xenoflora Research"; req_access_txt = "47"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) +"chP" = (/obj/machinery/door/airlock/research{name = "Xenoflora Storage"; req_access_txt = "55"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "chQ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "chR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "chS" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) @@ -5820,7 +5820,7 @@ "chV" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "chW" = (/obj/structure/table,/obj/item/weapon/tape_roll,/obj/item/device/analyzer/plant_analyzer,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "chX" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) -"chY" = (/obj/machinery/computer/reconstitutor,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"chY" = (/obj/machinery/door/airlock/research{name = "Xenoflora Research"; req_access_txt = "55"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "chZ" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cia" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cib" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Engineering Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) @@ -5976,7 +5976,7 @@ "ckV" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/solar/starboard) "ckW" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "o2_sensor"},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/atmos) "ckX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/rnd/xenobiology) -"ckY" = (/obj/structure/table,/obj/item/device/floor_painter,/obj/item/device/multitool{pixel_x = 5},/obj/item/device/t_scanner,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor,/area/engine/workshop) +"ckY" = (/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Xenobiologist"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "ckZ" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2_sensor"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "cla" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/power/sensor{name = "Powernet Sensor - Atmospherics Subgrid"; name_tag = "Atmospherics Subgrid"},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/structure/cable/cyan,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/atmos) "clb" = (/obj/item/weapon/wirecutters,/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor/plating,/area/construction) @@ -6039,10 +6039,10 @@ "cmg" = (/obj/structure/closet/emcloset,/obj/machinery/camera/xray{c_tag = "Xenobiology Access"},/turf/simulated/floor{icon_state = "warnwhite"; dir = 5},/area/rnd/xenobiology) "cmh" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cmi" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) -"cmj" = (/obj/machinery/light,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"cmj" = (/obj/machinery/computer/reconstitutor,/obj/machinery/light_switch{pixel_x = 26; pixel_y = -6},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cmk" = (/obj/machinery/biogenerator,/obj/machinery/camera/autoname{dir = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cml" = (/obj/machinery/seed_extractor,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) -"cmm" = (/obj/machinery/light,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"cmm" = (/obj/machinery/light,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cmn" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cmo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cmp" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_xeno_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) @@ -6389,7 +6389,7 @@ "csS" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "csT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Workshop"; req_access_txt = "0"; req_one_access_txt = "11;24"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/workshop) "csU" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor,/area/atmos) -"csV" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating{icon_state = "platebotc"},/area/engine/engine_room) +"csV" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor/plating,/area/engine/engine_room) "csW" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "csX" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor,/area/atmos) "csY" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/engine/engine_room) @@ -6452,7 +6452,7 @@ "cud" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "n2_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "cue" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor,/area/atmos) "cuf" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engine_room) -"cug" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor/plating,/area/engine/engine_room) +"cug" = (/obj/structure/grille,/obj/structure/grille,/turf/space,/area/space) "cuh" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 9},/turf/simulated/floor,/area/atmos) "cui" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/atmos) "cuj" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access_txt = "10"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/engine/engine_room) @@ -6833,15 +6833,15 @@ "cBu" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/atmos) "cBv" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/atmos) "cBw" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = -8; pixel_y = 24},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/plating,/area/maintenance/incinerator) -"cBx" = (/obj/structure/grille,/obj/structure/grille,/turf/space,/area/space) -"cBy" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/engine/engine_room) +"cBx" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/engine/engine_room) +"cBy" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/space,/area/space) "cBz" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) "cBA" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engine_room) "cBB" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cBC" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cBD" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cBE" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) -"cBF" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/space,/area/space) +"cBF" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/space,/area/space) "cBG" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/atmos) "cBH" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/plating,/area/engine/engine_room) "cBI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_hallway) @@ -6879,14 +6879,14 @@ "cCo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology) "cCp" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/wall/r_wall,/area/atmos) "cCq" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/computer/reconstitutor/animal,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology) -"cCr" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/space,/area/space) -"cCs" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/space,/area/space) -"cCt" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/wall/r_wall,/area/engine/engine_room) -"cCu" = (/obj/effect/landmark{name = "carpspawn"},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) -"cCv" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/space,/area/space) -"cCw" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/space,/area/space) -"cCx" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/space,/area/space) -"cCy" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/turf/space,/area/space) +"cCr" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/space,/area/space) +"cCs" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/wall/r_wall,/area/engine/engine_room) +"cCt" = (/obj/effect/landmark{name = "carpspawn"},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) +"cCu" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/space,/area/space) +"cCv" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/space,/area/space) +"cCw" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/space,/area/space) +"cCx" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/turf/space,/area/space) +"cCy" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/engine/engine_room) "cCz" = (/turf/simulated/wall/r_wall,/area/engine/drone_fabrication) "cCA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/drone_fabrication) "cCB" = (/turf/simulated/wall/r_wall,/area/engine/engine_hallway) @@ -6900,7 +6900,7 @@ "cCJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/engine/engine_hallway) "cCK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor,/area/engine/engine_hallway) "cCL" = (/obj/structure/sign/securearea,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/engine/engine_hallway) -"cCM" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/engine/engine_room) +"cCM" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) "cCN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/maintenance/engi_shuttle) "cCO" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "engineering_dock_airlock"; name = "interior access button"; pixel_x = -30; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13;11;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/engi_shuttle) "cCP" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/maintenance/engi_shuttle) @@ -6908,7 +6908,8 @@ "cCR" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/maintenance/engineering) "cCS" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/engineering) "cCT" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engineering) -"cCU" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) +"cCU" = (/obj/machinery/light,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"cCV" = (/obj/structure/table,/obj/item/device/floor_painter,/obj/item/device/multitool{pixel_x = 5},/obj/item/device/t_scanner,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor,/area/engine/workshop) "cCW" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating/airless,/area/space) "cCX" = (/turf/simulated/floor/plating/airless,/area/maintenance/medbay) "cCY" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "virology_airlock"; name = "exterior access button"; pixel_x = 20; pixel_y = 20; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/maintenance/medbay) @@ -7309,18 +7310,18 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabfabfabfabfabfabfabfabfadEafqafrafsaaTaftafuafvafwafxafyafzafAafBafAafCafDadxafEafFacQafhacQafGafHafIafJafKafLadlafMafNafOafPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfafQafRafSabfafTafUafVafWafXafYafZafZafZafZafZafZagaagbagcagbaaTageagdagfaggaghaeFagiagjagkaglagmagnagoagpagqagragsagtaguagpagvagwagxabbadlagyafoafoagzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaabfagAagBafZafZafZafYafYafZagCagDagDagDagDagDagDagDagDagDagDarCaaTagFagGagHagIagJaeFagKagLagLagLaddagMagNagOagPagQagRagQagPagSagvagTadlabbabbaeSaeSaeSaeSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagUagVagWagWagWagWagWagWagWagDagXagYagZagWahaahbahcahdaheahfahgahhahiahjbmdantaojahnahnahnahnaddahoahpahqahrahsahtahuahvahwagvahxahyaboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzaaaaaaaaaahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagUagVagWagWagWagWagWagWagWagDagXagYagZagWahaahbahcahdaheahfahgahhahiahjahkahmahlahnahnahnahnaddahoahpahqahrahsahtahuahvahwagvahxahyaboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzaaaaaaaaaahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfafQafRahAabfahBadEagWahCahDahEahFahGahHagDagZahIahFahJahKahLahLahMahNahOahPacXacXacEacXahQahRahSacQacQacQaddahTahUahVahWahXahYahZaiaaibagvahxaicabOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadDaidaieaifabfaigadEagWaihaiiaijaikailaimagDagZahIainagWaioahLaipaiqahKahOajraisacXaitacXacXaiuacZahSacQacQaddaiwaixaiyagPagPaizagPagPaiAagvaiBaiCactaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzaaaaaaahzaaaaaaahzahzahzahzahzahzahzaaaaaaahzaaaaaaahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewagbagbaiDabfagbadEagWaiEaiFaiGaiHaiIahFagDaiJaiKaiLagWaiMaiNaiOaiOaiPaiQaiSaiRaiTacEaiUaiVaeFaiWaiXaiYaiZakNakfajcajdajeajfajgajhagPajiagvahxabbabbabbabbaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfajjabfabfajkajlagWagWajmagWagWajnagWagWagWajoagWagWajpahkahlahmairajuagWajvajwajxajyajqagWagWajzajAajBagWagWagWagpajCagpagpagpagpagpagvahxabbajDajEaboaaaaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadDaidaieaifabfaigadEagWaihaiiaijaikailaimagDagZahIainagWaioahLaipaiqahKahOairaisacXaitacXacXaiuacZahSacQacQaddaiwaixaiyagPagPaizagPagPaiAagvaiBaiCactaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzaaaaaaahzaaaaaaahzahzahzahzahzahzahzaaaaaaahzaaaaaaahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewagbagbaiDabfagbadEagWaiEaiFaiGaiHaiIahFagDaiJaiKaiLagWaiMaiNaiOaiOaiPaiQaiRaiSaiTacEaiUaiVaeFaiWaiXaiYaiZakNakfajcajdajeajfajgajhagPajiagvahxabbabbabbabbaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfajjabfabfajkajlagWagWajmagWagWajnagWagWagWajoagWagWajpajsajrantajtajuagWajvajwajxajyajqagWagWajzajAajBagWagWagWagpajCagpagpagpagpagpagvahxabbajDajEaboaaaaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagBafYajFafYajGajHajIajJajKajLajMajNajOajPajQajRajSajTajUajVajWajXajUajYajWajWajZakaakaakbakcakdahOakeajbakgajzakhakiakjakkaklakmaknakoakpalaakZakqabOaaaaaaaaaaaaaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaamaamaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWagWagWagWagWagWaksaktakuakvakwakxakyakzakAakBakCakDakEakFakwakGakwakwakHakIakJakKakLakMajaakOakPakJakQakRakSakTakUakVakWakXakYakoalIabbamsalbactaaaaaaaaaaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWalcaldalealfagWalgalhahLalialjagWacTacuacTagWabValnabUagWalpalqalralsagDaltalualvalwalxagWabTabSabSabRagWalBalCalDalEalFalGalHakoamtanQamuanQanQaaaaaaaafaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabQaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabMaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafabfadEabPalMalMalNalOalPalQalRahKalSaljagWalTalUalValWalXalYalZamaahKambahKamcamdameameamfamgamhamiamjamkamlammakoamnamoampamqalDalDamrakoadQanQamvawKamwaaaaaaaaLaaaaaaaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaaIaaIaaIaaIaaaaaaaaaabpaaaaaaaaaaaIaaIaamaamaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaamaaIaaIaaaaaaaaaaoXaaaaaaaaaaaIaaIaamaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWamAamBamCamDagWamEalRaljamFamGagWamHamIamJalWamKamLamMamNamOamPamQamRamSamgamgamfamgamTaoWamVamWamXamYakoamZanaalDamqalDalDanbakoancandaneanfangaafaaLaafaafaaLaafaafaafakrakranhakrakraaaaaaaaaaaaaaaaaaaaqaaaaaaaafaafaafaaaaaaaoYaafaafaaaaafaafaaaaaaaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafaaaaaaaaaaoVaafaafaaaaafaafaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfankagWagWagWagWanlanmannanoanmanmanmanmanpaoPanpanraoQajtaoRanvaoSaoTaoUanzanAamgamgamfanBanCamianDanEamXanFanGanHanIanJanKanLanManNanGanOanPawLanRanSaaaaaaaafaaaaafaaLaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXanYanZaoaagDaobaocagWaodaoealKaogaohaoiajsaokaolaomaonaooaonaopaoqaoraonaoOaotamgamgaouaovaowamiaoxanEamXaoyanGaozaoAaoBaoCaoDaoEaoFanGaoGanQanQanQanQaoIaoJaoHaoLarPaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafaaaaaaaaaaoVaafaafaaaaafaafaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfankagWagWagWagWanlanmannanoanmanmanmanmanpaoPanpanraoQaojaoRanvaoSaoTaoUanzanAamgamgamfanBanCamianDanEamXanFanGanHanIanJanKanLanManNanGanOanPawLanRanSaaaaaaaafaaaaafaaLaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXanYanZaoaagDaobaocagWaodaoealKaogaohaoiawfaokaolaomaonaooaonaopaoqaoraonaoOaotamgamgaouaovaowamiaoxanEamXaoyanGaozaoAaoBaoCaoDaoEaoFanGaoGanQanQanQanQaoIaoJaoHaoLarPaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaaaaaaaacaaaaaaaaaanXanXapaapbagDalMapcapdapeapfaofaphapiaoMaonaonapkaplaonapmapnaoraonapoaonaoNapqapramgamfamgamTaosamYanEamXaptanGapuapvapwapxapyapzapAanGapBaoHapCapDapEapFapGaoHaoHapHaoHaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafapIapIapIapIapIaafalJaafapIapIapIapIapIaafaaIaaaaaaahzahzahzahzaaaaaaahzahzahzahzahzahzahzaaaaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapJapJapJapJapJaafalkaafapJapJapJapJapJaafaaIaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaapKapaapbagDapLapMagWalgapNalKapOapPapQapRaokapSanWapUapVapWapXapYapZaqaanUaqcaqdaovaqeaovaqfaqgaqhaqiaqjaqkanGaqlaqmapyaqnaqoaqpaqoaqqaqraqsapFaqtaquapFaqvaoHaqwaqxaqyaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaafalJaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaafalkaaaaaaaaaaafaaaaaaaaaaaqaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaqzaqAaqBagDagWagWagWaqCalRagWalWalWalWaqDaqEapkaqFaqGaqHaonaqIaqJaqKaqLanyaqNaqOaqPaqQaqRaqSanxaqUaqVaqWamVanGaqXaqYaqZaraarbarcardanGarearfapFaqtaqtapFargaoHarhariarjaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7330,7 +7331,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatkatlatmaaaatnatoatpaaaaafatqatratqaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaaaalkaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaanXatsattagDagDagDagWagWagWagWalWalWalWalWalWatuaonaoratvaqEatwalWalWalWatxatxatxarAatyatzatAarEatBasZasZasZasZatCatDatEatFatGatHatIatJatKatLatMatNatOatPatPatPatPatPatPatPatPatQatRatRatRatRatRatQatPaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSatTatUatTatSatVatWatVatSaafatqatXatYaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafatZauaanYaubaucanXaafaafalWaudaueaufaugauhauiaonapnaonasJaqEaujaukaulaumaunauoauparAauqaurausarEatBasZaAfaySauvatCauxauyatFatGauzauAauBauCauDatMatNauEauFauGauHauIauJauwauLatPauMatRatRatRatRatRatQatPaafaaaaaaaamaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNatTauOatTauNatVauPatVauNauQauRauSauTauUauUauVauQauQaafaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaaaaaaaaaaaaanXanXanXauWanXanXapbaucanXaaaaaaalWauXalWauYauZavaalWavbavcaonavdaveaveavfavgaveavhaviavjarAavkauravlarEatBasZawoavoawpatCawravqatFatGauzauAavravsavtatMatNavuavvauGauHauHauJavwavxavyavzatRatRatRatRatRavAatPatPatPaaaaamaaaapIapIapIapIapIaafalJaafapIapIapIapIapIaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNavBavCavDauNavEavFavGauNavHavIavJavKavLavMavNavOauQaaaaaaaaqaaaapJapJapJapJapJaafbeSaafapJapJapJapJapJaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaavQavRavSavTavUavVavWavXanXaaaaaaalWalWalWavYavZawaalWawbawcawdaweaRCawgaukawhawiautawkawlarAawmaurawnarEatBasZawXawUawYaxaaxbawZatFatFatFawsawtawuatFatFatNawvawwauGauHauHauJawxawyawzawAatRatRatRatRatRawBawCawDawEaaaaamaaaaafaaaaafaafaaaaaabepaaaaaaaafaaaaaaaafaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNavBavCavDauNavEavFavGauNavHavIavJavKavLavMavNavOauQaaaaaaaaqaaaapJapJapJapJapJaafbeSaafapJapJapJapJapJaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaavQavRavSavTavUavVavWavXanXaaaaaaalWalWalWavYavZawaalWawbawcawdaweaQqawgaukawhawiautawkawlarAawmaurawnarEatBasZawXawUawYaxaaxbawZatFatFatFawsawtawuatFatFatNawvawwauGauHauHauJawxawyawzawAatRatRatRatRatRawBawCawDawEaaaaamaaaaafaaaaafaafaaaaaabepaaaaaaaafaaaaaaaafaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNawGawHawIauNawGawHawIauNawJavHavHavHavHavHavHavHasAaaaaaaaaIaaaaafaaaaafaafaaaaaabfxaaaaaaaafaaaaaaaafaaaaaIaafaaaaaaaafaafaaaaaaaafawPavRawQawRavUawSaucawTanXaafaaLcqTatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxarAawVaurawWarEatBasZauKaxjavmatCaxVavnaxdaxcaxfaxeaxhaxgaxhaxiaxkaxlaxmaxnaxoaxoaxnaxpaxqaxraxsatRatRatRatRatRaxsaxtaxuaxvaaaaamaamaaIaaaaaaaafaaaaaaabpaaaaafaafaafaafaaIaaIaaIaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaatSauNaxwaxxatSauNaxyaxxatSauNawMauNauNauNauNauNavHatqaaaaaaaaIaaIaaIaaaaaaaafaaaaxBaxCaxBaafaafaafaafaaIaaIaaIaafanXanXanXanXaxDaxEaxEaxFanXanXanXanXaxGaucaucanXaxHaxIanXanXaxJaxKaxLaxMaxMaxMaxMaxMaxMaxMaxMaxNaxMaxMaxMaxMaxMaxOaxPaxQaxRaxOavpasZaxSawjcfSatCaxVaxXaxXaxXaxZaxYayaaybaxXavqaydayeayfaygayhayhayhayiavxayjaykatRatRatRatRatRaykaylaxuaxvaaaaaaaaaaafaafaaaaafaaaaaabfyaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaynayoaypayoayqayoayrayoaysaytayvayvayvayvaywauNawNatqaaaaafaafaaaaaaaaaaaaaafaaaayyayzayAaafaaaaafaaaaaaaaaaaaaaaanXayBayCayDayCayCayCayCayEayCayCayFayGayDayHayIaxMaxMaxMaxMaxMaxMayJayKayLayLayLayLayMayLayLayNayLayMayLayLayLarAayOayPayQarEaAiasZcfSaycaxUatCayUayTayWayVayYayXayYayZayTazaazbazcazdazeazdazdazfazgazhaziazjatRatRatRatRatRazkazlazmaznaaaaaaaaaaaaaafaaaaafaaaazoazpazoaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7345,8 +7346,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaT aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaFraJXaGJaGKaFlaGLaFlaGLaFlaGLaFlaGLaFlaGMaGNaGOaDPaGYaGXaHaaGZaHbaHbaIBaIzaIHaIGaIJaIIaJZaJYaKbaKaaFCaIKaKmaKnaKoaKpaIKaKqaKraKsaKtaKuaaaaafaaaaKvaKwaKvaaaaafaaaaKuazOazPaKxaKyaKzaKAaKBazPaKCaKDayLaKEazTaARaKFaKGaHrazTaKHaKIaKJaKKaKLaJeaEDaKNaKOaKPaEEaKRaaaaaaaJlaKSaKTaKUaJlaKVaJnaJnaJnaKWaJnaJnaJnaBjaDpaKXaDpaDpaDpaDpaKYaDpaKZaLaaLbaLcaLdaLeaLfaLgaLhaLfaLfaLfaLfaLfaLiaLfaLfaLfaLfaLfaLfaLfaLfaGraIgaLjaLkaLlaEFaLnaLoaIgaLpaLqaGFaLraLsaLtaJTaRraJUaIoaJVaIoaLvaLwaLxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaLyaLzaDJaFkaFlaFlaFlaLAaFlaFlaLBaFlaFlaFraLCaLDaDPaLEaLFaLGaLHaLGaLGaLGaLGaLGaLIaLJaFCaFCaFCaFCaFCaFCaLLaLMaLNaLOaLOaLOaLOaLPaLQaLRaKuaLSaLTaLTaLUaLVaLWaLTaLTaLXaKuaLYaKuaKuaLZaMaaLZaJeaJeaMbaMcaJeaJeaJeaJeaMdaMeaMfaMgaMhaMiaJeaJeaJeaJeaMjaKNaMkaMkaMlaMmaMnaMoaJlaMpaMqaMraJlaJlaJlaJlaJlaJlaJlaJlaBjaBjaMsaMtaMuaMvaMwaMxaMyaMzaKZaMAaMBaMCaMCaMDaLfaMEaMFaMGaMHaMIaMJaMKaMLaMMaMNaMHaMJaMIaMHaMOaLfaGraIgaMPaMQaMRaMSaMTaMUaIgaMVaMWaMXaMYaMZaNaaNbaGFaGGaNcaJVaIoaNdaNeaNfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaLyaDJaDKaDJaDJaDLaDMaDJaDJaDKaLzaNgaBIaNhaLEaNiaNjaNjaNkaNjaNlaIAaNmaNnaLJaNoaNpaNqaNraNsaNtaNraNuaNraNraNraNvaNraNraNwaNxaNyaNzaNAaNBaNzaNCaNzaNzaNzaNzaNDaNEaNFaNGaNraNHaNIaNJaNKaNLaNMaNLaNNaNOaNPaNQaNQaNRaNSaNTaNSaNUaNVaNWaEGaNYaNZaOaaObaOcaMkaMkaMkaOdaOeaOfaOgaOhaOiaOjaOkaOlaOmaOnaJlaOoaOpaOqaOraOsaOtaOuaOvaOwaOxaKZaOyaOzaOAaOAaOBaLfaOCaODaOEaOEaOEaOEaOFaOGaOHaOIaOJaOKaOKaOLaOMaLfaGraIgaONaOOaOPaOQaONaONaIgaORaOSaGFaOTaOUaOVaOWaGFaIoaIoaJVaIoaGGaGGaGGaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOXaOYaOZaPaaPaaPaaPaaPbaOYaOXaaaaBIaPcaPdaPeaPfaPgaPhaPhaPiaIAaPjaNnaPkaPlaPmaPnaPoaPpaPqaPqaPraPsaPsaPsaPtaPuaPuaPvaPwaNIaPqaPqaPxaPyaPzaPAaPBaPBaPCaPBaPDaPyaPyaPyaPEaPFaPGaPHaMkaPIaPJaPJaPJaPJaPJaPJaPJaPJaPKaPJaPLaPMaPNaPOaPPaPQaPRaPSaPTaPJaPUaPJaPVaPWaPXaPWaPWaPWaPWaPWaPWaPYaPZaRsaQbaQbaQbaQcaQbaQbaQdaQeaQfaQgaKZaQhaMCaQiaQjaQkaLfaQlaQmaQnaQnaQnaQnaQnaQoaQpaQqaQraQnaQnaQsaQtaLfaGraIgaQuaONaONaQvaONaQwaIgaGFaGFaGFaGFaGFaGFaQxaGFaIoaIoaJVaIoaQyaQzaGGaaaaafaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaafaBIawqaBIaQBaQCaGOaQDaQEaQFaQGaGOaQCaQHaQIaBIaQJaLEaPeaQKaQLaPhaPhaPiaIAaQMaNnaLJaQNaNpaQOaQPaNraNraQQaQRaQSaQTaNraQUaQVaQWaQVaQXaQYaQVaQVaQZaQVaQVaRaaRbaQVaRcaQVaRdaNraNraNraReaPFaPGaPHaMkaRfaMkaRgaRgaRgaRgaRgaRgaRgaRgaRhaRiaRgaRjaRgaRgaRkaRgaRgaRgaRgaRlaRmaRnaRoaRoaRoaRoaRoaRoaRoaRpaRqaRpaJlaImawOawOawOawOawOaItaRuaRvaRwaKZaKZaKZaKZaKZaRxaLfaRyaQmaQnaRzaRAaRBawfaRDaREaRFaQraRGaRHaRIaRJaLfaGraIgaRKaRKaRLaRMaRNaRNaROaIgaRPaRQaRRaGGaRSaRTaRUaRVaRVaRWaRXaGGaRYaGGaRZaRZaRZaSaaSbaScaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOXaOYaOZaPaaPaaPaaPaaPbaOYaOXaaaaBIaPcaPdaPeaPfaPgaPhaPhaPiaIAaPjaNnaPkaPlaPmaPnaPoaPpaPqaPqaPraPsaPsaPsaPtaPuaPuaPvaPwaNIaPqaPqaPxaPyaPzaPAaPBaPBaPCaPBaPDaPyaPyaPyaPEaPFaPGaPHaMkaPIaPJaPJaPJaPJaPJaPJaPJaPJaPKaPJaPLaPMaPNaPOaPPaPQaPRaPSaPTaPJaPUaPJaPVaPWaPXaPWaPWaPWaPWaPWaPWaPYaPZaRsaQbaQbaQbaQcaQbaQbaQdaQeaQfaQgaKZaQhaMCaQiaQjaQkaLfaQlaQmaQnaQnaQnaQnaQnaQoaQpaRCaQraQnaQnaQsaQtaLfaGraIgaQuaONaONaQvaONaQwaIgaGFaGFaGFaGFaGFaGFaQxaGFaIoaIoaJVaIoaQyaQzaGGaaaaafaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaafaBIawqaBIaQBaQCaGOaQDaQEaQFaQGaGOaQCaQHaQIaBIaQJaLEaPeaQKaQLaPhaPhaPiaIAaQMaNnaLJaQNaNpaQOaQPaNraNraQQaQRaQSaQTaNraQUaQVaQWaQVaQXaQYaQVaQVaQZaQVaQVaRaaRbaQVaRcaQVaRdaNraNraNraReaPFaPGaPHaMkaRfaMkaRgaRgaRgaRgaRgaRgaRgaRgaRhaRiaRgaRjaRgaRgaRkaRgaRgaRgaRgaRlaRmaRnaRoaRoaRoaRoaRoaRoaRoaRpaRqaRpaJlaImawOawOawOawOawOaItaRuaRvaRwaKZaKZaKZaKZaKZaRxaLfaRyaQmaQnaRzaRAaRBbmdaRDaREaRFaQraRGaRHaRIaRJaLfaGraIgaRKaRKaRLaRMaRNaRNaROaIgaRPaRQaRRaGGaRSaRTaRUaRVaRVaRWaRXaGGaRYaGGaRZaRZaRZaSaaSbaScaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaGeaGgaGgaGiaGfaGhaSdaOYaLDaDPaHxaHxaSfaLDaOYaLDaHyaHAaHzaLEaSkaSlaSlaNkaSlaNlaIAaSmaNnaSnaIAaLKaLKaSoaLKaLKaLKaLKaLKaLKaSpaSqaLKaLKaLKaLKaLKaLKaSraSsaSraLKaStaLKaNraQPaSuaSvaSwaSxaNraSyaLKaMbaMbaMkaSzaKOaSAaMnaMnaSBaSBaSBaSBaSCaJeasfasNarVarXarXavParXarXarVasNawFaJeaSJaSKaSKaSKaSKaSLaSLaSMaSNaRqaRpaJlaSOaSPaSPaSPaSPaSPaSPaSQaSRaSSaSTaSUaSVaSWaSXaSYaKZaKZaSZaTaaTbaTcaTdaTeaTeaTeaTfaTgaTfaTeaTeaTeaTeaGraIgaThaONaRLaRMaONaONaTiaIgaTjaTkaTlaGGaIoaTmaTnaToaTpaTqaIoaTraTsaGGaTtaTuaRZaTvaTwaTxaafaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaKQaNXaLmaKMaQAaSgaSeaSiaShaSjaSiaTzaTyaTBaTAaTEaTCaTAaTFcozaTIaTJaTKaTLaTLaTLaTMaTLaTNaTOaIAaTPaTQaTRaTSaTTaTUaTVaTWaTXaTUaTYaTZaUaaUbaUcaUdaUeaUfaUgaUhaUeaUiaLKaLKaUjaLKaLKaLKaLKaUkaUlaLKaUmaMbaUnaSzaKOaUoaaaaaaaaaaaaaaaaaaaaaaUpaUqaUraUsaUtaUvaUuaUxaUwaUzaUyaVUaUpaaaaaaaaaaaaaaaaaaaaaaUAaSNaRqaUBaUCaUDaUEaUFaUFaUFaUFaUGaUHaUIaUFaUFaUFaUJaUKaULaUMaUNaUOaUPaUQaURaUSaUTaTfaUUaUVaUWaUXaUYaUZaVaaVbaTeaGraIgaVcaVcaRLaRMaVdaVdaVeaIgaIgaVfaIgaGGaVgaVhaViaViaViaVjaVkaGGaGGaGGaVlaVmaVnaVoaVpaVqaafaafaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaKQcmVaVrclfaDPaVsaVsaVtaVsaVsaVsaVDaVsaVsaVtaVsaVsaYEaWYaVuaVvaKdaKdaKdaKdaKdaVwaVxaVyaVzaIAaTQaTQaVAaTSaVBaTUaTUaTUaTUaTUaTYaVCaTUaTUaTUaUdaUeclraVEaVFaUeaUiaVGaVHaKeaKcaVKaUmaVLaVMaVNaVOaVPaVQaMkaSzaKOaUoaaaaaaaaaaaaaUpaUpaUpaUpaVRaVSaVTaXEaVVaVWaVXaXFaVZaWaaWbaUpaUpaUpaUpaaaaaaaaaaaaaUAaSNaRqaRpaWcaSSaWdaWeaWfaSSaWgaWhaWiaWjaWkaWlaWmaWnaQbaWoaWpaWqaWraWsaWtaWtaWuaWvaWwaWxaWyaWzaWAaWBaWCaWDaWEaTeaGraIgaThaONaRLaRMaONaONaONaWFaWGaONaWHaGGaWIaWJaToaToaToaTqaIoaYsaGGaQaaVoaLuaWQaVoaWRaWSaWTaWTaWUaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7359,7 +7360,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaT aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaabgnbgobgpbgqaZUbgrbgrbgrbgrbgrbgrbgsbgtbgraYOaYOaYOaYOaYObguaYOaYOaYObgvbgvbgwbbZbdDbgxbeZbgybbZbgzbgAbgzaTSbdKbdLbdMbfdaTSaXebdObdPbgBbgCbgDbfgbgDbdPbfibgEbgFbgGbgHbgIbgJaMbbgKbgLbctaWKbgNbgObgPbgQbgQbgRbgSbgTbdYbebbgUbgVbgWbgXbfvbgYbgZbebbedbhabhbbhcbhdbhebhfbhgbhhaJibhibhjaRpbhkbhlbhmbewbewbhnbewbhobewbewbewbewbhpbewbewbewbewbhqbewbewbewbewbewbewbhmbewbewbhrbhsbhsbhtbhsbhsbhubhvbewbhqbhwbhxbhpbewbhybewbewbewbhzbhAbhBbhCbewbhDbewbhEbewbewbhFbhGbhHaVoaYuaVobhIbhJbhKbhLbhMbhNaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaaaafbhPaYDbhQbhRbhSbhTbhTbhTbhTbhTbhUbhVbhWbhXbhYbhZbgwbbZbbZbbZbiabfabbZaTSaTSaTSaTSbdKbibbicbidaTSbiebifbdPbigbihbiibgDbijbdPbfibikbgFbgGbgGbgGbilaMbbimaSzbctaSIbiobipbiqbirbisbitbiubivbdYbebbiwbixbiybiybiybgYbizbebbedbiAbiBbiCbiDbiEbiFbiGbiHaJibiIbiJbiKbiLbiMbiNbiObiObiPbiQbiRbiSbiSbiSbiTbiSbiSbiSbiSbiSbiUbiVbiVbiVbiWbiObiObiNbiObiObiXbiVbiVbiYbiSbiZbjabjbbiSbjcbiObiObiObiObiObiObiObiObiObiObiObiObiObjdbiTbjebiSbjfbjgbjhbjibjibjjbjkaZNaWRbjlaWTaWTaWUaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhOaZSaZTbjmbjnbjobgrbjpbjpbjqbjpbjpbjpbjrbajbajbajbajbaibbZbdDbjsbjtbgybbZbjubjvbjuaTSaTSaTSaTSbjwaTSbjxbdObdPbjybjzbgDbjAbjBbdPbfibfmbjCbgGbgGbgGbjDaMbbjEaSzbctcdNbjGbgObjHbjIbjJbjKbjLbjMbdYbjNbjObjPbiybjQbiybgVbjRbjSbedbjTbjUbjVbjWbjWbjWbjXbjYaJibjZbkabkbbkcbkdbkebbFbkfbkgbkhbkibkjbkkbklbkmbknbknbkobewbewbewbewbewbkpbkqbkrbewbksbktbkubkvbewbkpbkwbkxbkybhFbewbewbkzbewbewbkAbkBbewbkpbewbewbewbewbewbewbewbewbewbhqbewbewbhFbkCbkDbkEbkFbkGbkHbkIbkJaafaaaaafaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObkKbkLbkMbkNbkObgrbkPbkQbkRbkRbkSbkTbkUbkVbkWbkWbkXbkYbbZbbZbbZbeZbkZbbZbajbajbajbajblaaXeaXeblbblcbldbleblfblgblhblibljblkbdPbllbfmblmbgGblnbgGbloblpblqaSzbctaJeblrblsbltblublvblwblxblybdYbebblzblAblCblBblDblAblEbebbedbedblFblGblHblIbiCblJblKaJiblLblMblNaJiblOblOblOblOblOblOaZzaZzblPblQbZNcdMblQblPaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzblTaZzaZzaZzaZzaZzaZzaVIaZzbewbewblVblWblWblOblOblOblOblOblXblYblYblZblYbewblYblZbmablYbmbblObmcbmcbmcbqKaRZbmeaRZaRZaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObkKbkLbkMbkNbkObgrbkPbkQbkRbkRbkSbkTbkUbkVbkWbkWbkXbkYbbZbbZbbZbeZbkZbbZbajbajbajbajblaaXeaXeblbblcbldbleblfblgblhblibljblkbdPbllbfmblmbgGblnbgGbloblpblqaSzbctaJeblrblsbltblublvblwblxblybdYbebblzblAblCblBblDblAblEbebbedbedblFblGblHblIbiCblJblKaJiblLblMblNaJiblOblOblOblOblOblOaZzaZzblPblQbZNcdMblQblPaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzblTaZzaZzaZzaZzaZzaZzaVIaZzbewbewblVblWblWblOblOblOblOblOblXblYblYblZblYbewblYblZbmablYbmbblObmcbmcbmccfeaRZbmeaRZaRZaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObdubdvbjmbjnbmfbgrbmgbjpbmhbmibjpbjpbjpaVAbmjbmkbmkbmlbbZbdDbmmbeZbmnbbZbmobmpbmqbmrbmsbmtbmtbmubmtbmtbmvbdPbmwbmxbfgbmybmzblfbmAbfmbmBbgGbgGbmCbmDbmEblqaSzbmFbmGbmGbmGbmGbmGbmGbmGbmHbmGbdYbebbmIbmJbmKbmLbmKbmMbmNbebbedbedbmObmPbmQbmRbiCbiGbmSaJibcKaRqaRpaJibmTbmUbmVbmWbmXbmYbmZbnabnbbncbndbnebncbnfbngbnhbnibnjbnkbnlbnmbnnbnobnpbnqbnrbnsbntbntbnubYfaVJblOblObZLblObZMbZMblObnzbnAbnBblObZtbZubZtblOblXblYbmbblObZnbZBbZnblObnGbnHbnIbnJbnKbnLbnMaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaabnNbnObnPbeQbnQbgrbnRbjpbnSbnTbnUbnVbjpbnWbnXbnYbnZbmlbbZbbZbbZbbZbbZbbZboabobbocbodboebdPbdPbdPbdPbdPbdPbdPbWqbdPbdPbdPbogbdPbohboibojbgGbgGbgGbokblpblqaSzbolbmGbombonboobcEbvGbotbosbotaafbebboubovbowboxboybozboAbebaafbedboBboCboDboEbiCbiGboFaJiboGboHaRpbXHboJboKboLboMboNbYwboPboQboRboRboSboTboUboUboVboWboXboYboZbpabpbbnnbpcbpdbpebpfbpgbphbpfbpibYfaVJbpjbpkbplbpmbpnbpobppbpqbprbpqbpsbptbpubpvblOaZzbpwbpxblObpybpzbpAbpBbpCbpDbnIbpEbpFbpGbnMaaaaaaaaaaacaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaabgnbgobgpbgqbdvbpHbpHbpHbpIbpHbpJaZVbpKbpLbgrbpMbpNbpObpPbpQbpRbpSaYSaXeaXeaXebpTbkWbpUbkWbkWbkWbkWbpVbpWbpWbpXbpYbdPbpZbqabqbbqcbqdbqebqfbqgbqhbqibqjbqkbmAbqlbojbgGbgGbqmbfmaMbblqbqnbqoaJubqqbqrbqrbxqborbopbxsbotaafbebbebbebbebceebebbebbebbebaafbedbqzboCbqAbqBbqCbqDbqEaJibqFaRqaRpaJibqGbqHbqIbqJaJDbqLboPbqNboUboUboUboUboUboUbqObqPbqQboYbqRbqSbqTbnnbqUbqVbqWbpfbpgbphbpfbqXbYfaVJbpjbqYbqZbqZbrabrbbrcbrdbrdbrdbrebrdbrfbrgbrhbribrjbrkbnIbrlbpCbrmbrnbrobrpbnIbrqbpFbrrbnMaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7389,12 +7390,12 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaambZSaamaamaamaamaamaaaaaaaaaaaaaaaaaaaafaafaaabZTbZUbZUbZUbZVbZUbZUbZWbZXbYIbZYbZZbYIcaacabcaccadcaecafcagcahcaicajcakcalcambXvbYXcancaobZacapbUGcaqcaqcaqcaqcaqcarbNSbDtcascatcaucavcawcaxcaycazbTJcaAcaBcaCcaDcaEcaFcaGcaHcaIbZxbWQcaJbZycaKcaLbZAcaMcaNcaObZAbXXbYfbPObIwbXYbYabXZbXYbXYbIwbIwbIwcaRcaScaTcaUcaVbwwbwwcaWbwwbwwcaXcaYcaZcbabXjcbbbXjbXjcbccbdcbecbfcbgcbhbUnbUnbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbUubUsbUsbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcbicbjcbkcblcbmcbncbocbpcbqbYIcbrcbsbYIbYIcbtcbucbvcbwcbxcbycbzbYSbYTbYUcbAcbBbXvbXvcbCcbDbXvcbEbUGcbFcbGcaqcbHcaqbTFcbIcbIcbIcbIcbIcbIcbIbTJcbJcbKbTJcbLcbMcbNcbOcaEcbPcbQcbRcaIbZxbWQbZxbZycbScbTbZAcbUcbVcbWbZAbXXbYfbYbbYdbYcbYibYebYjbYcchBbYkbYlcktbZDbZwbZFcktccrbZGbZHccqccrccscctcctcctcctccucctcctcctcctcctccvccwccxccycczbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaaaaaabOPbKtbNdbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafccAccAcbkccBccCcbnccDccEccFbYIccGccHccIccJccKccLccMccNccOccPccQccRbTyccSccTccUccVccWccXccYccZcdacdbcdccddaJEcdfcaqbTFcbIcdgcdhcdicdjcdkcdlcdmcdncdocdpcdqcdrcdscdtcaEcducdvcdwcaIbZxbWQbZxbZycdxcdybZAcdzcdAcdBbZAcaPbYfbYfcaQbYccbYcbXcbZbYcchBccacjfcdLcdLbyFbBucdLcdOcdPcdQcdRcdOcdSbBpbyebydcdScdScdScdSbAebyebydcdScdSbXjcdXcdYcdZceacebcecbxTbycbycbycbycbycbycbycbycbycbycbycbycbycbycbycbyccefcegcegcehbKtbKtbLTbLTceibLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejcejcejcejcekcelcemcemcemcemcemcenceocepcepcepceqcerbYSbYTbYUcesbYWcetceucevcewcexceybUGcezaJFboqaJFcaqbTFcbIceDceEceEceEceFceGbTJceHceIbTJcbLcbNceJcbOcaEceKceLceMcaIbZxbWQceNbZyceOcePbZAbZAbZAbZAbZAccbceRbYfcaQbYcccdcccbYcbYcchBccecjfcdLceZcfacfbcfccdOcfdcfecffcdOcfgcfhcfhcfhcficfjcfkcflcfmcfncfocfpcdScfqcfrcfsbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcftcfucfvbNebKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejcfwcfxcfycfzcfAcejcfBcfCcfDcfEcfFcfGcfHcfHcamcfIcfIcfJcfKcbzbYSbYTbYUcfLcamcfMcfNcfOcfPcfQcfRbUGaJFaJFcaqceBcaqbTFcbIcfVcfWcfWcfWcfXcbIcfYcfZcgacfYcgbcgccgdcgecaEcgfceLcggcaIcghccfcgjbZycgkcglbZycgmbLvbVicgnccgcchbYfccjcciccicckcclcclcclcclccmcdLcgxcgycgycgzcgActsctyctscgDcgEcgFcgGcgGcgHcgIcgIcgJcgKcgLcgLcgMcdScgNcgOcgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcgQbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRaaaaaacgScgTcgTcgTcgUcgVcejcgWcgXcgYcgZchachbchcchdchechfchgchhchichjchkchlchmchnbNFbUGbUGbUGbUGbUGbUGbUGbEZbGDcaqbDfcaqbTFcbIcbIctpctqctrcbIcbIchrchschtcfYcaEcaEcaEcaEcaEcaIchuchvcaIchwccnchwbZychychzbZychAchBbVichCbVichDbYfccobYfbYfccpcdCcdCcdCcdDbYfcdLchIchJchJchKchLchMchNchOchPchQchRchSchTchUchVchWcgIcgIcgIchXchYcdSchZciacgtcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejcejcejcejcekcelcemcemcemcemcemcenceocepcepcepceqcerbYSbYTbYUcesbYWcetceucevcewcexceybUGcezaJFboqaJFcaqbTFcbIceDceEceEceEceFceGbTJceHceIbTJcbLcbNceJcbOcaEceKceLceMcaIbZxbWQceNbZyceOcePbZAbZAbZAbZAbZAccbceRbYfcaQbYcccdcccbYcbYcchBccecjfcdLceZcfacfbcfccdOcfdcficffcdOcfgcfhcfhcfhcfjcgKcfkcflcfmcfncfocfpcdScfqcfrcfsbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcftcfucfvbNebKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejcfwcfxcfycfzcfAcejcfBcfCcfDcfEcfFcfGcfHcfHcamcfIcfIcfJcfKcbzbYSbYTbYUcfLcamcfMcfNcfOcfPcfQcfRbUGaJFaJFcaqceBcaqbTFcbIcfVcfWcfWcfWcfXcbIcfYcfZcgacfYcgbcgccgdcgecaEcgfceLcggcaIcghccfcgjbZycgkcglbZycgmbLvbVicgnccgcchbYfccjcciccicckcclcclcclcclccmcdLcgxcgycgycgzcgActsctyctscgDcgEcgFcgGcgGcgHcgIcgIcgJchLcgLcgLcgMcdScgNcgOcgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcgQbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRaaaaaacgScgTcgTcgTcgUcgVcejcgWcgXcgYcgZchachbchcchdchechfchgchhchichjchkchlchmchnbNFbUGbUGbUGbUGbUGbUGbUGbEZbGDcaqbDfcaqbTFcbIcbIctpctqctrcbIcbIchrchschtcfYcaEcaEcaEcaEcaEcaIchuchvcaIchwccnchwbZychychzbZychAchBbVichCbVichDbYfccobYfbYfccpcdCcdCcdCcdDbYfcdLchIchJchJchKchPchMchNchOchYchQchRchSchTchUchVchWcgIcgIcgIckYcmjcdSchZciacgtcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRciccidciccgRciecifciecgRcigcihcigcgRaaaaaaciicgTcgTcgUcgUcijcejcikcilcemcimcinciocipciqcirbQJbQJcisbQJcbzbYScitbYUciucivciwcixciycixcixceTceUceUciAciAciAciAbTFciGciHciIciIciJciKciLciMciXciOciPciQciRciSciSciTciUcaIcaIcaIciVcdEckqbZybZybZybZychBchBbViciYbViciZbYfccobYfaaaaaaaaaaaaaaaaaaaaacdLcjgcjhcjhcjicjjcjkcjlcjmcjncjocjpcjqcgIcgIcjrcjscgIcjtcgIchXcjucdScjvcjwcjxcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRciccjyciccgRciecjzciecgRcigcjAcigcgRaaaaaaciicgTcgUcgUcgUcjBcjCcjDcjEcemcjFcjGcjHchHchGcivcjKcjLcjMcjNcbzbYScjOchmcjPcjQcjRcjScjScjSbJmbHPcjScjSceCcdeceAciAbTFciGckaciIckbckcckdcubckfckgckhctQckjckkcklciSckmciUcknckockpclicdFcdHcdGcdIcdIcdJcdIcdKbVibVibVibVibYfccobYfaaaaaaaaaaaaaaaaaaaaacdLckCckDckDckDckEcdOckFcdOckGckHckIckJckJckKckLckLckMckJckJckNckOcdSckPckQckRcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRcvkckTcvjcgRcvickWcvhcgRcusckZcudcgRaaaaafciiclbcgTcgUcgUcgUcejclccldcleclecnIclecleclecleclgbQJclhcltcbzcljclkcllclmclncgicgocgocgocgrcmScmScgpciAcgucgqclwclxciGclyciIclzclAclBclCclDclEclFclGclHclIclJciSclKciUclLclMclNclOclPclQclNclRclSclTbYfceQcdIcdIcdIcdIcdIceSbYfaaaaaaaaaaaaaaaaaaaaacdLcmacmbcmccmdcdOcmecmfcmgcdScmhcmicmicmicmjcmkcmlcmmcmicmicmicmncdScmocmpcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRcvkckTcvjcgRcvickWcvhcgRcusckZcudcgRaaaaafciiclbcgTcgUcgUcgUcejclccldcleclecnIclecleclecleclgbQJclhcltcbzcljclkcllclmclncgicgocgocgocgrcmScmScgpciAcgucgqclwclxciGclyciIclzclAclBclCclDclEclFclGclHclIclJciSclKciUclLclMclNclOclPclQclNclRclSclTbYfceQcdIcdIcdIcdIcdIceSbYfaaaaaaaaaaaaaaaaaaaaacdLcmacmbcmccmdcdOcmecmfcmgcdScmhcmicmicmicmmcmkcmlcCUcmicmicmicmncdScmocmpcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcgRcmscmtcmucgRcCpcmtcmwcgRcCpcmtcmwcgRaaaaafcmzcgTcgTcgUcgUcmAcejcmBcmCcmDcmEcmFcmGcmHcmHcmIcmJcmHcmKcmLcbzcmMcmNcmOcmPcivcmQcmQcmRcmSceYceXceWceWciAcibceVcfUcqgciGcnbciIcnccndcneciGcnfciNcngcfYcnhcnicnjciScnkciUclLclMclNcnlcnmcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfaaaaaaaaaaaacdOcdOcdOcdOcdOcdOcdOcdOcdOcnocnpcnqcdScdScnrcnscntcdScdScdScdScnucnscntcdScdScnvcnwcnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaafaafaafaaaaafcnxaafcnxaafcKBaafcKAaafcKBaafcKAaafaafaaacejcnAcnBcgUcgUcnCcnDcnEcnFclecnGcnHcleclecqUcleclecnJcivclecnKcnLcnMcnNcnKclecnOcnOcnOcsQcvzcnOcnRcnRcgscgscgscgscnSciGcnTcnUcnccnVcnWciGcnfciNcnXciUcnYcnZcnjcoacobciUclLclMclNcoccodcoeclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacdOcofcogcohcwlcojcokcolcomconcoocopcoqcwkaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcoscotcosaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafcoucovcowcoxcowcovcKvcoxcqWcrScKvcoAcrTcrUcoBcoCcoCcoCcoCcoCcoCcoCcoCcoDcoEcoFcoGcoHcoIcvscoKcoLcoMcoNcoOcoPcoMcoQcoRcoScnOcoTcoUcoVcoWcoXcoYcnOcoZcoZcpacpbcpbcnRbTFciGciGcpccpdciGciGciGcpeciNcpfciUciUciUcpgcphciUciUclLcpiclNcvmcvncvmclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafcdOcplcpmcplcvlcpocppcpqcomcomcprcomcdOcdOaaaaaaaaaaafaafaaaaacaaaaaaaaaaaaaafaaacvtaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7407,7 +7408,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaabZSaaaaaaaaaaaacptcpucpucpucpucpucymcpucpucpucymcpucpucpucpucpucrRcpucpucymcpucvpcpucpucvpcvpcmXcpucpucwtcAtcoCcoCcoCcoCcwvcwwcoQcwxcwycspcwzcoXcwAcvJcoXcwBcnOcwCcrncwEcwFcwGcnRcwHcvMcvNcwIcwJcwKcwLcwMcwNcwOcvNcwPcwQcrGaaaaaaaaaaaaaaaaaacqvcwRcwScwTcwUcwVcwWcwXcwYcwZcxacvZcxbcxccxdcuWcqvcxecqvaaaaaacdOcofcogcohckXcsRcuZcxgcxhcxhcxicxjcxkcxlcxmcxncdOaaaaaacrPaaaaafaaaaafaafaafaaackxaaaaafaaaaafaaaaafaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpucpucpucpucpucyocpucpucpucyocpucpucpucpucpucrRcpucpucrWcGmcxpcuecuecxpcykcxpcIBcIAcIDcuecqVcuecxAcxBcIEcwwcoQcxDcoQcxEcxFcoXcoXcxGcoXcxHcnOcxIcxIcxJcwFcwGcnRbPxcvMcvNcxKcxLcxMcxNcxOcxNcxPcvNcxQcxRcrGaaaaaaaaaaaaaaaaaacqvcxScxTcxUcxVcxWcxXcxYcxZcuTcyacuScybcuTcyccuVcqvcqvcqvaaaaaacdOcplcpmcplctbcpocppcrNcrNcyecyfcrNcygcomcomcomcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaaaaaaaaaaaaaaaaaaaaaaacyhaaaaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacptcpucqScqPcqPcxwckucqPcxwcqPckscxwcqPcqPcqPcqPcxvcqPcrXcxucqQcvpcpucpucyvcwscywcxtcyycyzcpucsbcpucxqcxqcxrcyGcoQcxDcyHcnOcyIcoXcyJcoXcyKcyLcnOcnRcnRcnRcnRcnRcnRbPxcvMcvNcyMcyNcxLcyOcxLcxNcyPcvNcyQcyRcrGaaaaaaaaaaaaaaaaaacqvcuVcySctFctFcyTcyUcyVcyWctMctDctNcyXctMctDcyYcqvaaaaaaaaaaaacdOcplcplcplckXcyZczacrNcrNcrNcyfcrNczbcrNczccrNczdaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacptcpucymcpucpucpucyocpucpucpucyocpucpucpucpucpucrRcpucywcpucyncvpcpucpucylcykcuhcyjcoCctdcoCcoCcpucyiczBcxCcyGcoQcxDcoQcnOckYczEczFczGczHcoXcnOczIczJczJczKczLczMczNczOcvNcxNczPczQcxNczRczSczTcvNczUczVcrGaaaaaaaaaaaaaaaaaacqvczWcuMczXcuVczYczZcAactFcAbcAccsPcyXczWcAdcAecqvaaaaaaaaaaaackEcdOcAfcAgcAgcAhcAicAjcAkcAlcAmcAncAocApcAqcokcAraaaaaacrPaafcwjcwjcwjcwjcwjaaackxaafcwjcwjcwjcwjcwjaaacrPaaacyhaaaaaacyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacptcpucymcpucpucpucyocpucpucpucyocpucpucpucpucpucrRcpucywcpucyncvpcpucpucylcykcuhcyjcoCctdcoCcoCcpucyiczBcxCcyGcoQcxDcoQcnOcCVczEczFczGczHcoXcnOczIczJczJczKczLczMczNczOcvNcxNczPczQcxNczRczSczTcvNczUczVcrGaaaaaaaaaaaaaaaaaacqvczWcuMczXcuVczYczZcAactFcAbcAccsPcyXczWcAdcAecqvaaaaaaaaaaaackEcdOcAfcAgcAgcAhcAicAjcAkcAlcAmcAncAocApcAqcokcAraaaaaacrPaafcwjcwjcwjcwjcwjaaackxaafcwjcwjcwjcwjcwjaaacrPaaacyhaaaaaacyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaacyxcpucymcpucqKcqMcyucqMcuacqMcyucqMcuacqMcqMcqMcyqcytcyqcyscyrcuhcyBcyCcACcADcAEcAFcoCclacnzcoCcoCcoCcoCcoCcAIcAJcAKcAJcnOcnOcnOcnOcnOcnOcnOcnOcALczJczJcAMcANcAObPxcAPcvNcAQcARcAScATcAUcAVcAWcvNcAXcAYcrGaaaaaaaaaaaaaaaaaacqvcuQcAZcAectFcBacBbcBcctFcBdcBecBfcBgcBhcBicBjcqvaafaafaaaaaaaaaaaabquaaacdOcBlcBmcBncBocBpcBmcBqcBrcBpcBmcBscdOaaaaaabZSaaaaafaaaaafaaaaafaaackxaaaaafaaaaafaafaafaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaaaaaaaaaaaaaamaaaaaaaaacyDcpucymcpucywcwscymcpucywcwscymcpucywcwscpucpucyvcpucywcwscyEczfczhczecBBcBCcBDcBEcoCcyFcBGcvqcBIcBJcBKcBLcBMcBKcBNcBKcBOcBPcBQcBRcBScBScBTcBUcBVcBWcBWcBXcBYcAObPxcBZcvNcvNcCacCbcCccCbcCacCdcvNcrGcCecrGaaaaaaaaaaaaaaaaaacqvctFcCfcuVctFcCgcChcCictFcCjcCkcqycgvcCmcCncCocrHaaaaaaaaaaaaaaaaaacgwaafcdOcCqcluclUcomclsclpclqcomcloclVclWcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafcyDczwczAczyczgczsczqczpczkcznczmczlczoczscpuczwczvczuczrczncztcoCcoCcoCcCzcCzcCzcCzcCzcvrcCzcCBcCCcCDcCEcCFcCEcCEcCGcCEcCEcCHcCEcCDcCIcCJcCKcCLciCcCNcCOcCPcCQcAObPwcCRcCScCTcCacAGcAVcBwcCacCWaafcCXcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaachxchFchEclXaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7418,18 +7419,18 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaamaaaaaaaafaafcgRcEbcEccEbcgRcEdcEecEdcgRcEfcEgcEfcgRaaacgRcEfcEfcEhcgRaaaaafaaacEicFUcEkcEScEQcEncrVcEocDDcFWcFXcFYcEscFZcGacGbcGacGccEscGdcGecGfcDKaaLcGgcGgcGgcGgcGgcGgcGgbNUciEciDcGjaafaaaaaaaafcGkcDfaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGlcEJcEJcEJcEJcEJcGlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaaacrPaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaafaamaaaaafaafaaacgRcEbcENcEbcgRcEdcEOcEdcgRcEfcEPcEfcgRaafcgRcEfcEfcEfcgRaafaafaafcGncGocGpcGqcGrcGscsacEocDDcoycGvcGwcEscGxcpwcoJcpxcGBcEscGCcGDcGEcDKaaacGgcGgcGgcGgcGgcGgcGgcGFcGGcGHbNUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcCmcqxcqxcqxcCocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcrPcrPcrPcrPaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZSaaaaaacgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRaaacFqcgRcgRcgRcgRaaaaaaaaaaaacCzcCzcCzcCzcCzcsccGJcGJcGJcGJcGKcGJcjIcjdcjecjdcjccGJcGJcGPcGJcGJcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcrPaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaacGQcGRcGRcGRcGScGTcGUcsecsfcsgcshcGZcpzcpycpCcpAcqIcHfcsZcsYctacHgcHicHjcHjbqMcsVcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafcHncjVcHpaaacHncjVcHpaaacHncjVcHpaafaafaaaaafaafaafaafaafcHqcGRcGRcGRcGScGTcHLctfcHtctecjTcjUctkcjJcucctZcHzcIwcHjctccHjcHjcHjcHjcHjcHjcugcGJcGgcGgcGgcGgcGgcGgcGgaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacHncjWcHpaaacHncjWcHpaaacHncjWcHpaafaafaaaaafaaaaaacHKaafcGQcGRcGRcGRcGScGTcHLcHMcHNcjXcjYcjUcwpcwocwqcufcHjcHjcxocwucyAcHjcHjcHjcHjcHjcBycGJcIbaafaaIaafaafaafaafaafaafaafaafaafcBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncjWcHpaaacHncjWcHpaafcHncjWcHpaafaaaaaaaafaafcIcaaaaafcHqcGRcGRcGRcGScGTcwmcIecIfcrQckickrcBzckecBHcBAcnycnycpDcImcEMcIocIocIocIocIocpBcCtcCscCrcCrcCrcCrcCrcCrcCrcCrcCrcBFaaacBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacHncjWcHpaafcHncjWcHpaaacHncjWcHpaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaafcIrcGVcIscItcIucLacGZcIwcHjcFscETcKYcLbcvocIycKUcKVcKYcKZcCUcHjcCMcCtcCscBFcCycBFcCycBFcCycBFcCycBFcCxaafcBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaaacHncjWcHpaafcHncjWcHpaaacHncjWcHpaafaaaaaaaaaaaaaafaafcIJcIKcIKcIKcIKcILcILcILcILcILcIMcILcGJcHjcHjcINcGJcGJcGJcujczDcIQcGJcGJcGJcIRcHjcHjcGJaaacCxcCxcCxcCxcCxcCxcCxcCxcCxcCxaafcBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafczCaafaafaafczCaafaaaaafczCaafaaaaaaaaaaaaaaacIUcIVcIWcIXcIYcFTcJacJbcJcciFcJecJfcJgcJecGJcJhcHjcJicxscJkcJlczzcJnczjcJlcJpcxscJqcHjcJrcGJaaacCxcCxcCxcCxcCxcCxcCxcCxcCxcCxaaaaanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcydcxzcxycxxcxxcxxcxxcxxcxxcxxcxxcxxcxxcxxczicxzcxzcxzcypcJzcJAcJBcJCcJDcJEcJFcJGcJHcJHcJHcJIcJJcJKcGJcHjcHjcJicxscJkcJLcJMcJNcJOcJLcJpcxscJqcHjcJPcGJaaacCxcCxcCxcCxcCxcCxcCxcCxcCxcCxaafcBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcxfaafaaaaafcxfaafaaaaafcxfaafaaaaaaaaaaaaaaacIUcIVcJRcJScJTcJUcIKcJVcJWcJecJecJXcJXcJYcGJcHjcHjcJZcxscJkcKacJMcKbcKccKacJpcxscKdcHjcHjcGJaaacCxcCxcCxcCxcCxcCxcCxcCxcCxcCxaafaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaafcHncwrcHpaaacHncwrcHpaaacHncwrcHpaafaaaaaaaaaaaaaafaafcKfcIKcIKcIKcIKcKgcKhcKicKicKjcKgcKgcGJcGJcGZcGJcGJcGJcGJcGJcwDcGJcGJcGJcGJcGJcGZcGJcGJaafcCwcCvcCwcCvcCwcCvcCwcCvcCwcCvaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcrPaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaacGQcGRcGRcGRcGScGTcGUcsecsfcsgcshcGZcpzcpycpCcpAcqIcHfcsZcsYctacHgcHicHjcHjbqKbqMcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafcHncjVcHpaaacHncjVcHpaaacHncjVcHpaafaafaaaaafaafaafaafaafcHqcGRcGRcGRcGScGTcHLctfcHtctecjTcjUctkcjJcucctZcHzcIwcHjctccHjcHjcHjcHjcHjcHjcsVcGJcGgcGgcGgcGgcGgcGgcGgaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacHncjWcHpaaacHncjWcHpaaacHncjWcHpaafaafaaaaafaaaaaacHKaafcGQcGRcGRcGRcGScGTcHLcHMcHNcjXcjYcjUcwpcwocwqcufcHjcHjcxocwucyAcHjcHjcHjcHjcHjcBxcGJcIbaafaaIaafaafaafaafaafaafaafaafaafcugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncjWcHpaaacHncjWcHpaafcHncjWcHpaafaaaaaaaafaafcIcaaaaafcHqcGRcGRcGRcGScGTcwmcIecIfcrQckickrcBzckecBHcBAcnycnycpDcImcEMcIocIocIocIocIocpBcCscCrcBFcBFcBFcBFcBFcBFcBFcBFcBFcByaaacugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacHncjWcHpaafcHncjWcHpaaacHncjWcHpaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaafcIrcGVcIscItcIucLacGZcIwcHjcFscETcKYcLbcvocIycKUcKVcKYcKZcCMcHjcCycCscCrcBycCxcBycCxcBycCxcBycCxcBycCwaafcugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaaacHncjWcHpaafcHncjWcHpaaacHncjWcHpaafaaaaaaaaaaaaaafaafcIJcIKcIKcIKcIKcILcILcILcILcILcIMcILcGJcHjcHjcINcGJcGJcGJcujczDcIQcGJcGJcGJcIRcHjcHjcGJaaacCwcCwcCwcCwcCwcCwcCwcCwcCwcCwaafcugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafczCaafaafaafczCaafaaaaafczCaafaaaaaaaaaaaaaaacIUcIVcIWcIXcIYcFTcJacJbcJcciFcJecJfcJgcJecGJcJhcHjcJicxscJkcJlczzcJnczjcJlcJpcxscJqcHjcJrcGJaaacCwcCwcCwcCwcCwcCwcCwcCwcCwcCwaaaaanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcydcxzcxycxxcxxcxxcxxcxxcxxcxxcxxcxxcxxcxxczicxzcxzcxzcypcJzcJAcJBcJCcJDcJEcJFcJGcJHcJHcJHcJIcJJcJKcGJcHjcHjcJicxscJkcJLcJMcJNcJOcJLcJpcxscJqcHjcJPcGJaaacCwcCwcCwcCwcCwcCwcCwcCwcCwcCwaafcugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcxfaafaaaaafcxfaafaaaaafcxfaafaaaaaaaaaaaaaaacIUcIVcJRcJScJTcJUcIKcJVcJWcJecJecJXcJXcJYcGJcHjcHjcJZcxscJkcKacJMcKbcKccKacJpcxscKdcHjcHjcGJaaacCwcCwcCwcCwcCwcCwcCwcCwcCwcCwaafaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaafcHncwrcHpaaacHncwrcHpaaacHncwrcHpaafaaaaaaaaaaaaaafaafcKfcIKcIKcIKcIKcKgcKhcKicKicKjcKgcKgcGJcGJcGZcGJcGJcGJcGJcGJcwDcGJcGJcGJcGJcGJcGZcGJcGJaafcCvcCucCvcCucCvcCucCvcCucCvcCuaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHncwrcHpaafcHncwrcHpaaacHncwrcHpaaaaaaaaaaafaaaaafaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaafaafaaaaaaaafaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncwrcHpaaacHncwrcHpaaacHncwrcHpaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaLaaaaafaaaaaacBxcBxcBxcCucBxcBxaancBxcBxaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncwrcHpaaacHncwrcHpaaacHncwrcHpaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaLaaaaafaaaaaacugcugcugcCtcugcugaancugcugaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncwrcHpaaacHncwrcHpaafcHncwrcHpaafaafaafaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIaaIbZSbZSaaIaaIaaaaaaaaaaaIaaIaaIaaIaaIaaIaaIaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqaafcHncwncHpaaacHncwncHpaaacHncwncHpaafaaIaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaafaaaaaaaaaaafaafaafaaaaaaaafaafaaaaaIaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKncKncKncKncKncKncKnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From f978e782f1e0d03e0beaab1759867a774eecbe2e Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Thu, 29 Jan 2015 01:43:40 +1030 Subject: [PATCH 19/90] Tweaks. Trays now display their status when examined rather than attacked with an empty hand. --- code/modules/hydroponics/hydro_tray.dm | 69 +++++++++++++----------- code/modules/hydroponics/seed_datums.dm | 4 +- icons/obj/hydroponics_growing.dmi | Bin 62016 -> 61812 bytes 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index cf555ba5e0..c5aa5f45ff 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -760,44 +760,53 @@ var/global/list/plant_icon_cache = list() else if(dead) remove_dead(user) +/obj/machinery/portable_atmospherics/hydroponics/examine() + + ..() + + if(!Adjacent(usr)) + return + + if(seed) + usr << "[src] has [seed.display_name] planted." + if(dead) + usr << "The plant is dead." + else if(health <= (seed.endurance / 2)) + usr << "The plant looks unhealthy." else - if(seed && !dead) - usr << "[src] has [seed.display_name] planted." - if(health <= (seed.endurance / 2)) - usr << "The plant looks unhealthy." - else - usr << "[src] is empty." - usr << "Water: [round(waterlevel,0.1)]/100" - usr << "Nutrient: [round(nutrilevel,0.1)]/10" - if(weedlevel >= 5) - usr << "[src] is filled with weeds!" - if(pestlevel >= 5) - usr << "[src] is filled with tiny worms!" + usr << "[src] is empty." + usr << "Water: [round(waterlevel,0.1)]/100" + usr << "Nutrient: [round(nutrilevel,0.1)]/10" - if(!istype(src,/obj/machinery/portable_atmospherics/hydroponics/soil)) + if(weedlevel >= 5) + usr << "[src] is filled with weeds!" + if(pestlevel >= 5) + usr << "[src] is filled with tiny worms!" - var/turf/T = loc - var/datum/gas_mixture/environment + if(!istype(src,/obj/machinery/portable_atmospherics/hydroponics/soil)) - if(closed_system && (connected_port || holding)) - environment = air_contents + var/turf/T = loc + var/datum/gas_mixture/environment - if(!environment) - if(istype(T)) - environment = T.return_air() + if(closed_system && (connected_port || holding)) + environment = air_contents - if(!environment) //We're in a crate or nullspace, bail out. - return + if(!environment) + if(istype(T)) + environment = T.return_air() - var/area/A = T.loc - var/light_available - if(A) - if(A.lighting_use_dynamic) - light_available = max(0,min(10,T.lighting_lumcount)-5) - else - light_available = 5 + if(!environment) //We're in a crate or nullspace, bail out. + return - usr << "The tray's sensor suite is reporting a light level of [light_available] lumens and a temperature of [environment.temperature]K." + var/area/A = T.loc + var/light_available + if(A) + if(A.lighting_use_dynamic) + light_available = max(0,min(10,T.lighting_lumcount)-5) + else + light_available = 5 + + usr << "The tray's sensor suite is reporting a light level of [light_available] lumens and a temperature of [environment.temperature]K." /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid() set name = "Toggle Tray Lid" diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 875583f92a..991187eee2 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1553,7 +1553,7 @@ proc/populate_seed_list() packet_icon = "seed-soybean" product_icon = "bean" product_colour = "#EBE7C0" - plant_icon = "stalk4" + plant_icon = "stalk" /datum/seed/wheat name = "wheat" @@ -1654,7 +1654,7 @@ proc/populate_seed_list() product_icon = "stalk" product_colour = "#B4D6BD" plant_colour = "#6BBD68" - plant_icon = "stalk4" + plant_icon = "stalk3" /datum/seed/watermelon name = "watermelon" diff --git a/icons/obj/hydroponics_growing.dmi b/icons/obj/hydroponics_growing.dmi index e3b5e8df9517c132e67e1df9a458bc74898adc90..2b3d67b6e513700080a091cb4cc704c8cb2dc1c9 100644 GIT binary patch delta 21106 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 delta 21311 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%0DDLR(YS@a*i? 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 From 92d00eb87d6d1e23f05228e75b2b8e7e07b0fc67 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Thu, 29 Jan 2015 01:57:51 +1030 Subject: [PATCH 20/90] Tweaks and fixes for growth and icon generation. --- code/modules/hydroponics/hydro_tray.dm | 2 +- code/modules/hydroponics/seed_datums.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index c5aa5f45ff..f6f9637647 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -482,7 +482,7 @@ var/global/list/plant_icon_cache = list() plant_icon_cache["[ikey]-[seed.plant_colour]"] = plant_overlay overlays |= plant_overlay - if(harvest) + if(harvest && overlay_stage == seed.growth_stages) ikey = "[seed.product_icon]" var/image/harvest_overlay = plant_icon_cache["product-[ikey]-[seed.product_colour]"] if(!harvest_overlay) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 991187eee2..3f3dd7e0d8 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1439,7 +1439,7 @@ proc/populate_seed_list() product_icon = "grapes" product_colour = "#BB6AC4" plant_colour = "#378F2E" - plant_icon = "grapes" + plant_icon = "vine" /datum/seed/grapes/green name = "greengrapes" From 0c0e1976574df3022e255615dcf4f1d60dffa710 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 30 Jan 2015 12:42:36 +1030 Subject: [PATCH 21/90] Seed packets are now generated via masks --- code/modules/hydroponics/seeds.dm | 39 ++++++++++++++++++++++++++--- icons/obj/hydroponics_products.dmi | Bin 4343 -> 4343 bytes icons/obj/seeds.dmi | Bin 16100 -> 6966 bytes 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 6f1b732849..24b215c076 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -1,8 +1,10 @@ +var/global/list/plant_seed_sprites = list() + //Seed packet object/procs. /obj/item/seeds name = "packet of seeds" icon = 'icons/obj/seeds.dmi' - icon_state = "seed" + icon_state = "blank" w_class = 2.0 var/seed_type @@ -22,9 +24,38 @@ //Updates strings and icon appropriately based on seed datum. /obj/item/seeds/proc/update_appearance() if(!seed) return - icon_state = seed.packet_icon - src.name = "packet of [seed.seed_name] [seed.seed_noun]" - src.desc = "It has a picture of [seed.display_name] on the front." + + // Update icon. + overlays.Cut() + var/is_seeds = ((seed.seed_noun in list("seeds","pits","nodes")) ? 1 : 0) + var/image/seed_mask + var/seed_base_key = "base-[is_seeds ? seed.plant_colour : "spores"]" + if(plant_seed_sprites[seed_base_key]) + seed_mask = plant_seed_sprites[seed_base_key] + else + seed_mask = image('icons/obj/seeds.dmi',"[is_seeds ? "seed" : "spore"]-mask") + if(is_seeds) // Spore glass bits aren't coloured. + seed_mask.color = seed.plant_colour + plant_seed_sprites[seed_base_key] = seed_mask + + var/image/seed_overlay + var/seed_overlay_key = "[seed.product_icon]-[seed.product_colour]" + if(plant_seed_sprites[seed_overlay_key]) + seed_overlay = plant_seed_sprites[seed_overlay_key] + else + seed_overlay = image('icons/obj/seeds.dmi',"[seed.product_icon]") + seed_overlay.color = seed.product_colour + plant_seed_sprites[seed_overlay_key] = seed_overlay + + overlays |= seed_mask + overlays |= seed_overlay + + if(is_seeds) + src.name = "packet of [seed.seed_name] [seed.seed_noun]" + src.desc = "It has a picture of [seed.display_name] on the front." + else + src.name = "sample of [seed.seed_name] [seed.seed_noun]" + src.desc = "It's labelled as coming from [seed.display_name]." /obj/item/seeds/examine(mob/user) ..(user) diff --git a/icons/obj/hydroponics_products.dmi b/icons/obj/hydroponics_products.dmi index 0af08a1bf7d65b269f70f36b428b09306f77b844..7b2c18d3518d80f0723f8a372113c7083617cb00 100644 GIT binary patch delta 71 zcmV-N0J#76A@?D$E&@7YH2D;H$k?=aW2L~}p^AQ#oEVv?=h@)ZFuS|+3*JZ%L~ delta 71 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�^r(QL83$EHO)(>P{ECZ`x)yiz-q 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 Date: Fri, 30 Jan 2015 19:40:17 +1030 Subject: [PATCH 22/90] Moved gas/light/pressure from hydro tray to seed datum --- code/global.dm | 6 ++ code/modules/hydroponics/hydro_tools.dm | 4 +- code/modules/hydroponics/hydro_tray.dm | 50 +--------------- code/modules/hydroponics/seed_datums.dm | 55 +++++++++++++++--- .../reagent_containers/food/snacks/grown.dm | 8 ++- code/setup.dm | 3 + icons/obj/seeds.dmi | Bin 6966 -> 7004 bytes 7 files changed, 69 insertions(+), 57 deletions(-) diff --git a/code/global.dm b/code/global.dm index c5fd821f79..55c63433cb 100644 --- a/code/global.dm +++ b/code/global.dm @@ -254,5 +254,11 @@ var/static/list/scarySounds = list( // Bomb cap! var/max_explosion_range = 14 +// Several cache lists for plants/hydroponics. +var/global/list/seed_types = list() // A list of all seed data. +var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. +var/global/list/plant_icon_cache = list() // Stores images of growth, fruits and seeds. + // Announcer intercom, because too much stuff creates an intercom for one message then hard del()s it. var/global/obj/item/device/radio/intercom/global_announcer = new(null) + diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 1d18a8be16..f273cff7d6 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -162,7 +162,9 @@ if(grown_seed.stings) user << "
The fruit is covered in stinging spines." - if(grown_seed.juicy) + if(grown_seed.juicy == 1) + user << "
The fruit is soft-skinned and juicy." + else if(grown_seed.juicy == 2) user << "
The fruit is excessively juicy." if(grown_seed.explosive) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index f6f9637647..be90ce48ce 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -1,6 +1,3 @@ -#define HYDRO_SPEED_MULTIPLIER 1 -var/global/list/plant_icon_cache = list() - /obj/machinery/portable_atmospherics/hydroponics name = "hydroponics tray" icon = 'icons/obj/hydroponics_machines.dmi' @@ -239,59 +236,20 @@ var/global/list/plant_icon_cache = list() var/turf/T = loc var/datum/gas_mixture/environment - // If we're closed, take from our internal sources. if(closed_system && (connected_port || holding)) environment = air_contents - // If atmos input is not there, grab from turf. - if(!environment) - if(istype(T)) - environment = T.return_air() - + if(!environment && istype(T)) environment = T.return_air() if(!environment) return - // Handle gas consumption. - if(seed.consume_gasses && seed.consume_gasses.len) - var/missing_gas = 0 - for(var/gas in seed.consume_gasses) - if(environment && environment.gas && environment.gas[gas] && \ - environment.gas[gas] >= seed.consume_gasses[gas]) - environment.adjust_gas(gas,-seed.consume_gasses[gas],1) - else - missing_gas++ - - if(missing_gas > 0) - health -= missing_gas * HYDRO_SPEED_MULTIPLIER - - // Process it. - var/pressure = environment.return_pressure() - if(pressure < seed.lowkpa_tolerance || pressure > seed.highkpa_tolerance) - health -= healthmod - - if(abs(environment.temperature - seed.ideal_heat) > seed.heat_tolerance) - health -= healthmod - - // Handle gas production. - if(seed.exude_gasses && seed.exude_gasses.len) - for(var/gas in seed.exude_gasses) - environment.adjust_gas(gas, max(1,round((seed.exude_gasses[gas]*seed.potency)/seed.exude_gasses.len))) + // Seed datum handles gasses, light and pressure. + health -= seed.handle_environment(T,environment) // If we're attached to a pipenet, then we should let the pipenet know we might have modified some gasses if (closed_system && connected_port) update_connected_network() - // Handle light requirements. - var/area/A = T.loc - if(A) - var/light_available - if(A.lighting_use_dynamic) - light_available = max(0,min(10,T.lighting_lumcount)-5) - else - light_available = 5 - if(abs(light_available - seed.ideal_light) > seed.light_tolerance) - health -= healthmod - // Toxin levels beyond the plant's tolerance cause damage, but // toxins are sucked up each tick and slowly reduce over time. if(toxins > 0) @@ -839,5 +797,3 @@ var/global/list/plant_icon_cache = list() /obj/machinery/portable_atmospherics/hydroponics/soil/New() ..() verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid - -#undef HYDRO_SPEED_MULTIPLIER diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 3f3dd7e0d8..9d00a5f3d2 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1,9 +1,5 @@ -var/global/list/seed_types = list() // A list of all seed data. -var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. - -// Index is the root icon_state, value is the number of states. -var/global/list/plant_sprites = list() -var/global/list/plant_product_sprites = list() +var/global/list/plant_sprites = list() // List of all harvested product sprites. +var/global/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages. // Debug for testing seed genes. /client/proc/show_plant_genes() @@ -303,6 +299,48 @@ proc/populate_seed_list() origin_turf.visible_message("The [thrown.name] splatters against [target]!") del(thrown) +/datum/seed/proc/handle_environment(var/turf/current_turf, var/datum/gas_mixture/environment) + + var/health_change = 0 + // Handle gas consumption. + if(consume_gasses && consume_gasses.len) + var/missing_gas = 0 + for(var/gas in consume_gasses) + if(environment && environment.gas && environment.gas[gas] && \ + environment.gas[gas] >= consume_gasses[gas]) + environment.adjust_gas(gas,-consume_gasses[gas],1) + else + missing_gas++ + + if(missing_gas > 0) + health_change += missing_gas * HYDRO_SPEED_MULTIPLIER + + // Process it. + var/pressure = environment.return_pressure() + if(pressure < lowkpa_tolerance || pressure > highkpa_tolerance) + health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER + + if(abs(environment.temperature - ideal_heat) > heat_tolerance) + health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER + + // Handle gas production. + if(exude_gasses && exude_gasses.len) + for(var/gas in exude_gasses) + environment.adjust_gas(gas, max(1,round((exude_gasses[gas]*potency)/exude_gasses.len))) + + // Handle light requirements. + var/area/A = get_area(current_turf) + if(A) + var/light_available + if(A.lighting_use_dynamic) + light_available = max(0,min(10,current_turf.lighting_lumcount)-5) + else + light_available = 5 + if(abs(light_available - ideal_light) > light_tolerance) + health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER + + return health_change + /datum/seed/proc/apply_special_effect(var/mob/living/target,var/obj/item/thrown) var/impact = 1 @@ -358,7 +396,10 @@ proc/populate_seed_list() harvest_repeat = 1 if(prob(15)) - juicy = 1 + if(prob(15)) + juicy = 2 + else + juicy = 1 if(prob(5)) stings = 1 diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index 12bb705903..03e08c4182 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -36,7 +36,7 @@ bitesize = 1+round(reagents.total_volume / 2, 1) /obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(var/mob/living/M) - if(seed && seed.juicy) + if(seed && seed.juicy == 2) if(istype(M)) if(M.buckled) @@ -48,10 +48,14 @@ return M.stop_pulling() - M << "\blue You slipped on the [name]!" + M << "You slipped on the [name]!" playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) M.Stun(8) M.Weaken(5) + seed.thrown_at(src,M) + sleep(-1) + if(src) del(src) + return /obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom) ..() diff --git a/code/setup.dm b/code/setup.dm index 472db42b87..25c6dd7a2c 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -774,3 +774,6 @@ var/list/be_special_flags = list( #define SUIT_SENSOR_BINARY 1 #define SUIT_SENSOR_VITAL 2 #define SUIT_SENSOR_TRACKING 3 + +//General-purpose life speed define for plants. +#define HYDRO_SPEED_MULTIPLIER 1 diff --git a/icons/obj/seeds.dmi b/icons/obj/seeds.dmi index 2ffd035312acf23e48224599cf9c686d7da6d87e..221cb520726279cb905cff6e207b1ed3981d7d1b 100644 GIT binary patch delta 6240 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 XErBtv+0B^)pzE4}xqhAQt+@XKFV{lx delta 6202 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 eg9J4#CyBYn=KF1-71 Date: Fri, 30 Jan 2015 22:44:55 +1030 Subject: [PATCH 23/90] Moved grown.dm to hydro folder for traits. --- .../food/snacks => hydroponics}/grown.dm | 1294 ++++++++--------- 1 file changed, 647 insertions(+), 647 deletions(-) rename code/modules/{reagents/reagent_containers/food/snacks => hydroponics}/grown.dm (96%) diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/hydroponics/grown.dm similarity index 96% rename from code/modules/reagents/reagent_containers/food/snacks/grown.dm rename to code/modules/hydroponics/grown.dm index 03e08c4182..9a9e351186 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -1,648 +1,648 @@ -//Grown foods. -/obj/item/weapon/reagent_containers/food/snacks/grown - - name = "fruit" - desc = "It's a fruit." - icon = 'icons/obj/harvest.dmi' - - var/plantname - var/datum/seed/seed - var/potency = -1 - -/obj/item/weapon/reagent_containers/food/snacks/grown/New(newloc,planttype) - - ..() - - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) - - // Fill the object up with the appropriate reagents. - if(planttype) - plantname = planttype - seed = seed_types[plantname] - if(!seed || !seed.chems) - return - - potency = seed.potency - - for(var/rid in seed.chems) - var/list/reagent_data = seed.chems[rid] - var/rtotal = reagent_data[1] - if(reagent_data.len > 1 && potency > 0) - rtotal += round(potency/reagent_data[2]) - reagents.add_reagent(rid,max(1,rtotal)) - - if(reagents.total_volume > 0) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(var/mob/living/M) - if(seed && seed.juicy == 2) - if(istype(M)) - - if(M.buckled) - return - - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.shoes && H.shoes.flags & NOSLIP) - return - - M.stop_pulling() - M << "You slipped on the [name]!" - playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(8) - M.Weaken(5) - seed.thrown_at(src,M) - sleep(-1) - if(src) del(src) - return - -/obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom) - ..() - if(seed) seed.thrown_at(src,hit_atom) - -/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if(seed && seed.produces_power && istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if(C.use(5)) - //TODO: generalize this. - user << "You add some cable to the [src.name] and slide it inside the battery casing." - var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(get_turf(user)) - if(src.loc == user && !(user.l_hand && user.r_hand) && istype(user,/mob/living/carbon/human)) - user.put_in_hands(pocell) - pocell.maxcharge = src.potency * 10 - pocell.charge = pocell.maxcharge - del(src) - return - -/obj/item/weapon/reagent_containers/food/snacks/grown/attack(var/mob/living/carbon/M, var/mob/user, var/def_zone) - if(user == M) - return ..() - - if(user.a_intent == "hurt") - - // This is being copypasted here because reagent_containers (WHY DOES FOOD DESCEND FROM THAT) overrides it completely. - // TODO: refactor all food paths to be less horrible and difficult to work with in this respect. ~Z - if(!istype(M) || (can_operate(M) && do_surgery(M,user,src))) return 0 - - user.lastattacked = M - M.lastattacker = user - user.attack_log += "\[[time_stamp()]\] Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" - M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" - msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" ) - - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/hit = H.attacked_by(src, user, def_zone) - if(hit && hitsound) - playsound(loc, hitsound, 50, 1, -1) - return hit - else - if(attack_verb.len) - user.visible_message("[M] has been [pick(attack_verb)] with [src] by [user]!") - else - user.visible_message("[M] has been attacked with [src] by [user]!") - - if (hitsound) - playsound(loc, hitsound, 50, 1, -1) - switch(damtype) - if("brute") - M.take_organ_damage(force) - if(prob(33)) - var/turf/simulated/location = get_turf(M) - if(istype(location)) location.add_blood_floor(M) - if("fire") - if (!(COLD_RESISTANCE in M.mutations)) - M.take_organ_damage(0, force) - M.updatehealth() - - if(seed && seed.stings) - if(!reagents || reagents.total_volume <= 0) - return - reagents.remove_any(rand(1,3)) - seed.thrown_at(src,M) - sleep(-1) - if(!src) - return - if(prob(35)) - if(user) - user << "\The [src] has fallen to bits." - user.drop_from_inventory(src) - del(src) - - add_fingerprint(user) - return 1 - - else - ..() - -/obj/item/weapon/reagent_containers/food/snacks/grown/attack_self(mob/user as mob) - - if(!seed) - return - - if(istype(user.loc,/turf/space)) - return - - if(user.a_intent == "hurt") - user.visible_message("\The [user] squashes \the [src]!") - seed.thrown_at(src,user) - sleep(-1) - if(src) del(src) - return - - if(seed.spread == 0) - return - - // TODO: Generalize. - var/obj/effect/glowshroom/planted = new /obj/effect/glowshroom(user.loc) - planted.delay = 50 - planted.endurance = 100 - planted.potency = potency - - user << "You plant the [src.name]." - del(src) - -/obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user) - ..() - if(!seed) - return - if(seed.biolum) - user.SetLuminosity(user.luminosity + seed.biolum) - SetLuminosity(0) - if(seed.stings) - var/mob/living/carbon/human/H = user - if(istype(H) && H.gloves) - return - if(!reagents || reagents.total_volume <= 0) - return - reagents.remove_any(rand(1,3)) - seed.do_thorns(H,src) - seed.do_sting(H,src,pick("r_hand","l_hand")) - -/obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user) - if(!..() || !seed) - return - if(seed.biolum) - user.SetLuminosity(user.luminosity - seed.biolum) - SetLuminosity(seed.biolum) - -// Food object defines follow. -/obj/item/weapon/reagent_containers/food/snacks/grown/corn - name = "ear of corn" - desc = "Needs some butter!" - plantname = "corn" - icon_state = "corn" - potency = 40 - filling_color = "#FFEE00" - trash = /obj/item/weapon/corncob - -/obj/item/weapon/reagent_containers/food/snacks/grown/cherries - name = "cherries" - desc = "Great for toppings!" - icon_state = "cherry" - filling_color = "#FF0000" - gender = PLURAL - plantname = "cherry" - -/obj/item/weapon/reagent_containers/food/snacks/grown/poppy - name = "poppy" - desc = "Long-used as a symbol of rest, peace, and death." - icon_state = "poppy" - potency = 30 - filling_color = "#CC6464" - plantname = "poppies" - -/obj/item/weapon/reagent_containers/food/snacks/grown/harebell - name = "harebell" - desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten’d not thy breath.\"" - icon_state = "harebell" - potency = 1 - filling_color = "#D4B2C9" - plantname = "harebells" - -/obj/item/weapon/reagent_containers/food/snacks/grown/potato - name = "potato" - desc = "Boil 'em! Mash 'em! Stick 'em in a stew!" - icon_state = "potato" - potency = 25 - filling_color = "#E6E8DA" - plantname = "potato" - -/obj/item/weapon/reagent_containers/food/snacks/grown/grapes - name = "bunch of grapes" - desc = "Nutritious!" - icon_state = "grapes" - filling_color = "#A332AD" - plantname = "grapes" - -/obj/item/weapon/reagent_containers/food/snacks/grown/greengrapes - name = "bunch of green grapes" - desc = "Nutritious!" - icon_state = "greengrapes" - potency = 25 - filling_color = "#A6FFA3" - plantname = "greengrapes" - -/obj/item/weapon/reagent_containers/food/snacks/grown/peanut - name = "peanut" - desc = "Nuts!" - icon_state = "peanut" - filling_color = "857e27" - potency = 25 - plantname = "peanut" - -/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage - name = "cabbage" - desc = "Ewwwwwwwwww. Cabbage." - icon_state = "cabbage" - potency = 25 - filling_color = "#A2B5A1" - plantname = "cabbage" - -/obj/item/weapon/reagent_containers/food/snacks/grown/berries - name = "bunch of berries" - desc = "Nutritious!" - icon_state = "berrypile" - filling_color = "#C2C9FF" - plantname = "berries" - -/obj/item/weapon/reagent_containers/food/snacks/grown/plastellium - name = "clump of plastellium" - desc = "Hmm, needs some processing" - icon_state = "plastellium" - filling_color = "#C4C4C4" - plantname = "plastic" - -/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries - name = "bunch of glow-berries" - desc = "Nutritious!" - filling_color = "#D3FF9E" - icon_state = "glowberrypile" - plantname = "glowberries" - -/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod - name = "cocoa pod" - desc = "Can be ground into cocoa powder." - icon_state = "cocoapod" - potency = 50 - filling_color = "#9C8E54" - plantname = "cocoa" - -/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane - name = "sugarcane" - desc = "Sickly sweet." - icon_state = "sugarcane" - potency = 50 - filling_color = "#C0C9AD" - plantname = "sugarcane" - -/obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries - name = "bunch of poison-berries" - desc = "Taste so good, you could die!" - icon_state = "poisonberrypile" - gender = PLURAL - potency = 15 - filling_color = "#B422C7" - plantname = "poisonberries" - -/obj/item/weapon/reagent_containers/food/snacks/grown/deathberries - name = "bunch of death-berries" - desc = "Taste so good, you could die!" - icon_state = "deathberrypile" - gender = PLURAL - potency = 50 - filling_color = "#4E0957" - plantname = "deathberries" - -/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris - name = "ambrosia vulgaris branch" - desc = "This is a plant containing various healing chemicals." - icon_state = "ambrosiavulgaris" - potency = 10 - filling_color = "#125709" - plantname = "ambrosia" - -/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus - name = "ambrosia deus branch" - desc = "Eating this makes you feel immortal!" - icon_state = "ambrosiadeus" - potency = 10 - filling_color = "#229E11" - plantname = "ambrosiadeus" - -/obj/item/weapon/reagent_containers/food/snacks/grown/apple - name = "apple" - desc = "It's a little piece of Eden." - icon_state = "apple" - potency = 15 - filling_color = "#DFE88B" - plantname = "apple" - -/obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned - name = "apple" - desc = "It's a little piece of Eden." - icon_state = "apple" - potency = 15 - filling_color = "#B3BD5E" - plantname = "poisonapple" - -/obj/item/weapon/reagent_containers/food/snacks/grown/goldapple - name = "golden apple" - desc = "Emblazoned upon the apple is the word 'Kallisti'." - icon_state = "goldapple" - potency = 15 - filling_color = "#F5CB42" - plantname = "goldapple" - -/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon - name = "watermelon" - desc = "It's full of watery goodness." - icon_state = "watermelon" - potency = 10 - filling_color = "#FA2863" - slice_path = /obj/item/weapon/reagent_containers/food/snacks/watermelonslice - slices_num = 5 - plantname = "watermelon" - -/obj/item/weapon/reagent_containers/food/snacks/grown/lime - name = "lime" - desc = "It's so sour, your face will twist." - icon_state = "lime" - potency = 20 - filling_color = "#28FA59" - plantname = "lime" - -/obj/item/weapon/reagent_containers/food/snacks/grown/lemon - name = "lemon" - desc = "When life gives you lemons, be grateful they aren't limes." - icon_state = "lemon" - potency = 20 - filling_color = "#FAF328" - plantname = "lemon" - -/obj/item/weapon/reagent_containers/food/snacks/grown/orange - name = "orange" - desc = "It's a tangy fruit." - icon_state = "orange" - potency = 20 - filling_color = "#FAAD28" - plantname = "orange" - -/obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet - name = "white-beet" - desc = "You can't beat white-beet." - icon_state = "whitebeet" - potency = 15 - filling_color = "#FFFCCC" - plantname = "whitebeet" - -/obj/item/weapon/reagent_containers/food/snacks/grown/banana - name = "banana" - desc = "It's an excellent prop for a comedy." - icon = 'icons/obj/items.dmi' - icon_state = "banana" - item_state = "banana" - filling_color = "#FCF695" - trash = /obj/item/weapon/bananapeel - plantname = "banana" - -/obj/item/weapon/reagent_containers/food/snacks/grown/chili - name = "chili" - desc = "It's spicy! Wait... IT'S BURNING ME!!" - icon_state = "chilipepper" - filling_color = "#FF0000" - plantname = "chili" - -/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant - name = "eggplant" - desc = "Maybe there's a chicken inside?" - icon_state = "eggplant" - filling_color = "#550F5C" - plantname = "eggplant" - -/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans - name = "soybeans" - desc = "It's pretty bland, but oh the possibilities..." - gender = PLURAL - filling_color = "#E6E8B7" - icon_state = "soybeans" - plantname = "soybean" - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato - name = "tomato" - desc = "I say to-mah-to, you say tom-mae-to." - icon_state = "tomato" - filling_color = "#FF0000" - potency = 10 - plantname = "tomato" - -/obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato - name = "blood-tomato" - desc = "So juicy." - icon_state = "bloodtomato" - potency = 10 - filling_color = "#FF0000" - plantname = "bloodtomato" - -/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato - name = "blue-tomato" - desc = "I say blue-mah-to, you say blue-mae-to." - icon_state = "bluetomato" - potency = 10 - filling_color = "#586CFC" - plantname = "bluetomato" - -/obj/item/weapon/reagent_containers/food/snacks/grown/wheat - name = "wheat" - desc = "Sigh... wheat... a-grain?" - gender = PLURAL - icon_state = "wheat" - filling_color = "#F7E186" - plantname = "wheat" - -/obj/item/weapon/reagent_containers/food/snacks/grown/ricestalk - name = "rice stalk" - desc = "Rice to see you." - gender = PLURAL - icon_state = "rice" - filling_color = "#FFF8DB" - plantname = "rice" - -/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod - name = "kudzu pod" - desc = "Pueraria Virallis: An invasive species with vines that rapidly creep and wrap around whatever they contact." - icon_state = "kudzupod" - filling_color = "#59691B" - plantname = "kudzu" - -/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper - name = "ice-pepper" - desc = "It's a mutant strain of chili" - icon_state = "icepepper" - potency = 20 - filling_color = "#66CEED" - plantname = "icechili" - -/obj/item/weapon/reagent_containers/food/snacks/grown/carrot - name = "carrot" - desc = "It's good for the eyes!" - icon_state = "carrot" - potency = 10 - filling_color = "#FFC400" - plantname = "carrot" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi - name = "reishi" - desc = "Ganoderma lucidum: A special fungus believed to help relieve stress." - icon_state = "reishi" - potency = 10 - filling_color = "#FF4800" - plantname = "reishi" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita - name = "fly amanita" - desc = "Amanita Muscaria: Learn poisonous mushrooms by heart. Only pick mushrooms you know." - icon_state = "amanita" - potency = 10 - filling_color = "#FF0000" - plantname = "amanita" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel - name = "destroying angel" - desc = "Amanita Virosa: Deadly poisonous basidiomycete fungus filled with alpha amatoxins." - icon_state = "angel" - potency = 35 - filling_color = "#FFDEDE" - plantname = "destroyingangel" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap - name = "liberty-cap" - desc = "Psilocybe Semilanceata: Liberate yourself!" - icon_state = "libertycap" - potency = 15 - filling_color = "#F714BE" - plantname = "libertycap" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet - name = "plump-helmet" - desc = "Plumus Hellmus: Plump, soft and s-so inviting~" - icon_state = "plumphelmet" - filling_color = "#F714BE" - plantname = "plumphelmet" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom - name = "walking mushroom" - desc = "Plumus Locomotus: The beginning of the great walk." - icon_state = "walkingmushroom" - filling_color = "#FFBFEF" - potency = 30 - plantname = "walkingmushroom" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle - name = "chanterelle cluster" - desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!" - icon_state = "chanterelle" - filling_color = "#FFE991" - plantname = "mushrooms" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom - name = "glowshroom cluster" - desc = "Mycena Bregprox: This species of mushroom glows in the dark. Or does it?" - icon_state = "glowshroom" - filling_color = "#DAFF91" - potency = 30 - plantname = "glowshroom" - -/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato - name = "blue-space tomato" - desc = "So lubricated, you might slip through space-time." - icon_state = "bluespacetomato" - potency = 20 - origin_tech = "bluespace=3" - filling_color = "#91F8FF" - plantname = "bluespacetomato" - -// Super special snowflake grown items below. -/obj/item/weapon/reagent_containers/food/snacks/grown/shand - name = "S'rendarr's Hand leaf" - desc = "A leaf sample from a lowland thicket shrub. Smells strongly like wax." - icon_state = "shand" - filling_color = "#70C470" - plantname = "shand" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mtear - name = "sprig of Messa's Tear" - desc = "A mountain climate herb with a soft, cold blue flower, known to contain an abundance of healing chemicals." - icon_state = "mtear" - filling_color = "#70C470" - plantname = "mtear" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mtear/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - var/obj/item/stack/medical/ointment/tajaran/poultice = new /obj/item/stack/medical/ointment/tajaran(user.loc) - - poultice.heal_burn = potency - del(src) - - user << "You mash the petals into a poultice." - -/obj/item/weapon/reagent_containers/food/snacks/grown/shand/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - var/obj/item/stack/medical/bruise_pack/tajaran/poultice = new /obj/item/stack/medical/bruise_pack/tajaran(user.loc) - - poultice.heal_brute = potency - del(src) - - user << "You mash the leaves into a poultice." - -/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin - name = "pumpkin" - desc = "It's large and scary." - icon_state = "pumpkin" - potency = 10 - filling_color = "#FAB728" - plantname = "pumpkin" - -/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/twohanded/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/melee/energy)) - user.show_message("You carve a face into [src]!", 1) - new /obj/item/clothing/head/pumpkinhead (user.loc) - del(src) - return - -/obj/item/weapon/reagent_containers/food/snacks/grown/sunflower // FLOWER POWER! - plantname = "sunflowers" - name = "sunflower" - desc = "A beautiful yellow flower." - icon_state = "sunflower" - damtype = "fire" - force = 0 - throw_speed = 1 - throw_range = 3 - -/obj/item/weapon/reagent_containers/food/snacks/grown/nettle - plantname = "nettle" - desc = "It's probably not wise to touch it with bare hands..." - icon = 'icons/obj/weapons.dmi' - name = "nettle" - icon_state = "nettle" - damtype = "fire" - force = 15 - w_class = 2.0 - throw_speed = 1 - throw_range = 3 - origin_tech = "combat=1" - attack_verb = list("stung") - hitsound = "" - -/obj/item/weapon/reagent_containers/food/snacks/grown/nettle/death - plantname = "deathnettle" - desc = "A cruel and toxic-looking plant." - name = "deathnettle" - icon_state = "deathnettle" +//Grown foods. +/obj/item/weapon/reagent_containers/food/snacks/grown + + name = "fruit" + desc = "It's a fruit." + icon = 'icons/obj/harvest.dmi' + + var/plantname + var/datum/seed/seed + var/potency = -1 + +/obj/item/weapon/reagent_containers/food/snacks/grown/New(newloc,planttype) + + ..() + + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) + + // Fill the object up with the appropriate reagents. + if(planttype) + plantname = planttype + seed = seed_types[plantname] + if(!seed || !seed.chems) + return + + potency = seed.potency + + for(var/rid in seed.chems) + var/list/reagent_data = seed.chems[rid] + var/rtotal = reagent_data[1] + if(reagent_data.len > 1 && potency > 0) + rtotal += round(potency/reagent_data[2]) + reagents.add_reagent(rid,max(1,rtotal)) + + if(reagents.total_volume > 0) + bitesize = 1+round(reagents.total_volume / 2, 1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(var/mob/living/M) + if(seed && seed.juicy == 2) + if(istype(M)) + + if(M.buckled) + return + + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.shoes && H.shoes.flags & NOSLIP) + return + + M.stop_pulling() + M << "You slipped on the [name]!" + playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) + M.Stun(8) + M.Weaken(5) + seed.thrown_at(src,M) + sleep(-1) + if(src) del(src) + return + +/obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom) + ..() + if(seed) seed.thrown_at(src,hit_atom) + +/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if(seed && seed.produces_power && istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if(C.use(5)) + //TODO: generalize this. + user << "You add some cable to the [src.name] and slide it inside the battery casing." + var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(get_turf(user)) + if(src.loc == user && !(user.l_hand && user.r_hand) && istype(user,/mob/living/carbon/human)) + user.put_in_hands(pocell) + pocell.maxcharge = src.potency * 10 + pocell.charge = pocell.maxcharge + del(src) + return + +/obj/item/weapon/reagent_containers/food/snacks/grown/attack(var/mob/living/carbon/M, var/mob/user, var/def_zone) + if(user == M) + return ..() + + if(user.a_intent == "hurt") + + // This is being copypasted here because reagent_containers (WHY DOES FOOD DESCEND FROM THAT) overrides it completely. + // TODO: refactor all food paths to be less horrible and difficult to work with in this respect. ~Z + if(!istype(M) || (can_operate(M) && do_surgery(M,user,src))) return 0 + + user.lastattacked = M + M.lastattacker = user + user.attack_log += "\[[time_stamp()]\] Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" + M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" + msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" ) + + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/hit = H.attacked_by(src, user, def_zone) + if(hit && hitsound) + playsound(loc, hitsound, 50, 1, -1) + return hit + else + if(attack_verb.len) + user.visible_message("[M] has been [pick(attack_verb)] with [src] by [user]!") + else + user.visible_message("[M] has been attacked with [src] by [user]!") + + if (hitsound) + playsound(loc, hitsound, 50, 1, -1) + switch(damtype) + if("brute") + M.take_organ_damage(force) + if(prob(33)) + var/turf/simulated/location = get_turf(M) + if(istype(location)) location.add_blood_floor(M) + if("fire") + if (!(COLD_RESISTANCE in M.mutations)) + M.take_organ_damage(0, force) + M.updatehealth() + + if(seed && seed.stings) + if(!reagents || reagents.total_volume <= 0) + return + reagents.remove_any(rand(1,3)) + seed.thrown_at(src,M) + sleep(-1) + if(!src) + return + if(prob(35)) + if(user) + user << "\The [src] has fallen to bits." + user.drop_from_inventory(src) + del(src) + + add_fingerprint(user) + return 1 + + else + ..() + +/obj/item/weapon/reagent_containers/food/snacks/grown/attack_self(mob/user as mob) + + if(!seed) + return + + if(istype(user.loc,/turf/space)) + return + + if(user.a_intent == "hurt") + user.visible_message("\The [user] squashes \the [src]!") + seed.thrown_at(src,user) + sleep(-1) + if(src) del(src) + return + + if(seed.spread == 0) + return + + // TODO: Generalize. + var/obj/effect/glowshroom/planted = new /obj/effect/glowshroom(user.loc) + planted.delay = 50 + planted.endurance = 100 + planted.potency = potency + + user << "You plant the [src.name]." + del(src) + +/obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user) + ..() + if(!seed) + return + if(seed.biolum) + user.SetLuminosity(user.luminosity + seed.biolum) + SetLuminosity(0) + if(seed.stings) + var/mob/living/carbon/human/H = user + if(istype(H) && H.gloves) + return + if(!reagents || reagents.total_volume <= 0) + return + reagents.remove_any(rand(1,3)) + seed.do_thorns(H,src) + seed.do_sting(H,src,pick("r_hand","l_hand")) + +/obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user) + if(!..() || !seed) + return + if(seed.biolum) + user.SetLuminosity(user.luminosity - seed.biolum) + SetLuminosity(seed.biolum) + +// Food object defines follow. +/obj/item/weapon/reagent_containers/food/snacks/grown/corn + name = "ear of corn" + desc = "Needs some butter!" + plantname = "corn" + icon_state = "corn" + potency = 40 + filling_color = "#FFEE00" + trash = /obj/item/weapon/corncob + +/obj/item/weapon/reagent_containers/food/snacks/grown/cherries + name = "cherries" + desc = "Great for toppings!" + icon_state = "cherry" + filling_color = "#FF0000" + gender = PLURAL + plantname = "cherry" + +/obj/item/weapon/reagent_containers/food/snacks/grown/poppy + name = "poppy" + desc = "Long-used as a symbol of rest, peace, and death." + icon_state = "poppy" + potency = 30 + filling_color = "#CC6464" + plantname = "poppies" + +/obj/item/weapon/reagent_containers/food/snacks/grown/harebell + name = "harebell" + desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten’d not thy breath.\"" + icon_state = "harebell" + potency = 1 + filling_color = "#D4B2C9" + plantname = "harebells" + +/obj/item/weapon/reagent_containers/food/snacks/grown/potato + name = "potato" + desc = "Boil 'em! Mash 'em! Stick 'em in a stew!" + icon_state = "potato" + potency = 25 + filling_color = "#E6E8DA" + plantname = "potato" + +/obj/item/weapon/reagent_containers/food/snacks/grown/grapes + name = "bunch of grapes" + desc = "Nutritious!" + icon_state = "grapes" + filling_color = "#A332AD" + plantname = "grapes" + +/obj/item/weapon/reagent_containers/food/snacks/grown/greengrapes + name = "bunch of green grapes" + desc = "Nutritious!" + icon_state = "greengrapes" + potency = 25 + filling_color = "#A6FFA3" + plantname = "greengrapes" + +/obj/item/weapon/reagent_containers/food/snacks/grown/peanut + name = "peanut" + desc = "Nuts!" + icon_state = "peanut" + filling_color = "857e27" + potency = 25 + plantname = "peanut" + +/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage + name = "cabbage" + desc = "Ewwwwwwwwww. Cabbage." + icon_state = "cabbage" + potency = 25 + filling_color = "#A2B5A1" + plantname = "cabbage" + +/obj/item/weapon/reagent_containers/food/snacks/grown/berries + name = "bunch of berries" + desc = "Nutritious!" + icon_state = "berrypile" + filling_color = "#C2C9FF" + plantname = "berries" + +/obj/item/weapon/reagent_containers/food/snacks/grown/plastellium + name = "clump of plastellium" + desc = "Hmm, needs some processing" + icon_state = "plastellium" + filling_color = "#C4C4C4" + plantname = "plastic" + +/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries + name = "bunch of glow-berries" + desc = "Nutritious!" + filling_color = "#D3FF9E" + icon_state = "glowberrypile" + plantname = "glowberries" + +/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod + name = "cocoa pod" + desc = "Can be ground into cocoa powder." + icon_state = "cocoapod" + potency = 50 + filling_color = "#9C8E54" + plantname = "cocoa" + +/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane + name = "sugarcane" + desc = "Sickly sweet." + icon_state = "sugarcane" + potency = 50 + filling_color = "#C0C9AD" + plantname = "sugarcane" + +/obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries + name = "bunch of poison-berries" + desc = "Taste so good, you could die!" + icon_state = "poisonberrypile" + gender = PLURAL + potency = 15 + filling_color = "#B422C7" + plantname = "poisonberries" + +/obj/item/weapon/reagent_containers/food/snacks/grown/deathberries + name = "bunch of death-berries" + desc = "Taste so good, you could die!" + icon_state = "deathberrypile" + gender = PLURAL + potency = 50 + filling_color = "#4E0957" + plantname = "deathberries" + +/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris + name = "ambrosia vulgaris branch" + desc = "This is a plant containing various healing chemicals." + icon_state = "ambrosiavulgaris" + potency = 10 + filling_color = "#125709" + plantname = "ambrosia" + +/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus + name = "ambrosia deus branch" + desc = "Eating this makes you feel immortal!" + icon_state = "ambrosiadeus" + potency = 10 + filling_color = "#229E11" + plantname = "ambrosiadeus" + +/obj/item/weapon/reagent_containers/food/snacks/grown/apple + name = "apple" + desc = "It's a little piece of Eden." + icon_state = "apple" + potency = 15 + filling_color = "#DFE88B" + plantname = "apple" + +/obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned + name = "apple" + desc = "It's a little piece of Eden." + icon_state = "apple" + potency = 15 + filling_color = "#B3BD5E" + plantname = "poisonapple" + +/obj/item/weapon/reagent_containers/food/snacks/grown/goldapple + name = "golden apple" + desc = "Emblazoned upon the apple is the word 'Kallisti'." + icon_state = "goldapple" + potency = 15 + filling_color = "#F5CB42" + plantname = "goldapple" + +/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon + name = "watermelon" + desc = "It's full of watery goodness." + icon_state = "watermelon" + potency = 10 + filling_color = "#FA2863" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/watermelonslice + slices_num = 5 + plantname = "watermelon" + +/obj/item/weapon/reagent_containers/food/snacks/grown/lime + name = "lime" + desc = "It's so sour, your face will twist." + icon_state = "lime" + potency = 20 + filling_color = "#28FA59" + plantname = "lime" + +/obj/item/weapon/reagent_containers/food/snacks/grown/lemon + name = "lemon" + desc = "When life gives you lemons, be grateful they aren't limes." + icon_state = "lemon" + potency = 20 + filling_color = "#FAF328" + plantname = "lemon" + +/obj/item/weapon/reagent_containers/food/snacks/grown/orange + name = "orange" + desc = "It's a tangy fruit." + icon_state = "orange" + potency = 20 + filling_color = "#FAAD28" + plantname = "orange" + +/obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet + name = "white-beet" + desc = "You can't beat white-beet." + icon_state = "whitebeet" + potency = 15 + filling_color = "#FFFCCC" + plantname = "whitebeet" + +/obj/item/weapon/reagent_containers/food/snacks/grown/banana + name = "banana" + desc = "It's an excellent prop for a comedy." + icon = 'icons/obj/items.dmi' + icon_state = "banana" + item_state = "banana" + filling_color = "#FCF695" + trash = /obj/item/weapon/bananapeel + plantname = "banana" + +/obj/item/weapon/reagent_containers/food/snacks/grown/chili + name = "chili" + desc = "It's spicy! Wait... IT'S BURNING ME!!" + icon_state = "chilipepper" + filling_color = "#FF0000" + plantname = "chili" + +/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant + name = "eggplant" + desc = "Maybe there's a chicken inside?" + icon_state = "eggplant" + filling_color = "#550F5C" + plantname = "eggplant" + +/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans + name = "soybeans" + desc = "It's pretty bland, but oh the possibilities..." + gender = PLURAL + filling_color = "#E6E8B7" + icon_state = "soybeans" + plantname = "soybean" + +/obj/item/weapon/reagent_containers/food/snacks/grown/tomato + name = "tomato" + desc = "I say to-mah-to, you say tom-mae-to." + icon_state = "tomato" + filling_color = "#FF0000" + potency = 10 + plantname = "tomato" + +/obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato + name = "blood-tomato" + desc = "So juicy." + icon_state = "bloodtomato" + potency = 10 + filling_color = "#FF0000" + plantname = "bloodtomato" + +/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato + name = "blue-tomato" + desc = "I say blue-mah-to, you say blue-mae-to." + icon_state = "bluetomato" + potency = 10 + filling_color = "#586CFC" + plantname = "bluetomato" + +/obj/item/weapon/reagent_containers/food/snacks/grown/wheat + name = "wheat" + desc = "Sigh... wheat... a-grain?" + gender = PLURAL + icon_state = "wheat" + filling_color = "#F7E186" + plantname = "wheat" + +/obj/item/weapon/reagent_containers/food/snacks/grown/ricestalk + name = "rice stalk" + desc = "Rice to see you." + gender = PLURAL + icon_state = "rice" + filling_color = "#FFF8DB" + plantname = "rice" + +/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod + name = "kudzu pod" + desc = "Pueraria Virallis: An invasive species with vines that rapidly creep and wrap around whatever they contact." + icon_state = "kudzupod" + filling_color = "#59691B" + plantname = "kudzu" + +/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper + name = "ice-pepper" + desc = "It's a mutant strain of chili" + icon_state = "icepepper" + potency = 20 + filling_color = "#66CEED" + plantname = "icechili" + +/obj/item/weapon/reagent_containers/food/snacks/grown/carrot + name = "carrot" + desc = "It's good for the eyes!" + icon_state = "carrot" + potency = 10 + filling_color = "#FFC400" + plantname = "carrot" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi + name = "reishi" + desc = "Ganoderma lucidum: A special fungus believed to help relieve stress." + icon_state = "reishi" + potency = 10 + filling_color = "#FF4800" + plantname = "reishi" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita + name = "fly amanita" + desc = "Amanita Muscaria: Learn poisonous mushrooms by heart. Only pick mushrooms you know." + icon_state = "amanita" + potency = 10 + filling_color = "#FF0000" + plantname = "amanita" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel + name = "destroying angel" + desc = "Amanita Virosa: Deadly poisonous basidiomycete fungus filled with alpha amatoxins." + icon_state = "angel" + potency = 35 + filling_color = "#FFDEDE" + plantname = "destroyingangel" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap + name = "liberty-cap" + desc = "Psilocybe Semilanceata: Liberate yourself!" + icon_state = "libertycap" + potency = 15 + filling_color = "#F714BE" + plantname = "libertycap" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet + name = "plump-helmet" + desc = "Plumus Hellmus: Plump, soft and s-so inviting~" + icon_state = "plumphelmet" + filling_color = "#F714BE" + plantname = "plumphelmet" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom + name = "walking mushroom" + desc = "Plumus Locomotus: The beginning of the great walk." + icon_state = "walkingmushroom" + filling_color = "#FFBFEF" + potency = 30 + plantname = "walkingmushroom" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle + name = "chanterelle cluster" + desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!" + icon_state = "chanterelle" + filling_color = "#FFE991" + plantname = "mushrooms" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom + name = "glowshroom cluster" + desc = "Mycena Bregprox: This species of mushroom glows in the dark. Or does it?" + icon_state = "glowshroom" + filling_color = "#DAFF91" + potency = 30 + plantname = "glowshroom" + +/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato + name = "blue-space tomato" + desc = "So lubricated, you might slip through space-time." + icon_state = "bluespacetomato" + potency = 20 + origin_tech = "bluespace=3" + filling_color = "#91F8FF" + plantname = "bluespacetomato" + +// Super special snowflake grown items below. +/obj/item/weapon/reagent_containers/food/snacks/grown/shand + name = "S'rendarr's Hand leaf" + desc = "A leaf sample from a lowland thicket shrub. Smells strongly like wax." + icon_state = "shand" + filling_color = "#70C470" + plantname = "shand" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mtear + name = "sprig of Messa's Tear" + desc = "A mountain climate herb with a soft, cold blue flower, known to contain an abundance of healing chemicals." + icon_state = "mtear" + filling_color = "#70C470" + plantname = "mtear" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mtear/attack_self(mob/user as mob) + if(istype(user.loc,/turf/space)) + return + var/obj/item/stack/medical/ointment/tajaran/poultice = new /obj/item/stack/medical/ointment/tajaran(user.loc) + + poultice.heal_burn = potency + del(src) + + user << "You mash the petals into a poultice." + +/obj/item/weapon/reagent_containers/food/snacks/grown/shand/attack_self(mob/user as mob) + if(istype(user.loc,/turf/space)) + return + var/obj/item/stack/medical/bruise_pack/tajaran/poultice = new /obj/item/stack/medical/bruise_pack/tajaran(user.loc) + + poultice.heal_brute = potency + del(src) + + user << "You mash the leaves into a poultice." + +/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin + name = "pumpkin" + desc = "It's large and scary." + icon_state = "pumpkin" + potency = 10 + filling_color = "#FAB728" + plantname = "pumpkin" + +/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/twohanded/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/melee/energy)) + user.show_message("You carve a face into [src]!", 1) + new /obj/item/clothing/head/pumpkinhead (user.loc) + del(src) + return + +/obj/item/weapon/reagent_containers/food/snacks/grown/sunflower // FLOWER POWER! + plantname = "sunflowers" + name = "sunflower" + desc = "A beautiful yellow flower." + icon_state = "sunflower" + damtype = "fire" + force = 0 + throw_speed = 1 + throw_range = 3 + +/obj/item/weapon/reagent_containers/food/snacks/grown/nettle + plantname = "nettle" + desc = "It's probably not wise to touch it with bare hands..." + icon = 'icons/obj/weapons.dmi' + name = "nettle" + icon_state = "nettle" + damtype = "fire" + force = 15 + w_class = 2.0 + throw_speed = 1 + throw_range = 3 + origin_tech = "combat=1" + attack_verb = list("stung") + hitsound = "" + +/obj/item/weapon/reagent_containers/food/snacks/grown/nettle/death + plantname = "deathnettle" + desc = "A cruel and toxic-looking plant." + name = "deathnettle" + icon_state = "deathnettle" origin_tech = "combat=3" \ No newline at end of file From c789f58b3c1d67790c4c1480d6f8475d527a22f6 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 30 Jan 2015 23:25:29 +1030 Subject: [PATCH 24/90] Converted seed genetics over to a macro-based list of traits --- baystation12.dme | 5 +- code/game/machinery/bees_apiary.dm | 4 +- .../effects/decals/Cleanable/humans.dm | 6 +- code/global.dm | 3 + code/modules/hydroponics/_hydro_setup.dm | 53 + code/modules/hydroponics/grown.dm | 22 +- code/modules/hydroponics/grown_inedible.dm | 2 +- code/modules/hydroponics/hydro_tools.dm | 88 +- code/modules/hydroponics/hydro_tray.dm | 87 +- code/modules/hydroponics/seed_datums.dm | 1820 +++++++++-------- code/modules/hydroponics/seed_machines.dm | 2 +- code/modules/hydroponics/seeds.dm | 33 +- code/modules/hydroponics/vines.dm | 77 +- .../genetics/prehistoric_seeds.dm | 139 -- 14 files changed, 1199 insertions(+), 1142 deletions(-) create mode 100644 code/modules/hydroponics/_hydro_setup.dm delete mode 100644 code/modules/research/xenoarchaeology/genetics/prehistoric_seeds.dm diff --git a/baystation12.dme b/baystation12.dme index 458592d7f2..42c4d5978f 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -304,7 +304,6 @@ #include "code\game\machinery\autolathe.dm" #include "code\game\machinery\autolathe_datums.dm" #include "code\game\machinery\Beacon.dm" -#include "code\game\machinery\bees_apiary.dm" #include "code\game\machinery\bees_items.dm" #include "code\game\machinery\bioprinter.dm" #include "code\game\machinery\buttons.dm" @@ -959,7 +958,10 @@ #include "code\modules\food\recipes_microwave.dm" #include "code\modules\games\cards.dm" #include "code\modules\genetics\side_effects.dm" +#include "code\modules\hydroponics\_hydro_setup.dm" +#include "code\modules\hydroponics\bees_apiary.dm" #include "code\modules\hydroponics\biogenerator.dm" +#include "code\modules\hydroponics\grown.dm" #include "code\modules\hydroponics\grown_inedible.dm" #include "code\modules\hydroponics\hydro_tools.dm" #include "code\modules\hydroponics\hydro_tray.dm" @@ -1365,7 +1367,6 @@ #include "code\modules\reagents\reagent_containers\food\drinks\drinkingglass.dm" #include "code\modules\reagents\reagent_containers\food\drinks\jar.dm" #include "code\modules\reagents\reagent_containers\food\drinks\bottle\robot.dm" -#include "code\modules\reagents\reagent_containers\food\snacks\grown.dm" #include "code\modules\reagents\reagent_containers\food\snacks\meat.dm" #include "code\modules\reagents\reagent_containers\glass\bottle.dm" #include "code\modules\reagents\reagent_containers\glass\bottle\robot.dm" diff --git a/code/game/machinery/bees_apiary.dm b/code/game/machinery/bees_apiary.dm index 24fe5f8685..22efa64647 100644 --- a/code/game/machinery/bees_apiary.dm +++ b/code/game/machinery/bees_apiary.dm @@ -188,9 +188,9 @@ if(prob(10)) H.lastcycle -= 5 if(prob(10)) - H.seed.lifespan = max(initial(H.seed.lifespan) * 1.5, H.seed.lifespan + 1) + H.seed.set_trait(TRAIT_LIFESPAN,max(H.seed.get_trait(TRAIT_LIFESPAN)*1.5,H.seed.get_trait(TRAIT_LIFESPAN)+1)) if(prob(10)) - H.seed.endurance = max(initial(H.seed.endurance) * 1.5, H.seed.endurance + 1) + H.seed.set_trait(TRAIT_ENDURANCE,max(H.seed.get_trait(TRAIT_ENDURANCE)*1.5,H.seed.get_trait(TRAIT_ENDURANCE)+1)) if(H.toxins && prob(10)) H.toxins = min(0, H.toxins - 1) toxic++ diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index ed996e3f1e..a4cadc874f 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -42,7 +42,7 @@ var/global/list/image/splatter_cache=list() dry() /obj/effect/decal/cleanable/blood/update_icon() - if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" + if(basecolor == "rainbow") basecolor = "#[pick(rainbow)]" color = basecolor /obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp) @@ -165,11 +165,11 @@ var/global/list/image/splatter_cache=list() var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) if(!fleshcolor || fleshcolor == "rainbow") - fleshcolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" + fleshcolor = "#[pick(rainbow)]" giblets.color = fleshcolor var/icon/blood = new(base_icon,"[icon_state]",dir) - if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" + if(basecolor == "rainbow") basecolor = "#[pick(rainbow)]" blood.Blend(basecolor,ICON_MULTIPLY) icon = blood diff --git a/code/global.dm b/code/global.dm index 55c63433cb..e58191f11e 100644 --- a/code/global.dm +++ b/code/global.dm @@ -254,6 +254,9 @@ var/static/list/scarySounds = list( // Bomb cap! var/max_explosion_range = 14 +// A list of colours comprising the rainbow. +var/list/rainbow = list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF") + // Several cache lists for plants/hydroponics. var/global/list/seed_types = list() // A list of all seed data. var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. diff --git a/code/modules/hydroponics/_hydro_setup.dm b/code/modules/hydroponics/_hydro_setup.dm new file mode 100644 index 0000000000..4e29644598 --- /dev/null +++ b/code/modules/hydroponics/_hydro_setup.dm @@ -0,0 +1,53 @@ +// Definitions for genes (trait groupings) +#define GENE_PRODUCTS "products" +#define GENE_CONSUMPTION "consumption" +#define GENE_ENVIRONMENT "environment" +#define GENE_RESISTANCE "resistance" +#define GENE_VIGOUR "vigour" +#define GENE_FLOWERS "flowers" +#define ALL_TRAITS list(GENE_PRODUCTS,GENE_CONSUMPTION,GENE_ENVIRONMENT,GENE_RESISTANCE,GENE_VIGOUR,GENE_FLOWERS) + +//Definitions for traits (individual descriptors) +#define TRAIT_PRODUCTS 1 +#define TRAIT_CHEMS 2 +#define TRAIT_EXUDE_GASSES 3 +#define TRAIT_ALTER_TEMP 4 +#define TRAIT_POTENCY 5 +#define TRAIT_HARVEST_REPEAT 6 +#define TRAIT_PRODUCES_POWER 7 +#define TRAIT_JUICY 8 +#define TRAIT_PRODUCT_ICON 9 +#define TRAIT_PLANT_ICON 10 +#define TRAIT_CONSUME_GASSES 11 +#define TRAIT_REQUIRES_NUTRIENTS 12 +#define TRAIT_NUTRIENT_CONSUMPTION 13 +#define TRAIT_REQUIRES_WATER 14 +#define TRAIT_WATER_CONSUMPTION 15 +#define TRAIT_CARNIVOROUS 16 +#define TRAIT_PARASITE 17 +#define TRAIT_STINGS 18 +#define TRAIT_IDEAL_HEAT 19 +#define TRAIT_HEAT_TOLERANCE 20 +#define TRAIT_IDEAL_LIGHT 21 +#define TRAIT_LIGHT_TOLERANCE 22 +#define TRAIT_LOWKPA_TOLERANCE 23 +#define TRAIT_HIGHKPA_TOLERANCE 24 +#define TRAIT_EXPLOSIVE 25 +#define TRAIT_TOXINS_TOLERANCE 26 +#define TRAIT_PEST_TOLERANCE 27 +#define TRAIT_WEED_TOLERANCE 28 +#define TRAIT_ENDURANCE 29 +#define TRAIT_YIELD 30 +#define TRAIT_LIFESPAN 31 +#define TRAIT_SPREAD 32 +#define TRAIT_MATURATION 33 +#define TRAIT_PRODUCTION 34 +#define TRAIT_TELEPORTING 35 +#define TRAIT_PLANT_COLOUR 36 +#define TRAIT_PRODUCT_COLOUR 37 +#define TRAIT_BIOLUM 38 +#define TRAIT_BIOLUM_COLOUR 39 +#define TRAIT_FLOWERS 40 +#define TRAIT_FLOWER_ICON 41 +#define TRAIT_FLOWER_COLOUR 42 +#define TRAIT_IMMUTABLE 43 \ No newline at end of file diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 9a9e351186..98246f0d64 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -23,7 +23,7 @@ if(!seed || !seed.chems) return - potency = seed.potency + potency = seed.get_trait(TRAIT_POTENCY) for(var/rid in seed.chems) var/list/reagent_data = seed.chems[rid] @@ -36,7 +36,7 @@ bitesize = 1+round(reagents.total_volume / 2, 1) /obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(var/mob/living/M) - if(seed && seed.juicy == 2) + if(seed && seed.get_trait(TRAIT_JUICY) == 2) if(istype(M)) if(M.buckled) @@ -63,7 +63,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() - if(seed && seed.produces_power && istype(W, /obj/item/stack/cable_coil)) + if(seed && seed.get_trait(TRAIT_PRODUCES_POWER) && istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W if(C.use(5)) //TODO: generalize this. @@ -117,7 +117,7 @@ M.take_organ_damage(0, force) M.updatehealth() - if(seed && seed.stings) + if(seed && seed.get_trait(TRAIT_STINGS)) if(!reagents || reagents.total_volume <= 0) return reagents.remove_any(rand(1,3)) @@ -152,7 +152,7 @@ if(src) del(src) return - if(seed.spread == 0) + if(seed.get_trait(TRAIT_SPREAD) == 0) return // TODO: Generalize. @@ -168,10 +168,10 @@ ..() if(!seed) return - if(seed.biolum) - user.SetLuminosity(user.luminosity + seed.biolum) + if(seed.get_trait(TRAIT_BIOLUM)) + user.SetLuminosity(user.luminosity + seed.get_trait(TRAIT_BIOLUM)) SetLuminosity(0) - if(seed.stings) + if(seed.get_trait(TRAIT_STINGS)) var/mob/living/carbon/human/H = user if(istype(H) && H.gloves) return @@ -184,9 +184,9 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user) if(!..() || !seed) return - if(seed.biolum) - user.SetLuminosity(user.luminosity - seed.biolum) - SetLuminosity(seed.biolum) + if(seed.get_trait(TRAIT_BIOLUM)) + user.SetLuminosity(user.luminosity - seed.get_trait(TRAIT_BIOLUM)) + SetLuminosity(seed.get_trait(TRAIT_BIOLUM)) // Food object defines follow. /obj/item/weapon/reagent_containers/food/snacks/grown/corn diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 88bcfa6cfd..0ff345285a 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -23,7 +23,7 @@ if(!S || !S.chems) return - potency = S.potency + potency = S.get_trait(TRAIT_POTENCY) for(var/rid in S.chems) var/list/reagent_data = S.chems[rid] diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index f273cff7d6..9e17f6fffa 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -53,12 +53,12 @@ dat += "

General Data

" dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" dat += "
Endurance[grown_seed.endurance]
Yield[grown_seed.yield]
Lifespan[grown_seed.lifespan]
Maturation time[grown_seed.maturation]
Production time[grown_seed.production]
Potency[grown_seed.potency]
Endurance[grown_seed.get_trait(TRAIT_ENDURANCE)]
Yield[grown_seed.get_trait(TRAIT_YIELD)]
Lifespan[grown_seed.get_trait(TRAIT_LIFESPAN)]
Maturation time[grown_seed.get_trait(TRAIT_MATURATION)]
Production time[grown_seed.get_trait(TRAIT_PRODUCTION)]
Potency[grown_seed.get_trait(TRAIT_POTENCY)]
" if(grown_reagents && grown_reagents.reagent_list && grown_reagents.reagent_list.len) @@ -70,29 +70,29 @@ dat += "

Other Data

" - if(grown_seed.harvest_repeat) + if(grown_seed.get_trait(TRAIT_HARVEST_REPEAT)) dat += "This plant can be harvested repeatedly.
" - if(grown_seed.immutable == -1) + if(grown_seed.get_trait(TRAIT_IMMUTABLE) == -1) dat += "This plant is highly mutable.
" - else if(grown_seed.immutable > 0) + else if(grown_seed.get_trait(TRAIT_IMMUTABLE) > 0) dat += "This plant does not possess genetics that are alterable.
" if(grown_seed.products && grown_seed.products.len) dat += "The mature plant will produce [grown_seed.products.len == 1 ? "fruit" : "[grown_seed.products.len] varieties of fruit"].
" - if(grown_seed.requires_nutrients) - if(grown_seed.nutrient_consumption < 0.05) + if(grown_seed.get_trait(TRAIT_REQUIRES_NUTRIENTS)) + if(grown_seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) < 0.05) dat += "It consumes a small amount of nutrient fluid.
" - else if(grown_seed.nutrient_consumption > 0.2) + else if(grown_seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) > 0.2) dat += "It requires a heavy supply of nutrient fluid.
" else dat += "It requires a supply of nutrient fluid.
" - if(grown_seed.requires_water) - if(grown_seed.water_consumption < 1) + if(grown_seed.get_trait(TRAIT_REQUIRES_WATER)) + if(grown_seed.get_trait(TRAIT_WATER_CONSUMPTION) < 1) dat += "It requires very little water.
" - else if(grown_seed.water_consumption > 5) + else if(grown_seed.get_trait(TRAIT_WATER_CONSUMPTION) > 5) dat += "It requires a large amount of water.
" else dat += "It requires a stable supply of water.
" @@ -100,77 +100,77 @@ if(grown_seed.mutants && grown_seed.mutants.len) dat += "It exhibits a high degree of potential subspecies shift.
" - dat += "It thrives in a temperature of [grown_seed.ideal_heat] Kelvin." + dat += "It thrives in a temperature of [grown_seed.get_trait(TRAIT_IDEAL_HEAT)] Kelvin." - if(grown_seed.lowkpa_tolerance < 20) + if(grown_seed.get_trait(TRAIT_LOWKPA_TOLERANCE) < 20) dat += "
It is well adapted to low pressure levels." - if(grown_seed.highkpa_tolerance > 220) + if(grown_seed.get_trait(TRAIT_HIGHKPA_TOLERANCE) > 220) dat += "
It is well adapted to high pressure levels." - if(grown_seed.heat_tolerance > 30) + if(grown_seed.get_trait(TRAIT_HEAT_TOLERANCE) > 30) dat += "
It is well adapted to a range of temperatures." - else if(grown_seed.heat_tolerance < 10) + else if(grown_seed.get_trait(TRAIT_HEAT_TOLERANCE) < 10) dat += "
It is very sensitive to temperature shifts." - dat += "
It thrives in a light level of [grown_seed.ideal_light] lumen[grown_seed.ideal_light == 1 ? "" : "s"]." + dat += "
It thrives in a light level of [grown_seed.get_trait(TRAIT_IDEAL_LIGHT)] lumen[grown_seed.get_trait(TRAIT_IDEAL_LIGHT) == 1 ? "" : "s"]." - if(grown_seed.light_tolerance > 10) + if(grown_seed.get_trait(TRAIT_LIGHT_TOLERANCE) > 10) dat += "
It is well adapted to a range of light levels." - else if(grown_seed.light_tolerance < 3) + else if(grown_seed.get_trait(TRAIT_LIGHT_TOLERANCE) < 3) dat += "
It is very sensitive to light level shifts." - if(grown_seed.toxins_tolerance < 3) + if(grown_seed.get_trait(TRAIT_TOXINS_TOLERANCE) < 3) dat += "
It is highly sensitive to toxins." - else if(grown_seed.toxins_tolerance > 6) + else if(grown_seed.get_trait(TRAIT_TOXINS_TOLERANCE) > 6) dat += "
It is remarkably resistant to toxins." - if(grown_seed.pest_tolerance < 3) + if(grown_seed.get_trait(TRAIT_PEST_TOLERANCE) < 3) dat += "
It is highly sensitive to pests." - else if(grown_seed.pest_tolerance > 6) + else if(grown_seed.get_trait(TRAIT_PEST_TOLERANCE) > 6) dat += "
It is remarkably resistant to pests." - if(grown_seed.weed_tolerance < 3) + if(grown_seed.get_trait(TRAIT_WEED_TOLERANCE) < 3) dat += "
It is highly sensitive to weeds." - else if(grown_seed.weed_tolerance > 6) + else if(grown_seed.get_trait(TRAIT_WEED_TOLERANCE) > 6) dat += "
It is remarkably resistant to weeds." - switch(grown_seed.spread) + switch(grown_seed.get_trait(TRAIT_SPREAD)) if(1) dat += "
It is able to be planted outside of a tray." if(2) dat += "
It is a robust and vigorous vine that will spread rapidly." - switch(grown_seed.carnivorous) + switch(grown_seed.get_trait(TRAIT_CARNIVOROUS)) if(1) dat += "
It is carniovorous and will eat tray pests for sustenance." if(2) dat += "
It is carnivorous and poses a significant threat to living things around it." - if(grown_seed.parasite) + if(grown_seed.get_trait(TRAIT_PARASITE)) dat += "
It is capable of parisitizing and gaining sustenance from tray weeds." - if(grown_seed.alter_temp) - dat += "
It will periodically alter the local temperature by [grown_seed.alter_temp] degrees Kelvin." + if(grown_seed.get_trait(TRAIT_ALTER_TEMP)) + dat += "
It will periodically alter the local temperature by [grown_seed.get_trait(TRAIT_ALTER_TEMP)] degrees Kelvin." - if(grown_seed.biolum) - dat += "
It is [grown_seed.biolum_colour ? "bio-luminescent" : "bio-luminescent"]." - if(grown_seed.flowers) - dat += "
It has [grown_seed.flower_colour ? "flowers" : "flowers"]." + if(grown_seed.get_trait(TRAIT_BIOLUM)) + dat += "
It is [grown_seed.get_trait(TRAIT_BIOLUM_COLOUR) ? "bio-luminescent" : "bio-luminescent"]." + if(grown_seed.get_trait(TRAIT_FLOWERS)) + dat += "
It has [grown_seed.get_trait(TRAIT_FLOWER_COLOUR) ? "flowers" : "flowers"]." - if(grown_seed.produces_power) + if(grown_seed.get_trait(TRAIT_PRODUCES_POWER)) user << "
The fruit will function as a battery if prepared appropriately." - if(grown_seed.stings) + if(grown_seed.get_trait(TRAIT_STINGS)) user << "
The fruit is covered in stinging spines." - if(grown_seed.juicy == 1) + if(grown_seed.get_trait(TRAIT_JUICY) == 1) user << "
The fruit is soft-skinned and juicy." - else if(grown_seed.juicy == 2) + else if(grown_seed.get_trait(TRAIT_JUICY) == 2) user << "
The fruit is excessively juicy." - if(grown_seed.explosive) + if(grown_seed.get_trait(TRAIT_EXPLOSIVE)) user << "
The fruit is internally unstable." - if(grown_seed.teleporting) + if(grown_seed.get_trait(TRAIT_TELEPORTING)) user << "
The fruit is temporal/spatially unstable." if(dat) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index be90ce48ce..4ad70f9b2d 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -150,7 +150,7 @@ /obj/machinery/portable_atmospherics/hydroponics/bullet_act(var/obj/item/projectile/Proj) //Don't act on seeds like dionaea that shouldn't change. - if(seed && seed.immutable > 0) + if(seed && seed.get_trait(TRAIT_IMMUTABLE) > 0) return //Override for somatoray projectiles. @@ -194,7 +194,7 @@ // There's a chance for a weed explosion to happen if the weeds take over. // Plants that are themselves weeds (weed_tolerance > 10) are unaffected. if (weedlevel >= 10 && prob(10)) - if(!seed || weedlevel >= seed.weed_tolerance) + if(!seed || weedlevel >= seed.get_trait(TRAIT_WEED_TOLERANCE)) weed_invasion() // If there is no seed data (and hence nothing planted), @@ -207,28 +207,28 @@ if(prob(30)) age += 1 * HYDRO_SPEED_MULTIPLIER //Highly mutable plants have a chance of mutating every tick. - if(seed.immutable == -1) + if(seed.get_trait(TRAIT_IMMUTABLE) == -1) var/mut_prob = rand(1,100) if(mut_prob <= 5) mutate(mut_prob == 1 ? 2 : 1) // Other plants also mutate if enough mutagenic compounds have been added. - if(!seed.immutable) + if(!seed.get_trait(TRAIT_IMMUTABLE)) if(prob(min(mutation_level,100))) mutate((rand(100) < 15) ? 2 : 1) mutation_level = 0 // Maintain tray nutrient and water levels. - if(seed.nutrient_consumption > 0 && nutrilevel > 0 && prob(25)) - nutrilevel -= max(0,seed.nutrient_consumption * HYDRO_SPEED_MULTIPLIER) - if(seed.water_consumption > 0 && waterlevel > 0 && prob(25)) - waterlevel -= max(0,seed.water_consumption * HYDRO_SPEED_MULTIPLIER) + if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) > 0 && nutrilevel > 0 && prob(25)) + nutrilevel -= max(0,seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) * HYDRO_SPEED_MULTIPLIER) + if(seed.get_trait(TRAIT_WATER_CONSUMPTION) > 0 && waterlevel > 0 && prob(25)) + waterlevel -= max(0,seed.get_trait(TRAIT_WATER_CONSUMPTION) * HYDRO_SPEED_MULTIPLIER) // Make sure the plant is not starving or thirsty. Adequate // water and nutrients will cause a plant to become healthier. var/healthmod = rand(1,3) * HYDRO_SPEED_MULTIPLIER - if(seed.requires_nutrients && prob(35)) + if(seed.get_trait(TRAIT_REQUIRES_NUTRIENTS) && prob(35)) health += (nutrilevel < 2 ? -healthmod : healthmod) - if(seed.requires_water && prob(35)) + if(seed.get_trait(TRAIT_REQUIRES_WATER) && prob(35)) health += (waterlevel < 10 ? -healthmod : healthmod) // Check that pressure, heat and light are all within bounds. @@ -254,30 +254,30 @@ // toxins are sucked up each tick and slowly reduce over time. if(toxins > 0) var/toxin_uptake = max(1,round(toxins/10)) - if(toxins > seed.toxins_tolerance) + if(toxins > seed.get_trait(TRAIT_TOXINS_TOLERANCE)) health -= toxin_uptake toxins -= toxin_uptake // Check for pests and weeds. // Some carnivorous plants happily eat pests. if(pestlevel > 0) - if(seed.carnivorous) + if(seed.get_trait(TRAIT_CARNIVOROUS)) health += HYDRO_SPEED_MULTIPLIER pestlevel -= HYDRO_SPEED_MULTIPLIER - else if (pestlevel >= seed.pest_tolerance) + else if (pestlevel >= seed.get_trait(TRAIT_PEST_TOLERANCE)) health -= HYDRO_SPEED_MULTIPLIER // Some plants thrive and live off of weeds. if(weedlevel > 0) - if(seed.parasite) + if(seed.get_trait(TRAIT_PARASITE)) health += HYDRO_SPEED_MULTIPLIER weedlevel -= HYDRO_SPEED_MULTIPLIER - else if (weedlevel >= seed.weed_tolerance) + else if (weedlevel >= seed.get_trait(TRAIT_WEED_TOLERANCE)) health -= HYDRO_SPEED_MULTIPLIER // Handle life and death. // If the plant is too old, it loses health fast. - if(age > seed.lifespan) + if(age > seed.get_trait(TRAIT_LIFESPAN)) health -= rand(3,5) * HYDRO_SPEED_MULTIPLIER // When the plant dies, weeds thrive and pests die off. @@ -289,8 +289,11 @@ pestlevel = 0 // If enough time (in cycles, not ticks) has passed since the plant was harvested, we're ready to harvest again. - else if(seed.products && seed.products.len && age > seed.production && \ - (age - lastproduce) > seed.production && (!harvest && !dead)) + else if(seed.products && seed.products.len && \ + (age > seed.get_trait(TRAIT_PRODUCTION)) && \ + (*age - lastproduce) > seed.get_trait(TRAIT_PRODUCTION)) && \ + (!harvest && !dead)) + harvest = 1 lastproduce = age @@ -370,7 +373,7 @@ harvest = 0 lastproduce = age - if(!seed.harvest_repeat) + if(!seed.get_trait(TRAIT_HARVEST_REPEAT)) yield_mod = 0 seed = null dead = 0 @@ -410,11 +413,11 @@ // Updates the plant overlay. if(!isnull(seed)) - if(draw_warnings && health <= (seed.endurance / 2)) + if(draw_warnings && health <= (seed.get_trait(TRAIT_ENDURANCE) / 2)) overlays += "over_lowhealth3" if(dead) - var/ikey = "[seed.plant_icon]-dead" + var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-dead" var/image/dead_overlay = plant_icon_cache["[ikey]"] if(!dead_overlay) dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]") @@ -423,30 +426,30 @@ if(!seed.growth_stages) seed.update_growth_stages() if(!seed.growth_stages) - world << "Seed type [seed.plant_icon] cannot find a growth stage value." + world << "Seed type [seed.get_trait(TRAIT_PLANT_ICON)] cannot find a growth stage value." return var/overlay_stage = 1 - if(age >= seed.maturation) + if(age >= seed.get_trait(TRAIT_MATURATION)) overlay_stage = seed.growth_stages lastproduce = age else - overlay_stage = max(1,round(seed.maturation / seed.growth_stages)) + overlay_stage = max(1,round(seed.get_trait(TRAIT_MATURATION) / seed.growth_stages)) - var/ikey = "[seed.plant_icon]-[overlay_stage]" - var/image/plant_overlay = plant_icon_cache["[ikey]-[seed.plant_colour]"] + var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-[overlay_stage]" + var/image/plant_overlay = plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] if(!plant_overlay) plant_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]") - plant_overlay.color = seed.plant_colour - plant_icon_cache["[ikey]-[seed.plant_colour]"] = plant_overlay + plant_overlay.color = seed.get_trait(TRAIT_PLANT_COLOUR) + plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay overlays |= plant_overlay if(harvest && overlay_stage == seed.growth_stages) - ikey = "[seed.product_icon]" - var/image/harvest_overlay = plant_icon_cache["product-[ikey]-[seed.product_colour]"] + ikey = "[seed.get_trait(TRAIT_PRODUCT_ICON)]" + var/image/harvest_overlay = plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] if(!harvest_overlay) harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]") - harvest_overlay.color = seed.product_colour - plant_icon_cache["product-[ikey]-[seed.product_colour]"] = harvest_overlay + harvest_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) + plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay overlays |= harvest_overlay //Draw the cover. @@ -466,10 +469,10 @@ // Update bioluminescence. if(seed) - if(seed.biolum) - SetLuminosity(round(seed.potency/10)) - if(seed.biolum_colour) - l_color = seed.biolum_colour + if(seed.get_trait(TRAIT_BIOLUM)) + SetLuminosity(round(seed.get_trait(TRAIT_POTENCY)/10)) + if(seed.get_trait(TRAIT_BIOLUM_COLOUR)) + l_color = seed.get_trait(TRAIT_BIOLUM_COLOUR) else l_color = null return @@ -487,7 +490,7 @@ dead = 0 age = 0 - health = seed.endurance + health = seed.get_trait(TRAIT_ENDURANCE) lastcycle = world.time harvest = 0 weedlevel = 0 @@ -521,7 +524,7 @@ /obj/machinery/portable_atmospherics/hydroponics/proc/check_level_sanity() //Make sure various values are sane. if(seed) - health = max(0,min(seed.endurance,health)) + health = max(0,min(seed.get_trait(TRAIT_ENDURANCE),health)) else health = 0 dead = 0 @@ -545,7 +548,7 @@ dead = 0 mutate(1) age = 0 - health = seed.endurance + health = seed.get_trait(TRAIT_ENDURANCE) lastcycle = world.time harvest = 0 weedlevel = 0 @@ -620,7 +623,7 @@ user << "You plant the [S.seed.seed_name] [S.seed.seed_noun]." - if(S.seed.spread == 2) + if(S.seed.get_trait(TRAIT_SPREAD) == 2) msg_admin_attack("[key_name(user)] has planted a spreading vine packet.") var/obj/effect/plant_controller/PC = new(get_turf(src)) if(PC) @@ -630,7 +633,7 @@ dead = 0 age = 1 //Snowflakey, maybe move this to the seed datum - health = (istype(S, /obj/item/seeds/cutting) ? round(seed.endurance/rand(2,5)) : seed.endurance) + health = (istype(S, /obj/item/seeds/cutting) ? round(seed.get_trait(TRAIT_ENDURANCE)/rand(2,5)) : seed.get_trait(TRAIT_ENDURANCE)) lastcycle = world.time @@ -729,7 +732,7 @@ usr << "[src] has [seed.display_name] planted." if(dead) usr << "The plant is dead." - else if(health <= (seed.endurance / 2)) + else if(health <= (seed.get_trait(TRAIT_ENDURANCE)/ 2)) usr << "The plant looks unhealthy." else usr << "[src] is empty." diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 9d00a5f3d2..e707cc631e 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1,3 +1,4 @@ +// Sprite lists. var/global/list/plant_sprites = list() // List of all harvested product sprites. var/global/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages. @@ -56,18 +57,17 @@ proc/populate_seed_list() S.update_seed() //Might as well mask the gene types while we're at it. - var/list/gene_tags = list("products","consumption","environment","resistance","vigour","flowers") var/list/used_masks = list() - - while(gene_tags && gene_tags.len) - var/gene_tag = pick(gene_tags) + var/list/plant_traits = ALL_TRAITS + while(plant_traits && plant_traits.len) + var/gene_tag = pick(plant_traits) var/gene_mask = "[num2hex(rand(0,255))]" while(gene_mask in used_masks) gene_mask = "[num2hex(rand(0,255))]" used_masks += gene_mask - gene_tags -= gene_tag + plant_traits -= gene_tag gene_tag_masks[gene_tag] = gene_mask /datum/plantgene @@ -84,87 +84,47 @@ proc/populate_seed_list() var/display_name // Prettier name. var/roundstart // If set, seed will not display variety number. var/mysterious // Only used for the random seed packets. - - // Output. + var/growth_stages = 0 // Number of stages the plant passes through before it is mature. + var/list/traits = list() // Initialized in New() var/list/products // Possible fruit/other product paths. var/list/mutants // Possible predefined mutant varieties, if any. var/list/chems // Chemicals that plant produces in products/injects into victim. var/list/consume_gasses // The plant will absorb these gasses during its life. var/list/exude_gasses // The plant will exude these gasses during its life. + var/splat_type = /obj/effect/decal/cleanable/fruit_smudge // Graffiti decal. - //Tolerances. - var/requires_nutrients = 1 // The plant can starve. - var/nutrient_consumption = 0.25 // Plant eats this much per tick. - var/requires_water = 1 // The plant can become dehydrated. - var/water_consumption = 3 // Plant drinks this much per tick. - var/ideal_heat = 293 // Preferred temperature in Kelvin. - var/heat_tolerance = 20 // Departure from ideal that is survivable. - var/ideal_light = 8 // Preferred light level in luminosity. - var/light_tolerance = 5 // Departure from ideal that is survivable. - var/toxins_tolerance = 5 // Resistance to poison. - var/lowkpa_tolerance = 25 // Low pressure capacity. - var/highkpa_tolerance = 200 // High pressure capacity. - var/pest_tolerance = 5 // Threshold for pests to impact health. - var/weed_tolerance = 5 // Threshold for weeds to impact health. +/datum/seed/proc/get_trait(var/trait) + return traits["[trait]"] - //General traits. - var/endurance = 100 // Maximum plant HP when growing. - var/yield = 0 // Amount of product. - var/lifespan = 0 // Time before the plant dies. - var/maturation = 0 // Time taken before the plant is mature. - var/production = 0 // Time before harvesting can be undertaken again. - var/growth_stages = 6 // Number of stages the plant passes through before it is mature. - var/harvest_repeat = 0 // If 1, this plant will fruit repeatedly.. - var/potency = 1 // General purpose plant strength value. - var/spread = 0 // 0 limits plant to tray, 1 = creepers, 2 = vines. - var/carnivorous = 0 // 0 = none, 1 = eat pests in tray, 2 = eat living things (when a vine). - var/parasite = 0 // 0 = no, 1 = gain health from weed level. - var/immutable = 0 // If set, plant will never mutate. If -1, plant is highly mutable. - var/alter_temp // If set, the plant will periodically alter local temp by this amount. - - // Cosmetics. - var/plant_icon // Icon to use for the plant growing in the tray. - var/plant_colour = "#6EF86A" // Colour of the plant icon. - var/product_icon // Icon to use for fruit coming from this plant. - var/product_colour // Colour to apply to product icon. - var/packet_icon = "seed" // Icon to use for physical seed packet item. - var/biolum // Plant is bioluminescent. - var/biolum_colour // The colour of the plant's radiance. - var/flowers // Plant has a flower overlay. - var/flower_icon = "vine_fruit" // Which overlay to use. - var/flower_colour // Which colour to use. - - // Special traits. - var/produces_power // Can be used to make a battery. - var/juicy // When thrown, causes a splatter decal. - var/stings // Can cause damage/inject reagents when thrown or handled. - var/explosive // When thrown, acts as a grenade. - var/teleporting // Uses the bluespace tomato effect. - var/splat_type = /obj/effect/decal/cleanable/fruit_smudge +/datum/seed/proc/set_trait(var/trait,var/nval,var/ubound,var/lbound, var/degrade) + if(!isnull(degrade)) nval *= degrade + if(!isnull(ubound)) nval = min(nval,ubound) + if(!isnull(lbound)) nval = max(nval,lbound) + traits["[trait]"] = nval // Does brute damage to a target. /datum/seed/proc/do_thorns(var/mob/living/carbon/human/target, var/obj/item/fruit, var/target_limb) - if(!istype(target) || !carnivorous) + if(!istype(target) || !get_trait(TRAIT_CARNIVOROUS)) return if(!target_limb) target_limb = pick("l_foot","r_foot","l_leg","r_leg","l_hand","r_hand","l_arm", "r_arm","head","chest","groin") var/datum/organ/external/affecting = target.get_organ(target_limb) var/damage = 0 - if(carnivorous) - if(carnivorous == 2) + if(get_trait(TRAIT_CARNIVOROUS)) + if(get_trait(TRAIT_CARNIVOROUS) == 2) if(affecting) target << "\The [fruit]'s thorns pierce your [affecting.display_name] greedily!" else target << "\The [fruit]'s thorns pierce your flesh greedily!" - damage = potency/2 + damage = get_trait(TRAIT_POTENCY)/2 else if(affecting) target << "\The [fruit]'s thorns dig deeply into your [affecting.display_name]!" else target << "\The [fruit]'s thorns dig deeply into your flesh!" - damage = potency/5 + damage = get_trait(TRAIT_POTENCY)/5 else return @@ -178,12 +138,12 @@ proc/populate_seed_list() // Adds reagents to a target. /datum/seed/proc/do_sting(var/mob/living/carbon/human/target, var/obj/item/fruit) - if(!stings) + if(!get_trait(TRAIT_STINGS)) return if(chems && chems.len) target << "You are stung by \the [fruit]!" for(var/rid in chems) - var/injecting = min(5,max(1,potency/5)) + var/injecting = min(5,max(1,get_trait(TRAIT_POTENCY)/5)) target.reagents.add_reagent(rid,injecting) //Splatter a turf. @@ -191,20 +151,20 @@ proc/populate_seed_list() if(splat_type) var/obj/effect/decal/cleanable/fruit_smudge/splat = new splat_type(T) splat.name = "[thrown.name] [pick("smear","smudge","splatter")]" - if(biolum) - if(biolum_colour) - splat.l_color = biolum_colour - splat.SetLuminosity(biolum) + if(get_trait(TRAIT_BIOLUM)) + if(get_trait(TRAIT_BIOLUM_COLOUR)) + splat.l_color = get_trait(TRAIT_BIOLUM_COLOUR) + splat.SetLuminosity(get_trait(TRAIT_BIOLUM)) if(istype(splat)) - if(product_colour) - splat.color = product_colour + if(get_trait(TRAIT_PRODUCT_COLOUR)) + splat.color = get_trait(TRAIT_PRODUCT_COLOUR) if(chems) for(var/mob/living/M in T.contents) if(!M.reagents) continue for(var/chem in chems) - var/injecting = min(5,max(1,potency/3)) + var/injecting = min(5,max(1,get_trait(TRAIT_POTENCY)/3)) M.reagents.add_reagent(chem,injecting) //Applies an effect to a target atom. @@ -213,9 +173,9 @@ proc/populate_seed_list() var/splatted var/turf/origin_turf = get_turf(target) - if(explosive) + if(get_trait(TRAIT_EXPLOSIVE)) - var/flood_dist = min(10,max(1,potency/15)) + var/flood_dist = min(10,max(1,get_trait(TRAIT_POTENCY)/15)) var/list/open_turfs = list() var/list/closed_turfs = list() var/list/valid_turfs = list() @@ -294,7 +254,7 @@ proc/populate_seed_list() for(var/mob/living/M in target.contents) apply_special_effect(M) - if(juicy && splatted) + if(get_trait(TRAIT_JUICY) && splatted) splatter(origin_turf,thrown) origin_turf.visible_message("The [thrown.name] splatters against [target]!") del(thrown) @@ -317,16 +277,16 @@ proc/populate_seed_list() // Process it. var/pressure = environment.return_pressure() - if(pressure < lowkpa_tolerance || pressure > highkpa_tolerance) + if(pressure < get_trait(TRAIT_LOWKPA_TOLERANCE)|| pressure > get_trait(TRAIT_HIGHKPA_TOLERANCE)) health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER - if(abs(environment.temperature - ideal_heat) > heat_tolerance) + if(abs(environment.temperature - get_trait(TRAIT_IDEAL_HEAT)) > get_trait(TRAIT_HEAT_TOLERANCE)) health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER // Handle gas production. if(exude_gasses && exude_gasses.len) for(var/gas in exude_gasses) - environment.adjust_gas(gas, max(1,round((exude_gasses[gas]*potency)/exude_gasses.len))) + environment.adjust_gas(gas, max(1,round((exude_gasses[gas]*get_trait(TRAIT_POTENCY))/exude_gasses.len))) // Handle light requirements. var/area/A = get_area(current_turf) @@ -336,7 +296,7 @@ proc/populate_seed_list() light_available = max(0,min(10,current_turf.lighting_lumcount)-5) else light_available = 5 - if(abs(light_available - ideal_light) > light_tolerance) + if(abs(light_available - get_trait(TRAIT_IDEAL_LIGHT)) > get_trait(TRAIT_LIGHT_TOLERANCE)) health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER return health_change @@ -348,11 +308,11 @@ proc/populate_seed_list() do_thorns(target,thrown) // Bluespace tomato code copied over from grown.dm. - if(teleporting) + if(get_trait(TRAIT_TELEPORTING)) //Plant potency determines radius of teleport. - var/outer_teleport_radius = potency/5 - var/inner_teleport_radius = potency/15 + var/outer_teleport_radius = get_trait(TRAIT_POTENCY)/5 + var/inner_teleport_radius = get_trait(TRAIT_POTENCY)/15 var/list/turfs = list() if(inner_teleport_radius > 0) @@ -380,37 +340,35 @@ proc/populate_seed_list() seed_name = "strange plant" // TODO: name generator. display_name = "strange plants" // TODO: name generator. mysterious = 1 - seed_noun = pick("spores","nodes","cuttings","seeds") products = list(pick(typesof(/obj/item/weapon/reagent_containers/food/snacks/grown)-/obj/item/weapon/reagent_containers/food/snacks/grown)) - potency = rand(5,30) - packet_icon = "seed-replicapod" - product_icon = pick(plant_product_sprites) - plant_icon = pick(plant_sprites) - plant_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - product_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" + set_trait(TRAIT_POTENCY,rand(5,30),200,0) + set_trait(TRAIT_PRODUCT_ICON,pick(plant_product_sprites)) + set_trait(TRAIT_PLANT_ICON,pick(plant_sprites)) + set_trait(TRAIT_PLANT_COLOUR,"#[pick(rainbow)]") + set_trait(TRAIT_PRODUCT_COLOUR,"#[pick(rainbow)]") update_growth_stages() if(prob(20)) - harvest_repeat = 1 + set_trait(TRAIT_HARVEST_REPEAT,1) if(prob(15)) if(prob(15)) - juicy = 2 + set_trait(TRAIT_JUICY,2) else - juicy = 1 + set_trait(TRAIT_JUICY,1) if(prob(5)) - stings = 1 + set_trait(TRAIT_STINGS,1) if(prob(5)) - produces_power = 1 + set_trait(TRAIT_PRODUCES_POWER,1) if(prob(1)) - explosive = 1 + set_trait(TRAIT_EXPLOSIVE,1) else if(prob(1)) - teleporting = 1 + set_trait(TRAIT_TELEPORTING,1) if(prob(5)) consume_gasses = list() @@ -474,67 +432,67 @@ proc/populate_seed_list() chems[new_chem] = list(rand(1,10),rand(10,20)) if(prob(90)) - requires_nutrients = 1 - nutrient_consumption = rand(100)*0.1 + set_trait(TRAIT_REQUIRES_NUTRIENTS,1) + set_trait(TRAIT_NUTRIENT_CONSUMPTION,rand(100)*0.1) else - requires_nutrients = 0 + set_trait(TRAIT_REQUIRES_NUTRIENTS,0) if(prob(90)) - requires_water = 1 - water_consumption = rand(10) + set_trait(TRAIT_REQUIRES_WATER,1) + set_trait(TRAIT_WATER_CONSUMPTION,rand(10)) else - requires_water = 0 + set_trait(TRAIT_REQUIRES_WATER,0) - ideal_heat = rand(100,400) - heat_tolerance = rand(10,30) - ideal_light = rand(2,10) - light_tolerance = rand(2,7) - toxins_tolerance = rand(2,7) - pest_tolerance = rand(2,7) - weed_tolerance = rand(2,7) - lowkpa_tolerance = rand(10,50) - highkpa_tolerance = rand(100,300) + set_trait(TRAIT_IDEAL_HEAT, rand(100,400)) + set_trait(TRAIT_HEAT_TOLERANCE, rand(10,30)) + set_trait(TRAIT_IDEAL_LIGHT, rand(2,10)) + set_trait(TRAIT_LIGHT_TOLERANCE, rand(2,7)) + set_trait(TRAIT_TOXINS_TOLERANCE, rand(2,7)) + set_trait(TRAIT_PEST_TOLERANCE, rand(2,7)) + set_trait(TRAIT_WEED_TOLERANCE, rand(2,7)) + set_trait(TRAIT_LOWKPA_TOLERANCE, rand(10,50)) + set_trait(TRAIT_HIGHKPA_TOLERANCE,rand(100,300)) if(prob(5)) - alter_temp = rand(-5,5) + set_trait(TRAIT_ALTER_TEMP,rand(-5,5)) if(prob(1)) - immutable = -1 + set_trait(TRAIT_IMMUTABLE,-1) var/carnivore_prob = rand(100) if(carnivore_prob < 5) - carnivorous = 2 + set_trait(TRAIT_CARNIVOROUS,2) else if(carnivore_prob < 10) - carnivorous = 1 + set_trait(TRAIT_CARNIVOROUS,1) if(prob(10)) - parasite = 1 + set_trait(TRAIT_PARASITE,1) var/vine_prob = rand(100) if(vine_prob < 5) - spread = 2 + set_trait(TRAIT_SPREAD,2) else if(vine_prob < 10) - spread = 1 + set_trait(TRAIT_SPREAD,1) if(prob(5)) - biolum = 1 - biolum_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" + set_trait(TRAIT_BIOLUM,1) + set_trait(TRAIT_BIOLUM_COLOUR,"#[pick(rainbow)]") - endurance = rand(60,100) - yield = rand(3,15) - maturation = rand(5,15) - production = maturation + rand(2,5) - lifespan = production + rand(5,10) + set_trait(TRAIT_ENDURANCE,rand(60,100)) + set_trait(TRAIT_YIELD,rand(3,15)) + set_trait(TRAIT_MATURATION,rand(5,15)) + set_trait(TRAIT_PRODUCTION,get_trait(TRAIT_MATURATION)+rand(2,5)) + set_trait(TRAIT_LIFESPAN,get_trait(TRAIT_PRODUCTION)+rand(5,10)) //Returns a key corresponding to an entry in the global seed list. /datum/seed/proc/get_mutant_variant() - if(!mutants || !mutants.len || immutable > 0) return 0 + if(!mutants || !mutants.len || get_trait(TRAIT_IMMUTABLE) > 0) return 0 return pick(mutants) //Mutates the plant overall (randomly). /datum/seed/proc/mutate(var/degree,var/turf/source_turf) - if(!degree || immutable > 0) return + if(!degree || get_trait(TRAIT_IMMUTABLE) > 0) return source_turf.visible_message("\The [display_name] quivers!") @@ -543,184 +501,118 @@ proc/populate_seed_list() for(var/i = 0;i\The [display_name] withers rapidly!") if(1) - nutrient_consumption = max(0, min(5, nutrient_consumption + rand(-(degree*0.1),(degree*0.1)))) - water_consumption = max(0, min(50, water_consumption + rand(-degree,degree))) - juicy = (juicy ? 0 : 1) - stings = (stings ? 0 : 1) + set_trait(TRAIT_NUTRIENT_CONSUMPTION,get_trait(TRAIT_NUTRIENT_CONSUMPTION)+rand(-(degree*0.1),(degree*0.1)),5,0) + set_trait(TRAIT_WATER_CONSUMPTION, get_trait(TRAIT_WATER_CONSUMPTION) +rand(-degree,degree),50,0) + set_trait(TRAIT_JUICY, !get_trait(TRAIT_JUICY)) + set_trait(TRAIT_STINGS, !get_trait(TRAIT_STINGS)) if(2) - ideal_heat = max(70, min(800, ideal_heat + (rand(-5,5) * degree))) - heat_tolerance = max(70, min(800, heat_tolerance + (rand(-5,5) * degree))) - lowkpa_tolerance = max(0, min(80, lowkpa_tolerance + (rand(-5,5) * degree))) - highkpa_tolerance = max(110, min(500,highkpa_tolerance + (rand(-5,5) * degree))) - explosive = 1 + set_trait(TRAIT_IDEAL_HEAT, get_trait(TRAIT_IDEAL_HEAT) + (rand(-5,5)*degree),800,70) + set_trait(TRAIT_HEAT_TOLERANCE, get_trait(TRAIT_HEAT_TOLERANCE) + (rand(-5,5)*degree),800,70) + set_trait(TRAIT_LOWKPA_TOLERANCE, get_trait(TRAIT_LOWKPA_TOLERANCE)+ (rand(-5,5)*degree),80,0) + set_trait(TRAIT_HIGHKPA_TOLERANCE, get_trait(TRAIT_HIGHKPA_TOLERANCE)+(rand(-5,5)*degree),500,110) + set_trait(TRAIT_EXPLOSIVE,1) if(3) - ideal_light = max(0, min(30, ideal_light + (rand(-1,1) * degree))) - light_tolerance = max(0, min(10, light_tolerance + (rand(-2,2) * degree))) + set_trait(TRAIT_IDEAL_LIGHT, get_trait(TRAIT_IDEAL_LIGHT)+(rand(-1,1)*degree),30,0) + set_trait(TRAIT_LIGHT_TOLERANCE, get_trait(TRAIT_LIGHT_TOLERANCE)+(rand(-2,2)*degree),10,0) if(4) - toxins_tolerance = max(0, min(10, weed_tolerance + (rand(-2,2) * degree))) + set_trait(TRAIT_TOXINS_TOLERANCE, get_trait(TRAIT_TOXINS_TOLERANCE)+(rand(-2,2)*degree),10,0) if(5) - weed_tolerance = max(0, min(10, weed_tolerance + (rand(-2,2) * degree))) + set_trait(TRAIT_WEED_TOLERANCE, get_trait(TRAIT_WEED_TOLERANCE)+(rand(-2,2)*degree),10, 0) if(prob(degree*5)) - carnivorous = max(0, min(2, carnivorous + rand(-degree,degree))) - if(carnivorous) + set_trait(TRAIT_CARNIVOROUS, get_trait(TRAIT_CARNIVOROUS)+rand(-degree,degree),2, 0) + if(get_trait(TRAIT_CARNIVOROUS)) source_turf.visible_message("\The [display_name] shudders hungrily.") if(6) - weed_tolerance = max(0, min(10, weed_tolerance + (rand(-2,2) * degree))) - if(prob(degree*5)) parasite = !parasite - - if(7) - lifespan = max(10, min(30, lifespan + (rand(-2,2) * degree))) - if(yield != -1) yield = max(0, min(10, yield + (rand(-2,2) * degree))) - if(8) - endurance = max(10, min(100, endurance + (rand(-5,5) * degree))) - production = max(1, min(10, production + (rand(-1,1) * degree))) - potency = max(0, min(200, potency + (rand(-20,20) * degree))) + set_trait(TRAIT_WEED_TOLERANCE, get_trait(TRAIT_WEED_TOLERANCE)+(rand(-2,2)*degree),10, 0) if(prob(degree*5)) - spread = max(0, min(2, spread + rand(-1,1))) + set_trait(TRAIT_PARASITE,!get_trait(TRAIT_PARASITE)) + if(7) + set_trait(TRAIT_LIFESPAN, get_trait(TRAIT_LIFESPAN)+(rand(-2,2)*degree),30,10) + if(get_trait(TRAIT_YIELD) != -1) + set_trait(TRAIT_YIELD, get_trait(TRAIT_YIELD)+(rand(-2,2)*degree),10,0) + if(8) + set_trait(TRAIT_ENDURANCE, get_trait(TRAIT_ENDURANCE)+(rand(-5,5)*degree),100,10) + set_trait(TRAIT_PRODUCTION, get_trait(TRAIT_PRODUCTION)+(rand(-1,1)*degree),10, 1) + set_trait(TRAIT_POTENCY, get_trait(TRAIT_POTENCY)+(rand(-20,20)*degree),200, 0) + if(prob(degree*5)) + set_trait(TRAIT_SPREAD, get_trait(TRAIT_SPREAD)+rand(-1,1),2, 0) source_turf.visible_message("\The [display_name] spasms visibly, shifting in the tray.") if(9) - maturation = max(0, min(30, maturation + (rand(-1,1) * degree))) + set_trait(TRAIT_MATURATION, get_trait(TRAIT_MATURATION)+(rand(-1,1)*degree),30, 0) if(prob(degree*5)) - harvest_repeat = !harvest_repeat + set_trait(TRAIT_HARVEST_REPEAT, !get_trait(TRAIT_HARVEST_REPEAT)) if(10) if(prob(degree*2)) - biolum = !biolum - if(biolum) + set_trait(TRAIT_BIOLUM, !get_trait(TRAIT_BIOLUM)) + if(get_trait(TRAIT_BIOLUM)) source_turf.visible_message("\The [display_name] begins to glow!") if(prob(degree*2)) - biolum_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - source_turf.visible_message("\The [display_name]'s glow changes colour!") + set_trait(TRAIT_BIOLUM_COLOUR,"#[pick(rainbow)]") + source_turf.visible_message("\The [display_name]'s glow changes colour!") else source_turf.visible_message("\The [display_name]'s glow dims...") if(11) if(prob(degree*2)) - flowers = !flowers - if(flowers) + set_trait(TRAIT_FLOWERS,!get_trait(TRAIT_FLOWERS)) + if(get_trait(TRAIT_FLOWERS)) source_turf.visible_message("\The [display_name] sprouts a bevy of flowers!") if(prob(degree*2)) - flower_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - source_turf.visible_message("\The [display_name]'s flowers changes colour!") + set_trait(TRAIT_FLOWER_COLOUR,"#[pick(rainbow)]") + source_turf.visible_message("\The [display_name]'s flowers changes colour!") else source_turf.visible_message("\The [display_name]'s flowers wither and fall off.") if(12) - teleporting = 1 + set_trait(TRAIT_TELEPORTING,1) return //Mutates a specific trait/set of traits. /datum/seed/proc/apply_gene(var/datum/plantgene/gene) - if(!gene || !gene.values || immutable > 0) return + if(!gene || !gene.values || get_trait(TRAIT_IMMUTABLE) > 0) return - switch(gene.genetype) + // Splicing products has some detrimental effects on yield and lifespan. + // We handle this before we do the rest of the looping, as normal traits don't really include lists. + if(gene.genetype == GENE_PRODUCTS) + for(var/trait in list(TRAIT_YIELD, TRAIT_ENDURANCE, TRAIT_LIFESPAN)) + if(get_trait(trait) > 0) set_trait(trait,get_trait(trait),null,1,0.85) - //Splicing products has some detrimental effects on yield and lifespan. - if("products") + if(!products) products = list() + products |= gene.values["[TRAIT_PRODUCTS]"] - if(gene.values.len < 6) return + if(!chems) chems = list() - if(yield > 0) yield = max(1,round(yield*0.85)) - if(endurance > 0) endurance = max(1,round(endurance*0.85)) - if(lifespan > 0) lifespan = max(1,round(lifespan*0.85)) + var/list/gene_value = gene.values["[TRAIT_CHEMS]"] + for(var/rid in gene_value) - if(!products) products = list() - products |= gene.values[1] + var/list/gene_chem = gene_value[rid] - if(!chems) chems = list() + if(!chems[rid]) + chems[rid] = gene_chem.Copy() + continue - var/list/gene_value = gene.values[2] - for(var/rid in gene_value) + for(var/i=1;i<=gene_chem.len;i++) - var/list/gene_chem = gene_value[rid] + if(isnull(gene_chem[i])) gene_chem[i] = 0 - if(!chems[rid]) - chems[rid] = gene_chem.Copy() - continue + if(chems[rid][i]) + chems[rid][i] = max(1,round((gene_chem[i] + chems[rid][i])/2)) + else + chems[rid][i] = gene_chem[i] - for(var/i=1;i<=gene_chem.len;i++) + var/list/new_gasses = gene.values["[TRAIT_EXUDE_GASSES]"] + if(islist(new_gasses)) + if(!exude_gasses) exude_gasses = list() + exude_gasses |= new_gasses + for(var/gas in exude_gasses) + exude_gasses[gas] = max(1,round(exude_gasses[gas]*0.8)) - if(isnull(gene_chem[i])) gene_chem[i] = 0 - - if(chems[rid][i]) - chems[rid][i] = max(1,round((gene_chem[i] + chems[rid][i])/2)) - else - chems[rid][i] = gene_chem[i] - - var/list/new_gasses = gene.values[3] - if(islist(new_gasses)) - if(!exude_gasses) exude_gasses = list() - exude_gasses |= new_gasses - for(var/gas in exude_gasses) - exude_gasses[gas] = max(1,round(exude_gasses[gas]*0.8)) - - alter_temp = gene.values[4] - potency = gene.values[5] - harvest_repeat = gene.values[6] - produces_power = gene.values[7] - juicy = gene.values[8] - product_icon = gene.values[9] - plant_icon = gene.values[10] - - if("consumption") - - if(gene.values.len < 7) return - - consume_gasses = gene.values[1] - requires_nutrients = gene.values[2] - nutrient_consumption = gene.values[3] - requires_water = gene.values[4] - water_consumption = gene.values[5] - carnivorous = gene.values[6] - parasite = gene.values[7] - stings = gene.values[8] - - if("environment") - - if(gene.values.len < 6) return - - ideal_heat = gene.values[1] - heat_tolerance = gene.values[2] - ideal_light = gene.values[3] - light_tolerance = gene.values[4] - lowkpa_tolerance = gene.values[5] - highkpa_tolerance = gene.values[6] - explosive = gene.values[7] - - if("resistance") - - if(gene.values.len < 3) return - - toxins_tolerance = gene.values[1] - pest_tolerance = gene.values[2] - weed_tolerance = gene.values[3] - - if("vigour") - - if(gene.values.len < 6) return - - endurance = gene.values[1] - yield = gene.values[2] - lifespan = gene.values[3] - spread = gene.values[4] - maturation = gene.values[5] - production = gene.values[6] - teleporting = gene.values[7] - - if("flowers") - - if(gene.values.len < 7) return - - plant_colour = gene.values[1] - product_colour = gene.values[2] - biolum = gene.values[3] - biolum_colour = gene.values[4] - flowers = gene.values[5] - flower_icon = gene.values[6] - flower_colour = gene.values[7] + for(var/trait in gene.values) + set_trait(trait,gene.values["[trait]"]) update_growth_stages() @@ -729,76 +621,31 @@ proc/populate_seed_list() if(!genetype) return 0 + var/list/traits_to_copy var/datum/plantgene/P = new() P.genetype = genetype + P.values = list() switch(genetype) - if("products") - P.values = list( - (products ? products : 0), - (chems ? chems : 0), - (exude_gasses ? exude_gasses : 0), - (alter_temp ? alter_temp : 0), - (potency ? potency : 0), - (harvest_repeat ? harvest_repeat : 0), - (produces_power ? produces_power : 0), - (juicy ? juicy : 0), - (product_icon ? product_icon : 0), - (plant_icon ? plant_icon : 0) - ) - - if("consumption") - P.values = list( - (consume_gasses ? consume_gasses : 0), - (requires_nutrients ? requires_nutrients : 0), - (nutrient_consumption ? nutrient_consumption : 0), - (requires_water ? requires_water : 0), - (water_consumption ? water_consumption : 0), - (carnivorous ? carnivorous : 0), - (parasite ? parasite : 0), - (stings ? stings : 0) - ) - - if("environment") - P.values = list( - (ideal_heat ? ideal_heat : 0), - (heat_tolerance ? heat_tolerance : 0), - (ideal_light ? ideal_light : 0), - (light_tolerance ? light_tolerance : 0), - (lowkpa_tolerance ? lowkpa_tolerance : 0), - (highkpa_tolerance ? highkpa_tolerance : 0), - (explosive ? explosive : 0) - ) - - if("resistance") - P.values = list( - (toxins_tolerance ? toxins_tolerance : 0), - (pest_tolerance ? pest_tolerance : 0), - (weed_tolerance ? weed_tolerance : 0) - ) - - if("vigour") - P.values = list( - (endurance ? endurance : 0), - (yield ? yield : 0), - (lifespan ? lifespan : 0), - (spread ? spread : 0), - (maturation ? maturation : 0), - (production ? production : 0), - (teleporting ? teleporting : 0), - ) - - if("flowers") - P.values = list( - (plant_colour ? plant_colour : 0), - (product_colour ? product_colour : 0), - (biolum ? biolum : 0), - (biolum_colour ? biolum_colour : 0), - (flowers ? flowers : 0), - (flower_icon ? flower_icon : 0), - (flower_colour ? flower_colour : 0) - ) + if(GENE_PRODUCTS) + P.values["[TRAIT_PRODUCTS]"] = products + P.values["[TRAIT_CHEMS]"] = chems + P.values["[TRAIT_EXUDE_GASSES]"] = exude_gasses + traits_to_copy = list(TRAIT_ALTER_TEMP,TRAIT_POTENCY,TRAIT_HARVEST_REPEAT,TRAIT_PRODUCES_POWER,TRAIT_JUICY,TRAIT_PRODUCT_ICON,TRAIT_PLANT_ICON) + if(GENE_CONSUMPTION) + P.values["[TRAIT_CONSUME_GASSES]"] = consume_gasses + traits_to_copy = list(TRAIT_REQUIRES_NUTRIENTS,TRAIT_NUTRIENT_CONSUMPTION,TRAIT_REQUIRES_WATER,TRAIT_WATER_CONSUMPTION,TRAIT_CARNIVOROUS,TRAIT_PARASITE,TRAIT_STINGS) + if(GENE_ENVIRONMENT) + traits_to_copy = list(TRAIT_IDEAL_HEAT,TRAIT_HEAT_TOLERANCE,TRAIT_IDEAL_LIGHT,TRAIT_LIGHT_TOLERANCE,TRAIT_LOWKPA_TOLERANCE,TRAIT_HIGHKPA_TOLERANCE,TRAIT_EXPLOSIVE) + if(GENE_RESISTANCE) + traits_to_copy = list(TRAIT_TOXINS_TOLERANCE,TRAIT_PEST_TOLERANCE,TRAIT_WEED_TOLERANCE) + if(GENE_VIGOUR) + traits_to_copy = list(TRAIT_ENDURANCE,TRAIT_YIELD,TRAIT_LIFESPAN,TRAIT_SPREAD,TRAIT_MATURATION,TRAIT_PRODUCTION,TRAIT_TELEPORTING) + if(GENE_FLOWERS) + traits_to_copy = list(TRAIT_PLANT_COLOUR,TRAIT_PRODUCT_COLOUR,TRAIT_BIOLUM,TRAIT_BIOLUM_COLOUR,TRAIT_FLOWERS,TRAIT_FLOWER_ICON,TRAIT_FLOWER_COLOUR) + for(var/trait in traits_to_copy) + P.values["[trait]"] = get_trait(trait) return (P ? P : 0) //Place the plant products at the feet of the user. @@ -808,7 +655,7 @@ proc/populate_seed_list() return var/got_product - if(!isnull(products) && products.len && yield > 0) + if(!isnull(products) && products.len && get_trait(TRAIT_YIELD) > 0) got_product = 1 if(!force_amount && !got_product && !harvest_sample) @@ -832,12 +679,12 @@ proc/populate_seed_list() if(!isnull(force_amount)) total_yield = force_amount else - if(yield > -1) + if(get_trait(TRAIT_YIELD) > -1) if(isnull(yield_mod) || yield_mod < 1) yield_mod = 0 - total_yield = yield + total_yield = get_trait(TRAIT_YIELD) else - total_yield = yield + rand(yield_mod) + total_yield = get_trait(TRAIT_YIELD) + rand(yield_mod) total_yield = max(1,total_yield) currently_querying = list() @@ -845,20 +692,20 @@ proc/populate_seed_list() var/product_type = pick(products) var/obj/item/product = new product_type(get_turf(user),name) - if(product_colour) - product.color = product_colour + if(get_trait(TRAIT_PRODUCT_COLOUR)) + product.color = get_trait(TRAIT_PRODUCT_COLOUR) if(istype(product,/obj/item/weapon/reagent_containers/food)) var/obj/item/weapon/reagent_containers/food/food = product - food.filling_color = product_colour + food.filling_color = get_trait(TRAIT_PRODUCT_COLOUR) if(mysterious) product.name += "?" product.desc += " On second thought, something about this one looks strange." - if(biolum) - if(biolum_colour) - product.l_color = biolum_colour - product.SetLuminosity(biolum) + if(get_trait(TRAIT_BIOLUM)) + if(get_trait(TRAIT_BIOLUM_COLOUR)) + product.l_color = get_trait(TRAIT_BIOLUM_COLOUR) + product.SetLuminosity(get_trait(TRAIT_BIOLUM)) //Handle spawning in living, mobile products (like dionaea). if(istype(product,/mob/living)) @@ -871,7 +718,7 @@ proc/populate_seed_list() // be put into the global datum list until the product is harvested, though. /datum/seed/proc/diverge(var/modified) - if(immutable > 0) return + if(get_trait(TRAIT_IMMUTABLE) > 0) return //Set up some basic information. var/datum/seed/new_seed = new @@ -889,55 +736,63 @@ proc/populate_seed_list() new_seed.seed_name = "[(roundstart ? "[(modified ? "modified" : "mutant")] " : "")][seed_name]" new_seed.display_name = "[(roundstart ? "[(modified ? "modified" : "mutant")] " : "")][display_name]" new_seed.seed_noun = seed_noun - - new_seed.requires_nutrients = requires_nutrients - new_seed.nutrient_consumption = nutrient_consumption - new_seed.requires_water = requires_water - new_seed.water_consumption = water_consumption - new_seed.ideal_heat = ideal_heat - new_seed.heat_tolerance = heat_tolerance - new_seed.ideal_light = ideal_light - new_seed.light_tolerance = light_tolerance - new_seed.toxins_tolerance = toxins_tolerance - new_seed.lowkpa_tolerance = lowkpa_tolerance - new_seed.highkpa_tolerance = highkpa_tolerance - new_seed.pest_tolerance = pest_tolerance - new_seed.weed_tolerance = weed_tolerance - new_seed.endurance = endurance - new_seed.yield = yield - new_seed.lifespan = lifespan - new_seed.maturation = maturation - new_seed.production = production - new_seed.harvest_repeat = harvest_repeat - new_seed.potency = potency - new_seed.spread = spread - new_seed.carnivorous = carnivorous - new_seed.parasite = parasite - new_seed.plant_icon = plant_icon - new_seed.plant_colour = plant_colour - new_seed.product_icon = product_icon - new_seed.product_colour = product_colour - new_seed.packet_icon = packet_icon - new_seed.biolum = biolum - new_seed.biolum_colour = biolum_colour - new_seed.flowers = flowers - new_seed.flower_icon = flower_icon - new_seed.alter_temp = alter_temp + new_seed.traits = traits.Copy() new_seed.update_growth_stages() return new_seed /datum/seed/proc/update_growth_stages() - if(plant_icon) - growth_stages = plant_sprites[plant_icon] + if(get_trait(TRAIT_PLANT_ICON)) + growth_stages = plant_sprites[get_trait(TRAIT_PLANT_ICON)] else growth_stages = 0 /datum/seed/New() - ..() + + set_trait(TRAIT_IMMUTABLE, 0) // If set, plant will never mutate. If -1, plant is highly mutable. + set_trait(TRAIT_HARVEST_REPEAT, 0) // If 1, this plant will fruit repeatedly. + set_trait(TRAIT_PRODUCES_POWER, 0) // Can be used to make a battery. + set_trait(TRAIT_JUICY, 0) // When thrown, causes a splatter decal. + set_trait(TRAIT_EXPLOSIVE, 0) // When thrown, acts as a grenade. + set_trait(TRAIT_CARNIVOROUS, 0) // 0 = none, 1 = eat pests in tray, 2 = eat living things (when a vine). + set_trait(TRAIT_PARASITE, 0) // 0 = no, 1 = gain health from weed level. + set_trait(TRAIT_STINGS, 0) // Can cause damage/inject reagents when thrown or handled. + set_trait(TRAIT_YIELD, 0) // Amount of product. + set_trait(TRAIT_LIFESPAN, 0) // Time before the plant dies. + set_trait(TRAIT_SPREAD, 0) // 0 limits plant to tray, 1 = creepers, 2 = vines. + set_trait(TRAIT_MATURATION, 0) // Time taken before the plant is mature. + set_trait(TRAIT_PRODUCTION, 0) // Time before harvesting can be undertaken again. + set_trait(TRAIT_TELEPORTING, 0) // Uses the bluespace tomato effect. + set_trait(TRAIT_BIOLUM, 0) // Plant is bioluminescent. + set_trait(TRAIT_FLOWERS, 0) // Plant has a flower overlay. + set_trait(TRAIT_ALTER_TEMP, 0) // If set, the plant will periodically alter local temp by this amount. + set_trait(TRAIT_PRODUCT_ICON, 0) // Icon to use for fruit coming from this plant. + set_trait(TRAIT_PLANT_ICON, 0) // Icon to use for the plant growing in the tray. + set_trait(TRAIT_PRODUCT_COLOUR, 0) // Colour to apply to product icon. + set_trait(TRAIT_BIOLUM_COLOUR, 0) // The colour of the plant's radiance. + set_trait(TRAIT_FLOWER_COLOUR, 0) // Which colour to use. + set_trait(TRAIT_POTENCY, 1) // General purpose plant strength value. + set_trait(TRAIT_REQUIRES_NUTRIENTS, 1) // The plant can starve. + set_trait(TRAIT_REQUIRES_WATER, 1) // The plant can become dehydrated. + set_trait(TRAIT_WATER_CONSUMPTION, 3) // Plant drinks this much per tick. + set_trait(TRAIT_LIGHT_TOLERANCE, 5) // Departure from ideal that is survivable. + set_trait(TRAIT_TOXINS_TOLERANCE, 5) // Resistance to poison. + set_trait(TRAIT_PEST_TOLERANCE, 5) // Threshold for pests to impact health. + set_trait(TRAIT_WEED_TOLERANCE, 5) // Threshold for weeds to impact health. + set_trait(TRAIT_IDEAL_LIGHT, 8) // Preferred light level in luminosity. + set_trait(TRAIT_HEAT_TOLERANCE, 20) // Departure from ideal that is survivable. + set_trait(TRAIT_LOWKPA_TOLERANCE, 25) // Low pressure capacity. + set_trait(TRAIT_ENDURANCE, 100) // Maximum plant HP when growing. + set_trait(TRAIT_HIGHKPA_TOLERANCE, 200) // High pressure capacity. + set_trait(TRAIT_IDEAL_HEAT, 293) // Preferred temperature in Kelvin. + set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25) // Plant eats this much per tick. + set_trait(TRAIT_PLANT_COLOUR, "#6EF86A") // Colour of the plant icon. + set_trait(TRAIT_FLOWER_ICON, "vine_fruit") // Which overlay to use. + spawn(5) sleep(-1) update_growth_stages() + // Actual roundstart seed types after this point. // Chili plants/variants. /datum/seed/chili @@ -947,16 +802,18 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/chili) chems = list("capsaicin" = list(3,5), "nutriment" = list(1,25)) mutants = list("icechili") - harvest_repeat = 1 - lifespan = 20 - maturation = 5 - production = 5 - yield = 4 - potency = 20 - packet_icon = "seed-chili" - product_icon = "chili" - product_colour = "#ED3300" - plant_icon = "bush2" + +/datum/seed/chili/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,20) + set_trait(TRAIT_MATURATION,5) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,20) + set_trait(TRAIT_PRODUCT_ICON,"chili") + set_trait(TRAIT_PRODUCT_COLOUR,"#ED3300") + set_trait(TRAIT_PLANT_ICON,"bush2") /datum/seed/chili/ice name = "icechili" @@ -965,10 +822,12 @@ proc/populate_seed_list() mutants = null products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper) chems = list("frostoil" = list(3,5), "nutriment" = list(1,50)) - maturation = 4 - production = 4 - packet_icon = "seed-icepepper" - product_colour = "#00EDC6" + +/datum/seed/chili/ice/New() + ..() + set_trait(TRAIT_MATURATION,4) + set_trait(TRAIT_PRODUCTION,4) + set_trait(TRAIT_PRODUCT_COLOUR,"#00EDC6") // Berry plants/variants. /datum/seed/berry @@ -977,18 +836,20 @@ proc/populate_seed_list() display_name = "berry bush" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/berries) mutants = list("glowberries","poisonberries") - harvest_repeat = 1 chems = list("nutriment" = list(1,10)) - juicy = 1 - lifespan = 20 - maturation = 5 - production = 5 - yield = 2 - potency = 10 - packet_icon = "seed-berry" - product_icon = "berry" - product_colour = "#FA1616" - plant_icon = "bush" + +/datum/seed/berry/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_JUICY,1) + set_trait(TRAIT_LIFESPAN,20) + set_trait(TRAIT_MATURATION,5) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,2) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"berry") + set_trait(TRAIT_PRODUCT_COLOUR,"#FA1616") + set_trait(TRAIT_PLANT_ICON,"bush") /datum/seed/berry/glow name = "glowberries" @@ -997,17 +858,18 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries) mutants = null chems = list("nutriment" = list(1,10), "uranium" = list(3,5)) - spread = 1 - biolum = 1 - biolum_colour = "#006622" - lifespan = 30 - maturation = 5 - production = 5 - yield = 2 - potency = 10 - packet_icon = "seed-glowberry" - product_colour = "C9FA16" - biolum + +/datum/seed/berry/glow/New() + ..() + set_trait(TRAIT_SPREAD,1) + set_trait(TRAIT_BIOLUM,1) + set_trait(TRAIT_BIOLUM_COLOUR,"#006622") + set_trait(TRAIT_LIFESPAN,30) + set_trait(TRAIT_MATURATION,5) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,2) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_COLOUR,"c9fa16") /datum/seed/berry/poison name = "poisonberries" @@ -1016,8 +878,10 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries) mutants = list("deathberries") chems = list("nutriment" = list(1), "toxin" = list(3,5)) - packet_icon = "seed-poisonberry" - product_colour = "#6DC961" + +/datum/seed/berry/poison/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#6DC961") /datum/seed/berry/poison/death name = "deathberries" @@ -1026,10 +890,12 @@ proc/populate_seed_list() mutants = null products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/deathberries) chems = list("nutriment" = list(1), "toxin" = list(3,3), "lexorin" = list(1,5)) - yield = 3 - potency = 50 - packet_icon = "seed-deathberry" - product_colour = "#7A5454" + +/datum/seed/berry/poison/death/New() + ..() + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_POTENCY,50) + set_trait(TRAIT_PRODUCT_COLOUR,"#7A5454") // Nettles/variants. /datum/seed/nettle @@ -1038,18 +904,20 @@ proc/populate_seed_list() display_name = "nettles" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/nettle) mutants = list("deathnettle") - harvest_repeat = 1 chems = list("nutriment" = list(1,50), "sacid" = list(0,1)) - lifespan = 30 - maturation = 6 - production = 6 - yield = 4 - potency = 10 - stings = 1 - packet_icon = "seed-nettle" - plant_icon = "bush5" - product_icon = "nettles" - product_colour = "#728A54" + +/datum/seed/nettle/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,30) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_STINGS,1) + set_trait(TRAIT_PLANT_ICON,"bush5") + set_trait(TRAIT_PRODUCT_ICON,"nettles") + set_trait(TRAIT_PRODUCT_COLOUR,"#728A54") /datum/seed/nettle/death name = "deathnettle" @@ -1058,11 +926,13 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/nettle/death) mutants = null chems = list("nutriment" = list(1,50), "pacid" = list(0,1)) - maturation = 8 - yield = 2 - packet_icon = "seed-deathnettle" - product_colour = "#8C5030" - plant_colour = "#634941" + +/datum/seed/nettle/death/New() + ..() + set_trait(TRAIT_MATURATION,8) + set_trait(TRAIT_YIELD,2) + set_trait(TRAIT_PRODUCT_COLOUR,"#8C5030") + set_trait(TRAIT_PLANT_COLOUR,"#634941") //Tomatoes/variants. /datum/seed/tomato @@ -1071,19 +941,20 @@ proc/populate_seed_list() display_name = "tomato plant" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/tomato) mutants = list("bluetomato","bloodtomato") - harvest_repeat = 1 chems = list("nutriment" = list(1,10)) - juicy = 1 - lifespan = 25 - maturation = 8 - production = 6 - yield = 2 - potency = 10 - packet_icon = "seed-tomato" - product_icon = "tomato" - product_colour = "#D10000" - plant_icon = "bush3" +/datum/seed/tomato/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_JUICY,1) + set_trait(TRAIT_LIFESPAN,25) + set_trait(TRAIT_MATURATION,8) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,2) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"tomato") + set_trait(TRAIT_PRODUCT_COLOUR,"#D10000") + set_trait(TRAIT_PLANT_ICON,"bush3") /datum/seed/tomato/blood name = "bloodtomato" @@ -1093,9 +964,11 @@ proc/populate_seed_list() mutants = list("killer") chems = list("nutriment" = list(1,10), "blood" = list(1,5)) splat_type = /obj/effect/decal/cleanable/blood/splatter - yield = 3 - packet_icon = "seed-bloodtomato" - product_colour = "#FF0000" + +/datum/seed/tomato/blood/New() + ..() + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_PRODUCT_COLOUR,"#FF0000") /datum/seed/tomato/killer name = "killertomato" @@ -1103,9 +976,11 @@ proc/populate_seed_list() display_name = "killer tomato plant" products = list(/mob/living/simple_animal/tomato) mutants = null - yield = 2 - packet_icon = "seed-killertomato" - product_colour = "#A86747" + +/datum/seed/tomato/killer/New() + ..() + set_trait(TRAIT_YIELD,2) + set_trait(TRAIT_PRODUCT_COLOUR,"#A86747") /datum/seed/tomato/blue name = "bluetomato" @@ -1114,9 +989,11 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato) mutants = list("bluespacetomato") chems = list("nutriment" = list(1,20), "lube" = list(1,5)) - packet_icon = "seed-bluetomato" - product_colour = "#4D86E8" - plant_colour = "#070AAD" + +/datum/seed/tomato/blue/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#4D86E8") + set_trait(TRAIT_PLANT_COLOUR,"#070AAD") /datum/seed/tomato/blue/teleport name = "bluespacetomato" @@ -1124,13 +1001,14 @@ proc/populate_seed_list() display_name = "bluespace tomato plant" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato) mutants = null - packet_icon = "seed-bluespacetomato" chems = list("nutriment" = list(1,20), "singulo" = list(1,5)) - teleporting = 1 - packet_icon = "seed-bluespacetomato" - product_colour = "#00E5FF" - biolum = 1 - biolum_colour = "#4DA4A8" + +/datum/seed/tomato/blue/teleport/New() + ..() + set_trait(TRAIT_TELEPORTING,1) + set_trait(TRAIT_PRODUCT_COLOUR,"#00E5FF") + set_trait(TRAIT_BIOLUM,1) + set_trait(TRAIT_BIOLUM_COLOUR,"#4DA4A8") //Eggplants/varieties. /datum/seed/eggplant @@ -1139,17 +1017,19 @@ proc/populate_seed_list() display_name = "eggplants" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant) mutants = list("realeggplant") - harvest_repeat = 1 chems = list("nutriment" = list(1,10)) - lifespan = 25 - maturation = 6 - production = 6 - yield = 2 - potency = 20 - packet_icon = "seed-eggplant" - product_icon = "eggplant" - product_colour = "#892694" - plant_icon = "bush4" + +/datum/seed/eggplant/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,25) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,2) + set_trait(TRAIT_POTENCY,20) + set_trait(TRAIT_PRODUCT_ICON,"eggplant") + set_trait(TRAIT_PRODUCT_COLOUR,"#892694") + set_trait(TRAIT_PLANT_ICON,"bush4") /datum/seed/eggplant/eggs name = "realeggplant" @@ -1157,10 +1037,12 @@ proc/populate_seed_list() display_name = "egg-plants" products = list(/obj/item/weapon/reagent_containers/food/snacks/egg) mutants = null - lifespan = 75 - production = 12 - packet_icon = "seed-eggy" - product_colour = "#E7EDD1" + +/datum/seed/eggplant/eggs/New() + ..() + set_trait(TRAIT_LIFESPAN,75) + set_trait(TRAIT_PRODUCTION,12) + set_trait(TRAIT_PRODUCT_COLOUR,"#E7EDD1") //Apples/varieties. /datum/seed/apple @@ -1169,17 +1051,19 @@ proc/populate_seed_list() display_name = "apple tree" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/apple) mutants = list("poisonapple","goldapple") - harvest_repeat = 1 chems = list("nutriment" = list(1,10)) - lifespan = 55 - maturation = 6 - production = 6 - yield = 5 - potency = 10 - packet_icon = "seed-apple" - product_icon = "treefruit" - product_colour = "#FF540A" - plant_icon = "tree2" + +/datum/seed/apple/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,55) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,5) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"treefruit") + set_trait(TRAIT_PRODUCT_COLOUR,"#FF540A") + set_trait(TRAIT_PLANT_ICON,"tree2") /datum/seed/apple/poison name = "poisonapple" @@ -1194,12 +1078,14 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/goldapple) mutants = null chems = list("nutriment" = list(1,10), "gold" = list(1,5)) - maturation = 10 - production = 10 - yield = 3 - packet_icon = "seed-goldapple" - product_colour = "#FFDD00" - plant_colour = "#D6B44D" + +/datum/seed/apple/gold/New() + ..() + set_trait(TRAIT_MATURATION,10) + set_trait(TRAIT_PRODUCTION,10) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_PRODUCT_COLOUR,"#FFDD00") + set_trait(TRAIT_PLANT_COLOUR,"#D6B44D") //Ambrosia/varieties. /datum/seed/ambrosia @@ -1208,17 +1094,19 @@ proc/populate_seed_list() display_name = "ambrosia vulgaris" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris) mutants = list("ambrosiadeus") - harvest_repeat = 1 chems = list("nutriment" = list(1), "space_drugs" = list(1,8), "kelotane" = list(1,8,1), "bicaridine" = list(1,10,1), "toxin" = list(1,10)) - lifespan = 60 - maturation = 6 - production = 6 - yield = 6 - potency = 5 - packet_icon = "seed-ambrosiavulgaris" - product_icon = "ambrosia" - product_colour = "#9FAD55" - plant_icon = "ambrosia" + +/datum/seed/ambrosia/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,60) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,6) + set_trait(TRAIT_POTENCY,5) + set_trait(TRAIT_PRODUCT_ICON,"ambrosia") + set_trait(TRAIT_PRODUCT_COLOUR,"#9FAD55") + set_trait(TRAIT_PLANT_ICON,"ambrosia") /datum/seed/ambrosia/deus name = "ambrosiadeus" @@ -1227,9 +1115,11 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus) mutants = null chems = list("nutriment" = list(1), "bicaridine" = list(1,8), "synaptizine" = list(1,8,1), "hyperzine" = list(1,10,1), "space_drugs" = list(1,10)) - packet_icon = "seed-ambrosiadeus" - product_colour = "#A3F0AD" - plant_colour = "#2A9C61" + +/datum/seed/ambrosia/deus/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#A3F0AD") + set_trait(TRAIT_PLANT_COLOUR,"#2A9C61") //Mushrooms/varieties. /datum/seed/mushroom @@ -1240,16 +1130,18 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle) mutants = list("reishi","amanita","plumphelmet") chems = list("nutriment" = list(1,25)) - lifespan = 35 - maturation = 7 - production = 1 - yield = 5 - potency = 1 - packet_icon = "mycelium-chanter" - product_icon = "mushroom4" - product_colour = "#DBDA72" - plant_colour = "#D9C94E" - plant_icon = "mushroom" + +/datum/seed/mushroom/New() + ..() + set_trait(TRAIT_LIFESPAN,35) + set_trait(TRAIT_MATURATION,7) + set_trait(TRAIT_PRODUCTION,1) + set_trait(TRAIT_YIELD,5) + set_trait(TRAIT_POTENCY,1) + set_trait(TRAIT_PRODUCT_ICON,"mushroom4") + set_trait(TRAIT_PRODUCT_COLOUR,"#DBDA72") + set_trait(TRAIT_PLANT_COLOUR,"#D9C94E") + set_trait(TRAIT_PLANT_ICON,"mushroom") /datum/seed/mushroom/mold name = "mold" @@ -1257,14 +1149,17 @@ proc/populate_seed_list() display_name = "brown mold" products = null mutants = null - spread = 1 - lifespan = 50 - maturation = 10 - yield = -1 - product_icon = "mushroom5" - product_colour = "#7A5F20" - plant_colour = "#7A5F20" - plant_icon = "mushroom9" + +/datum/seed/mushroom/mold/New() + ..() + set_trait(TRAIT_SPREAD,1) + set_trait(TRAIT_LIFESPAN,50) + set_trait(TRAIT_MATURATION,10) + set_trait(TRAIT_YIELD,-1) + set_trait(TRAIT_PRODUCT_ICON,"mushroom5") + set_trait(TRAIT_PRODUCT_COLOUR,"#7A5F20") + set_trait(TRAIT_PLANT_COLOUR,"#7A5F20") + set_trait(TRAIT_PLANT_ICON,"mushroom9") /datum/seed/mushroom/plump name = "plumphelmet" @@ -1273,15 +1168,17 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet) mutants = list("walkingmushroom","towercap") chems = list("nutriment" = list(2,10)) - lifespan = 25 - maturation = 8 - yield = 4 - potency = 0 - packet_icon = "mycelium-plump" - product_icon = "mushroom10" - product_colour = "#B57BB0" - plant_colour = "#9E4F9D" - plant_icon = "mushroom2" + +/datum/seed/mushroom/plump/New() + ..() + set_trait(TRAIT_LIFESPAN,25) + set_trait(TRAIT_MATURATION,8) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,0) + set_trait(TRAIT_PRODUCT_ICON,"mushroom10") + set_trait(TRAIT_PRODUCT_COLOUR,"#B57BB0") + set_trait(TRAIT_PLANT_COLOUR,"#9E4F9D") + set_trait(TRAIT_PLANT_ICON,"mushroom2") /datum/seed/mushroom/plump/walking name = "walkingmushroom" @@ -1289,11 +1186,13 @@ proc/populate_seed_list() display_name = "walking mushrooms" products = list(/mob/living/simple_animal/mushroom) mutants = null - maturation = 5 - yield = 1 - packet_icon = "mycelium-walkingmushroom" - product_colour = "#FAC0F2" - plant_colour = "#C4B1C2" + +/datum/seed/mushroom/plump/walking/New() + ..() + set_trait(TRAIT_MATURATION,5) + set_trait(TRAIT_YIELD,1) + set_trait(TRAIT_PRODUCT_COLOUR,"#FAC0F2") + set_trait(TRAIT_PLANT_COLOUR,"#C4B1C2") /datum/seed/mushroom/hallucinogenic name = "reishi" @@ -1302,15 +1201,17 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi) mutants = list("libertycap","glowshroom") chems = list("nutriment" = list(1,50), "psilocybin" = list(3,5)) - maturation = 10 - production = 5 - yield = 4 - potency = 15 - packet_icon = "mycelium-reishi" - product_icon = "mushroom11" - product_colour = "#FFB70F" - plant_colour = "#F58A18" - plant_icon = "mushroom6" + +/datum/seed/mushroom/hallucinogenic/New() + ..() + set_trait(TRAIT_MATURATION,10) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,15) + set_trait(TRAIT_PRODUCT_ICON,"mushroom11") + set_trait(TRAIT_PRODUCT_COLOUR,"#FFB70F") + set_trait(TRAIT_PLANT_COLOUR,"#F58A18") + set_trait(TRAIT_PLANT_ICON,"mushroom6") /datum/seed/mushroom/hallucinogenic/strong name = "libertycap" @@ -1319,14 +1220,16 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap) mutants = null chems = list("nutriment" = list(1), "stoxin" = list(3,3), "space_drugs" = list(1,25)) - lifespan = 25 - production = 1 - potency = 15 - packet_icon = "mycelium-liberty" - product_icon = "mushroom8" - product_colour = "#F2E550" - plant_colour = "#D1CA82" - plant_icon = "mushroom3" + +/datum/seed/mushroom/hallucinogenic/strong/New() + ..() + set_trait(TRAIT_LIFESPAN,25) + set_trait(TRAIT_PRODUCTION,1) + set_trait(TRAIT_POTENCY,15) + set_trait(TRAIT_PRODUCT_ICON,"mushroom8") + set_trait(TRAIT_PRODUCT_COLOUR,"#F2E550") + set_trait(TRAIT_PLANT_COLOUR,"#D1CA82") + set_trait(TRAIT_PLANT_ICON,"mushroom3") /datum/seed/mushroom/poison name = "amanita" @@ -1335,16 +1238,18 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita) mutants = list("destroyingangel","plastic") chems = list("nutriment" = list(1), "amatoxin" = list(3,3), "psilocybin" = list(1,25)) - lifespan = 50 - maturation = 10 - production = 5 - yield = 4 - potency = 10 - packet_icon = "mycelium-amanita" - product_icon = "mushroom" - product_colour = "#FF4545" - plant_colour = "#F5F2D0" - plant_icon = "mushroom4" + +/datum/seed/mushroom/poison/New() + ..() + set_trait(TRAIT_LIFESPAN,50) + set_trait(TRAIT_MATURATION,10) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"mushroom") + set_trait(TRAIT_PRODUCT_COLOUR,"#FF4545") + set_trait(TRAIT_PLANT_COLOUR,"#F5F2D0") + set_trait(TRAIT_PLANT_ICON,"mushroom4") /datum/seed/mushroom/poison/death name = "destroyingangel" @@ -1353,14 +1258,16 @@ proc/populate_seed_list() mutants = null products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel) chems = list("nutriment" = list(1,50), "amatoxin" = list(13,3), "psilocybin" = list(1,25)) - maturation = 12 - yield = 2 - potency = 35 - packet_icon = "mycelium-angel" - product_icon = "mushroom3" - product_colour = "#EDE8EA" - plant_colour = "#E6D8DD" - plant_icon = "mushroom5" + +/datum/seed/mushroom/poison/death/New() + ..() + set_trait(TRAIT_MATURATION,12) + set_trait(TRAIT_YIELD,2) + set_trait(TRAIT_POTENCY,35) + set_trait(TRAIT_PRODUCT_ICON,"mushroom3") + set_trait(TRAIT_PRODUCT_COLOUR,"#EDE8EA") + set_trait(TRAIT_PLANT_COLOUR,"#E6D8DD") + set_trait(TRAIT_PLANT_ICON,"mushroom5") /datum/seed/mushroom/towercap name = "towercap" @@ -1368,14 +1275,15 @@ proc/populate_seed_list() display_name = "tower caps" mutants = null products = list(/obj/item/weapon/grown/log) - packet_icon = "mycelium-tower" - lifespan = 80 - maturation = 15 - product_icon = "mushroom7" - product_colour = "#79A36D" - plant_colour = "#857F41" - plant_icon = "mushroom8" +/datum/seed/mushroom/towercap/New() + ..() + set_trait(TRAIT_LIFESPAN,80) + set_trait(TRAIT_MATURATION,15) + set_trait(TRAIT_PRODUCT_ICON,"mushroom7") + set_trait(TRAIT_PRODUCT_COLOUR,"#79A36D") + set_trait(TRAIT_PLANT_COLOUR,"#857F41") + set_trait(TRAIT_PLANT_ICON,"mushroom8") /datum/seed/mushroom/glowshroom name = "glowshroom" @@ -1384,20 +1292,22 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom) mutants = null chems = list("radium" = list(1,20)) - spread = 1 - lifespan = 120 - maturation = 15 - yield = 3 - explosive = 1 splat_type = /obj/effect/glowshroom - potency = 30 - biolum = 1 - biolum_colour = "#006622" - packet_icon = "mycelium-glowshroom" - product_icon = "mushroom2" - product_colour = "#DDFAB6" - plant_colour = "#EFFF8A" - plant_icon = "mushroom7" + +/datum/seed/mushroom/glowshroom/New() + ..() + set_trait(TRAIT_SPREAD,1) + set_trait(TRAIT_LIFESPAN,120) + set_trait(TRAIT_MATURATION,15) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_EXPLOSIVE,1) + set_trait(TRAIT_POTENCY,30) + set_trait(TRAIT_BIOLUM,1) + set_trait(TRAIT_BIOLUM_COLOUR,"#006622") + set_trait(TRAIT_PRODUCT_ICON,"mushroom2") + set_trait(TRAIT_PRODUCT_COLOUR,"#DDFAB6") + set_trait(TRAIT_PLANT_COLOUR,"#EFFF8A") + set_trait(TRAIT_PLANT_ICON,"mushroom7") /datum/seed/mushroom/plastic name = "plastic" @@ -1406,16 +1316,18 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/plastellium) mutants = null chems = list("plasticide" = list(1,10)) - lifespan = 15 - maturation = 5 - production = 6 - yield = 6 - potency = 20 - packet_icon = "mycelium-plast" - product_icon = "mushroom6" - product_colour = "#E6E6E6" - plant_colour = "#E6E6E6" - plant_icon = "mushroom10" + +/datum/seed/mushroom/plastic/New() + ..() + set_trait(TRAIT_LIFESPAN,15) + set_trait(TRAIT_MATURATION,5) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,6) + set_trait(TRAIT_POTENCY,20) + set_trait(TRAIT_PRODUCT_ICON,"mushroom6") + set_trait(TRAIT_PRODUCT_COLOUR,"#E6E6E6") + set_trait(TRAIT_PLANT_COLOUR,"#E6E6E6") + set_trait(TRAIT_PLANT_ICON,"mushroom10") //Flowers/varieties /datum/seed/flower @@ -1424,15 +1336,17 @@ proc/populate_seed_list() display_name = "harebells" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/harebell) chems = list("nutriment" = list(1,20)) - lifespan = 100 - maturation = 7 - production = 1 - yield = 2 - packet_icon = "seed-harebell" - product_icon = "flower5" - product_colour = "#C492D6" - plant_colour = "#6B8C5E" - plant_icon = "flower" + +/datum/seed/flower/New() + ..() + set_trait(TRAIT_LIFESPAN,100) + set_trait(TRAIT_MATURATION,7) + set_trait(TRAIT_PRODUCTION,1) + set_trait(TRAIT_YIELD,2) + set_trait(TRAIT_PRODUCT_ICON,"flower5") + set_trait(TRAIT_PRODUCT_COLOUR,"#C492D6") + set_trait(TRAIT_PLANT_COLOUR,"#6B8C5E") + set_trait(TRAIT_PLANT_ICON,"flower") /datum/seed/flower/poppy name = "poppies" @@ -1440,27 +1354,31 @@ proc/populate_seed_list() display_name = "poppies" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/poppy) chems = list("nutriment" = list(1,20), "bicaridine" = list(1,10)) - lifespan = 25 - potency = 20 - maturation = 8 - production = 6 - yield = 6 - packet_icon = "seed-poppy" - product_icon = "flower3" - product_colour = "#B33715" - plant_icon = "flower3" + +/datum/seed/flower/poppy/New() + ..() + set_trait(TRAIT_LIFESPAN,25) + set_trait(TRAIT_POTENCY,20) + set_trait(TRAIT_MATURATION,8) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,6) + set_trait(TRAIT_PRODUCT_ICON,"flower3") + set_trait(TRAIT_PRODUCT_COLOUR,"#B33715") + set_trait(TRAIT_PLANT_ICON,"flower3") /datum/seed/flower/sunflower name = "sunflowers" seed_name = "sunflower" display_name = "sunflowers" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sunflower) - lifespan = 25 - maturation = 6 - packet_icon = "seed-sunflower" - product_icon = "flower2" - product_colour = "#FFF700" - plant_icon = "flower2" + +/datum/seed/flower/sunflower/New() + ..() + set_trait(TRAIT_LIFESPAN,25) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCT_ICON,"flower2") + set_trait(TRAIT_PRODUCT_COLOUR,"#FFF700") + set_trait(TRAIT_PLANT_ICON,"flower2") //Grapes/varieties /datum/seed/grapes @@ -1469,18 +1387,20 @@ proc/populate_seed_list() display_name = "grapevines" mutants = list("greengrapes") products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/grapes) - harvest_repeat = 1 chems = list("nutriment" = list(1,10), "sugar" = list(1,5)) - lifespan = 50 - maturation = 3 - production = 5 - yield = 4 - potency = 10 - packet_icon = "seed-grapes" - product_icon = "grapes" - product_colour = "#BB6AC4" - plant_colour = "#378F2E" - plant_icon = "vine" + +/datum/seed/grapes/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,50) + set_trait(TRAIT_MATURATION,3) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"grapes") + set_trait(TRAIT_PRODUCT_COLOUR,"#BB6AC4") + set_trait(TRAIT_PLANT_COLOUR,"#378F2E") + set_trait(TRAIT_PLANT_ICON,"vine") /datum/seed/grapes/green name = "greengrapes" @@ -1489,8 +1409,10 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/greengrapes) mutants = null chems = list("nutriment" = list(1,10), "kelotane" = list(3,5)) - packet_icon = "seed-greengrapes" - product_colour = "42ED2F" + +/datum/seed/grapes/green/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"42ed2f") //Everything else /datum/seed/peanuts @@ -1498,52 +1420,58 @@ proc/populate_seed_list() seed_name = "peanut" display_name = "peanut vines" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/peanut) - harvest_repeat = 1 chems = list("nutriment" = list(1,10)) - lifespan = 55 - maturation = 6 - production = 6 - yield = 6 - potency = 10 - packet_icon = "seed-peanut" - product_icon = "potato" - product_colour = "#96855D" - plant_icon = "bush2" + +/datum/seed/peanuts/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,55) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,6) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"potato") + set_trait(TRAIT_PRODUCT_COLOUR,"#96855D") + set_trait(TRAIT_PLANT_ICON,"bush2") /datum/seed/cabbage name = "cabbage" seed_name = "cabbage" display_name = "cabbages" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage) - harvest_repeat = 1 chems = list("nutriment" = list(1,10)) - lifespan = 50 - maturation = 3 - production = 5 - yield = 4 - potency = 10 - packet_icon = "seed-cabbage" - product_icon = "cabbage" - product_colour = "#84BD82" - plant_colour = "#6D9C6B" - plant_icon = "vine2" + +/datum/seed/cabbage/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,50) + set_trait(TRAIT_MATURATION,3) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"cabbage") + set_trait(TRAIT_PRODUCT_COLOUR,"#84BD82") + set_trait(TRAIT_PLANT_COLOUR,"#6D9C6B") + set_trait(TRAIT_PLANT_ICON,"vine2") /datum/seed/banana name = "banana" seed_name = "banana" display_name = "banana tree" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/banana) - harvest_repeat = 1 chems = list("banana" = list(1,10)) - lifespan = 50 - maturation = 6 - production = 6 - yield = 3 - packet_icon = "seed-banana" - product_icon = "bananas" - product_colour = "#FFEC1F" - plant_colour = "#69AD50" - plant_icon = "tree4" + +/datum/seed/banana/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,50) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_PRODUCT_ICON,"bananas") + set_trait(TRAIT_PRODUCT_COLOUR,"#FFEC1F") + set_trait(TRAIT_PLANT_COLOUR,"#69AD50") + set_trait(TRAIT_PLANT_ICON,"tree4") /datum/seed/corn name = "corn" @@ -1551,16 +1479,18 @@ proc/populate_seed_list() display_name = "ears of corn" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/corn) chems = list("nutriment" = list(1,10)) - lifespan = 25 - maturation = 8 - production = 6 - yield = 3 - potency = 20 - packet_icon = "seed-corn" - product_icon = "corn" - product_colour = "#FFF23B" - plant_colour = "#87C969" - plant_icon = "corn" + +/datum/seed/corn/New() + ..() + set_trait(TRAIT_LIFESPAN,25) + set_trait(TRAIT_MATURATION,8) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_POTENCY,20) + set_trait(TRAIT_PRODUCT_ICON,"corn") + set_trait(TRAIT_PRODUCT_COLOUR,"#FFF23B") + set_trait(TRAIT_PLANT_COLOUR,"#87C969") + set_trait(TRAIT_PLANT_ICON,"corn") /datum/seed/potato name = "potato" @@ -1568,33 +1498,37 @@ proc/populate_seed_list() display_name = "potatoes" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/potato) chems = list("nutriment" = list(1,10)) - produces_power = 1 - lifespan = 30 - maturation = 10 - production = 1 - yield = 4 - potency = 10 - packet_icon = "seed-potato" - product_icon = "potato" - product_colour = "#D4CAB4" - plant_icon = "bush2" + +/datum/seed/potato/New() + ..() + set_trait(TRAIT_PRODUCES_POWER,1) + set_trait(TRAIT_LIFESPAN,30) + set_trait(TRAIT_MATURATION,10) + set_trait(TRAIT_PRODUCTION,1) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"potato") + set_trait(TRAIT_PRODUCT_COLOUR,"#D4CAB4") + set_trait(TRAIT_PLANT_ICON,"bush2") /datum/seed/soybean name = "soybean" seed_name = "soybean" display_name = "soybeans" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans) - harvest_repeat = 1 chems = list("nutriment" = list(1,20)) - lifespan = 25 - maturation = 4 - production = 4 - yield = 3 - potency = 5 - packet_icon = "seed-soybean" - product_icon = "bean" - product_colour = "#EBE7C0" - plant_icon = "stalk" + +/datum/seed/soybean/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,25) + set_trait(TRAIT_MATURATION,4) + set_trait(TRAIT_PRODUCTION,4) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_POTENCY,5) + set_trait(TRAIT_PRODUCT_ICON,"bean") + set_trait(TRAIT_PRODUCT_COLOUR,"#EBE7C0") + set_trait(TRAIT_PLANT_ICON,"stalk") /datum/seed/wheat name = "wheat" @@ -1602,16 +1536,18 @@ proc/populate_seed_list() display_name = "wheat stalks" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/wheat) chems = list("nutriment" = list(1,25)) - lifespan = 25 - maturation = 6 - production = 1 - yield = 4 - potency = 5 - packet_icon = "seed-wheat" - product_icon = "wheat" - product_colour = "#DBD37D" - plant_colour = "#BFAF82" - plant_icon = "stalk2" + +/datum/seed/wheat/New() + ..() + set_trait(TRAIT_LIFESPAN,25) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,1) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,5) + set_trait(TRAIT_PRODUCT_ICON,"wheat") + set_trait(TRAIT_PRODUCT_COLOUR,"#DBD37D") + set_trait(TRAIT_PLANT_COLOUR,"#BFAF82") + set_trait(TRAIT_PLANT_ICON,"stalk2") /datum/seed/rice name = "rice" @@ -1619,16 +1555,18 @@ proc/populate_seed_list() display_name = "rice stalks" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/ricestalk) chems = list("nutriment" = list(1,25)) - lifespan = 25 - maturation = 6 - production = 1 - yield = 4 - potency = 5 - packet_icon = "seed-rice" - product_icon = "rice" - product_colour = "#D5E6D1" - plant_colour = "#8ED17D" - plant_icon = "stalk2" + +/datum/seed/rice/New() + ..() + set_trait(TRAIT_LIFESPAN,25) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,1) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,5) + set_trait(TRAIT_PRODUCT_ICON,"rice") + set_trait(TRAIT_PRODUCT_COLOUR,"#D5E6D1") + set_trait(TRAIT_PLANT_COLOUR,"#8ED17D") + set_trait(TRAIT_PLANT_ICON,"stalk2") /datum/seed/carrots name = "carrot" @@ -1636,31 +1574,35 @@ proc/populate_seed_list() display_name = "carrots" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/carrot) chems = list("nutriment" = list(1,20), "imidazoline" = list(3,5)) - lifespan = 25 - maturation = 10 - production = 1 - yield = 5 - potency = 10 - packet_icon = "seed-carrot" - product_icon = "carrot" - product_colour = "#FFDB4A" - plant_icon = "carrot" + +/datum/seed/carrots/New() + ..() + set_trait(TRAIT_LIFESPAN,25) + set_trait(TRAIT_MATURATION,10) + set_trait(TRAIT_PRODUCTION,1) + set_trait(TRAIT_YIELD,5) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"carrot") + set_trait(TRAIT_PRODUCT_COLOUR,"#FFDB4A") + set_trait(TRAIT_PLANT_ICON,"carrot") /datum/seed/weeds name = "weeds" seed_name = "weed" display_name = "weeds" - lifespan = 100 - maturation = 5 - production = 1 - yield = -1 - potency = -1 - immutable = -1 - packet_icon = "seed-ambrosiavulgaris" - product_icon = "flower4" - product_colour = "#FCEB2B" - plant_colour = "#59945A" - plant_icon = "bush6" + +/datum/seed/weeds/New() + ..() + set_trait(TRAIT_LIFESPAN,100) + set_trait(TRAIT_MATURATION,5) + set_trait(TRAIT_PRODUCTION,1) + set_trait(TRAIT_YIELD,-1) + set_trait(TRAIT_POTENCY,-1) + set_trait(TRAIT_IMMUTABLE,-1) + set_trait(TRAIT_PRODUCT_ICON,"flower4") + set_trait(TRAIT_PRODUCT_COLOUR,"#FCEB2B") + set_trait(TRAIT_PLANT_COLOUR,"#59945A") + set_trait(TRAIT_PLANT_ICON,"bush6") /datum/seed/whitebeets name = "whitebeet" @@ -1668,137 +1610,155 @@ proc/populate_seed_list() display_name = "white-beets" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet) chems = list("nutriment" = list(0,20), "sugar" = list(1,5)) - lifespan = 60 - maturation = 6 - production = 6 - yield = 6 - potency = 10 - packet_icon = "seed-whitebeet" - product_icon = "carrot2" - product_colour = "#EEF5B0" - plant_colour = "#4D8F53" - plant_icon = "carrot2" + +/datum/seed/whitebeets/New() + ..() + set_trait(TRAIT_LIFESPAN,60) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,6) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"carrot2") + set_trait(TRAIT_PRODUCT_COLOUR,"#EEF5B0") + set_trait(TRAIT_PLANT_COLOUR,"#4D8F53") + set_trait(TRAIT_PLANT_ICON,"carrot2") /datum/seed/sugarcane name = "sugarcane" seed_name = "sugarcane" display_name = "sugarcanes" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane) - harvest_repeat = 1 chems = list("sugar" = list(4,5)) - lifespan = 60 - maturation = 3 - production = 6 - yield = 4 - potency = 10 - packet_icon = "seed-sugarcane" - product_icon = "stalk" - product_colour = "#B4D6BD" - plant_colour = "#6BBD68" - plant_icon = "stalk3" + +/datum/seed/sugarcane/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,60) + set_trait(TRAIT_MATURATION,3) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"stalk") + set_trait(TRAIT_PRODUCT_COLOUR,"#B4D6BD") + set_trait(TRAIT_PLANT_COLOUR,"#6BBD68") + set_trait(TRAIT_PLANT_ICON,"stalk3") /datum/seed/watermelon name = "watermelon" seed_name = "watermelon" display_name = "watermelon vine" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon) - harvest_repeat = 1 chems = list("nutriment" = list(1,6)) - juicy = 1 - lifespan = 50 - maturation = 6 - production = 6 - yield = 3 - potency = 1 - packet_icon = "seed-watermelon" - product_icon = "vine" - product_colour = "#326B30" - plant_colour = "#257522" - plant_icon = "vine2" + +/datum/seed/watermelon/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_JUICY,1) + set_trait(TRAIT_LIFESPAN,50) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_POTENCY,1) + set_trait(TRAIT_PRODUCT_ICON,"vine") + set_trait(TRAIT_PRODUCT_COLOUR,"#326B30") + set_trait(TRAIT_PLANT_COLOUR,"#257522") + set_trait(TRAIT_PLANT_ICON,"vine2") /datum/seed/pumpkin name = "pumpkin" seed_name = "pumpkin" display_name = "pumpkin vine" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin) - harvest_repeat = 1 chems = list("nutriment" = list(1,6)) - lifespan = 50 - maturation = 6 - production = 6 - yield = 3 - potency = 10 - packet_icon = "seed-pumpkin" - product_icon = "vine" - product_colour = "#B4D4B9" - plant_colour = "#BAE8C1" - plant_icon = "vine2" + +/datum/seed/pumpkin/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,50) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"vine") + set_trait(TRAIT_PRODUCT_COLOUR,"#B4D4B9") + set_trait(TRAIT_PLANT_COLOUR,"#BAE8C1") + set_trait(TRAIT_PLANT_ICON,"vine2") /datum/seed/citrus name = "lime" seed_name = "lime" display_name = "lime trees" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown) - harvest_repeat = 1 chems = list("nutriment" = list(1,20)) - juicy = 1 - lifespan = 55 - maturation = 6 - production = 6 - yield = 4 - potency = 15 - packet_icon = "seed-lime" - product_icon = "treefruit" - product_colour = "#3AF026" - plant_icon = "tree" + +/datum/seed/citrus/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_JUICY,1) + set_trait(TRAIT_LIFESPAN,55) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,15) + set_trait(TRAIT_PRODUCT_ICON,"treefruit") + set_trait(TRAIT_PRODUCT_COLOUR,"#3AF026") + set_trait(TRAIT_PLANT_ICON,"tree") /datum/seed/citrus/lemon name = "lemon" seed_name = "lemon" display_name = "lemon trees" - produces_power = 1 - packet_icon = "seed-lemon" - product_colour = "#F0E226" + +/datum/seed/citrus/lemon/New() + ..() + set_trait(TRAIT_PRODUCES_POWER,1) + set_trait(TRAIT_PRODUCT_COLOUR,"#F0E226") /datum/seed/citrus/orange name = "orange" seed_name = "orange" display_name = "orange trees" - packet_icon = "seed-orange" - product_colour = "#FFC20A" + +/datum/seed/citrus/orange/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#FFC20A") /datum/seed/grass name = "grass" seed_name = "grass" display_name = "grass" products = list(/obj/item/stack/tile/grass) - harvest_repeat = 1 - lifespan = 60 - maturation = 2 - production = 5 - yield = 5 - packet_icon = "seed-grass" - product_icon = "grass" - product_colour = "#09FF00" - plant_colour = "#07D900" - plant_icon = "grass" + +/datum/seed/grass/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,60) + set_trait(TRAIT_MATURATION,2) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,5) + set_trait(TRAIT_PRODUCT_ICON,"grass") + set_trait(TRAIT_PRODUCT_COLOUR,"#09FF00") + set_trait(TRAIT_PLANT_COLOUR,"#07D900") + set_trait(TRAIT_PLANT_ICON,"grass") /datum/seed/cocoa name = "cocoa" seed_name = "cacao" display_name = "cacao tree" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod) - harvest_repeat = 1 chems = list("nutriment" = list(1,10), "coco" = list(4,5)) - lifespan = 20 - maturation = 5 - production = 5 - yield = 2 - potency = 10 - packet_icon = "seed-cocoapod" - product_icon = "treefruit" - product_colour = "#CCA935" - plant_icon = "tree2" + +/datum/seed/cocoa/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_LIFESPAN,20) + set_trait(TRAIT_MATURATION,5) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,2) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"treefruit") + set_trait(TRAIT_PRODUCT_COLOUR,"#CCA935") + set_trait(TRAIT_PLANT_ICON,"tree2") /datum/seed/cherries name = "cherry" @@ -1806,18 +1766,20 @@ proc/populate_seed_list() seed_noun = "pits" display_name = "cherry tree" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/cherries) - harvest_repeat = 1 chems = list("nutriment" = list(1,15), "sugar" = list(1,15)) - juicy = 1 - lifespan = 35 - maturation = 5 - production = 5 - yield = 3 - potency = 10 - packet_icon = "seed-cherry" - product_icon = "treefruit" - product_colour = "#8C0101" - plant_icon = "tree2" + +/datum/seed/cherries/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_JUICY,1) + set_trait(TRAIT_LIFESPAN,35) + set_trait(TRAIT_MATURATION,5) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"treefruit") + set_trait(TRAIT_PRODUCT_COLOUR,"#8C0101") + set_trait(TRAIT_PLANT_ICON,"tree2") /datum/seed/kudzu name = "kudzu" @@ -1825,17 +1787,19 @@ proc/populate_seed_list() display_name = "kudzu vines" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod) chems = list("nutriment" = list(1,50), "anti_toxin" = list(1,25)) - lifespan = 20 - maturation = 6 - production = 6 - yield = 4 - potency = 10 - spread = 2 - packet_icon = "seed-kudzu" - product_icon = "treefruit" - product_colour = "#96D278" - plant_colour = "#6F7A63" - plant_icon = "vine2" + +/datum/seed/kudzu/New() + ..() + set_trait(TRAIT_LIFESPAN,20) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_SPREAD,2) + set_trait(TRAIT_PRODUCT_ICON,"treefruit") + set_trait(TRAIT_PRODUCT_COLOUR,"#96D278") + set_trait(TRAIT_PLANT_COLOUR,"#6F7A63") + set_trait(TRAIT_PLANT_ICON,"vine2") /datum/seed/diona name = "diona" @@ -1844,18 +1808,20 @@ proc/populate_seed_list() display_name = "replicant pods" products = list(/mob/living/carbon/alien/diona) product_requires_player = 1 - immutable = 1 - lifespan = 50 - endurance = 8 - maturation = 5 - production = 10 - yield = 1 - potency = 30 - packet_icon = "seed-replicapod" - product_icon = "diona" - product_colour = "#799957" - plant_colour = "#66804B" - plant_icon = "alien4" + +/datum/seed/diona/New() + ..() + set_trait(TRAIT_IMMUTABLE,1) + set_trait(TRAIT_LIFESPAN,50) + set_trait(TRAIT_ENDURANCE,8) + set_trait(TRAIT_MATURATION,5) + set_trait(TRAIT_PRODUCTION,10) + set_trait(TRAIT_YIELD,1) + set_trait(TRAIT_POTENCY,30) + set_trait(TRAIT_PRODUCT_ICON,"diona") + set_trait(TRAIT_PRODUCT_COLOUR,"#799957") + set_trait(TRAIT_PLANT_COLOUR,"#66804B") + set_trait(TRAIT_PLANT_ICON,"alien4") /datum/seed/shand name = "shand" @@ -1863,16 +1829,18 @@ proc/populate_seed_list() display_name = "S'randar's hand leaves" products = list(/obj/item/stack/medical/bruise_pack/tajaran) chems = list("bicaridine" = list(0,10)) - lifespan = 50 - maturation = 3 - production = 5 - yield = 4 - potency = 10 - packet_icon = "seed-shand" - product_icon = "alien3" - product_colour = "#378C61" - plant_colour = "#378C61" - plant_icon = "tree5" + +/datum/seed/shand/New() + ..() + set_trait(TRAIT_LIFESPAN,50) + set_trait(TRAIT_MATURATION,3) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"alien3") + set_trait(TRAIT_PRODUCT_COLOUR,"#378C61") + set_trait(TRAIT_PLANT_COLOUR,"#378C61") + set_trait(TRAIT_PLANT_ICON,"tree5") /datum/seed/mtear name = "mtear" @@ -1880,13 +1848,127 @@ proc/populate_seed_list() display_name = "Messa's tear leaves" products = list(/obj/item/stack/medical/ointment/tajaran) chems = list("honey" = list(1,10), "kelotane" = list(3,5)) - lifespan = 50 - maturation = 3 - production = 5 - yield = 4 - potency = 10 - packet_icon = "seed-mtear" - product_icon = "alien4" - product_colour = "#4CC5C7" - plant_colour = "#4CC789" - plant_icon = "bush7" \ No newline at end of file + +/datum/seed/mtear/New() + ..() + set_trait(TRAIT_LIFESPAN,50) + set_trait(TRAIT_MATURATION,3) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"alien4") + set_trait(TRAIT_PRODUCT_COLOUR,"#4CC5C7") + set_trait(TRAIT_PLANT_COLOUR,"#4CC789") + set_trait(TRAIT_PLANT_ICON,"bush7") + +/datum/seed/telriis + name = "telriis" + seed_name = "telriis" + display_name = "telriis grass" + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/telriis_clump) + +/datum/seed/telriis/New() + ..() + set_trait(TRAIT_PLANT_ICON,"telriis") + set_trait(TRAIT_LIFESPAN,50) + set_trait(TRAIT_ENDURANCE,50) + set_trait(TRAIT_MATURATION,5) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,5) + +/datum/seed/thaadra + name = "thaadra" + seed_name = "thaa'dra" + display_name = "thaa'dra lichen" + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/thaadrabloom) + +/datum/seed/thaadra/New() + ..() + set_trait(TRAIT_PLANT_ICON,"thaadra") + set_trait(TRAIT_LIFESPAN,20) + set_trait(TRAIT_ENDURANCE,10) + set_trait(TRAIT_MATURATION,5) + set_trait(TRAIT_PRODUCTION,9) + set_trait(TRAIT_YIELD,2) + set_trait(TRAIT_POTENCY,5) + +/datum/seed/jurlmah + name = "jurlmah" + seed_name = "jurl'mah" + display_name = "jurl'mah reeds" + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/jurlmah) + +/datum/seed/jurlmah/New() + ..() + set_trait(TRAIT_PLANT_ICON,"jurlmah") + set_trait(TRAIT_LIFESPAN,20) + set_trait(TRAIT_ENDURANCE,12) + set_trait(TRAIT_MATURATION,8) + set_trait(TRAIT_PRODUCTION,9) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_POTENCY,10) + +/datum/seed/amauri + name = "amauri" + seed_name = "amauri" + display_name = "amauri plant" + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/amauri) + +/datum/seed/amauri/New() + ..() + set_trait(TRAIT_PLANT_ICON,"amauri") + set_trait(TRAIT_LIFESPAN,30) + set_trait(TRAIT_ENDURANCE,10) + set_trait(TRAIT_MATURATION,8) + set_trait(TRAIT_PRODUCTION,9) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,10) + +/datum/seed/gelthi + name = "gelthi" + seed_name = "gelthi" + display_name = "gelthi plant" + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/gelthi) + +/datum/seed/gelthi/New() + ..() + set_trait(TRAIT_PLANT_ICON,"gelthi") + set_trait(TRAIT_LIFESPAN,20) + set_trait(TRAIT_ENDURANCE,15) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,2) + set_trait(TRAIT_POTENCY,1) + +/datum/seed/vale + name = "vale" + seed_name = "vale" + display_name = "vale bush" + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/vale) + +/datum/seed/vale/New() + ..() + set_trait(TRAIT_PLANT_ICON,"vale") + set_trait(TRAIT_LIFESPAN,25) + set_trait(TRAIT_ENDURANCE,15) + set_trait(TRAIT_MATURATION,8) + set_trait(TRAIT_PRODUCTION,10) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_POTENCY,3) + +/datum/seed/surik + name = "surik" + seed_name = "surik" + display_name = "surik vine" + products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/surik) + +/datum/seed/surik/New() + ..() + set_trait(TRAIT_PLANT_ICON,"surik") + set_trait(TRAIT_LIFESPAN,30) + set_trait(TRAIT_ENDURANCE,18) + set_trait(TRAIT_MATURATION,7) + set_trait(TRAIT_PRODUCTION,7) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_POTENCY,3) diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 7ffbb0d236..cc269c8a62 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -85,7 +85,7 @@ user << "There is already a seed loaded." return var/obj/item/seeds/S =W - if(S.seed && S.seed.immutable > 0) + if(S.seed && S.seed.get_trait(TRAIT_IMMUTABLE) > 0) user << "That seed is not compatible with our genetics technology." else user.drop_item(W) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 24b215c076..2194bf97db 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -29,22 +29,22 @@ var/global/list/plant_seed_sprites = list() overlays.Cut() var/is_seeds = ((seed.seed_noun in list("seeds","pits","nodes")) ? 1 : 0) var/image/seed_mask - var/seed_base_key = "base-[is_seeds ? seed.plant_colour : "spores"]" + var/seed_base_key = "base-[is_seeds ? seed.get_trait(TRAIT_PLANT_COLOUR) : "spores"]" if(plant_seed_sprites[seed_base_key]) seed_mask = plant_seed_sprites[seed_base_key] else seed_mask = image('icons/obj/seeds.dmi',"[is_seeds ? "seed" : "spore"]-mask") if(is_seeds) // Spore glass bits aren't coloured. - seed_mask.color = seed.plant_colour + seed_mask.color = seed.get_trait(TRAIT_PLANT_COLOUR) plant_seed_sprites[seed_base_key] = seed_mask var/image/seed_overlay - var/seed_overlay_key = "[seed.product_icon]-[seed.product_colour]" + var/seed_overlay_key = "[seed.get_trait(TRAIT_PRODUCT_ICON)]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]" if(plant_seed_sprites[seed_overlay_key]) seed_overlay = plant_seed_sprites[seed_overlay_key] else - seed_overlay = image('icons/obj/seeds.dmi',"[seed.product_icon]") - seed_overlay.color = seed.product_colour + seed_overlay = image('icons/obj/seeds.dmi',"[seed.get_trait(TRAIT_PRODUCT_ICON)]") + seed_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) plant_seed_sprites[seed_overlay_key] = seed_overlay overlays |= seed_mask @@ -261,4 +261,25 @@ var/global/list/plant_seed_sprites = list() seed_type = "cherry" /obj/item/seeds/kudzuseed - seed_type = "kudzu" \ No newline at end of file + seed_type = "kudzu" + +/obj/item/seeds/jurlmah + seed_type = "jurlmah" + +/obj/item/seeds/amauri + seed_type = "amauri" + +/obj/item/seeds/gelthi + seed_type = "gelthi" + +/obj/item/seeds/vale + seed_type = "vale" + +/obj/item/seeds/surik + seed_type = "surik" + +/obj/item/seeds/telriis + seed_type = "telriis" + +/obj/item/seeds/thaadra + seed_type = "thaadra" diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/vines.dm index f9334dc265..c06ca4fba5 100644 --- a/code/modules/hydroponics/vines.dm +++ b/code/modules/hydroponics/vines.dm @@ -20,6 +20,7 @@ // Life vars/ var/energy = 0 var/obj/effect/plant_controller/master = null + var/mob/living/buckled_mob var/datum/seed/seed /obj/effect/plantsegment/New() @@ -55,7 +56,7 @@ var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0, user)) del src else - user_unbuckle_mob(user) + manual_unbuckle(user) return // Plant-b-gone damage is handled in its entry in chemistry-reagents.dm ..() @@ -70,7 +71,39 @@ update() return - user_unbuckle_mob(user) + manual_unbuckle(user) + +/obj/effect/plantsegment/proc/unbuckle() + if(buckled_mob) + if(buckled_mob.buckled == src) //this is probably unneccesary, but it doesn't hurt + buckled_mob.buckled = null + buckled_mob.anchored = initial(buckled_mob.anchored) + buckled_mob.update_canmove() + buckled_mob = null + return + +/obj/effect/plantsegment/proc/manual_unbuckle(mob/user as mob) + if(buckled_mob) + if(prob(seed ? min(max(0,100 - seed.get_trait(TRAIT_POTENCY)),100) : 50)) + if(buckled_mob.buckled == src) + if(buckled_mob != user) + buckled_mob.visible_message(\ + "[user.name] frees [buckled_mob.name] from [src].",\ + "[user.name] frees you from [src].",\ + "You hear shredding and ripping.") + else + buckled_mob.visible_message(\ + "[buckled_mob.name] struggles free of [src].",\ + "You untangle [src] from around yourself.",\ + "You hear shredding and ripping.") + unbuckle() + else + var/text = pick("rips","tears","pulls") + user.visible_message(\ + "[user.name] [text] at [src].",\ + "You [text] at [src].",\ + "You hear shredding and ripping.") + return /obj/effect/plantsegment/proc/grow() @@ -94,7 +127,7 @@ if(limited_growth) return - if(prob(seed ? seed.potency : 25)) + if(prob(seed ? seed.get_trait(TRAIT_POTENCY) : 25)) if(!buckled_mob) var/mob/living/carbon/V = locate() in src.loc @@ -114,10 +147,10 @@ if(!seed) return // Update bioluminescence. - if(seed.biolum) - SetLuminosity(1+round(seed.potency/10)) - if(seed.biolum_colour) - l_color = seed.biolum_colour + if(seed.get_trait(TRAIT_BIOLUM)) + SetLuminosity(1+round(seed.get_trait(TRAIT_POTENCY)/10)) + if(seed.get_trait(TRAIT_BIOLUM_COLOUR)) + l_color = seed.get_trait(TRAIT_BIOLUM_COLOUR) else l_color = null return @@ -126,21 +159,21 @@ // Update flower/product overlay. overlays.Cut() - if(age >= seed.maturation) - if(prob(20) && seed.products && seed.products.len && !harvest && ((age-lastproduce) > seed.production)) + if(age >= seed.get_trait(TRAIT_MATURATION)) + if(prob(20) && seed.products && seed.products.len && !harvest && ((age-lastproduce) > seed.get_trait(TRAIT_PRODUCTION))) harvest = 1 lastproduce = age if(harvest) var/image/fruit_overlay = image('icons/obj/hydroponics_vines.dmi',"") - if(seed.product_colour) - fruit_overlay.color = seed.product_colour + if(seed.get_trait(TRAIT_PRODUCT_COLOUR)) + fruit_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) overlays += fruit_overlay - if(seed.flowers) - var/image/flower_overlay = image('icons/obj/hydroponics_vines.dmi',"[seed.flower_icon]") - if(seed.flower_colour) - flower_overlay.color = seed.flower_colour + if(seed.get_trait(TRAIT_FLOWERS)) + var/image/flower_overlay = image('icons/obj/hydroponics_vines.dmi',"[seed.get_trait(TRAIT_FLOWER_ICON)]") + if(seed.get_trait(TRAIT_FLOWER_COLOUR)) + flower_overlay.color = seed.get_trait(TRAIT_FLOWER_COLOUR) overlays += flower_overlay /obj/effect/plantsegment/proc/spread() @@ -194,11 +227,11 @@ return var/pressure = environment.return_pressure() - if(pressure < seed.lowkpa_tolerance || pressure > seed.highkpa_tolerance) + if(pressure < seed.get_trait(TRAIT_LOWKPA_TOLERANCE) || pressure > seed.get_trait(TRAIT_HIGHKPA_TOLERANCE)) die() return - if(abs(environment.temperature - seed.ideal_heat) > seed.heat_tolerance) + if(abs(environment.temperature - seed.get_trait(TRAIT_IDEAL_HEAT)) > seed.get_trait(TRAIT_HEAT_TOLERANCE)) die() return @@ -209,7 +242,7 @@ light_available = max(0,min(10,T.lighting_lumcount)-5) else light_available = 5 - if(abs(light_available - seed.ideal_light) > seed.light_tolerance) + if(abs(light_available - seed.get_trait(TRAIT_IDEAL_LIGHT)) > seed.get_trait(TRAIT_LIGHT_TOLERANCE)) die() return @@ -270,16 +303,16 @@ return // Check if we're too big for our own good. - if(vines.len >= (seed ? seed.potency * collapse_limit : 250) && !reached_collapse_size) + if(vines.len >= (seed?seed.get_trait(TRAIT_POTENCY)*collapse_limit : 250)&&!reached_collapse_size) reached_collapse_size = 1 - if(vines.len >= (seed ? seed.potency * slowdown_limit : 30) && !reached_slowdown_size ) + if(vines.len >= (seed?seed.get_trait(TRAIT_POTENCY)*slowdown_limit : 30)&&!reached_slowdown_size) reached_slowdown_size = 1 var/length = 0 if(reached_collapse_size) length = 0 else if(reached_slowdown_size) - if(prob(seed ? seed.potency : 25)) + if(prob(seed ? seed.get_trait(TRAIT_POTENCY) : 25)) length = 1 else length = 0 @@ -304,7 +337,7 @@ if(SV.energy < 2) //If tile isn't fully grown var/chance if(seed) - chance = limited_growth ? round(seed.potency/2,1) : seed.potency + chance = limited_growth ? round(seed.get_trait(TRAIT_POTENCY)/2,1) : seed.get_trait(TRAIT_POTENCY) else chance = 20 diff --git a/code/modules/research/xenoarchaeology/genetics/prehistoric_seeds.dm b/code/modules/research/xenoarchaeology/genetics/prehistoric_seeds.dm deleted file mode 100644 index 5597d27532..0000000000 --- a/code/modules/research/xenoarchaeology/genetics/prehistoric_seeds.dm +++ /dev/null @@ -1,139 +0,0 @@ -/datum/seed/telriis - - name = "telriis" - seed_name = "telriis" - display_name = "telriis grass" - products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/telriis_clump) - packet_icon = "seed-alien1" - plant_icon = "telriis" - - lifespan = 50 - endurance = 50 - maturation = 5 - production = 5 - yield = 4 - potency = 5 - growth_stages = 4 - -/datum/seed/thaadra - - name = "thaadra" - seed_name = "thaa'dra" - display_name = "thaa'dra lichen" - products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/thaadrabloom) - packet_icon = "seed-alien3" - plant_icon = "thaadra" - - lifespan = 20 - endurance = 10 - maturation = 5 - production = 9 - yield = 2 - potency = 5 - growth_stages = 4 - -/datum/seed/jurlmah - - name = "jurlmah" - seed_name = "jurl'mah" - display_name = "jurl'mah reeds" - products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/jurlmah) - packet_icon = "seed-alien3" - plant_icon = "jurlmah" - - lifespan = 20 - endurance = 12 - maturation = 8 - production = 9 - yield = 3 - potency = 10 - growth_stages = 5 - -/datum/seed/amauri - - name = "amauri" - seed_name = "amauri" - display_name = "amauri plant" - products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/amauri) - packet_icon = "seed-alien3" - plant_icon = "amauri" - - lifespan = 30 - endurance = 10 - maturation = 8 - production = 9 - yield = 4 - potency = 10 - growth_stages = 3 - -/datum/seed/gelthi - - name = "gelthi" - seed_name = "gelthi" - display_name = "gelthi plant" - products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/gelthi) - packet_icon = "seed-alien2" - plant_icon = "gelthi" - - lifespan = 20 - endurance = 15 - maturation = 6 - production = 6 - yield = 2 - potency = 1 - growth_stages = 3 - -/datum/seed/vale - - name = "vale" - seed_name = "vale" - display_name = "vale bush" - products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/vale) - packet_icon = "seed-alien2" - plant_icon = "vale" - - lifespan = 25 - endurance = 15 - maturation = 8 - production = 10 - yield = 3 - potency = 3 - growth_stages = 4 - -/datum/seed/surik - - name = "surik" - seed_name = "surik" - display_name = "surik vine" - products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/surik) - packet_icon = "seed-alien3" - plant_icon = "surik" - - lifespan = 30 - endurance = 18 - maturation = 7 - production = 7 - yield = 3 - potency = 3 - growth_stages = 4 - -/obj/item/seeds/jurlmah - seed_type = "jurlmah" - -/obj/item/seeds/amauri - seed_type = "amauri" - -/obj/item/seeds/gelthi - seed_type = "gelthi" - -/obj/item/seeds/vale - seed_type = "vale" - -/obj/item/seeds/surik - seed_type = "surik" - -/obj/item/seeds/telriis - seed_type = "telriis" - -/obj/item/seeds/thaadra - seed_type = "thaadra" \ No newline at end of file From d6b99b799581b1d8f0aea777a4e591d6ba3bb5e2 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 31 Jan 2015 01:35:15 +1030 Subject: [PATCH 25/90] Spread 1 plants can be planted outside of trays. --- code/modules/hydroponics/grown.dm | 7 +-- code/modules/hydroponics/hydro_tray.dm | 61 +++++++++++++++++++++----- 2 files changed, 51 insertions(+), 17 deletions(-) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 98246f0d64..2d6e70033e 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -155,13 +155,8 @@ if(seed.get_trait(TRAIT_SPREAD) == 0) return - // TODO: Generalize. - var/obj/effect/glowshroom/planted = new /obj/effect/glowshroom(user.loc) - planted.delay = 50 - planted.endurance = 100 - planted.potency = potency - user << "You plant the [src.name]." + new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(get_turf(user),src.seed) del(src) /obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 4ad70f9b2d..8d188c0c7d 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -7,7 +7,7 @@ flags = OPENCONTAINER volume = 100 - var/draw_warnings = 1 //Set to 0 to stop it from drawing the alert lights. + var/mechanical = 1 //Set to 0 to stop it from drawing the alert lights. // Plant maintenance vars. var/waterlevel = 100 // Water (max 100) @@ -200,7 +200,7 @@ // If there is no seed data (and hence nothing planted), // or the plant is dead, process nothing further. if(!seed || dead) - if(draw_warnings) update_icon() //Harvesting would fail to set alert icons properly. + if(mechanical) update_icon() //Harvesting would fail to set alert icons properly. return // Advance plant age. @@ -291,7 +291,7 @@ // If enough time (in cycles, not ticks) has passed since the plant was harvested, we're ready to harvest again. else if(seed.products && seed.products.len && \ (age > seed.get_trait(TRAIT_PRODUCTION)) && \ - (*age - lastproduce) > seed.get_trait(TRAIT_PRODUCTION)) && \ + ((age - lastproduce) > seed.get_trait(TRAIT_PRODUCTION)) && \ (!harvest && !dead)) harvest = 1 @@ -400,7 +400,7 @@ yield_mod = 0 mutation_mod = 0 - user << "You remove the dead plant from the [src]." + user << "You remove the dead plant." check_level_sanity() update_icon() return @@ -413,7 +413,7 @@ // Updates the plant overlay. if(!isnull(seed)) - if(draw_warnings && health <= (seed.get_trait(TRAIT_ENDURANCE) / 2)) + if(mechanical && health <= (seed.get_trait(TRAIT_ENDURANCE) / 2)) overlays += "over_lowhealth3" if(dead) @@ -457,7 +457,7 @@ overlays += "hydrocover" //Updated the various alert icons. - if(draw_warnings) + if(mechanical) if(waterlevel <= 10) overlays += "over_lowwater3" if(nutrilevel <= 2) @@ -678,7 +678,7 @@ check_level_sanity() update_icon() - else if(istype(O, /obj/item/weapon/wrench)) + else if(mechanical && istype(O, /obj/item/weapon/wrench)) //If there's a connector here, the portable_atmospherics setup can handle it. if(locate(/obj/machinery/atmospherics/portables_connector/) in loc) @@ -740,11 +740,11 @@ usr << "Nutrient: [round(nutrilevel,0.1)]/10" if(weedlevel >= 5) - usr << "[src] is filled with weeds!" + usr << "[src] is infested with weeds!" if(pestlevel >= 5) - usr << "[src] is filled with tiny worms!" + usr << "[src] is infested with tiny worms!" - if(!istype(src,/obj/machinery/portable_atmospherics/hydroponics/soil)) + if(mechanical) var/turf/T = loc var/datum/gas_mixture/environment @@ -786,7 +786,7 @@ icon_state = "soil" density = 0 use_power = 0 - draw_warnings = 0 + mechanical = 0 /obj/machinery/portable_atmospherics/hydroponics/soil/attackby(var/obj/item/O as obj, var/mob/user as mob) if(istype(O, /obj/item/weapon/shovel)) @@ -800,3 +800,42 @@ /obj/machinery/portable_atmospherics/hydroponics/soil/New() ..() verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid + +/obj/machinery/portable_atmospherics/hydroponics/soil/CanPass() + return 1 + +// This is a hack pending a proper rewrite of the plant controller. +// Icons for plants are generated as overlays, so setting it to invisible wouldn't work. +// Hence using a blank icon. +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible + name = "plant" + icon = 'icons/obj/seeds.dmi' + icon_state = "blank" + +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/New(var/newloc,var/datum/seed/newseed) + ..() + seed = newseed + dead = 0 + age = 1 + health = seed.get_trait(TRAIT_ENDURANCE) + lastcycle = world.time + pixel_y = 0-rand(8,12) + check_level_sanity() + update_icon() + +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/remove_dead() + ..() + del(src) + +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/harvest() + ..() + if(!seed) + del(src) + +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/process() + if(!seed) + del(src) + return + else if(name=="plant") + name = seed.display_name + ..() \ No newline at end of file From 5359d6273548453786e465e34584c4c21a61562d Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 31 Jan 2015 10:23:08 +1030 Subject: [PATCH 26/90] All mobs produced from hydroponics will look for a player. --- code/modules/hydroponics/hydro_tools.dm | 12 +++++------ code/modules/hydroponics/hydro_tray.dm | 2 +- code/modules/hydroponics/seed_datums.dm | 1 - code/modules/hydroponics/seed_mobs.dm | 28 ++++++++++++------------- 4 files changed, 21 insertions(+), 22 deletions(-) diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 9e17f6fffa..3e034fd870 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -157,21 +157,21 @@ dat += "
It has [grown_seed.get_trait(TRAIT_FLOWER_COLOUR) ? "flowers" : "flowers"]." if(grown_seed.get_trait(TRAIT_PRODUCES_POWER)) - user << "
The fruit will function as a battery if prepared appropriately." + dat += "
The fruit will function as a battery if prepared appropriately." if(grown_seed.get_trait(TRAIT_STINGS)) - user << "
The fruit is covered in stinging spines." + dat += "
The fruit is covered in stinging spines." if(grown_seed.get_trait(TRAIT_JUICY) == 1) - user << "
The fruit is soft-skinned and juicy." + dat += "
The fruit is soft-skinned and juicy." else if(grown_seed.get_trait(TRAIT_JUICY) == 2) - user << "
The fruit is excessively juicy." + dat += "
The fruit is excessively juicy." if(grown_seed.get_trait(TRAIT_EXPLOSIVE)) - user << "
The fruit is internally unstable." + dat += "
The fruit is internally unstable." if(grown_seed.get_trait(TRAIT_TELEPORTING)) - user << "
The fruit is temporal/spatially unstable." + dat += "
The fruit is temporal/spatially unstable." if(dat) user << browse(dat,"window=plant_analyzer") diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 8d188c0c7d..27b2e65778 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -819,7 +819,7 @@ age = 1 health = seed.get_trait(TRAIT_ENDURANCE) lastcycle = world.time - pixel_y = 0-rand(8,12) + pixel_y = rand(12) check_level_sanity() update_icon() diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index e707cc631e..84a8e84686 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1807,7 +1807,6 @@ proc/populate_seed_list() seed_noun = "nodes" display_name = "replicant pods" products = list(/mob/living/carbon/alien/diona) - product_requires_player = 1 /datum/seed/diona/New() ..() diff --git a/code/modules/hydroponics/seed_mobs.dm b/code/modules/hydroponics/seed_mobs.dm index 09553c7a1d..d31f184380 100644 --- a/code/modules/hydroponics/seed_mobs.dm +++ b/code/modules/hydroponics/seed_mobs.dm @@ -1,5 +1,4 @@ /datum/seed - var/product_requires_player // If yes, product will ask for a player among the ghosts. var/list/currently_querying // Used to avoid asking the same ghost repeatedly. // The following procs are used to grab players for mobs produced by a seed (mostly for dionaea). @@ -7,20 +6,21 @@ if(!host || !istype(host)) return - if(product_requires_player) - spawn(0) - request_player(host) - spawn(75) - if(!host.ckey && !host.client) - host.death() // This seems redundant, but a lot of mobs don't - host.stat = 2 // handle death() properly. Better safe than etc. - host.visible_message("[host] is malformed and unable to survive. It expires pitifully, leaving behind some seeds.") + spawn(0) + request_player(host) + if(istype(host,/mob/living/simple_animal)) + return + spawn(75) + if(!host.ckey && !host.client) + host.death() // This seems redundant, but a lot of mobs don't + host.stat = 2 // handle death() properly. Better safe than etc. + host.visible_message("[host] is malformed and unable to survive. It expires pitifully, leaving behind some seeds.") - var/total_yield = rand(1,3) - for(var/j = 0;j<=total_yield;j++) - var/obj/item/seeds/S = new(get_turf(host)) - S.seed_type = name - S.update_seed() + var/total_yield = rand(1,3) + for(var/j = 0;j<=total_yield;j++) + var/obj/item/seeds/S = new(get_turf(host)) + S.seed_type = name + S.update_seed() /datum/seed/proc/request_player(var/mob/living/host) if(!host) return From d616040e8c3d74a91e75e55b6dd44e0c1222986e Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 31 Jan 2015 10:51:16 +1030 Subject: [PATCH 27/90] Renamed some files, did some path replacements --- code/game/objects/effects/glowshroom.dm | 166 ------------------ code/game/smoothwall.dm | 2 +- code/modules/hydroponics/seed_datums.dm | 12 +- code/modules/hydroponics/spread_plant.dm | 166 ++++++++++++++++++ .../hydroponics/{vines.dm => spread_vine.dm} | 0 .../living/simple_animal/friendly/mushroom.dm | 40 ++++- .../living/simple_animal/friendly/tomato.dm | 5 +- code/modules/reagents/Chemistry-Reagents.dm | 4 +- 8 files changed, 219 insertions(+), 176 deletions(-) create mode 100644 code/modules/hydroponics/spread_plant.dm rename code/modules/hydroponics/{vines.dm => spread_vine.dm} (100%) diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index f7a6795e84..e69de29bb2 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -1,166 +0,0 @@ -//separate dm since hydro is getting bloated already - -/obj/effect/glowshroom - name = "glowshroom" - anchored = 1 - opacity = 0 - density = 0 - icon = 'icons/obj/lighting.dmi' - icon_state = "glowshroomf" - layer = 2.1 - l_color = "#003300" - - var/endurance = 30 - var/potency = 30 - var/delay = 1200 - var/floor = 0 - var/yield = 3 - var/spreadChance = 40 - var/spreadIntoAdjacentChance = 60 - var/evolveChance = 2 - var/lastTick = 0 - var/spreaded = 1 - -/obj/effect/glowshroom/single - spreadChance = 0 - -/obj/effect/glowshroom/New() - - ..() - - set_dir(CalcDir()) - - if(!floor) - switch(dir) //offset to make it be on the wall rather than on the floor - if(NORTH) - pixel_y = 32 - if(SOUTH) - pixel_y = -32 - if(EAST) - pixel_x = 32 - if(WEST) - pixel_x = -32 - icon_state = "glowshroom[rand(1,3)]" - else //if on the floor, glowshroom on-floor sprite - icon_state = "glowshroomf" - - processing_objects += src - - SetLuminosity(round(potency/15)) - lastTick = world.timeofday - -/obj/effect/glowshroom/Del() - processing_objects -= src - ..() - -/obj/effect/glowshroom/process() - if(!spreaded) - return - - if(((world.timeofday - lastTick) > delay) || ((world.timeofday - lastTick) < 0)) - lastTick = world.timeofday - spreaded = 0 - - for(var/i=1,i<=yield,i++) - if(prob(spreadChance)) - var/list/possibleLocs = list() - var/spreadsIntoAdjacent = 0 - - if(prob(spreadIntoAdjacentChance)) - spreadsIntoAdjacent = 1 - - for(var/turf/simulated/floor/plating/airless/asteroid/earth in view(3,src)) - if(spreadsIntoAdjacent || !locate(/obj/effect/glowshroom) in view(1,earth)) - possibleLocs += earth - - if(!possibleLocs.len) - break - - var/turf/newLoc = pick(possibleLocs) - - var/shroomCount = 0 //hacky - var/placeCount = 1 - for(var/obj/effect/glowshroom/shroom in newLoc) - shroomCount++ - for(var/wallDir in cardinal) - var/turf/isWall = get_step(newLoc,wallDir) - if(isWall.density) - placeCount++ - if(shroomCount >= placeCount) - continue - - var/obj/effect/glowshroom/child = new /obj/effect/glowshroom(newLoc) - child.potency = potency - child.yield = yield - child.delay = delay - child.endurance = endurance - - spreaded++ - - if(prob(evolveChance)) //very low chance to evolve on its own - potency += rand(4,6) - -/obj/effect/glowshroom/proc/CalcDir(turf/location = loc) - set background = 1 - var/direction = 16 - - for(var/wallDir in cardinal) - var/turf/newTurf = get_step(location,wallDir) - if(newTurf.density) - direction |= wallDir - - for(var/obj/effect/glowshroom/shroom in location) - if(shroom == src) - continue - if(shroom.floor) //special - direction &= ~16 - else - direction &= ~shroom.dir - - var/list/dirList = list() - - for(var/i=1,i<=16,i <<= 1) - if(direction & i) - dirList += i - - if(dirList.len) - var/newDir = pick(dirList) - if(newDir == 16) - floor = 1 - newDir = 1 - return newDir - - floor = 1 - return 1 - -/obj/effect/glowshroom/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - - endurance -= W.force - - CheckEndurance() - -/obj/effect/glowshroom/ex_act(severity) - switch(severity) - if(1.0) - del(src) - return - if(2.0) - if (prob(50)) - del(src) - return - if(3.0) - if (prob(5)) - del(src) - return - else - return - -/obj/effect/glowshroom/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - endurance -= 5 - CheckEndurance() - -/obj/effect/glowshroom/proc/CheckEndurance() - if(endurance <= 0) - del(src) \ No newline at end of file diff --git a/code/game/smoothwall.dm b/code/game/smoothwall.dm index b8196dbc5c..5bb2ff9939 100644 --- a/code/game/smoothwall.dm +++ b/code/game/smoothwall.dm @@ -109,7 +109,7 @@ W.relativewall() for(var/direction in cardinal) - for(var/obj/effect/glowshroom/shroom in get_step(src,direction)) + for(var/obj/effect/shroom/glow/shroom in get_step(src,direction)) if(!shroom.floor) //shrooms drop to the floor shroom.floor = 1 shroom.icon_state = "glowshroomf" diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 84a8e84686..ec6fff7e05 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -168,12 +168,12 @@ proc/populate_seed_list() M.reagents.add_reagent(chem,injecting) //Applies an effect to a target atom. -/datum/seed/proc/thrown_at(var/obj/item/thrown,var/atom/target) +/datum/seed/proc/thrown_at(var/obj/item/thrown,var/atom/target, var/force_explode) var/splatted var/turf/origin_turf = get_turf(target) - if(get_trait(TRAIT_EXPLOSIVE)) + if(force_explode || get_trait(TRAIT_EXPLOSIVE)) var/flood_dist = min(10,max(1,get_trait(TRAIT_POTENCY)/15)) var/list/open_turfs = list() @@ -243,7 +243,7 @@ proc/populate_seed_list() for(var/mob/living/M in T.contents) apply_special_effect(M) splatter(T,thrown) - origin_turf.visible_message("The [thrown.name] violently explodes against [target]!") + origin_turf.visible_message("The [thrown.name] explodes!") del(thrown) return @@ -709,9 +709,11 @@ proc/populate_seed_list() //Handle spawning in living, mobile products (like dionaea). if(istype(product,/mob/living)) - product.visible_message("The pod disgorges [product]!") handle_living_product(product) + if(istype(product,/mob/living/simple_animal/mushroom)) // Gross. + var/mob/living/simple_animal/mushroom/mush = product + mush.seed = src // When the seed in this machine mutates/is modified, the tray seed value // is set to a new datum copied from the original. This datum won't actually @@ -1130,6 +1132,7 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle) mutants = list("reishi","amanita","plumphelmet") chems = list("nutriment" = list(1,25)) + splat_type = /obj/effect/shroom /datum/seed/mushroom/New() ..() @@ -1292,7 +1295,6 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom) mutants = null chems = list("radium" = list(1,20)) - splat_type = /obj/effect/glowshroom /datum/seed/mushroom/glowshroom/New() ..() diff --git a/code/modules/hydroponics/spread_plant.dm b/code/modules/hydroponics/spread_plant.dm new file mode 100644 index 0000000000..4d473b0b6e --- /dev/null +++ b/code/modules/hydroponics/spread_plant.dm @@ -0,0 +1,166 @@ +//separate dm since hydro is getting bloated already + +/obj/effect/glowshroom + name = "glowshroom" + anchored = 1 + opacity = 0 + density = 0 + icon = 'icons/obj/lighting.dmi' + icon_state = "glowshroomf" + layer = 2.1 + l_color = "#003300" + + var/endurance = 30 + var/potency = 30 + var/delay = 1200 + var/floor = 0 + var/yield = 3 + var/spreadChance = 40 + var/spreadIntoAdjacentChance = 60 + var/evolveChance = 2 + var/lastTick = 0 + var/spreaded = 1 + +/obj/effect/glowshroom/single + spreadChance = 0 + +/obj/effect/glowshroom/New() + + ..() + + set_dir(CalcDir()) + + if(!floor) + switch(dir) //offset to make it be on the wall rather than on the floor + if(NORTH) + pixel_y = 32 + if(SOUTH) + pixel_y = -32 + if(EAST) + pixel_x = 32 + if(WEST) + pixel_x = -32 + icon_state = "glowshroom[rand(1,3)]" + else //if on the floor, glowshroom on-floor sprite + icon_state = "glowshroomf" + + processing_objects += src + + SetLuminosity(round(potency/15)) + lastTick = world.timeofday + +/obj/effect/glowshroom/Del() + processing_objects -= src + ..() + +/obj/effect/glowshroom/process() + if(!spreaded) + return + + if(((world.timeofday - lastTick) > delay) || ((world.timeofday - lastTick) < 0)) + lastTick = world.timeofday + spreaded = 0 + + for(var/i=1,i<=yield,i++) + if(prob(spreadChance)) + var/list/possibleLocs = list() + var/spreadsIntoAdjacent = 0 + + if(prob(spreadIntoAdjacentChance)) + spreadsIntoAdjacent = 1 + + for(var/turf/simulated/floor/plating/airless/asteroid/earth in view(3,src)) + if(spreadsIntoAdjacent || !locate(/obj/effect/glowshroom) in view(1,earth)) + possibleLocs += earth + + if(!possibleLocs.len) + break + + var/turf/newLoc = pick(possibleLocs) + + var/shroomCount = 0 //hacky + var/placeCount = 1 + for(var/obj/effect/glowshroom/shroom in newLoc) + shroomCount++ + for(var/wallDir in cardinal) + var/turf/isWall = get_step(newLoc,wallDir) + if(isWall.density) + placeCount++ + if(shroomCount >= placeCount) + continue + + var/obj/effect/glowshroom/child = new /obj/effect/glowshroom(newLoc) + child.potency = potency + child.yield = yield + child.delay = delay + child.endurance = endurance + + spreaded++ + + if(prob(evolveChance)) //very low chance to evolve on its own + potency += rand(4,6) + +/obj/effect/glowshroom/proc/CalcDir(turf/location = loc) + set background = 1 + var/direction = 16 + + for(var/wallDir in cardinal) + var/turf/newTurf = get_step(location,wallDir) + if(newTurf.density) + direction |= wallDir + + for(var/obj/effect/glowshroom/shroom in location) + if(shroom == src) + continue + if(shroom.floor) //special + direction &= ~16 + else + direction &= ~shroom.dir + + var/list/dirList = list() + + for(var/i=1,i<=16,i <<= 1) + if(direction & i) + dirList += i + + if(dirList.len) + var/newDir = pick(dirList) + if(newDir == 16) + floor = 1 + newDir = 1 + return newDir + + floor = 1 + return 1 + +/obj/effect/glowshroom/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + + endurance -= W.force + + CheckEndurance() + +/obj/effect/glowshroom/ex_act(severity) + switch(severity) + if(1.0) + del(src) + return + if(2.0) + if (prob(50)) + del(src) + return + if(3.0) + if (prob(5)) + del(src) + return + else + return + +/obj/effect/glowshroom/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature > 300) + endurance -= 5 + CheckEndurance() + +/obj/effect/glowshroom/proc/CheckEndurance() + if(endurance <= 0) + del(src) \ No newline at end of file diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/spread_vine.dm similarity index 100% rename from code/modules/hydroponics/vines.dm rename to code/modules/hydroponics/spread_vine.dm diff --git a/code/modules/mob/living/simple_animal/friendly/mushroom.dm b/code/modules/mob/living/simple_animal/friendly/mushroom.dm index 5b4121bedd..95f228d12d 100644 --- a/code/modules/mob/living/simple_animal/friendly/mushroom.dm +++ b/code/modules/mob/living/simple_animal/friendly/mushroom.dm @@ -13,4 +13,42 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "whacks" - harm_intent_damage = 5 \ No newline at end of file + harm_intent_damage = 5 + var/datum/seed/seed + +/mob/living/simple_animal/mushroom + + set name = "Explode" + set category = "Abilities" + set desc = "Spread your spores!" + set src = usr + + if(stat == 2) + usr << "You are dead; it is too late for that." + return + + if(!seed) + usr << "You are sterile! + return + + spore_explode() + +/mob/living/simple_animal/mushroom/death() + if(prob(30)) + spore_explode() + return + ..() + +/mob/living/simple_animal/mushroom/proc/spore_explode() + + if(!seed) + return + + var/list/target_turfs = list() + for(var/turf/new_turf in orange(1,src)) + if(prob(60) && !new_turf.density && src.Adjacent(new_turf)) target_turfs |= new_turf + for(var/turf/target_turf in target_turfs) + new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(target_turf,seed) + seed.thrown_at(src,get_turf(src),1) + if(src) + gib() diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm index 57c0f4c939..e0574ba925 100644 --- a/code/modules/mob/living/simple_animal/friendly/tomato.dm +++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm @@ -12,4 +12,7 @@ response_help = "prods" response_disarm = "pushes aside" response_harm = "smacks" - harm_intent_damage = 5 \ No newline at end of file + harm_intent_damage = 5 + melee_damage_upper = 15 + melee_damage_lower = 10 + attacktext = "mauled" \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index e523fab26c..66c99f750c 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1844,7 +1844,7 @@ datum var/obj/effect/alien/weeds/alien_weeds = O alien_weeds.health -= rand(15,35) // Kills alien weeds pretty fast alien_weeds.healthcheck() - else if(istype(O,/obj/effect/glowshroom)) //even a small amount is enough to kill it + else if(istype(O,/obj/effect/shroom)) //even a small amount is enough to kill it del(O) else if(istype(O,/obj/effect/plantsegment)) if(prob(50)) del(O) //Kills kudzu too. @@ -2075,7 +2075,7 @@ datum M.take_organ_damage(min(6*toxpwr, volume * toxpwr)) reaction_obj(var/obj/O, var/volume) - if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(meltprob * 3)) + if((istype(O,/obj/item) || istype(O,/obj/effect/shroom/glow)) && prob(meltprob * 3)) if(!O.unacidable) var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) I.desc = "Looks like this was \an [O] some time ago." From 0e93c1cf7bfa6fcf9375a1098b348b618d952a69 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 31 Jan 2015 11:54:34 +1030 Subject: [PATCH 28/90] Rewriting the /obj/effect/glowshroom into a more general system. --- baystation12.dme | 3 +- code/game/smoothwall.dm | 4 +- code/modules/hydroponics/hydro_tray.dm | 2 +- code/modules/hydroponics/seed_datums.dm | 23 +- code/modules/hydroponics/spread_plant.dm | 218 ++++++++++-------- .../living/simple_animal/friendly/mushroom.dm | 4 +- code/modules/reagents/Chemistry-Reagents.dm | 4 +- maps/exodus-5.dmm | 72 +++--- 8 files changed, 184 insertions(+), 146 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index 42c4d5978f..fe79d1a4e1 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -970,7 +970,8 @@ #include "code\modules\hydroponics\seed_mobs.dm" #include "code\modules\hydroponics\seed_storage.dm" #include "code\modules\hydroponics\seeds.dm" -#include "code\modules\hydroponics\vines.dm" +#include "code\modules\hydroponics\spread_plant.dm" +#include "code\modules\hydroponics\spread_vine.dm" #include "code\modules\library\lib_items.dm" #include "code\modules\library\lib_machines.dm" #include "code\modules\library\lib_readme.dm" diff --git a/code/game/smoothwall.dm b/code/game/smoothwall.dm index 5bb2ff9939..907b2f6758 100644 --- a/code/game/smoothwall.dm +++ b/code/game/smoothwall.dm @@ -109,10 +109,10 @@ W.relativewall() for(var/direction in cardinal) - for(var/obj/effect/shroom/glow/shroom in get_step(src,direction)) + for(var/obj/effect/plant/shroom in get_step(src,direction)) if(!shroom.floor) //shrooms drop to the floor shroom.floor = 1 - shroom.icon_state = "glowshroomf" + shroom.update_icon() shroom.pixel_x = 0 shroom.pixel_y = 0 diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 27b2e65778..b2870a4edf 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -819,7 +819,7 @@ age = 1 health = seed.get_trait(TRAIT_ENDURANCE) lastcycle = world.time - pixel_y = rand(12) + pixel_y = rand(-5,5) check_level_sanity() update_icon() diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index ec6fff7e05..002682a60b 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -149,13 +149,13 @@ proc/populate_seed_list() //Splatter a turf. /datum/seed/proc/splatter(var/turf/T,var/obj/item/thrown) if(splat_type) - var/obj/effect/decal/cleanable/fruit_smudge/splat = new splat_type(T) - splat.name = "[thrown.name] [pick("smear","smudge","splatter")]" - if(get_trait(TRAIT_BIOLUM)) - if(get_trait(TRAIT_BIOLUM_COLOUR)) - splat.l_color = get_trait(TRAIT_BIOLUM_COLOUR) - splat.SetLuminosity(get_trait(TRAIT_BIOLUM)) - if(istype(splat)) + var/obj/effect/plant/splat = new splat_type(T, src) + if(!istype(splat)) // Plants handle their own stuff. + splat.name = "[thrown.name] [pick("smear","smudge","splatter")]" + if(get_trait(TRAIT_BIOLUM)) + if(get_trait(TRAIT_BIOLUM_COLOUR)) + splat.l_color = get_trait(TRAIT_BIOLUM_COLOUR) + splat.SetLuminosity(get_trait(TRAIT_BIOLUM)) if(get_trait(TRAIT_PRODUCT_COLOUR)) splat.color = get_trait(TRAIT_PRODUCT_COLOUR) @@ -259,7 +259,7 @@ proc/populate_seed_list() origin_turf.visible_message("The [thrown.name] splatters against [target]!") del(thrown) -/datum/seed/proc/handle_environment(var/turf/current_turf, var/datum/gas_mixture/environment) +/datum/seed/proc/handle_environment(var/turf/current_turf, var/datum/gas_mixture/environment, var/check_only) var/health_change = 0 // Handle gas consumption. @@ -268,7 +268,8 @@ proc/populate_seed_list() for(var/gas in consume_gasses) if(environment && environment.gas && environment.gas[gas] && \ environment.gas[gas] >= consume_gasses[gas]) - environment.adjust_gas(gas,-consume_gasses[gas],1) + if(!check_only) + environment.adjust_gas(gas,-consume_gasses[gas],1) else missing_gas++ @@ -284,7 +285,7 @@ proc/populate_seed_list() health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER // Handle gas production. - if(exude_gasses && exude_gasses.len) + if(exude_gasses && exude_gasses.len && !check_only) for(var/gas in exude_gasses) environment.adjust_gas(gas, max(1,round((exude_gasses[gas]*get_trait(TRAIT_POTENCY))/exude_gasses.len))) @@ -1132,7 +1133,7 @@ proc/populate_seed_list() products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle) mutants = list("reishi","amanita","plumphelmet") chems = list("nutriment" = list(1,25)) - splat_type = /obj/effect/shroom + splat_type = /obj/effect/plant /datum/seed/mushroom/New() ..() diff --git a/code/modules/hydroponics/spread_plant.dm b/code/modules/hydroponics/spread_plant.dm index 4d473b0b6e..34e77328ea 100644 --- a/code/modules/hydroponics/spread_plant.dm +++ b/code/modules/hydroponics/spread_plant.dm @@ -1,106 +1,139 @@ -//separate dm since hydro is getting bloated already +#define DEFAULT_SEED "glowshroom" -/obj/effect/glowshroom - name = "glowshroom" +/obj/effect/plant + name = "plant" anchored = 1 opacity = 0 density = 0 - icon = 'icons/obj/lighting.dmi' - icon_state = "glowshroomf" + icon = 'icons/obj/hydroponics_growing.dmi' + icon_state = "bush4-1" layer = 2.1 - l_color = "#003300" - var/endurance = 30 - var/potency = 30 - var/delay = 1200 + var/health = 100 + var/max_health = 100 + + var/obj/effect/plant/parent + var/datum/seed/seed var/floor = 0 - var/yield = 3 - var/spreadChance = 40 - var/spreadIntoAdjacentChance = 60 - var/evolveChance = 2 - var/lastTick = 0 - var/spreaded = 1 + var/spread_chance = 40 + var/spread_into_adjacent = 60 + var/evolve_chance = 2 + var/last_tick = 0 + var/hibernating = 0 -/obj/effect/glowshroom/single - spreadChance = 0 +/obj/effect/plant/single + spread_chance = 0 -/obj/effect/glowshroom/New() +/obj/effect/plant/New(var/newloc, var/datum/seed/newseed) ..() + if(!newseed) + newseed = DEFAULT_SEED + seed = newseed + if(!seed) + del(src) + return - set_dir(CalcDir()) + max_health = seed.get_trait(TRAIT_ENDURANCE) + health = max_health + set_dir(calc_dir()) + update_icon() + processing_objects |= src + last_tick = world.timeofday + +/obj/effect/plant/update_icon() + + // TODO: convert this to an icon cache. + icon_state = "[seed.get_trait(TRAIT_PLANT_ICON)]-[rand(1,max(1,round(seed.growth_stages/2)))]" + color = seed.get_trait(TRAIT_PLANT_COLOUR) if(!floor) - switch(dir) //offset to make it be on the wall rather than on the floor - if(NORTH) - pixel_y = 32 - if(SOUTH) - pixel_y = -32 - if(EAST) - pixel_x = 32 + // This should make the plant grow flush against the wall it's meant to be growing from. + pixel_y = -(rand(8,12)) + src.transform = null + var/matrix/M = matrix() + switch(dir) if(WEST) - pixel_x = -32 - icon_state = "glowshroom[rand(1,3)]" - else //if on the floor, glowshroom on-floor sprite - icon_state = "glowshroomf" + M.Turn(90) + if(NORTH) + M.Turn(180) + if(EAST) + M.Turn(270) + src.transform = M - processing_objects += src + // Apply colour and light from seed datum. + if(seed.get_trait(TRAIT_BIOLUM)) + SetLuminosity(1+round(seed.get_trait(TRAIT_POTENCY)/10)) + if(seed.get_trait(TRAIT_BIOLUM_COLOUR)) + l_color = seed.get_trait(TRAIT_BIOLUM_COLOUR) + else + l_color = null + return + else + SetLuminosity(0) - SetLuminosity(round(potency/15)) - lastTick = world.timeofday - -/obj/effect/glowshroom/Del() +/obj/effect/plant/Del() processing_objects -= src ..() -/obj/effect/glowshroom/process() - if(!spreaded) +/obj/effect/plant/proc/die_off() + // Kill off any of our children (and add an added bonus, other plants in this area) + for(var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant in get_turf(src)) + plant.dead = 1 + plant.update_icon() + // Cause the plants around us to update. + for(var/obj/effect/plant/neighbor in view(1,src)) + neighbor.hibernating = 0 + del(src) + +/obj/effect/plant/process() + + if(!seed) + die_off() + + // Handle life. + var/turf/simulated/T = get_turf(src) + if(istype(T)) + health -= seed.handle_environment(T, T.return_air(),1) + + // Hibernating or too far from parent, no chance of spreading. + if(hibernating || (parent && (get_dist(parent,src) > seed.get_trait(TRAIT_POTENCY)/15))) return - if(((world.timeofday - lastTick) > delay) || ((world.timeofday - lastTick) < 0)) - lastTick = world.timeofday - spreaded = 0 + // Count our neighbors and possible locations for spreading. + var/list/possible_locs = list() + var/count = 0 + for(var/turf/simulated/floor/floor in view(1,src)) + if(!floor.Adjacent(src) || floor.density || (locate(/obj/effect/plant) in floor.contents)) + count++ + continue + possible_locs |= floor - for(var/i=1,i<=yield,i++) - if(prob(spreadChance)) - var/list/possibleLocs = list() - var/spreadsIntoAdjacent = 0 + //Entirely surrounded, spawn an actual plant. + if(count>=8) + hibernating = 1 // Suspend processing for now. + if(!(locate(/obj/machinery/portable_atmospherics/hydroponics/soil/invisible) in T.contents)) + var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/new_plant = new(T,seed) + new_plant.age = seed.get_trait(TRAIT_MATURATION) + new_plant.update_icon() - if(prob(spreadIntoAdjacentChance)) - spreadsIntoAdjacent = 1 + if(prob(spread_chance)) + for(var/i=1,i<=seed.get_trait(TRAIT_YIELD),i++) + if(!possible_locs.len) + break + if(prob(spread_into_adjacent)) + var/turf/target_turf = pick(possible_locs) + possible_locs -= target_turf + var/obj/effect/plant/child = new(target_turf, seed) + child.parent = get_root() - for(var/turf/simulated/floor/plating/airless/asteroid/earth in view(3,src)) - if(spreadsIntoAdjacent || !locate(/obj/effect/glowshroom) in view(1,earth)) - possibleLocs += earth +/obj/effect/plant/proc/get_root() + if(parent) + return parent.get_root() + else + return src - if(!possibleLocs.len) - break - - var/turf/newLoc = pick(possibleLocs) - - var/shroomCount = 0 //hacky - var/placeCount = 1 - for(var/obj/effect/glowshroom/shroom in newLoc) - shroomCount++ - for(var/wallDir in cardinal) - var/turf/isWall = get_step(newLoc,wallDir) - if(isWall.density) - placeCount++ - if(shroomCount >= placeCount) - continue - - var/obj/effect/glowshroom/child = new /obj/effect/glowshroom(newLoc) - child.potency = potency - child.yield = yield - child.delay = delay - child.endurance = endurance - - spreaded++ - - if(prob(evolveChance)) //very low chance to evolve on its own - potency += rand(4,6) - -/obj/effect/glowshroom/proc/CalcDir(turf/location = loc) +/obj/effect/plant/proc/calc_dir(turf/location = loc) set background = 1 var/direction = 16 @@ -109,7 +142,7 @@ if(newTurf.density) direction |= wallDir - for(var/obj/effect/glowshroom/shroom in location) + for(var/obj/effect/plant/shroom in location) if(shroom == src) continue if(shroom.floor) //special @@ -133,14 +166,22 @@ floor = 1 return 1 -/obj/effect/glowshroom/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() +/obj/effect/plant/attackby(var/obj/item/weapon/W, var/mob/user) - endurance -= W.force + if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel)) + if(!seed) + user << "There is nothing to take a sample from in \the [src]." + return + // Create a sample. + seed.harvest(user,0,1) + health -= (rand(3,5)*10) + else + ..() + if(W.force) + health -= W.force + check_health() - CheckEndurance() - -/obj/effect/glowshroom/ex_act(severity) +/obj/effect/plant/ex_act(severity) switch(severity) if(1.0) del(src) @@ -156,11 +197,6 @@ else return -/obj/effect/glowshroom/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - endurance -= 5 - CheckEndurance() - -/obj/effect/glowshroom/proc/CheckEndurance() - if(endurance <= 0) +/obj/effect/plant/proc/check_health() + if(health <= 0) del(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/mushroom.dm b/code/modules/mob/living/simple_animal/friendly/mushroom.dm index 95f228d12d..a924588d02 100644 --- a/code/modules/mob/living/simple_animal/friendly/mushroom.dm +++ b/code/modules/mob/living/simple_animal/friendly/mushroom.dm @@ -16,7 +16,7 @@ harm_intent_damage = 5 var/datum/seed/seed -/mob/living/simple_animal/mushroom +/mob/living/simple_animal/mushroom/verb/spawn_spores() set name = "Explode" set category = "Abilities" @@ -28,7 +28,7 @@ return if(!seed) - usr << "You are sterile! + usr << "You are sterile!" return spore_explode() diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 66c99f750c..4f2135be98 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1844,7 +1844,7 @@ datum var/obj/effect/alien/weeds/alien_weeds = O alien_weeds.health -= rand(15,35) // Kills alien weeds pretty fast alien_weeds.healthcheck() - else if(istype(O,/obj/effect/shroom)) //even a small amount is enough to kill it + else if(istype(O,/obj/effect/plant)) //even a small amount is enough to kill it del(O) else if(istype(O,/obj/effect/plantsegment)) if(prob(50)) del(O) //Kills kudzu too. @@ -2075,7 +2075,7 @@ datum M.take_organ_damage(min(6*toxpwr, volume * toxpwr)) reaction_obj(var/obj/O, var/volume) - if((istype(O,/obj/item) || istype(O,/obj/effect/shroom/glow)) && prob(meltprob * 3)) + if((istype(O,/obj/item) || istype(O,/obj/effect/plant)) && prob(meltprob * 3)) if(!O.unacidable) var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) I.desc = "Looks like this was \an [O] some time ago." diff --git a/maps/exodus-5.dmm b/maps/exodus-5.dmm index 94c371d1eb..d0259c0554 100644 --- a/maps/exodus-5.dmm +++ b/maps/exodus-5.dmm @@ -683,13 +683,13 @@ "ng" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/research_outpost/filtering) "nh" = (/obj/machinery/atmospherics/unary/heater{dir = 4},/turf/simulated/floor,/area/research_outpost/iso1_access) "ni" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/turf/simulated/floor,/area/research_outpost/iso1_access) -"nj" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso3) +"nj" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso1_access) "nk" = (/obj/machinery/atmospherics/unary/heater{dir = 4},/turf/simulated/floor,/area/research_outpost/iso2_access) "nl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/turf/simulated/floor,/area/research_outpost/iso2_access) -"nm" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso1) +"nm" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso2_access) "nn" = (/obj/machinery/atmospherics/unary/heater{dir = 4},/turf/simulated/floor,/area/research_outpost/iso3_access) "no" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/turf/simulated/floor,/area/research_outpost/iso3_access) -"np" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso2) +"np" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso3_access) "nq" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "nr" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "ns" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/longtermstorage) @@ -719,14 +719,14 @@ "nQ" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor,/area/research_outpost/filtering) "nR" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor,/area/research_outpost/filtering) "nS" = (/obj/machinery/atmospherics/unary/freezer{dir = 4; icon_state = "freezer"},/turf/simulated/floor,/area/research_outpost/iso1_access) -"nT" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso3"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso3) -"nU" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 6; tag_west = 2},/turf/simulated/floor,/area/research_outpost/filtering) +"nT" = (/obj/machinery/door_control{id = "riso1"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/research_outpost/iso1_access) +"nU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso1_access) "nV" = (/obj/machinery/atmospherics/unary/freezer{dir = 4; icon_state = "freezer"},/turf/simulated/floor,/area/research_outpost/iso2_access) -"nW" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso2"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso2) -"nX" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso1"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso1) +"nW" = (/obj/machinery/door_control{id = "riso2"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/research_outpost/iso2_access) +"nX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso2_access) "nY" = (/obj/machinery/atmospherics/unary/freezer{dir = 4; icon_state = "freezer"},/turf/simulated/floor,/area/research_outpost/iso3_access) -"nZ" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_one"; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso1) -"oa" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso2) +"nZ" = (/obj/machinery/door_control{id = "riso3"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/research_outpost/iso3_access) +"oa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso3_access) "ob" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "oc" = (/obj/structure/dispenser,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "od" = (/turf/simulated/floor{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/research_outpost/longtermstorage) @@ -752,14 +752,14 @@ "ox" = (/obj/machinery/conveyor{dir = 2; id = "anotempload"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) "oy" = (/obj/machinery/conveyor{dir = 1; id = "anosample"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) "oz" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor,/area/research_outpost/filtering) -"oA" = (/obj/machinery/camera{c_tag = "Isolation Room Two"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso2) +"oA" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 6; tag_west = 2},/turf/simulated/floor,/area/research_outpost/filtering) "oB" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor,/area/research_outpost/filtering) "oC" = (/turf/simulated/wall/r_wall,/area/research_outpost/iso1) -"oD" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_three"; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3) +"oD" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso1"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso1) "oE" = (/turf/simulated/wall/r_wall,/area/research_outpost/iso2) -"oF" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso1) +"oF" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso2"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso2) "oG" = (/turf/simulated/wall/r_wall,/area/research_outpost/iso3) -"oH" = (/obj/machinery/camera{c_tag = "Isolation Room One"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso1) +"oH" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso3"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso3) "oI" = (/obj/structure/closet/hydrant{pixel_x = -32},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "oJ" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 5},/obj/item/weapon/storage/box/samplebags{pixel_x = 3; pixel_y = -3},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/item/weapon/storage/toolbox/emergency{pixel_x = 5; pixel_y = 5},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "oK" = (/turf/simulated/wall/r_wall,/area/research_outpost/maintstore2) @@ -777,15 +777,15 @@ "oW" = (/obj/structure/table,/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/green,/turf/simulated/floor,/area/research_outpost/gearstore) "oX" = (/obj/machinery/conveyor{dir = 2; id = "anominerals"},/obj/machinery/mineral/output,/turf/simulated/floor{icon_state = "floorgrime"},/area/research_outpost/tempstorage) "oY" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) -"oZ" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_two"; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso2) -"pa" = (/obj/machinery/camera{c_tag = "Isolation Room Three"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3) -"pb" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3) -"pc" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso3_access) -"pd" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso1_access) -"pe" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso2_access) -"pf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso1_access) -"pg" = (/obj/machinery/door_control{id = "riso1"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/research_outpost/iso1_access) -"ph" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso2_access) +"oZ" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_one"; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso1) +"pa" = (/obj/machinery/camera{c_tag = "Isolation Room One"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso1) +"pb" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso1) +"pc" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_two"; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso2) +"pd" = (/obj/machinery/camera{c_tag = "Isolation Room Two"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso2) +"pe" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso2) +"pf" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_three"; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3) +"pg" = (/obj/machinery/camera{c_tag = "Isolation Room Three"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3) +"ph" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3) "pi" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "pj" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights/bulbs{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/box/lights/tubes{pixel_x = -5; pixel_y = 5},/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "pk" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/mineral/random,/area/mine/unexplored) @@ -808,11 +808,13 @@ "pB" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored) "pC" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/explored) "pD" = (/obj/machinery/conveyor_switch{id = "anosample"; req_access_txt = "65"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'MOVING PARTS'."; name = "\improper MOVING PARTS"; pixel_y = 32},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) -"pE" = (/obj/machinery/door_control{id = "riso2"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/research_outpost/iso2_access) -"pF" = (/obj/machinery/door_control{id = "riso3"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/research_outpost/iso3_access) +"pE" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso1) +"pF" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso2) "pG" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso1) -"pH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso3_access) +"pH" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso3) +"pI" = (/obj/effect/plant,/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) "pJ" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso2) +"pK" = (/obj/effect/plant,/obj/machinery/light/small,/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) "pM" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso3) "pN" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/maintstore2) "pO" = (/obj/structure/transit_tube{icon_state = "E-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) @@ -863,7 +865,6 @@ "qH" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor{icon_state = "warning"},/area/research_outpost/gearstore) "qI" = (/obj/structure/ore_box,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "research_pump"},/turf/simulated/floor{icon_state = "warning"},/area/research_outpost/gearstore) "qJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/explored) -"qK" = (/obj/effect/glowshroom,/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) "qL" = (/turf/space,/area/mine/unexplored) "qM" = (/obj/structure/closet/crate,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "qN" = (/obj/machinery/floodlight,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) @@ -897,7 +898,6 @@ "rp" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) "rq" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = -32},/obj/machinery/door/window/westleft,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) "rr" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/obj/structure/transit_tube_pod,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored) -"rs" = (/obj/effect/glowshroom,/obj/machinery/light/small,/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) "rt" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) "ru" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) "rv" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) @@ -1444,16 +1444,16 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaebkbkewgEkwkxkyjBkzkAhjkBbOdVkCewkBkwkCjIewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababesesesesesesababababababkDkEaaaaaakFkGhZkHkIkJkKidkLkMkNkOkPkQijkRkSkTkUkUaMaMkVkWkWkXkWkYkYkZkYlalalblaaMlcaMldleiDlflgiDlhlikuljiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewewewewewewgDhilkkwhiiKllkBkBhlgFjFewkBeWfAqbewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesesgygygygyesesesabablnlolphRaaaaaalqlrhqhrlslslslslsltlsbcbcbcijlukUlvlwlxlylzlAkWlBlClDkYlElFlGlalHlIlJlalKlLldlMldiDiDiDlNlOlPjyiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewlQhijBqUewjzqcjAewiLewqZraqYewdVlYjEoNeWfzhiewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababesesgygygygygygygygyesesabmambbimcaBaBaBdrdsaeaemdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmungkWmwmxmykYmzmAmBlamCmDmElamFmGldmHmImJmKiDiDiDiDiDmLcTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkewlQeWjBeWoOlYkwmMkwmNdVdVmOgFdVeWeWewhioNhihiewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesgygygygygygygygygygymQmRmSmRaaaaaaaaaaaaaaaaaemdmTmUmVmWmXmYmZnananbnckUndnelylynfmvkWnhnipdkYnknlpelannnopclanqnrldnsntntnuldnvagaBaBnwnxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkewnyjBhieWpoeWlmggeWnAmNlmkCnBeWnCfAewmPeWiNdVewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmRgygygygygygygygygygygynDnEpnnGaaaaaaaaaaaaaaaaaemdmTmUnHnInJnKmUnLnanMijijnNnOlynPnQnRkWnSpfpgkYnVphpElanYpHpFlaobocldodoeoeoeldofogbkaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkewnynzhigEewoiewojokeweWewojokewhilYewghlZjEmPewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesomgygygygygygygygygygygygyonlXnGaaaaaaaaaaaaaaaaaemdopmUoqmhorosotounaovijowoxoylyoznUoBoCoCnXoCoEoEnWoEoGoGnToGoGoIoJoKldldldldoLoMabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkewewewewewewoiewiNnCeWkzolhikzhiiNhhewooohoPoQewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmQgygygygygygygygygygygygyonnFnGaaaaaaaaaaaaaaaeaemdoRoSoTmWoUosoVoWnaoXijoYoxoylylylylyoCnZoFoHoEoZoaoAoGoDpbpaoGpipjoKabbkabpkplpmabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewnCfAlTkzlSeWkCewhifAewlRpppppqewadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesesgygygyprgygygygygygygygypsptaeaaaaaaaaaaaaaeaeaemdmdpupvmdmdpwpxpwmdpypzpApBpCpDgygygyoCnmnmpGoEnpnppJoGnjnjpMoGoKoKpNpOaiaipPogababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkewlQeWjBeWoOlYkwmMkwmNdVdVmOgFdVeWeWewhioNhihiewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesgygygygygygygygygygymQmRmSmRaaaaaaaaaaaaaaaaaemdmTmUmVmWmXmYmZnananbnckUndnelylynfmvkWnhninjkYnknlnmlannnonplanqnrldnsntntnuldnvagaBaBnwnxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkewnyjBhieWpoeWlmggeWnAmNlmkCnBeWnCfAewmPeWiNdVewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmRgygygygygygygygygygygynDnEpnnGaaaaaaaaaaaaaaaaaemdmTmUnHnInJnKmUnLnanMijijnNnOlynPnQnRkWnSnUnTkYnVnXnWlanYoanZlaobocldodoeoeoeldofogbkaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkewnynzhigEewoiewojokeweWewojokewhilYewghlZjEmPewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesomgygygygygygygygygygygygyonlXnGaaaaaaaaaaaaaaaaaemdopmUoqmhorosotounaovijowoxoylyozoAoBoCoCoDoCoEoEoFoEoGoGoHoGoGoIoJoKldldldldoLoMabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkewewewewewewoiewiNnCeWkzolhikzhiiNhhewooohoPoQewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmQgygygygygygygygygygygygyonnFnGaaaaaaaaaaaaaaaeaemdoRoSoTmWoUosoVoWnaoXijoYoxoylylylylyoCoZpbpaoEpcpepdoGpfphpgoGpipjoKabbkabpkplpmabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewnCfAlTkzlSeWkCewhifAewlRpppppqewadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesesgygygyprgygygygygygygygypsptaeaaaaaaaaaaaaaeaeaemdmdpupvmdmdpwpxpwmdpypzpApBpCpDgygygyoCpEpEpGoEpFpFpJoGpHpHpMoGoKoKpNpOaiaipPogababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewkzeWdolWhifAiNewoiewewkBhipppqpRadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgypUpSpQgygygygygygygygypWpXaaaaaaaaaaaepYpZqalUlVqdqeqfmdqgqhqimdqjpzgygygygygygygyoCqkqlqmoCqnqoqpoEqqqrqsoGabauqtogquabababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkewoiewewewewewewewewewoiewvydVhidVpqqvadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSgygygypSpQgygygygygygygyqwqxqyqzqzqzqzqzqzqAqBqCqDqDqEqFqFmdqGqHqImdqJgygygygygypzpzpzoCoCoCoCoCoEoEoEoEoGoGoGoGauqtogqKadqKababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLaaaaaaaaaaqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkewoioioioioioioioioioioiewkBhijEhijJewadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesgygygygyqMqNgygygygygygygygyqOqPqPqPqPqPqPqPqPqOgygygygygygymdqQqRpwmdqSgygygygygyqTADqVaiaiaiaiqWaiaiaiaiaiqXAAACABogadadadqKkDabbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkewewewewewewewewewewewewewewoQrbrcewewadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesgygygygygygygygygygygygygyqwqCrdrerererererereqwqCgygygygygygypBrfpCrgrhrigygygygyonrjrkababbkbkbkbkbkbkbkbkrlrmrnroadqKadadqKabababbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadewpppphiewadadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgygygygygygygygygygyaaaaaaaaaaaaaaaaesesesesesesesesgygygygygygypBrppCgygygygyrqrrpzbkabbkbkbkbkbkbkbkkDqKadrsadqKadadadabababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkewoiewewewewewewewewewoiewvydVhidVpqqvadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSgygygypSpQgygygygygygygyqwqxqyqzqzqzqzqzqzqAqBqCqDqDqEqFqFmdqGqHqImdqJgygygygygypzpzpzoCoCoCoCoCoEoEoEoEoGoGoGoGauqtogpIadpIababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLaaaaaaaaaaqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkewoioioioioioioioioioioiewkBhijEhijJewadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesgygygygyqMqNgygygygygygygygyqOqPqPqPqPqPqPqPqPqOgygygygygygymdqQqRpwmdqSgygygygygyqTADqVaiaiaiaiqWaiaiaiaiaiqXAAACABogadadadpIkDabbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkewewewewewewewewewewewewewewoQrbrcewewadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesgygygygygygygygygygygygygyqwqCrdrerererererereqwqCgygygygygygypBrfpCrgrhrigygygygyonrjrkababbkbkbkbkbkbkbkbkrlrmrnroadpIadadpIabababbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadewpppphiewadadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgygygygygygygygygygyaaaaaaaaaaaaaaaaesesesesesesesesgygygygygygypBrppCgygygygyrqrrpzbkabbkbkbkbkbkbkbkkDpIadpKadpIadadadabababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadewrtrurtewadadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSgygygygygygygygygygygyaaaaaaaaaaaaaaaaesesesababababesesesgygygygygyrvgygydXgygypzpzpzbkbkbkbkbkbkbkbkbkbkbkbkkDbkadqubkabbkbkababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadewrwrboQewadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesespVryrxgygygygygyesesesaaaaaaaaaaaaaaaaaaababababababababesesesgygygyrvgygydXdXdXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkbkababababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadrBrCrDadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesesmResgygymQmQesababaaaaaaaaaaaaaaaaaabkbkbkbkbkabababababesesgygyrvgygydXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkbkbkbkababababbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 8790bfd014a585e15ec1f538f17dcd50c4ed9c96 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 31 Jan 2015 12:11:33 +1030 Subject: [PATCH 29/90] Mature mob-plants have a chance of self-harvesting if the tray lid is not closed. --- code/modules/hydroponics/hydro_tray.dm | 15 +++++++++++---- code/modules/hydroponics/seed_datums.dm | 9 +++++++-- code/modules/hydroponics/spread_plant.dm | 8 ++++---- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index b2870a4edf..efd363ed9a 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -7,7 +7,7 @@ flags = OPENCONTAINER volume = 100 - var/mechanical = 1 //Set to 0 to stop it from drawing the alert lights. + var/mechanical = 1 // Set to 0 to stop it from drawing the alert lights. // Plant maintenance vars. var/waterlevel = 100 // Water (max 100) @@ -300,6 +300,10 @@ if(prob(3)) // On each tick, there's a chance the pest population will increase pestlevel += 0.1 * HYDRO_SPEED_MULTIPLIER + // Some seeds will self-harvest if you don't keep a lid on them. + if(seed && seed.can_self_harvest && harvest && !closed_system && prob(5)) + harvest() + check_level_sanity() update_icon() return @@ -360,14 +364,17 @@ /obj/machinery/portable_atmospherics/hydroponics/proc/harvest(var/mob/user) //Harvest the product of the plant, - if(!seed || !harvest || !user) + if(!seed || !harvest) return if(closed_system) - user << "You can't harvest from the plant while the lid is shut." + if(user) user << "You can't harvest from the plant while the lid is shut." return - seed.harvest(user,yield_mod) + if(user) + seed.harvest(user,yield_mod) + else + seed.harvest(get_turf(src),yield_mod) // Reset values. harvest = 0 diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 002682a60b..74c9063f6d 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -84,6 +84,7 @@ proc/populate_seed_list() var/display_name // Prettier name. var/roundstart // If set, seed will not display variety number. var/mysterious // Only used for the random seed packets. + var/can_self_harvest = 0 // Mostly used for living mobs. var/growth_stages = 0 // Number of stages the plant passes through before it is mature. var/list/traits = list() // Initialized in New() var/list/products // Possible fruit/other product paths. @@ -660,9 +661,9 @@ proc/populate_seed_list() got_product = 1 if(!force_amount && !got_product && !harvest_sample) - user << "You fail to harvest anything useful." + if(istype(user)) user << "You fail to harvest anything useful." else - user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]." + if(istype(user)) user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]." //This may be a new line. Update the global if it is. if(name == "new line" || !(name in seed_types)) @@ -728,6 +729,7 @@ proc/populate_seed_list() new_seed.name = "new line" new_seed.uid = 0 new_seed.roundstart = 0 + new_seed.can_self_harvest = can_self_harvest //Copy over everything else. if(products) new_seed.products = products.Copy() @@ -979,6 +981,7 @@ proc/populate_seed_list() display_name = "killer tomato plant" products = list(/mob/living/simple_animal/tomato) mutants = null + can_self_harvest = 1 /datum/seed/tomato/killer/New() ..() @@ -1190,6 +1193,7 @@ proc/populate_seed_list() display_name = "walking mushrooms" products = list(/mob/living/simple_animal/mushroom) mutants = null + can_self_harvest = 1 /datum/seed/mushroom/plump/walking/New() ..() @@ -1810,6 +1814,7 @@ proc/populate_seed_list() seed_noun = "nodes" display_name = "replicant pods" products = list(/mob/living/carbon/alien/diona) + can_self_harvest = 1 /datum/seed/diona/New() ..() diff --git a/code/modules/hydroponics/spread_plant.dm b/code/modules/hydroponics/spread_plant.dm index 34e77328ea..302dde7813 100644 --- a/code/modules/hydroponics/spread_plant.dm +++ b/code/modules/hydroponics/spread_plant.dm @@ -15,8 +15,8 @@ var/obj/effect/plant/parent var/datum/seed/seed var/floor = 0 - var/spread_chance = 40 - var/spread_into_adjacent = 60 + var/spread_chance = 100 //40 + var/spread_into_adjacent = 100 //60 var/evolve_chance = 2 var/last_tick = 0 var/hibernating = 0 @@ -27,8 +27,8 @@ /obj/effect/plant/New(var/newloc, var/datum/seed/newseed) ..() - if(!newseed) - newseed = DEFAULT_SEED + if(!istype(newseed)) + newseed = seed_types[DEFAULT_SEED] seed = newseed if(!seed) del(src) From 43802dceb7bf86b7eb6a312fbff2505ad565e3c2 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 31 Jan 2015 12:47:54 +1030 Subject: [PATCH 30/90] Removed TRAIT_LIFESPAN. --- code/game/machinery/bees_apiary.dm | 2 - code/modules/admin/admin.dm | 12 +++++ code/modules/admin/admin_verbs.dm | 1 + code/modules/hydroponics/_hydro_setup.dm | 25 +++++----- code/modules/hydroponics/hydro_tools.dm | 1 - code/modules/hydroponics/hydro_tray.dm | 55 +++++++++++----------- code/modules/hydroponics/seed_datums.dm | 58 +----------------------- code/modules/hydroponics/spread_plant.dm | 12 +++-- 8 files changed, 63 insertions(+), 103 deletions(-) diff --git a/code/game/machinery/bees_apiary.dm b/code/game/machinery/bees_apiary.dm index 22efa64647..f2098e7481 100644 --- a/code/game/machinery/bees_apiary.dm +++ b/code/game/machinery/bees_apiary.dm @@ -187,8 +187,6 @@ //have a few beneficial effects on nearby plants if(prob(10)) H.lastcycle -= 5 - if(prob(10)) - H.seed.set_trait(TRAIT_LIFESPAN,max(H.seed.get_trait(TRAIT_LIFESPAN)*1.5,H.seed.get_trait(TRAIT_LIFESPAN)+1)) if(prob(10)) H.seed.set_trait(TRAIT_ENDURANCE,max(H.seed.get_trait(TRAIT_ENDURANCE)*1.5,H.seed.get_trait(TRAIT_ENDURANCE)+1)) if(H.toxins && prob(10)) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index d78524b294..6030a8be1d 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1007,6 +1007,18 @@ var/global/floorIsLava = 0 var/datum/seed/S = seed_types[seedtype] S.harvest(usr,0,0,1) +/datum/admins/proc/spawn_plant() + set category = "Debug" + set desc = "Spawn a spreading plant effect." + set name = "Spawn Plant" + + if(!check_rights(R_SPAWN)) return + + var/seedtype = input("Select a seed type", "Spawn Plant") as null|anything in seed_types + if(!seedtype || !seed_types[seedtype]) + return + new /obj/effect/plant(get_turf(usr), seed_types[seedtype]) + /datum/admins/proc/spawn_atom(var/object as text) set category = "Debug" set desc = "(atom path) Spawn an atom" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 0835c311fa..c497c65053 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -108,6 +108,7 @@ var/list/admin_verbs_fun = list( ) var/list/admin_verbs_spawn = list( /datum/admins/proc/spawn_fruit, + /datum/admins/proc/spawn_plant, /datum/admins/proc/spawn_atom, /*allows us to spawn instances*/ /client/proc/respawn_character ) diff --git a/code/modules/hydroponics/_hydro_setup.dm b/code/modules/hydroponics/_hydro_setup.dm index 4e29644598..69ece2ac9e 100644 --- a/code/modules/hydroponics/_hydro_setup.dm +++ b/code/modules/hydroponics/_hydro_setup.dm @@ -38,16 +38,15 @@ #define TRAIT_WEED_TOLERANCE 28 #define TRAIT_ENDURANCE 29 #define TRAIT_YIELD 30 -#define TRAIT_LIFESPAN 31 -#define TRAIT_SPREAD 32 -#define TRAIT_MATURATION 33 -#define TRAIT_PRODUCTION 34 -#define TRAIT_TELEPORTING 35 -#define TRAIT_PLANT_COLOUR 36 -#define TRAIT_PRODUCT_COLOUR 37 -#define TRAIT_BIOLUM 38 -#define TRAIT_BIOLUM_COLOUR 39 -#define TRAIT_FLOWERS 40 -#define TRAIT_FLOWER_ICON 41 -#define TRAIT_FLOWER_COLOUR 42 -#define TRAIT_IMMUTABLE 43 \ No newline at end of file +#define TRAIT_SPREAD 31 +#define TRAIT_MATURATION 32 +#define TRAIT_PRODUCTION 33 +#define TRAIT_TELEPORTING 34 +#define TRAIT_PLANT_COLOUR 35 +#define TRAIT_PRODUCT_COLOUR 36 +#define TRAIT_BIOLUM 37 +#define TRAIT_BIOLUM_COLOUR 38 +#define TRAIT_FLOWERS 39 +#define TRAIT_FLOWER_ICON 40 +#define TRAIT_FLOWER_COLOUR 41 +#define TRAIT_IMMUTABLE 42 \ No newline at end of file diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 3e034fd870..d7f11fbdb3 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -55,7 +55,6 @@ dat += "" dat += "" dat += "" - dat += "" dat += "" dat += "" dat += "" diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index efd363ed9a..78b12378e0 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -276,21 +276,12 @@ health -= HYDRO_SPEED_MULTIPLIER // Handle life and death. - // If the plant is too old, it loses health fast. - if(age > seed.get_trait(TRAIT_LIFESPAN)) - health -= rand(3,5) * HYDRO_SPEED_MULTIPLIER - // When the plant dies, weeds thrive and pests die off. - if(health <= 0) - dead = 1 - mutation_level = 0 - harvest = 0 - weedlevel += 1 * HYDRO_SPEED_MULTIPLIER - pestlevel = 0 + check_health() // If enough time (in cycles, not ticks) has passed since the plant was harvested, we're ready to harvest again. - else if(seed.products && seed.products.len && \ - (age > seed.get_trait(TRAIT_PRODUCTION)) && \ + if(seed.products && seed.products.len && \ + (age > seed.get_trait(TRAIT_MATURATION)) && \ ((age - lastproduce) > seed.get_trait(TRAIT_PRODUCTION)) && \ (!harvest && !dead)) @@ -304,9 +295,21 @@ if(seed && seed.can_self_harvest && harvest && !closed_system && prob(5)) harvest() + check_health() + return + +/obj/machinery/portable_atmospherics/hydroponics/proc/check_health() + if(seed && !dead && health <= 0) + die() check_level_sanity() update_icon() - return + +/obj/machinery/portable_atmospherics/hydroponics/proc/die() + dead = 1 + mutation_level = 0 + harvest = 0 + weedlevel += 1 * HYDRO_SPEED_MULTIPLIER + pestlevel = 0 //Process reagents being input into the tray. /obj/machinery/portable_atmospherics/hydroponics/proc/process_reagents() @@ -357,8 +360,7 @@ toxins -= round(water_added/4) temp_chem_holder.reagents.clear_reagents() - check_level_sanity() - update_icon() + check_health() //Harvests the product of a plant. /obj/machinery/portable_atmospherics/hydroponics/proc/harvest(var/mob/user) @@ -388,8 +390,7 @@ sampled = 0 mutation_mod = 0 - check_level_sanity() - update_icon() + check_health() return //Clears out a dead plant. @@ -408,8 +409,7 @@ mutation_mod = 0 user << "You remove the dead plant." - check_level_sanity() - update_icon() + check_health() return //Refreshes the icon and sets the luminosity @@ -592,7 +592,7 @@ sampled = 1 // Bookkeeping. - check_level_sanity() + check_health() force_update = 1 process() @@ -646,8 +646,7 @@ del(O) - check_level_sanity() - update_icon() + check_health() else user << "\The [src] already has seeds in it!" @@ -681,9 +680,7 @@ user << "You spray [src] with [O]." playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6) del(O) - - check_level_sanity() - update_icon() + check_health() else if(mechanical && istype(O, /obj/item/weapon/wrench)) @@ -708,6 +705,11 @@ A.icon_state = src.icon_state A.hydrotray_type = src.type del(src) + else if(O.force && seed) + user.visible_message("\The [src] attacks the [seed.display_name] with \the [O]!") + if(!dead) + health -= O.force + check_health() return /obj/machinery/portable_atmospherics/hydroponics/attack_tk(mob/user as mob) @@ -827,8 +829,7 @@ health = seed.get_trait(TRAIT_ENDURANCE) lastcycle = world.time pixel_y = rand(-5,5) - check_level_sanity() - update_icon() + check_health() /obj/machinery/portable_atmospherics/hydroponics/soil/invisible/remove_dead() ..() diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 74c9063f6d..b0fe9784f1 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -484,7 +484,6 @@ proc/populate_seed_list() set_trait(TRAIT_YIELD,rand(3,15)) set_trait(TRAIT_MATURATION,rand(5,15)) set_trait(TRAIT_PRODUCTION,get_trait(TRAIT_MATURATION)+rand(2,5)) - set_trait(TRAIT_LIFESPAN,get_trait(TRAIT_PRODUCTION)+rand(5,10)) //Returns a key corresponding to an entry in the global seed list. /datum/seed/proc/get_mutant_variant() @@ -503,7 +502,6 @@ proc/populate_seed_list() for(var/i = 0;i\The [display_name] withers rapidly!") if(1) @@ -533,7 +531,6 @@ proc/populate_seed_list() if(prob(degree*5)) set_trait(TRAIT_PARASITE,!get_trait(TRAIT_PARASITE)) if(7) - set_trait(TRAIT_LIFESPAN, get_trait(TRAIT_LIFESPAN)+(rand(-2,2)*degree),30,10) if(get_trait(TRAIT_YIELD) != -1) set_trait(TRAIT_YIELD, get_trait(TRAIT_YIELD)+(rand(-2,2)*degree),10,0) if(8) @@ -580,7 +577,7 @@ proc/populate_seed_list() // Splicing products has some detrimental effects on yield and lifespan. // We handle this before we do the rest of the looping, as normal traits don't really include lists. if(gene.genetype == GENE_PRODUCTS) - for(var/trait in list(TRAIT_YIELD, TRAIT_ENDURANCE, TRAIT_LIFESPAN)) + for(var/trait in list(TRAIT_YIELD, TRAIT_ENDURANCE)) if(get_trait(trait) > 0) set_trait(trait,get_trait(trait),null,1,0.85) if(!products) products = list() @@ -642,7 +639,7 @@ proc/populate_seed_list() if(GENE_RESISTANCE) traits_to_copy = list(TRAIT_TOXINS_TOLERANCE,TRAIT_PEST_TOLERANCE,TRAIT_WEED_TOLERANCE) if(GENE_VIGOUR) - traits_to_copy = list(TRAIT_ENDURANCE,TRAIT_YIELD,TRAIT_LIFESPAN,TRAIT_SPREAD,TRAIT_MATURATION,TRAIT_PRODUCTION,TRAIT_TELEPORTING) + traits_to_copy = list(TRAIT_ENDURANCE,TRAIT_YIELD,TRAIT_SPREAD,TRAIT_MATURATION,TRAIT_PRODUCTION,TRAIT_TELEPORTING) if(GENE_FLOWERS) traits_to_copy = list(TRAIT_PLANT_COLOUR,TRAIT_PRODUCT_COLOUR,TRAIT_BIOLUM,TRAIT_BIOLUM_COLOUR,TRAIT_FLOWERS,TRAIT_FLOWER_ICON,TRAIT_FLOWER_COLOUR) @@ -762,7 +759,6 @@ proc/populate_seed_list() set_trait(TRAIT_PARASITE, 0) // 0 = no, 1 = gain health from weed level. set_trait(TRAIT_STINGS, 0) // Can cause damage/inject reagents when thrown or handled. set_trait(TRAIT_YIELD, 0) // Amount of product. - set_trait(TRAIT_LIFESPAN, 0) // Time before the plant dies. set_trait(TRAIT_SPREAD, 0) // 0 limits plant to tray, 1 = creepers, 2 = vines. set_trait(TRAIT_MATURATION, 0) // Time taken before the plant is mature. set_trait(TRAIT_PRODUCTION, 0) // Time before harvesting can be undertaken again. @@ -811,7 +807,6 @@ proc/populate_seed_list() /datum/seed/chili/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,20) set_trait(TRAIT_MATURATION,5) set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,4) @@ -847,7 +842,6 @@ proc/populate_seed_list() ..() set_trait(TRAIT_HARVEST_REPEAT,1) set_trait(TRAIT_JUICY,1) - set_trait(TRAIT_LIFESPAN,20) set_trait(TRAIT_MATURATION,5) set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,2) @@ -869,7 +863,6 @@ proc/populate_seed_list() set_trait(TRAIT_SPREAD,1) set_trait(TRAIT_BIOLUM,1) set_trait(TRAIT_BIOLUM_COLOUR,"#006622") - set_trait(TRAIT_LIFESPAN,30) set_trait(TRAIT_MATURATION,5) set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,2) @@ -914,7 +907,6 @@ proc/populate_seed_list() /datum/seed/nettle/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,30) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,4) @@ -952,7 +944,6 @@ proc/populate_seed_list() ..() set_trait(TRAIT_HARVEST_REPEAT,1) set_trait(TRAIT_JUICY,1) - set_trait(TRAIT_LIFESPAN,25) set_trait(TRAIT_MATURATION,8) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,2) @@ -1028,7 +1019,6 @@ proc/populate_seed_list() /datum/seed/eggplant/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,25) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,2) @@ -1046,7 +1036,6 @@ proc/populate_seed_list() /datum/seed/eggplant/eggs/New() ..() - set_trait(TRAIT_LIFESPAN,75) set_trait(TRAIT_PRODUCTION,12) set_trait(TRAIT_PRODUCT_COLOUR,"#E7EDD1") @@ -1062,7 +1051,6 @@ proc/populate_seed_list() /datum/seed/apple/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,55) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,5) @@ -1105,7 +1093,6 @@ proc/populate_seed_list() /datum/seed/ambrosia/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,60) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,6) @@ -1140,7 +1127,6 @@ proc/populate_seed_list() /datum/seed/mushroom/New() ..() - set_trait(TRAIT_LIFESPAN,35) set_trait(TRAIT_MATURATION,7) set_trait(TRAIT_PRODUCTION,1) set_trait(TRAIT_YIELD,5) @@ -1160,7 +1146,6 @@ proc/populate_seed_list() /datum/seed/mushroom/mold/New() ..() set_trait(TRAIT_SPREAD,1) - set_trait(TRAIT_LIFESPAN,50) set_trait(TRAIT_MATURATION,10) set_trait(TRAIT_YIELD,-1) set_trait(TRAIT_PRODUCT_ICON,"mushroom5") @@ -1178,7 +1163,6 @@ proc/populate_seed_list() /datum/seed/mushroom/plump/New() ..() - set_trait(TRAIT_LIFESPAN,25) set_trait(TRAIT_MATURATION,8) set_trait(TRAIT_YIELD,4) set_trait(TRAIT_POTENCY,0) @@ -1231,7 +1215,6 @@ proc/populate_seed_list() /datum/seed/mushroom/hallucinogenic/strong/New() ..() - set_trait(TRAIT_LIFESPAN,25) set_trait(TRAIT_PRODUCTION,1) set_trait(TRAIT_POTENCY,15) set_trait(TRAIT_PRODUCT_ICON,"mushroom8") @@ -1249,7 +1232,6 @@ proc/populate_seed_list() /datum/seed/mushroom/poison/New() ..() - set_trait(TRAIT_LIFESPAN,50) set_trait(TRAIT_MATURATION,10) set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,4) @@ -1286,7 +1268,6 @@ proc/populate_seed_list() /datum/seed/mushroom/towercap/New() ..() - set_trait(TRAIT_LIFESPAN,80) set_trait(TRAIT_MATURATION,15) set_trait(TRAIT_PRODUCT_ICON,"mushroom7") set_trait(TRAIT_PRODUCT_COLOUR,"#79A36D") @@ -1304,7 +1285,6 @@ proc/populate_seed_list() /datum/seed/mushroom/glowshroom/New() ..() set_trait(TRAIT_SPREAD,1) - set_trait(TRAIT_LIFESPAN,120) set_trait(TRAIT_MATURATION,15) set_trait(TRAIT_YIELD,3) set_trait(TRAIT_EXPLOSIVE,1) @@ -1326,7 +1306,6 @@ proc/populate_seed_list() /datum/seed/mushroom/plastic/New() ..() - set_trait(TRAIT_LIFESPAN,15) set_trait(TRAIT_MATURATION,5) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,6) @@ -1346,7 +1325,6 @@ proc/populate_seed_list() /datum/seed/flower/New() ..() - set_trait(TRAIT_LIFESPAN,100) set_trait(TRAIT_MATURATION,7) set_trait(TRAIT_PRODUCTION,1) set_trait(TRAIT_YIELD,2) @@ -1364,7 +1342,6 @@ proc/populate_seed_list() /datum/seed/flower/poppy/New() ..() - set_trait(TRAIT_LIFESPAN,25) set_trait(TRAIT_POTENCY,20) set_trait(TRAIT_MATURATION,8) set_trait(TRAIT_PRODUCTION,6) @@ -1381,7 +1358,6 @@ proc/populate_seed_list() /datum/seed/flower/sunflower/New() ..() - set_trait(TRAIT_LIFESPAN,25) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCT_ICON,"flower2") set_trait(TRAIT_PRODUCT_COLOUR,"#FFF700") @@ -1399,7 +1375,6 @@ proc/populate_seed_list() /datum/seed/grapes/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,50) set_trait(TRAIT_MATURATION,3) set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,4) @@ -1432,7 +1407,6 @@ proc/populate_seed_list() /datum/seed/peanuts/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,55) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,6) @@ -1451,7 +1425,6 @@ proc/populate_seed_list() /datum/seed/cabbage/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,50) set_trait(TRAIT_MATURATION,3) set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,4) @@ -1471,7 +1444,6 @@ proc/populate_seed_list() /datum/seed/banana/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,50) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,3) @@ -1489,7 +1461,6 @@ proc/populate_seed_list() /datum/seed/corn/New() ..() - set_trait(TRAIT_LIFESPAN,25) set_trait(TRAIT_MATURATION,8) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,3) @@ -1509,7 +1480,6 @@ proc/populate_seed_list() /datum/seed/potato/New() ..() set_trait(TRAIT_PRODUCES_POWER,1) - set_trait(TRAIT_LIFESPAN,30) set_trait(TRAIT_MATURATION,10) set_trait(TRAIT_PRODUCTION,1) set_trait(TRAIT_YIELD,4) @@ -1528,7 +1498,6 @@ proc/populate_seed_list() /datum/seed/soybean/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,25) set_trait(TRAIT_MATURATION,4) set_trait(TRAIT_PRODUCTION,4) set_trait(TRAIT_YIELD,3) @@ -1546,7 +1515,6 @@ proc/populate_seed_list() /datum/seed/wheat/New() ..() - set_trait(TRAIT_LIFESPAN,25) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,1) set_trait(TRAIT_YIELD,4) @@ -1565,7 +1533,6 @@ proc/populate_seed_list() /datum/seed/rice/New() ..() - set_trait(TRAIT_LIFESPAN,25) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,1) set_trait(TRAIT_YIELD,4) @@ -1584,7 +1551,6 @@ proc/populate_seed_list() /datum/seed/carrots/New() ..() - set_trait(TRAIT_LIFESPAN,25) set_trait(TRAIT_MATURATION,10) set_trait(TRAIT_PRODUCTION,1) set_trait(TRAIT_YIELD,5) @@ -1600,7 +1566,6 @@ proc/populate_seed_list() /datum/seed/weeds/New() ..() - set_trait(TRAIT_LIFESPAN,100) set_trait(TRAIT_MATURATION,5) set_trait(TRAIT_PRODUCTION,1) set_trait(TRAIT_YIELD,-1) @@ -1620,7 +1585,6 @@ proc/populate_seed_list() /datum/seed/whitebeets/New() ..() - set_trait(TRAIT_LIFESPAN,60) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,6) @@ -1640,7 +1604,6 @@ proc/populate_seed_list() /datum/seed/sugarcane/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,60) set_trait(TRAIT_MATURATION,3) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,4) @@ -1661,7 +1624,6 @@ proc/populate_seed_list() ..() set_trait(TRAIT_HARVEST_REPEAT,1) set_trait(TRAIT_JUICY,1) - set_trait(TRAIT_LIFESPAN,50) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,3) @@ -1681,7 +1643,6 @@ proc/populate_seed_list() /datum/seed/pumpkin/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,50) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,3) @@ -1702,7 +1663,6 @@ proc/populate_seed_list() ..() set_trait(TRAIT_HARVEST_REPEAT,1) set_trait(TRAIT_JUICY,1) - set_trait(TRAIT_LIFESPAN,55) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,4) @@ -1739,7 +1699,6 @@ proc/populate_seed_list() /datum/seed/grass/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,60) set_trait(TRAIT_MATURATION,2) set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,5) @@ -1758,7 +1717,6 @@ proc/populate_seed_list() /datum/seed/cocoa/New() ..() set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_LIFESPAN,20) set_trait(TRAIT_MATURATION,5) set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,2) @@ -1779,7 +1737,6 @@ proc/populate_seed_list() ..() set_trait(TRAIT_HARVEST_REPEAT,1) set_trait(TRAIT_JUICY,1) - set_trait(TRAIT_LIFESPAN,35) set_trait(TRAIT_MATURATION,5) set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,3) @@ -1797,7 +1754,6 @@ proc/populate_seed_list() /datum/seed/kudzu/New() ..() - set_trait(TRAIT_LIFESPAN,20) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,4) @@ -1819,7 +1775,6 @@ proc/populate_seed_list() /datum/seed/diona/New() ..() set_trait(TRAIT_IMMUTABLE,1) - set_trait(TRAIT_LIFESPAN,50) set_trait(TRAIT_ENDURANCE,8) set_trait(TRAIT_MATURATION,5) set_trait(TRAIT_PRODUCTION,10) @@ -1839,7 +1794,6 @@ proc/populate_seed_list() /datum/seed/shand/New() ..() - set_trait(TRAIT_LIFESPAN,50) set_trait(TRAIT_MATURATION,3) set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,4) @@ -1858,7 +1812,6 @@ proc/populate_seed_list() /datum/seed/mtear/New() ..() - set_trait(TRAIT_LIFESPAN,50) set_trait(TRAIT_MATURATION,3) set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,4) @@ -1877,7 +1830,6 @@ proc/populate_seed_list() /datum/seed/telriis/New() ..() set_trait(TRAIT_PLANT_ICON,"telriis") - set_trait(TRAIT_LIFESPAN,50) set_trait(TRAIT_ENDURANCE,50) set_trait(TRAIT_MATURATION,5) set_trait(TRAIT_PRODUCTION,5) @@ -1893,7 +1845,6 @@ proc/populate_seed_list() /datum/seed/thaadra/New() ..() set_trait(TRAIT_PLANT_ICON,"thaadra") - set_trait(TRAIT_LIFESPAN,20) set_trait(TRAIT_ENDURANCE,10) set_trait(TRAIT_MATURATION,5) set_trait(TRAIT_PRODUCTION,9) @@ -1909,7 +1860,6 @@ proc/populate_seed_list() /datum/seed/jurlmah/New() ..() set_trait(TRAIT_PLANT_ICON,"jurlmah") - set_trait(TRAIT_LIFESPAN,20) set_trait(TRAIT_ENDURANCE,12) set_trait(TRAIT_MATURATION,8) set_trait(TRAIT_PRODUCTION,9) @@ -1925,7 +1875,6 @@ proc/populate_seed_list() /datum/seed/amauri/New() ..() set_trait(TRAIT_PLANT_ICON,"amauri") - set_trait(TRAIT_LIFESPAN,30) set_trait(TRAIT_ENDURANCE,10) set_trait(TRAIT_MATURATION,8) set_trait(TRAIT_PRODUCTION,9) @@ -1941,7 +1890,6 @@ proc/populate_seed_list() /datum/seed/gelthi/New() ..() set_trait(TRAIT_PLANT_ICON,"gelthi") - set_trait(TRAIT_LIFESPAN,20) set_trait(TRAIT_ENDURANCE,15) set_trait(TRAIT_MATURATION,6) set_trait(TRAIT_PRODUCTION,6) @@ -1957,7 +1905,6 @@ proc/populate_seed_list() /datum/seed/vale/New() ..() set_trait(TRAIT_PLANT_ICON,"vale") - set_trait(TRAIT_LIFESPAN,25) set_trait(TRAIT_ENDURANCE,15) set_trait(TRAIT_MATURATION,8) set_trait(TRAIT_PRODUCTION,10) @@ -1973,7 +1920,6 @@ proc/populate_seed_list() /datum/seed/surik/New() ..() set_trait(TRAIT_PLANT_ICON,"surik") - set_trait(TRAIT_LIFESPAN,30) set_trait(TRAIT_ENDURANCE,18) set_trait(TRAIT_MATURATION,7) set_trait(TRAIT_PRODUCTION,7) diff --git a/code/modules/hydroponics/spread_plant.dm b/code/modules/hydroponics/spread_plant.dm index 302dde7813..fdecb335aa 100644 --- a/code/modules/hydroponics/spread_plant.dm +++ b/code/modules/hydroponics/spread_plant.dm @@ -25,7 +25,6 @@ spread_chance = 0 /obj/effect/plant/New(var/newloc, var/datum/seed/newseed) - ..() if(!istype(newseed)) newseed = seed_types[DEFAULT_SEED] @@ -34,7 +33,8 @@ del(src) return - max_health = seed.get_trait(TRAIT_ENDURANCE) + name = seed.display_name + max_health = round(seed.get_trait(TRAIT_ENDURANCE)/2) health = max_health set_dir(calc_dir()) @@ -45,7 +45,7 @@ /obj/effect/plant/update_icon() // TODO: convert this to an icon cache. - icon_state = "[seed.get_trait(TRAIT_PLANT_ICON)]-[rand(1,max(1,round(seed.growth_stages/2)))]" + icon_state = "[seed.get_trait(TRAIT_PLANT_ICON)]-[rand(1,max(1,seed.growth_stages-1))]" color = seed.get_trait(TRAIT_PLANT_COLOUR) if(!floor) // This should make the plant grow flush against the wall it's meant to be growing from. @@ -75,6 +75,10 @@ /obj/effect/plant/Del() processing_objects -= src ..() +/obj/effect/plant/examine() + ..() + usr << "Max dist from parent is [round(seed.get_trait(TRAIT_POTENCY)/15)]." + usr << "Current dist is [get_dist(get_root(),src)]." /obj/effect/plant/proc/die_off() // Kill off any of our children (and add an added bonus, other plants in this area) @@ -97,7 +101,7 @@ health -= seed.handle_environment(T, T.return_air(),1) // Hibernating or too far from parent, no chance of spreading. - if(hibernating || (parent && (get_dist(parent,src) > seed.get_trait(TRAIT_POTENCY)/15))) + if(hibernating || (parent && (get_dist(get_root(),src) > round(seed.get_trait(TRAIT_POTENCY)/15)))) return // Count our neighbors and possible locations for spreading. From 09e4be2b1b820e59be3d35618ac37fc8ce8f0e83 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 31 Jan 2015 14:34:41 +1030 Subject: [PATCH 31/90] Collapsed space vines, glowshrooms and biomass into one spreading-plant system. --- baystation12.dme | 3 - code/__HELPERS/unsorted.dm | 12 + code/datums/datacore.dm | 1 - code/datums/supplypacks.dm | 2 + code/game/gamemodes/events/biomass.dm | 176 --------- code/game/gamemodes/events/spacevines.dm | 16 - code/game/gamemodes/wizard/artifact.dm | 2 +- code/game/objects/effects/biomass_rift.dm | 126 ------- .../effects/decals/Cleanable/humans.dm | 6 +- code/global.dm | 3 - code/modules/admin/topic.dm | 5 - code/modules/events/spacevine.dm | 6 +- code/modules/hydroponics/_hydro_setup.dm | 9 +- code/modules/hydroponics/hydro_tools.dm | 8 +- code/modules/hydroponics/hydro_tray.dm | 42 ++- code/modules/hydroponics/seed_datums.dm | 174 ++++----- code/modules/hydroponics/seeds.dm | 9 +- code/modules/hydroponics/spread_plant.dm | 158 ++++++-- code/modules/hydroponics/spread_vine.dm | 355 ------------------ .../simple_animal/friendly/farm_animals.dm | 17 +- code/modules/reagents/Chemistry-Reagents.dm | 6 +- icons/obj/biomass.dmi | Bin 7246 -> 0 bytes icons/obj/hydroponics_vines.dmi | Bin 10381 -> 18093 bytes icons/obj/magic.dmi | Bin 4266 -> 4253 bytes icons/obj/wizard.dmi | Bin 9118 -> 12565 bytes 25 files changed, 266 insertions(+), 870 deletions(-) delete mode 100644 code/game/gamemodes/events/biomass.dm delete mode 100644 code/game/gamemodes/events/spacevines.dm delete mode 100644 code/game/objects/effects/biomass_rift.dm delete mode 100644 code/modules/hydroponics/spread_vine.dm delete mode 100644 icons/obj/biomass.dmi diff --git a/baystation12.dme b/baystation12.dme index fe79d1a4e1..265b12f047 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -237,14 +237,12 @@ #include "code\game\gamemodes\cult\ritual.dm" #include "code\game\gamemodes\cult\runes.dm" #include "code\game\gamemodes\cult\talisman.dm" -#include "code\game\gamemodes\events\biomass.dm" #include "code\game\gamemodes\events\black_hole.dm" #include "code\game\gamemodes\events\clang.dm" #include "code\game\gamemodes\events\dust.dm" #include "code\game\gamemodes\events\miniblob.dm" #include "code\game\gamemodes\events\power_failure.dm" #include "code\game\gamemodes\events\space_ninja.dm" -#include "code\game\gamemodes\events\spacevines.dm" #include "code\game\gamemodes\events\wormholes.dm" #include "code\game\gamemodes\events\holidays\Christmas.dm" #include "code\game\gamemodes\events\holidays\Holidays.dm" @@ -971,7 +969,6 @@ #include "code\modules\hydroponics\seed_storage.dm" #include "code\modules\hydroponics\seeds.dm" #include "code\modules\hydroponics\spread_plant.dm" -#include "code\modules\hydroponics\spread_vine.dm" #include "code\modules\library\lib_items.dm" #include "code\modules\library\lib_machines.dm" #include "code\modules\library\lib_readme.dm" diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index d78f3e7a9d..e0de9b857f 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1378,3 +1378,15 @@ var/list/WALLITEMS = list( if(istype(arglist,/list)) arglist = list2params(arglist) return "[content]" + +/proc/get_random_colour(var/simple, var/lower, var/upper) + var/colour + if(simple) + colour = pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF")) + else + for(var/i=1;i<=3;i++) + var/temp_col = "[num2hex(rand(lower,upper))]" + if(length(temp_col )<2) + temp_col = "0[temp_col]" + colour += temp_col + return colour \ No newline at end of file diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 0045dabec9..2e3d2cc544 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -51,7 +51,6 @@ assignment = "Unassigned" var/id = add_zero(num2hex(rand(1, 1.6777215E7)), 6) //this was the best they could come up with? A large random number? *sigh* - var/icon/front = new(get_id_photo(H), dir = SOUTH) var/icon/side = new(get_id_photo(H), dir = WEST) //General Record diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index e029b524a7..14a86aed13 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -257,6 +257,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/hydroponics // -- Skie name = "Hydroponics Supply Crate" contains = list(/obj/item/weapon/reagent_containers/spray/plantbgone, + /obj/item/weapon/reagent_containers/spray/plantbgone, + /obj/item/weapon/reagent_containers/spray/plantbgone, /obj/item/weapon/reagent_containers/spray/plantbgone, /obj/item/weapon/reagent_containers/glass/bottle/ammonia, /obj/item/weapon/reagent_containers/glass/bottle/ammonia, diff --git a/code/game/gamemodes/events/biomass.dm b/code/game/gamemodes/events/biomass.dm deleted file mode 100644 index b758c85019..0000000000 --- a/code/game/gamemodes/events/biomass.dm +++ /dev/null @@ -1,176 +0,0 @@ -// BIOMASS (Note that this code is very similar to Space Vine code) -/obj/effect/biomass - name = "biomass" - desc = "Space barf from another dimension. It just keeps spreading!" - icon = 'icons/obj/biomass.dmi' - icon_state = "stage1" - anchored = 1 - density = 0 - layer = 5 - pass_flags = PASSTABLE | PASSGRILLE - var/energy = 0 - var/obj/effect/biomass_controller/master = null - - New() - return - - Del() - if(master) - master.vines -= src - master.growth_queue -= src - ..() - -/obj/effect/biomass/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (!W || !user || !W.type) return - switch(W.type) - if(/obj/item/weapon/circular_saw) del src - if(/obj/item/weapon/kitchen/utensil/knife) del src - if(/obj/item/weapon/scalpel) del src - if(/obj/item/weapon/twohanded/fireaxe) del src - if(/obj/item/weapon/hatchet) del src - if(/obj/item/weapon/melee/energy) del src - if(/obj/item/weapon/pickaxe/plasmacutter) del src - - //less effective weapons - if(/obj/item/weapon/wirecutters) - if(prob(25)) del src - if(/obj/item/weapon/shard) - if(prob(25)) del src - - else //weapons with subtypes - if(istype(W, /obj/item/weapon/melee/energy/sword)) del src - else if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - if(WT.remove_fuel(0, user)) del src - else - return - ..() - -/obj/effect/biomass_controller - var/list/obj/effect/biomass/vines = list() - var/list/growth_queue = list() - var/reached_collapse_size - var/reached_slowdown_size - //What this does is that instead of having the grow minimum of 1, required to start growing, the minimum will be 0, - //meaning if you get the biomasssss..s' size to something less than 20 plots, it won't grow anymore. - - New() - if(!istype(src.loc,/turf/simulated/floor)) - del(src) - - spawn_biomass_piece(src.loc) - processing_objects.Add(src) - - Del() - processing_objects.Remove(src) - ..() - - proc/spawn_biomass_piece(var/turf/location) - var/obj/effect/biomass/BM = new(location) - growth_queue += BM - vines += BM - BM.master = src - - process() - if(!vines) - del(src) //space vines exterminated. Remove the controller - return - if(!growth_queue) - del(src) //Sanity check - return - if(vines.len >= 250 && !reached_collapse_size) - reached_collapse_size = 1 - if(vines.len >= 30 && !reached_slowdown_size ) - reached_slowdown_size = 1 - - var/maxgrowth = 0 - if(reached_collapse_size) - maxgrowth = 0 - else if(reached_slowdown_size) - if(prob(25)) - maxgrowth = 1 - else - maxgrowth = 0 - else - maxgrowth = 4 - var/length = min( 30 , vines.len / 5 ) - var/i = 0 - var/growth = 0 - var/list/obj/effect/biomass/queue_end = list() - - for( var/obj/effect/biomass/BM in growth_queue ) - i++ - queue_end += BM - growth_queue -= BM - if(BM.energy < 2) //If tile isn't fully grown - if(prob(20)) - BM.grow() - - if(BM.spread()) - growth++ - if(growth >= maxgrowth) - break - if(i >= length) - break - - growth_queue = growth_queue + queue_end - -/obj/effect/biomass/proc/grow() - if(!energy) - src.icon_state = "stage2" - energy = 1 - src.opacity = 0 - src.density = 0 - layer = 5 - else - src.icon_state = "stage3" - src.opacity = 0 - src.density = 1 - energy = 2 - -/obj/effect/biomass/proc/spread() - var/direction = pick(cardinal) - var/step = get_step(src,direction) - if(istype(step,/turf/simulated/floor)) - var/turf/simulated/floor/F = step - if(!locate(/obj/effect/biomass,F)) - if(F.Enter(src)) - if(master) - master.spawn_biomass_piece( F ) - return 1 - return 0 - -/obj/effect/biomass/ex_act(severity) - switch(severity) - if(1.0) - del(src) - return - if(2.0) - if (prob(90)) - del(src) - return - if(3.0) - if (prob(50)) - del(src) - return - return - -/obj/effect/biomass/fire_act(null, temp, volume) //hotspots kill biomass - del src - - -/proc/biomass_infestation() - - spawn() //to stop the secrets panel hanging - var/list/turf/simulated/floor/turfs = list() //list of all the empty floor turfs in the hallway areas - for(var/areapath in typesof(/area/hallway)) - var/area/A = locate(areapath) - for(var/area/B in A.related) - for(var/turf/simulated/floor/F in B.contents) - if(!F.contents.len) - turfs += F - - if(turfs.len) //Pick a turf to spawn at if we can - var/turf/simulated/floor/T = pick(turfs) - new/obj/effect/biomass_controller(T) //spawn a controller at turf - message_admins("\blue Event: Biomass spawned at [T.loc.loc] ([T.x],[T.y],[T.z])") diff --git a/code/game/gamemodes/events/spacevines.dm b/code/game/gamemodes/events/spacevines.dm deleted file mode 100644 index d095f19d56..0000000000 --- a/code/game/gamemodes/events/spacevines.dm +++ /dev/null @@ -1,16 +0,0 @@ -//Carn: Spacevines random event. -/proc/spacevine_infestation() - - spawn() //to stop the secrets panel hanging - var/list/turf/simulated/floor/turfs = list() //list of all the empty floor turfs in the hallway areas - for(var/areapath in typesof(/area/hallway)) - var/area/A = locate(areapath) - for(var/area/B in A.related) - for(var/turf/simulated/floor/F in B.contents) - if(!F.contents.len) - turfs += F - - if(turfs.len) //Pick a turf to spawn at if we can - var/turf/simulated/floor/T = pick(turfs) - new/obj/effect/plant_controller(T) //spawn a controller at turf - message_admins("\blue Event: Spacevines spawned at [T.loc] ([T.x],[T.y],[T.z])") diff --git a/code/game/gamemodes/wizard/artifact.dm b/code/game/gamemodes/wizard/artifact.dm index 15ac80ced4..8c1cff5fcc 100644 --- a/code/game/gamemodes/wizard/artifact.dm +++ b/code/game/gamemodes/wizard/artifact.dm @@ -15,7 +15,7 @@ /obj/effect/rend name = "Tear in the fabric of reality" desc = "You should run now" - icon = 'icons/obj/biomass.dmi' + icon = 'icons/obj/wizard.dmi' icon_state = "rift" density = 1 unacidable = 1 diff --git a/code/game/objects/effects/biomass_rift.dm b/code/game/objects/effects/biomass_rift.dm deleted file mode 100644 index c619ccb1e7..0000000000 --- a/code/game/objects/effects/biomass_rift.dm +++ /dev/null @@ -1,126 +0,0 @@ -/* -/obj/effect/biomass - icon = 'icons/obj/biomass.dmi' - icon_state = "stage1" - opacity = 0 - density = 0 - anchored = 1 - layer = 20 //DEBUG - var/health = 10 - var/stage = 1 - var/obj/effect/rift/originalRift = null //the originating rift of that biomass - var/maxDistance = 15 //the maximum length of a thread - var/newSpreadDistance = 10 //the length of a thread at which new ones are created - var/curDistance = 1 //the current length of a thread - var/continueChance = 3 //weighed chance of continuing in the same direction. turning left or right has 1 weight both - var/spreadDelay = 1 //will change to something bigger later, but right now I want it to spread as fast as possible for testing - -/obj/effect/rift - icon = 'icons/obj/biomass.dmi' - icon_state = "rift" - var/list/obj/effect/biomass/linkedBiomass = list() //all the biomass patches that have spread from it - var/newicon = 1 //DEBUG - -/obj/effect/rift/New() - set background = 1 - - ..() - - for(var/turf/T in orange(1,src)) - if(!IsValidBiomassLoc(T)) - continue - var/obj/effect/biomass/starting = new /obj/effect/biomass(T) - starting.set_dir(get_dir(src,starting)) - starting.originalRift = src - linkedBiomass += starting - spawn(1) //DEBUG - starting.icon_state = "[newicon]" - -/obj/effect/rift/Del() - for(var/obj/effect/biomass/biomass in linkedBiomass) - del(biomass) - ..() - -/obj/effect/biomass/New() - set background = 1 - - ..() - if(!IsValidBiomassLoc(loc,src)) - del(src) - return - spawn(1) //so that the dir and stuff can be set by the source first - if(curDistance >= maxDistance) - return - switch(dir) - if(NORTHWEST) - set_dir(NORTH) - if(NORTHEAST) - set_dir(EAST) - if(SOUTHWEST) - set_dir(WEST) - if(SOUTHEAST) - set_dir(SOUTH) - sleep(spreadDelay) - Spread() - -/obj/effect/biomass/proc/Spread(var/direction = dir) - set background = 1 - var/possibleDirsInt = 0 - - for(var/newDirection in cardinal) - if(newDirection == turn(direction,180)) //can't go backwards - continue - var/turf/T = get_step(loc,newDirection) - if(!IsValidBiomassLoc(T,src)) - continue - possibleDirsInt |= newDirection - - var/list/possibleDirs = list() - - if(possibleDirsInt & direction) - for(var/i=0 , ibio-luminescent" : "bio-luminescent"]." - if(grown_seed.get_trait(TRAIT_FLOWERS)) - dat += "
It has [grown_seed.get_trait(TRAIT_FLOWER_COLOUR) ? "flowers" : "flowers"]." if(grown_seed.get_trait(TRAIT_PRODUCES_POWER)) dat += "
The fruit will function as a battery if prepared appropriately." @@ -366,8 +364,8 @@ /obj/item/weapon/scythe/afterattack(atom/A, mob/user as mob, proximity) if(!proximity) return - if(istype(A, /obj/effect/plantsegment)) - for(var/obj/effect/plantsegment/B in orange(A,1)) + if(istype(A, /obj/effect/plant)) + for(var/obj/effect/plant/B in orange(A,1)) if(prob(80)) - del B + B.die_off(1) del A \ No newline at end of file diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 78b12378e0..e8414b59da 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -139,6 +139,9 @@ nymph.visible_message("[nymph] rolls around in [src] for a bit.","You roll around in [src] for a bit.") return +/obj/machinery/portable_atmospherics/hydroponics/proc/can_label() + return 1 + /obj/machinery/portable_atmospherics/hydroponics/New() ..() temp_chem_holder = new() @@ -629,20 +632,12 @@ return user << "You plant the [S.seed.seed_name] [S.seed.seed_noun]." - - if(S.seed.get_trait(TRAIT_SPREAD) == 2) - msg_admin_attack("[key_name(user)] has planted a spreading vine packet.") - var/obj/effect/plant_controller/PC = new(get_turf(src)) - if(PC) - PC.seed = S.seed - else - seed = S.seed //Grab the seed datum. - dead = 0 - age = 1 - //Snowflakey, maybe move this to the seed datum - health = (istype(S, /obj/item/seeds/cutting) ? round(seed.get_trait(TRAIT_ENDURANCE)/rand(2,5)) : seed.get_trait(TRAIT_ENDURANCE)) - - lastcycle = world.time + seed = S.seed //Grab the seed datum. + dead = 0 + age = 1 + //Snowflakey, maybe move this to the seed datum + health = (istype(S, /obj/item/seeds/cutting) ? round(seed.get_trait(TRAIT_ENDURANCE)/rand(2,5)) : seed.get_trait(TRAIT_ENDURANCE)) + lastcycle = world.time del(O) @@ -798,10 +793,7 @@ mechanical = 0 /obj/machinery/portable_atmospherics/hydroponics/soil/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/shovel)) - user << "You clear up [src]!" - del(src) - else if(istype(O,/obj/item/weapon/shovel) || istype(O,/obj/item/weapon/tank)) + if(istype(O,/obj/item/weapon/tank)) return else ..() @@ -810,6 +802,9 @@ ..() verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid +/obj/machinery/portable_atmospherics/hydroponics/soil/can_label() + return 0 + /obj/machinery/portable_atmospherics/hydroponics/soil/CanPass() return 1 @@ -840,10 +835,21 @@ if(!seed) del(src) +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/die() + del(src) + /obj/machinery/portable_atmospherics/hydroponics/soil/invisible/process() if(!seed) del(src) return else if(name=="plant") name = seed.display_name + ..() + +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/Del() + // Check if we're masking a decal that needs to be visible again. + for(var/obj/effect/plant/plant in get_turf(src)) + if(plant.invisibility == INVISIBILITY_MAXIMUM) + plant.invisibility = initial(plant.invisibility) + plant.die_off() ..() \ No newline at end of file diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index b0fe9784f1..fd453f7f22 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -2,6 +2,27 @@ var/global/list/plant_sprites = list() // List of all harvested product sprites. var/global/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages. +// Proc for creating a random seed type. +/proc/create_random_seed(var/survive_on_station) + var/datum/seed/seed = new() + seed.randomize() + seed.uid = seed_types.len + 1 + seed.name = "[seed.uid]" + seed_types[seed.name] = seed + + if(survive_on_station) + if(seed.consume_gasses) + seed.consume_gasses["phoron"] = null + seed.consume_gasses["carbon_dioxide"] = null + seed.set_trait(TRAIT_IDEAL_HEAT,293) + seed.set_trait(TRAIT_HEAT_TOLERANCE,20) + seed.set_trait(TRAIT_IDEAL_LIGHT,8) + seed.set_trait(TRAIT_LIGHT_TOLERANCE,5) + seed.set_trait(TRAIT_LOWKPA_TOLERANCE,25) + seed.set_trait(TRAIT_HIGHKPA_TOLERANCE,200) + + return seed + // Debug for testing seed genes. /client/proc/show_plant_genes() set category = "Debug" @@ -58,7 +79,7 @@ proc/populate_seed_list() //Might as well mask the gene types while we're at it. var/list/used_masks = list() - var/list/plant_traits = ALL_TRAITS + var/list/plant_traits = ALL_GENES while(plant_traits && plant_traits.len) var/gene_tag = pick(plant_traits) var/gene_mask = "[num2hex(rand(0,255))]" @@ -94,6 +115,48 @@ proc/populate_seed_list() var/list/exude_gasses // The plant will exude these gasses during its life. var/splat_type = /obj/effect/decal/cleanable/fruit_smudge // Graffiti decal. +/datum/seed/New() + + set_trait(TRAIT_IMMUTABLE, 0) // If set, plant will never mutate. If -1, plant is highly mutable. + set_trait(TRAIT_HARVEST_REPEAT, 0) // If 1, this plant will fruit repeatedly. + set_trait(TRAIT_PRODUCES_POWER, 0) // Can be used to make a battery. + set_trait(TRAIT_JUICY, 0) // When thrown, causes a splatter decal. + set_trait(TRAIT_EXPLOSIVE, 0) // When thrown, acts as a grenade. + set_trait(TRAIT_CARNIVOROUS, 0) // 0 = none, 1 = eat pests in tray, 2 = eat living things (when a vine). + set_trait(TRAIT_PARASITE, 0) // 0 = no, 1 = gain health from weed level. + set_trait(TRAIT_STINGS, 0) // Can cause damage/inject reagents when thrown or handled. + set_trait(TRAIT_YIELD, 0) // Amount of product. + set_trait(TRAIT_SPREAD, 0) // 0 limits plant to tray, 1 = creepers, 2 = vines. + set_trait(TRAIT_MATURATION, 0) // Time taken before the plant is mature. + set_trait(TRAIT_PRODUCTION, 0) // Time before harvesting can be undertaken again. + set_trait(TRAIT_TELEPORTING, 0) // Uses the bluespace tomato effect. + set_trait(TRAIT_BIOLUM, 0) // Plant is bioluminescent. + set_trait(TRAIT_ALTER_TEMP, 0) // If set, the plant will periodically alter local temp by this amount. + set_trait(TRAIT_PRODUCT_ICON, 0) // Icon to use for fruit coming from this plant. + set_trait(TRAIT_PLANT_ICON, 0) // Icon to use for the plant growing in the tray. + set_trait(TRAIT_PRODUCT_COLOUR, 0) // Colour to apply to product icon. + set_trait(TRAIT_BIOLUM_COLOUR, 0) // The colour of the plant's radiance. + set_trait(TRAIT_POTENCY, 1) // General purpose plant strength value. + set_trait(TRAIT_REQUIRES_NUTRIENTS, 1) // The plant can starve. + set_trait(TRAIT_REQUIRES_WATER, 1) // The plant can become dehydrated. + set_trait(TRAIT_WATER_CONSUMPTION, 3) // Plant drinks this much per tick. + set_trait(TRAIT_LIGHT_TOLERANCE, 5) // Departure from ideal that is survivable. + set_trait(TRAIT_TOXINS_TOLERANCE, 5) // Resistance to poison. + set_trait(TRAIT_PEST_TOLERANCE, 5) // Threshold for pests to impact health. + set_trait(TRAIT_WEED_TOLERANCE, 5) // Threshold for weeds to impact health. + set_trait(TRAIT_IDEAL_LIGHT, 8) // Preferred light level in luminosity. + set_trait(TRAIT_HEAT_TOLERANCE, 20) // Departure from ideal that is survivable. + set_trait(TRAIT_LOWKPA_TOLERANCE, 25) // Low pressure capacity. + set_trait(TRAIT_ENDURANCE, 100) // Maximum plant HP when growing. + set_trait(TRAIT_HIGHKPA_TOLERANCE, 200) // High pressure capacity. + set_trait(TRAIT_IDEAL_HEAT, 293) // Preferred temperature in Kelvin. + set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25) // Plant eats this much per tick. + set_trait(TRAIT_PLANT_COLOUR, "#6EF86A") // Colour of the plant icon. + + spawn(5) + sleep(-1) + update_growth_stages() + /datum/seed/proc/get_trait(var/trait) return traits["[trait]"] @@ -198,43 +261,14 @@ proc/populate_seed_list() continue // Check for windows. var/no_los + var/turf/last_turf = origin_turf for(var/turf/target_turf in getline(origin_turf,neighbor)) - if(target_turf.density) + if(!last_turf.Enter(target_turf) || target_turf.density) no_los = 1 break - - if(!no_los) - var/los_dir = get_dir(neighbor,origin_turf) - var/list/blocked = list() - for(var/obj/machinery/door/D in neighbor.contents) - if(istype(D,/obj/machinery/door/window)) - blocked |= D.dir - else - if(D.density) - no_los = 1 - break - for(var/obj/structure/window/W in neighbor.contents) - if(W.is_fulltile()) - no_los = 1 - break - blocked |= W.dir - if(!no_los) - switch(los_dir) - if(NORTHEAST) - if((NORTH in blocked) && (EAST in blocked)) - no_los = 1 - if(SOUTHEAST) - if((SOUTH in blocked) && (EAST in blocked)) - no_los = 1 - if(NORTHWEST) - if((NORTH in blocked) && (WEST in blocked)) - no_los = 1 - if(SOUTHWEST) - if((SOUTH in blocked) && (WEST in blocked)) - no_los = 1 - else - if(los_dir in blocked) - no_los = 1 + last_turf = target_turf + if(!no_los && !origin_turf.Enter(neighbor)) + no_los = 1 if(no_los) closed_turfs |= neighbor continue @@ -348,8 +382,8 @@ proc/populate_seed_list() set_trait(TRAIT_POTENCY,rand(5,30),200,0) set_trait(TRAIT_PRODUCT_ICON,pick(plant_product_sprites)) set_trait(TRAIT_PLANT_ICON,pick(plant_sprites)) - set_trait(TRAIT_PLANT_COLOUR,"#[pick(rainbow)]") - set_trait(TRAIT_PRODUCT_COLOUR,"#[pick(rainbow)]") + set_trait(TRAIT_PLANT_COLOUR,"#[get_random_colour(0,75,190)]") + set_trait(TRAIT_PRODUCT_COLOUR,"#[get_random_colour(0,75,190)]") update_growth_stages() if(prob(20)) @@ -478,7 +512,7 @@ proc/populate_seed_list() if(prob(5)) set_trait(TRAIT_BIOLUM,1) - set_trait(TRAIT_BIOLUM_COLOUR,"#[pick(rainbow)]") + set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]") set_trait(TRAIT_ENDURANCE,rand(60,100)) set_trait(TRAIT_YIELD,rand(3,15)) @@ -500,7 +534,7 @@ proc/populate_seed_list() //This looks like shit, but it's a lot easier to read/change this way. var/total_mutations = rand(1,1+degree) for(var/i = 0;i\The [display_name] withers rapidly!") @@ -550,21 +584,11 @@ proc/populate_seed_list() if(get_trait(TRAIT_BIOLUM)) source_turf.visible_message("\The [display_name] begins to glow!") if(prob(degree*2)) - set_trait(TRAIT_BIOLUM_COLOUR,"#[pick(rainbow)]") + set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]") source_turf.visible_message("\The [display_name]'s glow changes colour!") else source_turf.visible_message("\The [display_name]'s glow dims...") if(11) - if(prob(degree*2)) - set_trait(TRAIT_FLOWERS,!get_trait(TRAIT_FLOWERS)) - if(get_trait(TRAIT_FLOWERS)) - source_turf.visible_message("\The [display_name] sprouts a bevy of flowers!") - if(prob(degree*2)) - set_trait(TRAIT_FLOWER_COLOUR,"#[pick(rainbow)]") - source_turf.visible_message("\The [display_name]'s flowers changes colour!") - else - source_turf.visible_message("\The [display_name]'s flowers wither and fall off.") - if(12) set_trait(TRAIT_TELEPORTING,1) return @@ -640,8 +664,8 @@ proc/populate_seed_list() traits_to_copy = list(TRAIT_TOXINS_TOLERANCE,TRAIT_PEST_TOLERANCE,TRAIT_WEED_TOLERANCE) if(GENE_VIGOUR) traits_to_copy = list(TRAIT_ENDURANCE,TRAIT_YIELD,TRAIT_SPREAD,TRAIT_MATURATION,TRAIT_PRODUCTION,TRAIT_TELEPORTING) - if(GENE_FLOWERS) - traits_to_copy = list(TRAIT_PLANT_COLOUR,TRAIT_PRODUCT_COLOUR,TRAIT_BIOLUM,TRAIT_BIOLUM_COLOUR,TRAIT_FLOWERS,TRAIT_FLOWER_ICON,TRAIT_FLOWER_COLOUR) + if(GENE_PIGMENT) + traits_to_copy = list(TRAIT_PLANT_COLOUR,TRAIT_PRODUCT_COLOUR,TRAIT_BIOLUM,TRAIT_BIOLUM_COLOUR) for(var/trait in traits_to_copy) P.values["[trait]"] = get_trait(trait) @@ -748,52 +772,6 @@ proc/populate_seed_list() else growth_stages = 0 -/datum/seed/New() - - set_trait(TRAIT_IMMUTABLE, 0) // If set, plant will never mutate. If -1, plant is highly mutable. - set_trait(TRAIT_HARVEST_REPEAT, 0) // If 1, this plant will fruit repeatedly. - set_trait(TRAIT_PRODUCES_POWER, 0) // Can be used to make a battery. - set_trait(TRAIT_JUICY, 0) // When thrown, causes a splatter decal. - set_trait(TRAIT_EXPLOSIVE, 0) // When thrown, acts as a grenade. - set_trait(TRAIT_CARNIVOROUS, 0) // 0 = none, 1 = eat pests in tray, 2 = eat living things (when a vine). - set_trait(TRAIT_PARASITE, 0) // 0 = no, 1 = gain health from weed level. - set_trait(TRAIT_STINGS, 0) // Can cause damage/inject reagents when thrown or handled. - set_trait(TRAIT_YIELD, 0) // Amount of product. - set_trait(TRAIT_SPREAD, 0) // 0 limits plant to tray, 1 = creepers, 2 = vines. - set_trait(TRAIT_MATURATION, 0) // Time taken before the plant is mature. - set_trait(TRAIT_PRODUCTION, 0) // Time before harvesting can be undertaken again. - set_trait(TRAIT_TELEPORTING, 0) // Uses the bluespace tomato effect. - set_trait(TRAIT_BIOLUM, 0) // Plant is bioluminescent. - set_trait(TRAIT_FLOWERS, 0) // Plant has a flower overlay. - set_trait(TRAIT_ALTER_TEMP, 0) // If set, the plant will periodically alter local temp by this amount. - set_trait(TRAIT_PRODUCT_ICON, 0) // Icon to use for fruit coming from this plant. - set_trait(TRAIT_PLANT_ICON, 0) // Icon to use for the plant growing in the tray. - set_trait(TRAIT_PRODUCT_COLOUR, 0) // Colour to apply to product icon. - set_trait(TRAIT_BIOLUM_COLOUR, 0) // The colour of the plant's radiance. - set_trait(TRAIT_FLOWER_COLOUR, 0) // Which colour to use. - set_trait(TRAIT_POTENCY, 1) // General purpose plant strength value. - set_trait(TRAIT_REQUIRES_NUTRIENTS, 1) // The plant can starve. - set_trait(TRAIT_REQUIRES_WATER, 1) // The plant can become dehydrated. - set_trait(TRAIT_WATER_CONSUMPTION, 3) // Plant drinks this much per tick. - set_trait(TRAIT_LIGHT_TOLERANCE, 5) // Departure from ideal that is survivable. - set_trait(TRAIT_TOXINS_TOLERANCE, 5) // Resistance to poison. - set_trait(TRAIT_PEST_TOLERANCE, 5) // Threshold for pests to impact health. - set_trait(TRAIT_WEED_TOLERANCE, 5) // Threshold for weeds to impact health. - set_trait(TRAIT_IDEAL_LIGHT, 8) // Preferred light level in luminosity. - set_trait(TRAIT_HEAT_TOLERANCE, 20) // Departure from ideal that is survivable. - set_trait(TRAIT_LOWKPA_TOLERANCE, 25) // Low pressure capacity. - set_trait(TRAIT_ENDURANCE, 100) // Maximum plant HP when growing. - set_trait(TRAIT_HIGHKPA_TOLERANCE, 200) // High pressure capacity. - set_trait(TRAIT_IDEAL_HEAT, 293) // Preferred temperature in Kelvin. - set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25) // Plant eats this much per tick. - set_trait(TRAIT_PLANT_COLOUR, "#6EF86A") // Colour of the plant icon. - set_trait(TRAIT_FLOWER_ICON, "vine_fruit") // Which overlay to use. - - spawn(5) - sleep(-1) - update_growth_stages() - - // Actual roundstart seed types after this point. // Chili plants/variants. /datum/seed/chili diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 2194bf97db..c8c1f7ee37 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -74,13 +74,8 @@ var/global/list/plant_seed_sprites = list() seed_type = null /obj/item/seeds/random/New() - seed = new() - seed.randomize() - - seed.uid = seed_types.len + 1 - seed.name = "[seed.uid]" - seed_types[seed.name] = seed - + seed = create_random_seed() + seed_type = seed.name update_seed() /obj/item/seeds/replicapod diff --git a/code/modules/hydroponics/spread_plant.dm b/code/modules/hydroponics/spread_plant.dm index fdecb335aa..9130726789 100644 --- a/code/modules/hydroponics/spread_plant.dm +++ b/code/modules/hydroponics/spread_plant.dm @@ -1,4 +1,34 @@ #define DEFAULT_SEED "glowshroom" +#define VINE_GROWTH_STAGES 4 + +/proc/spacevine_infestation() + spawn() //to stop the secrets panel hanging + var/list/turf/simulated/floor/turfs = list() //list of all the empty floor turfs in the hallway areas + for(var/areapath in typesof(/area/hallway)) + var/area/A = locate(areapath) + for(var/area/B in A.related) + for(var/turf/simulated/floor/F in B.contents) + if(!F.contents.len) + turfs += F + + if(turfs.len) //Pick a turf to spawn at if we can + var/turf/simulated/floor/T = pick(turfs) + var/datum/seed/seed = create_random_seed(1) + seed.set_trait(TRAIT_SPREAD,2) // So it will function properly as vines. + seed.set_trait(TRAIT_POTENCY,rand(40,50)) // Guarantee a wide spread and powerful effects. + new /obj/effect/plant(T,seed) + message_admins("Event: Spacevines spawned at [T.loc] ([T.x],[T.y],[T.z])") + +/obj/effect/dead_plant + anchored = 1 + opacity = 0 + density = 0 + +/obj/effect/dead_plant/attackby() + ..() + for(var/obj/effect/plant/neighbor in view(1,src)) + neighbor.hibernating = 0 + del(src) /obj/effect/plant name = "plant" @@ -7,16 +37,21 @@ density = 0 icon = 'icons/obj/hydroponics_growing.dmi' icon_state = "bush4-1" - layer = 2.1 + layer = 2 - var/health = 100 + var/health = 10 var/max_health = 100 + var/growth_threshold = 0 + var/growth_type = 0 + var/max_growth = 0 + var/list/children = list() var/obj/effect/plant/parent var/datum/seed/seed var/floor = 0 - var/spread_chance = 100 //40 - var/spread_into_adjacent = 100 //60 + var/spread_chance = 40 + var/spread_distance = 3 + var/spread_into_adjacent = 60 var/evolve_chance = 2 var/last_tick = 0 var/hibernating = 0 @@ -33,9 +68,31 @@ del(src) return + layer = rand(3,4) // Will display over pipes/machines at all times and mobs half the time. name = seed.display_name max_health = round(seed.get_trait(TRAIT_ENDURANCE)/2) - health = max_health + if(seed.get_trait(TRAIT_SPREAD)==2) + max_growth = VINE_GROWTH_STAGES + growth_threshold = round(max_health/VINE_GROWTH_STAGES) + icon = 'icons/obj/hydroponics_vines.dmi' + growth_type = 2 // Vines by default. + if(seed.get_trait(TRAIT_CARNIVOROUS) == 2) + growth_type = 1 // WOOOORMS. + else if(!(seed.seed_noun in list("seeds","pits"))) + if(seed.seed_noun == "nodes") + growth_type = 3 // Biomass + else + growth_type = 4 // Mold + else + max_growth = seed.growth_stages + growth_threshold = round(max_health/seed.growth_stages) + + if(max_growth > 2 && prob(50)) + max_growth-- //Ensure some variation in final sprite, makes the carpet of crap look less wonky. + + spread_into_adjacent = round(seed.get_trait(TRAIT_POTENCY)/2) + spread_distance = ((growth_type>0) ? round(spread_into_adjacent/2) : round(spread_into_adjacent/15)) + spread_chance = round(spread_into_adjacent/2) set_dir(calc_dir()) update_icon() @@ -44,14 +101,11 @@ /obj/effect/plant/update_icon() - // TODO: convert this to an icon cache. - icon_state = "[seed.get_trait(TRAIT_PLANT_ICON)]-[rand(1,max(1,seed.growth_stages-1))]" - color = seed.get_trait(TRAIT_PLANT_COLOUR) - if(!floor) - // This should make the plant grow flush against the wall it's meant to be growing from. - pixel_y = -(rand(8,12)) + refresh_icon() + if(growth_type == 0 && !floor) src.transform = null var/matrix/M = matrix() + M.Translate(0,-(rand(12,14))) // should make the plant flush against the wall it's meant to be growing from. switch(dir) if(WEST) M.Turn(90) @@ -60,10 +114,12 @@ if(EAST) M.Turn(270) src.transform = M - + var/icon_colour = seed.get_trait(TRAIT_PLANT_COLOUR) + if(icon_colour) + color = icon_colour // Apply colour and light from seed datum. if(seed.get_trait(TRAIT_BIOLUM)) - SetLuminosity(1+round(seed.get_trait(TRAIT_POTENCY)/10)) + SetLuminosity(1+round(seed.get_trait(TRAIT_POTENCY)/20)) if(seed.get_trait(TRAIT_BIOLUM_COLOUR)) l_color = seed.get_trait(TRAIT_BIOLUM_COLOUR) else @@ -72,26 +128,54 @@ else SetLuminosity(0) +/obj/effect/plant/proc/refresh_icon() + var/growth = min(max_growth,max(1,round(health/growth_threshold))) + if(growth_type > 0) + switch(growth_type) + if(1) + icon_state = "worms" + if(2) + icon_state = "vines-[growth]" + if(3) + icon_state = "mass-[growth]" + if(4) + icon_state = "mold-[growth]" + else + icon_state = "[seed.get_trait(TRAIT_PLANT_ICON)]-[growth]" + /obj/effect/plant/Del() processing_objects -= src ..() -/obj/effect/plant/examine() - ..() - usr << "Max dist from parent is [round(seed.get_trait(TRAIT_POTENCY)/15)]." - usr << "Current dist is [get_dist(get_root(),src)]." -/obj/effect/plant/proc/die_off() +/obj/effect/plant/proc/die_off(var/no_remains) + // Remove ourselves from our parent. + if(parent && parent.children) + parent.children -= src // Kill off any of our children (and add an added bonus, other plants in this area) for(var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant in get_turf(src)) plant.dead = 1 plant.update_icon() // Cause the plants around us to update. + if(children && children.len) + for(var/obj/effect/plant/child in children) + child.die_off() for(var/obj/effect/plant/neighbor in view(1,src)) neighbor.hibernating = 0 + if(!no_remains && !(locate(/obj/effect/dead_plant) in get_turf(src))) + var/obj/effect/dead_plant/plant_remains = new(get_turf(src)) + plant_remains.icon = src.icon + plant_remains.icon_state = src.icon_state del(src) +/obj/effect/plant/proc/get_dist_to_parent(var/current_count) + if(!parent) + return current_count + current_count++ + return parent.get_dist_to_parent(current_count) + /obj/effect/plant/process() + // Something is very wrong, kill ourselves. if(!seed) die_off() @@ -99,27 +183,35 @@ var/turf/simulated/T = get_turf(src) if(istype(T)) health -= seed.handle_environment(T, T.return_air(),1) + if(health < max_health) + health += rand(3,5) + if(health > max_health) + health = max_health + refresh_icon() - // Hibernating or too far from parent, no chance of spreading. - if(hibernating || (parent && (get_dist(get_root(),src) > round(seed.get_trait(TRAIT_POTENCY)/15)))) + // Damaged, young hibernating or too far from parent, no chance of spreading. + if(health < (max_health/2) || hibernating || (parent && (get_dist_to_parent(0) > spread_distance))) return // Count our neighbors and possible locations for spreading. var/list/possible_locs = list() var/count = 0 for(var/turf/simulated/floor/floor in view(1,src)) - if(!floor.Adjacent(src) || floor.density || (locate(/obj/effect/plant) in floor.contents)) + if((locate(/obj/effect/dead_plant) in floor.contents) || !floor.Enter(src) || floor.density) + continue + if(locate(/obj/effect/plant) in floor.contents) count++ continue possible_locs |= floor - //Entirely surrounded, spawn an actual plant. - if(count>=8) - hibernating = 1 // Suspend processing for now. + //Entirely surrounded, try to spawn an actual plant. + if(count>=8 && prob(5)) if(!(locate(/obj/machinery/portable_atmospherics/hydroponics/soil/invisible) in T.contents)) var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/new_plant = new(T,seed) - new_plant.age = seed.get_trait(TRAIT_MATURATION) + new_plant.age = seed.get_trait(TRAIT_MATURATION)-5 new_plant.update_icon() + if(growth_type==0) //Vines do not become invisible. + invisibility = INVISIBILITY_MAXIMUM if(prob(spread_chance)) for(var/i=1,i<=seed.get_trait(TRAIT_YIELD),i++) @@ -130,6 +222,14 @@ possible_locs -= target_turf var/obj/effect/plant/child = new(target_turf, seed) child.parent = get_root() + child.parent.children |= child + + /* + var/need_hibernate = 0 + if(need_hibernate) + hibernating = 1 + world << "[src] at [x],[y] is hibernating" + */ /obj/effect/plant/proc/get_root() if(parent) @@ -188,19 +288,19 @@ /obj/effect/plant/ex_act(severity) switch(severity) if(1.0) - del(src) + die_off() return if(2.0) if (prob(50)) - del(src) + die_off() return if(3.0) if (prob(5)) - del(src) + die_off() return else return /obj/effect/plant/proc/check_health() if(health <= 0) - del(src) \ No newline at end of file + die_off() \ No newline at end of file diff --git a/code/modules/hydroponics/spread_vine.dm b/code/modules/hydroponics/spread_vine.dm deleted file mode 100644 index c06ca4fba5..0000000000 --- a/code/modules/hydroponics/spread_vine.dm +++ /dev/null @@ -1,355 +0,0 @@ -// SPACE VINES (Note that this code is very similar to Biomass code) -/obj/effect/plantsegment - name = "space vines" - desc = "An extremely expansionistic species of vine." - icon = 'icons/effects/spacevines.dmi' - icon_state = "Light1" - anchored = 1 - density = 0 - layer = 5 - pass_flags = PASSTABLE | PASSGRILLE - - // Vars used by vines with seed data. - var/age = 0 - var/lastproduce = 0 - var/harvest = 0 - var/list/chems - var/plant_damage_noun = "Thorns" - var/limited_growth = 0 - - // Life vars/ - var/energy = 0 - var/obj/effect/plant_controller/master = null - var/mob/living/buckled_mob - var/datum/seed/seed - -/obj/effect/plantsegment/New() - return - -/obj/effect/plantsegment/Del() - if(master) - master.vines -= src - master.growth_queue -= src - ..() - -/obj/effect/plantsegment/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (!W || !user || !W.type) return - switch(W.type) - if(/obj/item/weapon/circular_saw) del src - if(/obj/item/weapon/kitchen/utensil/knife) del src - if(/obj/item/weapon/scalpel) del src - if(/obj/item/weapon/twohanded/fireaxe) del src - if(/obj/item/weapon/hatchet) del src - if(/obj/item/weapon/melee/energy) del src - if(/obj/item/weapon/pickaxe/plasmacutter) del src - - // Less effective weapons - if(/obj/item/weapon/wirecutters) - if(prob(25)) del src - if(/obj/item/weapon/shard) - if(prob(25)) del src - - // Weapons with subtypes - else - if(istype(W, /obj/item/weapon/melee/energy/sword)) del src - else if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - if(WT.remove_fuel(0, user)) del src - else - manual_unbuckle(user) - return - // Plant-b-gone damage is handled in its entry in chemistry-reagents.dm - ..() - - -/obj/effect/plantsegment/attack_hand(mob/user as mob) - - if(user.a_intent == "help" && seed && harvest) - seed.harvest(user,1) - harvest = 0 - lastproduce = age - update() - return - - manual_unbuckle(user) - -/obj/effect/plantsegment/proc/unbuckle() - if(buckled_mob) - if(buckled_mob.buckled == src) //this is probably unneccesary, but it doesn't hurt - buckled_mob.buckled = null - buckled_mob.anchored = initial(buckled_mob.anchored) - buckled_mob.update_canmove() - buckled_mob = null - return - -/obj/effect/plantsegment/proc/manual_unbuckle(mob/user as mob) - if(buckled_mob) - if(prob(seed ? min(max(0,100 - seed.get_trait(TRAIT_POTENCY)),100) : 50)) - if(buckled_mob.buckled == src) - if(buckled_mob != user) - buckled_mob.visible_message(\ - "[user.name] frees [buckled_mob.name] from [src].",\ - "[user.name] frees you from [src].",\ - "You hear shredding and ripping.") - else - buckled_mob.visible_message(\ - "[buckled_mob.name] struggles free of [src].",\ - "You untangle [src] from around yourself.",\ - "You hear shredding and ripping.") - unbuckle() - else - var/text = pick("rips","tears","pulls") - user.visible_message(\ - "[user.name] [text] at [src].",\ - "You [text] at [src].",\ - "You hear shredding and ripping.") - return - -/obj/effect/plantsegment/proc/grow() - - if(!energy) - src.icon_state = pick("Med1", "Med2", "Med3") - energy = 1 - - //Low-lying creepers do not block vision or grow thickly. - if(limited_growth) - energy = 2 - return - - src.opacity = 1 - layer = 5 - else if(!limited_growth) - src.icon_state = pick("Hvy1", "Hvy2", "Hvy3") - energy = 2 - -/obj/effect/plantsegment/proc/entangle_mob() - - if(limited_growth) - return - - if(prob(seed ? seed.get_trait(TRAIT_POTENCY) : 25)) - - if(!buckled_mob) - var/mob/living/carbon/V = locate() in src.loc - if(V && (V.stat != DEAD) && (V.buckled != src)) // If mob exists and is not dead or captured. - V.buckled = src - V.loc = src.loc - V.update_canmove() - src.buckled_mob = V - V << "The vines [pick("wind", "tangle", "tighten")] around you!" - - // FEED ME, SEYMOUR. - if(buckled_mob && seed && (buckled_mob.stat != DEAD)) //Don't bother with a dead mob. - seed.do_thorns(buckled_mob,src) - seed.do_sting(buckled_mob,src) - -/obj/effect/plantsegment/proc/update() - if(!seed) return - - // Update bioluminescence. - if(seed.get_trait(TRAIT_BIOLUM)) - SetLuminosity(1+round(seed.get_trait(TRAIT_POTENCY)/10)) - if(seed.get_trait(TRAIT_BIOLUM_COLOUR)) - l_color = seed.get_trait(TRAIT_BIOLUM_COLOUR) - else - l_color = null - return - else - SetLuminosity(0) - - // Update flower/product overlay. - overlays.Cut() - if(age >= seed.get_trait(TRAIT_MATURATION)) - if(prob(20) && seed.products && seed.products.len && !harvest && ((age-lastproduce) > seed.get_trait(TRAIT_PRODUCTION))) - harvest = 1 - lastproduce = age - - if(harvest) - var/image/fruit_overlay = image('icons/obj/hydroponics_vines.dmi',"") - if(seed.get_trait(TRAIT_PRODUCT_COLOUR)) - fruit_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) - overlays += fruit_overlay - - if(seed.get_trait(TRAIT_FLOWERS)) - var/image/flower_overlay = image('icons/obj/hydroponics_vines.dmi',"[seed.get_trait(TRAIT_FLOWER_ICON)]") - if(seed.get_trait(TRAIT_FLOWER_COLOUR)) - flower_overlay.color = seed.get_trait(TRAIT_FLOWER_COLOUR) - overlays += flower_overlay - -/obj/effect/plantsegment/proc/spread() - var/direction = pick(cardinal) - var/step = get_step(src,direction) - if(istype(step,/turf/simulated/floor)) - var/turf/simulated/floor/F = step - if(!locate(/obj/effect/plantsegment,F)) - if(F.Enter(src)) - if(master) - master.spawn_piece( F ) - -// Explosion damage. -/obj/effect/plantsegment/ex_act(severity) - switch(severity) - if(1.0) - die() - return - if(2.0) - if (prob(90)) - die() - return - if(3.0) - if (prob(50)) - die() - return - return - -// Hotspots kill vines. -/obj/effect/plantsegment/fire_act(null, temp, volume) - del src - -/obj/effect/plantsegment/proc/die() - if(seed && harvest && rand(5)) - seed.harvest(src,1) - del(src) - -/obj/effect/plantsegment/proc/life() - - if(!seed) - return - - if(prob(30)) - age++ - - var/turf/T = loc - var/datum/gas_mixture/environment - if(T) environment = T.return_air() - - if(!environment) - return - - var/pressure = environment.return_pressure() - if(pressure < seed.get_trait(TRAIT_LOWKPA_TOLERANCE) || pressure > seed.get_trait(TRAIT_HIGHKPA_TOLERANCE)) - die() - return - - if(abs(environment.temperature - seed.get_trait(TRAIT_IDEAL_HEAT)) > seed.get_trait(TRAIT_HEAT_TOLERANCE)) - die() - return - - var/area/A = T.loc - if(A) - var/light_available - if(A.lighting_use_dynamic) - light_available = max(0,min(10,T.lighting_lumcount)-5) - else - light_available = 5 - if(abs(light_available - seed.get_trait(TRAIT_IDEAL_LIGHT)) > seed.get_trait(TRAIT_LIGHT_TOLERANCE)) - die() - return - -/obj/effect/plant_controller - - //What this does is that instead of having the grow minimum of 1, required to start growing, the minimum will be 0, - //meaning if you get the spacevines' size to something less than 20 plots, it won't grow anymore. - - var/list/obj/effect/plantsegment/vines = list() - var/list/growth_queue = list() - var/reached_collapse_size - var/reached_slowdown_size - var/datum/seed/seed - - var/collapse_limit = 250 - var/slowdown_limit = 30 - var/limited_growth = 0 - -/obj/effect/plant_controller/creeper - collapse_limit = 6 - slowdown_limit = 3 - limited_growth = 1 - -/obj/effect/plant_controller/New() - if(!istype(src.loc,/turf/simulated/floor)) - del(src) - - spawn(0) - spawn_piece(src.loc) - - processing_objects.Add(src) - -/obj/effect/plant_controller/Del() - processing_objects.Remove(src) - ..() - -/obj/effect/plant_controller/proc/spawn_piece(var/turf/location) - var/obj/effect/plantsegment/SV = new(location) - SV.limited_growth = src.limited_growth - growth_queue += SV - vines += SV - SV.master = src - if(seed) - SV.seed = seed - SV.name = "[seed.seed_name] vines" - SV.update() - -/obj/effect/plant_controller/process() - - // Space vines exterminated. Remove the controller - if(!vines) - del(src) - return - - // Sanity check. - if(!growth_queue) - del(src) - return - - // Check if we're too big for our own good. - if(vines.len >= (seed?seed.get_trait(TRAIT_POTENCY)*collapse_limit : 250)&&!reached_collapse_size) - reached_collapse_size = 1 - if(vines.len >= (seed?seed.get_trait(TRAIT_POTENCY)*slowdown_limit : 30)&&!reached_slowdown_size) - reached_slowdown_size = 1 - - var/length = 0 - if(reached_collapse_size) - length = 0 - else if(reached_slowdown_size) - if(prob(seed ? seed.get_trait(TRAIT_POTENCY) : 25)) - length = 1 - else - length = 0 - else - length = 1 - - length = min(30, max(length, vines.len/5)) - - // Update as many pieces of vine as we're allowed to. - // Append updated vines to the end of the growth queue. - var/i = 0 - var/list/obj/effect/plantsegment/queue_end = list() - for(var/obj/effect/plantsegment/SV in growth_queue) - i++ - queue_end += SV - growth_queue -= SV - - SV.life() - - if(!SV) continue - - if(SV.energy < 2) //If tile isn't fully grown - var/chance - if(seed) - chance = limited_growth ? round(seed.get_trait(TRAIT_POTENCY)/2,1) : seed.get_trait(TRAIT_POTENCY) - else - chance = 20 - - if(prob(chance)) - SV.grow() - - else if(!seed || !limited_growth) //If tile is fully grown and not just a creeper. - SV.entangle_mob() - - SV.update() - SV.spread() - if(i >= length) - break - - growth_queue = growth_queue + queue_end \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index b40e6fb819..4442e8caf0 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -45,17 +45,15 @@ if(udder && prob(5)) udder.add_reagent("milk", rand(5, 10)) - if(locate(/obj/effect/plantsegment) in loc) - var/obj/effect/plantsegment/SV = locate(/obj/effect/plantsegment) in loc - del(SV) - if(prob(10)) - say("Nom") + if(locate(/obj/effect/plant) in loc) + var/obj/effect/plant/SV = locate() in loc + SV.die_off(1) if(!pulledby) for(var/direction in shuffle(list(1,2,4,8,5,6,9,10))) var/step = get_step(src, direction) if(step) - if(locate(/obj/effect/plantsegment) in step) + if(locate(/obj/effect/plant) in step) Move(step) /mob/living/simple_animal/hostile/retaliate/goat/Retaliate() @@ -65,11 +63,8 @@ /mob/living/simple_animal/hostile/retaliate/goat/Move() ..() if(!stat) - if(locate(/obj/effect/plantsegment) in loc) - var/obj/effect/plantsegment/SV = locate(/obj/effect/plantsegment) in loc - del(SV) - if(prob(10)) - say("Nom") + for(var/obj/effect/plant/SV in loc) + SV.die_off(1) /mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob) var/obj/item/weapon/reagent_containers/glass/G = O diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 4f2135be98..a34d6e4d7c 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1846,8 +1846,10 @@ datum alien_weeds.healthcheck() else if(istype(O,/obj/effect/plant)) //even a small amount is enough to kill it del(O) - else if(istype(O,/obj/effect/plantsegment)) - if(prob(50)) del(O) //Kills kudzu too. + else if(istype(O,/obj/effect/plant)) + if(prob(50)) + var/obj/effect/plant/plant = O + plant.die_off() else if(istype(O,/obj/machinery/portable_atmospherics/hydroponics)) var/obj/machinery/portable_atmospherics/hydroponics/tray = O diff --git a/icons/obj/biomass.dmi b/icons/obj/biomass.dmi deleted file mode 100644 index ffb133f7682c0ba4749e93bcdcdf9332099c128e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7246 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 Npe(O0S1Dr|_CNP{CHVjV diff --git a/icons/obj/magic.dmi b/icons/obj/magic.dmi index 141b2df3f816e966912aaa0f476fd0147e18493e..f92243d6bc1afce4da6b4551974c8c64ccc1a4e6 100644 GIT binary patch delta 4093 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 IM6N<$f(Cc=_y7O^ diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index b659bdc23ec64efbd2ac790c1f16503d0d7e2188..1d6bad4c507774f871c1d52ef47fbc4999fe2f32 100644 GIT binary patch literal 12565 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 literal 9118 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 YAa~s3^2w}(%hzx8v Date: Sun, 1 Feb 2015 14:13:51 +1030 Subject: [PATCH 32/90] Minor Entered() refactoring. --- code/game/turfs/simulated.dm | 34 +++++++------------- code/modules/clothing/clothing.dm | 3 ++ code/modules/clothing/shoes/miscellaneous.dm | 10 ++++++ 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 84ec0adecb..ae5d68582d 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -41,30 +41,21 @@ if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - if(istype(H.shoes, /obj/item/clothing/shoes/clown_shoes)) - var/obj/item/clothing/shoes/clown_shoes/O = H.shoes - if(H.m_intent == "run") - if(O.footstep >= 2) - O.footstep = 0 - playsound(src, "clownstep", 50, 1) // this will get annoying very fast. - else - O.footstep++ - else - playsound(src, "clownstep", 20, 1) - // Tracking blood var/list/bloodDNA = null var/bloodcolor="" if(H.shoes) var/obj/item/clothing/shoes/S = H.shoes - if(S.track_blood && S.blood_DNA) - bloodDNA = S.blood_DNA - bloodcolor=S.blood_color - S.track_blood-- + if(istype(S)) + S.handle_movement(src,(H.m_intent == "run" ? 1 : 0)) + if(S.track_blood && S.blood_DNA) + bloodDNA = S.blood_DNA + bloodcolor=S.blood_color + S.track_blood-- else if(H.track_blood && H.feet_blood_DNA) bloodDNA = H.feet_blood_DNA - bloodcolor=H.feet_blood_color + bloodcolor = H.feet_blood_color H.track_blood-- if (bloodDNA) @@ -75,14 +66,11 @@ bloodDNA = null - var/noslip = 0 - for (var/obj/structure/stool/bed/chair/C in loc) - if (C.buckled_mob == M) - noslip = 1 - if((wet == 1 && M.m_intent == "walk") || noslip) - return // no slipping while sitting in a chair, plz - if(src.wet) + + if(M.buckled || (src.wet == 1 && M.m_intent == "walk")) + return + var/slip_dist = 1 var/slip_stun = 6 var/floor_type = "wet" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index f6dc6cc337..6741fdb780 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -360,6 +360,9 @@ BLIND // can't see anything species_restricted = list("exclude","Unathi","Tajara") sprite_sheets = list("Vox" = 'icons/mob/species/vox/shoes.dmi') +/obj/item/clothing/shoes/proc/handle_movement(var/turf/walking, var/running) + return + /obj/item/clothing/shoes/update_clothing_icon() if (ismob(src.loc)) var/mob/M = src.loc diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index e52b2fce8c..38b252b1ff 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -71,6 +71,16 @@ var/footstep = 1 //used for squeeks whilst walking species_restricted = null +/obj/item/clothing/shoes/clown_shoes/handle_movement(var/turf/walking, var/running) + if(running) + if(footstep >= 2) + footstep = 0 + playsound(src, "clownstep", 50, 1) // this will get annoying very fast. + else + footstep++ + else + playsound(src, "clownstep", 20, 1) + /obj/item/clothing/shoes/jackboots name = "jackboots" desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." From 93cf4f73c5553fca288ab0d30a4060e18c68209f Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 1 Feb 2015 20:02:59 +1030 Subject: [PATCH 33/90] More work on the vine system, fixing multiple bugs. --- baystation12.dme | 19 +- .../machinery}/biogenerator.dm | 0 code/game/turfs/simulated.dm | 10 +- code/modules/hydroponics/_hydro_setup.dm | 3 + code/modules/hydroponics/grown.dm | 2 +- code/modules/hydroponics/seed.dm | 773 +++++++++++++++++ code/modules/hydroponics/seed_datums.dm | 775 ------------------ .../hydroponics/{seeds.dm => seed_packets.dm} | 0 .../spreading.dm} | 98 +-- .../hydroponics/spreading/spreading_growth.dm | 75 ++ .../spreading/spreading_response.dm | 74 ++ .../{hydro_tray.dm => trays/tray.dm} | 273 +----- .../hydroponics/trays/tray_apiary.dm} | 0 .../modules/hydroponics/trays/tray_process.dm | 125 +++ .../hydroponics/trays/tray_reagents.dm | 143 ++++ code/modules/hydroponics/trays/tray_soil.dm | 68 ++ .../{hydro_tools.dm => trays/tray_tools.dm} | 0 .../hydroponics/trays/tray_update_icons.dm | 74 ++ 18 files changed, 1372 insertions(+), 1140 deletions(-) rename code/{modules/hydroponics => game/machinery}/biogenerator.dm (100%) create mode 100644 code/modules/hydroponics/seed.dm rename code/modules/hydroponics/{seeds.dm => seed_packets.dm} (100%) rename code/modules/hydroponics/{spread_plant.dm => spreading/spreading.dm} (65%) create mode 100644 code/modules/hydroponics/spreading/spreading_growth.dm create mode 100644 code/modules/hydroponics/spreading/spreading_response.dm rename code/modules/hydroponics/{hydro_tray.dm => trays/tray.dm} (64%) rename code/{game/machinery/bees_apiary.dm => modules/hydroponics/trays/tray_apiary.dm} (100%) create mode 100644 code/modules/hydroponics/trays/tray_process.dm create mode 100644 code/modules/hydroponics/trays/tray_reagents.dm create mode 100644 code/modules/hydroponics/trays/tray_soil.dm rename code/modules/hydroponics/{hydro_tools.dm => trays/tray_tools.dm} (100%) create mode 100644 code/modules/hydroponics/trays/tray_update_icons.dm diff --git a/baystation12.dme b/baystation12.dme index 265b12f047..5216e12a41 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -303,6 +303,7 @@ #include "code\game\machinery\autolathe_datums.dm" #include "code\game\machinery\Beacon.dm" #include "code\game\machinery\bees_items.dm" +#include "code\game\machinery\biogenerator.dm" #include "code\game\machinery\bioprinter.dm" #include "code\game\machinery\buttons.dm" #include "code\game\machinery\cell_charger.dm" @@ -957,18 +958,24 @@ #include "code\modules\games\cards.dm" #include "code\modules\genetics\side_effects.dm" #include "code\modules\hydroponics\_hydro_setup.dm" -#include "code\modules\hydroponics\bees_apiary.dm" -#include "code\modules\hydroponics\biogenerator.dm" #include "code\modules\hydroponics\grown.dm" #include "code\modules\hydroponics\grown_inedible.dm" -#include "code\modules\hydroponics\hydro_tools.dm" -#include "code\modules\hydroponics\hydro_tray.dm" +#include "code\modules\hydroponics\seed.dm" #include "code\modules\hydroponics\seed_datums.dm" #include "code\modules\hydroponics\seed_machines.dm" #include "code\modules\hydroponics\seed_mobs.dm" #include "code\modules\hydroponics\seed_storage.dm" -#include "code\modules\hydroponics\seeds.dm" -#include "code\modules\hydroponics\spread_plant.dm" +#include "code\modules\hydroponics\seed_packets.dm" +#include "code\modules\hydroponics\spreading\spreading.dm" +#include "code\modules\hydroponics\spreading\spreading_growth.dm" +#include "code\modules\hydroponics\spreading\spreading_response.dm" +#include "code\modules\hydroponics\trays\tray.dm" +#include "code\modules\hydroponics\trays\tray_apiary.dm" +#include "code\modules\hydroponics\trays\tray_process.dm" +#include "code\modules\hydroponics\trays\tray_reagents.dm" +#include "code\modules\hydroponics\trays\tray_soil.dm" +#include "code\modules\hydroponics\trays\tray_tools.dm" +#include "code\modules\hydroponics\trays\tray_update_icons.dm" #include "code\modules\library\lib_items.dm" #include "code\modules\library\lib_machines.dm" #include "code\modules\library\lib_readme.dm" diff --git a/code/modules/hydroponics/biogenerator.dm b/code/game/machinery/biogenerator.dm similarity index 100% rename from code/modules/hydroponics/biogenerator.dm rename to code/game/machinery/biogenerator.dm diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index ae5d68582d..0aabdae3d0 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -25,11 +25,17 @@ usr << "\red Movement is admin-disabled." //This is to identify lag problems return - if (istype(A,/mob/living/carbon)) - var/mob/living/carbon/M = A + if (istype(A,/mob/living)) + var/mob/living/M = A if(M.lying) ..() return + + // Ugly hack :( Should never have multiple plants in the same tile. + var/obj/effect/plant/plant = locate() in contents + if(plant) plant.trodden_on(M) + + // Dirt overlays. dirt++ var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src) if (dirt >= 50) diff --git a/code/modules/hydroponics/_hydro_setup.dm b/code/modules/hydroponics/_hydro_setup.dm index c18043395c..05e4a8dae4 100644 --- a/code/modules/hydroponics/_hydro_setup.dm +++ b/code/modules/hydroponics/_hydro_setup.dm @@ -1,3 +1,6 @@ +//Misc +#define DEAD_PLANT_COLOUR "#C2A180" + // Definitions for genes (trait groupings) #define GENE_PRODUCTS "products" #define GENE_CONSUMPTION "consumption" diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 2d6e70033e..9a53ba5a22 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -172,7 +172,7 @@ return if(!reagents || reagents.total_volume <= 0) return - reagents.remove_any(rand(1,3)) + reagents.remove_any(rand(1,3)) //Todo, make it actually remove the reagents the seed uses. seed.do_thorns(H,src) seed.do_sting(H,src,pick("r_hand","l_hand")) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm new file mode 100644 index 0000000000..e417c115dc --- /dev/null +++ b/code/modules/hydroponics/seed.dm @@ -0,0 +1,773 @@ +// Sprite lists. +var/global/list/plant_sprites = list() // List of all harvested product sprites. +var/global/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages. + +// Proc for creating a random seed type. +/proc/create_random_seed(var/survive_on_station) + var/datum/seed/seed = new() + seed.randomize() + seed.uid = seed_types.len + 1 + seed.name = "[seed.uid]" + seed_types[seed.name] = seed + + if(survive_on_station) + if(seed.consume_gasses) + seed.consume_gasses["phoron"] = null + seed.consume_gasses["carbon_dioxide"] = null + seed.set_trait(TRAIT_IDEAL_HEAT,293) + seed.set_trait(TRAIT_HEAT_TOLERANCE,20) + seed.set_trait(TRAIT_IDEAL_LIGHT,8) + seed.set_trait(TRAIT_LIGHT_TOLERANCE,5) + seed.set_trait(TRAIT_LOWKPA_TOLERANCE,25) + seed.set_trait(TRAIT_HIGHKPA_TOLERANCE,200) + + return seed + +// Debug for testing seed genes. +/client/proc/show_plant_genes() + set category = "Debug" + set name = "Show Plant Genes" + set desc = "Prints the round's plant gene masks." + + if(!holder) return + + if(!gene_tag_masks) + usr << "Gene masks not set." + return + + for(var/mask in gene_tag_masks) + usr << "[mask]: [gene_tag_masks[mask]]" + +// Predefined/roundstart varieties use a string key to make it +// easier to grab the new variety when mutating. Post-roundstart +// and mutant varieties use their uid converted to a string instead. +// Looks like shit but it's sort of necessary. + +proc/populate_seed_list() + + // Build the icon lists. + for(var/icostate in icon_states('icons/obj/hydroponics_growing.dmi')) + var/split = findtext(icostate,"-") + if(!split) + // invalid icon_state + continue + + var/ikey = copytext(icostate,(split+1)) + if(ikey == "dead") + // don't count dead icons + continue + ikey = text2num(ikey) + var/base = copytext(icostate,1,split) + + if(!(plant_sprites[base]) || (plant_sprites[base]\The [fruit]'s thorns pierce your [affecting.display_name] greedily!" + else + target << "\The [fruit]'s thorns pierce your flesh greedily!" + damage = get_trait(TRAIT_POTENCY)/2 + else + if(affecting) + target << "\The [fruit]'s thorns dig deeply into your [affecting.display_name]!" + else + target << "\The [fruit]'s thorns dig deeply into your flesh!" + damage = get_trait(TRAIT_POTENCY)/5 + else + return + + if(affecting) + affecting.take_damage(damage, 0) + affecting.add_autopsy_data("Thorns",damage) + else + target.adjustBruteLoss(damage) + target.UpdateDamageIcon() + target.updatehealth() + +// Adds reagents to a target. +/datum/seed/proc/do_sting(var/mob/living/carbon/human/target, var/obj/item/fruit) + if(!get_trait(TRAIT_STINGS)) + return + if(chems && chems.len) + target << "You are stung by \the [fruit]!" + for(var/rid in chems) + var/injecting = min(5,max(1,get_trait(TRAIT_POTENCY)/5)) + target.reagents.add_reagent(rid,injecting) + +//Splatter a turf. +/datum/seed/proc/splatter(var/turf/T,var/obj/item/thrown) + if(splat_type) + var/obj/effect/plant/splat = new splat_type(T, src) + if(!istype(splat)) // Plants handle their own stuff. + splat.name = "[thrown.name] [pick("smear","smudge","splatter")]" + if(get_trait(TRAIT_BIOLUM)) + if(get_trait(TRAIT_BIOLUM_COLOUR)) + splat.l_color = get_trait(TRAIT_BIOLUM_COLOUR) + splat.SetLuminosity(get_trait(TRAIT_BIOLUM)) + if(get_trait(TRAIT_PRODUCT_COLOUR)) + splat.color = get_trait(TRAIT_PRODUCT_COLOUR) + + if(chems) + for(var/mob/living/M in T.contents) + if(!M.reagents) + continue + for(var/chem in chems) + var/injecting = min(5,max(1,get_trait(TRAIT_POTENCY)/3)) + M.reagents.add_reagent(chem,injecting) + +//Applies an effect to a target atom. +/datum/seed/proc/thrown_at(var/obj/item/thrown,var/atom/target, var/force_explode) + + var/splatted + var/turf/origin_turf = get_turf(target) + + if(force_explode || get_trait(TRAIT_EXPLOSIVE)) + + var/flood_dist = min(10,max(1,get_trait(TRAIT_POTENCY)/15)) + var/list/open_turfs = list() + var/list/closed_turfs = list() + var/list/valid_turfs = list() + open_turfs |= origin_turf + + // Flood fill to get affected turfs. + while(open_turfs.len) + var/turf/T = pick(open_turfs) + open_turfs -= T + closed_turfs |= T + valid_turfs |= T + + for(var/dir in alldirs) + var/turf/neighbor = get_step(T,dir) + if(!neighbor || (neighbor in closed_turfs) || (neighbor in open_turfs)) + continue + if(neighbor.density || get_dist(neighbor,origin_turf) > flood_dist || istype(neighbor,/turf/space)) + closed_turfs |= neighbor + continue + // Check for windows. + var/no_los + var/turf/last_turf = origin_turf + for(var/turf/target_turf in getline(origin_turf,neighbor)) + if(!last_turf.Enter(target_turf) || target_turf.density) + no_los = 1 + break + last_turf = target_turf + if(!no_los && !origin_turf.Enter(neighbor)) + no_los = 1 + if(no_los) + closed_turfs |= neighbor + continue + open_turfs |= neighbor + + for(var/turf/T in valid_turfs) + for(var/mob/living/M in T.contents) + apply_special_effect(M) + splatter(T,thrown) + origin_turf.visible_message("The [thrown.name] explodes!") + del(thrown) + return + + if(istype(target,/mob/living)) + splatted = apply_special_effect(target,thrown) + else if(istype(target,/turf)) + splatted = 1 + for(var/mob/living/M in target.contents) + apply_special_effect(M) + + if(get_trait(TRAIT_JUICY) && splatted) + splatter(origin_turf,thrown) + origin_turf.visible_message("The [thrown.name] splatters against [target]!") + del(thrown) + +/datum/seed/proc/handle_environment(var/turf/current_turf, var/datum/gas_mixture/environment, var/check_only) + + var/health_change = 0 + // Handle gas consumption. + if(consume_gasses && consume_gasses.len) + var/missing_gas = 0 + for(var/gas in consume_gasses) + if(environment && environment.gas && environment.gas[gas] && \ + environment.gas[gas] >= consume_gasses[gas]) + if(!check_only) + environment.adjust_gas(gas,-consume_gasses[gas],1) + else + missing_gas++ + + if(missing_gas > 0) + health_change += missing_gas * HYDRO_SPEED_MULTIPLIER + + // Process it. + var/pressure = environment.return_pressure() + if(pressure < get_trait(TRAIT_LOWKPA_TOLERANCE)|| pressure > get_trait(TRAIT_HIGHKPA_TOLERANCE)) + health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER + + if(abs(environment.temperature - get_trait(TRAIT_IDEAL_HEAT)) > get_trait(TRAIT_HEAT_TOLERANCE)) + health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER + + // Handle gas production. + if(exude_gasses && exude_gasses.len && !check_only) + for(var/gas in exude_gasses) + environment.adjust_gas(gas, max(1,round((exude_gasses[gas]*get_trait(TRAIT_POTENCY))/exude_gasses.len))) + + // Handle light requirements. + var/area/A = get_area(current_turf) + if(A) + var/light_available + if(A.lighting_use_dynamic) + light_available = max(0,min(10,current_turf.lighting_lumcount)-5) + else + light_available = 5 + if(abs(light_available - get_trait(TRAIT_IDEAL_LIGHT)) > get_trait(TRAIT_LIGHT_TOLERANCE)) + health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER + + return health_change + +/datum/seed/proc/apply_special_effect(var/mob/living/target,var/obj/item/thrown) + + var/impact = 1 + do_sting(target,thrown) + do_thorns(target,thrown) + + // Bluespace tomato code copied over from grown.dm. + if(get_trait(TRAIT_TELEPORTING)) + + //Plant potency determines radius of teleport. + var/outer_teleport_radius = get_trait(TRAIT_POTENCY)/5 + var/inner_teleport_radius = get_trait(TRAIT_POTENCY)/15 + + var/list/turfs = list() + if(inner_teleport_radius > 0) + for(var/turf/T in orange(target,outer_teleport_radius)) + if(get_dist(target,T) >= inner_teleport_radius) + turfs |= T + + if(turfs.len) + // Moves the mob, causes sparks. + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, get_turf(target)) + s.start() + var/turf/picked = get_turf(pick(turfs)) // Just in case... + new/obj/effect/decal/cleanable/molten_item(get_turf(target)) // Leave a pile of goo behind for dramatic effect... + target.loc = picked // And teleport them to the chosen location. + + impact = 1 + + return impact + +//Creates a random seed. MAKE SURE THE LINE HAS DIVERGED BEFORE THIS IS CALLED. +/datum/seed/proc/randomize() + + roundstart = 0 + seed_name = "strange plant" // TODO: name generator. + display_name = "strange plants" // TODO: name generator. + mysterious = 1 + seed_noun = pick("spores","nodes","cuttings","seeds") + products = list(pick(typesof(/obj/item/weapon/reagent_containers/food/snacks/grown)-/obj/item/weapon/reagent_containers/food/snacks/grown)) + + set_trait(TRAIT_POTENCY,rand(5,30),200,0) + set_trait(TRAIT_PRODUCT_ICON,pick(plant_product_sprites)) + set_trait(TRAIT_PLANT_ICON,pick(plant_sprites)) + set_trait(TRAIT_PLANT_COLOUR,"#[get_random_colour(0,75,190)]") + set_trait(TRAIT_PRODUCT_COLOUR,"#[get_random_colour(0,75,190)]") + update_growth_stages() + + if(prob(20)) + set_trait(TRAIT_HARVEST_REPEAT,1) + + if(prob(15)) + if(prob(15)) + set_trait(TRAIT_JUICY,2) + else + set_trait(TRAIT_JUICY,1) + + if(prob(5)) + set_trait(TRAIT_STINGS,1) + + if(prob(5)) + set_trait(TRAIT_PRODUCES_POWER,1) + + if(prob(1)) + set_trait(TRAIT_EXPLOSIVE,1) + else if(prob(1)) + set_trait(TRAIT_TELEPORTING,1) + + if(prob(5)) + consume_gasses = list() + var/gas = pick("oxygen","nitrogen","phoron","carbon_dioxide") + consume_gasses[gas] = rand(3,9) + + if(prob(5)) + exude_gasses = list() + var/gas = pick("oxygen","nitrogen","phoron","carbon_dioxide") + exude_gasses[gas] = rand(3,9) + + chems = list() + if(prob(80)) + chems["nutriment"] = list(rand(1,10),rand(10,20)) + + var/additional_chems = rand(0,5) + + if(additional_chems) + var/list/possible_chems = list( + "bicaridine", + "hyperzine", + "cryoxadone", + "blood", + "water", + "potassium", + "plasticide", + "mutationtoxin", + "amutationtoxin", + "inaprovaline", + "space_drugs", + "paroxetine", + "mercury", + "sugar", + "radium", + "ryetalyn", + "alkysine", + "thermite", + "tramadol", + "cryptobiolin", + "dermaline", + "dexalin", + "phoron", + "synaptizine", + "impedrezene", + "hyronalin", + "peridaxon", + "toxin", + "rezadone", + "ethylredoxrazine", + "slimejelly", + "cyanide", + "mindbreaker", + "stoxin" + ) + + for(var/x=1;x<=additional_chems;x++) + if(!possible_chems.len) + break + var/new_chem = pick(possible_chems) + possible_chems -= new_chem + chems[new_chem] = list(rand(1,10),rand(10,20)) + + if(prob(90)) + set_trait(TRAIT_REQUIRES_NUTRIENTS,1) + set_trait(TRAIT_NUTRIENT_CONSUMPTION,rand(100)*0.1) + else + set_trait(TRAIT_REQUIRES_NUTRIENTS,0) + + if(prob(90)) + set_trait(TRAIT_REQUIRES_WATER,1) + set_trait(TRAIT_WATER_CONSUMPTION,rand(10)) + else + set_trait(TRAIT_REQUIRES_WATER,0) + + set_trait(TRAIT_IDEAL_HEAT, rand(100,400)) + set_trait(TRAIT_HEAT_TOLERANCE, rand(10,30)) + set_trait(TRAIT_IDEAL_LIGHT, rand(2,10)) + set_trait(TRAIT_LIGHT_TOLERANCE, rand(2,7)) + set_trait(TRAIT_TOXINS_TOLERANCE, rand(2,7)) + set_trait(TRAIT_PEST_TOLERANCE, rand(2,7)) + set_trait(TRAIT_WEED_TOLERANCE, rand(2,7)) + set_trait(TRAIT_LOWKPA_TOLERANCE, rand(10,50)) + set_trait(TRAIT_HIGHKPA_TOLERANCE,rand(100,300)) + + if(prob(5)) + set_trait(TRAIT_ALTER_TEMP,rand(-5,5)) + + if(prob(1)) + set_trait(TRAIT_IMMUTABLE,-1) + + var/carnivore_prob = rand(100) + if(carnivore_prob < 5) + set_trait(TRAIT_CARNIVOROUS,2) + else if(carnivore_prob < 10) + set_trait(TRAIT_CARNIVOROUS,1) + + if(prob(10)) + set_trait(TRAIT_PARASITE,1) + + var/vine_prob = rand(100) + if(vine_prob < 5) + set_trait(TRAIT_SPREAD,2) + else if(vine_prob < 10) + set_trait(TRAIT_SPREAD,1) + + if(prob(5)) + set_trait(TRAIT_BIOLUM,1) + set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]") + + set_trait(TRAIT_ENDURANCE,rand(60,100)) + set_trait(TRAIT_YIELD,rand(3,15)) + set_trait(TRAIT_MATURATION,rand(5,15)) + set_trait(TRAIT_PRODUCTION,get_trait(TRAIT_MATURATION)+rand(2,5)) + +//Returns a key corresponding to an entry in the global seed list. +/datum/seed/proc/get_mutant_variant() + if(!mutants || !mutants.len || get_trait(TRAIT_IMMUTABLE) > 0) return 0 + return pick(mutants) + +//Mutates the plant overall (randomly). +/datum/seed/proc/mutate(var/degree,var/turf/source_turf) + + if(!degree || get_trait(TRAIT_IMMUTABLE) > 0) return + + source_turf.visible_message("\The [display_name] quivers!") + + //This looks like shit, but it's a lot easier to read/change this way. + var/total_mutations = rand(1,1+degree) + for(var/i = 0;i\The [display_name] withers rapidly!") + if(1) + set_trait(TRAIT_NUTRIENT_CONSUMPTION,get_trait(TRAIT_NUTRIENT_CONSUMPTION)+rand(-(degree*0.1),(degree*0.1)),5,0) + set_trait(TRAIT_WATER_CONSUMPTION, get_trait(TRAIT_WATER_CONSUMPTION) +rand(-degree,degree),50,0) + set_trait(TRAIT_JUICY, !get_trait(TRAIT_JUICY)) + set_trait(TRAIT_STINGS, !get_trait(TRAIT_STINGS)) + if(2) + set_trait(TRAIT_IDEAL_HEAT, get_trait(TRAIT_IDEAL_HEAT) + (rand(-5,5)*degree),800,70) + set_trait(TRAIT_HEAT_TOLERANCE, get_trait(TRAIT_HEAT_TOLERANCE) + (rand(-5,5)*degree),800,70) + set_trait(TRAIT_LOWKPA_TOLERANCE, get_trait(TRAIT_LOWKPA_TOLERANCE)+ (rand(-5,5)*degree),80,0) + set_trait(TRAIT_HIGHKPA_TOLERANCE, get_trait(TRAIT_HIGHKPA_TOLERANCE)+(rand(-5,5)*degree),500,110) + set_trait(TRAIT_EXPLOSIVE,1) + if(3) + set_trait(TRAIT_IDEAL_LIGHT, get_trait(TRAIT_IDEAL_LIGHT)+(rand(-1,1)*degree),30,0) + set_trait(TRAIT_LIGHT_TOLERANCE, get_trait(TRAIT_LIGHT_TOLERANCE)+(rand(-2,2)*degree),10,0) + if(4) + set_trait(TRAIT_TOXINS_TOLERANCE, get_trait(TRAIT_TOXINS_TOLERANCE)+(rand(-2,2)*degree),10,0) + if(5) + set_trait(TRAIT_WEED_TOLERANCE, get_trait(TRAIT_WEED_TOLERANCE)+(rand(-2,2)*degree),10, 0) + if(prob(degree*5)) + set_trait(TRAIT_CARNIVOROUS, get_trait(TRAIT_CARNIVOROUS)+rand(-degree,degree),2, 0) + if(get_trait(TRAIT_CARNIVOROUS)) + source_turf.visible_message("\The [display_name] shudders hungrily.") + if(6) + set_trait(TRAIT_WEED_TOLERANCE, get_trait(TRAIT_WEED_TOLERANCE)+(rand(-2,2)*degree),10, 0) + if(prob(degree*5)) + set_trait(TRAIT_PARASITE,!get_trait(TRAIT_PARASITE)) + if(7) + if(get_trait(TRAIT_YIELD) != -1) + set_trait(TRAIT_YIELD, get_trait(TRAIT_YIELD)+(rand(-2,2)*degree),10,0) + if(8) + set_trait(TRAIT_ENDURANCE, get_trait(TRAIT_ENDURANCE)+(rand(-5,5)*degree),100,10) + set_trait(TRAIT_PRODUCTION, get_trait(TRAIT_PRODUCTION)+(rand(-1,1)*degree),10, 1) + set_trait(TRAIT_POTENCY, get_trait(TRAIT_POTENCY)+(rand(-20,20)*degree),200, 0) + if(prob(degree*5)) + set_trait(TRAIT_SPREAD, get_trait(TRAIT_SPREAD)+rand(-1,1),2, 0) + source_turf.visible_message("\The [display_name] spasms visibly, shifting in the tray.") + if(9) + set_trait(TRAIT_MATURATION, get_trait(TRAIT_MATURATION)+(rand(-1,1)*degree),30, 0) + if(prob(degree*5)) + set_trait(TRAIT_HARVEST_REPEAT, !get_trait(TRAIT_HARVEST_REPEAT)) + if(10) + if(prob(degree*2)) + set_trait(TRAIT_BIOLUM, !get_trait(TRAIT_BIOLUM)) + if(get_trait(TRAIT_BIOLUM)) + source_turf.visible_message("\The [display_name] begins to glow!") + if(prob(degree*2)) + set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]") + source_turf.visible_message("\The [display_name]'s glow changes colour!") + else + source_turf.visible_message("\The [display_name]'s glow dims...") + if(11) + set_trait(TRAIT_TELEPORTING,1) + + return + +//Mutates a specific trait/set of traits. +/datum/seed/proc/apply_gene(var/datum/plantgene/gene) + + if(!gene || !gene.values || get_trait(TRAIT_IMMUTABLE) > 0) return + + // Splicing products has some detrimental effects on yield and lifespan. + // We handle this before we do the rest of the looping, as normal traits don't really include lists. + if(gene.genetype == GENE_PRODUCTS) + for(var/trait in list(TRAIT_YIELD, TRAIT_ENDURANCE)) + if(get_trait(trait) > 0) set_trait(trait,get_trait(trait),null,1,0.85) + + if(!products) products = list() + products |= gene.values["[TRAIT_PRODUCTS]"] + + if(!chems) chems = list() + + var/list/gene_value = gene.values["[TRAIT_CHEMS]"] + for(var/rid in gene_value) + + var/list/gene_chem = gene_value[rid] + + if(!chems[rid]) + chems[rid] = gene_chem.Copy() + continue + + for(var/i=1;i<=gene_chem.len;i++) + + if(isnull(gene_chem[i])) gene_chem[i] = 0 + + if(chems[rid][i]) + chems[rid][i] = max(1,round((gene_chem[i] + chems[rid][i])/2)) + else + chems[rid][i] = gene_chem[i] + + var/list/new_gasses = gene.values["[TRAIT_EXUDE_GASSES]"] + if(islist(new_gasses)) + if(!exude_gasses) exude_gasses = list() + exude_gasses |= new_gasses + for(var/gas in exude_gasses) + exude_gasses[gas] = max(1,round(exude_gasses[gas]*0.8)) + + for(var/trait in gene.values) + set_trait(trait,gene.values["[trait]"]) + + update_growth_stages() + +//Returns a list of the desired trait values. +/datum/seed/proc/get_gene(var/genetype) + + if(!genetype) return 0 + + var/list/traits_to_copy + var/datum/plantgene/P = new() + P.genetype = genetype + P.values = list() + + switch(genetype) + if(GENE_PRODUCTS) + P.values["[TRAIT_PRODUCTS]"] = products + P.values["[TRAIT_CHEMS]"] = chems + P.values["[TRAIT_EXUDE_GASSES]"] = exude_gasses + traits_to_copy = list(TRAIT_ALTER_TEMP,TRAIT_POTENCY,TRAIT_HARVEST_REPEAT,TRAIT_PRODUCES_POWER,TRAIT_JUICY,TRAIT_PRODUCT_ICON,TRAIT_PLANT_ICON) + if(GENE_CONSUMPTION) + P.values["[TRAIT_CONSUME_GASSES]"] = consume_gasses + traits_to_copy = list(TRAIT_REQUIRES_NUTRIENTS,TRAIT_NUTRIENT_CONSUMPTION,TRAIT_REQUIRES_WATER,TRAIT_WATER_CONSUMPTION,TRAIT_CARNIVOROUS,TRAIT_PARASITE,TRAIT_STINGS) + if(GENE_ENVIRONMENT) + traits_to_copy = list(TRAIT_IDEAL_HEAT,TRAIT_HEAT_TOLERANCE,TRAIT_IDEAL_LIGHT,TRAIT_LIGHT_TOLERANCE,TRAIT_LOWKPA_TOLERANCE,TRAIT_HIGHKPA_TOLERANCE,TRAIT_EXPLOSIVE) + if(GENE_RESISTANCE) + traits_to_copy = list(TRAIT_TOXINS_TOLERANCE,TRAIT_PEST_TOLERANCE,TRAIT_WEED_TOLERANCE) + if(GENE_VIGOUR) + traits_to_copy = list(TRAIT_ENDURANCE,TRAIT_YIELD,TRAIT_SPREAD,TRAIT_MATURATION,TRAIT_PRODUCTION,TRAIT_TELEPORTING) + if(GENE_PIGMENT) + traits_to_copy = list(TRAIT_PLANT_COLOUR,TRAIT_PRODUCT_COLOUR,TRAIT_BIOLUM,TRAIT_BIOLUM_COLOUR) + + for(var/trait in traits_to_copy) + P.values["[trait]"] = get_trait(trait) + return (P ? P : 0) + +//Place the plant products at the feet of the user. +/datum/seed/proc/harvest(var/mob/user,var/yield_mod,var/harvest_sample,var/force_amount) + + if(!user) + return + + var/got_product + if(!isnull(products) && products.len && get_trait(TRAIT_YIELD) > 0) + got_product = 1 + + if(!force_amount && !got_product && !harvest_sample) + if(istype(user)) user << "You fail to harvest anything useful." + else + if(istype(user)) user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]." + + //This may be a new line. Update the global if it is. + if(name == "new line" || !(name in seed_types)) + uid = seed_types.len + 1 + name = "[uid]" + seed_types[name] = src + + if(harvest_sample) + var/obj/item/seeds/seeds = new(get_turf(user)) + seeds.seed_type = name + seeds.update_seed() + return + + var/total_yield = 0 + if(!isnull(force_amount)) + total_yield = force_amount + else + if(get_trait(TRAIT_YIELD) > -1) + if(isnull(yield_mod) || yield_mod < 1) + yield_mod = 0 + total_yield = get_trait(TRAIT_YIELD) + else + total_yield = get_trait(TRAIT_YIELD) + rand(yield_mod) + total_yield = max(1,total_yield) + + currently_querying = list() + for(var/i = 0;iThe pod disgorges [product]!") + handle_living_product(product) + if(istype(product,/mob/living/simple_animal/mushroom)) // Gross. + var/mob/living/simple_animal/mushroom/mush = product + mush.seed = src + +// When the seed in this machine mutates/is modified, the tray seed value +// is set to a new datum copied from the original. This datum won't actually +// be put into the global datum list until the product is harvested, though. +/datum/seed/proc/diverge(var/modified) + + if(get_trait(TRAIT_IMMUTABLE) > 0) return + + //Set up some basic information. + var/datum/seed/new_seed = new + new_seed.name = "new line" + new_seed.uid = 0 + new_seed.roundstart = 0 + new_seed.can_self_harvest = can_self_harvest + + //Copy over everything else. + if(products) new_seed.products = products.Copy() + if(mutants) new_seed.mutants = mutants.Copy() + if(chems) new_seed.chems = chems.Copy() + if(consume_gasses) new_seed.consume_gasses = consume_gasses.Copy() + if(exude_gasses) new_seed.exude_gasses = exude_gasses.Copy() + + new_seed.seed_name = "[(roundstart ? "[(modified ? "modified" : "mutant")] " : "")][seed_name]" + new_seed.display_name = "[(roundstart ? "[(modified ? "modified" : "mutant")] " : "")][display_name]" + new_seed.seed_noun = seed_noun + new_seed.traits = traits.Copy() + new_seed.update_growth_stages() + return new_seed + +/datum/seed/proc/update_growth_stages() + if(get_trait(TRAIT_PLANT_ICON)) + growth_stages = plant_sprites[get_trait(TRAIT_PLANT_ICON)] + else + growth_stages = 0 diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index fd453f7f22..d8a6dc00ce 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1,778 +1,3 @@ -// Sprite lists. -var/global/list/plant_sprites = list() // List of all harvested product sprites. -var/global/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages. - -// Proc for creating a random seed type. -/proc/create_random_seed(var/survive_on_station) - var/datum/seed/seed = new() - seed.randomize() - seed.uid = seed_types.len + 1 - seed.name = "[seed.uid]" - seed_types[seed.name] = seed - - if(survive_on_station) - if(seed.consume_gasses) - seed.consume_gasses["phoron"] = null - seed.consume_gasses["carbon_dioxide"] = null - seed.set_trait(TRAIT_IDEAL_HEAT,293) - seed.set_trait(TRAIT_HEAT_TOLERANCE,20) - seed.set_trait(TRAIT_IDEAL_LIGHT,8) - seed.set_trait(TRAIT_LIGHT_TOLERANCE,5) - seed.set_trait(TRAIT_LOWKPA_TOLERANCE,25) - seed.set_trait(TRAIT_HIGHKPA_TOLERANCE,200) - - return seed - -// Debug for testing seed genes. -/client/proc/show_plant_genes() - set category = "Debug" - set name = "Show Plant Genes" - set desc = "Prints the round's plant gene masks." - - if(!holder) return - - if(!gene_tag_masks) - usr << "Gene masks not set." - return - - for(var/mask in gene_tag_masks) - usr << "[mask]: [gene_tag_masks[mask]]" - -// Predefined/roundstart varieties use a string key to make it -// easier to grab the new variety when mutating. Post-roundstart -// and mutant varieties use their uid converted to a string instead. -// Looks like shit but it's sort of necessary. - -proc/populate_seed_list() - - // Build the icon lists. - for(var/icostate in icon_states('icons/obj/hydroponics_growing.dmi')) - var/split = findtext(icostate,"-") - if(!split) - // invalid icon_state - continue - - var/ikey = copytext(icostate,(split+1)) - if(ikey == "dead") - // don't count dead icons - continue - ikey = text2num(ikey) - var/base = copytext(icostate,1,split) - - if(!(plant_sprites[base]) || (plant_sprites[base]\The [fruit]'s thorns pierce your [affecting.display_name] greedily!" - else - target << "\The [fruit]'s thorns pierce your flesh greedily!" - damage = get_trait(TRAIT_POTENCY)/2 - else - if(affecting) - target << "\The [fruit]'s thorns dig deeply into your [affecting.display_name]!" - else - target << "\The [fruit]'s thorns dig deeply into your flesh!" - damage = get_trait(TRAIT_POTENCY)/5 - else - return - - if(affecting) - affecting.take_damage(damage, 0) - affecting.add_autopsy_data("Thorns",damage) - else - target.adjustBruteLoss(damage) - target.UpdateDamageIcon() - target.updatehealth() - -// Adds reagents to a target. -/datum/seed/proc/do_sting(var/mob/living/carbon/human/target, var/obj/item/fruit) - if(!get_trait(TRAIT_STINGS)) - return - if(chems && chems.len) - target << "You are stung by \the [fruit]!" - for(var/rid in chems) - var/injecting = min(5,max(1,get_trait(TRAIT_POTENCY)/5)) - target.reagents.add_reagent(rid,injecting) - -//Splatter a turf. -/datum/seed/proc/splatter(var/turf/T,var/obj/item/thrown) - if(splat_type) - var/obj/effect/plant/splat = new splat_type(T, src) - if(!istype(splat)) // Plants handle their own stuff. - splat.name = "[thrown.name] [pick("smear","smudge","splatter")]" - if(get_trait(TRAIT_BIOLUM)) - if(get_trait(TRAIT_BIOLUM_COLOUR)) - splat.l_color = get_trait(TRAIT_BIOLUM_COLOUR) - splat.SetLuminosity(get_trait(TRAIT_BIOLUM)) - if(get_trait(TRAIT_PRODUCT_COLOUR)) - splat.color = get_trait(TRAIT_PRODUCT_COLOUR) - - if(chems) - for(var/mob/living/M in T.contents) - if(!M.reagents) - continue - for(var/chem in chems) - var/injecting = min(5,max(1,get_trait(TRAIT_POTENCY)/3)) - M.reagents.add_reagent(chem,injecting) - -//Applies an effect to a target atom. -/datum/seed/proc/thrown_at(var/obj/item/thrown,var/atom/target, var/force_explode) - - var/splatted - var/turf/origin_turf = get_turf(target) - - if(force_explode || get_trait(TRAIT_EXPLOSIVE)) - - var/flood_dist = min(10,max(1,get_trait(TRAIT_POTENCY)/15)) - var/list/open_turfs = list() - var/list/closed_turfs = list() - var/list/valid_turfs = list() - open_turfs |= origin_turf - - // Flood fill to get affected turfs. - while(open_turfs.len) - var/turf/T = pick(open_turfs) - open_turfs -= T - closed_turfs |= T - valid_turfs |= T - - for(var/dir in alldirs) - var/turf/neighbor = get_step(T,dir) - if(!neighbor || (neighbor in closed_turfs) || (neighbor in open_turfs)) - continue - if(neighbor.density || get_dist(neighbor,origin_turf) > flood_dist || istype(neighbor,/turf/space)) - closed_turfs |= neighbor - continue - // Check for windows. - var/no_los - var/turf/last_turf = origin_turf - for(var/turf/target_turf in getline(origin_turf,neighbor)) - if(!last_turf.Enter(target_turf) || target_turf.density) - no_los = 1 - break - last_turf = target_turf - if(!no_los && !origin_turf.Enter(neighbor)) - no_los = 1 - if(no_los) - closed_turfs |= neighbor - continue - open_turfs |= neighbor - - for(var/turf/T in valid_turfs) - for(var/mob/living/M in T.contents) - apply_special_effect(M) - splatter(T,thrown) - origin_turf.visible_message("The [thrown.name] explodes!") - del(thrown) - return - - if(istype(target,/mob/living)) - splatted = apply_special_effect(target,thrown) - else if(istype(target,/turf)) - splatted = 1 - for(var/mob/living/M in target.contents) - apply_special_effect(M) - - if(get_trait(TRAIT_JUICY) && splatted) - splatter(origin_turf,thrown) - origin_turf.visible_message("The [thrown.name] splatters against [target]!") - del(thrown) - -/datum/seed/proc/handle_environment(var/turf/current_turf, var/datum/gas_mixture/environment, var/check_only) - - var/health_change = 0 - // Handle gas consumption. - if(consume_gasses && consume_gasses.len) - var/missing_gas = 0 - for(var/gas in consume_gasses) - if(environment && environment.gas && environment.gas[gas] && \ - environment.gas[gas] >= consume_gasses[gas]) - if(!check_only) - environment.adjust_gas(gas,-consume_gasses[gas],1) - else - missing_gas++ - - if(missing_gas > 0) - health_change += missing_gas * HYDRO_SPEED_MULTIPLIER - - // Process it. - var/pressure = environment.return_pressure() - if(pressure < get_trait(TRAIT_LOWKPA_TOLERANCE)|| pressure > get_trait(TRAIT_HIGHKPA_TOLERANCE)) - health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER - - if(abs(environment.temperature - get_trait(TRAIT_IDEAL_HEAT)) > get_trait(TRAIT_HEAT_TOLERANCE)) - health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER - - // Handle gas production. - if(exude_gasses && exude_gasses.len && !check_only) - for(var/gas in exude_gasses) - environment.adjust_gas(gas, max(1,round((exude_gasses[gas]*get_trait(TRAIT_POTENCY))/exude_gasses.len))) - - // Handle light requirements. - var/area/A = get_area(current_turf) - if(A) - var/light_available - if(A.lighting_use_dynamic) - light_available = max(0,min(10,current_turf.lighting_lumcount)-5) - else - light_available = 5 - if(abs(light_available - get_trait(TRAIT_IDEAL_LIGHT)) > get_trait(TRAIT_LIGHT_TOLERANCE)) - health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER - - return health_change - -/datum/seed/proc/apply_special_effect(var/mob/living/target,var/obj/item/thrown) - - var/impact = 1 - do_sting(target,thrown) - do_thorns(target,thrown) - - // Bluespace tomato code copied over from grown.dm. - if(get_trait(TRAIT_TELEPORTING)) - - //Plant potency determines radius of teleport. - var/outer_teleport_radius = get_trait(TRAIT_POTENCY)/5 - var/inner_teleport_radius = get_trait(TRAIT_POTENCY)/15 - - var/list/turfs = list() - if(inner_teleport_radius > 0) - for(var/turf/T in orange(target,outer_teleport_radius)) - if(get_dist(target,T) >= inner_teleport_radius) - turfs |= T - - if(turfs.len) - // Moves the mob, causes sparks. - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, get_turf(target)) - s.start() - var/turf/picked = get_turf(pick(turfs)) // Just in case... - new/obj/effect/decal/cleanable/molten_item(get_turf(target)) // Leave a pile of goo behind for dramatic effect... - target.loc = picked // And teleport them to the chosen location. - - impact = 1 - - return impact - -//Creates a random seed. MAKE SURE THE LINE HAS DIVERGED BEFORE THIS IS CALLED. -/datum/seed/proc/randomize() - - roundstart = 0 - seed_name = "strange plant" // TODO: name generator. - display_name = "strange plants" // TODO: name generator. - mysterious = 1 - seed_noun = pick("spores","nodes","cuttings","seeds") - products = list(pick(typesof(/obj/item/weapon/reagent_containers/food/snacks/grown)-/obj/item/weapon/reagent_containers/food/snacks/grown)) - - set_trait(TRAIT_POTENCY,rand(5,30),200,0) - set_trait(TRAIT_PRODUCT_ICON,pick(plant_product_sprites)) - set_trait(TRAIT_PLANT_ICON,pick(plant_sprites)) - set_trait(TRAIT_PLANT_COLOUR,"#[get_random_colour(0,75,190)]") - set_trait(TRAIT_PRODUCT_COLOUR,"#[get_random_colour(0,75,190)]") - update_growth_stages() - - if(prob(20)) - set_trait(TRAIT_HARVEST_REPEAT,1) - - if(prob(15)) - if(prob(15)) - set_trait(TRAIT_JUICY,2) - else - set_trait(TRAIT_JUICY,1) - - if(prob(5)) - set_trait(TRAIT_STINGS,1) - - if(prob(5)) - set_trait(TRAIT_PRODUCES_POWER,1) - - if(prob(1)) - set_trait(TRAIT_EXPLOSIVE,1) - else if(prob(1)) - set_trait(TRAIT_TELEPORTING,1) - - if(prob(5)) - consume_gasses = list() - var/gas = pick("oxygen","nitrogen","phoron","carbon_dioxide") - consume_gasses[gas] = rand(3,9) - - if(prob(5)) - exude_gasses = list() - var/gas = pick("oxygen","nitrogen","phoron","carbon_dioxide") - exude_gasses[gas] = rand(3,9) - - chems = list() - if(prob(80)) - chems["nutriment"] = list(rand(1,10),rand(10,20)) - - var/additional_chems = rand(0,5) - - if(additional_chems) - var/list/possible_chems = list( - "bicaridine", - "hyperzine", - "cryoxadone", - "blood", - "water", - "potassium", - "plasticide", - "mutationtoxin", - "amutationtoxin", - "inaprovaline", - "space_drugs", - "paroxetine", - "mercury", - "sugar", - "radium", - "ryetalyn", - "alkysine", - "thermite", - "tramadol", - "cryptobiolin", - "dermaline", - "dexalin", - "phoron", - "synaptizine", - "impedrezene", - "hyronalin", - "peridaxon", - "toxin", - "rezadone", - "ethylredoxrazine", - "slimejelly", - "cyanide", - "mindbreaker", - "stoxin" - ) - - for(var/x=1;x<=additional_chems;x++) - if(!possible_chems.len) - break - var/new_chem = pick(possible_chems) - possible_chems -= new_chem - chems[new_chem] = list(rand(1,10),rand(10,20)) - - if(prob(90)) - set_trait(TRAIT_REQUIRES_NUTRIENTS,1) - set_trait(TRAIT_NUTRIENT_CONSUMPTION,rand(100)*0.1) - else - set_trait(TRAIT_REQUIRES_NUTRIENTS,0) - - if(prob(90)) - set_trait(TRAIT_REQUIRES_WATER,1) - set_trait(TRAIT_WATER_CONSUMPTION,rand(10)) - else - set_trait(TRAIT_REQUIRES_WATER,0) - - set_trait(TRAIT_IDEAL_HEAT, rand(100,400)) - set_trait(TRAIT_HEAT_TOLERANCE, rand(10,30)) - set_trait(TRAIT_IDEAL_LIGHT, rand(2,10)) - set_trait(TRAIT_LIGHT_TOLERANCE, rand(2,7)) - set_trait(TRAIT_TOXINS_TOLERANCE, rand(2,7)) - set_trait(TRAIT_PEST_TOLERANCE, rand(2,7)) - set_trait(TRAIT_WEED_TOLERANCE, rand(2,7)) - set_trait(TRAIT_LOWKPA_TOLERANCE, rand(10,50)) - set_trait(TRAIT_HIGHKPA_TOLERANCE,rand(100,300)) - - if(prob(5)) - set_trait(TRAIT_ALTER_TEMP,rand(-5,5)) - - if(prob(1)) - set_trait(TRAIT_IMMUTABLE,-1) - - var/carnivore_prob = rand(100) - if(carnivore_prob < 5) - set_trait(TRAIT_CARNIVOROUS,2) - else if(carnivore_prob < 10) - set_trait(TRAIT_CARNIVOROUS,1) - - if(prob(10)) - set_trait(TRAIT_PARASITE,1) - - var/vine_prob = rand(100) - if(vine_prob < 5) - set_trait(TRAIT_SPREAD,2) - else if(vine_prob < 10) - set_trait(TRAIT_SPREAD,1) - - if(prob(5)) - set_trait(TRAIT_BIOLUM,1) - set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]") - - set_trait(TRAIT_ENDURANCE,rand(60,100)) - set_trait(TRAIT_YIELD,rand(3,15)) - set_trait(TRAIT_MATURATION,rand(5,15)) - set_trait(TRAIT_PRODUCTION,get_trait(TRAIT_MATURATION)+rand(2,5)) - -//Returns a key corresponding to an entry in the global seed list. -/datum/seed/proc/get_mutant_variant() - if(!mutants || !mutants.len || get_trait(TRAIT_IMMUTABLE) > 0) return 0 - return pick(mutants) - -//Mutates the plant overall (randomly). -/datum/seed/proc/mutate(var/degree,var/turf/source_turf) - - if(!degree || get_trait(TRAIT_IMMUTABLE) > 0) return - - source_turf.visible_message("\The [display_name] quivers!") - - //This looks like shit, but it's a lot easier to read/change this way. - var/total_mutations = rand(1,1+degree) - for(var/i = 0;i\The [display_name] withers rapidly!") - if(1) - set_trait(TRAIT_NUTRIENT_CONSUMPTION,get_trait(TRAIT_NUTRIENT_CONSUMPTION)+rand(-(degree*0.1),(degree*0.1)),5,0) - set_trait(TRAIT_WATER_CONSUMPTION, get_trait(TRAIT_WATER_CONSUMPTION) +rand(-degree,degree),50,0) - set_trait(TRAIT_JUICY, !get_trait(TRAIT_JUICY)) - set_trait(TRAIT_STINGS, !get_trait(TRAIT_STINGS)) - if(2) - set_trait(TRAIT_IDEAL_HEAT, get_trait(TRAIT_IDEAL_HEAT) + (rand(-5,5)*degree),800,70) - set_trait(TRAIT_HEAT_TOLERANCE, get_trait(TRAIT_HEAT_TOLERANCE) + (rand(-5,5)*degree),800,70) - set_trait(TRAIT_LOWKPA_TOLERANCE, get_trait(TRAIT_LOWKPA_TOLERANCE)+ (rand(-5,5)*degree),80,0) - set_trait(TRAIT_HIGHKPA_TOLERANCE, get_trait(TRAIT_HIGHKPA_TOLERANCE)+(rand(-5,5)*degree),500,110) - set_trait(TRAIT_EXPLOSIVE,1) - if(3) - set_trait(TRAIT_IDEAL_LIGHT, get_trait(TRAIT_IDEAL_LIGHT)+(rand(-1,1)*degree),30,0) - set_trait(TRAIT_LIGHT_TOLERANCE, get_trait(TRAIT_LIGHT_TOLERANCE)+(rand(-2,2)*degree),10,0) - if(4) - set_trait(TRAIT_TOXINS_TOLERANCE, get_trait(TRAIT_TOXINS_TOLERANCE)+(rand(-2,2)*degree),10,0) - if(5) - set_trait(TRAIT_WEED_TOLERANCE, get_trait(TRAIT_WEED_TOLERANCE)+(rand(-2,2)*degree),10, 0) - if(prob(degree*5)) - set_trait(TRAIT_CARNIVOROUS, get_trait(TRAIT_CARNIVOROUS)+rand(-degree,degree),2, 0) - if(get_trait(TRAIT_CARNIVOROUS)) - source_turf.visible_message("\The [display_name] shudders hungrily.") - if(6) - set_trait(TRAIT_WEED_TOLERANCE, get_trait(TRAIT_WEED_TOLERANCE)+(rand(-2,2)*degree),10, 0) - if(prob(degree*5)) - set_trait(TRAIT_PARASITE,!get_trait(TRAIT_PARASITE)) - if(7) - if(get_trait(TRAIT_YIELD) != -1) - set_trait(TRAIT_YIELD, get_trait(TRAIT_YIELD)+(rand(-2,2)*degree),10,0) - if(8) - set_trait(TRAIT_ENDURANCE, get_trait(TRAIT_ENDURANCE)+(rand(-5,5)*degree),100,10) - set_trait(TRAIT_PRODUCTION, get_trait(TRAIT_PRODUCTION)+(rand(-1,1)*degree),10, 1) - set_trait(TRAIT_POTENCY, get_trait(TRAIT_POTENCY)+(rand(-20,20)*degree),200, 0) - if(prob(degree*5)) - set_trait(TRAIT_SPREAD, get_trait(TRAIT_SPREAD)+rand(-1,1),2, 0) - source_turf.visible_message("\The [display_name] spasms visibly, shifting in the tray.") - if(9) - set_trait(TRAIT_MATURATION, get_trait(TRAIT_MATURATION)+(rand(-1,1)*degree),30, 0) - if(prob(degree*5)) - set_trait(TRAIT_HARVEST_REPEAT, !get_trait(TRAIT_HARVEST_REPEAT)) - if(10) - if(prob(degree*2)) - set_trait(TRAIT_BIOLUM, !get_trait(TRAIT_BIOLUM)) - if(get_trait(TRAIT_BIOLUM)) - source_turf.visible_message("\The [display_name] begins to glow!") - if(prob(degree*2)) - set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]") - source_turf.visible_message("\The [display_name]'s glow changes colour!") - else - source_turf.visible_message("\The [display_name]'s glow dims...") - if(11) - set_trait(TRAIT_TELEPORTING,1) - - return - -//Mutates a specific trait/set of traits. -/datum/seed/proc/apply_gene(var/datum/plantgene/gene) - - if(!gene || !gene.values || get_trait(TRAIT_IMMUTABLE) > 0) return - - // Splicing products has some detrimental effects on yield and lifespan. - // We handle this before we do the rest of the looping, as normal traits don't really include lists. - if(gene.genetype == GENE_PRODUCTS) - for(var/trait in list(TRAIT_YIELD, TRAIT_ENDURANCE)) - if(get_trait(trait) > 0) set_trait(trait,get_trait(trait),null,1,0.85) - - if(!products) products = list() - products |= gene.values["[TRAIT_PRODUCTS]"] - - if(!chems) chems = list() - - var/list/gene_value = gene.values["[TRAIT_CHEMS]"] - for(var/rid in gene_value) - - var/list/gene_chem = gene_value[rid] - - if(!chems[rid]) - chems[rid] = gene_chem.Copy() - continue - - for(var/i=1;i<=gene_chem.len;i++) - - if(isnull(gene_chem[i])) gene_chem[i] = 0 - - if(chems[rid][i]) - chems[rid][i] = max(1,round((gene_chem[i] + chems[rid][i])/2)) - else - chems[rid][i] = gene_chem[i] - - var/list/new_gasses = gene.values["[TRAIT_EXUDE_GASSES]"] - if(islist(new_gasses)) - if(!exude_gasses) exude_gasses = list() - exude_gasses |= new_gasses - for(var/gas in exude_gasses) - exude_gasses[gas] = max(1,round(exude_gasses[gas]*0.8)) - - for(var/trait in gene.values) - set_trait(trait,gene.values["[trait]"]) - - update_growth_stages() - -//Returns a list of the desired trait values. -/datum/seed/proc/get_gene(var/genetype) - - if(!genetype) return 0 - - var/list/traits_to_copy - var/datum/plantgene/P = new() - P.genetype = genetype - P.values = list() - - switch(genetype) - if(GENE_PRODUCTS) - P.values["[TRAIT_PRODUCTS]"] = products - P.values["[TRAIT_CHEMS]"] = chems - P.values["[TRAIT_EXUDE_GASSES]"] = exude_gasses - traits_to_copy = list(TRAIT_ALTER_TEMP,TRAIT_POTENCY,TRAIT_HARVEST_REPEAT,TRAIT_PRODUCES_POWER,TRAIT_JUICY,TRAIT_PRODUCT_ICON,TRAIT_PLANT_ICON) - if(GENE_CONSUMPTION) - P.values["[TRAIT_CONSUME_GASSES]"] = consume_gasses - traits_to_copy = list(TRAIT_REQUIRES_NUTRIENTS,TRAIT_NUTRIENT_CONSUMPTION,TRAIT_REQUIRES_WATER,TRAIT_WATER_CONSUMPTION,TRAIT_CARNIVOROUS,TRAIT_PARASITE,TRAIT_STINGS) - if(GENE_ENVIRONMENT) - traits_to_copy = list(TRAIT_IDEAL_HEAT,TRAIT_HEAT_TOLERANCE,TRAIT_IDEAL_LIGHT,TRAIT_LIGHT_TOLERANCE,TRAIT_LOWKPA_TOLERANCE,TRAIT_HIGHKPA_TOLERANCE,TRAIT_EXPLOSIVE) - if(GENE_RESISTANCE) - traits_to_copy = list(TRAIT_TOXINS_TOLERANCE,TRAIT_PEST_TOLERANCE,TRAIT_WEED_TOLERANCE) - if(GENE_VIGOUR) - traits_to_copy = list(TRAIT_ENDURANCE,TRAIT_YIELD,TRAIT_SPREAD,TRAIT_MATURATION,TRAIT_PRODUCTION,TRAIT_TELEPORTING) - if(GENE_PIGMENT) - traits_to_copy = list(TRAIT_PLANT_COLOUR,TRAIT_PRODUCT_COLOUR,TRAIT_BIOLUM,TRAIT_BIOLUM_COLOUR) - - for(var/trait in traits_to_copy) - P.values["[trait]"] = get_trait(trait) - return (P ? P : 0) - -//Place the plant products at the feet of the user. -/datum/seed/proc/harvest(var/mob/user,var/yield_mod,var/harvest_sample,var/force_amount) - - if(!user) - return - - var/got_product - if(!isnull(products) && products.len && get_trait(TRAIT_YIELD) > 0) - got_product = 1 - - if(!force_amount && !got_product && !harvest_sample) - if(istype(user)) user << "You fail to harvest anything useful." - else - if(istype(user)) user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]." - - //This may be a new line. Update the global if it is. - if(name == "new line" || !(name in seed_types)) - uid = seed_types.len + 1 - name = "[uid]" - seed_types[name] = src - - if(harvest_sample) - var/obj/item/seeds/seeds = new(get_turf(user)) - seeds.seed_type = name - seeds.update_seed() - return - - var/total_yield = 0 - if(!isnull(force_amount)) - total_yield = force_amount - else - if(get_trait(TRAIT_YIELD) > -1) - if(isnull(yield_mod) || yield_mod < 1) - yield_mod = 0 - total_yield = get_trait(TRAIT_YIELD) - else - total_yield = get_trait(TRAIT_YIELD) + rand(yield_mod) - total_yield = max(1,total_yield) - - currently_querying = list() - for(var/i = 0;iThe pod disgorges [product]!") - handle_living_product(product) - if(istype(product,/mob/living/simple_animal/mushroom)) // Gross. - var/mob/living/simple_animal/mushroom/mush = product - mush.seed = src - -// When the seed in this machine mutates/is modified, the tray seed value -// is set to a new datum copied from the original. This datum won't actually -// be put into the global datum list until the product is harvested, though. -/datum/seed/proc/diverge(var/modified) - - if(get_trait(TRAIT_IMMUTABLE) > 0) return - - //Set up some basic information. - var/datum/seed/new_seed = new - new_seed.name = "new line" - new_seed.uid = 0 - new_seed.roundstart = 0 - new_seed.can_self_harvest = can_self_harvest - - //Copy over everything else. - if(products) new_seed.products = products.Copy() - if(mutants) new_seed.mutants = mutants.Copy() - if(chems) new_seed.chems = chems.Copy() - if(consume_gasses) new_seed.consume_gasses = consume_gasses.Copy() - if(exude_gasses) new_seed.exude_gasses = exude_gasses.Copy() - - new_seed.seed_name = "[(roundstart ? "[(modified ? "modified" : "mutant")] " : "")][seed_name]" - new_seed.display_name = "[(roundstart ? "[(modified ? "modified" : "mutant")] " : "")][display_name]" - new_seed.seed_noun = seed_noun - new_seed.traits = traits.Copy() - new_seed.update_growth_stages() - return new_seed - -/datum/seed/proc/update_growth_stages() - if(get_trait(TRAIT_PLANT_ICON)) - growth_stages = plant_sprites[get_trait(TRAIT_PLANT_ICON)] - else - growth_stages = 0 - -// Actual roundstart seed types after this point. // Chili plants/variants. /datum/seed/chili name = "chili" diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seed_packets.dm similarity index 100% rename from code/modules/hydroponics/seeds.dm rename to code/modules/hydroponics/seed_packets.dm diff --git a/code/modules/hydroponics/spread_plant.dm b/code/modules/hydroponics/spreading/spreading.dm similarity index 65% rename from code/modules/hydroponics/spread_plant.dm rename to code/modules/hydroponics/spreading/spreading.dm index 9130726789..e60b825278 100644 --- a/code/modules/hydroponics/spread_plant.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -1,5 +1,5 @@ #define DEFAULT_SEED "glowshroom" -#define VINE_GROWTH_STAGES 4 +#define VINE_GROWTH_STAGES 5 /proc/spacevine_infestation() spawn() //to stop the secrets panel hanging @@ -23,6 +23,7 @@ anchored = 1 opacity = 0 density = 0 + color = DEAD_PLANT_COLOUR /obj/effect/dead_plant/attackby() ..() @@ -37,7 +38,7 @@ density = 0 icon = 'icons/obj/hydroponics_growing.dmi' icon_state = "bush4-1" - layer = 2 + layer = 3 var/health = 10 var/max_health = 100 @@ -47,6 +48,7 @@ var/list/children = list() var/obj/effect/plant/parent + var/mob/living/buckled_mob var/datum/seed/seed var/floor = 0 var/spread_chance = 40 @@ -68,12 +70,11 @@ del(src) return - layer = rand(3,4) // Will display over pipes/machines at all times and mobs half the time. name = seed.display_name max_health = round(seed.get_trait(TRAIT_ENDURANCE)/2) if(seed.get_trait(TRAIT_SPREAD)==2) max_growth = VINE_GROWTH_STAGES - growth_threshold = round(max_health/VINE_GROWTH_STAGES) + growth_threshold = max_health/VINE_GROWTH_STAGES icon = 'icons/obj/hydroponics_vines.dmi' growth_type = 2 // Vines by default. if(seed.get_trait(TRAIT_CARNIVOROUS) == 2) @@ -85,7 +86,7 @@ growth_type = 4 // Mold else max_growth = seed.growth_stages - growth_threshold = round(max_health/seed.growth_stages) + growth_threshold = max_health/seed.growth_stages if(max_growth > 2 && prob(50)) max_growth-- //Ensure some variation in final sprite, makes the carpet of crap look less wonky. @@ -143,94 +144,20 @@ else icon_state = "[seed.get_trait(TRAIT_PLANT_ICON)]-[growth]" + layer = (growth == max_growth ? 4 : 3) + /obj/effect/plant/Del() + if(children && children.len) + die_off(null,1) processing_objects -= src ..() -/obj/effect/plant/proc/die_off(var/no_remains) - // Remove ourselves from our parent. - if(parent && parent.children) - parent.children -= src - // Kill off any of our children (and add an added bonus, other plants in this area) - for(var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant in get_turf(src)) - plant.dead = 1 - plant.update_icon() - // Cause the plants around us to update. - if(children && children.len) - for(var/obj/effect/plant/child in children) - child.die_off() - for(var/obj/effect/plant/neighbor in view(1,src)) - neighbor.hibernating = 0 - if(!no_remains && !(locate(/obj/effect/dead_plant) in get_turf(src))) - var/obj/effect/dead_plant/plant_remains = new(get_turf(src)) - plant_remains.icon = src.icon - plant_remains.icon_state = src.icon_state - del(src) - /obj/effect/plant/proc/get_dist_to_parent(var/current_count) if(!parent) return current_count current_count++ return parent.get_dist_to_parent(current_count) -/obj/effect/plant/process() - - // Something is very wrong, kill ourselves. - if(!seed) - die_off() - - // Handle life. - var/turf/simulated/T = get_turf(src) - if(istype(T)) - health -= seed.handle_environment(T, T.return_air(),1) - if(health < max_health) - health += rand(3,5) - if(health > max_health) - health = max_health - refresh_icon() - - // Damaged, young hibernating or too far from parent, no chance of spreading. - if(health < (max_health/2) || hibernating || (parent && (get_dist_to_parent(0) > spread_distance))) - return - - // Count our neighbors and possible locations for spreading. - var/list/possible_locs = list() - var/count = 0 - for(var/turf/simulated/floor/floor in view(1,src)) - if((locate(/obj/effect/dead_plant) in floor.contents) || !floor.Enter(src) || floor.density) - continue - if(locate(/obj/effect/plant) in floor.contents) - count++ - continue - possible_locs |= floor - - //Entirely surrounded, try to spawn an actual plant. - if(count>=8 && prob(5)) - if(!(locate(/obj/machinery/portable_atmospherics/hydroponics/soil/invisible) in T.contents)) - var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/new_plant = new(T,seed) - new_plant.age = seed.get_trait(TRAIT_MATURATION)-5 - new_plant.update_icon() - if(growth_type==0) //Vines do not become invisible. - invisibility = INVISIBILITY_MAXIMUM - - if(prob(spread_chance)) - for(var/i=1,i<=seed.get_trait(TRAIT_YIELD),i++) - if(!possible_locs.len) - break - if(prob(spread_into_adjacent)) - var/turf/target_turf = pick(possible_locs) - possible_locs -= target_turf - var/obj/effect/plant/child = new(target_turf, seed) - child.parent = get_root() - child.parent.children |= child - - /* - var/need_hibernate = 0 - if(need_hibernate) - hibernating = 1 - world << "[src] at [x],[y] is hibernating" - */ - /obj/effect/plant/proc/get_root() if(parent) return parent.get_root() @@ -303,4 +230,7 @@ /obj/effect/plant/proc/check_health() if(health <= 0) - die_off() \ No newline at end of file + die_off(1) + +/obj/effect/plant/proc/is_mature() + return (health < (max_health/3)) \ No newline at end of file diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm new file mode 100644 index 0000000000..6d0957e650 --- /dev/null +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -0,0 +1,75 @@ +/obj/effect/plant/process() + + // Something is very wrong, kill ourselves. + if(!seed) + die_off() + + // Handle life. + var/turf/simulated/T = get_turf(src) + if(istype(T)) + health -= seed.handle_environment(T, T.return_air(),1) + if(health < max_health) + health += rand(3,5) + if(health > max_health) + health = max_health + refresh_icon() + + // Damaged, young hibernating or too far from parent, no chance of spreading. + if(is_mature() || hibernating || (parent && (get_dist_to_parent(0) > spread_distance))) + return + + // Count our neighbors and possible locations for spreading. + var/list/possible_locs = list() + var/count = 0 + for(var/turf/simulated/floor/floor in view(1,src)) + if((locate(/obj/effect/dead_plant) in floor.contents) || !floor.Enter(src) || floor.density) + continue + if(locate(/obj/effect/plant) in floor.contents) + count++ + continue + possible_locs |= floor + + //Entirely surrounded, try to spawn an actual plant. + if(count>=8) + if(!(locate(/obj/machinery/portable_atmospherics/hydroponics/soil/invisible) in T.contents)) + var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/new_plant = new(T,seed) + new_plant.age = seed.get_trait(TRAIT_MATURATION)-1 + new_plant.update_icon() + if(growth_type==0) //Vines do not become invisible. + invisibility = INVISIBILITY_MAXIMUM + else + new_plant.layer = 4.1 + + if(prob(spread_chance)) + for(var/i=1,i<=seed.get_trait(TRAIT_YIELD),i++) + if(!possible_locs.len) + hibernating = 1 + world << "[src] at [x],[y] is hibernating" + break + if(prob(spread_into_adjacent)) + var/turf/target_turf = pick(possible_locs) + possible_locs -= target_turf + var/obj/effect/plant/child = new(target_turf, seed) + child.parent = get_root() + child.parent.children |= child + +/obj/effect/plant/proc/die_off(var/no_remains, var/no_del) + // Remove ourselves from our parent. + if(parent && parent.children) + parent.children -= src + // Kill off any of our children (and add an added bonus, other plants in this area) + for(var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant in get_turf(src)) + plant.dead = 1 + plant.update_icon() + // Cause the plants around us to update. + if(children && children.len) + for(var/obj/effect/plant/child in children) + child.die_off() + for(var/obj/effect/plant/neighbor in view(1,src)) + neighbor.hibernating = 0 + if(!no_remains && !(locate(/obj/effect/dead_plant) in get_turf(src))) + var/obj/effect/dead_plant/plant_remains = new(get_turf(src)) + plant_remains.icon = src.icon + plant_remains.icon_state = src.icon_state + if(!no_del) + del(src) \ No newline at end of file diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm new file mode 100644 index 0000000000..1d30c0bbf2 --- /dev/null +++ b/code/modules/hydroponics/spreading/spreading_response.dm @@ -0,0 +1,74 @@ +/obj/effect/plant/HasProximity(var/atom/movable/AM) + + hibernating = 0 + + if(!is_mature() || seed.get_trait(TRAIT_SPREAD) != 2) + return + + var/mob/living/M = AM + if(!istype(M)) + return + + if(!buckled_mob && !M.buckled && !M.anchored && prob(round(seed.get_trait(TRAIT_POTENCY)/2))) + entangle(M) + +/obj/effect/plant/attack_hand(mob/user as mob) + hibernating = 0 + manual_unbuckle(user) + +/obj/effect/plant/proc/trodden_on(var/mob/living/victim) + hibernating = 0 + world << "Blah." + if(!is_mature()) + return + var/mob/living/carbon/human/H = victim + if(!istype(H) || H.shoes) + return + seed.do_thorns(victim,src) + seed.do_sting(victim,src,pick("r_foot","l_foot","r_leg","l_leg")) + +/obj/effect/plant/proc/unbuckle() + if(buckled_mob) + if(buckled_mob.buckled == src) + buckled_mob.buckled = null + buckled_mob.anchored = initial(buckled_mob.anchored) + buckled_mob.update_canmove() + buckled_mob = null + return + +/obj/effect/plant/proc/manual_unbuckle(mob/user as mob) + if(buckled_mob) + if(prob(seed ? min(max(0,100 - seed.get_trait(TRAIT_POTENCY)/2),100) : 50)) + if(buckled_mob.buckled == src) + if(buckled_mob != user) + buckled_mob.visible_message(\ + "[user.name] frees [buckled_mob.name] from \the [src].",\ + "[user.name] frees you from \the [src].",\ + "You hear shredding and ripping.") + else + buckled_mob.visible_message(\ + "[buckled_mob.name] struggles free of \the [src].",\ + "You untangle \the [src] from around yourself.",\ + "You hear shredding and ripping.") + unbuckle() + else + var/text = pick("rip","tear","pull") + user.visible_message(\ + "[user.name] [text]s at \the [src].",\ + "You [text] at \the [src].",\ + "You hear shredding and ripping.") + return + +/obj/effect/plant/proc/entangle(var/mob/living/victim) + + if(buckled_mob) + return + + victim.buckled = src + victim.update_canmove() + buckled_mob = victim + + if(victim.loc != src.loc) + src.visible_message("Tendrils lash out from \the [src] and drag \the [victim] in!") + victim.loc = src.loc + victim << "Tendrils [pick("wind", "tangle", "tighten")] around you!" diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/trays/tray.dm similarity index 64% rename from code/modules/hydroponics/hydro_tray.dm rename to code/modules/hydroponics/trays/tray.dm index e8414b59da..6c6f0ca142 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -174,133 +174,6 @@ else return 0 -/obj/machinery/portable_atmospherics/hydroponics/process() - - //Do this even if we're not ready for a plant cycle. - process_reagents() - - // Update values every cycle rather than every process() tick. - if(force_update) - force_update = 0 - else if(world.time < (lastcycle + cycledelay)) - return - lastcycle = world.time - - // Mutation level drops each main tick. - mutation_level -= rand(2,4) - - // Weeds like water and nutrients, there's a chance the weed population will increase. - // Bonus chance if the tray is unoccupied. - if(waterlevel > 10 && nutrilevel > 2 && prob(isnull(seed) ? 5 : 1)) - weedlevel += 1 * HYDRO_SPEED_MULTIPLIER - - // There's a chance for a weed explosion to happen if the weeds take over. - // Plants that are themselves weeds (weed_tolerance > 10) are unaffected. - if (weedlevel >= 10 && prob(10)) - if(!seed || weedlevel >= seed.get_trait(TRAIT_WEED_TOLERANCE)) - weed_invasion() - - // If there is no seed data (and hence nothing planted), - // or the plant is dead, process nothing further. - if(!seed || dead) - if(mechanical) update_icon() //Harvesting would fail to set alert icons properly. - return - - // Advance plant age. - if(prob(30)) age += 1 * HYDRO_SPEED_MULTIPLIER - - //Highly mutable plants have a chance of mutating every tick. - if(seed.get_trait(TRAIT_IMMUTABLE) == -1) - var/mut_prob = rand(1,100) - if(mut_prob <= 5) mutate(mut_prob == 1 ? 2 : 1) - - // Other plants also mutate if enough mutagenic compounds have been added. - if(!seed.get_trait(TRAIT_IMMUTABLE)) - if(prob(min(mutation_level,100))) - mutate((rand(100) < 15) ? 2 : 1) - mutation_level = 0 - - // Maintain tray nutrient and water levels. - if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) > 0 && nutrilevel > 0 && prob(25)) - nutrilevel -= max(0,seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) * HYDRO_SPEED_MULTIPLIER) - if(seed.get_trait(TRAIT_WATER_CONSUMPTION) > 0 && waterlevel > 0 && prob(25)) - waterlevel -= max(0,seed.get_trait(TRAIT_WATER_CONSUMPTION) * HYDRO_SPEED_MULTIPLIER) - - // Make sure the plant is not starving or thirsty. Adequate - // water and nutrients will cause a plant to become healthier. - var/healthmod = rand(1,3) * HYDRO_SPEED_MULTIPLIER - if(seed.get_trait(TRAIT_REQUIRES_NUTRIENTS) && prob(35)) - health += (nutrilevel < 2 ? -healthmod : healthmod) - if(seed.get_trait(TRAIT_REQUIRES_WATER) && prob(35)) - health += (waterlevel < 10 ? -healthmod : healthmod) - - // Check that pressure, heat and light are all within bounds. - // First, handle an open system or an unconnected closed system. - - var/turf/T = loc - var/datum/gas_mixture/environment - // If we're closed, take from our internal sources. - if(closed_system && (connected_port || holding)) - environment = air_contents - // If atmos input is not there, grab from turf. - if(!environment && istype(T)) environment = T.return_air() - if(!environment) return - - // Seed datum handles gasses, light and pressure. - health -= seed.handle_environment(T,environment) - - // If we're attached to a pipenet, then we should let the pipenet know we might have modified some gasses - if (closed_system && connected_port) - update_connected_network() - - // Toxin levels beyond the plant's tolerance cause damage, but - // toxins are sucked up each tick and slowly reduce over time. - if(toxins > 0) - var/toxin_uptake = max(1,round(toxins/10)) - if(toxins > seed.get_trait(TRAIT_TOXINS_TOLERANCE)) - health -= toxin_uptake - toxins -= toxin_uptake - - // Check for pests and weeds. - // Some carnivorous plants happily eat pests. - if(pestlevel > 0) - if(seed.get_trait(TRAIT_CARNIVOROUS)) - health += HYDRO_SPEED_MULTIPLIER - pestlevel -= HYDRO_SPEED_MULTIPLIER - else if (pestlevel >= seed.get_trait(TRAIT_PEST_TOLERANCE)) - health -= HYDRO_SPEED_MULTIPLIER - - // Some plants thrive and live off of weeds. - if(weedlevel > 0) - if(seed.get_trait(TRAIT_PARASITE)) - health += HYDRO_SPEED_MULTIPLIER - weedlevel -= HYDRO_SPEED_MULTIPLIER - else if (weedlevel >= seed.get_trait(TRAIT_WEED_TOLERANCE)) - health -= HYDRO_SPEED_MULTIPLIER - - // Handle life and death. - // When the plant dies, weeds thrive and pests die off. - check_health() - - // If enough time (in cycles, not ticks) has passed since the plant was harvested, we're ready to harvest again. - if(seed.products && seed.products.len && \ - (age > seed.get_trait(TRAIT_MATURATION)) && \ - ((age - lastproduce) > seed.get_trait(TRAIT_PRODUCTION)) && \ - (!harvest && !dead)) - - harvest = 1 - lastproduce = age - - if(prob(3)) // On each tick, there's a chance the pest population will increase - pestlevel += 0.1 * HYDRO_SPEED_MULTIPLIER - - // Some seeds will self-harvest if you don't keep a lid on them. - if(seed && seed.can_self_harvest && harvest && !closed_system && prob(5)) - harvest() - - check_health() - return - /obj/machinery/portable_atmospherics/hydroponics/proc/check_health() if(seed && !dead && health <= 0) die() @@ -415,82 +288,7 @@ check_health() return -//Refreshes the icon and sets the luminosity -/obj/machinery/portable_atmospherics/hydroponics/update_icon() - - overlays.Cut() - - // Updates the plant overlay. - if(!isnull(seed)) - - if(mechanical && health <= (seed.get_trait(TRAIT_ENDURANCE) / 2)) - overlays += "over_lowhealth3" - - if(dead) - var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-dead" - var/image/dead_overlay = plant_icon_cache["[ikey]"] - if(!dead_overlay) - dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]") - overlays |= dead_overlay - else - if(!seed.growth_stages) - seed.update_growth_stages() - if(!seed.growth_stages) - world << "Seed type [seed.get_trait(TRAIT_PLANT_ICON)] cannot find a growth stage value." - return - var/overlay_stage = 1 - if(age >= seed.get_trait(TRAIT_MATURATION)) - overlay_stage = seed.growth_stages - lastproduce = age - else - overlay_stage = max(1,round(seed.get_trait(TRAIT_MATURATION) / seed.growth_stages)) - - var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-[overlay_stage]" - var/image/plant_overlay = plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] - if(!plant_overlay) - plant_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]") - plant_overlay.color = seed.get_trait(TRAIT_PLANT_COLOUR) - plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay - overlays |= plant_overlay - - if(harvest && overlay_stage == seed.growth_stages) - ikey = "[seed.get_trait(TRAIT_PRODUCT_ICON)]" - var/image/harvest_overlay = plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] - if(!harvest_overlay) - harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]") - harvest_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) - plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay - overlays |= harvest_overlay - - //Draw the cover. - if(closed_system) - overlays += "hydrocover" - - //Updated the various alert icons. - if(mechanical) - if(waterlevel <= 10) - overlays += "over_lowwater3" - if(nutrilevel <= 2) - overlays += "over_lownutri3" - if(weedlevel >= 5 || pestlevel >= 5 || toxins >= 40) - overlays += "over_alert3" - if(harvest) - overlays += "over_harvest3" - - // Update bioluminescence. - if(seed) - if(seed.get_trait(TRAIT_BIOLUM)) - SetLuminosity(round(seed.get_trait(TRAIT_POTENCY)/10)) - if(seed.get_trait(TRAIT_BIOLUM_COLOUR)) - l_color = seed.get_trait(TRAIT_BIOLUM_COLOUR) - else - l_color = null - return - - SetLuminosity(0) - return - - // If a weed growth is sufficient, this proc is called. +// If a weed growth is sufficient, this proc is called. /obj/machinery/portable_atmospherics/hydroponics/proc/weed_invasion() //Remove the seed if something is already planted. @@ -784,72 +582,3 @@ closed_system = !closed_system usr << "You [closed_system ? "close" : "open"] the tray's lid." update_icon() - -/obj/machinery/portable_atmospherics/hydroponics/soil - name = "soil" - icon_state = "soil" - density = 0 - use_power = 0 - mechanical = 0 - -/obj/machinery/portable_atmospherics/hydroponics/soil/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O,/obj/item/weapon/tank)) - return - else - ..() - -/obj/machinery/portable_atmospherics/hydroponics/soil/New() - ..() - verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid - -/obj/machinery/portable_atmospherics/hydroponics/soil/can_label() - return 0 - -/obj/machinery/portable_atmospherics/hydroponics/soil/CanPass() - return 1 - -// This is a hack pending a proper rewrite of the plant controller. -// Icons for plants are generated as overlays, so setting it to invisible wouldn't work. -// Hence using a blank icon. -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible - name = "plant" - icon = 'icons/obj/seeds.dmi' - icon_state = "blank" - -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/New(var/newloc,var/datum/seed/newseed) - ..() - seed = newseed - dead = 0 - age = 1 - health = seed.get_trait(TRAIT_ENDURANCE) - lastcycle = world.time - pixel_y = rand(-5,5) - check_health() - -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/remove_dead() - ..() - del(src) - -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/harvest() - ..() - if(!seed) - del(src) - -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/die() - del(src) - -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/process() - if(!seed) - del(src) - return - else if(name=="plant") - name = seed.display_name - ..() - -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/Del() - // Check if we're masking a decal that needs to be visible again. - for(var/obj/effect/plant/plant in get_turf(src)) - if(plant.invisibility == INVISIBILITY_MAXIMUM) - plant.invisibility = initial(plant.invisibility) - plant.die_off() - ..() \ No newline at end of file diff --git a/code/game/machinery/bees_apiary.dm b/code/modules/hydroponics/trays/tray_apiary.dm similarity index 100% rename from code/game/machinery/bees_apiary.dm rename to code/modules/hydroponics/trays/tray_apiary.dm diff --git a/code/modules/hydroponics/trays/tray_process.dm b/code/modules/hydroponics/trays/tray_process.dm new file mode 100644 index 0000000000..23662e7a59 --- /dev/null +++ b/code/modules/hydroponics/trays/tray_process.dm @@ -0,0 +1,125 @@ +/obj/machinery/portable_atmospherics/hydroponics/process() + + //Do this even if we're not ready for a plant cycle. + process_reagents() + + // Update values every cycle rather than every process() tick. + if(force_update) + force_update = 0 + else if(world.time < (lastcycle + cycledelay)) + return + lastcycle = world.time + + // Mutation level drops each main tick. + mutation_level -= rand(2,4) + + // Weeds like water and nutrients, there's a chance the weed population will increase. + // Bonus chance if the tray is unoccupied. + if(waterlevel > 10 && nutrilevel > 2 && prob(isnull(seed) ? 5 : 1)) + weedlevel += 1 * HYDRO_SPEED_MULTIPLIER + + // There's a chance for a weed explosion to happen if the weeds take over. + // Plants that are themselves weeds (weed_tolerance > 10) are unaffected. + if (weedlevel >= 10 && prob(10)) + if(!seed || weedlevel >= seed.get_trait(TRAIT_WEED_TOLERANCE)) + weed_invasion() + + // If there is no seed data (and hence nothing planted), + // or the plant is dead, process nothing further. + if(!seed || dead) + if(mechanical) update_icon() //Harvesting would fail to set alert icons properly. + return + + // Advance plant age. + if(prob(30)) age += 1 * HYDRO_SPEED_MULTIPLIER + + //Highly mutable plants have a chance of mutating every tick. + if(seed.get_trait(TRAIT_IMMUTABLE) == -1) + var/mut_prob = rand(1,100) + if(mut_prob <= 5) mutate(mut_prob == 1 ? 2 : 1) + + // Other plants also mutate if enough mutagenic compounds have been added. + if(!seed.get_trait(TRAIT_IMMUTABLE)) + if(prob(min(mutation_level,100))) + mutate((rand(100) < 15) ? 2 : 1) + mutation_level = 0 + + // Maintain tray nutrient and water levels. + if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) > 0 && nutrilevel > 0 && prob(25)) + nutrilevel -= max(0,seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) * HYDRO_SPEED_MULTIPLIER) + if(seed.get_trait(TRAIT_WATER_CONSUMPTION) > 0 && waterlevel > 0 && prob(25)) + waterlevel -= max(0,seed.get_trait(TRAIT_WATER_CONSUMPTION) * HYDRO_SPEED_MULTIPLIER) + + // Make sure the plant is not starving or thirsty. Adequate + // water and nutrients will cause a plant to become healthier. + var/healthmod = rand(1,3) * HYDRO_SPEED_MULTIPLIER + if(seed.get_trait(TRAIT_REQUIRES_NUTRIENTS) && prob(35)) + health += (nutrilevel < 2 ? -healthmod : healthmod) + if(seed.get_trait(TRAIT_REQUIRES_WATER) && prob(35)) + health += (waterlevel < 10 ? -healthmod : healthmod) + + // Check that pressure, heat and light are all within bounds. + // First, handle an open system or an unconnected closed system. + + var/turf/T = loc + var/datum/gas_mixture/environment + // If we're closed, take from our internal sources. + if(closed_system && (connected_port || holding)) + environment = air_contents + // If atmos input is not there, grab from turf. + if(!environment && istype(T)) environment = T.return_air() + if(!environment) return + + // Seed datum handles gasses, light and pressure. + health -= seed.handle_environment(T,environment) + + // If we're attached to a pipenet, then we should let the pipenet know we might have modified some gasses + if (closed_system && connected_port) + update_connected_network() + + // Toxin levels beyond the plant's tolerance cause damage, but + // toxins are sucked up each tick and slowly reduce over time. + if(toxins > 0) + var/toxin_uptake = max(1,round(toxins/10)) + if(toxins > seed.get_trait(TRAIT_TOXINS_TOLERANCE)) + health -= toxin_uptake + toxins -= toxin_uptake + + // Check for pests and weeds. + // Some carnivorous plants happily eat pests. + if(pestlevel > 0) + if(seed.get_trait(TRAIT_CARNIVOROUS)) + health += HYDRO_SPEED_MULTIPLIER + pestlevel -= HYDRO_SPEED_MULTIPLIER + else if (pestlevel >= seed.get_trait(TRAIT_PEST_TOLERANCE)) + health -= HYDRO_SPEED_MULTIPLIER + + // Some plants thrive and live off of weeds. + if(weedlevel > 0) + if(seed.get_trait(TRAIT_PARASITE)) + health += HYDRO_SPEED_MULTIPLIER + weedlevel -= HYDRO_SPEED_MULTIPLIER + else if (weedlevel >= seed.get_trait(TRAIT_WEED_TOLERANCE)) + health -= HYDRO_SPEED_MULTIPLIER + + // Handle life and death. + // When the plant dies, weeds thrive and pests die off. + check_health() + + // If enough time (in cycles, not ticks) has passed since the plant was harvested, we're ready to harvest again. + if(seed.products && seed.products.len && \ + (age > seed.get_trait(TRAIT_MATURATION)) && \ + ((age - lastproduce) > seed.get_trait(TRAIT_PRODUCTION)) && \ + (!harvest && !dead)) + harvest = 1 + lastproduce = age + + if(prob(3)) // On each tick, there's a chance the pest population will increase + pestlevel += 0.1 * HYDRO_SPEED_MULTIPLIER + + // Some seeds will self-harvest if you don't keep a lid on them. + if(seed && seed.can_self_harvest && harvest && !closed_system && prob(5)) + harvest() + + check_health() + return diff --git a/code/modules/hydroponics/trays/tray_reagents.dm b/code/modules/hydroponics/trays/tray_reagents.dm new file mode 100644 index 0000000000..940a6fb01a --- /dev/null +++ b/code/modules/hydroponics/trays/tray_reagents.dm @@ -0,0 +1,143 @@ + +/obj/item/weapon/plantspray + icon = 'icons/obj/hydroponics_machines.dmi' + item_state = "spray" + flags = TABLEPASS | FPRINT | NOBLUDGEON + slot_flags = SLOT_BELT + throwforce = 4 + w_class = 2.0 + throw_speed = 2 + throw_range = 10 + var/toxicity = 4 + var/pest_kill_str = 0 + var/weed_kill_str = 0 + +/obj/item/weapon/plantspray/weeds // -- Skie + + name = "weed-spray" + desc = "It's a toxic mixture, in spray form, to kill small weeds." + icon_state = "weedspray" + weed_kill_str = 6 + +/obj/item/weapon/plantspray/pests + name = "pest-spray" + desc = "It's some pest eliminator spray! Do not inhale!" + icon_state = "pestspray" + pest_kill_str = 6 + +/obj/item/weapon/plantspray/pests/old + name = "bottle of pestkiller" + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle16" + +/obj/item/weapon/plantspray/pests/old/carbaryl + name = "bottle of carbaryl" + icon_state = "bottle16" + toxicity = 4 + pest_kill_str = 2 + +/obj/item/weapon/plantspray/pests/old/lindane + name = "bottle of lindane" + icon_state = "bottle18" + toxicity = 6 + pest_kill_str = 4 + +/obj/item/weapon/plantspray/pests/old/phosmet + name = "bottle of phosmet" + icon_state = "bottle15" + toxicity = 8 + pest_kill_str = 7 + +/obj/item/weapon/minihoe // -- Numbers + name = "mini hoe" + desc = "It's used for removing weeds or scratching your back." + icon = 'icons/obj/weapons.dmi' + icon_state = "hoe" + item_state = "hoe" + flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON + force = 5.0 + throwforce = 7.0 + w_class = 2.0 + matter = list("metal" = 50) + attack_verb = list("slashed", "sliced", "cut", "clawed") + + +// ************************************* +// Weedkiller defines for hydroponics +// ************************************* + +/obj/item/weedkiller + name = "bottle of weedkiller" + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle16" + flags = FPRINT | TABLEPASS + var/toxicity = 0 + var/weed_kill_str = 0 + +/obj/item/weedkiller/triclopyr + name = "bottle of glyphosate" + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle16" + flags = FPRINT | TABLEPASS + toxicity = 4 + weed_kill_str = 2 + +/obj/item/weedkiller/lindane + name = "bottle of triclopyr" + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle18" + flags = FPRINT | TABLEPASS + toxicity = 6 + weed_kill_str = 4 + +/obj/item/weedkiller/D24 + name = "bottle of 2,4-D" + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle15" + flags = FPRINT | TABLEPASS + toxicity = 8 + weed_kill_str = 7 + + +// ************************************* +// Nutrient defines for hydroponics +// ************************************* + +/obj/item/weapon/reagent_containers/glass/fertilizer + name = "fertilizer bottle" + desc = "A small glass bottle. Can hold up to 10 units." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle16" + flags = FPRINT | TABLEPASS | OPENCONTAINER + possible_transfer_amounts = null + w_class = 2.0 + + var/fertilizer //Reagent contained, if any. + + //Like a shot glass! + amount_per_transfer_from_this = 10 + volume = 10 + +/obj/item/weapon/reagent_containers/glass/fertilizer/New() + ..() + + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) + + if(fertilizer) + reagents.add_reagent(fertilizer,10) + +/obj/item/weapon/reagent_containers/glass/fertilizer/ez + name = "bottle of E-Z-Nutrient" + icon_state = "bottle16" + fertilizer = "eznutrient" + +/obj/item/weapon/reagent_containers/glass/fertilizer/l4z + name = "bottle of Left 4 Zed" + icon_state = "bottle18" + fertilizer = "left4zed" + +/obj/item/weapon/reagent_containers/glass/fertilizer/rh + name = "bottle of Robust Harvest" + icon_state = "bottle15" + fertilizer = "robustharvest" diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm new file mode 100644 index 0000000000..087c8acd9d --- /dev/null +++ b/code/modules/hydroponics/trays/tray_soil.dm @@ -0,0 +1,68 @@ +/obj/machinery/portable_atmospherics/hydroponics/soil + name = "soil" + icon_state = "soil" + density = 0 + use_power = 0 + mechanical = 0 + +/obj/machinery/portable_atmospherics/hydroponics/soil/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O,/obj/item/weapon/tank)) + return + else + ..() + +/obj/machinery/portable_atmospherics/hydroponics/soil/New() + ..() + verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid + +/obj/machinery/portable_atmospherics/hydroponics/soil/can_label() + return 0 + +/obj/machinery/portable_atmospherics/hydroponics/soil/CanPass() + return 1 + +// This is a hack pending a proper rewrite of the plant controller. +// Icons for plants are generated as overlays, so setting it to invisible wouldn't work. +// Hence using a blank icon. +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible + name = "plant" + icon = 'icons/obj/seeds.dmi' + icon_state = "blank" + +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/New(var/newloc,var/datum/seed/newseed) + ..() + seed = newseed + dead = 0 + age = 1 + health = seed.get_trait(TRAIT_ENDURANCE) + lastcycle = world.time + pixel_y = rand(-5,5) + check_health() + +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/remove_dead() + ..() + del(src) + +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/harvest() + ..() + if(!seed) + del(src) + +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/die() + del(src) + +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/process() + if(!seed) + del(src) + return + else if(name=="plant") + name = seed.display_name + ..() + +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/Del() + // Check if we're masking a decal that needs to be visible again. + for(var/obj/effect/plant/plant in get_turf(src)) + if(plant.invisibility == INVISIBILITY_MAXIMUM) + plant.invisibility = initial(plant.invisibility) + plant.die_off() + ..() diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm similarity index 100% rename from code/modules/hydroponics/hydro_tools.dm rename to code/modules/hydroponics/trays/tray_tools.dm diff --git a/code/modules/hydroponics/trays/tray_update_icons.dm b/code/modules/hydroponics/trays/tray_update_icons.dm new file mode 100644 index 0000000000..c0ff8cb0f2 --- /dev/null +++ b/code/modules/hydroponics/trays/tray_update_icons.dm @@ -0,0 +1,74 @@ +//Refreshes the icon and sets the luminosity +/obj/machinery/portable_atmospherics/hydroponics/update_icon() + + overlays.Cut() + + // Updates the plant overlay. + if(!isnull(seed)) + + if(mechanical && health <= (seed.get_trait(TRAIT_ENDURANCE) / 2)) + overlays += "over_lowhealth3" + + if(dead) + var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-dead" + var/image/dead_overlay = plant_icon_cache["[ikey]"] + if(!dead_overlay) + dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]") + dead_overlay.color = DEAD_PLANT_COLOUR + overlays |= dead_overlay + else + if(!seed.growth_stages) + seed.update_growth_stages() + if(!seed.growth_stages) + world << "Seed type [seed.get_trait(TRAIT_PLANT_ICON)] cannot find a growth stage value." + return + var/overlay_stage = 1 + if(age >= seed.get_trait(TRAIT_MATURATION)) + overlay_stage = seed.growth_stages + else + overlay_stage = max(1,round(seed.get_trait(TRAIT_MATURATION) / seed.growth_stages)) + + var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-[overlay_stage]" + var/image/plant_overlay = plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] + if(!plant_overlay) + plant_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]") + plant_overlay.color = seed.get_trait(TRAIT_PLANT_COLOUR) + plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay + overlays |= plant_overlay + + if(harvest && overlay_stage == seed.growth_stages) + ikey = "[seed.get_trait(TRAIT_PRODUCT_ICON)]" + var/image/harvest_overlay = plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] + if(!harvest_overlay) + harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]") + harvest_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) + plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay + overlays |= harvest_overlay + + //Draw the cover. + if(closed_system) + overlays += "hydrocover" + + //Updated the various alert icons. + if(mechanical) + if(waterlevel <= 10) + overlays += "over_lowwater3" + if(nutrilevel <= 2) + overlays += "over_lownutri3" + if(weedlevel >= 5 || pestlevel >= 5 || toxins >= 40) + overlays += "over_alert3" + if(harvest) + overlays += "over_harvest3" + + // Update bioluminescence. + if(seed) + if(seed.get_trait(TRAIT_BIOLUM)) + SetLuminosity(round(seed.get_trait(TRAIT_POTENCY)/10)) + if(seed.get_trait(TRAIT_BIOLUM_COLOUR)) + l_color = seed.get_trait(TRAIT_BIOLUM_COLOUR) + else + l_color = null + return + + SetLuminosity(0) + return \ No newline at end of file From 2d1fd2dd2fc6e58a2ebe265e7e78c4350b371119 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 1 Feb 2015 20:13:00 +1030 Subject: [PATCH 34/90] Added report printing for plant scanners. --- code/game/objects/items/devices/scanners.dm | 1 - code/modules/hydroponics/trays/tray_tools.dm | 37 ++++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 922d5418cb..e0731443d5 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -4,7 +4,6 @@ T-RAY DETECTIVE SCANNER HEALTH ANALYZER GAS ANALYZER -PLANT ANALYZER MASS SPECTROMETER REAGENT SCANNER */ diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index be781a819f..b282460bd6 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -9,8 +9,38 @@ icon = 'icons/obj/device.dmi' icon_state = "hydro" item_state = "analyzer" + var/form_title + var/last_data + +/obj/item/device/analyzer/plant_analyzer/proc/print_report_verb() + set name = "Print Plant Report" + set category = "Object" + set src = usr + + if(usr.stat || usr.restrained() || usr.lying) + return + print_report(usr) + +/obj/item/device/analyzer/plant_analyzer/Topic(href, href_list) + if(..()) + return + if(href_list["print"]) + print_report(usr) + +/obj/item/device/analyzer/plant_analyzer/proc/print_report(var/mob/living/user) + if(!last_data) + user << "There is no scan data to print." + return + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src)) + P.name = "paper - [form_title]" + P.info = "[last_data]" + if(istype(user,/mob/living/carbon/human) && !(user.l_hand && user.r_hand)) + user.put_in_hands(P) + user.visible_message("\The [src] spits out a piece of paper.") + return /obj/item/device/analyzer/plant_analyzer/attack_self(mob/user as mob) + print_report(user) return 0 /obj/item/device/analyzer/plant_analyzer/afterattack(obj/target, mob/user, flag) @@ -44,12 +74,13 @@ grown_reagents = H.reagents if(!grown_seed) - user << "\red [src] can tell you nothing about [target]." + user << "\red [src] can tell you nothing about \the [target]." return var/dat = "

Plant data for [target]

" - user.visible_message("\blue [user] runs the scanner over [target].") + user.visible_message("\blue [user] runs the scanner over \the [target].") + form_title = "[grown_seed.seed_name] (#[grown_seed.uid])" dat += "

General Data

" dat += "
Endurance[grown_seed.get_trait(TRAIT_ENDURANCE)]
Yield[grown_seed.get_trait(TRAIT_YIELD)]
Lifespan[grown_seed.get_trait(TRAIT_LIFESPAN)]
Maturation time[grown_seed.get_trait(TRAIT_MATURATION)]
Production time[grown_seed.get_trait(TRAIT_PRODUCTION)]
Potency[grown_seed.get_trait(TRAIT_POTENCY)]
" @@ -170,8 +201,10 @@ if(grown_seed.get_trait(TRAIT_TELEPORTING)) dat += "
The fruit is temporal/spatially unstable." + dat += "
\[print report\]" if(dat) user << browse(dat,"window=plant_analyzer") + last_data = dat return From 61f4699da221f4ec3d9b14874f4bba1e01b6f64f Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 1 Feb 2015 20:23:24 +1030 Subject: [PATCH 35/90] Added printouts to plant analyzers. --- code/modules/hydroponics/trays/tray_tools.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index b282460bd6..fb01f4d217 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -74,13 +74,13 @@ grown_reagents = H.reagents if(!grown_seed) - user << "\red [src] can tell you nothing about \the [target]." + user << "[src] can tell you nothing about \the [target]." return - var/dat = "

Plant data for [target]

" - user.visible_message("\blue [user] runs the scanner over \the [target].") - form_title = "[grown_seed.seed_name] (#[grown_seed.uid])" + var/dat = "

Plant data for [form_title]

" + user.visible_message("[user] runs the scanner over \the [target].") + dat += "

General Data

" dat += "
" @@ -201,7 +201,7 @@ if(grown_seed.get_trait(TRAIT_TELEPORTING)) dat += "
The fruit is temporal/spatially unstable." - dat += "
\[print report\]" + dat += "

\[print report\]" if(dat) user << browse(dat,"window=plant_analyzer") last_data = dat From 3b60a5959e4de698b23acbef5c0b51871f3b236f Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 1 Feb 2015 20:35:09 +1030 Subject: [PATCH 36/90] Added labelling for hydro trays. --- code/modules/hydroponics/trays/tray.dm | 64 +++++++++++++------ code/modules/hydroponics/trays/tray_soil.dm | 6 +- .../hydroponics/trays/tray_update_icons.dm | 12 +++- code/modules/paperwork/handlabeler.dm | 12 +++- 4 files changed, 68 insertions(+), 26 deletions(-) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 6c6f0ca142..9ec31f6fe8 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -8,6 +8,7 @@ volume = 100 var/mechanical = 1 // Set to 0 to stop it from drawing the alert lights. + var/base_name = "tray" // Plant maintenance vars. var/waterlevel = 100 // Water (max 100) @@ -19,7 +20,7 @@ var/dead = 0 // Is it dead? var/harvest = 0 // Is it ready to harvest? var/age = 0 // Current plant age - var/sampled = 0 // Have wa taken a sample? + var/sampled = 0 // Have we taken a sample? // Harvest/mutation mods. var/yield_mod = 0 // Modifier to yield @@ -35,6 +36,7 @@ var/closed_system // If set, the tray will attempt to take atmos from a pipe. var/force_update // Set this to bypass the cycle time check. var/obj/temp_chem_holder // Something to hold reagents during process_reagents() + var/labelled // Seed details/line data. var/datum/seed/seed = null // The currently planted seed @@ -120,6 +122,12 @@ "mutagen" = 15 ) +/obj/machinery/portable_atmospherics/hydroponics/AltClick() + if(mechanical && !usr.stat && !usr.lying && Adjacent(usr)) + close_lid(usr) + return + return ..() + /obj/machinery/portable_atmospherics/hydroponics/attack_generic(var/mob/user) if(istype(user,/mob/living/carbon/alien/diona)) var/mob/living/carbon/alien/diona/nymph = user @@ -139,15 +147,13 @@ nymph.visible_message("[nymph] rolls around in [src] for a bit.","You roll around in [src] for a bit.") return -/obj/machinery/portable_atmospherics/hydroponics/proc/can_label() - return 1 - /obj/machinery/portable_atmospherics/hydroponics/New() ..() temp_chem_holder = new() temp_chem_holder.create_reagents(10) create_reagents(200) - connect() + if(mechanical) + connect() update_icon() /obj/machinery/portable_atmospherics/hydroponics/bullet_act(var/obj/item/projectile/Proj) @@ -329,6 +335,22 @@ return +/obj/machinery/portable_atmospherics/hydroponics/verb/remove_label() + + set name = "Remove Label" + set category = "Object" + set src in view(1) + + if(labelled) + usr << "You remove the label." + labelled = null + update_icon() + else + usr << "There is no label to remove." + return + +/obj/machinery/portable_atmospherics/hydroponics/verb/set_light() + /obj/machinery/portable_atmospherics/hydroponics/proc/check_level_sanity() //Make sure various values are sane. if(seed) @@ -527,27 +549,29 @@ ..() + if(!seed) + usr << "[src] is empty." + return + + usr << "[seed.display_name] are growing here." + if(!Adjacent(usr)) return - if(seed) - usr << "[src] has [seed.display_name] planted." - if(dead) - usr << "The plant is dead." - else if(health <= (seed.get_trait(TRAIT_ENDURANCE)/ 2)) - usr << "The plant looks unhealthy." - else - usr << "[src] is empty." usr << "Water: [round(waterlevel,0.1)]/100" usr << "Nutrient: [round(nutrilevel,0.1)]/10" if(weedlevel >= 5) - usr << "[src] is infested with weeds!" + usr << "\The [src] is infested with weeds!" if(pestlevel >= 5) - usr << "[src] is infested with tiny worms!" + usr << "\The [src] is infested with tiny worms!" + + if(dead) + usr << "The plant is dead." + else if(health <= (seed.get_trait(TRAIT_ENDURANCE)/ 2)) + usr << "The plant looks unhealthy." if(mechanical) - var/turf/T = loc var/datum/gas_mixture/environment @@ -571,14 +595,16 @@ usr << "The tray's sensor suite is reporting a light level of [light_available] lumens and a temperature of [environment.temperature]K." -/obj/machinery/portable_atmospherics/hydroponics/verb/close_lid() +/obj/machinery/portable_atmospherics/hydroponics/verb/close_lid_verb() set name = "Toggle Tray Lid" set category = "Object" set src in view(1) + close_lid(usr) - if(!usr || usr.stat || usr.restrained()) +/obj/machinery/portable_atmospherics/hydroponics/proc/close_lid(var/mob/living/user) + if(!user || user.stat || user.restrained()) return closed_system = !closed_system - usr << "You [closed_system ? "close" : "open"] the tray's lid." + user << "You [closed_system ? "close" : "open"] the tray's lid." update_icon() diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm index 087c8acd9d..abcf137e39 100644 --- a/code/modules/hydroponics/trays/tray_soil.dm +++ b/code/modules/hydroponics/trays/tray_soil.dm @@ -13,10 +13,8 @@ /obj/machinery/portable_atmospherics/hydroponics/soil/New() ..() - verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid - -/obj/machinery/portable_atmospherics/hydroponics/soil/can_label() - return 0 + verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid_verb + verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/remove_label /obj/machinery/portable_atmospherics/hydroponics/soil/CanPass() return 1 diff --git a/code/modules/hydroponics/trays/tray_update_icons.dm b/code/modules/hydroponics/trays/tray_update_icons.dm index c0ff8cb0f2..de66f4297e 100644 --- a/code/modules/hydroponics/trays/tray_update_icons.dm +++ b/code/modules/hydroponics/trays/tray_update_icons.dm @@ -1,8 +1,18 @@ //Refreshes the icon and sets the luminosity /obj/machinery/portable_atmospherics/hydroponics/update_icon() + // Update name. + if(seed) + if(mechanical) + name = "[base_name] (#[seed.uid])" + else + name = "[seed.seed_name]" + else + name = initial(name) + + if(labelled) + name += " ([labelled])" overlays.Cut() - // Updates the plant overlay. if(!isnull(seed)) diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index fe519e01d4..5006af6cc3 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -6,12 +6,12 @@ var/label = null var/labels_left = 30 var/mode = 0 //off or on. - + /obj/item/weapon/hand_labeler/attack() return /obj/item/weapon/hand_labeler/afterattack(atom/A, mob/user as mob, proximity) - if(!proximity) + if(!proximity) return if(!mode) //if it's off, give up. return @@ -39,6 +39,14 @@ if(istype(A, /obj/item/weapon/reagent_containers/glass)) user << "The label can't stick to the [A.name]. (Try using a pen)" return + if(istype(A, /obj/machinery/portable_atmospherics/hydroponics)) + var/obj/machinery/portable_atmospherics/hydroponics/tray = A + if(!tray.mechanical) + user << "How are you going to label that?" + return + tray.labelled = label + spawn(1) + tray.update_icon() user.visible_message("[user] labels [A] as [label].", \ "You label [A] as [label].") From e323bbf6db6b43c574be344bf9bea1a17e38ca58 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 1 Feb 2015 23:20:44 +1030 Subject: [PATCH 37/90] Integrated xenoarch plants into regular system again. WIP. --- baystation12.dme | 2 - code/modules/hydroponics/seed_datums.dm | 7 ++ .../genetics/prehistoric_plants.dm | 81 ------------------ icons/obj/harvest.dmi | Bin 28614 -> 30069 bytes icons/obj/seeds.dmi | Bin 7004 -> 6952 bytes icons/obj/xenoarchaeology.dmi | Bin 78758 -> 78350 bytes 6 files changed, 7 insertions(+), 83 deletions(-) delete mode 100644 code/modules/research/xenoarchaeology/genetics/prehistoric_plants.dm diff --git a/baystation12.dme b/baystation12.dme index 5216e12a41..ffe4612b3b 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -958,7 +958,6 @@ #include "code\modules\games\cards.dm" #include "code\modules\genetics\side_effects.dm" #include "code\modules\hydroponics\_hydro_setup.dm" -#include "code\modules\hydroponics\grown.dm" #include "code\modules\hydroponics\grown_inedible.dm" #include "code\modules\hydroponics\seed.dm" #include "code\modules\hydroponics\seed_datums.dm" @@ -1432,7 +1431,6 @@ #include "code\modules\research\xenoarchaeology\finds\finds_special.dm" #include "code\modules\research\xenoarchaeology\finds\finds_talkingitem.dm" #include "code\modules\research\xenoarchaeology\genetics\prehistoric_animals.dm" -#include "code\modules\research\xenoarchaeology\genetics\prehistoric_plants.dm" #include "code\modules\research\xenoarchaeology\genetics\reconstitutor.dm" #include "code\modules\research\xenoarchaeology\machinery\artifact_analyser.dm" #include "code\modules\research\xenoarchaeology\machinery\artifact_harvester.dm" diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index d8a6dc00ce..2c36cf254a 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1029,6 +1029,7 @@ seed_name = "telriis" display_name = "telriis grass" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/telriis_clump) + chems = list("pwine" = list(1,5), "nutriment" = list(1,6)) /datum/seed/telriis/New() ..() @@ -1044,6 +1045,7 @@ seed_name = "thaa'dra" display_name = "thaa'dra lichen" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/thaadrabloom) + chems = list("frostoil" = list(1,5),"nutriment" = list(1,5)) /datum/seed/thaadra/New() ..() @@ -1059,6 +1061,7 @@ seed_name = "jurl'mah" display_name = "jurl'mah reeds" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/jurlmah) + chems = list("serotrotium" = list(1,5),"nutriment" = list(1,5)) /datum/seed/jurlmah/New() ..() @@ -1074,6 +1077,7 @@ seed_name = "amauri" display_name = "amauri plant" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/amauri) + chems = list("zombiepowder" = list(1,10),"condensedcapsaicin" = list(1,5),"nutriment" = list(1,5)) /datum/seed/amauri/New() ..() @@ -1089,6 +1093,7 @@ seed_name = "gelthi" display_name = "gelthi plant" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/gelthi) + chems = list("stoxin" = list(1,5),"capsaicin" = list(1,5),"nutriment" = list(1,5)) /datum/seed/gelthi/New() ..() @@ -1104,6 +1109,7 @@ seed_name = "vale" display_name = "vale bush" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/vale) + chems = list("paracetamol" = list(1,5),"dexalin" = list(1,2),"nutriment"= list(1,5)) /datum/seed/vale/New() ..() @@ -1119,6 +1125,7 @@ seed_name = "surik" display_name = "surik vine" products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/surik) + chems = list("impedrezene" = list(1,3),"synaptizine" = list(1,2),"nutriment" = list(1,5)) /datum/seed/surik/New() ..() diff --git a/code/modules/research/xenoarchaeology/genetics/prehistoric_plants.dm b/code/modules/research/xenoarchaeology/genetics/prehistoric_plants.dm deleted file mode 100644 index d9212ac5b0..0000000000 --- a/code/modules/research/xenoarchaeology/genetics/prehistoric_plants.dm +++ /dev/null @@ -1,81 +0,0 @@ -/obj/item/weapon/reagent_containers/food/snacks/grown/telriis_clump - name = "telriis grass" - desc = "A clump of telriis grass, not recommended for consumption by sentients." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "telriisclump" - New(var/loc, var/potency) - ..() - reagents.add_reagent("pwine", potency * 5) - reagents.add_reagent("nutriment", potency) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/thaadrabloom - name = "thaa'dra bloom" - desc = "Looks chewy, might be good to eat." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "thaadrabloom" - New(var/loc, var/potency) - ..() - reagents.add_reagent("frostoil", potency * 1.5 + 5) - reagents.add_reagent("nutriment", potency) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/jurlmah - name = "jurl'mah pod" - desc = "Bulbous and veiny, it appears to pulse slightly as you look at it." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "jurlmahpod" - New(var/loc, var/potency) - ..() - reagents.add_reagent("serotrotium", potency) - reagents.add_reagent("nutriment", potency) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/amauri - name = "amauri fruit" - desc = "It is small, round and hard. Its skin is a thick dark purple." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "amaurifruit" - New(var/loc, var/potency) - ..() - reagents.add_reagent("zombiepowder", potency * 10) - reagents.add_reagent("condensedcapsaicin", potency * 5) - reagents.add_reagent("nutriment", potency) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/gelthi - name = "gelthi berries" - desc = "They feel fluffy and slightly warm to the touch." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "gelthiberries" - New(var/loc, var/potency) - ..() - //this may prove a little strong - reagents.add_reagent("stoxin", (potency * potency) / 5) - reagents.add_reagent("capsaicin", (potency * potency) / 5) - reagents.add_reagent("nutriment", potency) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/vale - name = "vale leaves" - desc = "Small, curly leaves covered in a soft pale fur." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "valeleaves" - New(var/loc, var/potency) - ..() - reagents.add_reagent("paracetamol", potency * 5) - reagents.add_reagent("dexalin", potency * 2) - reagents.add_reagent("nutriment", potency) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/surik - name = "surik fruit" - desc = "Multiple layers of blue skin peeling away to reveal a spongey core, vaguely resembling an ear." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "surikfruit" - New(var/loc, var/potency) - ..() - reagents.add_reagent("impedrezene", potency * 3) - reagents.add_reagent("synaptizine", potency * 2) - reagents.add_reagent("nutriment", potency) - bitesize = 1+round(reagents.total_volume / 2, 1) \ No newline at end of file diff --git a/icons/obj/harvest.dmi b/icons/obj/harvest.dmi index 443b6c5ebfbaff2ecbe32d9ff83a21d2030a6719..7c775cb549f17b6e715874c274c4ea859c137c13 100644 GIT binary patch delta 13413 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 diff --git a/icons/obj/seeds.dmi b/icons/obj/seeds.dmi index 221cb520726279cb905cff6e207b1ed3981d7d1b..be2be0bdffbd7e55ec723df10e84f00625d22e83 100644 GIT binary patch delta 6175 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 delta 6224 zcmXw7cT^K!6WxR=9YG=>U8G5epcLsvkS0nmA|N8tlp=K_NRcXnNRcijDj?ESgoKXt zqM*{E{(w*e7$87MzU7Z^PhQU3Y|iYw_h#Qa8ew!F6?ZLV=8 z=qtl!SL}E@3kF(DK{|rw%n~HE86VSG0SLb@1hwlVw?r@7D z&G4V%fF?0TJXS=9MiB?(22wB8N9^8HK_biQ>p7j8@2~70iJRr%Iv9kyf7E*@{-y-! z#e*ExnBm(g?QDZwVV~4s?-Sn?e*Aa|u#=04MpKV`T^=q;h?bIjeJPiiD`0deaJzNR zpPPrL?8ArCs;a8Jn4cfKn0YSR16Vb^kGA@_@;ayciB9jotch~W(N}Q<3J!hvugB0M zJVFyWx8)ty9}8^7W4&d)oXD$%aG*Jw0A`4QH3iDroWNKMUcRNU_C8h&MM(zNrfPZ# z5|%}&ot=7Ow6)^(3r#;L(`k#t%P^IW%Sucm0q1uqY87dLJZi%1Zp{}hQ|T%flFSj! ziAa{AX3}>J!-xp=966Wd9`<=DJps62216p70366fcuejQ7T5v!(c|^?bt@2gEX6-i z!~<+~f4f;3KcY25IE^_Pk>dwvs02@ok9Jmm@zbj2?pY`8YRb&dB^Oveo zr*XbSZ(xKysL39r&b+JdHD8_)g6*mQXXxdWBQXaIolP;XsdLqEFWEo*yj%>rnzmjw ze%|yt*Ym%~4bcT(1gdU}3mgdewzEHD7#iA~Z4=AtWyze<6Kh>=l*dE6e;;Gk-P1!S z0H=xIe_vl;KOF(~6zAm7w;oR@&hJy7q^uDdf6O1NnfbWqR1o7P1KEzwy;?AR{4f0} z4JM;*o+V0#j-+?)6{|p?|6ASp8MpfE&j|bbA~Qi(c`y-GkABA^o`FS0Y(RB&wT_{o zVZS9TA3BLcD{T#p8T_`EAp1^RXl7v{YepZ}fC~_aUKUcl#|TZL?EwUZFbst@<})Pc_03>0Jk(WQcnSo6I`@ zEl0IPMxc`B!}CGS*?k&7s2LmnkuE&(!^J^kBbtW!AaB+Uv1e5Q8S;P03m~cZ_t&ui z{=p|Z{HkQ-^LnaGTZ97{85tM}uES2_Kor!Lm93eM5RRn?TY)`77EBFMZP8xLuf)ot z;)~USP*ex`7@SSd!ZhMf)PAc1-N+}NOZ!njuk+!r6o5W6`;_XhtGmbI0#~PYZr|q% zMB|SaBR4w#ZkzDZ0oe7Q4KU!vix);``_ItOmskF9b1B%gTvFtMwOu=tr^DHsVQ42 zzoRTA_$3H@YF@v7y%1ZAMz8ET0CRcD-k{a>>!*>$jLzRvFFGk91>S{pJ?yZ1z4y74 z86H_kxT1xSJ3}cpa{OScnz-4eKV6oZn(B%;4j#@cPWp1TfM<1{`V{?ErDevCNUX9f zPUyL<>+35s>#w$H`o(y4`wF)h3Ps`3L5%2A+efJ5er|L>>WbNC-n7gPVuDlX_CWP( z<0`oHr-AejioseM6;iC{n%jbYFUB5u?DM)OeW`RV>?WS>%Eidstw);uDfK?lmdtt^ z&^sGXl0}Pg*1v@yi^cf{jm5m86zejiBgf?F3L)%Me7JNCz~aZtVWe6Zpm2p;o^iSp zy^nbXWzAV#0DxoFvg*!(w5=AvoYqSt_K4pMlQVTu-tqQd9x0+mDc!}C7GS2?uj}wK zf7juG#AW((0JcJVZ#=G~?)mf6!1R<54XX;{dI+G<7*7aT)R3W{ovbJMl+d36)Xz}Q zksjz;S+P5Fm&!zySusfhH>T7WfpRsSt591KlV#JnJDKPc|!q?AYxSnN|vLUlj z%&egBwVzrV@f5L!IfUhXPWhrAqP2}1j%w~Lgh<7gJesqp!>u+~E(h)fDXZ%}sDFcW|N{&jD1G(QEq1>Rjs;7?_Eo^w}R zT)g_t8>NUtN^|_L-ng}%Y$+QBuL17KI2^jFD0cWx)_m>ooh}ZxNop4FC-VRmqEIIA6_ zNuKs{;rKRs1Th;+L&SpDV9xKK-o>irD{nieNMH)yJoj)yRl&W+8 z{>AIpucvNENlE3-=U12q3_s6_rF6w8M}k;2vv(}Vg-34Y({NAw?TQ!qlPld%PH}C` zJ{;{>36`EdS|jTVTg5Sr8bmX8fq0qJ7pK0T`$RldNxv#w!9z+`U;z%mP`@c$7iI{5G17i7K-kMP*-by{NFP zs)~U*5j@H#<>NaJ=bL+aztGmn%~$^SkYfbS2P2C$+jEDWNfO#Td@Q*x%|T6)Mf!!> zHZTbRp+$2d5fKp_oFZYuF9=O3n7wtL1J_o`OVrB#{a@zcl-)m6^0Ib-(Z7M!SAWj{ zR_bL2B(RR*_L%Xe_U#ly2+;O6=a_*Xtzq(xPEPK37~eUyuo-d&T=fH&e+q~yO{k$( zS5`8oYF*b03kv~2#Gr2D!*ISTb5KywK)g=-w7=DLP^AVY;jFT?6(MS>#BQ6euMYuZPM27 ziJ7$Ybfgggx!0zrli)p|mNXN9nX?b@@yVRpv)V_+RUnQIch|U^|Cx^qIWX6*)~Gv%#)$n9 z4huVf;R0Mt7%m&zal#GIshXIWU}zbH1=ug!8w!hD z!gFHZrT@$qgafI6ioYv5Il_zcLLEs6YDXM{VvBb>F^t9&%m9dSLm-KO$qwOICH|>< z^XB;;4-VR@$6H|0zuWiohn8K0U@JZIVbSk9{X=o>ZS4*{b;bWy#DKhF8ayG&W=WTH z?STF_IBvOgM2%p-ON@#!`&k8>j(yJz0B!R-%H^aG$YcEGrtO}-&Ycw~_Qna_cPqq9 z4Q!7%u9>^3MPfRw?dbtdR#u8^);6E;bAHbMe;7dh|K_I&$dDY-=Vry+-`+XoB{I)BTB(YkG}Mt&otVsGt;6t;8B0O!HwBqli96d`=Bm0 zkFLE_j7H1n>Le{Cx%S&*S{{Xu6DrKFZR5HLzU9UlM(xvbIUC2Bj}E?>T`#7(2}QRr z>`}lmVtylUgtD?S%sD^D*_M&iq8u=<`MRpg11bvK`Qb1+tp1+(AGKy#J^y4r!wlRt0f<4 z7P(?ll9Tm9LqkpUPuw^!E?)ZiGvD{`->dn;?1O`YOPZS@#EI0=<*)+Cc1v8plo$DF zam+9+Mo)a?wzzz6B_zME7W0N}&VH(X_s-z*db3(O`Q~a0PevjPnA<8`;z}E3;dOg+EH~h z>#M8Jchp~93hMkQz{~qnhSt~DmmwO2xzTK~!+w7L{5hg#P%Z{A>QGZrIcw;4{d#Og zmQdyg`Ozh^bL6eQXgB~7bp0_===B#KN*6Uln{pNaaiOhVD$#~Y>2YYADmbt-lt+`% z7Z-iB2Lm7;v$D2+{9U<->F1RpuFJnPGd*U(kPuaMb@f!K0h(}fX2<&2Q!WYA(5+1o z1#4^TUO%d54lk{bkB_9Zw4RHLz@3p-rvMWRi=6M8u2*)S+rPinQPFo!tj1?y3p^dT zIeQtrFB$3h?r0!_bt{cc@AB!B{6AdtYjU)9aPSGHFOAuNlJpl8^JliVx3?nN@OZpJ zdKX0F0He?L{v6^s^nF#k`#$m(=rbK=z;W-84h!K#IqBFKuGHP#ovXA1lVhc}Ec{ET zWbfLYL|I|9(AswryF_Y8A#c4kE5Nqny%|YaSvny5#fz)*l=j%@b=@?87zQ6&(iVMI zO4!oAe3>^SBxE9i3TzdU2>FMzk!|y?YYUd)_B2re)(M~e8e-YE&K#cjSSq+VSXLOd zlKu0DBZu<9{pB+kqFvmwZ;VKeMU25eP$st%L4z`JcMoGlB_*&y)2wbbE=VwnLu7dd zKNE%!A{`W}puCH&`Y|#NZ!Ldx2=`E*@-wvmBk<|qURpcEULKVUNYxby3c+LA{{M&)bzf9T%r)2;7?2Jv zl_jK4*Ta)*!)NX;nUr_cTt0jvET2-U$J>my=zC-*~$v0AHa}ybhGN4?^ zetv$J9xky!N)hsYVsf$~UT4^#YW!$zt<--KdA~FV>Q9g*MAK4J4Z_0Ih%}e&g=6r%bf{H;XJz$?(ThoNFYSz^~w@-yLI@gjy zl=Mo14W8obmf2sE9s|ZeU%G&D5&7Zr2(K14WZDJMKgVhcy}i1&wii;uX~nCn_oPGs zQfx_8)v}H9>3t#*nn}F&!+gQ-JNo!YRazFOPfT174h!RNfr>rBoxOd+LdMV%8iW$O z{HC4V-!69T?s|{D!1W)BXnkB~XQyjRjqTg)&|M2*2;@S7gLSAY0llkMpJoHK-$qyR z^rLljrh${Qxiean28k8;miegcn)=D6oJ7Pw%NeN3tPEfeIie5+b(cb*M$^z}e?PWV zKk->!-czVO;~};7%L66YjYgv-FJ8i*tcJoy0p1677jgX2-j_o?$80Kn8d@26zr2lhR2LX9lI`XP(4?IJ40!83_6(K zTEb6{kKNAFVdTrY%Ee_^J~4tzV#b z?%tn(2lu%>dQ)LQDz7rVlD;t1`GHv303uaS3#M?D3ZrZ4R~*&?qOy##Mle#y%gE$DA@H0zXl~v=JZxxVll5*X?UeA_ zH*WwSFE6ihnC0yeE{;9>9^&H-@|y%~=IeXEAAE|vvIl2EedFahu~%i;EbQS|X;SEZ z>W&co{Vb1i$Wjj^>8x#S6J}?fp_#Gi462S)US6KIOCmkWe)&>NTH4f<@x)acxidw1 zba>EmK|b$!Ru&8pGfvN*Qvq;Iy>{KcX?01fKN2gY~0n|4e;P@3dTBOzM*G9qw9SevEB@E9@;={D@Q1tARfmBUP|?=Tu&_%G(XNnkGAA(to6Am z=z}ggFo2Xy9m`tGZ)b_Hq`w9E()_jF`i7ky%`@e7%sC#-JSiwcOC?B0;}-3~(xga{ zviICmLUb3(a0*%0%;Fq8TMKY!8K_S^vhE_R#A=+S$tVcr0z3E~MNQt}(`vckkAf zr}fdcgt6i(xWQxoVBjLOImsz0FlTAO=$st-zjjaoPM&*5~<)lH#%HU!r zY5Ond(1AAQbm|SBtuT20++S~`<#*@6Q?6t&CTDx_w1RvVj!*dv1Fa<11ih0z3qaRZ MLkojiy<4&W1Mdkp2LJ#7 diff --git a/icons/obj/xenoarchaeology.dmi b/icons/obj/xenoarchaeology.dmi index 5aacb9923443f5455eeebf8a3db629af7a9d733a..ab6cd5a97de59d1b048ad86b8a16a6cdef478224 100644 GIT binary patch literal 78350 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 literal 78758 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 From fdf0360a696ed3ebc9ed096a67d150c2c214543e Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 2 Feb 2015 00:15:48 +1030 Subject: [PATCH 38/90] Collapsing all fruit into one object type. Refactoring reagent grinder and removing juicer. WIP. --- baystation12.dme | 2 +- code/datums/recipe.dm | 38 +- code/datums/supplypacks.dm | 5 +- code/defines/obj/weapon.dm | 11 - code/game/machinery/kitchen/juicer.dm | 172 ------ code/game/machinery/kitchen/microwave.dm | 2 +- code/game/machinery/kitchen/processor.dm | 2 + .../objects/items/weapons/gift_wrappaper.dm | 2 - code/modules/admin/verbs/debug.dm | 1 - code/modules/distillery/main.dm | 195 +++---- code/modules/food/recipes_microwave.dm | 293 ++++------- code/modules/hydroponics/_hydro_setup.dm | 77 ++- code/modules/hydroponics/grown.dm | 493 +----------------- code/modules/hydroponics/grown_inedible.dm | 13 +- code/modules/hydroponics/seed.dm | 21 +- code/modules/hydroponics/seed_datums.dm | 134 ++--- code/modules/hydroponics/seed_packets.dm | 3 - .../modules/hydroponics/trays/tray_process.dm | 3 +- code/modules/hydroponics/trays/tray_tools.dm | 3 - .../simple_animal/friendly/farm_animals.dm | 19 +- code/modules/reagents/Chemistry-Machinery.dm | 261 ++-------- code/modules/reagents/Chemistry-Recipes.dm | 8 + .../research/xenoarchaeology/geosample.dm | 2 + maps/exodus-2.dmm | 26 +- 24 files changed, 422 insertions(+), 1364 deletions(-) delete mode 100644 code/game/machinery/kitchen/juicer.dm diff --git a/baystation12.dme b/baystation12.dme index ffe4612b3b..93e5a8e08a 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -451,7 +451,6 @@ #include "code\game\machinery\embedded_controller\embedded_program_base.dm" #include "code\game\machinery\embedded_controller\simple_docking_controller.dm" #include "code\game\machinery\kitchen\gibber.dm" -#include "code\game\machinery\kitchen\juicer.dm" #include "code\game\machinery\kitchen\microwave.dm" #include "code\game\machinery\kitchen\processor.dm" #include "code\game\machinery\kitchen\smartfridge.dm" @@ -958,6 +957,7 @@ #include "code\modules\games\cards.dm" #include "code\modules\genetics\side_effects.dm" #include "code\modules\hydroponics\_hydro_setup.dm" +#include "code\modules\hydroponics\grown.dm" #include "code\modules\hydroponics\grown_inedible.dm" #include "code\modules\hydroponics\seed.dm" #include "code\modules\hydroponics\seed_datums.dm" diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index d2c747dd5b..5852b956fb 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -34,11 +34,11 @@ * */ /datum/recipe - var/list/reagents // example: = list("berryjuice" = 5) // do not list same reagent twice - var/list/items // example: =list(/obj/item/weapon/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo - var/result //example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal - var/time = 100 // 1/10 part of second - + var/list/reagents // example: = list("berryjuice" = 5) // do not list same reagent twice + var/list/items // example: = list(/obj/item/weapon/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo + var/list/fruit // example: = list("fruit" = 3) + var/result // example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal + var/time = 100 // 1/10 part of second /datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) //1=precisely, 0=insufficiently, -1=superfluous . = 1 @@ -53,15 +53,31 @@ return -1 return . +/datum/recipe/proc/check_fruit(var/obj/container) + if(!fruit) + . = 1 + return 1 + + var/list/checklist = fruit.Copy() + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in container) + if(!G.seed) + return + if(!G.seed.kitchen_tag || !checklist[G.seed.kitchen_tag] || checklist[G.seed.kitchen_tag] <= 0) + continue + checklist[G.seed.kitchen_tag]-- + + for(var/ktag in checklist) + if(checklist[ktag] && checklist[ktag] > 0) + . = -1 + return -1 + return . + /datum/recipe/proc/check_items(var/obj/container as obj) //1=precisely, 0=insufficiently, -1=superfluous if (!items) - if (locate(/obj/) in container) - return -1 - else - return 1 + return 1 . = 1 var/list/checklist = items.Copy() - for (var/obj/O in container) + for(var/obj/O in container) var/found = 0 for (var/type in checklist) if (istype(O,type)) @@ -100,7 +116,7 @@ exact = -1 var/list/datum/recipe/possible_recipes = new for (var/datum/recipe/recipe in avaiable_recipes) - if (recipe.check_reagents(obj.reagents)==exact && recipe.check_items(obj)==exact) + if (recipe.check_reagents(obj.reagents)==exact && recipe.check_items(obj)==exact && recipe.check_fruit(obj)==exact) possible_recipes+=recipe if (possible_recipes.len==0) return null diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 14a86aed13..bcb3c7c7d1 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -53,9 +53,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/reagent_containers/food/snacks/tofu, /obj/item/weapon/reagent_containers/food/snacks/tofu, /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/grown/banana, - /obj/item/weapon/reagent_containers/food/snacks/grown/banana) + /obj/item/weapon/reagent_containers/food/snacks/meat + ) cost = 10 containertype = /obj/structure/closet/crate/freezer containername = "Food crate" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index ab7b57cb42..10f92f521d 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -24,17 +24,6 @@ var/mode = 1 w_class = 3.0 -/obj/item/weapon/bananapeel - name = "banana peel" - desc = "A peel from a banana." - icon = 'icons/obj/items.dmi' - icon_state = "banana_peel" - item_state = "banana_peel" - w_class = 2.0 - throwforce = 0 - throw_speed = 4 - throw_range = 20 - /obj/item/weapon/soap name = "soap" desc = "A cheap bar of soap. Doesn't smell." diff --git a/code/game/machinery/kitchen/juicer.dm b/code/game/machinery/kitchen/juicer.dm deleted file mode 100644 index a5a15fb876..0000000000 --- a/code/game/machinery/kitchen/juicer.dm +++ /dev/null @@ -1,172 +0,0 @@ - -/obj/machinery/juicer - name = "Juicer" - icon = 'icons/obj/kitchen.dmi' - icon_state = "juicer1" - layer = 2.9 - density = 0 - anchored = 0 - use_power = 1 - idle_power_usage = 5 - active_power_usage = 100 - var/obj/item/weapon/reagent_containers/beaker = null - var/global/list/allowed_items = list ( - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato = "tomatojuice", - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot = "carrotjuice", - /obj/item/weapon/reagent_containers/food/snacks/grown/berries = "berryjuice", - /obj/item/weapon/reagent_containers/food/snacks/grown/banana = "banana", - /obj/item/weapon/reagent_containers/food/snacks/grown/potato = "potato", - /obj/item/weapon/reagent_containers/food/snacks/grown/lemon = "lemonjuice", - /obj/item/weapon/reagent_containers/food/snacks/grown/orange = "orangejuice", - /obj/item/weapon/reagent_containers/food/snacks/grown/lime = "limejuice", - /obj/item/weapon/reagent_containers/food/snacks/watermelonslice = "watermelonjuice", - /obj/item/weapon/reagent_containers/food/snacks/grown/grapes = "grapejuice", - /obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries = "poisonberryjuice", - ) - -/obj/machinery/juicer/New() - beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) - -/obj/machinery/juicer/update_icon() - icon_state = "juicer"+num2text(!isnull(beaker)) - return - - -/obj/machinery/juicer/attackby(var/obj/item/O as obj, var/mob/user as mob) - if (istype(O,/obj/item/weapon/reagent_containers/glass) || \ - istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass)) - if (beaker) - return 1 - else - user.before_take_item(O) - O.loc = src - beaker = O - src.verbs += /obj/machinery/juicer/verb/detach - update_icon() - src.updateUsrDialog() - return 0 - if (!is_type_in_list(O, allowed_items)) - user << "It looks as not containing any juice." - return 1 - user.before_take_item(O) - O.loc = src - src.updateUsrDialog() - return 0 - -/obj/machinery/juicer/attack_ai(mob/user as mob) - return 0 - -/obj/machinery/juicer/attack_hand(mob/user as mob) - user.set_machine(src) - interact(user) - -/obj/machinery/juicer/interact(mob/user as mob) // The microwave Menu - var/is_chamber_empty = 0 - var/is_beaker_ready = 0 - var/processing_chamber = "" - var/beaker_contents = "" - - for (var/i in allowed_items) - for (var/obj/item/O in src.contents) - if (!istype(O,i)) - continue - processing_chamber+= "some [O]
" - break - if (!processing_chamber) - is_chamber_empty = 1 - processing_chamber = "Nothing." - if (!beaker) - beaker_contents = "\The [src] has no beaker attached." - else if (!beaker.reagents.total_volume) - beaker_contents = "\The [src] has attached an empty beaker." - is_beaker_ready = 1 - else if (beaker.reagents.total_volume < beaker.reagents.maximum_volume) - beaker_contents = "\The [src] has attached a beaker with something." - is_beaker_ready = 1 - else - beaker_contents = "\The [src] has attached a beaker and beaker is full!" - - var/dat = {" -Processing chamber contains:
-[processing_chamber]
-[beaker_contents]
-"} - if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) - dat += "
Turn on!
" - if (beaker) - dat += "
Detach a beaker!
" - user << browse("Juicer[dat]", "window=juicer") - onclose(user, "juicer") - return - - -/obj/machinery/juicer/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - switch(href_list["action"]) - if ("juice") - juice() - - if ("detach") - detach() - src.updateUsrDialog() - return - -/obj/machinery/juicer/verb/detach() - set category = "Object" - set name = "Detach Beaker from the juicer" - set src in oview(1) - if (usr.stat != 0) - return - if (!beaker) - return - src.verbs -= /obj/machinery/juicer/verb/detach - beaker.loc = src.loc - beaker = null - update_icon() - -/obj/machinery/juicer/proc/get_juice_id(var/obj/item/weapon/reagent_containers/food/snacks/grown/O) - for (var/i in allowed_items) - if (istype(O, i)) - return allowed_items[i] - -/obj/machinery/juicer/proc/get_juice_amount(var/obj/item/weapon/reagent_containers/food/snacks/grown/O) - if (!istype(O)) - return 5 - else if (O.potency == -1) - return 5 - else - return round(5*sqrt(O.potency)) - -/obj/machinery/juicer/proc/juice() - power_change() //it is a portable machine - if(stat & (NOPOWER|BROKEN)) - return - if (!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - return - playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1) - for (var/obj/item/weapon/reagent_containers/food/snacks/O in src.contents) - var/r_id = get_juice_id(O) - beaker.reagents.add_reagent(r_id,get_juice_amount(O)) - del(O) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - -/obj/structure/closet/crate/juice - New() - ..() - new/obj/machinery/juicer(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src) - diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index 4af48a539b..45e32948b5 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -42,11 +42,11 @@ acceptable_reagents |= reagent if (recipe.items) max_n_of_items = max(max_n_of_items,recipe.items.len) - // This will do until I can think of a fun recipe to use dionaea in - // will also allow anything using the holder item to be microwaved into // impure carbon. ~Z acceptable_items |= /obj/item/weapon/holder + acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown /******************* * Item Adding diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm index 3b86ea400e..3f33d4d862 100644 --- a/code/game/machinery/kitchen/processor.dm +++ b/code/game/machinery/kitchen/processor.dm @@ -28,6 +28,7 @@ input = /obj/item/weapon/reagent_containers/food/snacks/meat output = /obj/item/weapon/reagent_containers/food/snacks/meatball + /* potato input = /obj/item/weapon/reagent_containers/food/snacks/grown/potato output = /obj/item/weapon/reagent_containers/food/snacks/rawsticks @@ -43,6 +44,7 @@ wheat input = /obj/item/weapon/reagent_containers/food/snacks/grown/wheat output = /obj/item/weapon/reagent_containers/food/snacks/flour + */ spaghetti input = /obj/item/weapon/reagent_containers/food/snacks/flour diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index e96d036721..f89dd73d0e 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -99,8 +99,6 @@ /obj/item/toy/prize/seraph, /obj/item/toy/spinningtoy, /obj/item/toy/sword, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris, /obj/item/device/paicard, /obj/item/device/violin, /obj/item/weapon/storage/belt/utility/full, diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 71d50c1e8b..0626f6f5a7 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -662,7 +662,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/clothing/suit/chaplain_hoodie(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_r_store) var/obj/item/weapon/card/id/W = new(M) diff --git a/code/modules/distillery/main.dm b/code/modules/distillery/main.dm index 049548a782..2d8fff4c00 100644 --- a/code/modules/distillery/main.dm +++ b/code/modules/distillery/main.dm @@ -1,60 +1,60 @@ -// This dreammaker file includes the food processing machines: +//This dm file includes some food processing machines: // - I. Mill // - II. Fermenter // - III. Still // - IV. Squeezer // - V. Centrifuge + + // I. The mill is intended to be loaded with produce and returns ground up items. For example: Wheat should become flour and grapes should become raisins. + /obj/machinery/mill - var/list/obj/item/weapon/reagent_containers/food/input = list() + var/list/obj/item/weapon/reagent_containers/food/input = list() var/list/obj/item/weapon/reagent_containers/food/output = list() var/obj/item/weapon/reagent_containers/food/milled_item - var/busy = 0 + var/busy = 0 var/progress = 0 - var/error = 0 + var/error = 0 name = "\improper Mill" desc = "It is a machine that grinds produce." icon_state = "autolathe" - density = 1 - anchored = 1 + density = 1 + anchored = 1 use_power = 1 - idle_power_usage = 10 + idle_power_usage = 10 active_power_usage = 1000 /obj/machinery/mill/process() - if (error) + if(error) return - - if (!busy) + + if(!busy) use_power = 1 - if (input.len) + if(input.len) milled_item = input[1] input -= milled_item progress = 0 busy = 1 use_power = 2 return - + progress++ - if (progress < 10) // Edit this value to make milling faster or slower. - return // Not done yet. - - switch (milled_item.type) - if (/obj/item/weapon/reagent_containers/food/snacks/grown/wheat) // Wheat becomes flour. - var/obj/item/weapon/reagent_containers/food/snacks/flour/F = new(src) - output += F - if (/obj/item/weapon/reagent_containers/food/snacks/flour) // Flour is still flour. + if(progress < 10) //Edit this value to make milling faster or slower + return //Not done yet. + + switch(milled_item.type) + if(/obj/item/weapon/reagent_containers/food/snacks/flour) //Flour is still flour var/obj/item/weapon/reagent_containers/food/snacks/flour/F = new(src) output += F else error = 1 - + del(milled_item) busy = 0 /obj/machinery/mill/attackby(var/obj/item/weapon/W as obj, mob/user as mob) - if (istype(W,/obj/item/weapon/reagent_containers/food)) + if(istype(W,/obj/item/weapon/reagent_containers/food)) user.u_equip(W) W.loc = src input += W @@ -62,11 +62,17 @@ ..() /obj/machinery/mill/attack_hand(var/mob/user as mob) - for (var/obj/item/weapon/reagent_containers/food/F in output) + for(var/obj/item/weapon/reagent_containers/food/F in output) F.loc = src.loc output -= F + + + + + // II. The fermenter is intended to be loaded with food items and returns medium-strength alcohol items, sucha s wine and beer. + /obj/machinery/fermenter var/list/obj/item/weapon/reagent_containers/food/input = list() var/list/obj/item/weapon/reagent_containers/food/output = list() @@ -85,40 +91,40 @@ active_power_usage = 500 /obj/machinery/fermenter/process() - if (error) + if(error) return - - if (!busy) + + if(!busy) use_power = 1 - if (input.len) + if(input.len) fermenting_item = input[1] input -= fermenting_item progress = 0 busy = 1 use_power = 2 return - - if (!water_level) + + if(!water_level) return - + water_level-- - + progress++ - if (progress < 10) // Edit this value to make milling faster or slower. - return // Not done yet. - - switch (fermenting_item.type) - if (/obj/item/weapon/reagent_containers/food/snacks/flour) // Flour is still flour. + if(progress < 10) //Edit this value to make milling faster or slower + return //Not done yet. + + switch(fermenting_item.type) + if(/obj/item/weapon/reagent_containers/food/snacks/flour) //Flour is still flour var/obj/item/weapon/reagent_containers/food/drinks/cans/beer/B = new(src) output += B else error = 1 - + del(fermenting_item) busy = 0 /obj/machinery/fermenter/attackby(var/obj/item/weapon/W as obj, mob/user as mob) - if (istype(W,/obj/item/weapon/reagent_containers/food)) + if(istype(W,/obj/item/weapon/reagent_containers/food)) user.u_equip(W) W.loc = src input += W @@ -126,57 +132,60 @@ ..() /obj/machinery/fermenter/attack_hand(var/mob/user as mob) - for (var/obj/item/weapon/reagent_containers/food/F in output) + for(var/obj/item/weapon/reagent_containers/food/F in output) F.loc = src.loc output -= F + + // III. The still is a machine that is loaded with food items and returns hard liquor, such as vodka. + /obj/machinery/still - var/list/obj/item/weapon/reagent_containers/food/input = list() + var/list/obj/item/weapon/reagent_containers/food/input = list() var/list/obj/item/weapon/reagent_containers/food/output = list() - var/obj/item/weapon/reagent_containers/food/distilling_item - var/busy = 0 + var/obj/item/weapon/reagent_containers/food/destilling_item + var/busy = 0 var/progress = 0 - var/error = 0 + var/error = 0 name = "\improper Still" desc = "It is a machine that produces hard liquor from alcoholic drinks." icon_state = "autolathe" - density = 1 - anchored = 1 + density = 1 + anchored = 1 use_power = 1 idle_power_usage = 10 active_power_usage = 10000 /obj/machinery/still/process() - if (error) + if(error) return - - if (!busy) + + if(!busy) use_power = 1 - if (input.len) - distilling_item = input[1] - input -= distilling_item + if(input.len) + destilling_item = input[1] + input -= destilling_item progress = 0 busy = 1 use_power = 2 return - + progress++ - if (progress < 10) // Edit this value to make distilling faster or slower. - return // Not done yet. - - switch (distilling_item.type) - if (/obj/item/weapon/reagent_containers/food/drinks/cans/beer) // Flour is still flour. + if(progress < 10) //Edit this value to make distilling faster or slower + return //Not done yet. + + switch(destilling_item.type) + if(/obj/item/weapon/reagent_containers/food/drinks/cans/beer) //Flour is still flour var/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/V = new(src) output += V else error = 1 - - del(distilling_item) + + del(destilling_item) busy = 0 /obj/machinery/still/attackby(var/obj/item/weapon/W as obj, mob/user as mob) - if (istype(W,/obj/item/weapon/reagent_containers/food)) + if(istype(W,/obj/item/weapon/reagent_containers/food)) user.u_equip(W) W.loc = src input += W @@ -184,75 +193,84 @@ ..() /obj/machinery/still/attack_hand(var/mob/user as mob) - for (var/obj/item/weapon/reagent_containers/food/F in output) + for(var/obj/item/weapon/reagent_containers/food/F in output) F.loc = src.loc output -= F + + + // IV. The squeezer is intended to destroy inserted food items, but return some of the reagents they contain. + /obj/machinery/squeezer var/list/obj/item/weapon/reagent_containers/food/input = list() var/obj/item/weapon/reagent_containers/food/squeezed_item var/water_level = 0 - var/busy = 0 - var/progress = 0 - var/error = 0 + var/busy = 0 + var/progress = 0 + var/error = 0 name = "\improper Squeezer" desc = "It is a machine that squeezes extracts from produce." icon_state = "autolathe" - density = 1 - anchored = 1 + density = 1 + anchored = 1 use_power = 1 - idle_power_usage = 10 + idle_power_usage = 10 active_power_usage = 500 + + + + // V. The centrifuge spins inserted food items. It is intended to squeeze out the reagents that are common food catalysts (enzymes currently) + /obj/machinery/centrifuge var/list/obj/item/weapon/reagent_containers/food/input = list() var/list/obj/item/weapon/reagent_containers/food/output = list() var/obj/item/weapon/reagent_containers/food/spinning_item - var/busy = 0 + var/busy = 0 var/progress = 0 - var/error = 0 - var/enzymes = 0 - var/water = 0 + var/error = 0 + var/enzymes = 0 + var/water = 0 name = "\improper Centrifuge" desc = "It is a machine that spins produce." icon_state = "autolathe" - density = 1 - anchored = 1 + density = 1 + anchored = 1 use_power = 1 - idle_power_usage = 10 + idle_power_usage = 10 active_power_usage = 10000 /obj/machinery/centrifuge/process() - if (error) + if(error) return - - if (!busy) + + if(!busy) use_power = 1 - if (input.len) + if(input.len) spinning_item = input[1] input -= spinning_item progress = 0 busy = 1 use_power = 2 return - + progress++ - if (progress < 10) // Edit this value to make milling faster or slower. - return // Not done yet. - + if(progress < 10) //Edit this value to make milling faster or slower + return //Not done yet. + var/transfer_enzymes = spinning_item.reagents.get_reagent_amount("enzyme") - - if (transfer_enzymes) + + if(transfer_enzymes) enzymes += transfer_enzymes spinning_item.reagents.remove_reagent("enzyme",transfer_enzymes) - + output += spinning_item busy = 0 /obj/machinery/centrifuge/attackby(var/obj/item/weapon/W as obj, mob/user as mob) - if (istype(W,/obj/item/weapon/reagent_containers/food)) + if(istype(W,/obj/item/weapon/reagent_containers/food)) user.u_equip(W) W.loc = src input += W @@ -260,9 +278,10 @@ ..() /obj/machinery/centrifuge/attack_hand(var/mob/user as mob) - for (var/obj/item/weapon/reagent_containers/food/F in output) + for(var/obj/item/weapon/reagent_containers/food/F in output) F.loc = src.loc output -= F - while (enzymes >= 50) + while(enzymes >= 50) enzymes -= 50 new/obj/item/weapon/reagent_containers/food/condiment/enzyme(src.loc) + diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 94ef9b3bdf..56aefbc718 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -34,24 +34,11 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/boiledegg /datum/recipe/dionaroast + fruit = list("apple" = 1) reagents = list("pacid" = 5) //It dissolves the carapace. Still poisonous, though. - items = list( - /obj/item/weapon/holder/diona, - /obj/item/weapon/reagent_containers/food/snacks/grown/apple - ) + items = list(/obj/item/weapon/holder/diona) result = /obj/item/weapon/reagent_containers/food/snacks/dionaroast - -/* -/datum/recipe/bananaphone - reagents = list("psilocybin" = 5) //Trippin' balls, man. - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/banana, - /obj/item/device/radio - ) - result = /obj/item/weapon/reagent_containers/food/snacks/bananaphone -*/ - /datum/recipe/jellydonut reagents = list("berryjuice" = 5, "sugar" = 5) items = list( @@ -146,8 +133,7 @@ I said no! /datum/recipe/clownburger items = list( /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/clothing/mask/gas/clown_hat, - /* /obj/item/weapon/reagent_containers/food/snacks/grown/banana, */ + /obj/item/clothing/mask/gas/clown_hat ) result = /obj/item/weapon/reagent_containers/food/snacks/clownburger @@ -245,12 +231,12 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread /datum/recipe/bananabread + fruit = list("banana" = 1) reagents = list("milk" = 5, "sugar" = 15) items = list( /obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/grown/banana, + /obj/item/weapon/reagent_containers/food/snacks/dough ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread @@ -271,19 +257,19 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/muffin /datum/recipe/eggplantparm + fruit = list("eggplant" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant - ) + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) result = /obj/item/weapon/reagent_containers/food/snacks/eggplantparm /datum/recipe/soylenviridians + fruit = list("soybeans" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/flour, /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans + /obj/item/weapon/reagent_containers/food/snacks/flour ) result = /obj/item/weapon/reagent_containers/food/snacks/soylenviridians @@ -298,14 +284,12 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/soylentgreen /datum/recipe/carrotcake + fruit = list("carrot" = 3) reagents = list("milk" = 5, "sugar" = 15) items = list( /obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, + /obj/item/weapon/reagent_containers/food/snacks/dough ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake @@ -351,25 +335,23 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/xemeatpie /datum/recipe/pie + fruit = list("banana" = 1) reagents = list("sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/grown/banana, - ) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) result = /obj/item/weapon/reagent_containers/food/snacks/pie /datum/recipe/cherrypie + fruit = list("cherries" = 1) reagents = list("sugar" = 10) items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/grown/cherries, ) result = /obj/item/weapon/reagent_containers/food/snacks/cherrypie /datum/recipe/berryclafoutis + fruit = list("berries" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/grown/berries, ) result = /obj/item/weapon/reagent_containers/food/snacks/berryclafoutis @@ -434,10 +416,8 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread /datum/recipe/loadedbakedpotato - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/potato, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - ) + fruit = list("potato" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/cheesewedge) result = /obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato /datum/recipe/cheesyfries @@ -448,17 +428,15 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/cheesyfries /datum/recipe/cubancarp + fruit = list("chili" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/grown/chili, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat ) result = /obj/item/weapon/reagent_containers/food/snacks/cubancarp /datum/recipe/popcorn - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/corn - ) + fruit = list("corn" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/popcorn @@ -494,91 +472,69 @@ I said no! /datum/recipe/meatsteak reagents = list("sodiumchloride" = 1, "blackpepper" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat - ) + items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak /datum/recipe/syntisteak reagents = list("sodiumchloride" = 1, "blackpepper" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh - ) + items = list(/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh) result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak /datum/recipe/pizzamargherita + fruit = list("tomato" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita /datum/recipe/meatpizza + fruit = list("tomato" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, /obj/item/weapon/reagent_containers/food/snacks/meat, /obj/item/weapon/reagent_containers/food/snacks/meat, /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza /datum/recipe/syntipizza + fruit = list("tomato" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza /datum/recipe/mushroompizza + fruit = list("mushroom" = 5, "tomato" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza /datum/recipe/vegetablepizza + fruit = list("eggplant" = 1, "carrot" = 1, "corn" = 1, "tomato" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant, - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, - /obj/item/weapon/reagent_containers/food/snacks/grown/corn, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza /datum/recipe/spacylibertyduff - reagents = list("water" = 5, "vodka" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap, - ) + reagents = list("water" = 5, "vodka" = 5, "psilocybin" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff /datum/recipe/amanitajelly - reagents = list("water" = 5, "vodka" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita, - ) + reagents = list("water" = 5, "vodka" = 5, "amatoxin" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/amanitajelly make_food(var/obj/container as obj) var/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/being_cooked = ..(container) @@ -586,30 +542,21 @@ I said no! return being_cooked /datum/recipe/meatballsoup + fruit = list("carrot" = 1, "potato" = 1) reagents = list("water" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meatball , - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, - /obj/item/weapon/reagent_containers/food/snacks/grown/potato, - ) + items = list(/obj/item/weapon/reagent_containers/food/snacks/meatball) result = /obj/item/weapon/reagent_containers/food/snacks/meatballsoup /datum/recipe/vegetablesoup + fruit = list("carrot" = 1, "potato" = 1, "corn" = 1, "eggplant" = 1) reagents = list("water" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, - /obj/item/weapon/reagent_containers/food/snacks/grown/corn, - /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant, - /obj/item/weapon/reagent_containers/food/snacks/grown/potato, - ) result = /obj/item/weapon/reagent_containers/food/snacks/vegetablesoup /datum/recipe/nettlesoup + fruit = list("nettle" = 1, "potato" = 1) reagents = list("water" = 10) items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/nettle, - /obj/item/weapon/reagent_containers/food/snacks/grown/potato, - /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/egg ) result = /obj/item/weapon/reagent_containers/food/snacks/nettlesoup @@ -618,33 +565,23 @@ I said no! result= /obj/item/weapon/reagent_containers/food/snacks/wishsoup /datum/recipe/hotchili - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/grown/chili, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - ) + fruit = list("chili" = 1, "tomato" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) result = /obj/item/weapon/reagent_containers/food/snacks/hotchili /datum/recipe/coldchili - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/grown/icepepper, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - ) + fruit = list("icechili" = 1, "tomato" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) result = /obj/item/weapon/reagent_containers/food/snacks/coldchili /datum/recipe/amanita_pie - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita, - ) + reagents = list("amatoxin" = 5) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) result = /obj/item/weapon/reagent_containers/food/snacks/amanita_pie /datum/recipe/plump_pie - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet, - ) + fruit = list("plumphelmet" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) result = /obj/item/weapon/reagent_containers/food/snacks/plump_pie /datum/recipe/spellburger @@ -672,12 +609,8 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger /datum/recipe/enchiladas - items = list( - /obj/item/weapon/reagent_containers/food/snacks/cutlet, - /obj/item/weapon/reagent_containers/food/snacks/grown/chili, - /obj/item/weapon/reagent_containers/food/snacks/grown/chili, - /obj/item/weapon/reagent_containers/food/snacks/grown/corn, - ) + fruit = list("chili" = 2, "corn" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/cutlet) result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas /datum/recipe/creamcheesebread @@ -691,11 +624,11 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread /datum/recipe/monkeysdelight + fruit = list("banana" = 1) reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/monkeycube, - /obj/item/weapon/reagent_containers/food/snacks/grown/banana, + /obj/item/weapon/reagent_containers/food/snacks/monkeycube ) result = /obj/item/weapon/reagent_containers/food/snacks/monkeysdelight @@ -755,11 +688,8 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/grilledcheese /datum/recipe/tomatosoup + fruit = list("tomato" = 2) reagents = list("water" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - ) result = /obj/item/weapon/reagent_containers/food/snacks/tomatosoup /datum/recipe/rofflewaffles @@ -771,15 +701,9 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles /datum/recipe/stew + fruit = list("potato" = 1, "tomato" = 1, "carrot" = 1, "eggplant" = 1, "mushroom" = 1) reagents = list("water" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/grown/potato, - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, - /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, - ) + items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) result = /obj/item/weapon/reagent_containers/food/snacks/stew /datum/recipe/slimetoast @@ -807,11 +731,10 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/milosoup /datum/recipe/stewedsoymeat + fruit = list("carrot" = 1, "tomato" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/soydope, - /obj/item/weapon/reagent_containers/food/snacks/soydope, - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, + /obj/item/weapon/reagent_containers/food/snacks/soydope ) result = /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat @@ -837,19 +760,14 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/ricepudding /datum/recipe/pastatomato + fruit = list("tomato" = 2) reagents = list("water" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/spagetti, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - ) + items = list(/obj/item/weapon/reagent_containers/food/snacks/spagetti) result = /obj/item/weapon/reagent_containers/food/snacks/pastatomato /datum/recipe/poppypretzel - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/poppy, - /obj/item/weapon/reagent_containers/food/snacks/dough, - ) + fruit = list("poppy" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/dough) result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel /datum/recipe/meatballspagetti @@ -873,39 +791,34 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/spesslaw /datum/recipe/superbiteburger + fruit = list("tomato" = 1) reagents = list("sodiumchloride" = 5, "blackpepper" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, /obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/boiledegg, ) result = /obj/item/weapon/reagent_containers/food/snacks/superbiteburger /datum/recipe/candiedapple + fruit = list("apple" = 1) reagents = list("water" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/apple - ) result = /obj/item/weapon/reagent_containers/food/snacks/candiedapple /datum/recipe/applepie - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/grown/apple, - ) + fruit = list("apple" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) result = /obj/item/weapon/reagent_containers/food/snacks/applepie /datum/recipe/applecake + fruit = list("apple" = 2) reagents = list("milk" = 5, "sugar" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/grown/apple, - /obj/item/weapon/reagent_containers/food/snacks/grown/apple, + /obj/item/weapon/reagent_containers/food/snacks/dough ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake @@ -948,6 +861,7 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry /datum/recipe/orangecake + fruit = list("orange" = 2) reagents = list("milk" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/flour, @@ -955,13 +869,12 @@ I said no! /obj/item/weapon/reagent_containers/food/snacks/flour, /obj/item/weapon/reagent_containers/food/snacks/egg, /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/grown/orange, - /obj/item/weapon/reagent_containers/food/snacks/grown/orange, + /obj/item/weapon/reagent_containers/food/snacks/egg ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake /datum/recipe/limecake + fruit = list("lime" = 2) reagents = list("milk" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/flour, @@ -969,13 +882,12 @@ I said no! /obj/item/weapon/reagent_containers/food/snacks/flour, /obj/item/weapon/reagent_containers/food/snacks/egg, /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/grown/lime, - /obj/item/weapon/reagent_containers/food/snacks/grown/lime, + /obj/item/weapon/reagent_containers/food/snacks/egg ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake /datum/recipe/lemoncake + fruit = list("lemon" = 2) reagents = list("milk" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/flour, @@ -983,9 +895,7 @@ I said no! /obj/item/weapon/reagent_containers/food/snacks/flour, /obj/item/weapon/reagent_containers/food/snacks/egg, /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/grown/lemon, - /obj/item/weapon/reagent_containers/food/snacks/grown/lemon, + /obj/item/weapon/reagent_containers/food/snacks/egg ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake @@ -1004,11 +914,7 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake /datum/recipe/bloodsoup - reagents = list("blood" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato, - /obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato, - ) + reagents = list("blood" = 30) result = /obj/item/weapon/reagent_containers/food/snacks/bloodsoup /datum/recipe/slimesoup @@ -1070,84 +976,61 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/mysterysoup /datum/recipe/pumpkinpie + fruit = list("pumpkin" = 1) reagents = list("milk" = 5, "sugar" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin, - /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/egg ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie /datum/recipe/plumphelmetbiscuit + fruit = list("plumphelmet" = 1) reagents = list("water" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet, - ) + items = list(/obj/item/weapon/reagent_containers/food/snacks/flour) result = /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit /datum/recipe/mushroomsoup + fruit = list("mushroom" = 1) reagents = list("water" = 5, "milk" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle, - ) result = /obj/item/weapon/reagent_containers/food/snacks/mushroomsoup /datum/recipe/chawanmushi + fruit = list("mushroom" = 1) reagents = list("water" = 5, "soysauce" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle, + /obj/item/weapon/reagent_containers/food/snacks/egg ) result = /obj/item/weapon/reagent_containers/food/snacks/chawanmushi /datum/recipe/beetsoup + fruit = list("whitebeet" = 1, "cabbage" = 1) reagents = list("water" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet, - /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage, - ) result = /obj/item/weapon/reagent_containers/food/snacks/beetsoup /datum/recipe/appletart + fruit = list("goldapple" = 1) reagents = list("sugar" = 5, "milk" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/flour, /obj/item/weapon/reagent_containers/food/snacks/flour, /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/grown/goldapple, + /obj/item/weapon/reagent_containers/food/snacks/egg ) result = /obj/item/weapon/reagent_containers/food/snacks/appletart /datum/recipe/tossedsalad - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage, - /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, - /obj/item/weapon/reagent_containers/food/snacks/grown/apple, - ) + fruit = list("cabbage" = 2, "tomato" = 1, "carrot" = 1, "apple" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/tossedsalad /datum/recipe/aesirsalad - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus, - /obj/item/weapon/reagent_containers/food/snacks/grown/goldapple, - ) + fruit = list("goldapple" = 1, "ambrosiadeus" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/aesirsalad /datum/recipe/validsalad - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris, - /obj/item/weapon/reagent_containers/food/snacks/grown/potato, - /obj/item/weapon/reagent_containers/food/snacks/meatball, - ) + fruit = list("potato" = 1, "ambrosia" = 3) + items = list(/obj/item/weapon/reagent_containers/food/snacks/meatball) result = /obj/item/weapon/reagent_containers/food/snacks/validsalad make_food(var/obj/container as obj) var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked = ..(container) diff --git a/code/modules/hydroponics/_hydro_setup.dm b/code/modules/hydroponics/_hydro_setup.dm index 05e4a8dae4..88467d920b 100644 --- a/code/modules/hydroponics/_hydro_setup.dm +++ b/code/modules/hydroponics/_hydro_setup.dm @@ -11,42 +11,41 @@ #define ALL_GENES list(GENE_PRODUCTS,GENE_CONSUMPTION,GENE_ENVIRONMENT,GENE_RESISTANCE,GENE_VIGOUR,GENE_PIGMENT) //Definitions for traits (individual descriptors) -#define TRAIT_PRODUCTS 1 -#define TRAIT_CHEMS 2 -#define TRAIT_EXUDE_GASSES 3 -#define TRAIT_ALTER_TEMP 4 -#define TRAIT_POTENCY 5 -#define TRAIT_HARVEST_REPEAT 6 -#define TRAIT_PRODUCES_POWER 7 -#define TRAIT_JUICY 8 -#define TRAIT_PRODUCT_ICON 9 -#define TRAIT_PLANT_ICON 10 -#define TRAIT_CONSUME_GASSES 11 -#define TRAIT_REQUIRES_NUTRIENTS 12 -#define TRAIT_NUTRIENT_CONSUMPTION 13 -#define TRAIT_REQUIRES_WATER 14 -#define TRAIT_WATER_CONSUMPTION 15 -#define TRAIT_CARNIVOROUS 16 -#define TRAIT_PARASITE 17 -#define TRAIT_STINGS 18 -#define TRAIT_IDEAL_HEAT 19 -#define TRAIT_HEAT_TOLERANCE 20 -#define TRAIT_IDEAL_LIGHT 21 -#define TRAIT_LIGHT_TOLERANCE 22 -#define TRAIT_LOWKPA_TOLERANCE 23 -#define TRAIT_HIGHKPA_TOLERANCE 24 -#define TRAIT_EXPLOSIVE 25 -#define TRAIT_TOXINS_TOLERANCE 26 -#define TRAIT_PEST_TOLERANCE 27 -#define TRAIT_WEED_TOLERANCE 28 -#define TRAIT_ENDURANCE 29 -#define TRAIT_YIELD 30 -#define TRAIT_SPREAD 31 -#define TRAIT_MATURATION 32 -#define TRAIT_PRODUCTION 33 -#define TRAIT_TELEPORTING 34 -#define TRAIT_PLANT_COLOUR 35 -#define TRAIT_PRODUCT_COLOUR 36 -#define TRAIT_BIOLUM 37 -#define TRAIT_BIOLUM_COLOUR 38 -#define TRAIT_IMMUTABLE 39 \ No newline at end of file +#define TRAIT_CHEMS 1 +#define TRAIT_EXUDE_GASSES 2 +#define TRAIT_ALTER_TEMP 3 +#define TRAIT_POTENCY 4 +#define TRAIT_HARVEST_REPEAT 5 +#define TRAIT_PRODUCES_POWER 6 +#define TRAIT_JUICY 7 +#define TRAIT_PRODUCT_ICON 8 +#define TRAIT_PLANT_ICON 0 +#define TRAIT_CONSUME_GASSES 10 +#define TRAIT_REQUIRES_NUTRIENTS 11 +#define TRAIT_NUTRIENT_CONSUMPTION 12 +#define TRAIT_REQUIRES_WATER 13 +#define TRAIT_WATER_CONSUMPTION 14 +#define TRAIT_CARNIVOROUS 15 +#define TRAIT_PARASITE 16 +#define TRAIT_STINGS 17 +#define TRAIT_IDEAL_HEAT 18 +#define TRAIT_HEAT_TOLERANCE 19 +#define TRAIT_IDEAL_LIGHT 20 +#define TRAIT_LIGHT_TOLERANCE 21 +#define TRAIT_LOWKPA_TOLERANCE 22 +#define TRAIT_HIGHKPA_TOLERANCE 23 +#define TRAIT_EXPLOSIVE 24 +#define TRAIT_TOXINS_TOLERANCE 25 +#define TRAIT_PEST_TOLERANCE 26 +#define TRAIT_WEED_TOLERANCE 27 +#define TRAIT_ENDURANCE 28 +#define TRAIT_YIELD 29 +#define TRAIT_SPREAD 30 +#define TRAIT_MATURATION 31 +#define TRAIT_PRODUCTION 32 +#define TRAIT_TELEPORTING 33 +#define TRAIT_PLANT_COLOUR 34 +#define TRAIT_PRODUCT_COLOUR 35 +#define TRAIT_BIOLUM 36 +#define TRAIT_BIOLUM_COLOUR 37 +#define TRAIT_IMMUTABLE 38 \ No newline at end of file diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 9a53ba5a22..2b607f0509 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -2,8 +2,9 @@ /obj/item/weapon/reagent_containers/food/snacks/grown name = "fruit" - desc = "It's a fruit." - icon = 'icons/obj/harvest.dmi' + //icon = 'icons/obj/harvest.dmi' //Todo convert to greyscale + icon = 'icons/obj/hydroponics_products.dmi' + desc = "The product of some kind of plant." //Todo store descs for retrieval. var/plantname var/datum/seed/seed @@ -19,18 +20,29 @@ // Fill the object up with the appropriate reagents. if(planttype) plantname = planttype - seed = seed_types[plantname] - if(!seed || !seed.chems) - return - potency = seed.get_trait(TRAIT_POTENCY) + if(!plantname) + return - for(var/rid in seed.chems) - var/list/reagent_data = seed.chems[rid] - var/rtotal = reagent_data[1] - if(reagent_data.len > 1 && potency > 0) - rtotal += round(potency/reagent_data[2]) - reagents.add_reagent(rid,max(1,rtotal)) + seed = seed_types[plantname] + if(!seed) + return + + name = "[seed.seed_name]" + icon_state = "[seed.get_trait(TRAIT_PRODUCT_ICON)]" + color = "[seed.get_trait(TRAIT_PRODUCT_COLOUR)]" + + if(!seed.chems) + return + + potency = seed.get_trait(TRAIT_POTENCY) + + for(var/rid in seed.chems) + var/list/reagent_data = seed.chems[rid] + var/rtotal = reagent_data[1] + if(reagent_data.len > 1 && potency > 0) + rtotal += round(potency/reagent_data[2]) + reagents.add_reagent(rid,max(1,rtotal)) if(reagents.total_volume > 0) bitesize = 1+round(reagents.total_volume / 2, 1) @@ -183,461 +195,10 @@ user.SetLuminosity(user.luminosity - seed.get_trait(TRAIT_BIOLUM)) SetLuminosity(seed.get_trait(TRAIT_BIOLUM)) -// Food object defines follow. -/obj/item/weapon/reagent_containers/food/snacks/grown/corn - name = "ear of corn" - desc = "Needs some butter!" - plantname = "corn" - icon_state = "corn" - potency = 40 - filling_color = "#FFEE00" - trash = /obj/item/weapon/corncob - -/obj/item/weapon/reagent_containers/food/snacks/grown/cherries - name = "cherries" - desc = "Great for toppings!" - icon_state = "cherry" - filling_color = "#FF0000" - gender = PLURAL - plantname = "cherry" - -/obj/item/weapon/reagent_containers/food/snacks/grown/poppy - name = "poppy" - desc = "Long-used as a symbol of rest, peace, and death." - icon_state = "poppy" - potency = 30 - filling_color = "#CC6464" - plantname = "poppies" - -/obj/item/weapon/reagent_containers/food/snacks/grown/harebell - name = "harebell" - desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten’d not thy breath.\"" - icon_state = "harebell" - potency = 1 - filling_color = "#D4B2C9" - plantname = "harebells" - -/obj/item/weapon/reagent_containers/food/snacks/grown/potato - name = "potato" - desc = "Boil 'em! Mash 'em! Stick 'em in a stew!" - icon_state = "potato" - potency = 25 - filling_color = "#E6E8DA" - plantname = "potato" - -/obj/item/weapon/reagent_containers/food/snacks/grown/grapes - name = "bunch of grapes" - desc = "Nutritious!" - icon_state = "grapes" - filling_color = "#A332AD" - plantname = "grapes" - -/obj/item/weapon/reagent_containers/food/snacks/grown/greengrapes - name = "bunch of green grapes" - desc = "Nutritious!" - icon_state = "greengrapes" - potency = 25 - filling_color = "#A6FFA3" - plantname = "greengrapes" - -/obj/item/weapon/reagent_containers/food/snacks/grown/peanut - name = "peanut" - desc = "Nuts!" - icon_state = "peanut" - filling_color = "857e27" - potency = 25 - plantname = "peanut" - -/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage - name = "cabbage" - desc = "Ewwwwwwwwww. Cabbage." - icon_state = "cabbage" - potency = 25 - filling_color = "#A2B5A1" - plantname = "cabbage" - -/obj/item/weapon/reagent_containers/food/snacks/grown/berries - name = "bunch of berries" - desc = "Nutritious!" - icon_state = "berrypile" - filling_color = "#C2C9FF" - plantname = "berries" - -/obj/item/weapon/reagent_containers/food/snacks/grown/plastellium - name = "clump of plastellium" - desc = "Hmm, needs some processing" - icon_state = "plastellium" - filling_color = "#C4C4C4" - plantname = "plastic" - -/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries - name = "bunch of glow-berries" - desc = "Nutritious!" - filling_color = "#D3FF9E" - icon_state = "glowberrypile" - plantname = "glowberries" - -/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod - name = "cocoa pod" - desc = "Can be ground into cocoa powder." - icon_state = "cocoapod" - potency = 50 - filling_color = "#9C8E54" - plantname = "cocoa" - -/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane - name = "sugarcane" - desc = "Sickly sweet." - icon_state = "sugarcane" - potency = 50 - filling_color = "#C0C9AD" - plantname = "sugarcane" - -/obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries - name = "bunch of poison-berries" - desc = "Taste so good, you could die!" - icon_state = "poisonberrypile" - gender = PLURAL - potency = 15 - filling_color = "#B422C7" - plantname = "poisonberries" - -/obj/item/weapon/reagent_containers/food/snacks/grown/deathberries - name = "bunch of death-berries" - desc = "Taste so good, you could die!" - icon_state = "deathberrypile" - gender = PLURAL - potency = 50 - filling_color = "#4E0957" - plantname = "deathberries" - -/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris - name = "ambrosia vulgaris branch" - desc = "This is a plant containing various healing chemicals." - icon_state = "ambrosiavulgaris" - potency = 10 - filling_color = "#125709" - plantname = "ambrosia" - -/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus - name = "ambrosia deus branch" - desc = "Eating this makes you feel immortal!" - icon_state = "ambrosiadeus" - potency = 10 - filling_color = "#229E11" - plantname = "ambrosiadeus" - -/obj/item/weapon/reagent_containers/food/snacks/grown/apple - name = "apple" - desc = "It's a little piece of Eden." - icon_state = "apple" - potency = 15 - filling_color = "#DFE88B" - plantname = "apple" - -/obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned - name = "apple" - desc = "It's a little piece of Eden." - icon_state = "apple" - potency = 15 - filling_color = "#B3BD5E" - plantname = "poisonapple" - -/obj/item/weapon/reagent_containers/food/snacks/grown/goldapple - name = "golden apple" - desc = "Emblazoned upon the apple is the word 'Kallisti'." - icon_state = "goldapple" - potency = 15 - filling_color = "#F5CB42" - plantname = "goldapple" - -/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon - name = "watermelon" - desc = "It's full of watery goodness." - icon_state = "watermelon" - potency = 10 - filling_color = "#FA2863" - slice_path = /obj/item/weapon/reagent_containers/food/snacks/watermelonslice - slices_num = 5 - plantname = "watermelon" - -/obj/item/weapon/reagent_containers/food/snacks/grown/lime - name = "lime" - desc = "It's so sour, your face will twist." - icon_state = "lime" - potency = 20 - filling_color = "#28FA59" - plantname = "lime" - -/obj/item/weapon/reagent_containers/food/snacks/grown/lemon - name = "lemon" - desc = "When life gives you lemons, be grateful they aren't limes." - icon_state = "lemon" - potency = 20 - filling_color = "#FAF328" - plantname = "lemon" - -/obj/item/weapon/reagent_containers/food/snacks/grown/orange - name = "orange" - desc = "It's a tangy fruit." - icon_state = "orange" - potency = 20 - filling_color = "#FAAD28" - plantname = "orange" - -/obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet - name = "white-beet" - desc = "You can't beat white-beet." - icon_state = "whitebeet" - potency = 15 - filling_color = "#FFFCCC" - plantname = "whitebeet" - -/obj/item/weapon/reagent_containers/food/snacks/grown/banana - name = "banana" - desc = "It's an excellent prop for a comedy." - icon = 'icons/obj/items.dmi' - icon_state = "banana" - item_state = "banana" - filling_color = "#FCF695" - trash = /obj/item/weapon/bananapeel - plantname = "banana" - -/obj/item/weapon/reagent_containers/food/snacks/grown/chili - name = "chili" - desc = "It's spicy! Wait... IT'S BURNING ME!!" - icon_state = "chilipepper" - filling_color = "#FF0000" - plantname = "chili" - -/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant - name = "eggplant" - desc = "Maybe there's a chicken inside?" - icon_state = "eggplant" - filling_color = "#550F5C" - plantname = "eggplant" - -/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans - name = "soybeans" - desc = "It's pretty bland, but oh the possibilities..." - gender = PLURAL - filling_color = "#E6E8B7" - icon_state = "soybeans" - plantname = "soybean" - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato - name = "tomato" - desc = "I say to-mah-to, you say tom-mae-to." - icon_state = "tomato" - filling_color = "#FF0000" - potency = 10 - plantname = "tomato" - -/obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato - name = "blood-tomato" - desc = "So juicy." - icon_state = "bloodtomato" - potency = 10 - filling_color = "#FF0000" - plantname = "bloodtomato" - -/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato - name = "blue-tomato" - desc = "I say blue-mah-to, you say blue-mae-to." - icon_state = "bluetomato" - potency = 10 - filling_color = "#586CFC" - plantname = "bluetomato" - -/obj/item/weapon/reagent_containers/food/snacks/grown/wheat - name = "wheat" - desc = "Sigh... wheat... a-grain?" - gender = PLURAL - icon_state = "wheat" - filling_color = "#F7E186" - plantname = "wheat" - -/obj/item/weapon/reagent_containers/food/snacks/grown/ricestalk - name = "rice stalk" - desc = "Rice to see you." - gender = PLURAL - icon_state = "rice" - filling_color = "#FFF8DB" - plantname = "rice" - -/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod - name = "kudzu pod" - desc = "Pueraria Virallis: An invasive species with vines that rapidly creep and wrap around whatever they contact." - icon_state = "kudzupod" - filling_color = "#59691B" - plantname = "kudzu" - -/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper - name = "ice-pepper" - desc = "It's a mutant strain of chili" - icon_state = "icepepper" - potency = 20 - filling_color = "#66CEED" - plantname = "icechili" - -/obj/item/weapon/reagent_containers/food/snacks/grown/carrot - name = "carrot" - desc = "It's good for the eyes!" - icon_state = "carrot" - potency = 10 - filling_color = "#FFC400" - plantname = "carrot" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi - name = "reishi" - desc = "Ganoderma lucidum: A special fungus believed to help relieve stress." - icon_state = "reishi" - potency = 10 - filling_color = "#FF4800" - plantname = "reishi" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita - name = "fly amanita" - desc = "Amanita Muscaria: Learn poisonous mushrooms by heart. Only pick mushrooms you know." - icon_state = "amanita" - potency = 10 - filling_color = "#FF0000" - plantname = "amanita" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel - name = "destroying angel" - desc = "Amanita Virosa: Deadly poisonous basidiomycete fungus filled with alpha amatoxins." - icon_state = "angel" - potency = 35 - filling_color = "#FFDEDE" - plantname = "destroyingangel" +// Predefined types for placing on the map. /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap - name = "liberty-cap" - desc = "Psilocybe Semilanceata: Liberate yourself!" - icon_state = "libertycap" - potency = 15 - filling_color = "#F714BE" plantname = "libertycap" -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet - name = "plump-helmet" - desc = "Plumus Hellmus: Plump, soft and s-so inviting~" - icon_state = "plumphelmet" - filling_color = "#F714BE" - plantname = "plumphelmet" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom - name = "walking mushroom" - desc = "Plumus Locomotus: The beginning of the great walk." - icon_state = "walkingmushroom" - filling_color = "#FFBFEF" - potency = 30 - plantname = "walkingmushroom" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle - name = "chanterelle cluster" - desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!" - icon_state = "chanterelle" - filling_color = "#FFE991" - plantname = "mushrooms" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom - name = "glowshroom cluster" - desc = "Mycena Bregprox: This species of mushroom glows in the dark. Or does it?" - icon_state = "glowshroom" - filling_color = "#DAFF91" - potency = 30 - plantname = "glowshroom" - -/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato - name = "blue-space tomato" - desc = "So lubricated, you might slip through space-time." - icon_state = "bluespacetomato" - potency = 20 - origin_tech = "bluespace=3" - filling_color = "#91F8FF" - plantname = "bluespacetomato" - -// Super special snowflake grown items below. -/obj/item/weapon/reagent_containers/food/snacks/grown/shand - name = "S'rendarr's Hand leaf" - desc = "A leaf sample from a lowland thicket shrub. Smells strongly like wax." - icon_state = "shand" - filling_color = "#70C470" - plantname = "shand" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mtear - name = "sprig of Messa's Tear" - desc = "A mountain climate herb with a soft, cold blue flower, known to contain an abundance of healing chemicals." - icon_state = "mtear" - filling_color = "#70C470" - plantname = "mtear" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mtear/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - var/obj/item/stack/medical/ointment/tajaran/poultice = new /obj/item/stack/medical/ointment/tajaran(user.loc) - - poultice.heal_burn = potency - del(src) - - user << "You mash the petals into a poultice." - -/obj/item/weapon/reagent_containers/food/snacks/grown/shand/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - var/obj/item/stack/medical/bruise_pack/tajaran/poultice = new /obj/item/stack/medical/bruise_pack/tajaran(user.loc) - - poultice.heal_brute = potency - del(src) - - user << "You mash the leaves into a poultice." - -/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin - name = "pumpkin" - desc = "It's large and scary." - icon_state = "pumpkin" - potency = 10 - filling_color = "#FAB728" - plantname = "pumpkin" - -/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/twohanded/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/melee/energy)) - user.show_message("You carve a face into [src]!", 1) - new /obj/item/clothing/head/pumpkinhead (user.loc) - del(src) - return - -/obj/item/weapon/reagent_containers/food/snacks/grown/sunflower // FLOWER POWER! - plantname = "sunflowers" - name = "sunflower" - desc = "A beautiful yellow flower." - icon_state = "sunflower" - damtype = "fire" - force = 0 - throw_speed = 1 - throw_range = 3 - -/obj/item/weapon/reagent_containers/food/snacks/grown/nettle - plantname = "nettle" - desc = "It's probably not wise to touch it with bare hands..." - icon = 'icons/obj/weapons.dmi' - name = "nettle" - icon_state = "nettle" - damtype = "fire" - force = 15 - w_class = 2.0 - throw_speed = 1 - throw_range = 3 - origin_tech = "combat=1" - attack_verb = list("stung") - hitsound = "" - -/obj/item/weapon/reagent_containers/food/snacks/grown/nettle/death - plantname = "deathnettle" - desc = "A cruel and toxic-looking plant." - name = "deathnettle" - icon_state = "deathnettle" - origin_tech = "combat=3" \ No newline at end of file +/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris + plantname = "ambrosia" diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 0ff345285a..3dc7a9429e 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -79,4 +79,15 @@ user << "You use [W] to fashion a pipe out of the corn cob!" new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc) del(src) - return \ No newline at end of file + return + +/obj/item/weapon/bananapeel + name = "banana peel" + desc = "A peel from a banana." + icon = 'icons/obj/items.dmi' + icon_state = "banana_peel" + item_state = "banana_peel" + w_class = 2.0 + throwforce = 0 + throw_speed = 4 + throw_range = 20 diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index e417c115dc..ee8c9612be 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -108,12 +108,13 @@ proc/populate_seed_list() var/can_self_harvest = 0 // Mostly used for living mobs. var/growth_stages = 0 // Number of stages the plant passes through before it is mature. var/list/traits = list() // Initialized in New() - var/list/products // Possible fruit/other product paths. var/list/mutants // Possible predefined mutant varieties, if any. var/list/chems // Chemicals that plant produces in products/injects into victim. var/list/consume_gasses // The plant will absorb these gasses during its life. var/list/exude_gasses // The plant will exude these gasses during its life. var/splat_type = /obj/effect/decal/cleanable/fruit_smudge // Graffiti decal. + var/kitchen_tag // Used by the reagent grinder. + var/trash_type // Garbage item produced when eaten. /datum/seed/New() @@ -377,7 +378,6 @@ proc/populate_seed_list() display_name = "strange plants" // TODO: name generator. mysterious = 1 seed_noun = pick("spores","nodes","cuttings","seeds") - products = list(pick(typesof(/obj/item/weapon/reagent_containers/food/snacks/grown)-/obj/item/weapon/reagent_containers/food/snacks/grown)) set_trait(TRAIT_POTENCY,rand(5,30),200,0) set_trait(TRAIT_PRODUCT_ICON,pick(plant_product_sprites)) @@ -604,9 +604,6 @@ proc/populate_seed_list() for(var/trait in list(TRAIT_YIELD, TRAIT_ENDURANCE)) if(get_trait(trait) > 0) set_trait(trait,get_trait(trait),null,1,0.85) - if(!products) products = list() - products |= gene.values["[TRAIT_PRODUCTS]"] - if(!chems) chems = list() var/list/gene_value = gene.values["[TRAIT_CHEMS]"] @@ -651,7 +648,6 @@ proc/populate_seed_list() switch(genetype) if(GENE_PRODUCTS) - P.values["[TRAIT_PRODUCTS]"] = products P.values["[TRAIT_CHEMS]"] = chems P.values["[TRAIT_EXUDE_GASSES]"] = exude_gasses traits_to_copy = list(TRAIT_ALTER_TEMP,TRAIT_POTENCY,TRAIT_HARVEST_REPEAT,TRAIT_PRODUCES_POWER,TRAIT_JUICY,TRAIT_PRODUCT_ICON,TRAIT_PLANT_ICON) @@ -677,11 +673,7 @@ proc/populate_seed_list() if(!user) return - var/got_product - if(!isnull(products) && products.len && get_trait(TRAIT_YIELD) > 0) - got_product = 1 - - if(!force_amount && !got_product && !harvest_sample) + if(!force_amount && get_trait(TRAIT_YIELD) == 0 && !harvest_sample) if(istype(user)) user << "You fail to harvest anything useful." else if(istype(user)) user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]." @@ -712,9 +704,7 @@ proc/populate_seed_list() currently_querying = list() for(var/i = 0;i seed.get_trait(TRAIT_MATURATION)) && \ + if((age > seed.get_trait(TRAIT_MATURATION)) && \ ((age - lastproduce) > seed.get_trait(TRAIT_PRODUCTION)) && \ (!harvest && !dead)) harvest = 1 diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index fb01f4d217..d4b1777e54 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -108,9 +108,6 @@ else if(grown_seed.get_trait(TRAIT_IMMUTABLE) > 0) dat += "This plant does not possess genetics that are alterable.
" - if(grown_seed.products && grown_seed.products.len) - dat += "The mature plant will produce [grown_seed.products.len == 1 ? "fruit" : "[grown_seed.products.len] varieties of fruit"].
" - if(grown_seed.get_trait(TRAIT_REQUIRES_NUTRIENTS)) if(grown_seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) < 0.05) dat += "It consumes a small amount of nutrient fluid.
" diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 4442e8caf0..ca0b4e173a 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -222,15 +222,18 @@ var/global/chicken_count = 0 chicken_count -= 1 /mob/living/simple_animal/chicken/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/wheat)) //feedin' dem chickens - if(!stat && eggsleft < 8) - user.visible_message("\blue [user] feeds [O] to [name]! It clucks happily.","\blue You feed [O] to [name]! It clucks happily.") - user.drop_item() - del(O) - eggsleft += rand(1, 4) - //world << eggsleft + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) //feedin' dem chickens + var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O + if(G.seed && G.seed.kitchen_tag == "wheat") + if(!stat && eggsleft < 8) + user.visible_message("\blue [user] feeds [O] to [name]! It clucks happily.","\blue You feed [O] to [name]! It clucks happily.") + user.drop_item() + del(O) + eggsleft += rand(1, 4) + else + user << "\blue [name] doesn't seem hungry!" else - user << "\blue [name] doesn't seem hungry!" + user << "[name] doesn't seem interested in that." else ..() diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 074c5dbce3..e7edbe2317 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -646,7 +646,7 @@ if(type in diseases) // Make sure this is a disease D = new type(0, null) var/list/data = list("viruses"=list(D)) - var/name = sanitize(copytext(input(usr,"Name:","Name the culture",D.name), 1, MAX_NAME_LEN)) + var/name = sanitize(input(usr,"Name:","Name the culture",D.name)) if(!name || name == " ") name = D.name B.name = "[name] culture bottle" B.desc = "A small bottle. Contains [D.agent] culture in synthblood medium." @@ -824,56 +824,6 @@ var/inuse = 0 var/obj/item/weapon/reagent_containers/beaker = null var/limit = 10 - var/list/blend_items = list ( - - //Sheets - /obj/item/stack/sheet/mineral/phoron = list("phoron" = 20), - /obj/item/stack/sheet/mineral/uranium = list("uranium" = 20), - /obj/item/stack/sheet/mineral/silver = list("silver" = 20), - /obj/item/stack/sheet/mineral/gold = list("gold" = 20), - /obj/item/weapon/reagent_containers/food/snacks/grown/nettle/death = list("pacid" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/nettle = list("sacid" = 0), - - //Blender Stuff - /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/corn = list("cornoil" = 0), - ///obj/item/weapon/reagent_containers/food/snacks/grown/wheat = list("flour" = -5), - /obj/item/weapon/reagent_containers/food/snacks/grown/ricestalk = list("rice" = -5), - /obj/item/weapon/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/plastellium = list("plasticide" = 5), - - - //archaeology! - /obj/item/weapon/rocksliver = list("ground_rock" = 50), - - - - //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! - /obj/item/weapon/reagent_containers/pill = list(), - /obj/item/weapon/reagent_containers/food = list(), - - //Crayons - /obj/item/toy/crayon = list() - ) - - var/list/juice_items = list ( - - //Juicer Stuff - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato = list("tomatojuice" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot = list("carrotjuice" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/berries = list("berryjuice" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/banana = list("banana" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/potato = list("potato" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/lemon = list("lemonjuice" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/orange = list("orangejuice" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/lime = list("limejuice" = 0), - /obj/item/weapon/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/grapes = list("grapejuice" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries = list("poisonberryjuice" = 0), - ) - - var/list/holdingitems = list() /obj/machinery/reagentgrinder/New() @@ -885,10 +835,8 @@ icon_state = "juicer"+num2text(!isnull(beaker)) return - /obj/machinery/reagentgrinder/attackby(var/obj/item/O as obj, var/mob/user as mob) - if (istype(O,/obj/item/weapon/reagent_containers/glass) || \ istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker)) @@ -908,24 +856,36 @@ return 1 //Fill machine with the plantbag! - if(istype(O, /obj/item/weapon/storage/bag/plants)) + if(!istype(O)) + return - for (var/obj/item/weapon/reagent_containers/food/snacks/grown/G in O.contents) + if(istype(O,/obj/item/weapon/storage/bag/plants)) + + var/failed = 1 + for (var/obj/item/G in O.contents) + if(!O.reagents || !O.reagents.total_volume) + continue + failed = 0 O.contents -= G G.loc = src holdingitems += G - if(holdingitems && holdingitems.len >= limit) //Sanity checking so the blender doesn't overfill - user << "You fill the All-In-One grinder to the brim." + if(holdingitems && holdingitems.len >= limit) break + if(failed) + user << "Nothing in the plant bag is usable." + return 1 + if(!O.contents.len) - user << "You empty the plant bag into the All-In-One grinder." + user << "You fill \the [src]." + else + user << "You fill \the [src]. Some of the things in the plant bag aren't suitable." src.updateUsrDialog() return 0 - if (!is_type_in_list(O, blend_items) && !is_type_in_list(O, juice_items)) - user << "Cannot refine into a reagent." + if(!O.reagents || !O.reagents.total_volume) + user << "\The [O] is not suitable for blending." return 1 user.before_take_item(O) @@ -974,8 +934,7 @@ [beaker_contents]
"} if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) - dat += "
Grind the reagents
" - dat += "Juice the reagents

" + dat += "Process the reagents
" if(holdingitems && holdingitems.len > 0) dat += "Eject the reagents
" if (beaker) @@ -994,8 +953,6 @@ switch(href_list["action"]) if ("grind") grind() - if("juice") - juice() if("eject") eject() if ("detach") @@ -1025,190 +982,32 @@ holdingitems -= O holdingitems = list() -/obj/machinery/reagentgrinder/proc/is_allowed(var/obj/item/weapon/reagent_containers/O) - for (var/i in blend_items) - if(istype(O, i)) - return 1 - return 0 - -/obj/machinery/reagentgrinder/proc/get_allowed_by_id(var/obj/item/weapon/grown/O) - for (var/i in blend_items) - if (istype(O, i)) - return blend_items[i] - -/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(var/obj/item/weapon/reagent_containers/food/snacks/O) - for(var/i in blend_items) - if(istype(O, i)) - return blend_items[i] - -/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(var/obj/item/weapon/reagent_containers/food/snacks/O) - for(var/i in juice_items) - if(istype(O, i)) - return juice_items[i] - -/obj/machinery/reagentgrinder/proc/get_grownweapon_amount(var/obj/item/weapon/grown/O) - if (!istype(O)) - return 5 - else if (O.potency == -1) - return 5 - else - return round(O.potency) - -/obj/machinery/reagentgrinder/proc/get_juice_amount(var/obj/item/weapon/reagent_containers/food/snacks/grown/O) - if (!istype(O)) - return 5 - else if (O.potency == -1) - return 5 - else - return round(5*sqrt(O.potency)) - /obj/machinery/reagentgrinder/proc/remove_object(var/obj/item/O) holdingitems -= O del(O) -/obj/machinery/reagentgrinder/proc/juice() - power_change() - if(stat & (NOPOWER|BROKEN)) - return - if (!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) - return - playsound(src.loc, 'sound/machines/juicer.ogg', 20, 1) - inuse = 1 - spawn(50) - inuse = 0 - interact(usr) - //Snacks - for (var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - - var/allowed = get_allowed_juice_by_id(O) - if(isnull(allowed)) - break - - for (var/r_id in allowed) - - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = get_juice_amount(O) - - beaker.reagents.add_reagent(r_id, min(amount, space)) - - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - - remove_object(O) - /obj/machinery/reagentgrinder/proc/grind() power_change() if(stat & (NOPOWER|BROKEN)) return + + // Sanity check. if (!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) return + playsound(src.loc, 'sound/machines/blender.ogg', 50, 1) inuse = 1 + + // Reset the machine. spawn(60) inuse = 0 interact(usr) - //Snacks and Plants - for (var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/allowed = get_allowed_snack_by_id(O) - if(isnull(allowed)) - break - - for (var/r_id in allowed) - - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - if(amount <= 0) - if(amount == 0) - if (O.reagents != null && O.reagents.has_reagent("nutriment")) - beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment"), space)) - O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) - else - if (O.reagents != null && O.reagents.has_reagent("nutriment")) - beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment")*abs(amount)), space)) - O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) - - else - O.reagents.trans_id_to(beaker, r_id, min(amount, space)) - - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - - if(O.reagents.reagent_list.len == 0) + // Process. + for (var/obj/item/O in holdingitems) + O.reagents.trans_to(beaker, min(O.reagents.total_volume, (beaker.reagents.maximum_volume - beaker.reagents.total_volume))) + if(O.reagents.total_volume == 0) remove_object(O) - - //Sheets - for (var/obj/item/stack/sheet/O in holdingitems) - var/allowed = get_allowed_by_id(O) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break - for(var/i = 1; i <= round(O.amount, 1); i++) - for (var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - beaker.reagents.add_reagent(r_id,min(amount, space)) - if (space < amount) - break - if (i == round(O.amount, 1)) - remove_object(O) - break - //Plants - for (var/obj/item/weapon/grown/O in holdingitems) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/allowed = get_allowed_by_id(O) - for (var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - if (amount == 0) - if (O.reagents != null && O.reagents.has_reagent(r_id)) - beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id), space)) - else - beaker.reagents.add_reagent(r_id,min(amount, space)) - - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - remove_object(O) - - //xenoarch - for(var/obj/item/weapon/rocksliver/O in holdingitems) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/allowed = get_allowed_by_id(O) - for (var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - beaker.reagents.add_reagent(r_id,min(amount, space), O.geological_data) - - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - remove_object(O) - - //crayons - for (var/obj/item/toy/crayon/O in holdingitems) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/amount = round(O.uses/3) //full crayon gives 10 juice - var/dustcolour = "red" - if (O.colourName == "mime") - dustcolour = "grey" //black+white - else if (O.colourName == "rainbow") - dustcolour = "brown" //mix of all colours - else if (!isnull(O.colourName)) //all other defined colours - dustcolour = O.colourName - beaker.reagents.add_reagent("crayon_dust_[dustcolour]",amount) - remove_object(O) - - //Everything else - Transfers reagents from it into beaker - for (var/obj/item/weapon/reagent_containers/O in holdingitems) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/amount = O.reagents.total_volume - O.reagents.trans_to(beaker, amount) - if(!O.reagents.total_volume) - remove_object(O) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 4d6b44fb84..6b76e75d03 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -586,6 +586,14 @@ datum required_reagents = list("capsaicin" = 2) required_catalysts = list("phoron" = 5) result_amount = 1 + + ketchup + name = "Ketchup" + id = "ketchup" + result = "ketchup" + required_reagents = list("tomatojuice" = 2, "water" = 1, "sugar" = 1) + result_amount = 4 + /////////////////////////////////////////////////////////////////////////////////// // foam and foam precursor diff --git a/code/modules/research/xenoarchaeology/geosample.dm b/code/modules/research/xenoarchaeology/geosample.dm index 401ae13cd3..689f61b888 100644 --- a/code/modules/research/xenoarchaeology/geosample.dm +++ b/code/modules/research/xenoarchaeology/geosample.dm @@ -29,6 +29,8 @@ icon_state = "sliver[rand(1,3)]" pixel_x = rand(0,16)-8 pixel_y = rand(0,8)-8 + create_reagents(50) + reagents.add_reagent("ground_rock",50) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Geosample datum diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm index 28724abc1a..3def3b66c7 100644 --- a/maps/exodus-2.dmm +++ b/maps/exodus-2.dmm @@ -866,7 +866,7 @@ "qH" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/administration/centcom) "qI" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "admin_shuttle_bay"; name = "shuttle bay controller"; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "admin_shuttle_bay_door"},/turf/unsimulated/floor{name = "plating"},/area/centcom) "qJ" = (/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living) -"qK" = (/obj/structure/table,/obj/machinery/juicer{pixel_y = 6},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living) +"qK" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living) "qL" = (/obj/machinery/door/airlock/external,/turf/unsimulated/floor{name = "plating"},/area/centcom/living) "qM" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/living) "qN" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom/living) @@ -1237,7 +1237,7 @@ "xO" = (/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/centcom/specops) "xP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) "xQ" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"xR" = (/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/turf/unsimulated/floor{dir = 6; icon_state = "asteroid8"; name = "sand"},/area/centcom/specops) +"xR" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/handcuffs,/obj/item/device/flash,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/gun/energy/stunrevolver,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "xS" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) "xT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor,/area/centcom/control) "xU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor,/area/centcom/control) @@ -1288,7 +1288,7 @@ "yN" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) "yO" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) "yP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor,/area/centcom/control) -"yQ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/handcuffs,/obj/item/device/flash,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/gun/energy/stunrevolver,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) +"yQ" = (/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/turf/unsimulated/floor{dir = 6; icon_state = "asteroid8"; name = "sand"},/area/centcom/specops) "yR" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "yS" = (/obj/item/device/radio/intercom{broadcasting = 1; dir = 8; listening = 0; name = "Station Intercom (General)"; pixel_x = -28},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) "yT" = (/turf/unsimulated/floor{icon_state = "green"; dir = 1},/area/centcom/control) @@ -1882,9 +1882,9 @@ "Kj" = (/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station) "Kk" = (/obj/effect/decal/remains/human,/turf/unsimulated/floor{tag = "icon-lava"; name = "plating"; icon_state = "lava"},/area/wizard_station) "Kl" = (/turf/unsimulated/floor{tag = "icon-lava"; name = "plating"; icon_state = "lava"},/area/wizard_station) -"Km" = (/turf/unsimulated/floor{tag = "icon-ironsand8"; icon_state = "ironsand8"},/turf/unsimulated/floor{tag = "icon-asteroid8"; name = "plating"; icon_state = "asteroid8"},/area/wizard_station) -"Kn" = (/turf/unsimulated/floor{tag = "icon-ironsand11"; icon_state = "ironsand11"},/turf/unsimulated/floor{tag = "icon-asteroid5"; name = "plating"; icon_state = "asteroid5"},/area/wizard_station) -"Ko" = (/turf/unsimulated/floor{tag = "icon-ironsand7"; icon_state = "ironsand7"},/mob/living/simple_animal/crab{name = "Experiment 68a"},/turf/unsimulated/floor{tag = "icon-asteroid7"; name = "plating"; icon_state = "asteroid7"},/area/wizard_station) +"Km" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/roller,/obj/item/roller,/obj/item/roller,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) +"Kn" = (/turf/unsimulated/floor{tag = "icon-ironsand8"; icon_state = "ironsand8"},/turf/unsimulated/floor{tag = "icon-asteroid8"; name = "plating"; icon_state = "asteroid8"},/area/wizard_station) +"Ko" = (/turf/unsimulated/floor{tag = "icon-ironsand11"; icon_state = "ironsand11"},/turf/unsimulated/floor{tag = "icon-asteroid5"; name = "plating"; icon_state = "asteroid5"},/area/wizard_station) "Kp" = (/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/wizard_station) "Kq" = (/obj/structure/flora/ausbushes/fullgrass,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/wizard_station) "Kr" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) @@ -1902,7 +1902,7 @@ "KD" = (/obj/machinery/optable,/obj/item/organ/brain,/obj/structure/window/basic{dir = 1},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "KE" = (/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{tag = "icon-lava"; name = "plating"; icon_state = "lava"},/area/wizard_station) "KF" = (/obj/effect/landmark{name = "Holocarp Spawn Random"},/turf/simulated/floor/holofloor{icon_state = "1"; dir = 5},/area/holodeck/source_space) -"KG" = (/turf/unsimulated/floor{tag = "icon-ironsand14"; icon_state = "ironsand14"},/turf/unsimulated/floor{tag = "icon-asteroid7"; name = "plating"; icon_state = "asteroid7"},/area/wizard_station) +"KG" = (/turf/unsimulated/floor{tag = "icon-ironsand7"; icon_state = "ironsand7"},/mob/living/simple_animal/crab{name = "Experiment 68a"},/turf/unsimulated/floor{tag = "icon-asteroid7"; name = "plating"; icon_state = "asteroid7"},/area/wizard_station) "KH" = (/obj/structure/flora/ausbushes/grassybush,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/wizard_station) "KI" = (/mob/living/simple_animal/hostile/retaliate/goat{name = "Experiment 97d"},/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/wizard_station) "KJ" = (/obj/item/weapon/caution,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) @@ -1927,7 +1927,7 @@ "Lc" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/vox/station) "Ld" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox/station) "Le" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{dir = 2; id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station) -"Lf" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/roller,/obj/item/roller,/obj/item/roller,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) +"Lf" = (/turf/unsimulated/floor{tag = "icon-ironsand14"; icon_state = "ironsand14"},/turf/unsimulated/floor{tag = "icon-asteroid7"; name = "plating"; icon_state = "asteroid7"},/area/wizard_station) "Lg" = (/obj/structure/table/rack,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/grenade_launcher,/obj/item/rig_module/device/drill,/obj/item/rig_module/device/healthscanner,/obj/item/rig_module/device/plasmacutter,/obj/item/rig_module/device/rcd,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/injector,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "Lh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station) "Li" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station) @@ -2086,13 +2086,13 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutvIvbvJoNukujulumtZoNoNxatZtZvOoNuyvQoNvRvRvRvRvRvRvSvTcZtvtNtxufufvVvWvXvXvXvXvXvXvXvYueufufugvZwawbwcwdugweuNuptxurururtxwfwfuNwfwfvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwgaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMuUuVuVuVuVuVuVuVuVuVuVuVuVuVwWuXuVuVuVuYwWwivavbwjoNtvoNoNoNtZoNvetZtZtZwloNwmwnwowpwpwpwpwpwpwqtvtvtvtvtvufufvVwrwsufwtwuwvufwswrueufufugugugugugugugweuNuptxurururtxwwwwuNwwwwvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutwxvbwyoNwzwAwBoNtZoNvNvKtZtZwEoNwmvMtvwFwGwGwGwHwGwItvwJwJwJtvufufwKwLwMwNwOwPwQwRwSwLwTufuftxwUwUwUwUwUtxtxuOtxtxtxuOtxtxuNuNuNuNuNvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVwhoUoVoVoVqVwhwXwYvMwZoNyQtZxboNxcoNoNoNxdoNoNoNwmwnuWxfxfxfxfxfxfxfxgxfxfxfxgufufufxhufufxiufxiufufxhufufufxjurururururxjurururururururxjwwwwwwwwwwvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMmu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVwhoUoVoVoVqVwhwXwYvMwZoNxRtZxboNxcoNoNoNxdoNoNoNwmwnuWxfxfxfxfxfxfxfxgxfxfxfxgufufufxhufufxiufxiufufxhufufufxjurururururxjurururururururxjwwwwwwwwwwvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMmu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNxlxmvMxnoNvPuhwkoNtZxqtZxrtZxsxtxttZxutvxvxwxwxxxyxzxAtvxBxBxBtvufufvBxCxDwNxEufxFwRxGxCvDufufxjurururururxjurururururururxjwwwwwwwwwwtxuOuOtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVxHoUoVoVoVqVxHxIxJvMwnxKuhtZtZxLtZxMtZwmwmxNxNwmwmxutvxOxOxOxPxQxPxRtvtvtvtvtvufufvVwLxSufxiufxiufxSwLueufuftxxTxUxUxUxVtxtxxWtxtxtxuOtxtxtxxXxXxXtxtxurururxYurxZtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVxHoUoVoVoVqVxHxIxJvMwnxKuhtZtZxLtZxMtZwmwmxNxNwmwmxutvxOxOxOxPxQxPyQtvtvtvtvtvufufvVwLxSufxiufxiufxSwLueufuftxxTxUxUxUxVtxtxxWtxtxtxuOtxtxtxxXxXxXtxtxurururxYurxZtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNLgyaoNoNoNoNoNyboNycwmydyeyWygwmxutvtvyhyiyjykylymyhaMaMaMtxufufvVtxtxynyoufypyqtxtxueufuftxaMaMaMaMaMtxyrystxuNytuNuNyuyvywywywyxtxururuQuQururyyaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNyzyAxowDtZoNxewmydyfyfygwmxpyEyFyhyGyHyIyByKyhaMaMaMtxufufvVtxtxvlvmvmvmvotxtxueufuftxaMaMaMaMaMtxysystxyLyLyLuNyuywywywywyMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzitZtZtZtZtZtZoNxetZtZwqwqwmwmwmwmyRyhySyIyIyIyIyhaMaMaMtxufufwKyTyTyTyTyTyTyTyTyTwTufuftxaMaMaMaMaMtxyUystxyLyVyLuNyuyuyuyuyuyutxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzltZtZtZtZtZLfoNyXtZtZyYtZtZwCvdyJzcyhyIyIyIyIzdyhtxtxtxtxtxtxzetxtxufufufufuftxtxtxtxtxtxaMaMaMaMaMtxzfystxvFuNuNuNyuaMaMaMaMaMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzltZtZtZtZtZKmoNyXtZtZyYtZtZwCvdyJzcyhyIyIyIyIzdyhtxtxtxtxtxtxzetxtxufufufufuftxtxtxtxtxtxaMaMaMaMaMtxzfystxvFuNuNuNyuaMaMaMaMaMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzgzgzhyDyZxazkoNyXzmzmoNznznoNoNoNoNyhyIzozpzqzryhzsztztzszuzvufzwtxtxtxzxtxtxdCaMaMaMaMaMaMaMaMaMaMtxtxtxtxtxtxtxtxyuaMaMaMaMaMzyuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzzmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtwgmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmt aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNzAzBzBzAaMaMaMyhyIzCzDzEzDyhzszFzFzszGzHufzwtxzIwTufwKzJtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzKururzLzLururzKaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzMzNzNzNzNzOzOzNzNzPaMyhyIyIyIyIyIyhzsztztzszQzHufzwtxueufufufvVtxaMaMaMaMaMaMaMaMaMaMaMzRzSzTzUaMaMaMaMaMaMaMaMaMtxzVururururzWtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM @@ -2192,8 +2192,8 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJGJHJgIcJuJuJuJuJuJuJuJuJuHYaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJPJQJgIcJuJuJuJuJuJuJRJSJTHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIYJUJVIYIUJbJLJDJBJDJBJDJLJbIUIYJXJYIYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcIcJuJuJuJuJuJuJuJuJuHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIYJZKaIYIYIYIYIYIYKbIYIYIYIYIYIYKcKdIYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKeKfKfKgKfKfKfKgKfKfKfKgKfKfKhHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIUJKKiKjKjKjKjKjKjIYKjIYKjKjKjKjKjKjKiJKIUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKkKlKlJkKmKoKnJkKpKpKqJkKrKsKtHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIUJaKvKwKxKyKzIYKbIYKbIYKbIYKAKBKCKDKvJaIUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKlKEKkJvKGLvLuJvKHKIKpJvKJKtKKHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIUJbKvJDJDJDKLIYJDJDJDJDJDIYJDJDKMJDKvJbIUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKkKlKlJkKnKGKoJkKpKpKqJkKrKsKtHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIUJaKvKwKxKyKzIYKbIYKbIYKbIYKAKBKCKDKvJaIUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKlKEKkJvLfLvLuJvKHKIKpJvKJKtKKHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIUJbKvJDJDJDKLIYJDJDJDJDJDIYJDJDKMJDKvJbIUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMITIYKNKOKPJlHmIYJoJDJDJDKQIYKUKVKWKXKNIYIVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMKYIYKZKZIYIYIYIYKRJDJDJDKSIYIYIYIYKZKZIYLcaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMKYLdLdLcaMaMIYKTJDJDJDLaIYaMaMKYLdLdLcaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM From 09b950048646b408a60d065e988b6aeff18df194 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 4 Feb 2015 11:00:46 +1030 Subject: [PATCH 39/90] Compile fixes. Seed storage is still broken. --- baystation12.dme | 2 +- code/modules/hydroponics/grown_inedible.dm | 1 - code/modules/hydroponics/seed_storage.dm | 4 +- .../hydroponics/spreading/spreading.dm | 1 - .../hydroponics/trays/tray_reagents.dm | 11 +- code/modules/hydroponics/trays/tray_tools.dm | 130 ------------------ code/modules/mining/abandonedcrates.dm | 5 +- 7 files changed, 8 insertions(+), 146 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index 93e5a8e08a..0b0ee50ef9 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -963,8 +963,8 @@ #include "code\modules\hydroponics\seed_datums.dm" #include "code\modules\hydroponics\seed_machines.dm" #include "code\modules\hydroponics\seed_mobs.dm" -#include "code\modules\hydroponics\seed_storage.dm" #include "code\modules\hydroponics\seed_packets.dm" +#include "code\modules\hydroponics\seed_storage.dm" #include "code\modules\hydroponics\spreading\spreading.dm" #include "code\modules\hydroponics\spreading\spreading_growth.dm" #include "code\modules\hydroponics\spreading\spreading_response.dm" diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 3dc7a9429e..991fecc88b 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -39,7 +39,6 @@ icon = 'icons/obj/harvest.dmi' icon_state = "logs" force = 5 - flags = TABLEPASS throwforce = 5 w_class = 3.0 throw_speed = 3 diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index 17cab40d8a..a47b0dc046 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -59,7 +59,7 @@ for(var/typepath in starting_seeds) var/amount = starting_seeds[typepath] if(isnull(amount)) amount = 1 - + for (var/i = 1 to amount) var/O = new typepath add(O) @@ -121,7 +121,7 @@ dat += "
" else dat += "" - + dat += "
NormNo" if ("mutants" in scanner) if(seed.mutants && seed.mutants.len) diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index e60b825278..99b8ea8c7d 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -48,7 +48,6 @@ var/list/children = list() var/obj/effect/plant/parent - var/mob/living/buckled_mob var/datum/seed/seed var/floor = 0 var/spread_chance = 40 diff --git a/code/modules/hydroponics/trays/tray_reagents.dm b/code/modules/hydroponics/trays/tray_reagents.dm index 940a6fb01a..3dad0adc45 100644 --- a/code/modules/hydroponics/trays/tray_reagents.dm +++ b/code/modules/hydroponics/trays/tray_reagents.dm @@ -2,7 +2,7 @@ /obj/item/weapon/plantspray icon = 'icons/obj/hydroponics_machines.dmi' item_state = "spray" - flags = TABLEPASS | FPRINT | NOBLUDGEON + flags = NOBLUDGEON slot_flags = SLOT_BELT throwforce = 4 w_class = 2.0 @@ -54,7 +54,7 @@ icon = 'icons/obj/weapons.dmi' icon_state = "hoe" item_state = "hoe" - flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON + flags = CONDUCT | NOBLUDGEON force = 5.0 throwforce = 7.0 w_class = 2.0 @@ -70,7 +70,6 @@ name = "bottle of weedkiller" icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" - flags = FPRINT | TABLEPASS var/toxicity = 0 var/weed_kill_str = 0 @@ -78,7 +77,6 @@ name = "bottle of glyphosate" icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" - flags = FPRINT | TABLEPASS toxicity = 4 weed_kill_str = 2 @@ -86,7 +84,6 @@ name = "bottle of triclopyr" icon = 'icons/obj/chemical.dmi' icon_state = "bottle18" - flags = FPRINT | TABLEPASS toxicity = 6 weed_kill_str = 4 @@ -94,11 +91,9 @@ name = "bottle of 2,4-D" icon = 'icons/obj/chemical.dmi' icon_state = "bottle15" - flags = FPRINT | TABLEPASS toxicity = 8 weed_kill_str = 7 - // ************************************* // Nutrient defines for hydroponics // ************************************* @@ -108,7 +103,7 @@ desc = "A small glass bottle. Can hold up to 10 units." icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" - flags = FPRINT | TABLEPASS | OPENCONTAINER + flags = OPENCONTAINER possible_transfer_amounts = null w_class = 2.0 diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index d4b1777e54..404abb707c 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -205,59 +205,6 @@ return -// ************************************* -// Hydroponics Tools -// ************************************* - -/obj/item/weapon/plantspray - icon = 'icons/obj/hydroponics_machines.dmi' - item_state = "spray" - flags = NOBLUDGEON - slot_flags = SLOT_BELT - throwforce = 4 - w_class = 2.0 - throw_speed = 2 - throw_range = 10 - var/toxicity = 4 - var/pest_kill_str = 0 - var/weed_kill_str = 0 - -/obj/item/weapon/plantspray/weeds // -- Skie - - name = "weed-spray" - desc = "It's a toxic mixture, in spray form, to kill small weeds." - icon_state = "weedspray" - weed_kill_str = 6 - -/obj/item/weapon/plantspray/pests - name = "pest-spray" - desc = "It's some pest eliminator spray! Do not inhale!" - icon_state = "pestspray" - pest_kill_str = 6 - -/obj/item/weapon/plantspray/pests/old - name = "bottle of pestkiller" - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle16" - -/obj/item/weapon/plantspray/pests/old/carbaryl - name = "bottle of carbaryl" - icon_state = "bottle16" - toxicity = 4 - pest_kill_str = 2 - -/obj/item/weapon/plantspray/pests/old/lindane - name = "bottle of lindane" - icon_state = "bottle18" - toxicity = 6 - pest_kill_str = 4 - -/obj/item/weapon/plantspray/pests/old/phosmet - name = "bottle of phosmet" - icon_state = "bottle15" - toxicity = 8 - pest_kill_str = 7 - /obj/item/weapon/minihoe // -- Numbers name = "mini hoe" desc = "It's used for removing weeds or scratching your back." @@ -271,83 +218,6 @@ matter = list("metal" = 50) attack_verb = list("slashed", "sliced", "cut", "clawed") - -// ************************************* -// Weedkiller defines for hydroponics -// ************************************* - -/obj/item/weedkiller - name = "bottle of weedkiller" - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle16" - var/toxicity = 0 - var/weed_kill_str = 0 - -/obj/item/weedkiller/triclopyr - name = "bottle of glyphosate" - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle16" - toxicity = 4 - weed_kill_str = 2 - -/obj/item/weedkiller/lindane - name = "bottle of triclopyr" - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle18" - toxicity = 6 - weed_kill_str = 4 - -/obj/item/weedkiller/D24 - name = "bottle of 2,4-D" - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle15" - toxicity = 8 - weed_kill_str = 7 - - -// ************************************* -// Nutrient defines for hydroponics -// ************************************* - -/obj/item/weapon/reagent_containers/glass/fertilizer - name = "fertilizer bottle" - desc = "A small glass bottle. Can hold up to 10 units." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle16" - flags = OPENCONTAINER - possible_transfer_amounts = null - w_class = 2.0 - - var/fertilizer //Reagent contained, if any. - - //Like a shot glass! - amount_per_transfer_from_this = 10 - volume = 10 - -/obj/item/weapon/reagent_containers/glass/fertilizer/New() - ..() - - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) - - if(fertilizer) - reagents.add_reagent(fertilizer,10) - -/obj/item/weapon/reagent_containers/glass/fertilizer/ez - name = "bottle of E-Z-Nutrient" - icon_state = "bottle16" - fertilizer = "eznutrient" - -/obj/item/weapon/reagent_containers/glass/fertilizer/l4z - name = "bottle of Left 4 Zed" - icon_state = "bottle18" - fertilizer = "left4zed" - -/obj/item/weapon/reagent_containers/glass/fertilizer/rh - name = "bottle of Robust Harvest" - icon_state = "bottle15" - fertilizer = "robustharvest" - //Hatchets and things to kill kudzu /obj/item/weapon/hatchet name = "hatchet" diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index c5f4c2d2dd..9b4c660e76 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -13,19 +13,18 @@ /obj/structure/closet/crate/secure/loot/New() ..() var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") - + code = "" for(var/i = 0, i < codelen, i++) var/dig = pick(digits) code += dig digits -= dig // Player can enter codes with matching digits, but there are never matching digits in the answer - + var/loot = rand(1, 100) switch(loot) if(1 to 5) // Common things go, 5% new/obj/item/weapon/reagent_containers/food/drinks/bottle/rum(src) new/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus(src) new/obj/item/weapon/flame/lighter/zippo(src) if(6 to 10) new/obj/item/weapon/pickaxe/drill(src) From 5a1980aabd0c648681a9f468763d33f5b8631a33 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 4 Feb 2015 22:09:54 +1030 Subject: [PATCH 40/90] Updated seed storage to use trait procs. --- code/modules/hydroponics/seed_storage.dm | 73 +++++++++++------------- 1 file changed, 32 insertions(+), 41 deletions(-) diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index a47b0dc046..b291b87550 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -69,12 +69,10 @@ if (piles.len == 0) dat += "No seeds" else - dat += "" + dat += "
Name
" dat += "" if ("stats" in scanner) dat += "" - if ("produce" in scanner) - dat += "" if ("temperature" in scanner) dat += "" if ("light" in scanner) @@ -85,37 +83,32 @@ for (var/datum/seed_pile/S in piles) var/datum/seed/seed = S.seed_type dat += "" - dat += "" + dat += "" dat += "" if ("stats" in scanner) - dat += "" - if(seed.harvest_repeat) + dat += "" + if(seed.get_trait(TRAIT_HARVEST_REPEAT)) dat += "" else dat += "" - if ("produce" in scanner) - if (seed.products && seed.products.len) - dat += "" - else - dat += "" if ("temperature" in scanner) - dat += "" + dat += "" if ("light" in scanner) - dat += "" + dat += "" if ("soil" in scanner) - if(seed.requires_nutrients) - if(seed.nutrient_consumption < 0.05) + if(seed.get_trait(TRAIT_REQUIRES_NUTRIENTS)) + if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) < 0.05) dat += "" - else if(seed.nutrient_consumption > 0.2) + else if(seed.get_trait(TRAIT_REQUIRES_NUTRIENTS) > 0.2) dat += "" else dat += "" else dat += "" - if(seed.requires_water) - if(seed.water_consumption < 1) + if(seed.get_trait(TRAIT_REQUIRES_WATER)) + if(seed.get_trait(TRAIT_WATER_CONSUMPTION) < 1) dat += "" - else if(seed.water_consumption > 5) + else if(seed.get_trait(TRAIT_WATER_CONSUMPTION) > 5) dat += "" else dat += "" @@ -126,58 +119,56 @@ if ("mutants" in scanner) if(seed.mutants && seed.mutants.len) dat += "SUBSP " - if(seed.immutable == -1) + if(seed.get_trait(TRAIT_IMMUTABLE) == -1) dat += "MUT " - else if(seed.immutable > 0) + else if(seed.get_trait(TRAIT_IMMUTABLE) > 0) dat += "NOMUT " - switch(seed.carnivorous) + switch(seed.get_trait(TRAIT_CARNIVOROUS)) if(1) dat += "CARN " if(2) dat += "CARN " - switch(seed.spread) + switch(seed.get_trait(TRAIT_SPREAD)) if(1) dat += "VINE " if(2) dat += "VINE " if ("pressure" in scanner) - if(seed.lowkpa_tolerance < 20) + if(seed.get_trait(TRAIT_LOWKPA_TOLERANCE) < 20) dat += "LP " - if(seed.highkpa_tolerance > 220) + if(seed.get_trait(TRAIT_HIGHKPA_TOLERANCE) > 220) dat += "HP " if ("temperature" in scanner) - if(seed.heat_tolerance > 30) + if(seed.get_trait(TRAIT_HEAT_TOLERANCE) > 30) dat += "TEMRES " - else if(seed.heat_tolerance < 10) + else if(seed.get_trait(TRAIT_HEAT_TOLERANCE) < 10) dat += "TEMSEN " if ("light" in scanner) - if(seed.light_tolerance > 10) + if(seed.get_trait(TRAIT_LIGHT_TOLERANCE) > 10) dat += "LIGRES " - else if(seed.light_tolerance < 3) + else if(seed.get_trait(TRAIT_LIGHT_TOLERANCE) < 3) dat += "LIGSEN " - if(seed.toxins_tolerance < 3) + if(seed.get_trait(TRAIT_TOXINS_TOLERANCE) < 3) dat += "TOXSEN " - else if(seed.toxins_tolerance > 6) + else if(seed.get_trait(TRAIT_TOXINS_TOLERANCE) > 6) dat += "TOXRES " - if(seed.pest_tolerance < 3) + if(seed.get_trait(TRAIT_PEST_TOLERANCE) < 3) dat += "PESTSEN " - else if(seed.pest_tolerance > 6) + else if(seed.get_trait(TRAIT_PEST_TOLERANCE) > 6) dat += "PESTRES " - if(seed.weed_tolerance < 3) + if(seed.get_trait(TRAIT_WEED_TOLERANCE) < 3) dat += "WEEDSEN " - else if(seed.weed_tolerance > 6) + else if(seed.get_trait(TRAIT_WEED_TOLERANCE) > 6) dat += "WEEDRES " - if(seed.parasite) + if(seed.get_trait(TRAIT_PARASITE)) dat += "PAR " if ("temperature" in scanner) - if(seed.alter_temp > 0) + if(seed.get_trait(TRAIT_ALTER_TEMP) > 0) dat += "TEMP+ " - if(seed.alter_temp < 0) + if(seed.get_trait(TRAIT_ALTER_TEMP) < 0) dat += "TEMP- " - if(seed.biolum) + if(seed.get_trait(TRAIT_BIOLUM)) dat += "LUM " - if(seed.flowers) - dat += "
[seed.flower_colour ? "FLOW" : "FLOW"]." dat += "" dat += "" dat += "" From 5890fa3c4b6f9044b3da31804a54d2a7df4bbd80 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Thu, 5 Feb 2015 15:53:20 +1030 Subject: [PATCH 41/90] Added plant controller. --- baystation12.dme | 1 + code/controllers/verbs.dm | 5 +- code/game/machinery/seed_extractor.dm | 4 +- code/game/objects/effects/decals/remains.dm | 8 ++ code/global.dm | 6 - code/modules/admin/admin.dm | 12 +- code/modules/hydroponics/grown.dm | 10 +- code/modules/hydroponics/grown_inedible.dm | 2 +- code/modules/hydroponics/seed.dm | 105 +------------- code/modules/hydroponics/seed_controller.dm | 131 ++++++++++++++++++ code/modules/hydroponics/seed_machines.dm | 18 +-- code/modules/hydroponics/seed_packets.dm | 6 +- .../hydroponics/spreading/spreading.dm | 14 +- .../hydroponics/spreading/spreading_growth.dm | 52 ++++--- .../spreading/spreading_response.dm | 10 +- code/modules/hydroponics/trays/tray.dm | 16 +-- code/modules/hydroponics/trays/tray_tools.dm | 4 +- .../hydroponics/trays/tray_update_icons.dm | 10 +- code/modules/organs/organ_alien.dm | 2 +- code/world.dm | 2 +- icons/effects/blood.dmi | Bin 58952 -> 59436 bytes 21 files changed, 241 insertions(+), 177 deletions(-) create mode 100644 code/modules/hydroponics/seed_controller.dm diff --git a/baystation12.dme b/baystation12.dme index 0b0ee50ef9..4bcf9eb187 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -960,6 +960,7 @@ #include "code\modules\hydroponics\grown.dm" #include "code\modules\hydroponics\grown_inedible.dm" #include "code\modules\hydroponics\seed.dm" +#include "code\modules\hydroponics\seed_controller.dm" #include "code\modules\hydroponics\seed_datums.dm" #include "code\modules\hydroponics\seed_machines.dm" #include "code\modules\hydroponics\seed_mobs.dm" diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 263a91769b..3f1a105f53 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -48,7 +48,7 @@ message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") return -/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event")) +/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants")) set category = "Debug" set name = "Debug Controller" set desc = "Debug the various periodic loop controllers for the game (be careful!)" @@ -106,5 +106,8 @@ if("Event") debug_variables(event_manager) feedback_add_details("admin_verb", "DEvent") + if("Plants") + debug_variables(plant_controller) + feedback_add_details("admin_verb", "DPlants") message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.") return diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm index a1132ae08a..4778ac13ea 100644 --- a/code/game/machinery/seed_extractor.dm +++ b/code/game/machinery/seed_extractor.dm @@ -16,10 +16,10 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob var/datum/seed/new_seed_type if(istype(O, /obj/item/weapon/grown)) var/obj/item/weapon/grown/F = O - new_seed_type = seed_types[F.plantname] + new_seed_type = plant_controller.seeds[F.plantname] else var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O - new_seed_type = seed_types[F.plantname] + new_seed_type = plant_controller.seeds[F.plantname] if(new_seed_type) user << "You extract some seeds from [O]." diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm index 8d8328bc9f..dd786ddc0d 100644 --- a/code/game/objects/effects/decals/remains.dm +++ b/code/game/objects/effects/decals/remains.dm @@ -17,6 +17,14 @@ icon = 'icons/mob/robots.dmi' icon_state = "remainsrobot" +/obj/effect/decal/remains/mouse + desc = "They look like the remains of a small rodent." + icon_state = "mouse" + +/obj/effect/decal/remains/lizard + desc = "They look like the remains of a small rodent." + icon_state = "lizard" + /obj/effect/decal/remains/attack_hand(mob/user as mob) user << "[src] sinks together into a pile of ash." var/turf/simulated/floor/F = get_turf(src) diff --git a/code/global.dm b/code/global.dm index 55c63433cb..c5fd821f79 100644 --- a/code/global.dm +++ b/code/global.dm @@ -254,11 +254,5 @@ var/static/list/scarySounds = list( // Bomb cap! var/max_explosion_range = 14 -// Several cache lists for plants/hydroponics. -var/global/list/seed_types = list() // A list of all seed data. -var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. -var/global/list/plant_icon_cache = list() // Stores images of growth, fruits and seeds. - // Announcer intercom, because too much stuff creates an intercom for one message then hard del()s it. var/global/obj/item/device/radio/intercom/global_announcer = new(null) - diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 6030a8be1d..19fd023678 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1001,10 +1001,10 @@ var/global/floorIsLava = 0 if(!check_rights(R_SPAWN)) return - var/seedtype = input("Select a seed type", "Spawn Fruit") as null|anything in seed_types - if(!seedtype || !seed_types[seedtype]) + var/seedtype = input("Select a seed type", "Spawn Fruit") as null|anything in plant_controller.seeds + if(!seedtype || !plant_controller.seeds[seedtype]) return - var/datum/seed/S = seed_types[seedtype] + var/datum/seed/S = plant_controller.seeds[seedtype] S.harvest(usr,0,0,1) /datum/admins/proc/spawn_plant() @@ -1014,10 +1014,10 @@ var/global/floorIsLava = 0 if(!check_rights(R_SPAWN)) return - var/seedtype = input("Select a seed type", "Spawn Plant") as null|anything in seed_types - if(!seedtype || !seed_types[seedtype]) + var/seedtype = input("Select a seed type", "Spawn Plant") as null|anything in plant_controller.seeds + if(!seedtype || !plant_controller.seeds[seedtype]) return - new /obj/effect/plant(get_turf(usr), seed_types[seedtype]) + new /obj/effect/plant(get_turf(usr), plant_controller.seeds[seedtype]) /datum/admins/proc/spawn_atom(var/object as text) set category = "Debug" diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 2b607f0509..ee2c7c66ff 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -24,7 +24,15 @@ if(!plantname) return - seed = seed_types[plantname] + if(!plant_controller) + sleep(250) // ugly hack, should mean roundstart plants are fine. + if(!plant_controller) + world << "Plant controller does not exist and [src] requires it. Aborting." + del(src) + return + + seed = plant_controller.seeds[plantname] + if(!seed) return diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 991fecc88b..a0802ee0f1 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -19,7 +19,7 @@ //Handle some post-spawn var stuff. if(planttype) plantname = planttype - var/datum/seed/S = seed_types[plantname] + var/datum/seed/S = plant_controller.seeds[plantname] if(!S || !S.chems) return diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index ee8c9612be..3b99746ad0 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -1,96 +1,3 @@ -// Sprite lists. -var/global/list/plant_sprites = list() // List of all harvested product sprites. -var/global/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages. - -// Proc for creating a random seed type. -/proc/create_random_seed(var/survive_on_station) - var/datum/seed/seed = new() - seed.randomize() - seed.uid = seed_types.len + 1 - seed.name = "[seed.uid]" - seed_types[seed.name] = seed - - if(survive_on_station) - if(seed.consume_gasses) - seed.consume_gasses["phoron"] = null - seed.consume_gasses["carbon_dioxide"] = null - seed.set_trait(TRAIT_IDEAL_HEAT,293) - seed.set_trait(TRAIT_HEAT_TOLERANCE,20) - seed.set_trait(TRAIT_IDEAL_LIGHT,8) - seed.set_trait(TRAIT_LIGHT_TOLERANCE,5) - seed.set_trait(TRAIT_LOWKPA_TOLERANCE,25) - seed.set_trait(TRAIT_HIGHKPA_TOLERANCE,200) - - return seed - -// Debug for testing seed genes. -/client/proc/show_plant_genes() - set category = "Debug" - set name = "Show Plant Genes" - set desc = "Prints the round's plant gene masks." - - if(!holder) return - - if(!gene_tag_masks) - usr << "Gene masks not set." - return - - for(var/mask in gene_tag_masks) - usr << "[mask]: [gene_tag_masks[mask]]" - -// Predefined/roundstart varieties use a string key to make it -// easier to grab the new variety when mutating. Post-roundstart -// and mutant varieties use their uid converted to a string instead. -// Looks like shit but it's sort of necessary. - -proc/populate_seed_list() - - // Build the icon lists. - for(var/icostate in icon_states('icons/obj/hydroponics_growing.dmi')) - var/split = findtext(icostate,"-") - if(!split) - // invalid icon_state - continue - - var/ikey = copytext(icostate,(split+1)) - if(ikey == "dead") - // don't count dead icons - continue - ikey = text2num(ikey) - var/base = copytext(icostate,1,split) - - if(!(plant_sprites[base]) || (plant_sprites[base] spread_distance))) - return + if(buckled_mob) + seed.do_sting(buckled_mob,src) + if(seed.get_trait(TRAIT_CARNIVOROUS)) + // Todo: refactor to be less hardcoded. + if(istype(buckled_mob, /mob/living/simple_animal/mouse)) + new /obj/effect/decal/remains/mouse(get_turf(src)) + del(buckled_mob) + buckled_mob = null + return + else if(istype(buckled_mob, /mob/living/simple_animal/lizard)) + new /obj/effect/decal/remains/lizard(get_turf(src)) + del(buckled_mob) + buckled_mob = null + return + seed.do_thorns(buckled_mob,src) + var/failed_growth // Count our neighbors and possible locations for spreading. var/list/possible_locs = list() - var/count = 0 + var/plant_count = 0 for(var/turf/simulated/floor/floor in view(1,src)) if((locate(/obj/effect/dead_plant) in floor.contents) || !floor.Enter(src) || floor.density) continue if(locate(/obj/effect/plant) in floor.contents) - count++ + plant_count++ continue possible_locs |= floor - //Entirely surrounded, try to spawn an actual plant. - if(count>=8) - if(!(locate(/obj/machinery/portable_atmospherics/hydroponics/soil/invisible) in T.contents)) - var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/new_plant = new(T,seed) - new_plant.age = seed.get_trait(TRAIT_MATURATION)-1 - new_plant.update_icon() - if(growth_type==0) //Vines do not become invisible. - invisibility = INVISIBILITY_MAXIMUM - else - new_plant.layer = 4.1 + if(health == max_health && plant_count >= 4 && !plant) + plant = new(T,seed) + plant.age = seed.get_trait(TRAIT_MATURATION)-1 + plant.update_icon() + if(growth_type==0) //Vines do not become invisible. + invisibility = INVISIBILITY_MAXIMUM + else + plant.layer = layer + 0.1 if(prob(spread_chance)) for(var/i=1,i<=seed.get_trait(TRAIT_YIELD),i++) if(!possible_locs.len) - hibernating = 1 - world << "[src] at [x],[y] is hibernating" + failed_growth = 1 break if(prob(spread_into_adjacent)) var/turf/target_turf = pick(possible_locs) @@ -53,11 +63,14 @@ child.parent = get_root() child.parent.children |= child + if(health != max_health || !failed_growth || (plant_count > 4 && !plant)) + plant_controller.add_plant(src) + /obj/effect/plant/proc/die_off(var/no_remains, var/no_del) // Remove ourselves from our parent. if(parent && parent.children) parent.children -= src - // Kill off any of our children (and add an added bonus, other plants in this area) + // Kill off any of our children (and as an added bonus, other plants in this area) for(var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant in get_turf(src)) plant.dead = 1 plant.update_icon() @@ -66,7 +79,8 @@ for(var/obj/effect/plant/child in children) child.die_off() for(var/obj/effect/plant/neighbor in view(1,src)) - neighbor.hibernating = 0 + plant_controller.add_plant(neighbor) + if(!no_remains && !(locate(/obj/effect/dead_plant) in get_turf(src))) var/obj/effect/dead_plant/plant_remains = new(get_turf(src)) plant_remains.icon = src.icon diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm index 1d30c0bbf2..cb696f34af 100644 --- a/code/modules/hydroponics/spreading/spreading_response.dm +++ b/code/modules/hydroponics/spreading/spreading_response.dm @@ -1,7 +1,6 @@ /obj/effect/plant/HasProximity(var/atom/movable/AM) - hibernating = 0 - + plant_controller.add_plant(src) if(!is_mature() || seed.get_trait(TRAIT_SPREAD) != 2) return @@ -9,16 +8,15 @@ if(!istype(M)) return - if(!buckled_mob && !M.buckled && !M.anchored && prob(round(seed.get_trait(TRAIT_POTENCY)/2))) + if(!buckled_mob && !M.buckled && !M.anchored && (M.small || prob(round(seed.get_trait(TRAIT_POTENCY)/2)))) entangle(M) /obj/effect/plant/attack_hand(mob/user as mob) - hibernating = 0 + plant_controller.add_plant(src) manual_unbuckle(user) /obj/effect/plant/proc/trodden_on(var/mob/living/victim) - hibernating = 0 - world << "Blah." + plant_controller.add_plant(src) if(!is_mature()) return var/mob/living/carbon/human/H = victim diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 9ec31f6fe8..acb501b850 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -299,7 +299,7 @@ //Remove the seed if something is already planted. if(seed) seed = null - seed = seed_types[pick(list("reishi","nettles","amanita","mushrooms","plumphelmet","towercap","harebells","weeds"))] + seed = plant_controller.seeds[pick(list("reishi","nettles","amanita","mushrooms","plumphelmet","towercap","harebells","weeds"))] if(!seed) return //Weed does not exist, someone fucked up. dead = 0 @@ -329,7 +329,7 @@ // We need to make sure we're not modifying one of the global seed datums. // If it's not in the global list, then no products of the line have been // harvested yet and it's safe to assume it's restricted to this tray. - if(!isnull(seed_types[seed.name])) + if(!isnull(plant_controller.seeds[seed.name])) seed = seed.diverge() seed.mutate(severity,get_turf(src)) @@ -370,8 +370,8 @@ var/previous_plant = seed.display_name var/newseed = seed.get_mutant_variant() - if(newseed in seed_types) - seed = seed_types[newseed] + if(newseed in plant_controller.seeds) + seed = plant_controller.seeds[newseed] else return @@ -528,12 +528,10 @@ return /obj/machinery/portable_atmospherics/hydroponics/attack_tk(mob/user as mob) - - if(harvest) - harvest(user) - - else if(dead) + if(dead) remove_dead(user) + else if(harvest) + harvest(user) /obj/machinery/portable_atmospherics/hydroponics/attack_hand(mob/user as mob) diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index 404abb707c..cd7d0daf9a 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -53,13 +53,13 @@ else if(istype(target,/obj/item/weapon/reagent_containers/food/snacks/grown)) var/obj/item/weapon/reagent_containers/food/snacks/grown/G = target - grown_seed = seed_types[G.plantname] + grown_seed = plant_controller.seeds[G.plantname] grown_reagents = G.reagents else if(istype(target,/obj/item/weapon/grown)) var/obj/item/weapon/grown/G = target - grown_seed = seed_types[G.plantname] + grown_seed = plant_controller.seeds[G.plantname] grown_reagents = G.reagents else if(istype(target,/obj/item/seeds)) diff --git a/code/modules/hydroponics/trays/tray_update_icons.dm b/code/modules/hydroponics/trays/tray_update_icons.dm index de66f4297e..e13bf644f0 100644 --- a/code/modules/hydroponics/trays/tray_update_icons.dm +++ b/code/modules/hydroponics/trays/tray_update_icons.dm @@ -21,7 +21,7 @@ if(dead) var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-dead" - var/image/dead_overlay = plant_icon_cache["[ikey]"] + var/image/dead_overlay = plant_controller.plant_icon_cache["[ikey]"] if(!dead_overlay) dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]") dead_overlay.color = DEAD_PLANT_COLOUR @@ -39,20 +39,20 @@ overlay_stage = max(1,round(seed.get_trait(TRAIT_MATURATION) / seed.growth_stages)) var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-[overlay_stage]" - var/image/plant_overlay = plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] + var/image/plant_overlay = plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] if(!plant_overlay) plant_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]") plant_overlay.color = seed.get_trait(TRAIT_PLANT_COLOUR) - plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay + plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay overlays |= plant_overlay if(harvest && overlay_stage == seed.growth_stages) ikey = "[seed.get_trait(TRAIT_PRODUCT_ICON)]" - var/image/harvest_overlay = plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] + var/image/harvest_overlay = plant_controller.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] if(!harvest_overlay) harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]") harvest_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) - plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay + plant_controller.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay overlays |= harvest_overlay //Draw the cover. diff --git a/code/modules/organs/organ_alien.dm b/code/modules/organs/organ_alien.dm index 0024865acf..4a36d23659 100644 --- a/code/modules/organs/organ_alien.dm +++ b/code/modules/organs/organ_alien.dm @@ -48,7 +48,7 @@ H.death() //This is a terrible hack and I should be ashamed. - var/datum/seed/diona = seed_types["diona"] + var/datum/seed/diona = plant_controller.seeds["diona"] if(!diona) del(src) diff --git a/code/world.dm b/code/world.dm index 3897c24729..2fd24cf9f5 100644 --- a/code/world.dm +++ b/code/world.dm @@ -55,7 +55,7 @@ var/global/datum/global_init/init = new () // Set up roundstart seed list. This is here because vendors were // bugging out and not populating with the correct packet names // due to this list not being instantiated. - populate_seed_list() + plant_controller = new() // Create autolathe recipes, as above. populate_lathe_recipes() diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index 9820bb1f8ac420743d1f1689d59203770be6bcd7..8b70722fd90847cbb577d2b7f1aa79aee2b18264 100644 GIT binary patch delta 16962 zcmYgXV_+Ulw2o~xwi-8f(m0J9tFdiolQg!`SWOz+wr#Vq?fdq-KkohY&h9(AJ9FmX zIcJ_38iOpGf{djER6SKRoW)F>j2tcOoh|Ha!NA-zl2R4y@V}t-Po5T4#e2;|#ozZ7 zl9zB(>VYp?Rk{V9X+EK*`aTomDB&kPJ3t-{-lXHbMD^uAUfnyrka1qDp6eTuqZl%( z>2Dw(P|u*Qizv$)GG?{(qZM-9 z9E{r05>yg8rK?11W=r5XKlfI=k4Lkb%hp5TbNe>fi>gUXqKiuIwhiN^Bls7jSfE-) zTeH-d!Drb@47lBVOsg7M3R%_qO zHN@AZ4SJ|;z|$mv`ulG_)4V5KQq}Q6`;ZD6rShyPlu><>uPqt0qWgHs^$+W=J|7-4}Cx}wphFH zoK-^jfD8isehGY}SQ;zqJt6Xl$aH07q+%*P1x4cI$k5XH1D;x z{b*LR>pa^c({opruNQX+wlD1gtI?HP4F^UAvfT}g z8Qu3+hGuAjEk4=pRE307-(|k>y538|h27jh ztt*7aZ{X¡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 delta 16474 zcmYj&WmMem(>AWf-Cc@PT$f_SDL;z4J1p)53Z=Mf(Eb>)@2R!5zb*$vj14r1 zq@{%gYe&vCo~>=k3CEhUr%bGw@|q8bzRK%Z(#>zt#3nIg{DP=gy-y7X{z)}X;wNfH z7CCZDAC5geUSe2mC!0AY4s##RFbAsui*ubzYDm$)QzYOADhVA2hYy5I53DlC$*~ z%}T~0Pkdc2nq5!YojuTg>LS_ErXozaT44M9#>jO| zdVaBWe`%}6B&U*6FUzZ~1QTnWr)%CFYVcOEJ{++;#IZE7vNpZ40D|pkC)sEYNe{Q# zcUbjbi;2Q~9R8c~lBfBp&leQWtS;N1o&QmX`5`$T2hG*OJmgY`gko8 z)uQ@({c(1)#}dy%h0ory40Ol1zFK5D>(K{SnP|(3KrJU1^J$TTcEdjoom$|P3xd@f zzo?}5iw)m+7R6uQX?A~VJgaRiNP^e3m4A=yHk0rlrgZ_sFLEwVMFpYUm_OX`Bs{JX z6v1XlxR!f?!bk(}c1A|)rTq5-a*1HAl@3S7C@z@SK?0^%)h7Y))7rbmCy3+xwO`@1 z3xV5n=8~&efFD6pK_Y1csnnVU7lS1pQPld_kypQMvtA=;P!&BqFpod)OP!{g?XNK1 zZ@8T0n)&sHA9rnQS4yG=ZD(<#1n}!EqnT4Bu;un{2S%4hRV)R3#~8UF`$LIq&6&4Z zwLDj1XS;1h#bMPN8f8E03GDUyve1Q26@dCb0zbzfBPSeMKk;F5I6Kv!I~vfJLovuG zC`HEq75hfYx~^^fc}Ff7XV~t;4c?H*RAEvnN<2owDl9GzYin!U5K6Gm=#N%+xKzgA zy;QV#tY@({XX|WrwVg|O-er0D@4Qi5poqWS`Otc21;L(+VJ zrX!C!fnTzfNXf{ChK5Y~A_)GSu8A~NmXt(fW|BkqdjFgHq*H6D%v!p@2XtmQIs=zjNhpz9}pf549w#yO#YWfGSM86uBv)<&!dwC*B&i^0W%9b4Y zo;Vu^ho-9Ng)~e}P0ir&a9#({k^Okq33Q(B7dmgxjy(LM;pB|{``6y%bX8tTN(v09 zs9=iu{L8Jbj#tj$zqm_D(M`J%OY=i8=m30~;we)~*|zk%_@9V6KiNJlKa~QDFuy9QSQs zz*ISJ%T`b{rFM9Vrq7F~2|Am8hDcCjn?|33m@)46E?dtZS;46(r2+aMw}yUS7gy{4 zywuO(gwU)_kY1#~k^)l?q?Z)C)|$6I3%JkNAP)VFlCE7&L@mSs0kyuke3_=SI&LJ4 z>Y=ky4(quS53?8e+2P?~_ag*nUiVX>pYGz3U^WY;dI6(3L9I}199 zqNAhjSDWJ3+kMs5)uqnX+n1W0>0oXhPe~;MPr{F`CbXDTGK&fE@xeKdT$h)Z*plG= zEYA{8q5-PNH{C*y5S7xzaz@1S}z zlInn8NC0x@O2>pestp%lL3K@~iWhu4B2P`Zd9*keDb^H;`~$gWiBtlxTAG?Aj*WVV zvtPf$5!l)BYJ3)>#1hY`oWpEf8B1VLl&cq~%5)BW_(NhTIH_I3QF`udb_Ga&xkh`Y{;Ec|xA4+Tuj_ zzw%h}!Lrd&a|=txSf{1#dOIVt{jZ>Esk1A!5``SKe8K%#Kux3nT68Bh(t1;GfEg=dAGa@+vL zp6lL4EFsj;a~@Z}t9}05)fN^rXsRi5pn4MQta+8GGiw z1D4%dbAG-)%8wOacEsvsHR~_7%5+BZH}VN@jS>9nOmcG83!Qmt$QY#fe{ajm*u%Q;W^vCds9i1%LaHeq>w47%&uG?x&^Z4Kc0n@8l5cXNa z5M^cMKYzMv$eiqn43_aegxk(n80goTz)Qg!@wn{B!N|st4^4J0*e}<;FBh&@zJSl* zcX*ShS*%z}mWXGKvzENkudpeWY zfyDUq^dm&dbDC?BCyBsn=5=FU%ic(^WOb1%aQsg76;s9Bu?iEO{Sp87ww zgNdjJa8aauXn~=jNd3`d1M}s2+qQ4m0~~b)!Rs_SQiyn-?kt+cGC(y7b@bJ?16V_? zas1RnJ^Oka;MNh1&d##FE!Uutdinz-%x+VK&u!=1U#I_5#!8iaNLV#!`s#Rk9pC`7 zv5@R~Uk}>@2Z8%UJ7iLBI?Yjce3iHpl*0w?E1?(VhcZ?v$7)x;6ya^`O6plC%?1enU5Mm z7m(LNI(qTv>q-D)m?$1o30A!QOq}mHgw{jk=2sgQnvoZcbiaY;+U`MxWl4?~1l2Ke zV2%tuO8#4mzJ_RL)bS@@uLms-!RbDRt35=BOfJKi1EfRDRByA&9XQr})5qRe1}rh3 zExv|^hCPM%hgz!%P0rutzuvUGHmAg=(HRsk>eqpY>1or9Mli@`t>2P-G`(Gg%V)LZf06XY^!ZL%Py)b-{v{Cf$L z3HUM-CrTOHvk8FRoE#n3cdzc5nVEB;hBLdcFw+SD3W|yrtI1H4vbD8M@ZpiWFDW^F zxLI*JT&ScH&xwUXV6J|!eIPdOjhCob`-NC$&bnvLa^>&vspEO)qs{NGAI~DcK3Z0G zaHqM5Sq$TQoGi=u`-|x{I`+wRn1y1XXJ3tFdG;3o19baYMcKZV;)+MUuvJbFaj3Qu zbNg)A_~UG81KtS04Uy6Lda_oH-~A=_ttX4cM5d7X$x0)q1lQjEnkVF2oN5WS(f3cqs8+~+@v=Q$L_3Y8`H7leh<5}v8E;g6)%qpBg<`w zfrg|08|X>GaiIc1cI~U{i9U>qZ&hefwpRqrk`v6in+oRj^))X)ze_b_f&fr8>Q7F5 zh3y)o0(SI`RWu0+)>^OTXH-9xD?%~bXOw&3^SqM?R=^b=rtj@q(txfAuH|^<@0;TV zEb26`f34pLzI^#or$>cPM1*|y9g1Rv0sqv%InFTV>kXi-Q`1-$_OYc}tJ33zN~^o` z%~kgWgFkjDr(0i+Xv&S`MSZBgb(S( zyCS$Np>XN}gWoOZcy%o_b$6kP8CXg-zrzDr6Zi#$m~$dDcgQmFPJmR`1Z7lH9Bg-* znBifCH-J{k7QNq-!V>#;vmFZ(HycV|kc(`BQa7Fn(W@pcBY$@(S|T#c&Zk|@N2iqr zWeP51iNnQev$MDr0vXuc=H~m>3Gv5K9-HZc*B=Js4mw@%d!uTp?XTQSeW&c}>np*gP1Eo>Szb7} zw|&%VLM5__?MGYBVKWmVu(aN=Ylsm|hmbGzisg9zyaieWNM^2#bL(51YJZmhNt$an zX2YkYK@TNvXP8=lt90u+k8T^p2S8F-{6oXjLIVLxTXytO+~d;C#ppBHc2X;RbZOtrwS_l-2RwTbdO zEK5^kZyXvmH$hQZr3kOtKr?Tdssc3KrFg1W1fW@~$G?Rvz5xH zRn$DBK*O$3S41X7EXDf(q8@`E^_+M;l4xNt4%aeDgy&G0{nO;U{iDU>dI_+Tj@) z89A4iM++ST`?Y|hNDl+UPuaWBGK3fz-jcrbHJDpF9r14s2mJd@JGs*mX<4{;4F1b* zh*DdC#rvL-RM$Mdr5*!8gqc>nzJ>l3B- z4%Nf$8R&jY0P@$l8kY(p* zqWBJ+Pnk_5CKHp>HD;T$~ue=CZQ=e}W`7 zT#9Dy|8sS9wezxx7L*E^i^^uvq zD~z=|LYRTyjkSl5WJ4l5u^*4`jCjzzY-gD@%MHgYe4^K(5qs120bs=KGBs=5dOO|` zoNqhN?XxBvn3hl_jCP}yS`t0Tm7q|DPD>tk8%cmVFoWeX+5DmQT50O$NQ>ku$=T56 zVpyos;!X!Q^Om%%JN}Z-TaPf9Sqc*k*Bz0G)+mtxl2lqnSXF2GlOf>f!po<)WO)ND z7=Yx4h^eOGUS8+33pfj`f_vy~#F!L%E!&|}D+gKdi^lWlCO8Vt2gV4_$hUnx>r%UM zrCe6A;|)k)FCkvRjfJ3IyIB3XBVy<)BIDJ-Pdv>oJjkbgea~yz%~!N! z;@F*7{tnnO6O9tOF>cszCFYy&VOsaRgEBU_%8ucVCv=j>D_WTOXLm-eLvGS=Ts`=qWb(LMbpyK1)4Z4A2+z0`oy-_D6&iN+rEJEC->TX3ddy4jiU@=#dI$^;6x8U zROhksbqP-O2l|6VPoR+N>>np6*AgRDU!0e;Y zbiibPa@FcYeupP%k39Y#{x1s}b25GaSE48u)@~>Uz3*Ru{2A;j zdWlJS@SuMEH~d7^?t7_}-zu3jy+1(a=`5Z5Sm~uKQhOz{h}2r3F6nN))BS^638^aOM}&aA0mjw9s}6Z^?k1}@%@uIR8&FAy)FagevhlGWgaLusMVaJ+VY_ljj3GQd@TED}!gJgxO zaEZ|+s0FwHM93&yn!XlFGd6V~9@A$G_iu4}6nTmtusIkVqCOV=7f=?~_$p?mGP2i{ znHQuLlT&~1IiYeb-VSUfemO|B_2M8Au--T!605uCRNTLUgtDBK082Uz@}byy8A0I0 zB}Xb5wFVR#mO%8Nv!LKWZ);SY$9DI5HR_Nw=zI3;y&lf9l2o~U9I!)$Rvx6r6;bbR zY@FedUEl@pLnRzx(9lu2j5`vYzNYBsaV#!l>4^`mc;J!_{$nm z)DnIG7U=6L9ZIsH6Ai(Rq+dGPX=Ps9VGYqvDr@NO4_tGMR+3ARJcNOvhLM;4_=SO_ zb*;W6-FWOAnx)*hDU#ZtdTo8~?lfrJD{tmh_6Pbw1D2x{ z&t5GWH8@Zof)Kc`wBo@UahaLN3}K0IX~-^{`$-)_%p5|@9+C$Av4nW(p-d^GR0DD- z&UuuOQ~WrDqSqY8kk7k0hfN-;)6?#0DQvioGF^_I2h-)+mtGMZGbZXZ@4lc~T4s2)S)_1nw{BtAQ7hcZ)75G}=9$AXSE->{c@KU& zMdV;{^h#7K^H8DDke{|kJ2xM1lgZkGUjWAHXI~vGCEOmI7Aj349DqV|8G@ZtC^giO z+nQRWcv&wk>5kTR!~baJE0MWpz8qATGvNyCDaHaSR@IP zpR)GN2lEZCga?kmes}l1aTFpJOqWg(25~QRU_F^*_zD4sSyMgPxU-=1I4#l1!;$7C z@tmORbrWw8p+8<6Rpvn1i1WNg8OZc+{Q1uOTi&t6H&*C_}qf!B$*9UXqt7QoU2a7lFQGVk1}(5S$Fqv(gJgczD@ z0f3O6kR33u6s?CWIFAOzu`(xLSQ?^<<=mZDzSCp580Rt%yBU|{F=NV!s*Bj;rYPkm zXjaK~TfFm3uAv0oJ>MDp`mFYrtCd@3s_F(8AeeuwA%pM-rSOc(YsMXqw$@%|*5`?b+ha zeMU%U2c4bsav*L#S*64M#|rP~cHARPM(K`R2JBrZoC!PIa#+dx_;e>S4uAnkM|2Y5 z<4g$?Nyl^WB_Dd@@`lgCApf0?=c}ZNdgHW>>-{miC;z&X(k72t7 z)6Fl)>~2d`YVl_>W|&q^)J(pv+x>Vg6w6<@e0uw`tBb4#N^UV0jQod3COEuvpGroo zdVL%PlZ@Q&qf&DWF1y~20SaaNKK~TrD;-9*2aBgHwI-? zn0DA(#y_t2Xj)kh_(lZ^c;e`kZGl#??Ff0gz}}9*3!B|JT=%;DWXEXf`dWi#&5R=g zjigqa+LR;iP$A<&&BytGV@c;Th3T3Q`aoz?cXY_&*WQ}k@|}^ix>~UPhHEhJ*B}ohIIiePgQBDRnXoo9Lf&ic&v)JXPzw!I0 zz|JM)xosc9)Zy~7BooXDy80{Xon|$?^vSnBYn@J?C&%I8a{GeFQ1qzf5Ra0%d1qB| ztM!sFN#Es^VL>_Pyz35~lk$40kQ0RInQ66p2#AR$j*IICbUuyNUX6oVt-%wWs(!oi zBf#yIMXabN&`(((Z{T~&^>1SacaHV&GI92me;VH3qDb6F^G>P@5+vW10RyERh%SLl zlZ9X0o1*+``RoP*vMXLai$fcfqob@hOGLhNLS}{5R z)D{_iw3iQHc399mPmL%IU&{yrA!5gF7Q`b?&CTiiQKXhm)Z9P^UAF# z%KgT!J8@kGB(qZD#Ywovr7*uBORi1>A4G(4RbK!7I1_CQs0z3lQzdUGwLge+?F3~c zuTbrULzH(5CxDi-uebBw{FDN@$8|(Rn(Ym4Hglh}o}bCjBKSngmwkY>(uqu-mrSE| z_kAkE`(u!%vUa`g*o|*x(^i{U4zRu(3OpYRmAcZOil5Y>w^DeU&(uRx3|l}NcV9b4 zreU@B%EkB7SpnaGLOii5@1fZE&ppLFe4F;Bv- z($DLB>_MNENCQfL=De7t^Xw$I zdtH$u&+@lm68kg!6Tozq*8|8|Q9ViPvg=hKt9&Ckj^ zO$xU?Vk%F&Gccl`Iz~j&V}yEAuN_y#rk#%*cr2q@ipdPk$w2t>$znC#bK4th_~o34KIM_jmmNk^M$`oi@aOR#a&L1NVYjxTrz!DqSm8ZKMC)>GrD=?I5Y29njE~C zGe|pZ%4%2(o$RjwXmq;qw2ZT~)nmr{j8f-MaiJKw%w+OgO*DIy6qns<_6FA^kRWG)|PZ>-yd_JklAM#rtVof#HFg+KzonS{(_vb3|&WS_$! z6E4t{@W|#a)?}w0WzbOQyF>H%O0|GGXaKJ0Hh*Seg}FI6n#fA!8$##UlD?pk%oJF3 z^LJ;mkg-3CY69|PKuo#VgA-S~%>){9(60+=tb92s0`9IItehod^cs>8+kx1X`t5#q zD#y_>!-fb4GI1un8r#64NtO#N*zu4yJF#r^UGD`SQKD>AZ>fJ~*>JXjN`uP{o316P z<)&-j$$0)Zp6!6*%S#CPEmeU3ijI@f^NK1N5xdENYCwW7!p=Lazne}k98n~oY^jVN zUbYh|*)WD$8Zk|WmMm0&FG9?y=#uMFy3{m#Cmj^N3pSWHV!IL}^2!hbLJ1L`NY0&T zdZPoe*k63rm+Ria(}n*qYmYCJqx&-y!XEsn%STCsevkVTMh*cXu`iEAR07!uOS@Ep zA+f9Wp!KU0aS_gEMOh=qqxqfkHE6)c{=;y*yZVpz!HzJ%6uYa*69a3hRmJZ~ zyw6r_X&14x;Fz{G$eCF>?>Kqm$tdXZ0l65_KbFeL*4B~Oh2))%6gh4=jN%z`BA>AxVq#An-QPbk4<#r zqMkq8LPAefX2{3@l{ftirclT&vwv-U6f?EH@! zXXG8@6uq~KsR_vMVEWnhhBt^()r_u@fb4+bi{H_mSSx>Lh55if{f{a5?_uGYNqj;d z@$lO2(N~1poLzj%Ec<@vJ<1TEEJ zdT}-dMw9V_|E3yE`(K)qFDp}q5?KWKsA801F*X89m{q7f?&ME4*z&-oj#`srrOnQ389M1=DqgA)=0<$AB4pHFG z0D1gW7R95-75lR7p?e@6a^smzsFC4lLTa`N=Oopjl%CG>wzxsl*#uo0a4n4FWV5GN z=f0b1UGQyvT&s(}2Xg#_pnu}$5p|vM67aFhq)wV!6CTz$ljAC1oMiOjO0J^$!69aS zx|hos@0@+P1?UT6&i1Ablx|^M~h^8pcZEb-Pq#PId8g&aoAyYW=v z-QkQS93y?{apm-GH}X9NGG=|krI9zl66$zvG{K4hKQP<*lA7*4`SD$j&iMM?nrQQ7 zdMx?Ev(@SqCp&~*HRI?)KS$;M@bvY2+d4?+&@_Kr62+Md47;p)gm5bRsDrq?Xe)4T zWgMT!T=`2;mB%y-o=tb2iho>DpJ`kJ%gYv((B+i|J;g;mjeT)5rI>I@+J{SCW2h`-$?*hDYpf4N^H_)-Fy>g`8| zTq&!MWH=c2K;g*nU%85n@i6hY6+9%W`wL$-(Srie!ioLS^1H{}bk)u4qPF$dLcIZP zwd>Uq7? zROH!+#T$!oVlSV##_tXn&JBs`=(9OD6Or52$!1F2i1l|bo-V+|Zp6A0e~Y;4ILYVU zk)!zpJy8=ug2$y;%w|0Pfb z55B=9zr7m7c1MAMnRHw?MM@dVw8la{dEiD^g+X@mjo5a8vChl0<)>=>!R&%@kE~UQ za#t3B#2EoYUm@tq|TX&pZ2tg@&y3pz-VOsLj_z z-@jnhc1O~6)9#~+nLR%8*!IZkg+&Ik%MMZOeT>*;n46j+wCOj!I0aPatAEOt?%vW5 zqc*3Oow`ajx5)gSmO8>#EaP7`8>{fp@!`}R5zx<(E;YkHQRVSBq7Bi;Ret2RcXR9I z#agr#Dsr>>T&NdNLSrzpm)dH`Ci>fP-+F~-PB!_WURVI}L1zv46_NLaUQt#s{Xa)y z3PO@wvUxs?1Xni2BpqOFMluYUKqj5$_V`kF?e;D*pmJ_lzU$ zAoFPkYatyR7g3+|N~3jO9R2)Xl3~+c=IJyRM<*rLtocfb!X&`pT$6IeM_c;Z;<9bI z+g9wYk4qI(-58&8sK!dF~U-)+`-`K3oh zR!w7zuAP=*`N7zkg>B2a>_nSA(wv%<$g|Dg_&R}KPvgN^{n{T(W;q2-yFKoDVj36I zQL$$AzudTnv(Ep3T(0iC6;$>+2imMY!iT!)_YwT;XGGf`1{F)_A9}Vjk$X;J_d4EP zt^U5e<-av3LF$zZvx&%Kn+G-8JfqR14EkTzZUR;1&p6p=Szbk37s72a+*x*dT{bfM z9M;`svCJW9(~FCDpFKQoW~C{mX?pYe`}=KRmX?GTQ#YZ#1V?w84Fa z8LPxt=-$ora$o)sWz>a5b2r~evpKWlND=6f~KRr5Jy579e9IsBIP8LBvK!)w%vPwQKLllTe=-74X4FL}}hhuu__p^)ra` za1$<=!Tzv9fVvlhqKJ((6gms&7r{n&dDqf)PO0-J8V%dUXAxl9Q5nTiPP=>@tOrR#THBECnd@AgL!X>z7E z7`AXXI33FJx0@>vL>|h?($`KX!Bg|xcSP>d`fI%g_*%NZMtGn`pfx2G4LkwSASsAWsnZmKmGwp{42NP!GZ%&fN~ z3@J1glxg)S0R@ zk+QQ`Uh4=ns0WFW?$CS%*xi(fCBr&VXxb#h@)M>EKbU0R+D*WoW?IX1F-~jb`+H0K z2=z(&IJ8se`2{I)12OK{#)1HjwY;$pt@dJ+mXINK&B6tW%XeEzsG{7>S!1_};j?92W8}y{$_2z+yMuAW@rSoD zeyAXY>=u8WjW?(4`A!ISCB36 z!wRUELNs+d!iVuC+u%jfqmae%Bu7>2#tKZMH?LA{X1ZnJP-u*|$I3cI$q6}QWkM%P zynWlSGN*RQhkgO%HW}&QWnppB!DDE}Qpa?CDV^puJT*l6T0q$P_c29LutV3ak%1!<5ixey%GcqALyt<+#t|JHvhgC{r^ zB*1rTHj_0{%!JYoMMJI9rYgj#23jM73F~8CRV}u`*)2f0=sov*Yz#s77p!G_`n1MK zdUFsujW}Fe*8-Hae9CXyl?+QmGbkXps~T#=qa%jrZ+W6GYxo5pKPcUDBCXgD{!ebQ z#3539#?OoY2>N1V89IER7QmTrD*vr8^?qvIIDS7b@f{}G| zPm9{&+CYe<$fqdZ41@Xq05cJ_;diNEDdr2!mvm0%Ui#wLdQ{`}yI?-n0%6Dj{w0sH8;!OPVq7uW5; zg=p)Aew6=@CkMkPjosj?o~>q)vGIFv490%raLjyccww(CD=mLQRfm{)Rm$iK*8vVK zD>(p578Cm;>>GAZ5Npuyh`eISu$3UHKm%w--?RRg1Dpz{X-No!NgayvN@A7+33m!U zyF61~YBJ{K!)~yX#G=xwmwBl3eNd3!P9&rbB8R3{{vW=jo*sg|O)_aC(*s=01{?;H zh?jllC9SfM9nYgE$wXjvG#4SbuBt9+YzMGQDW{rY#K|Z(sr3v)sNGQhASE|ze%LS^ z6QkZw6_g)HhA(rkgmNKz4qJuKzVqReT2gbkq2i~n%3X&t`UtC(Vex)+Ek%hxBd6N! zy@W^=T@^k=EgYc<5D8|o>gr}`%Ij!4Zx)xUPI;gz;3_9Me7bh2qHV+1-jwae z5FlWEuhH5aSFRztkU*ShZWB`KNaz53RYtiu+V9_f!Njfl#%f5b4~rSKvK539{hDFI z_l%Zs;6lKz9%iZS&riL|r%SLER!W;P=Wp$HHR52hI+e0sL%jRRjfM z3cYeC)nf8rKb7aW=0>N-vP*pD#fq6L` z6Ic0%777xZRowLUjnLl703#kRwb-T%Rj}Hn%)_8>*aEQ8U98Y(89#bF3zZ+Xh=`&e zkzy=3hXXezQOWFg6T!u%2D=P=3dVj{jZj)o;yE#o<~V~@^T9Py#WQ(TR(AYEp$RE`bj zVM{6zuwVHU{TxI0$ekF{(A~3BNd|oMu!deQRZn?d1&+;{kj$=`c&Zx|t_ zousV|{chmJxPUa+1~rmYs>TOkDVS>LsxtXZDz&s2qLzo6C*U*~u?6_%KZ^Vs(hiqI z+5BAh`;!x_Ck*r>fQw&xm0!9Wpkh;z>OzJKq0xE2OytwFt&~z`Upr>bTxwP}IKSh8 z={%wk39K%vv=zJ`TCkrAjno=g4oDJ~)|ZhBNFf9ZBSknIEDjT7p$WNkK9y8{Oe}iz>FbAMMrUt z?AP#SQF?U1ts45O`r|LNo1$WhpA~hYd3X1j7ft4L2EA|X oggagTyUbg=;i90#n}uDxt~)=KM6*Sh!$22#85QXYN#n2o2gdkpkpKVy From e6eab3fabf1ee1335eef28371fb330558f34c2ee Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 11 Feb 2015 15:04:59 +1030 Subject: [PATCH 42/90] Adding more plant genes to play with. --- code/modules/hydroponics/_hydro_setup.dm | 17 ++++++--- code/modules/hydroponics/seed.dm | 47 ++++++++++++++++-------- 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/code/modules/hydroponics/_hydro_setup.dm b/code/modules/hydroponics/_hydro_setup.dm index 88467d920b..a3fd4604a6 100644 --- a/code/modules/hydroponics/_hydro_setup.dm +++ b/code/modules/hydroponics/_hydro_setup.dm @@ -2,13 +2,20 @@ #define DEAD_PLANT_COLOUR "#C2A180" // Definitions for genes (trait groupings) -#define GENE_PRODUCTS "products" -#define GENE_CONSUMPTION "consumption" +#define GENE_BIOCHEMISTRY "biochemistry" +#define GENE_HARDINESS "hardiness" #define GENE_ENVIRONMENT "environment" -#define GENE_RESISTANCE "resistance" +#define GENE_METABOLISM "metabolism" +#define GENE_STRUCTURE "appearance" +#define GENE_DIET "diet" +#define GENE_PIGMENT "pigment" +#define GENE_OUTPUT "output" +#define GENE_ATMOSPHERE "atmosphere" #define GENE_VIGOUR "vigour" -#define GENE_PIGMENT "appearance" -#define ALL_GENES list(GENE_PRODUCTS,GENE_CONSUMPTION,GENE_ENVIRONMENT,GENE_RESISTANCE,GENE_VIGOUR,GENE_PIGMENT) +#define GENE_FRUIT "fruit" +#define GENE_SPECIAL "special" + +#define ALL_GENES list(GENE_BIOCHEMISTRY,GENE_HARDINESS,GENE_ENVIRONMENT,GENE_METABOLISM,GENE_STRUCTURE,GENE_DIET,GENE_PIGMENT,GENE_OUTPUT,GENE_ATMOSPHERE,GENE_VIGOUR,GENE_FRUIT,GENE_SPECIAL) //Definitions for traits (individual descriptors) #define TRAIT_CHEMS 1 diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 3b99746ad0..004465d22e 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -3,7 +3,6 @@ var/list/values // Values to copy into the target seed datum. /datum/seed - //Tracking. var/uid // Unique identifier. var/name // Index for global list. @@ -19,9 +18,9 @@ var/list/chems // Chemicals that plant produces in products/injects into victim. var/list/consume_gasses // The plant will absorb these gasses during its life. var/list/exude_gasses // The plant will exude these gasses during its life. - var/splat_type = /obj/effect/decal/cleanable/fruit_smudge // Graffiti decal. var/kitchen_tag // Used by the reagent grinder. var/trash_type // Garbage item produced when eaten. + var/splat_type = /obj/effect/decal/cleanable/fruit_smudge // Graffiti decal. /datum/seed/New() @@ -507,7 +506,7 @@ // Splicing products has some detrimental effects on yield and lifespan. // We handle this before we do the rest of the looping, as normal traits don't really include lists. - if(gene.genetype == GENE_PRODUCTS) + if(gene.genetype == GENE_BIOCHEMISTRY) for(var/trait in list(TRAIT_YIELD, TRAIT_ENDURANCE)) if(get_trait(trait) > 0) set_trait(trait,get_trait(trait),null,1,0.85) @@ -538,6 +537,10 @@ for(var/gas in exude_gasses) exude_gasses[gas] = max(1,round(exude_gasses[gas]*0.8)) + else if(gene.genetype == GENE_DIET) + var/list/new_gasses = gene.values["[TRAIT_CONSUME_GASSES]"] + consume_gasses |= new_gasses + for(var/trait in gene.values) set_trait(trait,gene.values["[trait]"]) @@ -554,21 +557,33 @@ P.values = list() switch(genetype) - if(GENE_PRODUCTS) - P.values["[TRAIT_CHEMS]"] = chems - P.values["[TRAIT_EXUDE_GASSES]"] = exude_gasses - traits_to_copy = list(TRAIT_ALTER_TEMP,TRAIT_POTENCY,TRAIT_HARVEST_REPEAT,TRAIT_PRODUCES_POWER,TRAIT_JUICY,TRAIT_PRODUCT_ICON,TRAIT_PLANT_ICON) - if(GENE_CONSUMPTION) - P.values["[TRAIT_CONSUME_GASSES]"] = consume_gasses - traits_to_copy = list(TRAIT_REQUIRES_NUTRIENTS,TRAIT_NUTRIENT_CONSUMPTION,TRAIT_REQUIRES_WATER,TRAIT_WATER_CONSUMPTION,TRAIT_CARNIVOROUS,TRAIT_PARASITE,TRAIT_STINGS) - if(GENE_ENVIRONMENT) - traits_to_copy = list(TRAIT_IDEAL_HEAT,TRAIT_HEAT_TOLERANCE,TRAIT_IDEAL_LIGHT,TRAIT_LIGHT_TOLERANCE,TRAIT_LOWKPA_TOLERANCE,TRAIT_HIGHKPA_TOLERANCE,TRAIT_EXPLOSIVE) - if(GENE_RESISTANCE) - traits_to_copy = list(TRAIT_TOXINS_TOLERANCE,TRAIT_PEST_TOLERANCE,TRAIT_WEED_TOLERANCE) + if(GENE_BIOCHEMISTRY) + P.values["[TRAIT_CHEMS]"] = chems + P.values["[TRAIT_EXUDE_GASSES]"] = exude_gasses + traits_to_copy = list(TRAIT_POTENCY) + if(GENE_OUTPUT) + traits_to_copy = list(TRAIT_PRODUCES_POWER,TRAIT_BIOLUM) + if(GENE_ATMOSPHERE) + traits_to_copy = list(TRAIT_HEAT_TOLERANCE,TRAIT_LOWKPA_TOLERANCE,TRAIT_HIGHKPA_TOLERANCE) + if(GENE_HARDINESS) + traits_to_copy = list(TRAIT_TOXINS_TOLERANCE,TRAIT_PEST_TOLERANCE,TRAIT_WEED_TOLERANCE,TRAIT_ENDURANCE) + if(GENE_METABOLISM) + traits_to_copy = list(TRAIT_REQUIRES_NUTRIENTS,TRAIT_REQUIRES_WATER,TRAIT_ALTER_TEMP) if(GENE_VIGOUR) - traits_to_copy = list(TRAIT_ENDURANCE,TRAIT_YIELD,TRAIT_SPREAD,TRAIT_MATURATION,TRAIT_PRODUCTION,TRAIT_TELEPORTING) + traits_to_copy = list(TRAIT_PRODUCTION,TRAIT_MATURATION,TRAIT_YIELD,TRAIT_SPREAD) + if(GENE_DIET) + P.values["[TRAIT_CONSUME_GASSES]"] = consume_gasses + traits_to_copy = list(TRAIT_CARNIVOROUS,TRAIT_PARASITE,TRAIT_NUTRIENT_CONSUMPTION,TRAIT_WATER_CONSUMPTION) + if(GENE_ENVIRONMENT) + traits_to_copy = list(TRAIT_IDEAL_HEAT,TRAIT_IDEAL_LIGHT,TRAIT_LIGHT_TOLERANCE) if(GENE_PIGMENT) - traits_to_copy = list(TRAIT_PLANT_COLOUR,TRAIT_PRODUCT_COLOUR,TRAIT_BIOLUM,TRAIT_BIOLUM_COLOUR) + traits_to_copy = list(TRAIT_PLANT_COLOUR,TRAIT_PRODUCT_COLOUR,TRAIT_BIOLUM_COLOUR) + if(GENE_STRUCTURE) + traits_to_copy = list(TRAIT_PLANT_ICON,TRAIT_PRODUCT_ICON,TRAIT_HARVEST_REPEAT) + if(GENE_FRUIT) + traits_to_copy = list(TRAIT_STINGS,TRAIT_EXPLOSIVE,TRAIT_JUICY) + if(GENE_SPECIAL) + traits_to_copy = list(TRAIT_TELEPORTING) for(var/trait in traits_to_copy) P.values["[trait]"] = get_trait(trait) From a9d55a17b80e83dda93551185600272074bafb7c Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Thu, 12 Feb 2015 23:24:44 +1030 Subject: [PATCH 43/90] Readded mob products. --- code/modules/hydroponics/seed.dm | 78 +++++++++++++++---------- code/modules/hydroponics/seed_datums.dm | 3 + 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 88da218e66..0b06f41130 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -21,6 +21,7 @@ var/kitchen_tag // Used by the reagent grinder. var/trash_type // Garbage item produced when eaten. var/splat_type = /obj/effect/decal/cleanable/fruit_smudge // Graffiti decal. + var/has_mob_product /datum/seed/New() @@ -506,40 +507,48 @@ // Splicing products has some detrimental effects on yield and lifespan. // We handle this before we do the rest of the looping, as normal traits don't really include lists. - if(gene.genetype == GENE_BIOCHEMISTRY) - for(var/trait in list(TRAIT_YIELD, TRAIT_ENDURANCE)) - if(get_trait(trait) > 0) set_trait(trait,get_trait(trait),null,1,0.85) + switch(gene.genetype) + if(GENE_BIOCHEMISTRY) + for(var/trait in list(TRAIT_YIELD, TRAIT_ENDURANCE)) + if(get_trait(trait) > 0) set_trait(trait,get_trait(trait),null,1,0.85) - if(!chems) chems = list() + if(!chems) chems = list() - var/list/gene_value = gene.values["[TRAIT_CHEMS]"] - for(var/rid in gene_value) + var/list/gene_value = gene.values["[TRAIT_CHEMS]"] + for(var/rid in gene_value) - var/list/gene_chem = gene_value[rid] + var/list/gene_chem = gene_value[rid] - if(!chems[rid]) - chems[rid] = gene_chem.Copy() - continue + if(!chems[rid]) + chems[rid] = gene_chem.Copy() + continue - for(var/i=1;i<=gene_chem.len;i++) + for(var/i=1;i<=gene_chem.len;i++) - if(isnull(gene_chem[i])) gene_chem[i] = 0 + if(isnull(gene_chem[i])) gene_chem[i] = 0 - if(chems[rid][i]) - chems[rid][i] = max(1,round((gene_chem[i] + chems[rid][i])/2)) - else - chems[rid][i] = gene_chem[i] + if(chems[rid][i]) + chems[rid][i] = max(1,round((gene_chem[i] + chems[rid][i])/2)) + else + chems[rid][i] = gene_chem[i] - var/list/new_gasses = gene.values["[TRAIT_EXUDE_GASSES]"] - if(islist(new_gasses)) - if(!exude_gasses) exude_gasses = list() - exude_gasses |= new_gasses - for(var/gas in exude_gasses) - exude_gasses[gas] = max(1,round(exude_gasses[gas]*0.8)) + var/list/new_gasses = gene.values["[TRAIT_EXUDE_GASSES]"] + if(islist(new_gasses)) + if(!exude_gasses) exude_gasses = list() + exude_gasses |= new_gasses + for(var/gas in exude_gasses) + exude_gasses[gas] = max(1,round(exude_gasses[gas]*0.8)) - else if(gene.genetype == GENE_DIET) - var/list/new_gasses = gene.values["[TRAIT_CONSUME_GASSES]"] - consume_gasses |= new_gasses + gene.values["[TRAIT_EXUDE_GASSES]"] = null + gene.values["[TRAIT_CHEMS]"] = null + + if(GENE_DIET) + var/list/new_gasses = gene.values["[TRAIT_CONSUME_GASSES]"] + consume_gasses |= new_gasses + gene.values["[TRAIT_CONSUME_GASSES]"] = null + if(GENE_METABOLISM) + has_mob_product = gene.values["mob_product"] + gene.values["mob_product"] = null for(var/trait in gene.values) set_trait(trait,gene.values["[trait]"]) @@ -568,6 +577,7 @@ if(GENE_HARDINESS) traits_to_copy = list(TRAIT_TOXINS_TOLERANCE,TRAIT_PEST_TOLERANCE,TRAIT_WEED_TOLERANCE,TRAIT_ENDURANCE) if(GENE_METABOLISM) + P.values["mob_product"] = has_mob_product traits_to_copy = list(TRAIT_REQUIRES_NUTRIENTS,TRAIT_REQUIRES_WATER,TRAIT_ALTER_TEMP) if(GENE_VIGOUR) traits_to_copy = list(TRAIT_PRODUCTION,TRAIT_MATURATION,TRAIT_YIELD,TRAIT_SPREAD) @@ -626,7 +636,11 @@ currently_querying = list() for(var/i = 0;i Date: Fri, 13 Feb 2015 01:23:27 +1030 Subject: [PATCH 44/90] Generalized fruit products properly. --- code/game/objects/items/stacks/medical.dm | 6 +- code/game/objects/items/toys.dm | 2 +- code/modules/hydroponics/grown.dm | 67 +++++++++++++----- code/modules/hydroponics/grown_inedible.dm | 31 +------- code/modules/hydroponics/seed_controller.dm | 19 +++-- code/modules/hydroponics/seed_storage.dm | 4 +- .../hydroponics/spreading/spreading.dm | 8 +++ .../reagents/reagent_containers/spray.dm | 2 +- icons/obj/food.dmi | Bin 92621 -> 93287 bytes icons/obj/harvest.dmi | Bin 29452 -> 0 bytes icons/obj/hydroponics_products.dmi | Bin 4343 -> 12619 bytes icons/obj/trash.dmi | Bin 8062 -> 4054 bytes maps/exodus-5.dmm | 7 +- 13 files changed, 84 insertions(+), 62 deletions(-) delete mode 100644 icons/obj/harvest.dmi diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index c87b57b043..cdd385cd65 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -127,7 +127,7 @@ name = "\improper S'rendarr's Hand leaf" singular_name = "S'rendarr's Hand leaf" desc = "A poultice made of soft leaves that is rubbed on bruises." - icon = 'icons/obj/harvest.dmi' + //icon = 'icons/obj/harvest.dmi' icon_state = "shandp" heal_brute = 7 @@ -135,7 +135,7 @@ name = "\improper Messa's Tear petals" singular_name = "Messa's Tear petals" desc = "A poultice made of cold, blue petals that is rubbed on burns." - icon = 'icons/obj/harvest.dmi' + //icon = 'icons/obj/harvest.dmi' icon_state = "mtearp" heal_burn = 7 @@ -159,7 +159,7 @@ if(affecting.open == 0) var/bandaged = affecting.bandage() var/disinfected = affecting.disinfect() - + if(!(bandaged || disinfected)) user << "\red The wounds on [M]'s [affecting.display_name] have already been treated." return 1 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 6cd12cf137..8ff441b654 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -424,7 +424,7 @@ /obj/item/toy/waterflower name = "water flower" desc = "A seemingly innocent sunflower...with a twist." - icon = 'icons/obj/harvest.dmi' + //icon = 'icons/obj/harvest.dmi' icon_state = "sunflower" item_state = "sunflower" var/empty = 0 diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index ee2c7c66ff..85a9576ffd 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -2,9 +2,9 @@ /obj/item/weapon/reagent_containers/food/snacks/grown name = "fruit" - //icon = 'icons/obj/harvest.dmi' //Todo convert to greyscale icon = 'icons/obj/hydroponics_products.dmi' - desc = "The product of some kind of plant." //Todo store descs for retrieval. + icon_state = "blank" + desc = "The product of some kind of plant." var/plantname var/datum/seed/seed @@ -37,8 +37,7 @@ return name = "[seed.seed_name]" - icon_state = "[seed.get_trait(TRAIT_PRODUCT_ICON)]" - color = "[seed.get_trait(TRAIT_PRODUCT_COLOUR)]" + update_icon() if(!seed.chems) return @@ -55,6 +54,26 @@ if(reagents.total_volume > 0) bitesize = 1+round(reagents.total_volume / 2, 1) +/obj/item/weapon/reagent_containers/food/snacks/grown/update_icon() + if(!seed || !plant_controller || !plant_controller.plant_icon_cache) + return + overlays.Cut() + var/image/plant_icon + var/icon_key = "fruit-[seed.get_trait(TRAIT_PRODUCT_ICON)]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]-[seed.get_trait(TRAIT_PLANT_COLOUR)]" + if(plant_controller.plant_icon_cache[icon_key]) + plant_icon = plant_controller.plant_icon_cache[icon_key] + else + plant_icon = image('icons/obj/hydroponics_products.dmi',"blank") + var/image/fruit_base = image('icons/obj/hydroponics_products.dmi',"[seed.get_trait(TRAIT_PRODUCT_ICON)]-product") + fruit_base.color = "[seed.get_trait(TRAIT_PRODUCT_COLOUR)]" + plant_icon.overlays |= fruit_base + if("[seed.get_trait(TRAIT_PRODUCT_ICON)]-leaf" in icon_states('icons/obj/hydroponics_products.dmi')) + var/image/fruit_leaves = image('icons/obj/hydroponics_products.dmi',"[seed.get_trait(TRAIT_PRODUCT_ICON)]-leaf") + fruit_leaves.color = "[seed.get_trait(TRAIT_PLANT_COLOUR)]" + plant_icon.overlays |= fruit_leaves + plant_controller.plant_icon_cache[icon_key] = plant_icon + overlays |= plant_icon + /obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(var/mob/living/M) if(seed && seed.get_trait(TRAIT_JUICY) == 2) if(istype(M)) @@ -81,20 +100,36 @@ ..() if(seed) seed.thrown_at(src,hit_atom) -/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if(seed && seed.get_trait(TRAIT_PRODUCES_POWER) && istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if(C.use(5)) - //TODO: generalize this. - user << "You add some cable to the [src.name] and slide it inside the battery casing." - var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(get_turf(user)) - if(src.loc == user && !(user.l_hand && user.r_hand) && istype(user,/mob/living/carbon/human)) - user.put_in_hands(pocell) - pocell.maxcharge = src.potency * 10 - pocell.charge = pocell.maxcharge +/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/weapon/W, var/mob/user) + + if(seed) + if(seed.get_trait(TRAIT_PRODUCES_POWER) && istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if(C.use(5)) + //TODO: generalize this. + user << "You add some cable to the [src.name] and slide it inside the battery casing." + var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(get_turf(user)) + if(src.loc == user && !(user.l_hand && user.r_hand) && istype(user,/mob/living/carbon/human)) + user.put_in_hands(pocell) + pocell.maxcharge = src.potency * 10 + pocell.charge = pocell.maxcharge + del(src) + return + else if(seed.get_trait(TRAIT_PRODUCT_ICON) == "mushroom7" && (istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy))) + user.show_message("You make planks out of \the [src]!", 1) + for(var/i=0,i<2,i++) + var/obj/item/stack/sheet/wood/NG = new (user.loc) + NG.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) + for (var/obj/item/stack/sheet/wood/G in user.loc) + if(G==NG) + continue + if(G.amount>=G.max_amount) + continue + G.attackby(NG, user) + user << "You add the newly-formed wood to the stack. It now contains [NG.amount] planks." del(src) return + ..() /obj/item/weapon/reagent_containers/food/snacks/grown/attack(var/mob/living/carbon/M, var/mob/user, var/def_zone) if(user == M) diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 928db6980e..da9c00120d 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -32,39 +32,10 @@ rtotal += round(potency/reagent_data[2]) reagents.add_reagent(rid,max(1,rtotal)) -/obj/item/weapon/grown/log - name = "towercap" - name = "tower-cap log" - desc = "It's better than bad, it's good!" - icon = 'icons/obj/harvest.dmi' - icon_state = "logs" - force = 5 - throwforce = 5 - w_class = 3.0 - throw_speed = 3 - throw_range = 3 - origin_tech = "materials=1" - attack_verb = list("bashed", "battered", "bludgeoned", "whacked") - - attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy)) - user.show_message("You make planks out of \the [src]!", 1) - for(var/i=0,i<2,i++) - var/obj/item/stack/sheet/wood/NG = new (user.loc) - for (var/obj/item/stack/sheet/wood/G in user.loc) - if(G==NG) - continue - if(G.amount>=G.max_amount) - continue - G.attackby(NG, user) - usr << "You add the newly-formed wood to the stack. It now contains [NG.amount] planks." - del(src) - return - /obj/item/weapon/corncob name = "corn cob" desc = "A reminder of meals gone by." - icon = 'icons/obj/harvest.dmi' + icon = 'icons/obj/trash.dmi' icon_state = "corncob" item_state = "corncob" w_class = 2.0 diff --git a/code/modules/hydroponics/seed_controller.dm b/code/modules/hydroponics/seed_controller.dm index 27b2113b69..7ea407dab0 100644 --- a/code/modules/hydroponics/seed_controller.dm +++ b/code/modules/hydroponics/seed_controller.dm @@ -1,8 +1,8 @@ -//Attempts to offload processing for the spreading plants from the MC. +// Attempts to offload processing for the spreading plants from the MC. // Processes vines/spreading plants. #define PLANTS_PER_TICK 5 -#define PLANT_TICK_TIME 5 +#define PLANT_TICK_TIME 10 // Debug for testing seed genes. /client/proc/show_plant_genes() @@ -12,7 +12,7 @@ if(!holder) return - if(!plant_controller.gene_tag_masks) + if(!plant_controller || !plant_controller.gene_tag_masks) usr << "Gene masks not set." return @@ -22,13 +22,13 @@ var/global/datum/controller/plants/plant_controller // Set in New(). /datum/controller/plants - var/list/plants = list() // All currently processing plants. + var/list/next_plants = list() // All queued plants. var/list/seeds = list() // All seed data stored here. var/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. var/list/plant_icon_cache = list() // Stores images of growth, fruits and seeds. var/list/plant_sprites = list() // List of all harvested product sprites. var/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages. - var/processing = 0 + var/processing = 0 // Off/on. /datum/controller/plants/New() if(plant_controller && plant_controller != src) @@ -114,10 +114,13 @@ var/global/datum/controller/plants/plant_controller // Set in New(). processing = 1 spawn(0) set background = 1 + var/processed = 0 while(1) if(!processing) sleep(PLANT_TICK_TIME) else + var/list/plants = next_plants + next_plants = list() for(var/x=0;xPlant controller does not exist and [src] requires it. Aborting." + del(src) + return + if(!istype(newseed)) newseed = plant_controller.seeds[DEFAULT_SEED] seed = newseed diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index d76d7037c0..6df19f2d8f 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -170,7 +170,7 @@ /obj/item/weapon/reagent_containers/spray/waterflower name = "water flower" desc = "A seemingly innocent sunflower...with a twist." - icon = 'icons/obj/harvest.dmi' + //icon = 'icons/obj/harvest.dmi' icon_state = "sunflower" item_state = "sunflower" amount_per_transfer_from_this = 1 diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index 65756ff5a84b20adbbfb62c99cce7e9f0ea8f4da..7f1cd62657835b1b3276a55b26354c5b5e71f30e 100644 GIT binary patch delta 21620 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 delta 20926 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 diff --git a/icons/obj/hydroponics_products.dmi b/icons/obj/hydroponics_products.dmi index 7b2c18d3518d80f0723f8a372113c7083617cb00..50948e6bb29b7c9644e8b93a679bd967a4289918 100644 GIT binary patch literal 12619 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 O07Y3fnK~)+@c#!cTD92# delta 4336 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 literal 8062 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 Q{Gkp|QPfZ Date: Fri, 13 Feb 2015 05:02:21 +1030 Subject: [PATCH 45/90] Readded pumpkin carving and poultice making. Added a description generator and cache. --- code/modules/hydroponics/grown.dm | 127 +++++++++++++++++--- code/modules/hydroponics/seed_controller.dm | 1 + code/modules/hydroponics/seed_datums.dm | 2 + 3 files changed, 111 insertions(+), 19 deletions(-) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 85a9576ffd..d1e1f65ff7 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -4,7 +4,7 @@ name = "fruit" icon = 'icons/obj/hydroponics_products.dmi' icon_state = "blank" - desc = "The product of some kind of plant." + desc = "Nutritious! Probably." var/plantname var/datum/seed/seed @@ -37,6 +37,7 @@ return name = "[seed.seed_name]" + update_icon() if(!seed.chems) @@ -50,10 +51,77 @@ if(reagent_data.len > 1 && potency > 0) rtotal += round(potency/reagent_data[2]) reagents.add_reagent(rid,max(1,rtotal)) - + update_desc() if(reagents.total_volume > 0) bitesize = 1+round(reagents.total_volume / 2, 1) +/obj/item/weapon/reagent_containers/food/snacks/grown/proc/update_desc() + + if(!seed) + return + if(!plant_controller) + sleep(250) // ugly hack, should mean roundstart plants are fine. + if(!plant_controller) + world << "Plant controller does not exist and [src] requires it. Aborting." + del(src) + return + + if(plant_controller.product_descs[seed.uid]) + desc = plant_controller.product_descs[seed.uid] + else + var/list/descriptors = list() + if(reagents.has_reagent("sugar") || reagents.has_reagent("cherryjelly") || reagents.has_reagent("honey") || reagents.has_reagent("berryjuice")) + descriptors |= "sweet" + if(reagents.has_reagent("anti_toxin")) + descriptors |= "astringent" + if(reagents.has_reagent("frostoil")) + descriptors |= "numbing" + if(reagents.has_reagent("nutriment")) + descriptors |= "nutritious" + if(reagents.has_reagent("condensedcapsaicin") || reagents.has_reagent("capsaicin")) + descriptors |= "spicy" + if(reagents.has_reagent("coco")) + descriptors |= "bitter" + if(reagents.has_reagent("orangejuice") || reagents.has_reagent("lemonjuice") || reagents.has_reagent("limejuice")) + descriptors |= "sweet-sour" + if(reagents.has_reagent("radium") || reagents.has_reagent("uranium")) + descriptors |= "radioactive" + if(reagents.has_reagent("amatoxin") || reagents.has_reagent("toxin")) + descriptors |= "poisonous" + if(reagents.has_reagent("psilocybin") || reagents.has_reagent("space_drugs")) + descriptors |= "hallucinogenic" + if(reagents.has_reagent("bicaridine")) + descriptors |= "medicinal" + if(reagents.has_reagent("gold")) + descriptors |= "shiny" + if(reagents.has_reagent("lube")) + descriptors |= "slippery" + if(reagents.has_reagent("pacid") || reagents.has_reagent("sacid")) + descriptors |= "acidic" + if(seed.get_trait(TRAIT_JUICY)) + descriptors |= "juicy" + if(seed.get_trait(TRAIT_STINGS)) + descriptors |= "stinging" + if(seed.get_trait(TRAIT_TELEPORTING)) + descriptors |= "glowing" + if(seed.get_trait(TRAIT_EXPLOSIVE)) + descriptors |= "bulbous" + + var/descriptor_num = rand(2,4) + var/descriptor_count = descriptor_num + desc = "A" + while(descriptors.len && descriptor_num > 0) + var/chosen = pick(descriptors) + descriptors -= chosen + desc += "[(descriptor_count>1 && descriptor_count!=descriptor_num) ? "," : "" ] [chosen]" + descriptor_num-- + if(seed.seed_noun == "spores") + desc += " mushroom" + else + desc += " fruit" + plant_controller.product_descs[seed.uid] = desc + desc += ". Delicious! Probably." + /obj/item/weapon/reagent_containers/food/snacks/grown/update_icon() if(!seed || !plant_controller || !plant_controller.plant_icon_cache) return @@ -115,20 +183,27 @@ pocell.charge = pocell.maxcharge del(src) return - else if(seed.get_trait(TRAIT_PRODUCT_ICON) == "mushroom7" && (istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy))) - user.show_message("You make planks out of \the [src]!", 1) - for(var/i=0,i<2,i++) - var/obj/item/stack/sheet/wood/NG = new (user.loc) - NG.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) - for (var/obj/item/stack/sheet/wood/G in user.loc) - if(G==NG) - continue - if(G.amount>=G.max_amount) - continue - G.attackby(NG, user) + else if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy)) + if(seed.get_trait(TRAIT_PRODUCT_ICON) == "mushroom7") + user.show_message("You make planks out of \the [src]!", 1) + for(var/i=0,i<2,i++) + var/obj/item/stack/sheet/wood/NG = new (user.loc) + NG.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) + for (var/obj/item/stack/sheet/wood/G in user.loc) + if(G==NG) + continue + if(G.amount>=G.max_amount) + continue + G.attackby(NG, user) user << "You add the newly-formed wood to the stack. It now contains [NG.amount] planks." - del(src) - return + del(src) + return + else if(seed.kitchen_tag == "pumpkin") // Ugggh these checks are awful. + user.show_message("You carve a face into [src]!", 1) + new /obj/item/clothing/head/pumpkinhead (user.loc) + del(src) + return + ..() /obj/item/weapon/reagent_containers/food/snacks/grown/attack(var/mob/living/carbon/M, var/mob/user, var/def_zone) @@ -207,12 +282,26 @@ if(src) del(src) return - if(seed.get_trait(TRAIT_SPREAD) == 0) + if(seed.get_trait(TRAIT_SPREAD) > 0) + user << "You plant the [src.name]." + new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(get_turf(user),src.seed) + del(src) return - user << "You plant the [src.name]." - new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(get_turf(user),src.seed) - del(src) + if(seed.kitchen_tag) + switch(seed.kitchen_tag) + if("shand") + var/obj/item/stack/medical/bruise_pack/tajaran/poultice = new /obj/item/stack/medical/bruise_pack/tajaran(user.loc) + poultice.heal_brute = potency + user << "You mash the leaves into a poultice." + del(src) + return + if("mtear") + var/obj/item/stack/medical/ointment/tajaran/poultice = new /obj/item/stack/medical/ointment/tajaran(user.loc) + poultice.heal_burn = potency + user << "You mash the petals into a poultice." + del(src) + return /obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user) ..() diff --git a/code/modules/hydroponics/seed_controller.dm b/code/modules/hydroponics/seed_controller.dm index 7ea407dab0..92a060ff1d 100644 --- a/code/modules/hydroponics/seed_controller.dm +++ b/code/modules/hydroponics/seed_controller.dm @@ -22,6 +22,7 @@ var/global/datum/controller/plants/plant_controller // Set in New(). /datum/controller/plants + var/list/product_descs = list() // Stores generated fruit descs. var/list/next_plants = list() // All queued plants. var/list/seeds = list() // All seed data stored here. var/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 586ab3f460..4dcd661f4e 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -963,6 +963,7 @@ seed_name = "S'randar's hand" display_name = "S'randar's hand leaves" chems = list("bicaridine" = list(0,10)) + kitchen_tag = "shand" /datum/seed/shand/New() ..() @@ -980,6 +981,7 @@ seed_name = "Messa's tear" display_name = "Messa's tear leaves" chems = list("honey" = list(1,10), "kelotane" = list(3,5)) + kitchen_tag = "mtear" /datum/seed/mtear/New() ..() From 066482de93c40f27cfd4d97fea93b830d52ca4ff Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 13 Feb 2015 05:53:45 +1030 Subject: [PATCH 46/90] Readds predefined ambrosia items. --- baystation12.dme | 1 + code/game/objects/items/weapons/gift_wrappaper.dm | 2 ++ code/modules/hydroponics/grown_predefined.dm | 5 +++++ code/modules/mining/abandonedcrates.dm | 1 + 4 files changed, 9 insertions(+) create mode 100644 code/modules/hydroponics/grown_predefined.dm diff --git a/baystation12.dme b/baystation12.dme index b6039e5402..2430bdec36 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -966,6 +966,7 @@ #include "code\modules\hydroponics\_hydro_setup.dm" #include "code\modules\hydroponics\grown.dm" #include "code\modules\hydroponics\grown_inedible.dm" +#include "code\modules\hydroponics\grown_predefined.dm" #include "code\modules\hydroponics\seed.dm" #include "code\modules\hydroponics\seed_controller.dm" #include "code\modules\hydroponics\seed_datums.dm" diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 8127d9736d..8ed63b88aa 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -99,6 +99,8 @@ /obj/item/toy/prize/seraph, /obj/item/toy/spinningtoy, /obj/item/toy/sword, + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus, + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris, /obj/item/device/paicard, /obj/item/device/violin, /obj/item/weapon/storage/belt/utility/full, diff --git a/code/modules/hydroponics/grown_predefined.dm b/code/modules/hydroponics/grown_predefined.dm new file mode 100644 index 0000000000..e44025de7b --- /dev/null +++ b/code/modules/hydroponics/grown_predefined.dm @@ -0,0 +1,5 @@ +/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris + plantname = "ambrosia" + +/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus + plantname = "ambrosiadeus" \ No newline at end of file diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 7f3a5033d5..c26c2eb9cd 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -25,6 +25,7 @@ if(1 to 5) // Common things go, 5% new/obj/item/weapon/reagent_containers/food/drinks/bottle/rum(src) new/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus(src) new/obj/item/weapon/flame/lighter/zippo(src) if(6 to 10) new/obj/item/weapon/pickaxe/drill(src) From 232c2c93e280d258f70b24b2f6f52c5a72121da3 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 13 Feb 2015 10:45:29 +1030 Subject: [PATCH 47/90] Fixes infinite loop issues with plant controller. --- code/modules/hydroponics/grown.dm | 4 ++-- code/modules/hydroponics/seed_controller.dm | 11 ++++++++--- .../hydroponics/spreading/spreading_response.dm | 1 - 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index d1e1f65ff7..f81f2ba260 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -66,8 +66,8 @@ del(src) return - if(plant_controller.product_descs[seed.uid]) - desc = plant_controller.product_descs[seed.uid] + if(plant_controller.product_descs["[seed.uid]"]) + desc = plant_controller.product_descs["[seed.uid]"] else var/list/descriptors = list() if(reagents.has_reagent("sugar") || reagents.has_reagent("cherryjelly") || reagents.has_reagent("honey") || reagents.has_reagent("berryjuice")) diff --git a/code/modules/hydroponics/seed_controller.dm b/code/modules/hydroponics/seed_controller.dm index 92a060ff1d..7d6784fb03 100644 --- a/code/modules/hydroponics/seed_controller.dm +++ b/code/modules/hydroponics/seed_controller.dm @@ -22,6 +22,10 @@ var/global/datum/controller/plants/plant_controller // Set in New(). /datum/controller/plants + + var/plants_per_tick = PLANTS_PER_TICK + var/plant_tick_time = PLANT_TICK_TIME + var/list/product_descs = list() // Stores generated fruit descs. var/list/next_plants = list() // All queued plants. var/list/seeds = list() // All seed data stored here. @@ -118,11 +122,12 @@ var/global/datum/controller/plants/plant_controller // Set in New(). var/processed = 0 while(1) if(!processing) - sleep(PLANT_TICK_TIME) + sleep(plant_tick_time) else + processed = 0 var/list/plants = next_plants next_plants = list() - for(var/x=0;x Date: Fri, 13 Feb 2015 13:22:12 +0100 Subject: [PATCH 48/90] Additional uplink items. Adds the syndicate radio channel encryption key for 2TC. Adds a trash bag to the Smooth operator (9mm+silencer) kit. --- code/game/gamemodes/game_mode.dm | 1 + code/game/objects/items/weapons/storage/uplink_kits.dm | 1 + 2 files changed, 2 insertions(+) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 3f0f8cdd64..389ba9152a 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -62,6 +62,7 @@ "Devices and Tools" = list( new/datum/uplink_item(/obj/item/weapon/storage/toolbox/syndicate, 1, "Fully Loaded Toolbox", "ST"), new/datum/uplink_item(/obj/item/weapon/plastique, 2, "C-4 (Destroys walls)", "C4"), + new/datum/uplink_item(/obj/item/device/encryptionkey/syndicate, 2, "Encrypted Radio Channel Key", "ER"), new/datum/uplink_item(/obj/item/device/encryptionkey/binary, 3, "Binary Translator Key", "BT"), new/datum/uplink_item(/obj/item/weapon/card/emag, 3, "Cryptographic Sequencer", "EC"), new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/clerical, 3, "Morphic Clerical Kit", "CK"), diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index aa66b26f12..1032c64787 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -174,6 +174,7 @@ /obj/item/weapon/storage/box/syndie_kit/g9mm/New() ..() new /obj/item/weapon/gun/projectile/pistol(src) + new /obj/item/weapon/storage/bag/trash(src) new /obj/item/weapon/silencer(src) /obj/item/weapon/storage/box/syndie_kit/cigarette From 77177b514fc1a79f5fcc5643beb05c5d9d561a5c Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 14 Feb 2015 10:30:06 +1030 Subject: [PATCH 49/90] Working on spores. --- code/game/objects/effects/chemsmoke.dm | 51 +++++++++++++++++++------- code/modules/hydroponics/seed.dm | 21 +++++++++++ 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/code/game/objects/effects/chemsmoke.dm b/code/game/objects/effects/chemsmoke.dm index d6d0ac0169..e64a84c47c 100644 --- a/code/game/objects/effects/chemsmoke.dm +++ b/code/game/objects/effects/chemsmoke.dm @@ -21,7 +21,18 @@ var/list/targetTurfs var/list/wallList var/density + var/show_log = 1 +/datum/effect/effect/system/smoke_spread/chem/spores + show_log = 0 + var/datum/seed/seed + +/datum/effect/effect/system/smoke_spread/chem/spores/New(seed_name) + if(seed_name && plant_controller) + seed = plant_controller.seeds[seed_name] + if(!seed) + del(src) + ..() /datum/effect/effect/system/smoke_spread/chem/New() ..() @@ -78,16 +89,17 @@ var/where = "[A.name] | [location.x], [location.y]" var/whereLink = "[where]" - if(carry.my_atom.fingerprintslast) - var/mob/M = get_mob_by_key(carry.my_atom.fingerprintslast) - var/more = "" - if(M) - more = "(?)" - message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1) - log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].") - else - message_admins("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1) - log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.") + if(show_log) + if(carry.my_atom.fingerprintslast) + var/mob/M = get_mob_by_key(carry.my_atom.fingerprintslast) + var/more = "" + if(M) + more = "(?)" + message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1) + log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].") + else + message_admins("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1) + log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.") //------------------------------------------ @@ -186,8 +198,14 @@ // Randomizes and spawns the smoke effect. // Also handles deleting the smoke once the effect is finished. //------------------------------------------ -/datum/effect/effect/system/smoke_spread/chem/proc/spawnSmoke(var/turf/T, var/icon/I, var/dist = 1) - var/obj/effect/effect/smoke/chem/smoke = new(location) +/datum/effect/effect/system/smoke_spread/chem/proc/spawnSmoke(var/turf/T, var/icon/I, var/dist = 1, var/obj/effect/effect/smoke/chem/passed_smoke) + + var/obj/effect/effect/smoke/chem/smoke + if(passed_smoke) + smoke = passed_smoke + else + smoke = new(location) + if(chemholder.reagents.reagent_list.len) chemholder.reagents.copy_to(smoke, chemholder.reagents.total_volume / dist, safety = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents smoke.icon = I @@ -202,6 +220,11 @@ fadeOut(smoke) smoke.delete() +/datum/effect/effect/system/smoke_spread/chem/spores/spawnSmoke(var/turf/T, var/icon/I, var/dist = 1) + var/obj/effect/effect/smoke/chem/spores = new(location) + spores.name = "cloud of [seed.seed_name] [seed.seed_noun]" + ..(T, I, dist, spores) + //------------------------------------------ // Fades out the smoke smoothly using it's alpha variable. //------------------------------------------ @@ -232,7 +255,7 @@ if(!(target in wallList)) wallList += target continue - + if(target in pending) continue if(target in complete) @@ -241,7 +264,7 @@ continue if(current.c_airblock(target)) //this is needed to stop chemsmoke from passing through thin window walls continue - if(target.c_airblock(current)) + if(target.c_airblock(current)) continue pending += target diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 0b06f41130..a5d60ae9d4 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -74,6 +74,25 @@ if(!isnull(lbound)) nval = max(nval,lbound) traits["[trait]"] = nval +/datum/seed/proc/create_spores(var/turf/T) + if(!T) + return + if(!istype(T)) + T = get_turf(T) + if(!T) + return + + var/datum/reagents/R = new/datum/reagents(100) + if(chems.len) + for(var/rid in chems) + var/injecting = min(5,max(1,get_trait(TRAIT_POTENCY)/3)) + R.add_reagent(rid,injecting) + + var/datum/effect/effect/system/smoke_spread/chem/spores/S = new(name) + S.attach(T) + S.set_up(R, round(get_trait(TRAIT_POTENCY)/4), 0, T) + S.start() + // Does brute damage to a target. /datum/seed/proc/do_thorns(var/mob/living/carbon/human/target, var/obj/item/fruit, var/target_limb) @@ -147,6 +166,8 @@ if(force_explode || get_trait(TRAIT_EXPLOSIVE)) + create_spores(origin_turf) + var/flood_dist = min(10,max(1,get_trait(TRAIT_POTENCY)/15)) var/list/open_turfs = list() var/list/closed_turfs = list() From 4c20beac43162f795fa64419b5083ffed26567d0 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sat, 14 Feb 2015 11:47:49 +0100 Subject: [PATCH 50/90] Adds a surgical kit for 3TC. Contains only tools, no medication. --- code/game/gamemodes/game_mode.dm | 5 +++-- .../objects/items/weapons/storage/firstaid.dm | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 389ba9152a..aa61cdc813 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -53,7 +53,7 @@ "Stealth and Camouflage Items" = list( new/datum/uplink_item(/obj/item/weapon/card/id/syndicate, 2, "Agent ID card", "AC"), new/datum/uplink_item(/obj/item/clothing/shoes/syndigaloshes, 2, "No-Slip Shoes", "SH"), - new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/spy, 2, "Bug Kit", "SK"), + new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/spy, 2, "Bug Kit", "BK"), new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/chameleon, 3, "Chameleon Kit", "CB"), new/datum/uplink_item(/obj/item/device/chameleon, 4, "Chameleon-Projector", "CP"), new/datum/uplink_item(/obj/item/clothing/mask/gas/voice, 4, "Voice Changer", "VC"), @@ -79,8 +79,9 @@ new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/imp_explosive, 6, "Explosive Implant (DANGER!)", "EI"), new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/imp_uplink, 10, "Uplink Implant (Contains 5 Telecrystals)", "UI") ), - "Health Aids" = list( + "Medical" = list( new/datum/uplink_item(/obj/item/weapon/storage/box/donkpockets, 1, "Box of Donk-Pockets", "DP"), + new/datum/uplink_item(/obj/item/weapon/storage/firstaid/surgery, 3, "Surgery kit", "SK"), new/datum/uplink_item(/obj/item/weapon/storage/firstaid/combat, 5, "Combat medical kit", "CM") ), "(Pointless) Badassery" = list( diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index e2d45e0fac..ee48ad3172 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -128,6 +128,22 @@ new /obj/item/stack/medical/splint(src) return +/obj/item/weapon/storage/firstaid/surgery + name = "surgery kit" + desc = "Contains tools for surgery." + +/obj/item/weapon/storage/firstaid/surgery/New() + ..() + if (empty) return + new /obj/item/weapon/bonesetter(src) + new /obj/item/weapon/cautery(src) + new /obj/item/weapon/circular_saw(src) + new /obj/item/weapon/hemostat(src) + new /obj/item/weapon/retractor(src) + new /obj/item/weapon/scalpel(src) + new /obj/item/weapon/surgicaldrill(src) + return + /* * Pill Bottles */ From 3b7555c6e0db795946c62a1358830ee74d7f25ee Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 14 Feb 2015 23:43:52 +1030 Subject: [PATCH 51/90] WIP --- code/game/turfs/simulated/walls.dm | 1 + code/modules/hydroponics/seed.dm | 12 +++++- .../hydroponics/spreading/spreading.dm | 5 ++- .../hydroponics/spreading/spreading_growth.dm | 41 +++++++------------ .../spreading/spreading_response.dm | 8 ++-- 5 files changed, 34 insertions(+), 33 deletions(-) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 9b85c90e16..720f880cf9 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -51,6 +51,7 @@ /turf/simulated/wall/ChangeTurf(var/newtype) for(var/obj/effect/E in src) if(E.name == "Wallrot") del E + for(var/obj/effect/plant/plant in range(1)) plant.wake_up() ..(newtype) //Appearance diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 0b06f41130..f70f7c02ed 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -77,9 +77,19 @@ // Does brute damage to a target. /datum/seed/proc/do_thorns(var/mob/living/carbon/human/target, var/obj/item/fruit, var/target_limb) - if(!istype(target) || !get_trait(TRAIT_CARNIVOROUS)) + if(!get_trait(TRAIT_CARNIVOROUS)) return + if(!istype(target)) + if(istype(target, /mob/living/simple_animal/mouse)) + new /obj/effect/decal/remains/mouse(get_turf(target)) + del(target) + else if(istype(target, /mob/living/simple_animal/lizard)) + new /obj/effect/decal/remains/lizard(get_turf(target)) + del(target) + return + + if(!target_limb) target_limb = pick("l_foot","r_foot","l_leg","r_leg","l_hand","r_hand","l_arm", "r_arm","head","chest","groin") var/datum/organ/external/affecting = target.get_organ(target_limb) var/damage = 0 diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index b60381143c..fc46a9a728 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -31,7 +31,7 @@ /obj/effect/dead_plant/attackby() ..() for(var/obj/effect/plant/neighbor in view(1,src)) - plant_controller.add_plant(neighbor) + neighbor.wake_up() del(src) /obj/effect/plant @@ -42,6 +42,7 @@ icon = 'icons/obj/hydroponics_growing.dmi' icon_state = "bush4-1" layer = 3 + pass_flags = PASSTABLE var/health = 10 var/max_health = 100 @@ -107,7 +108,7 @@ set_dir(calc_dir()) update_icon() - plant_controller.add_plant(src) + wake_up() last_tick = world.timeofday /obj/effect/plant/update_icon() diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm index dedcec0c14..213f3381ab 100644 --- a/code/modules/hydroponics/spreading/spreading_growth.dm +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -17,32 +17,18 @@ if(buckled_mob) seed.do_sting(buckled_mob,src) if(seed.get_trait(TRAIT_CARNIVOROUS)) - // Todo: refactor to be less hardcoded. - if(istype(buckled_mob, /mob/living/simple_animal/mouse)) - new /obj/effect/decal/remains/mouse(get_turf(src)) - del(buckled_mob) - buckled_mob = null - return - else if(istype(buckled_mob, /mob/living/simple_animal/lizard)) - new /obj/effect/decal/remains/lizard(get_turf(src)) - del(buckled_mob) - buckled_mob = null - return seed.do_thorns(buckled_mob,src) - var/failed_growth - // Count our neighbors and possible locations for spreading. var/list/possible_locs = list() - var/plant_count = 0 - for(var/turf/simulated/floor/floor in view(1,src)) - if((locate(/obj/effect/dead_plant) in floor.contents) || !floor.Enter(src) || floor.density) - continue - if(locate(/obj/effect/plant) in floor.contents) - plant_count++ - continue - possible_locs |= floor + var/failed_turfs = 0 - if(health == max_health && plant_count >= 4 && !plant) + for(var/turf/simulated/floor/floor in range(1)) + if((locate(/obj/effect/plant) in floor.contents) || (locate(/obj/effect/dead_plant) in floor.contents) || floor.density) + failed_turfs++ + if(floor.Enter(src)) + possible_locs |= floor + + if(health == max_health && failed_turfs > 3 && !plant) plant = new(T,seed) plant.age = seed.get_trait(TRAIT_MATURATION)-1 plant.update_icon() @@ -51,10 +37,9 @@ else plant.layer = layer + 0.1 - if(prob(spread_chance)) + if(possible_locs.len && prob(spread_chance)) for(var/i=1,i<=seed.get_trait(TRAIT_YIELD),i++) if(!possible_locs.len) - failed_growth = 1 break if(prob(spread_into_adjacent)) var/turf/target_turf = pick(possible_locs) @@ -63,7 +48,11 @@ child.parent = get_root() child.parent.children |= child - if(health != max_health || !failed_growth || (plant_count > 4 && !plant)) + if(buckled_mob || health != max_health || possible_locs.len) + wake_up() // We still need to process! + +/obj/effect/plant/proc/wake_up() + if(plant_controller) plant_controller.add_plant(src) /obj/effect/plant/proc/die_off(var/no_remains, var/no_del) @@ -79,7 +68,7 @@ for(var/obj/effect/plant/child in children) child.die_off() for(var/obj/effect/plant/neighbor in view(1,src)) - plant_controller.add_plant(neighbor) + neighbor.wake_up() if(!no_remains && !(locate(/obj/effect/dead_plant) in get_turf(src))) var/obj/effect/dead_plant/plant_remains = new(get_turf(src)) diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm index 9d8f96bd30..0f7cfea948 100644 --- a/code/modules/hydroponics/spreading/spreading_response.dm +++ b/code/modules/hydroponics/spreading/spreading_response.dm @@ -1,5 +1,5 @@ /obj/effect/plant/HasProximity(var/atom/movable/AM) - plant_controller.add_plant(src) + wake_up() if(!is_mature() || seed.get_trait(TRAIT_SPREAD) != 2) return @@ -11,15 +11,15 @@ entangle(M) /obj/effect/plant/attack_hand(mob/user as mob) - plant_controller.add_plant(src) + wake_up() manual_unbuckle(user) /obj/effect/plant/proc/trodden_on(var/mob/living/victim) - plant_controller.add_plant(src) + wake_up() if(!is_mature()) return var/mob/living/carbon/human/H = victim - if(!istype(H) || H.shoes) + if(istype(H) && H.shoes) return seed.do_thorns(victim,src) seed.do_sting(victim,src,pick("r_foot","l_foot","r_leg","l_leg")) From c739438c7ab8b9050f24c033b37b3d94aa2c90f0 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 15 Feb 2015 22:40:28 +1030 Subject: [PATCH 52/90] Well, now the kitchen can't produce ANYTHING, not just regular food. No runtimes though. Progress. --- code/datums/recipe.dm | 78 ++++++++++++++--------------- icons/obj/hydroponics_products.dmi | Bin 12619 -> 12618 bytes 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 5852b956fb..4ee9649927 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -40,7 +40,7 @@ var/result // example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal var/time = 100 // 1/10 part of second -/datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) //1=precisely, 0=insufficiently, -1=superfluous +/datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) . = 1 for (var/r_r in reagents) var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r) @@ -54,40 +54,39 @@ return . /datum/recipe/proc/check_fruit(var/obj/container) - if(!fruit) - . = 1 - return 1 - - var/list/checklist = fruit.Copy() - for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in container) - if(!G.seed) - return - if(!G.seed.kitchen_tag || !checklist[G.seed.kitchen_tag] || checklist[G.seed.kitchen_tag] <= 0) - continue - checklist[G.seed.kitchen_tag]-- - - for(var/ktag in checklist) - if(checklist[ktag] && checklist[ktag] > 0) - . = -1 - return -1 + . = 1 + if(fruit && fruit.len) + var/list/checklist = list() + for(var/fruittype in fruit) // I do not trust Copy(). + checklist[fruittype] = fruit[fruittype] + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in container) + if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag]) || checklist[G.seed.kitchen_tag] <= 0) + continue + checklist[G.seed.kitchen_tag]-- + for(var/ktag in checklist) + if(!isnull(checklist[ktag])) + if(checklist[ktag] < 0) + . = -1 + else if(checklist[ktag] > 0) + . = 0 + break return . -/datum/recipe/proc/check_items(var/obj/container as obj) //1=precisely, 0=insufficiently, -1=superfluous - if (!items) - return 1 +/datum/recipe/proc/check_items(var/obj/container as obj) . = 1 - var/list/checklist = items.Copy() - for(var/obj/O in container) - var/found = 0 - for (var/type in checklist) - if (istype(O,type)) - checklist-=type - found = 1 - break - if (!found) - . = -1 - if (checklist.len) - return 0 + if (items && items.len) + var/list/checklist = items.Copy() + for(var/obj/O in container) + var/found = 0 + for (var/type in checklist) + if (istype(O,type)) + checklist-=type + found = 1 + break + if (!found) + . = -1 + if (checklist.len) + . = 0 return . //general version @@ -111,9 +110,11 @@ container.reagents.clear_reagents() return result_obj -/proc/select_recipe(var/list/datum/recipe/avaiable_recipes, var/obj/obj as obj, var/exact = 1 as num) +/proc/select_recipe(var/list/datum/recipe/avaiable_recipes, var/obj/obj as obj, var/exact) if (!exact) exact = -1 + else + exact = 1 var/list/datum/recipe/possible_recipes = new for (var/datum/recipe/recipe in avaiable_recipes) if (recipe.check_reagents(obj.reagents)==exact && recipe.check_items(obj)==exact && recipe.check_fruit(obj)==exact) @@ -123,14 +124,11 @@ else if (possible_recipes.len==1) return possible_recipes[1] else //okay, let's select the most complicated recipe - var/r_count = 0 - var/i_count = 0 + var/highest_count = 0 . = possible_recipes[1] for (var/datum/recipe/recipe in possible_recipes) - var/N_i = (recipe.items)?(recipe.items.len):0 - var/N_r = (recipe.reagents)?(recipe.reagents.len):0 - if (N_i > i_count || (N_i== i_count && N_r > r_count )) - r_count = N_r - i_count = N_i + var/count = ((recipe.items)?(recipe.items.len):0) + ((recipe.reagents)?(recipe.reagents.len):0) + ((recipe.fruit)?(recipe.fruit.len):0) + if (count >= highest_count) + highest_count = count . = recipe return . diff --git a/icons/obj/hydroponics_products.dmi b/icons/obj/hydroponics_products.dmi index 50948e6bb29b7c9644e8b93a679bd967a4289918..4f9911debeae35441836ef48d3e741dac76ff042 100644 GIT binary patch delta 607 zcmV-l0-*iNV#;E$1OtCXdQ@0+L}hbha%pgMX>V=-0C=3G*s)H-Fc1ddxp|5RW>7<0 zC<6-uAqIE{r*RVt$Bt}=inqs!os8UnLR}K+v)b5~yI;L7pI_hJKg*Yo_u^YRudFGb z%Kh!O*j!W-x_Gm@D>j`}Z5Psw4 z*bZZRj2&p!*Uow+NLULKKc03{&^uB~=YB|a5_K(F2{`9$02zG_r%q`_E9>azY+}jL zTPxdkh~-8N0(A^bS))E7gKU{jkHb-5@H@y^q%yi@0_(g467|pE12Rx zls>*i(g(Om`Urm)c@N76SRP^dNJ=9^&_E5DG0LbGWJ5dZ)NCTHX-`mxO7s`dokDs8;>`Gv(0z{c6XlO zJig=cJ&zx7o+muKAWwSS$BECtu>fJ669B_cBc93ebDe*a0j^_0fbo(6-~~AgFg;$B zIU6uNUY0p4z&>RL4);ur@8vS4*bAyHe@Vq&!haCFEY{4yUV)d!nnBnr9@s06>=lpj zikwk!AF~RKQ)YqrlwDvvXBb$gEQ9kU)8G?q$~KH9%^ERt)`4}-Jg}c)4GZJ%?wo}f z<8UdX@bb@}@FGXEX<3zAn5V=-0C=3O*iBBuFc1acb#sac)}V&A z{4CfY5Mlv$a2hwUaO}u-sJJ~&>}1Kj5r|D9eJ+hXnR)7E`SkMo_EA2+zZGB7d1X!c zSnjX4#pbM<(8ZhGO|j{uYP*nbd=Np#%ZpkI^LbHh8s&VvuZn-o$%$U3>s1M@q`}k; z#&#InW9&e)zIN6tLBd*?_~&US1-&D+bncr}M^V?Jm4I{329VL`aO{*;w6czV&L)-| zy|uD!hgfd(6P&a?OGiIJa&##rN7qtvbTK7I*GTKcAR*>KMej*J`p#L~!?4=ow1O%A zMd{;PBz=I3q>q1ak+-nCgXKLeA4q9r2pXs%GX@$BHeOkhId!C)QM}Of;0U%y{$p@b zp4_PD)*yyK1D&#i8n2eUrJLJmK8-!o?n@c^n@xy*H_n|D^j-|M!N%j&;A}GHf0+|lV**WIqSeWXCBy3v4(~5cX!T0 zjB;sU`*%~2=dhOI^xs1@k8J3p*P#mOWuh|hfrCAU^Pq$5I*3?0P9c^Dw`6WHkWBpr uqPe+1HuVXx=;kH?+4NdMG`*9*(aZAX<9Yr?@&{TY5>E7n8+@};1^6p*AvFj9 From 2f8aa744bca95a5cb8013cbe5c3384976a9514f9 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 16 Feb 2015 21:11:54 +1030 Subject: [PATCH 53/90] Well now the microwave works except for anything involving fruit. I hate this code. --- code/datums/recipe.dm | 30 +++++++++++------------- code/game/machinery/kitchen/microwave.dm | 2 +- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 4ee9649927..1729d7c5f4 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -26,10 +26,7 @@ * * Functions you do not need to call directly but could: * /datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) - * //1=precisely, 0=insufficiently, -1=superfluous - * * /datum/recipe/proc/check_items(var/obj/container as obj) - * //1=precisely, 0=insufficiently, -1=superfluous * * */ @@ -46,11 +43,11 @@ var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r) if (!(abs(aval_r_amnt - reagents[r_r])<0.5)) //if NOT equals if (aval_r_amnt>reagents[r_r]) - . = -1 + . = 0 else - return 0 + return -1 if ((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len) - return -1 + return 0 return . /datum/recipe/proc/check_fruit(var/obj/container) @@ -66,9 +63,9 @@ for(var/ktag in checklist) if(!isnull(checklist[ktag])) if(checklist[ktag] < 0) - . = -1 - else if(checklist[ktag] > 0) . = 0 + else if(checklist[ktag] > 0) + . = -1 break return . @@ -84,9 +81,9 @@ found = 1 break if (!found) - . = -1 + . = 0 if (checklist.len) - . = 0 + . = -1 return . //general version @@ -100,6 +97,10 @@ // food-related /datum/recipe/proc/make_food(var/obj/container as obj) + world << "trying to make [result]." + if(!result) + world << "Recipe is defined without a result, please bug this." + return var/obj/result_obj = new result(container) for (var/obj/O in (container.contents-result_obj)) if (O.reagents) @@ -111,14 +112,11 @@ return result_obj /proc/select_recipe(var/list/datum/recipe/avaiable_recipes, var/obj/obj as obj, var/exact) - if (!exact) - exact = -1 - else - exact = 1 var/list/datum/recipe/possible_recipes = new for (var/datum/recipe/recipe in avaiable_recipes) - if (recipe.check_reagents(obj.reagents)==exact && recipe.check_items(obj)==exact && recipe.check_fruit(obj)==exact) - possible_recipes+=recipe + var/target = exact ? 0 : 1 + if(recipe.check_reagents(obj.reagents) >= target && recipe.check_items(obj) >= target && recipe.check_fruit(obj) >= target) + possible_recipes |= recipe if (possible_recipes.len==0) return null else if (possible_recipes.len==1) diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index 45e32948b5..76fdf631d6 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -274,7 +274,7 @@ cooked.loc = src.loc return -/obj/machinery/microwave/proc/wzhzhzh(var/seconds as num) +/obj/machinery/microwave/proc/wzhzhzh(var/seconds as num) // Whoever named this proc is fucking literally Satan. ~ Z for (var/i=1 to seconds) if (stat & (NOPOWER|BROKEN)) return 0 From cf0a358ad6cec53a80b92340c67484dc91d5757f Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 16 Feb 2015 22:11:59 +1030 Subject: [PATCH 54/90] KITCHEN CODE IS WORKING. YES. I CAN DIE NOW. --- code/datums/recipe.dm | 24 ++++++++++++++---------- code/modules/food/recipes_microwave.dm | 5 ++--- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 1729d7c5f4..9c72feef39 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -57,7 +57,7 @@ for(var/fruittype in fruit) // I do not trust Copy(). checklist[fruittype] = fruit[fruittype] for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in container) - if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag]) || checklist[G.seed.kitchen_tag] <= 0) + if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag])) continue checklist[G.seed.kitchen_tag]-- for(var/ktag in checklist) @@ -72,12 +72,16 @@ /datum/recipe/proc/check_items(var/obj/container as obj) . = 1 if (items && items.len) - var/list/checklist = items.Copy() + var/list/checklist = list() + for(var/item_type in items) + checklist |= item_type //Still don't trust Copy(). for(var/obj/O in container) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) + continue // Fruit is handled in check_fruit(). var/found = 0 - for (var/type in checklist) - if (istype(O,type)) - checklist-=type + for(var/item_type in checklist) + if (istype(O,item_type)) + checklist-=item_type found = 1 break if (!found) @@ -97,9 +101,8 @@ // food-related /datum/recipe/proc/make_food(var/obj/container as obj) - world << "trying to make [result]." if(!result) - world << "Recipe is defined without a result, please bug this." + world << "Recipe [type] is defined without a result, please bug this." return var/obj/result_obj = new result(container) for (var/obj/O in (container.contents-result_obj)) @@ -113,10 +116,11 @@ /proc/select_recipe(var/list/datum/recipe/avaiable_recipes, var/obj/obj as obj, var/exact) var/list/datum/recipe/possible_recipes = new + var/target = exact ? 0 : 1 for (var/datum/recipe/recipe in avaiable_recipes) - var/target = exact ? 0 : 1 - if(recipe.check_reagents(obj.reagents) >= target && recipe.check_items(obj) >= target && recipe.check_fruit(obj) >= target) - possible_recipes |= recipe + if((recipe.check_reagents(obj.reagents) < target) || (recipe.check_items(obj) < target) || (recipe.check_fruit(obj) < target)) + continue + possible_recipes |= recipe if (possible_recipes.len==0) return null else if (possible_recipes.len==1) diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 2774f8822f..eb77cc7589 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -67,7 +67,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal -/datum/recipe/human/burger +/datum/recipe/humanburger items = list( /obj/item/weapon/reagent_containers/food/snacks/meat/human, /obj/item/weapon/reagent_containers/food/snacks/bun @@ -365,7 +365,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos -/datum/recipe/human/kabob +/datum/recipe/humankabob items = list( /obj/item/stack/rods, /obj/item/weapon/reagent_containers/food/snacks/meat/human, @@ -435,7 +435,6 @@ I said no! fruit = list("corn" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/popcorn - /datum/recipe/cookie reagents = list("milk" = 5, "sugar" = 5) items = list( From 8b9cf94e2e857e75cbee6c6f209d2877d1e3a764 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 16 Feb 2015 22:18:12 +1030 Subject: [PATCH 55/90] Readded icon for water flower. --- .../reagents/reagent_containers/spray.dm | 2 +- icons/obj/device.dmi | Bin 22647 -> 23151 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 6df19f2d8f..1a25162526 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -170,7 +170,7 @@ /obj/item/weapon/reagent_containers/spray/waterflower name = "water flower" desc = "A seemingly innocent sunflower...with a twist." - //icon = 'icons/obj/harvest.dmi' + icon = 'icons/obj/device.dmi' icon_state = "sunflower" item_state = "sunflower" amount_per_transfer_from_this = 1 diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index afc7c6953288fd558fe2600e3226580933164158..c141d0dad14d2d112fd2578e34fedd4234ac40d9 100644 GIT binary patch literal 23151 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�bYfyYut)$&$;B2)6$;7y1PNwcCbJX0-#dU=KmN# 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 V#6e67a2tXkeH~-%5-rD<{{dr();$0K From 2e9c266a2f47a7f34ef4487354a2bc5de29e085f Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 9 Feb 2015 08:22:47 +0100 Subject: [PATCH 56/90] Basic main structure for centralized alarm handling. --- baystation12.dme | 10 +- code/__HELPERS/game.dm | 7 +- code/controllers/master_controller.dm | 14 ++- code/controllers/subsystem/alarms.dm | 27 +++++ code/controllers/subsystems.dm | 46 +++++++ code/controllers/verbs.dm | 5 +- code/game/area/areas.dm | 27 ++--- code/game/machinery/camera/camera.dm | 36 +++--- code/game/machinery/camera/motion.dm | 6 +- code/game/machinery/computer/camera.dm | 2 + code/global.dm | 5 +- code/modules/alarm/alarm.dm | 78 ++++++++++++ code/modules/alarm/alarm_handler.dm | 112 ++++++++++++++++++ code/modules/alarm/atmosphere_alarm.dm | 2 + code/modules/alarm/camera_alarm.dm | 2 + code/modules/alarm/fire_alarm.dm | 2 + code/modules/alarm/motion_alarm.dm | 2 + code/modules/alarm/power_alarm.dm | 2 + code/modules/mob/living/silicon/ai/ai.dm | 50 +------- code/modules/mob/living/silicon/alarm.dm | 111 ----------------- .../modules/mob/living/silicon/robot/robot.dm | 40 +------ code/modules/mob/living/silicon/silicon.dm | 1 + code/modules/mob/mob.dm | 4 +- 23 files changed, 345 insertions(+), 246 deletions(-) create mode 100644 code/controllers/subsystem/alarms.dm create mode 100644 code/controllers/subsystems.dm create mode 100644 code/modules/alarm/alarm.dm create mode 100644 code/modules/alarm/alarm_handler.dm create mode 100644 code/modules/alarm/atmosphere_alarm.dm create mode 100644 code/modules/alarm/camera_alarm.dm create mode 100644 code/modules/alarm/fire_alarm.dm create mode 100644 code/modules/alarm/motion_alarm.dm create mode 100644 code/modules/alarm/power_alarm.dm delete mode 100644 code/modules/mob/living/silicon/alarm.dm diff --git a/baystation12.dme b/baystation12.dme index 82506f8bed..89b3383968 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -93,8 +93,10 @@ #include "code\controllers\lighting_controller.dm" #include "code\controllers\master_controller.dm" #include "code\controllers\shuttle_controller.dm" +#include "code\controllers\subsystems.dm" #include "code\controllers\verbs.dm" #include "code\controllers\voting.dm" +#include "code\controllers\subsystem\alarms.dm" #include "code\datums\ai_laws.dm" #include "code\datums\browser.dm" #include "code\datums\computerfiles.dm" @@ -806,6 +808,13 @@ #include "code\modules\admin\verbs\ticklag.dm" #include "code\modules\admin\verbs\tripAI.dm" #include "code\modules\admin\verbs\vox_raiders.dm" +#include "code\modules\alarm\alarm.dm" +#include "code\modules\alarm\alarm_handler.dm" +#include "code\modules\alarm\atmosphere_alarm.dm" +#include "code\modules\alarm\camera_alarm.dm" +#include "code\modules\alarm\fire_alarm.dm" +#include "code\modules\alarm\motion_alarm.dm" +#include "code\modules\alarm\power_alarm.dm" #include "code\modules\assembly\assembly.dm" #include "code\modules\assembly\bomb.dm" #include "code\modules\assembly\helpers.dm" @@ -1115,7 +1124,6 @@ #include "code\modules\mob\living\carbon\monkey\login.dm" #include "code\modules\mob\living\carbon\monkey\monkey.dm" #include "code\modules\mob\living\carbon\monkey\update_icons.dm" -#include "code\modules\mob\living\silicon\alarm.dm" #include "code\modules\mob\living\silicon\death.dm" #include "code\modules\mob\living\silicon\laws.dm" #include "code\modules\mob\living\silicon\login.dm" diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index dcfcb50fcb..2cff3a2338 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -484,5 +484,8 @@ datum/projectile_data temps[direction] = rstats return temps -/proc/MinutesToTicks(var/minutes as num) - return minutes * 60 * 10 +/proc/MinutesToTicks(var/minutes) + return SecondsToTicks(60 * minutes) + +/proc/SecondsToTicks(var/seconds) + return seconds * 10 diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 8675033ef0..a842ac582d 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -26,6 +26,7 @@ datum/controller/game_controller var/powernets_cost = 0 var/nano_cost = 0 var/events_cost = 0 + var/alarms_cost = 0 var/ticker_cost = 0 var/total_cost = 0 @@ -231,6 +232,11 @@ datum/controller/game_controller/proc/process() process_events() events_cost = (world.timeofday - timer) / 10 + //ALARMS + timer = world.timeofday + process_alarms() + alarms_cost = (world.timeofday - timer) / 10 + //TICKER timer = world.timeofday last_thing_processed = ticker.type @@ -238,7 +244,7 @@ datum/controller/game_controller/proc/process() ticker_cost = (world.timeofday - timer) / 10 //TIMING - total_cost = air_cost + sun_cost + mobs_cost + diseases_cost + machines_cost + objects_cost + networks_cost + powernets_cost + nano_cost + events_cost + ticker_cost + total_cost = air_cost + sun_cost + mobs_cost + diseases_cost + machines_cost + objects_cost + networks_cost + powernets_cost + nano_cost + events_cost + alarms_cost + ticker_cost var/end_time = world.timeofday if(end_time < start_time) //why not just use world.time instead? @@ -333,9 +339,13 @@ datum/controller/game_controller/proc/process_nano() nanomanager.processing_uis.Cut(i,i+1) datum/controller/game_controller/proc/process_events() - last_thing_processed = /datum/event + last_thing_processed = /datum/event_manager event_manager.process() +datum/controller/game_controller/proc/process_alarms() + last_thing_processed = /datum/subsystem/alarm + alarm_manager.fire() + datum/controller/game_controller/proc/Recover() //Mostly a placeholder for now. var/msg = "## DEBUG: [time2text(world.timeofday)] MC restarted. Reports:\n" for(var/varname in master_controller.vars) diff --git a/code/controllers/subsystem/alarms.dm b/code/controllers/subsystem/alarms.dm new file mode 100644 index 0000000000..4684737578 --- /dev/null +++ b/code/controllers/subsystem/alarms.dm @@ -0,0 +1,27 @@ +/* /var/global/datum/alarm_handler/atmosphere_alarm = new()*/ +/var/global/datum/alarm_handler/camera_alarm = new() +/* /var/global/datum/alarm_handler/fire_alarm = new()*/ +/var/global/datum/alarm_handler/motion_alarm = new() +/* /var/global/datum/alarm_handler/power_alarm = new() */ + +/datum/subsystem/alarm + name = "Alarm" + var/list/datum/alarm/all_handlers + +/datum/subsystem/alarm/New() + all_handlers = list(camera_alarm) + +/datum/subsystem/alarm/stat_entry() + stat(null,"Alarm-[master_controller.alarms_cost]\t# [active_alarms()]") + +/datum/subsystem/alarm/fire() + for(var/datum/alarm_handler/AH in all_handlers) + AH.process() + +/datum/subsystem/alarm/proc/active_alarms() + var/total = 0 + for(var/datum/alarm_handler/AH in all_handlers) + var/list/alarms = AH.alarms + total += alarms.len + + return total diff --git a/code/controllers/subsystems.dm b/code/controllers/subsystems.dm new file mode 100644 index 0000000000..11025d8d53 --- /dev/null +++ b/code/controllers/subsystems.dm @@ -0,0 +1,46 @@ +#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;} + +/datum/subsystem + //things you will want to define + var/name //name of the subsystem + var/priority = 0 //priority affects order of initialization. Higher priorities are initialized first, lower priorities later. Can be decimal and negative values. + var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. + + //things you will probably want to leave alone + var/can_fire = 0 //prevent fire() calls + var/last_fire = 0 //last world.time we called fire() + var/next_fire = 0 //scheduled world.time for next fire() + var/cpu = 0 //cpu-usage stats (somewhat vague) + var/cost = 0 //average time to execute + var/times_fired = 0 //number of times we have called fire() + +//used to initialize the subsystem BEFORE the map has loaded +/datum/subsystem/New() + +//previously, this would have been named 'process()' but that name is used everywhere for different things! +//fire() seems more suitable. This is the procedure that gets called every 'wait' deciseconds. +//fire(), and the procs it calls, SHOULD NOT HAVE ANY SLEEP OPERATIONS in them! +//YE BE WARNED! +/datum/subsystem/proc/fire() + can_fire = 0 + +//used to initialize the subsystem AFTER the map has loaded +/datum/subsystem/proc/Initialize(start_timeofday) + var/time = (world.timeofday - start_timeofday) / 10 + var/msg = "Initialized [name] SubSystem within [time] seconds" + world << "[msg]" + world.log << msg + +//hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc. +/datum/subsystem/proc/stat_entry() + stat(name, "[round(cost,0.001)]ds\t(CPU:[round(cpu,1)]%)") + +//could be used to postpone a costly subsystem for one cycle +//for instance, during cpu intensive operations like explosions +/datum/subsystem/proc/postpone() + if(next_fire - world.time < wait) + next_fire += wait + +//usually called via datum/subsystem/New() when replacing a subsystem (i.e. due to a recurring crash) +//should attempt to salvage what it can from the old instance of subsystem +/datum/subsystem/proc/Recover() diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 3dcba37bc0..325e2e6472 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -56,7 +56,7 @@ message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") return -/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event")) +/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Alarm")) set category = "Debug" set name = "Debug Controller" set desc = "Debug the various periodic loop controllers for the game (be careful!)" @@ -114,5 +114,8 @@ if("Event") debug_variables(event_manager) feedback_add_details("admin_verb", "DEvent") + if("Alarm") + debug_variables(alarm_manager) + feedback_add_details("admin_verb", "DAlarm") message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.") return diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 609d1a2a6b..13b7ffa34c 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -30,11 +30,17 @@ power_change() // all machines set to current power level, also updates lighting icon InitializeLighting() +/area/proc/get_cameras() + var/list/cameras = list() + for (var/area/RA in related) + for (var/obj/machinery/camera/C in RA) + cameras += C + return cameras /area/proc/poweralert(var/state, var/obj/source as obj) if (state != poweralm) poweralm = state - if(istype(source)) //Only report power alarms on the z-level where the source is located. + /*if(istype(source)) //Only report power alarms on the z-level where the source is located. var/list/cameras = list() for (var/area/RA in related) for (var/obj/machinery/camera/C in RA) @@ -54,7 +60,7 @@ if(state == 1) a.cancelAlarm("Power", src, source) else - a.triggerAlarm("Power", src, cameras, source) + a.triggerAlarm("Power", src, cameras, source) */ return /area/proc/atmosalert(danger_level, var/set_firelocks=1) @@ -71,7 +77,7 @@ if (set_firelocks && danger_level < 1 && atmosalm >= 1) //closing the doors on red and opening on green provides a bit of hysteresis that will hopefully prevent fire doors from opening and closing repeatedly due to noise air_doors_open() - + /* if (danger_level < 2 && atmosalm >= 2) for(var/area/RA in related) for(var/obj/machinery/camera/C in RA) @@ -98,7 +104,7 @@ atmosalm = danger_level for(var/area/RA in related) for (var/obj/machinery/alarm/AA in RA) - AA.update_icon() + AA.update_icon() */ return 1 return 0 @@ -141,15 +147,6 @@ else if(!D.density) spawn() D.close() - var/list/cameras = list() - for(var/area/RA in related) - for (var/obj/machinery/camera/C in RA) - cameras.Add(C) - C.network.Add("Fire Alarms") - for (var/mob/living/silicon/ai/aiPlayer in player_list) - aiPlayer.triggerAlarm("Fire", src, cameras, src) - for (var/obj/machinery/computer/station_alert/a in machines) - a.triggerAlarm("Fire", src, cameras, src) /area/proc/firereset() if (fire) @@ -164,13 +161,13 @@ else if(D.density) spawn(0) D.open() - for(var/area/RA in related) + /*for(var/area/RA in related) for (var/obj/machinery/camera/C in RA) C.network.Remove("Fire Alarms") for (var/mob/living/silicon/ai/aiPlayer in player_list) aiPlayer.cancelAlarm("Fire", src, src) for (var/obj/machinery/computer/station_alert/a in machines) - a.cancelAlarm("Fire", src, src) + a.cancelAlarm("Fire", src, src)*/ /area/proc/readyalert() if(!eject) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index d631ca46df..5d91cb6084 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -57,7 +57,7 @@ /obj/machinery/camera/Del() if(!alarm_on) triggerCameraAlarm() - + cancelCameraAlarm() ..() @@ -70,7 +70,7 @@ kick_viewers() triggerCameraAlarm() update_icon() - + spawn(900) stat &= ~EMPED cancelCameraAlarm() @@ -85,11 +85,11 @@ /obj/machinery/camera/ex_act(severity) if(src.invuln) return - + //camera dies if an explosion touches it! if(severity <= 2 || prob(50)) destroy() - + ..() //and give it the regular chance of being deleted outright @@ -174,7 +174,7 @@ if (S.current == src) O << "[U] holds \a [itemname] up to one of the cameras ..." O << browse(text("[][]", itemname, info), text("window=[]", itemname)) - + else if (istype(W, /obj/item/weapon/camera_bug)) if (!src.can_use()) user << "\blue Camera non-functional" @@ -185,7 +185,7 @@ else user << "\blue Camera bugged." src.bugged = 1 - + else if(W.damtype == BRUTE || W.damtype == BURN) //bashing cameras if (W.force >= src.toughness) visible_message("[src] has been [pick(W.attack_verb)] with [W] by [user]!") @@ -194,7 +194,7 @@ if (I.hitsound) playsound(loc, I.hitsound, 50, 1, -1) take_damage(W.force) - + else ..() @@ -221,14 +221,14 @@ if (force >= toughness && (force > toughness*4 || prob(25))) destroy() -//Used when someone breaks a camera +//Used when someone breaks a camera /obj/machinery/camera/proc/destroy() invalidateCameraCache() stat |= BROKEN kick_viewers() triggerCameraAlarm() update_icon() - + //sparks var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, loc) @@ -264,20 +264,14 @@ /obj/machinery/camera/proc/triggerCameraAlarm() alarm_on = 1 - if(!get_area(src)) - return - - for(var/mob/living/silicon/S in mob_list) - S.triggerAlarm("Camera", get_area(src), list(src), src) - + camera_alarm.triggerAlarm(loc, src) /obj/machinery/camera/proc/cancelCameraAlarm() - alarm_on = 0 - if(!get_area(src)) + if(wires.IsIndexCut(CAMERA_WIRE_ALARM)) return - - for(var/mob/living/silicon/S in mob_list) - S.cancelAlarm("Camera", get_area(src), src) + + alarm_on = 0 + camera_alarm.cancelAlarm(loc, src) //if false, then the camera is listed as DEACTIVATED and cannot be used /obj/machinery/camera/proc/can_use() @@ -355,7 +349,7 @@ /obj/machinery/camera/interact(mob/living/user as mob) if(!panel_open || istype(user, /mob/living/silicon/ai)) return - + if(stat & BROKEN) user << "\The [src] is broken." return diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index 0c6f7d95a7..f14608b1d4 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -45,8 +45,7 @@ if (!status || (stat & NOPOWER)) return 0 if (detectTime == -1) - for (var/mob/living/silicon/aiPlayer in player_list) - aiPlayer.cancelAlarm("Motion", get_area(src), src) + motion_alarm.cancelAlarm(loc, src) detectTime = 0 return 1 @@ -54,8 +53,7 @@ if (!status || (stat & NOPOWER)) return 0 if (!detectTime) return 0 - for (var/mob/living/silicon/aiPlayer in player_list) - aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src) + motion_alarm.triggerAlarm(loc, src) detectTime = -1 return 1 diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 2067bd43a0..b1100fd77c 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -3,6 +3,8 @@ /proc/invalidateCameraCache() for(var/obj/machinery/computer/security/s in world) s.camera_cache = null + for(var/datum/alarm/A in alarm_manager.active_alarms()) + A.cameras = null /obj/machinery/computer/security name = "security camera monitor" diff --git a/code/global.dm b/code/global.dm index c5fd821f79..13a62b38ce 100644 --- a/code/global.dm +++ b/code/global.dm @@ -174,8 +174,9 @@ var/gravity_is_on = 1 var/join_motd = null var/forceblob = 0 -var/datum/nanomanager/nanomanager = new() // NanoManager, the manager for Nano UIs. -var/datum/event_manager/event_manager = new() // Event Manager, the manager for events. +var/datum/nanomanager/nanomanager = new() // NanoManager, the manager for Nano UIs. +var/datum/event_manager/event_manager = new() // Event Manager, the manager for events. +var/datum/subsystem/alarm/alarm_manager = new() // Alarm Manager, the manager for alarms. var/list/awaydestinations = list() // Away missions. A list of landmarks that the warpgate can take you to. diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm new file mode 100644 index 0000000000..0bbeed527d --- /dev/null +++ b/code/modules/alarm/alarm.dm @@ -0,0 +1,78 @@ +/datum/alarm_source + var/source = null // The source trigger + var/source_name = "" // The name of the source should it be lost (for example a destroyed camera) + var/duration = 0 // How long this source will be alarming, 0 for indefinetely. + var/start_time = 0 // When this source began alarming. + var/end_time = 0 // Use to set when this trigger should clear, in case the source is lost. + +/datum/alarm_source/New(var/atom/source) + src.source = source + source_name = source.name + start_time = world.time + +/datum/alarm + var/atom/origin //Used to identify the alarm area. + var/list/sources = new() //List of sources triggering the alarm. Used to determine when the alarm should be cleared. + var/list/sources_assoc = new() //Associative list of source triggers. Used to efficiently acquire the alarm source. + var/list/cameras //List of cameras that can be switched to, if the player has that capability. + var/area/last_area //The last acquired area, used should origin be lost (for example a destroyed borg containing an alarming camera). + +/datum/alarm/New(var/atom/origin, var/atom/source, var/duration) + src.origin = origin + last_area = alarm_area() + set_duration(source, duration) + +/datum/alarm/proc/set_duration(var/atom/source, var/duration) + var/datum/alarm_source/AS = sources[source] + if(!AS) + AS = new/datum/alarm_source(source) + sources += AS + sources_assoc[source] = AS + // Currently only non-0 durations can be altered (normal alarms VS EMP blasts) + if(AS.duration) + AS.duration = duration + +/datum/alarm/proc/clear(var/source) + var/datum/alarm_source/AS = sources[source] + sources -= AS + sources_assoc -= source + +/datum/alarm/proc/alarm_area() + if(!origin) + return last_area + + last_area = origin.get_alarm_area() + return last_area + +/datum/alarm/proc/cameras() + if(!origin) + return list() + + if(!cameras) + cameras = origin.get_alarm_cameras() + + return cameras + + +/atom/proc/get_alarm_area() + return get_area(src) + +/area/get_alarm_area() + return src + +/atom/proc/get_alarm_cameras() + var/area/A = get_area(src) + return A.get_cameras() + +/area/get_alarm_cameras() + return get_cameras() + +/mob/living/silicon/robot/get_alarm_cameras() + var/list/cameras = ..() + if(camera) + cameras += camera + + return cameras + +/mob/living/silicon/robot/syndicate/get_alarm_cameras() + return list() diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm new file mode 100644 index 0000000000..3fd21fc4a0 --- /dev/null +++ b/code/modules/alarm/alarm_handler.dm @@ -0,0 +1,112 @@ +#define ALARM_ORIGIN_LOST "Origin Lost" + +/datum/alarm_handler + var/category = "" + var/list/datum/alarm/alarms = new // All alarms, to handle cases when origin has been deleted with one or more active alarms + var/list/datum/alarm/alarms_assoc = new // Associative list of alarms, to efficiently acquire them based on origin. + +/datum/alarm_handler/proc/process() + /* + for(var/datum/alarm/A in alarms) + var/datum/alarm_source/AS = A.source + // Alarm owner has been deleted. Clean up in at most 15 seconds + if(!AS.owner && !AS.end_time) + AS.end_time = world.time + SecondsToTicks(15) + if(AS.duration || AS.end_time) + if(world.time > (AS.start_time + AS.duration) || world.time > AS.end_time) + //Somethingthing.. + */ + +/datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0) + //Proper origin and source mandatory + if(!origin || !source) + return + + //see if there is already an alarm of this origin + var/alarm_key = origin.get_alarm_key() + var/datum/alarm/existing = alarms_assoc[alarm_key] + if(existing) + existing.set_duration(source, duration) + else + existing = new/datum/alarm(origin, source, duration) + + alarms |= existing + alarms_assoc[alarm_key] = existing + +/datum/alarm_handler/proc/cancelAlarm(var/atom/origin, var/source) + //Proper origin and source mandatory + if(!origin || !source) + return + + var/alarm_key = origin.get_alarm_key() + + var/datum/alarm/existing = alarms_assoc[alarm_key] + if(existing) + existing.clear(source) + if (!existing.sources.len) + alarms -= existing + alarms_assoc -= alarm_key + +/atom/proc/get_alarm_key() + return src + +/turf/get_alarm_key() + return get_area(src) + +/obj/item/device/alarm_debug + name = "An alarm debug tool - Self" + desc = "Alarm Up. Alarm Reset." + icon = 'icons/obj/radio.dmi' + icon_state = "beacon" + item_state = "signaler" + +/obj/item/device/alarm_debug/loc + name = "An alarm debug tool - Loc" + +/obj/item/device/alarm_debug/verb/alarm() + set name = "Alarm" + set category = "Debug" + usr << "Raising alarm" + camera_alarm.triggerAlarm(src, src) + +/obj/item/device/alarm_debug/verb/reset() + set name = "Reset" + set category = "Debug" + usr << "Raising alarm" + camera_alarm.triggerAlarm(src, src) + +/obj/item/device/alarm_debug/verb/tell_me() + set name = "Tell" + set category = "Debug" + usr << "Telling about alarms" + + var/list/datum/alarm/alarms = camera_alarm.alarms + var/list/datum/alarm/alarms_assoc = camera_alarm.alarms_assoc + + world << "List" + for(var/datum/alarm/A in alarms) + world << "Origin: [A.origin ? A.origin : ALARM_ORIGIN_LOST]" + world << "Alarm area: [A.alarm_area()]" + for(var/source in A.sources) + world << "Source: [source]" + + world << "Assoc" + + for(var/atom/origin in alarms_assoc) + world << "Origin: [origin ? origin : ALARM_ORIGIN_LOST]" + var/datum/alarm/A = alarms_assoc[origin] + world << "Alarm area: [A.alarm_area()]" + for(var/source in A.sources) + world << "Source: [source]" + +/obj/item/device/alarm_debug/loc/alarm() + set name = "Alarm" + set category = "Debug" + usr << "Raising alarm" + camera_alarm.triggerAlarm(src.loc, src) + +/obj/item/device/alarm_debug/loc/reset() + set name = "Reset" + set category = "Debug" + usr << "Clearing alarm" + camera_alarm.cancelAlarm(src.loc, src) diff --git a/code/modules/alarm/atmosphere_alarm.dm b/code/modules/alarm/atmosphere_alarm.dm new file mode 100644 index 0000000000..7aad426421 --- /dev/null +++ b/code/modules/alarm/atmosphere_alarm.dm @@ -0,0 +1,2 @@ +/datum/alarm_handler/atmosphere + category = "Atmosphere" diff --git a/code/modules/alarm/camera_alarm.dm b/code/modules/alarm/camera_alarm.dm new file mode 100644 index 0000000000..4624625043 --- /dev/null +++ b/code/modules/alarm/camera_alarm.dm @@ -0,0 +1,2 @@ +/datum/alarm_handler/camera + category = "Camera" \ No newline at end of file diff --git a/code/modules/alarm/fire_alarm.dm b/code/modules/alarm/fire_alarm.dm new file mode 100644 index 0000000000..e654b966b6 --- /dev/null +++ b/code/modules/alarm/fire_alarm.dm @@ -0,0 +1,2 @@ +/datum/alarm_handler/fire_alarm + category = "Fire" diff --git a/code/modules/alarm/motion_alarm.dm b/code/modules/alarm/motion_alarm.dm new file mode 100644 index 0000000000..f51ef3c27b --- /dev/null +++ b/code/modules/alarm/motion_alarm.dm @@ -0,0 +1,2 @@ +/datum/alarm_handler/motion + category = "Motion" diff --git a/code/modules/alarm/power_alarm.dm b/code/modules/alarm/power_alarm.dm new file mode 100644 index 0000000000..8571dbac61 --- /dev/null +++ b/code/modules/alarm/power_alarm.dm @@ -0,0 +1,2 @@ +/datum/alarm_handler/power + category = "Power" diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 3278198723..376031fe4d 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -324,31 +324,8 @@ var/list/ai_verbs_default = list( set category = "AI Commands" set name = "Show Alerts" - var/dat = "Current Station Alerts\n" - dat += "Close

" - for (var/cat in alarms) - dat += text("[]
\n", cat) - var/list/alarmlist = alarms[cat] - if (alarmlist.len) - for (var/area_name in alarmlist) - var/datum/alarm/alarm = alarmlist[area_name] - dat += "" - - var/cameratext = "" - if (alarm.cameras) - for (var/obj/machinery/camera/I in alarm.cameras) - cameratext += text("[][]", (cameratext=="") ? "" : " | ", src, I, I.c_tag) - dat += text("-- [] ([])", alarm.area.name, (cameratext)? cameratext : "No Camera") - - if (alarm.sources.len > 1) - dat += text(" - [] sources", alarm.sources.len) - dat += "
\n" - else - dat += "-- All Systems Nominal
\n" - dat += "
\n" - - viewalerts = 1 - src << browse(dat, "window=aialerts&can_close=0") + //PsiFix + //nano_alarm.ui_interact(usr) // this verb lets the ai see the stations manifest /mob/living/silicon/ai/proc/ai_roster() @@ -521,29 +498,6 @@ var/list/ai_verbs_default = list( return 1 -/mob/living/silicon/ai/triggerAlarm(var/class, area/A, list/cameralist, var/source) - if (stat == 2) - return 1 - - ..() - - var/cameratext = "" - for (var/obj/machinery/camera/C in cameralist) - cameratext += "[(cameratext == "")? "" : "|"][C.c_tag]" - - queueAlarm("--- [class] alarm detected in [A.name]! ([(cameratext)? cameratext : "No Camera"])", class) - - if (viewalerts) ai_alerts() - -/mob/living/silicon/ai/cancelAlarm(var/class, area/A as area, var/source) - var/has_alarm = ..() - - if (!has_alarm) - queueAlarm(text("--- [] alarm in [] has been cleared.", class, A.name), class, 0) - if (viewalerts) ai_alerts() - - return has_alarm - /mob/living/silicon/ai/cancel_camera() set category = "AI Commands" set name = "Cancel Camera View" diff --git a/code/modules/mob/living/silicon/alarm.dm b/code/modules/mob/living/silicon/alarm.dm deleted file mode 100644 index ee505fae5c..0000000000 --- a/code/modules/mob/living/silicon/alarm.dm +++ /dev/null @@ -1,111 +0,0 @@ -/datum/alarm - var/area/area //the area associated with the alarm. Used to identify the alarm - var/list/sources //list of things triggering the alarm. Used to determine when the alarm should be cleared. - var/list/cameras //list of cameras that can be switched to, if the player has that capability. - -/datum/alarm/New(area/A, list/sourcelist=list(), list/cameralist=list()) - area = A - sources = sourcelist - cameras = cameralist - -/mob/living/silicon - var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list(), "Camera"=list()) //each sublist stores alarms keyed by the area name - var/list/alarms_to_show = list() - var/list/alarms_to_clear = list() - var/list/alarm_types_show = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0) - var/list/alarm_types_clear = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0) - -/mob/living/silicon/proc/triggerAlarm(var/class, area/A, list/cameralist, var/source) - var/list/alarmlist = alarms[class] - - //see if there is already an alarm of this class for this area - if (A.name in alarmlist) - var/datum/alarm/existing = alarmlist[A.name] - existing.sources += source - existing.cameras |= cameralist - else - alarmlist[A.name] = new /datum/alarm(A, list(source), cameralist) - -/mob/living/silicon/proc/cancelAlarm(var/class, area/A as area, var/source) - var/cleared = 0 - var/list/alarmlist = alarms[class] - - if (A.name in alarmlist) - var/datum/alarm/alarm = alarmlist[A.name] - alarm.sources -= source - - if (!(alarm.sources.len)) - cleared = 1 - alarmlist -= A.name - - return !cleared - -/mob/living/silicon/proc/queueAlarm(var/message, var/type, var/incoming = 1) - var/in_cooldown = (alarms_to_show.len > 0 || alarms_to_clear.len > 0) - if(incoming) - alarms_to_show += message - alarm_types_show[type] += 1 - else - alarms_to_clear += message - alarm_types_clear[type] += 1 - - if(!in_cooldown) - spawn(10 * 10) // 10 seconds - - if(alarms_to_show.len < 5) - for(var/msg in alarms_to_show) - src << msg - else if(alarms_to_show.len) - - var/msg = "--- " - - if(alarm_types_show["Motion"]) - msg += "MOTION: [alarm_types_show["Motion"]] alarms detected. - " - - if(alarm_types_show["Fire"]) - msg += "FIRE: [alarm_types_show["Fire"]] alarms detected. - " - - if(alarm_types_show["Atmosphere"]) - msg += "ATMOSPHERE: [alarm_types_show["Atmosphere"]] alarms detected. - " - - if(alarm_types_show["Power"]) - msg += "POWER: [alarm_types_show["Power"]] alarms detected. - " - - if(alarm_types_show["Camera"]) - msg += "CAMERA: [alarm_types_show["Power"]] alarms detected. - " - - msg += "\[Show Alerts\]" - src << msg - - if(alarms_to_clear.len < 3) - for(var/msg in alarms_to_clear) - src << msg - - else if(alarms_to_clear.len) - var/msg = "--- " - - if(alarm_types_clear["Motion"]) - msg += "MOTION: [alarm_types_clear["Motion"]] alarms cleared. - " - - if(alarm_types_clear["Fire"]) - msg += "FIRE: [alarm_types_clear["Fire"]] alarms cleared. - " - - if(alarm_types_clear["Atmosphere"]) - msg += "ATMOSPHERE: [alarm_types_clear["Atmosphere"]] alarms cleared. - " - - if(alarm_types_clear["Power"]) - msg += "POWER: [alarm_types_clear["Power"]] alarms cleared. - " - - if(alarm_types_show["Camera"]) - msg += "CAMERA: [alarm_types_show["Power"]] alarms detected. - " - - msg += "\[Show Alerts\]" - src << msg - - - alarms_to_show = list() - alarms_to_clear = list() - for(var/i = 1; i < alarm_types_show.len; i++) - alarm_types_show[i] = 0 - for(var/i = 1; i < alarm_types_clear.len; i++) - alarm_types_clear[i] = 0 \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 6b0509eea1..025f1ef0c2 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -450,25 +450,8 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/proc/robot_alerts() - var/dat = "Current Station Alerts\n" - dat += "Close

" - for (var/cat in alarms) - dat += text("[cat]
\n") - var/list/alarmlist = alarms[cat] - if (alarmlist.len) - for (var/area_name in alarmlist) - var/datum/alarm/alarm = alarmlist[area_name] - dat += "" - dat += text("-- [area_name]") - if (alarm.sources.len > 1) - dat += text("- [alarm.sources.len] sources") - dat += "
\n" - else - dat += "-- All Systems Nominal
\n" - dat += "
\n" - - viewalerts = 1 - src << browse(dat, "window=robotalerts&can_close=0") + //PsiFix + //nano_alarm.ui_interact(usr) /mob/living/silicon/robot/proc/self_diagnosis() if(!is_component_functioning("diagnosis unit")) @@ -636,25 +619,6 @@ var/list/robot_verbs_default = list( return return - -/mob/living/silicon/robot/triggerAlarm(var/class, area/A, list/cameralist, var/source) - if (stat == 2) - return 1 - - ..() - - queueAlarm(text("--- [class] alarm detected in [A.name]!"), class) - - -/mob/living/silicon/robot/cancelAlarm(var/class, area/A as area, obj/origin) - var/has_alarm = ..() - - if (!has_alarm) - queueAlarm(text("--- [class] alarm in [A.name] has been cleared."), class, 0) -// if (viewalerts) robot_alerts() - return has_alarm - - /mob/living/silicon/robot/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/handcuffs)) // fuck i don't even know why isrobot() in handcuff code isn't working so this will have to do return diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index bda7d984e2..af7881986b 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -23,6 +23,7 @@ var/local_transmit //If set, can only speak to others of the same type within a short range. var/sensor_mode = 0 //Determines the current HUD. + #define SEC_HUD 1 //Security HUD mode #define MED_HUD 2 //Medical HUD mode diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 15347c2580..12c9f314e4 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -808,6 +808,8 @@ note dizziness decrements automatically in the mob's Life() proc. stat(null,"Obj-[master_controller.objects_cost]\t#[processing_objects.len]") stat(null,"Net-[master_controller.networks_cost]\tPnet-[master_controller.powernets_cost]") stat(null,"NanoUI-[master_controller.nano_cost]\t#[nanomanager.processing_uis.len]") + stat(null,"Event-[master_controller.events_cost]\t# [event_manager.active_events.len]") + alarm_manager.stat_entry() stat(null,"Tick-[master_controller.ticker_cost]\tALL-[master_controller.total_cost]") else stat(null,"MasterController-ERROR") @@ -1210,4 +1212,4 @@ mob/proc/yank_out_object() /mob/verb/westfaceperm() set hidden = 1 facing_dir = null - set_face_dir(WEST) + set_face_dir(WEST) From 728cb3cffa781ee5e335905d3dc8c667b7dfc107 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 18 Feb 2015 14:34:23 +1030 Subject: [PATCH 57/90] Working on vines. --- code/game/turfs/simulated/walls.dm | 3 +- code/modules/hydroponics/grown.dm | 13 +- code/modules/hydroponics/seed.dm | 1 + code/modules/hydroponics/seed_controller.dm | 39 +++--- code/modules/hydroponics/seed_datums.dm | 1 + .../hydroponics/spreading/spreading.dm | 69 ++++++----- .../hydroponics/spreading/spreading_growth.dm | 114 ++++++++++-------- .../spreading/spreading_response.dm | 5 +- code/modules/hydroponics/trays/tray.dm | 2 +- code/modules/hydroponics/trays/tray_soil.dm | 5 +- code/modules/reagents/Chemistry-Reagents.dm | 11 +- 11 files changed, 147 insertions(+), 116 deletions(-) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 720f880cf9..80c872bcfc 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -51,7 +51,8 @@ /turf/simulated/wall/ChangeTurf(var/newtype) for(var/obj/effect/E in src) if(E.name == "Wallrot") del E - for(var/obj/effect/plant/plant in range(1)) plant.wake_up() + for(var/obj/effect/plant/plant in range(1)) + plant.update_neighbors() ..(newtype) //Appearance diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index f81f2ba260..b893c6dec8 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -47,10 +47,11 @@ for(var/rid in seed.chems) var/list/reagent_data = seed.chems[rid] - var/rtotal = reagent_data[1] - if(reagent_data.len > 1 && potency > 0) - rtotal += round(potency/reagent_data[2]) - reagents.add_reagent(rid,max(1,rtotal)) + if(reagent_data && reagent_data.len) + var/rtotal = reagent_data[1] + if(reagent_data.len > 1 && potency > 0) + rtotal += round(potency/reagent_data[2]) + reagents.add_reagent(rid,max(1,rtotal)) update_desc() if(reagents.total_volume > 0) bitesize = 1+round(reagents.total_volume / 2, 1) @@ -119,7 +120,7 @@ desc += " mushroom" else desc += " fruit" - plant_controller.product_descs[seed.uid] = desc + plant_controller.product_descs["[seed.uid]"] = desc desc += ". Delicious! Probably." /obj/item/weapon/reagent_containers/food/snacks/grown/update_icon() @@ -184,7 +185,7 @@ del(src) return else if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy)) - if(seed.get_trait(TRAIT_PRODUCT_ICON) == "mushroom7") + if(seed.chems && !isnull(seed.chems["woodpulp"])) user.show_message("You make planks out of \the [src]!", 1) for(var/i=0,i<2,i++) var/obj/item/stack/sheet/wood/NG = new (user.loc) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 64475a7f46..b401db24f9 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -362,6 +362,7 @@ if(additional_chems) var/list/possible_chems = list( + "woodpulp", "bicaridine", "hyperzine", "cryoxadone", diff --git a/code/modules/hydroponics/seed_controller.dm b/code/modules/hydroponics/seed_controller.dm index 7d6784fb03..d41794e546 100644 --- a/code/modules/hydroponics/seed_controller.dm +++ b/code/modules/hydroponics/seed_controller.dm @@ -1,8 +1,8 @@ // Attempts to offload processing for the spreading plants from the MC. // Processes vines/spreading plants. -#define PLANTS_PER_TICK 5 -#define PLANT_TICK_TIME 10 +#define PLANTS_PER_TICK 100 +#define PLANT_TICK_TIME 50 // Debug for testing seed genes. /client/proc/show_plant_genes() @@ -25,9 +25,8 @@ var/global/datum/controller/plants/plant_controller // Set in New(). var/plants_per_tick = PLANTS_PER_TICK var/plant_tick_time = PLANT_TICK_TIME - var/list/product_descs = list() // Stores generated fruit descs. - var/list/next_plants = list() // All queued plants. + var/list/plant_queue = list() // All queued plants. var/list/seeds = list() // All seed data stored here. var/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. var/list/plant_icon_cache = list() // Stores images of growth, fruits and seeds. @@ -107,6 +106,9 @@ var/global/datum/controller/plants/plant_controller // Set in New(). if(seed.consume_gasses) seed.consume_gasses["phoron"] = null seed.consume_gasses["carbon_dioxide"] = null + if(seed.chems && !isnull(seed.chems["pacid"])) + seed.chems["pacid"] = null // Eating through the hull will make these plants completely inviable, albeit very dangerous. + seed.chems -= null // Setting to null does not actually remove the entry, which is weird. seed.set_trait(TRAIT_IDEAL_HEAT,293) seed.set_trait(TRAIT_HEAT_TOLERANCE,20) seed.set_trait(TRAIT_IDEAL_LIGHT,8) @@ -125,19 +127,20 @@ var/global/datum/controller/plants/plant_controller // Set in New(). sleep(plant_tick_time) else processed = 0 - var/list/plants = next_plants - next_plants = list() - for(var/x=0;xNull or non-plant entry in plant controller queue." + break + plant_queue -= plant + sleep(1) // Stagger processing out so previous tick can resolve (overlapping plant segments etc) + plant.process() + processed++ + sleep(max(1,(plant_tick_time-processed))) /datum/controller/plants/proc/add_plant(var/obj/effect/plant/plant) - next_plants |= plant + plant_queue |= plant diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 4dcd661f4e..561210537d 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -443,6 +443,7 @@ name = "towercap" seed_name = "tower cap" display_name = "tower caps" + chems = list("woodpulp" = list(10,1)) mutants = null /datum/seed/mushroom/towercap/New() diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index fc46a9a728..45fcd0d721 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -30,8 +30,8 @@ /obj/effect/dead_plant/attackby() ..() - for(var/obj/effect/plant/neighbor in view(1,src)) - neighbor.wake_up() + for(var/obj/effect/plant/neighbor in range(1)) + neighbor.update_neighbors() del(src) /obj/effect/plant @@ -50,13 +50,12 @@ var/growth_type = 0 var/max_growth = 0 - var/list/children = list() + var/list/neighbors = list() var/obj/effect/plant/parent var/datum/seed/seed var/floor = 0 var/spread_chance = 40 var/spread_distance = 3 - var/spread_into_adjacent = 60 var/evolve_chance = 2 var/last_tick = 0 var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant @@ -64,9 +63,14 @@ /obj/effect/plant/single spread_chance = 0 -/obj/effect/plant/New(var/newloc, var/datum/seed/newseed) +/obj/effect/plant/New(var/newloc, var/datum/seed/newseed, var/obj/effect/plant/newparent) ..() + if(!newparent) + parent = src + else + parent = newparent + if(!plant_controller) sleep(250) // ugly hack, should mean roundstart plants are fine. if(!plant_controller) @@ -102,22 +106,27 @@ if(max_growth > 2 && prob(50)) max_growth-- //Ensure some variation in final sprite, makes the carpet of crap look less wonky. - spread_into_adjacent = round(seed.get_trait(TRAIT_POTENCY)/2) - spread_distance = ((growth_type>0) ? round(spread_into_adjacent/2) : round(spread_into_adjacent/15)) - spread_chance = round(spread_into_adjacent/2) + spread_chance = seed.get_trait(TRAIT_POTENCY) + spread_distance = ((growth_type>0) ? round(spread_chance*0.6) : round(spread_chance*0.3)) set_dir(calc_dir()) update_icon() - wake_up() - last_tick = world.timeofday + + spawn(1) + plant_controller.add_plant(src) + // Some plants eat through plating. + if(!isnull(seed.chems["pacid"])) + var/turf/T = get_turf(src) + T.ex_act(prob(80) ? 3 : 2) /obj/effect/plant/update_icon() - + //TODO: should really be caching this. refresh_icon() if(growth_type == 0 && !floor) src.transform = null var/matrix/M = matrix() - M.Translate(0,-(rand(12,14))) // should make the plant flush against the wall it's meant to be growing from. + // should make the plant flush against the wall it's meant to be growing from. + M.Translate(0,-(rand(12,14))) switch(dir) if(WEST) M.Turn(90) @@ -141,7 +150,13 @@ SetLuminosity(0) /obj/effect/plant/proc/refresh_icon() - var/growth = min(max_growth,max(1,round(health/growth_threshold))) + var/growth = min(max_growth,round(health/growth_threshold)) + var/at_fringe = get_dist(src,parent) + if(at_fringe >= (spread_distance-3)) + max_growth-- + if(at_fringe >= (spread_distance-2)) + max_growth-- + max_growth = max(1,max_growth) if(growth_type > 0) switch(growth_type) if(1) @@ -155,24 +170,14 @@ else icon_state = "[seed.get_trait(TRAIT_PLANT_ICON)]-[growth]" - layer = (growth == max_growth ? 4 : 3) - -/obj/effect/plant/Del() - if(children && children.len) - die_off(null,1) - ..() - -/obj/effect/plant/proc/get_dist_to_parent(var/current_count) - if(!parent) - return current_count - current_count++ - return parent.get_dist_to_parent(current_count) - -/obj/effect/plant/proc/get_root() - if(parent) - return parent.get_root() + if(growth>2 && growth == max_growth) + layer = 5 + opacity = 1 + if(!isnull(seed.chems["woodpulp"])) + density = 1 else - return src + layer = 3 + density = 0 /obj/effect/plant/proc/calc_dir(turf/location = loc) set background = 1 @@ -209,6 +214,8 @@ /obj/effect/plant/attackby(var/obj/item/weapon/W, var/mob/user) + plant_controller.add_plant(src) + if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel)) if(!seed) user << "There is nothing to take a sample from in \the [src]." @@ -240,7 +247,7 @@ /obj/effect/plant/proc/check_health() if(health <= 0) - die_off(1) + die_off() /obj/effect/plant/proc/is_mature() return (health < (max_health/3)) \ No newline at end of file diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm index 213f3381ab..e671663eba 100644 --- a/code/modules/hydroponics/spreading/spreading_growth.dm +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -1,8 +1,31 @@ +#define NEIGHBOR_REFRESH_TIME 100 + +/obj/effect/plant/proc/update_neighbors() + // Update our list of valid neighboring turfs. + neighbors = list() + for(var/turf/simulated/floor/floor in range(1,src)) + if(get_dist(parent, floor) > spread_distance) + continue + if((locate(/obj/effect/plant) in floor.contents) || (locate(/obj/effect/dead_plant) in floor.contents) ) + continue + if(floor.density) + if(!isnull(seed.chems["pacid"])) + spawn(rand(5,25)) floor.ex_act(3) + continue + else if(!floor.Enter(src)) + continue + neighbors |= floor + // Update all of our friends. + var/turf/T = get_turf(src) + for(var/obj/effect/plant/neighbor in range(1,src)) + neighbor.neighbors -= T + /obj/effect/plant/process() // Something is very wrong, kill ourselves. if(!seed) die_off() + return 0 // Handle life. var/turf/simulated/T = get_turf(src) @@ -10,26 +33,13 @@ health -= seed.handle_environment(T, T.return_air(),1) if(health < max_health) health += rand(3,5) + refresh_icon() if(health > max_health) health = max_health - refresh_icon() - - if(buckled_mob) - seed.do_sting(buckled_mob,src) - if(seed.get_trait(TRAIT_CARNIVOROUS)) - seed.do_thorns(buckled_mob,src) - - var/list/possible_locs = list() - var/failed_turfs = 0 - - for(var/turf/simulated/floor/floor in range(1)) - if((locate(/obj/effect/plant) in floor.contents) || (locate(/obj/effect/dead_plant) in floor.contents) || floor.density) - failed_turfs++ - if(floor.Enter(src)) - possible_locs |= floor - - if(health == max_health && failed_turfs > 3 && !plant) + else if(health == max_health && !plant) plant = new(T,seed) + plant.dir = src.dir + plant.transform = src.transform plant.age = seed.get_trait(TRAIT_MATURATION)-1 plant.update_icon() if(growth_type==0) //Vines do not become invisible. @@ -37,42 +47,44 @@ else plant.layer = layer + 0.1 - if(possible_locs.len && prob(spread_chance)) + if(buckled_mob) + seed.do_sting(buckled_mob,src) + if(seed.get_trait(TRAIT_CARNIVOROUS)) + seed.do_thorns(buckled_mob,src) + + if(world.time >= last_tick+NEIGHBOR_REFRESH_TIME) + last_tick = world.time + update_neighbors() + + if(neighbors.len && prob(spread_chance)) + for(var/i=1,i<=seed.get_trait(TRAIT_YIELD),i++) - if(!possible_locs.len) - break - if(prob(spread_into_adjacent)) - var/turf/target_turf = pick(possible_locs) - possible_locs -= target_turf - var/obj/effect/plant/child = new(target_turf, seed) - child.parent = get_root() - child.parent.children |= child + if(prob(spread_chance)) + sleep(rand(3,5)) + if(!neighbors.len) + break + var/turf/target_turf = pick(neighbors) + var/obj/effect/plant/child = new(get_turf(src),seed,parent) + spawn(1) // This should do a little bit of animation. + child.loc = target_turf + child.update_icon() + // Update neighboring squares. + for(var/obj/effect/plant/neighbor in range(1,target_turf)) + neighbor.neighbors -= target_turf - if(buckled_mob || health != max_health || possible_locs.len) - wake_up() // We still need to process! - -/obj/effect/plant/proc/wake_up() - if(plant_controller) + // We shouldn't have spawned if the controller doesn't exist. + check_health() + if(neighbors.len && health == max_health) plant_controller.add_plant(src) -/obj/effect/plant/proc/die_off(var/no_remains, var/no_del) - // Remove ourselves from our parent. - if(parent && parent.children) - parent.children -= src - // Kill off any of our children (and as an added bonus, other plants in this area) - for(var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant in get_turf(src)) - plant.dead = 1 - plant.update_icon() - // Cause the plants around us to update. - if(children && children.len) - for(var/obj/effect/plant/child in children) - child.die_off() - for(var/obj/effect/plant/neighbor in view(1,src)) - neighbor.wake_up() +/obj/effect/plant/proc/die_off() + // Kill off our plant. + if(plant) plant.die() + // This turf is clear now, let our buddies know. + var/turf/T = get_turf(src) + for(var/obj/effect/plant/neighbor in range(1,src)) + neighbor.neighbors |= T + plant_controller.add_plant(neighbor) + spawn(1) if(src) del(src) - if(!no_remains && !(locate(/obj/effect/dead_plant) in get_turf(src))) - var/obj/effect/dead_plant/plant_remains = new(get_turf(src)) - plant_remains.icon = src.icon - plant_remains.icon_state = src.icon_state - if(!no_del) - del(src) \ No newline at end of file +#undef NEIGHBOR_REFRESH_TIME \ No newline at end of file diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm index 0f7cfea948..ccf74e4ef7 100644 --- a/code/modules/hydroponics/spreading/spreading_response.dm +++ b/code/modules/hydroponics/spreading/spreading_response.dm @@ -1,5 +1,5 @@ /obj/effect/plant/HasProximity(var/atom/movable/AM) - wake_up() + if(!is_mature() || seed.get_trait(TRAIT_SPREAD) != 2) return @@ -11,11 +11,10 @@ entangle(M) /obj/effect/plant/attack_hand(mob/user as mob) - wake_up() + // Todo, cause damage. manual_unbuckle(user) /obj/effect/plant/proc/trodden_on(var/mob/living/victim) - wake_up() if(!is_mature()) return var/mob/living/carbon/human/H = victim diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index acb501b850..85ff118868 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -521,7 +521,7 @@ A.hydrotray_type = src.type del(src) else if(O.force && seed) - user.visible_message("\The [src] attacks the [seed.display_name] with \the [O]!") + user.visible_message("\The [user] attacks the [seed.display_name] with \the [O]!") if(!dead) health -= O.force check_health() diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm index abcf137e39..d3a82ba383 100644 --- a/code/modules/hydroponics/trays/tray_soil.dm +++ b/code/modules/hydroponics/trays/tray_soil.dm @@ -19,7 +19,7 @@ /obj/machinery/portable_atmospherics/hydroponics/soil/CanPass() return 1 -// This is a hack pending a proper rewrite of the plant controller. +// Holder for vine plants. // Icons for plants are generated as overlays, so setting it to invisible wouldn't work. // Hence using a blank icon. /obj/machinery/portable_atmospherics/hydroponics/soil/invisible @@ -43,7 +43,7 @@ /obj/machinery/portable_atmospherics/hydroponics/soil/invisible/harvest() ..() - if(!seed) + if(!seed) // Repeat harvests are a thing. del(src) /obj/machinery/portable_atmospherics/hydroponics/soil/invisible/die() @@ -62,5 +62,4 @@ for(var/obj/effect/plant/plant in get_turf(src)) if(plant.invisibility == INVISIBILITY_MAXIMUM) plant.invisibility = initial(plant.invisibility) - plant.die_off() ..() diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 8beb66777c..aba8573ded 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -192,6 +192,13 @@ datum M.resistances += self.data return + woodpulp + name = "Wood Pulp" + id = "woodpulp" + description = "A mass of wood fibers." + reagent_state = LIQUID + color = "#B97A57" + #define WATER_LATENT_HEAT 19000 // How much heat is removed when applied to a hot turf, in J/unit (19000 makes 120 u of water roughly equivalent to 4L) water name = "Water" @@ -260,13 +267,13 @@ datum reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) if (istype(M, /mob/living/carbon/slime)) - var/mob/living/carbon/slime/S = M + var/mob/living/carbon/slime/S = M S.apply_water(volume) if(method == TOUCH && isliving(M)) M.adjust_fire_stacks(-(volume / 10)) if(M.fire_stacks <= 0) M.ExtinguishMob() - return + return water/holywater name = "Holy Water" From 08bb4573ce4a78ca1991a66da67fa7dc8714a7d9 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 20 Feb 2015 00:01:47 -0500 Subject: [PATCH 58/90] Crimson hardsuit uses available species icons Since they were available, the species icons for the mercenary voidsuits were adapted for the crimson hardsuit. --- icons/mob/species/skrell/helmet.dmi | Bin 29120 -> 29463 bytes icons/mob/species/tajaran/helmet.dmi | Bin 26556 -> 26686 bytes icons/mob/species/tajaran/suit.dmi | Bin 55132 -> 55588 bytes icons/mob/species/unathi/helmet.dmi | Bin 26207 -> 26377 bytes icons/mob/species/unathi/suit.dmi | Bin 51758 -> 52707 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/species/skrell/helmet.dmi b/icons/mob/species/skrell/helmet.dmi index 578bcae4aae26db9c77e6e17d35cdf50181da183..2db8b5119a0807cc34233df580a9ea7945d72491 100644 GIT binary patch delta 10226 zcmch6by!qi+wKqw7<40{f~Yh|NDZMPEhWvMgmiapN{|*%=|);YQV@m?>6RY4yJldR z`8L1zJ=gi;T;I9AbH3{w{#op`_w2QvXFuz{?{%-{Wt@aHoX@N{qOokUIK8o!EV!Gb zu@Nd{3oo9PDQzMr8E%-Uwir>fGsSKx^Im>ercILR+H~)COXq7$yYsGFzYOnX`QyJU zT;C`FB7@ew@{hYs>ddFD8gEn8$ZRSta2yqYb!Kg?v~}z{P9LGHG>$Y6A?`HomZ|8| zH6h(Uwbh#qTk11=Lu)RM%Dwwaf*&VD?dX1)*~SY!6cREKE0xU=6F{XIU+|eDAL`IG z+mMpR6(`iOWVRL%rCu#NMV~)V2|RZu*}6n|9MsJZ{z^T+^qF73^7Hjejgas0_kOVg z{K7|A!!9(?QSAb}aR{qu;KKL(M&LyBCBtj;25mG{3_&cDZ@+BscfM@BM4~t87F+rZ zBVgWlP(K-^yE%Rjs1rSgYvY=hpy(^_`OnT8a7joQZu8%177MqN#FGtP>Z*rhmv|00 zV`zoV)YX5|F(ecl_1yiNv1HH6gb)S}E0Rx6PSU>#iAvd`@8Vo=9PS?}5->U~cy_HT z`llNdAMS^7NMOAmO5sR_u3HFzZ`TkUL5YgX;Z1J!uZOMoNp-wdT3Ub}l71(SNqUFq zjB1)A_&KvH-Tce$kfgi6U+bw5jqK8X|JP(}<22r%?ruU6=QX8J{NF%adOA>A92wOP z$BwYQU<@K4Is1jAH8nNGPkZjXmf8*noY>ZYGW^%1_|l|49a^Zm5*EV1AuJgVIoQD| z{m+eZd@>ekQv4S37ye);z9Q-W(M{n0?x!1qA3uJ)SWSOezymj}ojKjvu{rjA`<9wP z*lvt_GKr(dPjwe_&|+6>E%kvU^dyQw_`*!;-SvZ23O|qHc#W=@fQa4mF+bo(JB+l( zexWqx-t)NKncD5+wf^m6-vw(NFohSX&z%#YK+{x>^Sa88Tf<&He$}j>pP%I6;i1v4 zprBx1l0X-;q>E8|laTj7YP7Jh-5pKK*&VDm$5dekaO#cbs>*961crKQ5cal*V^z`7Z%h^qB>d2LBx8=2*paP8^61lK z>IGBt7?mveUGC=Q<|f(_5Z^OCT-xipDb{%iYe#4Bg4W3^$Gx@z8*Q<2# zi;WxwU!C6`6_|~j7^5M(b{19<9ZzOcbMq}SGO{(u-%S^CGBRm%bMuUyGpn1Ly1GPl z=LXzv;!mCw^7t9>b8AZ=s544RIDb}F_P@_0Za7v^8~Y~ut}AM+>|Q$uQvmZa z6we{a&m{&bHG$(gnQ>}FKBR@@rp8{-)gA39EZK8je);+Z^5$eSf34z>f_=nSw|g=& zJnH-2U%ppttRB@Q_e4JP6cy7^F%*OK|Js3fnO(&c(H!8fkBn@BxB~?{L7x%ELXD_A z?UcpA<^Vi8sAF~lw8^|9oJzDgS3Vx%aojH~uc-L&(W8*xzs28{=wy`{HP&kjWEt(_ ze9z52_-hhlXuQ$|#Z>I+W@^4u60ZFDGm?#`%1Vq-b>MsB(UG+RN0dX;vu))6~A~9ec^wp6?C&eRWy;2VM zQhIhlTu8{xIF91(hl4h~z0O!b?AOomaLLq4ZQK*r9R2Ye7~aFhJBOP_cQnf#mtS3j zxvGM~P2Ne2hQ^1-%)WR-vhwoEY0{>qxhNyK^;kKkVP|J&upUopkqsSP3y1DATeXMS zaUuy}?fy{*+k91qUf3uk-JAE}>J-dI5;8P4lKq>|Pfg!?fOlFY0}z_=w$cc2^po`g zuhxDM2=GTqdhE4Ceo;;ldP0E((vA&n7lY{P^BV*32-M%Iw<5zR8htch9-mk$EmX#c zJ&RhWpzz2mN{(?!`?EQknUyuUKI*nN>)FFx10q-$1v{;{2QOK}V2m4sdOYv6mOXBU zh$F6lZmwx|_Jcy8%w0`)bHeEB+1|+&{uo=b76Yk86#(OP*&2*K#ew{-W@t#@vSnN77 zpUVDe1pFQIf!9*+-}5)N3!`tr5`BmZ&&_r%*9HozY!OrIJwYlCB_?%G#EY0^c+dRl z>FH^qe&S|kX0-d4M=UaB_=K}zA|{=8%2uPle4)H`>(-aqlet4qne+l~KSa~no^86o zgF(r|Y92SB!BF^B%M;=J#FV`dWGhPgCov8fnu5?niQ5$cf3hbT!{F72*uim_?4dH3`Stk|8i-VPPOXCqEdQxnkZ3g0!Hf`~!-}&cFJreG&g)%B|fPhf7IE z=h{-jBP^_~sH!>%i3~rE&R#Mx{`3Z|bAAp(18kC4vDSQ;xdTm1iu~5hk?}1&w&fjSmbS){r|zz0LCK=tZiw{4n3{F=qa#zU%*4`aY!3lVvncvV5Ak_;}Fja#B=V7IW@-vp<=^YBAI?}6g_`!_L1X5IrpG0kZg zbCXUQ@OB1H$%?&%Ur7%7pY1OUVy-T65{2#OSCN^)t*tUw8^bwDN&Krn2b@nf)cpN~ zN35-^j=UO^cNvyU0H2TAcfOhDZVRPE<>ftUZENcRhb>O`rEQ{}+;tGqseL}#yVhA< z>?v&CU2oT^vgpr{xy06Hm=;wE}xAQu!ydFrC=;fLBYv>wWU0Fe{UQBYs@@C$fOjWOI*a$HY zhXy5$!awHJeCvXFDE}g{PT(1xsb;xH9BR2>UP+c)%Tck=__+))Y%1xhtF@L64h^MX zV9c^1>eKKEJUL^6E>95@y?87jprNX$XtL5Bdr!ja3yAjcIe-PVKoN)a?Zq11{_J@C zJWZvN>(QgmGU2RP|C=E^uCA^x2Ak`M(p2&-@n$D&5it+S-BA3#t?gm{ z-YXT>gZX`_7%l+J70zR>Cu&|4^k?S@emA8&JnEj~CO=y=hyPVoRyI4|o6F718<}34 z_qMdMYE{!$+!%TdCmiZo=C-M*Fo%=eBI5I%ZuG7lk?ij48+-WR!KdhG^FLpnP*PK? zYirBN$_By0Ggkm?Hx>src0BN*1AWzB>tLrz>0kzGTj0#!s~*+ti>H+QER2fd?PFNX zGds!rQA^C&_&Cnc(2$g_E}f^R=a;WvQGI#q&l%|HA?N*jo3eU((=X-BnwlRsA)1CE zOLDKg8^P%|Zro|nK8qU0<`N0V^9zN^Q`kLvZJ%FQC|~FsG*Kf|Ih642%Rx_Wo=O>cU(|VF95BBeDY&3+~Pb1OE&n(F)%9vYI?3;Spw?mEl zUTLmp{1Z#31Y4vXG8`rRLZE(;gZ|v$7iytcA`>LHvf&VE7nf%$`J;EDtw0cgeERf> zcV=sA>lz{vOi8pEhg6-)_J5Cj1nqprfvTEnH9hrKQ)3rfF8zS9X+2`RmuzgbIS;>{ zF;-X8=CGLHKeJqVp`fVHM;BmqhYT0F(~P5%DlTuO4H(#1_R-L;3)xKBRLrKvy}!s! z{ujFzAh$?nJw!hz1q7t}0X$SKjI7Ls*{vjJm(~~(5uZML6clm5S9iZT4nW(_YP2q- zk0g2{@tI%Y^A@A=gXFBySP3@Xt3SP1Nr_-%C6okT-giuM9o?Tle`bl2z7QH;Xuf^B zHoEDcq7pqZy3tuK;fMBM6ZUnF+}um3sGxL>x~O$)RM#(dk^Q-5!MLkODsAYelcinb*NYoj_JeX;V?PpBxl&c>|&mE3rhR){;zcV+_vrBdMT75VAb{h@P zDJi*QqCBr{JwVg;7jkE0rqNssEFaq4r<49s`2&F`ZqB0%iE#`J@pBo3$AX=Yc3SY( zR}Z8B3(OQ!iv?$t_zI7MeL@ZCP_s7=J~_bgVl8u9;Oxg{I354 z>YzKL>@RwM^xVImU?M{m0pT>P*VJ$Hsy0_@k!3b)JqE&vcI4@!*4J{&Kt*YyI%1Ko zs>E_K%;xV+XMDOfp1hSpGMhs>7-hdqFv}1q82*7dgt6KB?%zs7!5H{K@>;=<4)cgr zWZ`I}(rfd{bX5=}_yNsDOB3*ax}?v2hZ^}6Q}3_NDAixQz`vY{cD8D@Fo=&65q$Ry zyz&OP&?A8_(lt|`ufgZ-V?s4Ot81CGrN0jHowX8HYT*uhZa@ zWXJmJ-ElPCC?O+%yASyw^Mk7Q9k&{@vI7345c(bzOxpqNAhw0ZsCmo!!;YY5JZY&6 z5;8~dh~6G7hmk*`bsxW={t4P_eOo6vc5gn$!q#jkQ+j8iLf|$Ja{E>J zR>*eP#Kha)rW>~Ze2*Fs;;&Z1sGF}Q3DIHqCGBRagVV(~-4Ag}r*u`_S+QjXrQvi# z)!ieJF3!)~z5~&IK4HVmm_!^@TQmz=u=E?6=HCVa2KwLd75=NX0`Q;s6@gyIi)gOr zqEhjL?(UF~)u>=$qN;D$6F1nqR?)*!*MT)#$qJuBYup}p+~Q+19xPM73B?{b-$!Q?E_ zL_5%5lz*BJylpDj)q%ejo?hdgLTKa6R`|uuy8df@vmGHO)sFZ5bDOr|CG9rqCd)}!gppw#`M}z&q;l;f+ z_XKqp4RL#)~?jZAq3DoBY#FZvv zY)sQ_e_q+j>gf;Ly~YGkl8W|PKc|{cQQQ=BwB5yzj1o+kz4QI9avV z1ml*AzBk-r2!U)^AteNAw@9 zDS`rIc1SkDW8wu#i|5>_4W^bIg52EZpUa1 z!-y|2eM}WYml#;6nI|njgQDKqOwaa#RWOVD>GEP>&b0~Z zC0oWM0|5!Yjr6{MJiA_&g@Vg6mU(=Pl!oS9@WXb>70i$7X0t$p zBFg+{17gTv;2@k@D8`AV1<*8I09R$KMxOecI+Ar);X|GnNoi%}yAW^eIz*m*zyVSV z7=)?<2{ITI4SXD||E9|wRL!5c8?&yHX%KX;iR#hlB<%fBhIJyJ*;DQtImXx30GLc! zkD8|iMYVbC$6WTA5HRGw=j`2m!zz>R&Aq>OYb8C2ajjy(_g;74uS(Q$6U?$`r%d;> zs>yiI#;ot;CFNig42j<7>UcZZ31yO$9<{h@f!&7t z(6v`rA4h2>>IZ8m%+OoU0 zt~mvImRXN!H|UArQx3t|DNFM5N{gV0^k)YTbiBkf#Dj^1*^e8zwqGZm)wXv5T>`rk zl#eizOti!c49`AI#6ZtHah0Hyw8(<9_2`W1n%0D7?5~f=VEm%uV$|F>SEV}7JA+rN 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 delta 7753 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 S5D4TvMD3~8lL|$PxBmgC+{6O_ delta 7295 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 diff --git a/icons/mob/species/unathi/suit.dmi b/icons/mob/species/unathi/suit.dmi index 0afae0b826aa2e8055220abc86081adff864587d..8dbf403c702c6da63635ebd7345bebf1fb1d953f 100644 GIT binary patch delta 11661 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 F{~sUqP)Ps) delta 10704 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 From ce5bb2fa60c5348e96c98f064c1274bef7a19669 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 20 Feb 2015 00:27:28 -0500 Subject: [PATCH 59/90] Adds a suit cycler and a pair of sts-35s to the mercenary gear storage area --- maps/exodus-2.dmm | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm index 643bf9fb64..273e43581c 100644 --- a/maps/exodus-2.dmm +++ b/maps/exodus-2.dmm @@ -2078,6 +2078,8 @@ "NX" = (/obj/structure/closet/crate/freezer/rations,/obj/machinery/camera{c_tag = "Shuttle West Storage"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) "NY" = (/obj/structure/closet/crate/freezer/rations,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) "NZ" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) +"Oa" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"Ob" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) (1,1,1) = {" aaabacadaeafagahaaaiajakalamanaoagafajacadahakaeamaiaoalahajeEapaqarasatauavawaxayazaAaBaCaDaEaFaGaHaIaJaKawaxayazaAaBaCaDaEaFaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaQ @@ -2184,19 +2186,19 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHofnRnRognRnRohnHaMndneneneneneneriihihihihihihbPkQbTihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMomnHonnHnHnHnHnHooaMnTnananUihkdkdkdihkTkTnVnWihcikQmkihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoGoyoaounFnHaMaMaMaMaMaMobkdkdkdoclalaododihcikQnGihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoBoAoanRornHaMaMaMaMaMaMoikdkdkdihojlaihihihokolokihihihmumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHoBoyoanRornHnzaMaMmPmKoFihkdkdkdihihihihnOnOkQkQkQnPnPihihmumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHnHnHnHvLoyoanRornHnHnHnHnzototihkdkdkdkdihnYnXkQkQkQkQkQkQkQoxihmumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHpioXoYnHnRoHnRoJnHnHoZoOpbrTkRpnkRkdkdkdkdoCkQkQkQkQkQoDkQkQkQoeihmumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMphoWpjoWnHnHnHpknHnHpJoZplpmrTkRpLkRkdkdkdkdihoqopkQkQkQkQkQkQkQoMihmumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMnHnHphpxnHnHnRnRpynHnHpzpApznHoIoIihoPnanUihihihihowovkQkQkQozozihihmumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHMOnRnRpHnHnRnRnRnHrbpKrdpInHmBaMmBaMaMaMaMmumuihihihokpcokihihihmumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoBoAoanRornHaMaMaMaMaMaMoikdkdkdihojlaihihihokolokihihihdCmumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHoBoyoanRornHnzaMaMmPmKoFihkdkdkdihihihihnOnOkQkQkQnPnPOaihdCmumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHnHnHnHvLoyoanRornHnHnHnHnzototihkdkdkdkdihnYnXkQkQkQkQkQkQkQkQkQdCmumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHpioXoYnHnRoHnRoJnHnHoZoOpbrTkRpnkRkdkdkdkdoCkQkQkQkQkQoDkQkQkQkQoxdCmumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMphoWpjoWnHnHnHpknHnHpJoZplpmrTkRpLkRkdkdkdkdihoqopkQkQkQkQkQkQkQkQoMdCmumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMnHnHphpxnHnHnRnRpynHnHpzpApznHoIoIihoPnanUihihihihowovkQkQkQozozoeihdCmumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHMOnRnRpHnHnRnRnRnHrbpKrdpInHmBaMmBaMaMaMaMmumuihihihokpcokihihihdCmumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVpdpepepepepfpfpepepepepgoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqanRnRnRqbnRnRnRqcnRnRnRqdnHmKmKmKmKaMaMaMaMmumumuihoEkQoEihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVpdpppqprpspeptpupepvpwpepepepgoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMnHqCnRnRnRqDnRnRnRqEnRnRnRqFnHaMaMaMaMaMaMaMaMaMmumuihoEkQoEihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpdpepBpBpBpBpepCpCpepBpBpDpEpepepgoVpFpFpFpFpFaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnvnHnHnHnHnHnHnRnRnRnHnHnHnHnHnHnzaMaMaMaMaMmAaMmBmumuihoEkQoEihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpepepMpNpOpPpepBpBpQpBpBpBpBpRpSpeoVpFpTpUpVpFpFpFpFpFpWpXpXpYpFpFaMaMaMaMaMaMaMaMpZpZpZpZpZpZpZpZpZpZpZaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqZrasercsvnHrenRnRnHrfrfrfrgrgnHaMaMaMaMaMmAmBmumumuihoEkQoEihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfqgpBqhqhqhpepBpBpeqiqjqkqlqmqnpeoVpFqopUpUqpqqqrqsqtquqsqvqwqxpFpFpFpFpFpFpFpFpFpFqyqzqzqzqzqzqzqzqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMnxrjrjrjrjrjnHnRnRnRnHrenRnRnRrknwaMaMaMaMaMmPaMmumumuihihihihihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqGqfpBpBpBpBpBpQpBpBpepepepepepepeqHqIpFpFpFpFpFqqqvqsqJqKqsqvqvqvqLqMqMqMqMqMqMqMqMqNqyqOqPqPqPqPqPqQqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMnhrCrDrjrjrjrEnRnRnRrFnRnRnRrGrHmiaMaMaMaMaMmAmBmBmumumumumumumumumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfqgpBqhqhqhpepBpBpeqiqjqkqlqmqnpeoVpFqopUpUqpqqqrqsqtquqsqvqwqxpFpFpFpFpFpFpFpFpFpFqyqzqzqzqzqzqzqzqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMnxrjrjrjrjrjnHnRnRnRnHrenRnRnRrknwaMaMaMaMaMmPaMmumumuihihObihihmumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqGqfpBpBpBpBpBpQpBpBpepepepepepepeqHqIpFpFpFpFpFqqqvqsqJqKqsqvqvqvqLqMqMqMqMqMqMqMqMqNqyqOqPqPqPqPqPqQqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMnhrCrDrjrjrjrEnRnRnRrFnRnRnRrGrHmiaMaMaMaMaMmAmBmBmumumudCdCdCmumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqRpeqSpBqSpBqSpepBpBpBqTqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqvqvqLqMqMqMqMqMqMqMqMqNqyqXqYqYqYqYqYqXqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnyrjrjrjrjrjrQnRnRnRrRnRnRnRnRrSnBaMaMaMaMaMmAaMaMmBmumumumumumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpepepepepepepepBpBrhpBqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqqqqpFpFpFpFpFpFpFpFpFpZqyqXqYqYqYqYqYqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsbrjrjrjscnHpzsdpznHoKoKsInRsfnHaMaMaMaMaMaMaMaMaMmumumumumumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpermrnrormrppepBpBpBrqqUoVoVoVoVoVoVpFpFpFpFpFqvqvqsqJquqsqvrrrspFrtrururvpFrwrxrypZqzqXqYqYqYqYrzrApZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHspsqsrssstnHsunRvUnHyCnHnHnNnHnHaMaMaMaMaMaMaMmAaMmBmumumumumumumumumumumumumumumu From bdbd649acaa6ba0f42cb178e5b0c9cdeea39235f Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 20 Feb 2015 01:11:30 -0500 Subject: [PATCH 60/90] Fixes space vent pumps, adds chapel air sensor Fixes bad pressure_check var on external vent pumps to space that was preventing them from working, adds an airlock sensor to the chapel mass driver to indicate when it is safe again, and adds a t-valve connection between the special xenobio/flora scrubber pipenet and the main scrubber line. --- maps/exodus-1.dmm | 81 +++++++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 34 deletions(-) diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index 1aca0b95dc..d12d2364aa 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -1783,7 +1783,7 @@ "aIo" = (/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) "aIp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) "aIq" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) -"aIr" = (/obj/machinery/door/window{dir = 8; name = "Mass Driver"; req_access_txt = "22"},/obj/machinery/mass_driver{dir = 4; id = "chapelgun"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/chapel/main) +"aIr" = (/obj/machinery/door/window{dir = 8; name = "Mass Driver"; req_access_txt = "22"},/obj/machinery/mass_driver{dir = 4; id = "chapelgun"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/airlock_sensor{pixel_y = 25},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/chapel/main) "aIs" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/chapel/main) "aIt" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = 2; pixel_y = 6},/obj/item/weapon/pen/blue{pixel_x = -3; pixel_y = 2},/obj/machinery/door/blast/shutters{dir = 2; id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aIu" = (/turf/space,/area/shuttle/escape/station) @@ -5258,7 +5258,7 @@ "bXf" = (/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/rnd/mixing) "bXg" = (/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/rnd/mixing) "bXh" = (/obj/machinery/computer/general_air_control{frequency = 1430; name = "Mixing Chamber Monitor"; sensors = list("toxins_mixing_exterior" = "Mixing Chamber - Exterior", "toxins_mixing_interior" = "Mixing Chamber - Interior")},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/mixing) -"bXi" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_starboard) +"bXi" = (/obj/effect/decal/cleanable/dirt,/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "bXj" = (/turf/simulated/floor/plating,/area/maintenance/research_starboard) "bXk" = (/turf/simulated/floor/airless{dir = 5; icon_state = "warning"},/area/rnd/test_area) "bXl" = (/turf/simulated/floor/airless{icon_state = "warningcorner"; dir = 4},/area/rnd/test_area) @@ -5387,7 +5387,7 @@ "bZE" = (/obj/machinery/light,/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bZF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) "bZG" = (/obj/structure/sign/securearea{pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"bZH" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"bZH" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "bZI" = (/obj/machinery/disposal,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/camera{c_tag = "Telescience Control Room"; dir = 1; network = list("SS13","Research"); pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bZJ" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/closet/bombcloset,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bZK" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/light,/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) @@ -5458,8 +5458,8 @@ "caX" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/device/flashlight,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "caY" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "caZ" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/research_starboard) -"cba" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/research_starboard) -"cbb" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/research_starboard) +"cba" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) +"cbb" = (/obj/machinery/atmospherics/tvalve{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cbc" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cbd" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cbe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/research_starboard) @@ -5526,9 +5526,9 @@ "ccn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access_txt = "39"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/medical/virologyaccess) "cco" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port) "ccp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/research_port) -"ccq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"ccq" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "ccr" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;47"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology) -"ccs" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) +"ccs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cct" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "ccu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "ccv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/research_starboard) @@ -5604,7 +5604,7 @@ "cdN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "heads_meeting"; name = "Meeting Room Window Shutters"; opacity = 0},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/hallway/primary/central_one) "cdO" = (/turf/simulated/wall/r_wall,/area/rnd/xenobiology) "cdP" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light/small,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology) -"cdQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology) +"cdQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cdR" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/light/small,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology) "cdS" = (/turf/simulated/wall/r_wall,/area/rnd/xenobiology/xenoflora) "cdT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "medbayrecquar"; name = "Medbay Emergency Quarantine Shutters"; opacity = 0},/turf/simulated/floor,/area/medical/reception) @@ -5670,7 +5670,7 @@ "cfb" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) "cfc" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor{tag = "icon-whitegreen_v (NORTHEAST)"; icon_state = "whitegreen_v"; dir = 5},/area/rnd/xenobiology/xenoflora_storage) "cfd" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/rnd/xenobiology) -"cfe" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Xenobiology Research"; req_access_txt = "47"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"cfe" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cff" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/rnd/xenobiology) "cfg" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = 32},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cfh" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) @@ -5809,13 +5809,13 @@ "chK" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) "chL" = (/obj/machinery/door/airlock/research{name = "Xenoflora Storage"; req_access_txt = "47"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "chM" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"chN" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"chN" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "chO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "chP" = (/obj/machinery/door/airlock/research{name = "Xenoflora Research"; req_access_txt = "47"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "chQ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "chR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "chS" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) -"chT" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Isolation to Waste"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"chT" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;47"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology) "chU" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "chV" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "chW" = (/obj/structure/table,/obj/item/weapon/tape_roll,/obj/item/device/analyzer/plant_analyzer,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) @@ -5885,7 +5885,7 @@ "cji" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/engineering/foyer) "cjj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/light,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology) "cjk" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"cjl" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"cjl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 9},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cjm" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/pipe/manifold/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cjn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/light,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora) "cjo" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) @@ -6027,7 +6027,7 @@ "clU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/rnd/xenobiology) "clV" = (/obj/machinery/door/window/southright{name = "Containment Pen"; req_access_txt = "47"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/engine,/area/rnd/xenobiology) "clW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/rnd/xenobiology) -"clX" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; use_power = 1; pressure_checks = 0; pressure_checks_default = 0},/turf/simulated/floor/plating/airless,/area/medical/virology) +"clX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "clY" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; icon_state = "map_vent_in"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator) "clZ" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1443; icon_state = "map_injector"; id = "air_in"; use_power = 1},/obj/machinery/sparker{id = "Incinerator"; pixel_x = -20},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator) "cma" = (/obj/machinery/light,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) @@ -6078,7 +6078,7 @@ "cmT" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating/airless,/area/solar/starboard) "cmU" = (/obj/machinery/door/blast/regular{dir = 4; id = "disvent"; name = "Incinerator Vent"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator) "cmV" = (/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/hallway/secondary/entry/port) -"cmW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; use_power = 1; pressure_checks = 0; pressure_checks_default = 0},/turf/simulated/floor/plating/airless,/area/maintenance/incinerator) +"cmW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cmX" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engineering/engineering_monitoring) "cmY" = (/obj/machinery/door/blast/regular{desc = "By gods, release the hounds!"; id = "xenobioout6"; name = "Containment Release"},/turf/simulated/floor/engine,/area/rnd/xenobiology) "cmZ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/starboard) @@ -6148,9 +6148,9 @@ "col" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "com" = (/turf/simulated/wall,/area/rnd/xenobiology) "con" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "xeno_airlock_control"; name = "Xenobiology Access Button"; pixel_x = 8; pixel_y = -28; req_access_txt = "55"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 10; icon_state = "warnwhite"},/area/rnd/xenobiology) -"coo" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"cop" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "warnwhite"},/area/rnd/xenobiology) -"coq" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/wall/r_wall,/area/rnd/xenobiology) +"coo" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology) +"cop" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora) +"coq" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Xenobiology Research"; req_access_txt = "47"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cor" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/engine,/area/rnd/xenobiology) "cos" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cot" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_xeno_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) @@ -6418,7 +6418,7 @@ "ctv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/engineering) "ctw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/engineering) "ctx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Operating Theatre 1 Maintenance Access"; req_access_txt = "45"},/turf/simulated/floor/plating,/area/medical/surgery) -"cty" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"cty" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "ctz" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay) "ctA" = (/obj/machinery/light/small{dir = 1},/obj/item/weapon/cigbutt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay) "ctB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Operating Theatre 2 Maintenance Access"; req_access_txt = "45"},/turf/simulated/floor/plating,/area/medical/surgery2) @@ -6560,7 +6560,7 @@ "cwh" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/rnd/xenobiology) "cwi" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{icon_state = "whitehall"; dir = 8},/area/rnd/xenobiology) "cwj" = (/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard) -"cwk" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; use_power = 1; pressure_checks = 0; pressure_checks_default = 0},/turf/simulated/floor/plating/airless,/area/rnd/xenobiology) +"cwk" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cwl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/rnd/xenobiology) "cwm" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/machinery/meter,/turf/simulated/floor,/area/engineering/atmos) "cwn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/solar/port) @@ -6834,7 +6834,7 @@ "cBv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/engineering) "cBw" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = -8; pixel_y = 24},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cBx" = (/obj/structure/sign/securearea,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/engineering) -"cBy" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 0; pressure_checks_default = 0},/turf/simulated/floor/plating/airless,/area/engineering/atmos) +"cBy" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cBz" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/engineering/atmos) "cBA" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos) "cBB" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos) @@ -7246,6 +7246,11 @@ "cJr" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor,/area/engineering) "cJs" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 5; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/random/firstaid,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "cJt" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 5},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/random/firstaid,/turf/simulated/floor{dir = 8; icon_state = "whiteyellowcorner"},/area/medical/chemistry) +"cJu" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"cJv" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Isolation to Waste"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"cJw" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"cJx" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"cJy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cJz" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar) "cJA" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "robotics_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "robotics_solar_pump"; tag_exterior_door = "robotics_solar_outer"; frequency = 1379; id_tag = "robotics_solar_airlock"; tag_interior_door = "robotics_solar_inner"; layer = 3.3; pixel_x = 0; pixel_y = -25; req_access_txt = "13"; tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "robotics_solar_sensor"; layer = 3.3; pixel_x = 12; pixel_y = -25},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/portsolar) "cJB" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar) @@ -7258,6 +7263,12 @@ "cJI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cJJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cJK" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/engi_engine) +"cJL" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) +"cJM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora) +"cJN" = (/obj/structure/closet/l3closet/scientist,/turf/simulated/floor{dir = 6; icon_state = "warnwhite"},/area/rnd/xenobiology) +"cJO" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"cJP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; use_power = 1},/turf/simulated/floor/plating/airless,/area/space) +"cJQ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; use_power = 1},/turf/simulated/floor/plating/airless,/area/medical/virology) "cJR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cJS" = (/obj/machinery/power/solar_control{id = "portsolar"; name = "Aft Port Solar Control"; track = 0},/obj/structure/cable/yellow,/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/portsolar) "cJT" = (/turf/simulated/floor/plating,/area/maintenance/portsolar) @@ -7266,6 +7277,8 @@ "cJW" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cJX" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cJY" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plating,/area/maintenance/engi_engine) +"cJZ" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1},/turf/simulated/floor/plating/airless,/area/engineering/atmos) +"cKa" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; use_power = 1},/turf/simulated/floor/plating/airless,/area/maintenance/incinerator) "cKf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cKg" = (/turf/simulated/wall,/area/maintenance/engi_engine) "cKh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engi_engine) @@ -7434,19 +7447,19 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTdbKwbTebKwbTfbTgaafaaaaaabGtbThbTibTjbGtaaabNxbTkbTlbTmbTnbTnbTnbTobQyaaabQzbTpbTqbTrbTsbPfbTtbTvbTubTwbNFbTxbTybTzbTAbTBbTBbTBbTCbTCbTDbTEbULbPxbPxbTFbNUbNUbNUbNUbDtbDtbLfbLkbLcbDtbTJbTKbTLbJFbJEbTJbTObLlbLmbTRbTSbTJbMKbMKbMKbMKbMKbMKbTTbTUbTVbRjbTWbTXbTYbRnbPObMObTZbQWbPQbLxbLnbNWbNcbTZbUgbUhbUibIIbIJbzAbIKbSLbUjbwwbMVbMVbMVbMVbMVbUkbMVbUlbQabUmbMVbUnbUobUnbOObUpbUqbUrbOOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbUsbUsbUsbUsbUsbUsbUtbLTbUubUsbTcbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbUvbNxbNxbNxbNxbRSbUwbNwbUxaaabUybPcbPcbUzbUAbPfbPfbUBbPfbUCbNFbUDbTMbTNbNFbTPbTPbTPbTPbTPbTPbTPbTPbUHbUIbUJbUKbUKbUMbNUbDtbUNbUebUFbUQbURbwabUTbUUbUVbUWbUXbUTbUYbUZbVabVbbVcbVdbVebVfbVgbVhbVibUGbVkbUObRjbUPbVmbUPbRnbPObMObVnbWcbVpbVqbVrbVsbVtbVubUgbzAbVvbzAbzAbVwbCxbSLbCxbVxaafbnxbVzbrBbVBbVCbVBbVDbVEbVFbMVbVGbVHbVIbOObVJbVKbVKbwhaaLaaLaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibLRbLRbLRbLRbLRbLRbLRbVNbLUbLTbLTbLTbLTbVObLUbKuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVPbVQbVQbVRbVSbNxbVTbRSbVUbNxaaaaaaaaaaaabNybVVbVWbVXbVZbVYbPfbNFbWabWbbNIbNFbTPbWdbWfbWebWhbWgbWibTPcaqcaqcaqcaqcaqbTFbWjbWkbWlbWmbWnbWobWpbxgbWrbWsbWtbWubWtbWvbWtbWwbWxbWybWzbWAbWBbWAbWCbWDbWEbWFbWGbWHbWIbWJbWKbWLbWMbxVbMObxWbzmbzlbWSbWTbWUbWSbWSbWVbWWbWXbWYbWZbCxbCxbSLbCxbFTaafbnxbXabXbbXcbXdbXebXfbXgbXhbMVbXibVHbXjbOObOObOObOObOOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbQmbQmbQmbQmbQmbQmbXkbLTbQlbQmbXlbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXmbXnbXobXpbRSbXqbXrbRSbXsbNxaaKaaaaaaaaabNybNybNybNybNybNybNybNFbUDbUEbXtbNFbTPbXubXwbXvbXvbXwbXxbTPbXzbXybXybXAcaqbXBbDtbDtbXCbXDbXEbXFbXGblRbXIbXJbXKbXLbXMbXNbXObXPbXQbXRbXSbXTbXUbznbzpbzobAPbzqbARbAQbATbASbAVbAUbYfbYgbIwbYhbVobCqbWObWNbWPbYmbYnbYobYpbYqbYrbYsbYtbYrbYubYvbILaafbnxbXablSbVBbYxbVBbYebYzbYAbMVbXjbVHbYBbYCbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbXlbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXmbXnbXobXpbRSbXqbXrbRSbXsbNxaaKaaaaaaaaabNybNybNybNybNybNybNybNFbUDbUEbXtbNFbTPbXubXwbXvbXvbXwbXxbTPbXzbXybXybXAcaqbXBbDtbDtbXCbXDbXEbXFbXGblRbXIbXJbXKbXLbXMbXNbXObXPbXQbXRbXSbXTbXUbznbzpbzobAPbzqbARbAQbATbASbAVbAUbYfbYgbIwbYhbVobCqbWObWNbWPbYmbYnbYobYpbYqbYrbYsbYtbYrbYubYvbILaafbnxbXablSbVBbYxbVBbYebYzbYAbMVcaZbVHbYBbYCbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbXlbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYDbVQbVQbVRbYEbYFbYGbNxbYHbNxbYIbYJbYKbYIbYIbYLbYMbYNbYObYPbYQbYybYSbYRbYUbYTbYVbXwbYXbYWbYZbYYbZbbZabZdbZcbZfbZecaqbZhbNSbZibZjbZkbZlbZlbZmbnEbZobZpbTJbTJbZqbZrbTJbTJbZsbZgbZTbVibZvbWQbZxbZybZzbZybZAbZUbZCbZUbZAbWRbYfbMNbIwbZEbXWbXVbZVbZIbZJbZKbMObMObwwbwwbwwbwwbwwboIbnFbofbwwbMVbMVbMVbMVbMVbUkbMVbMVbMVbMVbMVbZObZPbZQbZRbUnaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaambZSaamaamaamaamaamaaaaaaaaaaaaaaaaaaaafaafaaabZWbZXbZXbZXcaabZXbZXcahcagbYIbZYbZZbYIcaicabcaccadcaecafcakcajcamcalcaocancapbXwbYXcaJcbibYYcbjbTPcaqcaqcaqcaqcaqcarbNSbDtcascatcaucavcawcaxcaycazbTJcaAcaBcaCcaDcaEcaFcaGcaHcaIbZxbWQcbkbZycaKcaLbZAcaMcaNcaObZAbXXbYfbPObIwbXYbYabXZbXYbXYbIwbIwbIwcaRcaScaTcaUcaVbwwbwwcaWbwwbwwcaXcaYcaZcbabXjcbbbXjbXjcbccbdcbecbfcbgcbhbUnbUnbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbUubUsbUsbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcblcbncbmcbpcbocbycbqcbAcbzbYIcbrcbsbYIbYIcbtcbucbvcbwcbxcbCcbBbYSbYRbYUcbDcbEbXwbXwcbKcbQbXwccAbTPcbFcbGcaqcbHcaqbTFcbIcbIcbIcbIcbIcbIcbIbTJcbJccBbTJcbLcbMcbNcbOcaEcbPccCcbRcaIbZxbWQbZxbZycbScbTbZAcbUcbVcbWbZAbYjbYfbYbbYdbYcbYiccDcdebYcchBbYkbYlcktbZDbZwbZFcktccrbZGbZHccqccrccscctcctcctcctccucctcctcctcctcctccvccwccxccycczbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaaaaaabOPbKtbNdbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafccEccEcbmccPccFcbyccQccSccRbYIccGccHccIccJccKccLccMccNccOccUccTccWccVccYccXcdaccZcdBcdbcelcekcencemcdccddaJEcdfcaqbTFcbIcdgcdhcdicdjcdkcdlcdmcdncdocdpcdqcdrcdscdtcaEcducdvcdwcaIbZxbWQbZxbZycdxcdybZAcdzcdAceobZAcaPbYfbYfcaQbYccbYcbXcbZbYcchBccacjfcdLcdLbyFbBucdLcdOcdPcdQcdRcdOcdSbBpbyebydcdScdScdScdSbAebyebydcdScdSbXjcdXcdYcdZceacebcecbxTbycbycbycbycbycbycbycbycbycbycbycbycbycbycbycbyccefcegcegcehbKtbKtbLTbLTceibLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejcejcejcejceqcepbYIbYIbYIbYIbYIbYJcescercercerceucetbYSbYRbYUcevbYVcewceycexceTceSceUbTPcezaJFceeaJFcaqbTFcbIceDceEceEceEceFceGbTJceHceIbTJcbLcbNceJcbOcaEceKceLceMcaIbZxbWQceNbZyceOcePbZAbZAbZAbZAbZAccbceRbYfcaQbYcccdcccbYcbYcchBccecjfcdLceZcfacfbcfccdOcfdcfecffcdOcfgcfhcfhcfhcficeWcfkcflcfmcfncfocfpcdScfqcfrcfsbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcftceXcfvbNebKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejcfwcfxcfycfzcfAcejcfjceYcfBcfucfDcfCcfEcfEcfGcfFcfFcfHcfIcbBbYSbYRbYUcfJcapcfKcfMcfLcfOcfNcfPbTPaJFaJFcaqceBcaqbTFcbIcfVcfWcfWcfWcfXcbIcfYcfZcgacfYcgbcgccgdcgecaEcgfceLcggcaIcghccfcgjbZycgkcglbZycgmbLvbVicgnccgcchbYfccjcciccicckcclcclcclcclccmcdLcgxcgycgycgzcgActsctyctscgDcgEcgFcgGcgGcgHcgIcgIcgJcgKcgLcgLcgMcdScgNcgOcgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcgQbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQaaaaaacgScgTcgTcgTcgUcgVcejcfUcfRcgocgicgrcgpcgucgtcgCcgBcgWcgRcgYcgXchacgZchcchbbTPbTPbTPbTPbTPbTPbTPbTPbEZbGDcaqbDfcaqbTFcbIcbIctpctqctrcbIcbIchrchschtcfYcaEcaEcaEcaEcaEcaIchuchvcaIchwccnchwbZychychzbZychAchBbVichCbVichDbYfccobYfbYfccpcdCcdCcdCcdDbYfcdLchIchJchJchKchLchMchNchOchPchQchRchSchTchUchVchWcgIcgIcgIchXchYcdSchZciachdcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacfQchechfchecfQchgchhchgcfQchichjchicfQaaaaaaciicgTcgTcgUcgUcijcejchlchkchnchmchpchochGchqcicchHchHcidchHcbBbYSciebYUcifcihcigcilcikcilcimciocincinciAciAciAciAbTFciGciHciIciIciJciKciLciMciXciOciPciQciRciSciSciTciUcaIcaIcaIciVcdEckqbZybZybZybZychBchBbViciYbViciZbYfccobYfaaaaaaaaaaaaaaaaaaaaacdLcjgcjhcjhcipcjjcjkcjlcjmcjncjocjpcjqcgIcgIcjrcjscgIcjtcgIchXcjucdScjvcjwcjxcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacfQcheciqchecfQchgcirchgcfQchicischicfQaaaaaaciicgTcgUcgUcgUcjBcjCciucitchncivcixciwciWciycjbcjacjdcjccjecbBbYScjichccjycjAcjzcjDcjDcjDcjEcjGcjFcjHceCcqZceAciAbTFciGckaciIckbckcckdcubckfckgckhctQckjckkcklciSckmciUcknckockpclicdFcdHcdGcdIcdIcdJcdIcdKbVibVibVibVibYfccobYfaaaaaaaaaaaaaaaaaaaaacdLckCckDckDckDckEcdOckFcdOckGckHckIckJckJckKckLckLckMckJckJckNckOcdSckPckQckRcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacfQcjIcjKcjJcfQcjLcjNcjMcfQcjOcjQcjPcfQaaaaafciiclbcgTcgUcgUcgUcejcjScjRchnchncjTchnchnchnchncjUchHcjXcjYcbBckecjZckrckickucksckzckzckzckAckBckBckTciAckWcgqclwclxciGclyciIclzclAclBclCclDclEclFclGclHclIclJciSclKciUclLclMclNclOclPclQclNclRclSclTbYfceQcdIcdIcdIcdIcdIckYbYfaaaaaaaaaaaaaaaaaaaaacdLcmacmbcmccmdcdOcmecmfcmgcdScmhcmicmicmicmjcmkcmlcmmcmicmicmicmncdScmocmpcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcfQckZclcclacfQcldclcclecfQcldclcclecfQaaaaafcmzcgTcgTcgUcgUcmAcejclhclgclkcljclmcllclnclnclvcltclncmscmtcbBcmvcmucmxcmwcihcmycmycmBckBcmCcmEcmDcmDciAcibceVcmFcqgciGcnbciIcnccndcmGciGcnfciNcmHcfYcmIcnicnjciScnkciUclLclMclNcnlcnmcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfaaaaaaaaaaaacdOcdOcdOcdOcdOcdOcdOcdOcdOcnocnpcnqcdScdScnrcnscntcdScdScdScdScnucnscntcdScdScnvcnwcnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaafaafaafaaaaafcnxaafcnxaafcKBaafcKAaafcKBaafcKAaafaafaaacejcnAcnBcgUcgUcnCcnDcmKcmJcmMcmLcmOcmNcmNcmPcmNcmQcmScmRcmQcmXcngcnecnycnhcnzcnzcnzcnzcnFcnEcnGcnGcnGcgscgscgscgscnSciGcnTcnUcnccnVcnWciGcnfciNcnXciUcnYcnZcnjcoacobciUclLclMclNcoccodcoeclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacdOcofcogcohcwlcojcokcolcomconcoocopcoqcwkaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcoscotcosaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaambZSaamaamaamaamaamaaaaaaaaaaaaaaaaaaaafaafaaabZWbZXbZXbZXcaabZXbZXcahcagbYIbZYbZZbYIcaicabcaccadcaecafcakcajcamcalcaocancapbXwbYXcaJcbibYYcbjbTPcaqcaqcaqcaqcaqcarbNSbDtcascatcaucavcawcaxcaycazbTJcaAcaBcaCcaDcaEcaFcaGcaHcaIbZxbWQcbkbZycaKcaLbZAcaMcaNcaObZAbXXbYfbPObIwbXYbYabXZbXYbXYbIwbIwbIwcaRcaScaTcaUcaVbwwbwwcaWbwwbwwcaXcaYbZHcbbcbaccqcbaccscbccbdcbecbfcbgcbhbUnbUnbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbUubUsbUsbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcblcbncbmcbpcbocbycbqcbAcbzbYIcbrcbsbYIbYIcbtcbucbvcbwcbxcbCcbBbYSbYRbYUcbDcbEbXwbXwcbKcbQbXwccAbTPcbFcbGcaqcbHcaqbTFcbIcbIcbIcbIcbIcbIcbIbTJcbJccBbTJcbLcbMcbNcbOcaEcbPccCcbRcaIbZxbWQbZxbZycbScbTbZAcbUcbVcbWbZAbYjbYfbYbbYdbYcbYiccDcdebYcchBbYkbYlcktbZDbZwbZFcktccrbZGcfecdQchTchNclXcjlcmWcctccucctccucctcctcctccvccwccxccycczbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaaaaaabOPbKtbNdbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafccEccEcbmccPccFcbyccQccSccRbYIccGccHccIccJccKccLccMccNccOccUccTccWccVccYccXcdaccZcdBcdbcelcekcencemcdccddaJEcdfcaqbTFcbIcdgcdhcdicdjcdkcdlcdmcdncdocdpcdqcdrcdscdtcaEcducdvcdwcaIbZxbWQbZxbZycdxcdybZAcdzcdAceobZAcaPbYfbYfcaQbYccbYcbXcbZbYcchBccacjfcdLcdLbyFbBucdLcdOcdPcoocdRcdOcdSbBpbyecopcdScdScdScdSbAebyebydcdScdSbXjcdXcdYcdZceacebcecbxTbycbycbycbycbycbycbycbycbycbycbycbycbycbycbycbyccefcegcegcehbKtbKtbLTbLTceibLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejcejcejcejceqcepbYIbYIbYIbYIbYIbYJcescercercerceucetbYSbYRbYUcevbYVcewceycexceTceSceUbTPcezaJFceeaJFcaqbTFcbIceDceEceEceEceFceGbTJceHceIbTJcbLcbNceJcbOcaEceKceLceMcaIbZxbWQceNbZyceOcePbZAbZAbZAbZAbZAccbceRbYfcaQbYcccdcccbYcbYcchBccecjfcdLceZcfacfbcfccdOcfdcoqcffcdOcfgcfhcfhctycficeWcfkcflcfmcfncfocfpcdScfqcfrcfsbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcftceXcfvbNebKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejcfwcfxcfycfzcfAcejcfjceYcfBcfucfDcfCcfEcfEcfGcfFcfFcfHcfIcbBbYSbYRbYUcfJcapcfKcfMcfLcfOcfNcfPbTPaJFaJFcaqceBcaqbTFcbIcfVcfWcfWcfWcfXcbIcfYcfZcgacfYcgbcgccgdcgecaEcgfceLcggcaIcghccfcgjbZycgkcglbZycgmbLvbVicgnccgcchbYfccjcciccicckcclcclcclcclccmcdLcgxcgycgycgzcgActscwkctscgDcgEcgFcgGcBycgHcgIcgIcgJcgKcgLcgLcgMcdScgNcgOcgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcgQbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQaaaaaacgScgTcgTcgTcgUcgVcejcfUcfRcgocgicgrcgpcgucgtcgCcgBcgWcgRcgYcgXchacgZchcchbbTPbTPbTPbTPbTPbTPbTPbTPbEZbGDcaqbDfcaqbTFcbIcbIctpctqctrcbIcbIchrchschtcfYcaEcaEcaEcaEcaEcaIchuchvcaIchwccnchwbZychychzbZychAchBbVichCbVichDbYfccobYfbYfccpcdCcdCcdCcdDbYfcdLchIchJchJchKchLchMcJuchOchPchQchRchScJvchUchVchWcgIcgIcgIchXchYcdSchZciachdcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacfQchechfchecfQchgchhchgcfQchichjchicfQaaaaaaciicgTcgTcgUcgUcijcejchlchkchnchmchpchochGchqcicchHchHcidchHcbBbYSciebYUcifcihcigcilcikcilcimciocincinciAciAciAciAbTFciGciHciIciIciJciKciLciMciXciOciPciQciRciSciSciTciUcaIcaIcaIciVcdEckqbZybZybZybZychBchBbViciYbViciZbYfccobYfaaaaaaaaaaaaaaaaaaaaacdLcjgcjhcjhcipcjjcjkcJwcjmcjncjocjpcjqcJxcgIcjrcjscgIcjtcgIchXcjucdScjvcjwcjxcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacfQcheciqchecfQchgcirchgcfQchicischicfQaaaaaaciicgTcgUcgUcgUcjBcjCciucitchncivcixciwciWciycjbcjacjdcjccjecbBbYScjichccjycjAcjzcjDcjDcjDcjEcjGcjFcjHceCcqZceAciAbTFciGckaciIckbckcckdcubckfckgckhctQckjckkcklciSckmciUcknckockpclicdFcdHcdGcdIcdIcdJcdIcdKbVibVibVibVibYfccobYfaaaaaaaaaaaaaaaaaaaaacdLckCckDckDckDckEcdOckFcdOckGckHckIckJcJyckKckLckLckMckJckJckNckOcdSckPckQckRcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacfQcjIcjKcjJcfQcjLcjNcjMcfQcjOcjQcjPcfQaaaaafciiclbcgTcgUcgUcgUcejcjScjRchnchncjTchnchnchnchncjUchHcjXcjYcbBckecjZckrckickucksckzckzckzckAckBckBckTciAckWcgqclwclxciGclyciIclzclAclBclCclDclEclFclGclHclIclJciSclKciUclLclMclNclOclPclQclNclRclSclTbYfceQcdIcdIcdIcdIcdIckYbYfaaaaaaaaaaaaaaaaaaaaacdLcmacmbcmccmdcdOcmecmfcmgcdScmhcmicmicJLcmjcmkcmlcmmcmicmicmicmncdScmocmpcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcfQckZclcclacfQcldclcclecfQcldclcclecfQaaaaafcmzcgTcgTcgUcgUcmAcejclhclgclkcljclmcllclnclnclvcltclncmscmtcbBcmvcmucmxcmwcihcmycmycmBckBcmCcmEcmDcmDciAcibceVcmFcqgciGcnbciIcnccndcmGciGcnfciNcmHcfYcmIcnicnjciScnkciUclLclMclNcnlcnmcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfaaaaaaaaaaaacdOcdOcdOcdOcdOcdOcdOcdOcdOcnocnpcnqcdScdScnrcnscJMcdScdScdScdScnucnscntcdScdScnvcnwcnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaafaafaafaaaaafcnxaafcnxaafcKBaafcKAaafcKBaafcKAaafaafaaacejcnAcnBcgUcgUcnCcnDcmKcmJcmMcmLcmOcmNcmNcmPcmNcmQcmScmRcmQcmXcngcnecnycnhcnzcnzcnzcnzcnFcnEcnGcnGcnGcgscgscgscgscnSciGcnTcnUcnccnVcnWciGcnfciNcnXciUcnYcnZcnjcoacobciUclLclMclNcoccodcoeclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacdOcofcogcohcwlcojcokcolcomconcJOcJNcdObqpaafaafcJPaafaaaaaaaaaaaaaaaaaaaaaaafcoscotcosaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafcnHcnJcnIcnKcnIcnJcnLcnKcnMcnNcnLcnPcnOcnRcnQcmMcmMcmMcmMcmMcmMcmMcmMcovcoucoxcowcoAcoycoCcoBcoDcmQcoFcoEcoGcmQcoIcoHcoJcnzcoLcoKcoNcoMcoPcoOcoRcoQcoQcoScoTcoTcoRbTFciGciGcpccpdciGciGciGcpeciNcpfciUciUciUcpgcphciUciUclLcpiclNcvmcvncvmclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafcdOcplcpmcplcvlcpocppcpqcomcomcprcomcdOcdOaaaaaaaaaaafaafaaaaacaaaaaaaaaaaaaafaaacvtaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaaaaaaaafcoUcoWcoVcoYcoXcoWcoZcpbcpacpkcpjcpscpncpucptcpwcpvcpycpxcpAcpzcpCcpBcpFcpDcpJcpHcpMcpLcpOcpNcpTcpQcpVcpUcpXcpWcoIcpYcpZcnzcoPcoPcoPcoPcoPcqacoRcqbcqbcqbcoTcoTcoRbTFcrYciGcqhcqicqjcqkciGcqlciNcqmciUcqncqocqpcqqciUcqrclLcpiclNcqscqtcquclNaaaaaaaaaaaaaaaaaacqvcqwcqxcqycqvaafaaaaaaaaaaaacdOcplcplcplcoicqAcqBcqCcqDcqEcqFcqGcqHcdOaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacmZaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafcqccptcqdcqfcqecptcqzcptcqIcqJcqzcptcqIcqJcptcptcptcptcptcqKcptcptcptcpMcqMcpHcqPcqzcpLcqRcqQcqUcqScqWcqVcqYcqXcoIcpYcJrcnzcracoPcoPcrbcoPcrccoRcrdcrfcrecrfcrgcoRbTFcrqciGcrrcrscrtcrucrvcrwcrxcrycrzcrAcrBcrCcrDciUcrEcrFcrGcrHcqvcrIcqvcrHaaaaaaaafaaaaaaaaacqvcrJcrKcrLcqvaafaafaaaaaaaaacdOcomcomcomcomcrMcppcrNcrNcrNcnpcrNcrOcdOaaaaaaaaaaaaaaacrPcrPcrPbZSaafaafaafaafcnaaafaafaafaafaafaaqcrPcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7460,8 +7473,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacoUcptcqzcptcptcptcvIcptcptcptcvIcptcptcptcptcptcqIcptcxscptcyicvqcptcptcyjcwmcykcylcvvcymcvvcvvcxAcyocyncyqcxDcoIcwxcoIcnzcyscyrcyucytcyvcoPcnzczIczJczJczKczLczMczNczOcvNcxNczPczQcxNczRczSczTcvNczUczVcrGaaaaaaaaaaaaaaaaaacqvczWcuMczXcuVczYczZcAactFcAbcAccsPcyXczWcAdcAecqvaaaaaaaaaaaackEcdOcAfcAgcAgcywcAicAjcAkcAlcAmcAncAocApcAqcokcAraaaaaacrPaafcwjcwjcwjcwjcwjaaackxaafcwjcwjcwjcwjcwjaaacrPaaacyhaaaaaacyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaacyxcptcqzcptcyycrjcricrjcyzcrjcricrjcyzcrjcrjcrjcyAcyBcyAcrmcyCcykcyDcyFcyEcyHcyGcyIcvvcyKcyJcvvcvvcvvcvvcvvcyLcngczecngcnzcnzcnzcnzcnzcnzcnzcnzcALczJczJcAMcANcAObPxcAPcvNcAQcARczfcATcAUcAVcAWcvNcAXcAYcrGaaaaaaaaaaaaaaaaaacqvcuQcAZcAectFcBacBbcBcctFcBdcBecBfcBgcBhcBicBjcqvaafaafaaaaaaaaaaaabquaaacdOcBlcBmcBncBocBpcBmcBqcBrcBpcBmcBscdOaaaaaabZSaaaaafaaaaafaaaaafaaackxaaaaafaaaaafaafaafaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaaaaaaaaaaaaaamaaaaaaaaaczgcptcqzcptcxscxtcqzcptcxscxtcqzcptcxscxtcptcptcxrcptcxscxtczhczkczjczmczlczocznczpcvvczrczqcztczsczuctuczwczvctuczxctuczycuaczzczBczAczAczDczEcBVcBWcBWcBXcBYcAObPxcBZcvNcvNcCacCbcCccCbcCacCdcvNcrGcCecrGaaaaaaaaaaaaaaaaaacqvctFcCfcuVctFcCgcChcCictFcCjcCkcqycgvcCmcCncCocrHaaaaaaaaaaaaaaaaaacgwaafcdOcCqcluclUcomclsclpclqcomcloclVclWcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafczgczGczFcAhczHcAucAtcAwcAvcAycAxcAAcAzcAucptczGcABcADcACcAycAEcmMcmMcmMcmMcmMcmMcmMcmMcAHcAFcyLcAIcAJcoIcAKcoIcoIcwxcoIcoIcAScoIcAJcBtcBvcBucBxciCcCNcCOcCPcCQcAObPwcCRcCScCTcCacAGcAVcBwcCacHPcHLcHQcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaachxchFchEclXaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcByaaaaaaaaaaamaaaaaaaaacBzcBBcBAcBDcBCcBFcBEcBGcBCcBFcBEcBGcBCcBFcBHcBHcBIcBGcBCcBFcBJcmMaaacBLcBKcBNcBMcBPcBOcBRcBQcBScBScBUcBTcCrcCpcCtcCscCpcCtcCrcCucCwcCvcCucyLcyLcAOcDNcDOcDPcDQcAObNUcDRcDScDTcCacCbcDUcCbcCacHTcmWcDfaafaaaaaaaaaaaaaaaaaaaaacqvcCZcDVcDWcDXcDXcDWcsPcDYcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcDZcplcplcomcEacplcplcomcEacplcplcdOaaaaaacrPaafcwjcwjcwjcwjcwjaaackxaaacwjcwjcwjcwjcwjaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafczgczGczFcAhczHcAucAtcAwcAvcAycAxcAAcAzcAucptczGcABcADcACcAycAEcmMcmMcmMcmMcmMcmMcmMcmMcAHcAFcyLcAIcAJcoIcAKcoIcoIcwxcoIcoIcAScoIcAJcBtcBvcBucBxciCcCNcCOcCPcCQcAObPwcCRcCScCTcCacAGcAVcBwcCacHPcHLcHQcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaachxchFchEcJQaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcJZaaaaaaaaaaamaaaaaaaaacBzcBBcBAcBDcBCcBFcBEcBGcBCcBFcBEcBGcBCcBFcBHcBHcBIcBGcBCcBFcBJcmMaaacBLcBKcBNcBMcBPcBOcBRcBQcBScBScBUcBTcCrcCpcCtcCscCpcCtcCrcCucCwcCvcCucyLcyLcAOcDNcDOcDPcDQcAObNUcDRcDScDTcCacCbcDUcCbcCacHTcKacDfaafaaaaaaaaaaaaaaaaaaaaacqvcCZcDVcDWcDXcDXcDWcsPcDYcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcDZcplcplcomcEacplcplcomcEacplcplcdOaaaaaacrPaafcwjcwjcwjcwjcwjaaackxaaacwjcwjcwjcwjcwjaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcClcqLcqLcqLcpEcpIcpIcpIcqLcpIcpPcpIcpGcpIcpPcpIcpGcpIcpPcpIcpGcpIcqLcpIcpRcpIcpGcpIcqNaafaaacCycCxcCAcCzcCCcCBcBRcCDcBScCEcCGcCFcCIcCHcCKcCJcCMcCLcCIcCUcDgcCVcCuaaaaafcAOcEBcECcEDaafaaabNUbPxbPxbSkcCaclZcEFclYcCaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcEHcuXcEIcEJcEJcEIcuQcEKcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcplcplcplcomcELcplcplcomcELcplcplcdOaacaaacrPaaaaaaaafaafaafaaaaaacmTaafaaaaaaaafaafaaaaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaaaaaaaaqaaaaaaaaaaafcfQcldclccDjcfQcldclccDjcfQcldclccDkcfQaaacfQcDlclccDkcfQaaaaafaaacCycEdcDocDncDmcDpcDrcDqcBScDscDucDtcCIcDvcDxcDwcDzcDycCIcDAcDCcDBcCuaaaaaacAOcFgcFhcFiaaaaaabNUbPxbPxbNUcCacmUcmUcmUcCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcFmcFncuQcuQcuQcuQcuQcFocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackEcdOcdOcdOcdOcdOcdOcdOcdOcmYcmYcmYckEaaaaaacrPcrPcrPcrPcrPaaaaaaaaacmZaaaaaaaaacrPcrPcrPbZScrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaafaaaaamaaaaaaaaaaafcfQcDDcDFcDEcfQcDGcDIcDHcfQcDJcDLcDKcfQaafcfQcDMcEccEbcfQaaaaafaaacCycEGcCAcDmcDmcEecEgcEfcEicEhcEkcEjcEmcElcEocEncEqcEpcEscErcEucEtcCuaafaaacFJcDNcFKcAOcFLaaabNUcFMbPxcFNcFOaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrHcqvcqvcFPcFQcEIcEIcEIcFRcFPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqpbqpbqpaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafcfTaafcrPaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 9c9bf136e2540b01186c99a401f88c0a938c697d Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 20 Feb 2015 01:24:33 -0500 Subject: [PATCH 61/90] Adds a gas meter to the mercenary shuttle airlock air reserve --- maps/exodus-2.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm index 273e43581c..50beedb964 100644 --- a/maps/exodus-2.dmm +++ b/maps/exodus-2.dmm @@ -814,7 +814,7 @@ "pH" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/button/flasher{id = "syndieflash"; name = "Flasher"; pixel_x = 27; pixel_y = 0; tag = "permflash"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "pI" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "pJ" = (/obj/structure/table,/obj/machinery/computer/pod/old/syndicate{id = "smindicate"},/obj/machinery/door/window{dir = 4; name = "Blast Door Control"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"pK" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"pK" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "pL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "pM" = (/obj/machinery/door/window/northright,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "pN" = (/obj/structure/table/reinforced{icon_state = "table"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) From 18521e698343d35232df53f9f7920fd8f901e131 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sat, 14 Feb 2015 14:04:04 +0100 Subject: [PATCH 62/90] Now possible to order a kit with a random toxin and syringe - 4TC --- code/game/gamemodes/game_mode.dm | 15 +++++++---- code/game/objects/items/contraband.dm | 27 +++++++++++++++++++ .../items/weapons/storage/uplink_kits.dm | 17 +++++++++--- 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index aa61cdc813..753e7e6096 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -32,11 +32,15 @@ var/uplink_welcome = "Illegal Uplink Console:" var/uplink_uses = 10 var/list/datum/uplink_item/uplink_items = list( + "Ammunition" = list( + new/datum/uplink_item(/obj/item/ammo_magazine/a357, 2, ".357", "RA"), + new/datum/uplink_item(/obj/item/ammo_magazine/mc9mm, 2, "9mm", "R9"), + new/datum/uplink_item(/obj/item/weapon/dart_cartridge, 2, "Darts", "AD"), + ), "Highly Visible and Dangerous Weapons" = list( - new/datum/uplink_item(/obj/item/ammo_magazine/mc9mm, 2, "Ammo-9mm", "R9"), - new/datum/uplink_item(/obj/item/ammo_magazine/a357, 2, "Ammo-357", "RA"), new/datum/uplink_item(/obj/item/weapon/storage/box/emps, 3, "5 EMP Grenades", "EM"), new/datum/uplink_item(/obj/item/weapon/melee/energy/sword, 4, "Energy Sword", "ES"), + new/datum/uplink_item(/obj/item/weapon/gun/dartgun, 5, "Dart Gun", "DG"), new/datum/uplink_item(/obj/item/weapon/gun/energy/crossbow, 5, "Energy Crossbow", "XB"), new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/g9mm, 5, "Silenced 9mm", "S9"), new/datum/uplink_item(/obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser, 6, "Exosuit Rigged Laser", "RL"), @@ -48,7 +52,8 @@ new/datum/uplink_item(/obj/item/weapon/cane/concealed, 2, "Concealed Cane Sword", "CC"), new/datum/uplink_item(/obj/item/weapon/cartridge/syndicate, 3, "Detomatix PDA Cartridge", "DC"), new/datum/uplink_item(/obj/item/weapon/pen/paralysis, 3, "Paralysis Pen", "PP"), - new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/cigarette, 4, "Cigarette Kit", "BH") + new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/cigarette, 4, "Cigarette Kit", "BH"), + new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/toxin, 4, "Random Toxin - Beaker", "RT") ), "Stealth and Camouflage Items" = list( new/datum/uplink_item(/obj/item/weapon/card/id/syndicate, 2, "Agent ID card", "AC"), @@ -80,8 +85,8 @@ new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/imp_uplink, 10, "Uplink Implant (Contains 5 Telecrystals)", "UI") ), "Medical" = list( - new/datum/uplink_item(/obj/item/weapon/storage/box/donkpockets, 1, "Box of Donk-Pockets", "DP"), - new/datum/uplink_item(/obj/item/weapon/storage/firstaid/surgery, 3, "Surgery kit", "SK"), + new/datum/uplink_item(/obj/item/weapon/storage/box/donkpockets, 1, "Box of Sin-Pockets", "DP"), + new/datum/uplink_item(/obj/item/weapon/storage/firstaid/surgery, 5, "Surgery kit", "SK"), new/datum/uplink_item(/obj/item/weapon/storage/firstaid/combat, 5, "Combat medical kit", "CM") ), "(Pointless) Badassery" = list( diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm index 5441f83cca..cc67c59517 100644 --- a/code/game/objects/items/contraband.dm +++ b/code/game/objects/items/contraband.dm @@ -28,3 +28,30 @@ new /obj/item/weapon/reagent_containers/pill/zoom( src ) new /obj/item/weapon/reagent_containers/pill/zoom( src ) new /obj/item/weapon/reagent_containers/pill/zoom( src ) + +/obj/item/weapon/reagent_containers/glass/beaker/vial/random + flags = 0 + var/list/random_reagent_list = list(list("water" = 15) = 1, list("cleaner" = 15) = 1) + +/obj/item/weapon/reagent_containers/glass/beaker/vial/random/toxin + random_reagent_list = list( + list("mindbreaker" = 10, "space_drugs" = 20) = 3, + list("carpotoxin" = 15) = 2, + list("impedrezene" = 15) = 2, + list("zombiepowder" = 10) = 1) + +/obj/item/weapon/reagent_containers/glass/beaker/vial/random/New() + ..() + if(is_open_container()) + flags ^= OPENCONTAINER + + var/list/picked_reagents = pickweight(random_reagent_list) + for(var/reagent in picked_reagents) + reagents.add_reagent(reagent, picked_reagents[reagent]) + + var/list/names = new + for(var/datum/reagent/R in reagents.reagent_list) + names += R.name + + desc = "Contains [english_list(names)]." + update_icon() diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 1032c64787..4d862f9f05 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -30,6 +30,7 @@ new /obj/item/ammo_magazine/a357(src) new /obj/item/weapon/card/emag(src) new /obj/item/weapon/plastique(src) + new /obj/item/weapon/plastique(src) return if("murder") @@ -47,6 +48,7 @@ return if("hacker") + new /obj/item/device/encryptionkey/syndicate(src) new /obj/item/weapon/aiModule/syndicate(src) new /obj/item/weapon/card/emag(src) new /obj/item/device/encryptionkey/binary(src) @@ -62,10 +64,9 @@ return if("smoothoperator") - new /obj/item/weapon/gun/projectile/pistol(src) - new /obj/item/weapon/silencer(src) - new /obj/item/weapon/soap/syndie(src) + new /obj/item/weapon/storage/box/syndie_kit/g9mm(src) new /obj/item/weapon/storage/bag/trash(src) + new /obj/item/weapon/soap/syndie(src) new /obj/item/bodybag(src) new /obj/item/clothing/under/suit_jacket(src) new /obj/item/clothing/shoes/laceup(src) @@ -174,9 +175,17 @@ /obj/item/weapon/storage/box/syndie_kit/g9mm/New() ..() new /obj/item/weapon/gun/projectile/pistol(src) - new /obj/item/weapon/storage/bag/trash(src) new /obj/item/weapon/silencer(src) +/obj/item/weapon/storage/box/syndie_kit/toxin + name = "toxin kit" + desc = "An apple will not be enough to keep the doctor away after this." + +/obj/item/weapon/storage/box/syndie_kit/toxin/New() + ..() + new /obj/item/weapon/reagent_containers/glass/beaker/vial/random/toxin(src) + new /obj/item/weapon/reagent_containers/syringe(src) + /obj/item/weapon/storage/box/syndie_kit/cigarette name = "\improper Tricky smokes" desc = "Comes with the following brands of cigarettes, in this order: 2xFlash, 2xSmoke, 1xMindBreaker, 1xTricordrazine. Avoid mixing them up." From 598ab2a2078e36470fcb1798a7590c25e21702e6 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 20 Feb 2015 19:21:32 -0500 Subject: [PATCH 63/90] Adds a mostly module-less merc rig type --- code/modules/clothing/spacesuits/rig/suits/merc.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/modules/clothing/spacesuits/rig/suits/merc.dm b/code/modules/clothing/spacesuits/rig/suits/merc.dm index 7a0d95a4bd..22add92014 100644 --- a/code/modules/clothing/spacesuits/rig/suits/merc.dm +++ b/code/modules/clothing/spacesuits/rig/suits/merc.dm @@ -24,4 +24,11 @@ /obj/item/rig_module/electrowarfare_suite, /obj/item/rig_module/chem_dispenser/combat, /obj/item/rig_module/fabricator/energy_net + ) + +//Has most of the modules removed +/obj/item/weapon/rig/merc/empty + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/electrowarfare_suite, //might as well ) \ No newline at end of file From b1fad50e786899d55ed353d456a872da41712e99 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 20 Feb 2015 20:16:47 -0500 Subject: [PATCH 64/90] Fixes xenoflora piping, allows virology pipenet to connect to the scrubber line Also adds a freezer and heater in the xenoflora storage room to help xenobotanists create atmospheres for plants. --- maps/exodus-1.dmm | 230 ++++++++++++++++++++++++---------------------- 1 file changed, 118 insertions(+), 112 deletions(-) diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index d12d2364aa..9a743f60fb 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -5035,8 +5035,8 @@ "bSQ" = (/obj/item/device/assembly/timer{pixel_x = 5; pixel_y = 4},/obj/item/device/assembly/timer{pixel_x = -4; pixel_y = 2},/obj/item/device/assembly/timer{pixel_x = 6; pixel_y = -4},/obj/item/device/assembly/timer{pixel_x = 0; pixel_y = 0},/obj/structure/table,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/rnd/mixing) "bSR" = (/obj/item/device/transfer_valve{pixel_x = -5},/obj/item/device/transfer_valve{pixel_x = -5},/obj/item/device/transfer_valve{pixel_x = 0},/obj/item/device/transfer_valve{pixel_x = 0},/obj/item/device/transfer_valve{pixel_x = 5},/obj/item/device/transfer_valve{pixel_x = 5},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/rnd/mixing) "bSS" = (/obj/structure/dispenser,/turf/simulated/floor{dir = 5; icon_state = "whitepurple"},/area/rnd/mixing) -"bST" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) -"bSU" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) +"bST" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) +"bSU" = (/obj/machinery/atmospherics/binary/passive_gate{dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/rnd/mixing) "bSV" = (/obj/structure/sign/securearea{pixel_x = -32},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/rnd/mixing) "bSW" = (/obj/machinery/camera{c_tag = "Toxins Launch Room Access"; dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/rnd/mixing) "bSX" = (/obj/machinery/disposal,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -30; pixel_y = 0},/obj/structure/disposalpipe/trunk,/turf/simulated/floor{icon_state = "warningcorner"; dir = 2},/area/rnd/mixing) @@ -5105,8 +5105,8 @@ "bUi" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/rnd/storage) "bUj" = (/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/rnd/research) "bUk" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/wall/r_wall,/area/rnd/mixing) -"bUl" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/machinery/camera{c_tag = "Toxins Lab"; dir = 4; network = list("SS13","Research")},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) -"bUm" = (/obj/machinery/power/apc/high{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green,/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) +"bUl" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/machinery/camera{c_tag = "Toxins Lab"; dir = 4; network = list("SS13","Research")},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) +"bUm" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/engine,/area/rnd/mixing) "bUn" = (/turf/simulated/wall,/area/maintenance/research_starboard) "bUo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "8;12"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "bUp" = (/obj/structure/disposaloutlet,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating/airless,/area/rnd/mixing) @@ -5174,9 +5174,9 @@ "bVz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine/vacuum,/area/rnd/mixing) "bVA" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/rnd/research) "bVB" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/rnd/mixing) -"bVC" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/engine,/area/rnd/mixing) -"bVD" = (/obj/machinery/meter,/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "tox_airlock_pump"; tag_exterior_door = "tox_airlock_exterior"; id_tag = "tox_airlock_control"; tag_interior_door = "tox_airlock_interior"; pixel_x = -24; pixel_y = 0; tag_chamber_sensor = "tox_airlock_sensor"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "warnwhitecorner"},/area/rnd/mixing) -"bVE" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/rnd/mixing) +"bVC" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/rnd/mixing) +"bVD" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "tox_airlock_pump"; tag_exterior_door = "tox_airlock_exterior"; id_tag = "tox_airlock_control"; tag_interior_door = "tox_airlock_interior"; pixel_x = -24; pixel_y = 0; tag_chamber_sensor = "tox_airlock_sensor"},/obj/machinery/atmospherics/tvalve/bypass{dir = 8},/turf/simulated/floor{dir = 1; icon_state = "warnwhitecorner"},/area/rnd/mixing) +"bVE" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/mixing) "bVF" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/rnd/mixing) "bVG" = (/obj/item/weapon/wrench,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "bVH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/research_starboard) @@ -5258,7 +5258,7 @@ "bXf" = (/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/rnd/mixing) "bXg" = (/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/rnd/mixing) "bXh" = (/obj/machinery/computer/general_air_control{frequency = 1430; name = "Mixing Chamber Monitor"; sensors = list("toxins_mixing_exterior" = "Mixing Chamber - Exterior", "toxins_mixing_interior" = "Mixing Chamber - Interior")},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/mixing) -"bXi" = (/obj/effect/decal/cleanable/dirt,/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/research_starboard) +"bXi" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "bXj" = (/turf/simulated/floor/plating,/area/maintenance/research_starboard) "bXk" = (/turf/simulated/floor/airless{dir = 5; icon_state = "warning"},/area/rnd/test_area) "bXl" = (/turf/simulated/floor/airless{icon_state = "warningcorner"; dir = 4},/area/rnd/test_area) @@ -5306,7 +5306,7 @@ "bYb" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) "bYc" = (/turf/simulated/wall,/area/maintenance/substation/research) "bYd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) -"bYe" = (/obj/machinery/meter,/obj/machinery/door_control{id = "mixvent"; name = "Mixing Room Vent Control"; pixel_x = -25; pixel_y = 5; req_access_txt = "7"},/obj/machinery/button/ignition{id = "mixingsparker"; pixel_x = -25; pixel_y = -5},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -29},/turf/simulated/floor{dir = 4; icon_state = "warnwhitecorner"},/area/rnd/mixing) +"bYe" = (/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/engine,/area/rnd/mixing) "bYf" = (/turf/simulated/wall,/area/maintenance/research_port) "bYg" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = -32},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port) "bYh" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) @@ -5325,7 +5325,7 @@ "bYu" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research) "bYv" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/rnd/research) "bYw" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/window/eastright{dir = 8; name = "Chemistry Desk"; req_access_txt = "33"},/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "chemcounter"; name = "Pharmacy Counter Shutters"; opacity = 0},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/medical/chemistry) -"bYx" = (/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/engine,/area/rnd/mixing) +"bYx" = (/obj/machinery/meter,/obj/machinery/door_control{id = "mixvent"; name = "Mixing Room Vent Control"; pixel_x = -25; pixel_y = 5; req_access_txt = "7"},/obj/machinery/button/ignition{id = "mixingsparker"; pixel_x = -25; pixel_y = -5},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warnwhitecorner"},/area/rnd/mixing) "bYy" = (/obj/machinery/atm{pixel_y = 28},/turf/simulated/floor{dir = 4; icon_state = "yellowpatch"},/area/engineering/foyer) "bYz" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/machinery/light,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -29},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/rnd/mixing) "bYA" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/rnd/mixing) @@ -5387,7 +5387,7 @@ "bZE" = (/obj/machinery/light,/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bZF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) "bZG" = (/obj/structure/sign/securearea{pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"bZH" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_starboard) +"bZH" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/wall/r_wall,/area/rnd/mixing) "bZI" = (/obj/machinery/disposal,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/camera{c_tag = "Telescience Control Room"; dir = 1; network = list("SS13","Research"); pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bZJ" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/closet/bombcloset,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bZK" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/light,/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) @@ -5459,7 +5459,7 @@ "caY" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "caZ" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cba" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) -"cbb" = (/obj/machinery/atmospherics/tvalve{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) +"cbb" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 6},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cbc" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cbd" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cbe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/research_starboard) @@ -5526,9 +5526,9 @@ "ccn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access_txt = "39"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/medical/virologyaccess) "cco" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port) "ccp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/research_port) -"ccq" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/research_starboard) +"ccq" = (/obj/machinery/atmospherics/tvalve{dir = 4; name = "siphon switching valve"},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "ccr" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;47"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology) -"ccs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/research_starboard) +"ccs" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cct" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "ccu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "ccv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/research_starboard) @@ -5593,7 +5593,7 @@ "cdC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/research_port) "cdD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) "cdE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/medical/virologyaccess) -"cdF" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/effect/landmark{name = "blobstart"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/medical/virologyaccess) +"cdF" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cdG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance,/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/medical/virologyaccess) "cdH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/medical/virologyaccess) "cdI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) @@ -5666,9 +5666,9 @@ "ceX" = (/obj/item/clothing/mask/smokable/cigarette,/turf/simulated/floor/plating/airless,/area/rnd/test_area) "ceY" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "ceZ" = (/obj/structure/table,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/hand_labeler,/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora_storage) -"cfa" = (/obj/structure/closet/crate/hydroponics/prespawned,/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) +"cfa" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/smartfridge/drying_rack,/turf/simulated/floor{tag = "icon-whitegreen_v (NORTHEAST)"; icon_state = "whitegreen_v"; dir = 5},/area/rnd/xenobiology/xenoflora_storage) "cfb" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) -"cfc" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor{tag = "icon-whitegreen_v (NORTHEAST)"; icon_state = "whitegreen_v"; dir = 5},/area/rnd/xenobiology/xenoflora_storage) +"cfc" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/camera/autoname{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/closet/crate/hydroponics/prespawned,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) "cfd" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/rnd/xenobiology) "cfe" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cff" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/rnd/xenobiology) @@ -5741,17 +5741,17 @@ "cgu" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/engine_eva) "cgv" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/medical/virology) "cgw" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/simulated/floor/plating/airless,/area/rnd/xenobiology) -"cgx" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/camera/autoname{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) +"cgx" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cgy" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora_storage) "cgz" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) "cgA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology) "cgB" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/foyer) "cgC" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage"; req_one_access_txt = "11;24"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/engine_eva) -"cgD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora) -"cgE" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{tag = "icon-whitegreen_v (SOUTHWEST)"; icon_state = "whitegreen_v"; dir = 10},/area/rnd/xenobiology/xenoflora) -"cgF" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"cgD" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"cgE" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Isolation to Waste"},/turf/simulated/floor{tag = "icon-whitegreen_v (SOUTHWEST)"; icon_state = "whitegreen_v"; dir = 10},/area/rnd/xenobiology/xenoflora) +"cgF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora) "cgG" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) -"cgH" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"cgH" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cgI" = (/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cgJ" = (/turf/simulated/floor{tag = "icon-whitegreen_v (SOUTHWEST)"; icon_state = "whitegreen_v"; dir = 10},/area/rnd/xenobiology/xenoflora) "cgK" = (/obj/item/weapon/stool,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) @@ -5800,8 +5800,8 @@ "chB" = (/turf/simulated/floor/plating,/area/maintenance/research_port) "chC" = (/obj/machinery/door/airlock/medical{autoclose = 0; icon_state = "door_open"; id_tag = "cubicle1"; name = "Cubicle 1"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) "chD" = (/obj/machinery/door/airlock/medical{autoclose = 0; icon_state = "door_open"; id_tag = "cubicle2"; name = "Cubicle 2"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"chE" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 5},/turf/simulated/floor/plating/airless,/area/medical/virology) -"chF" = (/turf/simulated/floor/plating/airless,/area/medical/virology) +"chE" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"chF" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "chG" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/engineering/engine_eva) "chH" = (/turf/simulated/floor,/area/engineering/foyer) "chI" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) @@ -5813,13 +5813,13 @@ "chO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "chP" = (/obj/machinery/door/airlock/research{name = "Xenoflora Research"; req_access_txt = "47"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "chQ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) -"chR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) -"chS" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"chR" = (/obj/structure/table,/obj/item/weapon/tape_roll,/obj/item/device/analyzer/plant_analyzer,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"chS" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "chT" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;47"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology) -"chU" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) -"chV" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) -"chW" = (/obj/structure/table,/obj/item/weapon/tape_roll,/obj/item/device/analyzer/plant_analyzer,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) -"chX" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"chU" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"chV" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) +"chW" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) +"chX" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/unary/heater{dir = 2; icon_state = "heater"},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) "chY" = (/obj/machinery/computer/reconstitutor,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "chZ" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cia" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) @@ -5837,7 +5837,7 @@ "cim" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor,/area/engineering/locker_room) "cin" = (/turf/simulated/wall,/area/engineering/locker_room) "cio" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/engineering/locker_room) -"cip" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/smartfridge/drying_rack,/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) +"cip" = (/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "ciq" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/engineering/atmos) "cir" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/engineering/atmos) "cis" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/engineering/atmos) @@ -5881,7 +5881,7 @@ "cje" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor,/area/engineering/foyer) "cjf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/research_port) "cjg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{tag = "icon-whitegreen_v (SOUTHWEST)"; icon_state = "whitegreen_v"; dir = 10},/area/rnd/xenobiology/xenoflora_storage) -"cjh" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) +"cjh" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 10},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cji" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/engineering/foyer) "cjj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/light,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology) "cjk" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) @@ -5889,8 +5889,8 @@ "cjm" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/pipe/manifold/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cjn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/light,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora) "cjo" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) -"cjp" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) -"cjq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"cjp" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"cjq" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cjr" = (/obj/structure/table,/obj/item/clothing/gloves/latex,/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cjs" = (/obj/structure/table,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cjt" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) @@ -5955,17 +5955,17 @@ "ckA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engineering/locker_room) "ckB" = (/turf/simulated/floor,/area/engineering/locker_room) "ckC" = (/obj/machinery/door/window/northright{name = "Xenoflora Containment"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) -"ckD" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) +"ckD" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/effect/landmark{name = "blobstart"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/medical/virologyaccess) "ckE" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/rnd/xenobiology) "ckF" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "xeno_airlock_control"; name = "Xenobiology Access Button"; pixel_x = -24; pixel_y = 0; req_access_txt = "55"},/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xeno_airlock_exterior"; locked = 1; name = "Xenobiology External Airlock"; req_access_txt = "55"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "ckG" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/rnd/xenobiology/xenoflora) "ckH" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora) -"ckI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) -"ckJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) -"ckK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{tag = "icon-whitegreen_v (NORTHEAST)"; icon_state = "whitegreen_v"; dir = 5},/area/rnd/xenobiology/xenoflora) +"ckI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/medical/virologyaccess) +"ckJ" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) +"ckK" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) "ckL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) -"ckM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora) -"ckN" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"ckM" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) +"ckN" = (/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "ckO" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 30; pixel_y = 0},/turf/simulated/floor{tag = "icon-whitegreen_v (NORTHEAST)"; icon_state = "whitegreen_v"; dir = 5},/area/rnd/xenobiology/xenoflora) "ckP" = (/obj/machinery/power/solar_control{id = "starboardsolar"; name = "Aft Starboard Solar Control"; track = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/maintenance/starboardsolar) "ckQ" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_xeno_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "10;13"},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/starboardsolar) @@ -5986,7 +5986,7 @@ "clf" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "nuke_shuttle_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) "clg" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "clh" = (/obj/structure/sign/securearea{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/atmos_control) -"cli" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/medical/virologyaccess) +"cli" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "clj" = (/obj/machinery/door/window/eastright{name = "Engineering Delivery"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/floor{icon_state = "delivery"},/area/engineering/foyer) "clk" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Engineering"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor{icon_state = "bot"},/area/engineering/foyer) "cll" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/light,/turf/simulated/floor,/area/engineering/foyer) @@ -6018,8 +6018,8 @@ "clL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/medbay) "clM" = (/turf/simulated/floor/plating,/area/maintenance/medbay) "clN" = (/turf/simulated/wall/r_wall,/area/medical/virologyaccess) -"clO" = (/obj/machinery/light/small,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/medical/virologyaccess) -"clP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/virologyaccess) +"clO" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{tag = "icon-whitegreen_v (NORTHEAST)"; icon_state = "whitegreen_v"; dir = 5},/area/rnd/xenobiology/xenoflora) +"clP" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "clQ" = (/obj/machinery/light/small,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "bluecorner"},/area/medical/virologyaccess) "clR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/research_port) "clS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port) @@ -6094,7 +6094,7 @@ "cnj" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2) "cnk" = (/obj/structure/table,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2) "cnl" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/medical/virologyaccess) -"cnm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access_txt = "39"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/medical/virologyaccess) +"cnm" = (/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora) "cnn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port) "cno" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/shower{icon_state = "shower"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/rnd/xenobiology) "cnp" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) @@ -6137,7 +6137,7 @@ "coa" = (/obj/structure/table,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2) "cob" = (/obj/structure/table,/obj/item/weapon/hemostat,/obj/machinery/light,/obj/item/weapon/cautery,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2) "coc" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/medical/virologyaccess) -"cod" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/virologyaccess) +"cod" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "coe" = (/obj/machinery/light{dir = 1},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/medical/virologyaccess) "cof" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/disposaloutlet,/turf/simulated/floor/engine,/area/rnd/xenobiology) "cog" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine,/area/rnd/xenobiology) @@ -6257,7 +6257,7 @@ "cqq" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery2) "cqr" = (/obj/effect/decal/cleanable/blood/oil{amount = 0},/turf/simulated/floor/plating,/area/maintenance/medbay) "cqs" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/light,/obj/machinery/door_control{desc = "A remote control-switch for shutters."; id = "virologyquar"; name = "Virology Emergency Lockdown Control"; pixel_x = 0; pixel_y = -28; req_access_txt = "5"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "greencorner"},/area/medical/virologyaccess) -"cqt" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "green"},/area/medical/virologyaccess) +"cqt" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/virologyaccess) "cqu" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "greencorner"},/area/medical/virologyaccess) "cqv" = (/turf/simulated/wall/r_wall,/area/medical/virology) "cqw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology) @@ -6324,10 +6324,10 @@ "crF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/medbay) "crG" = (/turf/simulated/wall,/area/maintenance/medbay) "crH" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/medical/virology) -"crI" = (/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "virology_airlock_exterior"; locked = 1; name = "Virology Exterior Airlock"; req_access_txt = "39"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = -24; pixel_y = 0; req_access_txt = "39"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"crJ" = (/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology) -"crK" = (/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology) -"crL" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology) +"crI" = (/obj/machinery/light/small,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/medical/virologyaccess) +"crJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access_txt = "39"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/medical/virologyaccess) +"crK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/virologyaccess) +"crL" = (/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "virologyquar"; name = "Virology Emergency Quarantine Blast Doors"; opacity = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "delivery"},/area/medical/virologyaccess) "crM" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light{dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/xenobiology) "crN" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "crO" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) @@ -6378,11 +6378,11 @@ "csH" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery2) "csI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/medbay) "csJ" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "warnwhite"},/area/medical/virology) -"csK" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"csK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "green"},/area/medical/virologyaccess) "csL" = (/obj/structure/closet/wardrobe/virology_white,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/camera/xray{c_tag = "Virology Access Aft"; dir = 2; network = list("SS13","Medical")},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "warnwhite"; dir = 5},/area/medical/virology) "csM" = (/obj/structure/sign/deathsposal,/turf/simulated/wall/r_wall,/area/medical/virology) -"csN" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"csO" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"csN" = (/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "virology_airlock_exterior"; locked = 1; name = "Virology Exterior Airlock"; req_access_txt = "39"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = -24; pixel_y = 0; req_access_txt = "39"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"csO" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology) "csP" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "csQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/engineering/atmos/monitoring) "csR" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/xenobiology) @@ -6511,7 +6511,7 @@ "cvk" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/engineering/workshop) "cvl" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/engine,/area/rnd/xenobiology) "cvm" = (/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "virologyquar"; name = "Virology Emergency Quarantine Blast Doors"; opacity = 0},/turf/simulated/floor{icon_state = "delivery"},/area/medical/virologyaccess) -"cvn" = (/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "virologyquar"; name = "Virology Emergency Quarantine Blast Doors"; opacity = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "delivery"},/area/medical/virologyaccess) +"cvn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/bed,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology) "cvo" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/engineering{name = "Engineering Hard Storage"; req_access_txt = "11"},/turf/simulated/floor,/area/engineering/storage) "cvp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engineering/storage) "cvq" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor,/area/engineering/atmos) @@ -6540,16 +6540,16 @@ "cvN" = (/turf/simulated/wall,/area/maintenance/incinerator) "cvO" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = null; req_one_access_txt = "5;12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/incinerator) "cvP" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor/plating,/area/maintenance/medbay) -"cvQ" = (/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "virology_airlock_interior"; locked = 1; name = "Virology Interior Airlock"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cvQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology) "cvR" = (/obj/structure/table,/obj/machinery/light{dir = 8},/obj/machinery/camera{c_tag = "Virology Port"; dir = 4; network = list("SS13")},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cvS" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cvT" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cvU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cvV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cvW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cvX" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cvY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cvZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cvW" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cvX" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cvY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cvZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cwa" = (/obj/machinery/door/window/southright{dir = 4; name = "Primate Pen"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/medical/virology) "cwb" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cwc" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) @@ -6560,7 +6560,7 @@ "cwh" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/rnd/xenobiology) "cwi" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{icon_state = "whitehall"; dir = 8},/area/rnd/xenobiology) "cwj" = (/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard) -"cwk" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"cwk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cwl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/rnd/xenobiology) "cwm" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/machinery/meter,/turf/simulated/floor,/area/engineering/atmos) "cwn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/solar/port) @@ -6594,18 +6594,18 @@ "cwP" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/medbay) "cwQ" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) "cwR" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/embedded_controller/radio/airlock/access_controller{tag_exterior_door = "virology_airlock_exterior"; id_tag = "virology_airlock_control"; tag_interior_door = "virology_airlock_interior"; name = "Virology Access Console"; pixel_x = 8; pixel_y = 22},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "greencorner"},/area/medical/virology) -"cwS" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/purple,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "green"},/area/medical/virology) -"cwT" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/medical/virology) -"cwU" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Virology Laboratory"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/medical/virology) -"cwV" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/medical/virology) -"cwW" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cwX" = (/obj/structure/table,/obj/item/weapon/storage/fancy/vials,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cwY" = (/obj/structure/table,/obj/item/weapon/storage/lockbox/vials,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cwZ" = (/obj/structure/table,/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cxa" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/purple,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cxb" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cxc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/purple,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cxd" = (/obj/machinery/camera{c_tag = "Virology Starboard"; dir = 8; network = list("RD"); pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cwS" = (/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "virology_airlock_interior"; locked = 1; name = "Virology Interior Airlock"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cwT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cwU" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "warnwhite"},/area/medical/virology) +"cwV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "warnwhitecorner"},/area/medical/virology) +"cwW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cwX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/purple,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "warnwhitecorner"},/area/medical/virology) +"cwY" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/purple,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{dir = 1; icon_state = "green"},/area/medical/virology) +"cwZ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Virology Laboratory"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/medical/virology) +"cxa" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/medical/virology) +"cxb" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cxc" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/medical/virology) +"cxd" = (/obj/structure/table,/obj/item/weapon/storage/lockbox/vials,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cxe" = (/obj/structure/table,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cxf" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating/airless,/area/solar/port) "cxg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) @@ -6655,8 +6655,8 @@ "cxY" = (/obj/structure/table,/obj/machinery/computer/med_data/laptop,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cxZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/virology) "cya" = (/obj/machinery/door/window/southright{name = "Virology Isolation Room Two"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology) -"cyb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/virology) -"cyc" = (/obj/machinery/door/window/southright{name = "Virology Isolation Room Three"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology) +"cyb" = (/obj/structure/table,/obj/item/weapon/storage/fancy/vials,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cyc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cyd" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating/airless,/area/solar/port) "cye" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cyf" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) @@ -6703,7 +6703,7 @@ "cyU" = (/obj/structure/bed/chair/office/dark,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cyV" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 8},/obj/structure/disposalpipe/segment,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 7; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Virology Emergency Phone"; pixel_x = -6; pixel_y = 8},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cyW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/virology) -"cyX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/virology) +"cyX" = (/obj/structure/table,/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cyY" = (/obj/item/roller,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cyZ" = (/obj/machinery/camera{c_tag = "Xenobiology Module South"; dir = 4; network = list("SS13","Research"); pixel_x = 0},/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio1"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/xenobiology) "cza" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) @@ -6761,7 +6761,7 @@ "cAa" = (/obj/machinery/disease2/diseaseanalyser,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cAb" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cAc" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cAd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cAd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/tvalve/bypass,/obj/structure/sign/securearea{desc = "A warning sign which reads 'SIPHON VALVE'."; name = "\improper SIPHON VALVE"; pixel_y = -32},/turf/simulated/floor/plating,/area/medical/virology) "cAe" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cAf" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/rnd/xenobiology) "cAg" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/rnd/xenobiology) @@ -6816,9 +6816,9 @@ "cBd" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology) "cBe" = (/obj/machinery/light,/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology) "cBf" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology) -"cBg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/virology) -"cBh" = (/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology) -"cBi" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology) +"cBg" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/medical/virology) +"cBh" = (/obj/machinery/camera{c_tag = "Virology Starboard"; dir = 8; network = list("RD"); pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cBi" = (/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/medical/virology) "cBj" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology) "cBk" = (/obj/structure/table/reinforced,/obj/machinery/door_control{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; pixel_x = 0; pixel_y = -3; req_access_txt = "10"},/obj/machinery/door_control{desc = "A remote control-switch for the engine charging port."; id = "SupermatterPort"; name = "Reactor Blast Doors"; pixel_x = -6; pixel_y = 7; req_access_txt = "10"},/obj/machinery/door_control{desc = "A remote control-switch for the engine emitter."; id = "EngineEmitter"; name = "Engine Emitter"; normaldoorcontrol = 2; pixel_x = 6; pixel_y = 7; req_access_txt = "10"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engineering/engine_monitoring) "cBl" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology) @@ -7247,10 +7247,10 @@ "cJs" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 5; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/random/firstaid,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "cJt" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 5},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/random/firstaid,/turf/simulated/floor{dir = 8; icon_state = "whiteyellowcorner"},/area/medical/chemistry) "cJu" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"cJv" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Isolation to Waste"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"cJv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/plating,/area/medical/virology) "cJw" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"cJx" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) -"cJy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"cJx" = (/obj/machinery/door/window/southright{name = "Virology Isolation Room Three"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology) +"cJy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/plating,/area/medical/virology) "cJz" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar) "cJA" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "robotics_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "robotics_solar_pump"; tag_exterior_door = "robotics_solar_outer"; frequency = 1379; id_tag = "robotics_solar_airlock"; tag_interior_door = "robotics_solar_inner"; layer = 3.3; pixel_x = 0; pixel_y = -25; req_access_txt = "13"; tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "robotics_solar_sensor"; layer = 3.3; pixel_x = 12; pixel_y = -25},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/portsolar) "cJB" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar) @@ -7268,7 +7268,7 @@ "cJN" = (/obj/structure/closet/l3closet/scientist,/turf/simulated/floor{dir = 6; icon_state = "warnwhite"},/area/rnd/xenobiology) "cJO" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cJP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; use_power = 1},/turf/simulated/floor/plating/airless,/area/space) -"cJQ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; use_power = 1},/turf/simulated/floor/plating/airless,/area/medical/virology) +"cJQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 9},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cJR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cJS" = (/obj/machinery/power/solar_control{id = "portsolar"; name = "Aft Port Solar Control"; track = 0},/obj/structure/cable/yellow,/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/portsolar) "cJT" = (/turf/simulated/floor/plating,/area/maintenance/portsolar) @@ -7279,12 +7279,18 @@ "cJY" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cJZ" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1},/turf/simulated/floor/plating/airless,/area/engineering/atmos) "cKa" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; use_power = 1},/turf/simulated/floor/plating/airless,/area/maintenance/incinerator) +"cKb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/medical/virology) +"cKc" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 10},/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology) +"cKd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/plating,/area/medical/virology) +"cKe" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/plating/airless,/area/medical/virology) "cKf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cKg" = (/turf/simulated/wall,/area/maintenance/engi_engine) "cKh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cKi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cKj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engi_engine) +"cKk" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating/airless,/area/medical/virology) "cKl" = (/turf/space,/area/syndicate_station/southeast) +"cKm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; use_power = 1},/turf/simulated/floor/plating/airless,/area/medical/virology) "cKn" = (/turf/space,/area/syndicate_station/south) "cKo" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space) "cKp" = (/obj/item/weapon/wrench,/turf/space,/area/space) @@ -7443,37 +7449,37 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbNgbNhbNgbKxbNibNjbNkbNlbNmbNnbKAbNobNpbGvbNqbNrbNsbNtbGvbNubNvbNwbNxaaaaaaaaaaaabNybNzbNAbNBbNDbNCbNEbNFbNGbNHbNIbNFbNJbNKbNLbNMbNNbNObNPbNQbNRbNSbNTbNUbNUbNUbNUbDtbDtbLdbMtbMsbDtbxCbNZbOabObbMzbOcbOdbOebOfbOgbOhbOibOjbOkbOlbOmbOnbMKbOobFDbFDbOpbJObJObOobCpbMNbMObOqbOrbOsbOtbOubOvbOwbOxbMObOybOzbOAbOAbzAbOBbOCbCvbzIbODbOEbOFbOGbOHbOIbOJbOKbOLbOMbMVbEnbONbEnbOObOObOObOObOOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabOPbKtbNdbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLVbNgbNgbNgbOQbORbKAbOSbOTbOUbKAbKAbOVbOWbGvbGvbGvbGvbGvbGvbOXbOYbOZbPaaaabPbbPcbPcbPdbPebPfbPgbPhbPfbPibNFbPjbPkbPlbNFbPmbPnbPobPpbPqbPrbPsbPtbPtbNSbPubPvbPwbPxbPybDtbMubLbbPzbGFbMwbMvbDzbPCbxCbPDbPEbPFbPGbwkbPHbPIbwkbPJbPKbPLbPMbPNbMKbCpbCpbCpbCpbCpbCpbCpbCpbPObMObPPbQYbPRbOsbOsbOsbOsbPSbMObPTbLEbPUbPUbzAbBhbPVbPWbPXbPYbPYbPYbPYbPZbQabQabQbbQcbQdbMVbQebQfbQgbOObQhbMxbQjbQkaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbQlbQmbQmbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbNhbNhbNhbKxbQnbQobQpbQqbQrbKAbKAbQsbQtbQubQvbQvbQvbQvbQvbQvbQwbQxbQyaaabQzbQAbQBbQCbQDbPfbQEbQGbQFbQHbNFbQIbQJbQKbNFbQLbQMbQNbQObQPbQQbQRbPtbQSbPxbQTbNUbPxbPxbQUbNVbNXbGFbQVbGFbPAbNYbQXbLebRCbQZbRabRbbRcbRGbDEbIkbSpbPJbPLbPLbPMbRfbMKbRgbRhbPBbRjbRkbRlbQibRnbPObMObOsbOsbRobOsbOsbOsbOsbRpbMObRqbLEbRrbRrbzAbRsbRtbRubRvbRwbRxbRybRybRzbRAbRybRybRybRBbRebRDbREbRFbRdbRHbRIbRJbRKaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaabLVbRMbRNbRObLVbRPbMabMbbGtbGtbRQbRQbRQbGtbGtbNxbRRbRRbRSbRSbRSbRSbNwbQyaaabRTbRUbRVbRWbRXbRYbRZbSabSbbSbbScbSdbSebSfbNFbPtbPtbPtbPtbPtbSgbPtbPtbShbSibSjbNUbPxbSkbSlbDtbRibLbbQVbSmbSnbRmbSobJAbJBbSqbSrbSsbStbJzbFsbSvbIEbSxbSybSzbSAbSBbMKbSCbSDbSEbRjbSFbSGbSHbRnbPObMObMObMObRobOsbOsbOsbMObMObMObSIbSJbRrbRrbzAbSKbSLbCvbzIbSMbSNbSObSPbSQbSRbSSbQabSTbSUbMVbSVbQfbSWbOObSXbSYbSZbTaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbTcbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTdbKwbTebKwbTfbTgaafaaaaaabGtbThbTibTjbGtaaabNxbTkbTlbTmbTnbTnbTnbTobQyaaabQzbTpbTqbTrbTsbPfbTtbTvbTubTwbNFbTxbTybTzbTAbTBbTBbTBbTCbTCbTDbTEbULbPxbPxbTFbNUbNUbNUbNUbDtbDtbLfbLkbLcbDtbTJbTKbTLbJFbJEbTJbTObLlbLmbTRbTSbTJbMKbMKbMKbMKbMKbMKbTTbTUbTVbRjbTWbTXbTYbRnbPObMObTZbQWbPQbLxbLnbNWbNcbTZbUgbUhbUibIIbIJbzAbIKbSLbUjbwwbMVbMVbMVbMVbMVbUkbMVbUlbQabUmbMVbUnbUobUnbOObUpbUqbUrbOOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbUsbUsbUsbUsbUsbUsbUtbLTbUubUsbTcbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbUvbNxbNxbNxbNxbRSbUwbNwbUxaaabUybPcbPcbUzbUAbPfbPfbUBbPfbUCbNFbUDbTMbTNbNFbTPbTPbTPbTPbTPbTPbTPbTPbUHbUIbUJbUKbUKbUMbNUbDtbUNbUebUFbUQbURbwabUTbUUbUVbUWbUXbUTbUYbUZbVabVbbVcbVdbVebVfbVgbVhbVibUGbVkbUObRjbUPbVmbUPbRnbPObMObVnbWcbVpbVqbVrbVsbVtbVubUgbzAbVvbzAbzAbVwbCxbSLbCxbVxaafbnxbVzbrBbVBbVCbVBbVDbVEbVFbMVbVGbVHbVIbOObVJbVKbVKbwhaaLaaLaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibLRbLRbLRbLRbLRbLRbLRbVNbLUbLTbLTbLTbLTbVObLUbKuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaabLVbRMbRNbRObLVbRPbMabMbbGtbGtbRQbRQbRQbGtbGtbNxbRRbRRbRSbRSbRSbRSbNwbQyaaabRTbRUbRVbRWbRXbRYbRZbSabSbbSbbScbSdbSebSfbNFbPtbPtbPtbPtbPtbSgbPtbPtbShbSibSjbNUbPxbSkbSlbDtbRibLbbQVbSmbSnbRmbSobJAbJBbSqbSrbSsbStbJzbFsbSvbIEbSxbSybSzbSAbSBbMKbSCbSDbSEbRjbSFbSGbSHbRnbPObMObMObMObRobOsbOsbOsbMObMObMObSIbSJbRrbRrbzAbSKbSLbCvbzIbSMbSNbSObSPbSQbSRbSSbQabQabSTbMVbSVbQfbSWbOObSXbSYbSZbTaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbTcbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTdbKwbTebKwbTfbTgaafaaaaaabGtbThbTibTjbGtaaabNxbTkbTlbTmbTnbTnbTnbTobQyaaabQzbTpbTqbTrbTsbPfbTtbTvbTubTwbNFbTxbTybTzbTAbTBbTBbTBbTCbTCbTDbTEbULbPxbPxbTFbNUbNUbNUbNUbDtbDtbLfbLkbLcbDtbTJbTKbTLbJFbJEbTJbTObLlbLmbTRbTSbTJbMKbMKbMKbMKbMKbMKbTTbTUbTVbRjbTWbTXbTYbRnbPObMObTZbQWbPQbLxbLnbNWbNcbTZbUgbUhbUibIIbIJbzAbIKbSLbUjbwwbMVbMVbMVbMVbMVbUkbMVbUlbSUbVFbMVbUnbUobUnbOObUpbUqbUrbOOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbUsbUsbUsbUsbUsbUsbUtbLTbUubUsbTcbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbUvbNxbNxbNxbNxbRSbUwbNwbUxaaabUybPcbPcbUzbUAbPfbPfbUBbPfbUCbNFbUDbTMbTNbNFbTPbTPbTPbTPbTPbTPbTPbTPbUHbUIbUJbUKbUKbUMbNUbDtbUNbUebUFbUQbURbwabUTbUUbUVbUWbUXbUTbUYbUZbVabVbbVcbVdbVebVfbVgbVhbVibUGbVkbUObRjbUPbVmbUPbRnbPObMObVnbWcbVpbVqbVrbVsbVtbVubUgbzAbVvbzAbzAbVwbCxbSLbCxbVxaafbnxbVzblSbVBbUmbVBbVDbVCbVEbMVbVGbVHbVIbOObVJbVKbVKbwhaaLaaLaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibLRbLRbLRbLRbLRbLRbLRbVNbLUbLTbLTbLTbLTbVObLUbKuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVPbVQbVQbVRbVSbNxbVTbRSbVUbNxaaaaaaaaaaaabNybVVbVWbVXbVZbVYbPfbNFbWabWbbNIbNFbTPbWdbWfbWebWhbWgbWibTPcaqcaqcaqcaqcaqbTFbWjbWkbWlbWmbWnbWobWpbxgbWrbWsbWtbWubWtbWvbWtbWwbWxbWybWzbWAbWBbWAbWCbWDbWEbWFbWGbWHbWIbWJbWKbWLbWMbxVbMObxWbzmbzlbWSbWTbWUbWSbWSbWVbWWbWXbWYbWZbCxbCxbSLbCxbFTaafbnxbXabXbbXcbXdbXebXfbXgbXhbMVbXibVHbXjbOObOObOObOObOOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbQmbQmbQmbQmbQmbQmbXkbLTbQlbQmbXlbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXmbXnbXobXpbRSbXqbXrbRSbXsbNxaaKaaaaaaaaabNybNybNybNybNybNybNybNFbUDbUEbXtbNFbTPbXubXwbXvbXvbXwbXxbTPbXzbXybXybXAcaqbXBbDtbDtbXCbXDbXEbXFbXGblRbXIbXJbXKbXLbXMbXNbXObXPbXQbXRbXSbXTbXUbznbzpbzobAPbzqbARbAQbATbASbAVbAUbYfbYgbIwbYhbVobCqbWObWNbWPbYmbYnbYobYpbYqbYrbYsbYtbYrbYubYvbILaafbnxbXablSbVBbYxbVBbYebYzbYAbMVcaZbVHbYBbYCbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbXlbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYDbVQbVQbVRbYEbYFbYGbNxbYHbNxbYIbYJbYKbYIbYIbYLbYMbYNbYObYPbYQbYybYSbYRbYUbYTbYVbXwbYXbYWbYZbYYbZbbZabZdbZcbZfbZecaqbZhbNSbZibZjbZkbZlbZlbZmbnEbZobZpbTJbTJbZqbZrbTJbTJbZsbZgbZTbVibZvbWQbZxbZybZzbZybZAbZUbZCbZUbZAbWRbYfbMNbIwbZEbXWbXVbZVbZIbZJbZKbMObMObwwbwwbwwbwwbwwboIbnFbofbwwbMVbMVbMVbMVbMVbUkbMVbMVbMVbMVbMVbZObZPbZQbZRbUnaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaambZSaamaamaamaamaamaaaaaaaaaaaaaaaaaaaafaafaaabZWbZXbZXbZXcaabZXbZXcahcagbYIbZYbZZbYIcaicabcaccadcaecafcakcajcamcalcaocancapbXwbYXcaJcbibYYcbjbTPcaqcaqcaqcaqcaqcarbNSbDtcascatcaucavcawcaxcaycazbTJcaAcaBcaCcaDcaEcaFcaGcaHcaIbZxbWQcbkbZycaKcaLbZAcaMcaNcaObZAbXXbYfbPObIwbXYbYabXZbXYbXYbIwbIwbIwcaRcaScaTcaUcaVbwwbwwcaWbwwbwwcaXcaYbZHcbbcbaccqcbaccscbccbdcbecbfcbgcbhbUnbUnbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbUubUsbUsbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcblcbncbmcbpcbocbycbqcbAcbzbYIcbrcbsbYIbYIcbtcbucbvcbwcbxcbCcbBbYSbYRbYUcbDcbEbXwbXwcbKcbQbXwccAbTPcbFcbGcaqcbHcaqbTFcbIcbIcbIcbIcbIcbIcbIbTJcbJccBbTJcbLcbMcbNcbOcaEcbPccCcbRcaIbZxbWQbZxbZycbScbTbZAcbUcbVcbWbZAbYjbYfbYbbYdbYcbYiccDcdebYcchBbYkbYlcktbZDbZwbZFcktccrbZGcfecdQchTchNclXcjlcmWcctccucctccucctcctcctccvccwccxccycczbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaaaaaabOPbKtbNdbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXmbXnbXobXpbRSbXqbXrbRSbXsbNxaaKaaaaaaaaabNybNybNybNybNybNybNybNFbUDbUEbXtbNFbTPbXubXwbXvbXvbXwbXxbTPbXzbXybXybXAcaqbXBbDtbDtbXCbXDbXEbXFbXGblRbXIbXJbXKbXLbXMbXNbXObXPbXQbXRbXSbXTbXUbznbzpbzobAPbzqbARbAQbATbASbAVbAUbYfbYgbIwbYhbVobCqbWObWNbWPbYmbYnbYobYpbYqbYrbYsbYtbYrbYubYvbILaafbnxbXabrBbVBbYebVBbYxbYzbYAbMVbXjbVHbYBbYCbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbXlbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYDbVQbVQbVRbYEbYFbYGbNxbYHbNxbYIbYJbYKbYIbYIbYLbYMbYNbYObYPbYQbYybYSbYRbYUbYTbYVbXwbYXbYWbYZbYYbZbbZabZdbZcbZfbZecaqbZhbNSbZibZjbZkbZlbZlbZmbnEbZobZpbTJbTJbZqbZrbTJbTJbZsbZgbZTbVibZvbWQbZxbZybZzbZybZAbZUbZCbZUbZAbWRbYfbMNbIwbZEbXWbXVbZVbZIbZJbZKbMObMObwwbwwbwwbwwbwwboIbnFbofbwwbMVbMVbMVbMVbMVbZHbMVbMVbMVbMVbMVbZObZPbZQbZRbUnaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaambZSaamaamaamaamaamaaaaaaaaaaaaaaaaaaaafaafaaabZWbZXbZXbZXcaabZXbZXcahcagbYIbZYbZZbYIcaicabcaccadcaecafcakcajcamcalcaocancapbXwbYXcaJcbibYYcbjbTPcaqcaqcaqcaqcaqcarbNSbDtcascatcaucavcawcaxcaycazbTJcaAcaBcaCcaDcaEcaFcaGcaHcaIbZxbWQcbkbZycaKcaLbZAcaMcaNcaObZAbXXbYfbPObIwbXYbYabXZbXYbXYbIwbIwbIwcaRcaScaTcaUcaVbwwbwwcaWbwwbwwcaXcaYcbbccqcbaccscaZcdFcbccbdcbecbfcbgcbhbUnbUnbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbUubUsbUsbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcblcbncbmcbpcbocbycbqcbAcbzbYIcbrcbsbYIbYIcbtcbucbvcbwcbxcbCcbBbYSbYRbYUcbDcbEbXwbXwcbKcbQbXwccAbTPcbFcbGcaqcbHcaqbTFcbIcbIcbIcbIcbIcbIcbIbTJcbJccBbTJcbLcbMcbNcbOcaEcbPccCcbRcaIbZxbWQbZxbZycbScbTbZAcbUcbVcbWbZAbYjbYfbYbbYdbYcbYiccDcdebYcchBbYkbYlcktbZDbZwbZFcktccrbZGcfecdQchTchNclXcjlcmWcctccucctcctcctcctcctccvccwccxccycczbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaaaaaabOPbKtbNdbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafccEccEcbmccPccFcbyccQccSccRbYIccGccHccIccJccKccLccMccNccOccUccTccWccVccYccXcdaccZcdBcdbcelcekcencemcdccddaJEcdfcaqbTFcbIcdgcdhcdicdjcdkcdlcdmcdncdocdpcdqcdrcdscdtcaEcducdvcdwcaIbZxbWQbZxbZycdxcdybZAcdzcdAceobZAcaPbYfbYfcaQbYccbYcbXcbZbYcchBccacjfcdLcdLbyFbBucdLcdOcdPcoocdRcdOcdSbBpbyecopcdScdScdScdSbAebyebydcdScdSbXjcdXcdYcdZceacebcecbxTbycbycbycbycbycbycbycbycbycbycbycbycbycbycbycbyccefcegcegcehbKtbKtbLTbLTceibLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejcejcejcejceqcepbYIbYIbYIbYIbYIbYJcescercercerceucetbYSbYRbYUcevbYVcewceycexceTceSceUbTPcezaJFceeaJFcaqbTFcbIceDceEceEceEceFceGbTJceHceIbTJcbLcbNceJcbOcaEceKceLceMcaIbZxbWQceNbZyceOcePbZAbZAbZAbZAbZAccbceRbYfcaQbYcccdcccbYcbYcchBccecjfcdLceZcfacfbcfccdOcfdcoqcffcdOcfgcfhcfhctycficeWcfkcflcfmcfncfocfpcdScfqcfrcfsbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcftceXcfvbNebKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejcfwcfxcfycfzcfAcejcfjceYcfBcfucfDcfCcfEcfEcfGcfFcfFcfHcfIcbBbYSbYRbYUcfJcapcfKcfMcfLcfOcfNcfPbTPaJFaJFcaqceBcaqbTFcbIcfVcfWcfWcfWcfXcbIcfYcfZcgacfYcgbcgccgdcgecaEcgfceLcggcaIcghccfcgjbZycgkcglbZycgmbLvbVicgnccgcchbYfccjcciccicckcclcclcclcclccmcdLcgxcgycgycgzcgActscwkctscgDcgEcgFcgGcBycgHcgIcgIcgJcgKcgLcgLcgMcdScgNcgOcgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcgQbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQaaaaaacgScgTcgTcgTcgUcgVcejcfUcfRcgocgicgrcgpcgucgtcgCcgBcgWcgRcgYcgXchacgZchcchbbTPbTPbTPbTPbTPbTPbTPbTPbEZbGDcaqbDfcaqbTFcbIcbIctpctqctrcbIcbIchrchschtcfYcaEcaEcaEcaEcaEcaIchuchvcaIchwccnchwbZychychzbZychAchBbVichCbVichDbYfccobYfbYfccpcdCcdCcdCcdDbYfcdLchIchJchJchKchLchMcJuchOchPchQchRchScJvchUchVchWcgIcgIcgIchXchYcdSchZciachdcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacfQchechfchecfQchgchhchgcfQchichjchicfQaaaaaaciicgTcgTcgUcgUcijcejchlchkchnchmchpchochGchqcicchHchHcidchHcbBbYSciebYUcifcihcigcilcikcilcimciocincinciAciAciAciAbTFciGciHciIciIciJciKciLciMciXciOciPciQciRciSciSciTciUcaIcaIcaIciVcdEckqbZybZybZybZychBchBbViciYbViciZbYfccobYfaaaaaaaaaaaaaaaaaaaaacdLcjgcjhcjhcipcjjcjkcJwcjmcjncjocjpcjqcJxcgIcjrcjscgIcjtcgIchXcjucdScjvcjwcjxcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacfQcheciqchecfQchgcirchgcfQchicischicfQaaaaaaciicgTcgUcgUcgUcjBcjCciucitchncivcixciwciWciycjbcjacjdcjccjecbBbYScjichccjycjAcjzcjDcjDcjDcjEcjGcjFcjHceCcqZceAciAbTFciGckaciIckbckcckdcubckfckgckhctQckjckkcklciSckmciUcknckockpclicdFcdHcdGcdIcdIcdJcdIcdKbVibVibVibVibYfccobYfaaaaaaaaaaaaaaaaaaaaacdLckCckDckDckDckEcdOckFcdOckGckHckIckJcJyckKckLckLckMckJckJckNckOcdSckPckQckRcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacfQcjIcjKcjJcfQcjLcjNcjMcfQcjOcjQcjPcfQaaaaafciiclbcgTcgUcgUcgUcejcjScjRchnchncjTchnchnchnchncjUchHcjXcjYcbBckecjZckrckickucksckzckzckzckAckBckBckTciAckWcgqclwclxciGclyciIclzclAclBclCclDclEclFclGclHclIclJciSclKciUclLclMclNclOclPclQclNclRclSclTbYfceQcdIcdIcdIcdIcdIckYbYfaaaaaaaaaaaaaaaaaaaaacdLcmacmbcmccmdcdOcmecmfcmgcdScmhcmicmicJLcmjcmkcmlcmmcmicmicmicmncdScmocmpcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcfQckZclcclacfQcldclcclecfQcldclcclecfQaaaaafcmzcgTcgTcgUcgUcmAcejclhclgclkcljclmcllclnclnclvcltclncmscmtcbBcmvcmucmxcmwcihcmycmycmBckBcmCcmEcmDcmDciAcibceVcmFcqgciGcnbciIcnccndcmGciGcnfciNcmHcfYcmIcnicnjciScnkciUclLclMclNcnlcnmcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfaaaaaaaaaaaacdOcdOcdOcdOcdOcdOcdOcdOcdOcnocnpcnqcdScdScnrcnscJMcdScdScdScdScnucnscntcdScdScnvcnwcnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaafaafaafaaaaafcnxaafcnxaafcKBaafcKAaafcKBaafcKAaafaafaaacejcnAcnBcgUcgUcnCcnDcmKcmJcmMcmLcmOcmNcmNcmPcmNcmQcmScmRcmQcmXcngcnecnycnhcnzcnzcnzcnzcnFcnEcnGcnGcnGcgscgscgscgscnSciGcnTcnUcnccnVcnWciGcnfciNcnXciUcnYcnZcnjcoacobciUclLclMclNcoccodcoeclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacdOcofcogcohcwlcojcokcolcomconcJOcJNcdObqpaafaafcJPaafaaaaaaaaaaaaaaaaaaaaaaafcoscotcosaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafcnHcnJcnIcnKcnIcnJcnLcnKcnMcnNcnLcnPcnOcnRcnQcmMcmMcmMcmMcmMcmMcmMcmMcovcoucoxcowcoAcoycoCcoBcoDcmQcoFcoEcoGcmQcoIcoHcoJcnzcoLcoKcoNcoMcoPcoOcoRcoQcoQcoScoTcoTcoRbTFciGciGcpccpdciGciGciGcpeciNcpfciUciUciUcpgcphciUciUclLcpiclNcvmcvncvmclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafcdOcplcpmcplcvlcpocppcpqcomcomcprcomcdOcdOaaaaaaaaaaafaafaaaaacaaaaaaaaaaaaaafaaacvtaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaaaaaaaafcoUcoWcoVcoYcoXcoWcoZcpbcpacpkcpjcpscpncpucptcpwcpvcpycpxcpAcpzcpCcpBcpFcpDcpJcpHcpMcpLcpOcpNcpTcpQcpVcpUcpXcpWcoIcpYcpZcnzcoPcoPcoPcoPcoPcqacoRcqbcqbcqbcoTcoTcoRbTFcrYciGcqhcqicqjcqkciGcqlciNcqmciUcqncqocqpcqqciUcqrclLcpiclNcqscqtcquclNaaaaaaaaaaaaaaaaaacqvcqwcqxcqycqvaafaaaaaaaaaaaacdOcplcplcplcoicqAcqBcqCcqDcqEcqFcqGcqHcdOaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacmZaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafcqccptcqdcqfcqecptcqzcptcqIcqJcqzcptcqIcqJcptcptcptcptcptcqKcptcptcptcpMcqMcpHcqPcqzcpLcqRcqQcqUcqScqWcqVcqYcqXcoIcpYcJrcnzcracoPcoPcrbcoPcrccoRcrdcrfcrecrfcrgcoRbTFcrqciGcrrcrscrtcrucrvcrwcrxcrycrzcrAcrBcrCcrDciUcrEcrFcrGcrHcqvcrIcqvcrHaaaaaaaafaaaaaaaaacqvcrJcrKcrLcqvaafaafaaaaaaaaacdOcomcomcomcomcrMcppcrNcrNcrNcnpcrNcrOcdOaaaaaaaaaaaaaaacrPcrPcrPbZSaafaafaafaafcnaaafaafaafaafaafaaqcrPcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcoUcptcqPcptcqPcptcqzcptcrhcrjcricrjcrkcrjcrjcrmcrlcptcptcrocrncrncrncrQcrpcrRcrRcrScpLcrUcrTcrVcmQcrXcrWcrZcmQcsbcsacsdcsccsfcsecshcsgcoPcsicoRcsjcrfcskcrfcsmcoRbTFcizciGcszcsAcsBcsCciGcfYcsDcfYciUcsEcsFcsGcsHciUcsIcrGcrGcqvcsJcsKcsLcqvcqvcqvcsMcqvcqvcqvcqvcsNcsOcsPcqvcqvcqvcrHaaaaaacdOcofcogcohcslcsRcqBcrNcrNcrNcnpcrNcsScdOaaaaaaaaaaaaaaacrPaaaaafaaaaafaaaaaaaaackxaaaaafaafaaaaaaaaaaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaacoUcptcqPcptcsncspcsocsrcsqcsscricrjcstcrjcrjcrmcsucptcptcsvcqfcsxcswcswcsycqPcqPcsTcsQcsVcsUcmNcmQcsWcmQcmQcmQcsYcsXcsdcsZctcctactectdcoPctfcoRctgcrfcskcrfcthcoRctvctwciGciGctxciGciGciGciBctzctAciUciUciUctBciUciUcsIcrGaaacqvctCctDctEctFctGctHctIctJctKctLcqvctMctDctNcqvctOctPcqvaafaafcdOcplcplcplcorcpoctRctSctTctUctVcrNctWcdOcdOcdOcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacoUcptcsncspcspcspcsocspcspcspcsocspcspcspcspcspcticspcspcsocspctjcspcspcspctlctkctmcoWcptctncttctoctZctucuccuactucudcufcuecuhcugcugcuicugcujculcukcuncumcuocuocoRcuCcuDcuEcuFcuFcuGcuHcuIcuJcuJcuJcuJcuJcuJcuJcuJcuKcrFcrGaaactFcuLcuMcuNctFcuOcuPcuQcuQcuRcuQcuScuTcuUcuVcuWcuXcuQcqvaaaaaacdOcplcplcplcslcuYcuZcvacvbcvccvdcrNcrNcvecvfcvgcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacoUcptcptcptcptcptcqzcptcptcptcqzcptcptcptcptcptcqIcptcptcqzcptcupcptcptcuqcuscurcuucutcuvcutcuxcuwcuzcuycuAcuwcuwcuBcvhcnFcvicoPcvkcvjcoPcoPcvocrfcrfcvpcuocuocoRbPxcAscvNcvNcvNcvNcvOcvNcvNcvNcvNclMcvPcrGcrGcrGcrGcrGcrGaaactFctFcvQctFctFcvRcvScvTcvUcvVcvWcvVcvXcvYcvZcwacwbcwccqvaaaaaacdOcomcomcomcomcwdcppcvacwecwfcwgcrNcrNcwhcrNcwicdOaaaaaacrPaafcwjcwjcwjcwjcwjaaackxaaacwjcwjcwjcwjcwjaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaabZSaaaaaaaaaaaacoUcptcptcptcptcptcqzcptcptcptcqzcptcptcptcptcptcqIcptcptcqzcptcvqcptcptcvqcvqcvrcptcptcvucvscvvcvvcvvcvvcvxcvwcoIcvycvzcsccvAcoPcvBcvjcoPcvCcoRcvDcrfcvEcvGcvFcoRcwHcvMcvNcwIcwJcwKcwLcwMcwNcwOcvNcwPcwQcrGaaaaaaaaaaaaaaaaaacqvcwRcwScwTcwUcwVcwWcwXcwYcwZcxacvZcxbcxccxdcuWcqvcxecqvaaaaaacdOcofcogcohckXcsRcuZcxgcxhcxhcxicxjcxkcvHcxmcxncdOaaaaaacrPaaaaafaaaaafaafaafaaackxaaaaafaaaaafaaaaafaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacoUcptcptcptcptcptcvIcptcptcptcvIcptcptcptcptcptcqIcptcptcvJcqfcvLcvKcvKcvLcwmcvLcwpcwocwqcvKcwtcwscwvcwucwwcvwcoIcwxcoIcwycwzcoPcoPcwAcoPcwBcoRcwCcwCcwDcvGcvFcoRbPxcvMcvNcxKcxLcxMcxNcxOcxNcxPcvNcxQcxRcrGaaaaaaaaaaaaaaaaaacqvcxScxTcxUcxVcxWcxXcxYcxZcuTcyacuScybcuTcyccuVcqvcqvcqvaaaaaacdOcplcpmcplctbcpocppcrNcrNcyecyfcrNcygcomcomcomcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaaaaaaaaaaaaaaaaaaaaaaacyhaaaaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacoUcptcrocrncrncwFcwEcrncwFcrncwGcwFcrncrncrncrncxlcrncxocxqcxpcvqcptcptcxrcxtcxscxvcxucxwcptcxBcxAcxCcxCcxEcxDcoIcwxcxFcnzcxGcoPcxHcoPcxJcxIcoRcoRcoRcoRcoRcoRcoRbPxcvMcvNcyMcyNcxLcyOcxLcxNcyPcvNcyQcyRcrGaaaaaaaaaaaaaaaaaacqvcuVcySctFctFcyTcyUcyVcyWctMctDctNcyXctMctDcyYcqvaaaaaaaaaaaacdOcplcplcplckXcyZczacrNcrNcrNcyfcrNczbcrNczccrNczdaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacoUcptcqzcptcptcptcvIcptcptcptcvIcptcptcptcptcptcqIcptcxscptcyicvqcptcptcyjcwmcykcylcvvcymcvvcvvcxAcyocyncyqcxDcoIcwxcoIcnzcyscyrcyucytcyvcoPcnzczIczJczJczKczLczMczNczOcvNcxNczPczQcxNczRczSczTcvNczUczVcrGaaaaaaaaaaaaaaaaaacqvczWcuMczXcuVczYczZcAactFcAbcAccsPcyXczWcAdcAecqvaaaaaaaaaaaackEcdOcAfcAgcAgcywcAicAjcAkcAlcAmcAncAocApcAqcokcAraaaaaacrPaafcwjcwjcwjcwjcwjaaackxaafcwjcwjcwjcwjcwjaaacrPaaacyhaaaaaacyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaacyxcptcqzcptcyycrjcricrjcyzcrjcricrjcyzcrjcrjcrjcyAcyBcyAcrmcyCcykcyDcyFcyEcyHcyGcyIcvvcyKcyJcvvcvvcvvcvvcvvcyLcngczecngcnzcnzcnzcnzcnzcnzcnzcnzcALczJczJcAMcANcAObPxcAPcvNcAQcARczfcATcAUcAVcAWcvNcAXcAYcrGaaaaaaaaaaaaaaaaaacqvcuQcAZcAectFcBacBbcBcctFcBdcBecBfcBgcBhcBicBjcqvaafaafaaaaaaaaaaaabquaaacdOcBlcBmcBncBocBpcBmcBqcBrcBpcBmcBscdOaaaaaabZSaaaaafaaaaafaaaaafaaackxaaaaafaaaaafaafaafaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaaaaaaaaaaaaaamaaaaaaaaaczgcptcqzcptcxscxtcqzcptcxscxtcqzcptcxscxtcptcptcxrcptcxscxtczhczkczjczmczlczocznczpcvvczrczqcztczsczuctuczwczvctuczxctuczycuaczzczBczAczAczDczEcBVcBWcBWcBXcBYcAObPxcBZcvNcvNcCacCbcCccCbcCacCdcvNcrGcCecrGaaaaaaaaaaaaaaaaaacqvctFcCfcuVctFcCgcChcCictFcCjcCkcqycgvcCmcCncCocrHaaaaaaaaaaaaaaaaaacgwaafcdOcCqcluclUcomclsclpclqcomcloclVclWcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafczgczGczFcAhczHcAucAtcAwcAvcAycAxcAAcAzcAucptczGcABcADcACcAycAEcmMcmMcmMcmMcmMcmMcmMcmMcAHcAFcyLcAIcAJcoIcAKcoIcoIcwxcoIcoIcAScoIcAJcBtcBvcBucBxciCcCNcCOcCPcCQcAObPwcCRcCScCTcCacAGcAVcBwcCacHPcHLcHQcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaachxchFchEcJQaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejcejcejcejceqcepbYIbYIbYIbYIbYIbYJcescercercerceucetbYSbYRbYUcevbYVcewceycexceTceSceUbTPcezaJFceeaJFcaqbTFcbIceDceEceEceEceFceGbTJceHceIbTJcbLcbNceJcbOcaEceKceLceMcaIbZxbWQceNbZyceOcePbZAbZAbZAbZAbZAccbceRbYfcaQbYcccdcccbYcbYcchBccecjfcdLceZcfbcfbcfacdOcfdcoqcffcdOcfgcfhcfhctycficeWcfkcflcfmcfncfocfpcdScfqcfrcfsbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcftceXcfvbNebKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejcfwcfxcfycfzcfAcejcfjceYcfBcfucfDcfCcfEcfEcfGcfFcfFcfHcfIcbBbYSbYRbYUcfJcapcfKcfMcfLcfOcfNcfPbTPaJFaJFcaqceBcaqbTFcbIcfVcfWcfWcfWcfXcbIcfYcfZcgacfYcgbcgccgdcgecaEcgfceLcggcaIcghccfcgjbZycgkcglbZycgmbLvbVicgnccgcchbYfccjcciccicckcclcclcclcclccmcdLcfccgycgycgzcgActscgDcgxcgFcgEcgGcgGcBycgHcgIcgIcgJcgKcgLchEcgMcdScgNcgOcgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcgQbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQcfQaaaaaacgScgTcgTcgTcgUcgVcejcfUcfRcgocgicgrcgpcgucgtcgCcgBcgWcgRcgYcgXchacgZchcchbbTPbTPbTPbTPbTPbTPbTPbTPbEZbGDcaqbDfcaqbTFcbIcbIctpctqctrcbIcbIchrchschtcfYcaEcaEcaEcaEcaEcaIchuchvcaIchwccnchwbZychychzbZychAchBbVichCbVichDbYfccobYfbYfccpcdCcdCcdCcdDbYfcdLchIchJchJchKchLchMcJuchOchPchQckLckLchFckLchSchRckLckLckLchUchYcdSchZciachdcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacfQchechfchecfQchgchhchgcfQchichjchicfQaaaaaaciicgTcgTcgUcgUcijcejchlchkchnchmchpchochGchqcicchHchHcidchHcbBbYSciebYUcifcihcigcilcikcilcimciocincinciAciAciAciAbTFciGciHciIciIciJciKciLciMciXciOciPciQciRciSciSciTciUcaIcaIcaIciVcdEckqbZybZybZybZychBchBbViciYbViciZbYfccobYfaaaaaaaaaaaaaaaaaaaaacdLcjgchVchXchWcjjcjkcJwcjmcjncjocipcjocjpcjhcjrcjscgIcjtcgIcjqcjucdScjvcjwcjxcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacfQcheciqchecfQchgcirchgcfQchicischicfQaaaaaaciicgTcgUcgUcgUcjBcjCciucitchncivcixciwciWciycjbcjacjdcjccjecbBbYScjichccjycjAcjzcjDcjDcjDcjEcjGcjFcjHceCcqZceAciAbTFciGckaciIckbckcckdcubckfckgckhctQckjckkcklciSckmciUcknckockpckIckDcdHcdGcdIcdIcdJcdIcdKbVibVibVibVibYfccobYfaaaaaaaaaaaaaaaaaaaaacdLckCckJckMckKckEcdOckFcdOckGckHclickNclPclOcgIcgIcnmckNckNcodckOcdSckPckQckRcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacfQcjIcjKcjJcfQcjLcjNcjMcfQcjOcjQcjPcfQaaaaafciiclbcgTcgUcgUcgUcejcjScjRchnchncjTchnchnchnchncjUchHcjXcjYcbBckecjZckrckickucksckzckzckzckAckBckBckTciAckWcgqclwclxciGclyciIclzclAclBclCclDclEclFclGclHclIclJciSclKciUclLclMclNcrIcqtclQclNclRclSclTbYfceQcdIcdIcdIcdIcdIckYbYfaaaaaaaaaaaaaaaaaaaaacdLcmacmbcmccmdcdOcmecmfcmgcdScmhcmicmicJLcmjcmkcmlcmmcmicmicmicmncdScmocmpcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcfQckZclcclacfQcldclcclecfQcldclcclecfQaaaaafcmzcgTcgTcgUcgUcmAcejclhclgclkcljclmcllclnclnclvcltclncmscmtcbBcmvcmucmxcmwcihcmycmycmBckBcmCcmEcmDcmDciAcibceVcmFcqgciGcnbciIcnccndcmGciGcnfciNcmHcfYcmIcnicnjciScnkciUclLclMclNcnlcrJcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfaaaaaaaaaaaacdOcdOcdOcdOcdOcdOcdOcdOcdOcnocnpcnqcdScdScnrcnscJMcdScdScdScdScnucnscntcdScdScnvcnwcnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaafaafaafaaaaafcnxaafcnxaafcKBaafcKAaafcKBaafcKAaafaafaaacejcnAcnBcgUcgUcnCcnDcmKcmJcmMcmLcmOcmNcmNcmPcmNcmQcmScmRcmQcmXcngcnecnycnhcnzcnzcnzcnzcnFcnEcnGcnGcnGcgscgscgscgscnSciGcnTcnUcnccnVcnWciGcnfciNcnXciUcnYcnZcnjcoacobciUclLclMclNcoccrKcoeclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacdOcofcogcohcwlcojcokcolcomconcJOcJNcdObqpaafaafcJPaafaaaaaaaaaaaaaaaaaaaaaaafcoscotcosaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafcnHcnJcnIcnKcnIcnJcnLcnKcnMcnNcnLcnPcnOcnRcnQcmMcmMcmMcmMcmMcmMcmMcmMcovcoucoxcowcoAcoycoCcoBcoDcmQcoFcoEcoGcmQcoIcoHcoJcnzcoLcoKcoNcoMcoPcoOcoRcoQcoQcoScoTcoTcoRbTFciGciGcpccpdciGciGciGcpeciNcpfciUciUciUcpgcphciUciUclLcpiclNcvmcrLcvmclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafcdOcplcpmcplcvlcpocppcpqcomcomcprcomcdOcdOaaaaaaaaaaafaafaaaaacaaaaaaaaaaaaaafaaacvtaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaaaaaaaafcoUcoWcoVcoYcoXcoWcoZcpbcpacpkcpjcpscpncpucptcpwcpvcpycpxcpAcpzcpCcpBcpFcpDcpJcpHcpMcpLcpOcpNcpTcpQcpVcpUcpXcpWcoIcpYcpZcnzcoPcoPcoPcoPcoPcqacoRcqbcqbcqbcoTcoTcoRbTFcrYciGcqhcqicqjcqkciGcqlciNcqmciUcqncqocqpcqqciUcqrclLcpiclNcqscsKcquclNaaaaaaaaaaaaaaaaaacqvcqwcqxcqycqvaafaaaaaaaaaaaacdOcplcplcplcoicqAcqBcqCcqDcqEcqFcqGcqHcdOaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacmZaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafcqccptcqdcqfcqecptcqzcptcqIcqJcqzcptcqIcqJcptcptcptcptcptcqKcptcptcptcpMcqMcpHcqPcqzcpLcqRcqQcqUcqScqWcqVcqYcqXcoIcpYcJrcnzcracoPcoPcrbcoPcrccoRcrdcrfcrecrfcrgcoRbTFcrqciGcrrcrscrtcrucrvcrwcrxcrycrzcrAcrBcrCcrDciUcrEcrFcrGcrHcqvcsNcqvcrHaaaaaaaafaaaaaaaaacqvcsOcvQcvncqvaafaafaaaaaaaaacdOcomcomcomcomcrMcppcrNcrNcrNcnpcrNcrOcdOaaaaaaaaaaaaaaacrPcrPcrPbZSaafaafaafaafcnaaafaafaafaafaafaaqcrPcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcoUcptcqPcptcqPcptcqzcptcrhcrjcricrjcrkcrjcrjcrmcrlcptcptcrocrncrncrncrQcrpcrRcrRcrScpLcrUcrTcrVcmQcrXcrWcrZcmQcsbcsacsdcsccsfcsecshcsgcoPcsicoRcsjcrfcskcrfcsmcoRbTFcizciGcszcsAcsBcsCciGcfYcsDcfYciUcsEcsFcsGcsHciUcsIcrGcrGcqvcsJcvWcsLcqvcqvcqvcsMcqvcqvcqvcqvctMctDctNcqvcqvcqvcrHaaaaaacdOcofcogcohcslcsRcqBcrNcrNcrNcnpcrNcsScdOaaaaaaaaaaaaaaacrPaaaaafaaaaafaaaaaaaaackxaaaaafaafaaaaaaaaaaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaacoUcptcqPcptcsncspcsocsrcsqcsscricrjcstcrjcrjcrmcsucptcptcsvcqfcsxcswcswcsycqPcqPcsTcsQcsVcsUcmNcmQcsWcmQcmQcmQcsYcsXcsdcsZctcctactectdcoPctfcoRctgcrfcskcrfcthcoRctvctwciGciGctxciGciGciGciBctzctAciUciUciUctBciUciUcsIcrGaaacqvctCcvXctEctFctGctHctIctJctKctLcqvcuVcuUcuVcqvctOctPcqvaafaafcdOcplcplcplcorcpoctRctSctTctUctVcrNctWcdOcdOcdOcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacoUcptcsncspcspcspcsocspcspcspcsocspcspcspcspcspcticspcspcsocspctjcspcspcspctlctkctmcoWcptctncttctoctZctucuccuactucudcufcuecuhcugcugcuicugcujculcukcuncumcuocuocoRcuCcuDcuEcuFcuFcuGcuHcuIcuJcuJcuJcuJcuJcuJcuJcuJcuKcrFcrGaaactFcuLcvYcuNctFcuOcuPcuQcuQcuRcvZcuQcuQcwkcuQcuVcuXcuQcqvaaaaaacdOcplcplcplcslcuYcuZcvacvbcvccvdcrNcrNcvecvfcvgcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacoUcptcptcptcptcptcqzcptcptcptcqzcptcptcptcptcptcqIcptcptcqzcptcupcptcptcuqcuscurcuucutcuvcutcuxcuwcuzcuycuAcuwcuwcuBcvhcnFcvicoPcvkcvjcoPcoPcvocrfcrfcvpcuocuocoRbPxcAscvNcvNcvNcvNcvOcvNcvNcvNcvNclMcvPcrGcrGcrGcrGcrGcrGaaactFctFcwSctFctFcvRcvScvTcvUcvVcwTcwVcwUcwXcwWcwacwbcwccqvaaaaaacdOcomcomcomcomcwdcppcvacwecwfcwgcrNcrNcwhcrNcwicdOaaaaaacrPaafcwjcwjcwjcwjcwjaaackxaaacwjcwjcwjcwjcwjaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaabZSaaaaaaaaaaaacoUcptcptcptcptcptcqzcptcptcptcqzcptcptcptcptcptcqIcptcptcqzcptcvqcptcptcvqcvqcvrcptcptcvucvscvvcvvcvvcvvcvxcvwcoIcvycvzcsccvAcoPcvBcvjcoPcvCcoRcvDcrfcvEcvGcvFcoRcwHcvMcvNcwIcwJcwKcwLcwMcwNcwOcvNcwPcwQcrGaaaaaaaaaaaaaaaaaacqvcwRcwYcxacwZcxccxbcybcxdcyXcyccBgcAdcBicBhcuWcuQcxecqvaaaaaacdOcofcogcohckXcsRcuZcxgcxhcxhcxicxjcxkcvHcxmcxncdOaaaaaacrPaaaaafaaaaafaafaafaaackxaaaaafaaaaafaaaaafaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacoUcptcptcptcptcptcvIcptcptcptcvIcptcptcptcptcptcqIcptcptcvJcqfcvLcvKcvKcvLcwmcvLcwpcwocwqcvKcwtcwscwvcwucwwcvwcoIcwxcoIcwycwzcoPcoPcwAcoPcwBcoRcwCcwCcwDcvGcvFcoRbPxcvMcvNcxKcxLcxMcxNcxOcxNcxPcvNcxQcxRcrGaaaaaaaaaaaaaaaaaacqvcxScxTcxUcxVcxWcxXcxYcxZcuTcyacuScJvcuTcJxcqvcqvcqvcqvaaaaaacdOcplcpmcplctbcpocppcrNcrNcyecyfcrNcygcomcomcomcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaaaaaaaaaaaaaaaaaaaaaaacyhaaaaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacoUcptcrocrncrncwFcwEcrncwFcrncwGcwFcrncrncrncrncxlcrncxocxqcxpcvqcptcptcxrcxtcxscxvcxucxwcptcxBcxAcxCcxCcxEcxDcoIcwxcxFcnzcxGcoPcxHcoPcxJcxIcoRcoRcoRcoRcoRcoRcoRbPxcvMcvNcyMcyNcxLcyOcxLcxNcyPcvNcyQcyRcrGaaaaaaaaaaaaaaaaaacqvcuVcySctFctFcyTcyUcyVcyWctMctDctNcJyctMcwkcyYcqvaaaaaaaaaaaacdOcplcplcplckXcyZczacrNcrNcrNcyfcrNczbcrNczccrNczdaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacoUcptcqzcptcptcptcvIcptcptcptcvIcptcptcptcptcptcqIcptcxscptcyicvqcptcptcyjcwmcykcylcvvcymcvvcvvcxAcyocyncyqcxDcoIcwxcoIcnzcyscyrcyucytcyvcoPcnzczIczJczJczKczLczMczNczOcvNcxNczPczQcxNczRczSczTcvNczUczVcrGaaaaaaaaaaaaaaaaaacqvczWcuMczXcuVczYczZcAactFcAbcAccsPcJyczWcJQcAecqvaaaaaaaaaaaackEcdOcAfcAgcAgcywcAicAjcAkcAlcAmcAncAocApcAqcokcAraaaaaacrPaafcwjcwjcwjcwjcwjaaackxaafcwjcwjcwjcwjcwjaaacrPaaacyhaaaaaacyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaacyxcptcqzcptcyycrjcricrjcyzcrjcricrjcyzcrjcrjcrjcyAcyBcyAcrmcyCcykcyDcyFcyEcyHcyGcyIcvvcyKcyJcvvcvvcvvcvvcvvcyLcngczecngcnzcnzcnzcnzcnzcnzcnzcnzcALczJczJcAMcANcAObPxcAPcvNcAQcARczfcATcAUcAVcAWcvNcAXcAYcrGaaaaaaaaaaaaaaaaaacqvcuQcAZcAectFcBacBbcBcctFcBdcBecBfcKbcKccBecBjcqvaafaafaaaaaaaaaaaabquaaacdOcBlcBmcBncBocBpcBmcBqcBrcBpcBmcBscdOaaaaaabZSaaaaafaaaaafaaaaafaaackxaaaaafaaaaafaafaafaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaaaaaaaaaaaaaamaaaaaaaaaczgcptcqzcptcxscxtcqzcptcxscxtcqzcptcxscxtcptcptcxrcptcxscxtczhczkczjczmczlczocznczpcvvczrczqcztczsczuctuczwczvctuczxctuczycuaczzczBczAczAczDczEcBVcBWcBWcBXcBYcAObPxcBZcvNcvNcCacCbcCccCbcCacCdcvNcrGcCecrGaaaaaaaaaaaaaaaaaacqvctFcCfcuVctFcCgcChcCictFcCjcCkcqycgvcKdcCncCocrHaaaaaaaaaaaaaaaaaacgwaafcdOcCqcluclUcomclsclpclqcomcloclVclWcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafczgczGczFcAhczHcAucAtcAwcAvcAycAxcAAcAzcAucptczGcABcADcACcAycAEcmMcmMcmMcmMcmMcmMcmMcmMcAHcAFcyLcAIcAJcoIcAKcoIcoIcwxcoIcoIcAScoIcAJcBtcBvcBucBxciCcCNcCOcCPcCQcAObPwcCRcCScCTcCacAGcAVcBwcCacHPcHLcHQcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaachxcKkcKecKmaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcJZaaaaaaaaaaamaaaaaaaaacBzcBBcBAcBDcBCcBFcBEcBGcBCcBFcBEcBGcBCcBFcBHcBHcBIcBGcBCcBFcBJcmMaaacBLcBKcBNcBMcBPcBOcBRcBQcBScBScBUcBTcCrcCpcCtcCscCpcCtcCrcCucCwcCvcCucyLcyLcAOcDNcDOcDPcDQcAObNUcDRcDScDTcCacCbcDUcCbcCacHTcKacDfaafaaaaaaaaaaaaaaaaaaaaacqvcCZcDVcDWcDXcDXcDWcsPcDYcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcDZcplcplcomcEacplcplcomcEacplcplcdOaaaaaacrPaafcwjcwjcwjcwjcwjaaackxaaacwjcwjcwjcwjcwjaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcClcqLcqLcqLcpEcpIcpIcpIcqLcpIcpPcpIcpGcpIcpPcpIcpGcpIcpPcpIcpGcpIcqLcpIcpRcpIcpGcpIcqNaafaaacCycCxcCAcCzcCCcCBcBRcCDcBScCEcCGcCFcCIcCHcCKcCJcCMcCLcCIcCUcDgcCVcCuaaaaafcAOcEBcECcEDaafaaabNUbPxbPxbSkcCaclZcEFclYcCaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcEHcuXcEIcEJcEJcEIcuQcEKcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcplcplcplcomcELcplcplcomcELcplcplcdOaacaaacrPaaaaaaaafaafaafaaaaaacmTaafaaaaaaaafaafaaaaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaaaaaaaaqaaaaaaaaaaafcfQcldclccDjcfQcldclccDjcfQcldclccDkcfQaaacfQcDlclccDkcfQaaaaafaaacCycEdcDocDncDmcDpcDrcDqcBScDscDucDtcCIcDvcDxcDwcDzcDycCIcDAcDCcDBcCuaaaaaacAOcFgcFhcFiaaaaaabNUbPxbPxbNUcCacmUcmUcmUcCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcFmcFncuQcuQcuQcuQcuQcFocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackEcdOcdOcdOcdOcdOcdOcdOcdOcmYcmYcmYckEaaaaaacrPcrPcrPcrPcrPaaaaaaaaacmZaaaaaaaaacrPcrPcrPbZScrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 6aba01a5c6f94d2058b4a4a4ab675c19444720b1 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 20 Feb 2015 20:41:36 -0500 Subject: [PATCH 65/90] Fixes merc base area, adds 1 module-less hardsuit to the merc base --- maps/exodus-2.dmm | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm index 50beedb964..8323423808 100644 --- a/maps/exodus-2.dmm +++ b/maps/exodus-2.dmm @@ -2080,6 +2080,7 @@ "NZ" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) "Oa" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "Ob" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"Oc" = (/obj/structure/table/rack,/obj/item/weapon/rig/merc/empty,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) (1,1,1) = {" aaabacadaeafagahaaaiajakalamanaoagafajacadahakaeamaiaoalahajeEapaqarasatauavawaxayazaAaBaCaDaEaFaGaHaIaJaKawaxayazaAaBaCaDaEaFaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaQ @@ -2186,19 +2187,19 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHofnRnRognRnRohnHaMndneneneneneneriihihihihihihbPkQbTihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMomnHonnHnHnHnHnHooaMnTnananUihkdkdkdihkTkTnVnWihcikQmkihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoGoyoaounFnHaMaMaMaMaMaMobkdkdkdoclalaododihcikQnGihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoBoAoanRornHaMaMaMaMaMaMoikdkdkdihojlaihihihokolokihihihdCmumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHoBoyoanRornHnzaMaMmPmKoFihkdkdkdihihihihnOnOkQkQkQnPnPOaihdCmumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHnHnHnHvLoyoanRornHnHnHnHnzototihkdkdkdkdihnYnXkQkQkQkQkQkQkQkQkQdCmumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHpioXoYnHnRoHnRoJnHnHoZoOpbrTkRpnkRkdkdkdkdoCkQkQkQkQkQoDkQkQkQkQoxdCmumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMphoWpjoWnHnHnHpknHnHpJoZplpmrTkRpLkRkdkdkdkdihoqopkQkQkQkQkQkQkQkQoMdCmumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMnHnHphpxnHnHnRnRpynHnHpzpApznHoIoIihoPnanUihihihihowovkQkQkQozozoeihdCmumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHMOnRnRpHnHnRnRnRnHrbpKrdpInHmBaMmBaMaMaMaMmumuihihihokpcokihihihdCmumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoBoAoanRornHaMaMaMaMaMaMoikdkdkdihojlaihihihokolokihihihihmumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHoBoyoanRornHnzaMaMmPmKoFihkdkdkdihihihihnOnOkQkQkQnPnPOaihihmumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHnHnHnHvLoyoanRornHnHnHnHnzototihkdkdkdkdihnYnXkQkQkQkQkQkQkQkQObihmumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHpioXoYnHnRoHnRoJnHnHoZoOpbrTkRpnkRkdkdkdkdoCkQkQkQkQkQoDkQkQkQkQoxihmumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMphoWpjoWnHnHnHpknHnHpJoZplpmrTkRpLkRkdkdkdkdihoqopkQkQkQkQkQkQkQkQoMihmumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMnHnHphpxnHnHnRnRpynHnHpzpApznHoIoIihoPnanUihihihihowovkQkQkQozozoeihihmumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHMOnRnRpHnHnRnRnRnHrbpKrdpInHmBaMmBaMaMaMaMmumuihihihokpcokihihihihmumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVpdpepepepepfpfpepepepepgoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqanRnRnRqbnRnRnRqcnRnRnRqdnHmKmKmKmKaMaMaMaMmumumuihoEkQoEihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVpdpppqprpspeptpupepvpwpepepepgoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMnHqCnRnRnRqDnRnRnRqEnRnRnRqFnHaMaMaMaMaMaMaMaMaMmumuihoEkQoEihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpdpepBpBpBpBpepCpCpepBpBpDpEpepepgoVpFpFpFpFpFaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnvnHnHnHnHnHnHnRnRnRnHnHnHnHnHnHnzaMaMaMaMaMmAaMmBmumuihoEkQoEihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpepepMpNpOpPpepBpBpQpBpBpBpBpRpSpeoVpFpTpUpVpFpFpFpFpFpWpXpXpYpFpFaMaMaMaMaMaMaMaMpZpZpZpZpZpZpZpZpZpZpZaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqZrasercsvnHrenRnRnHrfrfrfrgrgnHaMaMaMaMaMmAmBmumumuihoEkQoEihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfqgpBqhqhqhpepBpBpeqiqjqkqlqmqnpeoVpFqopUpUqpqqqrqsqtquqsqvqwqxpFpFpFpFpFpFpFpFpFpFqyqzqzqzqzqzqzqzqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMnxrjrjrjrjrjnHnRnRnRnHrenRnRnRrknwaMaMaMaMaMmPaMmumumuihihObihihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqGqfpBpBpBpBpBpQpBpBpepepepepepepeqHqIpFpFpFpFpFqqqvqsqJqKqsqvqvqvqLqMqMqMqMqMqMqMqMqNqyqOqPqPqPqPqPqQqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMnhrCrDrjrjrjrEnRnRnRrFnRnRnRrGrHmiaMaMaMaMaMmAmBmBmumumudCdCdCmumumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfqgpBqhqhqhpepBpBpeqiqjqkqlqmqnpeoVpFqopUpUqpqqqrqsqtquqsqvqwqxpFpFpFpFpFpFpFpFpFpFqyqzqzqzqzqzqzqzqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMnxrjrjrjrjrjnHnRnRnRnHrenRnRnRrknwaMaMaMaMaMmPaMmumumuihihOcihihmumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqGqfpBpBpBpBpBpQpBpBpepepepepepepeqHqIpFpFpFpFpFqqqvqsqJqKqsqvqvqvqLqMqMqMqMqMqMqMqMqNqyqOqPqPqPqPqPqQqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMnhrCrDrjrjrjrEnRnRnRrFnRnRnRrGrHmiaMaMaMaMaMmAmBmBmumumuihihihmumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqRpeqSpBqSpBqSpepBpBpBqTqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqvqvqLqMqMqMqMqMqMqMqMqNqyqXqYqYqYqYqYqXqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnyrjrjrjrjrjrQnRnRnRrRnRnRnRnRrSnBaMaMaMaMaMmAaMaMmBmumumumumumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpepepepepepepepBpBrhpBqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqqqqpFpFpFpFpFpFpFpFpFpZqyqXqYqYqYqYqYqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsbrjrjrjscnHpzsdpznHoKoKsInRsfnHaMaMaMaMaMaMaMaMaMmumumumumumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpermrnrormrppepBpBpBrqqUoVoVoVoVoVoVpFpFpFpFpFqvqvqsqJquqsqvrrrspFrtrururvpFrwrxrypZqzqXqYqYqYqYrzrApZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHspsqsrssstnHsunRvUnHyCnHnHnNnHnHaMaMaMaMaMaMaMmAaMmBmumumumumumumumumumumumumumumu From 0b2ca42600fb2b46b195b567871c0d7ad7cfe347 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 21 Feb 2015 20:56:55 +1030 Subject: [PATCH 66/90] Tweaks. --- code/modules/hydroponics/seed_controller.dm | 3 +++ code/modules/hydroponics/seed_storage.dm | 15 ++++----------- code/modules/hydroponics/spreading/spreading.dm | 9 ++++++--- .../hydroponics/spreading/spreading_growth.dm | 3 +-- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/code/modules/hydroponics/seed_controller.dm b/code/modules/hydroponics/seed_controller.dm index d41794e546..aff41c8253 100644 --- a/code/modules/hydroponics/seed_controller.dm +++ b/code/modules/hydroponics/seed_controller.dm @@ -144,3 +144,6 @@ var/global/datum/controller/plants/plant_controller // Set in New(). /datum/controller/plants/proc/add_plant(var/obj/effect/plant/plant) plant_queue |= plant + +/datum/controller/plants/proc/remove_plant(var/obj/effect/plant/plant) + plant_queue -= plant diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index 90a5d2d403..f111a6ebb9 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -34,7 +34,7 @@ /obj/machinery/seed_storage/random // This is mostly for testing, but I guess admins could spawn it name = "Random seed storage" - scanner = list("stats", "produce", "soil", "temperature", "light", "mutants") + scanner = list("stats", "produce", "soil", "temperature", "light") starting_seeds = list(/obj/item/seeds/random = 50) /obj/machinery/seed_storage/garden @@ -44,7 +44,7 @@ /obj/machinery/seed_storage/xenobotany name = "Xenobotany seed storage" - scanner = list("stats", "produce", "soil", "temperature", "light", "mutants") + scanner = list("stats", "produce", "soil", "temperature", "light") starting_seeds = list(/obj/item/seeds/ambrosiavulgarisseed = 3, /obj/item/seeds/appleseed = 3, /obj/item/seeds/amanitamycelium = 2, /obj/item/seeds/bananaseed = 3, /obj/item/seeds/berryseed = 3, /obj/item/seeds/cabbageseed = 3, /obj/item/seeds/carrotseed = 3, /obj/item/seeds/chantermycelium = 3, /obj/item/seeds/cherryseed = 3, /obj/item/seeds/chiliseed = 3, /obj/item/seeds/cocoapodseed = 3, /obj/item/seeds/cornseed = 3, /obj/item/seeds/replicapod = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/glowshroom = 2, /obj/item/seeds/grapeseed = 3, /obj/item/seeds/grassseed = 3, /obj/item/seeds/lemonseed = 3, /obj/item/seeds/libertymycelium = 2, /obj/item/seeds/limeseed = 3, /obj/item/seeds/mtearseed = 2, /obj/item/seeds/nettleseed = 2, /obj/item/seeds/orangeseed = 3, /obj/item/seeds/peanutseed = 3, /obj/item/seeds/plastiseed = 3, /obj/item/seeds/plumpmycelium = 3, /obj/item/seeds/poppyseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/pumpkinseed = 3, /obj/item/seeds/reishimycelium = 2, /obj/item/seeds/riceseed = 3, /obj/item/seeds/soyaseed = 3, /obj/item/seeds/sugarcaneseed = 3, /obj/item/seeds/sunflowerseed = 3, /obj/item/seeds/shandseed = 2, /obj/item/seeds/tobaccoseed = 3, /obj/item/seeds/tomatoseed = 3, /obj/item/seeds/towermycelium = 3, /obj/item/seeds/watermelonseed = 3, /obj/item/seeds/wheatseed = 3, /obj/item/seeds/whitebeetseed = 3) /obj/machinery/seed_storage/attack_hand(mob/user as mob) @@ -72,7 +72,7 @@ dat += "

NameVarietyEYLMPrPtHarvestProduceTemp
[S.name][seed.seed_name]#[seed.uid][seed.endurance][seed.yield][seed.lifespan][seed.maturation][seed.production][seed.potency][seed.get_trait(TRAIT_ENDURANCE)][seed.get_trait(TRAIT_YIELD)][seed.get_trait(TRAIT_MATURATION)][seed.get_trait(TRAIT_PRODUCTION)][seed.get_trait(TRAIT_POTENCY)]MultipleSingleFruit: [seed.products.len]N/A[seed.ideal_heat] K[seed.get_trait(TRAIT_IDEAL_HEAT)] K[seed.ideal_light] L[seed.get_trait(TRAIT_IDEAL_LIGHT)] LLowHighNormNoLowHighNorm[S.amount]Vend Purge
" dat += "" if ("stats" in scanner) - dat += "" + dat += "" if ("temperature" in scanner) dat += "" if ("light" in scanner) @@ -81,7 +81,7 @@ dat += "" dat += "" for (var/datum/seed_pile/S in piles) - var/datum/seed/seed = plant_controller.seeds[S.seed_type] + var/datum/seed/seed = S.seed_type if(!seed) continue dat += "" @@ -118,13 +118,6 @@ dat += "" dat += "
NameVarietyEYLMPrPtHarvestEYMPrPtHarvestTempNutriWaterNotesAmount
No" - if ("mutants" in scanner) - if(seed.mutants && seed.mutants.len) - dat += "SUBSP " - if(seed.get_trait(TRAIT_IMMUTABLE) == -1) - dat += "MUT " - else if(seed.get_trait(TRAIT_IMMUTABLE) > 0) - dat += "NOMUT " switch(seed.get_trait(TRAIT_CARNIVOROUS)) if(1) dat += "CARN " diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index 45fcd0d721..6fae4283b3 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -60,6 +60,10 @@ var/last_tick = 0 var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant +/obj/effect/plant/Del() + if(plant_controller) + plant_controller.remove_plant(src) + ..() /obj/effect/plant/single spread_chance = 0 @@ -218,9 +222,8 @@ if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel)) if(!seed) - user << "There is nothing to take a sample from in \the [src]." + user << "There is nothing to take a sample from." return - // Create a sample. seed.harvest(user,0,1) health -= (rand(3,5)*10) else @@ -250,4 +253,4 @@ die_off() /obj/effect/plant/proc/is_mature() - return (health < (max_health/3)) \ No newline at end of file + return (health >= (max_health/3)) \ No newline at end of file diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm index e671663eba..63db3e6799 100644 --- a/code/modules/hydroponics/spreading/spreading_growth.dm +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -56,8 +56,7 @@ last_tick = world.time update_neighbors() - if(neighbors.len && prob(spread_chance)) - + if(is_mature() && neighbors.len && prob(spread_chance)) for(var/i=1,i<=seed.get_trait(TRAIT_YIELD),i++) if(prob(spread_chance)) sleep(rand(3,5)) From 9ad9f19a0ba7d65ccad4855f8a81252bb852f867 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 21 Feb 2015 21:51:21 +1030 Subject: [PATCH 67/90] Transitioning back to using flour as a reagent. Sorry RKF. --- code/game/machinery/kitchen/processor.dm | 20 +- code/modules/food/recipes_microwave.dm | 202 +++++------------- code/modules/hydroponics/grown.dm | 49 +++-- code/modules/reagents/Chemistry-Reagents.dm | 13 +- code/modules/reagents/Chemistry-Recipes.dm | 20 ++ .../reagent_containers/food/drinks.dm | 14 -- .../reagent_containers/food/snacks.dm | 88 ++++---- .../reagent_containers/food/snacks/meat.dm | 2 +- 8 files changed, 165 insertions(+), 243 deletions(-) diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm index 3f33d4d862..7ed0e65959 100644 --- a/code/game/machinery/kitchen/processor.dm +++ b/code/game/machinery/kitchen/processor.dm @@ -28,26 +28,8 @@ input = /obj/item/weapon/reagent_containers/food/snacks/meat output = /obj/item/weapon/reagent_containers/food/snacks/meatball - /* - potato - input = /obj/item/weapon/reagent_containers/food/snacks/grown/potato - output = /obj/item/weapon/reagent_containers/food/snacks/rawsticks - - carrot - input = /obj/item/weapon/reagent_containers/food/snacks/grown/carrot - output = /obj/item/weapon/reagent_containers/food/snacks/carrotfries - - soybeans - input = /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans - output = /obj/item/weapon/reagent_containers/food/snacks/soydope - - wheat - input = /obj/item/weapon/reagent_containers/food/snacks/grown/wheat - output = /obj/item/weapon/reagent_containers/food/snacks/flour - */ - spaghetti - input = /obj/item/weapon/reagent_containers/food/snacks/flour + input = /obj/item/weapon/reagent_containers/food/snacks/dough output = /obj/item/weapon/reagent_containers/food/snacks/spagetti /* mobs */ diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index eb77cc7589..ae45d1a76a 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -97,7 +97,7 @@ I said no! /datum/recipe/roburger items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, + /obj/item/weapon/reagent_containers/food/snacks/bun, /obj/item/robot_parts/head ) result = /obj/item/weapon/reagent_containers/food/snacks/roburger @@ -262,53 +262,17 @@ I said no! /datum/recipe/soylenviridians fruit = list("soybeans" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour - ) + reagents = list("flour" = 10) result = /obj/item/weapon/reagent_containers/food/snacks/soylenviridians /datum/recipe/soylentgreen + reagents = list("flour" = 10) items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/meat/human, /obj/item/weapon/reagent_containers/food/snacks/meat/human, + /obj/item/weapon/reagent_containers/food/snacks/meat/human ) result = /obj/item/weapon/reagent_containers/food/snacks/soylentgreen -/datum/recipe/carrotcake - fruit = list("carrot" = 3) - reagents = list("milk" = 5, "sugar" = 15) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake - -/datum/recipe/cheesecake - reagents = list("milk" = 5, "sugar" = 15) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake - -/datum/recipe/plaincake - reagents = list("milk" = 5, "sugar" = 15) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake - /datum/recipe/meatpie items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, @@ -610,9 +574,8 @@ I said no! /datum/recipe/creamcheesebread items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, ) @@ -620,9 +583,8 @@ I said no! /datum/recipe/monkeysdelight fruit = list("banana" = 1) - reagents = list("sodiumchloride" = 1, "blackpepper" = 1) + reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "flour" = 10) items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, /obj/item/weapon/reagent_containers/food/snacks/monkeycube ) result = /obj/item/weapon/reagent_containers/food/snacks/monkeysdelight @@ -642,16 +604,6 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/fishandchips -/datum/recipe/birthdaycake - reagents = list("milk" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/clothing/head/cakehat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake - /datum/recipe/bread items = list( /obj/item/weapon/reagent_containers/food/snacks/dough, @@ -807,16 +759,6 @@ I said no! items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) result = /obj/item/weapon/reagent_containers/food/snacks/applepie -/datum/recipe/applecake - fruit = list("apple" = 2) - reagents = list("milk" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake - /datum/recipe/slimeburger reagents = list("slimejelly" = 5) items = list( @@ -855,59 +797,6 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry -/datum/recipe/orangecake - fruit = list("orange" = 2) - reagents = list("milk" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake - -/datum/recipe/limecake - fruit = list("lime" = 2) - reagents = list("milk" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake - -/datum/recipe/lemoncake - fruit = list("lemon" = 2) - reagents = list("milk" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake - -/datum/recipe/chocolatecake - reagents = list("milk" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, - /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake - /datum/recipe/bloodsoup reagents = list("blood" = 30) result = /obj/item/weapon/reagent_containers/food/snacks/bloodsoup @@ -924,19 +813,6 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/boiledslimecore -/datum/recipe/braincake - reagents = list("milk" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/organ/brain - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake - /datum/recipe/chocolateegg items = list( /obj/item/weapon/reagent_containers/food/snacks/egg, @@ -952,9 +828,8 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/sausage /datum/recipe/fishfingers + reagents = list("flour" = 10) items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, /obj/item/weapon/reagent_containers/food/snacks/egg, /obj/item/weapon/reagent_containers/food/snacks/carpmeat, ) @@ -972,17 +847,12 @@ I said no! /datum/recipe/pumpkinpie fruit = list("pumpkin" = 1) - reagents = list("milk" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/egg - ) + reagents = list("milk" = 5, "sugar" = 5, "egg" = 3, "flour" = 10) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie /datum/recipe/plumphelmetbiscuit fruit = list("plumphelmet" = 1) - reagents = list("water" = 5) - items = list(/obj/item/weapon/reagent_containers/food/snacks/flour) + reagents = list("water" = 5, "flour" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit /datum/recipe/mushroomsoup @@ -1006,11 +876,8 @@ I said no! /datum/recipe/appletart fruit = list("goldapple" = 1) - reagents = list("sugar" = 5, "milk" = 5) + reagents = list("sugar" = 5, "milk" = 5, "flour" = 10) items = list( - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, /obj/item/weapon/reagent_containers/food/snacks/egg ) result = /obj/item/weapon/reagent_containers/food/snacks/appletart @@ -1108,3 +975,50 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/mint +// Cakes. +/datum/recipe/cake + reagents = list("milk" = 5, "flour" = 15, "sugar" = 15) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake + +/datum/recipe/cake/carrot + fruit = list("carrot" = 3) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake + +/datum/recipe/cake/cheese + items = list( + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake + +/datum/recipe/cake/orange + fruit = list("orange" = 1) + reagents = list("milk" = 5, "flour" = 15, "egg" = 9, "orangejuice" = 3, "sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake + +/datum/recipe/cake/lime + fruit = list("lime" = 1) + reagents = list("milk" = 5, "flour" = 15, "egg" = 9, "limejuice" = 3, "sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake + +/datum/recipe/cake/lemon + fruit = list("lemon" = 1) + reagents = list("milk" = 5, "flour" = 15, "egg" = 9, "lemonjuice" = 3, "sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake + +/datum/recipe/cake/chocolate + items = list(/obj/item/weapon/reagent_containers/food/snacks/chocolatebar) + reagents = list("milk" = 5, "flour" = 15, "egg" = 9, "coco" = 4, "sugar" = 15) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake + +/datum/recipe/cake/birthday + items = list(/obj/item/clothing/head/cakehat) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake + +/datum/recipe/cake/apple + fruit = list("apple" = 2) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake + +/datum/recipe/cake/brain + items = list(/obj/item/organ/brain) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake \ No newline at end of file diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index b893c6dec8..ba6f040060 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -184,27 +184,42 @@ pocell.charge = pocell.maxcharge del(src) return - else if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy)) - if(seed.chems && !isnull(seed.chems["woodpulp"])) - user.show_message("You make planks out of \the [src]!", 1) - for(var/i=0,i<2,i++) - var/obj/item/stack/sheet/wood/NG = new (user.loc) - NG.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) - for (var/obj/item/stack/sheet/wood/G in user.loc) - if(G==NG) - continue - if(G.amount>=G.max_amount) - continue - G.attackby(NG, user) - user << "You add the newly-formed wood to the stack. It now contains [NG.amount] planks." - del(src) - return - else if(seed.kitchen_tag == "pumpkin") // Ugggh these checks are awful. + else if(W.sharp) + if(seed.kitchen_tag == "pumpkin") // Ugggh these checks are awful. user.show_message("You carve a face into [src]!", 1) new /obj/item/clothing/head/pumpkinhead (user.loc) del(src) return - + else if(seed.chems) + if(istype(W,/obj/item/weapon/hatchet) && !isnull(seed.chems["woodpulp"])) + user.show_message("You make planks out of \the [src]!", 1) + for(var/i=0,i<2,i++) + var/obj/item/stack/sheet/wood/NG = new (user.loc) + NG.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) + for (var/obj/item/stack/sheet/wood/G in user.loc) + if(G==NG) + continue + if(G.amount>=G.max_amount) + continue + G.attackby(NG, user) + user << "You add the newly-formed wood to the stack. It now contains [NG.amount] planks." + del(src) + return + else if(!isnull(seed.chems["potato"])) + user << "You slice \the [src] into sticks." + new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src)) + del(src) + return + else if(!isnull(seed.chems["carrotjuice"])) + user << "You slice \the [src] into sticks." + new /obj/item/weapon/reagent_containers/food/snacks/carrotfries(get_turf(src)) + del(src) + return + else if(!isnull(seed.chems["soymilk"])) + user << "You roughly chop up \the [src]." + new /obj/item/weapon/reagent_containers/food/snacks/soydope(get_turf(src)) + del(src) + return ..() /obj/item/weapon/reagent_containers/food/snacks/grown/attack(var/mob/living/carbon/M, var/mob/user, var/def_zone) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index aba8573ded..3ad7f31f97 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -2135,6 +2135,17 @@ datum M.nutrition -= nutriment_factor ..() + nutriment/egg // Also bad for skrell. Not a child of protein because it might mess up, not sure. + name = "egg yolk" + id = "egg" + color = "#FFFFAA" + + on_mob_life(var/mob/living/M, var/alien) + if(alien && alien == IS_SKRELL) + M.adjustToxLoss(0.5) + M.nutrition -= nutriment_factor + ..() + lipozine name = "Lipozine" // The anti-nutriment. id = "lipozine" @@ -2520,7 +2531,6 @@ datum ..() return -/* We're back to flour bags flour name = "flour" id = "flour" @@ -2538,7 +2548,6 @@ datum src = null if(!istype(T, /turf/space)) new /obj/effect/decal/cleanable/flour(T) -*/ rice name = "Rice" diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index ff3c61f94f..b6eccb7548 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -1612,6 +1612,26 @@ datum new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location) return + meatball + name = "Meatball" + id = "meatball" + result = null + required_reagents = list("protein" = 9, "flour" = 5) + result_amount = 3 + on_reaction(var/datum/reagents/holder, var/created_volume) + new /obj/item/weapon/reagent_containers/food/snacks/meatball(get_turf(holder.my_atom)) + return + + dough + name = "Dough" + id = "dough" + result = null + required_reagents = list("egg" = 3, "flour" = 10) + result_amount = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + new /obj/item/weapon/reagent_containers/food/snacks/dough(get_turf(holder.my_atom)) + return + syntiflesh name = "Syntiflesh" id = "syntiflesh" diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index ceabea1e50..1b2e4646d9 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -173,20 +173,6 @@ ..() reagents.add_reagent("milk", 50) -/* Flour is no longer a reagent -/obj/item/weapon/reagent_containers/food/drinks/flour - name = "flour sack" - desc = "A big bag of flour. Good for baking!" - icon = 'icons/obj/food.dmi' - icon_state = "flour" - item_state = "flour" - New() - ..() - reagents.add_reagent("flour", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) -*/ - /obj/item/weapon/reagent_containers/food/drinks/soymilk name = "SoyMilk" desc = "It's soy milk. White and nutritious goodness!" diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 015f051c27..6775995199 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -467,31 +467,41 @@ icon_state = "egg" filling_color = "#FDFFD1" - New() +/obj/item/weapon/reagent_containers/food/snacks/egg/New() + ..() + reagents.add_reagent("egg", 3) + +/obj/item/weapon/reagent_containers/food/snacks/egg/afterattack(obj/O as obj, mob/user as mob, proximity) + if(istype(O,/obj/machinery/microwave)) + return ..() + if(!(proximity && O.is_open_container())) + return + user << "You crack \the [src] into \the [O]." + reagents.trans_to(O, reagents.total_volume) + user.drop_from_inventory(src) + del(src) + +/obj/item/weapon/reagent_containers/food/snacks/throw_impact(atom/hit_atom) + ..() + new/obj/effect/decal/cleanable/egg_smudge(src.loc) + src.reagents.reaction(hit_atom, TOUCH) + src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.") + del(src) + +/obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype( W, /obj/item/toy/crayon )) + var/obj/item/toy/crayon/C = W + var/clr = C.colourName + + if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow"))) + usr << "\blue The egg refuses to take on this color!" + return + + usr << "\blue You color \the [src] [clr]" + icon_state = "egg-[clr]" + item_color = clr + else ..() - reagents.add_reagent("protein", 2) - - throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/egg_smudge(src.loc) - src.reagents.reaction(hit_atom, TOUCH) - src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.") - del(src) - - attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype( W, /obj/item/toy/crayon )) - var/obj/item/toy/crayon/C = W - var/clr = C.colourName - - if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow"))) - usr << "\blue The egg refuses to take on this color!" - return - - usr << "\blue You color \the [src] [clr]" - icon_state = "egg-[clr]" - item_color = clr - else - ..() /obj/item/weapon/reagent_containers/food/snacks/egg/blue icon_state = "egg-blue" @@ -549,15 +559,18 @@ reagents.add_reagent("protein", 2) /obj/item/weapon/reagent_containers/food/snacks/flour - name = "flour" - desc = "A small bag filled with some flour." + name = "flour sack" + desc = "A big bag of flour. Good for baking!" + icon = 'icons/obj/food.dmi' icon_state = "flour" + item_state = "flour" New() ..() - reagents.add_reagent("nutriment", 1) + reagents.add_reagent("flour", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/snacks/organ - name = "organ" desc = "It's good for you." icon = 'icons/obj/surgery.dmi' @@ -2805,23 +2818,6 @@ /////////////////////////////////////////// // new old food stuff from bs12 /////////////////////////////////////////// - -// Flour + egg = dough -/obj/item/weapon/reagent_containers/food/snacks/flour/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/egg)) - new /obj/item/weapon/reagent_containers/food/snacks/dough(src) - user << "You make some dough." - del(W) - del(src) - -// Egg + flour = dough -/obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/flour)) - new /obj/item/weapon/reagent_containers/food/snacks/dough(src) - user << "You make some dough." - del(W) - del(src) - /obj/item/weapon/reagent_containers/food/snacks/dough name = "dough" desc = "A piece of dough." @@ -3029,4 +3025,4 @@ New() ..() reagents.add_reagent("nutriment", 10) - bitesize = 3 + bitesize = 3 diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm index efd73c3a4e..d703a6acb7 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/meat.dm @@ -6,7 +6,7 @@ filling_color = "#FF1C1C" New() ..() - reagents.add_reagent("nutriment", 3) + reagents.add_reagent("protein", 9) src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob) From 14f8e3beacab23b85d8d39cfe665ecffc50b8963 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 21 Feb 2015 22:21:27 +1030 Subject: [PATCH 68/90] Numerous kitchen changes in tandem with prior commit. Removed processor. --- baystation12.dme | 1 - code/game/machinery/kitchen/processor.dm | 132 ------------------ .../mob/living/carbon/metroid/items.dm | 5 +- code/modules/reagents/Chemistry-Recipes.dm | 2 +- .../reagent_containers/food/snacks.dm | 2 + .../reagents/reagent_containers/glass.dm | 6 - maps/exodus-1.dmm | 2 +- maps/exodus-2.dmm | 7 +- 8 files changed, 10 insertions(+), 147 deletions(-) delete mode 100644 code/game/machinery/kitchen/processor.dm diff --git a/baystation12.dme b/baystation12.dme index 4262461df0..245e4fb7ad 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -451,7 +451,6 @@ #include "code\game\machinery\embedded_controller\simple_docking_controller.dm" #include "code\game\machinery\kitchen\gibber.dm" #include "code\game\machinery\kitchen\microwave.dm" -#include "code\game\machinery\kitchen\processor.dm" #include "code\game\machinery\kitchen\smartfridge.dm" #include "code\game\machinery\pipe\construction.dm" #include "code\game\machinery\pipe\pipe_dispenser.dm" diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm deleted file mode 100644 index 7ed0e65959..0000000000 --- a/code/game/machinery/kitchen/processor.dm +++ /dev/null @@ -1,132 +0,0 @@ -/obj/machinery/processor - name = "Food Processor" - icon = 'icons/obj/kitchen.dmi' - icon_state = "processor" - layer = 2.9 - density = 1 - anchored = 1 - var/broken = 0 - var/processing = 0 - use_power = 1 - idle_power_usage = 5 - active_power_usage = 50 - - - -/datum/food_processor_process - var/input - var/output - var/time = 40 - proc/process(loc, what) - if (src.output && loc) - new src.output(loc) - if (what) - del(what) - - /* objs */ - meat - input = /obj/item/weapon/reagent_containers/food/snacks/meat - output = /obj/item/weapon/reagent_containers/food/snacks/meatball - - spaghetti - input = /obj/item/weapon/reagent_containers/food/snacks/dough - output = /obj/item/weapon/reagent_containers/food/snacks/spagetti - - /* mobs */ - mob - process(loc, what) - ..() - - - slime - input = /mob/living/carbon/slime - output = /obj/item/weapon/reagent_containers/glass/beaker/slime - - monkey - process(loc, what) - var/mob/living/carbon/monkey/O = what - if (O.client) //grief-proof - O.loc = loc - O.visible_message("\blue Suddenly [O] jumps out from the processor!", \ - "You jump out from the processor", \ - "You hear chimp") - return - var/obj/item/weapon/reagent_containers/glass/bucket/bucket_of_blood = new(loc) - var/datum/reagent/blood/B = new() - B.holder = bucket_of_blood - B.volume = 70 - //set reagent data - B.data["donor"] = O - - for(var/datum/disease/D in O.viruses) - if(D.spread_type != SPECIAL) - B.data["viruses"] += D.Copy() - - B.data["blood_DNA"] = copytext(O.dna.unique_enzymes,1,0) - if(O.resistances&&O.resistances.len) - B.data["resistances"] = O.resistances.Copy() - bucket_of_blood.reagents.reagent_list += B - bucket_of_blood.reagents.update_total() - bucket_of_blood.on_reagent_change() - //bucket_of_blood.reagents.handle_reactions() //blood doesn't react - ..() - - input = /mob/living/carbon/monkey - output = null - -/obj/machinery/processor/proc/select_recipe(var/X) - for (var/Type in typesof(/datum/food_processor_process) - /datum/food_processor_process - /datum/food_processor_process/mob) - var/datum/food_processor_process/P = new Type() - if (!istype(X, P.input)) - continue - return P - return 0 - -/obj/machinery/processor/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(src.processing) - user << "\red The processor is in the process of processing." - return 1 - if(src.contents.len > 0) //TODO: several items at once? several different items? - user << "\red Something is already in the processing chamber." - return 1 - var/what = O - if (istype(O, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = O - what = G.affecting - - var/datum/food_processor_process/P = select_recipe(what) - if (!P) - user << "\red That probably won't blend." - return 1 - user.visible_message("[user] put [what] into [src].", \ - "You put the [what] into [src].") - user.drop_item() - what:loc = src - return - -/obj/machinery/processor/attack_hand(var/mob/user as mob) - if (src.stat != 0) //NOPOWER etc - return - if(src.processing) - user << "\red The processor is in the process of processing." - return 1 - if(src.contents.len == 0) - user << "\red The processor is empty." - return 1 - for(var/O in src.contents) - var/datum/food_processor_process/P = select_recipe(O) - if (!P) - log_admin("DEBUG: [O] in processor havent suitable recipe. How do you put it in?") //-rastaf0 - continue - src.processing = 1 - user.visible_message("\blue [user] turns on \a [src].", \ - "You turn on \a [src].", \ - "You hear a food processor.") - playsound(src.loc, 'sound/machines/blender.ogg', 50, 1) - use_power(500) - sleep(P.time) - P.process(src.loc, O) - src.processing = 0 - src.visible_message("\blue \the [src] finished processing.", \ - "You hear the food processor stopping/") - diff --git a/code/modules/mob/living/carbon/metroid/items.dm b/code/modules/mob/living/carbon/metroid/items.dm index 4c7aed74f4..bce1679472 100644 --- a/code/modules/mob/living/carbon/metroid/items.dm +++ b/code/modules/mob/living/carbon/metroid/items.dm @@ -26,8 +26,9 @@ del(O) /obj/item/slime_extract/New() - ..() - create_reagents(100) + ..() + create_reagents(100) + reagents.add_reagent("slimejelly", 30) /obj/item/slime_extract/grey name = "grey slime extract" diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index b6eccb7548..fc8c129140 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -1616,7 +1616,7 @@ datum name = "Meatball" id = "meatball" result = null - required_reagents = list("protein" = 9, "flour" = 5) + required_reagents = list("protein" = 3, "flour" = 5) result_amount = 3 on_reaction(var/datum/reagents/holder, var/created_volume) new /obj/item/weapon/reagent_containers/food/snacks/meatball(get_turf(holder.my_atom)) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 6775995199..df5a1f0dbf 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -2854,6 +2854,8 @@ desc = "A building block of an impressive dish." icon = 'icons/obj/food_ingredients.dmi' icon_state = "doughslice" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/spagetti + slices_num = 1 bitesize = 2 New() ..() diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index ec060a4fe9..d49f8d1d2a 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -253,12 +253,6 @@ reagents.add_reagent("sacid", 60) update_icon() -/obj/item/weapon/reagent_containers/glass/beaker/slime - New() - ..() - reagents.add_reagent("slimejelly", 60) - update_icon() - /obj/item/weapon/reagent_containers/glass/bucket desc = "It's a bucket." name = "bucket" diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index c36d54f00b..2754a2e689 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -2671,7 +2671,7 @@ "aZs" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "aZt" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "aZu" = (/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) -"aZv" = (/obj/machinery/processor,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"aZv" = (/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "aZw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hydroponics/garden) "aZx" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/grass,/area/hydroponics/garden) "aZy" = (/obj/structure/flora/ausbushes/brflowers,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/grass,/area/hydroponics/garden) diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm index 7597771653..6fc4d4feba 100644 --- a/maps/exodus-2.dmm +++ b/maps/exodus-2.dmm @@ -948,7 +948,7 @@ "sl" = (/obj/machinery/door/airlock/centcom{name = "Commander Quarters"; opacity = 1; req_access_txt = "109"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living) "sm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/living) "sn" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/button/flasher{id = "syndieflash"; name = "Flasher"; pixel_x = 27; pixel_y = 0; tag = "permflash"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"so" = (/obj/structure/table,/obj/machinery/processor{pixel_x = 0; pixel_y = 10},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living) +"so" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac) "sp" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "sq" = (/obj/machinery/door/window{dir = 1; name = "Surgery"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "sr" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) @@ -1269,7 +1269,6 @@ "yu" = (/turf/unsimulated/wall,/area/centcom/evac) "yv" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac) "yw" = (/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac) -"yx" = (/obj/structure/table,/obj/machinery/processor{pixel_x = 0; pixel_y = 10},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac) "yy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor,/area/centcom/control) "yz" = (/obj/machinery/chem_dispenser/meds,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "yA" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) @@ -2202,7 +2201,7 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpermrnrormrppepBpBpBrqqUoVoVoVoVoVoVpFpFpFpFpFqvqvtIqJqutIqvrruBpFrtrururvpFrwrxrypZqzqXqYqYqYqYrzrApZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHspsqsrssstnHsunRvUnHyCnHnHnNnHnHaMaMaMaMaMaMaMmAaMmBmumumumumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfrJrJrJrJrJpQpBpBpepepepepepepepgoVpFpTpUpVpFqvqvtIqJrKtIqvqqqqpFrLrLrLrLpFrMrxrNpZqzqXqYqYqYqYqYrOpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsGrjsHLwnHnHnRsJsKnHnHnHnRnRLxnHaMaMaMaMaMaMaMmAmBmBmumumumumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqGqfrUrJrJrJrJpepBpBpBpBpBpepBrVrWpeoVpFtDpUpUqpqvqvqvqvqvqvqvqvqvpFrLrXrYrYpFpFrZpFpZqzqXqYqYqYqYsaqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsWsXsYnHaMnHsZsZsZnHaMnHnLtatbnHaMaMaMaMaMaMaMmAaMmBaMmumumumumumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqRpepesgshshshpepBpNsipNpBpQpBsjskpeoVpFpFpFpFpFpFpFslpFpFpFqvqvqvsmrLuCuCrLrLrLrLsopZqzqXqYqYqYqYqYrOpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsZsZsZnHaMomtmtntoooaMnHsZsZsZnHaMaMaMaMaMaMaMmAmBmBmBmBmBmumumumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqRpepesgshshshpepBpNsipNpBpQpBsjskpeoVpFpFpFpFpFpFpFslpFpFpFqvqvqvsmrLuCuCrLrLrLrLrYpZqzqXqYqYqYqYqYrOpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsZsZsZnHaMomtmtntoooaMnHsZsZsZnHaMaMaMaMaMaMaMmAmBmBmBmBmBmumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVqRperJrJrJrJpepBsipNsipBpeqSpepeqHoVpFsxsyszpFsAsBsBsBsCpFqvqvqvqvrLrLrLrLsDrLrLrYpZqzqXqYqYqYqYsEsFpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMomtmtntoooaMaMaMaMaMaMaMomtmtntoooaMaMaMaMaMaMaMmAaMmBaMmBaMaMmumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVqRpesLsMsNpepBpBpBpBpBpepepeqHoVoVpFuQsPsQsRsBsBsBsBsSpFqvqvqvsmsTrLrLrLsUrLrLsVpZqzqXqYqYqYqYqYqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVqRpepepepepepepepepepeqHoVoVoVoVpFpFtctdpFpFpFtctetdpFqvqvqvpFtftgtgtgtgtgthpFpZqztitjqYqYqYtktlqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu @@ -2220,7 +2219,7 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVwhoUoVoVoVqVwhwXwYvMwZoNyQtZxboNxcoNoNoNxdoNoNoNwmwnuWxfxfxfxfxfxfxfxgxfxfxfxgufufufxhufufyVufyVufufxhufufufxjurururururxjurururururururxjyryryryryrvvydydtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMmu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNxlxmvMxnoNvPuhwkoNtZxqtZxrtZxsxtxttZxutvxvxwxwxxxyxzxAtvxBxBxBtvufufvBxCxDytxEufxFyNxGxCvDufufxjurururururxjurururururururxjyryryryryrtxuOuOtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVxHoUoVoVoVqVxHxIxJvMwnxKuhtZtZxLtZxMtZwmwmztztwmwmxutvxOxOxOxPxQxPxRtvtvtvtvtvufufvVwLxSufyVufyVufxSwLueufuftxxTxUxUxUxVtxtxxWtxtxtxuOtxtxtxxXxXxXtxtxurururxYurxZtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNLgyaoNoNoNoNoNyboNycwmzwyeyWzDwmxutvtvyhyiyjykylymyhaMaMaMtxufufvVtxtxynyoufypyqtxtxueufuftxaMaMaMaMaMtxzLystxuNAauNuNyuyvywywywyxtxururwRwRururyyaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNLgyaoNoNoNoNoNyboNycwmzwyeyWzDwmxutvtvyhyiyjykylymyhaMaMaMtxufufvVtxtxynyoufypyqtxtxueufuftxaMaMaMaMaMtxzLystxuNAauNuNyuyvywywywsotxururwRwRururyyaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNyzyAxowDtZoNxewmzwyfyfzDwmxpyEyFyhyGyHyIyByKyhaMaMaMtxufufvVtxtxvlvmvmvmvotxtxueufuftxaMaMaMaMaMtxysystxyLyLyLuNyuywywywywyMtxurAbuPuPAmuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzitZtZtZtZtZtZoNxetZtZApApwmwmwmwmyRyhySyIyIyIyIyhaMaMaMtxufufwKyTyTyTyTyTyTyTyTyTwTufuftxaMaMaMaMaMtxyUystxyLAvyLuNyuyuyuyuyuyutxurAbuPuPAmuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzltZtZtZtZtZLfoNyXtZtZyYtZtZwCvdyJzcyhyIyIyIyIzdyhtxtxtxtxtxtxzetxtxufufufufuftxtxtxtxtxtxaMaMaMaMaMtxzfystxvFuNuNuNyuaMaMaMaMaMtxurAbuPuPAmuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM From 3c714726447f9886f14c8d392947d9ebedbd22b2 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 21 Feb 2015 22:37:53 +1030 Subject: [PATCH 69/90] Removing unused and now uncompilable distillery code. --- baystation12.dme | 1 - code/modules/distillery/main.dm | 287 ------------------------- code/modules/food/recipes_microwave.dm | 4 +- 3 files changed, 2 insertions(+), 290 deletions(-) delete mode 100644 code/modules/distillery/main.dm diff --git a/baystation12.dme b/baystation12.dme index 245e4fb7ad..9c5b2aa890 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -914,7 +914,6 @@ #include "code\modules\detectivework\forensics.dm" #include "code\modules\detectivework\scanner.dm" #include "code\modules\detectivework\scanning_console.dm" -#include "code\modules\distillery\main.dm" #include "code\modules\economy\Accounts.dm" #include "code\modules\economy\Accounts_DB.dm" #include "code\modules\economy\ATM.dm" diff --git a/code/modules/distillery/main.dm b/code/modules/distillery/main.dm deleted file mode 100644 index 2d8fff4c00..0000000000 --- a/code/modules/distillery/main.dm +++ /dev/null @@ -1,287 +0,0 @@ -//This dm file includes some food processing machines: -// - I. Mill -// - II. Fermenter -// - III. Still -// - IV. Squeezer -// - V. Centrifuge - - - -// I. The mill is intended to be loaded with produce and returns ground up items. For example: Wheat should become flour and grapes should become raisins. - -/obj/machinery/mill - var/list/obj/item/weapon/reagent_containers/food/input = list() - var/list/obj/item/weapon/reagent_containers/food/output = list() - var/obj/item/weapon/reagent_containers/food/milled_item - var/busy = 0 - var/progress = 0 - var/error = 0 - name = "\improper Mill" - desc = "It is a machine that grinds produce." - icon_state = "autolathe" - density = 1 - anchored = 1 - use_power = 1 - idle_power_usage = 10 - active_power_usage = 1000 - -/obj/machinery/mill/process() - if(error) - return - - if(!busy) - use_power = 1 - if(input.len) - milled_item = input[1] - input -= milled_item - progress = 0 - busy = 1 - use_power = 2 - return - - progress++ - if(progress < 10) //Edit this value to make milling faster or slower - return //Not done yet. - - switch(milled_item.type) - if(/obj/item/weapon/reagent_containers/food/snacks/flour) //Flour is still flour - var/obj/item/weapon/reagent_containers/food/snacks/flour/F = new(src) - output += F - else - error = 1 - - del(milled_item) - busy = 0 - -/obj/machinery/mill/attackby(var/obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/reagent_containers/food)) - user.u_equip(W) - W.loc = src - input += W - else - ..() - -/obj/machinery/mill/attack_hand(var/mob/user as mob) - for(var/obj/item/weapon/reagent_containers/food/F in output) - F.loc = src.loc - output -= F - - - - - - -// II. The fermenter is intended to be loaded with food items and returns medium-strength alcohol items, sucha s wine and beer. - -/obj/machinery/fermenter - var/list/obj/item/weapon/reagent_containers/food/input = list() - var/list/obj/item/weapon/reagent_containers/food/output = list() - var/obj/item/weapon/reagent_containers/food/fermenting_item - var/water_level = 0 - var/busy = 0 - var/progress = 0 - var/error = 0 - name = "\improper Fermenter" - desc = "It is a machine that ferments produce into alcoholic drinks." - icon_state = "autolathe" - density = 1 - anchored = 1 - use_power = 1 - idle_power_usage = 10 - active_power_usage = 500 - -/obj/machinery/fermenter/process() - if(error) - return - - if(!busy) - use_power = 1 - if(input.len) - fermenting_item = input[1] - input -= fermenting_item - progress = 0 - busy = 1 - use_power = 2 - return - - if(!water_level) - return - - water_level-- - - progress++ - if(progress < 10) //Edit this value to make milling faster or slower - return //Not done yet. - - switch(fermenting_item.type) - if(/obj/item/weapon/reagent_containers/food/snacks/flour) //Flour is still flour - var/obj/item/weapon/reagent_containers/food/drinks/cans/beer/B = new(src) - output += B - else - error = 1 - - del(fermenting_item) - busy = 0 - -/obj/machinery/fermenter/attackby(var/obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/reagent_containers/food)) - user.u_equip(W) - W.loc = src - input += W - else - ..() - -/obj/machinery/fermenter/attack_hand(var/mob/user as mob) - for(var/obj/item/weapon/reagent_containers/food/F in output) - F.loc = src.loc - output -= F - - - -// III. The still is a machine that is loaded with food items and returns hard liquor, such as vodka. - -/obj/machinery/still - var/list/obj/item/weapon/reagent_containers/food/input = list() - var/list/obj/item/weapon/reagent_containers/food/output = list() - var/obj/item/weapon/reagent_containers/food/destilling_item - var/busy = 0 - var/progress = 0 - var/error = 0 - name = "\improper Still" - desc = "It is a machine that produces hard liquor from alcoholic drinks." - icon_state = "autolathe" - density = 1 - anchored = 1 - use_power = 1 - idle_power_usage = 10 - active_power_usage = 10000 - -/obj/machinery/still/process() - if(error) - return - - if(!busy) - use_power = 1 - if(input.len) - destilling_item = input[1] - input -= destilling_item - progress = 0 - busy = 1 - use_power = 2 - return - - progress++ - if(progress < 10) //Edit this value to make distilling faster or slower - return //Not done yet. - - switch(destilling_item.type) - if(/obj/item/weapon/reagent_containers/food/drinks/cans/beer) //Flour is still flour - var/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/V = new(src) - output += V - else - error = 1 - - del(destilling_item) - busy = 0 - -/obj/machinery/still/attackby(var/obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/reagent_containers/food)) - user.u_equip(W) - W.loc = src - input += W - else - ..() - -/obj/machinery/still/attack_hand(var/mob/user as mob) - for(var/obj/item/weapon/reagent_containers/food/F in output) - F.loc = src.loc - output -= F - - - - -// IV. The squeezer is intended to destroy inserted food items, but return some of the reagents they contain. - -/obj/machinery/squeezer - var/list/obj/item/weapon/reagent_containers/food/input = list() - var/obj/item/weapon/reagent_containers/food/squeezed_item - var/water_level = 0 - var/busy = 0 - var/progress = 0 - var/error = 0 - name = "\improper Squeezer" - desc = "It is a machine that squeezes extracts from produce." - icon_state = "autolathe" - density = 1 - anchored = 1 - use_power = 1 - idle_power_usage = 10 - active_power_usage = 500 - - - - - -// V. The centrifuge spins inserted food items. It is intended to squeeze out the reagents that are common food catalysts (enzymes currently) - -/obj/machinery/centrifuge - var/list/obj/item/weapon/reagent_containers/food/input = list() - var/list/obj/item/weapon/reagent_containers/food/output = list() - var/obj/item/weapon/reagent_containers/food/spinning_item - var/busy = 0 - var/progress = 0 - var/error = 0 - var/enzymes = 0 - var/water = 0 - name = "\improper Centrifuge" - desc = "It is a machine that spins produce." - icon_state = "autolathe" - density = 1 - anchored = 1 - use_power = 1 - idle_power_usage = 10 - active_power_usage = 10000 - -/obj/machinery/centrifuge/process() - if(error) - return - - if(!busy) - use_power = 1 - if(input.len) - spinning_item = input[1] - input -= spinning_item - progress = 0 - busy = 1 - use_power = 2 - return - - progress++ - if(progress < 10) //Edit this value to make milling faster or slower - return //Not done yet. - - var/transfer_enzymes = spinning_item.reagents.get_reagent_amount("enzyme") - - if(transfer_enzymes) - enzymes += transfer_enzymes - spinning_item.reagents.remove_reagent("enzyme",transfer_enzymes) - - output += spinning_item - busy = 0 - -/obj/machinery/centrifuge/attackby(var/obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/reagent_containers/food)) - user.u_equip(W) - W.loc = src - input += W - else - ..() - -/obj/machinery/centrifuge/attack_hand(var/mob/user as mob) - for(var/obj/item/weapon/reagent_containers/food/F in output) - F.loc = src.loc - output -= F - while(enzymes >= 50) - enzymes -= 50 - new/obj/item/weapon/reagent_containers/food/condiment/enzyme(src.loc) - diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index ae45d1a76a..9c696c975e 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -977,7 +977,7 @@ I said no! // Cakes. /datum/recipe/cake - reagents = list("milk" = 5, "flour" = 15, "sugar" = 15) + reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake /datum/recipe/cake/carrot @@ -1008,7 +1008,7 @@ I said no! /datum/recipe/cake/chocolate items = list(/obj/item/weapon/reagent_containers/food/snacks/chocolatebar) - reagents = list("milk" = 5, "flour" = 15, "egg" = 9, "coco" = 4, "sugar" = 15) + reagents = list("milk" = 5, "flour" = 15, "egg" = 9, "coco" = 4, "sugar" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake /datum/recipe/cake/birthday From 5bc076cc25ec5fccadaec9400bf4e160cc92c969 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 21 Feb 2015 14:25:06 -0500 Subject: [PATCH 70/90] Adds a better placeholder item_state for the ion rifle --- code/modules/projectiles/guns/energy/special.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 112a33e387..56f124a4c1 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -2,6 +2,7 @@ name = "ion rifle" desc = "A man portable anti-armor weapon designed to disable mechanical threats" icon_state = "ionrifle" + item_state = "laser" fire_sound = 'sound/weapons/Laser.ogg' origin_tech = "combat=2;magnets=4" w_class = 4.0 From 11719a380e22157b962e40a55094dd3f9fecc5b1 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 21 Feb 2015 15:49:52 -0500 Subject: [PATCH 71/90] Fixes #8151 --- code/game/objects/items.dm | 6 +----- code/modules/mob/living/carbon/human/life.dm | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 63447c5168..33dabdd022 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -198,11 +198,7 @@ // apparently called whenever an item is removed from a slot, container, or anything else. /obj/item/proc/dropped(mob/user as mob) ..() - if(zoom) //binoculars, scope, etc - user.client.view = world.view - user.client.pixel_x = 0 - user.client.pixel_y = 0 - zoom = 0 + if(zoom) zoom() //binoculars, scope, etc // called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 599707aaa1..21657fce41 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1240,7 +1240,7 @@ if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO if(healths) healths.icon_state = "health7" //DEAD healthmeter if(client) - if(client.view != world.view) // If mob moves while zoomed in with device, unzoom them. + if(client.view != world.view) // If mob dies while zoomed in with device, unzoom them. for(var/obj/item/item in contents) if(item.zoom) item.zoom() From 47cbfdd59e0534fe6cf1f36fcc75074b77bc4d40 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 21 Feb 2015 16:01:47 -0500 Subject: [PATCH 72/90] Keeps zone selection and gun mode toggle HUD elements visible when scoped --- code/_onclick/hud/hud.dm | 150 +++++++++++++++++++++++-------------- code/game/objects/items.dm | 7 +- 2 files changed, 98 insertions(+), 59 deletions(-) diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 3f00db9ce0..e9c5429dd2 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -256,59 +256,99 @@ datum/hud/New(mob/owner) set name = "F12" set hidden = 1 - if(hud_used) - if(ishuman(src)) - if(!client) return - if(client.view != world.view) - return - if(hud_used.hud_shown) - hud_used.hud_shown = 0 - if(src.hud_used.adding) - src.client.screen -= src.hud_used.adding - if(src.hud_used.other) - src.client.screen -= src.hud_used.other - if(src.hud_used.hotkeybuttons) - src.client.screen -= src.hud_used.hotkeybuttons - if(src.hud_used.item_action_list) - src.client.screen -= src.hud_used.item_action_list - - //Due to some poor coding some things need special treatment: - //These ones are a part of 'adding', 'other' or 'hotkeybuttons' but we want them to stay - if(!full) - src.client.screen += src.hud_used.l_hand_hud_object //we want the hands to be visible - src.client.screen += src.hud_used.r_hand_hud_object //we want the hands to be visible - src.client.screen += src.hud_used.action_intent //we want the intent swticher visible - src.hud_used.action_intent.screen_loc = ui_acti_alt //move this to the alternative position, where zone_select usually is. - else - src.client.screen -= src.healths - src.client.screen -= src.internals - src.client.screen -= src.gun_setting_icon - - //These ones are not a part of 'adding', 'other' or 'hotkeybuttons' but we want them gone. - src.client.screen -= src.zone_sel //zone_sel is a mob variable for some reason. - - else - hud_used.hud_shown = 1 - if(src.hud_used.adding) - src.client.screen += src.hud_used.adding - if(src.hud_used.other && src.hud_used.inventory_shown) - src.client.screen += src.hud_used.other - if(src.hud_used.hotkeybuttons && !src.hud_used.hotkey_ui_hidden) - src.client.screen += src.hud_used.hotkeybuttons - if(src.healths) - src.client.screen |= src.healths - if(src.internals) - src.client.screen |= src.internals - if(src.gun_setting_icon) - src.client.screen |= src.gun_setting_icon - - src.hud_used.action_intent.screen_loc = ui_acti //Restore intent selection to the original position - src.client.screen += src.zone_sel //This one is a special snowflake - - hud_used.hidden_inventory_update() - hud_used.persistant_inventory_update() - update_action_buttons() - else - usr << "\red Inventory hiding is currently only supported for human mobs, sorry." - else + if(!hud_used) usr << "\red This mob type does not use a HUD." + return + + if(!ishuman(src)) + usr << "\red Inventory hiding is currently only supported for human mobs, sorry." + return + + if(!client) return + if(client.view != world.view) + return + if(hud_used.hud_shown) + hud_used.hud_shown = 0 + if(src.hud_used.adding) + src.client.screen -= src.hud_used.adding + if(src.hud_used.other) + src.client.screen -= src.hud_used.other + if(src.hud_used.hotkeybuttons) + src.client.screen -= src.hud_used.hotkeybuttons + if(src.hud_used.item_action_list) + src.client.screen -= src.hud_used.item_action_list + + //Due to some poor coding some things need special treatment: + //These ones are a part of 'adding', 'other' or 'hotkeybuttons' but we want them to stay + if(!full) + src.client.screen += src.hud_used.l_hand_hud_object //we want the hands to be visible + src.client.screen += src.hud_used.r_hand_hud_object //we want the hands to be visible + src.client.screen += src.hud_used.action_intent //we want the intent swticher visible + src.hud_used.action_intent.screen_loc = ui_acti_alt //move this to the alternative position, where zone_select usually is. + else + src.client.screen -= src.healths + src.client.screen -= src.internals + src.client.screen -= src.gun_setting_icon + + //These ones are not a part of 'adding', 'other' or 'hotkeybuttons' but we want them gone. + src.client.screen -= src.zone_sel //zone_sel is a mob variable for some reason. + + else + hud_used.hud_shown = 1 + if(src.hud_used.adding) + src.client.screen += src.hud_used.adding + if(src.hud_used.other && src.hud_used.inventory_shown) + src.client.screen += src.hud_used.other + if(src.hud_used.hotkeybuttons && !src.hud_used.hotkey_ui_hidden) + src.client.screen += src.hud_used.hotkeybuttons + if(src.healths) + src.client.screen |= src.healths + if(src.internals) + src.client.screen |= src.internals + if(src.gun_setting_icon) + src.client.screen |= src.gun_setting_icon + + src.hud_used.action_intent.screen_loc = ui_acti //Restore intent selection to the original position + src.client.screen += src.zone_sel //This one is a special snowflake + + hud_used.hidden_inventory_update() + hud_used.persistant_inventory_update() + update_action_buttons() + +//Similar to button_pressed_F12() but keeps zone_sel, gun_setting_icon, and healths. +/mob/proc/toggle_zoom_hud() + if(!hud_used) + return + if(!ishuman(src)) + return + if(!client) + return + if(client.view != world.view) + return + + if(hud_used.hud_shown) + hud_used.hud_shown = 0 + if(src.hud_used.adding) + src.client.screen -= src.hud_used.adding + if(src.hud_used.other) + src.client.screen -= src.hud_used.other + if(src.hud_used.hotkeybuttons) + src.client.screen -= src.hud_used.hotkeybuttons + if(src.hud_used.item_action_list) + src.client.screen -= src.hud_used.item_action_list + src.client.screen -= src.internals + else + hud_used.hud_shown = 1 + if(src.hud_used.adding) + src.client.screen += src.hud_used.adding + if(src.hud_used.other && src.hud_used.inventory_shown) + src.client.screen += src.hud_used.other + if(src.hud_used.hotkeybuttons && !src.hud_used.hotkey_ui_hidden) + src.client.screen += src.hud_used.hotkeybuttons + if(src.internals) + src.client.screen |= src.internals + src.hud_used.action_intent.screen_loc = ui_acti //Restore intent selection to the original position + + hud_used.hidden_inventory_update() + hud_used.persistant_inventory_update() + update_action_buttons() \ No newline at end of file diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 33dabdd022..8879eeb2b7 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -656,9 +656,8 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. cannotzoom = 1 if(!zoom && !cannotzoom) - if(!usr.hud_used.hud_shown) - usr.button_pressed_F12(1) // If the user has already limited their HUD this avoids them having a HUD when they zoom in - usr.button_pressed_F12(1) + if(usr.hud_used.hud_shown) + usr.toggle_zoom_hud() // If the user has already limited their HUD this avoids them having a HUD when they zoom in usr.client.view = viewsize zoom = 1 @@ -684,7 +683,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. else usr.client.view = world.view if(!usr.hud_used.hud_shown) - usr.button_pressed_F12(1) + usr.toggle_zoom_hud() zoom = 0 usr.client.pixel_x = 0 From f7c65b43588c0c256052d1c752cda0274dd3ffbf Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 21 Feb 2015 16:55:40 -0500 Subject: [PATCH 73/90] Makes IB no longer contribute to overall damage --- code/modules/organs/organ_external.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 707bceaf2c..4dcc006df6 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -497,10 +497,11 @@ Note that amputating the affected organ does in fact remove the infection from t H = owner for(var/datum/wound/W in wounds) - if(W.damage_type == CUT || W.damage_type == BRUISE) - brute_dam += W.damage - else if(W.damage_type == BURN) - burn_dam += W.damage + if(!W.internal) //so IB doesn't count towards crit/paincrit + if(W.damage_type == CUT || W.damage_type == BRUISE) + brute_dam += W.damage + else if(W.damage_type == BURN) + burn_dam += W.damage if(!(status & ORGAN_ROBOT) && W.bleeding() && (H && !(H.species.flags & NO_BLOOD))) W.bleed_timer-- From 23b93e75408c909ceba0c3fc6282d3fb1fe040e5 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 22 Feb 2015 17:25:15 +1030 Subject: [PATCH 74/90] Added tray lighting verb. --- code/modules/hydroponics/seed.dm | 21 ++++++++++--------- .../hydroponics/spreading/spreading_growth.dm | 2 +- code/modules/hydroponics/trays/tray.dm | 9 ++++++++ .../modules/hydroponics/trays/tray_process.dm | 6 ++++-- code/modules/hydroponics/trays/tray_soil.dm | 2 ++ 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index b401db24f9..59911fc30c 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -233,7 +233,7 @@ origin_turf.visible_message("The [thrown.name] splatters against [target]!") del(thrown) -/datum/seed/proc/handle_environment(var/turf/current_turf, var/datum/gas_mixture/environment, var/check_only) +/datum/seed/proc/handle_environment(var/turf/current_turf, var/datum/gas_mixture/environment, var/light_supplied, var/check_only) var/health_change = 0 // Handle gas consumption. @@ -261,17 +261,18 @@ // Handle gas production. if(exude_gasses && exude_gasses.len && !check_only) for(var/gas in exude_gasses) - environment.adjust_gas(gas, max(1,round((exude_gasses[gas]*get_trait(TRAIT_POTENCY))/exude_gasses.len))) + environment.adjust_gas(gas, max(1,round((exude_gasses[gas]*(get_trait(TRAIT_POTENCY)/5))/exude_gasses.len))) // Handle light requirements. - var/area/A = get_area(current_turf) - if(A) - var/light_available - if(A.lighting_use_dynamic) - light_available = max(0,min(10,current_turf.lighting_lumcount)-5) - else - light_available = 5 - if(abs(light_available - get_trait(TRAIT_IDEAL_LIGHT)) > get_trait(TRAIT_LIGHT_TOLERANCE)) + if(!light_supplied) + var/area/A = get_area(current_turf) + if(A) + if(A.lighting_use_dynamic) + light_supplied = max(0,min(10,current_turf.lighting_lumcount)-5) + else + light_supplied = 5 + if(light_supplied) + if(abs(light_supplied - get_trait(TRAIT_IDEAL_LIGHT)) > get_trait(TRAIT_LIGHT_TOLERANCE)) health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER return health_change diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm index 63db3e6799..2b3c6b85cd 100644 --- a/code/modules/hydroponics/spreading/spreading_growth.dm +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -30,7 +30,7 @@ // Handle life. var/turf/simulated/T = get_turf(src) if(istype(T)) - health -= seed.handle_environment(T, T.return_air(),1) + health -= seed.handle_environment(T,T.return_air(),null,1) if(health < max_health) health += rand(3,5) refresh_icon() diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 85ff118868..968d707472 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -27,6 +27,7 @@ var/mutation_mod = 0 // Modifier to mutation chance var/toxins = 0 // Toxicity in the tray? var/mutation_level = 0 // When it hits 100, the plant mutates. + var/tray_light = 1 // Supplied lighting. // Mechanical concerns. var/health = 0 // Plant health. @@ -350,6 +351,14 @@ return /obj/machinery/portable_atmospherics/hydroponics/verb/set_light() + set name = "Set Light" + set category = "Object" + set src in view(1) + + var/new_light = input("Specify a light level.") as null|anything in list(0,1,2,3,4,5,6,7,8,9,10) + if(new_light) + tray_light = new_light + usr << "You set the tray to a light level of [tray_light] lumens." /obj/machinery/portable_atmospherics/hydroponics/proc/check_level_sanity() //Make sure various values are sane. diff --git a/code/modules/hydroponics/trays/tray_process.dm b/code/modules/hydroponics/trays/tray_process.dm index f1199c780d..280ce9e6d6 100644 --- a/code/modules/hydroponics/trays/tray_process.dm +++ b/code/modules/hydroponics/trays/tray_process.dm @@ -60,7 +60,6 @@ // Check that pressure, heat and light are all within bounds. // First, handle an open system or an unconnected closed system. - var/turf/T = loc var/datum/gas_mixture/environment // If we're closed, take from our internal sources. @@ -71,7 +70,10 @@ if(!environment) return // Seed datum handles gasses, light and pressure. - health -= seed.handle_environment(T,environment) + if(mechanical && closed_system) + health -= seed.handle_environment(T,environment,tray_light) + else + health -= seed.handle_environment(T,environment) // If we're attached to a pipenet, then we should let the pipenet know we might have modified some gasses if (closed_system && connected_port) diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm index d3a82ba383..ff8e3e23df 100644 --- a/code/modules/hydroponics/trays/tray_soil.dm +++ b/code/modules/hydroponics/trays/tray_soil.dm @@ -4,6 +4,7 @@ density = 0 use_power = 0 mechanical = 0 + tray_light = 0 /obj/machinery/portable_atmospherics/hydroponics/soil/attackby(var/obj/item/O as obj, var/mob/user as mob) if(istype(O,/obj/item/weapon/tank)) @@ -15,6 +16,7 @@ ..() verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid_verb verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/remove_label + verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/set_light /obj/machinery/portable_atmospherics/hydroponics/soil/CanPass() return 1 From 6c121e8e335ef6c7859e83888100c3dca945a4ff Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 22 Feb 2015 18:36:06 +1030 Subject: [PATCH 75/90] Fixes bugs with vines and potency. --- code/modules/hydroponics/seed_controller.dm | 17 ++++++++--------- code/modules/hydroponics/spreading/spreading.dm | 15 +++++++++------ .../hydroponics/spreading/spreading_growth.dm | 2 +- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/code/modules/hydroponics/seed_controller.dm b/code/modules/hydroponics/seed_controller.dm index aff41c8253..e914ce7c3d 100644 --- a/code/modules/hydroponics/seed_controller.dm +++ b/code/modules/hydroponics/seed_controller.dm @@ -1,8 +1,8 @@ // Attempts to offload processing for the spreading plants from the MC. // Processes vines/spreading plants. -#define PLANTS_PER_TICK 100 -#define PLANT_TICK_TIME 50 +#define PLANTS_PER_TICK 500 // Cap on number of plant segments processed. +#define PLANT_TICK_TIME 25 // Number of ticks between the plant processor cycling. // Debug for testing seed genes. /client/proc/show_plant_genes() @@ -85,10 +85,10 @@ var/global/datum/controller/plants/plant_controller // Set in New(). var/list/plant_traits = ALL_GENES while(plant_traits && plant_traits.len) var/gene_tag = pick(plant_traits) - var/gene_mask = "[num2hex(rand(0,255))]" + var/gene_mask = "[uppertext(num2hex(rand(0,255)))]" while(gene_mask in used_masks) - gene_mask = "[num2hex(rand(0,255))]" + gene_mask = "[uppertext(num2hex(rand(0,255)))]" used_masks += gene_mask plant_traits -= gene_tag @@ -128,18 +128,17 @@ var/global/datum/controller/plants/plant_controller // Set in New(). else processed = 0 if(plant_queue.len) - var/target_to_process = min(plant_queue.len,PLANT_TICK_TIME) + var/target_to_process = min(plant_queue.len,plants_per_tick) for(var/x=0;xNull or non-plant entry in plant controller queue." - break plant_queue -= plant - sleep(1) // Stagger processing out so previous tick can resolve (overlapping plant segments etc) + if(!istype(plant)) + continue plant.process() processed++ + sleep(1) // Stagger processing out so previous tick can resolve (overlapping plant segments etc) sleep(max(1,(plant_tick_time-processed))) /datum/controller/plants/proc/add_plant(var/obj/effect/plant/plant) diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index 6fae4283b3..22dbabe275 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -14,8 +14,8 @@ if(turfs.len) //Pick a turf to spawn at if we can var/turf/simulated/floor/T = pick(turfs) var/datum/seed/seed = plant_controller.create_random_seed(1) - seed.set_trait(TRAIT_SPREAD,2) // So it will function properly as vines. - seed.set_trait(TRAIT_POTENCY,rand(40,50)) // Guarantee a wide spread and powerful effects. + seed.set_trait(TRAIT_SPREAD,2) // So it will function properly as vines. + seed.set_trait(TRAIT_POTENCY,rand(70,100)) // Guarantee a wide spread and powerful effects. new /obj/effect/plant(T,seed) message_admins("Event: Spacevines spawned at [T.loc] ([T.x],[T.y],[T.z])") @@ -63,6 +63,8 @@ /obj/effect/plant/Del() if(plant_controller) plant_controller.remove_plant(src) + for(var/obj/effect/plant/neighbor in range(1,src)) + plant_controller.add_plant(neighbor) ..() /obj/effect/plant/single spread_chance = 0 @@ -156,10 +158,11 @@ /obj/effect/plant/proc/refresh_icon() var/growth = min(max_growth,round(health/growth_threshold)) var/at_fringe = get_dist(src,parent) - if(at_fringe >= (spread_distance-3)) - max_growth-- - if(at_fringe >= (spread_distance-2)) - max_growth-- + if(spread_distance > 5) + if(at_fringe >= (spread_distance-3)) + max_growth-- + if(at_fringe >= (spread_distance-2)) + max_growth-- max_growth = max(1,max_growth) if(growth_type > 0) switch(growth_type) diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm index 2b3c6b85cd..0729b2b343 100644 --- a/code/modules/hydroponics/spreading/spreading_growth.dm +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -73,7 +73,7 @@ // We shouldn't have spawned if the controller doesn't exist. check_health() - if(neighbors.len && health == max_health) + if(neighbors.len || health != max_health) plant_controller.add_plant(src) /obj/effect/plant/proc/die_off() From c317fb8c39c4c119ae1fe612ce84fb9a2e0c4ac6 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 22 Feb 2015 20:17:18 -0500 Subject: [PATCH 76/90] Adds ability for uplink purchases to produce more than one item --- code/game/objects/items/devices/uplinks.dm | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 53efa61f96..43dfc2f30e 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -12,12 +12,21 @@ A list of items and costs is stored under the datum of every game mode, alongsid var/path = null var/reference = "" -datum/uplink_item/New(var/itemPath, var/itemCost as num, var/itemName as text, var/itemReference as text) +/datum/uplink_item/New(var/itemPath, var/itemCost as num, var/itemName as text, var/itemReference as text) cost = itemCost path = itemPath name = itemName reference = itemReference +/datum/uplink_item/proc/generate_item(var/newloc) + var/list/L = list() + if(ispath(path)) + L += new path(newloc) + else if(islist(path)) + for(var/item_path in path) + L += new item_path(newloc) + return L + datum/nano_item_lists var/list/items_nano var/list/items_reference @@ -126,10 +135,11 @@ datum/nano_item_lists used_TC += UI.cost feedback_add_details("traitor_uplink_items_bought", reference) - var/obj/I = new UI.path(get_turf(usr)) + var/list/L = UI.generate_item(get_turf(usr)) if(ishuman(usr)) var/mob/living/carbon/human/A = usr - A.put_in_any_hand_if_possible(I) + for(var/obj/I in L) + A.put_in_any_hand_if_possible(I) purchase_log[UI] = purchase_log[UI] + 1 From 115bbbe6699a7edcab1cb0b02c5126fc289fe3a2 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 22 Feb 2015 20:27:06 -0500 Subject: [PATCH 77/90] Nerfs merc sniper rifle and makes it uplink purchasable Also reduces the Z8's damage a bit, just to make it more in line with the new bullet damage ranges. --- code/game/gamemodes/game_mode.dm | 4 +++- code/game/objects/items/weapons/storage/boxes.dm | 4 ++-- code/modules/projectiles/guns/projectile/sniper.dm | 2 +- code/modules/projectiles/projectile/bullets.dm | 4 ++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 8ad2d72288..3974107fb7 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -35,13 +35,15 @@ "Highly Visible and Dangerous Weapons" = list( new/datum/uplink_item(/obj/item/ammo_magazine/mc9mm, 2, "Ammo-9mm", "R9"), new/datum/uplink_item(/obj/item/ammo_magazine/a357, 2, "Ammo-357", "RA"), + new/datum/uplink_item(/obj/item/weapon/storage/box/sniperammo, 3, "Ammo-14.5mm", "RA"), new/datum/uplink_item(/obj/item/weapon/storage/box/emps, 3, "5 EMP Grenades", "EM"), new/datum/uplink_item(/obj/item/weapon/melee/energy/sword, 4, "Energy Sword", "ES"), new/datum/uplink_item(/obj/item/weapon/gun/energy/crossbow, 5, "Energy Crossbow", "XB"), new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/g9mm, 5, "Silenced 9mm", "S9"), new/datum/uplink_item(/obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser, 6, "Exosuit Rigged Laser", "RL"), new/datum/uplink_item(/obj/item/weapon/gun/projectile/revolver, 6, "Revolver", "RE"), - new/datum/uplink_item(/obj/item/weapon/storage/box/syndicate, 10, "Mercenary Bundle", "BU") + new/datum/uplink_item(/obj/item/weapon/storage/box/syndicate, 10, "Mercenary Bundle", "BU"), + new/datum/uplink_item(/obj/item/weapon/gun/projectile/heavysniper, 12, "PTRS Rifle", "BU") ), "Stealthy and Inconspicuous Weapons" = list( new/datum/uplink_item(/obj/item/weapon/soap/syndie, 1, "Subversive Soap", "SP"), diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index ca614421ac..4436a179de 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -219,8 +219,8 @@ new /obj/item/ammo_casing/shotgun/stunshell(src) new /obj/item/ammo_casing/shotgun/stunshell(src) -/obj/item/weapon/storage/box/heavysniperammo - name = "box of 14.5mm AP shells" +/obj/item/weapon/storage/box/sniperammo + name = "box of 14.5mm shells" desc = "It has a picture of a gun and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." New() diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index 8364876563..6c3be17c68 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/projectile/heavysniper name = "\improper PTRS-7 rifle" - desc = "A portable anti-armour rifle fitted with a scope. Originally designed to used against armoured exosuits, it is capable of punching through non-reinforced walls with ease. Fires armor piercing 14.5mm shells." + desc = "A portable anti-armour rifle fitted with a scope. Originally designed to used against armoured exosuits, it is capable of punching through windows and non-reinforced walls with ease. Fires armor piercing 14.5mm shells." icon_state = "heavysniper" item_state = "shotgun" w_class = 4 diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 50d3c04f46..8e147ca125 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -141,13 +141,13 @@ penetrating = 1 /obj/item/projectile/bullet/rifle/a145 - damage = 80 + damage = 60 stun = 3 weaken = 3 penetrating = 5 /obj/item/projectile/bullet/rifle/a556 - damage = 50 + damage = 40 penetrating = 1 /* Miscellaneous */ From dfec1fcb5c61dae00a52a06833b18df132a4a62a Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 22 Feb 2015 21:46:18 -0500 Subject: [PATCH 78/90] Improves energy gun charge icon handling, adds ion rifle in-hand sprite. --- code/modules/projectiles/guns/energy.dm | 8 +++++++- .../projectiles/guns/energy/special.dm | 11 +++++++++-- icons/mob/items_lefthand.dmi | Bin 156649 -> 155467 bytes icons/mob/items_righthand.dmi | Bin 158114 -> 158839 bytes 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 3cd90347f9..19f1157371 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -76,7 +76,13 @@ /obj/item/weapon/gun/energy/update_icon() if(charge_meter) var/ratio = power_supply.charge / power_supply.maxcharge - ratio = round(ratio, 0.25) * 100 + + //make sure that rounding down will not give us the empty state even if we have charge for a shot left. + if(power_supply.charge < charge_cost) + ratio = 0 + else + ratio = max(round(ratio, 0.25) * 100, 25) + if(modifystate) icon_state = "[modifystate][ratio]" else diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 56f124a4c1..76bcebac3c 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -2,10 +2,10 @@ name = "ion rifle" desc = "A man portable anti-armor weapon designed to disable mechanical threats" icon_state = "ionrifle" - item_state = "laser" + item_state = "ionrifle" fire_sound = 'sound/weapons/Laser.ogg' origin_tech = "combat=2;magnets=4" - w_class = 4.0 + w_class = 4 force = 10 flags = CONDUCT slot_flags = SLOT_BACK @@ -17,6 +17,13 @@ return //so it doesn't EMP itself, I guess ..() +/obj/item/weapon/gun/energy/ionrifle/update_icon() + ..() + if(power_supply.charge < charge_cost) + item_state = "ionrifle-empty" + else + item_state = initial(item_state) + /obj/item/weapon/gun/energy/decloner name = "biological demolecularisor" desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi index ed8a04987e72537de945f1140e96c0957f8984dc..9f1f22c1a31e9063afd95304becd35d5185d168d 100644 GIT binary patch literal 155467 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
  • C!RocYop?W9 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 literal 156649 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 GMg0$FYf}sW diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi index f95abe3fd8f6635298258f2996828b9ce8826903..889346d863c5d0b2c11c6b33d4b2e6246f672839 100644 GIT binary patch delta 19829 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 From 4a762d7459328d5f9302bfec7d02ebf93bdb592b Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 22 Feb 2015 23:28:06 -0500 Subject: [PATCH 79/90] Adjusts bullet penetration to account for reduced damage --- code/modules/projectiles/projectile/bullets.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 8e147ca125..f2c2caadef 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -43,10 +43,10 @@ var/chance = 0 if(istype(A, /turf/simulated/wall)) var/turf/simulated/wall/W = A - chance = round(damage/W.damage_cap*180) + chance = round(damage/W.damage_cap*250) else if(istype(A, /obj/machinery/door)) var/obj/machinery/door/D = A - chance = round(damage/D.maxhealth*100) + chance = round(damage/D.maxhealth*150) else if(istype(A, /obj/structure/girder) || istype(A, /obj/structure/cultgirder)) chance = 100 else if(istype(A, /obj/machinery) || istype(A, /obj/structure)) From 5023fa40009fdbcfee497ee93cdc7363bd003e33 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 23 Feb 2015 09:14:42 +0100 Subject: [PATCH 80/90] Ports /tg/'s starlight luminance. Because configuration is initialized before the map we also don't have the same runtimes issues corrected by https://github.com/tgstation/-tg-station/pull/7806. --- code/controllers/configuration.dm | 5 +++++ code/game/turfs/space/space.dm | 9 +++++++++ code/game/turfs/turf.dm | 6 ++++++ config/example/config.txt | 5 ++++- 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index a2d2ed352d..b7823a5b5f 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -182,6 +182,8 @@ var/dooc_allowed = 1 var/dsay_allowed = 1 + var/starlight = 0 // Whether space turfs have ambient light or not + /datum/configuration/New() var/list/L = typesof(/datum/game_mode) - /datum/game_mode for (var/T in L) @@ -603,6 +605,9 @@ config.event_delay_upper[EVENT_LEVEL_MODERATE] = MinutesToTicks(values[2]) config.event_delay_upper[EVENT_LEVEL_MAJOR] = MinutesToTicks(values[3]) + if("starlight") + config.starlight = 1 + else log_misc("Unknown setting in configuration: '[name]'") diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index c0428da560..da07194678 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -14,6 +14,15 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" = /turf/space/New() if(!istype(src, /turf/space/transit)) icon_state = "[((x + y) ^ ~(x * y) + z) % 25]" + update_starlight() + +/turf/space/proc/update_starlight() + if(!config.starlight) + return + if(locate(/turf/simulated) in orange(src,1)) + SetLuminosity(3) + else + SetLuminosity(0) /turf/space/attackby(obj/item/C as obj, mob/user as mob) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index dfd2b480d6..29f425d4a3 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -251,6 +251,9 @@ if(air_master) air_master.mark_for_update(src) + for(var/turf/space/S in range(W,1)) + S.update_starlight() + W.levelupdate() return W @@ -272,6 +275,9 @@ if(air_master) air_master.mark_for_update(src) + for(var/turf/space/S in range(W,1)) + S.update_starlight() + W.levelupdate() return W diff --git a/config/example/config.txt b/config/example/config.txt index 333082d189..638e383b22 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -320,4 +320,7 @@ EVENT_CUSTOM_START_MAJOR 80;100 #DISABLE_DSAY ## Uncomment to disable respawning by default. -#DISABLE_RESPAWN \ No newline at end of file +#DISABLE_RESPAWN + +## Uncomment to make space turfs have a short-range ambient light. +# STARLIGHT From 5578afa07c23454d662a057c6f2a203da9b5ccd9 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Tue, 17 Feb 2015 16:53:08 +0100 Subject: [PATCH 81/90] General update. NanoUI interface sorted. Accessible by AI, borgs, and through consoles. Automatic alarm resets in case of lost sources. --- baystation12.dme | 4 +- code/__HELPERS/lists.dm | 4 + code/controllers/subsystem/alarms.dm | 26 ++-- code/game/machinery/alarm.dm | 2 + code/game/machinery/camera/camera.dm | 25 ++-- code/game/machinery/camera/motion.dm | 2 +- code/game/machinery/computer/camera.dm | 26 +--- code/game/machinery/computer/station_alert.dm | 134 +++++------------- code/modules/alarm/alarm.dm | 65 ++++++++- code/modules/alarm/alarm_handler.dm | 115 ++++++++------- code/modules/alarm/fire_alarm.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 19 +-- code/modules/mob/living/silicon/ai/nano.dm | 27 ---- .../mob/living/silicon/ai/subsystems.dm | 44 ++++++ .../modules/mob/living/silicon/robot/robot.dm | 32 ++--- .../mob/living/silicon/robot/subsystems.dm | 9 ++ code/modules/mob/living/silicon/silicon.dm | 10 +- code/modules/mob/mob.dm | 34 +++-- code/modules/mob/mob_helpers.dm | 13 ++ code/modules/nano/modules/alarm_monitor.dm | 86 +++++++++++ code/modules/nano/modules/rcon.dm | 2 +- nano/css/shared.css | 6 + nano/templates/alarm_monitor.tmpl | 37 +++++ 23 files changed, 439 insertions(+), 285 deletions(-) delete mode 100644 code/modules/mob/living/silicon/ai/nano.dm create mode 100644 code/modules/mob/living/silicon/ai/subsystems.dm create mode 100644 code/modules/mob/living/silicon/robot/subsystems.dm create mode 100644 code/modules/nano/modules/alarm_monitor.dm create mode 100644 nano/templates/alarm_monitor.tmpl diff --git a/baystation12.dme b/baystation12.dme index 7e8f14d39e..fcfb95c66e 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1144,8 +1144,8 @@ #include "code\modules\mob\living\silicon\ai\life.dm" #include "code\modules\mob\living\silicon\ai\login.dm" #include "code\modules\mob\living\silicon\ai\logout.dm" -#include "code\modules\mob\living\silicon\ai\nano.dm" #include "code\modules\mob\living\silicon\ai\say.dm" +#include "code\modules\mob\living\silicon\ai\subsystems.dm" #include "code\modules\mob\living\silicon\ai\freelook\cameranet.dm" #include "code\modules\mob\living\silicon\ai\freelook\chunk.dm" #include "code\modules\mob\living\silicon\ai\freelook\eye.dm" @@ -1178,6 +1178,7 @@ #include "code\modules\mob\living\silicon\robot\robot_items.dm" #include "code\modules\mob\living\silicon\robot\robot_modules.dm" #include "code\modules\mob\living\silicon\robot\robot_movement.dm" +#include "code\modules\mob\living\silicon\robot\subsystems.dm" #include "code\modules\mob\living\silicon\robot\drone\drone.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_abilities.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_console.dm" @@ -1236,6 +1237,7 @@ #include "code\modules\nano\nanomapgen.dm" #include "code\modules\nano\nanoprocs.dm" #include "code\modules\nano\nanoui.dm" +#include "code\modules\nano\modules\alarm_monitor.dm" #include "code\modules\nano\modules\crew_monitor.dm" #include "code\modules\nano\modules\power_monitor.dm" #include "code\modules\nano\modules\rcon.dm" diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 1e8ccb6a4d..9fd6a8c0e9 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -596,3 +596,7 @@ datum/proc/dd_SortValue() /obj/machinery/camera/dd_SortValue() return "[c_tag]" + +/datum/alarm/dd_SortValue() + return "[sanitize(last_name)]" + diff --git a/code/controllers/subsystem/alarms.dm b/code/controllers/subsystem/alarms.dm index 4684737578..a13e60782d 100644 --- a/code/controllers/subsystem/alarms.dm +++ b/code/controllers/subsystem/alarms.dm @@ -1,27 +1,33 @@ -/* /var/global/datum/alarm_handler/atmosphere_alarm = new()*/ -/var/global/datum/alarm_handler/camera_alarm = new() -/* /var/global/datum/alarm_handler/fire_alarm = new()*/ -/var/global/datum/alarm_handler/motion_alarm = new() -/* /var/global/datum/alarm_handler/power_alarm = new() */ +// We manually initialize the alarm handlers instead of looping over all existing types +// to make it possible to write: camera.triggerAlarm() rather than alarm_manager.managers[datum/alarm_handler/camera].triggerAlarm() or a variant thereof. +/var/global/datum/alarm_handler/atmosphere/atmosphere_alarm = new() +/var/global/datum/alarm_handler/camera/camera_alarm = new() +/var/global/datum/alarm_handler/fire/fire_alarm = new() +/var/global/datum/alarm_handler/motion/motion_alarm = new() +/var/global/datum/alarm_handler/power/power_alarm = new() /datum/subsystem/alarm name = "Alarm" var/list/datum/alarm/all_handlers /datum/subsystem/alarm/New() - all_handlers = list(camera_alarm) + all_handlers = list(atmosphere_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm) /datum/subsystem/alarm/stat_entry() - stat(null,"Alarm-[master_controller.alarms_cost]\t# [active_alarms()]") + stat(null,"Alarm-[master_controller.alarms_cost]\t#[number_of_active_alarms()]") /datum/subsystem/alarm/fire() for(var/datum/alarm_handler/AH in all_handlers) AH.process() /datum/subsystem/alarm/proc/active_alarms() - var/total = 0 + var/list/all_alarms = new for(var/datum/alarm_handler/AH in all_handlers) var/list/alarms = AH.alarms - total += alarms.len + all_alarms += alarms - return total + return all_alarms + +/datum/subsystem/alarm/proc/number_of_active_alarms() + var/list/alarms = active_alarms() + return alarms.len diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 2ffdcc6e2f..c9a10bc728 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -460,10 +460,12 @@ if(alert_level==2) alert_signal.data["alert"] = "severe" + atmosphere_alarm.triggerAlarm(src.loc, src) else if (alert_level==1) alert_signal.data["alert"] = "minor" else if (alert_level==0) alert_signal.data["alert"] = "clear" + atmosphere_alarm.clearAlarm(src.loc, src) frequency.post_signal(src, alert_signal) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index d6640f6534..77f41cb2eb 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -53,13 +53,6 @@ ASSERT(src.network.len > 0) ..() -/obj/machinery/camera/Del() - if(!alarm_on) - triggerCameraAlarm() - - cancelCameraAlarm() - ..() - /obj/machinery/camera/emp_act(severity) if(!isEmpProof()) if(prob(100/severity)) @@ -67,7 +60,7 @@ stat |= EMPED SetLuminosity(0) kick_viewers() - triggerCameraAlarm() + triggerCameraAlarm(10 * severity) update_icon() spawn(900) @@ -261,16 +254,16 @@ else icon_state = initial(icon_state) -/obj/machinery/camera/proc/triggerCameraAlarm() +/obj/machinery/camera/proc/triggerCameraAlarm(var/duration = 0) alarm_on = 1 - camera_alarm.triggerAlarm(loc, src) + camera_alarm.triggerAlarm(loc, src, duration) /obj/machinery/camera/proc/cancelCameraAlarm() if(wires.IsIndexCut(CAMERA_WIRE_ALARM)) return alarm_on = 0 - camera_alarm.cancelAlarm(loc, src) + camera_alarm.clearAlarm(loc, src) //if false, then the camera is listed as DEACTIVATED and cannot be used /obj/machinery/camera/proc/can_use() @@ -355,3 +348,13 @@ user.set_machine(src) wires.Interact(user) + +/obj/machinery/camera/proc/nano_structure() + var/cam[0] + cam["name"] = sanitize(c_tag) + cam["deact"] = !can_use() + cam["camera"] = "\ref[src]" + cam["x"] = x + cam["y"] = y + cam["z"] = z + return cam diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index f14608b1d4..636f114de7 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -45,7 +45,7 @@ if (!status || (stat & NOPOWER)) return 0 if (detectTime == -1) - motion_alarm.cancelAlarm(loc, src) + motion_alarm.clearAlarm(loc, src) detectTime = 0 return 1 diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index b1100fd77c..8cb58a14cb 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -3,7 +3,7 @@ /proc/invalidateCameraCache() for(var/obj/machinery/computer/security/s in world) s.camera_cache = null - for(var/datum/alarm/A in alarm_manager.active_alarms()) + for(var/datum/alarm/A in world) A.cameras = null /obj/machinery/computer/security @@ -45,33 +45,17 @@ if(!can_access_camera(C)) continue - var/cam[0] - cam["name"] = sanitize(C.c_tag) - cam["deact"] = !C.can_use() - cam["camera"] = "\ref[C]" - cam["x"] = C.x - cam["y"] = C.y - cam["z"] = C.z - + var/cam = C.nano_structure() cameras[++cameras.len] = cam if(C == current) data["current"] = cam - var/list/camera_list = list("cameras" = cameras) - camera_cache=list2json(camera_list) - + var/list/camera_list = list("cameras" = cameras) + camera_cache=list2json(camera_list) else if(current) - var/cam[0] - cam["name"] = current.c_tag - cam["deact"] = !current.can_use() - cam["camera"] = "\ref[current]" - cam["x"] = current.x - cam["y"] = current.y - cam["z"] = current.z - - data["current"] = cam + data["current"] = current.nano_structure() if(ui) diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 028be6e3a3..f585162ae9 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -5,106 +5,42 @@ icon_state = "alert:0" circuit = "/obj/item/weapon/circuitboard/stationalert" var/alarms = list("Fire"=list(), "Atmosphere"=list(), "Power"=list()) + var/obj/nano_module/alarm_monitor/engineering/alarm_monitor +/obj/machinery/computer/station_alert/New() + ..() + alarm_monitor = new(src) + alarm_monitor.register(src, /obj/machinery/computer/station_alert/update_icon) - attack_ai(mob/user) - add_fingerprint(user) - if(stat & (BROKEN|NOPOWER)) - return - interact(user) +/obj/machinery/computer/station_alert/Del() + alarm_monitor.unregister(src) + ..() + +/obj/machinery/computer/station_alert/attack_ai(mob/user) + add_fingerprint(user) + if(stat & (BROKEN|NOPOWER)) + return + interact(user) + return + +/obj/machinery/computer/station_alert/attack_hand(mob/user) + add_fingerprint(user) + if(stat & (BROKEN|NOPOWER)) + return + interact(user) + return + +/obj/machinery/computer/station_alert/interact(mob/user) + alarm_monitor.ui_interact(user) + +/obj/machinery/computer/station_alert/update_icon() + ..() + if(stat & (BROKEN|NOPOWER)) return - - attack_hand(mob/user) - add_fingerprint(user) - if(stat & (BROKEN|NOPOWER)) - return - interact(user) - return - - - interact(mob/user) - usr.set_machine(src) - var/dat = "Current Station Alerts\n" - dat += "Close

    " - for (var/cat in src.alarms) - dat += text("[]
    \n", cat) - var/list/L = src.alarms[cat] - if (L.len) - for (var/alarm in L) - var/list/alm = L[alarm] - var/area/A = alm[1] - var/list/sources = alm[3] - dat += "" - dat += "• " - dat += "[A.name]" - if (sources.len > 1) - dat += text(" - [] sources", sources.len) - dat += "
    \n" - else - dat += "-- All Systems Nominal
    \n" - dat += "
    \n" - user << browse(dat, "window=alerts") - onclose(user, "alerts") - - - Topic(href, href_list) - if(..()) - return - return - - - proc/triggerAlarm(var/class, area/A, var/O, var/alarmsource) - if(stat & (BROKEN)) - return - var/list/L = src.alarms[class] - for (var/I in L) - if (I == A.name) - var/list/alarm = L[I] - var/list/sources = alarm[3] - if (!(alarmsource in sources)) - sources += alarmsource - return 1 - var/obj/machinery/camera/C = null - var/list/CL = null - if (O && istype(O, /list)) - CL = O - if (CL.len == 1) - C = CL[1] - else if (O && istype(O, /obj/machinery/camera)) - C = O - L[A.name] = list(A, (C) ? C : O, list(alarmsource)) - return 1 - - - proc/cancelAlarm(var/class, area/A as area, obj/origin) - if(stat & (BROKEN)) - return - var/list/L = src.alarms[class] - var/cleared = 0 - for (var/I in L) - if (I == A.name) - var/list/alarm = L[I] - var/list/srcs = alarm[3] - if (origin in srcs) - srcs -= origin - if (srcs.len == 0) - cleared = 1 - L -= I - return !cleared - - - process() - if(stat & (BROKEN|NOPOWER)) - icon_state = "atmos0" - return - var/active_alarms = 0 - for (var/cat in src.alarms) - var/list/L = src.alarms[cat] - if(L.len) active_alarms = 1 - if(active_alarms) - icon_state = "alert:2" - else - icon_state = "alert:0" - ..() - return + var/list/alarms = alarm_monitor.active_alarms() + if(alarms.len) + icon_state = "alert:2" + else + icon_state = "alert:0" + return diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm index 0bbeed527d..623c38c503 100644 --- a/code/modules/alarm/alarm.dm +++ b/code/modules/alarm/alarm.dm @@ -1,3 +1,5 @@ +#define ALARM_RESET_DELAY 100 // How long will the alarm/trigger remain active once origin/source has been found to be gone? + /datum/alarm_source var/source = null // The source trigger var/source_name = "" // The name of the source should it be lost (for example a destroyed camera) @@ -7,8 +9,8 @@ /datum/alarm_source/New(var/atom/source) src.source = source - source_name = source.name start_time = world.time + source_name = source.get_source_name() /datum/alarm var/atom/origin //Used to identify the alarm area. @@ -16,24 +18,42 @@ var/list/sources_assoc = new() //Associative list of source triggers. Used to efficiently acquire the alarm source. var/list/cameras //List of cameras that can be switched to, if the player has that capability. var/area/last_area //The last acquired area, used should origin be lost (for example a destroyed borg containing an alarming camera). + var/area/last_name //The last acquired name, used should origin be lost + var/area/last_camera_area //The last area in which cameras where fetched, used to see if the camera list should be updated. + var/end_time //Used to set when this alarm should clear, in case the origin is lost. /datum/alarm/New(var/atom/origin, var/atom/source, var/duration) src.origin = origin - last_area = alarm_area() + + cameras() // Sets up both cameras and last alarm area. set_duration(source, duration) +/datum/alarm/proc/process() + // Has origin gone missing? + if(!origin && !end_time) + end_time = world.time + ALARM_RESET_DELAY + for(var/datum/alarm_source/AS in sources) + // Has the alarm passed its best before date? + if((AS.end_time && world.time > AS.end_time) || (AS.duration && world.time > (AS.start_time + AS.duration))) + sources -= AS + // Has the source gone missing? Then reset the normal duration and set end_time + if(!AS.source && !AS.end_time) // end_time is used instead of duration to ensure the reset doesn't remain in the future indefinetely. + AS.duration = 0 + AS.end_time = world.time + ALARM_RESET_DELAY + /datum/alarm/proc/set_duration(var/atom/source, var/duration) - var/datum/alarm_source/AS = sources[source] + var/datum/alarm_source/AS = sources_assoc[source] if(!AS) AS = new/datum/alarm_source(source) sources += AS sources_assoc[source] = AS // Currently only non-0 durations can be altered (normal alarms VS EMP blasts) if(AS.duration) + duration = SecondsToTicks(duration) AS.duration = duration /datum/alarm/proc/clear(var/source) - var/datum/alarm_source/AS = sources[source] + var/datum/alarm_source/AS = sources_assoc[source] sources -= AS sources_assoc -= source @@ -44,22 +64,51 @@ last_area = origin.get_alarm_area() return last_area -/datum/alarm/proc/cameras() +/datum/alarm/proc/alarm_name() if(!origin) - return list() + return last_name + last_name = origin.get_alarm_name() + return last_name + +/datum/alarm/proc/cameras() + // If the alarm origin has changed area, for example a borg containing an alarming camera, reset the list of cameras + if(cameras && (last_camera_area != alarm_area())) + cameras = null + + // The list of cameras is also reset by /proc/invalidateCameraCache() if(!cameras) - cameras = origin.get_alarm_cameras() + cameras = origin ? origin.get_alarm_cameras() : last_area.get_alarm_cameras() + last_camera_area = last_area return cameras +/****************** +* Assisting procs * +******************/ /atom/proc/get_alarm_area() return get_area(src) /area/get_alarm_area() return src +/atom/proc/get_alarm_name() + var/area/A = get_area(src) + return A.name + +/area/get_alarm_name() + return name + +/mob/get_alarm_name() + return name + +/atom/proc/get_source_name() + return name + +/obj/machinery/camera/get_source_name() + return c_tag + /atom/proc/get_alarm_cameras() var/area/A = get_area(src) return A.get_cameras() @@ -76,3 +125,5 @@ /mob/living/silicon/robot/syndicate/get_alarm_cameras() return list() + +#undef ALARM_LOSS_DELAY diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm index 3fd21fc4a0..9c92a7793a 100644 --- a/code/modules/alarm/alarm_handler.dm +++ b/code/modules/alarm/alarm_handler.dm @@ -1,64 +1,82 @@ -#define ALARM_ORIGIN_LOST "Origin Lost" +#define ALARM_RAISED 1 +#define ALARM_CLEARED 0 /datum/alarm_handler var/category = "" - var/list/datum/alarm/alarms = new // All alarms, to handle cases when origin has been deleted with one or more active alarms - var/list/datum/alarm/alarms_assoc = new // Associative list of alarms, to efficiently acquire them based on origin. + var/list/datum/alarm/alarms = new // All alarms, to handle cases when an origin has been deleted with one or more active alarms + var/list/datum/alarm/alarms_assoc = new // Associative list of alarms, to efficiently acquire them based on origin. + var/list/listeners = new // A list of all objects interested in alarm changes. /datum/alarm_handler/proc/process() - /* for(var/datum/alarm/A in alarms) - var/datum/alarm_source/AS = A.source - // Alarm owner has been deleted. Clean up in at most 15 seconds - if(!AS.owner && !AS.end_time) - AS.end_time = world.time + SecondsToTicks(15) - if(AS.duration || AS.end_time) - if(world.time > (AS.start_time + AS.duration) || world.time > AS.end_time) - //Somethingthing.. - */ + A.process() + check_alarm_cleared(A) /datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0) + var/new_alarm //Proper origin and source mandatory if(!origin || !source) return + new_alarm = 0 //see if there is already an alarm of this origin - var/alarm_key = origin.get_alarm_key() - var/datum/alarm/existing = alarms_assoc[alarm_key] + var/datum/alarm/existing = alarms_assoc[origin] if(existing) existing.set_duration(source, duration) else existing = new/datum/alarm(origin, source, duration) + new_alarm = 1 alarms |= existing - alarms_assoc[alarm_key] = existing + alarms_assoc[origin] = existing + if(new_alarm) + alarms = dd_sortedObjectList(alarms) + notify_listeners(existing, ALARM_RAISED) -/datum/alarm_handler/proc/cancelAlarm(var/atom/origin, var/source) + return new_alarm + +/datum/alarm_handler/proc/clearAlarm(var/atom/origin, var/source) //Proper origin and source mandatory if(!origin || !source) return - var/alarm_key = origin.get_alarm_key() - - var/datum/alarm/existing = alarms_assoc[alarm_key] + var/datum/alarm/existing = alarms_assoc[origin] if(existing) existing.clear(source) - if (!existing.sources.len) - alarms -= existing - alarms_assoc -= alarm_key + return check_alarm_cleared(existing) -/atom/proc/get_alarm_key() - return src +/datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm) + if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len) + alarms -= alarm + alarms_assoc -= alarm.origin + notify_listeners(alarm, ALARM_CLEARED) + return 1 + return 0 -/turf/get_alarm_key() - return get_area(src) +/datum/alarm_handler/proc/register(var/object, var/procName) + listeners[object] = procName +/datum/alarm_handler/proc/unregister(var/object) + listeners -= object + +/datum/alarm_handler/proc/notify_listeners(var/alarm, var/was_raised) + for(var/listener in listeners) + call(listener, listeners[listener])(src, alarm, was_raised) + +/******** +* DEBUG * +********/ /obj/item/device/alarm_debug name = "An alarm debug tool - Self" desc = "Alarm Up. Alarm Reset." icon = 'icons/obj/radio.dmi' icon_state = "beacon" item_state = "signaler" + var/obj/nano_module/alarm_monitor/ai/alarm_monitor + +/obj/item/device/alarm_debug/New() + ..() + alarm_monitor = new(src) /obj/item/device/alarm_debug/loc name = "An alarm debug tool - Loc" @@ -67,46 +85,33 @@ set name = "Alarm" set category = "Debug" usr << "Raising alarm" - camera_alarm.triggerAlarm(src, src) + fire_alarm.triggerAlarm(src, src) /obj/item/device/alarm_debug/verb/reset() set name = "Reset" set category = "Debug" - usr << "Raising alarm" - camera_alarm.triggerAlarm(src, src) - -/obj/item/device/alarm_debug/verb/tell_me() - set name = "Tell" - set category = "Debug" - usr << "Telling about alarms" - - var/list/datum/alarm/alarms = camera_alarm.alarms - var/list/datum/alarm/alarms_assoc = camera_alarm.alarms_assoc - - world << "List" - for(var/datum/alarm/A in alarms) - world << "Origin: [A.origin ? A.origin : ALARM_ORIGIN_LOST]" - world << "Alarm area: [A.alarm_area()]" - for(var/source in A.sources) - world << "Source: [source]" - - world << "Assoc" - - for(var/atom/origin in alarms_assoc) - world << "Origin: [origin ? origin : ALARM_ORIGIN_LOST]" - var/datum/alarm/A = alarms_assoc[origin] - world << "Alarm area: [A.alarm_area()]" - for(var/source in A.sources) - world << "Source: [source]" + usr << "Clearing alarm" + fire_alarm.clearAlarm(src, src) /obj/item/device/alarm_debug/loc/alarm() set name = "Alarm" set category = "Debug" usr << "Raising alarm" - camera_alarm.triggerAlarm(src.loc, src) + fire_alarm.triggerAlarm(src.loc, src) /obj/item/device/alarm_debug/loc/reset() set name = "Reset" set category = "Debug" usr << "Clearing alarm" - camera_alarm.cancelAlarm(src.loc, src) + fire_alarm.clearAlarm(src.loc, src) + +/obj/item/device/alarm_debug/verb/nano() + set name = "Nano" + set category = "Debug" + alarm_monitor.ui_interact(usr) + +/obj/item/device/alarm_debug/attack_self(var/mob/user) + alarm_monitor.ui_interact(user) + +#undef ALARM_RAISED +#undef ALARM_CLEARED diff --git a/code/modules/alarm/fire_alarm.dm b/code/modules/alarm/fire_alarm.dm index e654b966b6..1b7256517e 100644 --- a/code/modules/alarm/fire_alarm.dm +++ b/code/modules/alarm/fire_alarm.dm @@ -1,2 +1,2 @@ -/datum/alarm_handler/fire_alarm +/datum/alarm_handler/fire category = "Fire" diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 306be81c88..a0781d7073 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -3,7 +3,6 @@ var/list/ai_list = list() var/list/ai_verbs_default = list( - /mob/living/silicon/ai/proc/ai_alerts, /mob/living/silicon/ai/proc/ai_announcement, /mob/living/silicon/ai/proc/ai_call_shuttle, // /mob/living/silicon/ai/proc/ai_recall_shuttle, @@ -23,10 +22,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/sensor_mode, /mob/living/silicon/ai/proc/show_laws_verb, /mob/living/silicon/ai/proc/toggle_acceleration, - /mob/living/silicon/ai/proc/toggle_camera_light, - /mob/living/silicon/ai/proc/nano_rcon, - /mob/living/silicon/ai/proc/nano_crew_monitor, - /mob/living/silicon/ai/proc/nano_power_monitor + /mob/living/silicon/ai/proc/toggle_camera_light ) //Not sure why this is necessary... @@ -83,9 +79,11 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/add_ai_verbs() src.verbs |= ai_verbs_default + src.verbs |= ai_verbs_subsystems /mob/living/silicon/ai/proc/remove_ai_verbs() src.verbs -= ai_verbs_default + src.verbs -= ai_verbs_subsystems /mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0) announcement = new() @@ -166,8 +164,6 @@ var/list/ai_verbs_default = list( hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - init_subsystems() - ai_list += src ..() return @@ -325,13 +321,6 @@ var/list/ai_verbs_default = list( if(malf && malf.apcs >= 3) stat(null, "Time until station control secured: [max(malf.AI_win_timeleft/(malf.apcs/3), 0)] seconds") -/mob/living/silicon/ai/proc/ai_alerts() - set category = "AI Commands" - set name = "Show Alerts" - - //PsiFix - //nano_alarm.ui_interact(usr) - // this verb lets the ai see the stations manifest /mob/living/silicon/ai/proc/ai_roster() set category = "AI Commands" @@ -428,7 +417,7 @@ var/list/ai_verbs_default = list( if (href_list["switchcamera"]) switchCamera(locate(href_list["switchcamera"])) in cameranet.cameras if (href_list["showalerts"]) - ai_alerts() + subsystem_alarm_monitor() //Carn: holopad requests if (href_list["jumptoholopad"]) var/obj/machinery/hologram/holopad/H = locate(href_list["jumptoholopad"]) diff --git a/code/modules/mob/living/silicon/ai/nano.dm b/code/modules/mob/living/silicon/ai/nano.dm deleted file mode 100644 index 8572c8ec59..0000000000 --- a/code/modules/mob/living/silicon/ai/nano.dm +++ /dev/null @@ -1,27 +0,0 @@ -var/obj/nano_module/crew_monitor/crew_monitor -var/obj/nano_module/rcon/rcon -var/obj/nano_module/power_monitor/power_monitor - -/mob/living/silicon/ai/proc/init_subsystems() - crew_monitor = new(src) - rcon = new(src) - power_monitor = new(src) - -/mob/living/silicon/ai/proc/nano_crew_monitor() - set category = "AI Subystems" - set name = "Crew Monitor" - - crew_monitor.ui_interact(usr) - -/mob/living/silicon/ai/proc/nano_power_monitor() - set category = "AI Subystems" - set name = "Power Monitor" - - power_monitor.ui_interact(usr) - - -/mob/living/silicon/ai/proc/nano_rcon() - set category = "AI Subystems" - set name = "RCON" - - rcon.ui_interact(usr) diff --git a/code/modules/mob/living/silicon/ai/subsystems.dm b/code/modules/mob/living/silicon/ai/subsystems.dm new file mode 100644 index 0000000000..3ef229712e --- /dev/null +++ b/code/modules/mob/living/silicon/ai/subsystems.dm @@ -0,0 +1,44 @@ +var/list/ai_verbs_subsystems = list( + /mob/living/silicon/ai/proc/subsystem_alarm_monitor, + /mob/living/silicon/ai/proc/subsystem_crew_monitor, + /mob/living/silicon/ai/proc/subsystem_power_monitor, + /mob/living/silicon/ai/proc/subsystem_rcon +) + +/mob/living/silicon/ai + var/ + var/obj/nano_module/crew_monitor/crew_monitor + var/obj/nano_module/rcon/rcon + var/obj/nano_module/power_monitor/power_monitor + +/mob/living/silicon/ai/init_subsystems() + ..() + del(alarm_monitor) + alarm_monitor = new/obj/nano_module/alarm_monitor/ai(src) + crew_monitor = new(src) + rcon = new(src) + power_monitor = new(src) + +/mob/living/silicon/ai/proc/subsystem_alarm_monitor() + set name = "Alarm Monitor" + set category = "AI Subystems" + + alarm_monitor.ui_interact(usr) + +/mob/living/silicon/ai/proc/subsystem_crew_monitor() + set category = "AI Subystems" + set name = "Crew Monitor" + + crew_monitor.ui_interact(usr) + +/mob/living/silicon/ai/proc/subsystem_power_monitor() + set category = "AI Subystems" + set name = "Power Monitor" + + power_monitor.ui_interact(usr) + +/mob/living/silicon/ai/proc/subsystem_rcon() + set category = "AI Subystems" + set name = "RCON" + + rcon.ui_interact(usr) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 025f1ef0c2..0f04f741c8 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -437,22 +437,12 @@ var/list/robot_verbs_default = list( updatename() updateicon() -/mob/living/silicon/robot/verb/cmd_robot_alerts() - set category = "Robot Commands" - set name = "Show Alerts" - robot_alerts() - // this verb lets cyborgs see the stations manifest /mob/living/silicon/robot/verb/cmd_station_manifest() set category = "Robot Commands" set name = "Show Crew Manifest" show_station_manifest() - -/mob/living/silicon/robot/proc/robot_alerts() - //PsiFix - //nano_alarm.ui_interact(usr) - /mob/living/silicon/robot/proc/self_diagnosis() if(!is_component_functioning("diagnosis unit")) return null @@ -1004,30 +994,31 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/Topic(href, href_list) if(..()) - return + return 1 if(usr != src) - return + return 1 if (href_list["showalerts"]) - robot_alerts() - return + subsystem_alarm_monitor() + return 1 if (href_list["mod"]) var/obj/item/O = locate(href_list["mod"]) if (istype(O) && (O.loc == src)) O.attack_self(src) + return 1 if (href_list["act"]) var/obj/item/O = locate(href_list["act"]) if (!istype(O)) - return + return 1 if(!((O in src.module.modules) || (O == src.module.emag))) - return + return 1 if(activated(O)) src << "Already activated" - return + return 1 if(!module_state_1) module_state_1 = O O.layer = 20 @@ -1049,6 +1040,7 @@ var/list/robot_verbs_default = list( else src << "You need to disable a module first!" installed_modules() + return 1 if (href_list["deact"]) var/obj/item/O = locate(href_list["deact"]) @@ -1067,6 +1059,7 @@ var/list/robot_verbs_default = list( else src << "Module isn't activated" installed_modules() + return 1 if (href_list["lawc"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite var/L = text2num(href_list["lawc"]) @@ -1075,6 +1068,7 @@ var/list/robot_verbs_default = list( if ("No") lawcheck[L+1] = "Yes" // src << text ("Switching Law [L]'s report status to []", lawcheck[L+1]) checklaws() + return 1 if (href_list["lawi"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite var/L = text2num(href_list["lawi"]) @@ -1083,9 +1077,11 @@ var/list/robot_verbs_default = list( if ("No") ioncheck[L] = "Yes" // src << text ("Switching Law [L]'s report status to []", lawcheck[L+1]) checklaws() + return 1 if (href_list["laws"]) // With how my law selection code works, I changed statelaws from a verb to a proc, and call it through my law selection panel. --NeoFite statelaws() + return 1 return /mob/living/silicon/robot/proc/radio_menu() @@ -1218,9 +1214,11 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/proc/add_robot_verbs() src.verbs |= robot_verbs_default + src.verbs |= robot_verbs_subsystems /mob/living/silicon/robot/proc/remove_robot_verbs() src.verbs -= robot_verbs_default + src.verbs -= robot_verbs_subsystems // Uses power from cyborg's cell. Returns 1 on success or 0 on failure. // Properly converts using CELLRATE now! Amount is in Joules. diff --git a/code/modules/mob/living/silicon/robot/subsystems.dm b/code/modules/mob/living/silicon/robot/subsystems.dm new file mode 100644 index 0000000000..4750828544 --- /dev/null +++ b/code/modules/mob/living/silicon/robot/subsystems.dm @@ -0,0 +1,9 @@ +var/list/robot_verbs_subsystems = list( + /mob/living/silicon/robot/proc/subsystem_alarm_monitor +) + +/mob/living/silicon/robot/proc/subsystem_alarm_monitor() + set name = "Alarm Monitor" + set category = "Robot Subystems" + + alarm_monitor.ui_interact(usr) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index af7881986b..a4ee540c2b 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -22,6 +22,9 @@ var/obj/item/device/camera/siliconcam/aiCamera = null //photography var/local_transmit //If set, can only speak to others of the same type within a short range. + // Subsystems + var/obj/nano_module/alarm_monitor = null + var/sensor_mode = 0 //Determines the current HUD. #define SEC_HUD 1 //Security HUD mode @@ -30,6 +33,7 @@ /mob/living/silicon/New() ..() add_language("Galactic Common") + init_subsystems() /mob/living/silicon/proc/SetName(pickedName as text) real_name = pickedName @@ -244,7 +248,8 @@ return 1 /mob/living/silicon/Topic(href, href_list) - ..() + if(..()) + return 1 if (href_list["lawr"]) // Selects on which channel to state laws var/list/channels = list(MAIN_CHANNEL) @@ -283,3 +288,6 @@ adjustBruteLoss(30) updatehealth() + +/mob/living/silicon/proc/init_subsystems() + alarm_monitor = new/obj/nano_module/alarm_monitor/borg(src) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a6ba0bed0a..323cdfaf8b 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -792,27 +792,25 @@ note dizziness decrements automatically in the mob's Life() proc. /mob/Stat() ..() - if(statpanel("MC")) //not looking at that panel - - if(client && client.holder) + if(client && client.holder) + if(statpanel("Status")) stat(null,"Location:\t([x], [y], [z])") stat(null,"CPU:\t[world.cpu]") stat(null,"Instances:\t[world.contents.len]") - - if(master_controller) - stat(null,"MasterController-[last_tick_duration] ([master_controller.processing?"On":"Off"]-[controller_iteration])") - stat(null,"Air-[master_controller.air_cost]\tSun-[master_controller.sun_cost]") - stat(null,"Mob-[master_controller.mobs_cost]\t#[mob_list.len]") - stat(null,"Dis-[master_controller.diseases_cost]\t#[active_diseases.len]") - stat(null,"Mch-[master_controller.machines_cost]\t#[machines.len]") - stat(null,"Obj-[master_controller.objects_cost]\t#[processing_objects.len]") - stat(null,"Net-[master_controller.networks_cost]\tPnet-[master_controller.powernets_cost]") - stat(null,"NanoUI-[master_controller.nano_cost]\t#[nanomanager.processing_uis.len]") - stat(null,"Event-[master_controller.events_cost]\t# [event_manager.active_events.len]") - alarm_manager.stat_entry() - stat(null,"Tick-[master_controller.ticker_cost]\tALL-[master_controller.total_cost]") - else - stat(null,"MasterController-ERROR") + if(statpanel("MC") && master_controller) + stat(null,"MasterController-[last_tick_duration] ([master_controller.processing?"On":"Off"]-[controller_iteration])") + stat(null,"Air-[master_controller.air_cost]\tSun-[master_controller.sun_cost]") + stat(null,"Mob-[master_controller.mobs_cost]\t#[mob_list.len]") + stat(null,"Dis-[master_controller.diseases_cost]\t#[active_diseases.len]") + stat(null,"Mch-[master_controller.machines_cost]\t#[machines.len]") + stat(null,"Obj-[master_controller.objects_cost]\t#[processing_objects.len]") + stat(null,"Net-[master_controller.networks_cost]\tPnet-[master_controller.powernets_cost]") + stat(null,"NanoUI-[master_controller.nano_cost]\t#[nanomanager.processing_uis.len]") + stat(null,"Event-[master_controller.events_cost]\t#[event_manager.active_events.len]") + alarm_manager.stat_entry() + stat(null,"Tick-[master_controller.ticker_cost]\tALL-[master_controller.total_cost]") + else + stat(null,"MasterController-ERROR") if(listed_turf && client) if(!TurfAdjacent(listed_turf)) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 3c983bcc22..d064ee67b4 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -547,3 +547,16 @@ proc/is_blind(A) say_dead_direct("The ghost of [name] now [pick("skulks","lurks","prowls","creeps","stalks")] among the dead. [message]") else say_dead_direct("[name] no longer [pick("skulks","lurks","prowls","creeps","stalks")] in the realm of the dead. [message]") + +/mob/proc/switch_to_camera(var/obj/machinery/camera/C) + if (!C.can_use() || stat || (get_dist(C, src) > 1 || machine != src || blinded || !canmove)) + return 0 + check_eye(src) + return 1 + +/mob/living/silicon/ai/switch_to_camera(var/obj/machinery/camera/C) + if(!C.can_use() || !is_in_chassis()) + return 0 + + eyeobj.setLoc(C) + return 1 diff --git a/code/modules/nano/modules/alarm_monitor.dm b/code/modules/nano/modules/alarm_monitor.dm new file mode 100644 index 0000000000..f0044506c8 --- /dev/null +++ b/code/modules/nano/modules/alarm_monitor.dm @@ -0,0 +1,86 @@ +/obj/nano_module/alarm_monitor + name = "Alarm monitor" + var/list_cameras = 0 // Whether or not to list camera references. A future goal would be to merge this with the enginering/security camera console. + var/list/datum/alarm_handler/alarm_handlers // The particular list of alarm handlers this alarm monitor should present to the user. + +/obj/nano_module/alarm_monitor/ai + list_cameras = 1 + +/obj/nano_module/alarm_monitor/ai/New() + ..() + alarm_handlers = alarm_manager.all_handlers + +/obj/nano_module/alarm_monitor/borg/New() + ..() + alarm_handlers = alarm_manager.all_handlers + +/obj/nano_module/alarm_monitor/engineering/New() + ..() + alarm_handlers = list(atmosphere_alarm, fire_alarm, power_alarm) + +/obj/nano_module/alarm_monitor/security/New() + ..() + alarm_handlers = list(camera_alarm, motion_alarm) + +/obj/nano_module/alarm_monitor/proc/register(var/object, var/procName) + for(var/datum/alarm_handler/AH in alarm_handlers) + AH.register(object, procName) + +/obj/nano_module/alarm_monitor/proc/unregister(var/object) + for(var/datum/alarm_handler/AH in alarm_handlers) + AH.unregister(object) + +/obj/nano_module/alarm_monitor/proc/active_alarms() + var/list/all_alarms = new() + for(var/datum/alarm_handler/AH in alarm_handlers) + var/list/alarms = AH.alarms + all_alarms += alarms + + return all_alarms + +/obj/nano_module/alarm_monitor/Topic(href, href_list) + if(..()) return 1 + +/obj/nano_module/alarm_monitor/ai/Topic(ref, href_list) + if(..()) + return 1 + if(href_list["switchTo"]) + var/obj/machinery/camera/C = locate(href_list["switchTo"]) in cameranet.cameras + if(!C) + + return + + usr.switch_to_camera(C) + return 1 + +/obj/nano_module/alarm_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + var/data[0] + + var/categories[0] + for(var/datum/alarm_handler/AH in alarm_handlers) + categories[++categories.len] = list("category" = AH.category, "alarms" = list()) + for(var/datum/alarm/A in AH.alarms) + var/cameras[0] + var/lost_sources[0] + + if(list_cameras) + for(var/obj/machinery/camera/C in A.cameras()) + cameras[++cameras.len] = C.nano_structure() + for(var/datum/alarm_source/AS in A.sources) + if(!AS.source) + lost_sources[++lost_sources.len] = AS.source_name + + categories[categories.len]["alarms"] += list(list( + "name" = sanitize(A.alarm_name()), + "origin_lost" = A.origin == null, + "has_cameras" = cameras.len, + "cameras" = cameras, + "lost_sources" = sanitize(english_list(lost_sources, nothing_text = "", and_text = ", ")))) + data["categories"] = categories + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "alarm_monitor.tmpl", "Alarm Monitoring Console", 800, 800) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) diff --git a/code/modules/nano/modules/rcon.dm b/code/modules/nano/modules/rcon.dm index 6224c56de8..abdae311d0 100644 --- a/code/modules/nano/modules/rcon.dm +++ b/code/modules/nano/modules/rcon.dm @@ -1,5 +1,5 @@ /obj/nano_module/rcon - name = "RCON interface" + name = "Power RCON" var/list/known_SMESs = null var/list/known_breakers = null diff --git a/nano/css/shared.css b/nano/css/shared.css index b81990b7a3..97b0604ad1 100644 --- a/nano/css/shared.css +++ b/nano/css/shared.css @@ -271,6 +271,12 @@ div.notice { color: #e9c183; } +.itemLabelWidest { + float: left; + width: 100%; + color: #e9c183; +} + .itemContentWide { float: left; width: 79%; diff --git a/nano/templates/alarm_monitor.tmpl b/nano/templates/alarm_monitor.tmpl new file mode 100644 index 0000000000..0089467e43 --- /dev/null +++ b/nano/templates/alarm_monitor.tmpl @@ -0,0 +1,37 @@ + + +{{for data.categories}} +

    {{:value.category}}

    + {{for value.alarms :alarmValue:alarmIndex}} + {{if alarmValue.origin_lost}} + {{:alarmValue.name}} Alarm Origin Lost
    + {{else}} + {{:alarmValue.name}}
    + {{/if}} + {{if alarmValue.has_cameras || alarmValue.lost_sources != ""}} +
    + {{if alarmValue.has_cameras}} +
    + {{for alarmValue.cameras :cameraValue:cameraIndex}} + {{if cameraValue.deact}} + {{:helper.link(cameraValue.name + " (deactivated)", '', {}, 'inactive')}} + {{else}} + {{:helper.link(cameraValue.name, '', {'switchTo' : cameraValue.camera})}} + {{/if}} + {{/for}} +
    + {{/if}} + {{if alarmValue.lost_sources != ""}} +
    +

    Lost Alarm Sources: {{:alarmValue.lost_sources}}

    +
    + {{/if}} +
    + {{/if}} + {{empty}} + --All Systems Nominal + {{/for}} +{{/for}} \ No newline at end of file From 93b049e7a666320cd00b0aca9ef64b8a57ea6309 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 23 Feb 2015 10:47:47 +0100 Subject: [PATCH 82/90] Alarm centralization completion Ensures the master area is always used, to avoid issues caused by dynamic lightning which splits areas into sub-areas. Power alarms now handled centrally. --- code/game/area/areas.dm | 26 ------------------- code/game/machinery/computer/station_alert.dm | 2 +- code/modules/alarm/alarm.dm | 2 +- code/modules/alarm/alarm_handler.dm | 13 ++++++++-- code/modules/alarm/power_alarm.dm | 8 ++++++ code/modules/nano/modules/alarm_monitor.dm | 5 +--- code/modules/power/apc.dm | 17 +++++------- code/modules/power/singularity/investigate.dm | 4 +-- 8 files changed, 30 insertions(+), 47 deletions(-) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 13b7ffa34c..6e530d35d5 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -37,32 +37,6 @@ cameras += C return cameras -/area/proc/poweralert(var/state, var/obj/source as obj) - if (state != poweralm) - poweralm = state - /*if(istype(source)) //Only report power alarms on the z-level where the source is located. - var/list/cameras = list() - for (var/area/RA in related) - for (var/obj/machinery/camera/C in RA) - cameras += C - if(state == 1) - C.network.Remove("Power Alarms") - else - C.network.Add("Power Alarms") - for (var/mob/living/silicon/aiPlayer in player_list) - if(aiPlayer.z == source.z) - if (state == 1) - aiPlayer.cancelAlarm("Power", src, source) - else - aiPlayer.triggerAlarm("Power", src, cameras, source) - for(var/obj/machinery/computer/station_alert/a in machines) - if(a.z == source.z) - if(state == 1) - a.cancelAlarm("Power", src, source) - else - a.triggerAlarm("Power", src, cameras, source) */ - return - /area/proc/atmosalert(danger_level, var/set_firelocks=1) // if(type==/area) //No atmos alarms in space // return 0 //redudant diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index f585162ae9..84ce5cc0d1 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -42,5 +42,5 @@ if(alarms.len) icon_state = "alert:2" else - icon_state = "alert:0" + icon_state = initial(icon_state) return diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm index 623c38c503..d53b54063b 100644 --- a/code/modules/alarm/alarm.dm +++ b/code/modules/alarm/alarm.dm @@ -95,7 +95,7 @@ /atom/proc/get_alarm_name() var/area/A = get_area(src) - return A.name + return A.master.name /area/get_alarm_name() return name diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm index 9c92a7793a..a87202e453 100644 --- a/code/modules/alarm/alarm_handler.dm +++ b/code/modules/alarm/alarm_handler.dm @@ -15,8 +15,9 @@ /datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0) var/new_alarm //Proper origin and source mandatory - if(!origin || !source) + if(!(origin && source)) return + origin = origin.get_alarm_origin() new_alarm = 0 //see if there is already an alarm of this origin @@ -37,8 +38,9 @@ /datum/alarm_handler/proc/clearAlarm(var/atom/origin, var/source) //Proper origin and source mandatory - if(!origin || !source) + if(!(origin && source)) return + origin = origin.get_alarm_origin() var/datum/alarm/existing = alarms_assoc[origin] if(existing) @@ -53,6 +55,13 @@ return 1 return 0 +/atom/proc/get_alarm_origin() + return src + +/turf/get_alarm_origin() + var/area/area = get_area(src) + return area.master // Very important to get area.master, as dynamic lightning can and will split areas. + /datum/alarm_handler/proc/register(var/object, var/procName) listeners[object] = procName diff --git a/code/modules/alarm/power_alarm.dm b/code/modules/alarm/power_alarm.dm index 8571dbac61..2e5c6182d8 100644 --- a/code/modules/alarm/power_alarm.dm +++ b/code/modules/alarm/power_alarm.dm @@ -1,2 +1,10 @@ /datum/alarm_handler/power category = "Power" + +/datum/alarm_handler/power/notify_listeners(var/datum/alarm/alarm, var/was_raised) + ..() + var/area/A = alarm.origin + if(istype(A)) + A.power_alert(was_raised) + +/area/proc/power_alert(var/alarming) diff --git a/code/modules/nano/modules/alarm_monitor.dm b/code/modules/nano/modules/alarm_monitor.dm index f0044506c8..f828d9d776 100644 --- a/code/modules/nano/modules/alarm_monitor.dm +++ b/code/modules/nano/modules/alarm_monitor.dm @@ -1,6 +1,6 @@ /obj/nano_module/alarm_monitor name = "Alarm monitor" - var/list_cameras = 0 // Whether or not to list camera references. A future goal would be to merge this with the enginering/security camera console. + var/list_cameras = 0 // Whether or not to list camera references. A future goal would be to merge this with the enginering/security camera console. Currently really only for AI-use. var/list/datum/alarm_handler/alarm_handlers // The particular list of alarm handlers this alarm monitor should present to the user. /obj/nano_module/alarm_monitor/ai @@ -38,9 +38,6 @@ return all_alarms -/obj/nano_module/alarm_monitor/Topic(href, href_list) - if(..()) return 1 - /obj/nano_module/alarm_monitor/ai/Topic(ref, href_list) if(..()) return 1 diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index ea16adbe96..90b5500ac7 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -183,9 +183,6 @@ if(terminal) disconnect_terminal() - //If there's no more APC then there shouldn't be a cause for alarm I guess - area.poweralert(1, src) //so that alarms don't go on forever - ..() /obj/machinery/power/apc/proc/make_terminal() @@ -725,7 +722,7 @@ src.interact(user) /obj/machinery/power/apc/attack_ghost(user as mob) - if(stat & (BROKEN|MAINT)) + if(stat & (BROKEN|MAINT)) return return ui_interact(user) @@ -1164,29 +1161,27 @@ lighting = autoset(lighting, 1) environ = autoset(environ, 1) autoflag = 3 - area.poweralert(1, src) - if(cell.charge >= 4000) - area.poweralert(1, src) + power_alarm.clearAlarm(loc, src) else if((cell.percent() <= 30) && (cell.percent() > 15) && longtermpower < 0) // <30%, turn off equipment if(autoflag != 2) equipment = autoset(equipment, 2) lighting = autoset(lighting, 1) environ = autoset(environ, 1) - area.poweralert(0, src) + power_alarm.triggerAlarm(loc, src) autoflag = 2 else if(cell.percent() <= 15) // <15%, turn off lighting & equipment if((autoflag > 1 && longtermpower < 0) || (autoflag > 1 && longtermpower >= 0)) equipment = autoset(equipment, 2) lighting = autoset(lighting, 2) environ = autoset(environ, 1) - area.poweralert(0, src) + power_alarm.triggerAlarm(loc, src) autoflag = 1 else // zero charge, turn all off if(autoflag != 0) equipment = autoset(equipment, 0) lighting = autoset(lighting, 0) environ = autoset(environ, 0) - area.poweralert(0, src) + power_alarm.triggerAlarm(loc, src) autoflag = 0 // now trickle-charge the cell @@ -1233,7 +1228,7 @@ equipment = autoset(equipment, 0) lighting = autoset(lighting, 0) environ = autoset(environ, 0) - area.poweralert(0, src) + power_alarm.triggerAlarm(loc, src) autoflag = 0 // update icon & area power if anything changed diff --git a/code/modules/power/singularity/investigate.dm b/code/modules/power/singularity/investigate.dm index cc2b7016b5..63c54c0e54 100644 --- a/code/modules/power/singularity/investigate.dm +++ b/code/modules/power/singularity/investigate.dm @@ -1,4 +1,4 @@ -/area/engineering/poweralert(var/state, var/source) - if (state != poweralm) +/area/engineering/power_alert(var/alarming) + if (alarming) investigate_log("has a power alarm!","singulo") ..() \ No newline at end of file From a2cd104cc9169518896aab5246bd020834bc44f8 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 23 Feb 2015 13:19:23 +0100 Subject: [PATCH 83/90] Alarm centralization completion Fire alarms now handled centrally. --- code/game/area/Space Station 13 areas.dm | 13 ++++--- code/game/area/areas.dm | 39 +++++++++---------- code/game/machinery/alarm.dm | 48 ++++++++---------------- code/modules/alarm/alarm.dm | 21 ++++++++--- code/modules/alarm/alarm_handler.dm | 30 ++++++++++++--- code/modules/alarm/atmosphere_alarm.dm | 2 +- code/modules/alarm/camera_alarm.dm | 2 +- code/modules/alarm/fire_alarm.dm | 11 +++++- code/modules/alarm/motion_alarm.dm | 2 +- code/modules/alarm/power_alarm.dm | 6 +-- 10 files changed, 96 insertions(+), 78 deletions(-) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 0f19430b31..bb0d5787ab 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -110,7 +110,10 @@ var/list/ghostteleportlocs = list() power_environ = 0 ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg') -/area/space/firealert() +/area/space/fire_alert() + return + +/area/space/fire_reset() return /area/space/readyalert() @@ -633,7 +636,7 @@ var/list/ghostteleportlocs = list() /area/prison/cell_block/C name = "Prison Cell Block C" icon_state = "brig" - + //////////////////// //SPACE STATION 13// //////////////////// @@ -1070,7 +1073,7 @@ var/list/ghostteleportlocs = list() name = "\improper Engineering" icon_state = "engineering" ambience = list('sound/ambience/ambisin1.ogg','sound/ambience/ambisin2.ogg','sound/ambience/ambisin3.ogg','sound/ambience/ambisin4.ogg') - + /area/engineering/atmos name = "\improper Atmospherics" icon_state = "atmos" @@ -1082,7 +1085,7 @@ var/list/ghostteleportlocs = list() /area/engineering/atmos/storage name = "\improper Atmospherics Storage" icon_state = "atmos_storage" - + /area/engineering/drone_fabrication name = "\improper Drone Fabrication" icon_state = "drone_fab" @@ -1130,7 +1133,7 @@ var/list/ghostteleportlocs = list() /area/engineering/locker_room name = "\improper Engineering Locker Room" icon_state = "engineering_locker" - + /area/engineering/workshop name = "\improper Engineering Workshop" icon_state = "engineering_workshop" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 6e530d35d5..6e0005fa6e 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -87,9 +87,9 @@ if(!src.master.air_doors_activated) src.master.air_doors_activated = 1 for(var/obj/machinery/door/firedoor/E in src.master.all_doors) - if(!E:blocked) + if(!E.blocked) if(E.operating) - E:nextstate = CLOSED + E.nextstate = CLOSED else if(!E.density) spawn(0) E.close() @@ -98,21 +98,21 @@ if(src.master.air_doors_activated) src.master.air_doors_activated = 0 for(var/obj/machinery/door/firedoor/E in src.master.all_doors) - if(!E:blocked) + if(!E.blocked) if(E.operating) - E:nextstate = OPEN + E.nextstate = OPEN else if(E.density) spawn(0) E.open() -/area/proc/firealert() - if(name == "Space") //no fire alarms in space - return - if( !fire ) - fire = 1 - master.fire = 1 //used for firedoor checks - updateicon() +/area/proc/fire_alert() + if(!fire) + master.fire = 1 //used for firedoor checks + master.updateicon() + for(var/area/A in related) + A.fire = 1 + A.updateicon() mouse_opacity = 0 for(var/obj/machinery/door/firedoor/D in all_doors) if(!D.blocked) @@ -122,12 +122,14 @@ spawn() D.close() -/area/proc/firereset() +/area/proc/fire_reset() if (fire) - fire = 0 - master.fire = 0 //used for firedoor checks + master.fire = 0 //used for firedoor checks + master.updateicon() + for(var/area/A in related) + A.fire = 0 + A.updateicon() mouse_opacity = 0 - updateicon() for(var/obj/machinery/door/firedoor/D in all_doors) if(!D.blocked) if(D.operating) @@ -135,13 +137,6 @@ else if(D.density) spawn(0) D.open() - /*for(var/area/RA in related) - for (var/obj/machinery/camera/C in RA) - C.network.Remove("Fire Alarms") - for (var/mob/living/silicon/ai/aiPlayer in player_list) - aiPlayer.cancelAlarm("Fire", src, src) - for (var/obj/machinery/computer/station_alert/a in machines) - a.cancelAlarm("Fire", src, src)*/ /area/proc/readyalert() if(!eject) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 168f139ae3..ccd88a10fe 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -117,11 +117,6 @@ first_run() -/obj/machinery/alarm/Del() - //If there's an active alarm, clear it after minute so that alarms don't keep going forver - delayed_reset() - ..() - //needed to cancel the alarm after it is deleted /obj/machinery/alarm/proc/delayed_reset() var/area/A = alarm_area @@ -949,7 +944,6 @@ FIRE ALARM var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone /obj/machinery/firealarm/update_icon() - if(wiresexposed) switch(buildstage) if(2) @@ -983,7 +977,8 @@ FIRE ALARM return src.alarm() /obj/machinery/firealarm/emp_act(severity) - if(prob(50/severity)) alarm() + if(prob(50/severity)) + alarm(rand(30/severity, 60/severity)) ..() /obj/machinery/firealarm/attackby(obj/item/W as obj, mob/user as mob) @@ -1082,6 +1077,7 @@ FIRE ALARM var/d2 if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon)) A = A.loc + A = A.master if (A.fire) d1 = text("Reset - Lockdown", src) @@ -1147,26 +1143,26 @@ FIRE ALARM /obj/machinery/firealarm/proc/reset() if (!( src.working )) return - var/area/A = src.loc - A = A.loc - if (!( istype(A, /area) )) - return - A.firereset() + var/area/area = get_area(src) + for(var/area/A in area.related) + for(var/obj/machinery/firealarm/FA in A) + fire_alarm.clearAlarm(loc, FA) update_icon() return -/obj/machinery/firealarm/proc/alarm() - if (!( src.working )) +/obj/machinery/firealarm/proc/alarm(var/duration = 0) + if (!( src.working)) return - var/area/A = src.loc - A = A.loc - if (!( istype(A, /area) )) - return - A.firealert() + var/area/area = get_area(src) + for(var/area/A in area.related) + for(var/obj/machinery/firealarm/FA in A) + fire_alarm.triggerAlarm(loc, FA, duration) update_icon() //playsound(src.loc, 'sound/ambience/signal.ogg', 75, 0) return + + /obj/machinery/firealarm/New(loc, dir, building) ..() @@ -1182,20 +1178,6 @@ FIRE ALARM pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 -/obj/machinery/firealarm/Del() - //so fire alarms don't keep going forever - delayed_reset() - ..() - -//needed to cancel the alarm after it is deleted -/obj/machinery/firealarm/proc/delayed_reset() - var/area/A = get_area(src) - if (!A) return - - src = null - spawn(600) - A.firereset() - /obj/machinery/firealarm/initialize() if(z in config.contact_levels) if(security_level) diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm index d53b54063b..525a5b3d21 100644 --- a/code/modules/alarm/alarm.dm +++ b/code/modules/alarm/alarm.dm @@ -4,6 +4,7 @@ var/source = null // The source trigger var/source_name = "" // The name of the source should it be lost (for example a destroyed camera) var/duration = 0 // How long this source will be alarming, 0 for indefinetely. + var/severity = 1 // How severe the alarm from this source is. var/start_time = 0 // When this source began alarming. var/end_time = 0 // Use to set when this trigger should clear, in case the source is lost. @@ -22,11 +23,11 @@ var/area/last_camera_area //The last area in which cameras where fetched, used to see if the camera list should be updated. var/end_time //Used to set when this alarm should clear, in case the origin is lost. -/datum/alarm/New(var/atom/origin, var/atom/source, var/duration) +/datum/alarm/New(var/atom/origin, var/atom/source, var/duration, var/severity) src.origin = origin cameras() // Sets up both cameras and last alarm area. - set_duration(source, duration) + set_source_data(source, duration, severity) /datum/alarm/proc/process() // Has origin gone missing? @@ -41,7 +42,7 @@ AS.duration = 0 AS.end_time = world.time + ALARM_RESET_DELAY -/datum/alarm/proc/set_duration(var/atom/source, var/duration) +/datum/alarm/proc/set_source_data(var/atom/source, var/duration, var/severity) var/datum/alarm_source/AS = sources_assoc[source] if(!AS) AS = new/datum/alarm_source(source) @@ -51,6 +52,7 @@ if(AS.duration) duration = SecondsToTicks(duration) AS.duration = duration + AS.severity = severity /datum/alarm/proc/clear(var/source) var/datum/alarm_source/AS = sources_assoc[source] @@ -83,22 +85,29 @@ last_camera_area = last_area return cameras +/datum/alarm/proc/max_severity() + var/max_severity = 0 + for(var/datum/alarm_source/AS in sources) + max_severity = max(AS.severity, max_severity) + + return max_severity /****************** * Assisting procs * ******************/ /atom/proc/get_alarm_area() - return get_area(src) + var/area/A = get_area(src) + return A.master /area/get_alarm_area() - return src + return src.master /atom/proc/get_alarm_name() var/area/A = get_area(src) return A.master.name /area/get_alarm_name() - return name + return master.name /mob/get_alarm_name() return name diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm index a87202e453..6ecc60eea2 100644 --- a/code/modules/alarm/alarm_handler.dm +++ b/code/modules/alarm/alarm_handler.dm @@ -12,7 +12,7 @@ A.process() check_alarm_cleared(A) -/datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0) +/datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0, var/severity = 1) var/new_alarm //Proper origin and source mandatory if(!(origin && source)) @@ -23,16 +23,16 @@ //see if there is already an alarm of this origin var/datum/alarm/existing = alarms_assoc[origin] if(existing) - existing.set_duration(source, duration) + existing.set_source_data(source, duration, severity) else - existing = new/datum/alarm(origin, source, duration) + existing = new/datum/alarm(origin, source, duration, severity) new_alarm = 1 alarms |= existing alarms_assoc[origin] = existing if(new_alarm) alarms = dd_sortedObjectList(alarms) - notify_listeners(existing, ALARM_RAISED) + on_alarm_change(existing, ALARM_RAISED) return new_alarm @@ -51,10 +51,30 @@ if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len) alarms -= alarm alarms_assoc -= alarm.origin - notify_listeners(alarm, ALARM_CLEARED) + on_alarm_change(alarm, ALARM_CLEARED) return 1 return 0 +/datum/alarm_handler/proc/on_alarm_change(var/datum/alarm/alarm, var/was_raised) + for(var/obj/machinery/camera/C in alarm.cameras()) + if(was_raised) + C.network.Add(category) + invalidateCameraCache() + else + C.network.Remove(category) + notify_listeners(alarm, was_raised) + +/datum/alarm_handler/proc/get_alarm_severity_for_origin(var/atom/origin) + if(!origin) + return + + origin = origin.get_alarm_origin() + var/datum/alarm/existing = alarms_assoc[origin] + if(!existing) + return + + return existing.max_severity() + /atom/proc/get_alarm_origin() return src diff --git a/code/modules/alarm/atmosphere_alarm.dm b/code/modules/alarm/atmosphere_alarm.dm index 7aad426421..153b9b9f04 100644 --- a/code/modules/alarm/atmosphere_alarm.dm +++ b/code/modules/alarm/atmosphere_alarm.dm @@ -1,2 +1,2 @@ /datum/alarm_handler/atmosphere - category = "Atmosphere" + category = "Atmosphere Alarms" diff --git a/code/modules/alarm/camera_alarm.dm b/code/modules/alarm/camera_alarm.dm index 4624625043..9594a1c8a0 100644 --- a/code/modules/alarm/camera_alarm.dm +++ b/code/modules/alarm/camera_alarm.dm @@ -1,2 +1,2 @@ /datum/alarm_handler/camera - category = "Camera" \ No newline at end of file + category = "Camera Alarms" diff --git a/code/modules/alarm/fire_alarm.dm b/code/modules/alarm/fire_alarm.dm index 1b7256517e..9c7a9874c7 100644 --- a/code/modules/alarm/fire_alarm.dm +++ b/code/modules/alarm/fire_alarm.dm @@ -1,2 +1,11 @@ /datum/alarm_handler/fire - category = "Fire" + category = "Fire Alarms" + +/datum/alarm_handler/fire/on_alarm_change(var/datum/alarm/alarm, var/was_raised) + var/area/A = alarm.origin + if(istype(A)) + if(was_raised) + A.fire_alert() + else + A.fire_reset() + ..() diff --git a/code/modules/alarm/motion_alarm.dm b/code/modules/alarm/motion_alarm.dm index f51ef3c27b..cafc7c128d 100644 --- a/code/modules/alarm/motion_alarm.dm +++ b/code/modules/alarm/motion_alarm.dm @@ -1,2 +1,2 @@ /datum/alarm_handler/motion - category = "Motion" + category = "Motion Alarms" diff --git a/code/modules/alarm/power_alarm.dm b/code/modules/alarm/power_alarm.dm index 2e5c6182d8..2df6d1eab3 100644 --- a/code/modules/alarm/power_alarm.dm +++ b/code/modules/alarm/power_alarm.dm @@ -1,10 +1,10 @@ /datum/alarm_handler/power - category = "Power" + category = "Power Alarms" -/datum/alarm_handler/power/notify_listeners(var/datum/alarm/alarm, var/was_raised) - ..() +/datum/alarm_handler/power/on_alarm_change(var/datum/alarm/alarm, var/was_raised) var/area/A = alarm.origin if(istype(A)) A.power_alert(was_raised) + ..() /area/proc/power_alert(var/alarming) From f510c38d22eea024b384cc90d9423040b2b4b976 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 23 Feb 2015 15:11:13 +0100 Subject: [PATCH 84/90] Alarm centralization completion Atmosphere alarms now handled centrally. --- code/datums/wires/alarm.dm | 4 +-- code/game/area/Space Station 13 areas.dm | 3 ++ code/game/area/areas.dm | 37 ++++++---------------- code/game/machinery/alarm.dm | 16 ++-------- code/modules/alarm/alarm_handler.dm | 6 ++++ code/modules/alarm/atmosphere_alarm.dm | 17 ++++++++++ code/modules/nano/modules/alarm_monitor.dm | 2 +- 7 files changed, 41 insertions(+), 44 deletions(-) diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index 6ebc937265..c34b0291fb 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -46,7 +46,7 @@ var/const/AALARM_WIRE_AALARM = 16 //world << "Syphon Wire Cut" if(AALARM_WIRE_AALARM) - if (A.alarm_area.atmosalert(2)) + if (A.alarm_area.atmosalert(2, A)) A.post_alert(2) A.update_icon() @@ -88,6 +88,6 @@ var/const/AALARM_WIRE_AALARM = 16 if(AALARM_WIRE_AALARM) // world << "Aalarm wire pulsed" - if (A.alarm_area.atmosalert(0)) + if (A.alarm_area.atmosalert(0, A)) A.post_alert(0) A.update_icon() diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index bb0d5787ab..55cfeaccfb 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -110,6 +110,9 @@ var/list/ghostteleportlocs = list() power_environ = 0 ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg') +area/space/atmosalert() + return + /area/space/fire_alert() return diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 6e0005fa6e..ae11b5aa48 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -37,10 +37,7 @@ cameras += C return cameras -/area/proc/atmosalert(danger_level, var/set_firelocks=1) -// if(type==/area) //No atmos alarms in space -// return 0 //redudant - +/area/proc/atmosalert(danger_level, var/alarm_source) //Check all the alarms before lowering atmosalm. Raising is perfectly fine. for (var/area/RA in related) for (var/obj/machinery/alarm/AA in RA) @@ -48,37 +45,21 @@ danger_level = max(danger_level, AA.danger_level) if(danger_level != atmosalm) - if (set_firelocks && danger_level < 1 && atmosalm >= 1) + if (danger_level < 1 && atmosalm >= 1) //closing the doors on red and opening on green provides a bit of hysteresis that will hopefully prevent fire doors from opening and closing repeatedly due to noise air_doors_open() - /* - if (danger_level < 2 && atmosalm >= 2) - for(var/area/RA in related) - for(var/obj/machinery/camera/C in RA) - C.network.Remove("Atmosphere Alarms") - for(var/mob/living/silicon/aiPlayer in player_list) - aiPlayer.cancelAlarm("Atmosphere", src, src) - for(var/obj/machinery/computer/station_alert/a in machines) - a.cancelAlarm("Atmosphere", src, src) + else if (danger_level >= 2 && atmosalm < 2) + air_doors_close() - if (danger_level >= 2 && atmosalm < 2) - var/list/cameras = list() - for(var/area/RA in related) - //updateicon() - for(var/obj/machinery/camera/C in RA) - cameras += C - C.network.Add("Atmosphere Alarms") - for(var/mob/living/silicon/aiPlayer in player_list) - aiPlayer.triggerAlarm("Atmosphere", src, cameras, src) - for(var/obj/machinery/computer/station_alert/a in machines) - a.triggerAlarm("Atmosphere", src, cameras, src) - if (set_firelocks) - air_doors_close() + if (danger_level == 0) + atmosphere_alarm.clearAlarm(master, alarm_source) + else + atmosphere_alarm.triggerAlarm(master, alarm_source, severity = danger_level) atmosalm = danger_level for(var/area/RA in related) for (var/obj/machinery/alarm/AA in RA) - AA.update_icon() */ + AA.update_icon() return 1 return 0 diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index ccd88a10fe..0f2af7485f 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -117,14 +117,6 @@ first_run() -//needed to cancel the alarm after it is deleted -/obj/machinery/alarm/proc/delayed_reset() - var/area/A = alarm_area - src = null - spawn(600) - //It makes sense not to touch firelocks here. The alarm itself is gone, we have no idea what the atmos is like. - A.atmosalert(0, set_firelocks=0) - /obj/machinery/alarm/proc/first_run() alarm_area = get_area(src) if (alarm_area.master) @@ -436,7 +428,7 @@ send_signal(device_id, list("power"= 0) ) /obj/machinery/alarm/proc/apply_danger_level(var/new_danger_level) - if (report_danger_level && alarm_area.atmosalert(new_danger_level)) + if (report_danger_level && alarm_area.atmosalert(new_danger_level, src)) post_alert(new_danger_level) update_icon() @@ -454,12 +446,10 @@ if(alert_level==2) alert_signal.data["alert"] = "severe" - atmosphere_alarm.triggerAlarm(src.loc, src) else if (alert_level==1) alert_signal.data["alert"] = "minor" else if (alert_level==0) alert_signal.data["alert"] = "clear" - atmosphere_alarm.clearAlarm(src.loc, src) frequency.post_signal(src, alert_signal) @@ -766,13 +756,13 @@ return 1 if(href_list["atmos_alarm"]) - if (alarm_area.atmosalert(2)) + if (alarm_area.atmosalert(2, src)) apply_danger_level(2) update_icon() return 1 if(href_list["atmos_reset"]) - if (alarm_area.atmosalert(0)) + if (alarm_area.atmosalert(0, src)) apply_danger_level(0) update_icon() return 1 diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm index 6ecc60eea2..ef9bfa8bd6 100644 --- a/code/modules/alarm/alarm_handler.dm +++ b/code/modules/alarm/alarm_handler.dm @@ -47,6 +47,12 @@ existing.clear(source) return check_alarm_cleared(existing) +/datum/alarm_handler/proc/major_alarms() + return alarms + +/datum/alarm_handler/proc/minor_alarms() + return alarms + /datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm) if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len) alarms -= alarm diff --git a/code/modules/alarm/atmosphere_alarm.dm b/code/modules/alarm/atmosphere_alarm.dm index 153b9b9f04..9751319111 100644 --- a/code/modules/alarm/atmosphere_alarm.dm +++ b/code/modules/alarm/atmosphere_alarm.dm @@ -1,2 +1,19 @@ /datum/alarm_handler/atmosphere category = "Atmosphere Alarms" + +/datum/alarm_handler/atmosphere/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0, var/severity = 1) + ..() + +/datum/alarm_handler/atmosphere/major_alarms() + var/list/major_alarms = new() + for(var/datum/alarm/A in alarms) + if(A.max_severity() > 1) + major_alarms.Add(A) + return major_alarms + +/datum/alarm_handler/atmosphere/minor_alarms() + var/list/minor_alarms = new() + for(var/datum/alarm/A in alarms) + if(A.max_severity() == 1) + minor_alarms.Add(A) + return minor_alarms diff --git a/code/modules/nano/modules/alarm_monitor.dm b/code/modules/nano/modules/alarm_monitor.dm index f828d9d776..e4de543498 100644 --- a/code/modules/nano/modules/alarm_monitor.dm +++ b/code/modules/nano/modules/alarm_monitor.dm @@ -56,7 +56,7 @@ var/categories[0] for(var/datum/alarm_handler/AH in alarm_handlers) categories[++categories.len] = list("category" = AH.category, "alarms" = list()) - for(var/datum/alarm/A in AH.alarms) + for(var/datum/alarm/A in AH.major_alarms()) var/cameras[0] var/lost_sources[0] From 4659415af2a971f3950e71d7f51556a5b2d399b7 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 23 Feb 2015 17:14:20 +0100 Subject: [PATCH 85/90] Atmospheric computer NanoUI interface. --- code/game/machinery/computer/atmos_alert.dm | 141 ++++++++------------ nano/templates/atmos_alert.tmpl | 17 +++ 2 files changed, 70 insertions(+), 88 deletions(-) create mode 100644 nano/templates/atmos_alert.tmpl diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index 8e978853c4..62b00dab0f 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -1,116 +1,81 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -// Converting these to global lists may be a bit laggy when removal procs are called. Consider -// rewriting this properly to fix the update bug, rather than unifying all monitors. ~Z - var/global/list/priority_air_alarms = list() var/global/list/minor_air_alarms = list() + /obj/machinery/computer/atmos_alert name = "atmospheric alert computer" desc = "Used to access the station's atmospheric sensors." circuit = "/obj/item/weapon/circuitboard/atmos_alert" icon_state = "alert:0" - var/receive_frequency = 1437 - var/datum/radio_frequency/radio_connection - -/obj/machinery/computer/atmos_alert/initialize() +/obj/machinery/computer/atmos_alert/New() ..() - set_frequency(receive_frequency) - -/obj/machinery/computer/atmos_alert/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) return - - var/zone = signal.data["zone"] - var/severity = signal.data["alert"] - - if(!zone || !severity) return - - minor_air_alarms -= zone - priority_air_alarms -= zone - if(severity=="severe") - priority_air_alarms |= zone - else if (severity=="minor") - minor_air_alarms |= zone - update_icon() - return - - -/obj/machinery/computer/atmos_alert/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, receive_frequency) - receive_frequency = new_frequency - radio_connection = radio_controller.add_object(src, receive_frequency, RADIO_ATMOSIA) - + atmosphere_alarm.register(src, /obj/machinery/computer/station_alert/update_icon) /obj/machinery/computer/atmos_alert/attack_hand(mob/user) - if(..(user)) - return - user << browse(return_text(),"window=computer") - user.set_machine(src) - onclose(user, "computer") + ui_interact(user) -/obj/machinery/computer/atmos_alert/process() - if(..()) - src.updateDialog() +/obj/machinery/computer/atmos_alert/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + var/data[0] + var/major_alarms[0] + var/minor_alarms[0] + + for(var/datum/alarm/alarm in atmosphere_alarm.major_alarms()) + major_alarms[++major_alarms.len] = list("name" = sanitize(alarm.alarm_name()), "ref" = "\ref[alarm]") + + for(var/datum/alarm/alarm in atmosphere_alarm.minor_alarms()) + minor_alarms[++minor_alarms.len] = list("name" = sanitize(alarm.alarm_name()), "ref" = "\ref[alarm]") + + data["priority_alarms"] = major_alarms + data["minor_alarms"] = minor_alarms + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "atmos_alert.tmpl", src.name, 500, 500) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) /obj/machinery/computer/atmos_alert/update_icon() ..() if(stat & (NOPOWER|BROKEN)) return - if(priority_air_alarms.len) + var/list/alarms = atmosphere_alarm.major_alarms() + if(alarms.len) icon_state = "alert:2" - - else if(minor_air_alarms.len) - icon_state = "alert:1" - else - icon_state = "alert:0" + alarms = atmosphere_alarm.minor_alarms() + if(alarms.len) + icon_state = "alert:1" + else + icon_state = initial(icon_state) return - -/obj/machinery/computer/atmos_alert/proc/return_text() - var/priority_text - var/minor_text - - if(priority_air_alarms.len) - for(var/zone in priority_air_alarms) - priority_text += "[zone] X
    " - else - priority_text = "No priority alerts detected.
    " - - if(minor_air_alarms.len) - for(var/zone in minor_air_alarms) - minor_text += "[zone] X
    " - else - minor_text = "No minor alerts detected.
    " - - var/output = {"[name]
    -Priority Alerts:
    -[priority_text] -
    -
    -Minor Alerts:
    -[minor_text] -
    "} - - return output - - /obj/machinery/computer/atmos_alert/Topic(href, href_list) if(..()) - return + return 1 - if(href_list["priority_clear"]) - var/removing_zone = href_list["priority_clear"] - for(var/zone in priority_air_alarms) - if(ckey(zone) == removing_zone) - priority_air_alarms -= zone + if(href_list["clear_alarm"]) + var/datum/alarm/alarm = locate(href_list["clear_alarm"]) in atmosphere_alarm.alarms + if(alarm) + for(var/datum/alarm_source/alarm_source in alarm.sources) + var/obj/machinery/alarm/air_alarm = alarm_source.source + if(istype(air_alarm)) + var/list/new_ref = list("atmos_reset" = 1) + air_alarm.Topic(href, new_ref, custom_state = atmos_alert_topic) + return 1 - if(href_list["minor_clear"]) - var/removing_zone = href_list["minor_clear"] - for(var/zone in minor_air_alarms) - if(ckey(zone) == removing_zone) - minor_air_alarms -= zone - update_icon() - return + +var/datum/topic_state/atmos_alert/atmos_alert_topic = new() + +/datum/topic_state/atmos_alert + flags = NANO_IGNORE_DISTANCE + +/datum/topic_state/air_alarm/href_list(var/mob/user) + var/list/extra_href = list() + extra_href["remote_connection"] = 1 + extra_href["remote_access"] = 1 + + return extra_href diff --git a/nano/templates/atmos_alert.tmpl b/nano/templates/atmos_alert.tmpl new file mode 100644 index 0000000000..dc6f3b9da8 --- /dev/null +++ b/nano/templates/atmos_alert.tmpl @@ -0,0 +1,17 @@ +

    Priority Alerts

    +{{for data.priority_alarms}} +
    + {{:value.name}} {{:helper.link('Reset', null, {'clear_alarm' : value.ref})}} +
    +{{empty}} + No priority alerts detected. +{{/for}} + +

    Minor Alerts

    +
    + {{for data.minor_alarms}} + {{:value.name}} {{:helper.link('Reset', null, {'clear_alarm' : value.ref})}} + {{empty}} + No minor alerts detected. + {{/for}} +
    From 5be726753f826b4e7c0d5423e6f91177761f12b8 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sat, 21 Feb 2015 10:20:49 +0100 Subject: [PATCH 86/90] Updates paths after the projectile update. Adds rig modules to the uplink. --- code/game/gamemodes/game_mode.dm | 13 +++++++++++-- .../objects/items/weapons/storage/uplink_kits.dm | 8 ++++++++ code/modules/clothing/spacesuits/rig/suits/merc.dm | 5 ++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 45114bef14..ba10c7254c 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -35,12 +35,12 @@ "Ammunition" = list( new/datum/uplink_item(/obj/item/ammo_magazine/a357, 2, ".357", "RA"), new/datum/uplink_item(/obj/item/ammo_magazine/mc9mm, 2, "9mm", "R9"), - new/datum/uplink_item(/obj/item/weapon/dart_cartridge, 2, "Darts", "AD"), + new/datum/uplink_item(/obj/item/ammo_magazine/chemdart, 2, "Darts", "AD"), ), "Highly Visible and Dangerous Weapons" = list( new/datum/uplink_item(/obj/item/weapon/storage/box/emps, 3, "5 EMP Grenades", "EM"), new/datum/uplink_item(/obj/item/weapon/melee/energy/sword, 4, "Energy Sword", "ES"), - new/datum/uplink_item(/obj/item/weapon/gun/dartgun, 5, "Dart Gun", "DG"), + new/datum/uplink_item(/obj/item/weapon/gun/projectile/dartgun, 5, "Dart Gun", "DG"), new/datum/uplink_item(/obj/item/weapon/gun/energy/crossbow, 5, "Energy Crossbow", "XB"), new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/g9mm, 5, "Silenced 9mm", "S9"), new/datum/uplink_item(/obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser, 6, "Exosuit Rigged Laser", "RL"), @@ -89,6 +89,15 @@ new/datum/uplink_item(/obj/item/weapon/storage/firstaid/surgery, 5, "Surgery kit", "SK"), new/datum/uplink_item(/obj/item/weapon/storage/firstaid/combat, 5, "Combat medical kit", "CM") ), + "Hardsuit Modules" = list( + new/datum/uplink_item(/obj/item/rig_module/vision/thermal, 2, "Thermal Scanner", "RTS"), + new/datum/uplink_item(/obj/item/rig_module/fabricator/energy_net, 3, "Net Projector", "REN"), + new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/ewar_voice, 4, "Electrowarfare Suite and Voice Synthesiser", "REV"), + new/datum/uplink_item(/obj/item/rig_module/maneuvering_jets, 4, "Maneuvering Jets", "RMJ"), + new/datum/uplink_item(/obj/item/rig_module/mounted/egun, 6, "Mounted Energy Gun", "REG"), + new/datum/uplink_item(/obj/item/rig_module/power_sink, 6, "Power Sink", "RPS"), + new/datum/uplink_item(/obj/item/rig_module/mounted, 8, "Mounted Laser Cannon", "RLC") + ), "(Pointless) Badassery" = list( new/datum/uplink_item(/obj/item/toy/syndicateballoon, 10, "For showing that You Are The BOSS (Useless Balloon)", "BS"), new/datum/uplink_item(/obj/item/toy/nanotrasenballoon, 10, "For showing that you love NT SOO much (Useless Balloon)", "NT") diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 2ec3c064b9..085e23f9b6 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -227,3 +227,11 @@ for(var/reagent in reagents) C.reagents.add_reagent(reagent, reagents[reagent] * C.storage_slots) +/obj/item/weapon/storage/box/syndie_kit/ewar_voice + name = "Electrowarfare and Voice Synthesiser kit" + desc = "Kit for confounding organic and synthetic entities alike." + +/obj/item/weapon/storage/box/syndie_kit/ewar_voice/New() + ..() + new /obj/item/rig_module/electrowarfare_suite(src) + new /obj/item/rig_module/voice(src) diff --git a/code/modules/clothing/spacesuits/rig/suits/merc.dm b/code/modules/clothing/spacesuits/rig/suits/merc.dm index 7a0d95a4bd..b44a1b4876 100644 --- a/code/modules/clothing/spacesuits/rig/suits/merc.dm +++ b/code/modules/clothing/spacesuits/rig/suits/merc.dm @@ -24,4 +24,7 @@ /obj/item/rig_module/electrowarfare_suite, /obj/item/rig_module/chem_dispenser/combat, /obj/item/rig_module/fabricator/energy_net - ) \ No newline at end of file + ) + +/obj/item/weapon/rig/merc/no_modules + initial_modules = list() From c55f807b42ccbf3dac3843ca670f5125c29b77a5 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 23 Feb 2015 20:56:48 +0100 Subject: [PATCH 87/90] Removes random Telecrystal grants, instead increases the start amount by 2. --- code/game/gamemodes/cult/cult.dm | 1 - code/game/gamemodes/game_mode.dm | 13 ++----------- code/game/gamemodes/malfunction/malfunction.dm | 1 - code/game/gamemodes/meteor/meteor.dm | 1 - code/game/gamemodes/revolution/rp_revolution.dm | 2 +- code/game/gamemodes/traitor/traitor.dm | 1 - 6 files changed, 3 insertions(+), 16 deletions(-) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 4c4226e4ea..b86f46fa89 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -28,7 +28,6 @@ recommended_enemies = 4 uplink_welcome = "Nar-Sie Uplink Console:" - uplink_uses = 10 var/datum/mind/sacrifice_target = null var/finished = 0 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index c42d074837..d39a025cbd 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -30,7 +30,7 @@ var/newscaster_announcements = null var/ert_disabled = 0 var/uplink_welcome = "Illegal Uplink Console:" - var/uplink_uses = 10 + var/uplink_uses = 12 var/list/datum/uplink_item/uplink_items = list( "Ammunition" = list( new/datum/uplink_item(/obj/item/ammo_magazine/a357, 2, ".357", "RA"), @@ -75,6 +75,7 @@ new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/clerical, 3, "Morphic Clerical Kit", "CK"), new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/space, 3, "Space Suit", "SS"), new/datum/uplink_item(/obj/item/clothing/glasses/thermal/syndi, 3, "Thermal Imaging Glasses", "TM"), + new/datum/uplink_item(/obj/item/clothing/suit/storage/vest/heavy/merc, 4, "Heavy Armor Vest", "HAV"), new/datum/uplink_item(/obj/item/weapon/aiModule/syndicate, 7, "Hacked AI Upload Module", "AI"), new/datum/uplink_item(/obj/item/device/powersink, 5, "Powersink (DANGER!)", "PS",), new/datum/uplink_item(/obj/item/device/radio/beacon/syndicate, 7, "Singularity Beacon (DANGER!)", "SB"), @@ -269,16 +270,6 @@ special_role == "Head Revolutionary" && prob(30)) suspects += man - // If they're a traitor or likewise, give them extra TC in exchange. - var/obj/item/device/uplink/hidden/suplink = man.mind.find_syndicate_uplink() - if(suplink) - var/extra = 4 - suplink.uses += extra - man << "\red We have received notice that enemy intelligence suspects you to be linked with us. We have thus invested significant resources to increase your uplink's capacity." - else - // Give them a warning! - man << "\red They are on to you!" - // Some poor people who were just in the wrong place at the wrong time.. else if(prob(10)) suspects += man diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm index 77b6d67357..2ea49b24e4 100644 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ b/code/game/gamemodes/malfunction/malfunction.dm @@ -10,7 +10,6 @@ recommended_enemies = 1 uplink_welcome = "Crazy AI Uplink Console:" - uplink_uses = 10 var/const/waittime_l = 600 var/const/waittime_h = 1800 // started at 1800 diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index 712512bd47..88106626f8 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -9,7 +9,6 @@ votable = 0 uplink_welcome = "EVIL METEOR Uplink Console:" - uplink_uses = 10 /datum/game_mode/meteor/announce() diff --git a/code/game/gamemodes/revolution/rp_revolution.dm b/code/game/gamemodes/revolution/rp_revolution.dm index 5899f04837..5cf1bcc08d 100644 --- a/code/game/gamemodes/revolution/rp_revolution.dm +++ b/code/game/gamemodes/revolution/rp_revolution.dm @@ -9,7 +9,7 @@ recommended_enemies = 3 uplink_welcome = "AntagCorp Uplink Console:" - uplink_uses = 5 + uplink_uses = 7 newscaster_announcements = /datum/news_announcement/revolution_inciting_event diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 2e0f8b91fa..24a99192ed 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -13,7 +13,6 @@ uplink_welcome = "AntagCorp Portable Teleportation Relay:" - uplink_uses = 10 var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) From d8245540efe07c6d0930e35ee0c4b1fd4de07797 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 23 Feb 2015 18:51:50 +0100 Subject: [PATCH 88/90] Restores silicon alarm notices. --- code/game/machinery/computer/atmos_alert.dm | 4 ++ code/modules/alarm/alarm_handler.dm | 53 --------------- code/modules/mob/living/silicon/ai/life.dm | 1 + code/modules/mob/living/silicon/robot/life.dm | 1 + code/modules/mob/living/silicon/silicon.dm | 64 +++++++++++++++++++ 5 files changed, 70 insertions(+), 53 deletions(-) diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index 62b00dab0f..8306b3a87e 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -13,6 +13,10 @@ var/global/list/minor_air_alarms = list() /obj/machinery/computer/atmos_alert/New() ..() atmosphere_alarm.register(src, /obj/machinery/computer/station_alert/update_icon) + +/obj/machinery/computer/atmos_alert/Del() + atmosphere_alarm.unregister(src) + ..() /obj/machinery/computer/atmos_alert/attack_hand(mob/user) ui_interact(user) diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm index ef9bfa8bd6..73bd2348aa 100644 --- a/code/modules/alarm/alarm_handler.dm +++ b/code/modules/alarm/alarm_handler.dm @@ -97,56 +97,3 @@ /datum/alarm_handler/proc/notify_listeners(var/alarm, var/was_raised) for(var/listener in listeners) call(listener, listeners[listener])(src, alarm, was_raised) - -/******** -* DEBUG * -********/ -/obj/item/device/alarm_debug - name = "An alarm debug tool - Self" - desc = "Alarm Up. Alarm Reset." - icon = 'icons/obj/radio.dmi' - icon_state = "beacon" - item_state = "signaler" - var/obj/nano_module/alarm_monitor/ai/alarm_monitor - -/obj/item/device/alarm_debug/New() - ..() - alarm_monitor = new(src) - -/obj/item/device/alarm_debug/loc - name = "An alarm debug tool - Loc" - -/obj/item/device/alarm_debug/verb/alarm() - set name = "Alarm" - set category = "Debug" - usr << "Raising alarm" - fire_alarm.triggerAlarm(src, src) - -/obj/item/device/alarm_debug/verb/reset() - set name = "Reset" - set category = "Debug" - usr << "Clearing alarm" - fire_alarm.clearAlarm(src, src) - -/obj/item/device/alarm_debug/loc/alarm() - set name = "Alarm" - set category = "Debug" - usr << "Raising alarm" - fire_alarm.triggerAlarm(src.loc, src) - -/obj/item/device/alarm_debug/loc/reset() - set name = "Reset" - set category = "Debug" - usr << "Clearing alarm" - fire_alarm.clearAlarm(src.loc, src) - -/obj/item/device/alarm_debug/verb/nano() - set name = "Nano" - set category = "Debug" - alarm_monitor.ui_interact(usr) - -/obj/item/device/alarm_debug/attack_self(var/mob/user) - alarm_monitor.ui_interact(user) - -#undef ALARM_RAISED -#undef ALARM_CLEARED diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index a1b9f20605..602e427f95 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -171,6 +171,7 @@ sleep(50) theAPC = null + process_queued_alarms() regular_hud_updates() switch(src.sensor_mode) if (SEC_HUD) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 8295687de9..c5d74c54dd 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -18,6 +18,7 @@ use_power() process_killswitch() process_locks() + process_queued_alarms() update_canmove() /mob/living/silicon/robot/proc/clamp_values() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index a4ee540c2b..fc647dcbeb 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -27,6 +27,9 @@ var/sensor_mode = 0 //Determines the current HUD. + var/next_alarm_notice + var/list/datum/alarm/queued_alarms = new() + #define SEC_HUD 1 //Security HUD mode #define MED_HUD 2 //Medical HUD mode @@ -35,6 +38,11 @@ add_language("Galactic Common") init_subsystems() +/mob/living/silicon/Del() + for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) + AH.unregister(src) + ..() + /mob/living/silicon/proc/SetName(pickedName as text) real_name = pickedName name = real_name @@ -291,3 +299,59 @@ /mob/living/silicon/proc/init_subsystems() alarm_monitor = new/obj/nano_module/alarm_monitor/borg(src) + for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) + AH.register(src, /mob/living/silicon/proc/receive_alarm) + queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order + +/mob/living/silicon/proc/receive_alarm(var/datum/alarm_handler/alarm_handler, var/datum/alarm/alarm, was_raised) + if(!next_alarm_notice) + next_alarm_notice = world.time + SecondsToTicks(10) + + var/list/alarms = queued_alarms[alarm_handler] + if(was_raised) + // Raised alarms are always set + alarms[alarm] = 1 + else + // Alarms that were raised but then cleared before the next notice are instead removed + if(alarm in alarms) + alarms -= alarm + // And alarms that have only been cleared thus far are set as such + else + alarms[alarm] = -1 + +/mob/living/silicon/proc/process_queued_alarms() + if(next_alarm_notice && (world.time > next_alarm_notice)) + next_alarm_notice = 0 + + for(var/datum/alarm_handler/AH in queued_alarms) + var/list/alarms = queued_alarms[AH] + var/reported = 0 + for(var/datum/alarm/A in alarms) + if(alarms[A] == 1) + if(!reported) + reported = 1 + src << "--- [AH.category] Detected ---" + raised_alarm(A) + + for(var/datum/alarm_handler/AH in queued_alarms) + var/list/alarms = queued_alarms[AH] + var/reported = 0 + for(var/datum/alarm/A in alarms) + if(alarms[A] == -1) + if(!reported) + reported = 1 + src << "--- [AH.category] Cleared ---" + src << "\The [A.alarm_name()]." + + for(var/datum/alarm_handler/AH in queued_alarms) + var/list/alarms = queued_alarms[AH] + alarms.Cut() + +/mob/living/silicon/proc/raised_alarm(var/datum/alarm/A) + src << "[A.alarm_name()]!" + +/mob/living/silicon/ai/raised_alarm(var/datum/alarm/A) + var/cameratext = "" + for(var/obj/machinery/camera/C in A.cameras()) + cameratext += "[(cameratext == "")? "" : "|"][C.c_tag]" + src << "[A.alarm_name()]! ([(cameratext)? cameratext : "No Camera"])" From 391ddd970e68dc0ba06dafd5fd8303052e8ea066 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 24 Feb 2015 17:55:39 +1030 Subject: [PATCH 89/90] Resolves remaining issues with xenohydro PR. --- .../hydroponics/spreading/spreading.dm | 6 ++-- code/modules/hydroponics/trays/tray.dm | 2 +- .../hydroponics/trays/tray_update_icons.dm | 3 +- code/modules/reagents/Chemistry-Machinery.dm | 33 ++++++++++++++++--- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index 22dbabe275..4f52b82cee 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -114,11 +114,11 @@ spread_chance = seed.get_trait(TRAIT_POTENCY) spread_distance = ((growth_type>0) ? round(spread_chance*0.6) : round(spread_chance*0.3)) - - set_dir(calc_dir()) update_icon() - spawn(1) + spawn(1) // Plants will sometimes be spawned in the turf adjacent to the one they need to end up in, for the sake of correct dir/etc being set. + set_dir(calc_dir()) + update_icon() plant_controller.add_plant(src) // Some plants eat through plating. if(!isnull(seed.chems["pacid"])) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 968d707472..d915a116c5 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -530,7 +530,7 @@ A.hydrotray_type = src.type del(src) else if(O.force && seed) - user.visible_message("\The [user] attacks the [seed.display_name] with \the [O]!") + user.visible_message("\The [seed.display_name] has been attacked by [user] with \the [O]!") if(!dead) health -= O.force check_health() diff --git a/code/modules/hydroponics/trays/tray_update_icons.dm b/code/modules/hydroponics/trays/tray_update_icons.dm index e13bf644f0..ea8fb669cd 100644 --- a/code/modules/hydroponics/trays/tray_update_icons.dm +++ b/code/modules/hydroponics/trays/tray_update_icons.dm @@ -36,8 +36,7 @@ if(age >= seed.get_trait(TRAIT_MATURATION)) overlay_stage = seed.growth_stages else - overlay_stage = max(1,round(seed.get_trait(TRAIT_MATURATION) / seed.growth_stages)) - + overlay_stage = max(1,round(age/round(seed.get_trait(TRAIT_MATURATION)/seed.growth_stages))) var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-[overlay_stage]" var/image/plant_overlay = plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] if(!plant_overlay) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index dbe37780be..8d3f0016cf 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -3,8 +3,8 @@ #define GAS 3 #define CHEM_DISPENSER_ENERGY_COST 0.1 //How many energy points do we use per unit of chemical? - #define BOTTLE_SPRITES list("bottle-1", "bottle-2", "bottle-3", "bottle-4") //list of available bottle sprites +#define REAGENTS_PER_SHEET 20 /obj/machinery/chem_dispenser name = "chem dispenser" @@ -827,6 +827,14 @@ var/obj/item/weapon/reagent_containers/beaker = null var/limit = 10 var/list/holdingitems = list() + var/list/sheet_reagents = list( + /obj/item/stack/sheet/mineral/iron = "iron", + /obj/item/stack/sheet/mineral/uranium = "uranium", + /obj/item/stack/sheet/mineral/phoron = "phoron", + /obj/item/stack/sheet/mineral/gold = "gold", + /obj/item/stack/sheet/mineral/silver = "silver", + /obj/item/stack/sheet/mineral/mhydrogen = "hydrogen" + ) /obj/machinery/reagentgrinder/New() ..() @@ -857,12 +865,10 @@ usr << "The machine cannot hold anymore items." return 1 - //Fill machine with the plantbag! if(!istype(O)) return if(istype(O,/obj/item/weapon/storage/bag/plants)) - var/failed = 1 for (var/obj/item/G in O.contents) if(!O.reagents || !O.reagents.total_volume) @@ -886,7 +892,7 @@ src.updateUsrDialog() return 0 - if(!O.reagents || !O.reagents.total_volume) + if(!sheet_reagents[O.type] && (!O.reagents || !O.reagents.total_volume)) user << "\The [O] is not suitable for blending." return 1 @@ -1008,8 +1014,25 @@ // Process. for (var/obj/item/O in holdingitems) - O.reagents.trans_to(beaker, min(O.reagents.total_volume, (beaker.reagents.maximum_volume - beaker.reagents.total_volume))) + + if(!O || !istype(O)) + holdingitems -= null + continue + + var/remaining_volume = beaker.reagents.maximum_volume - beaker.reagents.total_volume + if(sheet_reagents[O.type]) + var/obj/item/stack/stack = O + if(istype(stack)) + var/amount_to_take = max(0,min(stack.amount,round(remaining_volume/REAGENTS_PER_SHEET))) + if(amount_to_take) + stack.use(amount_to_take) + beaker.reagents.add_reagent(sheet_reagents[stack.type], (amount_to_take*REAGENTS_PER_SHEET)) + continue + + O.reagents.trans_to(beaker, min(O.reagents.total_volume, remaining_volume)) if(O.reagents.total_volume == 0) remove_object(O) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break + +#undef REAGENTS_PER_SHEET \ No newline at end of file From 8fc4b31238d18171f049950083fb6582d3a97fb5 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 24 Feb 2015 18:02:03 +1030 Subject: [PATCH 90/90] Updated changelog. --- html/changelog.html | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/html/changelog.html b/html/changelog.html index 53ce87b226..11ccdbedce 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,15 @@ should be listed in the changelog upon commit though. Thanks. --> +
    +

    24 February 2015

    +

    Zuhayr updated:

    +
      +
    • Major changes to the kitchen and hydroponics mechanics. Review the detailed changelog here,
    • +
    +
    + +

    18 February 2015

    PsiOmegaDelta updated: