diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm index 257e6902ce5a..253565e10de4 100644 --- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm +++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm @@ -26175,6 +26175,10 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"hpK" = ( +/obj/effect/spawner/backrooms_portal, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "hqn" = ( /obj/structure/table/wood, /obj/effect/spawner/lootdrop/randomdrink, @@ -94201,7 +94205,7 @@ aJI aZs xga xIK -hSk +hpK dCg gBO aZs diff --git a/_maps/map_files/DonutStation/DonutStation.dmm b/_maps/map_files/DonutStation/DonutStation.dmm index 997a1eadee75..6e6b77287c5c 100644 --- a/_maps/map_files/DonutStation/DonutStation.dmm +++ b/_maps/map_files/DonutStation/DonutStation.dmm @@ -18388,6 +18388,7 @@ c_tag = "Cargo - Disposals Office"; dir = 8 }, +/obj/effect/spawner/backrooms_portal, /turf/open/floor/plasteel, /area/quartermaster/sorting) "hBq" = ( diff --git a/_maps/map_files/GaxStation/GaxStation.dmm b/_maps/map_files/GaxStation/GaxStation.dmm index a70eb34e3fa3..cf9b81c4cb87 100644 --- a/_maps/map_files/GaxStation/GaxStation.dmm +++ b/_maps/map_files/GaxStation/GaxStation.dmm @@ -33365,6 +33365,7 @@ "qcV" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, +/obj/effect/spawner/backrooms_portal, /turf/open/floor/plasteel, /area/quartermaster/warehouse) "qcW" = ( diff --git a/_maps/map_files/IceMeta/IceMeta.dmm b/_maps/map_files/IceMeta/IceMeta.dmm index 3647c50c36c7..75f1fb9a6290 100644 --- a/_maps/map_files/IceMeta/IceMeta.dmm +++ b/_maps/map_files/IceMeta/IceMeta.dmm @@ -71152,6 +71152,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/backrooms_portal, /turf/open/floor/plasteel, /area/quartermaster/warehouse) "ute" = ( diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index e543ca33042c..6dd8a46156d6 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -57214,6 +57214,11 @@ /obj/machinery/teleport/station, /turf/open/floor/plating, /area/teleporter) +"rGx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/backrooms_portal, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "rHf" = ( /turf/open/floor/engine/vacuum, /area/engine/atmos/mix) @@ -96611,7 +96616,7 @@ aTD aPG bbq gjl -baS +rGx hFo baS baS diff --git a/code/__DEFINES/dcs/signals/signals_global.dm b/code/__DEFINES/dcs/signals/signals_global.dm index 4d03a0d0acc1..e139ceff54b1 100644 --- a/code/__DEFINES/dcs/signals/signals_global.dm +++ b/code/__DEFINES/dcs/signals/signals_global.dm @@ -84,3 +84,5 @@ #define COMSIG_STARLIGHT_COLOR_CHANGED "!starlight_color_changed" /// Global signal sent when darkspawns ascend: (No arguments) #define COMSIG_DARKSPAWN_ASCENSION "!darkspawn_ascension" +/// Global signal sent when the backrooms finishes initailizing: (No arguments) +#define COMSIG_BACKROOMS_INITIALIZE "!backrooms_initialize" diff --git a/code/controllers/subsystem/backrooms.dm b/code/controllers/subsystem/backrooms.dm index 174457c83a68..daad25690d76 100644 --- a/code/controllers/subsystem/backrooms.dm +++ b/code/controllers/subsystem/backrooms.dm @@ -6,6 +6,16 @@ SUBSYSTEM_DEF(backrooms) var/datum/map_generator/dungeon_generator/backrooms_generator var/datum/generator_theme/picked_theme = /datum/generator_theme + //associative list of objects and how much they sell for + var/list/golden_loot = list( + /obj/item/statuebust = 1000, + /obj/item/reagent_containers/food/snacks/urinalcake = 1000, + /obj/item/bigspoon = 4000, + /obj/item/reagent_containers/food/snacks/burger/rat = 1200, + /obj/item/extinguisher = 2500, + /obj/item/toy/plush/lizard/azeel = 5000 + ) + /datum/controller/subsystem/backrooms/Initialize(timeofday) #ifdef LOWMEMORYMODE return SS_INIT_NO_NEED @@ -16,8 +26,8 @@ SUBSYSTEM_DEF(backrooms) pick_theme() generate_backrooms() - delete_beacons() - //spawn_anomalies() + SEND_GLOBAL_SIGNAL(COMSIG_BACKROOMS_INITIALIZE) + spawn_loot() return SS_INIT_SUCCESS /datum/controller/subsystem/backrooms/proc/pick_theme() @@ -58,58 +68,81 @@ SUBSYSTEM_DEF(backrooms) var/turf/wall = current_turf.place_on_top(border, flags = CHANGETURF_DEFER_CHANGE | CHANGETURF_IGNORE_AIR) wall.resistance_flags |= INDESTRUCTIBLE //make the wall indestructible - addtimer(CALLBACK(src, PROC_REF(generate_exit)), 1 MINUTES) - -/datum/controller/subsystem/backrooms/proc/delete_beacons() - var/list/zlevel = SSmapping.levels_by_trait(ZTRAIT_PROCEDURAL_MAINTS) - for(var/obj/item/beacon/bacon as anything in GLOB.teleportbeacons) - if(bacon.z in zlevel) //if the beacon is in the backrooms, delete it - qdel(bacon) +/datum/controller/subsystem/backrooms/proc/spawn_loot() + var/backrooms_level = SSmapping.levels_by_trait(ZTRAIT_PROCEDURAL_MAINTS) + if(!LAZYLEN(backrooms_level)) + return + var/number = rand(20, 50) + var/turf/destination + var/item_path + var/value + for(var/i in 1 to number) + destination = find_safe_turf(zlevels = backrooms_level, dense_atoms = FALSE) + item_path = pick(golden_loot) + value = golden_loot[item_path] + + var/obj/item/thing = new item_path(destination) //spawn the thing and make it gold + thing.AddComponent(/datum/component/valuable, value) //////////////////////////////////////////////////////////////////////////////////// -//------------------------------Exit related things-------------------------------// +//-------------------------------Valuable items-----------------------------------// //////////////////////////////////////////////////////////////////////////////////// -/datum/controller/subsystem/backrooms/proc/generate_exit() - var/list/backrooms_level = SSmapping.levels_by_trait(ZTRAIT_PROCEDURAL_MAINTS) - if(LAZYLEN(backrooms_level)) - var/turf/way_out = find_safe_turf(zlevels = backrooms_level, dense_atoms = FALSE) - new /obj/effect/portal/permanent/one_way/backrooms(way_out) - -/obj/effect/portal/permanent/one_way/backrooms/get_link_target_turf() - var/list/valid_lockers = typecacheof(typesof(/obj/structure/closet) - typesof(/obj/structure/closet/body_bag)\ - - typesof(/obj/structure/closet/secure_closet) - typesof(/obj/structure/closet/cabinet)\ - - typesof(/obj/structure/closet/cardboard) \ - - typesof(/obj/structure/closet/supplypod) - typesof(/obj/structure/closet/stasis)\ - - typesof(/obj/structure/closet/abductor) - typesof(/obj/structure/closet/bluespace), only_root_path = TRUE) //stolen from bluespace lockers - - var/list/lockers_list = list() - for(var/obj/structure/closet/L in GLOB.lockers) - if(!is_station_level(L.z)) - continue - if(!is_type_in_typecache(L, valid_lockers)) - continue - if(L.opened) - continue - lockers_list += L - var/obj/structure/closet/exit = pick(lockers_list) - if(!exit) - exit = new(get_safe_random_station_turf()) - return get_turf(exit) - -/obj/effect/portal/permanent/one_way/backrooms/teleport(atom/movable/M, force) - . = ..() - if(.) - var/obj/structure/closet/end = locate() in get_turf(M) - if(end) - M.forceMove(end) //get in the locker, nerd +/datum/export/backrooms + //cost is irrelevant because we overwrite the proc + unit_name = "golden object" + export_types = list(/obj/item) //sell any object so long as it has the component + +/datum/export/backrooms/applies_to(obj/O, allowed_categories = NONE, apply_elastic = TRUE) + var/datum/component/valuable/value = O.GetComponent(/datum/component/valuable) + if(!value || !istype(value)) + return FALSE + return ..() + +/datum/export/backrooms/get_cost(obj/O, allowed_categories = NONE, apply_limit = TRUE) + var/amount = get_amount(O) + var/datum/component/valuable/value = O.GetComponent(/datum/component/valuable) + if(value && istype(value)) + return round(value.cost * amount) + return 0 + + +/datum/component/valuable + ///how much the item is worth + var/cost + +/datum/component/valuable/Initialize(cost) + if(!isitem(parent)) + return COMPONENT_INCOMPATIBLE + src.cost = cost + +/datum/component/valuable/RegisterWithParent() + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + if(isitem(parent)) + var/obj/item/goldplate = parent + goldplate.add_atom_colour("#ffd700", FIXED_COLOUR_PRIORITY) + +/datum/component/valuable/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + +/datum/component/valuable/proc/on_examine(atom/eaten_light, mob/examiner, list/examine_text) + SIGNAL_HANDLER + examine_text += span_notice("This looks valuable, it could probably be sold for a lot.") + return NONE +//////////////////////////////////////////////////////////////////////////////////// +//----------------------------Entrance and exit portal----------------------------// +//////////////////////////////////////////////////////////////////////////////////// /obj/effect/portal/permanent/backrooms - icon_state = "wooden_tv" + icon = 'icons/obj/computer.dmi' + icon_state = "television" /obj/effect/spawner/backrooms_portal name = "backrooms two way portal spawner" /obj/effect/spawner/backrooms_portal/Initialize(mapload) + RegisterSignal(SSdcs, COMSIG_BACKROOMS_INITIALIZE, PROC_REF(spawn_portals)) + +/obj/effect/spawner/backrooms_portal/proc/spawn_portals() var/backrooms_level = SSmapping.levels_by_trait(ZTRAIT_PROCEDURAL_MAINTS) if(LAZYLEN(backrooms_level)) var/turf/way_out = find_safe_turf(zlevels = backrooms_level, dense_atoms = FALSE) diff --git a/code/datums/mapgen/dungeon_generators/maintenance_generator/maintenance_room_themes/random.dm b/code/datums/mapgen/dungeon_generators/maintenance_generator/maintenance_room_themes/random.dm index f5c895fd218e..269a446e1e1e 100644 --- a/code/datums/mapgen/dungeon_generators/maintenance_generator/maintenance_room_themes/random.dm +++ b/code/datums/mapgen/dungeon_generators/maintenance_generator/maintenance_room_themes/random.dm @@ -1,3 +1,4 @@ +//plants and shit /datum/dungeon_room_theme/maintenance/botany weighted_possible_floor_types = list( /turf/open/floor/plating = 3, @@ -29,7 +30,7 @@ for(var/i in 1 to 5) weighted_feature_spawn_list |= pick(subtypesof(/obj/item/seeds) - /obj/item/seeds/lavaland) - +///mineral loot room /datum/dungeon_room_theme/maintenance/material_storeroom weighted_feature_spawn_list = list( /obj/item/stack/rods/fifty = 2, @@ -58,7 +59,7 @@ if(stack_to_randomize.amount == 1) stack_to_randomize.amount = rand(1, 25) - +///you work out bro? /datum/dungeon_room_theme/maintenance/gym weighted_feature_spawn_list = list( /obj/item/reagent_containers/glass/beaker/waterbottle = 5, @@ -90,7 +91,7 @@ gym_mob.name = "\improper Gym Rat" gym_mob.desc = "He's not about to settle for Gouda-nough." - +///one man's junk is another mans... also junk /datum/dungeon_room_theme/maintenance/junk weighted_feature_spawn_list = list( /obj/item/reagent_containers/food/drinks/soda_cans/grey_bull = 1, @@ -115,7 +116,7 @@ if(trash_animal) trash_animal.faction |= "trash" - +///doctor! /datum/dungeon_room_theme/maintenance/medical weighted_possible_floor_types = list( /turf/open/floor/plasteel = 5, @@ -169,6 +170,7 @@ if(istype(medical_professional, /mob/living/simple_animal/hostile/zombie) && prob(1)) medical_professional.desc = "Oh my god he IS a surgeon..." +///we can rebuild him. /datum/dungeon_room_theme/maintenance/robotics weighted_feature_spawn_list = list( /obj/effect/decal/cleanable/robot_debris = 2, @@ -202,6 +204,7 @@ weighted_feature_spawn_list |= pick(subtypesof(/obj/item/stock_parts/micro_laser)) weighted_feature_spawn_list |= pick(subtypesof(/obj/item/stock_parts/matter_bin)) +///this is the best room, unless you hate spiders, then it's the worst. /datum/dungeon_room_theme/maintenance/spiders weighted_feature_spawn_list = list( /obj/structure/spider/stickyweb = 5, @@ -215,7 +218,7 @@ /mob/living/simple_animal/hostile/poison/giant_spider/ice = 2, ) - +///powergamers... even in the backrooms... /datum/dungeon_room_theme/maintenance/xenobio weighted_possible_floor_types = list( /turf/open/floor/plasteel/dark = 3, @@ -261,3 +264,213 @@ weighted_mob_spawn_list[/mob/living/simple_animal/slime/random]++ else weighted_mob_spawn_list[/mob/living/simple_animal/slime]++ + +///domo arigato +/datum/dungeon_room_theme/maintenance/machine_parts + weighted_feature_spawn_list = list( + /obj/effect/decal/cleanable/robot_debris = 2, + /obj/effect/decal/cleanable/oil = 3, + /obj/item/stack/cable_coil/random = 5, + /obj/structure/frame/machine = 3, + /obj/structure/frame/computer = 2, + /obj/effect/spawner/lootdrop/random_anomaly_core = 1, + /obj/effect/mine/stun + ) + weighted_mob_spawn_list = list( + /mob/living/simple_animal/hostile/hivebot = 5, + /mob/living/simple_animal/hostile/hivebot/range = 2, + /mob/living/simple_animal/hostile/hivebot/rapid = 1, + ) + +/datum/dungeon_room_theme/maintenance/machine_parts/pre_initialize() + . = ..() + if(prob(75)) + weighted_feature_spawn_list |= pick(typesof(/obj/item/circuitboard)) + if(prob(75)) + weighted_feature_spawn_list |= pick(typesof(/obj/item/circuitboard)) + if(prob(75)) + weighted_feature_spawn_list |= pick(typesof(/obj/item/circuitboard)) + if(prob(75)) + weighted_feature_spawn_list |= pick(typesof(/obj/item/circuitboard)) + if(prob(75)) + weighted_feature_spawn_list |= pick(typesof(/obj/item/circuitboard)) + + +///dead money reference except I couldnt add father elijah +/datum/dungeon_room_theme/maintenance/bank + weighted_feature_spawn_list = list( + /obj/structure/safe = 1, + /obj/item/coin/gold = 5, + /obj/item/coin/silver = 5, + /obj/item/stack/sheet/mineral/gold = 10, ///this DLC is about letting go, letting go of poverty!!! + /obj/item/stack/spacecash/c1000 = 2, + /obj/item/stack/sheet/mineral/diamond = 5 + ) + weighted_mob_spawn_list = list( + /mob/living/simple_animal/hostile/hivebot/range = 2, + ) + +///mama mia +/datum/dungeon_room_theme/maintenance/kitchen + weighted_feature_spawn_list = list( + /obj/machinery/griddle = 1, + /obj/machinery/microwave = 1, + /obj/structure/closet/secure_closet/freezer/fridge = 1, + /obj/item/storage/box/donkpockets = 1, + /obj/item/kitchen/knife = 1, + /obj/effect/spawner/lootdrop/random_meat = 5 + + ) + weighted_mob_spawn_list = list( + /mob/living/simple_animal/hostile/retaliate/goat = 2 + ) + +///just lik the founding fathers intended +/datum/dungeon_room_theme/maintenance/ancient_armory + weighted_possible_floor_types = list( + /turf/open/floor/plasteel/dark = 3, + /turf/open/floor/plasteel = 5, + /turf/open/floor/plating = 3, + ) + + weighted_feature_spawn_list = list( + /obj/structure/filingcabinet/chestdrawer = 1, + /obj/item/kirbyplants/random = 2, + list(/obj/structure/rack , /obj/item/melee/spear/plugged_musket) = 1, + list(/obj/structure/rack , /obj/item/clothing/suit/armor/vest, /obj/item/clothing/head/helmet/riot) = 1, + /obj/structure/frame/machine = 1, + /obj/structure/frame/computer = 1, + /obj/effect/mine/stun + ) + + weighted_mob_spawn_list = list( + /mob/living/simple_animal/hostile/robot/burst = 2, + ) +/datum/dungeon_room_theme/maintenance/ancient_armory/pre_initialize() + + . = ..() + for(var/i in 1 to 3) + if(prob(10)) + weighted_feature_spawn_list[/obj/item/kitchen/knife/combat/bone]++ + else + weighted_feature_spawn_list[/obj/item/melee/spear/bonespear/chitinspear]++ + +///these don't actually spawn inside the suit storage and I think thats funny +/datum/dungeon_room_theme/maintenance/hardsuit + weighted_feature_spawn_list = list( + list(/obj/machinery/suit_storage_unit,/obj/item/clothing/suit/space/hardsuit/mining), + list(/obj/machinery/suit_storage_unit,/obj/item/clothing/suit/space/hardsuit/ancient), + list(/obj/machinery/suit_storage_unit,/obj/item/clothing/suit/space/hardsuit/engine), + list(/obj/machinery/suit_storage_unit,/obj/item/clothing/suit/space/hardsuit/medical) + ) + + weighted_mob_spawn_list = list( + /mob/living/simple_animal/hostile/robot/burst = 2, + /mob/living/simple_animal/hostile/robot/burst = 2 + ) + +///this gun blows so much ass using it is actually more likely to get you killed +/datum/dungeon_room_theme/maintenance/lasgun + + weighted_mob_spawn_list = list( + /mob/living/simple_animal/hostile/robot/burst = 2, + /mob/living/simple_animal/hostile/robot/advanced/ranged = 1 + ) + +/datum/dungeon_room_theme/maintenance/lasgun/pre_initialize() + . = ..() + for(var/i in 1 to 5) + if(prob(10)) + weighted_feature_spawn_list[/obj/item/gun/energy/laser/captain/scattershot ]++ + else + weighted_feature_spawn_list[/obj/item/melee/spear/bonespear/chitinspear]++ + +///lathes, nough said +/datum/dungeon_room_theme/maintenance/autolathe + weighted_feature_spawn_list = list( + /obj/machinery/autolathe/hacked = 1, + /obj/machinery/autolathe = 1, + /obj/machinery/autolathe = 1, + /obj/item/stack/sheet/glass/fifty = 1, + /obj/item/stack/sheet/metal/fifty = 1, + /obj/item/stack/sheet/mineral/silver/fifty = 1 + ) +///eskimo enemy variety, they came here for the winter +/datum/dungeon_room_theme/maintenance/eskimo + weighted_mob_spawn_list = list( + /mob/living/simple_animal/hostile/skeleton/eskimo = 2, + /mob/living/simple_animal/hostile/skeleton/eskimo = 1 + ) +///I really really really want to include a real chasm but god knows im not strong enough +/datum/dungeon_room_theme/maintenance/chasm_fake + weighted_possible_floor_types = list( + /turf/open/floor/fakepit = 3, + /turf/open/floor/fakepit = 5, + /turf/open/floor/fakepit= 3, + ) +///im so adding more mines +/datum/dungeon_room_theme/maintenance/mine_room + weighted_feature_spawn_list = list( + /obj/effect/mine/kickmine = 1, + /obj/effect/mine/creampie = 7, + /obj/effect/spawner/lootdrop/random_anomaly_core = 1 + ) +///mineral room 2 but with danger involved +/datum/dungeon_room_theme/maintenance/mineral_room + weighted_feature_spawn_list = list( + /obj/item/stack/sheet/mineral/diamond = 5, + /obj/item/stack/sheet/mineral/uranium = 5, + /obj/item/stack/sheet/mineral/plasma = 5, + /obj/item/stack/sheet/mineral/gold = 5, + /obj/item/stack/sheet/mineral/silver = 5, + /obj/item/stack/sheet/mineral/mythril = 1 + ) + + weighted_mob_spawn_list = list( + /mob/living/simple_animal/hostile/asteroid/goliath/beast = 1, + /mob/living/simple_animal/hostile/asteroid/goliath/beast = 1 + ) +///sus, amongus. +/datum/dungeon_room_theme/maintenance/sus_room + weighted_feature_spawn_list = list( + /obj/item/clothing/gloves/combat = 1, + /obj/item/kitchen/knife/combat = 1, + /obj/machinery/atmospherics/components/unary/vent_pump/on = 1 + ) + + + weighted_mob_spawn_list = list( + /mob/living/simple_animal/hostile/retaliate/goat/suspicious = 1, + ) +///pizza tower, or spiderman 2 reference, depending on the year you time travelled from +/datum/dungeon_room_theme/maintenance/pizza_time + weighted_feature_spawn_list = list( + /obj/item/reagent_containers/food/snacks/pizza = 1, + /obj/item/reagent_containers/food/snacks/pizza = 1, + /obj/item/circuitboard/machine/griddle = 1, + /obj/item/clothing/suit/toggle/chef = 1, + /obj/item/clothing/suit/apron/chef = 1 + ) +///cuackles played this once +/datum/dungeon_room_theme/maintenance/oxygen_included + weighted_feature_spawn_list = list( + /obj/structure/tank_dispenser = 1, + /obj/structure/tank_dispenser = 1, + /obj/item/tank/internals/emergency_oxygen = 3, + /obj/item/tank/internals/emergency_oxygen/double = 1, + /obj/item/tank/internals/emergency_oxygen/vox = 1 + ) +///we couldnt afford the surgery tools +/datum/dungeon_room_theme/maintenance/medical_surgical + weighted_possible_floor_types = list( + /turf/open/floor/plasteel/white = 3, + /turf/open/floor/plasteel = 5, + /turf/open/floor/plating = 3, + ) + + weighted_feature_spawn_list = list( + /obj/item/storage/firstaid/regular = 1, + /obj/item/storage/firstaid/toxin = 1, + /obj/machinery/computer/operating = 1, + /obj/structure/table/optable = 1, + ) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 7fa56c62a351..fe316920a152 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -784,3 +784,11 @@ loot = list(/mob/living/simple_animal/hostile/asteroid/marrowweaver = 35, /mob/living/simple_animal/hostile/asteroid/marrowweaver/ice = 5, "" = 60) + +/obj/effect/spawner/lootdrop/random_anomaly_core + name = "anomaly core spawner" + +/obj/effect/spawner/lootdrop/random_anomaly_core/Initialize(mapload) + var/item = pick(typesof(/obj/item/assembly/signaler/anomaly)) + new item(loc) + return INITIALIZE_HINT_QDEL diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index d8f6f027bec7..ef6540236cc3 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -6,8 +6,8 @@ orbit_icon = "box" department_head = list("Head of Personnel") faction = "Station" - total_positions = 2 - spawn_positions = 1 + total_positions = 5 + spawn_positions = 4 supervisors = "the quartermaster and the head of personnel" outfit = /datum/outfit/job/cargo_tech diff --git a/config/jobs.txt b/config/jobs.txt index 0f20c2291552..8b7aca5b8e6a 100644 --- a/config/jobs.txt +++ b/config/jobs.txt @@ -12,7 +12,7 @@ Chief Medical Officer=1,1 Assistant=-1,-1 Quartermaster=1,1 -Cargo Technician=2,1 +Cargo Technician=5,4 Shaft Miner=3,3 Bartender=1,1