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
This commit is contained in:
Skiedrake
2010-09-07 19:33:23 +00:00
parent b782759b3d
commit 78fc52ef11
43 changed files with 4721 additions and 3965 deletions

View File

@@ -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 <B>[M.name] 's face turns blue as he suffers a major cardiac arrest! He's not walking out of this one for sure...</B>", 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"

View File

@@ -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

View File

@@ -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 << "<B>\red You feel like your liver is being disintegrated by an infernal poison.</B>"
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(" <B>[usr] slices the meatbread! </B>", 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(" <B>[usr] slices the cheese! </B>", 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
/////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -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"

View File

@@ -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

573
code/defines/obj/hydro.dm Normal file
View File

@@ -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 = "<I>Amanita Muscaria</I>: 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 = "<I>Amanita Virosa</I>: 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 = "<I>Psilocybe Semilanceata</I>: 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 = "<I>Plumus Hellmus</I>: 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 = "<I>Cantharellus Cibarius</I>: 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

View File

@@ -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

View File

@@ -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

File diff suppressed because one or more lines are too long

View File

@@ -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 <B>[] has been hit by [] with []</B>", src, user, W)

View File

@@ -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()

View File

@@ -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

View File

@@ -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 << "<B>[src.myseed.name]</B>"
user << "*** <B>[src.myseed.name]</B> ***"
user << "-<B>Plant Age:</B> [src.age]"
user << "--<B>Plant Endurance:</B> [src.myseed.endurance]"
user << "--<B>Plant Lifespan:</B> [src.myseed.lifespan]"
user << "--<B>Plant Yield:</B> [src.myseed.yield]"
if(src.myseed.yield != -1)
user << "--<B>Plant Yield:</B> [src.myseed.yield]"
user << "--<B>Plant Production:</B> [src.myseed.production]"
if(src.myseed.potency != -1)
user << "--<B>Plant Potency:</B> [src.myseed.potency]"
user << "--<B>Weed level:</B> [src.weedlevel]/10"
user << "--<B>Pest level:</B> [src.pestlevel]/10"
user << "--<B>Toxicity level:</B> [src.toxic]/100"
user << ""
else
user << "<B>No plant found.</B>"
else if (istype(O, /obj/item/weapon/weedbgone))
user << "--<B>Weed level:</B> [src.weedlevel]/10"
user << "--<B>Pest level:</B> [src.pestlevel]/10"
user << "--<B>Toxicity level:</B> [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 <B>\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)

View File

@@ -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!</TT><BR>
dat = {"
<B>Eggs:</B>[src.egg_amount] eggs<BR>
<B>Flour:</B>[src.flour_amount] cups of flour<BR>
<B>Cheese:</B>[src.cheese_amount] cheese wedges<BR>
<B>Monkey Meat:</B>[src.monkeymeat_amount] slabs of meat<BR>
<B>Meat Turnovers:</B>[src.donkpocket_amount] turnovers<BR>
<B>Other Meat:</B>[src.humanmeat_amount] slabs of meat<BR>
@@ -276,7 +240,6 @@ Please clean it before use!</TT><BR>
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!</TT><BR>
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!</TT><BR>
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!</TT><BR>
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

View File

@@ -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."

View File

@@ -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)

View File

@@ -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)
new /obj/item/weapon/reagent_containers/food/drinks/cola(src)

View File

@@ -55,8 +55,5 @@
user << "<b>Transfer succeeded</b>: [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 << "<b>ERROR ERROR ERROR</b>"
M.death()
user << "<b>ERROR ERROR ERROR</b>"

View File

@@ -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)

View File

@@ -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

View File

@@ -193,8 +193,8 @@ Frequency:
var/part_c = "</span></span>"
if(findtext(part_b, "135.3") || findtext(part_b, "135.5") || findtext(part_b, "135.7") || findtext(part_b, "135.9"))
part_a = "<span class='deptradio'><span class='name'>"
part_b = "<font color=#800080>" + part_b
part_c = part_c + "</font>"
if (length(heard_masked))

View File

@@ -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()
..()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -1,4 +1,3 @@
tle - Host
mport2004 - Coder
agouri - Coder

View File

@@ -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"

View File

@@ -41,16 +41,6 @@
<p><strong>Visit our IRC channel, #tgstation13 on irc.rizon.net</strong></p>
<h2>Changelog</h2>
<h3>Monday, September 6, 11.04</h3>
<ul>
<li>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.</li>
<li>Recipes: Meatbread: 3 cheese 3 meat 3 flour Omelette: 2 eggs 2 cheese Muffin: 1 egg 1 flour</li>
<li>Cholesterol is out, for now. Shit doesn't work.</li>
<li>Raised the YOU-ARE-FAT limit to src.nutrition > 600 instead of 400. Meatbread tends to make people fat, fast.</li>
<li>Included a fix for the cleaner spraying when added to the backpack.</li>
<li>Fixed blood and positioning decals for the Kitchen Knife.</li>
<li>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.
</ul>
<h3>Thursday, September 2, 22:45</h3>
<ul>
<li>Ghosts can no longer release the singularity.</li>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 32 KiB

File diff suppressed because it is too large Load Diff