Files
VOREStation/code/modules/random_map/noise/ore.dm
T
Will f67d095338 Reagent Refinery (#17955)
* starting port

* missed one

* fixes and wip

* more cleanup

* reagent data setup

* distillation testing

* tanker dmi again

* supply pack fix

* Tiny fix

* better formatting

* metallic paints and outpost reagents

* working on refinery tutorial, reactor construction icons

* reactor activation dot

* updated for new reagent hoses

* This as well

* pump relay object

* climbing support

* less ugly trolly tanker handling

* more cleanup

* reagent pumping updated

* climbable tanker

* fixed test

* test fails

* smart centrifuge board

* pump relay art updated

* hose doesn't show message when stacking

* gas cracks and fracking

* randomly spawned gas gracks

* indentation

* fixed

* runtime fix, lore fix

* turf change respecting atmos

* args

* nevermind

* gas cracks to poi fodder

* less gamer

* compile fix

* oops

* Old ores enabled

* paint distillations

* unittest

* many more distillation reactions

* nullcheck

* guide book

* tweaks to globs

* moved designs

* techweb

* reagent tanker sale element

* proper tag

* sellable

* typo, reduced hose connectors

* show reagent

* synthfab fix

* Revert "synthfab fix"

This reverts commit b7764cfb33.

* post sale tank handling

* tweak

* oops

* another oops

* smasher recipe now valid

* condensing gas recipies

* those too

* condensing tweaks

* matching mols better

* fluid pump missing

* code review

* no rain code here

* smart centrifuge update

* small grinder patch

* grinding fix

* fix
2025-08-02 07:07:17 +02:00

121 lines
5.0 KiB
Plaintext

/datum/random_map/noise/ore
descriptor = "ore distribution map"
var/deep_val = 0.8 // Threshold for deep metals, set in new as percentage of cell_range.
var/rare_val = 0.7 // Threshold for rare metal, set in new as percentage of cell_range.
var/chunk_size = 4 // Size each cell represents on map
/datum/random_map/noise/ore/New()
rare_val = cell_range * rare_val
deep_val = cell_range * deep_val
..()
/datum/random_map/noise/ore/check_map_sanity()
var/rare_count = 0
var/surface_count = 0
var/deep_count = 0
// Increment map sanity counters.
for(var/value in map)
if(value < rare_val)
surface_count++
else if(value < deep_val)
rare_count++
else
deep_count++
// Sanity check.
if(surface_count < MIN_SURFACE_COUNT)
admin_notice(span_danger("Insufficient surface minerals. Rerolling..."), R_DEBUG)
return 0
else if(rare_count < MIN_RARE_COUNT)
admin_notice(span_danger("Insufficient rare minerals. Rerolling..."), R_DEBUG)
return 0
else if(deep_count < MIN_DEEP_COUNT)
admin_notice(span_danger("Insufficient deep minerals. Rerolling..."), R_DEBUG)
return 0
else
return 1
/datum/random_map/noise/ore/apply_to_turf(var/x,var/y)
var/tx = ((origin_x-1)+x)*chunk_size
var/ty = ((origin_y-1)+y)*chunk_size
for(var/i=0,i<chunk_size,i++)
for(var/j=0,j<chunk_size,j++)
var/turf/simulated/T = locate(tx+j, ty+i, origin_z)
if(!istype(T) || !(T.turf_resource_types & TURF_HAS_MINERALS))
continue
if(!priority_process) sleep(-1)
T.resources = list()
T.resources[ORE_SAND] = rand(3,5)
T.resources[ORE_CARBON] = rand(3,5)
var/current_cell = map[get_map_cell(x,y)]
if(current_cell < rare_val) // Surface metals.
T.resources[ORE_HEMATITE] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX)
T.resources[ORE_GOLD] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources[ORE_SILVER] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources[ORE_URANIUM] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources[ORE_MARBLE] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX)
T.resources[ORE_DIAMOND] = 0
T.resources[ORE_PHORON] = 0
T.resources[ORE_PLATINUM] = 0
T.resources[ORE_MHYDROGEN] = 0
T.resources[ORE_VERDANTIUM] = 0
T.resources[ORE_LEAD] = 0
T.resources[ORE_COPPER] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX)
T.resources[ORE_TIN] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX)
T.resources[ORE_BAUXITE] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources[ORE_RUTILE] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources[ORE_VOPAL] = 0
T.resources[ORE_QUARTZ] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX)
T.resources[ORE_PAINITE] = 0
else if(current_cell < deep_val) // Rare metals.
T.resources[ORE_GOLD] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
T.resources[ORE_SILVER] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
T.resources[ORE_URANIUM] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
T.resources[ORE_PHORON] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
T.resources[ORE_PLATINUM] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
T.resources[ORE_VERDANTIUM] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources[ORE_LEAD] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX)
T.resources[ORE_MHYDROGEN] = 0
T.resources[ORE_DIAMOND] = 0
T.resources[ORE_HEMATITE] = 0
T.resources[ORE_MARBLE] = 0
T.resources[ORE_COPPER] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources[ORE_TIN] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
T.resources[ORE_BAUXITE] = 0
T.resources[ORE_RUTILE] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX)
T.resources[ORE_VOPAL] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources[ORE_QUARTZ] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources[ORE_PAINITE] = 0
else // Deep metals.
T.resources[ORE_URANIUM] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources[ORE_DIAMOND] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources[ORE_VERDANTIUM] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX)
T.resources[ORE_PHORON] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX)
T.resources[ORE_PLATINUM] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX)
T.resources[ORE_MHYDROGEN] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
T.resources[ORE_MARBLE] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX)
T.resources[ORE_LEAD] = rand(RESOURCE_LOW_MIN, RESOURCE_HIGH_MAX)
T.resources[ORE_HEMATITE] = 0
T.resources[ORE_GOLD] = 0
T.resources[ORE_SILVER] = 0
T.resources[ORE_COPPER] = 0
T.resources[ORE_TIN] = 0
T.resources[ORE_BAUXITE] = 0
T.resources[ORE_RUTILE] = 0
T.resources[ORE_VOPAL] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources[ORE_QUARTZ] = 0
T.resources[ORE_PAINITE] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
return
/datum/random_map/noise/ore/get_map_char(var/value)
if(value < rare_val)
return "S"
else if(value < deep_val)
return "R"
else
return "D"