[MIRROR] Refinery Feedback P1 (#11298)

Co-authored-by: Will <7099514+Willburd@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-08-04 07:53:12 -07:00
committed by GitHub
parent fd0ec87646
commit 9f0e900ca7
11 changed files with 153 additions and 58 deletions

View File

@@ -42,7 +42,10 @@
#define CE_DARKSIGHT "darksight" // Gives perfect vision in dark
#define REAGENTS_PER_SHEET 20
#define REAGENTS_PER_ROD 10
#define REAGENTS_PER_ORE 20
#define REAGENTS_PER_LOG 40
#define REAGENTS_PER_HULL 40
// Attached to CE_ANTIBIOTIC
#define ANTIBIO_NORM 1

View File

@@ -1460,36 +1460,64 @@ GLOBAL_LIST_INIT(shieldgen_blockedturfs, list(
GLOBAL_LIST_INIT(sheet_reagents, list( //have a number of reagents divisible by REAGENTS_PER_SHEET (default 20) unless you like decimals.
/obj/item/stack/material/plastic = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_OXYGEN,REAGENT_ID_CHLORINE,REAGENT_ID_SULFUR),
/obj/item/stack/material/copper = list(REAGENT_ID_COPPER),
/obj/item/stack/material/wood = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/stick = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/log = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/algae = list(REAGENT_ID_CARBON,REAGENT_ID_NITROGEN,REAGENT_ID_NITROGEN,REAGENT_ID_PHOSPHORUS,REAGENT_ID_PHOSPHORUS),
/obj/item/stack/material/graphite = list(REAGENT_ID_CARBON),
/obj/item/stack/material/aluminium = list(REAGENT_ID_ALUMINIUM), // The material is aluminium, but the reagent is aluminum...
/obj/item/stack/material/glass/reinforced = list(REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_IRON,REAGENT_ID_CARBON),
/obj/item/stack/material/leather = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PROTEIN,REAGENT_ID_PROTEIN,REAGENT_ID_TRIGLYCERIDE),
/obj/item/stack/material/cloth = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PROTEIN,REAGENT_ID_SODIUM),
/obj/item/stack/material/fiber = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PROTEIN,REAGENT_ID_SODIUM),
/obj/item/stack/material/fur = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_SULFUR,REAGENT_ID_SODIUM),
/obj/item/stack/material/deuterium = list(REAGENT_ID_HYDROGEN),
/obj/item/stack/material/glass/phoronrglass = list(REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_PHORON,REAGENT_ID_PHORON),
/obj/item/stack/material/aluminium = list(REAGENT_ID_ALUMINIUM),
/obj/item/stack/material/diamond = list(REAGENT_ID_CARBON),
/obj/item/stack/material/durasteel = list(REAGENT_ID_IRON,REAGENT_ID_IRON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PLATINUM),
/obj/item/stack/material/wax = list(REAGENT_ID_ETHANOL,REAGENT_ID_TRIGLYCERIDE),
/obj/item/stack/material/iron = list(REAGENT_ID_IRON),
/obj/item/stack/material/uranium = list(REAGENT_ID_URANIUM),
/obj/item/stack/material/phoron = list(REAGENT_ID_PHORON),
/obj/item/stack/material/gold = list(REAGENT_ID_GOLD),
/obj/item/stack/material/silver = list(REAGENT_ID_SILVER),
/obj/item/stack/material/platinum = list(REAGENT_ID_PLATINUM),
/obj/item/stack/material/mhydrogen = list(REAGENT_ID_HYDROGEN),
/obj/item/stack/material/osmium = list(REAGENT_ID_PLATINUM), // This should be fixed someday
/obj/item/stack/material/steel = list(REAGENT_ID_IRON, REAGENT_ID_CARBON),
/obj/item/stack/material/plasteel = list(REAGENT_ID_IRON, REAGENT_ID_IRON, REAGENT_ID_CARBON, REAGENT_ID_CARBON, REAGENT_ID_PLATINUM), //8 iron, 8 carbon, 4 platinum,
/obj/item/stack/material/snow = list(REAGENT_ID_WATER),
/obj/item/stack/material/sandstone = list(REAGENT_ID_SILICON, REAGENT_ID_OXYGEN),
/obj/item/stack/material/marble = list(REAGENT_ID_CALCIUM),
/obj/item/stack/material/titanium = list(REAGENT_ID_ALUMINIUM),
// Nuclear
/obj/item/stack/material/mhydrogen = list(REAGENT_ID_HYDROGEN),
/obj/item/stack/material/deuterium = list(REAGENT_ID_HYDROGEN),
/obj/item/stack/material/tritium = list(REAGENT_ID_HYDROGEN),
/obj/item/stack/material/uranium = list(REAGENT_ID_URANIUM),
/obj/item/stack/material/supermatter = list(REAGENT_ID_SUPERMATTER),
// Misc
/obj/item/stack/material/snow = list(REAGENT_ID_WATER,REAGENT_ID_ICE),
/obj/item/stack/tile/grass = list(REAGENT_ID_CARBON,REAGENT_ID_NITROGEN,REAGENT_ID_NITROGEN,REAGENT_ID_PHOSPHORUS,REAGENT_ID_PHOSPHORUS),
/obj/item/stack/material/leather = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PROTEIN,REAGENT_ID_PROTEIN,REAGENT_ID_TRIGLYCERIDE),
/obj/item/stack/material/cloth = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PROTEIN,REAGENT_ID_SODIUM),
/obj/item/stack/material/fiber = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PROTEIN,REAGENT_ID_SODIUM),
/obj/item/stack/material/fur = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_SULFUR,REAGENT_ID_SODIUM),
/obj/item/stack/material/algae = list(REAGENT_ID_CARBON,REAGENT_ID_NITROGEN,REAGENT_ID_NITROGEN,REAGENT_ID_PHOSPHORUS,REAGENT_ID_PHOSPHORUS),
/obj/item/stack/material/algae/ten = list(REAGENT_ID_CARBON,REAGENT_ID_NITROGEN,REAGENT_ID_NITROGEN,REAGENT_ID_PHOSPHORUS,REAGENT_ID_PHOSPHORUS), // Just spawns with 10, is the same as normal one
/obj/item/stack/material/concrete = list(REAGENT_ID_SILICATE, REAGENT_ID_CALCIUM),
/obj/item/stack/material/cardboard = list(REAGENT_ID_WOODPULP),
// Woods
/obj/item/stack/material/wood = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/wood/sif = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/wood/hard = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
// Hull
/obj/item/stack/material/steel/hull = list(REAGENT_ID_IRON, REAGENT_ID_CARBON),
/obj/item/stack/material/plasteel/hull = list(REAGENT_ID_IRON, REAGENT_ID_IRON, REAGENT_ID_CARBON, REAGENT_ID_CARBON, REAGENT_ID_PLATINUM),
/obj/item/stack/material/plastitanium/hull = list(REAGENT_ID_TITANIUM, REAGENT_ID_SILICON, REAGENT_ID_IRON, REAGENT_ID_CARBON, REAGENT_ID_PLATINUM),
/obj/item/stack/material/durasteel/hull = list(REAGENT_ID_IRON,REAGENT_ID_IRON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PLATINUM),
// Glass
/obj/item/stack/material/glass = list(REAGENT_ID_SILICON),
/obj/item/stack/material/glass/reinforced = list(REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_IRON,REAGENT_ID_CARBON),
/obj/item/stack/material/glass/phoronglass = list(REAGENT_ID_PLATINUM, REAGENT_ID_SILICON, REAGENT_ID_SILICON, REAGENT_ID_SILICON), //5 platinum, 15 silicon,
/obj/item/stack/material/supermatter = list(REAGENT_ID_SUPERMATTER)
/obj/item/stack/material/glass/phoronrglass = list(REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_PHORON,REAGENT_ID_PHORON),
/obj/item/stack/material/glass/titanium = list(REAGENT_ID_TITANIUM, REAGENT_ID_SILICON),
/obj/item/stack/material/glass/plastitanium = list(REAGENT_ID_TITANIUM, REAGENT_ID_SILICON, REAGENT_ID_IRON, REAGENT_ID_CARBON, REAGENT_ID_PLATINUM),
// Rods
/obj/item/stack/rods = list(REAGENT_ID_IRON, REAGENT_ID_CARBON), // 2 per sheet of steel
/obj/item/stack/material/plasteel/rebar = list(REAGENT_ID_IRON, REAGENT_ID_IRON, REAGENT_ID_CARBON, REAGENT_ID_CARBON, REAGENT_ID_PLATINUM), // Only makes 1 per sheet of plasteel!
// Logs
/obj/item/stack/material/stick = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/stick/fivestack = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM), // Just spawns with 5, same as normal one
/obj/item/stack/material/log = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/log/hard = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/log/sif = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
))
GLOBAL_LIST_INIT(ore_reagents, list( //have a number of reageents divisible by REAGENTS_PER_ORE (default 20) unless you like decimals.
@@ -1545,6 +1573,23 @@ GLOBAL_LIST_INIT(reagent_sheets,list( // Recompressing reagents back into sheets
REAGENT_ID_SPIDEREGG = REFINERY_SINTERING_SPIDERS,
))
GLOBAL_LIST_INIT(deepore_fracking_reagents,list( // Fracking results for fluid pump
ORE_HEMATITE = list(REAGENT_ID_SILICATE,REAGENT_ID_IRON,REAGENT_ID_CARBON),
ORE_URANIUM = list(REAGENT_ID_RADIUM,REAGENT_ID_RADIUM,REAGENT_ID_CALCIUM,REAGENT_ID_PHOSPHORUS), // Doesn't produce uranium due to low use in reagents, and emp reaction
ORE_COPPER = list(REAGENT_ID_GOLD,REAGENT_ID_COPPER,REAGENT_ID_LEAD), // Commonly
ORE_GOLD = list(REAGENT_ID_GOLD,REAGENT_ID_COPPER,REAGENT_ID_LEAD), // Found
ORE_TIN = list(REAGENT_ID_GOLD,REAGENT_ID_COPPER,REAGENT_ID_LEAD), // Together
ORE_SILVER = list(REAGENT_ID_SILVER,REAGENT_ID_LEAD,REAGENT_ID_COPPER), // lead loves this one too
ORE_DIAMOND = list(REAGENT_ID_TITANIUMDIOX,REAGENT_ID_PHOSPHORUS,REAGENT_ID_SULFUR,REAGENT_ID_CARBON), // Ignius process
ORE_PHORON = list(REAGENT_ID_PHORON,REAGENT_ID_RADIUM,REAGENT_ID_PHOSPHORUS,REAGENT_ID_SULFUR), // Ignius heavymetals?
ORE_PLATINUM = list(REAGENT_ID_PLATINUM,REAGENT_ID_COPPER), // Don't have much to group it with
ORE_MHYDROGEN = list(REAGENT_ID_SILICATE,REAGENT_ID_HYDROGEN),
ORE_SAND = list(REAGENT_ID_SILICATE,REAGENT_ID_SILICON,REAGENT_ID_LITHIUM,REAGENT_ID_PHOSPHORUS,REAGENT_ID_CALCIUM,REAGENT_ID_SODIUMCHLORIDE,REAGENT_ID_CARBON), // Catch all sedimentry
ORE_CARBON = list(REAGENT_ID_SILICATE,REAGENT_ID_CARBON,REAGENT_ID_SODIUMCHLORIDE), // Salty coal
ORE_BAUXITE = list(REAGENT_ID_TITANIUMDIOX,REAGENT_ID_ALUMINIUM,REAGENT_ID_SODIUMCHLORIDE), // ore's general components and neighbours
ORE_RUTILE = list(REAGENT_ID_TITANIUMDIOX,REAGENT_ID_SILICATE,REAGENT_ID_SILICON,REAGENT_ID_SODIUMCHLORIDE) // ore's general components and neighbours
))
//List of the ammo types that can be used in game.
GLOBAL_LIST_INIT(global_ammo_types, list(
/obj/item/ammo_casing/a357 = ".357",

View File

@@ -20,7 +20,9 @@
var/obj/item/stack/stack = O
if(istype(stack))
var/list/sheet_components = GLOB.sheet_reagents[stack.type]
var/amount_to_take = max(0,min(stack.get_amount(),round(remaining_volume/REAGENTS_PER_SHEET)))
// Some stacks can be made into other stacks with a multiplier. This handles that.
var/remove_amount = stack.reagents_per_sheet()
var/amount_to_take = max(0,min(stack.get_amount(),round(remaining_volume/remove_amount)))
if(amount_to_take)
stack.use(amount_to_take)
if(QDELETED(stack))
@@ -28,9 +30,9 @@
if(islist(sheet_components))
amount_to_take = (amount_to_take/(sheet_components.len))
for(var/i in sheet_components)
R.add_reagent(i, (amount_to_take*REAGENTS_PER_SHEET))
R.add_reagent(i, (amount_to_take*remove_amount))
else
R.add_reagent(sheet_components, (amount_to_take*REAGENTS_PER_SHEET))
R.add_reagent(sheet_components, (amount_to_take*remove_amount))
continue
else if(GLOB.ore_reagents[O.type])

View File

@@ -24,7 +24,7 @@
return
if(!isnull(O.reagents))
if(!(O.flags & OPENCONTAINER)) // The idea is that the scanner has to touch the reagents somehow. This is done to prevent cheesing unidentified autoinjectors.
if(!(O.flags & OPENCONTAINER) && !istype(O,/obj/machinery/reagent_refinery)) // The idea is that the scanner has to touch the reagents somehow. This is done to prevent cheesing unidentified autoinjectors. Reagent refinery has ports for convenient testing!
to_chat(user, span_warning("\The [O] is sealed, and cannot be scanned by \the [src] until unsealed."))
return

View File

@@ -461,6 +461,9 @@
if(pulledby && isturf(loc))
combine_in_loc()
/obj/item/stack/proc/reagents_per_sheet()
return REAGENTS_PER_SHEET // units total of reagents when grinded
/*
* Recipe datum
*/

View File

@@ -23,24 +23,6 @@
oxygen = 0
nitrogen = 0
// Fracking results for fluid pump
var/static/list/ore_types = list(
ORE_HEMATITE = list(REAGENT_ID_SILICATE,REAGENT_ID_IRON,REAGENT_ID_CARBON),
ORE_URANIUM = list(REAGENT_ID_RADIUM,REAGENT_ID_RADIUM,REAGENT_ID_CALCIUM,REAGENT_ID_PHOSPHORUS), // Doesn't produce uranium due to low use in reagents, and emp reaction
ORE_COPPER = list(REAGENT_ID_GOLD,REAGENT_ID_COPPER,REAGENT_ID_LEAD), // Commonly
ORE_GOLD = list(REAGENT_ID_GOLD,REAGENT_ID_COPPER,REAGENT_ID_LEAD), // Found
ORE_TIN = list(REAGENT_ID_GOLD,REAGENT_ID_COPPER,REAGENT_ID_LEAD), // Together
ORE_SILVER = list(REAGENT_ID_SILVER,REAGENT_ID_LEAD,REAGENT_ID_COPPER), // lead loves this one too
ORE_DIAMOND = list(REAGENT_ID_TITANIUMDIOX,REAGENT_ID_PHOSPHORUS,REAGENT_ID_SULFUR,REAGENT_ID_CARBON), // Ignius process
ORE_PHORON = list(REAGENT_ID_PHORON,REAGENT_ID_RADIUM,REAGENT_ID_PHOSPHORUS,REAGENT_ID_SULFUR), // Ignius heavymetals?
ORE_PLATINUM = list(REAGENT_ID_PLATINUM,REAGENT_ID_COPPER), // Don't have much to group it with
ORE_MHYDROGEN = list(REAGENT_ID_SILICATE,REAGENT_ID_HYDROGEN),
ORE_SAND = list(REAGENT_ID_SILICATE,REAGENT_ID_SILICON,REAGENT_ID_LITHIUM,REAGENT_ID_PHOSPHORUS,REAGENT_ID_CALCIUM,REAGENT_ID_SODIUMCHLORIDE,REAGENT_ID_CARBON), // Catch all sedimentry
ORE_CARBON = list(REAGENT_ID_SILICATE,REAGENT_ID_CARBON,REAGENT_ID_SODIUMCHLORIDE), // Salty coal
ORE_BAUXITE = list(REAGENT_ID_TITANIUMDIOX,REAGENT_ID_ALUMINIUM,REAGENT_ID_SODIUMCHLORIDE), // ore's general components and neighbours
ORE_RUTILE = list(REAGENT_ID_TITANIUMDIOX,REAGENT_ID_SILICATE,REAGENT_ID_SILICON,REAGENT_ID_SODIUMCHLORIDE) // ore's general components and neighbours
)
/turf/simulated/floor/gas_crack/pump_reagents(var/datum/reagents/R, var/volume)
// pick random turfs in range, then use their deep ores to get some extra reagents
var/i = 0
@@ -48,15 +30,16 @@
var/turf/simulated/mineral/M = pick(orange(5,src))
if(!istype(M))
return
for(var/metal in ore_types)
for(var/metal in GLOB.deepore_fracking_reagents)
if(!M.resources[metal])
return
var/list/ore_list = ore_types[metal]
continue
var/list/ore_list = GLOB.deepore_fracking_reagents[metal]
if(!ore_list || !ore_list.len)
return
continue
if(prob(60))
var/reagent_id = pick(ore_list)
R.add_reagent(reagent_id, round(volume, 0.1))
if(reagent_id)
R.add_reagent(reagent_id, round(volume, 0.1))
/turf/simulated/floor/gas_crack/oxygen

View File

@@ -2,18 +2,33 @@
name = MAT_STEELHULL
default_type = MAT_STEELHULL
/obj/item/stack/material/steel/hull/reagents_per_sheet()
return REAGENTS_PER_HULL
/obj/item/stack/material/plasteel/hull
name = MAT_PLASTEELHULL
default_type = MAT_PLASTEELHULL
/obj/item/stack/material/plasteel/hull/reagents_per_sheet()
return REAGENTS_PER_HULL
/obj/item/stack/material/durasteel/hull
name = MAT_DURASTEELHULL
default_type = MAT_DURASTEELHULL
/obj/item/stack/material/durasteel/hull/reagents_per_sheet()
return REAGENTS_PER_HULL
/obj/item/stack/material/titanium/hull
name = MAT_TITANIUMHULL
default_type = MAT_TITANIUMHULL
/obj/item/stack/material/titanium/hull/reagents_per_sheet()
return REAGENTS_PER_HULL
/obj/item/stack/material/morphium/hull
name = MAT_MORPHIUMHULL
default_type = MAT_MORPHIUMHULL
/obj/item/stack/material/morphium/hull/reagents_per_sheet()
return REAGENTS_PER_HULL

View File

@@ -70,6 +70,9 @@
..()
/obj/item/stack/rods/reagents_per_sheet()
return REAGENTS_PER_ROD
/*
/obj/item/stack/rods/attack_self(mob/user)
src.add_fingerprint(user)

View File

@@ -32,6 +32,9 @@
drop_sound = 'sound/items/drop/wooden.ogg'
pickup_sound = 'sound/items/pickup/wooden.ogg'
/obj/item/stack/material/log/reagents_per_sheet()
return REAGENTS_PER_LOG
/obj/item/stack/material/log/sif
name = MAT_SIFLOG
default_type = MAT_SIFLOG
@@ -78,6 +81,9 @@
pass_color = TRUE
apply_colour = TRUE
/obj/item/stack/material/stick/reagents_per_sheet()
return REAGENTS_PER_ROD
/obj/item/stack/material/stick/fivestack
amount = 5
color = "#824B28"

View File

@@ -4,8 +4,9 @@
description_info = "A machine that can pump fluid from certain turfs.<br>\
Water can be pumped from any body of water. Certain locations or environmental\
conditions can cause different byproducts to be produced.<br>\
Magma or Lava can be pumped to produce mineralized fluid."
conditions can cause different byproducts to be produced.<br>\
Magma or Lava can be pumped to produce mineralized fluid.<br>\
Deep bore mining drills can create boreholes that can be fracked for fluids."
anchored = TRUE
density = TRUE
@@ -192,8 +193,8 @@
if(air.temperature <= T0C) // Uses the current air temp, instead of the turf starting temp
R.add_reagent(REAGENT_ID_ICE, round(volume / 2, 0.1))
for(var/turf/simulated/mineral/M in orange(5,src)) // Uses the turf as center instead of an unset usr
if(M.mineral && prob(40)) // v
for(var/turf/simulated/mineral/M in orange(5,src))
if(M.mineral && prob(40) && M.mineral.reagent) // v
R.add_reagent(M.mineral.reagent, round(volume / 5, 0.1)) // Was the turf's reagents variable not the R argument, and changed ore_reagent to M.mineral.reagent because of above change. Also nerfed amount to 1/5 instead of 1/2
/turf/simulated/floor/water/pool/pump_reagents(var/datum/reagents/R, var/volume)
@@ -207,3 +208,26 @@
/turf/simulated/floor/water/contaminated/pump_reagents(var/datum/reagents/R, var/volume)
. = ..()
R.add_reagent(REAGENT_ID_VATSTABILIZER, round(volume / 2, 0.1))
/turf/simulated/mineral/pump_reagents(var/datum/reagents/R, var/volume)
. = ..()
if(density)
return
if(!sand_dug)
return
var/turf/simulated/mineral/M = pick(orange(5,src))
if(!istype(M))
return
// Use nearby ores as well
if(M.mineral && M.mineral.reagent && prob(40))
R.add_reagent(M.mineral.reagent, rand(0,volume / 8))
// Pump deep reagents from deepdrill boreholes
for(var/metal in GLOB.deepore_fracking_reagents)
if(!M.resources[metal])
continue
var/list/ore_list = GLOB.deepore_fracking_reagents[metal]
if(!ore_list || !ore_list.len)
continue
var/reagent_id = pick(ore_list)
if(reagent_id && prob(60))
R.add_reagent(reagent_id, rand(0,volume / 6))

View File

@@ -8,7 +8,7 @@
idle_power_usage = 5
active_power_usage = 300
circuit = /obj/item/circuitboard/industrial_reagent_grinder
VAR_PRIVATE/limit = 50
var/static/limit = 50
VAR_PRIVATE/list/holdingitems = list()
/obj/machinery/reagent_refinery/grinder/Initialize(mapload)
@@ -34,7 +34,7 @@
// Insert grindables if not handled by parent proc
if(holdingitems && holdingitems.len >= limit)
to_chat(user, "The machine cannot hold anymore items.")
return TRUE
return FALSE
// Botany/Chemistry gameplay
if(istype(O,/obj/item/storage/bag))
@@ -71,6 +71,8 @@
return FALSE
// Needs to be sheet, ore, or grindable reagent containing things
if(istype(O,/obj/item/tool)) // Stops messages about the wrench being unsuitable to grind
return FALSE
if(!GLOB.sheet_reagents[O.type] && !GLOB.ore_reagents[O.type] && (!O.reagents || !O.reagents.total_volume))
to_chat(user, "\The [O] is not suitable for blending.")
return FALSE
@@ -88,6 +90,18 @@
if(stat & (NOPOWER|BROKEN))
return
// Get objects from incoming conveyors
if(holdingitems.len < limit)
for(var/D in GLOB.cardinal)
var/turf/T = get_step(src,D)
if(!T)
continue
var/obj/machinery/conveyor/C = locate() in T
if(C && !C.stat && C.operating && C.dir == GLOB.reverse_dir[D]) // If an operating conveyor points into us... Check if it's moving anything
var/obj/item/I = pick(T.contents - list(C))
if(istype(I) && conveyor_load(I))
break
if(holdingitems.len > 0 && grind_items_to_reagents(holdingitems,reagents))
//Lazy coder sound design moment. THE SEQUEL
playsound(src, 'sound/items/poster_being_created.ogg', 50, 1)
@@ -109,21 +123,18 @@
var/image/dot = image(icon, icon_state = "grinder_dot_[holdingitems.len ? "on" : "off" ]")
add_overlay(dot)
/obj/machinery/reagent_refinery/grinder/Bumped(atom/movable/AM as mob|obj)
. = ..()
if(!anchored)
return
/obj/machinery/reagent_refinery/grinder/proc/conveyor_load(atom/movable/AM as mob|obj)
if(!AM || QDELETED(AM))
return
return FALSE
if(holdingitems.len >= limit)
return
return FALSE
if(ismob(AM)) // No mob bumping YET
return
return FALSE
if(!GLOB.sheet_reagents[AM.type] && !GLOB.ore_reagents[AM.type] && (!AM.reagents || !AM.reagents.total_volume))
return
return FALSE
AM.forceMove(src)
holdingitems += AM
return TRUE
/obj/machinery/reagent_refinery/grinder/examine(mob/user, infix, suffix)
. = ..()