Skip to content

Commit

Permalink
Makes botany chem production scaling have diminishing returns (#17938)
Browse files Browse the repository at this point in the history
  • Loading branch information
M-Earthfire committed Feb 28, 2024
1 parent fa8a996 commit e3865f6
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 16 deletions.
2 changes: 1 addition & 1 deletion code/WorkInProgress/AzrunStuff.dm
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@
reagents_temp.my_atom = POT
var/list/plant_complete_reagents = HYPget_assoc_reagents(src, DNA)
for (var/plantReagent in plant_complete_reagents)
reagents_temp.add_reagent(plantReagent, 2 * round(max(1,(1 + DNA?.get_effective_value("potency") / (10 * length(plant_complete_reagents))))))
reagents_temp.add_reagent(plantReagent, 2 * max(1, HYPfull_potency_calculation(DNA, 0.1 / length(plant_complete_reagents))))

SPAWN(0) // spawning to kick fluid processing out of machine loop
reagents_temp.smoke_start()
Expand Down
2 changes: 1 addition & 1 deletion code/mob/living/critter/maneater.dm
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@
// now, we set the arm injection up
if (length(origin_plant.assoc_reagents) > 0)
var/datum/limb/mouth/maneater/manipulated_limb = src.scaleable_limb
manipulated_limb.amount_to_inject = clamp(round(baseline_injection + injection_amount_per_yield * passed_genes?.get_effective_value("cropsize")), 1, maxcap_injection )
manipulated_limb.amount_to_inject = clamp(round(baseline_injection + injection_amount_per_yield * HYPchem_scaling(passed_genes?.get_effective_value("cropsize")) * passed_genes?.get_effective_value("cropsize")), 1, maxcap_injection )
manipulated_limb.chems_to_inject |= HYPget_assoc_reagents(origin_plant, passed_genes)
..()
return src
Expand Down
2 changes: 1 addition & 1 deletion code/modules/chemistry/tools/dispensers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -690,7 +690,7 @@ TYPEINFO(/obj/reagent_dispensers/watertank/fountain)
if(istype(W, /obj/item/reagent_containers/food/snacks/plant))
var/obj/item/reagent_containers/food/snacks/plant/P = W
var/datum/plantgenes/DNA = P.plantgenes
brew_amount = max(DNA?.get_effective_value("potency"), 5) //always produce SOMETHING
brew_amount = max(HYPfull_potency_calculation(DNA), 5) //always produce SOMETHING

if (!brew_result)
return FALSE
Expand Down
6 changes: 3 additions & 3 deletions code/modules/food_and_drink/plants.dm
Original file line number Diff line number Diff line change
Expand Up @@ -641,7 +641,7 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks/plant)
make_reagents()
..()
var/datum/plantgenes/DNA = src.plantgenes
reagents.add_reagent("capsaicin", DNA?.get_effective_value("potency"))
reagents.add_reagent("capsaicin", HYPfull_potency_calculation(DNA))

/obj/item/reagent_containers/food/snacks/plant/chili/chilly
name = "chilly pepper"
Expand All @@ -658,7 +658,7 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks/plant)
make_reagents()
..()
var/datum/plantgenes/DNA = src.plantgenes
reagents.add_reagent("cryostylane", DNA?.get_effective_value("potency"))
reagents.add_reagent("cryostylane", HYPfull_potency_calculation(DNA))

heal(var/mob/M)
..()
Expand Down Expand Up @@ -889,7 +889,7 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks/plant)
make_reagents()
..()
var/datum/plantgenes/DNA = src.plantgenes
reagents.add_reagent("capulettium", DNA?.get_effective_value("potency"))
reagents.add_reagent("capulettium", HYPfull_potency_calculation(DNA))

//Apple on a stick
/obj/item/reagent_containers/food/snacks/plant/apple/stick
Expand Down
23 changes: 22 additions & 1 deletion code/modules/hydroponics/hydroponics_misc_procs.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
// Hydroponics procs not specific to the plantpot start here.

proc/HYPchem_scaling(var/scaling_statistics)
//! This proc causes all chem production of botany to have a diminishing return with potency (or other stats for e.g. maneaters)
//For the graph in question with explanation, refer to this link: https://www.desmos.com/calculator/gy7tn43s6b
var/scaling_asymptote = 200 //! For potency reaching infinite, this times linear_factor will be the result
var/scaling_factor = 150 //! Refer to the graph in the explation on how this is calculated
var/result = 1
if (scaling_statistics > 0)
result *= scaling_asymptote / (scaling_statistics + scaling_factor)
return result

proc/HYPfull_potency_calculation(var/datum/plantgenes/DNA, var/linear_factor = 1)
//! this proc is a shortcut to calculate the amount of chems to produce from a linear factor and the plantgenes
var/result = linear_factor
if(DNA)
var/potency_to_scale = DNA.get_effective_value("potency")
result *= potency_to_scale * HYPchem_scaling(potency_to_scale)
else
result = 0
return max(round(result), 0) //we return the rounded value or 0 when we have negative potency


proc/HYPget_assoc_reagents(var/datum/plant/passed_plant, var/datum/plantgenes/passed_plantgenes)
//This proc returns a list with all reagents (or none) the plant currently is able to produce.
var/reagent_list = list()
Expand Down Expand Up @@ -49,7 +70,7 @@ proc/HYPadd_harvest_reagents(var/obj/item/I,var/datum/plant/growing,var/datum/pl
if(special_condition == "jumbo")
basecapacity *= 2

var/to_add = basecapacity + DNA?.get_effective_value("potency")
var/to_add = basecapacity + HYPfull_potency_calculation(DNA)
I.reagents.maximum_volume = max(to_add, I.reagents.maximum_volume)
if(I.reagents.maximum_volume < 1)
I.reagents.maximum_volume = 1
Expand Down
2 changes: 1 addition & 1 deletion code/modules/hydroponics/plants_flower.dm
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ ABSTRACT_TYPE(/datum/plant/flower)
if (POT.growth > (P.harvtime - DNA?.get_effective_value("growtime")) && prob(spray_prob))
var/list/plant_complete_reagents = HYPget_assoc_reagents(P, DNA)
for (var/plantReagent in plant_complete_reagents)
reagents_temp.add_reagent(plantReagent, 3 * round(max(1,(1 + DNA?.get_effective_value("potency") / (10 * length(plant_complete_reagents))))))
reagents_temp.add_reagent(plantReagent, 3 * max(1, HYPfull_potency_calculation(DNA, 0.1 / length(plant_complete_reagents))))
reagents_temp.smoke_start()
qdel(reagents_temp)

Expand Down
4 changes: 2 additions & 2 deletions code/modules/hydroponics/plants_herb.dm
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ ABSTRACT_TYPE(/datum/plant/herb)
chem_protection = ((100 - M.get_chem_protection())/100) //not gonna inject people with bio suits (1 is no chem prot, 0 is full prot for maths)

var/list/plant_complete_reagents = HYPget_assoc_reagents(P, DNA)
var/potency_scale = length(plant_complete_reagents) ? round(max(1,(1 + DNA?.get_effective_value("potency") / (10 * (length(plant_complete_reagents) ** 0.5))))) : 0
var/potency_scale = length(plant_complete_reagents) ? round(max(1, HYPfull_potency_calculation(DNA, 0.1 / (length(plant_complete_reagents)** 0.5)))) : 0

logTheThing(LOG_CHEMISTRY, M, "is stung by a nettle plant (likely planted by [constructName(POT.contributors[1])]) at [log_loc(POT)][potency_scale ? ", injecting with [5 * chem_protection * potency_scale]u each of [json_encode(HYPget_assoc_reagents(P, DNA))]" : ""]")

Expand Down Expand Up @@ -316,7 +316,7 @@ ABSTRACT_TYPE(/datum/plant/herb)
boutput(user, SPAN_NOTICE("You feel something brush against you."))
var/list/plant_complete_reagents = HYPget_assoc_reagents(src, DNA)
for (var/plantReagent in plant_complete_reagents)
H.reagents?.add_reagent(plantReagent, 5 * round(max(1,(1 + DNA?.get_effective_value("potency") / (10 * (length(plant_complete_reagents) ** 0.5))))))
H.reagents?.add_reagent(plantReagent, 5 * round(max(1, HYPfull_potency_calculation(DNA, 0.1 / (length(plant_complete_reagents) ** 0.5)))))

/datum/plant/herb/tobacco
name = "Tobacco"
Expand Down
12 changes: 6 additions & 6 deletions code/obj/submachine/cooking.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1352,27 +1352,27 @@ TYPEINFO(/obj/submachine/foodprocessor)
if (/obj/item/reagent_containers/food/snacks/plant/chili/chilly)
var/datum/plantgenes/DNA = P:plantgenes
var/obj/item/reagent_containers/food/snacks/condiment/coldsauce/F = new(src.loc)
F.reagents.add_reagent("cryostylane", DNA?.get_effective_value("potency"))
F.reagents.add_reagent("cryostylane", HYPfull_potency_calculation(DNA))
qdel( P )
if (/obj/item/reagent_containers/food/snacks/plant/chili/ghost_chili)
var/datum/plantgenes/DNA = P:plantgenes
var/obj/item/reagent_containers/food/snacks/condiment/hotsauce/ghostchilisauce/F = new(src.loc)
F.reagents.add_reagent("ghostchilijuice", 5 + DNA?.get_effective_value("potency"))
F.reagents.add_reagent("ghostchilijuice", 5 + HYPfull_potency_calculation(DNA))
qdel( P )
if (/obj/item/reagent_containers/food/snacks/plant/chili)
var/datum/plantgenes/DNA = P:plantgenes
var/obj/item/reagent_containers/food/snacks/condiment/hotsauce/F = new(src.loc)
F.reagents.add_reagent("capsaicin", DNA?.get_effective_value("potency"))
F.reagents.add_reagent("capsaicin", HYPfull_potency_calculation(DNA))
qdel( P )
if (/obj/item/reagent_containers/food/snacks/plant/coffeeberry/mocha)
var/datum/plantgenes/DNA = P:plantgenes
var/obj/item/reagent_containers/food/snacks/candy/chocolate/F = new(src.loc)
F.reagents.add_reagent("chocolate", DNA?.get_effective_value("potency"))
F.reagents.add_reagent("chocolate", HYPfull_potency_calculation(DNA))
qdel( P )
if (/obj/item/reagent_containers/food/snacks/plant/coffeeberry/latte)
var/datum/plantgenes/DNA = P:plantgenes
var/obj/item/reagent_containers/food/snacks/condiment/cream/F = new(src.loc)
F.reagents.add_reagent("cream", DNA?.get_effective_value("potency"))
F.reagents.add_reagent("cream", HYPfull_potency_calculation(DNA))
qdel( P )
if (/obj/item/plant/sugar)
var/obj/item/reagent_containers/food/snacks/ingredient/sugar/F = new(src.loc)
Expand All @@ -1390,7 +1390,7 @@ TYPEINFO(/obj/submachine/foodprocessor)
if (/obj/item/reagent_containers/food/snacks/plant/corn/pepper)
var/datum/plantgenes/DNA = P:plantgenes
var/obj/item/reagent_containers/food/snacks/ingredient/pepper/F = new(src.loc)
F.reagents.add_reagent("pepper", DNA?.get_effective_value("potency"))
F.reagents.add_reagent("pepper", HYPfull_potency_calculation(DNA))
qdel( P )
if (/obj/item/reagent_containers/food/snacks/plant/avocado)
new/obj/item/reagent_containers/food/snacks/soup/guacamole(src.loc)
Expand Down

0 comments on commit e3865f6

Please sign in to comment.