diff --git a/__DEFINES/hydroponics.dm b/__DEFINES/hydroponics.dm
index a24db7dba06..76e46f74b9f 100644
--- a/__DEFINES/hydroponics.dm
+++ b/__DEFINES/hydroponics.dm
@@ -9,6 +9,7 @@
// Definitions for genes (trait groupings)
#define GENE_PHYTOCHEMISTRY "phytochemistry"
+#define GENE_BIOMOLECULES "biomolecules"
#define GENE_MORPHOLOGY "morphology"
#define GENE_BIOLUMINESCENCE "bioluminescence"
#define GENE_ECOLOGY "ecology"
@@ -27,7 +28,10 @@
//Xenobotany mutations
//Phytochemistry
#define PLANT_CHEMICAL (1<<0)
-#define PLANT_POTENCY (1<<1)
+#define PLANT_POTENCY (1<<1)
+
+//Biomolecules
+#define PLANT_MOLECULE (1<<0)
//Morphology
#define PLANT_PRODUCTS (1<<0)
@@ -72,4 +76,4 @@
#define PLANT_TELEPORT (1<<0)
#define PLANT_ROOMTEMP (1<<1)
#define PLANT_GAS (1<<2)
-#define PLANT_NOREACT (1<<3) //unique to xeno plants, unused
\ No newline at end of file
+#define PLANT_NOREACT (1<<3) //unique to xeno plants, unused
diff --git a/__DEFINES/reagents.dm b/__DEFINES/reagents.dm
index acf339acab5..e6dcc0b776c 100644
--- a/__DEFINES/reagents.dm
+++ b/__DEFINES/reagents.dm
@@ -571,3 +571,10 @@ var/list/cheartstopper = list(/*"potassium_chloride",*/ CHEESYGLOOP) //this stop
#define INCENSE_CRAVE "vales"
#define INCENSE_CORNOIL "cornoils"
#define INCENSE_MUSTARDPLANT "mustardplant"
+
+#define GLUCOSE "Glucose"
+#define CELLULOSE "Cellulose"
+#define PROTEIN "Protein"
+#define STARCH "Starch"
+#define CHITIN "Chitin"
+#define XENOPHYLL "Xenophyll"
diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
index 85c808afaa3..95dcaad4169 100644
--- a/code/game/machinery/biogenerator.dm
+++ b/code/game/machinery/biogenerator.dm
@@ -1,6 +1,6 @@
/datum/biogen_recipe
var/id=""
- var/cost=0
+ var/cost=list()
var/category=""
var/name=""
var/amount_per_unit=1
@@ -9,7 +9,12 @@
var/result=null
/datum/biogen_recipe/proc/Render(var/context)
- var/html = "
[name][(amount_per_unit > 1) ? " [amount_per_unit] units" : ""] ([cost])"
+ var/html = "[name][(amount_per_unit > 1) ? " [amount_per_unit] units" : ""] ("
+ var/cost_list = list()
+ for(var/molecule in cost)
+ cost_list += "[cost[molecule]] [molecule]"
+ html += jointext(cost_list, ", ")
+ html += ")"
if(other_amounts.len)
var/first=1
html += " ("
@@ -29,35 +34,35 @@
id=MILK
name=MILK
reagent=MILK
- cost=20
+ cost=list(GLUCOSE = 20)
amount_per_unit=10
other_amounts=list(5)
/datum/biogen_recipe/food/cheese
id="cheese"
name="Cheese Wheel"
- cost=100 //Making milk and reacting it with enzyme costs 80, so this is 25% more expensive
+ cost=list(GLUCOSE = 100) //Making milk and reacting it with enzyme costs 80, so this is 25% more expensive
other_amounts=list(5)
result=/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel
/datum/biogen_recipe/food/butter
id="butter"
name="Butter"
- cost=150 //The 40u milk for 20u cream costs 80, so this is about 87% more expensive
+ cost=list(GLUCOSE = 150) //The 40u milk for 20u cream costs 80, so this is about 87% more expensive
other_amounts=list(5)
result=/obj/item/weapon/reagent_containers/food/snacks/butter
/datum/biogen_recipe/food/meat
id="meat"
name="Slab of meat"
- cost=50
+ cost=list(PROTEIN = 50)
other_amounts=list(5)
result=/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh
/datum/biogen_recipe/food/monkeycube
id="monkeycube"
name="Monkey cube"
- cost=250
+ cost=list(PROTEIN = 250)
other_amounts=list(5)
result=/obj/item/weapon/reagent_containers/food/snacks/monkeycube
@@ -68,7 +73,7 @@
id="ez"
name="E-Z-Nutrient"
reagent=EZNUTRIENT
- cost=10
+ cost=list(STARCH = 5, GLUCOSE = 5)
amount_per_unit=10
other_amounts=list(5)
@@ -76,7 +81,7 @@
id="l4z"
name="Left 4 Zed"
reagent=LEFT4ZED
- cost=20
+ cost=list(CHITIN = 10, GLUCOSE = 10)
amount_per_unit=10
other_amounts=list(5)
@@ -84,12 +89,12 @@
id="rh"
name="Robust Harvest"
reagent=ROBUSTHARVEST
- cost=25
+ cost=list(PROTEIN = 15, GLUCOSE = 10)
amount_per_unit=10
other_amounts=list(5)
/datum/biogen_recipe/nutrient/beez
- cost=40
+ cost=list(PROTEIN = 10, GLUCOSE = 30)
id="beez"
name="Bottle of BeezEez"
other_amounts=list(5)
@@ -99,133 +104,134 @@
category="Leather"
/datum/biogen_recipe/leather/bee_net
- cost = 100
+ cost=list(STARCH = 30, CELLULOSE = 70)
id="bee_net"
name = "Bee Net"
result=/obj/item/weapon/bee_net
/datum/biogen_recipe/leather/wallet
- cost=100
+ cost=list(CELLULOSE = 100)
id="wallet"
name="Wallet"
result=/obj/item/weapon/storage/wallet
/datum/biogen_recipe/leather/gloves
- cost=250
+ cost=list(CELLULOSE = 200, CHITIN = 50)
id="gloves"
name="Botanical Gloves"
result=/obj/item/clothing/gloves/botanic_leather
/datum/biogen_recipe/leather/knifeholster
- cost=250
+ cost=list(CELLULOSE = 150, CHITIN = 100)
id="knifeholster"
name="Boot Knife Holster"
result=/obj/item/clothing/accessory/holster/knife/boot
/datum/biogen_recipe/leather/ammo_pouch
- cost = 250
+ cost=list(CELLULOSE = 100, CHITIN = 150)
id="ammopouch"
name = "Ammo Pouch"
result=/obj/item/weapon/storage/bag/ammo_pouch
/datum/biogen_recipe/leather/moneybag
- cost=300
+ cost=list(CELLULOSE = 300)
id="moneybag"
name="Money Bag"
result=/obj/item/weapon/storage/bag/money
/datum/biogen_recipe/leather/belt/slim
- cost=300
+ cost=list(CELLULOSE = 100, CHITIN = 100, STARCH = 100)
id="slim-belt"
name="Slim Belt"
result=/obj/item/weapon/storage/belt/slim
/datum/biogen_recipe/leather/belt
- cost=300
+ cost=list(CELLULOSE = 200, STARCH = 100)
id="belt"
name="Tool-belt"
result=/obj/item/weapon/storage/belt/utility
+//TODO
/datum/biogen_recipe/leather/bandolier
- cost = 300
+ cost=list(CELLULOSE = 100, STARCH = 100, GLUCOSE = 100)
id="bandolier"
name = "Bandolier"
result=/obj/item/clothing/accessory/storage/bandolier
/datum/biogen_recipe/leather/handgunholster
- cost=350
+ cost=list(CELLULOSE = 150, STARCH = 150, GLUCOSE = 50)
id="handgunholster"
name="Handgun Holster"
result=/obj/item/clothing/accessory/holster/handgun/biogenerator
/datum/biogen_recipe/leather/fannypack
- cost=100
+ cost=list(CELLULOSE = 75, CHITIN = 25)
id="fannypack"
name="Fanny Pack"
result=/obj/item/clothing/accessory/storage/fannypack
/datum/biogen_recipe/leather/ore
- cost=350
+ cost=list(CELLULOSE = 100, PROTEIN = 250)
id="ore"
name="Mining Satchel"
result=/obj/item/weapon/storage/bag/ore
/datum/biogen_recipe/leather/gadget
- cost=350
+ cost=list(CELLULOSE = 100, CHITIN = 250)
id="gadget"
name="Gadget Bag"
result=/obj/item/weapon/storage/bag/gadgets
/datum/biogen_recipe/leather/slime
- cost=350
+ cost=list(STARCH = 100, CHITIN = 250)
id="slime"
name="Slime Bag"
result=/obj/item/weapon/storage/bag/xenobio
/datum/biogen_recipe/leather/plants
- cost=350
+ cost=list(CELLULOSE = 200, STARCH = 150)
id="plants"
name="Plant Bag"
result=/obj/item/weapon/storage/bag/plants
/datum/biogen_recipe/leather/materials
- cost=500
+ cost=list(CELLULOSE = 100, STARCH = 100, GLUCOSE = 100, CHITIN = 100, PROTEIN = 100)
id="materials"
name="Materials Bag"
result=/obj/item/weapon/storage/bag/materials
/datum/biogen_recipe/leather/secbelt
- cost=400
+ cost=list(PROTEIN = 400)
id="secbelt"
name="Security Belt"
result=/obj/item/weapon/storage/belt/security
/datum/biogen_recipe/leather/minebelt
- cost=350
+ cost=list(CELLULOSE = 200, PROTEIN = 150)
id="minebelt"
name="Mining Gear Belt"
result=/obj/item/weapon/storage/belt/mining
/datum/biogen_recipe/leather/janibelt
- cost=350
+ cost=list(CELLULOSE = 200, STARCH = 100, GLUCOSE=50)
id="janibelt"
name="Janibelt"
result=/obj/item/weapon/storage/belt/janitor
/datum/biogen_recipe/leather/hydrobelt
- cost=350
+ cost=list(CELLULOSE = 100, STARCH = 100, GLUCOSE = 100, CHITIN = 50)
id="hydrobelt"
name="Botany Gear Belt"
result=/obj/item/weapon/storage/belt/botanist
/datum/biogen_recipe/leather/briefcase
- cost=400
+ cost=list(CELLULOSE = 200, STARCH = 200)
id="briefcase"
name="Leather Briefcase"
result=/obj/item/weapon/storage/briefcase/biogen
/datum/biogen_recipe/leather/satchel
- cost=400
+ cost=list(CELLULOSE = 200, STARCH = 200)
id="satchel"
name="Leather Satchel"
result=/obj/item/weapon/storage/backpack/satchel
@@ -234,41 +240,41 @@
category="Paper"
/datum/biogen_recipe/paper/papersheet
- cost=15
+ cost=list(CELLULOSE = 15)
id="papersheet"
name="Paper Sheet"
other_amounts=list(5,10)
result=/obj/item/weapon/paper
/datum/biogen_recipe/paper/cardboard
- cost=25
+ cost=list(CELLULOSE = 15, STARCH = 10)
id="cardboard"
name="Cardboard Sheet"
other_amounts=list(5,10,50)
result=/obj/item/stack/sheet/cardboard
/datum/biogen_recipe/paper/giftwrap
- cost=25
+ cost=list(CELLULOSE = 5, STARCH = 20)
id="giftwrap"
name="Gift Wrap"
amount_per_unit = 24
result=/obj/item/stack/package_wrap/gift
/datum/biogen_recipe/paper/packagewrap
- cost=30
+ cost=list(CELLULOSE = 5, STARCH = 20)
id="packagewrap"
name="Package Wrap"
amount_per_unit = 24
result=/obj/item/stack/package_wrap
/datum/biogen_recipe/paper/clipboard
- cost=75
+ cost=list(CELLULOSE = 75)
id="clipboard"
name="Clipboard"
result=/obj/item/weapon/storage/bag/clipboard
/datum/biogen_recipe/paper/paperbin
- cost=475 //25 from the cardboard, 30*15=450 from the paper
+ cost=list(CELLULOSE = 465, STARCH = 10) //25 from the cardboard, 30*15=450 from the paper
id="paperbin"
name="Paper Bin (30 sheets)"
result=/obj/item/weapon/paper_bin
@@ -279,7 +285,7 @@
/datum/biogen_recipe/misc/insecticide
id = "insecticide"
name = "Insecticide"
- cost=35
+ cost=list(PROTEIN = 10, STARCH = 10, CHITIN = 15)
reagent=INSECTICIDE
amount_per_unit=10
other_amounts=list(5)
@@ -288,32 +294,32 @@
id="plantbgone"
name="Plant-B-Gone"
reagent=PLANTBGONE
- cost=35
+ cost=list(CHITIN = 30, CELLULOSE = 5)
amount_per_unit=10
other_amounts=list(5)
/datum/biogen_recipe/misc/candle
- cost=50
+ cost=list(STARCH = 40, GLUCOSE = 10)
id="candle"
name="Red Candle"
other_amounts=list(5)
result=/obj/item/candle
/datum/biogen_recipe/misc/charcoal
- cost=100
+ cost=list(CELLULOSE = 100)
id="charcoal"
name="Charcoal Sheet"
other_amounts=list(5,10)
result=/obj/item/stack/sheet/charcoal
/datum/biogen_recipe/misc/soap
- cost=250
+ cost=list(GLUCOSE = 150, STARCH = 100)
id="soap"
name="Bar of Soap"
result=/obj/item/weapon/soap/nanotrasen
/datum/biogen_recipe/misc/crayons
- cost=400
+ cost=list(CELLULOSE = 200, STARCH = 200)
id="crayons"
name="Box of Crayons"
result=/obj/item/weapon/storage/fancy/crayons
@@ -321,39 +327,39 @@
/datum/biogen_recipe/misc/rice_hat
name = "Rice Hat"
id = "rice_hat"
- cost = 300
+ cost=list(STARCH = 300)
result = /obj/item/clothing/head/rice_hat
/datum/biogen_recipe/misc/roningasa
name = "Wickerwork Hat"
id = "wickerwork_hat"
- cost = 300
+ cost=list(CELLULOSE = 300)
result = /obj/item/clothing/head/rice_hat/ronin
/datum/biogen_recipe/misc/mino
name = "Grass Coat"
id = "grass_coat"
- cost = 500
+ cost=list(CELLULOSE = 300)
result = /obj/item/clothing/suit/mino
/datum/biogen_recipe/misc/rvest
name = "Reticulated Vest"
id = "rvest"
- cost = 500
+ cost=list(CELLULOSE = 200, STARCH = 300)
result = /obj/item/clothing/suit/reticulatedvest
/datum/biogen_recipe/flooring
category="Flooring"
/datum/biogen_recipe/flooring/carpet
- cost=10
+ cost=list(CELLULOSE = 5, STARCH = 5)
id="carpet"
name="Piece of Carpet"
other_amounts=list(5,10,20)
result=/obj/item/stack/tile/carpet
/datum/biogen_recipe/flooring/arcade
- cost=10
+ cost=list(CELLULOSE = 5, STARCH = 5)
id="arcadecarpet"
name="Piece of Arcade Carpet"
other_amounts=list(5,10,20)
@@ -372,7 +378,7 @@
var/biomass_coefficient = 9
var/tmp/processing = 0
var/obj/item/weapon/reagent_containers/glass/beaker = null
- var/points = 0
+ var/points = list(STARCH = 0, CHITIN = 0, GLUCOSE = 0, PROTEIN = 0, CELLULOSE = 0, XENOPHYLL = 0)
var/menustat = "menu"
var/tmp/list/recipes[0]
var/tmp/list/recipe_categories[0]
@@ -562,7 +568,9 @@
if (processing)
dat += "Biogenerator is processing! Please wait..."
else
- dat += "Biomass: [points] points.
"
+ for (var/nutrient in points)
+ if (points[nutrient] > 0)
+ dat += "[nutrient]: [points[nutrient]] points.
"
switch(menustat)
if("menu")
if (beaker)
@@ -613,10 +621,8 @@
var/S = 0
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/I in contents)
S += 5
- if(I.reagents.get_reagent_amount(NUTRIMENT) < 0.1)
- points += 1
- else
- points += I.reagents.get_reagent_amount(NUTRIMENT)*biomass_coefficient
+ for (var/molecule in I.seed.molecule_type)
+ points[molecule] += round((min(I.seed.potency, 200)*biomass_coefficient) / I.seed.molecule_type.len)
qdel(I)
if(S)
processing = 1
@@ -631,15 +637,16 @@
menustat = "void"
/obj/machinery/biogenerator/proc/check_cost(var/cost)
- if (cost > points)
- menustat = "nopoints"
- return 1
- else
- points -= cost
- processing = 1
- update_icon()
- updateUsrDialog()
- sleep(30)
+ for (var/nutrient in cost)
+ if (cost[nutrient] > points[nutrient])
+ menustat = "nopoints"
+ return 1
+ for (var/nutrient in cost)
+ points[nutrient] -= cost[nutrient]
+ processing = 1
+ update_icon()
+ updateUsrDialog()
+ sleep(30)
/obj/machinery/biogenerator/proc/create_product(var/item, var/num)
var/datum/biogen_recipe/recipe=recipes[item]
@@ -649,7 +656,11 @@
if(!(num in (recipe.other_amounts + 1)))
return 0
- if(check_cost(recipe.cost*num))
+ if(num > 1)
+ for (var/molecule in recipe.cost)
+ recipe.cost[molecule] *= num
+
+ if(check_cost(recipe.cost))
return 0
if(recipe.reagent)
diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm
index 7b1cfd7161e..a76d4499d8e 100644
--- a/code/modules/hydroponics/hydro_tools.dm
+++ b/code/modules/hydroponics/hydro_tools.dm
@@ -77,6 +77,7 @@
dat += "| Maturation time | [round(grown_seed.maturation, 0.01)] |
"
dat += "| Production time | [round(grown_seed.production, 0.01)] |
"
dat += "| Potency | [round(grown_seed.potency, 0.01)] |
"
+ dat += "| Primary Molecules | [jointext(grown_seed.molecule_type, ", ")] |
"
dat += ""
if(grown_reagents && grown_reagents.reagent_list && grown_reagents.reagent_list.len)
diff --git a/code/modules/hydroponics/hydroponics_mutations.dm b/code/modules/hydroponics/hydroponics_mutations.dm
index 789361a53e1..af11966f6ed 100644
--- a/code/modules/hydroponics/hydroponics_mutations.dm
+++ b/code/modules/hydroponics/hydroponics_mutations.dm
@@ -16,7 +16,7 @@
if(age < 3 && length(seed.mutants) && gene)
mutate_species()
if(!gene)
- gene = pick(GENE_PHYTOCHEMISTRY, GENE_MORPHOLOGY, GENE_BIOLUMINESCENCE, GENE_ECOLOGY, GENE_ECOPHYSIOLOGY, GENE_METABOLISM, GENE_DEVELOPMENT, GENE_XENOPHYSIOLOGY)
+ gene = pick(GENE_PHYTOCHEMISTRY, GENE_BIOMOLECULES, GENE_MORPHOLOGY, GENE_BIOLUMINESCENCE, GENE_ECOLOGY, GENE_ECOPHYSIOLOGY, GENE_METABOLISM, GENE_DEVELOPMENT, GENE_XENOPHYSIOLOGY)
check_for_divergence()
//The scaling functions modify stats with diminishing returns, approaching the hardcap value
@@ -45,6 +45,15 @@
if(check_success)
visible_message("\The [seed.display_name] develops a strange-looking gland.")
+ if(GENE_BIOMOLECULES)
+ var/new_molecule = pick(STARCH, CHITIN, PROTEIN, GLUCOSE, CELLULOSE, XENOPHYLL)
+ if (new_molecule in seed.molecule_type)
+ visible_message("\The [seed.display_name] has its phloem shrivel up.")
+ seed.molecule_type -= new_molecule
+ else
+ visible_message("\The [seed.display_name] seems to have a new substance filling its phloem.")
+ seed.molecule_type += new_molecule
+
if(GENE_MORPHOLOGY)
var/mutation_type = pick(PLANT_PRODUCTS, PLANT_THORNY, PLANT_JUICY, PLANT_LIGNEOUS, PLANT_STINGING, PLANT_APPEARANCE)
switch(mutation_type)
@@ -58,7 +67,7 @@
else
visible_message("\The [seed.display_name] sheds its thorns away...")
if(PLANT_JUICY)
- //clever way of going from 0 to 1 to 2.
+ //clever way of going from 0 to 1 to 2.
seed.juicy = (seed.juicy + 1) % 3
generic_mutation_message("wobbles!")
if(PLANT_LIGNEOUS)
@@ -111,7 +120,7 @@
//lower better
var/hardcap = 0.1
var/max_change = 0.15 //percent
- seed.lowkpa_tolerance -= round(min(hardcap - hardcap/2*round(log(10,hardcap/seed.lowkpa_tolerance*100),0.01),max_change*seed.lowkpa_tolerance),0.1)
+ seed.lowkpa_tolerance -= round(min(hardcap - hardcap/2*round(log(10,hardcap/seed.lowkpa_tolerance*100),0.01),max_change*seed.lowkpa_tolerance),0.1)
//higher better
var/hardcap = 500
var/max_change = 0.15 //percent
diff --git a/code/modules/hydroponics/prehistoric_plants.dm b/code/modules/hydroponics/prehistoric_plants.dm
index 4f8a5168fc3..8f7654a2230 100644
--- a/code/modules/hydroponics/prehistoric_plants.dm
+++ b/code/modules/hydroponics/prehistoric_plants.dm
@@ -9,6 +9,7 @@
mutants = null
harvest_repeat = 1
chems = list(DIETHYLAMINE = list(0,10))
+ molecule_type = list(XENOPHYLL)
lifespan = 60
maturation = 6
@@ -36,6 +37,7 @@
mutants = null
harvest_repeat = 1
chems = list(FROSTOIL = list(5,30))
+ molecule_type = list(XENOPHYLL)
lifespan = 50
maturation = 3
@@ -64,7 +66,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/jurlmah)
mutants = null
chems = list(CLONEXADONE = list(1,10))
-
+ molecule_type = list(XENOPHYLL)
lifespan = 25
maturation = 6
production = 1
@@ -95,6 +97,7 @@
mutants = null
noreact = 1
chems = list(POTASSIUM = list(0,10),SUGAR = list(0,10),PHOSPHORUS = list(0,10))
+ molecule_type = list(XENOPHYLL)
lifespan = 25
maturation = 10
@@ -127,6 +130,7 @@
mutants = null
harvest_repeat = 2
chems = list(NUTRIMENT = list(1,10))
+ molecule_type = list(XENOPHYLL)
lifespan = 55
maturation = 6
@@ -157,6 +161,7 @@
mutants = null
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10),SPORTDRINK = list(0,2),THYMOL = list(0,5))
+ molecule_type = list(XENOPHYLL)
lifespan = 100
maturation = 6
@@ -187,6 +192,7 @@
mutants = null
harvest_repeat = 1
chems = list(KARMOTRINE = list(2,2))
+ molecule_type = list(XENOPHYLL)
lifespan = 55
maturation = 7
diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm
index 8e7247b17a4..786f528a8a9 100644
--- a/code/modules/hydroponics/seed_datums.dm
+++ b/code/modules/hydroponics/seed_datums.dm
@@ -56,6 +56,7 @@ var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious tria
var/teleporting = 0 // If 1, causes teleportation when thrown.
var/juicy = 0 // 0 = no, 1 = splatters when thrown, 2 = slips
var/noreact = 0 // If 1, chems do not react inside the plant.
+ var/list/molecule_type = list() // Types of organic molecules produced by this plant. Used for biogenerator.
// Cosmetics.
var/plant_dmi = 'icons/obj/hydroponics/apple.dmi'// DMI to use for the plant growing in the tray.
@@ -279,6 +280,13 @@ var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious tria
if(GENEGUN_MODE_SPLICE)
potency = round(mix(gene.values[2], potency, rand(40, 60)/100), 0.1)
+ if(GENE_BIOMOLECULES)
+ if (gene.values[1])
+ switch(mode)
+ if(GENEGUN_MODE_PURGE)
+ molecule_type = gene.values[1]
+ if(GENEGUN_MODE_SPLICE)
+ molecule_type += gene.values[1]
if(GENE_MORPHOLOGY)
if(gene.values[1])
if(!products || mode == GENEGUN_MODE_PURGE)
@@ -407,7 +415,11 @@ var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious tria
if(GENE_PHYTOCHEMISTRY)
P.values = list(
(chems ? chems : 0),
- (potency ? potency : 0),
+ (potency ? potency : 0)
+ )
+ if(GENE_BIOMOLECULES)
+ P.values = list(
+ (molecule_type ? molecule_type : 0)
)
if(GENE_MORPHOLOGY)
P.values = list(
@@ -655,6 +667,7 @@ var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious tria
new_seed.alter_temp = alter_temp
new_seed.plant_dmi = plant_dmi
new_seed.mutation_log = mutation_log
+ new_seed.molecule_type = molecule_type
new_seed.mutation_log += "([timestamp()]) Diverged from seed with uid: [uid]."
ASSERT(istype(new_seed)) //something happened... oh no...
diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm
index 91da281c556..2cfce134543 100644
--- a/code/modules/hydroponics/seed_machines.dm
+++ b/code/modules/hydroponics/seed_machines.dm
@@ -191,6 +191,7 @@
var/list/data = list()
var/static/list/gene_tag_list = list(
list("tag" = GENE_PHYTOCHEMISTRY),
+ list("tag" = GENE_BIOMOLECULES),
list("tag" = GENE_MORPHOLOGY),
list("tag" = GENE_BIOLUMINESCENCE),
list("tag" = GENE_ECOLOGY),
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index d0569dd4f4c..11a56ac7ea4 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -520,6 +520,7 @@
chems = list(CAPSAICIN = list(3,5), NUTRIMENT = list(1,25))
mutants = list("icechili", "ghostpepper")
harvest_repeat = 1
+ molecule_type = list(CELLULOSE)
lifespan = 20
maturation = 5
@@ -562,6 +563,7 @@
mutants = list("glowberries","poisonberries")
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10))
+ molecule_type = list(GLUCOSE)
lifespan = 20
maturation = 5
@@ -621,6 +623,7 @@
mutants = list("deathnettle")
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,50), FORMIC_ACID = list(0,1))
+ molecule_type = list(CELLULOSE)
lifespan = 30
maturation = 6
production = 6
@@ -650,6 +653,7 @@
mutants = list("bluetomato","bloodtomato")
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10))
+ molecule_type = list(GLUCOSE)
lifespan = 25
maturation = 8
@@ -716,6 +720,7 @@
mutants = list("realeggplant")
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10))
+ molecule_type = list(CELLULOSE)
lifespan = 25
maturation = 6
@@ -747,6 +752,7 @@
mutants = list("poisonapple","goldapple")
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10))
+ molecule_type = list(GLUCOSE)
lifespan = 55
maturation = 6
@@ -785,6 +791,7 @@
mutants = list("ambrosiadeus")
harvest_repeat = 1
chems = list(NUTRIMENT = list(1), MESCALINE = list(1,8), TANNIC_ACID = list(1,8,1), OPIUM = list(1,10,1))
+ molecule_type = list(CELLULOSE)
lifespan = 60
maturation = 6
@@ -828,6 +835,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle)
mutants = list("reishi","amanita","plumphelmet")
chems = list(NUTRIMENT = list(1,25))
+ molecule_type = list(CHITIN)
lifespan = 35
maturation = 7
@@ -930,6 +938,7 @@
plant_dmi = 'icons/obj/hydroponics/towercap.dmi'
mutants = null
products = list(/obj/item/weapon/grown/log)
+ molecule_type = list(CELLULOSE)
lifespan = 80
maturation = 15
@@ -990,6 +999,7 @@
plant_dmi = 'icons/obj/hydroponics/harebell.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/harebell)
chems = list(NUTRIMENT = list(1,20))
+ molecule_type = list(CELLULOSE)
lifespan = 100
maturation = 7
@@ -1096,6 +1106,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/grapes)
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10), SUGAR = list(1,5))
+ molecule_type = list(GLUCOSE)
lifespan = 50
maturation = 3
@@ -1126,6 +1137,7 @@
mutants = list("rocknut")
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10))
+ molecule_type = list(PROTEIN)
lifespan = 55
maturation = 6
@@ -1142,6 +1154,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/rocknut)
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10),IRON = list(3,5))
+ molecule_type = list(PROTEIN)
lifespan = 70
maturation = 6
@@ -1158,6 +1171,7 @@
mutants = list("plasmacabbage")
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10))
+ molecule_type = list(CELLULOSE)
lifespan = 50
maturation = 3
@@ -1177,6 +1191,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/plasmacabbage)
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10),PLASMA = list(3,5))
+ molecule_type = list(CELLULOSE)
lifespan = 30
maturation = 3
@@ -1195,6 +1210,7 @@
plant_dmi = 'icons/obj/hydroponics/shand.dmi'
products = list(/obj/item/stack/medical/bruise_pack/tajaran)
chems = list(OPIUM = list(0,10))
+ molecule_type = list(XENOPHYLL)
lifespan = 50
maturation = 3
@@ -1210,6 +1226,7 @@
plant_dmi = 'icons/obj/hydroponics/mtear.dmi'
products = list(/obj/item/stack/medical/ointment/tajaran)
chems = list(HONEY = list(1,10), TANNIC_ACID = list(3,5))
+ molecule_type = list(XENOPHYLL)
lifespan = 50
maturation = 3
@@ -1227,6 +1244,7 @@
harvest_repeat = 1
chems = list(BANANA = list(1,10), POTASSIUMCARBONATE = list(0.1,30))
mutants = list("bluespacebanana")
+ molecule_type = list(GLUCOSE)
lifespan = 50
maturation = 6
@@ -1252,6 +1270,7 @@
plant_dmi = 'icons/obj/hydroponics/corn.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/corn)
chems = list(NUTRIMENT = list(1,10))
+ molecule_type = list(CELLULOSE)
lifespan = 25
maturation = 8
@@ -1271,6 +1290,7 @@
plant_dmi = 'icons/obj/hydroponics/potato.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/potato)
chems = list(NUTRIMENT = list(1,10))
+ molecule_type = list(STARCH)
lifespan = 30
maturation = 10
@@ -1289,6 +1309,7 @@
mutants = list("koibean")
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,20))
+ molecule_type = list(PROTEIN)
lifespan = 25
maturation = 4
@@ -1304,6 +1325,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/koibeans)
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10),CARPOTOXIN = list(1,25))
+ molecule_type = list(PROTEIN)
lifespan = 25
maturation = 4
@@ -1318,6 +1340,7 @@
plant_dmi = 'icons/obj/hydroponics/wheat.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/wheat)
chems = list(NUTRIMENT = list(1,25))
+ molecule_type = list(STARCH)
lifespan = 25
maturation = 6
@@ -1334,6 +1357,7 @@
plant_dmi = 'icons/obj/hydroponics/rice.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/ricestalk)
chems = list(NUTRIMENT = list(1,25))
+ molecule_type = list(STARCH)
lifespan = 25
maturation = 6
@@ -1352,6 +1376,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/carrot)
mutants = list("diamondcarrot")
chems = list(NUTRIMENT = list(1,20), ZEAXANTHIN = list(3,5))
+ molecule_type = list(CELLULOSE)
lifespan = 25
maturation = 10
@@ -1394,6 +1419,7 @@
plant_dmi = 'icons/obj/hydroponics/whitebeet.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet)
chems = list(NUTRIMENT = list(0,20), SUGAR = list(1,5))
+ molecule_type = list(STARCH)
lifespan = 60
maturation = 6
@@ -1410,6 +1436,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane)
harvest_repeat = 1
chems = list(SUGAR = list(4,5))
+ molecule_type = list(GLUCOSE)
lifespan = 60
maturation = 3
@@ -1427,6 +1454,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon)
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,6))
+ molecule_type = list(GLUCOSE)
lifespan = 50
maturation = 6
@@ -1445,6 +1473,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin)
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,6))
+ molecule_type = list(STARCH)
lifespan = 50
maturation = 6
@@ -1463,6 +1492,7 @@
harvest_repeat = 1
mutants = list("silicatecitrus")
chems = list(NUTRIMENT = list(1,20))
+ molecule_type = list(GLUCOSE)
lifespan = 55
maturation = 6
@@ -1481,6 +1511,7 @@
harvest_repeat = 1
mutants = list("silicatecitrus")
chems = list(NUTRIMENT = list(1,20))
+ molecule_type = list(GLUCOSE)
lifespan = 55
maturation = 6
@@ -1499,6 +1530,7 @@
harvest_repeat = 1
mutants = list("silicatecitrus")
chems = list(NUTRIMENT = list(1,20))
+ molecule_type = list(GLUCOSE)
lifespan = 60
maturation = 6
@@ -1517,6 +1549,7 @@
harvest_repeat = 1
mutants = list("shardlime")
chems = list(SILICATE = list(3,5))
+ molecule_type = list(XENOPHYLL)
lifespan = 55
maturation = 6
@@ -1531,6 +1564,7 @@
products = list(/obj/item/weapon/shard)
mutants = list("purpleshardlime")
harvest_repeat = 1
+ molecule_type = list(XENOPHYLL)
lifespan = 70
maturation = 4
@@ -1548,6 +1582,7 @@
products = list(/obj/item/weapon/shard/plasma)
harvest_repeat = 1
mutants = null
+ molecule_type = list(XENOPHYLL)
lifespan = 70
maturation = 4
@@ -1564,6 +1599,7 @@
plant_dmi = 'icons/obj/hydroponics/grass.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/grass)
harvest_repeat = 1
+ molecule_type = list(CELLULOSE)
lifespan = 60
maturation = 2
@@ -1581,6 +1617,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod)
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10), COCO = list(4,5))
+ molecule_type = list(GLUCOSE)
lifespan = 20
maturation = 5
@@ -1601,6 +1638,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/cherries)
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,15))
+ molecule_type = list(GLUCOSE)
lifespan = 35
maturation = 5
@@ -1618,6 +1656,7 @@
plant_dmi = 'icons/obj/hydroponics/cinnamomum.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/cinnamon)
chems = list(CINNAMON = list(4,3))
+ molecule_type = list(CELLULOSE)
lifespan = 80
maturation = 15
@@ -1636,6 +1675,7 @@
plant_dmi = 'icons/obj/hydroponics/kudzu.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod)
chems = list(NUTRIMENT = list(1,50), ALLICIN = list(2,10))
+ molecule_type = list(CELLULOSE)
lifespan = 20
maturation = 6
@@ -1657,6 +1697,7 @@
product_requires_player = 1
product_kill_inactive = FALSE
immutable = 1
+ molecule_type = list(CELLULOSE)
lifespan = 50
endurance = 35
@@ -1673,6 +1714,7 @@
plant_dmi = 'icons/obj/hydroponics/replicapod.dmi'
products = list(/mob/living/simple_animal/hostile/retaliate/clown)
product_requires_player = 1
+ molecule_type = list(XENOPHYLL)
lifespan = 100
endurance = 8
@@ -1692,6 +1734,7 @@
product_requires_player = TRUE
product_kill_inactive = FALSE
immutable = TRUE
+ molecule_type = list(XENOPHYLL)
lifespan = 50
endurance = 35
@@ -1709,6 +1752,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/nofruit)
chems = list(NOTHING = list(1,20))
immutable = 1
+ molecule_type = list(XENOPHYLL)
lifespan = 30
maturation = 5
@@ -1727,6 +1771,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/avocado)
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,20))
+ molecule_type = list(GLUCOSE)
lifespan = 55
maturation = 6
@@ -1746,6 +1791,7 @@
mutants = list("silverpear")
harvest_repeat = 1
chems = list(NUTRIMENT = list(1,10))
+ molecule_type = list(GLUCOSE)
lifespan = 55
maturation = 6
@@ -1793,6 +1839,7 @@
plant_dmi = 'icons/obj/hydroponics/woodapple.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/woodapple)
chems = list(SUGAR = list(1,10))
+ molecule_type = list(CELLULOSE)
growth_stages = 3
maturation = 4
@@ -1808,6 +1855,7 @@
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/breadfruit)
harvest_repeat = 1
chems = list(FLOUR = list(2,10))
+ molecule_type = list(STARCH)
potency = 30
lifespan = 50
@@ -1826,6 +1874,7 @@
plant_dmi = 'icons/obj/hydroponics/garlic.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/garlic)
chems = list(HOLYWATER = list(1,25),NUTRIMENT = list(1,10), ALLICIN = list(5,10))
+ molecule_type = list(CELLULOSE)
potency = 15
lifespan = 200
@@ -1843,6 +1892,7 @@
plant_dmi = 'icons/obj/hydroponics/pitcher.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/pitcher)
chems = list(FORMIC_ACID = list(1,25))
+ molecule_type = list(CELLULOSE)
potency = 10
lifespan = 50
@@ -1864,6 +1914,7 @@
plant_dmi = 'icons/obj/hydroponics/aloe.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/aloe)
chems = list(KATHALAI = list(1,10)) //Not as good as poppy's opium for speedy heals, but general purpose.
+ molecule_type = list(GLUCOSE)
lifespan = 30
maturation = 6
@@ -1881,6 +1932,7 @@
plant_dmi = 'icons/obj/hydroponics/vaporsac.dmi'
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/vaporsac)
chems = list(VAPORSALT = list(1,2))
+ molecule_type = list(GLUCOSE)
lifespan = 50
maturation = 6
@@ -1897,6 +1949,7 @@
plant_icon_state = "clover"
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/clover)
chems = list(NUTRIMENT = list(1,25))
+ molecule_type = list(CELLULOSE)
harvest_repeat = 1
lifespan = 60
maturation = 2
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 07fa0d60c39..be3f48825cd 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -271,7 +271,7 @@
H.zombify(user)
else
success = FALSE
-
+
else if(istype(target, /mob/living/simple_animal/hostile/necro/zombie/))
success = TRUE
var/mob/living/simple_animal/S = target
@@ -443,7 +443,7 @@
modifystate = "floramut"
var/charge_tick = 0
var/mode = 1
- var/list/genes = list(GENE_PHYTOCHEMISTRY, GENE_MORPHOLOGY, GENE_BIOLUMINESCENCE, GENE_ECOLOGY, GENE_ECOPHYSIOLOGY, GENE_METABOLISM, GENE_DEVELOPMENT, GENE_XENOPHYSIOLOGY)
+ var/list/genes = list(GENE_PHYTOCHEMISTRY, GENE_BIOMOLECULES, GENE_MORPHOLOGY, GENE_BIOLUMINESCENCE, GENE_ECOLOGY, GENE_ECOPHYSIOLOGY, GENE_METABOLISM, GENE_DEVELOPMENT, GENE_XENOPHYSIOLOGY)
var/emagged = FALSE
var/isSomatoraying = FALSE
@@ -552,7 +552,7 @@
playsound(user,'sound/effects/stealthoff.ogg', 50)
if((H.species.flags & IS_PLANT) && (H.nutrition < 500))
H.nutrition += 30
- else
+ else
H.show_message("The radiation beam dissipates harmlessly through your body.")
isSomatoraying = FALSE