diff --git a/code/modules/crafting/table.dm b/code/modules/crafting/table.dm
index 3ac5ac16407..687cae5be3b 100644
--- a/code/modules/crafting/table.dm
+++ b/code/modules/crafting/table.dm
@@ -272,28 +272,24 @@
if(name_text)
for(var/A in R.reqs)
if(ispath(A, /obj))
- var/obj/O = new A
- req_text += " [R.reqs[A]] [O.name]"
- qdel(O)
- if(ispath(A, /datum/reagent))
- var/datum/reagent/RE = new A
- req_text += " [R.reqs[A]] [RE.name]"
- qdel(RE)
+ var/obj/O = A
+ req_text += " [R.reqs[A]] [initial(O.name)]"
+ else if(ispath(A, /datum/reagent))
+ var/datum/reagent/RE = A
+ req_text += " [R.reqs[A]] [initial(RE.name)]"
if(R.chem_catalysts.len)
catalist_text += ", Catalysts:"
for(var/C in R.chem_catalysts)
if(ispath(C, /datum/reagent))
- var/datum/reagent/RE = new C
- catalist_text += " [R.chem_catalysts[C]] [RE.name]"
- qdel(RE)
+ var/datum/reagent/RE = C
+ catalist_text += " [R.chem_catalysts[C]] [initial(RE.name)]"
if(R.tools.len)
tool_text += ", Tools:"
for(var/O in R.tools)
if(ispath(O, /obj))
- var/obj/T = new O
- tool_text += " [R.tools[O]] [T.name]"
- qdel(T)
+ var/obj/T = O
+ tool_text += " [R.tools[O]] [initial(T.name)]"
. = "[name_text][req_text][tool_text][catalist_text]
"
diff --git a/code/modules/food&drinks/kitchen machinery/juicer.dm b/code/modules/food&drinks/kitchen machinery/juicer.dm
index 492486a504e..82f3ba80eb5 100644
--- a/code/modules/food&drinks/kitchen machinery/juicer.dm
+++ b/code/modules/food&drinks/kitchen machinery/juicer.dm
@@ -146,7 +146,7 @@
return allowed_items[i]
/obj/machinery/juicer/proc/get_juice_amount(obj/item/weapon/reagent_containers/food/snacks/grown/O)
- if (!istype(O))
+ if (!istype(O) || !O.seed)
return 5
else if (O.seed.potency == -1)
return 5
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 59caa40fe7c..16bec0aa520 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -24,9 +24,6 @@
// This is for adminspawn or map-placed growns. They get the default stats of their seed type.
seed = new seed()
seed.adjust_potency(50-seed.potency)
- else // Something is terribly wrong
- qdel(src)
- return
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
@@ -34,12 +31,12 @@
if(dried_type == -1)
dried_type = src.type
- for(var/datum/plant_gene/trait/T in seed.genes)
- T.on_new(src, newloc)
-
- seed.prepare_result(src)
+ if(seed)
+ for(var/datum/plant_gene/trait/T in seed.genes)
+ T.on_new(src, newloc)
+ seed.prepare_result(src)
+ transform *= TransformUsingVariable(seed.potency, 100, 0.5) //Makes the resulting produce's sprite larger or smaller based on potency!
add_juice()
- transform *= TransformUsingVariable(seed.potency, 100, 0.5) //Makes the resulting produce's sprite larger or smaller based on potency!
@@ -52,15 +49,17 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/examine(user)
..()
- for(var/datum/plant_gene/trait/T in seed.genes)
- if(T.examine_line)
- user << T.examine_line
+ if(seed)
+ for(var/datum/plant_gene/trait/T in seed.genes)
+ if(T.examine_line)
+ user << T.examine_line
/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params)
..()
if (istype(O, /obj/item/device/analyzer/plant_analyzer))
var/msg = "*---------*\n This is \a [src].\n"
- msg += seed.get_analyzer_text()
+ if(seed)
+ msg += seed.get_analyzer_text()
msg += "\n- Nutritional value: [reagents.get_reagent_amount("nutriment")]\n"
msg += "- Other substances: [reagents.total_volume-reagents.get_reagent_amount("nutriment")]\n"
msg += "*---------*"
@@ -70,10 +69,11 @@
"capsaicin" = "Capsaicin", "frostoil" = "Frost Oil", "gold" = "Mineral Content", "glycerol" = "Glycerol",
"radium" = "Highly Radioactive Material", "uranium" = "Radioactive Material")
var/reag_txt = ""
- for(var/reagent_id in scannable_reagents)
- if(reagent_id in seed.reagents_add)
- var/amt = reagents.get_reagent_amount(reagent_id)
- reag_txt += "\n- [scannable_reagents[reagent_id]]: [amt*100/reagents.maximum_volume]%"
+ if(seed)
+ for(var/reagent_id in scannable_reagents)
+ if(reagent_id in seed.reagents_add)
+ var/amt = reagents.get_reagent_amount(reagent_id)
+ reag_txt += "\n- [scannable_reagents[reagent_id]]: [amt*100/reagents.maximum_volume]%"
if(reag_txt)
msg += reag_txt
@@ -85,13 +85,14 @@
// Various gene procs
/obj/item/weapon/reagent_containers/food/snacks/grown/attack_self(mob/user)
- if(seed.get_gene(/datum/plant_gene/trait/squash))
+ if(seed && seed.get_gene(/datum/plant_gene/trait/squash))
squash(user)
..()
/obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom)
- if(!..() && seed.get_gene(/datum/plant_gene/trait/squash)) //was it caught by a mob?
- squash(hit_atom)
+ if(!..()) //was it caught by a mob?
+ if(seed && seed.get_gene(/datum/plant_gene/trait/squash))
+ squash(hit_atom)
/obj/item/weapon/reagent_containers/food/snacks/grown/proc/squash(atom/target)
var/turf/T = get_turf(target)
@@ -110,8 +111,9 @@
new trash(T)
visible_message("[src] has been squashed.","You hear a smack.")
- for(var/datum/plant_gene/trait/trait in seed.genes)
- trait.on_squash(src, target)
+ if(seed)
+ for(var/datum/plant_gene/trait/trait in seed.genes)
+ trait.on_squash(src, target)
for(var/A in T)
reagents.reaction(A)
@@ -120,43 +122,48 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/On_Consume()
if(iscarbon(usr))
- for(var/datum/plant_gene/trait/T in seed.genes)
- T.on_consume(src, usr)
+ if(seed)
+ for(var/datum/plant_gene/trait/T in seed.genes)
+ T.on_consume(src, usr)
..()
/obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(atom/movable/AM)
- var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip)
- if(S && !ispath(trash, /obj/item/weapon/grown) && iscarbon(AM))
- var/mob/living/carbon/M = AM
- var/stun = max(seed.potency * S.rate * 2, 1)
- var/weaken = max(seed.potency * S.rate, 0.5)
- if(M.slip(stun, weaken, src))
- for(var/datum/plant_gene/trait/T in seed.genes)
- T.on_slip(src, M)
- return 1
+ if(seed)
+ var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip)
+ if(S && !ispath(trash, /obj/item/weapon/grown) && iscarbon(AM))
+ var/mob/living/carbon/M = AM
+ var/stun = max(seed.potency * S.rate * 2, 1)
+ var/weaken = max(seed.potency * S.rate, 0.5)
+ if(M.slip(stun, weaken, src))
+ for(var/datum/plant_gene/trait/T in seed.genes)
+ T.on_slip(src, M)
+ return 1
..()
// Glow gene procs
/obj/item/weapon/reagent_containers/food/snacks/grown/Destroy()
- var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
- if(G && ismob(loc))
- loc.AddLuminosity(-G.get_lum(seed))
+ if(seed)
+ var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
+ if(G && ismob(loc))
+ loc.AddLuminosity(-G.get_lum(seed))
return ..()
/obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user)
..()
- var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
- if(G)
- SetLuminosity(0)
- user.AddLuminosity(G.get_lum(seed))
+ if(seed)
+ var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
+ if(G)
+ SetLuminosity(0)
+ user.AddLuminosity(G.get_lum(seed))
/obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user)
..()
- var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
- if(G)
- user.AddLuminosity(-G.get_lum(seed))
- SetLuminosity(G.get_lum(seed))
+ if(seed)
+ var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
+ if(G)
+ user.AddLuminosity(-G.get_lum(seed))
+ SetLuminosity(G.get_lum(seed))
diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm
index 6af91f91aa9..3ad9d0e04fa 100644
--- a/code/modules/hydroponics/growninedible.dm
+++ b/code/modules/hydroponics/growninedible.dm
@@ -18,27 +18,27 @@
// This is for adminspawn or map-placed growns. They get the default stats of their seed type.
seed = new seed()
seed.adjust_potency(50-seed.potency)
- else // Something is terribly wrong
- qdel(src)
- return
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
- for(var/datum/plant_gene/trait/T in seed.genes)
- T.on_new(src, newloc)
+ if(seed)
+ for(var/datum/plant_gene/trait/T in seed.genes)
+ T.on_new(src, newloc)
+
+ if(istype(src, seed.product)) // no adding reagents if it is just a trash item
+ seed.prepare_result(src)
+ transform *= TransformUsingVariable(seed.potency, 100, 0.5)
- if(istype(src, seed.product)) // no adding reagents if it is just a trash item
- seed.prepare_result(src)
add_juice()
- transform *= TransformUsingVariable(seed.potency, 100, 0.5)
/obj/item/weapon/grown/attackby(obj/item/O, mob/user, params)
..()
if (istype(O, /obj/item/device/analyzer/plant_analyzer))
var/msg = "*---------*\n This is \a [src]\n"
- msg += seed.get_analyzer_text()
+ if(seed)
+ msg += seed.get_analyzer_text()
msg += ""
usr << msg
return
@@ -50,35 +50,39 @@
/obj/item/weapon/grown/Crossed(atom/movable/AM)
- var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip)
- if(S && iscarbon(AM))
- var/mob/living/carbon/M = AM
- var/stun = max(seed.potency * S.rate * 2, 1)
- var/weaken = max(seed.potency * S.rate, 0.5)
- if(M.slip(stun, weaken, src))
- for(var/datum/plant_gene/trait/T in seed.genes)
- T.on_slip(src, M)
- return 1
+ if(seed)
+ var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip)
+ if(S && iscarbon(AM))
+ var/mob/living/carbon/M = AM
+ var/stun = max(seed.potency * S.rate * 2, 1)
+ var/weaken = max(seed.potency * S.rate, 0.5)
+ if(M.slip(stun, weaken, src))
+ for(var/datum/plant_gene/trait/T in seed.genes)
+ T.on_slip(src, M)
+ return 1
..()
// Glow gene procs
/obj/item/weapon/grown/Destroy()
- var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
- if(G && ismob(loc))
- loc.AddLuminosity(-G.get_lum(seed))
+ if(seed)
+ var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
+ if(G && ismob(loc))
+ loc.AddLuminosity(-G.get_lum(seed))
return ..()
/obj/item/weapon/grown/pickup(mob/user)
..()
- var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
- if(G)
- SetLuminosity(0)
- user.AddLuminosity(G.get_lum(seed))
+ if(seed)
+ var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
+ if(G)
+ SetLuminosity(0)
+ user.AddLuminosity(G.get_lum(seed))
/obj/item/weapon/grown/dropped(mob/user)
..()
- var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
- if(G)
- user.AddLuminosity(-G.get_lum(seed))
- SetLuminosity(G.get_lum(seed))
\ No newline at end of file
+ if(seed)
+ var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
+ if(G)
+ user.AddLuminosity(-G.get_lum(seed))
+ SetLuminosity(G.get_lum(seed))
\ No newline at end of file
diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm
index 5fc4858cab7..7e479069c3c 100644
--- a/code/modules/hydroponics/seed_extractor.dm
+++ b/code/modules/hydroponics/seed_extractor.dm
@@ -8,20 +8,22 @@
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 = F.seed.Copy()
- t_prod.loc = O.loc
- t_amount++
- qdel(O)
- return 1
+ if(F.seed)
+ while(t_amount < t_max)
+ var/obj/item/seeds/t_prod = F.seed.Copy()
+ t_prod.loc = O.loc
+ t_amount++
+ qdel(O)
+ return 1
else if(istype(O, /obj/item/weapon/grown))
var/obj/item/weapon/grown/F = O
- while(t_amount < t_max)
- var/obj/item/seeds/t_prod = F.seed.Copy()
- t_prod.loc = O.loc
- t_amount++
- qdel(O)
+ if(F.seed)
+ while(t_amount < t_max)
+ var/obj/item/seeds/t_prod = F.seed.Copy()
+ t_prod.loc = O.loc
+ t_amount++
+ qdel(O)
return 1
/*else if(istype(O, /obj/item/stack/tile/grass))
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index 828c8bf1cd6..e1c9e8b3ea7 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -273,7 +273,7 @@
return juice_items[i]
/obj/machinery/reagentgrinder/proc/get_grownweapon_amount(obj/item/weapon/grown/O)
- if (!istype(O))
+ if (!istype(O) || !O.seed)
return 5
else if (O.seed.potency == -1)
return 5
@@ -281,7 +281,7 @@
return round(O.seed.potency)
/obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/weapon/reagent_containers/food/snacks/grown/O)
- if (!istype(O))
+ if (!istype(O) || !O.seed)
return 5
else if (O.seed.potency == -1)
return 5