This commit is contained in:
Ghommie
2019-12-06 20:09:35 +01:00
1029 changed files with 34299 additions and 143444 deletions
@@ -123,26 +123,25 @@
/obj/structure/beebox/examine(mob/user)
..()
. = ..()
if(!queen_bee)
to_chat(user, "<span class='warning'>There is no queen bee! There won't bee any honeycomb without a queen!</span>")
. += "<span class='warning'>There is no queen bee! There won't bee any honeycomb without a queen!</span>"
var/half_bee = get_max_bees()*0.5
if(half_bee && (bees.len >= half_bee))
to_chat(user, "<span class='notice'>This place is aBUZZ with activity... there are lots of bees!</span>")
. += "<span class='notice'>This place is aBUZZ with activity... there are lots of bees!</span>"
to_chat(user, "<span class='notice'>[bee_resources]/100 resource supply.</span>")
to_chat(user, "<span class='notice'>[bee_resources]% towards a new honeycomb.</span>")
to_chat(user, "<span class='notice'>[bee_resources*2]% towards a new bee.</span>")
. += "<span class='notice'>[bee_resources]/100 resource supply.</span>"
. += "<span class='notice'>[bee_resources]% towards a new honeycomb.</span>"
. += "<span class='notice'>[bee_resources*2]% towards a new bee.</span>"
if(honeycombs.len)
var/plural = honeycombs.len > 1
to_chat(user, "<span class='notice'>There [plural? "are" : "is"] [honeycombs.len] uncollected honeycomb[plural ? "s":""] in the apiary.</span>")
. += "<span class='notice'>There [plural? "are" : "is"] [honeycombs.len] uncollected honeycomb[plural ? "s":""] in the apiary.</span>"
if(honeycombs.len >= get_max_honeycomb())
to_chat(user, "<span class='warning'>There's no room for more honeycomb!</span>")
. += "<span class='warning'>There's no room for more honeycomb!</span>"
/obj/structure/beebox/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/honey_frame))
@@ -4,7 +4,7 @@
desc = "Keeps the lil buzzing buggers out of your eyes."
icon_state = "beekeeper"
item_state = "beekeeper"
clothing_flags = THICKMATERIAL | SNUG_FIT
clothing_flags = THICKMATERIAL
/obj/item/clothing/suit/beekeeper_suit
+18 -6
View File
@@ -173,7 +173,7 @@
for(var/V in categories)
categories[V] = list()
for(var/V in stored_research.researched_designs)
var/datum/design/D = stored_research.researched_designs[V]
var/datum/design/D = SSresearch.techweb_design_by_id(V)
for(var/C in categories)
if(C in D.category)
categories[C] += D
@@ -185,11 +185,11 @@
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>"
dat += "[D.name]: <A href='?src=[REF(src)];create=[D.id];amount=1'>Make</A>"
if(cat in timesFiveCategories)
dat += "<A href='?src=[REF(src)];create=[REF(D)];amount=5'>x5</A>"
dat += "<A href='?src=[REF(src)];create=[D.id];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 += "<A href='?src=[REF(src)];create=[D.id];amount=10'>x10</A>"
dat += "([D.materials[MAT_BIOMASS]/efficiency])<br>"
dat += "</div>"
else
@@ -306,8 +306,20 @@
var/amount = (text2num(href_list["amount"]))
//Can't be outside these (if you change this keep a sane limit)
amount = CLAMP(amount, 1, 50)
var/datum/design/D = locate(href_list["create"])
create_product(D, amount)
var/id = href_list["create"]
if(!stored_research.researched_designs.Find(id))
//naughty naughty
stack_trace("ID did not map to a researched datum [id]")
return
//Get design by id (or may return error design)
var/datum/design/D = SSresearch.techweb_design_by_id(id)
//Valid design datum, amount and the datum is not the error design, lets proceed
if(D && amount && !istype(D, /datum/design/error_design))
create_product(D, amount)
//This shouldnt happen normally but href forgery is real
else
stack_trace("ID could not be turned into a valid techweb design datum [id]")
updateUsrDialog()
else if(href_list["menu"])
@@ -16,7 +16,7 @@
/obj/structure/fermenting_barrel/examine(mob/user)
. = ..()
to_chat(user, "<span class='notice'>It is currently [open?"open, letting you pour liquids in.":"closed, letting you draw liquids from the tap."]</span>")
. += "<span class='notice'>It is currently [open?"open, letting you pour liquids in.":"closed, letting you draw liquids from the tap."]</span>"
/obj/structure/fermenting_barrel/proc/makeWine(obj/item/reagent_containers/food/snacks/grown/fruit)
if(fruit.reagents)
+8 -7
View File
@@ -201,9 +201,9 @@
if(!G)
continue
dat += "<tr><td width='260px'>[G.get_name()]</td><td>"
if(can_extract)
if(can_extract && G.mutability_flags & PLANT_GENE_EXTRACTABLE)
dat += "<a href='?src=[REF(src)];gene=[REF(G)];op=extract'>Extract</a>"
if(can_insert && istype(disk.gene, G.type))
if(can_insert && istype(disk.gene, G.type) && G.mutability_flags & PLANT_GENE_REMOVABLE)
dat += "<a href='?src=[REF(src)];gene=[REF(G)];op=replace'>Replace</a>"
dat += "</td></tr>"
dat += "</table></div>"
@@ -232,9 +232,10 @@
for(var/a in trait_genes)
var/datum/plant_gene/G = a
dat += "<tr><td width='260px'>[G.get_name()]</td><td>"
if(can_extract)
if(can_extract && G.mutability_flags & PLANT_GENE_EXTRACTABLE)
dat += "<a href='?src=[REF(src)];gene=[REF(G)];op=extract'>Extract</a>"
dat += "<a href='?src=[REF(src)];gene=[REF(G)];op=remove'>Remove</a>"
if(G.mutability_flags & PLANT_GENE_REMOVABLE)
dat += "<a href='?src=[REF(src)];gene=[REF(G)];op=remove'>Remove</a>"
dat += "</td></tr>"
dat += "</table>"
else
@@ -439,7 +440,7 @@
to_chat(user, "<span class='notice'>You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"].</span>")
/obj/item/disk/plantgene/examine(mob/user)
..()
. = ..()
if(gene && (istype(gene, /datum/plant_gene/core/potency)))
to_chat(user,"<span class='notice'>Percent is relative to potency, not maximum volume of the plant.</span>")
to_chat(user, "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"].")
. += "<span class='notice'>Percent is relative to potency, not maximum volume of the plant.</span>"
. += "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"]."
+3 -3
View File
@@ -56,11 +56,11 @@
return 0
/obj/item/reagent_containers/food/snacks/grown/examine(user)
..()
. = ..()
if(seed)
for(var/datum/plant_gene/trait/T in seed.genes)
if(T.examine_line)
to_chat(user, T.examine_line)
. += T.examine_line
/obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params)
..()
@@ -131,7 +131,7 @@
..()
/obj/item/reagent_containers/food/snacks/grown/generate_trash(atom/location)
if(trash && ispath(trash, /obj/item/grown))
if(trash && (ispath(trash, /obj/item/grown) || ispath(trash, /obj/item/reagent_containers/food/snacks/grown)))
. = new trash(location, seed)
trash = null
return
+28 -2
View File
@@ -90,7 +90,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/white, /datum/plant_gene/trait/noreact, /datum/plant_gene/trait/repeated_harvest)
reagents_add = list("uranium" = 0.25, "iodine" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1)
rarity = 20
@@ -121,8 +121,9 @@
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "cherry-grow"
icon_dead = "cherry-dead"
icon_harvest = "cherry-harvest"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/cherry/blue)
mutatelist = list(/obj/item/seeds/cherry/blue, /obj/item/seeds/cherry/bulb)
reagents_add = list("nutriment" = 0.07, "sugar" = 0.07)
/obj/item/reagent_containers/food/snacks/grown/cherries
@@ -162,6 +163,31 @@
tastes = list("blue cherry" = 1)
wine_power = 50
//Cherry Bulbs
/obj/item/seeds/cherry/bulb
name = "pack of cherry bulb pits"
desc = "The glowy kind of cherries."
icon_state = "seed-cherrybulb"
species = "cherrybulb"
plantname = "Cherry Bulb Tree"
product = /obj/item/reagent_containers/food/snacks/grown/cherrybulbs
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/pink)
mutatelist = list()
reagents_add = list("nutriment" = 0.07, "sugar" = 0.07)
rarity = 10
/obj/item/reagent_containers/food/snacks/grown/cherrybulbs
seed = /obj/item/seeds/cherry/bulb
name = "cherry bulbs"
desc = "They're like little Space Christmas lights!"
icon_state = "cherry_bulb"
filling_color = "#FF0000"
bitesize_mod = 2
foodtype = FRUIT
grind_results = list("cherryjelly" = 0)
tastes = list("cherry" = 1)
wine_power = 50
// Grapes
/obj/item/seeds/grape
name = "pack of grape seeds"
@@ -61,6 +61,7 @@
species = "ocannabis"
plantname = "Omega Weed"
product = /obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/green)
mutatelist = list()
reagents_add = list("space_drugs" = 0.3,
"mindbreaker" = 0.3,
+58 -1
View File
@@ -33,6 +33,26 @@
filling_color = "#00FF00"
juice_results = list("limejuice" = 0)
// Electric Lime
/obj/item/seeds/lime/electric
name = "pack of electric lime seeds"
desc = "Electrically sour seeds."
icon_state = "seed-electriclime"
species = "electric lime"
plantname = "Electric Lime Tree"
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "lime-grow"
icon_dead = "lime-dead"
icon_harvest = "lime-harvest"
product = /obj/item/reagent_containers/food/snacks/grown/citrus/lime/electric
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/glow/green)
/obj/item/reagent_containers/food/snacks/grown/citrus/lime/electric
seed = /obj/item/seeds/lime/electric
name = "electric lime"
desc = "It's so sour, you'll be shocked!"
icon_state = "electriclime"
// Orange
/obj/item/seeds/orange
name = "pack of orange seeds"
@@ -49,7 +69,7 @@
icon_grow = "lime-grow"
icon_dead = "lime-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/lime)
mutatelist = list(/obj/item/seeds/lime, /obj/item/seeds/orange_3d)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05)
/obj/item/reagent_containers/food/snacks/grown/citrus/orange
@@ -61,6 +81,43 @@
juice_results = list("orangejuice" = 0)
distill_reagent = "triple_sec"
//3D Orange
/obj/item/seeds/orange_3d
name = "pack of extradimensional orange seeds"
desc = "Polygonal seeds."
icon_state = "seed-orange"
species = "orange"
plantname = "Extradimensional Orange Tree"
product = /obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d
lifespan = 60
endurance = 50
yield = 5
potency = 20
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "lime-grow"
icon_dead = "lime-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05, "haloperidol" = 0.15)
/obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d
seed = /obj/item/seeds/orange_3d
name = "extradminesional orange"
desc = "You can hardly wrap your head around this thing."
icon_state = "orang"
filling_color = "#FFA500"
juice_results = list("orangejuice" = 0)
distill_reagent = "triple_sec"
tastes = list("polygons" = 1, "oranges" = 1)
/obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d/pickup(mob/user)
. = ..()
icon_state = "orange"
/obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d/dropped(mob/user)
. = ..()
icon_state = "orang"
// Lemon
/obj/item/seeds/lemon
name = "pack of lemon seeds"
@@ -15,7 +15,7 @@
icon_grow = "cocoapod-grow"
icon_dead = "cocoapod-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/cocoapod/vanillapod)
mutatelist = list(/obj/item/seeds/cocoapod/vanillapod, /obj/item/seeds/cocoapod/bungotree)
reagents_add = list("cocoa" = 0.25, "nutriment" = 0.1)
/obj/item/reagent_containers/food/snacks/grown/cocoapod
@@ -50,3 +50,54 @@
foodtype = FRUIT
tastes = list("vanilla" = 1)
distill_reagent = "vanilla" //Takes longer, but you can get even more vanilla from it.
/obj/item/seeds/cocoapod/bungotree
name = "pack of bungo tree seeds"
desc = "These seeds grow into bungo trees. They appear to be heavy and almost perfectly spherical."
icon_state = "seed-bungotree"
species = "bungotree"
plantname = "Bungo Tree"
product = /obj/item/reagent_containers/food/snacks/grown/bungofruit
lifespan = 30
maturation = 4
yield = 3
production = 7
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list()
reagents_add = list("enzyme" = 0.1, "nutriment" = 0.1)
growthstages = 4
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "bungotree-grow"
icon_dead = "bungotree-dead"
rarity = 15
/obj/item/reagent_containers/food/snacks/grown/bungofruit
seed = /obj/item/seeds/cocoapod/bungotree
name = "bungo fruit"
desc = "A strange fruit, tough leathery skin protects its juicy flesh and large poisonous seed."
icon_state = "bungo"
trash = /obj/item/reagent_containers/food/snacks/grown/bungopit
filling_color = "#E8C22F"
foodtype = FRUIT
tastes = list("bungo" = 2, "tropical fruitiness" = 1)
distill_reagent = null
/obj/item/reagent_containers/food/snacks/grown/bungopit
seed = /obj/item/seeds/cocoapod/bungotree
name = "bungo pit"
icon_state = "bungopit"
desc = "A large seed, it is said to be potent enough to be able to stop a mans heart."
w_class = WEIGHT_CLASS_TINY
throwforce = 5
throw_speed = 3
throw_range = 7
foodtype = TOXIC
tastes = list("acrid bitterness" = 1)
/obj/item/reagent_containers/food/snacks/grown/bungopit/Initialize()
. =..()
reagents.clear_reagents()
reagents.add_reagent("bungotoxin", seed.potency * 0.10) //More than this will kill at too low potency
reagents.add_reagent("nutriment", seed.potency * 0.04)
+79 -79
View File
@@ -1,79 +1,79 @@
/obj/item/seeds/cotton
name = "pack of cotton seeds"
desc = "A pack of seeds that'll grow into a cotton plant. Assistants make good free labor if neccesary."
icon_state = "seed-cotton"
species = "cotton"
plantname = "Cotton"
icon_harvest = "cotton-harvest"
product = /obj/item/grown/cotton
lifespan = 35
endurance = 25
maturation = 15
production = 1
yield = 2
potency = 50
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing.dmi'
icon_dead = "cotton-dead"
mutatelist = list(/obj/item/seeds/cotton/durathread)
/obj/item/grown/cotton
seed = /obj/item/seeds/cotton
name = "cotton bundle"
desc = "A fluffy bundle of cotton."
icon_state = "cotton"
force = 0
throwforce = 0
w_class = WEIGHT_CLASS_TINY
throw_speed = 2
throw_range = 3
attack_verb = list("pomfed")
var/cotton_type = /obj/item/stack/sheet/cotton
var/cotton_name = "raw cotton"
/obj/item/grown/cotton/attack_self(mob/user)
user.show_message("<span class='notice'>You pull some [cotton_name] out of the [name]!</span>", 1)
var/seed_modifier = 0
if(seed)
seed_modifier = round(seed.potency / 25)
var/obj/item/stack/cotton = new cotton_type(user.loc, 1 + seed_modifier)
var/old_cotton_amount = cotton.amount
for(var/obj/item/stack/ST in user.loc)
if(ST != cotton && istype(ST, cotton_type) && ST.amount < ST.max_amount)
ST.attackby(cotton, user)
if(cotton.amount > old_cotton_amount)
to_chat(user, "<span class='notice'>You add the newly-formed [cotton_name] to the stack. It now contains [cotton.amount] [cotton_name].</span>")
qdel(src)
//reinforced mutated variant
/obj/item/seeds/cotton/durathread
name = "pack of durathread seeds"
desc = "A pack of seeds that'll grow into an extremely durable thread that could easily rival plasteel if woven properly."
icon_state = "seed-durathread"
species = "durathread"
plantname = "Durathread"
icon_harvest = "durathread-harvest"
product = /obj/item/grown/cotton/durathread
lifespan = 80
endurance = 50
maturation = 15
production = 1
yield = 2
potency = 50
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing.dmi'
icon_dead = "cotton-dead"
/obj/item/grown/cotton/durathread
seed = /obj/item/seeds/cotton/durathread
name = "durathread bundle"
desc = "A tough bundle of durathread, good luck unraveling this."
icon_state = "durathread"
force = 5
throwforce = 5
w_class = WEIGHT_CLASS_NORMAL
throw_speed = 2
throw_range = 3
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
cotton_type = /obj/item/stack/sheet/cotton/durathread
cotton_name = "raw durathread"
/obj/item/seeds/cotton
name = "pack of cotton seeds"
desc = "A pack of seeds that'll grow into a cotton plant. Assistants make good free labor if neccesary."
icon_state = "seed-cotton"
species = "cotton"
plantname = "Cotton"
icon_harvest = "cotton-harvest"
product = /obj/item/grown/cotton
lifespan = 35
endurance = 25
maturation = 15
production = 1
yield = 2
potency = 50
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing.dmi'
icon_dead = "cotton-dead"
mutatelist = list(/obj/item/seeds/cotton/durathread)
/obj/item/grown/cotton
seed = /obj/item/seeds/cotton
name = "cotton bundle"
desc = "A fluffy bundle of cotton."
icon_state = "cotton"
force = 0
throwforce = 0
w_class = WEIGHT_CLASS_TINY
throw_speed = 2
throw_range = 3
attack_verb = list("pomfed")
var/cotton_type = /obj/item/stack/sheet/cotton
var/cotton_name = "raw cotton"
/obj/item/grown/cotton/attack_self(mob/user)
user.show_message("<span class='notice'>You pull some [cotton_name] out of the [name]!</span>", MSG_VISUAL)
var/seed_modifier = 0
if(seed)
seed_modifier = round(seed.potency / 25)
var/obj/item/stack/cotton = new cotton_type(user.loc, 1 + seed_modifier)
var/old_cotton_amount = cotton.amount
for(var/obj/item/stack/ST in user.loc)
if(ST != cotton && istype(ST, cotton_type) && ST.amount < ST.max_amount)
ST.attackby(cotton, user)
if(cotton.amount > old_cotton_amount)
to_chat(user, "<span class='notice'>You add the newly-formed [cotton_name] to the stack. It now contains [cotton.amount] [cotton_name].</span>")
qdel(src)
//reinforced mutated variant
/obj/item/seeds/cotton/durathread
name = "pack of durathread seeds"
desc = "A pack of seeds that'll grow into an extremely durable thread that could easily rival plasteel if woven properly."
icon_state = "seed-durathread"
species = "durathread"
plantname = "Durathread"
icon_harvest = "durathread-harvest"
product = /obj/item/grown/cotton/durathread
lifespan = 80
endurance = 50
maturation = 15
production = 1
yield = 2
potency = 50
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing.dmi'
icon_dead = "cotton-dead"
/obj/item/grown/cotton/durathread
seed = /obj/item/seeds/cotton/durathread
name = "durathread bundle"
desc = "A tough bundle of durathread, good luck unraveling this."
icon_state = "durathread"
force = 5
throwforce = 5
w_class = WEIGHT_CLASS_NORMAL
throw_speed = 2
throw_range = 3
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
cotton_type = /obj/item/stack/sheet/cotton/durathread
cotton_name = "raw durathread"
+39 -1
View File
@@ -37,7 +37,7 @@
species = "lily"
plantname = "Lily Plants"
product = /obj/item/reagent_containers/food/snacks/grown/poppy/lily
mutatelist = list(/obj/item/seeds/bee_balm)
mutatelist = list(/obj/item/seeds/bee_balm, /obj/item/seeds/poppy/lily/trumpet)
/obj/item/reagent_containers/food/snacks/grown/poppy/lily
seed = /obj/item/seeds/poppy/lily
@@ -47,6 +47,43 @@
tastes = list("pelts " = 1)
filling_color = "#FFA500"
/obj/item/seeds/poppy/lily/trumpet
name = "pack of spaceman's trumpet seeds"
desc = "A plant sculped by extensive genetic engineering. The spaceman's trumpet is said to bear no resemblance to its wild ancestors. Inside NT AgriSci circles it is better known as NTPW-0372."
icon_state = "seed-trumpet"
species = "spacemanstrumpet"
plantname = "Spaceman's Trumpet Plant"
product = /obj/item/reagent_containers/food/snacks/grown/trumpet
lifespan = 80
production = 5
endurance = 10
maturation = 12
yield = 4
potency = 20
growthstages = 4
weed_rate = 2
weed_chance = 10
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
icon_grow = "spacemanstrumpet-grow"
icon_dead = "spacemanstrumpet-dead"
mutatelist = list()
genes = list(/datum/plant_gene/reagent/polypyr)
reagents_add = list("nutriment" = 0.05)
rarity = 30
/obj/item/seeds/poppy/lily/trumpet/Initialize()
..()
unset_mutability(/datum/plant_gene/reagent/polypyr, PLANT_GENE_EXTRACTABLE)
/obj/item/reagent_containers/food/snacks/grown/trumpet
seed = /obj/item/seeds/poppy/lily/trumpet
name = "spaceman's trumpet"
desc = "A vivid flower that smells faintly of freshly cut grass. Touching the flower seems to stain the skin some time after contact, yet most other surfaces seem to be unaffected by this phenomenon."
icon_state = "spacemanstrumpet"
filling_color = "#FF6347"
bitesize_mod = 3
foodtype = VEGETABLES
// Geranium
/obj/item/seeds/poppy/geranium
name = "pack of geranium seeds"
@@ -145,6 +182,7 @@
icon_grow = "moonflower-grow"
icon_dead = "sunflower-dead"
product = /obj/item/reagent_containers/food/snacks/grown/moonflower
genes = list(/datum/plant_gene/trait/glow/purple)
mutatelist = list()
reagents_add = list("moonshine" = 0.2, "vitamin" = 0.02, "nutriment" = 0.02)
rarity = 15
+52 -1
View File
@@ -15,7 +15,7 @@
icon_grow = "grass-grow"
icon_dead = "grass-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/grass/carpet)
mutatelist = list(/obj/item/seeds/grass/carpet, /obj/item/seeds/grass/fairy)
reagents_add = list("nutriment" = 0.02, "hydrogen" = 0.05)
/obj/item/reagent_containers/food/snacks/grown/grass
@@ -40,6 +40,57 @@
new stacktype(user.drop_location(), grassAmt)
qdel(src)
//Fairygrass
/obj/item/seeds/grass/fairy
name = "pack of fairygrass seeds"
desc = "These seeds grow into a more mystical grass."
icon_state = "seed-fairygrass"
species = "fairygrass"
plantname = "Fairygrass"
product = /obj/item/reagent_containers/food/snacks/grown/grass/fairy
icon_grow = "fairygrass-grow"
icon_dead = "fairygrass-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/blue)
reagents_add = list("nutriment" = 0.02, "hydrogen" = 0.05, "space_drugs" = 0.15)
/obj/item/reagent_containers/food/snacks/grown/grass/fairy
seed = /obj/item/seeds/grass/fairy
name = "fairygrass"
desc = "Glowing, and smells fainly of mushrooms."
icon_state = "fairygrassclump"
filling_color = "#3399ff"
stacktype = /obj/item/stack/tile/fairygrass
/obj/item/reagent_containers/food/snacks/grown/grass/fairy/attack_self(mob/user)
var/datum/plant_gene/trait/glow/G = null
for(var/datum/plant_gene/trait/glow/gene in seed.genes)
G = gene
break
stacktype = initial(stacktype)
if(G)
switch(G.type)
if(/datum/plant_gene/trait/glow/white)
stacktype = /obj/item/stack/tile/fairygrass/white
if(/datum/plant_gene/trait/glow/red)
stacktype = /obj/item/stack/tile/fairygrass/red
if(/datum/plant_gene/trait/glow/yellow)
stacktype = /obj/item/stack/tile/fairygrass/yellow
if(/datum/plant_gene/trait/glow/green)
stacktype = /obj/item/stack/tile/fairygrass/green
if(/datum/plant_gene/trait/glow/blue)
stacktype = /obj/item/stack/tile/fairygrass/blue
if(/datum/plant_gene/trait/glow/purple)
stacktype = /obj/item/stack/tile/fairygrass/purple
if(/datum/plant_gene/trait/glow/pink)
stacktype = /obj/item/stack/tile/fairygrass/pink
. = ..()
// Carpet
/obj/item/seeds/grass/carpet
name = "pack of carpet seeds"
+1
View File
@@ -44,6 +44,7 @@
species = "holymelon"
plantname = "Holy Melon Vines"
product = /obj/item/reagent_containers/food/snacks/grown/holymelon
genes = list(/datum/plant_gene/trait/glow/yellow)
mutatelist = list()
reagents_add = list("holywater" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1)
rarity = 20
+75 -2
View File
@@ -15,7 +15,7 @@
grind_results = list("mustardgrind" = 1)
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
genes = list(/datum/plant_gene/trait/plant_type/weed_hardy)
mutatelist = list(/obj/item/seeds/harebell)
mutatelist = list(/obj/item/seeds/starthistle/corpse_flower, /obj/item/seeds/galaxythistle)
/obj/item/seeds/starthistle/harvest(mob/user)
var/obj/machinery/hydroponics/parent = loc
@@ -29,6 +29,76 @@
parent.update_tray()
// Corpse flower
/obj/item/seeds/starthistle/corpse_flower
name = "pack of corpse flower seeds"
desc = "A species of plant that emits a horrible odor. The odor stops being produced in difficult atmospheric conditions."
icon_state = "seed-corpse-flower"
species = "corpse-flower"
plantname = "Corpse flower"
production = 2
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
genes = list()
mutatelist = list()
/obj/item/seeds/starthistle/corpse_flower/pre_attack(obj/machinery/hydroponics/I)
if(istype(I, /obj/machinery/hydroponics))
if(!I.myseed)
START_PROCESSING(SSobj, src)
return ..()
/obj/item/seeds/starthistle/corpse_flower/process()
var/obj/machinery/hydroponics/parent = loc
if(parent.age < maturation) // Start a little before it blooms
return
var/turf/open/T = get_turf(parent)
if(abs(ONE_ATMOSPHERE - T.return_air().return_pressure()) > (potency/10 + 10)) // clouds can begin showing at around 50-60 potency in standard atmos
return
var/datum/gas_mixture/stank = new
stank.gases[/datum/gas/miasma] = (yield + 6)*7*0.02 // this process is only being called about 2/7 as much as corpses so this is 12-32 times a corpses
stank.temperature = T20C // without this the room would eventually freeze and miasma mining would be easier
T.assume_air(stank)
T.air_update_turf()
//Galaxy Thistle
/obj/item/seeds/galaxythistle
name = "pack of galaxythistle seeds"
desc = "An impressive species of weed that is thought to have evolved from the simple milk thistle. Contains flavolignans that can help repair a damaged liver."
icon_state = "seed-galaxythistle"
species = "galaxythistle"
plantname = "Galaxythistle"
product = /obj/item/reagent_containers/food/snacks/grown/galaxythistle
lifespan = 70
endurance = 40
maturation = 3
production = 2
yield = 2
potency = 25
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
genes = list(/datum/plant_gene/trait/plant_type/weed_hardy, /datum/plant_gene/trait/invasive)
mutatelist = list()
reagents_add = list("nutriment" = 0.05, "silibinin" = 0.1)
/obj/item/seeds/galaxythistle/Initialize()
..()
unset_mutability(/datum/plant_gene/trait/invasive, PLANT_GENE_REMOVABLE)
/obj/item/reagent_containers/food/snacks/grown/galaxythistle
seed = /obj/item/seeds/galaxythistle
name = "galaxythistle flower head"
desc = "This spiny cluster of florets reminds you of the highlands."
icon_state = "galaxythistle"
filling_color = "#1E7549"
bitesize_mod = 3
foodtype = VEGETABLES
wine_power = 35
tastes = list("thistle" = 2, "artichoke" = 1)
// Cabbage
/obj/item/seeds/cabbage
name = "pack of cabbage seeds"
@@ -156,9 +226,12 @@
/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/proc/prime()
icon_state = "cherry_bomb_lit"
playsound(src, 'sound/effects/fuse.ogg', seed.potency, 0)
addtimer(CALLBACK(src, /obj/item/reagent_containers/food/snacks/grown/cherry_bomb/proc/detonate), rand(50, 100))
/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/proc/detonate()
reagents.chem_temp = 1000 //Sets off the black powder
reagents.handle_reactions()
// Lavaland cactus
/obj/item/seeds/lavaland/cactus
@@ -191,6 +191,7 @@
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("nutriment" = 0.1)
mutatelist = list(/obj/item/seeds/chanterelle/jupitercup)
/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle
seed = /obj/item/seeds/chanter
@@ -199,6 +200,34 @@
icon_state = "chanterelle"
filling_color = "#FFA500"
//Jupiter Cup
/obj/item/seeds/chanterelle/jupitercup
name = "pack of jupiter cup mycelium"
desc = "This mycelium grows into jupiter cups. Zeus would be envious at the power at your fingertips."
icon_state = "mycelium-jupitercup"
species = "jupitercup"
plantname = "Jupiter Cups"
product = /obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup
lifespan = 40
production = 4
endurance = 8
yield = 4
growthstages = 2
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/reagent/liquidelectricity, /datum/plant_gene/trait/plant_type/carnivory)
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("nutriment" = 0.1)
/obj/item/seeds/chanterelle/jupitercup/Initialize()
..()
unset_mutability(/datum/plant_gene/reagent/liquidelectricity, PLANT_GENE_EXTRACTABLE)
unset_mutability(/datum/plant_gene/trait/plant_type/carnivory, PLANT_GENE_REMOVABLE)
/obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup
seed = /obj/item/seeds/chanterelle/jupitercup
name = "jupiter cup"
desc = "A strange red mushroom, its surface is moist and slick. You wonder how many tiny worms have met their fate inside."
icon_state = "jupitercup"
filling_color = "#B5003D"
// Glowshroom
/obj/item/seeds/glowshroom
+1 -1
View File
@@ -29,7 +29,7 @@
/obj/item/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, params)
if(W.get_sharpness())
user.show_message("<span class='notice'>You carve a face into [src]!</span>", 1)
user.show_message("<span class='notice'>You carve a face into [src]!</span>", MSG_VISUAL)
new /obj/item/clothing/head/hardhat/pumpkinhead(user.loc)
qdel(src)
return
+1 -1
View File
@@ -51,7 +51,7 @@
/obj/item/grown/log/attackby(obj/item/W, mob/user, params)
if(W.sharpness)
user.show_message("<span class='notice'>You make [plank_name] out of \the [src]!</span>", 1)
user.show_message("<span class='notice'>You make [plank_name] out of \the [src]!</span>", MSG_VISUAL)
var/seed_modifier = 0
if(seed)
seed_modifier = round(seed.potency / 25)
+39 -15
View File
@@ -169,8 +169,27 @@
//Pests & Weeds//////////////////////////////////////////////////////////
else if(pestlevel >= 5)
adjustHealth(-1 / rating)
if(pestlevel >= 8)
if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory))
adjustHealth(-2 / rating)
else
adjustHealth(2 / rating)
adjustPests(-1 / rating)
else if(pestlevel >= 4)
if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory))
adjustHealth(-1 / rating)
else
adjustHealth(1 / rating)
if(prob(50))
adjustPests(-1 / rating)
else if(pestlevel < 4 && myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory))
adjustHealth(-2 / rating)
if(prob(5))
adjustPests(-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))
@@ -210,6 +229,12 @@
needs_update = 1
if (needs_update)
update_icon()
if(myseed && prob(5 * (11-myseed.production)))
for(var/g in myseed.genes)
if(istype(g, /datum/plant_gene/trait))
var/datum/plant_gene/trait/selectedtrait = g
selectedtrait.on_grow(src)
return
/obj/machinery/hydroponics/proc/nutrimentMutation()
@@ -294,32 +319,31 @@
/obj/machinery/hydroponics/examine(user)
..()
. = ..()
if(myseed)
to_chat(user, "<span class='info'>It has <span class='name'>[myseed.plantname]</span> planted.</span>")
. += "<span class='info'>It has <span class='name'>[myseed.plantname]</span> planted.</span>"
if (dead)
to_chat(user, "<span class='warning'>It's dead!</span>")
. += "<span class='warning'>It's dead!</span>"
else if (harvest)
to_chat(user, "<span class='info'>It's ready to harvest.</span>")
. += "<span class='info'>It's ready to harvest.</span>"
else if (plant_health <= (myseed.endurance / 2))
to_chat(user, "<span class='warning'>It looks unhealthy.</span>")
. += "<span class='warning'>It looks unhealthy.</span>"
else
to_chat(user, "<span class='info'>It's empty.</span>")
. += "<span class='info'>It's empty.</span>"
if(!self_sustaining)
to_chat(user, "<span class='info'>Water: [waterlevel]/[maxwater].</span>")
to_chat(user, "<span class='info'>Nutrient: [nutrilevel]/[maxnutri].</span>")
. += "<span class='info'>Water: [waterlevel]/[maxwater].</span>"
. += "<span class='info'>Nutrient: [nutrilevel]/[maxnutri].</span>"
if(self_sufficiency_progress > 0)
var/percent_progress = round(self_sufficiency_progress * 100 / self_sufficiency_req)
to_chat(user, "<span class='info'>Treatment for self-sustenance are [percent_progress]% complete.</span>")
. += "<span class='info'>Treatment for self-sustenance are [percent_progress]% complete.</span>"
else
to_chat(user, "<span class='info'>It doesn't require any water or nutrients.</span>")
. += "<span class='info'>It doesn't require any water or nutrients.</span>"
if(weedlevel >= 5)
to_chat(user, "<span class='warning'>It's filled with weeds!</span>")
. += "<span class='warning'>It's filled with weeds!</span>"
if(pestlevel >= 5)
to_chat(user, "<span class='warning'>It's filled with tiny worms!</span>")
to_chat(user, "" )
. += "<span class='warning'>It's filled with tiny worms!</span>"
/obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, this happens.
+95 -11
View File
@@ -1,8 +1,18 @@
/datum/plant_gene
var/name
var/mutability_flags = PLANT_GENE_EXTRACTABLE | PLANT_GENE_REMOVABLE ///These flags tells the genemodder if we want the gene to be extractable, only removable or neither.
/datum/plant_gene/proc/get_name() // Used for manipulator display and gene disk name.
return name
var/formatted_name
if(!(mutability_flags & PLANT_GENE_REMOVABLE && mutability_flags & PLANT_GENE_EXTRACTABLE))
if(mutability_flags & PLANT_GENE_REMOVABLE)
formatted_name += "Fragile "
else if(mutability_flags & PLANT_GENE_EXTRACTABLE)
formatted_name += "Essential "
else
formatted_name += "Immutable "
formatted_name += name
return formatted_name
/datum/plant_gene/proc/can_add(obj/item/seeds/S)
return !istype(S, /obj/item/seeds/sample) // Samples can't accept new genes
@@ -101,7 +111,18 @@
var/rate = 0.04
/datum/plant_gene/reagent/get_name()
return "[name] production [rate*100]%"
var/formatted_name
if(!(mutability_flags & PLANT_GENE_REMOVABLE && mutability_flags & PLANT_GENE_EXTRACTABLE))
if(mutability_flags & PLANT_GENE_REMOVABLE)
formatted_name += "Fragile "
else if(mutability_flags & PLANT_GENE_EXTRACTABLE)
formatted_name += "Essential "
else
formatted_name += "Immutable "
formatted_name += "[name] production [rate*100]%"
return formatted_name
/datum/plant_gene/reagent/proc/set_reagent(reag_id)
reagent_id = reag_id
@@ -132,6 +153,15 @@
return FALSE
return TRUE
/datum/plant_gene/reagent/polypyr
name = "Polypyrylium Oligomers"
reagent_id = "polypyr"
rate = 0.15
/datum/plant_gene/reagent/liquidelectricity
name = "Liquid Electricity"
reagent_id = "liquidelectricity"
rate = 0.1
// Various traits affecting the product. Each must be somehow useful.
/datum/plant_gene/trait
@@ -173,6 +203,10 @@
/datum/plant_gene/trait/proc/on_throw_impact(obj/item/reagent_containers/food/snacks/grown/G, atom/target)
return
///This proc triggers when the tray processes and a roll is sucessful, the success chance scales with production.
/datum/plant_gene/trait/proc/on_grow(obj/machinery/hydroponics/H)
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.
// Also splashes everything in target turf with reagents and applies other trait effects (teleporting, etc) to the target by on_squash.
@@ -261,22 +295,44 @@
/datum/plant_gene/trait/glow/shadow
//makes plant emit slightly purple shadows
//adds -potency*(rate*0.2) light power to products
name = "Shadow Emission"
rate = 0.04
glow_color = "#AAD84B"
/datum/plant_gene/trait/glow/shadow/glow_power(obj/item/seeds/S)
return -max(S.potency*(rate*0.2), 0.2)
/datum/plant_gene/trait/glow/white
name = "White Bioluminescence"
glow_color = "#FFFFFF"
/datum/plant_gene/trait/glow/red
name = "Red Electrical Glow"
glow_color = LIGHT_COLOR_RED
//Colored versions of bioluminescence.
name = "Red Bioluminescence"
glow_color = "#FF3333"
/datum/plant_gene/trait/glow/yellow
//not the disgusting glowshroom yellow hopefully
name = "Yellow Bioluminescence"
glow_color = "#FFFF66"
/datum/plant_gene/trait/glow/green
//oh no, now i'm radioactive
name = "Green Bioluminescence"
glow_color = "#99FF99"
/datum/plant_gene/trait/glow/blue
//the best one
name = "Blue Bioluminescence"
glow_color = "#6699FF"
/datum/plant_gene/trait/glow/purple
//did you know that notepad++ doesnt think bioluminescence is a word
name = "Purple Bioluminescence"
glow_color = "#D966FF"
/datum/plant_gene/trait/glow/pink
//gay tide station pride
name = "Pink Bioluminescence"
glow_color = "#FFB3DA"
/datum/plant_gene/trait/glow/berry
name = "Strong Bioluminescence"
rate = 0.05
glow_color = null
/datum/plant_gene/trait/teleport
@@ -400,6 +456,30 @@
if(!(G.resistance_flags & FIRE_PROOF))
G.resistance_flags |= FIRE_PROOF
//Invasive spreading lets the plant jump to other trays, the spreadinhg plant won't replace plants of the same type.
/datum/plant_gene/trait/invasive
name = "Invasive Spreading"
/datum/plant_gene/trait/invasive/on_grow(obj/machinery/hydroponics/H)
for(var/step_dir in GLOB.alldirs)
var/obj/machinery/hydroponics/HY = locate() in get_step(H, step_dir)
if(HY && prob(15))
if(HY.myseed) // check if there is something in the tray.
if(HY.myseed.type == H.myseed.type && HY.dead != 0)
continue //It should not destroy its owm kind.
qdel(HY.myseed)
HY.myseed = null
HY.myseed = H.myseed.Copy()
HY.age = 0
HY.dead = 0
HY.plant_health = HY.myseed.endurance
HY.lastcycle = world.time
HY.harvest = 0
HY.weedlevel = 0 // Reset
HY.pestlevel = 0 // Reset
HY.update_icon()
HY.visible_message("<span class='warning'>The [H.myseed.plantname] spreads!</span>")
/datum/plant_gene/trait/plant_type // Parent type
name = "you shouldn't see this"
trait_id = "plant_type"
@@ -412,3 +492,7 @@
/datum/plant_gene/trait/plant_type/alien_properties
name ="?????"
/datum/plant_gene/trait/plant_type/carnivory
name = "Obligate Carnivory"
+13
View File
@@ -67,6 +67,7 @@
for(var/reag_id in reagents_add)
genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id])
reagents_from_genes() //quality coding
/obj/item/seeds/proc/Copy()
var/obj/item/seeds/S = new type(null, 1)
@@ -94,6 +95,18 @@
for(var/datum/plant_gene/reagent/R in genes)
reagents_add[R.reagent_id] = R.rate
///This proc adds a mutability_flag to a gene
/obj/item/seeds/proc/set_mutability(typepath, mutability)
var/datum/plant_gene/g = get_gene(typepath)
if(g)
g.mutability_flags |= mutability
///This proc removes a mutability_flag from a gene
/obj/item/seeds/proc/unset_mutability(typepath, mutability)
var/datum/plant_gene/g = get_gene(typepath)
if(g)
g.mutability_flags &= ~mutability
/obj/item/seeds/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0)
adjust_lifespan(rand(-lifemut,lifemut))
adjust_endurance(rand(-endmut,endmut))