diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm
deleted file mode 100644
index f1b04b9ed98..00000000000
--- a/code/game/objects/items/weapons/hydroponics.dm
+++ /dev/null
@@ -1,240 +0,0 @@
-/* Hydroponic stuff
- * Contains:
- * Sunflowers
- * Nettle
- * Deathnettle
- * Corbcob
- */
-
-
-
-/*
- * SeedBag
- */
-//uncomment when this is updated to match storage update
-/*
-/obj/item/weapon/seedbag
- icon = 'icons/obj/hydroponics.dmi'
- icon_state = "seedbag"
- name = "Seed Bag"
- desc = "A small satchel made for organizing seeds."
- var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
- var/capacity = 500; //the number of seeds it can carry.
- slot_flags = SLOT_BELT
- w_class = 1
- var/list/item_quants = list()
-
-/obj/item/weapon/seedbag/attack_self(mob/user as mob)
- user.machine = src
- interact(user)
-
-/obj/item/weapon/seedbag/verb/toggle_mode()
- set name = "Switch Bagging Method"
- set category = "Object"
-
- mode = !mode
- switch (mode)
- if(1)
- usr << "The bag now picks up all seeds in a tile at once."
- if(0)
- usr << "The bag now picks up one seed pouch at a time."
-
-/obj/item/seeds/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
- ..()
- if (istype(O, /obj/item/weapon/seedbag))
- var/obj/item/weapon/seedbag/S = O
- if (S.mode == 1)
- for (var/obj/item/seeds/G in locate(src.x,src.y,src.z))
- if (S.contents.len < S.capacity)
- S.contents += G;
- if(S.item_quants[G.name])
- S.item_quants[G.name]++
- else
- S.item_quants[G.name] = 1
- else
- user << "\blue The seed bag is full."
- S.updateUsrDialog()
- return
- user << "\blue You pick up all the seeds."
- else
- if (S.contents.len < S.capacity)
- S.contents += src;
- if(S.item_quants[name])
- S.item_quants[name]++
- else
- S.item_quants[name] = 1
- else
- user << "\blue The seed bag is full."
- S.updateUsrDialog()
- return
-
-/obj/item/weapon/seedbag/interact(mob/user as mob)
-
- var/dat = "Select an item:
"
-
- if (contents.len == 0)
- dat += "No seeds loaded!"
- else
- for (var/O in item_quants)
- if(item_quants[O] > 0)
- var/N = item_quants[O]
- dat += "[capitalize(O)]:"
- dat += " [N] "
- dat += "Vend"
- dat += "
"
-
- dat += "
Unload All"
- dat += ""
- user << browse("
Seedbag Supplies[dat]", "window=seedbag")
- onclose(user, "seedbag")
- return
-
-/obj/item/weapon/seedbag/Topic(href, href_list)
- if(..())
- return
-
- usr.machine = src
- if ( href_list["vend"] )
- var/N = href_list["vend"]
-
- if(item_quants[N] <= 0) // Sanity check, there are probably ways to press the button when it shouldn't be possible.
- return
-
- item_quants[N] -= 1
- for(var/obj/O in contents)
- if(O.name == N)
- O.loc = get_turf(src)
- usr.put_in_hands(O)
- break
-
- else if ( href_list["unload"] )
- item_quants.Cut()
- for(var/obj/O in contents )
- O.loc = get_turf(src)
-
- src.updateUsrDialog()
- return
-
-/obj/item/weapon/seedbag/updateUsrDialog()
- var/list/nearby = range(1, src)
- for(var/mob/M in nearby)
- if ((M.client && M.machine == src))
- src.attack_self(M)
-*/
-/*
- * Sunflower
- */
-
-/obj/item/weapon/grown/sunflower/attack(mob/M as mob, mob/user as mob)
- M << " [user] smacks you with a sunflower!FLOWER POWER"
- user << " Your sunflower's FLOWER POWER strikes [M]"
-
-/*
- * Sun/Novaflower
- */
-/obj/item/weapon/grown/novaflower/attack(mob/M as mob, mob/user as mob)
- M << " [user] smacks you with a novaflower!FLOWER POWER"
- user << " Your novaflower's FLOWER POWER strikes [M]"
-
-/obj/item/weapon/grown/novaflower/attack(mob/living/carbon/M as mob, mob/user as mob)
- if(!..()) return
- if(istype(M, /mob/living))
- M << "\red You are heated by the warmth of the of the [name]!"
- M.bodytemperature += potency/2 * TEMPERATURE_DAMAGE_COEFFICIENT
-
-/obj/item/weapon/grown/novaflower/pickup(mob/living/carbon/human/user as mob)
- if(!user.gloves)
- user << "\red The [name] burns your bare hand!"
- user.adjustFireLoss(rand(1,5))
-/*
-/*
- * 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!"
- if(istype(user, /mob/living/carbon/human))
- var/organ = ((user.hand ? "l_":"r_") + "arm")
- var/obj/item/organ/external/affecting = user.get_organ(organ)
- if(affecting.take_damage(0,force))
- user.UpdateDamageIcon()
- else
- user.take_organ_damage(0,force)
-
-/obj/item/weapon/grown/nettle/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
- if(!proximity) return
- if(force > 0)
- force -= rand(1,(force/3)+1) // When you whack someone with it, leaves fall off
- playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
- else
- usr << "All the leaves have fallen off the nettle from violent whacking."
- qdel(src)
-
-/obj/item/weapon/grown/nettle/changePotency(newValue) //-QualityVan
- potency = newValue
- force = round((5+potency/5), 1)
-
-/*
- * Deathnettle
- */
-
-/obj/item/weapon/grown/deathnettle/pickup(mob/living/carbon/human/user as mob)
- if(!user.gloves)
- if(istype(user, /mob/living/carbon/human))
- var/organ = ((user.hand ? "l_":"r_") + "arm")
- var/obj/item/organ/external/affecting = user.get_organ(organ)
- if(affecting.take_damage(0,force))
- user.UpdateDamageIcon()
- else
- user.take_organ_damage(0,force)
- if(prob(50))
- user.Paralyse(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(!..()) return
- if(istype(M, /mob/living))
- M << "\red You are stunned by the powerful acid of the Deathnettle!"
-
- M.attack_log += text("\[[time_stamp()]\] Had the [src.name] used on them by [key_name(user)]")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] on [key_name(M)]")
- msg_admin_attack("[key_name_admin(user)] used the [src.name] on [key_name_admin(M)]")
-
- if(!iscarbon(user))
- M.LAssailant = null
- else
- M.LAssailant = user
-
- playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
-
- M.eye_blurry += force/7
- if(prob(20))
- M.Paralyse(force/6)
- M.Weaken(force/15)
- M.drop_item()
-
-/obj/item/weapon/grown/deathnettle/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
- if(!proximity) return
- if (force > 0)
- force -= rand(1,(force/3)+1) // When you whack someone with it, leaves fall off
-
- else
- usr << "All the leaves have fallen off the deathnettle from violent whacking."
- qdel(src)
-
-/obj/item/weapon/grown/deathnettle/changePotency(newValue) //-QualityVan
- potency = newValue
- force = round((5+potency/2.5), 1)
-
-
-/*
- * Corncob
- */
-/obj/item/weapon/corncob/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- ..()
- if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/kitchenknife/ritual))
- user << "You use [W] to fashion a pipe out of the corn cob!"
- new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc)
- qdel(src)
- return
-*/
\ No newline at end of file
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 612e554f5da..68e9aff779f 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -113,7 +113,7 @@
descriptors |= "hallucinogenic"
if(reagents.has_reagent("styptic_powder"))
descriptors |= "medicinal"
- if(reagents.has_reagent("gold"))
+ if(reagents.has_reagent("gold") || reagents.has_reagent("silver"))
descriptors |= "shiny"
if(reagents.has_reagent("lube"))
descriptors |= "slippery"
@@ -377,22 +377,7 @@
if(src) qdel(src)
return
- if(seed.kitchen_tag == "grass")
- user.show_message("You make a grass tile out of \the [src]!", 1)
- for(var/i=0,i<2,i++)
- var/obj/item/stack/tile/grass/G = new (user.loc)
- G.color = seed.get_trait(TRAIT_PRODUCT_COLOUR)
- for (var/obj/item/stack/tile/grass/NG in user.loc)
- if(G==NG)
- continue
- if(NG.amount>=NG.max_amount)
- continue
- NG.attackby(G, user)
- user << "You add the newly-formed grass to the stack. It now contains [G.amount] tiles."
- qdel(src)
- return
-
- if(seed.get_trait(TRAIT_SPREAD) > 0)
+ if(user.a_intent == I_DISARM && seed.get_trait(TRAIT_SPREAD) > 0) //Using disarm so we can tell if you want to plant or convert non-final plants
user << "You plant the [src.name]."
new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(get_turf(user),src.seed)
new /obj/effect/plant(get_turf(user), src.seed)
@@ -400,7 +385,7 @@
return
- if(seed.kitchen_tag)
+ if(!seed.final_form) //This isn't even my final form! (sorry, it had to be done)
switch(seed.kitchen_tag)
if("comfrey")
var/obj/item/stack/medical/bruise_pack/comfrey/poultice = new /obj/item/stack/medical/bruise_pack/comfrey(user.loc)
@@ -414,7 +399,70 @@
user << "You mash the petals into a poultice."
qdel(src)
return
+ if("grass")
+ user.show_message("You make a grass tile out of \the [src]!", 1)
+ for(var/i=0,i<2,i++)
+ var/obj/item/stack/tile/grass/G = new (user.loc)
+ G.color = seed.get_trait(TRAIT_PRODUCT_COLOUR)
+ for (var/obj/item/stack/tile/grass/NG in user.loc)
+ if(G==NG)
+ continue
+ if(NG.amount>=NG.max_amount)
+ continue
+ NG.attackby(G, user)
+ user << "You add the newly-formed grass to the stack. It now contains [G.amount] tiles."
+ qdel(src)
+ return
+ if("sunflower")
+ var/obj/item/weapon/grown/sunflower/SF = new /obj/item/weapon/grown/sunflower(user.loc)
+ user.unEquip(src)
+ user.put_in_hands(SF)
+ qdel(src)
+ return
+ if("novaflower")
+ var/obj/item/weapon/grown/novaflower/NF = new /obj/item/weapon/grown/novaflower(user.loc)
+ user.say("PRAISE THE SUN!")
+ user.unEquip(src)
+ user.put_in_hands(NF)
+ qdel(src)
+ return
+ if("cashpod")
+ user << "You crack open the cash pod..."
+ var/value = round(seed.get_trait(TRAIT_POTENCY))
+ var/dosh
+ user.unEquip(src)
+ switch(value)
+ if(0)
+ user << "It's empty! What a waste..."
+ if(1 to 10)
+ user << "It's got a space dollar inside. Woo."
+ dosh = new /obj/item/weapon/spacecash(user.loc)
+ if(11 to 20)
+ user << "It's got 10 space dollars inside!"
+ dosh = new /obj/item/weapon/spacecash/c10(user.loc)
+ if(21 to 30)
+ user << "It's got 20 space dollars inside! Cool!"
+ dosh = new /obj/item/weapon/spacecash/c20(user.loc)
+ if(31 to 40)
+ user << "It's got 50 space dollars inside! Nice!"
+ dosh = new /obj/item/weapon/spacecash/c50(user.loc)
+ if(41 to 50)
+ user << "It's got 100 space dollars inside! Sweet!"
+ dosh = new /obj/item/weapon/spacecash/c100(user.loc)
+ if(51 to 60)
+ user << "It's got 200 space dollars inside! Awesome!"
+ dosh = new /obj/item/weapon/spacecash/c200(user.loc)
+ if(61 to 80)
+ user << "It's got 500 space dollars inside! CHA-CHING!"
+ dosh = new /obj/item/weapon/spacecash/c500(user.loc)
+ else
+ user << "It's got 1000 space dollars inside! JACKPOT!"
+ dosh = new /obj/item/weapon/spacecash/c1000(user.loc)
+ if(dosh)
+ user.put_in_hands(dosh)
+ qdel(src)
+ return
/obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user)
..()
diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm
index a5497298947..b6a3b05d966 100644
--- a/code/modules/hydroponics/grown_inedible.dm
+++ b/code/modules/hydroponics/grown_inedible.dm
@@ -84,3 +84,47 @@
throwforce = 0
throw_speed = 4
throw_range = 20
+
+
+// Sunflower
+
+/obj/item/weapon/grown/sunflower
+ name = "sunflower"
+ desc = "A large, fresh-grown sunflower. How cheery!"
+ icon = 'icons/obj/harvest.dmi'
+ icon_state = "sunflower"
+ item_state = "sunflower"
+ w_class = 2.0
+ throwforce = 0
+ throw_speed = 4
+ throw_range = 20
+
+/obj/item/weapon/grown/sunflower/attack(mob/M as mob, mob/user as mob)
+ M << " [user] smacks you with a [name]!FLOWER POWER"
+ user << " Your [name]'s FLOWER POWER strikes [M]"
+
+
+// Novaflower
+
+/obj/item/weapon/grown/novaflower
+ name = "novaflower"
+ desc = "A large, fresh-grown novaflower. It seems to radiate heat."
+ icon = 'icons/obj/harvest.dmi'
+ icon_state = "novaflower"
+ item_state = "sunflower"
+ w_class = 2.0
+ throwforce = 0
+ throw_speed = 4
+ throw_range = 20
+
+/obj/item/weapon/grown/novaflower/attack(mob/living/carbon/M as mob, mob/user as mob)
+ M << "[user] smacks you with a [name]!FLOWER POWER"
+ user << " Your [name]'s FLOWER POWER strikes [M]"
+ if(istype(M, /mob/living))
+ M << "You are heated by the warmth of the of the [name]!"
+ M.bodytemperature += potency/2 * TEMPERATURE_DAMAGE_COEFFICIENT
+
+/obj/item/weapon/grown/novaflower/pickup(mob/living/carbon/human/user as mob)
+ if(!user.gloves)
+ user << "The [name] burns your bare hand!"
+ user.adjustFireLoss(rand(1,5))
diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm
index 00af096d7fc..d206c8f8e3a 100644
--- a/code/modules/hydroponics/seed.dm
+++ b/code/modules/hydroponics/seed.dm
@@ -21,7 +21,8 @@
var/kitchen_tag // Used by the reagent grinder.
var/trash_type // Garbage item produced when eaten.
var/splat_type = /obj/effect/decal/cleanable/fruit_smudge // Graffiti decal.
- var/has_mob_product
+ var/preset_product
+ var/final_form = 1
var/modular_icon = 0 // Dictates if the product uses a modular sprite. 0 = preset, 1 = modular
var/preset_icon = "undef" // Name of the iconstate in icon/obj/harvest.dmi to use for preset sprite
// Make sure to set this to the correct icon if not using a modular sprite
@@ -650,8 +651,8 @@
consume_gasses |= new_gasses
gene.values["[TRAIT_CONSUME_GASSES]"] = null
if(GENE_METABOLISM)
- has_mob_product = gene.values["mob_product"]
- gene.values["mob_product"] = null
+ preset_product = gene.values["alt_product"]
+ gene.values["alt_product"] = null
for(var/trait in gene.values)
set_trait(trait,gene.values["[trait]"])
@@ -680,7 +681,7 @@
if(GENE_HARDINESS)
traits_to_copy = list(TRAIT_TOXINS_TOLERANCE,TRAIT_PEST_TOLERANCE,TRAIT_WEED_TOLERANCE,TRAIT_ENDURANCE)
if(GENE_METABOLISM)
- P.values["mob_product"] = has_mob_product
+ P.values["alt_product"] = preset_product
traits_to_copy = list(TRAIT_REQUIRES_NUTRIENTS,TRAIT_REQUIRES_WATER,TRAIT_ALTER_TEMP)
if(GENE_VIGOUR)
traits_to_copy = list(TRAIT_PRODUCTION,TRAIT_MATURATION,TRAIT_YIELD,TRAIT_SPREAD)
@@ -740,14 +741,13 @@
currently_querying = list()
for(var/i = 0;i