From 78fc52ef1132afae6e4ff7d65fa23667f224a00a Mon Sep 17 00:00:00 2001 From: Skiedrake Date: Tue, 7 Sep 2010 19:33:23 +0000 Subject: [PATCH] Merge to main from the hydroponics branch r57_skie_1. Hydroponics update + bugfixes. Consists of revisions: R58, R60, R67, R68, R73. Combined changelog (from oldest rev to newest): Put all hydroponics defines into one .dm file Added functionality for nettles and made all currently growable plantlife work Changed hydroponics layout Added Hydroponics Supply crates and added weed/pest sprays into the current ones at hydro Fixed nettle hold graphics Fixed vending machines showing hidden items. Added Research Director hydroponics access and botanists tox access (already had chem access, but no tox). Hydroponics in great shape. Spank Numbers for final modifications before merging to trunk. (weedkillers, pestkillers) Added a seed vending machine. Amanitas now poison, and the poison is nasty. Added a poison() proc to all foods. Added graphics for vertical and horizontal one-tile-wide tables. Put one inside hydroponics. New 'blur' texture when your vision goes blurry. Fixed a typo in hydroponics code. Added a disposal unit in hydroponics. Added a how-to instructions paper in hydroponics. Hydroponics in working order. Extra features still in developement. Fixed weedspray and pestspray entries. Removed chaplains random probability to have see_invisible 15 at start, because it's reset to 0 right next world tick anyways. Added burn() and drug() procs to foodstuffs. Added drug effects to some mushrooms. Have a nice trip. Made chilis heat you up and ice peppers freeze you down. Fixed carrot's harvest icon (it didn't exist) To-do: Mutagens and vitamins for hydroponics plants. New mutations, recipes for cook, extracting stuff from plants. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@74 316c924e-a436-60f5-8080-3fe189b3f50e --- code/WorkInProgress/Chemistry-Reagents.dm | 39 +- code/WorkInProgress/Chemistry-Recipes.dm | 8 +- code/WorkInProgress/Chemistry-Tools.dm | 289 +- code/defines/obj/clothing.dm | 6 - code/defines/obj/food.dm | 61 - code/defines/obj/hydro.dm | 573 ++ code/defines/obj/machinery.dm | 15 +- code/defines/obj/seeds.dm | 112 - code/defines/obj/weapon.dm | 131 +- code/game/atom_procs.dm | 2 +- code/game/jobs/access.dm | 6 +- code/game/jobs/jobprocs.dm | 4 +- code/game/machinery/hydroponics.dm | 445 +- code/game/machinery/microwave.dm | 40 - code/game/machinery/processor.dm | 18 +- code/game/machinery/vending.dm | 11 +- code/game/objects/closets/kitchen.dm | 21 +- code/game/objects/devices/aicard.dm | 7 +- .../game/objects/items/weapons/hydroponics.dm | 106 +- .../objects/items/weapons/mops_cleaners.dm | 4 +- code/game/objects/radio/radio.dm | 4 +- code/game/objects/storage/crates.dm | 13 +- code/game/supplyshuttle.dm | 17 + .../living/carbon/alien/humanoid/life_new.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 12 +- config/admins.txt | 1 - goonstation.dme | 3 +- icons/changelog.html | 10 - icons/mob/head.dmi | Bin 17306 -> 17112 bytes icons/mob/human.dmi | Bin 16317 -> 14825 bytes icons/mob/items_lefthand.dmi | Bin 64836 -> 64872 bytes icons/mob/items_righthand.dmi | Bin 64939 -> 64938 bytes icons/mob/screen1.dmi | Bin 68784 -> 118435 bytes icons/mob/uniform_fat.dmi | Bin 32993 -> 32068 bytes icons/mob/xcomalien.dmi | Bin 6962 -> 18920 bytes icons/obj/clothing/hats.dmi | Bin 7426 -> 5699 bytes icons/obj/food.dmi | Bin 18156 -> 19128 bytes icons/obj/hydroponics.dmi | Bin 69712 -> 69868 bytes icons/obj/kitchen.dmi | Bin 17578 -> 8422 bytes icons/obj/pipes.dmi | Bin 38157 -> 71017 bytes icons/obj/pipes2.dmi | Bin 5375 -> 6551 bytes icons/obj/structures.dmi | Bin 23674 -> 32557 bytes maps/trunkmap.dmm | 6726 +++++++++-------- 43 files changed, 4721 insertions(+), 3965 deletions(-) delete mode 100644 code/defines/obj/food.dm create mode 100644 code/defines/obj/hydro.dm delete mode 100644 code/defines/obj/seeds.dm diff --git a/code/WorkInProgress/Chemistry-Reagents.dm b/code/WorkInProgress/Chemistry-Reagents.dm index 91377d8fbf..f826838250 100644 --- a/code/WorkInProgress/Chemistry-Reagents.dm +++ b/code/WorkInProgress/Chemistry-Reagents.dm @@ -150,8 +150,6 @@ datum holder.remove_reagent("toxin", 2) if(holder.has_reagent("stoxin")) holder.remove_reagent("stoxin", 2) - if(holder.has_reagent("cholesterol")) - holder.remove_reagent("cholesterol", 4) if(holder.has_reagent("plasma")) holder.remove_reagent("plasma", 1) if(holder.has_reagent("acid")) @@ -207,32 +205,6 @@ datum ..() return - /*cholesterol /////////////////////////////////It's cholesterol. IN SPACE. Remains out till it's fucking fixed /////////////////// - name = "Cholesterol" - id = "cholesterol" - description = "A certain steroid fat that is known to cause trouble to humans in large doses. Obtained through fatty diets." - reagent_state = LIQUID - - on_mob_life(var/mob/M) - if(!M) M = holder.my_atom - if(!data) data = 1 - switch(data) - if(30 to 30) - M << "\red Your blood feels... sluggish..." - if(75 to 99) - for(M in viewers(src, null)) - M.show_message(text("\red Oh no! [M.name] seems to be having a minor cardiac arrest!"), 1) - M:toxloss += 35 - M:drowsyness = max(M:drowsyness, 25) - if(120 to INFINITY) - usr << "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGGGGGGGGGGGGGGGGGGGGGG" - for(M in viewers(src, null)) - M.show_message("\red [M.name] 's face turns blue as he suffers a major cardiac arrest! He's not walking out of this one for sure...", 1) - M:toxloss +=200 - data++ - ..() - return*/ - inaprovaline name = "Inaprovaline" id = "inaprovaline" @@ -626,9 +598,9 @@ datum C:head.clean_blood() - weedbgone - name = "Weed-B-Gone" - id = "weedbgone" + plantbgone + name = "Plant-B-Gone" + id = "plantbgone" description = "A harmful toxic mixture to kill plantlife. Do not ingest!" reagent_state = LIQUID /* Don't know if this is necessary. @@ -640,9 +612,9 @@ datum */ reaction_obj(var/obj/O, var/volume) if(istype(O,/obj/plant/vine/)) - O:life -= 25 // Kills vines nicely // Not tested as vines don't work in R41 + O:life -= rand(5,30) // Kills vines nicely // Not tested as vines don't work in R41 else if(istype(O,/obj/alien/weeds/)) - O:health -= 25 // Kills alien weeds pretty fast + O:health -= rand(5,25) // Kills alien weeds pretty fast O:healthcheck() // Damage that is done to growing plants is separately // at code/game/machinery/hydroponics at obj/item/hydroponics @@ -656,7 +628,6 @@ datum //M.make_dizzy(1) doesn't seem to do anything - space_cola name = "Cola" id = "cola" diff --git a/code/WorkInProgress/Chemistry-Recipes.dm b/code/WorkInProgress/Chemistry-Recipes.dm index e6a20f5d5c..02e11e521b 100644 --- a/code/WorkInProgress/Chemistry-Recipes.dm +++ b/code/WorkInProgress/Chemistry-Recipes.dm @@ -389,9 +389,9 @@ datum required_reagents = list("ammonia" = 1, "water" = 1) result_amount = 1 - weedbgone - name = "Weed-B-Gone" - id = "weedbgone" - result = "weedbgone" + plantbgone + name = "Plant-B-Gone" + id = "plantbgone" + result = "plantbgone" required_reagents = list("toxin" = 1, "water" = 4) result_amount = 5 \ No newline at end of file diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm index 7e642434b7..e2e1f28e56 100644 --- a/code/WorkInProgress/Chemistry-Tools.dm +++ b/code/WorkInProgress/Chemistry-Tools.dm @@ -224,42 +224,39 @@ proc fire_syringe(atom/target, mob/user) - if (locate (/obj/table, src.loc)) - return - else - var/turf/trg = get_turf(target) - var/obj/syringe_gun_dummy/D = new/obj/syringe_gun_dummy(get_turf(src)) - var/obj/item/weapon/reagent_containers/syringe/S = syringes[1] - S.reagents.trans_to(D, S.reagents.total_volume) - syringes -= S - del(S) - D.icon_state = "syringeproj" - D.name = "syringe" - playsound(user.loc, 'syringeproj.ogg', 50, 1) + var/turf/trg = get_turf(target) + var/obj/syringe_gun_dummy/D = new/obj/syringe_gun_dummy(get_turf(src)) + var/obj/item/weapon/reagent_containers/syringe/S = syringes[1] + S.reagents.trans_to(D, S.reagents.total_volume) + syringes -= S + del(S) + D.icon_state = "syringeproj" + D.name = "syringe" + playsound(user.loc, 'syringeproj.ogg', 50, 1) - for(var/i=0, i<6, i++) - if(D.loc == trg) break - step_towards(D,trg) + for(var/i=0, i<6, i++) + if(D.loc == trg) break + step_towards(D,trg) - for(var/mob/living/carbon/M in D.loc) - if(!istype(M,/mob/living/carbon)) continue - if(M == user) continue - D.reagents.trans_to(M, 15) - M.bruteloss += 5 - for(var/mob/O in viewers(world.view, D)) - O.show_message(text("\red [] was hit by the syringe!", M), 1) + for(var/mob/living/carbon/M in D.loc) + if(!istype(M,/mob/living/carbon)) continue + if(M == user) continue + D.reagents.trans_to(M, 15) + M.bruteloss += 5 + for(var/mob/O in viewers(world.view, D)) + O.show_message(text("\red [] was hit by the syringe!", M), 1) - del(D) + del(D) - for(var/atom/A in D.loc) - if(A == user) continue - if(A.density) del(D) + for(var/atom/A in D.loc) + if(A == user) continue + if(A.density) del(D) - sleep(1) + sleep(1) - spawn(10) del(D) + spawn(10) del(D) - return + return @@ -587,10 +584,24 @@ /// Syringes. END //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -/// Snacks. +/// Food. //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/food + var/heal_amt = 0 + + // -- Skie - Mushrooms & poisoned foor + // 0 = no poison, 25 = some poison, >50 = LOTS of poison + var/poison_amt = 0 + + // -- Skie - Psilocybin + // 0 = no trip, 25 = medium trip, 50 large trip, >75 = WTF + var/drug_amt = 0 + + // -- Skie - Hot foods + // 0 = no heat, 25 = cayenne, 50 = habanero, >75 = jolokia + var/heat_amt = 0 + proc heal(var/mob/M) if(istype(M, /mob/living/carbon/human)) @@ -609,6 +620,88 @@ M.fireloss = max(0, M.fireloss - src.heal_amt) M.updatehealth() + + proc + poison(var/mob/M) + var/poison_temp = src.poison_amt + src = null + spawn(200) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/C = M + if(poison_temp > 0) + C.toxloss += rand(0,poison_temp/2) // Some initial damage + C.fireloss += rand(0,poison_temp/4) // Some initial damage + C.UpdateDamageIcon() + C.weakened += poison_temp/(rand(1,4)) + if(poison_temp > 20 && poison_temp < 50) + C << "\red You feel absolutely horrible." + C.emote(pick("blink", "blink_r", "twitch_s", "frown", "blush", "shrug", "pale", "sniff", "whimper", "flap", "drool", "moan", "twitch")) + else if(poison_temp > 49) + C << "\red You feel like your liver is being disintegrated by an infernal poison." + C.emote(pick("groan", "frown", "moan", "whimper", "drool", "pale")) + + + C.eye_blurry += poison_temp + C.make_dizzy(10*poison_temp) + spawn() + for(poison_temp, poison_temp>0, 1) // Poison does 10 damage per tick + sleep(100) // Every 10 seconds + C.toxloss += min(poison_temp, 10) + poison_temp -= 10 // Until poison amount is depleted + + + proc + drug(var/mob/M) + var/drug_temp = src.drug_amt + src = null // Detach proc + spawn(200) // In 20 seconds... + if(istype(M, /mob/living/carbon/human)) + + var/mob/living/carbon/human/C = M + C.druggy += (drug_temp*(drug_temp/15)+10) // Have a trip + if(drug_temp > 25) + C.make_dizzy(5*drug_temp) // Dizzify + C.stuttering = drug_temp // Speech impediments + spawn(3000) // 5 minutes + C << "\red You feel a craving for a trip..." + + if(drug_temp > 50) + C.make_jittery(5*drug_temp) // Jitter + spawn(-1) + for(var/i=1, i == 1, 1) + C.see_invisible = 15 + sleep(300) + C.emote(pick("blink", "blink_r", "twitch_s", "frown", "blush", "shrug", "pale", "sniff", "whimper", "flap", "drool", "moan", "twitch")) + if(prob(20)) + C.see_invisible = 0 + i = 0 + if(drug_temp > 75) + C.confused += drug_temp // Hard to move where you want + C.weakened += rand(0, drug_temp/4) // Fall on your back + // Add cool stuff here later, like everything starting to look different etc. + + proc + burn(var/mob/M) + var/temp_heat = src.heat_amt + var/temp_name = src.name + src = null + spawn(50) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/C = M + + // BRING ON THE HEAT/FROST + spawn() + while(temp_heat > 5) // Until chili pepper's potency is depleted + sleep(20) // Every 2 seconds + C.fireloss += 3 // Do some burn damage because body temperature itself doesn't do anything :( + if (temp_heat > 0 && temp_name == "Chili") + C.bodytemperature += min(temp_heat*5, 25) + temp_heat -= 5 // Until heat amount is depleted + else if (temp_heat > 0 && temp_name == "Icepepper") // Herp derp, bad way to do it but herp derp + C.bodytemperature -= min(temp_heat*5, 25) + temp_heat -= 5 // Until heat amount is depleted + + /obj/item/weapon/reagent_containers/food/snacks name = "snack" desc = "yummy" @@ -639,10 +732,17 @@ spawn(5) reagents.trans_to(M, reagents.total_volume) src.amount-- + playsound(M.loc,'eatfood.ogg', rand(10,50), 1) M.nutrition += src.heal_amt * 10 M.poo += 0.1 - src.heal(M) - playsound(M.loc,'eatfood.ogg', rand(10,50), 1) + if(src.heal_amt > 0) + src.heal(M) + if(src.poison_amt > 0) + src.poison(M) + if(src.drug_amt > 0) + src.drug(M) + if(src.heat_amt > 0) + src.burn(M) if(!src.amount) user << "\red You finish eating [src]." del(src) @@ -659,10 +759,17 @@ spawn(5) reagents.trans_to(M, reagents.total_volume) src.amount-- + playsound(M.loc, 'eatfood.ogg', rand(10,50), 1) M.nutrition += src.heal_amt * 10 M.poo += 0.1 - src.heal(M) - playsound(M.loc, 'eatfood.ogg', rand(10,50), 1) + if(src.heal_amt > 0) + src.heal(M) + if(src.poison_amt > 0) + src.poison(M) + if(src.drug_amt > 0) + src.drug(M) + if(src.heat_amt > 0) + src.burn(M) if(!src.amount) user << "\red [M] finishes eating [src]." del(src) @@ -1182,85 +1289,6 @@ amount = 5 heal_amt = 2 -/obj/item/weapon/reagent_containers/food/snacks/meatbread - name = "meatbread loaf" - desc = "The culinary base of every self-respecting eloquen/tg/entleman." - icon_state = "meatbread" - amount = 30 - heal_amt = 5 -/* New() - var/datum/reagents/R = new/datum/reagents(20) - reagents = R - R.my_atom = src - R.add_reagent("cholesterol", 20)*/ - heal(var/mob/M) - ..() - - -/obj/item/weapon/reagent_containers/food/snacks/meatbreadslice - name = "meatbread slice" - desc = "A slice of delicious meatbread." - icon_state = "meatbreadslice" - amount = 5 - heal_amt = 6 - New() -/* var/datum/reagents/R = new/datum/reagents(10) - reagents = R - R.my_atom = src - R.add_reagent("cholesterol", 10)*/ - heal(var/mob/M) - ..() - - -/obj/item/weapon/reagent_containers/food/snacks/cheesewheel - name = "Cheese wheel" - desc = "A big wheel of delcious Cheddar." - icon_state = "cheesewheel" - amount = 25 - heal_amt = 3 - heal(var/mob/M) - ..() - -/obj/item/weapon/reagent_containers/food/snacks/cheesewedge - name = "Cheese wedge" - desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far." - icon_state = "cheesewedge" - amount = 4 - heal_amt = 4 - heal(var/mob/M) - ..() - -/obj/item/weapon/reagent_containers/food/snacks/omelette - name = "Omelette Du Fromage" - desc = "That's all you can say!" - icon_state = "omelette" - amount = 15 - heal_amt = 3 - heal(var/mob/M) - ..() - attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/kitchen/utensil/fork)) - W.icon = 'kitchen.dmi' - W.icon_state = "forkloaded" - world << "[user] takes a piece of omelette with his fork!" - -/obj/item/weapon/reagent_containers/food/snacks/omeletteforkload - name = "Omelette Du Fromage" - desc = "That's all you can say!" - amount = 1 - heal_amt = 4 - heal(var/mob/M) - ..() - -/obj/item/weapon/reagent_containers/food/snacks/muffin - name = "Muffin" - desc = "A delicious and spongy little cake" - icon_state = "muffin" - amount = 4 - heal_amt = 6 - heal(var/mob/M) - ..() - /obj/item/weapon/reagent_containers/food/snacks/roburger name = "roburger" desc = "The lettuce is the only organic component. Beep." @@ -1340,17 +1368,6 @@ R.my_atom = src R.add_reagent("beer", 30) -/obj/item/weapon/reagent_containers/food/drinks/milk - name = "Space Milk" - desc = "Milk. By Cows. Cows in space." - icon_state = "milk" - heal_amt = 1 - New() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src - R.add_reagent("milk", 50) - //Pills /obj/item/weapon/reagent_containers/pill/antitox name = "Anti-toxins pill" @@ -1441,27 +1458,5 @@ ..() reagents.add_reagent("beer",1000) -///////////////////////////////////////////////////////////////////////////////////////////////////// Meatbread slicing RIGHT BELOW************* ///////////////////////////////////////////////////////////////////////////////////////////////////// - -/obj/item/weapon/reagent_containers/food/snacks/meatbread/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/kitchenknife /*|| /obj/item/weapon/scalpel*/)) - W.visible_message(" [usr] slices the meatbread! ", 1) - new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc) - del(src) - return - -/obj/item/weapon/reagent_containers/food/snacks/cheesewheel/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/kitchenknife /* || /obj/item/weapon/scalpel*/)) - W.visible_message(" [usr] slices the cheese! ", 1) - new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) - del(src) - return +///////////////////////////////////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/code/defines/obj/clothing.dm b/code/defines/obj/clothing.dm index 1e71da00bb..25437bced0 100644 --- a/code/defines/obj/clothing.dm +++ b/code/defines/obj/clothing.dm @@ -160,12 +160,6 @@ flags = FPRINT|TABLEPASS|SUITSPACE item_state = "caphat" -/obj/item/clothing/head/wardhat - name = "Warden's hat" - icon_state = "warden" - flags = FPRINT|TABLEPASS|SUITSPACE - item_state = "warden" - /obj/item/clothing/head/centhat name = "Cent. Comm. hat" icon_state = "centcom" diff --git a/code/defines/obj/food.dm b/code/defines/obj/food.dm deleted file mode 100644 index c22582619e..0000000000 --- a/code/defines/obj/food.dm +++ /dev/null @@ -1,61 +0,0 @@ -//Grown foods -/obj/item/weapon/reagent_containers/food/snacks/grown/ //New subclass so we can pass on values - var/seed = "" - var/plantname = "" - var/productname = "" - var/species = "" - var/lifespan = 0 - var/endurance = 0 - var/maturation = 0 - var/production = 0 - var/yield = 0 - var/potency = -1 - -/obj/item/weapon/reagent_containers/food/snacks/grown/berries - name = "berries" - desc = "Nutritious!" - icon_state = "berrypile" - amount = 2 - heal_amt = 5 - -/obj/item/weapon/reagent_containers/food/snacks/grown/chili - name = "chili" - desc = "Spicy!" - icon_state = "chilipepper" - amount = 1 - heal_amt = 5 - -/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant - name = "eggplant" - desc = "Yum!" - icon_state = "eggplant" - amount = 2 - heal_amt = 5 - -/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans - name = "soybeans" - desc = "Pretty bland, but the possibilities..." - icon_state = "soybeans" - amount = 1 - heal_amt = 2 - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato - name = "tomato" - desc = "Tom-mae-to or to-mah-to? You decide." - icon_state = "tomato" - amount = 2 - heal_amt = 5 - -/obj/item/weapon/reagent_containers/food/snacks/grown/wheat - name = "wheat" - desc = "I wouldn't eat this, unless you're one of those health freaks.." - icon_state = "wheat" - amount = 1 - heal_amt = 1 - -/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper - name = "icepepper" - desc = "THIS SHOULD PROBABLY DO SOMETHING BUT IT DOESN'T RIGHT NOW SO YOU CAN GO FUCK RIGHT OFF" - icon_state = "icepepper" - amount = 1 - heal_amt = 1 \ No newline at end of file diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm new file mode 100644 index 0000000000..2c9d016b5b --- /dev/null +++ b/code/defines/obj/hydro.dm @@ -0,0 +1,573 @@ +// ******************************************************** +// Here's all the seeds (=plants) that can be used in hydro +// ******************************************************** + +/obj/item/seeds + name = "seed" + icon = 'hydroponics.dmi' + icon_state = "seed" // unknown plant seed - these shouldn't exist in-game + flags = FPRINT | TABLEPASS + var/mypath = "/obj/item/seeds" + var/plantname = "" + var/productname = "" + var/species = "" + var/lifespan = 0 + var/endurance = 0 + var/maturation = 0 + var/production = 0 + var/yield = 0 // If is -1, the plant/shroom/weed is never meant to be harvested + var/oneharvest = 0 + var/potency = -1 + var/growthstages = 0 + var/plant_type = 0 // 0 = 'normal plant'; 1 = weed; 2 = shroom + +/obj/item/seeds/chiliseed + name = "Chili plant seeds" + icon_state = "seed-chili" + mypath = "/obj/item/seeds/chiliseed" + species = "chili" + plantname = "Chili plant" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/chili" + lifespan = 20 + endurance = 15 + maturation = 5 + production = 5 + yield = 4 + potency = 20 + plant_type = 0 + growthstages = 6 + +/obj/item/seeds/berryseed + name = "Berry seeds" + icon_state = "seed-berry" + mypath = "/obj/item/seeds/berryseed" + species = "berry" + plantname = "Berry bush" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/berries" + lifespan = 20 + endurance = 15 + maturation = 5 + production = 5 + yield = 2 + plant_type = 0 + growthstages = 6 + +/obj/item/seeds/eggplantseed + name = "Eggplant seeds" + icon_state = "seed-eggplant" + mypath = "/obj/item/seeds/eggplantseed" + species = "eggplant" + plantname = "Eggplant plant" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant" + lifespan = 25 + endurance = 15 + maturation = 6 + production = 6 + yield = 2 + plant_type = 0 + growthstages = 6 + +/obj/item/seeds/tomatoseed + name = "Tomato seeds" + icon_state = "seed-tomato" + mypath = "/obj/item/seeds/tomatoseed" + species = "tomato" + plantname = "Tomato plant" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/tomato" + lifespan = 25 + endurance = 15 + maturation = 8 + production = 6 + yield = 2 + plant_type = 0 + growthstages = 6 + +/obj/item/seeds/icepepperseed + name = "Ice pepper seeds" + icon_state = "seed-icepepper" + mypath = "/obj/item/seeds/icepepperseed" + species = "chiliice" + plantname = "Ice pepper plant" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper" + lifespan = 25 + endurance = 15 + maturation = 4 + production = 4 + yield = 4 + potency = 20 + plant_type = 0 + growthstages = 6 + +/obj/item/seeds/soyaseed + name = "Soybean seeds" + icon_state = "seed-soybean" + mypath = "/obj/item/seeds/soyaseed" + species = "soybean" + plantname = "Soybean plant" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans" + lifespan = 25 + endurance = 15 + maturation = 4 + production = 4 + yield = 3 + potency = 0 + plant_type = 0 + growthstages = 6 + +/obj/item/seeds/wheatseed + name = "Wheat seeds" + icon_state = "seed-wheat" + mypath = "/obj/item/seeds/wheatseed" + species = "wheat" + plantname = "Wheat stalks" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/wheat" + lifespan = 25 + endurance = 15 + maturation = 6 + production = 1 + yield = 4 + potency = 0 + oneharvest = 1 + plant_type = 0 + growthstages = 6 + +/obj/item/seeds/carrotseed + name = "Carrot seeds" + icon_state = "seed-carrot" + mypath = "/obj/item/seeds/carrotseed" + species = "carrot" + plantname = "CURROTS MAN CURROTS" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/carrot" + lifespan = 25 + endurance = 15 + maturation = 10 + production = 1 + yield = 4 + potency = 0 + oneharvest = 1 + plant_type = 0 + growthstages = 5 + +/obj/item/seeds/amanitamycelium + name = "Fly Amanita mycelium" + icon_state = "mycelium-amanita" + mypath = "/obj/item/seeds/amanitamycelium" + species = "amanita" + plantname = "Fly Amanita" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/amanita" + lifespan = 50 + endurance = 35 + maturation = 10 + production = 5 + yield = 4 + potency = 10 // Damage based on potency? + oneharvest = 1 + growthstages = 3 + plant_type = 2 + +/obj/item/seeds/angelmycelium + name = "Destroying Angel mycelium" + icon_state = "mycelium-angel" + mypath = "/obj/item/seeds/angelmycelium" + species = "angel" + plantname = "Destroying Angel" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/angel" + lifespan = 50 + endurance = 35 + maturation = 12 + production = 5 + yield = 2 + potency = 35 + oneharvest = 1 + growthstages = 3 + plant_type = 2 + +/obj/item/seeds/libertymycelium + name = "Liberty Cap mycelium" + icon_state = "mycelium-liberty" + mypath = "/obj/item/seeds/libertymycelium" + species = "liberty" + plantname = "Liberty Cap" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/libertycap" + lifespan = 25 + endurance = 15 + maturation = 7 + production = 1 + yield = 6 + potency = 15 // Lowish potency at start + oneharvest = 1 + growthstages = 3 + plant_type = 2 + +/obj/item/seeds/chantermycelium + name = "Chanterelle mycelium" + icon_state = "mycelium-chanter" + mypath = "/obj/item/seeds/chantermycelium" + species = "chanter" + plantname = "Chanterelle" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/chanterelle" + lifespan = 35 + endurance = 20 + maturation = 7 + production = 1 + yield = 5 + potency = -1 + oneharvest = 1 + growthstages = 3 + plant_type = 2 + +/obj/item/seeds/towermycelium + name = "Tower Cap mycelium" + icon_state = "mycelium-tower" + mypath = "/obj/item/seeds/towermycelium" + species = "towercap" + plantname = "Tower Cap" + productname = "" // Doesn't exist yet + lifespan = 80 + endurance = 50 + maturation = 15 + production = 1 + yield = 5 + potency = -1 + oneharvest = 1 + growthstages = 3 + plant_type = 2 + +/obj/item/seeds/plumpmycelium + name = "Plump Helmet mycelium" + icon_state = "mycelium-plump" + mypath = "/obj/item/seeds/plumpmycelium" + species = "plump" + plantname = "Plump Helmet" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/plumphelmet" + lifespan = 25 + endurance = 15 + maturation = 8 + production = 1 + yield = 4 + potency = 0 + oneharvest = 1 + growthstages = 3 + plant_type = 2 + +/obj/item/seeds/nettleseed + name = "Nettle seeds" + icon_state = "seed-nettle" + mypath = "/obj/item/seeds/nettleseed" + species = "nettle" + plantname = "Nettle" + productname = "/obj/item/weapon/grown/nettle" + lifespan = 30 + endurance = 40 // tuff like a toiger + maturation = 6 + production = 6 + yield = 4 + potency = 8 + oneharvest = 0 + growthstages = 5 + plant_type = 1 + +/obj/item/seeds/deathnettleseed + name = "Deathnettle seeds" + icon_state = "seed-deathnettle" + mypath = "/obj/item/seeds/deathnettleseed" + species = "deathnettle" + plantname = "Death Nettle" + productname = "/obj/item/weapon/grown/deathnettle" + lifespan = 30 + endurance = 25 + maturation = 8 + production = 6 + yield = 2 + potency = 20 + oneharvest = 0 + growthstages = 5 + plant_type = 1 + +/obj/item/seeds/weeds + name = "Weeds" + icon_state = "seed" + mypath = "/obj/item/seeds/weeds" + species = "weeds" + plantname = "Generic weeds" + productname = "" + lifespan = 100 + endurance = 50 // damm pesky weeds + maturation = 5 + production = 1 + yield = -1 + potency = -1 + oneharvest = 1 + growthstages = 4 + plant_type = 1 + +/obj/item/seeds/harebell + name = "Harebell" + icon_state = "seed" + mypath = "/obj/item/seeds/harebell" + species = "harebell" + plantname = "Harebell" + productname = "" + lifespan = 100 + endurance = 20 + maturation = 7 + production = 1 + yield = -1 + potency = -1 + oneharvest = 1 + growthstages = 4 + plant_type = 1 + +/obj/item/seeds/brownmold + name = "Brown Mold" + icon_state = "seed" + mypath = "/obj/item/seeds/brownmold" + species = "mold" + plantname = "Brown Mold" + productname = "" + lifespan = 50 + endurance = 30 + maturation = 10 + production = 1 + yield = -1 + potency = -1 + oneharvest = 1 + growthstages = 3 + plant_type = 2 + +/* +/obj/item/seeds/ + name = "" + icon_state = "seed" + mypath = "/obj/item/seeds/" + species = "" + plantname = "" + productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/" + lifespan = 25 + endurance = 15 + maturation = 10 + production = 1 + yield = -1 + potency = 0 + oneharvest = 1 + growthstages = 3 + plant_type = 0 + +*/ + + + + + + + + + +// *********************************************************** +// Foods that are produced from hydroponics ~~~~~~~~~~ +// Data from the seeds carry over to these grown foods +// *********************************************************** + + +//Grown foods +/obj/item/weapon/reagent_containers/food/snacks/grown/ //New subclass so we can pass on values + var/seed = "" + var/plantname = "" + var/productname = "" + var/species = "" + var/lifespan = 0 + var/endurance = 0 + var/maturation = 0 + var/production = 0 + var/yield = 0 + var/potency = -1 + var/plant_type = 0 + +/obj/item/weapon/reagent_containers/food/snacks/grown/berries + name = "Berries" + desc = "Nutritious!" + icon_state = "berrypile" + amount = 2 + heal_amt = 3 + +/obj/item/weapon/reagent_containers/food/snacks/grown/chili + name = "Chili" + desc = "Spicy!" + icon_state = "chilipepper" + amount = 1 + heal_amt = 2 + heat_amt = 20 + potency = 20 + +/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant + name = "Eggplant" + desc = "Yum!" + icon_state = "eggplant" + amount = 1 + heal_amt = 5 + +/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans + name = "Soybeans" + desc = "Pretty bland, but the possibilities..." + icon_state = "soybeans" + amount = 2 + heal_amt = 2 + +/obj/item/weapon/reagent_containers/food/snacks/grown/tomato + name = "Tomato" + desc = "Tom-mae-to or to-mah-to? You decide." + icon_state = "tomato" + amount = 2 + heal_amt = 5 + +/obj/item/weapon/reagent_containers/food/snacks/grown/wheat + name = "Wheat" + desc = "I wouldn't eat this, unless you're one of those health freaks.." + icon_state = "wheat" + amount = 1 + heal_amt = 2 + +/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper + name = "Icepepper" + desc = "A mutant strain of chile" + icon_state = "icepepper" + amount = 1 + heal_amt = 3 + heat_amt = 20 + potency = 20 + +/obj/item/weapon/reagent_containers/food/snacks/grown/carrot + name = "Carrot" + desc = "Good for the eyes!" + icon_state = "carrot" + amount = 3 + heal_amt = 1 + +/obj/item/weapon/reagent_containers/food/snacks/grown/amanita + name = "Fly amanita" + desc = "Amanita Muscaria: Learn poisonous mushrooms by heart. Only pick mushrooms you know." + icon_state = "amanita" + amount = 1 + heal_amt = 0 + poison_amt = 25 + potency = 10 + +/obj/item/weapon/reagent_containers/food/snacks/grown/angel + name = "Destroying angel" + desc = "Amanita Virosa: Deadly poisonous basidiomycete fungus filled with alpha amatoxins." + icon_state = "angel" + amount = 1 + heal_amt = 0 + poison_amt = 75 + potency = 35 + +/obj/item/weapon/reagent_containers/food/snacks/grown/libertycap + name = "Liberty cap" + desc = "Psilocybe Semilanceata: Liberate yourself!" + icon_state = "libertycap" + amount = 1 + heal_amt = 3 + drug_amt = 15 + potency = 15 + +/obj/item/weapon/reagent_containers/food/snacks/grown/plumphelmet + name = "Plump Helmet" + desc = "Plumus Hellmus: Plump, soft and s-so inviting~" + icon_state = "plumphelmet" + amount = 2 + heal_amt = 5 + +/obj/item/weapon/reagent_containers/food/snacks/grown/chanterelle + name = "Chanterelle" + desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty! There's a lot!" + icon_state = "chanterelle" + amount = 3 + heal_amt = 2 + + + + + + + + +// ************************************* +// Pestkiller defines for hydroponics +// ************************************* + + +/obj/item/pestkiller + name = "" + icon = 'chemical.dmi' + icon_state = "bottle16" + flags = FPRINT | TABLEPASS + var/toxicity = 0 + var/PestKillStr = 0 + +/obj/item/pestkiller/carbaryl + name = "Carbaryl" + icon = 'chemical.dmi' + icon_state = "bottle16" + flags = FPRINT | TABLEPASS + toxicity = 4 + PestKillStr = 2 + +/obj/item/pestkiller/lindane + name = "Lindane" + icon = 'chemical.dmi' + icon_state = "bottle18" + flags = FPRINT | TABLEPASS + toxicity = 6 + PestKillStr = 4 + +/obj/item/pestkiller/phosmet + name = "Phosmet" + icon = 'chemical.dmi' + icon_state = "bottle15" + flags = FPRINT | TABLEPASS + toxicity = 8 + PestKillStr = 7 + + + + + + + + +// ************************************* +// Weedkiller defines for hydroponics +// ************************************* + + +/obj/item/weedkiller + name = "" + icon = 'chemical.dmi' + icon_state = "bottle16" + flags = FPRINT | TABLEPASS + var/toxicity = 0 + var/WeedKillStr = 0 + +/obj/item/weedkiller/triclopyr + name = "Glyphosate" + icon = 'chemical.dmi' + icon_state = "bottle16" + flags = FPRINT | TABLEPASS + toxicity = 4 + WeedKillStr = 2 + +/obj/item/weedkiller/lindane + name = "Triclopyr" + icon = 'chemical.dmi' + icon_state = "bottle18" + flags = FPRINT | TABLEPASS + toxicity = 6 + WeedKillStr = 4 + +/obj/item/weedkiller/D24 + name = "2,4-D" + icon = 'chemical.dmi' + icon_state = "bottle15" + flags = FPRINT | TABLEPASS + toxicity = 8 + WeedKillStr = 7 \ No newline at end of file diff --git a/code/defines/obj/machinery.dm b/code/defines/obj/machinery.dm index de05ab7f42..67a3cdea45 100644 --- a/code/defines/obj/machinery.dm +++ b/code/defines/obj/machinery.dm @@ -529,7 +529,7 @@ var/active = 1 //No sales pitches if off! var/vend_ready = 1 //Are we ready to vend?? Is it time?? var/vend_delay = 10 //How long does it take to vend? - var/product_paths = "" //String of product paths separated by semicolons. + var/product_paths = "" //String of product paths separated by semicolons. No spaces! var/product_amounts = "" //String of product amounts separated by semicolons, must have amount for every path in product_paths var/product_slogans = "" //String of slogans separated by semicolons, optional var/product_hidden = "" //String of products that are hidden unless hacked. @@ -605,7 +605,7 @@ icon_state = "sec" icon_deny = "sec-deny" req_access_txt = "1" - product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/flashbang; /obj/item/device/flash" + product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/flashbang;/obj/item/device/flash" product_amounts = "8;2;5" //product_amounts = "8;5;4" Old totals product_hidden = "/obj/item/clothing/head/helmet" @@ -620,6 +620,16 @@ product_amounts = "25;15;15" product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!" +/obj/machinery/vending/hydroseeds + name = "MegaSeed Servitor" + desc = "When you need seeds fast!" + icon_state = "seeds" + product_paths = "/obj/item/seeds/chiliseed;/obj/item/seeds/berryseed;/obj/item/seeds/eggplantseed;/obj/item/seeds/tomatoseed;/obj/item/seeds/wheatseed;/obj/item/seeds/soyaseed;/obj/item/seeds/carrotseed;/obj/item/seeds/chantermycelium;/obj/item/seeds/nettleseed" + product_amounts = "2;2;2;2;2;2;2;2;1" + product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!" + product_hidden = "/obj/item/seeds/amanitamycelium;/obj/item/seeds/libertymycelium;/obj/item/seeds/nettleseed;/obj/item/seeds/plumpmycelium;/obj/item/seeds/towermycelium" + product_hideamt = "1;2;2;2;2" + /obj/machinery/microwave name = "Microwave" icon = 'kitchen.dmi' @@ -630,7 +640,6 @@ var/flour_amount = 0 //Current amount of flour inside var/water_amount = 0 //Current amount of water inside var/monkeymeat_amount = 0 - var/cheese_amount = 0 //cheese inside, yo var/humanmeat_amount = 0 var/donkpocket_amount = 0 var/xenomeat_amount = 0 diff --git a/code/defines/obj/seeds.dm b/code/defines/obj/seeds.dm deleted file mode 100644 index 369d5aed0f..0000000000 --- a/code/defines/obj/seeds.dm +++ /dev/null @@ -1,112 +0,0 @@ -/obj/item/seeds - name = "seed" - icon = 'hydroponics.dmi' - icon_state = "seed" - flags = FPRINT | TABLEPASS - var/mypath = "/obj/item/seeds" - var/plantname = "" - var/productname = "" - var/species = "" - var/lifespan = 0 - var/endurance = 0 - var/maturation = 0 - var/production = 0 - var/yield = 0 - var/oneharvest = 0 - var/potency = -1 - -/obj/item/seeds/chiliseed - name = "chili plant seeds" - icon_state = "seed-chili" - mypath = "/obj/item/seeds/chiliseed" - species = "chili" - plantname = "chili plant" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/chili" - lifespan = 20 - endurance = 15 - maturation = 5 - production = 5 - yield = 4 - potency = 0 - -/obj/item/seeds/berryseed - name = "berry seeds" - icon_state = "seed-berry" - mypath = "/obj/item/seeds/berryseed" - species = "berry" - plantname = "berry bush" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/berries" - lifespan = 20 - endurance = 15 - maturation = 6 - production = 5 - yield = 1 - -/obj/item/seeds/eggplantseed - name = "eggplant seeds" - icon_state = "seed-eggplant" - mypath = "/obj/item/seeds/eggplantseed" - species = "eggplant" - plantname = "eggplant plant" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant" - lifespan = 25 - endurance = 15 - maturation = 6 - production = 6 - yield = 2 - -/obj/item/seeds/tomatoseed - name = "tomato seeds" - icon_state = "seed-tomato" - mypath = "/obj/item/seeds/tomatoseed" - species = "tomato" - plantname = "tomato plant" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/tomato" - lifespan = 25 - endurance = 15 - maturation = 6 - production = 6 - yield = 2 - -/obj/item/seeds/icepepperseed - name = "ice pepper seeds" - icon_state = "seed-icepepper" - mypath = "/obj/item/seeds/icepepperseed" - species = "chiliice" - plantname = "ice pepper plant" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper" - lifespan = 25 - endurance = 15 - maturation = 4 - production = 4 - yield = 4 - potency = 0 - -/obj/item/seeds/soyaseed - name = "soybean seeds" - icon_state = "seed-soybean" - mypath = "/obj/item/seeds/soyaseed" - species = "soybean" - plantname = "soybean plant" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans" - lifespan = 25 - endurance = 15 - maturation = 4 - production = 4 - yield = 3 - potency = 0 - -/obj/item/seeds/wheatseed - name = "wheat seeds" - icon_state = "seed-wheat" - mypath = "/obj/item/seeds/wheatseed" - species = "wheat" - plantname = "wheat stalks" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/wheat" - lifespan = 25 - endurance = 15 - maturation = 6 - production = 1 - yield = 4 - potency = 0 - oneharvest = 1 \ No newline at end of file diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 983fe69103..e02c246eb9 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -267,18 +267,6 @@ throw_speed = 2 throw_range = 10 -/obj/item/weapon/weedbgone - desc = "Weed-B-Gone! Kill those pesky weeds!" - icon = 'hydroponics.dmi' - name = "Weed-B-Gone" - icon_state = "weedbgone" - item_state = "weedbgone" - flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY - throwforce = 3 - w_class = 2.0 - throw_speed = 2 - throw_range = 10 - /obj/item/weapon/clipboard name = "clipboard" icon = 'items.dmi' @@ -551,7 +539,7 @@ desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds." name = ".38 revolver" icon_state = "detective" - var/bullets = 7.0 + var/bullets = 5.0 w_class = 3.0 throw_speed = 2 throw_range = 10 @@ -750,6 +738,10 @@ ASC: Aux. Solar Control
name = "paper- 'A Crash Course in Legal SOP on SS13'" info = "Roles:
\nThe Detective is basically the investigator and prosecutor.
\nThe Staff Assistant can perform these functions with written authority from the Detective.
\nThe Captain/HoP/Warden is ct as the judicial authority.
\nThe Security Officers are responsible for executing warrants, security during trial, and prisoner transport.
\n
\nInvestigative Phase:
\nAfter the crime has been committed the Detective's job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
\n
\nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
\n
\nPre-Pre-Trial Phase:
\nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
\nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
\nPossible Motions:
\n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
\n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
\n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
\n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
\n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
\n
\nALL SIDES MOVE TO A COURTROOM
\nPre-Trial Hearings:
\nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
\n
\nThe Trial:
\nThe trial has three phases.
\n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
\n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
\nFINALLY once both sides are done calling witnesses we move onto the next phase.
\n3. Closing Arguments- Same as opening.
\nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
\n
\nSentencing Phase:
\nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
\nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
\nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
\n
\nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
\n" +/obj/item/weapon/paper/hydroponics + name = "paper- 'Greetings from Billy Bob'" + info = "Hey fellow botanist!
\n
\nI didn't trust the station folk so I left
\na couple of weeks ago. But here's some
\ninstructions on how to operate things here.
\nYou can grow plants and each iteration they become
\nstronger, more potent and have better yield, if you
\nknow which ones to pick. Use your botanist's analyzer
\nfor that. You can turn harvested plants into seeds
\nat the seed extractor, and replant them for better stuff!
\nSometimes if the weed level gets high in the tray
\nmutations into different mushroom or weed species have
\nbeen witnessed. On the rare occassion even weeds mutate!
\n
\nEither way, have fun!
\n
\nBest regards,
\nBilly Bob Johnson." + /obj/item/weapon/paper/flag icon_state = "flag_neutral" item_state = "paper" @@ -1240,32 +1232,6 @@ Total SMES charging rate should not exceed total power generation rate, or an ov throw_range = 7 w_class = 3.0 -/obj/item/weapon/kitchenknife - name = "Kitchen knife" - icon = 'kitchen.dmi' - icon_state = "knife" - desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." - flags = FPRINT | TABLEPASS | CONDUCT - force = 10.0 - w_class = 3.0 - throwforce = 6.0 - throw_speed = 3 - throw_range = 6 - m_amt = 12000 - -/obj/item/weapon/tray - name = "Tray" - icon = 'food.dmi' - icon_state = "tray" - desc = "A metal tray to lay food on." - throwforce = 12.0 - throwforce = 10.0 - throw_speed = 1 - throw_range = 5 - w_class = 3.0 - flags = FPRINT | TABLEPASS | CONDUCT - m_amt = 3000 - /obj/item/weapon/kitchen/utensil force = 5.0 w_class = 1.0 @@ -1274,6 +1240,7 @@ Total SMES charging rate should not exceed total power generation rate, or an ov throw_range = 5 flags = FPRINT | TABLEPASS | CONDUCT + /obj/item/weapon/kitchen/utensil/fork name = "fork" icon_state = "fork" @@ -1385,4 +1352,88 @@ Total SMES charging rate should not exceed total power generation rate, or an ov name = "d20" sides = 20 icon_state = "d20" - item_state = "dice" \ No newline at end of file + item_state = "dice" + +/obj/item/weapon/grown // Grown weapons + name = "grown_weapon" + icon = 'weapons.dmi' + var/seed = "" + var/plantname = "" + var/productname = "" + var/species = "" + var/lifespan = 20 + var/endurance = 15 + var/maturation = 7 + var/production = 7 + var/yield = 2 + var/potency = -1 + var/plant_type = 0 + + +/obj/item/weapon/grown/nettle // -- Skie + desc = "This is a nettle. It's probably not wise to touch it with bare hands..." + icon = 'weapons.dmi' + name = "Nettle" + icon_state = "nettle" + damtype = "fire" + force = 15 + flags = TABLEPASS + throwforce = 1 + w_class = 1.0 + throw_speed = 1 + throw_range = 3 + plant_type = 1 + +/obj/item/weapon/grown/deathnettle // -- Skie + desc = "The \red glowing \black nettle incites \redrage\black in you just from looking at it!" + icon = 'weapons.dmi' + name = "Deathnettle" + icon_state = "deathnettle" + damtype = "fire" + force = 30 + flags = TABLEPASS + throwforce = 1 + w_class = 1.0 + throw_speed = 1 + throw_range = 3 + plant_type = 1 + +/obj/item/weapon/plantbgone // -- Skie + desc = "Plant-B-Gone! Kill those pesky weeds!" + icon = 'hydroponics.dmi' + name = "Plant-B-Gone" + icon_state = "plantbgone" + item_state = "plantbgone" + flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY + throwforce = 3 + w_class = 2.0 + throw_speed = 2 + throw_range = 10 + +/obj/item/weapon/weedspray // -- Skie + desc = "Toxic mixture in spray form to kill small weeds." + icon = 'hydroponics.dmi' + name = "Weed Spray" + icon_state = "weedspray" + item_state = "weedspray" + flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY + throwforce = 4 + w_class = 2.0 + throw_speed = 2 + throw_range = 10 + var/toxicity = 4 + var/WeedKillStr = 2 + +/obj/item/weapon/pestspray // -- Skie + desc = "Pest eliminator spray! Do not inhale!" + icon = 'hydroponics.dmi' + name = "Pest Spray" + icon_state = "pestspray" + item_state = "pestspray" + flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY + throwforce = 4 + w_class = 2.0 + throw_speed = 2 + throw_range = 10 + var/toxicity = 4 + var/PestKillStr = 2 \ No newline at end of file diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index 9983069591..ffef1fcddd 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -40,7 +40,7 @@ if ((O.client && !( O.blinded ))) O << text("\red [src] has been scanned by [user] with the [W]") else - if (!( istype(W, /obj/item/weapon/grab) ) || !(istype(W, /obj/item/weapon/cleaner)) || !(istype(W, /obj/item/weapon/weedbgone)) ) + if (!( istype(W, /obj/item/weapon/grab) ) || !(istype(W, /obj/item/weapon/cleaner)) || !(istype(W, /obj/item/weapon/plantbgone)) ) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O << text("\red [] has been hit by [] with []", src, user, W) diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 25cc0a9a16..e112308a88 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -103,7 +103,7 @@ if("Medical Doctor") return list(access_medical, access_morgue) if("Botanist") // -- TLE - return list(access_medical, access_chemistry, access_hydroponics) + return list(access_medical, access_chemistry, access_hydroponics, access_tox) // Added tox access because there's chem access -- Skie if("Librarian") // -- TLE return list(access_library) if("Captain") @@ -143,10 +143,10 @@ return list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva, access_heads, access_ai_upload, access_construction) - if("Research Director") + if("Research Director") // added hydroponics access -- Skie return list(access_medical, access_morgue, access_medlab, access_robotics, access_tech_storage, access_maint_tunnels, access_heads, access_tox, - access_tox_storage, access_chemistry, access_teleporter) + access_tox_storage, access_chemistry, access_teleporter, access_hydroponics) else return list() diff --git a/code/game/jobs/jobprocs.dm b/code/game/jobs/jobprocs.dm index 3f7bd7f96e..93d24c8d22 100644 --- a/code/game/jobs/jobprocs.dm +++ b/code/game/jobs/jobprocs.dm @@ -269,8 +269,8 @@ src.equip_if_possible(new /obj/item/device/pda/chaplain(src), slot_belt) src.equip_if_possible(new /obj/item/clothing/under/rank/chaplain(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes) - if(prob(15)) - src.see_invisible = 15 + //if(prob(15)) + // src.see_invisible = 15 -- Doesn't work as see_invisible is reset every world cycle. -- Skie if ("Geneticist") src.equip_if_possible(new /obj/item/device/radio/headset/headset_med (src), slot_ears) // -- TLE diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm index 92d3ef323c..52b9c7d630 100644 --- a/code/game/machinery/hydroponics.dm +++ b/code/game/machinery/hydroponics.dm @@ -6,8 +6,11 @@ anchored = 1 var/waterlevel = 100 // The amount of water in the tray (max 100) var/nutrilevel = 10 // The amount of nutrient in the tray (max 10) + var/pestlevel = 0 // The amount of pests in the tray (max 10) + var/weedlevel = 0 // The amount of weeds in the tray (max 10) var/yieldmod = 1 //Modifier to yield var/mutmod = 1 //Modifier to mutation chance + var/toxic = 0 // Toxicity in the tray? var/age = 0 // Current age var/dead = 0 // Is it dead? var/health = 0 // Its health. @@ -15,45 +18,122 @@ var/lastcycle = 0 //Used for timing of cycles. var/cycledelay = 200 // About 10 seconds / cycle var/planted = 0 // Is it occupied? - var/harvest = 0; //Ready to harvest? + var/harvest = 0 //Ready to harvest? var/obj/item/seeds/myseed = null // The currently planted seed + + obj/machinery/hydroponics/process() if(world.time > (src.lastcycle + src.cycledelay)) src.lastcycle = world.time - if(src.planted & !src.dead) + if(src.planted && !src.dead) + // Advance age src.age++ + + // Drink random amount of water src.waterlevel -= rand(1,6) + + // Nutrients deplete slowly if(src.nutrilevel > 0) - src.nutrilevel -= 1 + if(prob(50)) + src.nutrilevel -= 1 + + // Lack of nutrients hurts non-weeds + if(src.nutrilevel == 0 && src.myseed.plant_type != 1) + src.health -= rand(1,3) + + // Adjust the water level so it can't go negative if(src.waterlevel < 0) src.waterlevel = 0 - if(src.waterlevel <= 0) - src.health -= 3 - else if(src.waterlevel <= 5) + + // If the plant is dry, it loses health pretty fast, unless mushroom + if(src.waterlevel <= 0 && src.myseed.plant_type != 2) + src.health -= rand(1,3) + else if(src.waterlevel <= 10 && src.myseed.plant_type != 2) + src.health -= rand(0,1) + + // Too much toxins cause harm, but when the plant drinks the contaiminated water, the toxins disappear slowly + if(src.toxic >= 40 && src.toxic < 80) src.health -= 1 - if(src.waterlevel > 10 & src.nutrilevel > 0) - src.health += 1 + src.toxic -= rand(1,10) + if(src.toxic >= 80) + src.health -= 3 + src.toxic -= rand(1,10) + + // Sufficient water level and nutrient level = plant healthy + if(src.waterlevel > 10 && src.nutrilevel > 0) + src.health += rand(1,2) + + // Too many pests cause the plant to be sick + if(src.pestlevel >= 5) + src.health -= 1 + + // If it's a weed, it doesn't stunt the growth + if(src.weedlevel >= 5 && src.myseed.plant_type != 1 ) + src.health -= 1 + + // Don't go overboard with the health if(src.health > src.myseed.endurance) src.health = src.myseed.endurance + + // If the plant is too old, lose health fast if(src.age > src.myseed.lifespan) - src.health -= 5 + src.health -= rand(1,5) + + // Plant dies if health = 0 if(src.health <= 0) src.dead = 1 src.harvest = 0 + src.weedlevel += 1 // Weeds flourish + //src.toxic = 0 // Water is still toxic + src.pestlevel = 0 // Pests die + + // Harvest code if(src.age > src.myseed.production && (src.age - src.lastproduce) > src.myseed.production && (!src.harvest && !src.dead)) var/m_count = 0 while(m_count < src.mutmod) - src.mutate() + if(prob(90)) + src.mutate() + else + src.mutatespecie() // Just testing this here until mutagens are in place m_count++; - if(src.yieldmod > 0) + if(src.yieldmod > 0 && src.myseed.yield != -1) // Unharvestable shouldn't be harvested src.harvest = 1 else src.lastproduce = src.age + if(prob(5)) // On each tick, there's a 5 percent chance the pest population will increase + src.pestlevel += 1 + if(prob(5) && src.waterlevel > 10 && src.nutrilevel > 0) // On each tick, there's a 5 percent chance the weed population will increase, but there needs to be water/nuts for that! + src.weedlevel += 1 + else + if(prob(10) && src.waterlevel > 10 && src.nutrilevel > 0) // If there's no plant, the percentage chance is 10% + src.weedlevel += 1 + + // These (v) wouldn't be necessary if additional checks were made earlier (^) + + if (src.weedlevel > 10) // Make sure it won't go overoboard + src.weedlevel = 10 + if (src.toxic < 0) // Make sure it won't go overoboard + src.toxic = 0 + if (src.pestlevel > 10 ) // Make sure it won't go overoboard + src.pestlevel = 10 + + // Weeeeeeeeeeeeeeedddssss + + if (prob(50) && src.weedlevel == 10) // At this point the plant is kind of fucked. Weeds can overtake the plant spot. + if(src.planted) + if(src.myseed.plant_type == 0) // If a normal plant + src.weedinvasion() + else + src.mutateweed() // Just testing this out okay + else + src.weedinvasion() // Weed invasion into empty tray src.updateicon() return + + obj/machinery/hydroponics/proc/updateicon() //Refreshes the icon overlays = null @@ -61,13 +141,16 @@ obj/machinery/hydroponics/proc/updateicon() if(dead) overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-dead") else if(src.harvest) - overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-harvest") + if(src.myseed.plant_type == 2) // Shrooms don't have a -harvest graphic + overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-grow[src.myseed.growthstages]") + else + overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-harvest") else if(src.age < src.myseed.maturation) - var/t_growthstate = ((src.age / src.myseed.maturation) * 6) + var/t_growthstate = ((src.age / src.myseed.maturation) * src.myseed.growthstages ) // Make sure it won't crap out due to HERPDERP 6 stages only overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-grow[round(t_growthstate)]") src.lastproduce = src.age //Cheating by putting this here, it means that it isn't instantly ready to harvest else - overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-grow6") + overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-grow[src.myseed.growthstages]") // Same if(src.waterlevel <= 10) overlays += image('hydroponics.dmi', icon_state="over_lowwater") @@ -75,42 +158,208 @@ obj/machinery/hydroponics/proc/updateicon() overlays += image('hydroponics.dmi', icon_state="over_lownutri") if(src.health <= (src.myseed.endurance / 2)) overlays += image('hydroponics.dmi', icon_state="over_lowhealth") + if(src.weedlevel >= 5) + overlays += image('hydroponics.dmi', icon_state="over_alert") + if(src.pestlevel >= 5) + overlays += image('hydroponics.dmi', icon_state="over_alert") + if(src.toxic >= 40) + overlays += image('hydroponics.dmi', icon_state="over_alert") if(src.harvest) overlays += image('hydroponics.dmi', icon_state="over_harvest") return + + +obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, this happens. + src.dead = 0 + if(src.myseed) // In case there's nothing in the tray beforehand + del(src.myseed) + switch(rand(1,15)) // randomly pick predominative weed + if(14 to 15) + src.myseed = new /obj/item/seeds/nettleseed + if(12 to 13) + src.myseed = new /obj/item/seeds/harebell + if(10 to 11) + src.myseed = new /obj/item/seeds/amanitamycelium + if(6 to 9) + src.myseed = new /obj/item/seeds/chantermycelium + //if(6 to 7) implementation for tower caps still kinda missing + // src.myseed = new /obj/item/seeds/towermycelium + if(4 to 5) + src.myseed = new /obj/item/seeds/plumpmycelium + else + src.myseed = new /obj/item/seeds/weeds + src.planted = 1 + src.age = 0 + src.health = src.myseed.endurance + src.lastcycle = world.time + src.harvest = 0 + src.weedlevel = 0 // Reset + src.pestlevel = 0 // Reset + spawn(5) // Wait a while + src.updateicon() + src.visible_message("\red[src] has been overtaken by \blue [src.myseed.plantname]!") + var/P = new /obj/decal/point(src) + spawn (20) + del(P) + + return + + obj/machinery/hydroponics/proc/mutate() // Mutates the current seed src.myseed.lifespan += rand(-2,2) if(src.myseed.lifespan < 10) src.myseed.lifespan = 10 - if(src.myseed.lifespan > 30) + else if(src.myseed.lifespan > 30) src.myseed.lifespan = 30 src.myseed.endurance += rand(-5,5) if(src.myseed.endurance < 10) src.myseed.endurance = 10 - if(src.myseed.endurance > 100) + else if(src.myseed.endurance > 100) src.myseed.endurance = 100 src.myseed.production += rand(-1,1) if(src.myseed.production < 2) src.myseed.production = 2 - if(src.myseed.production > 10) + else if(src.myseed.production > 10) src.myseed.production = 10 - src.myseed.yield += rand(-2,2) - if(src.myseed.yield < 0) - src.myseed.yield = 0 - if(src.myseed.yield > 10) - src.myseed.yield = 10 + if(src.myseed.yield != -1) // Unharvestable shouldn't suddenly turn harvestable + src.myseed.yield += rand(-2,2) + if(src.myseed.yield < 0) + src.myseed.yield = 0 + else if(src.myseed.yield > 10) + src.myseed.yield = 10 if(src.myseed.potency != -1) //Not all plants have a potency src.myseed.potency += rand(-10,10) if(src.myseed.potency < 0) src.myseed.potency = 0 - if(src.myseed.potency > 100) + else if(src.myseed.potency > 100) src.myseed.potency = 100 + return + + + +obj/machinery/hydroponics/proc/hardmutate() // Strongly mutates the current seed. + + src.myseed.lifespan += rand(-4,4) + if(src.myseed.lifespan < 10) + src.myseed.lifespan = 10 + else if(src.myseed.lifespan > 30) + src.myseed.lifespan = 30 + + src.myseed.endurance += rand(-10,10) + if(src.myseed.endurance < 10) + src.myseed.endurance = 10 + else if(src.myseed.endurance > 100) + src.myseed.endurance = 100 + + src.myseed.production += rand(-2,2) + if(src.myseed.production < 2) + src.myseed.production = 2 + else if(src.myseed.production > 10) + src.myseed.production = 10 + + if(src.myseed.yield != -1) // Unharvestable shouldn't suddenly turn harvestable + src.myseed.yield += rand(-4,4) + if(src.myseed.yield < 0) + src.myseed.yield = 0 + else if(src.myseed.yield > 10) + src.myseed.yield = 10 + + if(src.myseed.potency != -1) //Not all plants have a potency + src.myseed.potency += rand(-20,20) + if(src.myseed.potency < 0) + src.myseed.potency = 0 + else if(src.myseed.potency > 100) + src.myseed.potency = 100 + return + + + +obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant! + + if ( istype(src.myseed, /obj/item/seeds/nettleseed )) + del(src.myseed) + src.myseed = new /obj/item/seeds/deathnettleseed + + else if ( istype(src.myseed, /obj/item/seeds/amanitamycelium )) + del(src.myseed) + src.myseed = new /obj/item/seeds/angelmycelium + + else if ( istype(src.myseed, /obj/item/seeds/chiliseed )) + del(src.myseed) + src.myseed = new /obj/item/seeds/icepepperseed + + else + return + + src.dead = 0 + src.hardmutate() + src.planted = 1 + src.age = 0 + src.health = src.myseed.endurance + src.lastcycle = world.time + src.harvest = 0 + src.weedlevel = 0 // Reset + + spawn(5) // Wait a while + src.updateicon() + src.visible_message("\red[src] has suddenly mutated into \blue [src.myseed.plantname]!") + + return + + + +obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent instead. Mind you, this pretty much destroys the old plant + if ( src.weedlevel > 5 && src.myseed.plant_type == 1 ) + //user << "Weeds have overtaken the spot! The weeds mutate!" + del(src.myseed) + switch(rand(100)) + if(1 to 33) src.myseed = new /obj/item/seeds/libertymycelium + if(34 to 66) src.myseed = new /obj/item/seeds/angelmycelium + else src.myseed = new /obj/item/seeds/deathnettleseed + + src.dead = 0 + src.hardmutate() + src.planted = 1 + src.age = 0 + src.health = src.myseed.endurance + src.lastcycle = world.time + src.harvest = 0 + src.weedlevel = 0 // Reset + + spawn(5) // Wait a while + src.updateicon() + src.visible_message("\red The mutated weeds in [src] spawned a \blue [src.myseed.plantname]!") + + return + + + +obj/machinery/hydroponics/proc/plantdies() // OH NOES!!!!! I put this all in one function to make things easier + src.health = 0 + src.dead = 1 + src.harvest = 0 + src.updateicon() + //user << "The plant whiters and dies." Fix this + return + + + +obj/machinery/hydroponics/proc/mutatepest() // Until someone makes a spaceworm, this is commented out +// if ( src.pestlevel > 5 ) +// user << "The worms seem to behave oddly..." +// spawn(10) +// new /obj/alien/spaceworm(src.loc) +// else + //user << "Nothing happens..." + return + + obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) @@ -124,12 +373,17 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) src.waterlevel += b_amount playsound(src.loc, 'slosh.ogg', 25, 1) user << "You fill the tray with [b_amount] units of water." + // Toxicity dilutation code. The more water you put in, the lesser the toxin concentration. + // src.toxic -= round(b_amount/2) + // if (src.toxic < 0 ) // Make sure it won't go overoboard + // src.toxic = 0 else if(src.waterlevel >= 100) user << "\red The hydroponics tray is already full." else user << "\red The bucket is not filled with water." src.updateicon() - else if ( istype(O, /obj/item/nutrient/) ) + + else if ( istype(O, /obj/item/nutrient) ) var/obj/item/nutrient/myNut = O user.u_equip(O) src.nutrilevel = 10 @@ -138,7 +392,54 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) user << "You replace the nutrient solution in the tray" del(O) src.updateicon() - else if (istype(O, /obj/item/seeds/)) + + else if ( istype(O, /obj/item/weapon/weedspray) ) + var/obj/item/weedkiller/myWKiller = O + user.u_equip(O) + src.toxic += myWKiller.toxicity + src.weedlevel -= myWKiller.WeedKillStr + if (src.weedlevel < 0 ) // Make sure it won't go overoboard + src.weedlevel = 0 + if (src.toxic > 100 ) // Make sure it won't go overoboard + src.toxic = 100 + user << "You apply the weedkiller solution into the tray" + playsound(src.loc, 'spray3.ogg', 50, 1, -6) + del(O) + src.updateicon() + + else if ( istype(O, /obj/item/weapon/pestspray) ) + var/obj/item/pestkiller/myPKiller = O + user.u_equip(O) + src.toxic += myPKiller.toxicity + src.pestlevel -= myPKiller.PestKillStr + if (src.pestlevel < 0 ) // Make sure it won't go overoboard + src.pestlevel = 0 + if (src.toxic > 100 ) // Make sure it won't go overoboard + src.toxic = 100 + user << "You apply the pestkiller solution into the tray" + playsound(src.loc, 'spray3.ogg', 50, 1, -6) + del(O) + src.updateicon() + // else if ( istype(O, /obj/item/weapon/reagent_containers/glass/bucket)) If injected with vitamins... it should make the health regenerate + // if(src.planted) + // src.health += 5 + // src.endurance += 1 + // if( src.health > src.myspeed.endurance ) + // src.health = src.myseed.endurance + // else if ( istype(O, /obj/item/weapon/reagent_containers/glass/bucket)) If injected with mutagen... not sure how to make the syringe injection work + // if (src.planted) + // switch(rand(100)) + // if (100 to 91) src.plantdies() + // if (90 to 81) src.mutatespecie() + // if (80 to 66) src.hardmutate() + // if (65 to 41) src.mutate() + // if (40 to 31) user << "Nothing happens..." + // if (30 to 21) src.mutateweed() + // if (20 to 11) src.mutatepest() + // if (10 to 1) src.plantdies() + // else user << "Nothing happens..." + + else if ( istype(O, /obj/item/seeds/) ) if(!src.planted) user.u_equip(O) user << "You plant the [O.name]" @@ -155,29 +456,44 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) src.updateicon() else user << "\red The tray already has a seed in it!" + else if (istype(O, /obj/item/device/analyzer/plant_analyzer)) if(src.planted && src.myseed) - user << "[src.myseed.name]" + user << "*** [src.myseed.name] ***" user << "-Plant Age: [src.age]" user << "--Plant Endurance: [src.myseed.endurance]" user << "--Plant Lifespan: [src.myseed.lifespan]" - user << "--Plant Yield: [src.myseed.yield]" + if(src.myseed.yield != -1) + user << "--Plant Yield: [src.myseed.yield]" user << "--Plant Production: [src.myseed.production]" if(src.myseed.potency != -1) user << "--Plant Potency: [src.myseed.potency]" + user << "--Weed level: [src.weedlevel]/10" + user << "--Pest level: [src.pestlevel]/10" + user << "--Toxicity level: [src.toxic]/100" + user << "" else user << "No plant found." - else if (istype(O, /obj/item/weapon/weedbgone)) + user << "--Weed level: [src.weedlevel]/10" + user << "--Pest level: [src.pestlevel]/10" + user << "--Toxicity level: [src.toxic]/100" + user << "" + + else if (istype(O, /obj/item/weapon/plantbgone)) if(src.planted && src.myseed) - src.health -= rand(5,50) + src.health -= rand(5,20) + src.pestlevel -= 1 // Kill kill kill + src.weedlevel -= 2 // Kill kill kill + src.toxic += 5 // Oops src.visible_message("\red \The [src] has been sprayed with \the [O][(user ? " by [user]." : ".")]") playsound(src.loc, 'spray3.ogg', 50, 1, -6) else user << "\red Nothing is planted in the hydrotray!" - return + + /obj/machinery/hydroponics/attack_hand(mob/user as mob) if(src.harvest) if(!user in range(1,src)) @@ -186,16 +502,40 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) var/t_amount = 0 while ( t_amount < (src.myseed.yield * src.yieldmod )) - var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new item(user.loc) - t_prod.seed = src.myseed.mypath - t_prod.species = src.myseed.species - t_prod.lifespan = src.myseed.lifespan - t_prod.endurance = src.myseed.endurance - t_prod.maturation = src.myseed.maturation - t_prod.production = src.myseed.production - t_prod.yield = src.myseed.yield - t_prod.potency = src.myseed.potency - t_amount++ + if(src.myseed.species == "nettle" || src.myseed.species == "deathnettle") // User gets a WEPON + var/obj/item/weapon/grown/t_prod = new item(user.loc) + t_prod.seed = src.myseed.mypath + t_prod.species = src.myseed.species + t_prod.lifespan = src.myseed.lifespan + t_prod.endurance = src.myseed.endurance + t_prod.maturation = src.myseed.maturation + t_prod.production = src.myseed.production + t_prod.yield = src.myseed.yield + t_prod.potency = src.myseed.potency + t_prod.force = src.myseed.potency // POTENCY == DAMAGE FUCK YEEAHHH + t_prod.plant_type = src.myseed.plant_type + t_amount++ + //else if(src.myseed.species == "towercap") + //var/obj/item/wood/t_prod = new item(user.loc) - User gets wood (heh) - not implemented yet + else + var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new item(user.loc) // User gets a consumable + t_prod.seed = src.myseed.mypath + t_prod.species = src.myseed.species + t_prod.lifespan = src.myseed.lifespan + t_prod.endurance = src.myseed.endurance + t_prod.maturation = src.myseed.maturation + t_prod.production = src.myseed.production + t_prod.yield = src.myseed.yield + t_prod.potency = src.myseed.potency + t_prod.plant_type = src.myseed.plant_type + if(src.myseed.species == "amanita" || src.myseed.species == "angel") + t_prod.poison_amt = src.myseed.potency * 2 // Potency translates to poison amount + t_prod.drug_amt = src.myseed.potency / 5 // Small trip + else if(src.myseed.species == "liberty") + t_prod.drug_amt = src.myseed.potency // TRIP TIME + else if(src.myseed.species == "chili" || src.myseed.species == "chiliice") + t_prod.heat_amt = src.myseed.potency // BRING ON THE HEAT + t_amount++ src.harvest = 0 src.lastproduce = src.age if((src.yieldmod * src.myseed.yield) <= 0) @@ -214,13 +554,20 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) src.updateicon() else if(src.planted && !src.dead) - usr << text("The hydroponics tray has a [src.myseed.plantname] planted") + usr << text("The hydroponics tray has \blue [src.myseed.plantname] \black planted") if(src.health <= (src.myseed.endurance / 2)) usr << text("The plant looks unhealthy") else usr << text("The hydroponics tray is empty") usr << text("Water: [src.waterlevel]/100") usr << text("Nutrient: [src.nutrilevel]/10") + if(src.weedlevel >= 5) // Visual aid for those blind + usr << text("The tray is filled with weeds!") + if(src.pestlevel >= 5) // Visual aid for those blind + usr << text("The tray is filled with tiny worms!") + usr << text ("") // Empty line for readability. + + /obj/item/device/analyzer/plant_analyzer name = "Plant Analyzer" @@ -229,10 +576,13 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) attack_self(mob/user as mob) return 0 + +// BROKEN!!!!!! + /datum/vinetracker var/list/vines = list() - proc/process() + proc/vineprocess() set background = 1 while(vines.len > 0) for(var/obj/plant/vine/V in vines) @@ -247,6 +597,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) if(istype(O, /obj/plant)) plantfound = 1 break + if(plantfound) continue var/chance = rand(1,100) @@ -291,9 +642,8 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) obj/plant anchored = 1 - var - stage = 1 - health = 10 + var/stage = 1 + var/health = 10 obj/plant/vine name = "space vine" @@ -301,8 +651,7 @@ obj/plant/vine icon_state = "spacevine1" anchored = 1 health = 20 - var - datum/vinetracker/tracker + var/datum/vinetracker/tracker New() ..() @@ -314,7 +663,7 @@ obj/plant/vine var/datum/vinetracker/V = new /datum/vinetracker tracker = V V.vines.Add(src) - spawn () V.process() + spawn () V.vineprocess() attackby(var/obj/item/weapon/W, var/mob/user) if(health <= 0) diff --git a/code/game/machinery/microwave.dm b/code/game/machinery/microwave.dm index e211749a06..1cd96362b5 100644 --- a/code/game/machinery/microwave.dm +++ b/code/game/machinery/microwave.dm @@ -2,7 +2,6 @@ var/egg_amount = 0 var/flour_amount = 0 var/water_amount = 0 - var/cheese_amount = 0 var/monkeymeat_amount = 0 var/xenomeat_amount = 0 var/humanmeat_amount = 0 @@ -66,30 +65,6 @@ xenomeat_amount = 1 creates = "/obj/item/weapon/reagent_containers/food/snacks/xenoburger" -/datum/recipe/meatbread - flour_amount = 3 - monkeymeat_amount = 3 - cheese_amount = 3 - creates = "/obj/item/weapon/reagent_containers/food/snacks/meatbread" - -/datum/recipe/meatbreadhuman - flour_amount = 3 - humanmeat_amount = 3 - cheese_amount = 3 - creates = "/obj/item/weapon/reagent_containers/food/snacks/meatbread" - -/datum/recipe/omelette - egg_amount = 2 - cheese_amount = 2 - creates = "/obj/item/weapon/reagent_containers/food/snacks/omelette" - -/datum/recipe/muffin - egg_amount = 1 - flour_amount = 1 - extra_item = /obj/item/weapon/reagent_containers/food/drinks/milk - creates = "/obj/item/weapon/reagent_containers/food/snacks/muffin" - - /obj/machinery/microwave/New() // *** After making the recipe in defines\obj\food.dmi, add it in here! *** ..() src.available_recipes += new /datum/recipe/donut(src) @@ -103,10 +78,6 @@ src.available_recipes += new /datum/recipe/donkpocket_warm(src) src.available_recipes += new /datum/recipe/pie(src) src.available_recipes += new /datum/recipe/xenoburger(src) - src.available_recipes += new /datum/recipe/meatbread(src) - src.available_recipes += new /datum/recipe/meatbreadhuman(src) - src.available_recipes += new /datum/recipe/omelette (src) - src.available_recipes += new /datum/recipe/muffin (src) /******************* @@ -155,12 +126,6 @@ obj/machinery/microwave/attackby(var/obj/item/O as obj, var/mob/user as mob) V.show_message(text("\blue [user] adds some flour to the microwave.")) src.flour_amount++ del(O) - else if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge)) // If cheese is used, add it - if(src.cheese_amount < 5) - for(var/mob/V in viewers(src, null)) - V.show_message(text("\blue [user] adds some cheese to the microwave.")) - src.cheese_amount++ - del(O) else if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeymeat)) if(src.monkeymeat_amount < 5) for(var/mob/V in viewers(src, null)) @@ -232,7 +197,6 @@ Please clean it before use!
dat = {" Eggs:[src.egg_amount] eggs
Flour:[src.flour_amount] cups of flour
-Cheese:[src.cheese_amount] cheese wedges
Monkey Meat:[src.monkeymeat_amount] slabs of meat
Meat Turnovers:[src.donkpocket_amount] turnovers
Other Meat:[src.humanmeat_amount] slabs of meat
@@ -276,7 +240,6 @@ Please clean it before use!
src.egg_amount = 0 // If so remove all the eggs src.flour_amount = 0 // And the flour src.water_amount = 0 //And the water - src.cheese_amount = 0 //And the cheese src.monkeymeat_amount = 0 src.humanmeat_amount = 0 src.donkpocket_amount = 0 @@ -290,7 +253,6 @@ Please clean it before use!
src.updateUsrDialog() src.egg_amount = 0 //Clear all the values as this crap is what makes the mess inside!! src.flour_amount = 0 - src.cheese_amount = 0 src.water_amount = 0 src.humanmeat_amount = 0 src.monkeymeat_amount = 0 @@ -314,7 +276,6 @@ Please clean it before use!
src.updateUsrDialog() src.egg_amount = 0 //Clear all the values as this crap is gone when it breaks!! src.flour_amount = 0 - src.cheese_amount = 0 src.water_amount = 0 src.humanmeat_amount = 0 src.monkeymeat_amount = 0 @@ -343,7 +304,6 @@ Please clean it before use!
if(operation == 2) // If dispose was pressed, empty the microwave src.egg_amount = 0 src.flour_amount = 0 - src.cheese_amount = 0 src.water_amount = 0 src.humanmeat_amount = 0 src.monkeymeat_amount = 0 diff --git a/code/game/machinery/processor.dm b/code/game/machinery/processor.dm index 800b547def..ac3a9bdae4 100644 --- a/code/game/machinery/processor.dm +++ b/code/game/machinery/processor.dm @@ -3,7 +3,7 @@ obj/machinery/processor/attackby(var/obj/item/O as obj, var/mob/user as mob) user << "Something is already in the processing chamber." return 0 else - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/wheat) || istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/chili) || istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/tomato) || istype(O, /obj/item/weapon/reagent_containers/food/drinks/milk)) + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/wheat) || istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/chili) || istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/tomato)) user.drop_item() O.loc = src else @@ -38,22 +38,6 @@ obj/machinery/processor/attackby(var/obj/item/O as obj, var/mob/user as mob) del(O) new /obj/item/weapon/reagent_containers/food/snacks/ketchup(src.loc) return - if(istype(O, /obj/item/weapon/reagent_containers/food/drinks/milk)) - sleep(40) - playsound(src.loc, 'blender.ogg', 50, 1) - for(var/mob/V in viewers(src, null)) - V.show_message(text("\blue [user] turns on \a [src].")) - del(O) - new /obj/item/weapon/reagent_containers/food/snacks/cheesewheel(src.loc) - return - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans)) - sleep(40) - playsound(src.loc, 'blender.ogg', 50, 1) - for(var/mob/V in viewers(src, null)) - V.show_message(text("\blue [user] turns on \a [src].")) - del(O) - new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src.loc) - return user << "There doesn't appear to be anything in the processing chamber." diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index d7e631e6c4..d820a942e1 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -69,8 +69,15 @@ R.product_name = capitalize(temp.name) R.product_path = path_list[p] R.display_color = pick("red","blue","green") - R.amount = text2num(amt_list[p]) - src.product_records += R +// R.amount = text2num(amt_list[p]) +// src.product_records += R + + if(hidden) + R.amount = text2num(amt_list[p]) + src.hidden_records += R + else + R.amount = text2num(amt_list[p]) + src.product_records += R del(temp) diff --git a/code/game/objects/closets/kitchen.dm b/code/game/objects/closets/kitchen.dm index 9edbf8fa13..7c7cdac6b1 100644 --- a/code/game/objects/closets/kitchen.dm +++ b/code/game/objects/closets/kitchen.dm @@ -13,12 +13,6 @@ /obj/secure_closet/meat/New() ..() sleep(2) - new /obj/item/weapon/tray (src) - new /obj/item/weapon/tray (src) - new /obj/item/weapon/tray (src) - new /obj/item/weapon/tray (src) - new /obj/item/weapon/tray (src) - new /obj/item/weapon/tray (src) new /obj/item/weapon/reagent_containers/food/snacks/flour(src) new /obj/item/weapon/reagent_containers/food/snacks/flour(src) new /obj/item/weapon/reagent_containers/food/snacks/flour(src) @@ -38,7 +32,6 @@ new /obj/item/weapon/reagent_containers/food/snacks/flour(src) new /obj/item/kitchen/egg_box(src) new /obj/item/kitchen/egg_box(src) - new /obj/item/weapon/kitchenknife (src) if(rand(20)) new /obj/item/weapon/reagent_containers/food/snacks/faggot(src) @@ -58,16 +51,4 @@ new /obj/item/weapon/reagent_containers/food/drinks/cola(src) new /obj/item/weapon/reagent_containers/food/drinks/cola(src) new /obj/item/weapon/reagent_containers/food/drinks/cola(src) - new /obj/item/weapon/reagent_containers/food/drinks/cola(src) - new /obj/item/weapon/reagent_containers/food/drinks/cola(src) - new /obj/item/weapon/reagent_containers/food/drinks/cola(src) - new /obj/item/weapon/reagent_containers/food/drinks/milk (src) - new /obj/item/weapon/reagent_containers/food/drinks/milk (src) - new /obj/item/weapon/reagent_containers/food/drinks/milk (src) - new /obj/item/weapon/reagent_containers/food/drinks/milk (src) - new /obj/item/weapon/reagent_containers/food/drinks/milk (src) - new /obj/item/weapon/reagent_containers/food/drinks/milk (src) - new /obj/item/weapon/reagent_containers/food/drinks/milk (src) - new /obj/item/weapon/reagent_containers/food/drinks/milk (src) - new /obj/item/weapon/reagent_containers/food/drinks/milk (src) - new /obj/item/weapon/reagent_containers/food/drinks/milk (src) \ No newline at end of file + new /obj/item/weapon/reagent_containers/food/drinks/cola(src) \ No newline at end of file diff --git a/code/game/objects/devices/aicard.dm b/code/game/objects/devices/aicard.dm index e330da3120..830a8edbb2 100644 --- a/code/game/objects/devices/aicard.dm +++ b/code/game/objects/devices/aicard.dm @@ -55,8 +55,5 @@ user << "Transfer succeeded: [O.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." attack(mob/living/silicon/decoy/M as mob, mob/user as mob) - if (!istype (M, /mob/living/silicon/decoy)) - return ..() - else - M.death() - user << "ERROR ERROR ERROR" \ No newline at end of file + M.death() + user << "ERROR ERROR ERROR" \ No newline at end of file diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm index b5a7ce6fe7..075a217b1e 100644 --- a/code/game/objects/items/weapons/hydroponics.dm +++ b/code/game/objects/items/weapons/hydroponics.dm @@ -1,60 +1,100 @@ /* CONTAINS: -Weed-B-Gone +Plant-B-Gone Nettle Deathnettle */ -/obj/item/weapon/weedbgone/New() + + +// Plant-B-Gone +/obj/item/weapon/plantbgone/New() var/datum/reagents/R = new/datum/reagents(100) // 100 units of solution reagents = R R.my_atom = src - R.add_reagent("weedbgone", 100) + R.add_reagent("plantbgone", 100) -/obj/item/weapon/weedbgone/attack(mob/living/carbon/human/M as mob, mob/user as mob) +/obj/item/weapon/plantbgone/attack(mob/living/carbon/human/M as mob, mob/user as mob) return -/obj/item/weapon/weedbgone/afterattack(atom/A as mob|obj, mob/user as mob) +/obj/item/weapon/plantbgone/afterattack(atom/A as mob|obj, mob/user as mob) if (src.reagents.total_volume < 1) - user << "\blue Add more Weed-B-Gone mixture!" + user << "\blue Add more Plant-B-Gone mixture!" + return + else if (istype(A, /obj/item/weapon/storage/backpack )) return else if (istype(A, /obj/machinery/hydroponics)) // We are targeting hydrotray - /* Gotta figure out how to make this work, chemical sprite doesn't appear. - var/obj/decal/spraystill/D = new /obj/decal/spraystill( src ) // new decal at tray location - D.name = "chemicals" - D.icon = 'chemical.dmi' - D.icon_state = "weedpuff" - spawn(0) // spawn on top of tray - sleep(3) - del(D) - - */ return else var/obj/decal/D = new/obj/decal/(get_turf(src)) // Targeting elsewhere - D.name = "chemicals" - D.icon = 'chemical.dmi' - D.icon_state = "weedpuff" - D.create_reagents(5) - src.reagents.trans_to(D, 5) // 5 units of solution used at a time => 20 uses - playsound(src.loc, 'spray3.ogg', 50, 1, -6) + if (locate (/obj/table, src.loc)) + return + else + D.name = "chemicals" + D.icon = 'chemical.dmi' + D.icon_state = "weedpuff" + D.create_reagents(5) + src.reagents.trans_to(D, 5) // 5 units of solution used at a time => 20 uses + playsound(src.loc, 'spray3.ogg', 50, 1, -6) - spawn(0) - for(var/i=0, i<2, i++) // Max range = 2 tiles - step_towards(D,A) // Moves towards target as normally (not thru walls) - D.reagents.reaction(get_turf(D)) - for(var/atom/T in get_turf(D)) - D.reagents.reaction(T) - sleep(4) - del(D) + spawn(0) + for(var/i=0, i<2, i++) // Max range = 2 tiles + step_towards(D,A) // Moves towards target as normally (not thru walls) + D.reagents.reaction(get_turf(D)) + for(var/atom/T in get_turf(D)) + D.reagents.reaction(T) + sleep(4) + del(D) - return + return -/obj/item/weapon/weedbgone/examine() +/obj/item/weapon/plantbgone/examine() set src in usr - usr << text("\icon[] [] units of Weed-B-Gone left!", src, src.reagents.total_volume) + usr << text("\icon[] [] units of Plant-B-Gone left!", src, src.reagents.total_volume) ..() return + + +// Nettle + +/obj/item/weapon/grown/nettle/pickup(mob/living/carbon/human/user as mob) + if(!user.gloves) + user << "\red The nettle burns your bare hand!" + user.fireloss += force + +/obj/item/weapon/grown/nettle/afterattack(atom/A as mob|obj, mob/user as mob) + if (force > 0) + force -= rand(0,(force/10)+1) // When you whack someone with it, leaves fall off + else + usr << "All the leaves have fallen off the nettle from violent whacking." + del(src) + + +// Deathnettle + +/obj/item/weapon/grown/deathnettle/pickup(mob/living/carbon/human/user as mob) + if(!user.gloves) + user.fireloss += force + if(prob(50)) + user.paralysis += 5 + user << "\red You are stunned by the Deathnettle when you try picking it up!" + +/obj/item/weapon/grown/deathnettle/attack(mob/living/carbon/M as mob, mob/user as mob) + if(istype(M, /mob/living/carbon/human)) + M << "\red You are stunned by the powerful acid of the Deathnettle!" + M.eye_blurry += 4 + M.paralysis += 5 + M.weakened += 2 + M.drop_item() + ..() + +/obj/item/weapon/grown/deathnettle/afterattack(atom/A as mob|obj, mob/user as mob) + if (force > 0) + force -= rand(0,(force/10)+1) // When you whack someone with it, leaves fall off + + else + usr << "All the leaves have fallen off the deathnettle from violent whacking." + del(src) diff --git a/code/game/objects/items/weapons/mops_cleaners.dm b/code/game/objects/items/weapons/mops_cleaners.dm index 65f6cdaec5..728df4d7fc 100644 --- a/code/game/objects/items/weapons/mops_cleaners.dm +++ b/code/game/objects/items/weapons/mops_cleaners.dm @@ -14,9 +14,7 @@ MOP return /obj/item/weapon/cleaner/afterattack(atom/A as mob|obj, mob/user as mob) - if (istype(A, /obj/item/weapon/storage/backpack )) - return - else if (src.reagents.total_volume < 1) + if (src.reagents.total_volume < 1) user << "\blue Add more cleaner!" return diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm index d4ae9248e5..68d9e68a70 100644 --- a/code/game/objects/radio/radio.dm +++ b/code/game/objects/radio/radio.dm @@ -193,8 +193,8 @@ Frequency: var/part_c = "" if(findtext(part_b, "135.3") || findtext(part_b, "135.5") || findtext(part_b, "135.7") || findtext(part_b, "135.9")) - part_a = "" - + part_b = "" + part_b + part_c = part_c + "" if (length(heard_masked)) diff --git a/code/game/objects/storage/crates.dm b/code/game/objects/storage/crates.dm index 2453596bb5..c9ae8fb851 100644 --- a/code/game/objects/storage/crates.dm +++ b/code/game/objects/storage/crates.dm @@ -110,7 +110,7 @@ locked = 1 /obj/crate/hydroponics - name = "Gardening crate" + name = "Hydroponics crate" desc = "All you need to destroy those pesky weeds and pests." icon = 'storage.dmi' icon_state = "hydrocrate" @@ -119,11 +119,12 @@ density = 1 New() ..() - new /obj/item/weapon/weedbgone(src) - new /obj/item/weapon/weedbgone(src) - new /obj/item/weapon/weedbgone(src) - new /obj/item/weapon/weedbgone(src) - // Four bottles should be enough for everybody. + new /obj/item/weapon/plantbgone(src) + new /obj/item/weapon/plantbgone(src) + new /obj/item/weapon/weedspray(src) + new /obj/item/weapon/weedspray(src) + new /obj/item/weapon/pestspray(src) + new /obj/item/weapon/pestspray(src) /obj/crate/New() ..() diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index d184746ee2..c3ccde664b 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -287,6 +287,23 @@ var/supply_shuttle_points = 50 containername = "Robotics Assembly" access = access_robotics +/datum/supply_packs/hydroponics // -- Skie + name = "Hydroponics Supply Crate" + contains = list("/obj/item/weapon/plantbgone", + "/obj/item/weapon/plantbgone", + "/obj/item/weapon/plantbgone", + "/obj/item/weapon/weedspray", + "/obj/item/weapon/weedspray", + "/obj/item/weapon/weedspray", + "/obj/item/weapon/pestspray", + "/obj/item/weapon/pestspray", + "/obj/item/weapon/pestspray", + "/obj/item/clothing/gloves/latex", + "/obj/item/clothing/gloves/latex") // For handling nettles etc + cost = 10 + containertype = /obj/crate/hydroponics + containername = "Hydroponics crate" + access = access_hydroponics //SUPPLY PACKS diff --git a/code/modules/mob/living/carbon/alien/humanoid/life_new.dm b/code/modules/mob/living/carbon/alien/humanoid/life_new.dm index 92d9bec2c8..a21644334c 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life_new.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life_new.dm @@ -341,7 +341,7 @@ if(reagents) reagents.metabolize(src) - if(src.nutrition > 600 && !(src.mutations & 32)) + if(src.nutrition > 400 && !(src.mutations & 32)) if(prob(5 + round((src.nutrition - 200) / 2))) src << "\red You suddenly feel blubbery!" src.mutations |= 32 diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 0038b3b914..250560ad91 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -680,15 +680,18 @@ src.sight |= SEE_MOBS src.sight |= SEE_OBJS src.see_in_dark = 8 - src.see_invisible = 2 + if(!src.druggy) + src.see_invisible = 2 else if (istype(src.glasses, /obj/item/clothing/glasses/meson)) src.sight |= SEE_TURFS src.see_in_dark = 3 - src.see_invisible = 0 + if(!src.druggy) + src.see_invisible = 0 else if (istype(src.glasses, /obj/item/clothing/glasses/thermal)) src.sight |= SEE_MOBS src.see_in_dark = 4 - src.see_invisible = 2 + if(!src.druggy) + src.see_invisible = 2 else if (src.stat != 2) src.sight &= ~SEE_TURFS src.sight &= ~SEE_MOBS @@ -696,6 +699,9 @@ if (src.mutantrace == "lizard") src.see_in_dark = 3 src.see_invisible = 1 + else if (src.druggy) // If drugged~ + src.see_in_dark = 2 + //see_invisible regulated by drugs themselves. else src.see_in_dark = 2 src.see_invisible = 0 diff --git a/config/admins.txt b/config/admins.txt index 06051502e4..44e89a197e 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -1,4 +1,3 @@ tle - Host mport2004 - Coder -agouri - Coder \ No newline at end of file diff --git a/goonstation.dme b/goonstation.dme index 766a97bdc8..1d023bd4a3 100644 --- a/goonstation.dme +++ b/goonstation.dme @@ -205,12 +205,11 @@ #include "code\defines\obj\computer.dm" #include "code\defines\obj\decal.dm" #include "code\defines\obj\door.dm" -#include "code\defines\obj\food.dm" +#include "code\defines\obj\hydro.dm" #include "code\defines\obj\injector.dm" #include "code\defines\obj\machinery.dm" #include "code\defines\obj\nutrient.dm" #include "code\defines\obj\radio.dm" -#include "code\defines\obj\seeds.dm" #include "code\defines\obj\spawner.dm" #include "code\defines\obj\storage.dm" #include "code\defines\obj\weapon.dm" diff --git a/icons/changelog.html b/icons/changelog.html index b018111fdb..2ab7d44b34 100644 --- a/icons/changelog.html +++ b/icons/changelog.html @@ -41,16 +41,6 @@

Visit our IRC channel, #tgstation13 on irc.rizon.net

Changelog

-

Monday, September 6, 11.04

-
    -
  • Added kitchen stuff: Meatbread, Cheese wheel, Omelette Du fromage, Muffins. Kitchen knife now spawns in the chef's storage and can be used to slice the meatbread loaf or cheese wheel into wedges. Cheese wedges can be used in the microwave to make stuff. Cheese wheels made by using Milk (now spawns 8 bottles in the chef's fridge) on the food processor. Everything's got their respective icons.
  • -
  • Recipes: Meatbread: 3 cheese 3 meat 3 flour Omelette: 2 eggs 2 cheese Muffin: 1 egg 1 flour
  • -
  • Cholesterol is out, for now. Shit doesn't work.
  • -
  • Raised the YOU-ARE-FAT limit to src.nutrition > 600 instead of 400. Meatbread tends to make people fat, fast.
  • -
  • Included a fix for the cleaner spraying when added to the backpack.
  • -
  • Fixed blood and positioning decals for the Kitchen Knife.
  • -
  • Forkloads of food half-in, not yet working. Forks dont spawn but if someone gets his hands on one, he can hit the omelette with it and the fork will change its icon to a "loaded with omelette" fork. TO DO: Actually get the loaded fork to feed the user once he hits himself with it. -

Thursday, September 2, 22:45