Merge pull request #3393 from Razharas/GrabPull

Added datum mutations
This commit is contained in:
Cheridan
2014-04-15 10:27:31 -05:00
8 changed files with 341 additions and 91 deletions
+250 -10
View File
@@ -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 << "<span class='alert'>You accidently touch the vine and feel a strange sensation.</span>"
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 << "<span class='alert'>You cut yourself on the thorny vines.</span>"
/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 << "<span class='alert'>You cut yourself on the thorny vines.</span>"
/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()
+60 -57
View File
@@ -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 << "<span class='notice'>You prepare the astroturf.</span>"
@@ -706,12 +706,15 @@
name = "kudzu pod"
desc = "<I>Pueraria Virallis</I>: 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))
+5 -1
View File
@@ -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
+5 -5
View File
@@ -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 = "<b>Stored seeds:</b><br>"
if (contents.len == 0)
dat += "<font color='red'>No seeds</font>"
else
+16 -2
View File
@@ -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 << "<span class='notice'>You plant the kudzu. You monster.</span>"
new /obj/effect/spacevine_controller(user.loc)
new /obj/effect/spacevine_controller(user.loc, mutations)
qdel(src)
/obj/item/seeds/chillighost
@@ -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))
+2 -2
View File
@@ -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