From e4f2d0c064fa47da81491bbfdcb8e87c5645f0a4 Mon Sep 17 00:00:00 2001 From: c0 Date: Sat, 12 Mar 2016 14:58:40 +0300 Subject: [PATCH 1/5] Bioengineering Part 1 --- code/game/machinery/cloning.dm | 9 +- code/game/machinery/constructable_frame.dm | 11 + code/modules/hydroponics/gene_modder.dm | 387 +++++++++++++++++++++ code/modules/hydroponics/grown.dm | 8 +- code/modules/hydroponics/grown/citrus.dm | 2 +- code/modules/hydroponics/growninedible.dm | 6 +- code/modules/hydroponics/plant_genes.dm | 42 +++ code/modules/hydroponics/seeds.dm | 5 +- icons/obj/hydroponics/equipment.dmi | Bin 16233 -> 17964 bytes tgstation.dme | 1 + 10 files changed, 454 insertions(+), 17 deletions(-) create mode 100644 code/modules/hydroponics/gene_modder.dm diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 85b3363e073..a6d8287c1db 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -353,13 +353,8 @@ /obj/item/weapon/storage/box/disks/New() ..() - new /obj/item/weapon/disk/data(src) - new /obj/item/weapon/disk/data(src) - new /obj/item/weapon/disk/data(src) - new /obj/item/weapon/disk/data(src) - new /obj/item/weapon/disk/data(src) - new /obj/item/weapon/disk/data(src) - new /obj/item/weapon/disk/data(src) + for(var/i in 1 to 7) + new /obj/item/weapon/disk/data(src) /* * Manual -- A big ol' manual. diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 79f88ef5797..b0775204b67 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -791,3 +791,14 @@ obj/item/weapon/circuitboard/rdserver req_components = list( /obj/item/weapon/stock_parts/console_screen = 1, /obj/item/weapon/stock_parts/matter_bin = 3) + +/obj/item/weapon/circuitboard/plantgenes + name = "circuit board (Plant DNA Manipulator)" + build_path = /obj/machinery/plantgenes + board_type = "machine" + origin_tech = "programming=2;biotech=3" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 2, + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/scanning_module = 1,) \ No newline at end of file diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm new file mode 100644 index 00000000000..37695f75e65 --- /dev/null +++ b/code/modules/hydroponics/gene_modder.dm @@ -0,0 +1,387 @@ +/obj/machinery/plantgenes + name = "plant DNA manipulator" + desc = "An advanced device designed to manipulate plant genetic makeup." + icon = 'icons/obj/hydroponics/equipment.dmi' + icon_state = "dnamod" + density = 1 + anchored = 1 + + var/obj/item/seeds/seed + var/obj/item/weapon/disk/plantgene/disk + + var/list/core_genes = list() + var/list/reagent_genes = list() + var/list/trait_genes = list() + + var/datum/plant_gene/target + var/operation = "" + var/rating = 0 // TODO: add failures, make it useful + +/obj/machinery/plantgenes/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/plantgenes(src) + component_parts += new /obj/item/weapon/stock_parts/console_screen(src) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + RefreshParts() + +/obj/machinery/plantgenes/RefreshParts() + rating = 0 + for(var/obj/item/weapon/stock_parts/S in component_parts) + rating += S.rating-1 + +/obj/machinery/plantgenes/update_icon() + ..() + overlays.Cut() + if((stat & (BROKEN|NOPOWER))) + icon_state = "dnamod-off" + else + icon_state = "dnamod" + if(seed) + overlays += "dnamod-dna" + if(panel_open) + overlays += "dnamod-open" + +/obj/machinery/plantgenes/attackby(obj/item/I, mob/user, params) + if(default_deconstruction_screwdriver(user, "dnamod", "dnamod", I)) + update_icon() + return + if(exchange_parts(user, I)) + return + if(default_deconstruction_crowbar(I)) + return + if(isrobot(user)) + return + + if(istype(I, /obj/item/seeds)) + if(seed) + user << "A sample is already loaded into the machine!" + else + if(!user.drop_item()) + return + insert_seed(I) + user << "You add [I] to the machine." + interact(user) + return + else if(istype(I, /obj/item/weapon/disk/plantgene)) + if(disk) + user << "A data disk is already loaded into the machine!" + else + if(!user.drop_item()) + return + disk = I + disk.loc = src + user << "You add [I] to the machine." + interact(user) + else + ..() + + +/obj/machinery/plantgenes/attack_hand(mob/user) + if(..()) + return + interact(user) + +/obj/machinery/plantgenes/interact(mob/user) + user.set_machine(src) + if(!user) + return + + var/datum/browser/popup = new(user, "plantdna", "Plant DNA Manipulator", 450, 600) // Set up the popup browser window + if(!( in_range(src, user) || istype(user, /mob/living/silicon) )) + popup.close() + return + + var/dat = "" + + if(operation) + if(!seed || (!target && operation != "insert")) + operation = "" + target = null + interact(user) + return + if((operation == "replace" || operation == "insert") && (!disk || !disk.gene)) + operation = "" + target = null + interact(user) + return + + dat += "

Confirm Operation

" + dat += "
Are you sure you want to [operation] " + switch(operation) + if("remove") + dat += "[target.get_name()] gene from \the [seed]?
" +// dat += "Failure may damage or destroy the sample!" // No failures yet. TODO: add failures + if("extract") + dat += "[target.get_name()] gene from \the [seed]?
" + dat += "The sample will be destroyed in process!" + if("replace") + dat += "[target.get_name()] gene with [disk.gene.get_name()]?
" +// dat += "Failure may damage or destroy the sample!" // No failures yet. TODO: add failures + if("insert") + dat += "[disk.gene.get_name()] gene into \the [seed]?
" +// dat += "Failure may damage or destroy the sample!" // No failures yet. TODO: add failures + dat += "
Confirm " + dat += "Abort
" + popup.set_content(dat) + popup.open() + return + + dat+= "
" + + dat += "" + + dat += "" + + dat += "
" + + if(seed) + var/can_insert = disk && disk.gene && disk.gene.can_add(seed) + var/can_extract = disk && !disk.read_only + + dat += "

Core Genes

" + for(var/a in core_genes) + var/datum/plant_gene/G = a + if(!G) + continue + dat += "" + dat += "
[G.get_name()]" + if(can_extract) + dat += "Extract" + if(can_insert && istype(disk.gene, G.type)) + dat += "Replace" + dat += "
" + + if(seed.yield != -1) + dat += "

Content Genes

" + if(reagent_genes.len) + dat += "" + for(var/a in reagent_genes) + var/datum/plant_gene/G = a + dat += "" + dat += "
[G.get_name()]" + if(can_extract) + dat += "Extract" + dat += "Remove" + dat += "
" + else + dat += "No content-related genes detected in sample.
" + dat += "
" + if(can_insert && istype(disk.gene, /datum/plant_gene/reagent)) + dat += "Insert: [disk.gene.get_name()]" + + dat += "

Trait Genes

" + if(trait_genes.len) + dat += "" + for(var/a in trait_genes) + var/datum/plant_gene/G = a + dat += "" + dat += "
[G.get_name()]" + if(can_extract) + dat += "Extract" + dat += "Remove" + dat += "
" + else + dat += "No trait-related genes detected in sample.
" + if(can_insert && istype(disk.gene, /datum/plant_gene/trait)) + dat += "Insert: [disk.gene.get_name()]" + dat += "
" + else + dat += "
No sample found.

Please, insert a plant sample to use this device." + popup.set_content(dat) + popup.open() + + +/obj/machinery/plantgenes/Topic(var/href, var/list/href_list) + if(..()) + return + usr.set_machine(src) + + if(href_list["eject_seed"] && !operation) + if (seed) + seed.loc = src.loc + seed.verb_pickup() + seed = null + update_genes() + update_icon() + else + var/obj/item/I = usr.get_active_hand() + if (istype(I, /obj/item/seeds)) + if(!usr.drop_item()) + return + insert_seed(I) + usr << "You add [I] to the machine." + update_icon() + else if(href_list["eject_disk"] && !operation) + if (disk) + disk.loc = src.loc + disk.verb_pickup() + disk = null + update_genes() + else + var/obj/item/I = usr.get_active_hand() + if(istype(I, /obj/item/weapon/disk/plantgene)) + if(!usr.drop_item()) + return + disk = I + disk.loc = src + usr << "You add [I] to the machine." + else if(href_list["op"] == "insert" && disk && disk.gene && seed) + if(!operation) // Wait for confirmation + operation = "insert" + else + if(!istype(disk.gene, /datum/plant_gene/core) && disk.gene.can_add(seed)) + seed.genes += disk.gene.Copy() + if(istype(disk.gene, /datum/plant_gene/reagent)) + seed.reagents_from_genes() + update_genes() + operation = "" + target = null + + else if(href_list["gene"] && seed) + var/datum/plant_gene/G = seed.get_gene(href_list["gene"]) + if(!G || !href_list["op"] || !(href_list["op"] in list("remove", "extract", "replace"))) + interact(usr) + return + + if(!operation || target != G) // Wait for confirmation + target = G + operation = href_list["op"] + + else if(operation == href_list["op"] && target == G) + switch(href_list["op"]) + if("remove") + if(!istype(G, /datum/plant_gene/core)) + seed.genes -= G + if(istype(G, /datum/plant_gene/reagent)) + seed.reagents_from_genes() + if("extract") + if(disk && !disk.read_only) + disk.gene = G + disk.update_name() + qdel(seed) + seed = null + update_icon() + if("replace") + if(disk && disk.gene && istype(disk.gene, G.type) && istype(G, /datum/plant_gene/core)) + seed.genes -= G + var/datum/plant_gene/core/C = disk.gene.Copy() + seed.genes += C + C.apply_stat(seed) + if("insert") + if(disk && disk.gene && !istype(disk.gene, /datum/plant_gene/core) && disk.gene.can_add(seed)) + seed.genes += disk.gene.Copy() + if(istype(disk.gene, /datum/plant_gene/reagent)) + seed.reagents_from_genes() + + update_genes() + operation = "" + target = null + else if(href_list["abort"]) + operation = "" + target = null + + interact(usr) + +/obj/machinery/plantgenes/proc/insert_seed(obj/item/seeds/S) + if(!istype(S) || seed) + return + S.loc = src + seed = S + update_genes() + update_icon() + +/obj/machinery/plantgenes/proc/update_genes() + core_genes = list() + reagent_genes = list() + trait_genes = list() + + if(seed) + var/gene_paths = list( + /datum/plant_gene/core/potency, + /datum/plant_gene/core/yield, + /datum/plant_gene/core/production, + /datum/plant_gene/core/endurance, + /datum/plant_gene/core/lifespan + ) + for(var/a in gene_paths) + core_genes += seed.get_gene(a) + + for(var/datum/plant_gene/reagent/G in seed.genes) + reagent_genes += G + for(var/datum/plant_gene/trait/G in seed.genes) + trait_genes += G + + + +/* + * Plant DNA disk + */ + +/obj/item/weapon/disk/plantgene + name = "plant data disk" + desc = "A disk for storing plant genetic data." + icon_state = "datadisk2" + materials = list(MAT_METAL=30, MAT_GLASS=10) + var/datum/plant_gene/gene + var/read_only = 0 //Well, it's still a floppy disk + +/obj/item/weapon/disk/plantgene/New() + ..() + overlays += "datadisk_gene" + src.pixel_x = rand(-5, 5) + src.pixel_y = rand(-5, 5) + +/obj/item/weapon/disk/plantgene/attackby(obj/item/weapon/W, mob/user, params) + ..() + if(istype(W, /obj/item/weapon/pen)) + var/t = stripped_input(user, "What would you like the label to be?", name, null) + if(user.get_active_hand() != W) + return + if(!in_range(src, user) && loc != user) + return + if(t) + name = "plant data disk - '[t]'" + else + name = "plant data disk" + +/obj/item/weapon/disk/plantgene/proc/update_name() + if(gene) + name = "plant data disk - '[gene.get_name()]'" + else + name = "plant data disk" + +/obj/item/weapon/disk/plantgene/attack_self(mob/user) + read_only = !read_only + user << "You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"]." + +/obj/item/weapon/disk/plantgene/examine(mob/user) + ..() + user << "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"]." + + +/* + * Plant DNA Disks Box + */ +/obj/item/weapon/storage/box/disks_plantgene + name = "plant data disks box" + icon_state = "disk_kit" + +/obj/item/weapon/storage/box/disks_plantgene/New() + ..() + for(var/i in 1 to 7) + new /obj/item/weapon/disk/plantgene(src) \ No newline at end of file diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 02226ad0ade..59caa40fe7c 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -23,7 +23,7 @@ else if(ispath(seed)) // This is for adminspawn or map-placed growns. They get the default stats of their seed type. seed = new seed() - seed.potency = 50 + seed.adjust_potency(50-seed.potency) else // Something is terribly wrong qdel(src) return @@ -77,7 +77,7 @@ if(reag_txt) msg += reag_txt - msg += "*---------*" + msg += "
*---------*" user << msg return return @@ -128,8 +128,8 @@ var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip) if(S && !ispath(trash, /obj/item/weapon/grown) && iscarbon(AM)) var/mob/living/carbon/M = AM - var/stun = min(seed.potency * S.rate * 2, 1) - var/weaken = min(seed.potency * S.rate, 0.5) + var/stun = max(seed.potency * S.rate * 2, 1) + var/weaken = max(seed.potency * S.rate, 0.5) if(M.slip(stun, weaken, src)) for(var/datum/plant_gene/trait/T in seed.genes) T.on_slip(src, M) diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index 7f5bc5e7f27..cf05ca2b1a8 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -30,7 +30,7 @@ // Orange /obj/item/seeds/orange - name = "pack of orange seed" + name = "pack of orange seeds" desc = "Sour seeds." icon_state = "seed-orange" species = "orange" diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index a97cf99a19e..6af91f91aa9 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -17,7 +17,7 @@ else if(ispath(seed)) // This is for adminspawn or map-placed growns. They get the default stats of their seed type. seed = new seed() - seed.potency = 50 + seed.adjust_potency(50-seed.potency) else // Something is terribly wrong qdel(src) return @@ -53,8 +53,8 @@ var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip) if(S && iscarbon(AM)) var/mob/living/carbon/M = AM - var/stun = min(seed.potency * S.rate * 2, 1) - var/weaken = min(seed.potency * S.rate, 0.5) + var/stun = max(seed.potency * S.rate * 2, 1) + var/weaken = max(seed.potency * S.rate, 0.5) if(M.slip(stun, weaken, src)) for(var/datum/plant_gene/trait/T in seed.genes) T.on_slip(src, M) diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 364a0b68d2a..24e3e9e0527 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -4,11 +4,15 @@ /datum/plant_gene/proc/get_name() // Used for manipulator display and gene disk name. return name +/datum/plant_gene/proc/can_add(obj/item/seeds/S) + return TRUE + /datum/plant_gene/proc/Copy() return new type + // Core plant genes store 5 main variables: lifespan, endurance, production, yield, potency /datum/plant_gene/core var/value @@ -16,6 +20,9 @@ /datum/plant_gene/core/get_name() return "[name] [value]" +/datum/plant_gene/core/proc/apply_stat(obj/item/seeds/S) + return + /datum/plant_gene/core/New(var/i = null) ..() if(!isnull(i)) @@ -26,27 +33,47 @@ C.value = value return C +/datum/plant_gene/core/can_add(obj/item/seeds/S) + return S.get_gene(src.type) /datum/plant_gene/core/lifespan name = "Lifespan" value = 25 +/datum/plant_gene/core/lifespan/apply_stat(obj/item/seeds/S) + S.lifespan = value + + /datum/plant_gene/core/endurance name = "Endurance" value = 15 +/datum/plant_gene/core/endurance/apply_stat(obj/item/seeds/S) + S.endurance = value + + /datum/plant_gene/core/production name = "Production Speed" value = 6 +/datum/plant_gene/core/production/apply_stat(obj/item/seeds/S) + S.production = value + + /datum/plant_gene/core/yield name = "Yield" value = 3 +/datum/plant_gene/core/yield/apply_stat(obj/item/seeds/S) + S.yield = value + + /datum/plant_gene/core/potency name = "Potency" value = 10 +/datum/plant_gene/core/potency/apply_stat(obj/item/seeds/S) + S.potency = value // Reagent genes store reagent ID and reagent ratio. Amount of reagent in the plant = 1 + (potency * rate) @@ -79,6 +106,11 @@ G.rate = rate return G +/datum/plant_gene/reagent/can_add(obj/item/seeds/S) + for(var/datum/plant_gene/reagent/R in S.genes) + if(R.reagent_id == reagent_id) + return FALSE + return TRUE // Various traits affecting the product. Each must be somehow useful. @@ -86,12 +118,21 @@ var/rate = 0.05 var/examine_line = "" var/list/origin_tech = null + var/trait_id // must be set and equal for any two traits of the same type /datum/plant_gene/trait/Copy() var/datum/plant_gene/trait/G = ..() G.rate = rate return G +/datum/plant_gene/trait/can_add(obj/item/seeds/S) + for(var/datum/plant_gene/trait/R in S.genes) + if(trait_id && R.trait_id == trait_id) + return FALSE + if(type == R.type) + return FALSE + return TRUE + /datum/plant_gene/trait/proc/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc) if(origin_tech) // This ugly code segment adds RnD tech levels to resulting plants. if(G.origin_tech) @@ -179,6 +220,7 @@ name = "Bioluminescence" rate = 0.1 examine_line = "It emits a soft glow." + trait_id = "glow" /datum/plant_gene/trait/glow/proc/get_lum(obj/item/seeds/S) return round(S.potency*rate) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 26ce249e646..b13dd503231 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -78,6 +78,7 @@ for(var/g in genes) var/datum/plant_gene/G = g S.genes += G.Copy() + S.reagents_add = reagents_add.Copy() // Faster than grabbing the list from genes. return S /obj/item/seeds/proc/get_gene(typepath) @@ -141,10 +142,10 @@ if(T.reagents) for(var/reagent_id in reagents_add) if(reagent_id == "blood") // Hack to make blood in plants always O- - T.reagents.add_reagent(reagent_id, 1 + round(potency * reagents_add[reagent_id]), list("blood_type"="O-")) + T.reagents.add_reagent(reagent_id, 1 + round(potency * reagents_add[reagent_id], 1), list("blood_type"="O-")) continue - T.reagents.add_reagent(reagent_id, 1 + round(potency * reagents_add[reagent_id])) + T.reagents.add_reagent(reagent_id, 1 + round(potency * reagents_add[reagent_id]), 1) return 1 diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi index 904eb38c53cb8682f31b25dd97e248ff427b922c..9b35f0851ad369342401600302c890cbe4c23c03 100644 GIT binary patch literal 17964 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 literal 16233 zcmd6O1x#Ikx8=dzin|rs;x0ul(&CgBC{SFAd!aa7oZ_?;_u}qS06?56aCcHf4<*I#5F2?HGM^aOa1SrObOk%N2wvba7th`jL%1D=s$?c(UMZP_U{;KqRXJniIcEl zS}XCNtF9U_l+21)Qh!J>tN}_eoS(Mz7 zxSKK#{qGlp&zCUpS*CH$y2r)*_mpx=8$%;ev5>LD*B*!IEJ(K-1CTUHi}31VGcstm z$Y>&zaP&SFdH5mFiyvqH+%B*8jL)CG7xqN(eRKW6aLPOq0B8W&H{z-;$@?kp8U&N~ zU5lT7=g}0Qe|za0M$oZyaB6T*vc;Ax1Jo^6FQN;fxl9=jzdn=13om z!Z`D5WQ~$|{OgdzU1;ghbdQjIy}iq{f8M4pQn#~I_8wF;>>aT5U7iXHb31JGHEs$C zoqice=H{j_3TuUrpc47}=|?0D>aWZtx8tc%w+X8F^Vk+zgB(zt#i_k*CKd^QC(ID_{ttuBLU}ALIW#K&#ve?~?l97=S&tv{<0s81E zEi>gm*4#W+lvXRv{xEsje@JjF)b64!yVx%Scw37&zn0xXuMr5?zO?7lq8*A1 z<|tU`OhoAi`d_A+%Euml-I85G^^`w=LpN9MNQ;g}@GixY3;(Al@eL7JU(?2znraOJ zwLYEh8t92hP}pNh4gnCAkYLQG=VegddF%1{h9GXTHXqsLc{RqD(<%TxQH7u`Hj|@P zHi?9n7`so$i|zsQgeaq#bzeUZ2dQ;M9jax4ldT& ztD~cX1N!(tBI3r==!UXetg_HADJ6w$XlSTmXh>J<^s%@9wpxp&!G2NA)Q|pL@vGA} z#i8M2^2~~gXQHB_e|ma+A|r7Ojf@ghDQT5E4&|NTOS5~ut; zJOl{|34G_swu@C!a4jK|PM@la$ByO0DOT7a4^#-6{Nnd+udEkL-$Ng$%*7uRGk57t z9zQuNWR2L40+S^n#-L@%sAiOfnYbKz95l4y-ngXM5yU#^dm1-4_vIBVSU88#9*4)* z6JNy_K6B?tqxEV_Sd#dCnD>@RvyczXV*JgU$P5#=i*EtcDd(8!7$EBaHbdzSSr>f@+a_GL^Jx)=MZa68i%T!t3 zeZYCgCo`-^W!VYykHAu&;5YZSRPU@1ZSwf~`1@&n9UXa`_GbcSr1W>H^6R>1Denu& z?H){6Q}}({|+GT962SdCsVqh?pfB{VgUj7iL4(NfSQqf%;2HHO%W#)= z;Md@MxKp#g&?NLF;_-*4^9=cdxWnGFX4V{IrQ~AUuk2;b&5(m60a70-^s`IV^a5QU z@&k02NLSp4hlk=5j29!t73d8Fb(Omq8|tN~-D$PRE0N5DH0Rx~`%>JI0gi1LZdU4k zplmdw!QU|yIN=UTJVx_P603L(XNOS=q!(Y3>`9%$@DmZ{7-s-YEO|H}#g=&x>~K z>qImwErwwD)o;}ZZ3>Z!s@G?juW9@YS$W)uUMvflS#Tp;ywlg7+T7S1C-N4eimBI2@bK7Pr> zB%!a*t`L9n{NY4b9T6urCyA?6xG#k~Y-~&w5VNpgO3hm=YR)8Qtz4PWd;1Xqu+@fr z2>#AS09AY7ymG~s(y=3wkZg}iNeM42<3L0~q364x@kN1zOilS|obBA80usX@SKmp>8XMJ)b49N(6i$vUBOWiWKJI@~pj<%$wpNDmO$TF^;#PO} z7PJpA<9WqYAlhG}iBc6Y6Qx)WcsNzZxLwG9^Z$1G$bvzQ>mSOGZe{W8uWWPLN!(rx z5`NSf11<^4w^u4TOMkx8*Etmv2_oeWnO$vXxtG%Me&skhJ^hN1wdgf{!&t%~K<}j} zviKp&VUwp$83`RDvTbsbSWr+fuc*k1@UaPRGAi*kYAw577uO)V%l@l23_{c8nD^h* z*-YA2d#%>o#%XJ1`Y{NOqc1P59eWlZH;Ng7mYzPcIdrnHw#2&j*#l!qL#?ixeG^fJ?%fy#!tKqDTf3Dw z_RZeJYh;EY=$1W88=`h$Y7o721OOmok@;7e4#ETQ9w9)T(MXf}u`Ddt=C;al^)@mD z(}KB?&wk?=YWwJh4aBl)bulq9If@h#5;mgELzt+^Cz}G-ON*ojw%s|7nis@caF-lf z*j-+iP~1|%R_m8f);${LP!N;JAN7a_*30Zl-X1g0SCK4xVUpl_cd`&lG9tI`pE=j* zQU~;^?>kTvn2BI!i?l0ie^_*U@h8?<(4k2^oYz<%_Fz`@s(n6b)2Gb-W;WDq$coI1 zj@}cNX$XIVBNFi-8Ho_*z4A?uj+q%_JR7n^H5@-1oq**gY3R>ml-xH4ecf6sZF}c9 zT%iRw5Rx|jThb4{iEQTfu(>o2I^8Hhv~!N(;mm=+T!!|_g5AZ1uVv7IqeS)eQj`~q zzuaK*3mYS2pzBx_jM$WQAf&mWTW79uT&Fb9gyiu;5o3Dl`@z+=p@>@J-)?HoIy7*H zihI^m0a4IGD$p6PJ$c)XB}T1wo6h~D7iY1>WPu~X*n=_W{WyN+qG%>zl!5GCYlqOE zKYuPw97}GIicnH?XB5KQsW`p8sJ(SW5Qlq!m_{`Rbq2&#!fF>?8Y^#68Y|MXYcJP^ zJ2pZM?HdenD?LXgh~@^#l|)UaA&90OkFAi21lCY}FRxU;jBR^-rGDLR%4;vu)4csa z=JCba`qIr0tC8Y8P~hcjTd}EdU|?R z9*(s(nchY%jeYXrShooenfPLp2ya$Y@d17;TOuZ z?sEDDhmX?=VBI#iZY{SJy}Pq#d?dy#3fjGbVfeXM(h4Q(jy_!ajNYHMoL;!!7ZtI5 zHa4cEqk~`VVs#>2_%)u-n(T{%!~O&U1OI&y%c-AOc1J=t z1l-jDVX8G;&2@DGHTId;w{C}rvw!Y4NA#@7E)22Tueu-INS?T(vLsX2qg(v^YN@(^ zEf++7Melfq?I30Tx09u~$K(Cw)x+)KY)ZG<2>!FE)Tp5Y;heH9YYxMel@*Q4gL%C4 zzOMB5UZ^eA6i6Yw26gV2Y%@1LGxDaR5c?HG3{+Gxdwb4`ii$Fqa?448((`V0b@fxJ zZj;@~T92C4GivHVwNhQy?PI(Z_I?XrJz}prV{;X@JGy$ut*d}IyyOCyv^oMePc;g) zN7=Yj&WY;Bj|LM>cb+nqx`8wkN=hpxiD7e2r%NBaZ|24{ojU%I?+9KJs)uCM3 zY~bhGtjJgp3+!6Aq{!-RA>x&F0kf6X?sjX(k&%(6%gf6yd*$6{L2WX2hl2!dS{a8J z9;kp_&6bw7g-n3R0y68zyFld61yV2g#2sAwNTa5%6t*$C82R`m@pOC=6jZX~eYlU&Wk1_vv$)6q%TrqrSBn{hji{nJ=9qhec~{c7LAVMj2&0*RBd zwszPqwD-I*3JppE1Wxlyl?mj(!;_ zy81#!@^{e(O(Az$Gfw2`^jm@%`-^XwJd@mf&~EAY*wWYGaTOHeiNoFrTw~=*=pOU6 zJ$OeL`5PM>|M~k@LRJ@UktoKQwwTY2uE7-<(|lzq|3)|KK2PLo50V8uzJH8r4sk|F z8QHp-YrnFNc(p$RomFQ6NWsG+UVaTH23ahL$K#~{aMunave*Z|qt(B3YC^d>nq{g-k#J<1DDg<> z|3((^HZo!)JLcz48X+O_SFc{l$jXX4In^xi``n(Xt!Nq`!Q_M@!N(1x#_YaX`up#S zHMRKn8VZbckVNdc680SyR-M*;`Vblwg}b(~VYo1}|561oSUC7oV&g3}`b}KaW~$aH zfK3VPO}%ECzLzS7qevdUe-uG^PjJ7L*PJrnNeoH`>z_BP-l%o+e|+i8o*$^r4_oh! zw_{XBL%XN!u~NxI5kRg~=W$)314FNKTJJ4VvSoPcSGCsT-_DMXvaKz%y_sr^>hPAI z+bVby?VwsAvxB7*Ws`OTfCLp+LxfK!@=MsH`p*Qv(#0hqA%$#w|7=Xp8?QBr-mVoK zukN;jTX-Ol871?wxiTvLNSLqamc(+wgNl3Mf&8S@WvAx!P>Arm`t7e*J7{a4Q{RmK zDX&9msSNH-a8Aih4ZP6K{$Op{KeD(;o%upRDm@qeUYIbiNS$U-$A_xf1-ETBsS{Po zZMUXt&&$u(H+kj_+sl{fy98<^OHccte414GXM#~K9o`rEO%1+!oQt6(Mf`jGUuv?f$} z(R-14b+aY@bR|LH?BaAc;j(?b!P)0v-<<9CKRCZnM&3INY8=*(ovJ*GpA!!Edwac^R?Ifqba|rpP-Cwp#b{=XufZX1&#IIxl|tiRjk>zYG#Z+| zPJ$ju^q-WrquR3i5353eRJ#&=pq`|~4$T}W;d&d?GImz*8sC5SDd;;aTQOuTu<`Ia zIH#%$o)v*Zr9ZDfoUUu%37!9GKW{$PRvDbp_#sqC5i{l-Q)Eudwi#S^D>E60_TMJ+ z8d(+(6z5Cz*f{Ifu-N^XhT`P%8>)1dyEFqbUTE+|nX@E3%F$v=abBL7jSU-+{_7V! zV7Hj(apyWuU1rsZoLqc>{MgldL^eWQmxT4WjrS7bgltrg)4rZ`@f!yV{<$No5X}pUy!VY;3?RFr`+S19{N}c2489;sNW231-05!)Yrou zG}W(+)ZU(T!4H5=g9b{!Z%7X!={D=5$Gl_tA?4IcPgi1jtc}*kk4QK;H~{O0x~^`- zIiZ1BJ-QjWAcskskS0a9_;S}!Co9lfHEDl!WDrKqA2B{YzK!nQQ1mn9wZk(wIMz$0 z!UAUdO0njPxrM4qQc@COGmhQ)-be({R})KFc^Ouoo}YK#LTAiQiRD)Q= zI9h*%%*1vtCX(1Bi^AdXEZ>D&*3GsPw^DhOI@sB9{D_V|{-_ya=|Tl^L-V^cW^J~1nb;6JeCBBw0?F#dJi{i;>7I_J84A zmU#bSUfT8%fz#V6{vwEQxA^#AS{w0mdo)+;9^(hB>IOci&vv@PxUVdD&&=Q68}z7v zw|Y8r|u| zmAP2=Y`>{mHI9d!at`O)y2F1 z2#BQU{hbU4f3cmxWu+G7)jdp%nnDsN|9JJGG+}plcXq=G&hs`MHEyQZHbh!VdbOGK z)gQrFEbqe}ug{J=;2c>mUFzo*|;_kl<{Ozgrqg#qD=`zK} zWHENFoD^*(5`?(+!{50v*PWf6<>BOt{GM?7gI$!#A_tG8KR}p!a_8owIkaE^Ad-gc zQE}7KJu)mp3S7b*#iT$`DkQn3<4}uYva_?-H8kwz1oH6kEP}PvYy2$vvc-$gTvHZamR1MV93HZW8cx zou^W49P%eqVXd%m-6e2@-(`kj-=p-$mRNd>xSw@UgXFX;f->|e2F~?N-u=bCwHG{y z^4i+k6ukojT`>)=N0=*mVK<9m1eiV8UGojj)>K{&AZ2!dJY3PAo}9F$2stmUua7fD zPTd_eKYAT>g_HNq{4+xHk>@2am~LsYu>Hy#pvC8QZ|;moER*zG5VaQxHbThb9nXEZWL5BS4`OkXIk)<4OXXRvUGi`?}6sOF#3K7 z^BEZ~x)IkgxLQ3Q`2)kk8UTNyH@Jg?gDVbu6XFi-nyRy>e=(PanL>i>4gIk$=cd~b zJ~{LU6E7)^bryZYRN?k$xjkOc!Nfhp7H?r;K}Jq)q|oQ!VT;?Q)uD2#MGT_N&NSY8 z_^oPC^ai&9a?|(K-KVgi0GH31tpLb-yKOMkT>Dv;O6#1{nQaXD)<$=l%T|_({CvFs zmajsY-}32FcG%(+cXi-~^GXLABc{+RHny(q84Mu#)SfOQ!81RKnn&A|Bcfb{gqz>p zTF7zhedR2*;FpdS6GtyE*h2lo{jFAGF=xG7z0qNiY+hbL>-+|G)WN*)@@!_({Aj&f z&Cf{Pptp4tPox+R508Z3Ci%cu6qF0SD*r!jV01fnra$esom$)uvY;v-4Xy|>e z#m3rNOMAN?{+Wodup_Tb>mN)`Q+;@AYi1i?jGK@yIW=9i!2TqDI%cg!4f?j5S&@Al z=r_qh-KO-fr}q82`VtF2V`6B*Pz3`6gF+sbiLvqa1YFC`c%haE>&lwp3?Uj7&M0Lm z7;AeYEv+?&$RCugXeX{RtkE-&*6iIx&1i5{X7^Kl%Xar$71++oH8GLFldrY#_V0ZX zOF+7Msjfz&i+xbx^ryezEKG9`3a^e`btHnm3KRI1naRo~DJO^Cu$k%(0CDVkHEvqs zN}zdQsTxw$k&2*4!)KDJyWos}IW1!SklbBveyRqHAu^)&e4hcF59WFv&T=82nj#}b zZ%~1wIfubdP5WB5P1%=9`-U5`8;ej5xs%eBzWi0dn-fRDJ9DH>I$|B*67!7`d75gV zsKi*vT}XN;1B>HgD5)rO;i?9O0Me;+T+8m&;6)e#W|rv1k!5iGt!V$D^#3cB2W`=O z#vr8;$E^s!jG{rEmiXVh{gHDR(z(oV~YGU5JWmcK^Y`9n@vMt$xUv&g_t;NsVaHZSW(crFYoS z0tfdHfA}EqULD8G(kD>!Hm}|pi9iQV31<)Os_ir1$O}*KW4hyDQB4L(5o~Ldj_l^? zf0JH8lJ^S5VrP$@ZKxlAYXbiWO|0UCq$G84$TKnGOg8OIRuA2?iHxRz+4cAfmN)V( zQTjwm8dE*I9KNdzcs1=TCGQX!*yI|Z^Eh+qh&$-C5dIT7`SVopK($I~sy8mpX%}s5 zj233XJ_O|%NPZo0^xa7OCQIoii#-NL4rEa%N*=;VmYcOo%*DAQ#Ke3A=9X4R5ol>M zqYC9E9cBRXk%FaF1b=_wz^wU(s4qNNr$nd5^iQK1iIdQq#Asal{b>)UP`C5^m-07K zk}cEAs(!5+gG=eO?Q{6=u*NfYVNOio=pcGmU?lFHUi!`{M%2n(sK^;(w6dNvPFZ2D z(1lmLe@Fq@oHYz?x+&>}hr45?yQaF5Gl|5_$w(=45u+#RE(Yp)lw6uh;rM$VwThDp zE~|w`yie2DZYYd&Ma}c04@W@)XM5uqn*7w*z|*Qk!=B&RfTz;w;SOon z)F$~1#hPhU)ydu#2jHxE2+zDVz^vR8YVrc08i&nW>RdJD(+`#}pR z|Mkes%?wE3`j72to#rhhg>712{irnYba&mao^-q|Ey`;_f!>mv_PeP+ogwXHPfIFe zq2^`klkSL(4&F$v*0qab*Pr_y6|VOq8|TedpB8m>-S>Gf&gOFAfb6%~VD_(7o*niF zG1?upIMw2VfJa7#-YfQJd5wMu7m9Pv@!RbRtWd!@mwKlV!Dii?gkCh0Zv9C&v$;rKYw}0z z^=RbLr_-46euIo@A*VKtBuhui3_%4&eP6o|Ul=#GHq>DY)iKk>GwGeNydi4l%zB42 zKRDW6D}HQ0qE^LfhvLT0jwTb@-j0N_SH$Uh46nW5%=Uenv6wVXliHHf&Xq}b8dXYk z9(XfEHP{4UA=TtgtmJrx#+@6El@9w&;*3l0`jeq4yEN!S;O*V%?0_|8s8<6?B;*)T zyC1O!Kx=zD{pG#SkWmJz2oXAPbeN;ZJa?0%$@1VVpDQ!aL2>20x*4!vqfq(qENvkv zjq(1`q)7t+C=H)#0X%a{NRy(YGx>P~%Nu2(i)cWdAg^BSLQJ~5H{$ZIA~(6vm^7kg zHt!EUVu4VsnnrUoGv~9Bl7KM)0w3w2<9`6C^-mZc)6Skrhf{@TH6Qv%ma^w4B=~|k zg7k`C@ROx_{E5xrKcX-giGW=?+hN{trac=y!sF$&URl3sk~NY&4H#ruE(il^ei3P5 zGnG{#PyHzDEC{MH;h#QX^&W0%VLR72|4CGb;~j&1)jWF#vN{654zvL{2AV`TkdmTe zVRilv!we%6(d2IiZOUUuKDmE&6GU%6F|)TXy~(}f2xk{elh(SU10h&PiW;qdA}9oZ z750lfbl^+X-maVuYONE>+}ys4o|Q$LM|l1X`_0z;`z4>){Dnr!E0>X@+)2GU?>r3R zv&4Fp9EEZh>Xk-tXwqW=7#h%J-(m4FWl0c6*aoU`kxV{su4;aR7c8Iv#3Go24)JVK zQ2^nVO;65ttVs#0hN?70k;ll%AS}t5GJ~f%(N%nxhn3i-vEYM%LT5e2(I{#aFFyg~ zgFBS*>fuqfNDKk-)$9QCz>7YNQ50xtjVta^Xu}-GOZ8AoT6E06<13wr{CC!}^xj1H z1eiyih@-B>%hO}0k5^wd>T(0zz0+8(5k;YAo!2;QOUJefNg8HmdBcqomDB6)K7Kdn z1{c@p4cAq^Nws0AxDz|gg6qbBn4}S9v_#sh5%JE?JKDE0mqiXFeh#UJ0p|)zu;TpUz1M_=0G~bdLa4E31-S{w}z8xIdd1gjBZ4a71mnw|4} zqt%*t>FBzc#s>_hHps43<7BcW%e`5PNP7D=)x`3j$14 znd86k>P};=tG|ZpN4^?Opl1P5S2#ZfPL&9OcU?>|#WSYf6@Df){*arzN3`3H^Yl3e zwO}j=mvPF_abL6fw_dO^hK8vnOv^9c=A+zmgGaEO$zo01{+hja=A#r6tCHnRg3_j5 zVxh;u{Yo-W>WsTaTWnyobg&{m3AmXqQ$!JK#?Pw%0l5Zs8rfc<>h6FNp$?o1e+hh^&t=*HXJLcmmQb-uxYS;O(4*m1JiU72!ebh5@?Dn}>lx$|!DykEbSPGg)=hjZsf(0iDzWhb8_fAPR+0;5Kr9b< z$&GV$TbQn{09x8eTJuXbkhrurc6!i)Bq)0%64Pene1NR5HKA~sl<#YRd$0tSQeCcD z9ea5W!_@69)x^pAA$Gn0cSYD)!N9jj?CL>zyWij0l}v#5=hsMg2IGZwHb;#Mpnhq{ zwO**e0+mY`!d30f-w(~*`0ZySvU+6q$D0v!;C`w9&AXjIp$s2B_i0Yl@Xl*QbM zKVsry3{E$~|FB#Ao_wE^A7~r-;G{HLWsg7*9;2|k(cbg1*|b!5sQ%gx5W5-KroM^} zL94E?u~E!3-}6oEVtb8G5IKwBBDuRU@%bb*ZMo5V*$Z{DMe)DNjJe@neYSqjF5EFf zHOcQEK9AQV@!NKsva_^-3XlYFRQ1#veH{uL>t58o5tGN+zn1XCCzwPIy5!Xv#Xs!E zHDa`o4?;D75&#??0#L~3^Q0ua5y<<)LG45_t!vEDCmOXlQ8n<3{rtE#2xf=#&dLfb zJCS-xGIcF+x`9#^pTfb;r)=QfdbjnEhLsgrzI#yLSZ25VI_F4xvedR^W@knUbBox2 zhY8EW!-L~IgOnrAseX?uv0%4+Y59}MDQV6;_e+ANTkMVaHiwj>NxXAw#a)&slI6aI z(9)!`QF?p*C$;)P#G5>k&1{TmDDPu>k{13PA?5*kFZDOvO~RUDbF1miJg+-9F32uw z(|x}tqR%1XD+K`EN4t4@ccx*{$&*-P=dePqnB6%`^dVvba`b|*GN)RqR^pS`^R zNs!;H;bh_?idUhy(K7v?>X!dane*S@UVCvMmR+B9t5L2gGG;^VeW6zEf%scRurwCfwalj7Dhm zWE1nZOhPjL_A`(^$KyYr06DkNd%f?ah9Mq=Ny4sNNy2|ci^VN*9bcdn#OqZXvkFe~ zinW!XR^wzLD33|_&!CLJy|SQ{*eAw}`bESt=Jg$r`G7%W(JX^Pp@T7SgM%`sxsx}a zG~WLjMv!mn%@uAuTh)M%2na|!lG__BLms2)PQ4r$6C8SIolzCBTJTF&>GFgK?@}qay=*)3P#oK%fc5 zSBnHjrPRJ>Oy1dV0X9?d`OLBWn}U`eOjG5ry*m$@n>+l}Q1$UzTdcA{>@($=uaRn_ z@@R1{+p|nR&61+!wo(qPD9WJEkFhK%Funh<;doE!19-R#>Zs!^>au-6zSzrB>$%_+ zTYuJYFrdj84oAnhC)QD##hs=rM`MTzDEfXjrU`rh0a<(Chm<<}D!#@Fa{|v`yzCU` zD|jmte@Ek^eWW>jAODbvLV;?{{j(EXMDaTK|8M91-(w^;5k&9Tnd4nP&Fl3FYN{wf zdc`1ZjSsdWANM2(ntRH4u%V?YLe-66(9&eLMIMG0m?<6k`lFu6r%vpw<5P!U!1#yF zu177Un1#djy;Y@~ksWfQFBhbN=gijuleH^mQzQ*BJcC~!YnYA|1t~r%o71#XnE>~yO`Glwof8=Af z(9^-}x{ALM`T7$y7{%73%|p7A3n95$11d`2F5bxrN6JB)4M)C;Af}D*=BLBDx}^(v zH*{Uw_4!yWiJnB$>G?iVu3BL>8-h5l|MT}RQ2zst45vlJB%Y}<-KVn2e<<7^rI)_R zTAV)Lrb-X}rJS$f;!^i<){KXYfRGT*>`_(*j2)qPa)}Xt9!M5s;o%wE+2^>MV1XTKxRm5m9EwN+ zdCM0S0yFHxCt9COy{0fXH!tgkz5|~U+>VB;f7urKcv}tSOFDdn?YBh70uFla>V1ANAkDIaX;U$m#1!*b2*dz30RP4NCTepufjO}w^>91J8 zxZpRvJ0TgoW`TL#o6p{CVL8``R|ln;=OekWs^=eEPrRLlgZ{~N(r^U!|5~;&;jik=?f1;=y@#6%BNut1?1=DqX;0; z84YaZhK2{3&(1~4WgE)M%DVN&Cj0w(xvh{iIX0aLh%a(@&EL#O$*vH83lm&DyXv*X zeApHcd{Ao+z+WxpxWK7RdFr5o5$|F)^q_?u4#?bK+%?t5Tk5_eMct_$y>B7W{Tvz9~8aqGx4;vSG|jkEv)QbRJ(qydLNDt%M30r7cTdu6Z1kj;>nqU9H|zwwA5qzpBx4cBnA!~-MU z4R4+r^gW`;%7)Y}dwlqS_fw96@m(@1P>(N>Ih>xAMG%C2eEH#rs8X8|L!^Ap<1Jxx zdkpX7ORtbchLv1?i3R|CGsA$}biisdk{av>1OlNDa#A?#R%eP4_`35PEGqe+sqEYR z4ic!6`%W$gYTW-(_WYGsh+dJ>A%Y{EKYn@>$?b8tVrWRnQ<*CQ3bq}13cpOe055Lz zB^ZqsHqT0a`0(B4jW8HQ)jkJj7<2jK5;423zh?1lG}bA)`N|!*H|`7L z4SqeVQ){xE976PqT>Tu#$@zjktP@S$9D1k>E5gB=9r8Bg6 z1QYMT7?t1eDaO6{`VXK(V*eG!>Mtx2Ev6t&*~bRPaC<+3n;Z!b*)g&Hk~UpAKR$|h z=KCj==2eKlY3)k~_PD2{+2*`h|>TM;1F5hCQe5 zC2ib08595}_!>uA|7%~)0iCj7Zl<#L(y=@Yu+FgJ4ks^4MX z(a?Ux_EUTwo1i~Ge^Cvq9Of3YKLXvm+CEroj_%{*Gi1hd!JP7@G4lpPo@q85Oad1@ zo*@A(V9fV;EDyr5l6OeexD*hAJt9DHU9jl>ZM z3K~`T`w4^JV`Gus?>6lS!HhSj?q!P)6%;PuF*Yti;OY7spDJ}~rO49#SbR@U zV3g{85%zWQ*zxNR(?=zKJ+M&khriad*c{#xt08!5=p84RUT|Q}^g8&xIn{6olV>yw zY-^LSOEwOYabedr9dRZy32If)tAqcq0-leM$Va@HC#NujB4 z<}u*aWsfGG6=~umENYp`&c-J7+1IYNzj_N*YCpt|0;MaylW}bNEG6I*LQ$SIB5>!> z+vK+0{OO#VfFj-4`xicSS_fr=Hv{m@yEfJ)s$Re??CtA!0}&{I3n13p&mTv}!0`5I z04xTwuc?%iqMmkI5u8OLmfcP-X*~~8cP<99*{c=t7)oOoOgf*(FORMCd+II9`52jl zd6eFh$_vK_07*5Xj9obwe2a>bNPr&-&Q7d!7>U6-meX%TrPK2Dn`q5N()d!ii7|v^ z`0ZdL0Qk;ns%dIC!}k_+CGueUSj#EfPydI^(MBB2SMjhi#1>`!Kcq`@@v+A0&tJdR z%~pNF}mT!vQ+Ge-5p%m*esZA{)Avvw9!xnVi59@0FPSS6Iz+A(&Vc$#U>;K z|0f<1fN;o&)Arq3MR9^TxA7)r6lVtd`;mtF8jwq2wT^Y5;3&A32{#mLBO$g%z~`go zOS>TXZg=0G$cq62()Se4p1pHZ97XpnA&gUGms)fn>iqD$XGh4TU^N%nZi(UaV2v6ILN?f?*LDYu&JN6>ohuql z0KKEpaDe!|*DO;%Md0Cy5(r+VX`X?jxk?BC6Em}-jnMk|VIBQ!P6hYmHUHP*lpg-_ zNh&pgYGi@^(d};uSU}_QE&DdY^EDxPnBqISXSzmL7(_P6i7>d6*)FX0iyZhpwnw4Nunpx{uA zHK1ILDnSI_id?4xi3GH>ZVn+wDb+T=qd`yLG=M583?Yo)hmQ8cTgA z4jtPo*48c?^75?-y2^lOeS>UxGcv#2c!@JZOjnFw_0n&URwufD%r4&Bj{tRbBRdS@Fu0Z zeENGrvN~;=whq4VHl4_82^>kKfR4sg1j%rh#!98%9Pkc5{9}n>ssoixd$C;pqg&^l z9@88kdX>O!x-wO6#E0^4NX_m7QU?&4SA0;qd=Vsj5}zf%HvSaU)^1yW>M9G8;e4yOB?Qv1Lu@VH)&BeJ$E611)xNEJA}aW7iq zOn&`!B>ODeAIy=~BMj+=A=z3n2@AO_wZK)rh|Yk^5y?d+r7=Kr*c{;fq;k6!trV6j zd3$+i3M?w{H>zJ9cT?AXI@PMSAVfz;FA{}hgAR7gIpGqHO4MV@Mu<>1*vNwEL89Rm zm6ukhMI6FT^iFKYy2tAT&?Z!5K5n7TK!6wVT?y7+$7OQ*Hm2R`ySy?o%Uz3sZS&4zANU-}0 zE#b2vNwtLZf1p>{a9n-4&+~cbTs@7_Y3~NjDZQ2P_DJ^2moEW;fPg@MTlsVlolOs> zJ!t?IIc_neGxxZX2ZKyTH@m9o`9sw?-?!4m_YOGC^O|vP-e~f;$Og8H1I@*ab#)|Q#S|a;PlD2;xRV

OLGM@hcbr{)F470l9AVLkV z^{(Wfl_j_b@85DqZ#Hu?<5Nlg)h{$q_MSgu$v+@#*Eni}0-RkBD!7QPAT8On^2|>| tG&cq-#c>BDED%&>3f_UiHrhv=OroFK)MzHl;4Aci?Av#5N+k4s{|9d>JW~Jw diff --git a/tgstation.dme b/tgstation.dme index 9927e75c18f..d64ff1487ef 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1089,6 +1089,7 @@ #include "code\modules\html_interface\cards\cards.dm" #include "code\modules\html_interface\nanotrasen\nanotrasen.dm" #include "code\modules\hydroponics\biogenerator.dm" +#include "code\modules\hydroponics\gene_modder.dm" #include "code\modules\hydroponics\grown.dm" #include "code\modules\hydroponics\growninedible.dm" #include "code\modules\hydroponics\hydroitemdefines.dm" From a707a54489cd35be8a3b949783af8547bbcf8ecf Mon Sep 17 00:00:00 2001 From: c0 Date: Mon, 14 Mar 2016 09:17:27 +0300 Subject: [PATCH 2/5] fixes broken sprites and broken clown banana --- code/modules/hydroponics/grown/root.dm | 1 + code/modules/hydroponics/grown/towercap.dm | 1 + code/modules/jobs/job_types/civilian.dm | 8 +++++--- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index 0b5a8f53b7a..4459b62606e 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -89,6 +89,7 @@ endurance = 50 yield = 6 oneharvest = 1 + icon_dead = "whitebeet-dead" reagents_add = list("vitamin" = 0.05, "nutriment" = 0.05) /obj/item/weapon/reagent_containers/food/snacks/grown/redbeet diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 873dda37163..61aabb318da 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -14,6 +14,7 @@ oneharvest = 1 growthstages = 3 icon_dead = "towercap-dead" + plant_type = PLANT_MUSHROOM mutatelist = list(/obj/item/seeds/tower/steel) /obj/item/seeds/tower/steel diff --git a/code/modules/jobs/job_types/civilian.dm b/code/modules/jobs/job_types/civilian.dm index 4acd3ecb4d8..486443278cc 100644 --- a/code/modules/jobs/job_types/civilian.dm +++ b/code/modules/jobs/job_types/civilian.dm @@ -26,7 +26,11 @@ Clown mask = /obj/item/clothing/mask/gas/clown_hat l_pocket = /obj/item/weapon/bikehorn r_pocket = /obj/item/toy/crayon/rainbow - backpack_contents = list(/obj/item/weapon/stamp/clown=1,/obj/item/weapon/reagent_containers/spray/waterflower=1) + backpack_contents = list( + /obj/item/weapon/stamp/clown = 1, + /obj/item/weapon/reagent_containers/spray/waterflower = 1, + /obj/item/weapon/reagent_containers/food/snacks/grown/banana = 1 + ) backpack = /obj/item/weapon/storage/backpack/clown satchel = /obj/item/weapon/storage/backpack/clown @@ -46,8 +50,6 @@ Clown if(visualsOnly) return - new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(H.back, 50) - H.dna.add_mutation(CLOWNMUT) H.rename_self("clown") From d513f52244e07263d32e402e9de3f92cc25403a9 Mon Sep 17 00:00:00 2001 From: c0 Date: Tue, 15 Mar 2016 04:29:36 +0300 Subject: [PATCH 3/5] Adds Plant Samples for future use --- code/modules/hydroponics/gene_modder.dm | 13 ++++++- code/modules/hydroponics/hydroponics.dm | 15 ++++---- code/modules/hydroponics/plant_genes.dm | 21 +++++++++-- code/modules/hydroponics/sample.dm | 44 ++++++++++++++++++++++++ code/modules/hydroponics/seeds.dm | 9 ++++- icons/obj/hydroponics/seeds.dmi | Bin 19193 -> 19641 bytes tgstation.dme | 1 + 7 files changed, 90 insertions(+), 13 deletions(-) create mode 100644 code/modules/hydroponics/sample.dm diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 37695f75e65..d231455280c 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -201,7 +201,7 @@ dat += "Insert: [disk.gene.get_name()]" dat += "" else - dat += "
No sample found.

Please, insert a plant sample to use this device." + dat += "
No sample found.
Please, insert a plant sample to use this device." popup.set_content(dat) popup.open() @@ -249,6 +249,7 @@ if(istype(disk.gene, /datum/plant_gene/reagent)) seed.reagents_from_genes() update_genes() + repaint_seed() operation = "" target = null @@ -269,6 +270,7 @@ seed.genes -= G if(istype(G, /datum/plant_gene/reagent)) seed.reagents_from_genes() + repaint_seed() if("extract") if(disk && !disk.read_only) disk.gene = G @@ -282,11 +284,13 @@ var/datum/plant_gene/core/C = disk.gene.Copy() seed.genes += C C.apply_stat(seed) + repaint_seed() if("insert") if(disk && disk.gene && !istype(disk.gene, /datum/plant_gene/core) && disk.gene.can_add(seed)) seed.genes += disk.gene.Copy() if(istype(disk.gene, /datum/plant_gene/reagent)) seed.reagents_from_genes() + repaint_seed() update_genes() operation = "" @@ -326,6 +330,13 @@ for(var/datum/plant_gene/trait/G in seed.genes) trait_genes += G +/obj/machinery/plantgenes/proc/repaint_seed() + if(!seed) + return + if(copytext(seed.name, 1, 13) == "experimental") + return // Already modded name and icon + seed.name = "experimental " + seed.name + seed.icon_state = "seed-x" /* diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 3ea195fb3e8..13f2a25ed4c 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -243,8 +243,9 @@ update_icon_plant() update_icon_lights() - if(istype(myseed, /obj/item/seeds/glowshroom)) - SetLuminosity(round(myseed.potency / 10)) + if(myseed && myseed.get_gene(/datum/plant_gene/trait/glow)) + var/datum/plant_gene/trait/glow/G = myseed.get_gene(/datum/plant_gene/trait/glow) + SetLuminosity(G.get_lum(myseed)) else SetLuminosity(0) @@ -349,12 +350,7 @@ /obj/machinery/hydroponics/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25) // Mutates the current seed if(!myseed) return - myseed.adjust_lifespan(rand(-lifemut,lifemut)) - myseed.adjust_endurance(rand(-endmut,endmut)) - myseed.adjust_production(rand(-productmut,productmut)) - myseed.adjust_yield(rand(-yieldmut,yieldmut)) - myseed.adjust_potency(rand(-potmut,potmut)) - + myseed.mutate(lifemut, endmut, productmut, yieldmut, potmut) /obj/machinery/hydroponics/proc/hardmutate() mutate(4, 10, 2, 4, 50) @@ -716,7 +712,7 @@ reagent_source.update_icon() return 1 - else if(istype(O, /obj/item/seeds)) + else if(istype(O, /obj/item/seeds) && !istype(O, /obj/item/seeds/sample)) if(!myseed) if(istype(O, /obj/item/seeds/kudzu)) investigate_log("had Kudzu planted in it by [user.ckey]([user]) at ([x],[y],[z])","kudzu") @@ -865,6 +861,7 @@ var/mob/living/simple_animal/hostile/C = new chosen C.faction = list("plants") + /////////////////////////////////////////////////////////////////////////////// /obj/machinery/hydroponics/soil //Not actually hydroponics at all! Honk! name = "soil" diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 24e3e9e0527..a4b6a92c36a 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -5,7 +5,7 @@ return name /datum/plant_gene/proc/can_add(obj/item/seeds/S) - return TRUE + return !istype(S, /obj/item/seeds/sample) // Samples can't accept new genes /datum/plant_gene/proc/Copy() return new type @@ -34,6 +34,8 @@ return C /datum/plant_gene/core/can_add(obj/item/seeds/S) + if(!..()) + return FALSE return S.get_gene(src.type) /datum/plant_gene/core/lifespan @@ -107,6 +109,8 @@ return G /datum/plant_gene/reagent/can_add(obj/item/seeds/S) + if(!..()) + return FALSE for(var/datum/plant_gene/reagent/R in S.genes) if(R.reagent_id == reagent_id) return FALSE @@ -126,6 +130,9 @@ return G /datum/plant_gene/trait/can_add(obj/item/seeds/S) + if(!..()) + return FALSE + for(var/datum/plant_gene/trait/R in S.genes) if(trait_id && R.trait_id == trait_id) return FALSE @@ -273,4 +280,14 @@ /datum/plant_gene/trait/noreact/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target) G.flags &= ~NOREACT - G.reagents.handle_reactions() \ No newline at end of file + G.reagents.handle_reactions() + + +/datum/plant_gene/trait/maxchem + // 2x to max reagents volume. + name = "Densified Chemicals" + rate = 2 + +/datum/plant_gene/trait/maxchem/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc) + ..() + G.reagents.maximum_volume *= rate \ No newline at end of file diff --git a/code/modules/hydroponics/sample.dm b/code/modules/hydroponics/sample.dm new file mode 100644 index 00000000000..4478671b2fb --- /dev/null +++ b/code/modules/hydroponics/sample.dm @@ -0,0 +1,44 @@ +var/list/chem_t1_reagents = list( + "hydrogen", "oxygen", "silicon", + "phosphorus", "sulfur", "carbon", + "nitrogen", "water" +) + +var/list/chem_t2_reagents = list( + "lithium", "copper", "mercury", + "sodium", "iodine", "bromine" +) // "sugar", "sacid" removed because they are already in roundstart plants + +var/list/chem_t3_reagents = list( + "ethanol", "chlorine", "potassium", + "aluminium", "radium", "fluorine", + "iron", "welding_fuel", "silver", + "stable_plasma" +) + +var/list/chem_t4_reagents = list( + "oil", "ash", "acetone", + "saltpetre", "ammonia", "diethylamine" +) + +/obj/item/seeds/sample + name = "plant sample" + icon_state = "sample-empty" + potency = -1 + yield = -1 + var/sample_color = "#FFFFFF" + +/obj/item/seeds/sample/New() + ..() + if(sample_color) + var/image/I = image(icon, icon_state = "sample-filling") + I.color = sample_color + overlays += I + +/obj/item/seeds/sample/get_analyzer_text() + return " The DNA of this sample is damaged beyond recovery, it can't support life on it's own.\n*---------*" + +/obj/item/seeds/sample/alienweed + name = "alien weed sample" + icon_state = "alienweed" + sample_color = null \ No newline at end of file diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index b13dd503231..7729e7073e6 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -89,6 +89,13 @@ for(var/datum/plant_gene/reagent/R in genes) reagents_add[R.reagent_id] = R.rate +/obj/item/seeds/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25) + adjust_lifespan(rand(-lifemut,lifemut)) + adjust_endurance(rand(-endmut,endmut)) + adjust_production(rand(-productmut,productmut)) + adjust_yield(rand(-yieldmut,yieldmut)) + adjust_potency(rand(-potmut,potmut)) + /obj/item/seeds/bullet_act(obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables. if(istype(Proj, /obj/item/projectile/energy/florayield)) @@ -232,7 +239,7 @@ // Maybe some day it would be used as unit test. /proc/check_plants_growth_stages_icons() var/list/states = icon_states('icons/obj/hydroponics/growing.dmi') - var/list/paths = typesof(/obj/item/seeds) - /obj/item/seeds + var/list/paths = typesof(/obj/item/seeds) - /obj/item/seeds - typesof(/obj/item/seeds/sample) for(var/seedpath in paths) var/obj/item/seeds/seed = new seedpath diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi index 6492755567d40b78a636e1051aa25c85988e55b1..c82f15e3012f2410bde4556e549561007734e0e4 100644 GIT binary patch literal 19641 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≶D=^i{)OrlB}He~&Jp}-3SssiP5!zQd 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 Date: Sat, 19 Mar 2016 16:26:33 +0100 Subject: [PATCH 4/5] Fixes bodybag making the wrong sound when closed --- code/game/objects/items/bodybag.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 4eaaeb52e53..83ac1b58805 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -40,6 +40,7 @@ density = 0 mob_storage_capacity = 2 open_sound = 'sound/items/zip.ogg' + close_sound = 'sound/items/zip.ogg' /obj/structure/closet/body_bag/attackby(obj/item/I, mob/user, params) @@ -107,4 +108,4 @@ foldedbag_path = /obj/item/bodybag/bluespace density = 0 mob_storage_capacity = 15 - max_mob_size = MOB_SIZE_LARGE \ No newline at end of file + max_mob_size = MOB_SIZE_LARGE From 26b4c8c03a055285f2f7bb3dae92da97f6e3a068 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sat, 19 Mar 2016 19:55:21 -0500 Subject: [PATCH 5/5] Tentacle --- code/modules/mob/living/simple_animal/hostile/mining_mobs.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 26a0a11ee9c..b040f86c2ee 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -403,6 +403,7 @@ icon = 'icons/mob/animal.dmi' icon_state = "Goliath_tentacle" var/latched = 0 + anchored = 1 /obj/effect/goliath_tentacle/New() var/turftype = get_turf(src)