Revert "12/21 modernizations from TG live"

This commit is contained in:
LetterJay
2016-12-22 22:35:44 -06:00
committed by GitHub
parent cf59ac1c3d
commit ae40d4134e
2215 changed files with 86928 additions and 707332 deletions
+180 -111
View File
@@ -7,6 +7,10 @@
anchored = 1
use_power = 1
idle_power_usage = 40
use_auto_lights = 1
light_power_on = 2
light_range_on = 3
light_color = LIGHT_COLOR_BLUE
var/processing = 0
var/obj/item/weapon/reagent_containers/glass/beaker = null
var/points = 0
@@ -14,35 +18,13 @@
var/efficiency = 0
var/productivity = 0
var/max_items = 40
var/datum/research/files
var/list/show_categories = list("Food", "Botany Chemicals", "Leather and Cloth")
var/list/timesFiveCategories = list("Food", "Botany Chemicals")
/obj/machinery/biogenerator/New()
..()
files = new /datum/research/biogenerator(src)
create_reagents(1000)
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/biogenerator(null)
B.apply_default_parts(src)
/obj/machinery/biogenerator/Destroy()
if(beaker)
qdel(beaker)
beaker = null
return ..()
/obj/machinery/biogenerator/contents_explosion(severity, target)
..()
if(beaker)
beaker.ex_act(severity, target)
/obj/machinery/biogenerator/handle_atom_del(atom/A)
..()
if(A == beaker)
beaker = null
update_icon()
updateUsrDialog()
/obj/item/weapon/circuitboard/machine/biogenerator
name = "circuit board (Biogenerator)"
build_path = /obj/machinery/biogenerator
@@ -81,9 +63,6 @@
return
/obj/machinery/biogenerator/attackby(obj/item/O, mob/user, params)
if(user.a_intent == INTENT_HARM)
return ..()
if(processing)
user << "<span class='warning'>The biogenerator is currently processing.</span>"
return
@@ -151,20 +130,11 @@
O.loc = src
user << "<span class='info'>You put [O.name] in [src.name]</span>"
return 1 //no afterattack
else if (istype(O, /obj/item/weapon/disk/design_disk))
user.visible_message("[user] begins to load \the [O] in \the [src]...",
"You begin to load a design from \the [O]...",
"You hear the chatter of a floppy drive.")
processing = 1
var/obj/item/weapon/disk/design_disk/D = O
if(do_after(user, 10, target = src))
for(var/B in D.blueprints)
if(B)
files.AddDesign2Known(B)
processing = 0
return 1
else
else if(user.a_intent != "harm")
user << "<span class='warning'>You cannot put this in [src.name]!</span>"
else
return ..()
/obj/machinery/biogenerator/interact(mob/user)
if(stat & BROKEN || panel_open)
@@ -176,7 +146,7 @@
else
switch(menustat)
if("nopoints")
dat += "<div class='statusDisplay'>You do not have enough biomass to create products.<BR>Please, put growns into reactor and activate it.</div>"
dat += "<div class='statusDisplay'>You do not have biomass to create products.<BR>Please, put growns into reactor and activate it.</div>"
menustat = "menu"
if("complete")
dat += "<div class='statusDisplay'>Operation complete.</div>"
@@ -188,29 +158,43 @@
dat += "<div class='statusDisplay'>Not enough space left in container. Unable to create product.</div>"
menustat = "menu"
if(beaker)
var/categories = show_categories.Copy()
for(var/V in categories)
categories[V] = list()
for(var/V in files.known_designs)
var/datum/design/D = files.known_designs[V]
for(var/C in categories)
if(C in D.category)
categories[C] += D
dat += "<div class='statusDisplay'>Biomass: [points] units.</div><BR>"
dat += "<A href='?src=\ref[src];activate=1'>Activate</A><A href='?src=\ref[src];detach=1'>Detach Container</A>"
for(var/cat in categories)
dat += "<h3>[cat]:</h3>"
dat += "<div class='statusDisplay'>"
for(var/V in categories[cat])
var/datum/design/D = V
dat += "[D.name]: <A href='?src=\ref[src];create=\ref[D];amount=1'>Make</A>"
if(cat in timesFiveCategories)
dat += "<A href='?src=\ref[src];create=\ref[D];amount=5'>x5</A>"
if(ispath(D.build_path, /obj/item/stack))
dat += "<A href='?src=\ref[src];create=\ref[D];amount=10'>x10</A>"
dat += "([D.materials[MAT_BIOMASS]/efficiency])<br>"
dat += "</div>"
dat += "<h3>Food:</h3>"
dat += "<div class='statusDisplay'>"
dat += "10 milk: <A href='?src=\ref[src];create=milk;amount=1'>Make</A><A href='?src=\ref[src];create=milk;amount=5'>x5</A> ([20/efficiency])<BR>"
dat += "10 cream: <A href='?src=\ref[src];create=cream;amount=1'>Make</A><A href='?src=\ref[src];create=cream;amount=5'>x5</A> ([30/efficiency])<BR>"
dat += "Milk carton: <A href='?src=\ref[src];create=cmilk;amount=1'>Make</A><A href='?src=\ref[src];create=cmilk;amount=5'>x5</A> ([100/efficiency])<BR>"
dat += "Cream carton: <A href='?src=\ref[src];create=ccream;amount=1'>Make</A><A href='?src=\ref[src];create=ccream;amount=5'>x5</A> ([300/efficiency])<BR>"
dat += "10u black pepper: <A href='?src=\ref[src];create=bpepper;amount=1'>Make</A><A href='?src=\ref[src];create=bpepper;amount=5'>x5</A> ([25/efficiency])<BR>"
dat += "Pepper mill: <A href='?src=\ref[src];create=mpepper;amount=1'>Make</A><A href='?src=\ref[src];create=mpepper;amount=5'>x5</A> ([50/efficiency])<BR>"
dat += "Monkey cube: <A href='?src=\ref[src];create=meat;amount=1'>Make</A><A href='?src=\ref[src];create=meat;amount=5'>x5</A> ([250/efficiency])"
dat += "</div>"
dat += "<h3>Botany Chemicals:</h3>"
dat += "<div class='statusDisplay'>"
dat += "E-Z-Nutrient: <A href='?src=\ref[src];create=ez;amount=1'>Make</A><A href='?src=\ref[src];create=ez;amount=5'>x5</A> ([10/efficiency])<BR>"
dat += "Left 4 Zed: <A href='?src=\ref[src];create=l4z;amount=1'>Make</A><A href='?src=\ref[src];create=l4z;amount=5'>x5</A> ([20/efficiency])<BR>"
dat += "Robust Harvest: <A href='?src=\ref[src];create=rh;amount=1'>Make</A><A href='?src=\ref[src];create=rh;amount=5'>x5</A> ([25/efficiency])<BR>"
dat += "Weed Killer: <A href='?src=\ref[src];create=wk;amount=1'>Make</A><A href='?src=\ref[src];create=wk;amount=5'>x5</A> ([50/efficiency])<BR>"
dat += "Pest Killer: <A href='?src=\ref[src];create=pk;amount=1'>Make</A><A href='?src=\ref[src];create=pk;amount=5'>x5</A> ([50/efficiency])<BR>"
dat += "Empty bottle: <A href='?src=\ref[src];create=empty;amount=1'>Make</A><A href='?src=\ref[src];create=empty;amount=5'>x5</A> ([5/efficiency])<BR>"
dat += "</div>"
dat += "<h3>Leather and Cloth:</h3>"
dat += "<div class='statusDisplay'>"
dat += "Roll of cloth: <A href='?src=\ref[src];create=cloth;amount=1'>Make</A><A href='?src=\ref[src];create=tencloth;amount=1'>x10</A> ([50/efficiency])<BR>"
dat += "Wallet: <A href='?src=\ref[src];create=wallet;amount=1'>Make</A> ([100/efficiency])<BR>"
dat += "Botanical gloves: <A href='?src=\ref[src];create=gloves;amount=1'>Make</A> ([250/efficiency])<BR>"
dat += "Utility belt: <A href='?src=\ref[src];create=tbelt;amount=1'>Make</A> ([300/efficiency])<BR>"
dat += "Security belt: <A href='?src=\ref[src];create=sbelt;amount=1'>Make</A> ([300/efficiency])<BR>"
dat += "Medical belt: <A href='?src=\ref[src];create=mbelt;amount=1'>Make</A> ([300/efficiency])<BR>"
dat += "Janitorial belt: <A href='?src=\ref[src];create=jbelt;amount=1'>Make</A> ([300/efficiency])<BR>"
dat += "Bandolier belt: <A href='?src=\ref[src];create=bbelt;amount=1'>Make</A> ([300/efficiency])<BR>"
dat += "Shoulder holster: <A href='?src=\ref[src];create=sholster;amount=1'>Make</A> ([400/efficiency])<BR>"
dat += "Leather satchel: <A href='?src=\ref[src];create=satchel;amount=1'>Make</A> ([400/efficiency])<BR>"
dat += "Leather jacket: <A href='?src=\ref[src];create=jacket;amount=1'>Make</A> ([500/efficiency])<BR>"
dat += "Leather overcoat: <A href='?src=\ref[src];create=overcoat;amount=1'>Make</A> ([1000/efficiency])<BR>"
dat += "Rice hat: <A href='?src=\ref[src];create=rice_hat;amount=1'>Make</A> ([300/efficiency])<BR>"
dat += "</div>"
else
dat += "<div class='statusDisplay'>No container inside, please insert container.</div>"
@@ -227,7 +211,7 @@
return
if (src.stat != 0) //NOPOWER etc
return
if(processing)
if(src.processing)
usr << "<span class='warning'>The biogenerator is in the process of working.</span>"
return
var/S = 0
@@ -250,62 +234,142 @@
menustat = "void"
return
/obj/machinery/biogenerator/proc/check_cost(list/materials, multiplier = 1, remove_points = 1)
if(materials.len != 1 || materials[1] != MAT_BIOMASS)
return 0
if (materials[MAT_BIOMASS]*multiplier/efficiency > points)
/obj/machinery/biogenerator/proc/check_cost(cost)
if (cost > points)
menustat = "nopoints"
return 0
return 1
else
if(remove_points)
points -= materials[MAT_BIOMASS]*multiplier/efficiency
points -= cost
processing = 1
update_icon()
updateUsrDialog()
return 0
/obj/machinery/biogenerator/proc/check_container_volume(reagent_amount)
if(beaker.reagents.total_volume + reagent_amount > beaker.reagents.maximum_volume)
menustat = "nobeakerspace"
return 1
/obj/machinery/biogenerator/proc/check_container_volume(list/reagents, multiplier = 1)
var/sum_reagents = 0
for(var/R in reagents)
sum_reagents += reagents[R]
sum_reagents *= multiplier
if(beaker.reagents.total_volume + sum_reagents > beaker.reagents.maximum_volume)
menustat = "nobeakerspace"
return 0
return 1
/obj/machinery/biogenerator/proc/create_product(datum/design/D, amount)
if(!beaker || !loc)
return 0
if(ispath(D.build_path, /obj/item/stack))
if(!check_container_volume(D.make_reagents, amount))
return 0
if(!check_cost(D.materials, amount))
return 0
var/obj/item/stack/product = new D.build_path(loc)
product.amount = amount
for(var/R in D.make_reagents)
beaker.reagents.add_reagent(R, D.make_reagents[R]*amount)
else
var/i = amount
while(i > 0)
if(!check_container_volume(D.make_reagents))
return .
if(!check_cost(D.materials))
return .
if(D.build_path)
new D.build_path(loc)
for(var/R in D.make_reagents)
beaker.reagents.add_reagent(R, D.make_reagents[R])
. = 1
--i
/obj/machinery/biogenerator/proc/create_product(create)
switch(create)
if("milk")
if(check_container_volume(10))
return 0
else if (check_cost(20/efficiency))
return 0
else beaker.reagents.add_reagent("milk",10)
if("bpepper")
if(check_container_volume(10))
return 0
else if (check_cost(25/efficiency))
return 0
else beaker.reagents.add_reagent("blackpepper",10)
if("cream")
if(check_container_volume(10))
return 0
else if (check_cost(30/efficiency))
return 0
else beaker.reagents.add_reagent("cream",10)
if("cmilk")
if (check_cost(100/efficiency))
return 0
else new/obj/item/weapon/reagent_containers/food/condiment/milk(src.loc)
if("mpepper")
if (check_cost(50/efficiency))
return 0
else new/obj/item/weapon/reagent_containers/food/condiment/peppermill(src.loc)
if("ccream")
if (check_cost(300/efficiency))
return 0
else new/obj/item/weapon/reagent_containers/food/drinks/bottle/cream(src.loc)
if("meat")
if (check_cost(250/efficiency))
return 0
else new/obj/item/weapon/reagent_containers/food/snacks/monkeycube(src.loc)
if("ez")
if (check_cost(10/efficiency))
return 0
else new/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez(src.loc)
if("l4z")
if (check_cost(20/efficiency))
return 0
else new/obj/item/weapon/reagent_containers/glass/bottle/nutrient/l4z(src.loc)
if("rh")
if (check_cost(25/efficiency))
return 0
else new/obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh(src.loc)
if("wk")
if (check_cost(50/efficiency))
return 0
else new/obj/item/weapon/reagent_containers/glass/bottle/killer/weedkiller(src.loc)
if("pk")
if (check_cost(50/efficiency))
return 0
else new/obj/item/weapon/reagent_containers/glass/bottle/killer/pestkiller(src.loc)
if("empty")
if (check_cost(5/efficiency))
return 0
else new/obj/item/weapon/reagent_containers/glass/bottle/nutrient/empty(src.loc)
if("cloth")
if (check_cost(50/efficiency))
return 0
else new/obj/item/stack/sheet/cloth(src.loc)
if("tencloth")
if (check_cost(500/efficiency))
return 0
else new/obj/item/stack/sheet/cloth/ten(src.loc)
if("wallet")
if (check_cost(100/efficiency))
return 0
else new/obj/item/weapon/storage/wallet(src.loc)
if("gloves")
if (check_cost(250/efficiency))
return 0
else new/obj/item/clothing/gloves/botanic_leather(src.loc)
if("tbelt")
if (check_cost(300/efficiency))
return 0
else new/obj/item/weapon/storage/belt/utility(src.loc)
if("sbelt")
if (check_cost(300/efficiency))
return 0
else new/obj/item/weapon/storage/belt/security(src.loc)
if("mbelt")
if (check_cost(300/efficiency))
return 0
else new/obj/item/weapon/storage/belt/medical(src.loc)
if("jbelt")
if (check_cost(300/efficiency))
return 0
else new/obj/item/weapon/storage/belt/janitor(src.loc)
if("bbelt")
if (check_cost(300/efficiency))
return 0
else new/obj/item/weapon/storage/belt/bandolier(src.loc)
if("sholster")
if (check_cost(400/efficiency))
return 0
else new/obj/item/weapon/storage/belt/holster(src.loc)
if("satchel")
if (check_cost(400/efficiency))
return 0
else new/obj/item/weapon/storage/backpack/satchel(src.loc)
if("jacket")
if (check_cost(500/efficiency))
return 0
else new/obj/item/clothing/suit/jacket/leather(src.loc)
if("overcoat")
if (check_cost(1000/efficiency))
return 0
else new/obj/item/clothing/suit/jacket/leather/overcoat(src.loc)
if("rice_hat")
if (check_cost(300/efficiency))
return 0
else new/obj/item/clothing/head/rice_hat(src.loc)
processing = 0
menustat = "complete"
update_icon()
return .
return 1
/obj/machinery/biogenerator/proc/detach()
if(beaker)
@@ -329,8 +393,13 @@
else if(href_list["create"])
var/amount = (text2num(href_list["amount"]))
var/datum/design/D = locate(href_list["create"])
create_product(D, amount)
var/i = amount
var/C = href_list["create"]
if(i <= 0)
return
while(i >= 1)
create_product(C)
i--
updateUsrDialog()
else if(href_list["menu"])
+6 -8
View File
@@ -66,7 +66,7 @@
return
if(default_deconstruction_crowbar(I))
return
if(iscyborg(user))
if(isrobot(user))
return
if(istype(I, /obj/item/seeds))
@@ -104,7 +104,7 @@
return
var/datum/browser/popup = new(user, "plantdna", "Plant DNA Manipulator", 450, 600)
if(!(in_range(src, user) || issilicon(user)))
if(!( in_range(src, user) || istype(user, /mob/living/silicon) ))
popup.close()
return
@@ -234,7 +234,7 @@
update_genes()
update_icon()
else
var/obj/item/I = usr.get_active_held_item()
var/obj/item/I = usr.get_active_hand()
if (istype(I, /obj/item/seeds))
if(!usr.drop_item())
return
@@ -248,7 +248,7 @@
disk = null
update_genes()
else
var/obj/item/I = usr.get_active_held_item()
var/obj/item/I = usr.get_active_hand()
if(istype(I, /obj/item/weapon/disk/plantgene))
if(!usr.drop_item())
return
@@ -338,9 +338,7 @@
/datum/plant_gene/core/yield,
/datum/plant_gene/core/production,
/datum/plant_gene/core/endurance,
/datum/plant_gene/core/lifespan,
/datum/plant_gene/core/weed_rate,
/datum/plant_gene/core/weed_chance
/datum/plant_gene/core/lifespan
)
for(var/a in gene_paths)
core_genes += seed.get_gene(a)
@@ -398,7 +396,7 @@
..()
if(istype(W, /obj/item/weapon/pen))
var/t = stripped_input(user, "What would you like the label to be?", name, null)
if(user.get_active_held_item() != W)
if(user.get_active_hand() != W)
return
if(!in_range(src, user) && loc != user)
return
+18 -45
View File
@@ -14,7 +14,7 @@
dried_type = -1
// Saves us from having to define each stupid grown's dried_type as itself.
// If you don't want a plant to be driable (watermelons) set this to null in the time definition.
resistance_flags = FLAMMABLE
burn_state = FLAMMABLE
origin_tech = "biotech=1"
/obj/item/weapon/reagent_containers/food/snacks/grown/New(newloc, var/obj/item/seeds/new_seed = null)
@@ -38,6 +38,9 @@
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()
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
if(G)
set_light(G.get_lum(seed))
@@ -80,10 +83,8 @@
msg += reag_txt
msg += "<br><span class='info'>*---------*</span>"
user << msg
else
if(seed)
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_attackby(src, O, user)
return
return
// Various gene procs
@@ -94,11 +95,8 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom)
if(!..()) //was it caught by a mob?
if(seed)
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_throw_impact(src, hit_atom)
if(seed.get_gene(/datum/plant_gene/trait/squash))
squash(hit_atom)
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)
@@ -111,7 +109,10 @@
new splat_type(T)
if(trash)
generate_trash(T)
if(ispath(trash, /obj/item/weapon/grown) || ispath(trash, /obj/item/weapon/reagent_containers/food/snacks/grown))
new trash(T, seed)
else
new trash(T)
visible_message("<span class='warning'>[src] has been squashed.</span>","<span class='italics'>You hear a smack.</span>")
if(seed)
@@ -136,43 +137,15 @@
T.on_cross(src, AM)
..()
// Glow gene procs
/obj/item/weapon/reagent_containers/food/snacks/grown/Destroy()
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)
..()
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)
..()
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))
/obj/item/weapon/reagent_containers/food/snacks/grown/generate_trash(atom/location)
if(trash && ispath(trash, /obj/item/weapon/grown))
. = new trash(location, seed)
trash = null
return
return ..()
// For item-containing growns such as eggy or gatfruit
/obj/item/weapon/reagent_containers/food/snacks/grown/shell/attack_self(mob/user)
/obj/item/weapon/reagent_containers/food/snacks/grown/shell/attack_self(mob/user as mob)
user.unEquip(src)
if(trash)
var/obj/item/T = generate_trash()
var/obj/item/weapon/T
if(ispath(trash, /obj/item/weapon/grown) || ispath(trash, /obj/item/weapon/reagent_containers/food/snacks/grown))
T = new trash(user.loc, seed)
else
T = new trash(user.loc)
user.put_in_hands(T)
user << "<span class='notice'>You open [src]\'s shell, revealing \a [T].</span>"
qdel(src)
+1 -2
View File
@@ -21,7 +21,6 @@
yield = 6
potency = 5
icon_dead = "ambrosia-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/ambrosia/deus)
reagents_add = list("space_drugs" = 0.15, "bicaridine" = 0.1, "kelotane" = 0.1, "vitamin" = 0.04, "nutriment" = 0.05, "toxin" = 0.1)
@@ -62,7 +61,7 @@
mutatelist = list()
reagents_add = list("earthsblood" = 0.05, "nutriment" = 0.06, "vitamin" = 0.05)
rarity = 30 //These are some pretty good plants right here
genes = list()
oneharvest = TRUE
weed_rate = 4
weed_chance = 100
-1
View File
@@ -12,7 +12,6 @@
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "apple-grow"
icon_dead = "apple-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/apple/gold)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1)
+5 -5
View File
@@ -10,7 +10,7 @@
endurance = 30
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_dead = "banana-dead"
genes = list(/datum/plant_gene/trait/slip, /datum/plant_gene/trait/repeated_harvest)
genes = list(/datum/plant_gene/trait/slip)
mutatelist = list(/obj/item/seeds/banana/mime, /obj/item/seeds/banana/bluespace)
reagents_add = list("banana" = 0.1, "potassium" = 0.1, "vitamin" = 0.04, "nutriment" = 0.02)
@@ -25,7 +25,7 @@
bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is aiming [src] at [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!</span>")
user.visible_message("<span class='suicide'>[user] is aiming the [src.name] at themself! It looks like \he's trying to commit suicide.</span>")
playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1)
sleep(25)
if(!user)
@@ -43,13 +43,13 @@
desc = "A peel from a banana."
icon_state = "banana_peel"
item_state = "banana_peel"
w_class = WEIGHT_CLASS_TINY
w_class = 1
throwforce = 0
throw_speed = 3
throw_range = 7
/obj/item/weapon/grown/bananapeel/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is deliberately slipping on [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
user.visible_message("<span class='suicide'>[user] is deliberately slipping on the [src.name]! It looks like \he's trying to commit suicide.</span>")
playsound(loc, 'sound/misc/slip.ogg', 50, 1, -1)
return (BRUTELOSS)
@@ -91,7 +91,7 @@
plantname = "Bluespace Banana Tree"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/banana/bluespace
mutatelist = list()
genes = list(/datum/plant_gene/trait/slip, /datum/plant_gene/trait/teleport, /datum/plant_gene/trait/repeated_harvest)
genes = list(/datum/plant_gene/trait/slip, /datum/plant_gene/trait/teleport)
reagents_add = list("singulo" = 0.2, "banana" = 0.1, "vitamin" = 0.04, "nutriment" = 0.02)
rarity = 30
-1
View File
@@ -13,7 +13,6 @@
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
icon_grow = "soybean-grow"
icon_dead = "soybean-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/soya/koi)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05)
+1 -4
View File
@@ -13,7 +13,6 @@
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "berry-grow" // Uses one growth icons set for all the subtypes
icon_dead = "berry-dead" // Same for the dead icon
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/berry/glow, /obj/item/seeds/berry/poison)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1)
@@ -77,7 +76,7 @@
lifespan = 30
endurance = 25
mutatelist = list()
genes = list(/datum/plant_gene/trait/glow/berry , /datum/plant_gene/trait/noreact, /datum/plant_gene/trait/repeated_harvest)
genes = list(/datum/plant_gene/trait/glow/berry)
reagents_add = list("uranium" = 0.25, "iodine" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1)
rarity = 20
@@ -105,7 +104,6 @@
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "cherry-grow"
icon_dead = "cherry-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/cherry/blue)
reagents_add = list("nutriment" = 0.07, "sugar" = 0.07)
@@ -155,7 +153,6 @@
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "grape-grow"
icon_dead = "grape-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/grape/green)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1, "sugar" = 0.1)
-118
View File
@@ -1,118 +0,0 @@
// Cannabis
/obj/item/seeds/cannabis
name = "pack of cannabis seeds"
desc = "Taxable."
icon_state = "seed-cannabis"
species = "cannabis"
plantname = "Cannabis Plant"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis
maturation = 8
potency = 20
growthstages = 1
growing_icon = 'goon/icons/obj/hydroponics.dmi'
icon_grow = "cannabis-grow" // Uses one growth icons set for all the subtypes
icon_dead = "cannabis-dead" // Same for the dead icon
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/cannabis/rainbow,
/obj/item/seeds/cannabis/death,
/obj/item/seeds/cannabis/white,
/obj/item/seeds/cannabis/ultimate)
reagents_add = list("space_drugs" = 0.15, "lipolicide" = 0.35) // gives u the munchies
/obj/item/seeds/cannabis/rainbow
name = "pack of rainbow weed seeds"
desc = "These seeds grow into rainbow weed. Groovy."
icon_state = "seed-megacannabis"
species = "megacannabis"
plantname = "Rainbow Weed"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/rainbow
mutatelist = list()
reagents_add = list("mindbreaker" = 0.15, "lipolicide" = 0.35)
rarity = 40
/obj/item/seeds/cannabis/death
name = "pack of deathweed seeds"
desc = "These seeds grow into deathweed. Not groovy."
icon_state = "seed-blackcannabis"
species = "blackcannabis"
plantname = "Deathweed"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/death
mutatelist = list()
reagents_add = list("cyanide" = 0.35, "space_drugs" = 0.15, "lipolicide" = 0.15)
rarity = 40
/obj/item/seeds/cannabis/white
name = "pack of lifeweed seeds"
desc = "I will give unto him that is munchies of the fountain of the cravings of life, freely."
icon_state = "seed-whitecannabis"
species = "whitecannabis"
plantname = "Lifeweed"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/white
mutatelist = list()
reagents_add = list("omnizine" = 0.35, "space_drugs" = 0.15, "lipolicide" = 0.15)
rarity = 40
/obj/item/seeds/cannabis/ultimate
name = "pack of omega weed seeds"
desc = "These seeds grow into omega weed."
icon_state = "seed-ocannabis"
species = "ocannabis"
plantname = "Omega Weed"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/ultimate
mutatelist = list()
reagents_add = list("space_drugs" = 0.3,
"mindbreaker" = 0.3,
"mercury" = 0.15,
"lithium" = 0.15,
"atropine" = 0.15,
"haloperidol" = 0.15,
"methamphetamine" = 0.15,
"capsaicin" = 0.15,
"barbers_aid" = 0.15,
"bath_salts" = 0.15,
"itching_powder" = 0.15,
"crank" = 0.15,
"krokodil" = 0.15,
"histamine" = 0.15,
"lipolicide" = 0.15)
rarity = 69
// ---------------------------------------------------------------
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis
seed = /obj/item/seeds/cannabis
icon = 'goon/icons/obj/hydroponics.dmi'
name = "cannabis leaf"
desc = "Recently legalized in most galaxies."
icon_state = "cannabis"
filling_color = "#00FF00"
bitesize_mod = 2
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/rainbow
seed = /obj/item/seeds/cannabis/rainbow
name = "rainbow cannabis leaf"
desc = "Is it supposed to be glowing like that...?"
icon_state = "megacannabis"
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/death
seed = /obj/item/seeds/cannabis/death
name = "death cannabis leaf"
desc = "Looks a bit dark. Oh well."
icon_state = "blackcannabis"
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/white
seed = /obj/item/seeds/cannabis/white
name = "white cannabis leaf"
desc = "It feels smooth and nice to the touch."
icon_state = "whitecannabis"
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/ultimate
seed = /obj/item/seeds/cannabis/ultimate
name = "omega cannibas leaf"
desc = "You feel dizzy looking at it. What the fuck?"
icon_state = "ocannabis"
volume = 420
@@ -9,6 +9,7 @@
production = 1
yield = 4
potency = 15
oneharvest = 1
icon_dead = "wheat-dead"
mutatelist = list(/obj/item/seeds/wheat/oat, /obj/item/seeds/wheat/meat)
reagents_add = list("nutriment" = 0.04)
+2 -3
View File
@@ -14,7 +14,6 @@
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
icon_grow = "chili-grow" // Uses one growth icons set for all the subtypes
icon_dead = "chili-dead" // Same for the dead icon
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/chili/ice, /obj/item/seeds/chili/ghost)
reagents_add = list("capsaicin" = 0.25, "vitamin" = 0.04, "nutriment" = 0.04)
@@ -56,7 +55,7 @@
desc = "These seeds grow into a chili said to be the hottest in the galaxy."
icon_state = "seed-chilighost"
species = "chilighost"
plantname = "Ghost Chili Plants"
plantname = "chilighost"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili
endurance = 10
maturation = 10
@@ -84,7 +83,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili/process()
if(held_mob && src.loc == held_mob)
if(held_mob.is_holding(src))
if( (held_mob.l_hand == src) || (held_mob.r_hand == src))
if(hasvar(held_mob,"gloves") && held_mob:gloves)
return
held_mob.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT
+33 -65
View File
@@ -19,7 +19,6 @@
yield = 4
potency = 15
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/orange)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05)
@@ -45,7 +44,6 @@
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "lime-grow"
icon_dead = "lime-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/lime)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05)
@@ -70,86 +68,56 @@
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "lime-grow"
icon_dead = "lime-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/firelemon)
mutatelist = list(/obj/item/seeds/cash)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05)
/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lemon
seed = /obj/item/seeds/lemon
name = "lemon"
desc = "When life gives you lemons, make lemonade."
desc = "When life gives you lemons, be grateful they aren't limes."
icon_state = "lemon"
filling_color = "#FFD700"
// Combustible lemon
/obj/item/seeds/firelemon //combustible lemon is too long so firelemon
name = "pack of combustible lemon seeds"
desc = "When life gives you lemons, don't make lemonade. Make life take the lemons back! Get mad! I don't want your damn lemons!"
icon_state = "seed-firelemon"
species = "firelemon"
plantname = "Combustible Lemon Tree"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/firelemon
// Money Lemon
/obj/item/seeds/cash
name = "pack of money seeds"
desc = "When life gives you lemons, mutate them into cash."
icon_state = "seed-cash"
species = "cashtree"
plantname = "Money Tree"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/shell/moneyfruit
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "lime-grow"
icon_dead = "lime-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
lifespan = 55
endurance = 45
yield = 4
reagents_add = list("nutriment" = 0.05)
rarity = 50 // Nanotrasen approves...
/obj/item/weapon/reagent_containers/food/snacks/grown/firelemon
seed = /obj/item/seeds/firelemon
name = "Combustible Lemon"
desc = "Made for burning houses down."
icon_state = "firelemon"
/obj/item/weapon/reagent_containers/food/snacks/grown/shell/moneyfruit
seed = /obj/item/seeds/cash
name = "Money Fruit"
desc = "Looks like a lemon with something bulging from the inside."
icon_state = "moneyfruit"
bitesize_mod = 2
/obj/item/weapon/reagent_containers/food/snacks/grown/firelemon/attack_self(mob/living/user)
var/area/A = get_area(user)
user.visible_message("<span class='warning'>[user] primes the [src]!</span>", "<span class='userdanger'>You prime the [src]!</span>")
var/message = "[ADMIN_LOOKUPFLW(user)] primed a combustible lemon for detonation at [A] [ADMIN_COORDJMP(user)]"
bombers += message
message_admins(message)
log_game("[key_name(user)] primed a combustible lemon for detonation at [A] [COORD(user)].")
if(iscarbon(user))
var/mob/living/carbon/C = user
C.throw_mode_on()
icon_state = "firelemon_active"
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
addtimer(src, "prime", rand(10, 60))
/obj/item/weapon/reagent_containers/food/snacks/grown/firelemon/burn()
prime()
/obj/item/weapon/reagent_containers/food/snacks/grown/shell/moneyfruit/add_juice()
..()
/obj/item/weapon/reagent_containers/food/snacks/grown/firelemon/proc/update_mob()
if(ismob(loc))
var/mob/M = loc
M.unEquip(src)
/obj/item/weapon/reagent_containers/food/snacks/grown/firelemon/ex_act(severity)
qdel(src) //Ensuring that it's deleted by its own explosion
/obj/item/weapon/reagent_containers/food/snacks/grown/firelemon/proc/prime()
switch(seed.potency) //Combustible lemons are alot like IEDs, lots of flame, very little bang.
if(0 to 30)
update_mob()
explosion(src.loc,-1,-1,2, flame_range = 1)
qdel(src)
if(31 to 50)
update_mob()
explosion(src.loc,-1,-1,2, flame_range = 2)
qdel(src)
if(51 to 70)
update_mob()
explosion(src.loc,-1,-1,2, flame_range = 3)
qdel(src)
if(71 to 90)
update_mob()
explosion(src.loc,-1,-1,2, flame_range = 4)
qdel(src)
switch(seed.potency)
if(0 to 10)
trash = /obj/item/stack/spacecash
if(11 to 20)
trash = /obj/item/stack/spacecash/c10
if(21 to 30)
trash = /obj/item/stack/spacecash/c20
if(31 to 40)
trash = /obj/item/stack/spacecash/c50
if(41 to 50)
trash = /obj/item/stack/spacecash/c100
if(51 to 60)
trash = /obj/item/stack/spacecash/c200
if(61 to 80)
trash = /obj/item/stack/spacecash/c500
else
update_mob()
explosion(src.loc,-1,-1,2, flame_range = 5)
qdel(src)
trash = /obj/item/stack/spacecash/c1000
@@ -14,7 +14,6 @@
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "cocoapod-grow"
icon_dead = "cocoapod-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/cocoapod/vanillapod)
reagents_add = list("cocoa" = 0.25, "nutriment" = 0.1)
@@ -34,7 +33,6 @@
species = "vanillapod"
plantname = "Vanilla Tree"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/vanillapod
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list()
reagents_add = list("vanilla" = 0.25, "nutriment" = 0.1)
+4 -4
View File
@@ -7,6 +7,7 @@
plantname = "Corn Stalks"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/corn
maturation = 8
oneharvest = 1
potency = 20
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
@@ -30,20 +31,19 @@
desc = "A reminder of meals gone by."
icon_state = "corncob"
item_state = "corncob"
w_class = WEIGHT_CLASS_TINY
w_class = 1
throwforce = 0
throw_speed = 3
throw_range = 7
/obj/item/weapon/grown/corncob/attackby(obj/item/weapon/grown/W, mob/user, params)
..()
if(W.is_sharp())
user << "<span class='notice'>You use [W] to fashion a pipe out of the corn cob!</span>"
new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc)
user.unEquip(src)
qdel(src)
return
else
return ..()
// Snapcorn
/obj/item/seeds/corn/snapcorn
@@ -62,7 +62,7 @@
desc = "A cob with snap pops"
icon_state = "snapcorn"
item_state = "corncob"
w_class = WEIGHT_CLASS_TINY
w_class = 1
throwforce = 0
throw_speed = 3
throw_range = 7
@@ -11,7 +11,6 @@
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
icon_grow = "eggplant-grow"
icon_dead = "eggplant-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/eggplant/eggy)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1)
+8 -6
View File
@@ -10,6 +10,7 @@
maturation = 8
yield = 6
potency = 20
oneharvest = 1
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
icon_grow = "poppy-grow"
@@ -75,8 +76,9 @@
production = 1
yield = 2
potency = 30
oneharvest = 1
growthstages = 4
genes = list(/datum/plant_gene/trait/plant_type/weed_hardy)
plant_type = PLANT_WEED
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
reagents_add = list("nutriment" = 0.04)
@@ -101,6 +103,7 @@
endurance = 20
production = 2
yield = 2
oneharvest = 1
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
icon_grow = "sunflower-grow"
@@ -117,7 +120,7 @@
force = 0
slot_flags = SLOT_HEAD
throwforce = 0
w_class = WEIGHT_CLASS_TINY
w_class = 1
throw_speed = 1
throw_range = 3
@@ -167,7 +170,7 @@
force = 0
slot_flags = SLOT_HEAD
throwforce = 0
w_class = WEIGHT_CLASS_TINY
w_class = 1
throw_speed = 1
throw_range = 3
attack_verb = list("roasted", "scorched", "burned")
@@ -177,9 +180,8 @@
force = round((5 + seed.potency / 5), 1)
/obj/item/weapon/grown/novaflower/attack(mob/living/carbon/M, mob/user)
if(!..())
return
if(isliving(M))
if(!..()) return
if(istype(M, /mob/living))
M << "<span class='danger'>You are lit on fire from the intense heat of the [name]!</span>"
M.adjust_fire_stacks(seed.potency / 20)
if(M.IgniteMob())
+33 -21
View File
@@ -14,7 +14,6 @@
growthstages = 2
icon_grow = "grass-grow"
icon_dead = "grass-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/grass/carpet)
reagents_add = list("nutriment" = 0.02, "hydrogen" = 0.05)
@@ -25,28 +24,23 @@
icon_state = "grassclump"
filling_color = "#32CD32"
bitesize_mod = 2
var/stacktype = /obj/item/stack/tile/grass
var/tile_coefficient = 0.02 // 1/50
/obj/item/weapon/reagent_containers/food/snacks/grown/grass/attack_self(mob/user)
user << "<span class='notice'>You prepare the astroturf.</span>"
var/grassAmt = 1 + round(seed.potency * tile_coefficient) // The grass we're holding
var/grassAmt = 1 + round(seed.potency / 50) // The grass we're holding
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/grass/G in user.loc) // The grass on the floor
if(G.type != type)
continue
grassAmt += 1 + round(G.seed.potency * tile_coefficient)
grassAmt += 1 + round(G.seed.potency)
qdel(G)
var/obj/item/stack/tile/GT = new stacktype(user.loc)
while(grassAmt > GT.max_amount)
GT.amount = GT.max_amount
while(grassAmt > 0)
var/obj/item/stack/tile/GT = new /obj/item/stack/tile/grass(user.loc)
if(grassAmt >= GT.max_amount)
GT.amount = GT.max_amount
else
GT.amount = grassAmt
for(var/obj/item/stack/tile/grass/GR in user.loc)
if(GR != GT && GR.amount < GR.max_amount)
GR.attackby(GT, user) //we try to transfer all old unfinished stacks to the new stack we created.
grassAmt -= GT.max_amount
GT = new stacktype(user.loc)
GT.amount = grassAmt
for(var/obj/item/stack/tile/T in user.loc)
if((T.type == stacktype) && (T.amount < T.max_amount))
GT.merge(T)
if(GT.amount <= 0)
break
qdel(src)
return
@@ -57,13 +51,31 @@
icon_state = "seed-carpet"
species = "carpet"
plantname = "Carpet"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/grass/carpet
mutatelist = list()
product = /obj/item/weapon/reagent_containers/food/snacks/grown/carpet
mutatelist = list(/obj/item/seeds/grass/carpet)
rarity = 10
/obj/item/weapon/reagent_containers/food/snacks/grown/grass/carpet
/obj/item/weapon/reagent_containers/food/snacks/grown/carpet
seed = /obj/item/seeds/grass/carpet
name = "carpet"
desc = "The textile industry's dark secret."
icon_state = "carpetclump"
stacktype = /obj/item/stack/tile/carpet
/obj/item/weapon/reagent_containers/food/snacks/grown/carpet/attack_self(mob/user)
user << "<span class='notice'>You roll out the red carpet.</span>"
var/carpetAmt = 1 + round(seed.potency / 50) // The carpet we're holding
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/carpet/C in user.loc) // The carpet on the floor
carpetAmt += 1 + round(C.seed.potency / 50)
qdel(C)
while(carpetAmt > 0)
var/obj/item/stack/tile/CT = new /obj/item/stack/tile/carpet(user.loc)
if(carpetAmt >= CT.max_amount)
CT.amount = CT.max_amount
else
CT.amount = carpetAmt
for(var/obj/item/stack/tile/carpet/CA in user.loc)
if(CA != CT && CA.amount < CA.max_amount)
CA.attackby(CT, user) //we try to transfer all old unfinished stacks to the new stack we created.
carpetAmt -= CT.max_amount
qdel(src)
return
+7 -14
View File
@@ -7,11 +7,11 @@
species = "kudzu"
plantname = "Kudzu"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy)
lifespan = 20
endurance = 10
yield = 4
growthstages = 4
plant_type = PLANT_WEED
rarity = 30
var/list/mutations = list()
reagents_add = list("charcoal" = 0.04, "nutriment" = 0.02)
@@ -22,12 +22,12 @@
return S
/obj/item/seeds/kudzu/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] swallows the pack of kudzu seeds! It looks like [user.p_theyre()] trying to commit suicide!</span>")
user.visible_message("<span class='suicide'>[user] swallows the pack of kudzu seeds! It looks like \he's trying to commit suicide..</span>")
plant(user)
return (BRUTELOSS)
/obj/item/seeds/kudzu/proc/plant(mob/user)
if(isspaceturf(user.loc))
if(istype(user.loc,/turf/open/space))
return
var/turf/T = get_turf(src)
message_admins("Kudzu planted by [key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) at ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>(JMP)</a>)",0,1)
@@ -57,7 +57,6 @@
if(prob(20))
mutations.Remove(pick(temp_mut_list))
temp_mut_list.Cut()
if(S.has_reagent("welding_fuel", 5))
for(var/datum/spacevine_mutation/SM in mutations)
if(SM.quality == POSITIVE)
@@ -65,26 +64,20 @@
if(prob(20))
mutations.Remove(pick(temp_mut_list))
temp_mut_list.Cut()
if(S.has_reagent("phenol", 5))
for(var/datum/spacevine_mutation/SM in mutations)
if(SM.quality == MINOR_NEGATIVE)
temp_mut_list += SM
if(prob(20))
mutations.Remove(pick(temp_mut_list))
temp_mut_list.Cut()
if(S.has_reagent("blood", 15))
production = Clamp(production + rand(15, -5),1,10)
production += rand(15, -5)
if(S.has_reagent("amatoxin", 5))
production = Clamp(production + rand(5, -15),1,10)
production += rand(5, -15)
if(S.has_reagent("plasma", 5))
potency = Clamp(potency + rand(5, -15),0,100)
potency += rand(5, -15)
if(S.has_reagent("holywater", 10))
potency = Clamp(potency + rand(15, -5),0,100)
potency += rand(15, -5)
/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod
+3 -4
View File
@@ -10,9 +10,8 @@
endurance = 40
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_dead = "watermelon-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/watermelon/holy)
reagents_add = list("water" = 0.2, "vitamin" = 0.04, "nutriment" = 0.2)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.2)
/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon
seed = /obj/item/seeds/watermelon
@@ -22,7 +21,7 @@
slice_path = /obj/item/weapon/reagent_containers/food/snacks/watermelonslice
slices_num = 5
dried_type = null
w_class = WEIGHT_CLASS_NORMAL
w_class = 3
filling_color = "#008000"
bitesize_mod = 3
@@ -44,4 +43,4 @@
desc = "The water within this melon has been blessed by some deity that's particularly fond of watermelon."
icon_state = "holymelon"
filling_color = "#FFD700"
dried_type = null
dried_type = null
+8 -14
View File
@@ -11,8 +11,9 @@
production = 1
yield = -1
potency = -1
oneharvest = 1
growthstages = 4
genes = list(/datum/plant_gene/trait/plant_type/weed_hardy)
plant_type = PLANT_WEED
// Cabbage
@@ -30,7 +31,6 @@
yield = 4
growthstages = 1
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/replicapod)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1)
@@ -51,7 +51,6 @@
species = "sugarcane"
plantname = "Sugarcane"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane
genes = list(/datum/plant_gene/trait/repeated_harvest)
lifespan = 60
endurance = 50
maturation = 3
@@ -74,9 +73,8 @@
desc = "These seeds grow into .357 revolvers."
icon_state = "seed-gatfruit"
species = "gatfruit"
plantname = "Gatfruit Tree"
plantname = "gatfruit"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/shell/gatfruit
genes = list(/datum/plant_gene/trait/repeated_harvest)
lifespan = 20
endurance = 20
maturation = 40
@@ -94,7 +92,7 @@
desc = "It smells like burning."
icon_state = "gatfruit"
origin_tech = "combat=6"
trash = /obj/item/weapon/gun/ballistic/revolver
trash = /obj/item/weapon/gun/projectile/revolver
bitesize_mod = 2
//Cherry Bombs
@@ -117,8 +115,6 @@
seed = /obj/item/seeds/cherry/bomb
bitesize_mod = 2
volume = 125 //Gives enough room for the black powder at max potency
obj_integrity = 40
max_integrity = 40
/obj/item/weapon/reagent_containers/food/snacks/grown/cherry_bomb/attack_self(mob/living/user)
var/area/A = get_area(user)
@@ -127,14 +123,12 @@
log_game("[user] ([user.key ? user.key : "no key"]) primed a cherry bomb for detonation at [A] ([user.x],[user.y],[user.z]).")
prime()
/obj/item/weapon/reagent_containers/food/snacks/grown/cherry_bomb/deconstruct(disassembled = TRUE)
if(!disassembled)
prime()
if(!qdeleted(src))
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/grown/cherry_bomb/burn()
prime()
..()
/obj/item/weapon/reagent_containers/food/snacks/grown/cherry_bomb/ex_act(severity)
qdel(src) //Ensuring that it's deleted by its own explosion. Also prevents mass chain reaction with piles of cherry bombs
qdel(src) //Ensuring that it's deleted by its own explosion
/obj/item/weapon/reagent_containers/food/snacks/grown/cherry_bomb/proc/prime()
icon_state = "cherry_bomb_lit"
+24 -16
View File
@@ -17,8 +17,9 @@
production = 5
yield = 4
potency = 15
oneharvest = 1
growthstages = 4
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
plant_type = PLANT_MUSHROOM
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("morphine" = 0.35, "charcoal" = 0.35, "nutriment" = 0)
@@ -43,11 +44,12 @@
maturation = 10
production = 5
yield = 4
oneharvest = 1
growthstages = 3
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
plant_type = PLANT_MUSHROOM
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
mutatelist = list(/obj/item/seeds/angel)
reagents_add = list("mushroomhallucinogen" = 0.04, "amatoxin" = 0.35, "nutriment" = 0, "growthserum" = 0.1)
reagents_add = list("mushroomhallucinogen" = 0.04, "amatoxin" = 0.35, "nutriment" = 0)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita
seed = /obj/item/seeds/amanita
@@ -71,8 +73,9 @@
production = 5
yield = 2
potency = 35
oneharvest = 1
growthstages = 3
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
plant_type = PLANT_MUSHROOM
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("mushroomhallucinogen" = 0.04, "amatoxin" = 0.1, "nutriment" = 0, "amanitin" = 0.2)
rarity = 30
@@ -98,8 +101,9 @@
production = 1
yield = 5
potency = 15
oneharvest = 1
growthstages = 3
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
plant_type = PLANT_MUSHROOM
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("mushroomhallucinogen" = 0.25, "nutriment" = 0.02)
@@ -123,8 +127,9 @@
production = 1
yield = 4
potency = 15
oneharvest = 1
growthstages = 3
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
plant_type = PLANT_MUSHROOM
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
mutatelist = list(/obj/item/seeds/plump/walkingmushroom)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1)
@@ -163,7 +168,7 @@
origin_tech = "biotech=4;programming=5"
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user)
if(isspaceturf(user.loc))
if(istype(user.loc,/turf/open/space))
return
var/mob/living/simple_animal/hostile/mushroom/M = new /mob/living/simple_animal/hostile/mushroom(user.loc)
M.maxHealth += round(seed.endurance / 4)
@@ -189,8 +194,9 @@
production = 1
yield = 5
potency = 15
oneharvest = 1
growthstages = 3
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
plant_type = PLANT_MUSHROOM
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("nutriment" = 0.1)
@@ -216,9 +222,11 @@
production = 1
yield = 3 //-> spread
potency = 30 //-> brightness
oneharvest = 1
growthstages = 4
plant_type = PLANT_MUSHROOM
rarity = 20
genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/plant_type/fungal_metabolism)
genes = list(/datum/plant_gene/trait/glow)
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
mutatelist = list(/obj/item/seeds/glowshroom/glowcap)
reagents_add = list("radium" = 0.1, "phosphorus" = 0.1, "nutriment" = 0.04)
@@ -229,16 +237,15 @@
desc = "<I>Mycena Bregprox</I>: This species of mushroom glows in the dark."
icon_state = "glowshroom"
filling_color = "#00FA9A"
var/effect_path = /obj/structure/glowshroom
var/effect_path = /obj/effect/glowshroom
origin_tech = "biotech=4;plasmatech=6"
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user)
if(isspaceturf(user.loc))
if(istype(user.loc,/turf/open/space))
return
var/obj/structure/glowshroom/planted = new effect_path(user.loc)
var/obj/effect/glowshroom/planted = new effect_path(user.loc)
planted.delay = planted.delay - seed.production * 100 //So the delay goes DOWN with better stats instead of up. :I
planted.obj_integrity = seed.endurance
planted.max_integrity = seed.endurance
planted.endurance = seed.endurance
planted.yield = seed.yield
planted.potency = seed.potency
user << "<span class='notice'>You plant [src].</span>"
@@ -254,8 +261,9 @@
icon_grow = "glowshroom-grow"
icon_dead = "glowshroom-dead"
plantname = "Glowcaps"
plant_type = PLANT_MUSHROOM
product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap
genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/plant_type/fungal_metabolism)
genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/cell_charge)
mutatelist = list()
reagents_add = list("teslium" = 0.1, "nutriment" = 0.04)
rarity = 30
@@ -266,5 +274,5 @@
desc = "<I>Mycena Ruthenia</I>: This species of mushroom glows in the dark, but aren't bioluminescent. They're warm to the touch..."
icon_state = "glowcap"
filling_color = "#00FA9A"
effect_path = /obj/structure/glowshroom/glowcap
effect_path = /obj/effect/glowshroom/glowcap
origin_tech = "biotech=4;powerstorage=6;plasmatech=4"
+16 -14
View File
@@ -9,7 +9,7 @@
endurance = 40 // tuff like a toiger
yield = 4
growthstages = 5
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy)
plant_type = PLANT_WEED
mutatelist = list(/obj/item/seeds/nettle/death)
reagents_add = list("sacid" = 0.5)
@@ -23,7 +23,6 @@
endurance = 25
maturation = 8
yield = 2
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy, /datum/plant_gene/trait/stinging)
mutatelist = list()
reagents_add = list("facid" = 0.5, "sacid" = 0.5)
rarity = 20
@@ -37,14 +36,14 @@
force = 15
hitsound = 'sound/weapons/bladeslice.ogg'
throwforce = 5
w_class = WEIGHT_CLASS_TINY
w_class = 1
throw_speed = 1
throw_range = 3
origin_tech = "combat=3"
attack_verb = list("stung")
/obj/item/weapon/grown/nettle/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is eating some of [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
user.visible_message("<span class='suicide'>[user] is eating some of the [src.name]! It looks like \he's trying to commit suicide.</span>")
return (BRUTELOSS|TOXLOSS)
/obj/item/weapon/grown/nettle/pickup(mob/living/user)
@@ -52,13 +51,16 @@
if(!iscarbon(user))
return 0
var/mob/living/carbon/C = user
if(C.gloves)
return 0
var/hit_zone = (C.held_index_to_dir(C.active_hand_index) == "l" ? "l_":"r_") + "arm"
var/obj/item/bodypart/affecting = C.get_bodypart(hit_zone)
if(affecting)
if(affecting.receive_damage(0, force))
C.update_damage_overlays()
if(ishuman(user))
var/mob/living/carbon/human/H = C
if(H.gloves)
return 0
var/organ = ((H.hand ? "l_":"r_") + "arm")
var/obj/item/bodypart/affecting = H.get_bodypart(organ)
if(affecting && affecting.take_damage(0, force))
H.update_damage_overlays(0)
else
C.take_organ_damage(0,force)
C << "<span class='userdanger'>The nettle burns your bare hand!</span>"
return 1
@@ -92,15 +94,15 @@
force = round((5 + seed.potency / 2.5), 1)
/obj/item/weapon/grown/nettle/death/pickup(mob/living/carbon/user)
..()
if(..())
if(prob(50))
user.Paralyse(5)
user << "<span class='userdanger'>You are stunned by the Deathnettle when you try picking it up!</span>"
/obj/item/weapon/grown/nettle/death/attack(mob/living/carbon/M, mob/user)
if(!..())
return
if(isliving(M))
if(!..()) return
if(istype(M, /mob/living))
M << "<span class='danger'>You are stunned by the powerful acid of the Deathnettle!</span>"
add_logs(user, M, "attacked", src)
+23 -19
View File
@@ -10,11 +10,11 @@
maturation = 10
production = 1
yield = 4
oneharvest = 1
growthstages = 4
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
icon_grow = "potato-grow"
icon_dead = "potato-dead"
genes = list(/datum/plant_gene/trait/battery)
mutatelist = list(/obj/item/seeds/potato/sweet)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1)
@@ -26,26 +26,30 @@
filling_color = "#E9967A"
bitesize = 100
/obj/item/weapon/reagent_containers/food/snacks/grown/potato/wedges
name = "potato wedges"
desc = "a potato cut up into wedges"
icon_state = "potato_wedge"
filling_color = "#E9967A"
bitesize = 100
/obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W, mob/user, params)
if(W.is_sharp())
user << "<span class='notice'>You cut the potato into wedges with [W].</span>"
var/obj/item/weapon/reagent_containers/food/snacks/grown/potato/wedges/Wedges = new /obj/item/weapon/reagent_containers/food/snacks/grown/potato/wedges
if(!remove_item_from_storage(user))
user.unEquip(src)
user.put_in_hands(Wedges)
qdel(src)
else
return ..()
..()
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = W
if (C.use(5))
user << "<span class='notice'>You add some cable to the potato and slide it inside the battery encasing.</span>"
var/obj/item/weapon/stock_parts/cell/potato/pocell = new /obj/item/weapon/stock_parts/cell/potato(user.loc)
pocell.maxcharge = seed.potency * 20
// The secret of potato supercells!
var/datum/plant_gene/trait/cell_charge/G = seed.get_gene(/datum/plant_gene/trait/cell_charge)
if(G) // 10x charge for deafult cell charge gene - 20 000 with 100 potency.
pocell.maxcharge *= G.rate*1000
pocell.charge = pocell.maxcharge
pocell.desc = "A rechargable starch based power cell. This one has a power rating of [pocell.maxcharge], and you should not swallow it."
if(reagents.has_reagent("plasma", 2))
pocell.rigged = 1
qdel(src)
return
else
user << "<span class='warning'>You need five lengths of cable to make a potato battery!</span>"
return
// Sweet Potato
/obj/item/seeds/potato/sweet
+3 -5
View File
@@ -12,7 +12,6 @@
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "pumpkin-grow"
icon_dead = "pumpkin-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/pumpkin/blumpkin)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.2)
@@ -25,13 +24,12 @@
bitesize_mod = 2
/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if(W.is_sharp())
user.show_message("<span class='notice'>You carve a face into [src]!</span>", 1)
new /obj/item/clothing/head/hardhat/pumpkinhead(user.loc)
qdel(src)
return
else
return ..()
// Blumpkin
/obj/item/seeds/pumpkin/blumpkin
@@ -42,7 +40,7 @@
plantname = "Blumpkin Vines"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/blumpkin
mutatelist = list()
reagents_add = list("ammonia" = 0.2, "chlorine" = 0.1, "nutriment" = 0.2)
reagents_add = list("ammonia" = 0.2, "chlorine" = 0.2, "nutriment" = 0.2)
rarity = 20
/obj/item/weapon/reagent_containers/food/snacks/grown/blumpkin
@@ -51,4 +49,4 @@
desc = "The pumpkin's toxic sibling."
icon_state = "blumpkin"
filling_color = "#87CEFA"
bitesize_mod = 2
bitesize_mod = 2
-29
View File
@@ -1,29 +0,0 @@
//Random seeds; stats, traits, and plant type are randomized for each seed.
/obj/item/seeds/random
name = "pack of strange seeds"
desc = "Mysterious seeds as strange as their name implies. Spooky"
icon_state = "seed-x"
species = "?????"
plantname = "strange plant"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/random
icon_grow = "xpod-grow"
icon_dead = "xpod-dead"
icon_harvest = "xpod-harvest"
growthstages = 4
/obj/item/seeds/random/New()
randomize_stats()
..()
if(prob(60))
add_random_reagents()
if(prob(50))
add_random_traits()
add_random_plant_type(35)
/obj/item/weapon/reagent_containers/food/snacks/grown/random
seed = /obj/item/seeds/random
name = "strange plant"
desc = "What could this even be?"
icon_state = "crunchy"
bitesize_mod = 2
+7 -8
View File
@@ -12,6 +12,7 @@
maturation = 10
production = 1
yield = 1 //seeds if there isn't a dna inside
oneharvest = 1
potency = 30
var/ckey = null
var/realName = null
@@ -41,8 +42,7 @@
user << "<span class='warning'>The seeds reject the sample!</span>"
else
user << "<span class='warning'>The seeds already contain a genetic sample!</span>"
else
return ..()
..()
/obj/item/seeds/replicapod/get_analyzer_text()
var/text = ..()
@@ -58,7 +58,7 @@
if(config.revival_pod_plants)
if(ckey)
for(var/mob/M in player_list)
if(isobserver(M))
if(istype(M, /mob/dead/observer))
var/mob/dead/observer/O = M
if(O.ckey == ckey && O.can_reenter_corpse)
make_podman = 1
@@ -66,19 +66,19 @@
else
if(M.ckey == ckey && M.stat == DEAD && !M.suiciding)
make_podman = 1
if(isliving(M))
if(istype(M, /mob/living))
var/mob/living/L = M
make_podman = !L.hellbound
break
else //If the player has ghosted from his corpse before blood was drawn, his ckey is no longer attached to the mob, so we need to match up the cloned player through the mind key
for(var/mob/M in player_list)
if(mind && M.mind && ckey(M.mind.key) == ckey(mind.key) && M.ckey && M.client && M.stat == 2 && !M.suiciding)
if(isobserver(M))
if(istype(M, /mob/dead/observer))
var/mob/dead/observer/O = M
if(!O.can_reenter_corpse)
break
make_podman = 1
if(isliving(M))
if(istype(M, /mob/living))
var/mob/living/L = M
make_podman = !L.hellbound
ckey_holder = M.ckey
@@ -106,9 +106,8 @@
var/seed_count = 1
if(prob(getYield() * 20))
seed_count++
var/output_loc = parent.Adjacent(user) ? user.loc : parent.loc //needed for TK
for(var/i=0,i<seed_count,i++)
var/obj/item/seeds/replicapod/harvestseeds = src.Copy()
harvestseeds.forceMove(output_loc)
harvestseeds.forceMove(parent.loc)
parent.update_tray()
+5 -3
View File
@@ -9,6 +9,7 @@
maturation = 10
production = 1
yield = 5
oneharvest = 1
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
mutatelist = list(/obj/item/seeds/carrot/parsnip)
@@ -23,7 +24,7 @@
bitesize_mod = 2
/obj/item/weapon/reagent_containers/food/snacks/grown/carrot/attackby(obj/item/I, mob/user, params)
if(I.is_sharp())
if(istype(I, /obj/item/weapon/kitchen/knife) || istype(I, /obj/item/weapon/hatchet))
user << "<span class='notice'>You sharpen the carrot into a shiv with [I].</span>"
var/obj/item/weapon/kitchen/knife/carrotshiv/Shiv = new /obj/item/weapon/kitchen/knife/carrotshiv
if(!remove_item_from_storage(user))
@@ -64,6 +65,7 @@
lifespan = 60
endurance = 50
yield = 6
oneharvest = 1
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
icon_dead = "whitebeet-dead"
mutatelist = list(/obj/item/seeds/redbeet)
@@ -88,9 +90,9 @@
lifespan = 60
endurance = 50
yield = 6
oneharvest = 1
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
icon_dead = "whitebeet-dead"
genes = list(/datum/plant_gene/trait/maxchem)
reagents_add = list("vitamin" = 0.05, "nutriment" = 0.05)
/obj/item/weapon/reagent_containers/food/snacks/grown/redbeet
@@ -98,4 +100,4 @@
name = "red beet"
desc = "You can't beat red beet."
icon_state = "redbeet"
bitesize_mod = 2
bitesize_mod = 2
@@ -12,7 +12,6 @@
yield = 5
growthstages = 5
icon_dead = "tea-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/tea/astra)
reagents_add = list("vitamin" = 0.04, "teapowder" = 0.1)
@@ -56,7 +55,6 @@
yield = 5
growthstages = 5
icon_dead = "coffee-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/coffee/robusta)
reagents_add = list("vitamin" = 0.04, "coffeepowder" = 0.1)
@@ -9,6 +9,7 @@
lifespan = 20
maturation = 5
production = 5
oneharvest = 1
yield = 10
growthstages = 3
icon_dead = "tobacco-dead"
+5 -5
View File
@@ -10,7 +10,7 @@
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "tomato-grow"
icon_dead = "tomato-dead"
genes = list(/datum/plant_gene/trait/squash, /datum/plant_gene/trait/repeated_harvest)
genes = list(/datum/plant_gene/trait/squash)
mutatelist = list(/obj/item/seeds/tomato/blue, /obj/item/seeds/tomato/blood, /obj/item/seeds/tomato/killer)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1)
@@ -56,7 +56,7 @@
yield = 2
icon_grow = "bluetomato-grow"
mutatelist = list(/obj/item/seeds/tomato/blue/bluespace)
genes = list(/datum/plant_gene/trait/slip, /datum/plant_gene/trait/repeated_harvest)
genes = list(/datum/plant_gene/trait/slip)
reagents_add = list("lube" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1)
rarity = 20
@@ -79,7 +79,7 @@
product = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace
yield = 2
mutatelist = list()
genes = list(/datum/plant_gene/trait/squash, /datum/plant_gene/trait/slip, /datum/plant_gene/trait/teleport, /datum/plant_gene/trait/repeated_harvest)
genes = list(/datum/plant_gene/trait/squash, /datum/plant_gene/trait/slip, /datum/plant_gene/trait/teleport)
reagents_add = list("lube" = 0.2, "singulo" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1)
rarity = 50
@@ -100,7 +100,7 @@
plantname = "Killer-Tomato Plants"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer
yield = 2
genes = list(/datum/plant_gene/trait/squash)
oneharvest = 1
growthstages = 2
icon_grow = "killertomato-grow"
icon_harvest = "killertomato-harvest"
@@ -124,7 +124,7 @@
..()
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer/attack_self(mob/user)
if(awakening || isspaceturf(user.loc))
if(awakening || istype(user.loc,/turf/open/space))
return
user << "<span class='notice'>You begin to awaken the Killer Tomato...</span>"
awakening = 1
+5 -105
View File
@@ -11,10 +11,11 @@
production = 1
yield = 5
potency = 50
oneharvest = 1
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
icon_dead = "towercap-dead"
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
plant_type = PLANT_MUSHROOM
mutatelist = list(/obj/item/seeds/tower/steel)
/obj/item/seeds/tower/steel
@@ -37,7 +38,7 @@
icon_state = "logs"
force = 5
throwforce = 5
w_class = WEIGHT_CLASS_NORMAL
w_class = 3
throw_speed = 2
throw_range = 3
origin_tech = "materials=1"
@@ -52,6 +53,7 @@
/obj/item/weapon/grown/log/attackby(obj/item/weapon/W, mob/user, params)
..()
if(W.sharpness)
user.show_message("<span class='notice'>You make [plank_name] out of \the [src]!</span>", 1)
var/obj/item/stack/plank = new plank_type(user.loc, 1 + round(seed.potency / 25))
@@ -75,8 +77,6 @@
return
else
usr << "<span class ='warning'>You must dry this first!</span>"
else
return ..()
/obj/item/weapon/grown/log/tree
seed = null
@@ -90,104 +90,4 @@
icon_state = "steellogs"
accepted = list()
plank_type = /obj/item/stack/rods
plank_name = "rods"
/////////BONFIRES//////////
/obj/structure/bonfire
name = "bonfire"
desc = "For grilling, broiling, charring, smoking, heating, roasting, toasting, simmering, searing, melting, and occasionally burning things."
icon = 'icons/obj/hydroponics/equipment.dmi'
icon_state = "bonfire"
density = FALSE
anchored = TRUE
buckle_lying = 0
var/burning = 0
var/fire_stack_strength = 5
/obj/structure/bonfire/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stack/rods) && !can_buckle)
var/obj/item/stack/rods/R = W
R.use(1)
can_buckle = 1
buckle_requires_restraints = 1
user << "<span class='italics'>You add a rod to [src]."
var/image/U = image(icon='icons/obj/hydroponics/equipment.dmi',icon_state="bonfire_rod",pixel_y=16)
underlays += U
if(W.is_hot())
StartBurning()
/obj/structure/bonfire/attack_hand(mob/user)
if(burning)
user << "<span class='warning'>You need to extinguish [src] before removing the logs!"
return
if(!has_buckled_mobs() && do_after(user, 50, target = src))
for(var/I in 1 to 5)
var/obj/item/weapon/grown/log/L = new /obj/item/weapon/grown/log(src.loc)
L.pixel_x += rand(1,4)
L.pixel_y += rand(1,4)
qdel(src)
return
..()
/obj/structure/bonfire/proc/CheckOxygen()
if(isopenturf(loc))
var/turf/open/O = loc
if(O.air)
var/G = O.air.gases
if(G["o2"][MOLES] > 16)
return 1
return 0
/obj/structure/bonfire/proc/StartBurning()
if(!burning && CheckOxygen())
icon_state = "bonfire_on_fire"
burning = 1
SetLuminosity(6)
Burn()
START_PROCESSING(SSobj, src)
/obj/structure/bonfire/fire_act(exposed_temperature, exposed_volume)
StartBurning()
/obj/structure/bonfire/Crossed(atom/movable/AM)
if(burning)
Burn()
/obj/structure/bonfire/proc/Burn()
var/turf/current_location = get_turf(src)
current_location.hotspot_expose(1000,500,1)
for(var/A in current_location)
if(A == src)
continue
if(isobj(A))
var/obj/O = A
O.fire_act(1000, 500)
else if(isliving(A))
var/mob/living/L = A
L.adjust_fire_stacks(fire_stack_strength)
L.IgniteMob()
/obj/structure/bonfire/process()
if(!CheckOxygen())
extinguish()
return
Burn()
/obj/structure/bonfire/extinguish()
if(burning)
icon_state = "bonfire"
burning = 0
SetLuminosity(0)
STOP_PROCESSING(SSobj, src)
/obj/structure/bonfire/buckle_mob(mob/living/M, force = 0)
if(..())
M.pixel_y += 13
/obj/structure/bonfire/unbuckle_mob(mob/living/buckled_mob, force=0)
if(..())
buckled_mob.pixel_y -= 13
plank_name = "rods"
+4 -35
View File
@@ -5,7 +5,7 @@
/obj/item/weapon/grown // Grown weapons
name = "grown_weapon"
icon = 'icons/obj/hydroponics/harvest.dmi'
resistance_flags = FLAMMABLE
burn_state = FLAMMABLE
var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item.
/obj/item/weapon/grown/New(newloc, var/obj/item/seeds/new_seed = null)
@@ -30,6 +30,9 @@
seed.prepare_result(src)
transform *= TransformUsingVariable(seed.potency, 100, 0.5)
add_juice()
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
if(G)
set_light(G.get_lum(seed))
/obj/item/weapon/grown/attackby(obj/item/O, mob/user, params)
@@ -53,37 +56,3 @@
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_cross(src, AM)
..()
// Glow gene procs
/obj/item/weapon/grown/Destroy()
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/throw_impact(atom/hit_atom)
if(!..()) //was it caught by a mob?
if(seed)
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_throw_impact(src, hit_atom)
/obj/item/weapon/grown/pickup(mob/user)
..()
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)
..()
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))
/obj/item/weapon/grown/microwave_act(obj/machine/microwave/M)
return
+15 -20
View File
@@ -5,7 +5,7 @@
icon = 'icons/obj/device.dmi'
icon_state = "hydro"
item_state = "analyzer"
w_class = WEIGHT_CLASS_TINY
w_class = 1
slot_flags = SLOT_BELT
origin_tech = "magnets=2;biotech=2"
materials = list(MAT_METAL=30, MAT_GLASS=20)
@@ -24,7 +24,7 @@
flags = OPENCONTAINER
slot_flags = SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
w_class = 2
throw_speed = 3
throw_range = 10
@@ -33,7 +33,7 @@
reagents.add_reagent("weedkiller", 100)
/obj/item/weapon/reagent_containers/spray/weedspray/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is huffing [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
user.visible_message("<span class='suicide'>[user] is huffing the [src.name]! It looks like \he's trying to commit suicide.</span>")
return (TOXLOSS)
/obj/item/weapon/reagent_containers/spray/pestspray // -- Skie
@@ -46,7 +46,7 @@
flags = OPENCONTAINER
slot_flags = SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
w_class = 2
throw_speed = 3
throw_range = 10
@@ -55,7 +55,7 @@
reagents.add_reagent("pestkiller", 100)
/obj/item/weapon/reagent_containers/spray/pestspray/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is huffing [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
viewers(user) << "<span class='suicide'>[user] is huffing the [src.name]! It looks like \he's trying to commit suicide.</span>"
return (TOXLOSS)
/obj/item/weapon/cultivator
@@ -68,7 +68,7 @@
flags = CONDUCT
force = 5
throwforce = 7
w_class = WEIGHT_CLASS_SMALL
w_class = 2
materials = list(MAT_METAL=50)
attack_verb = list("slashed", "sliced", "cut", "clawed")
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -80,7 +80,7 @@
icon_state = "hatchet"
flags = CONDUCT
force = 12
w_class = WEIGHT_CLASS_TINY
w_class = 1
throwforce = 15
throw_speed = 3
throw_range = 4
@@ -91,7 +91,7 @@
sharpness = IS_SHARP
/obj/item/weapon/hatchet/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is chopping at [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
user.visible_message("<span class='suicide'>[user] is chopping at \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return (BRUTELOSS)
@@ -103,7 +103,7 @@
throwforce = 5
throw_speed = 2
throw_range = 3
w_class = WEIGHT_CLASS_BULKY
w_class = 4
flags = CONDUCT
armour_penetration = 20
slot_flags = SLOT_BACK
@@ -111,14 +111,9 @@
attack_verb = list("chopped", "sliced", "cut", "reaped")
hitsound = 'sound/weapons/bladeslice.ogg'
/obj/item/weapon/scythe/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is beheading [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
if(iscarbon(user))
var/mob/living/carbon/C = user
var/obj/item/bodypart/BP = C.get_bodypart("head")
if(BP)
BP.drop_limb()
playsound(loc,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1)
/obj/item/weapon/scythe/suicide_act(mob/user) // maybe later i'll actually figure out how to make it behead them
user.visible_message("<span class='suicide'>[user] is beheading \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return (BRUTELOSS)
// *************************************
@@ -131,7 +126,7 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
volume = 50
w_class = WEIGHT_CLASS_TINY
w_class = 1
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(1,2,5,10,15,25,50)
@@ -163,7 +158,7 @@
/obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh
name = "bottle of Robust Harvest"
desc = "Contains a fertilizer that increases the yield of a plant by 30% while causing no mutations."
desc = "Contains a fertilizer that doubles the yield of a plant while causing no mutations."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle15"
@@ -181,7 +176,7 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
volume = 50
w_class = WEIGHT_CLASS_TINY
w_class = 1
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(1,2,5,10,15,25,50)
+63 -80
View File
@@ -4,8 +4,6 @@
icon_state = "hydrotray"
density = 1
anchored = 1
pixel_y = 8
unique_rename = 1
var/waterlevel = 100 //The amount of water in the tray (max 100)
var/maxwater = 100 //The maximum amount of water in the tray
var/nutrilevel = 10 //The amount of nutrient in the tray (max 10)
@@ -17,7 +15,7 @@
var/toxic = 0 //Toxicity in the tray?
var/age = 0 //Current age
var/dead = 0 //Is it dead?
var/plant_health //Its health
var/health = 0 //Its health.
var/lastproduce = 0 //Last time it was harvested
var/lastcycle = 0 //Used for timing of cycles.
var/cycledelay = 200 //About 10 seconds / cycle
@@ -25,10 +23,11 @@
var/obj/item/seeds/myseed = null //The currently planted seed
var/rating = 1
var/unwrenchable = 1
var/recent_bee_visit = FALSE //Have we been visited by a bee recently, so bees dont overpollinate one plant
var/recent_bee_visit = FALSE //Have we been visited by a bee recently, so bees dont overpolinate one plant
var/using_irrigation = FALSE //If the tray is connected to other trays via irrigation hoses
var/self_sustaining = FALSE //If the tray generates nutrients and water on its own
pixel_y=8
/obj/machinery/hydroponics/constructable
name = "hydroponics tray"
@@ -122,11 +121,11 @@
myseed.loc = src
if(self_sustaining)
adjustNutri(1)
adjustWater(rand(3,5))
adjustWeeds(-2)
adjustPests(-2)
adjustToxic(-2)
adjustNutri(2 / rating)
adjustWater(rand(8, 10) / rating)
adjustWeeds(-5 / rating)
adjustPests(-5 / rating)
adjustToxic(-5 / rating)
if(world.time > (lastcycle + cycledelay))
lastcycle = world.time
@@ -144,15 +143,15 @@
adjustNutri(-1 / rating)
// Lack of nutrients hurts non-weeds
if(nutrilevel <= 0 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy))
if(nutrilevel <= 0 && myseed.plant_type != PLANT_WEED)
adjustHealth(-rand(1,3))
//Photosynthesis/////////////////////////////////////////////////////////
// Lack of light hurts non-mushrooms
if(isturf(loc))
var/turf/currentTurf = loc
var/lightAmt = currentTurf.lighting_lumcount
if(myseed.get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
var/lightAmt = currentTurf.get_lumcount()
if(myseed.plant_type == PLANT_MUSHROOM)
if(lightAmt < 2)
adjustHealth(-1 / rating)
else // Non-mushroom
@@ -164,7 +163,7 @@
adjustWater(-rand(1,6) / rating)
// If the plant is dry, it loses health pretty fast, unless mushroom
if(waterlevel <= 10 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
if(waterlevel <= 10 && myseed.plant_type != PLANT_MUSHROOM)
adjustHealth(-rand(0,1) / rating)
if(waterlevel <= 0)
adjustHealth(-rand(0,2) / rating)
@@ -193,13 +192,13 @@
adjustHealth(-1 / rating)
// If it's a weed, it doesn't stunt the growth
if(weedlevel >= 5 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy))
if(weedlevel >= 5 && myseed.plant_type != PLANT_WEED)
adjustHealth(-1 / rating)
//Health & Age///////////////////////////////////////////////////////////
// Plant dies if plant_health <= 0
if(plant_health <= 0)
// Plant dies if health <= 0
if(health <= 0)
plantdies()
adjustWeeds(1 / rating) // Weeds flourish
@@ -223,7 +222,7 @@
// Weeeeeeeeeeeeeeedddssss
if(weedlevel >= 10 && prob(50)) // At this point the plant is kind of fucked. Weeds can overtake the plant spot.
if(myseed)
if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy) && !myseed.get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism)) // If a normal plant
if(myseed.plant_type == PLANT_NORMAL) // If a normal plant
weedinvasion()
else
weedinvasion() // Weed invasion into empty tray
@@ -257,10 +256,10 @@
if(self_sustaining)
if(istype(src, /obj/machinery/hydroponics/soil))
add_atom_colour(rgb(255, 175, 0), FIXED_COLOUR_PRIORITY)
color = rgb(255, 175, 0)
else
overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "gaia_blessing")
SetLuminosity(3)
set_light(3)
update_icon_hoses()
@@ -271,9 +270,9 @@
if(!self_sustaining)
if(myseed && myseed.get_gene(/datum/plant_gene/trait/glow))
var/datum/plant_gene/trait/glow/G = myseed.get_gene(/datum/plant_gene/trait/glow)
SetLuminosity(G.get_lum(myseed))
set_light(G.get_lum(myseed))
else
SetLuminosity(0)
set_light(0)
return
@@ -306,7 +305,7 @@
add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowwater3"))
if(nutrilevel <= 2)
add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lownutri3"))
if(plant_health <= (myseed.endurance / 2))
if(health <= (myseed.endurance / 2))
add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowhealth3"))
if(weedlevel >= 5 || pestlevel >= 5 || toxic >= 40)
add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_alert3"))
@@ -322,7 +321,7 @@
user << "<span class='warning'>It's dead!</span>"
else if (harvest)
user << "<span class='info'>It's ready to harvest.</span>"
else if (plant_health <= (myseed.endurance / 2))
else if (health <= (myseed.endurance / 2))
user << "<span class='warning'>It looks unhealthy.</span>"
else
user << "<span class='info'>[src] is empty.</span>"
@@ -367,7 +366,7 @@
else
myseed = new /obj/item/seeds/weeds(src)
age = 0
plant_health = myseed.endurance
health = myseed.endurance
lastcycle = world.time
harvest = 0
weedlevel = 0 // Reset
@@ -376,13 +375,13 @@
visible_message("<span class='warning'>The [oldPlantName] is overtaken by some [myseed.plantname]!</span>")
/obj/machinery/hydroponics/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0) // Mutates the current seed
/obj/machinery/hydroponics/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25) // Mutates the current seed
if(!myseed)
return
myseed.mutate(lifemut, endmut, productmut, yieldmut, potmut, wrmut, wcmut, traitmut)
myseed.mutate(lifemut, endmut, productmut, yieldmut, potmut)
/obj/machinery/hydroponics/proc/hardmutate()
mutate(4, 10, 2, 4, 50, 4, 10, 3)
mutate(4, 10, 2, 4, 50)
/obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant!
@@ -400,7 +399,7 @@
hardmutate()
age = 0
plant_health = myseed.endurance
health = myseed.endurance
lastcycle = world.time
harvest = 0
weedlevel = 0 // Reset
@@ -420,7 +419,7 @@
dead = 0
hardmutate()
age = 0
plant_health = myseed.endurance
health = myseed.endurance
lastcycle = world.time
harvest = 0
weedlevel = 0 // Reset
@@ -433,7 +432,7 @@
/obj/machinery/hydroponics/proc/plantdies() // OH NOES!!!!! I put this all in one function to make things easier
plant_health = 0
health = 0
harvest = 0
pestlevel = 0 // Pests die
if(!dead)
@@ -441,17 +440,16 @@
dead = 1
/obj/machinery/hydroponics/proc/mutatepest(mob/user)
/obj/machinery/hydroponics/proc/mutatepest()
if(pestlevel > 5)
message_admins("[ADMIN_LOOKUPFLW(user)] caused spiderling pests to spawn in a hydro tray")
log_game("[key_name(user)] caused spiderling pests to spawn in a hydro tray")
visible_message("<span class='warning'>The pests seem to behave oddly...</span>")
spawn_atom_to_turf(/obj/structure/spider/spiderling/hunter, src, 3, FALSE)
for(var/i=0, i<3, i++)
var/obj/effect/spider/spiderling/S = new(src.loc)
S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/hunter
else
user << "<span class='warning'>The pests seem to behave oddly, but quickly settle down...</span>"
usr << "<span class='warning'>The pests seem to behave oddly, but quickly settle down...</span>"
/obj/machinery/hydroponics/proc/applyChemicals(datum/reagents/S, mob/user)
/obj/machinery/hydroponics/proc/applyChemicals(datum/reagents/S)
if(myseed)
myseed.on_chem_reaction(S) //In case seeds have some special interactions with special chems, currently only used by vines
@@ -459,8 +457,7 @@
if(S.has_reagent("mutagen", 5) || S.has_reagent("radium", 10) || S.has_reagent("uranium", 10))
switch(rand(100))
if(91 to 100)
adjustHealth(-10)
user << "<span class='warning'>The plant shrivels and burns.</span>"
plantdies()
if(81 to 90)
mutatespecie()
if(66 to 80)
@@ -468,13 +465,13 @@
if(41 to 65)
mutate()
if(21 to 41)
user << "<span class='notice'>The plants don't seem to react...</span>"
usr << "<span class='warning'>The plants don't seem to react...</span>"
if(11 to 20)
mutateweed()
if(1 to 10)
mutatepest(user)
mutatepest()
else
user << "<span class='notice'>Nothing happens...</span>"
usr << "<span class='warning'>Nothing happens...</span>"
// 2 or 1 units is enough to change the yield and other stats.// Can change the yield and other stats, but requires more than mutagen
else if(S.has_reagent("mutagen", 2) || S.has_reagent("radium", 5) || S.has_reagent("uranium", 5))
@@ -492,18 +489,18 @@
// Nutriments
if(S.has_reagent("eznutriment", 1))
yieldmod = 1
mutmod = 1
yieldmod = 1 * rating
mutmod = 1 * rating
adjustNutri(round(S.get_reagent_amount("eznutriment") * 1))
if(S.has_reagent("left4zednutriment", 1))
yieldmod = 0
mutmod = 2
yieldmod = 0 * rating
mutmod = 2 * rating
adjustNutri(round(S.get_reagent_amount("left4zednutriment") * 1))
if(S.has_reagent("robustharvestnutriment", 1))
yieldmod = 1.3
mutmod = 0
yieldmod = 2 * rating
mutmod = 0 * rating
adjustNutri(round(S.get_reagent_amount("robustharvestnutriment") *1 ))
// Antitoxin binds shit pretty well. So the tox goes significantly down
@@ -618,11 +615,11 @@
// Saltpetre is used for gardening IRL, to simplify highly, it speeds up growth and strengthens plants
if(S.has_reagent("saltpetre", 1))
var/salt = S.get_reagent_amount("saltpetre")
adjustHealth(round(salt * 0.25))
if (myseed)
myseed.adjust_production(-round(salt/100)-prob(salt%100))
myseed.adjust_potency(round(salt*0.50))
adjustHealth(round(S.get_reagent_amount("saltpetre") * 0.25))
if(myseed)
myseed.adjust_production(-round(S.get_reagent_amount("saltpetre") * 0.02))
myseed.adjust_potency(round(S.get_reagent_amount("saltpetre") * 0.01))
// Ash is also used IRL in gardening, as a fertilizer enhancer and weed killer
if(S.has_reagent("ash", 1))
adjustHealth(round(S.get_reagent_amount("ash") * 0.25))
@@ -670,9 +667,9 @@
if(33 to 65)
mutateweed()
if(1 to 32)
mutatepest(user)
mutatepest()
else
user << "<span class='warning'>Nothing happens...</span>"
usr << "<span class='warning'>Nothing happens...</span>"
/obj/machinery/hydroponics/attackby(obj/item/O, mob/user, params)
//Called when mob user "attacks" it with object O
@@ -685,16 +682,6 @@
return
if(alert(user, "This will make [src] self-sustaining but consume [O] forever. Are you sure?", "[name]", "I'm Sure", "Abort") == "Abort" || !user)
return
if(!O || qdeleted(O))
return
if(!Adjacent(user))
return
if(self_sustaining)
user << "<span class='warning'>This [name] is already self-sustaining!</span>"
return
if(myseed || weedlevel)
user << "<span class='warning'>[src] needs to be clear of plants and weeds!</span>"
return
user.visible_message("<span class='notice'>[user] gently pulls open the soil for [O] and places it inside.</span>", "<span class='notice'>You tenderly root [O] into [src].</span>")
user.drop_item()
qdel(O)
@@ -759,7 +746,7 @@
if(istype(reagent_source, /obj/item/weapon/reagent_containers/food/snacks) || istype(reagent_source, /obj/item/weapon/reagent_containers/pill))
qdel(reagent_source)
H.applyChemicals(S, user)
H.applyChemicals(S)
S.clear_reagents()
qdel(S)
@@ -777,9 +764,9 @@
dead = 0
myseed = O
age = 1
plant_health = myseed.endurance
health = myseed.endurance
lastcycle = world.time
O.forceMove(src)
O.loc = src
update_icon()
else
user << "<span class='warning'>[src] already has seeds in it!</span>"
@@ -824,8 +811,8 @@
if(!anchored && !isinspace())
user.visible_message("[user] begins to wrench [src] into place.", \
"<span class='notice'>You begin to wrench [src] in place...</span>")
playsound(loc, O.usesound, 50, 1)
if (do_after(user, 20*O.toolspeed, target = src))
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
if (do_after(user, 20/O.toolspeed, target = src))
if(anchored)
return
anchored = 1
@@ -834,8 +821,8 @@
else if(anchored)
user.visible_message("[user] begins to unwrench [src].", \
"<span class='notice'>You begin to unwrench [src]...</span>")
playsound(loc, O.usesound, 50, 1)
if (do_after(user, 20*O.toolspeed, target = src))
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
if (do_after(user, 20/O.toolspeed, target = src))
if(!anchored)
return
anchored = 0
@@ -844,7 +831,7 @@
else if(istype(O, /obj/item/weapon/wirecutters) && unwrenchable)
using_irrigation = !using_irrigation
playsound(src, O.usesound, 50, 1)
playsound(src, 'sound/items/Wirecutter.ogg', 50, 1)
user.visible_message("<span class='notice'>[user] [using_irrigation ? "" : "dis"]connects [src]'s irrigation hoses.</span>", \
"<span class='notice'>You [using_irrigation ? "" : "dis"]connect [src]'s irrigation hoses.</span>")
for(var/obj/machinery/hydroponics/h in range(1,src))
@@ -861,10 +848,6 @@
user.visible_message("<span class='notice'>[user] digs out the plants in [src]!</span>", "<span class='notice'>You dig out all of [src]'s plants!</span>")
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
if(myseed) //Could be that they're just using it as a de-weeder
age = 0
plant_health = 0
if(harvest)
harvest = FALSE //To make sure they can't just put in another seed and insta-harvest it
qdel(myseed)
myseed = null
weedlevel = 0 //Has a side effect of cleaning up those nasty weeds
@@ -874,7 +857,7 @@
return ..()
/obj/machinery/hydroponics/attack_hand(mob/user)
if(issilicon(user)) //How does AI know what plant is?
if(istype(user, /mob/living/silicon)) //How does AI know what plant is?
return
if(harvest)
myseed.harvest(user)
@@ -896,7 +879,7 @@
user << "<span class='warning'>You fail to harvest anything useful!</span>"
else
user << "<span class='notice'>You harvest [myseed.getYield()] items from the [myseed.plantname].</span>"
if(!myseed.get_gene(/datum/plant_gene/trait/repeated_harvest))
if(myseed.oneharvest)
qdel(myseed)
myseed = null
dead = 0
@@ -914,7 +897,7 @@
/obj/machinery/hydroponics/proc/adjustHealth(adjustamt)
if(myseed && !dead)
plant_health = Clamp(plant_health + adjustamt, 0, myseed.endurance)
health = Clamp(health + adjustamt, 0, myseed.endurance)
/obj/machinery/hydroponics/proc/adjustToxic(adjustamt)
toxic = Clamp(toxic + adjustamt, 0, 100)
+7 -102
View File
@@ -78,22 +78,6 @@
S.potency = value
/datum/plant_gene/core/weed_rate
name = "Weed Growth Rate"
value = 1
/datum/plant_gene/core/weed_rate/apply_stat(obj/item/seeds/S)
S.weed_rate = value
/datum/plant_gene/core/weed_chance
name = "Weed Vulnerability"
value = 5
/datum/plant_gene/core/weed_chance/apply_stat(obj/item/seeds/S)
S.weed_chance = value
// Reagent genes store reagent ID and reagent ratio. Amount of reagent in the plant = 1 + (potency * rate)
/datum/plant_gene/reagent
name = "Nutriment"
@@ -173,21 +157,14 @@
/datum/plant_gene/trait/proc/on_consume(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target)
return
/datum/plant_gene/trait/proc/on_cross(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
return
/datum/plant_gene/trait/proc/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target)
return
/datum/plant_gene/trait/proc/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
return
/datum/plant_gene/trait/proc/on_attackby(obj/item/weapon/reagent_containers/food/snacks/grown/G, obj/item/I, mob/user)
return
/datum/plant_gene/trait/proc/on_throw_impact(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
return
/datum/plant_gene/trait/squash
// Allows the plant to be squashed when thrown or slipped on, leaving a colored mess and trash type item behind.
@@ -197,6 +174,10 @@
examine_line = "<span class='info'>It has a lot of liquid contents inside.</span>"
origin_tech = list("biotech" = 5)
/*/datum/plant_gene/trait/squash/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target)
G.squash(target)*/
/datum/plant_gene/trait/slip
// Makes plant slippery, unless it has a grown-type trash. Then the trash gets slippery.
// Applies other trait effects (teleporting, etc) to the target by on_slip.
@@ -277,7 +258,7 @@
if(ismob(newloc))
G.pickup(newloc)//adjusts the lighting on the mob
else
G.SetLuminosity(get_lum(G.seed))
G.set_light(get_lum(G.seed))
/datum/plant_gene/trait/glow/berry
name = "Strong Bioluminescence"
@@ -295,7 +276,7 @@
if(isliving(target))
var/teleport_radius = max(round(G.seed.potency / 10), 1)
var/turf/T = get_turf(target)
new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect...
new /obj/effect/decal/cleanable/molten_item(T) //Leave a pile of goo behind for dramatic effect...
do_teleport(target, T, teleport_radius)
/datum/plant_gene/trait/teleport/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/C)
@@ -306,7 +287,7 @@
if(prob(50))
do_teleport(G, T, teleport_radius)
else
new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect...
new /obj/effect/decal/cleanable/molten_item(T) //Leave a pile of goo behind for dramatic effect...
qdel(G)
@@ -331,79 +312,3 @@
/datum/plant_gene/trait/maxchem/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc)
..()
G.reagents.maximum_volume *= rate
/datum/plant_gene/trait/repeated_harvest
name = "Perennial Growth"
/datum/plant_gene/trait/repeated_harvest/can_add(obj/item/seeds/S)
if(!..())
return FALSE
if(istype(S, /obj/item/seeds/replicapod))
return FALSE
return TRUE
/datum/plant_gene/trait/battery
name = "Capacitive Cell Production"
/datum/plant_gene/trait/battery/on_attackby(obj/item/weapon/reagent_containers/food/snacks/grown/G, obj/item/I, mob/user)
if(istype(I, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = I
if(C.use(5))
user << "<span class='notice'>You add some cable to [G] and slide it inside the battery encasing.</span>"
var/obj/item/weapon/stock_parts/cell/potato/pocell = new /obj/item/weapon/stock_parts/cell/potato(user.loc)
pocell.icon_state = G.icon_state
pocell.maxcharge = G.seed.potency * 20
// The secret of potato supercells!
var/datum/plant_gene/trait/cell_charge/CG = G.seed.get_gene(/datum/plant_gene/trait/cell_charge)
if(CG) // 10x charge for deafult cell charge gene - 20 000 with 100 potency.
pocell.maxcharge *= CG.rate*1000
pocell.charge = pocell.maxcharge
pocell.name = "[G] battery"
pocell.desc = "A rechargable plant based power cell. This one has a power rating of [pocell.maxcharge], and you should not swallow it."
if(G.reagents.has_reagent("plasma", 2))
pocell.rigged = 1
qdel(G)
else
user << "<span class='warning'>You need five lengths of cable to make a [G] battery!</span>"
/datum/plant_gene/trait/stinging
name = "Hypodermic Prickles"
/datum/plant_gene/trait/stinging/on_throw_impact(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
if(isliving(target) && G.reagents && G.reagents.total_volume)
var/mob/living/L = target
if(L.reagents && L.can_inject(null, 0))
var/injecting_amount = max(1, G.seed.potency*0.2) // Minimum of 1, max of 20
var/fraction = min(injecting_amount/G.reagents.total_volume, 1)
G.reagents.reaction(L, INJECT, fraction)
G.reagents.trans_to(L, injecting_amount)
target << "<span class='danger'>You are pricked by [G]!</span>"
/datum/plant_gene/trait/smoke
name = "gaseous decomposition"
/datum/plant_gene/trait/smoke/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
var/datum/effect_system/smoke_spread/chem/S = new
var/splat_location = get_turf(target)
var/smoke_amount = round(sqrt(G.seed.potency * 0.1), 1)
S.attach(splat_location)
S.set_up(G.reagents, smoke_amount, splat_location, 0)
S.start()
G.reagents.clear_reagents()
/datum/plant_gene/trait/plant_type // Parent type
name = "you shouldn't see this"
trait_id = "plant_type"
/datum/plant_gene/trait/plant_type/weed_hardy
name = "Weed Adaptation"
/datum/plant_gene/trait/plant_type/fungal_metabolism
name = "Fungal Vitality"
/datum/plant_gene/trait/plant_type/alien_properties
name ="?????"
+5 -1
View File
@@ -47,6 +47,10 @@
var/piles = list()
var/max_seeds = 1000
var/seed_multiplier = 1
use_auto_lights = 1
light_power_on = 1
light_range_on = 3
light_color = LIGHT_COLOR_BLUE
/obj/machinery/seed_extractor/New()
..()
@@ -106,7 +110,7 @@
user << "<span class='notice'>You add [O] to [src.name].</span>"
updateUsrDialog()
return
else if(user.a_intent != INTENT_HARM)
else if(user.a_intent != "harm")
user << "<span class='warning'>You can't extract any seeds from \the [O.name]!</span>"
else
return ..()
+22 -130
View File
@@ -5,8 +5,8 @@
/obj/item/seeds
icon = 'icons/obj/hydroponics/seeds.dmi'
icon_state = "seed" // Unknown plant seed - these shouldn't exist in-game.
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
w_class = 1
burn_state = FLAMMABLE
var/plantname = "Plants" // Name of plant when planted.
var/product // A type path. The thing that is created when the plant is harvested.
var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overriden.
@@ -21,8 +21,10 @@
var/maturation = 6 // Used to determine which sprite to switch to when growing.
var/production = 6 // Changes the amount of time needed for a plant to become harvestable.
var/yield = 3 // Amount of growns created per harvest. If is -1, the plant/shroom/weed is never meant to be harvested.
var/oneharvest = 0 // If a plant is cleared from the tray after harvesting, e.g. a carrot.
var/potency = 10 // The 'power' of a plant. Generally effects the amount of reagent in a plant, also used in other ways.
var/growthstages = 6 // Amount of growth sprites the plant has.
var/plant_type = PLANT_NORMAL // 0 = PLANT_NORMAL; 1 = PLANT_WEED; 2 = PLANT_MUSHROOM; 3 = PLANT_ALIEN
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.
var/list/genes = list() // Plant genes are stored here, see plant_genes.dm for more info.
@@ -32,6 +34,9 @@
// Stronger reagents must always come first to avoid being displaced by weaker ones.
// Total amount of any reagent in plant is calculated by formula: 1 + round(potency * multiplier)
var/innate_yieldmod = 1 //modifier for yield, seperate to the one in Hydro trays, as that one is SPECIFICALLY for nutriment/chems (which means it's constantly reset)
//This is added onto the yield mod of the hydro tray, yield *= (parent.yieldmod+innate_yieldmod)
var/weed_rate = 1 //If the chance below passes, then this many weeds sprout during growth
var/weed_chance = 5 //Percentage chance per tray update to grow weeds
@@ -46,14 +51,12 @@
if(!icon_dead)
icon_dead = "[species]-dead"
if(!icon_harvest && !get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism) && yield != -1)
if(!icon_harvest && plant_type != PLANT_MUSHROOM && yield != -1)
icon_harvest = "[species]-harvest"
if(!nogenes) // not used on Copy()
genes += new /datum/plant_gene/core/lifespan(lifespan)
genes += new /datum/plant_gene/core/endurance(endurance)
genes += new /datum/plant_gene/core/weed_rate(weed_rate)
genes += new /datum/plant_gene/core/weed_chance(weed_chance)
if(yield != -1)
genes += new /datum/plant_gene/core/yield(yield)
genes += new /datum/plant_gene/core/production(production)
@@ -77,8 +80,6 @@
S.production = production
S.yield = yield
S.potency = potency
S.weed_rate = weed_rate
S.weed_chance = weed_chance
S.genes = list()
for(var/g in genes)
var/datum/plant_gene/G = g
@@ -94,21 +95,17 @@
for(var/datum/plant_gene/reagent/R in genes)
reagents_add[R.reagent_id] = R.rate
/obj/item/seeds/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0)
/obj/item/seeds/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25)
adjust_lifespan(rand(-lifemut,lifemut))
adjust_endurance(rand(-endmut,endmut))
adjust_production(rand(-productmut,productmut))
adjust_yield(rand(-yieldmut,yieldmut))
adjust_potency(rand(-potmut,potmut))
adjust_weed_rate(rand(-wrmut, wrmut))
adjust_weed_chance(rand(-wcmut, wcmut))
if(prob(traitmut))
add_random_traits(1, 1)
/obj/item/seeds/bullet_act(obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables.
if(istype(Proj, /obj/item/projectile/energy/florayield))
var/rating = 1
if(istype(loc, /obj/machinery/hydroponics))
var/obj/machinery/hydroponics/H = loc
@@ -131,11 +128,10 @@
if(parent.yieldmod == 0)
return_yield = min(return_yield, 1)//1 if above zero, 0 otherwise
else
return_yield *= (parent.yieldmod)
return_yield *= (parent.yieldmod+innate_yieldmod)
return return_yield
/obj/item/seeds/proc/harvest(mob/user = usr)
var/obj/machinery/hydroponics/parent = loc //for ease of access
var/t_amount = 0
@@ -155,7 +151,6 @@
return result
/obj/item/seeds/proc/prepare_result(var/obj/item/weapon/reagent_containers/food/snacks/grown/T)
if(T.reagents)
for(var/reagent_id in reagents_add)
@@ -172,7 +167,7 @@
if(yield != -1) // Unharvestable shouldn't suddenly turn harvestable
yield = Clamp(yield + adjustamt, 0, 10)
if(yield <= 0 && get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
if(yield <= 0 && plant_type == PLANT_MUSHROOM)
yield = 1 // Mushrooms always have a minimum yield of 1.
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/yield)
if(C)
@@ -204,79 +199,18 @@
if(C)
C.value = potency
/obj/item/seeds/proc/adjust_weed_rate(adjustamt)
weed_rate = Clamp(weed_rate + adjustamt, 0, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_rate)
if(C)
C.value = weed_rate
/obj/item/seeds/proc/adjust_weed_chance(adjustamt)
weed_chance = Clamp(weed_chance + adjustamt, 0, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_chance)
if(C)
C.value = weed_chance
//Directly setting stats
/obj/item/seeds/proc/set_yield(adjustamt)
if(yield != -1) // Unharvestable shouldn't suddenly turn harvestable
yield = Clamp(adjustamt, 0, 10)
if(yield <= 0 && get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
yield = 1 // Mushrooms always have a minimum yield of 1.
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/yield)
if(C)
C.value = yield
/obj/item/seeds/proc/set_lifespan(adjustamt)
lifespan = Clamp(adjustamt, 10, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/lifespan)
if(C)
C.value = lifespan
/obj/item/seeds/proc/set_endurance(adjustamt)
endurance = Clamp(adjustamt, 10, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/endurance)
if(C)
C.value = endurance
/obj/item/seeds/proc/set_production(adjustamt)
if(yield != -1)
production = Clamp(adjustamt, 2, 10)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/production)
if(C)
C.value = production
/obj/item/seeds/proc/set_potency(adjustamt)
if(potency != -1)
potency = Clamp(adjustamt, 0, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/potency)
if(C)
C.value = potency
/obj/item/seeds/proc/set_weed_rate(adjustamt)
weed_rate = Clamp(adjustamt, 0, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_rate)
if(C)
C.value = weed_rate
/obj/item/seeds/proc/set_weed_chance(adjustamt)
weed_chance = Clamp(adjustamt, 0, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_chance)
if(C)
C.value = weed_chance
/obj/item/seeds/proc/get_analyzer_text() //in case seeds have something special to tell to the analyzer
var/text = ""
if(!get_gene(/datum/plant_gene/trait/plant_type/weed_hardy) && !get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism) && !get_gene(/datum/plant_gene/trait/plant_type/alien_properties))
text += "- Plant type: Normal plant\n"
if(get_gene(/datum/plant_gene/trait/plant_type/weed_hardy))
text += "- Plant type: Weed. Can grow in nutrient-poor soil.\n"
if(get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
text += "- Plant type: Mushroom. Can grow in dry soil.\n"
if(get_gene(/datum/plant_gene/trait/plant_type/alien_properties))
text += "- Plant type: <span class='warning'>UNKNOWN</span> \n"
switch(plant_type)
if(PLANT_NORMAL)
text += "- Plant type: Normal plant\n"
if(PLANT_WEED)
text += "- Plant type: Weed. Can grow in nutrient-poor soil.\n"
if(PLANT_MUSHROOM)
text += "- Plant type: Mushroom. Can grow in dry soil.\n"
else
text += "- Plant type: <span class='warning'>UNKNOWN</span> \n"
if(potency != -1)
text += "- Potency: [potency]\n"
if(yield != -1)
@@ -286,8 +220,6 @@
text += "- Production speed: [production]\n"
text += "- Endurance: [endurance]\n"
text += "- Lifespan: [lifespan]\n"
text += "- Weed Growth Rate: [weed_rate]\n"
text += "- Weed Vulnerability: [weed_chance]\n"
if(rarity)
text += "- Species Discovery Value: [rarity]\n"
@@ -337,44 +269,4 @@
if(seed.icon_harvest) // mushrooms have no grown sprites, same for items with no product
if(!(seed.icon_harvest in states))
world << "[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!"
/obj/item/seeds/proc/randomize_stats()
set_lifespan(rand(25, 60))
set_endurance(rand(15, 35))
set_production(rand(2, 10))
set_yield(rand(1, 10))
set_potency(rand(10, 35))
set_weed_rate(rand(1, 10))
set_weed_chance(rand(5, 100))
maturation = rand(6, 12)
/obj/item/seeds/proc/add_random_reagents(lower = 0, upper = 2)
var/amount_random_reagents = rand(lower, upper)
for(var/i in 1 to amount_random_reagents)
var/random_amount = rand(4, 15) * 0.01 // this must be multiplied by 0.01, otherwise, it will not properly associate
var/datum/plant_gene/reagent/R = new(get_random_reagent_id(), random_amount)
if(R.can_add(src))
genes += R
else
qdel(R)
reagents_from_genes()
/obj/item/seeds/proc/add_random_traits(lower = 0, upper = 2)
var/amount_random_traits = rand(lower, upper)
for(var/i in 1 to amount_random_traits)
var/random_trait = pick((subtypesof(/datum/plant_gene/trait)-typesof(/datum/plant_gene/trait/plant_type)))
var/datum/plant_gene/trait/T = new random_trait
if(T.can_add(src))
genes += T
else
qdel(T)
/obj/item/seeds/proc/add_random_plant_type(normal_plant_chance = 75)
if(prob(normal_plant_chance))
var/random_plant_type = pick(subtypesof(/datum/plant_gene/trait/plant_type))
var/datum/plant_gene/trait/plant_type/P = new random_plant_type
if(P.can_add(src))
genes += P
else
qdel(P)
world << "[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!"