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