diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 58431d24fd5..21f89fb2e7b 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -369,14 +369,6 @@
attack_verb = list("chopped", "sliced", "cut", "reaped")
hitsound = 'sound/weapons/bladeslice.ogg'
-/obj/item/weapon/scythe/afterattack(atom/A, mob/user as mob, proximity)
- if(!proximity) return
- if(istype(A, /obj/effect/spacevine))
- for(var/obj/effect/spacevine/B in orange(A,1))
- if(prob(80))
- qdel(B)
- qdel(A)
-
/*
/obj/item/weapon/cigarpacket
name = "Pete's Cuban Cigars"
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index a0e24f81570..f6f50df6959 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -17,6 +17,173 @@
spawn(0) new/obj/effect/spacevine_controller(T) //spawn a controller at turf
+/datum/spacevine_mutation
+ var/name = ""
+ var/severity = 1
+ var/hue
+
+/datum/spacevine_mutation/proc/process_mutation(obj/effect/spacevine/holder)
+ return
+
+/datum/spacevine_mutation/proc/process_temperature(obj/effect/spacevine/holder, temp, volume)
+ return
+
+/datum/spacevine_mutation/proc/on_birth(obj/effect/spacevine/holder)
+ return
+
+/datum/spacevine_mutation/proc/on_grow(obj/effect/spacevine/holder)
+ return
+
+/datum/spacevine_mutation/proc/on_death(obj/effect/spacevine/holder)
+ return
+
+/datum/spacevine_mutation/proc/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I)
+ return
+
+/datum/spacevine_mutation/proc/on_cross(obj/effect/spacevine/holder, mob/crosser)
+ return
+
+/datum/spacevine_mutation/proc/on_chem(obj/effect/spacevine/holder, datum/reagent/R)
+ return
+
+/datum/spacevine_mutation/proc/on_eat(obj/effect/spacevine/holder, mob/living/eater)
+ return
+
+/datum/spacevine_mutation/proc/on_spread(obj/effect/spacevine/holder, turf/target)
+ return
+
+/datum/spacevine_mutation/proc/on_buckle(obj/effect/spacevine/holder, mob/living/buckled)
+ return
+
+/datum/spacevine_mutation/toxity
+ name = "toxity"
+ hue = "ff00ff"
+
+/datum/spacevine_mutation/toxity/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
+ if(issilicon(crosser))
+ return
+ if(prob(severity))
+ if(crosser.client)
+ crosser << "You accidently touch the vine and feel a strange sensation."
+ crosser.adjustToxLoss(5)
+
+/datum/spacevine_mutation/toxity/on_eat(obj/effect/spacevine/holder, mob/living/eater)
+ eater.adjustToxLoss(5)
+
+/datum/spacevine_mutation/expsolive //OH SHIT IT CAN CHAINREACT RUN!!!
+ name = "explosive"
+ hue = "ffff00"
+
+/datum/spacevine_mutation/expsolive/on_death(obj/effect/spacevine/holder, mob/hitter, obj/item/I)
+ spawn(1)
+ explosion(holder.loc, 0, 0, 2, 0)
+
+/datum/spacevine_mutation/fire_proof
+ name = "fire resist"
+ hue = "ffff88"
+
+/datum/spacevine_mutation/fire_proof/process_temperature(obj/effect/spacevine/holder, temp, volume)
+ return 1
+
+/datum/spacevine_mutation/vine_eating
+ name = "vine eating"
+ hue = "ff7777"
+
+/datum/spacevine_mutation/vine_eating/on_spread(obj/effect/spacevine/holder, turf/target)
+ var/obj/effect/spacevine/prey = locate() in target
+ if(prey && !prey.mutations.Find(src)) //Eat all vines that are not of the same origin
+ prey.Destroy()
+
+/datum/spacevine_mutation/aggressive_spread //very OP, but im out of other ideas currently
+ name = "aggressive spreading"
+ hue = "777777"
+
+/datum/spacevine_mutation/aggressive_spread/on_spread(obj/effect/spacevine/holder, turf/target)
+ for(var/atom/A in target)
+ if(!istype(A, /obj/effect))
+ A.ex_act(severity) //To not be the same as self-eating vine
+
+/datum/spacevine_mutation/agressive_spread/on_buckle(obj/effect/spacevine/holder, mob/living/buckled)
+ buckled.ex_act(severity)
+
+/datum/spacevine_mutation/transparency
+ name = "transparency"
+ hue = ""
+
+/datum/spacevine_mutation/transparency/on_grow(obj/effect/spacevine/holder)
+ holder.SetOpacity(0)
+ holder.alpha = 125
+
+/datum/spacevine_mutation/oxy_eater
+ name = "oxygen consumption"
+ hue = "#ffff88"
+
+/datum/spacevine_mutation/oxy_eater/process_mutation(obj/effect/spacevine/holder)
+ var/turf/simulated/floor/T = holder.loc
+ var/datum/gas_mixture/GM = T.air
+ GM.oxygen = max(0, GM.oxygen - severity * 0.5 * holder.energy)
+
+/datum/spacevine_mutation/nitro_eater
+ name = "nitrogen consumption"
+ hue = "#8888ff"
+
+/datum/spacevine_mutation/nitro_eater/process_mutation(obj/effect/spacevine/holder)
+ var/turf/simulated/floor/T = holder.loc
+ var/datum/gas_mixture/GM = T.air
+ GM.nitrogen = max(0, GM.nitrogen - severity * 0.5 * holder.energy)
+
+/datum/spacevine_mutation/carbondioxide_eater
+ name = "CO2 consumption"
+ hue = "#00ffff"
+
+/datum/spacevine_mutation/carbondioxide_eater/process_mutation(obj/effect/spacevine/holder)
+ var/turf/simulated/floor/T = holder.loc
+ var/datum/gas_mixture/GM = T.air
+ GM.carbon_dioxide = max(0, GM.carbon_dioxide - severity * 0.5 * holder.energy)
+
+/datum/spacevine_mutation/plasma_eater
+ name = "toxins consumption"
+ hue = "#ffbbff"
+
+/datum/spacevine_mutation/plasma_eater/process_mutation(obj/effect/spacevine/holder)
+ var/turf/simulated/floor/T = holder.loc
+ var/datum/gas_mixture/GM = T.air
+ GM.toxins = max(0, GM.toxins - severity * 0.5 * holder.energy)
+
+/datum/spacevine_mutation/thorns
+ name = "thorns"
+ hue = "#666666"
+
+/datum/spacevine_mutation/thorns/on_cross(obj/effect/spacevine/holder, crosser)
+ if(isliving(crosser) && prob(severity))
+ var/mob/living/M = crosser
+ M.adjustBruteLoss(5)
+ M << "You cut yourself on the thorny vines."
+
+/datum/spacevine_mutation/thorns/on_hit(obj/effect/spacevine/holder, hitter)
+ if(ismob(hitter) && prob(severity))
+ var/mob/living/M = hitter
+ M.adjustBruteLoss(5)
+ M << "You cut yourself on the thorny vines."
+
+/datum/spacevine_mutation/woodening
+ name = "hardening"
+ hue = "#997700"
+
+/datum/spacevine_mutation/woodening/on_grow(obj/effect/spacevine/holder)
+ if(holder.energy)
+ holder.density = 1
+
+/datum/spacevine_mutation/woodening/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I)
+ if(hitter)
+ var/chance
+ if(I)
+ chance = I.force * 2
+ else
+ chance = 8
+ if(prob(chance))
+ holder.Destroy()
+ return 1
// SPACE VINES (Note that this code is very similar to Biomass code)
@@ -32,19 +199,50 @@
var/energy = 0
var/obj/effect/spacevine_controller/master = null
var/mob/living/buckled_mob
+ var/list/mutations = list()
New()
return
Destroy()
+ for(var/datum/spacevine_mutation/SM in mutations)
+ SM.on_death(src)
if(master)
master.vines -= src
master.growth_queue -= src
+ if(!master.vines.len)
+ var/obj/item/seeds/kudzuseed/KZ = new(loc)
+ KZ.mutations |= mutations
..()
+/obj/effect/spacevine/proc/on_chem_effect(datum/reagent/R)
+ var/override = 0
+ for(var/datum/spacevine_mutation/SM in mutations)
+ override += SM.on_chem(src, R)
+ if(!override && istype(R, /datum/reagent/toxin/plantbgone))
+ if(prob(50))
+ Destroy()
+
+/obj/effect/spacevine/proc/eat(mob/eater)
+ var/override = 0
+ for(var/datum/spacevine_mutation/SM in mutations)
+ override += SM.on_eat(src, eater)
+ if(!override)
+ if(prob(10))
+ eater.say("Nom")
/obj/effect/spacevine/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (!W || !user || !W.type) return
+
+ var/override = 0
+
+ for(var/datum/spacevine_mutation/SM in mutations)
+ override += SM.on_hit(src, user)
+
+ if(override)
+ ..()
+ return
+
switch(W.type)
if(/obj/item/weapon/circular_saw) qdel(src)
if(/obj/item/weapon/kitchen/utensil/knife) qdel(src)
@@ -52,6 +250,11 @@
if(/obj/item/weapon/twohanded/fireaxe) qdel(src)
if(/obj/item/weapon/hatchet) qdel(src)
if(/obj/item/weapon/melee/energy) qdel(src)
+ if(/obj/item/weapon/scythe)
+ for(var/obj/effect/spacevine/B in orange(src,1))
+ if(prob(80))
+ qdel(B)
+ qdel(src)
//less effective weapons
if(/obj/item/weapon/wirecutters)
@@ -70,12 +273,20 @@
//Plant-b-gone damage is handled in its entry in chemistry-reagents.dm
..()
+/obj/effect/spacevine/Crossed(mob/crosser)
+ if(isliving(crosser))
+ for(var/datum/spacevine_mutation/SM in mutations)
+ SM.on_cross(src, crosser)
/obj/effect/spacevine/attack_hand(mob/user as mob)
+ for(var/datum/spacevine_mutation/SM in mutations)
+ SM.on_hit(src, user)
manual_unbuckle(user)
/obj/effect/spacevine/attack_paw(mob/user as mob)
+ for(var/datum/spacevine_mutation/SM in mutations)
+ SM.on_hit(src, user)
manual_unbuckle(user)
/obj/effect/spacevine/proc/unbuckle()
@@ -115,25 +326,42 @@
var/list/growth_queue = list()
var/reached_collapse_size
var/reached_slowdown_size
+ var/list/mutations_list = list()
+ var/mutativness = 1
//What this does is that instead of having the grow minimum of 1, required to start growing, the minimum will be 0,
//meaning if you get the spacevines' size to something less than 20 plots, it won't grow anymore.
- New()
+ New(loc, list/muts, mttv)
if(!istype(src.loc,/turf/simulated/floor))
qdel(src)
- spawn_spacevine_piece(src.loc)
+ spawn_spacevine_piece(src.loc, , muts)
processing_objects.Add(src)
+ init_subtypes(/datum/spacevine_mutation/, mutations_list)
+ if(mttv != null)
+ mutativness = mttv
Destroy()
processing_objects.Remove(src)
..()
- proc/spawn_spacevine_piece(var/turf/location)
+ proc/spawn_spacevine_piece(var/turf/location, obj/effect/spacevine/parent, list/muts)
var/obj/effect/spacevine/SV = new(location)
growth_queue += SV
vines += SV
SV.master = src
+ if(muts && muts.len)
+ SV.mutations |= muts
+ if(parent)
+ SV.mutations |= parent.mutations
+ SV.color = parent.color
+ if(prob(mutativness))
+ SV.mutations |= pick(mutations_list)
+ var/datum/spacevine_mutation/randmut = pick(SV.mutations)
+ SV.color = randmut.hue
+
+ for(var/datum/spacevine_mutation/SM in SV.mutations)
+ SM.on_birth(SV)
process()
if(!vines)
@@ -165,6 +393,8 @@
i++
queue_end += SV
growth_queue -= SV
+ for(var/datum/spacevine_mutation/SM in SV.mutations)
+ SM.process_mutation(SV)
if(SV.energy < 2) //If tile isn't fully grown
if(prob(20))
SV.grow()
@@ -190,9 +420,14 @@
src.icon_state = pick("Hvy1", "Hvy2", "Hvy3")
energy = 2
+ for(var/datum/spacevine_mutation/SM in mutations)
+ SM.on_grow(src)
+
/obj/effect/spacevine/proc/buckle_mob()
if(!buckled_mob && prob(25))
for(var/mob/living/carbon/V in src.loc)
+ for(var/datum/spacevine_mutation/SM in mutations)
+ SM.on_buckle(src, V)
if((V.stat != DEAD) && (V.buckled != src)) //if mob not dead or captured
V.buckled = src
V.loc = src.loc
@@ -204,12 +439,14 @@
/obj/effect/spacevine/proc/spread()
var/direction = pick(cardinal)
var/step = get_step(src,direction)
+ for(var/datum/spacevine_mutation/SM in mutations)
+ SM.on_spread(src, step)
if(istype(step,/turf/simulated/floor))
var/turf/simulated/floor/F = step
if(!locate(/obj/effect/spacevine,F))
if(F.Enter(src))
if(master)
- master.spawn_spacevine_piece( F )
+ master.spawn_spacevine_piece(F, src)
/*
/obj/effect/spacevine/proc/Life()
@@ -248,18 +485,21 @@
/obj/effect/spacevine/ex_act(severity)
switch(severity)
if(1.0)
- qdel(src)
+ Destroy()
return
if(2.0)
if (prob(90))
- qdel(src)
+ Destroy()
return
if(3.0)
if (prob(50))
- qdel(src)
+ Destroy()
return
return
-/obj/effect/spacevine/temperature_expose(null, temp, volume) //hotspots kill vines
- qdel(src)
-
+/obj/effect/spacevine/temperature_expose(null, temp, volume)
+ var/override = 0
+ for(var/datum/spacevine_mutation/SM in mutations)
+ override += SM.process_temperature(src, temp, volume)
+ if(!override)
+ Destroy()
\ No newline at end of file
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 6915ca7e1c7..3a0fc8d9da1 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -86,7 +86,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/cherries
seed = "/obj/item/seeds/cherryseed"
@@ -100,7 +100,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 15), 1))
reagents.add_reagent("sugar", 1+round((potency / 15), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/poppy
seed = "/obj/item/seeds/poppyseed"
@@ -114,7 +114,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
reagents.add_reagent("bicaridine", 1+round((potency / 10), 1))
- bitesize = 1+round(reagents.total_volume / 3, 1)
+ bitesize = 1+round(reagents.total_volume / 3, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/harebell
seed = "obj/item/seeds/harebellseed"
@@ -127,7 +127,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
- bitesize = 1+round(reagents.total_volume / 3, 1)
+ bitesize = 1+round(reagents.total_volume / 3, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/potato
seed = "/obj/item/seeds/potatoseed"
@@ -138,8 +138,8 @@
New(var/loc, var/potency = 25)
..()
if(reagents)
- reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
- bitesize = reagents.total_volume
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ bitesize = reagents.total_volume
/obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
@@ -165,7 +165,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
reagents.add_reagent("sugar", 1+round((potency / 5), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/greengrapes
seed = "/obj/item/seeds/greengrapeseed"
@@ -178,7 +178,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
reagents.add_reagent("kelotane", 3+round((potency / 5), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage
seed = "/obj/item/seeds/cabbageseed"
@@ -190,7 +190,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
- bitesize = reagents.total_volume
+ bitesize = reagents.total_volume
/obj/item/weapon/reagent_containers/food/snacks/grown/berries
seed = "/obj/item/seeds/berryseed"
@@ -202,7 +202,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries
seed = "/obj/item/seeds/glowberryseed"
@@ -217,7 +217,7 @@
if(reagents)
reagents.add_reagent("nutriment", round((potency / 10), 1))
reagents.add_reagent("uranium", 3+round(potency / 5, 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/Destroy()
if(istype(loc,/mob))
@@ -243,7 +243,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
reagents.add_reagent("coco", 4+round((potency / 5), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane
seed = "/obj/item/seeds/sugarcaneseed"
@@ -254,7 +254,7 @@
New(var/loc, var/potency = 50)
..()
if(reagents)
- reagents.add_reagent("sugar", 4+round((potency / 5), 1))
+ reagents.add_reagent("sugar", 4+round((potency / 5), 1))
/obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries
seed = "/obj/item/seeds/poisonberryseed"
@@ -268,7 +268,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1)
reagents.add_reagent("toxin", 3+round(potency / 5, 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/deathberries
seed = "/obj/item/seeds/deathberryseed"
@@ -283,7 +283,7 @@
reagents.add_reagent("nutriment", 1)
reagents.add_reagent("toxin", 3+round(potency / 3, 1))
reagents.add_reagent("lexorin", 1+round(potency / 5, 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris
seed = "/obj/item/seeds/ambrosiavulgaris"
@@ -300,7 +300,7 @@
reagents.add_reagent("kelotane", 1+round(potency / 8, 1))
reagents.add_reagent("bicaridine", 1+round(potency / 10, 1))
reagents.add_reagent("toxin", 1+round(potency / 10, 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus
seed = "/obj/item/seeds/ambrosiadeus"
@@ -317,7 +317,7 @@
reagents.add_reagent("synaptizine", 1+round(potency / 8, 1))
reagents.add_reagent("hyperzine", 1+round(potency / 10, 1))
reagents.add_reagent("space_drugs", 1+round(potency / 10, 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/apple
seed = "/obj/item/seeds/appleseed"
@@ -330,7 +330,7 @@
if(reagents)
reagents.maximum_volume = 20
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
- bitesize = reagents.maximum_volume // Always eat the apple in one
+ bitesize = reagents.maximum_volume // Always eat the apple in one
/obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned
seed = "/obj/item/seeds/poisonedappleseed"
@@ -343,7 +343,7 @@
if(reagents)
reagents.maximum_volume = 20
reagents.add_reagent("cyanide", 1+round((potency / 5), 1))
- bitesize = reagents.maximum_volume // Always eat the apple in one
+ bitesize = reagents.maximum_volume // Always eat the apple in one
/obj/item/weapon/reagent_containers/food/snacks/grown/goldapple
seed = "/obj/item/seeds/goldappleseed"
@@ -356,7 +356,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
reagents.add_reagent("gold", 1+round((potency / 5), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/goldapple/attackby(var/obj/item/O as obj, var/mob/user as mob)
. = ..()
@@ -375,7 +375,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 6), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin
seed = "/obj/item/seeds/pumpkinseed"
@@ -387,7 +387,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 6), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -408,7 +408,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/lemon
seed = "/obj/item/seeds/lemonseed"
@@ -420,7 +420,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/orange
seed = "/obj/item/seeds/orangeseed"
@@ -432,7 +432,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet
seed = "/obj/item/seeds/whitebeetseed"
@@ -445,7 +445,7 @@
if(reagents)
reagents.add_reagent("nutriment", round((potency / 20), 1))
reagents.add_reagent("sugar", 1+round((potency / 5), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/banana
seed = "/obj/item/seeds/bananaseed"
@@ -461,7 +461,7 @@
..()
if(reagents)
reagents.add_reagent("banana", 1+round((potency / 10), 1))
- bitesize = 5
+ bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/grown/chili
seed = "/obj/item/seeds/chiliseed"
@@ -474,7 +474,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 25), 1))
reagents.add_reagent("capsaicin", 3+round(potency / 5, 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/chili/attackby(var/obj/item/O as obj, var/mob/user as mob)
. = ..()
@@ -494,7 +494,7 @@
reagents.add_reagent("nutriment", 1+round((potency / 25), 1))
reagents.add_reagent("capsaicin", 8+round(potency / 2, 1))
reagents.add_reagent("condensedcapsaicin", 4+round(potency / 4, 1))
- bitesize = 1+round(reagents.total_volume / 4, 1)
+ bitesize = 1+round(reagents.total_volume / 4, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chilli/attackby(var/obj/item/O as obj, var/mob/user as mob)
. = ..()
@@ -529,7 +529,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans
seed = "/obj/item/seeds/soyaseed"
@@ -542,7 +542,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/koibeans
seed = "/obj/item/seeds/koiseed"
@@ -555,7 +555,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 30), 1))
reagents.add_reagent("carpotoxin", 1+round((potency / 20), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/moonflower
seed = "/obj/item/seeds/moonflowerseed"
@@ -568,7 +568,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
reagents.add_reagent("moonshine", 1+round((potency / 10), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato
seed = "/obj/item/seeds/tomatoseed"
@@ -580,7 +580,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
throw_impact(atom/hit_atom)
..()
@@ -598,7 +598,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/killertomato/attack_self(mob/user as mob)
if(istype(user.loc,/turf/space))
@@ -619,7 +619,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
reagents.add_reagent("blood", 1+round((potency / 5), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato/throw_impact(atom/hit_atom)
..()
@@ -642,7 +642,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
reagents.add_reagent("lube", 1+round((potency / 5), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/throw_impact(atom/hit_atom)
..()
@@ -677,7 +677,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 25), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/grass
seed = "/obj/item/seeds/grassseed"
@@ -688,7 +688,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/grass/attack_self(mob/user as mob)
user << "You prepare the astroturf."
@@ -706,12 +706,15 @@
name = "kudzu pod"
desc = "Pueraria Virallis: An invasive species with vines that rapidly creep and wrap around whatever they contact."
icon_state = "kudzupod"
+ var/list/mutations = list()
+ var/mutating = 0
+
New(var/loc, var/potency = 10)
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
reagents.add_reagent("anti_toxin", 1+round((potency / 25), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper
seed = "/obj/item/seeds/icepepperseed"
@@ -724,7 +727,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
reagents.add_reagent("frostoil", 3+round(potency / 5, 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper/attackby(var/obj/item/O as obj, var/mob/user as mob)
. = ..()
@@ -742,7 +745,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
reagents.add_reagent("imidazoline", 3+round(potency / 5, 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi
seed = "/obj/item/seeds/reishimycelium"
@@ -756,7 +759,7 @@
reagents.add_reagent("nutriment", 1)
reagents.add_reagent("anti_toxin", 3+round(potency / 3, 1))
reagents.add_reagent("stoxin", 3+round(potency / 3, 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi/attackby(var/obj/item/O as obj, var/mob/user as mob)
. = ..()
@@ -776,7 +779,7 @@
reagents.add_reagent("nutriment", 1)
reagents.add_reagent("amatoxin", 3+round(potency / 3, 1))
reagents.add_reagent("mushroomhallucinogen", 1+round(potency / 25, 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita/attackby(var/obj/item/O as obj, var/mob/user as mob)
. = ..()
@@ -795,7 +798,7 @@
reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
reagents.add_reagent("amatoxin", 13+round(potency / 3, 1))
reagents.add_reagent("mushroomhallucinogen", 1+round(potency / 25, 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel/attackby(var/obj/item/O as obj, var/mob/user as mob)
. = ..()
@@ -814,7 +817,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
reagents.add_reagent("mushroomhallucinogen", 3+round(potency / 5, 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap/attackby(var/obj/item/O as obj, var/mob/user as mob)
. = ..()
@@ -831,7 +834,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 2+round((potency / 10), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom
seed = "/obj/item/seeds/walkingmushroom"
@@ -842,7 +845,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 2+round((potency / 10), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user as mob)
if(istype(user.loc,/turf/space))
@@ -867,7 +870,7 @@
..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 25), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom
seed = "/obj/item/seeds/glowshroom"
@@ -887,7 +890,7 @@
potency = 30
plant_type = 2
if(reagents)
- reagents.add_reagent("radium", 1+round((potency / 20), 1))
+ reagents.add_reagent("radium", 1+round((potency / 20), 1))
if(istype(src.loc,/mob))
pickup(src.loc)//adjusts the lighting on the mob
else
@@ -959,7 +962,7 @@
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
reagents.add_reagent("singulo", 1+round((potency / 5), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/gatfruit
seed = "/obj/item/seeds/gatfruit"
@@ -975,7 +978,7 @@
reagents.add_reagent("carbon", 1+round((potency / 10), 1))
reagents.add_reagent("nitrogen", 1+round((potency / 15), 1))
reagents.add_reagent("potassium", 1+round((potency / 20), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/coffee_arabica
@@ -987,7 +990,7 @@
New(var/loc, var/potency = 20)
..()
if(reagents)
- reagents.add_reagent("coffeepowder", 1+round((potency / 10), 2))
+ reagents.add_reagent("coffeepowder", 1+round((potency / 10), 2))
/obj/item/weapon/reagent_containers/food/snacks/grown/coffee_robusta
seed = "/obj/item/seeds/coffee_robusta_seed"
@@ -999,7 +1002,7 @@
..()
if(reagents)
reagents.add_reagent("coffeepowder", 1+round((potency / 10), 2))
- reagents.add_reagent("hyperzine", 1+round((potency / 20), 1))
+ reagents.add_reagent("hyperzine", 1+round((potency / 20), 1))
/obj/item/weapon/reagent_containers/food/snacks/grown/tobacco
seed = "/obj/item/seeds/tobacco_seed"
@@ -1020,7 +1023,7 @@
New(var/loc, var/potency = 20)
..()
if(reagents)
- reagents.add_reagent("dexalin", 1+round((potency / 20), 1))
+ reagents.add_reagent("dexalin", 1+round((potency / 20), 1))
/obj/item/weapon/reagent_containers/food/snacks/grown/tea_aspera
@@ -1032,7 +1035,7 @@
New(var/loc, var/potency = 20)
..()
if(reagents)
- reagents.add_reagent("teapowder", 1+round((potency / 10), 2))
+ reagents.add_reagent("teapowder", 1+round((potency / 10), 2))
/obj/item/weapon/reagent_containers/food/snacks/grown/tea_astra
@@ -1045,4 +1048,4 @@
..()
if(reagents)
reagents.add_reagent("teapowder", 1+round((potency / 10), 2))
- reagents.add_reagent("kelotane", 1+round((potency / 20), 1))
+ reagents.add_reagent("kelotane", 1+round((potency / 20), 1))
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 95178e74be7..80642e3957b 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -768,9 +768,11 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
/obj/item/seeds/proc/harvest(mob/user = usr)
var/obj/machinery/hydroponics/parent = loc //for ease of access
var/t_amount = 0
+ var/list/result = list()
while(t_amount < getYield())
- var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new product(user.loc, potency) // User gets a consumable
+ var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new product(user.loc, potency)
+ result.Add(t_prod) // User gets a consumable
if(!t_prod) return
t_prod.seed = type
t_prod.lifespan = lifespan
@@ -783,6 +785,8 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
t_amount++
parent.update_tray()
+
+ return result
/*
/obj/item/seeds/grassseed/harvest(mob/user = usr)
var/obj/machinery/hydroponics/parent = loc //for ease of access
diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm
index 758bd4c27af..090746089dd 100644
--- a/code/modules/hydroponics/seed_extractor.dm
+++ b/code/modules/hydroponics/seed_extractor.dm
@@ -6,7 +6,7 @@
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/))
var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O
while(t_amount < t_max)
- var/obj/item/seeds/t_prod = new F.seed(O.loc)
+ var/obj/item/seeds/t_prod = new F.seed(O.loc, O)
t_prod.lifespan = F.lifespan
t_prod.endurance = F.endurance
t_prod.maturation = F.maturation
@@ -21,7 +21,7 @@
var/obj/item/weapon/grown/F = O
if(F.seed)
while(t_amount < t_max)
- var/obj/item/seeds/t_prod = new F.seed(O.loc)
+ var/obj/item/seeds/t_prod = new F.seed(O.loc, O)
t_prod.lifespan = F.lifespan
t_prod.endurance = F.endurance
t_prod.maturation = F.maturation
@@ -55,7 +55,7 @@
obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(isrobot(user))
return
-
+
if (istype(O,/obj/item/weapon/storage/bag/plants))
var/obj/item/weapon/storage/P = O
var/loaded = 0
@@ -112,9 +112,9 @@ datum/seed_pile/New(var/name, var/life, var/endur, var/matur, var/prod, var/yie,
obj/machinery/seed_extractor/interact(mob/user as mob)
if (stat)
return 0
-
+
var/dat = "Stored seeds:
"
-
+
if (contents.len == 0)
dat += "No seeds"
else
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 442624ca632..c0a4eda32d0 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -22,7 +22,7 @@
var/rarity = 0 //How rare the plant is. Used for giving points to cargo when shipping off to Centcom.
var/list/mutatelist = list() //The type of plants that this plant can mutate into.
-/obj/item/seeds/New()
+/obj/item/seeds/New(loc, parent)
..()
pixel_x = rand(-8, 8)
pixel_y = rand(-8, 8)
@@ -1033,12 +1033,26 @@
growthstages = 4
plant_type = 1
rarity = 30
+ var/list/mutations = list()
+ var/mutating
+
+/obj/item/seeds/kudzuseed/New(loc, obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod/parent)
+ ..()
+ if(parent)
+ mutations = parent.mutations
+ mutating = parent.mutating
+
+/obj/item/seeds/kudzuseed/harvest()
+ var/list/prod = ..()
+ for(var/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod/K in prod)
+ K.mutations = mutations
+ K.mutating = prob(15)
/obj/item/seeds/kudzuseed/attack_self(mob/user as mob)
if(istype(user.loc,/turf/space))
return
user << "You plant the kudzu. You monster."
- new /obj/effect/spacevine_controller(user.loc)
+ new /obj/effect/spacevine_controller(user.loc, mutations)
qdel(src)
/obj/item/seeds/chillighost
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index ac5350437e2..fa363a1f7d9 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -48,9 +48,7 @@
if(locate(/obj/effect/spacevine) in loc)
var/obj/effect/spacevine/SV = locate(/obj/effect/spacevine) in loc
- qdel(SV)
- if(prob(10))
- say("Nom")
+ SV.eat(src)
if(!pulledby)
for(var/direction in shuffle(list(1,2,4,8,5,6,9,10)))
@@ -68,9 +66,8 @@
if(!stat)
if(locate(/obj/effect/spacevine) in loc)
var/obj/effect/spacevine/SV = locate(/obj/effect/spacevine) in loc
- qdel(SV)
- if(prob(10))
- say("Nom")
+ SV.eat(src)
+
/mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 5300f47f082..b24a66d4f2d 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -1495,8 +1495,8 @@ datum
else if(istype(O,/obj/effect/glowshroom)) //even a small amount is enough to kill it
qdel(O)
else if(istype(O,/obj/effect/spacevine))
- if(prob(50)) qdel(O) //Kills kudzu too.
- // Damage that is done to growing plants is separately at code/game/machinery/hydroponics at obj/item/hydroponics
+ var/obj/effect/spacevine/SV = O
+ SV.on_chem_effect(src)
reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
src = null