diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 608c70ac839..8314586397b 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -360,7 +360,17 @@
G.next_shock = world.time + time
// Simple helper to face what you clicked on, in case it should be needed in more than one place
/mob/proc/face_atom(var/atom/A)
- if( stat || (buckled && !buckled.movable) || !A || !x || !y || !A.x || !A.y ) return
+
+ // Snowflake for space vines.
+ var/is_buckled = 0
+ if(buckled)
+ if(istype(buckled))
+ if(!buckled.movable)
+ is_buckled = 1
+ else
+ is_buckled = 0
+
+ if( stat || is_buckled || !A || !x || !y || !A.x || !A.y ) return
var/dx = A.x - x
var/dy = A.y - y
if(!dx && !dy) return
diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm
index 16f89e4d25c..a0a83486dd4 100644
--- a/code/game/machinery/hydroponics.dm
+++ b/code/game/machinery/hydroponics.dm
@@ -159,7 +159,7 @@
return
// Advance plant age.
- age += 1 * HYDRO_SPEED_MULTIPLIER
+ if(prob(25)) age += 1 * HYDRO_SPEED_MULTIPLIER
// Maintain tray nutrient and water levels.
if(seed.nutrient_consumption > 0 && nutrilevel > 0 && prob(25))
@@ -380,12 +380,14 @@
/obj/machinery/portable_atmospherics/hydroponics/proc/mutate(var/severity)
+ world << "Tray mutation proc called with [severity]."
+
// No seed, no mutations.
if(!seed)
return
// Check if we should even bother working on the current seed datum.
- if(seed.mutants.len && severity > 1 && prob(10+mutation_mod))
+ if(seed.mutants. && seed.mutants.len && severity > 1 && prob(10+mutation_mod))
mutate_species()
return
@@ -573,7 +575,7 @@
reagent_value = mutagenic_reagents[R.id]+mutation_mod
if(reagent_total >= reagent_value)
if(prob(min(reagent_total*reagent_value,100)))
- mutate(reagent_value > 10 ? 2 : 1)
+ mutate(reagent_total > 10 ? 2 : 1)
S.reagents.clear_reagents()
@@ -622,7 +624,7 @@
update_icon()
else
- user << "\red The [src] already has seeds in it!"
+ user << "\red \The [src] already has seeds in it!"
else if (istype(O, /obj/item/weapon/reagent_containers/spray/plantbgone))
if(seed)
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 5c7b61858b0..e0a0fef7569 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -15,9 +15,10 @@
layer = 2.9
anchored = 1
density = 1
- 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/active = 1 //No sales pitches if off!
+ var/delay_product_spawn // If set, uses sleep() in product spawn proc (mostly for seeds to retrieve correct names).
+ var/vend_ready = 1 //Are we ready to vend?? Is it time??
+ var/vend_delay = 10 //How long does it take to vend?
var/datum/data/vending_product/currently_vending = null // A /datum/data/vending_product instance of what we're paying for right now.
// To be filled out at compile time
@@ -106,19 +107,25 @@
var/atom/temp = new typepath(null)
var/datum/data/vending_product/R = new /datum/data/vending_product()
+
R.product_path = typepath
R.amount = amount
R.max_amount = amount
R.price = price
R.display_color = pick("red","blue","green")
- sleep(3)
- R.product_name = temp.name
if(hidden)
hidden_records += R
else if(req_coin)
coin_records += R
else
product_records += R
+
+ if(delay_product_spawn)
+ sleep(3)
+ R.product_name = temp.name
+ else
+ R.product_name = temp.name
+
// world << "Added: [R.product_name]] - [R.amount] - [R.product_path]"
@@ -770,6 +777,8 @@
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_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!"
icon_state = "seeds"
+ delay_product_spawn = 1
+
products = list(/obj/item/seeds/bananaseed = 3,/obj/item/seeds/berryseed = 3,/obj/item/seeds/carrotseed = 3,/obj/item/seeds/chantermycelium = 3,/obj/item/seeds/chiliseed = 3,
/obj/item/seeds/cornseed = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/replicapod = 3,/obj/item/seeds/soyaseed = 3,
/obj/item/seeds/sunflowerseed = 3,/obj/item/seeds/tomatoseed = 3,/obj/item/seeds/towermycelium = 3,/obj/item/seeds/wheatseed = 3,/obj/item/seeds/appleseed = 3,
diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm
index 0c87e6dcdd2..9f7947ccb2e 100644
--- a/code/modules/hydroponics/seed_datums.dm
+++ b/code/modules/hydroponics/seed_datums.dm
@@ -58,9 +58,9 @@ proc/populate_seed_list()
//Tolerances.
var/requires_nutrients = 1 // The plant can starve.
- var/nutrient_consumption = 0.1 // Plant eats this much per tick.
- var/requires_water = 1 // The plant can become dehydrated.
- var/water_consumption = 1 // Plant drinks this much per tick.
+ var/nutrient_consumption = 0.25 // Plant eats this much per tick.
+ var/requires_water = 3 // The plant can become dehydrated.
+ var/water_consumption = 1 // Plant drinks this much per tick.
var/ideal_heat = 293 // Preferred temperature in Kelvin.
var/heat_tolerance = 20 // Departure from ideal that is survivable.
var/ideal_light = 8 // Preferred light level in luminosity.
@@ -104,9 +104,12 @@ proc/populate_seed_list()
//Mutates the plant overall (randomly).
/datum/seed/proc/mutate(var/degree,var/turf/source_turf)
+
+ world << "Seed mutation proc called with [degree]."
+
if(!degree || immutable) return
- source_turf.visible_message("[display_name] quivers uneasily!")
+ source_turf.visible_message("\blue \The [display_name] quivers!")
//This looks like shit, but it's a lot easier to read/change this way.
var/total_mutations = rand(1,1+degree)
@@ -115,7 +118,7 @@ proc/populate_seed_list()
if(0) //Plant cancer!
lifespan = max(0,lifespan-rand(1,5))
endurance = max(0,endurance-rand(10,20))
- source_turf.visible_message("[display_name] withers rapidly!")
+ source_turf.visible_message("\red \The [display_name] withers rapidly!")
if(1)
nutrient_consumption = max(0, min(5, nutrient_consumption + rand(-(degree*0.1),(degree*0.1))))
water_consumption = max(0, min(50, water_consumption + rand(-degree,degree)))
@@ -134,7 +137,7 @@ proc/populate_seed_list()
if(prob(degree*5))
carnivorous = max(0, min(2, carnivorous + rand(-degree,degree)))
if(carnivorous)
- source_turf.visible_message("[display_name] shudders hungrily.")
+ source_turf.visible_message("\blue \The [display_name] shudders hungrily.")
if(6)
weed_tolerance = max(0, min(10, weed_tolerance + (rand(-2,2) * degree)))
if(prob(degree*5)) parasite = !parasite
@@ -148,7 +151,7 @@ proc/populate_seed_list()
potency = max(0, min(200, potency + (rand(-20,20) * degree)))
if(prob(degree*5))
spread = max(0, min(2, spread + rand(-1,1)))
- source_turf.visible_message("[display_name] spasms visibly, shifting in the tray.")
+ source_turf.visible_message("\blue \The [display_name] spasms visibly, shifting in the tray.")
if(9)
maturation = max(0, min(30, maturation + (rand(-1,1) * degree)))
if(prob(degree*5))
@@ -157,22 +160,22 @@ proc/populate_seed_list()
if(prob(degree*2))
biolum = !biolum
if(biolum)
- source_turf.visible_message("[display_name] begins to glow!")
+ source_turf.visible_message("\blue \The [display_name] begins to glow!")
if(prob(degree*2))
biolum_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]"
- source_turf.visible_message("[display_name]'s glow changes colour!")
+ source_turf.visible_message("\blue \The [display_name]'s glow changes colour!")
else
- source_turf.visible_message("[display_name]'s glow dims...")
+ source_turf.visible_message("\blue \The [display_name]'s glow dims...")
if(11)
if(prob(degree*2))
flowers = !flowers
if(flowers)
- source_turf.visible_message("[display_name] sprouts a bevy of flowers!")
+ source_turf.visible_message("\blue \The [display_name] sprouts a bevy of flowers!")
if(prob(degree*2))
flower_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]"
- source_turf.visible_message("[display_name]'s flowers changes colour!")
+ source_turf.visible_message("\blue \The [display_name]'s flowers changes colour!")
else
- source_turf.visible_message("[display_name]'s flowers wither and fall off.")
+ source_turf.visible_message("\blue \The [display_name]'s flowers wither and fall off.")
return
//Mutates a specific trait/set of traits.
@@ -368,7 +371,7 @@ proc/populate_seed_list()
yield_mod = 0
total_yield = yield
else
- total_yield = max(1,rand(1,((yield_mod+yield))))
+ total_yield = max(1,rand(yield_mod,yield_mod+yield))
currently_querying = list()
for(var/i = 0;i \The [user] fires \the [src] into \the [tray]!")
+ Fire(target,user)
return
+ ..()
+
/obj/item/weapon/gun/energy/meteorgun
name = "meteor gun"
desc = "For the love of god, make sure you're aiming this the right way!"
@@ -176,6 +186,14 @@ obj/item/weapon/gun/energy/staff/focus
/obj/item/weapon/gun/energy/sniperrifle/dropped(mob/user)
user.client.view = world.view
+
+
+/*
+This is called from
+modules/mob/mob_movement.dm if you move you will be zoomed out
+modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
+*/
+
/obj/item/weapon/gun/energy/sniperrifle/verb/zoom()
set category = "Object"
set name = "Use Sniper Scope"
diff --git a/icons/obj/hydroponics.dmi b/icons/obj/hydroponics.dmi
index 80152b44a49..7d5b581d60d 100644
Binary files a/icons/obj/hydroponics.dmi and b/icons/obj/hydroponics.dmi differ