Files
Bubberstation/code/__HELPERS/global_lists.dm
MrMelbert f20c61f670 [MDB Ignore] Deletes the bluespace gas vendor (#93137)
## About The Pull Request

Deletes the Bluespace Gas Vendor and accompanying Bluespace Gas Sender

## Why It's Good For The Game

These wall mounts were added as ways to encourage Atmos Techs to
participate in the economy and crew at large. Unfortunately, it's missed
the mark and is unused in 99% of all rounds*.

**I have seen more atmos techs use the bluespace gas sender for exploits
than for its intended use.*

It has been noted that
1. Atmos doesn't need to sell gas to the crew to make money. They can
export gas to cargo to make more money.
2. The crew doesn't really care about gases. They will rarely go out of
their way to acquire them, even if free.
3. Most importantly, most atmos players **like to give out gas for
free** - it's mass producible and seeing people utilize their creations
tend to be its own reward.
4. Even for the atmos techs that want to charge for their products (to
create conflict or whatnot), *you could easily do that by hand via
pre-filling tanks**.

***I have seen more atmos techs make money off of selling pre-filled
tanks than by using the vendor.*

Ultimately, this machine serves no purpose besides bloating wall space
and existing as an atmos exploit vector.

## Changelog

🆑 Melbert
del: Bluespace Gas Vendors and the accompanying Bluespace Gas Sender
have been removed
/🆑
2025-09-26 20:27:30 +02:00

225 lines
8.3 KiB
Plaintext

//////////////////////////
/////Initial Building/////
//////////////////////////
/// Inits GLOB.surgeries
/proc/init_surgeries()
var/surgeries = list()
for(var/path in subtypesof(/datum/surgery))
surgeries += new path()
sort_list(surgeries, GLOBAL_PROC_REF(cmp_typepaths_asc))
return surgeries
/// Legacy procs that really should be replaced with proper _INIT macros
/proc/make_datum_reference_lists()
// I tried to eliminate this proc but I couldn't untangle their init-order interdependencies -Dominion/Cyberboss
init_keybindings()
GLOB.emote_list = init_emote_list() // WHY DOES THIS NEED TO GO HERE? IT JUST INITS DATUMS
init_crafting_recipes()
init_crafting_recipes_atoms()
/// Inits crafting recipe lists
/proc/init_crafting_recipes(list/crafting_recipes)
for(var/path in subtypesof(/datum/crafting_recipe))
if(ispath(path, /datum/crafting_recipe/stack))
continue
var/datum/crafting_recipe/recipe = new path()
var/is_cooking = (recipe.category in GLOB.crafting_category_food)
recipe.reqs = sort_list(recipe.reqs, GLOBAL_PROC_REF(cmp_crafting_req_priority))
if(recipe.name != "" && recipe.result)
if(is_cooking)
GLOB.cooking_recipes += recipe
else
GLOB.crafting_recipes += recipe
var/list/global_stack_recipes = list(
/obj/item/stack/sheet/glass = GLOB.glass_recipes,
/obj/item/stack/sheet/plasmaglass = GLOB.pglass_recipes,
/obj/item/stack/sheet/rglass = GLOB.reinforced_glass_recipes,
/obj/item/stack/sheet/plasmarglass = GLOB.prglass_recipes,
/obj/item/stack/sheet/animalhide/gondola = GLOB.gondola_recipes,
/obj/item/stack/sheet/animalhide/corgi = GLOB.corgi_recipes,
/obj/item/stack/sheet/animalhide/monkey = GLOB.monkey_recipes,
/obj/item/stack/sheet/animalhide/xeno = GLOB.xeno_recipes,
/obj/item/stack/sheet/leather = GLOB.leather_recipes,
/obj/item/stack/sheet/sinew = GLOB.sinew_recipes,
/obj/item/stack/sheet/animalhide/carp = GLOB.carp_recipes,
/obj/item/stack/sheet/mineral/sandstone = GLOB.sandstone_recipes,
/obj/item/stack/sheet/mineral/sandbags = GLOB.sandbag_recipes,
/obj/item/stack/sheet/mineral/diamond = GLOB.diamond_recipes,
/obj/item/stack/sheet/mineral/uranium = GLOB.uranium_recipes,
/obj/item/stack/sheet/mineral/plasma = GLOB.plasma_recipes,
/obj/item/stack/sheet/mineral/gold = GLOB.gold_recipes,
/obj/item/stack/sheet/mineral/silver = GLOB.silver_recipes,
/obj/item/stack/sheet/mineral/bananium = GLOB.bananium_recipes,
/obj/item/stack/sheet/mineral/titanium = GLOB.titanium_recipes,
/obj/item/stack/sheet/mineral/plastitanium = GLOB.plastitanium_recipes,
/obj/item/stack/sheet/mineral/snow = GLOB.snow_recipes,
/obj/item/stack/sheet/mineral/adamantine = GLOB.adamantine_recipes,
/obj/item/stack/sheet/mineral/abductor = GLOB.abductor_recipes,
/obj/item/stack/sheet/iron = GLOB.metal_recipes,
/obj/item/stack/sheet/plasteel = GLOB.plasteel_recipes,
/obj/item/stack/sheet/mineral/wood = GLOB.wood_recipes,
/obj/item/stack/sheet/mineral/bamboo = GLOB.bamboo_recipes,
/obj/item/stack/sheet/cloth = GLOB.cloth_recipes,
/obj/item/stack/sheet/durathread = GLOB.durathread_recipes,
/obj/item/stack/sheet/cardboard = GLOB.cardboard_recipes,
/obj/item/stack/sheet/bronze = GLOB.bronze_recipes,
/obj/item/stack/sheet/plastic = GLOB.plastic_recipes,
/obj/item/stack/ore/glass = GLOB.sand_recipes,
/obj/item/stack/rods = GLOB.rod_recipes,
/obj/item/stack/sheet/runed_metal = GLOB.runed_metal_recipes,
)
for(var/stack in global_stack_recipes)
for(var/stack_recipe in global_stack_recipes[stack])
if(istype(stack_recipe, /datum/stack_recipe_list))
var/datum/stack_recipe_list/stack_recipe_list = stack_recipe
for(var/nested_recipe in stack_recipe_list.recipes)
if(!nested_recipe)
continue
var/datum/crafting_recipe/stack/recipe = new/datum/crafting_recipe/stack(stack, nested_recipe)
if(recipe.name != "" && recipe.result)
GLOB.crafting_recipes += recipe
else
if(!stack_recipe)
continue
var/datum/crafting_recipe/stack/recipe = new/datum/crafting_recipe/stack(stack, stack_recipe)
if(recipe.name != "" && recipe.result)
GLOB.crafting_recipes += recipe
var/list/material_stack_recipes = list(
SSmaterials.base_stack_recipes,
SSmaterials.rigid_stack_recipes,
)
for(var/list/recipe_list in material_stack_recipes)
for(var/stack_recipe in recipe_list)
var/datum/crafting_recipe/stack/recipe = new/datum/crafting_recipe/stack(/obj/item/stack/sheet/iron, stack_recipe)
recipe.steps = list("Use different materials in hand to make an item of that material")
GLOB.crafting_recipes += recipe
/// Inits atoms used in crafting recipes
/proc/init_crafting_recipes_atoms()
var/list/recipe_lists = list(
GLOB.crafting_recipes,
GLOB.cooking_recipes,
)
var/list/atom_lists = list(
GLOB.crafting_recipes_atoms,
GLOB.cooking_recipes_atoms,
)
for(var/list_index in 1 to length(recipe_lists))
var/list/recipe_list = recipe_lists[list_index]
var/list/atom_list = atom_lists[list_index]
for(var/datum/crafting_recipe/recipe as anything in recipe_list)
// Result
atom_list |= recipe.result
// Ingredients
for(var/atom/req_atom as anything in recipe.reqs)
atom_list |= req_atom
// Catalysts
for(var/atom/req_atom as anything in recipe.chem_catalysts)
atom_list |= req_atom
// Reaction data - required container
if(recipe.reaction)
var/required_container = initial(recipe.reaction.required_container)
if(required_container)
atom_list |= required_container
// Tools
for(var/atom/req_atom as anything in recipe.tool_paths)
atom_list |= req_atom
// Machinery
for(var/atom/req_atom as anything in recipe.machinery)
atom_list |= req_atom
// Structures
for(var/atom/req_atom as anything in recipe.structures)
atom_list |= req_atom
//creates every subtype of prototype (excluding prototype) and adds it to list L.
//if no list/L is provided, one is created.
/proc/init_subtypes(prototype, list/L)
if(!istype(L))
L = list()
for(var/path in subtypesof(prototype))
L += new path()
return L
//returns a list of paths to every subtype of prototype (excluding prototype)
//if no list/L is provided, one is created.
/proc/init_paths(prototype, list/L)
if(!istype(L))
L = list()
for(var/path in subtypesof(prototype))
L+= path
return L
/// Functions like init_subtypes, but uses the subtype's path as a key for easy access
/proc/init_subtypes_w_path_keys(prototype, list/L)
if(!istype(L))
L = list()
for(var/path in subtypesof(prototype))
L[path] = new path()
return L
/**
* Checks if that loc and dir has an item on the wall
**/
// Wall mounted machinery which are visually on the wall.
GLOBAL_LIST_INIT(WALLITEMS_INTERIOR, typecacheof(list(
/obj/item/radio/intercom,
/obj/structure/secure_safe,
/obj/machinery/airalarm,
/obj/machinery/button,
/obj/machinery/computer/security/telescreen,
/obj/machinery/computer/security/telescreen/entertainment,
/obj/machinery/defibrillator_mount,
/obj/machinery/firealarm,
/obj/machinery/flasher,
/obj/machinery/keycard_auth/wall_mounted,
/obj/machinery/light_switch,
/obj/machinery/newscaster,
/obj/machinery/power/apc,
/obj/machinery/requests_console,
/obj/machinery/status_display,
/obj/machinery/ticket_machine,
/obj/machinery/turretid,
/obj/machinery/barsign,
/obj/structure/extinguisher_cabinet,
/obj/structure/fish_mount,
/obj/structure/fireaxecabinet,
/obj/structure/mirror,
/obj/structure/noticeboard,
/obj/structure/reagent_dispensers/wall,
/obj/structure/sign,
/obj/structure/sign/picture_frame,
/obj/structure/sign/poster/contraband/random,
/obj/structure/sign/poster/official/random,
/obj/structure/sign/poster/random,
/obj/structure/urinal,
)))
// Wall mounted machinery which are visually coming out of the wall.
// These do not conflict with machinery which are visually placed on the wall.
GLOBAL_LIST_INIT(WALLITEMS_EXTERIOR, typecacheof(list(
/obj/machinery/camera,
/obj/machinery/light,
/obj/structure/light_construct,
)))
/// A static typecache of all the money-based items that can be actively used as currency.
GLOBAL_LIST_INIT(allowed_money, typecacheof(list(
/obj/item/coin,
/obj/item/holochip,
/obj/item/stack/spacecash,
)))
/// Inits GLOB.plant_traits
/proc/init_plant_traits()
var/traits = list()
for(var/trait_path in subtypesof(/datum/plant_gene))
traits += new trait_path
sort_list(traits, GLOBAL_PROC_REF(cmp_typepaths_asc))
return traits