From 92bf1cc9071226e3ba2391ba28deed22d85dbeb1 Mon Sep 17 00:00:00 2001 From: PotatoTomahto Date: Sun, 22 Feb 2026 18:28:11 -0800 Subject: [PATCH] part 1 --- _maps/map_files/vanderlin/vanderlin.dmm | 242 ++++++++---------- .../farming/genetics/plant_genetics.dm | 12 +- code/modules/farming/items/seeds.dm | 9 +- code/modules/farming/soil.dm | 41 +-- 4 files changed, 150 insertions(+), 154 deletions(-) diff --git a/_maps/map_files/vanderlin/vanderlin.dmm b/_maps/map_files/vanderlin/vanderlin.dmm index 0d4b9c7fdc2..16c69ef2a71 100644 --- a/_maps/map_files/vanderlin/vanderlin.dmm +++ b/_maps/map_files/vanderlin/vanderlin.dmm @@ -1911,12 +1911,6 @@ /obj/structure/fermentation_keg, /turf/open/floor/carpet, /area/under/town/sewer) -"aSD" = ( -/obj/structure/flora/grass{ - icon_state = "grass4" - }, -/turf/open/floor/dirt/road, -/area/outdoors/farm) "aSI" = ( /obj/structure/table/wood/reinf_long{ dir = 1 @@ -7770,12 +7764,6 @@ }, /turf/open/floor/ruinedwood/spiral, /area/under/town/basement) -"dIo" = ( -/obj/structure/flora/grass{ - icon_state = "grass4" - }, -/turf/open/floor/grass, -/area/outdoors/farm) "dIz" = ( /turf/open/floor/blocks/stonered/tiny, /area/under/town/basement) @@ -8144,12 +8132,6 @@ /mob/living/carbon/human/species/goblin/npc/ambush/cave, /turf/open/floor/greenstone, /area/under/town/sewer) -"dSH" = ( -/obj/structure/flora/grass{ - icon_state = "grass3" - }, -/turf/open/floor/dirt/road, -/area/outdoors/farm) "dTk" = ( /obj/effect/decal/cobblerockedge/alt, /turf/open/floor/grass/eora, @@ -36915,6 +36897,12 @@ }, /turf/open/floor/herringbone, /area/indoors/town) +"rSu" = ( +/obj/structure/flora/grass{ + icon_state = "grass3" + }, +/turf/open/floor/grass, +/area/outdoors/farm) "rSx" = ( /obj/machinery/light/fueled/torchholder/metal_torch/east, /turf/open/floor/cobblerock, @@ -37550,7 +37538,7 @@ /area/under/cavewet) "sdQ" = ( /obj/structure/plough, -/turf/open/floor/grass, +/turf/open/floor/dirt/road, /area/outdoors/farm) "sdZ" = ( /turf/open/floor/woodturned/nosmooth, @@ -40892,12 +40880,6 @@ }, /turf/open/openspace, /area/indoors/town/clocktower) -"tKO" = ( -/obj/structure/flora/grass{ - icon_state = "grass3" - }, -/turf/open/floor/dirt, -/area/outdoors/farm) "tKU" = ( /obj/structure/bed/inn, /obj/item/bedsheet/wool, @@ -113217,7 +113199,7 @@ gdc gdc gdc gdc -gdc +rSu gdc gdc gdc @@ -113426,7 +113408,7 @@ blx blx blx gdc -gdc +rSu gdc vqO vDN @@ -113624,9 +113606,9 @@ bwl gdc sdQ blx +blx voQ -voQ -voQ +blx blx gdc gdc @@ -113823,15 +113805,15 @@ fDP fDP gdc bkF -gdc blx -voQ +blx voQ voQ voQ voQ blx -gdc +blx +rSu gdc vDN bcK @@ -114023,8 +114005,7 @@ obk pDN hHH xDd -gdc -blx +vqO blx blx voQ @@ -114032,8 +114013,9 @@ voQ voQ voQ voQ -voQ -dSH +blx +blx +blx eLZ vDN rvF @@ -114227,10 +114209,10 @@ uJz sjo blx blx -blx -aSD -blx -blx +voQ +voQ +voQ +voQ voQ voQ tJq @@ -114430,14 +114412,14 @@ sjo blx voQ voQ -gdc -blx -blx -blx -blx +voQ +voQ +voQ +voQ +voQ +voQ blx blx -gdc eLZ wvm vDN @@ -114629,18 +114611,18 @@ obk pDN sjo xDd +blx +voQ +voQ +voQ +voQ +voQ +voQ voQ voQ -gdc -gdc -gdc -gdc -blx -obm -blx sdQ -gdc -sPu +blx +voQ wvm vDN rvF @@ -114831,17 +114813,17 @@ obk pDN fDP fDP -wvm -hmV -gdc -gdc -gdc -uxF -wvm -blx +voQ +voQ +voQ +voQ +voQ +voQ +voQ +voQ +voQ blx blx -gdc sPu soz vDN @@ -115032,19 +115014,19 @@ obk obk pDN fUr -gdc -gdc -gdc -gdc -wvm -uxF -uxF -uxF -gdc -blx +hmV +voQ +voQ +voQ +voQ +voQ +voQ +voQ +voQ +voQ +voQ blx gdc -gdc bAN vDN rvF @@ -115235,16 +115217,16 @@ obk pDN eHx gdc -gdc -gdc -gdc voQ -hZM -wvh -uxF -uxF -gdc -blx +voQ +voQ +voQ +voQ +voQ +voQ +voQ +voQ +voQ blx gdc bAN @@ -115437,16 +115419,16 @@ obk pDN fUr gdc -wvm -gdc -bAN voQ voQ -hZM voQ -wvm -gdc -blx +voQ +voQ +voQ +voQ +voQ +voQ +voQ blx voQ gdc @@ -115640,15 +115622,15 @@ pDN bwl gdc gdc -gdc -sPu -tKO voQ -bZE -gdc -gdc -gdc -epd +voQ +voQ +voQ +voQ +voQ +voQ +voQ +vqO blx bAN voQ @@ -115841,17 +115823,17 @@ obk pDN oQQ gdc -wvm -gdc -gdc voQ voQ -dIo -gdc -gdc -gdc -gdc voQ +voQ +voQ +voQ +voQ +voQ +bwl +gdc +blx blx sPu gdc @@ -116045,15 +116027,15 @@ oQQ oQQ gdc gdc -gdc -gdc -gdc -gdc -wvm -gdc -wvm voQ voQ +voQ +voQ +voQ +voQ +gdc +blx +blx blx blx sPu @@ -116251,10 +116233,10 @@ oQQ vqO voQ voQ +voQ gdc gdc -gdc -voQ +blx blx blx blx @@ -117055,7 +117037,7 @@ jCi oQQ gdc gdc -gdc +vqO oQQ oQQ oQQ @@ -117259,7 +117241,7 @@ wvm diU gdc gdc -gdc +uxF gdc oQQ oQQ @@ -117460,10 +117442,10 @@ fDP gdc wvm gdc -voQ -sPu -voQ -gdc +uxF +uxF +uxF +rSu gdc blx oQQ @@ -117659,14 +117641,14 @@ obk ybL nfW gdc +rSu gdc -gdc -voQ -sNi voQ -wvm -gdc -gdc +hZM +wvh +uxF +uxF +vqO blx blx blx @@ -117865,7 +117847,7 @@ wvm gdc hLR gdc -gdc +hZM blx bwl wvm @@ -118062,7 +118044,7 @@ obk pDN oar aLw -gdc +rSu gdc gdc blx diff --git a/code/modules/farming/genetics/plant_genetics.dm b/code/modules/farming/genetics/plant_genetics.dm index 1e258ed2fd5..8fb7b7b27eb 100644 --- a/code/modules/farming/genetics/plant_genetics.dm +++ b/code/modules/farming/genetics/plant_genetics.dm @@ -29,12 +29,12 @@ randomize_traits(10) // ±10 points variation /datum/plant_genetics/proc/randomize_traits(variation = 20) - yield_trait = clamp(yield_trait + rand(-variation, variation), 10, 100) - disease_resistance = clamp(disease_resistance + rand(-variation, variation), 10, 100) - quality_trait = clamp(quality_trait + rand(-variation, variation), 10, 100) - growth_speed = clamp(growth_speed + rand(-variation, variation), 10, 100) - water_efficiency = clamp(water_efficiency + rand(-variation, variation), 10, 100) - cold_resistance = clamp(cold_resistance + rand(-variation, variation), 10, 100) + yield_trait = clamp(yield_trait + rand(-variation, variation), 0, TRAIT_GRADE_EXCELLENT) + disease_resistance = clamp(disease_resistance + rand(-variation, variation), 0, TRAIT_GRADE_EXCELLENT) + quality_trait = clamp(quality_trait + rand(-variation, variation), 0, TRAIT_GRADE_EXCELLENT) + growth_speed = clamp(growth_speed + rand(-variation, variation), 0, TRAIT_GRADE_EXCELLENT) + water_efficiency = clamp(water_efficiency + rand(-variation, variation), 0, TRAIT_GRADE_EXCELLENT) + cold_resistance = clamp(cold_resistance + rand(-variation, variation), 0, TRAIT_GRADE_EXCELLENT) /datum/plant_genetics/proc/crossbreed_with(datum/plant_genetics/other) var/datum/plant_genetics/offspring = new() diff --git a/code/modules/farming/items/seeds.dm b/code/modules/farming/items/seeds.dm index f8d5e16b63c..50f4d405c9e 100644 --- a/code/modules/farming/items/seeds.dm +++ b/code/modules/farming/items/seeds.dm @@ -41,6 +41,13 @@ visible_message(span_warning("[L] crushes [src] underfoot.")) qdel(src) +/obj/item/neuFarm/seed/get_over_text_content(mob/user) + if(HAS_TRAIT(user, TRAIT_SEEDKNOW) || user.get_skill_level(/datum/skill/labor/farming) >= 2) + var/datum/plant_def/plant_def_instance = GLOB.plant_defs[plant_def_type] + if(plant_def_instance) + return plant_def_instance.seed_identity + return ..() + /obj/item/neuFarm/seed/examine(mob/user) . = ..() var/datum/plant_def/plant_def_instance = GLOB.plant_defs[plant_def_type] @@ -49,7 +56,7 @@ var/datum/plant_genetics/seed_genetics_instance = seed_genetics if(seed_genetics_instance.seed_identity_modifier) examine_name = "[seed_genetics_instance.seed_identity_modifier] " + examine_name - . += span_info("I can tell these are [examine_name].") + . += span_notice("I can tell these are [examine_name].") if(HAS_TRAIT(user, TRAIT_SEEDKNOW) || user.get_skill_level(/datum/skill/labor/farming) >= 2) . += plant_def_instance.get_examine_details() diff --git a/code/modules/farming/soil.dm b/code/modules/farming/soil.dm index 6640a82364a..b36857f6e58 100644 --- a/code/modules/farming/soil.dm +++ b/code/modules/farming/soil.dm @@ -14,11 +14,11 @@ #define WEED_RESISTANCE_DECAY_RATE 20 / (1 MINUTES) // These get multiplied by 0.0 to 1.0 depending on amount of weeds -#define WEED_WATER_CONSUMPTION_RATE 5 / (1 MINUTES) +#define WEED_WATER_CONSUMPTION_RATE 4 / (1 MINUTES) #define WEED_NUTRITION_CONSUMPTION_RATE 2 / (1 MINUTES) -#define PLANT_REGENERATION_RATE 10 / (1 MINUTES) -#define PLANT_DECAY_RATE 10 / (1 MINUTES) +#define PLANT_REGENERATION_RATE 5 / (1 MINUTES) +#define PLANT_DECAY_RATE 5 / (1 MINUTES) #define PLANT_BLESS_HEAL_RATE 20 / (1 MINUTES) #define PLANT_WEEDS_HARM_RATE 10 / (1 MINUTES) @@ -340,9 +340,9 @@ if(stepper.m_intent == MOVE_INTENT_SNEAK) return if(stepper.m_intent == MOVE_INTENT_WALK) - adjust_plant_health(-2.5) + adjust_plant_health(-1) else if(stepper.m_intent == MOVE_INTENT_RUN) - adjust_plant_health(-5) + adjust_plant_health(-2) playsound(src, "plantcross", 90, FALSE) /obj/structure/soil/proc/deweed() @@ -435,14 +435,14 @@ return water = min(MAX_PLANT_WATER, water + min(5, severity / 4)) -/obj/structure/soil/process() - var/dt = 10 +/obj/structure/soil/process(delta_time) + delta_time = delta_time SECONDS var/force_update = FALSE - process_weeds(dt) - force_update = process_plant(dt) + process_weeds(delta_time) + force_update = process_plant(delta_time) if(world.time < accellerated_growth) - force_update = process_plant(dt) - process_soil(dt) + force_update = process_plant(delta_time) + process_soil(delta_time) if(soil_decay_time <= 0) decay_soil(TRUE) return @@ -582,7 +582,7 @@ adjust_potassium(-dt * weed_factor * WEED_NUTRITION_CONSUMPTION_RATE) if((get_total_npk() > 0) && plant_genetics) - var/genetic_value = (100 - plant_genetics.disease_resistance) * 0.03 + var/genetic_value = (TRAIT_GRADE_AVERAGE / max(plant_genetics.disease_resistance, TRAIT_GRADE_POOR)) adjust_weeds(dt * WEED_GROWTH_RATE * genetic_value) /obj/structure/soil/proc/process_plant(dt) @@ -795,13 +795,13 @@ var/efficiency_modifier = (plant_genetics.water_efficiency - TRAIT_GRADE_AVERAGE) / 100 drain_rate *= (1 - efficiency_modifier * 0.4) // Up to 20% less water consumption - var/weed_damage_multiplier = 1.0 - if(plant_genetics) - var/hardiness_modifier = (plant_genetics.cold_resistance - TRAIT_GRADE_AVERAGE) / 100 - weed_damage_multiplier = (1 - hardiness_modifier * 0.5) // Up to 25% less weed damage - // Lots of weeds harm the plant if(weeds >= MAX_PLANT_WEEDS * 0.6) + var/weed_damage_multiplier = 1.0 + if(plant_genetics) + var/hardiness_modifier = (plant_genetics.disease_resistance - TRAIT_GRADE_AVERAGE) / 100 + weed_damage_multiplier = (1 - hardiness_modifier * 0.5) // Up to 25% less weed damage + weed_damage_multiplier *= (weeds / MAX_PLANT_WEEDS) should_update |= adjust_plant_health(-dt * PLANT_WEEDS_HARM_RATE * weed_damage_multiplier) // Regenerate plant health if we dont drain water, or we have the water @@ -998,6 +998,13 @@ if(potassium_needed && potassium_factor < 0.1) actual_growth_time *= 0.95 + var/drain_rate = plant.water_drain_rate * dt + if(plant_genetics) + var/efficiency_modifier = (plant_genetics.water_efficiency - TRAIT_GRADE_AVERAGE) / 100 + drain_rate *= (1 - efficiency_modifier * 0.4) // Up to 20% less water consumption + if(water < drain_rate) // If no water, eat a massive growth rate penalty + actual_growth_time *= 0.5 + // Nutrient deficiency affects plant health only if nutrients are required but unavailable var/any_nutrients_needed = (nitrogen_needed > 0 || phosphorus_needed > 0 || potassium_needed > 0) if(any_nutrients_needed && limiting_factor < 0.1)