diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm index d2efee687f0..8d04aad16e4 100644 --- a/code/__defines/chemistry.dm +++ b/code/__defines/chemistry.dm @@ -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 diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index fc2c3e5058e..e95e4c9b543 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -1430,36 +1430,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. @@ -1515,6 +1543,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", diff --git a/code/_helpers/refinery.dm b/code/_helpers/refinery.dm index 7d93b9190ea..e53c361d662 100644 --- a/code/_helpers/refinery.dm +++ b/code/_helpers/refinery.dm @@ -11,7 +11,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)) @@ -19,9 +21,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]) diff --git a/code/game/objects/items/devices/scanners/reagents.dm b/code/game/objects/items/devices/scanners/reagents.dm index fd20f9f9a90..6fa54a707c2 100644 --- a/code/game/objects/items/devices/scanners/reagents.dm +++ b/code/game/objects/items/devices/scanners/reagents.dm @@ -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 diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 216e6cdc586..48d5b2e10b6 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -460,6 +460,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 */ diff --git a/code/game/turfs/flooring/gas_cracks.dm b/code/game/turfs/flooring/gas_cracks.dm index 2adbf8728c8..fe05bdbb4ec 100644 --- a/code/game/turfs/flooring/gas_cracks.dm +++ b/code/game/turfs/flooring/gas_cracks.dm @@ -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 diff --git a/code/modules/materials/sheets/metals/hull.dm b/code/modules/materials/sheets/metals/hull.dm index d0f0d6fa1ca..cc1d56d3f17 100644 --- a/code/modules/materials/sheets/metals/hull.dm +++ b/code/modules/materials/sheets/metals/hull.dm @@ -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 diff --git a/code/modules/materials/sheets/metals/rods.dm b/code/modules/materials/sheets/metals/rods.dm index 892bb3da019..f36295ff40b 100644 --- a/code/modules/materials/sheets/metals/rods.dm +++ b/code/modules/materials/sheets/metals/rods.dm @@ -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) diff --git a/code/modules/materials/sheets/organic/wood.dm b/code/modules/materials/sheets/organic/wood.dm index 8139643b17c..f9d370ff4d9 100644 --- a/code/modules/materials/sheets/organic/wood.dm +++ b/code/modules/materials/sheets/organic/wood.dm @@ -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 @@ -77,6 +80,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" diff --git a/code/modules/reagents/machinery/pump.dm b/code/modules/reagents/machinery/pump.dm index 8d6fd263a4f..aaa9ae5efc3 100644 --- a/code/modules/reagents/machinery/pump.dm +++ b/code/modules/reagents/machinery/pump.dm @@ -4,8 +4,9 @@ description_info = "A machine that can pump fluid from certain turfs.
\ Water can be pumped from any body of water. Certain locations or environmental\ - conditions can cause different byproducts to be produced.
\ - Magma or Lava can be pumped to produce mineralized fluid." + conditions can cause different byproducts to be produced.
\ + Magma or Lava can be pumped to produce mineralized fluid.
\ + 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)) diff --git a/code/modules/refinery/core/industrial_reagent_grinder.dm b/code/modules/refinery/core/industrial_reagent_grinder.dm index 032bd251def..4c1aa867d8a 100644 --- a/code/modules/refinery/core/industrial_reagent_grinder.dm +++ b/code/modules/refinery/core/industrial_reagent_grinder.dm @@ -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) . = ..()