Vore Updates and merges

This commit is contained in:
Hawk_v3
2018-10-03 18:25:39 +01:00
1386 changed files with 634283 additions and 89661 deletions

View File

@@ -200,7 +200,7 @@
"moles" = round(air2.gas[output_gas], 0.01))
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "algae_farm_vr.tmpl", "Algae Farm Control Panel", 500, 600)
ui.set_initial_data(data)

View File

@@ -89,7 +89,7 @@
return 1
/obj/machinery/atmospherics/binary/circulator/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/wrench))
if(W.is_wrench())
playsound(src, W.usesound, 75, 1)
anchored = !anchored
user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \

View File

@@ -197,7 +197,7 @@
)
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
@@ -243,7 +243,7 @@
return
/obj/machinery/atmospherics/binary/passive_gate/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (!istype(W, /obj/item/weapon/wrench))
if (!W.is_wrench())
return ..()
if (unlocked)
to_chat(user, "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>")

View File

@@ -84,7 +84,7 @@
overlays += image('icons/obj/pipeturbine.dmi', "hi-turb")
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/wrench))
if(W.is_wrench())
anchored = !anchored
playsound(src, W.usesound, 50, 1)
to_chat(user, "<span class='notice'>You [anchored ? "secure" : "unsecure"] the bolts holding \the [src] to the floor.</span>")
@@ -259,7 +259,7 @@
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/wrench))
if(W.is_wrench())
anchored = !anchored
playsound(src, W.usesound, 50, 1)
turbine = null

View File

@@ -140,7 +140,7 @@ Thus, the two variables affect pump operation are set in New():
)
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
@@ -222,7 +222,7 @@ Thus, the two variables affect pump operation are set in New():
update_icon()
/obj/machinery/atmospherics/binary/pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (!istype(W, /obj/item/weapon/wrench))
if (!W.is_wrench())
return ..()
if (!(stat & NOPOWER) && use_power)
to_chat(user, "<span class='warning'>You cannot unwrench this [src], turn it off first.</span>")

View File

@@ -93,7 +93,7 @@
data = build_uidata()
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "omni_filter.tmpl", "Omni Filter Control", 330, 330)
@@ -181,7 +181,7 @@
switch_filter(dir_flag(href_list["dir"]), mode_return_switch(new_filter))
update_icon()
nanomanager.update_uis(src)
GLOB.nanomanager.update_uis(src)
return
/obj/machinery/atmospherics/omni/atmos_filter/proc/mode_return_switch(var/mode)

View File

@@ -131,7 +131,7 @@
data = build_uidata()
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "omni_mixer.tmpl", "Omni Mixer Control", 360, 330)
@@ -200,7 +200,7 @@
con_lock(dir_flag(href_list["dir"]))
update_icon()
nanomanager.update_uis(src)
GLOB.nanomanager.update_uis(src)
return
/obj/machinery/atmospherics/omni/mixer/proc/switch_mode(var/port = NORTH, var/mode = ATM_NONE)

View File

@@ -80,7 +80,7 @@
update_icon()
/obj/machinery/atmospherics/omni/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if(!istype(W, /obj/item/weapon/wrench))
if(!W.is_wrench())
return ..()
if(!can_unwrench())

View File

@@ -133,7 +133,7 @@
/obj/machinery/atmospherics/portables_connector/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (!istype(W, /obj/item/weapon/wrench))
if (!W.is_wrench())
return ..()
if (connected_device)
to_chat(user, "<span class='warning'>You cannot unwrench \the [src], dettach \the [connected_device] first.</span>")

View File

@@ -52,7 +52,7 @@
update_icon()
/obj/machinery/atmospherics/trinary/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (!istype(W, /obj/item/weapon/wrench))
if (!W.is_wrench())
return ..()
if(!can_unwrench())
to_chat(user, "<span class='warning'>You cannot unwrench \the [src], it too exerted due to internal pressure.</span>")

View File

@@ -327,7 +327,7 @@
go_to_side()
/obj/machinery/atmospherics/tvalve/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (!istype(W, /obj/item/weapon/wrench))
if (!W.is_wrench())
return ..()
if (istype(src, /obj/machinery/atmospherics/tvalve/digital))
to_chat(user, "<span class='warning'>You cannot unwrench \the [src], it's too complicated.</span>")

View File

@@ -83,7 +83,7 @@
data["gasTemperatureClass"] = temp_class
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
@@ -180,4 +180,4 @@
/obj/machinery/atmospherics/unary/freezer/examine(mob/user)
..(user)
if(panel_open)
user << "The maintenance hatch is open."
to_chat(user, "The maintenance hatch is open.")

View File

@@ -67,7 +67,7 @@
return 1
attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (!istype(W, /obj/item/weapon/wrench))
if (!W.is_wrench())
return ..()
var/turf/T = src.loc
if (level==1 && isturf(T) && !T.is_plating())

View File

@@ -103,7 +103,7 @@
data["gasTemperatureClass"] = temp_class
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
@@ -167,4 +167,4 @@
/obj/machinery/atmospherics/unary/heater/examine(mob/user)
..(user)
if(panel_open)
user << "The maintenance hatch is open."
to_chat(user, "The maintenance hatch is open.")

View File

@@ -407,7 +407,7 @@
update_icon()
/obj/machinery/atmospherics/unary/vent_pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (!istype(W, /obj/item/weapon/wrench))
if (!W.is_wrench())
return ..()
if (!(stat & NOPOWER) && use_power)
to_chat(user, "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>")

View File

@@ -20,7 +20,7 @@
var/hibernate = 0 //Do we even process?
var/scrubbing = 1 //0 = siphoning, 1 = scrubbing
var/list/scrubbing_gas = list("carbon_dioxide", "phoron")
var/list/scrubbing_gas = list("carbon_dioxide")
var/panic = 0 //is this scrubber panicked?
@@ -264,7 +264,7 @@
update_icon()
/obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (!istype(W, /obj/item/weapon/wrench))
if (!W.is_wrench())
return ..()
if (!(stat & NOPOWER) && use_power)
to_chat(user, "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>")

View File

@@ -0,0 +1,2 @@
/obj/machinery/atmospherics/unary/vent_scrubber
scrubbing_gas = list("carbon_dioxide", "phoron")

View File

@@ -288,7 +288,7 @@
open()
/obj/machinery/atmospherics/valve/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (!istype(W, /obj/item/weapon/wrench))
if (!W.is_wrench())
return ..()
if (istype(src, /obj/machinery/atmospherics/valve/digital) && !src.allowed(user))
to_chat(user, "<span class='warning'>Access denied.</span>")

View File

@@ -10,7 +10,7 @@ datum/pipeline
var/alert_pressure = 0
Destroy()
qdel_null(network)
QDEL_NULL(network)
if(air && air.volume)
temporarily_store_air()

View File

@@ -72,7 +72,7 @@
return parent.return_network(reference)
/obj/machinery/atmospherics/pipe/Destroy()
qdel_null(parent)
QDEL_NULL(parent)
if(air_temporary)
loc.assume_air(air_temporary)
for(var/obj/machinery/meter/meter in loc)
@@ -89,7 +89,7 @@
if(istype(W,/obj/item/device/pipe_painter))
return 0
if (!istype(W, /obj/item/weapon/wrench))
if (!W.is_wrench())
return ..()
var/turf/T = src.loc
if (level==1 && isturf(T) && !T.is_plating())

View File

@@ -40,15 +40,11 @@ var/image/contamination_overlay = image('icons/effects/contamination.dmi')
obj/var/contaminated = 0
obj/var/phoronproof = 0
/obj/item/proc/can_contaminate()
//Clothing and backpacks can be contaminated.
if(flags & PHORONGUARD)
return 0
else if(phoronproof == 1)
return 0
else if(istype(src,/obj/item/weapon/storage/backpack))
return 0 //Cannot be washed :(
else if(istype(src,/obj/item/clothing))
@@ -148,7 +144,7 @@ obj/var/phoronproof = 0
//Checks if the head is adequately sealed. //This is just odd. TODO: Make this respect the body_parts_covered stuff like thermal gear does.
if(head)
if(vsc.plc.PHORONGUARD_ONLY)
if(head.flags & PHORONGUARD || head.phoronproof)
if(head.flags & PHORONGUARD)
return 1
else if(head.body_parts_covered & EYES)
return 1
@@ -160,7 +156,7 @@ obj/var/phoronproof = 0
for(var/obj/item/protection in list(wear_suit, gloves, shoes)) //This is why it's odd. If I'm in a full suit, but my shoes and gloves aren't phoron proof, damage.
if(!protection)
continue
if(vsc.plc.PHORONGUARD_ONLY && !(protection.flags & PHORONGUARD) && !protection.phoronproof)
if(vsc.plc.PHORONGUARD_ONLY && !(protection.flags & PHORONGUARD))
return 0
coverage |= protection.body_parts_covered

View File

@@ -0,0 +1,38 @@
//See controllers/globals.dm
#define GLOBAL_MANAGED(X, InitValue)\
/datum/controller/global_vars/proc/InitGlobal##X(){\
##X = ##InitValue;\
gvars_datum_init_order += #X;\
}
#define GLOBAL_UNMANAGED(X, InitValue) /datum/controller/global_vars/proc/InitGlobal##X()
#ifndef TESTING
#define GLOBAL_PROTECT(X)\
/datum/controller/global_vars/InitGlobal##X(){\
..();\
gvars_datum_protected_varlist += #X;\
}
#else
#define GLOBAL_PROTECT(X)
#endif
#define GLOBAL_REAL_VAR(X) var/global/##X
#define GLOBAL_REAL(X, Typepath) var/global##Typepath/##X
#define GLOBAL_RAW(X) /datum/controller/global_vars/var/global##X
#define GLOBAL_VAR_INIT(X, InitValue) GLOBAL_RAW(/##X); GLOBAL_MANAGED(X, InitValue)
#define GLOBAL_VAR_CONST(X, InitValue) GLOBAL_RAW(/const/##X) = InitValue; GLOBAL_UNMANAGED(X, InitValue)
#define GLOBAL_LIST_INIT(X, InitValue) GLOBAL_RAW(/list/##X); GLOBAL_MANAGED(X, InitValue)
#define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list())
#define GLOBAL_DATUM_INIT(X, Typepath, InitValue) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, InitValue)
#define GLOBAL_VAR(X) GLOBAL_RAW(/##X); GLOBAL_MANAGED(X, null)
#define GLOBAL_LIST(X) GLOBAL_RAW(/list/##X); GLOBAL_MANAGED(X, null)
#define GLOBAL_DATUM(X, Typepath) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, null)

View File

@@ -1,13 +1,14 @@
#define MC_TICK_CHECK ( ( TICK_USAGE > Master.current_ticklimit || src.state != SS_RUNNING ) ? pause() : 0 )
#define MC_TICK_CHECK ( ( TICK_USAGE > GLOB.CURRENT_TICKLIMIT || src.state != SS_RUNNING ) ? pause() : 0 )
// Used for splitting up your remaining time into phases, if you want to evenly divide it.
#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = Master.current_ticklimit; var/split_tick_phases = ##phase_count
#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = GLOB.CURRENT_TICKLIMIT; var/split_tick_phases = ##phase_count
#define MC_SPLIT_TICK \
if(split_tick_phases > 1){\
Master.current_ticklimit = ((original_tick_limit - TICK_USAGE) / split_tick_phases) + TICK_USAGE;\
GLOB.CURRENT_TICKLIMIT = ((original_tick_limit - world.tick_usage) / split_tick_phases) + world.tick_usage;\
--split_tick_phases;\
} else {\
Master.current_ticklimit = original_tick_limit;\
GLOB.CURRENT_TICKLIMIT = original_tick_limit;\
}
// Boilerplate code for multi-step processors. See machines.dm for example use.
@@ -78,9 +79,15 @@ if(current_step == this_step || (initial_step && !resumed)) /* So we start at st
#define SS_PAUSING 5 //in the middle of pausing
// Standard way to define a global subsystem, keep boilerplate organized here!
#define SUBSYSTEM_DEF(X) var/datum/controller/subsystem/##X/SS##X;\
#define SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/##X);\
/datum/controller/subsystem/##X/New(){\
NEW_SS_GLOBAL(SS##X);\
PreInit();\
}\
/datum/controller/subsystem/##X
#define PROCESSING_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/processing/##X);\
/datum/controller/subsystem/processing/##X/New(){\
NEW_SS_GLOBAL(SS##X);\
PreInit();\
}\
/datum/controller/subsystem/processing/##X

View File

@@ -73,6 +73,7 @@ What is the naming convention for planes or layers?
#define ABOVE_JUNK_LAYER 3.1 // Things that want to be slightly above common objects
#define DOOR_CLOSED_LAYER 3.1 // Doors when closed
#define WINDOW_LAYER 3.2 // Windows
#define ABOVE_WINDOW_LAYER 3.25 //Above full tile windows so wall items are clickable
#define ON_WINDOW_LAYER 3.3 // Ontop of a window
// Mob planes

View File

@@ -3,7 +3,7 @@
#define TICK_LIMIT_MC 70
#define TICK_LIMIT_MC_INIT_DEFAULT 98
#define TICK_CHECK ( TICK_USAGE > Master.current_ticklimit )
#define TICK_CHECK ( TICK_USAGE > GLOB.CURRENT_TICKLIMIT )
#define CHECK_TICK if TICK_CHECK stoplag()
#define TICK_USAGE world.tick_usage

17
code/__defines/color.dm Normal file
View File

@@ -0,0 +1,17 @@
//Color defines used by the assembly detailer.
#define COLOR_ASSEMBLY_BLACK "#545454"
#define COLOR_ASSEMBLY_BGRAY "#9497AB"
#define COLOR_ASSEMBLY_WHITE "#E2E2E2"
#define COLOR_ASSEMBLY_RED "#CC4242"
#define COLOR_ASSEMBLY_ORANGE "#E39751"
#define COLOR_ASSEMBLY_BEIGE "#AF9366"
#define COLOR_ASSEMBLY_BROWN "#97670E"
#define COLOR_ASSEMBLY_GOLD "#AA9100"
#define COLOR_ASSEMBLY_YELLOW "#CECA2B"
#define COLOR_ASSEMBLY_GURKHA "#999875"
#define COLOR_ASSEMBLY_LGREEN "#789876"
#define COLOR_ASSEMBLY_GREEN "#44843C"
#define COLOR_ASSEMBLY_LBLUE "#5D99BE"
#define COLOR_ASSEMBLY_BLUE "#38559E"
#define COLOR_ASSEMBLY_PURPLE "#6F6192"
#define COLOR_ASSEMBLY_HOT_PINK "#FF69B4"

View File

@@ -4,7 +4,7 @@
#define WORLD_ICON_SIZE 32 // Size of a standard tile in pixels (world.icon_size)
#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 // Convert from normal icon size of 32 to whatever insane thing this server is using.
#define HOLOMAP_ICON 'icons/480x480_vr.dmi' // Icon file to start with when drawing holomaps (to get a 480x480 canvas).
#define HOLOMAP_ICON 'icons/480x480.dmi' // Icon file to start with when drawing holomaps (to get a 480x480 canvas).
#define HOLOMAP_ICON_SIZE 480 // Pixel width & height of the holomap icon. Used for auto-centering etc.
#define ui_holomap "CENTER-7, CENTER-7" // Screen location of the holomap "hud"

View File

@@ -0,0 +1,3 @@
// Methods of obtaining a circuit.
#define IC_SPAWN_DEFAULT 1 // If the circuit comes in the default circuit box and able to be printed in the IC printer.
#define IC_SPAWN_RESEARCH 2 // If the circuit design will be available in the IC printer after upgrading it.

View File

@@ -282,3 +282,9 @@ var/global/list/##LIST_NAME = list();\
#define MATRIX_Achromatomaly list(0.62, 0.32, 0.06, 0.16, 0.78, 0.06, 0.16, 0.32, 0.52)
#define MATRIX_Vulp_Colorblind list(0.50, 0.40, 0.10, 0.50, 0.40, 0.10, 0, 0.20, 0.80)
#define MATRIX_Taj_Colorblind list(0.40, 0.20, 0.40, 0.40, 0.60, 0, 0.20, 0.20, 0.60)
// Tool substitution defines
#define IS_SCREWDRIVER "screwdriver"
#define IS_CROWBAR "crowbar"
#define IS_WIRECUTTER "wirecutter"
#define IS_WRENCH "wrench"

View File

@@ -168,18 +168,19 @@
#define MODIFIER_GENETIC 1 // Modifiers with this flag will be copied to mobs who get cloned.
// Bodyparts and organs.
#define O_MOUTH "mouth"
#define O_EYES "eyes"
#define O_HEART "heart"
#define O_CELL "cell"
#define O_LUNGS "lungs"
#define O_BRAIN "brain"
#define O_LIVER "liver"
#define O_KIDNEYS "kidneys"
#define O_APPENDIX "appendix"
#define O_VOICE "voicebox"
#define O_STANDARD list(O_EYES, O_HEART, O_LUNGS, O_BRAIN, O_LIVER, O_KIDNEYS, O_APPENDIX, O_VOICE)
// Non-Standard organs
#define O_MOUTH "mouth"
#define O_CELL "cell"
#define O_PLASMA "plasma vessel"
#define O_HIVE "hive node"
#define O_NUTRIENT "nutrient vessel"
@@ -191,7 +192,9 @@
#define O_ACID "acid gland"
#define O_EGG "egg sac"
#define O_RESIN "resin spinner"
#define O_ALL list(O_STANDARD, O_MOUTH, O_CELL, O_PLASMA, O_HIVE, O_NUTRIENT, O_STRATA, O_RESPONSE, O_GBLADDER, O_POLYP, O_ANCHOR, O_ACID, O_EGG, O_RESIN)
// External organs, aka limbs
#define BP_L_FOOT "l_foot"
#define BP_R_FOOT "r_foot"
#define BP_L_LEG "l_leg"

View File

@@ -10,5 +10,16 @@
#define WEATHER_HOT "hot"
#define WEATHER_BLOOD_MOON "blood moon" // For admin fun or cult later on.
#define MOON_PHASE_NEW_MOON "new moon"
#define MOON_PHASE_WAXING_CRESCENT "waxing crescent"
#define MOON_PHASE_FIRST_QUARTER "first quarter"
#define MOON_PHASE_WAXING_GIBBOUS "waxing gibbous"
#define MOON_PHASE_FULL_MOON "full moon" // ware-shantaks sold seperately.
#define MOON_PHASE_WANING_GIBBOUS "waning gibbous"
#define MOON_PHASE_LAST_QUARTER "last quarter"
#define MOON_PHASE_WANING_CRESCENT "waning crescent"
#define PLANET_PROCESS_SUN 0x1
#define PLANET_PROCESS_TEMP 0x2
#define PLANET_TIME_MODIFIER 1 // If you want planet time to go faster than realtime, increase this number.

View File

@@ -54,3 +54,125 @@
#define SMALL_SOFTFLOOR ROOM
#define ASTEROID CAVE
#define SPACE UNDERWATER
// Ambience presets.
// All you need to do to make an area play one of these is set their ambience var to one of these lists.
// You can even combine them by adding them together, since they're just lists, however you'd have to do that in initialization.
// For weird alien places like the crashed UFO.
#define AMBIENCE_OTHERWORLDLY list(\
'sound/ambience/otherworldly/otherworldly1.ogg',\
'sound/ambience/otherworldly/otherworldly2.ogg',\
'sound/ambience/otherworldly/otherworldly3.ogg'\
)
// Restricted, military, or mercenary aligned locations like the armory, the merc ship/base, BSD, etc.
#define AMBIENCE_HIGHSEC list(\
'sound/ambience/highsec/highsec1.ogg',\
'sound/ambience/highsec/highsec2.ogg'\
)
// Ruined structures found on the surface or in the caves.
#define AMBIENCE_RUINS list(\
'sound/ambience/ruins/ruins1.ogg',\
'sound/ambience/ruins/ruins2.ogg',\
'sound/ambience/ruins/ruins3.ogg',\
'sound/ambience/ruins/ruins4.ogg',\
'sound/ambience/ruins/ruins5.ogg',\
'sound/ambience/ruins/ruins6.ogg'\
)
// Similar to the above, but for more technology/signaling based ruins.
#define AMBIENCE_TECH_RUINS list(\
'sound/ambience/tech_ruins/tech_ruins1.ogg',\
'sound/ambience/tech_ruins/tech_ruins2.ogg',\
'sound/ambience/tech_ruins/tech_ruins3.ogg'\
)
// The actual chapel room, and maybe some other places of worship.
#define AMBIENCE_CHAPEL list(\
'sound/ambience/chapel/chapel1.ogg',\
'sound/ambience/chapel/chapel2.ogg',\
'sound/ambience/chapel/chapel3.ogg',\
'sound/ambience/chapel/chapel4.ogg'\
)
// For peaceful, serene areas, distinct from the Chapel.
#define AMBIENCE_HOLY list(\
'sound/ambience/holy/holy1.ogg',\
'sound/ambience/holy/holy2.ogg'\
)
// Generic sounds for less special rooms.
#define AMBIENCE_GENERIC list(\
'sound/ambience/generic/generic1.ogg',\
'sound/ambience/generic/generic2.ogg',\
'sound/ambience/generic/generic3.ogg',\
'sound/ambience/generic/generic4.ogg'\
)
// Sounds of PA announcements, presumably involving shuttles?
#define AMBIENCE_ARRIVALS list(\
'sound/ambience/arrivals/arrivals1.ogg',\
'sound/ambience/arrivals/arrivals2.ogg'\
)
// Sounds suitable for being inside dark, tight corridors in the underbelly of the station.
#define AMBIENCE_MAINTENANCE list(\
'sound/ambience/maintenance/maintenance1.ogg',\
'sound/ambience/maintenance/maintenance2.ogg',\
'sound/ambience/maintenance/maintenance3.ogg',\
'sound/ambience/maintenance/maintenance4.ogg',\
'sound/ambience/maintenance/maintenance5.ogg',\
'sound/ambience/maintenance/maintenance6.ogg'\
)
// Life support machinery at work, keeping everyone breathing.
#define AMBIENCE_ENGINEERING list(\
'sound/ambience/engineering/engineering1.ogg',\
'sound/ambience/engineering/engineering2.ogg',\
'sound/ambience/engineering/engineering3.ogg'\
)
// Creepy AI/borg stuff.
#define AMBIENCE_AI list(\
'sound/ambience/ai/ai1.ogg'\
)
// Peaceful sounds when floating in the void.
#define AMBIENCE_SPACE list(\
'sound/ambience/space/space_serithi.ogg',\
'sound/ambience/space/space1.ogg'\
)
// Vaguely spooky sounds when around dead things.
#define AMBIENCE_GHOSTLY list(\
'sound/ambience/ghostly/ghostly1.ogg',\
'sound/ambience/ghostly/ghostly2.ogg'\
)
// Concerning sounds, for when one discovers something horrible happened in a PoI.
#define AMBIENCE_FOREBODING list(\
'sound/ambience/foreboding/foreboding1.ogg',\
'sound/ambience/foreboding/foreboding2.ogg'\
)
// Ambience heard when aboveground on Sif and not in a Point of Interest.
#define AMBIENCE_SIF list(\
'sound/ambience/sif/sif1.ogg'\
)
// If we ever add geothermal PoIs or other places that are really hot, this will do.
#define AMBIENCE_LAVA list(\
'sound/ambience/lava/lava1.ogg'\
)
// Cult-y ambience, for some PoIs, and maybe when the cultists darken the world with the ritual.
#define AMBIENCE_UNHOLY list(\
'sound/ambience/unholy/unholy1.ogg'\
)
// For the memes.
#define AMBIENCE_AESTHETIC list(\
'sound/ambience/vaporwave.ogg'\
)

View File

@@ -1,3 +1,18 @@
//Timing subsystem
//Don't run if there is an identical unique timer active
#define TIMER_UNIQUE 0x1
//For unique timers: Replace the old timer rather then not start this one
#define TIMER_OVERRIDE 0x2
//Timing should be based on how timing progresses on clients, not the sever.
// tracking this is more expensive,
// should only be used in conjuction with things that have to progress client side, such as animate() or sound()
#define TIMER_CLIENT_TIME 0x4
//Timer can be stopped using deltimer()
#define TIMER_STOPPABLE 0x8
//To be used with TIMER_UNIQUE
//prevents distinguishing identical timers with the wait variable
#define TIMER_NO_HASH_WAIT 0x10
#define TIMER_NO_INVOKE_WARNING 600 //number of byond ticks that are allowed to pass before the timer subsystem thinks it hung on something
#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize
#define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE)
@@ -7,6 +22,15 @@
#define INITIALIZE_HINT_LATELOAD 1 //Call LateInitialize
#define INITIALIZE_HINT_QDEL 2 //Call qdel on the atom
//type and all subtypes should always call Initialize in New()
#define INITIALIZE_IMMEDIATE(X) ##X/New(loc, ...){\
..();\
if(!initialized) {\
args[1] = TRUE;\
SSatoms.InitAtom(src, args);\
}\
}
// SS runlevels
#define RUNLEVEL_INIT 0 // "Initialize Only" - Used for subsystems that should never be fired (Should also have SS_NO_FIRE set)
@@ -32,8 +56,10 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G
#define INIT_ORDER_LIGHTING 0
#define INIT_ORDER_AIR -1
#define INIT_ORDER_PLANETS -4
#define INIT_ORDER_HOLOMAPS -5
#define INIT_ORDER_OVERLAY -6
#define INIT_ORDER_XENOARCH -20
#define INIT_ORDER_CIRCUIT -21
// Subsystem fire priority, from lowest to highest priority

19
code/__defines/supply.dm Normal file
View File

@@ -0,0 +1,19 @@
// Supply shuttle status defines
#define SUP_SHUTTLE_ERROR -1 // Error state
#define SUP_SHUTTLE_DOCKED 0
#define SUP_SHUTTLE_UNDOCKED 1
#define SUP_SHUTTLE_DOCKING 2
#define SUP_SHUTTLE_UNDOCKING 3
#define SUP_SHUTTLE_TRANSIT 4
#define SUP_SHUTTLE_AWAY 5
// Supply computer access levels
#define SUP_SEND_SHUTTLE 0x1 // Send the shuttle back and forth
#define SUP_ACCEPT_ORDERS 0x2 // Accept orders
#define SUP_CONTRABAND 0x4 // Able to order contraband supply packs
// Supply_order status values
#define SUP_ORDER_REQUESTED "Requested"
#define SUP_ORDER_APPROVED "Approved"
#define SUP_ORDER_DENIED "Denied"
#define SUP_ORDER_SHIPPED "Shipped"

View File

@@ -0,0 +1,32 @@
GLOBAL_LIST_INIT(cardinal, list(NORTH, SOUTH, EAST, WEST))
GLOBAL_LIST_INIT(cardinalz, list(NORTH, SOUTH, EAST, WEST, UP, DOWN))
GLOBAL_LIST_INIT(cornerdirs, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
GLOBAL_LIST_INIT(cornerdirsz, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTH|UP, EAST|UP, WEST|UP, SOUTH|UP, NORTH|DOWN, EAST|DOWN, WEST|DOWN, SOUTH|DOWN))
GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir
2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15,
32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47,
16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31,
48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63
))
GLOBAL_LIST_INIT(flip_dir, list( // flip_dir[dir] = 180 degree rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN.
2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15,
16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31, // UP - Same as first line but +16
32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47, // DOWN - Same as first line but +32
48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63 // UP+DOWN - Same as first line but +48
))
GLOBAL_LIST_INIT(cw_dir, list( // cw_dir[dir] = clockwise rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN.
4, 8, 12, 2, 6, 10, 14, 1, 5, 9, 13, 3, 7, 11, 15,
16, 20, 24, 28, 18, 22, 26, 30, 17, 21, 25, 19, 29, 23, 27, 31, // UP - Same as first line but +16
32, 36, 40, 44, 34, 38, 42, 46, 33, 37, 41, 45, 35, 39, 43, 47, // DOWN - Same as first line but +32
48, 52, 56, 40, 50, 54, 58, 62, 49, 53, 57, 61, 51, 55, 59, 63 // UP+DOWN - Same as first line but +48
))
GLOBAL_LIST_INIT(cww_dir, list( // cww_dir[dir] = counter-clockwise rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN.
8, 4, 12, 1, 9, 5, 13, 2, 10, 6, 14, 3, 11, 7, 15,
16, 24, 20, 28, 17, 25, 21, 29, 18, 26, 22, 30, 19, 27, 23, 31, // UP - Same as first line but +16
32, 40, 36, 44, 33, 41, 37, 45, 34, 42, 38, 46, 35, 43, 39, 47, // DOWN - Same as first line but +32
48, 56, 52, 60, 49, 57, 53, 61, 50, 58, 54, 62, 51, 59, 55, 63 // UP+DOWN - Same as first line but +48
))

View File

@@ -0,0 +1 @@
GLOBAL_LIST_EMPTY(all_observable_events)

View File

@@ -0,0 +1,2 @@
GLOBAL_LIST_EMPTY(admins) //all clients whom are admins
GLOBAL_PROTECT(admins)

View File

@@ -0,0 +1,11 @@
// MySQL configuration
GLOBAL_REAL_VAR(sqladdress) = "localhost"
GLOBAL_REAL_VAR(sqlport) = "3306"
GLOBAL_REAL_VAR(sqldb) = "tgstation"
GLOBAL_REAL_VAR(sqllogin) = "root"
GLOBAL_REAL_VAR(sqlpass) = ""
// Feedback gathering sql connection
GLOBAL_REAL_VAR(sqlfdbkdb) = "test"
GLOBAL_REAL_VAR(sqlfdbklogin) = "root"
GLOBAL_REAL_VAR(sqlfdbkpass) = ""
GLOBAL_REAL_VAR(sqllogging) = 0 // Should we log deaths, population stats, etc.?

View File

@@ -546,7 +546,7 @@ datum/projectile_data
/proc/getOPressureDifferential(var/turf/loc)
var/minp=16777216;
var/maxp=0;
for(var/dir in cardinal)
for(var/dir in GLOB.cardinal)
var/turf/simulated/T=get_turf(get_step(loc,dir))
var/cp=0
if(T && istype(T) && T.zone)
@@ -567,7 +567,7 @@ datum/projectile_data
/proc/getCardinalAirInfo(var/turf/loc, var/list/stats=list("temperature"))
var/list/temps = new/list(4)
for(var/dir in cardinal)
for(var/dir in GLOB.cardinal)
var/direction
switch(dir)
if(NORTH)

View File

@@ -634,7 +634,6 @@ as a single icon. Useful for when you want to manipulate an icon via the above a
The _flatIcons list is a cache for generated icon files.
*/
// Creates a single icon from a given /atom or /image. Only the first argument is required.
/proc/getFlatIcon(image/A, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE)
// We start with a blank canvas, otherwise some icon procs crash silently
var/icon/flat = icon('icons/effects/effects.dmi', "nothing") // Final flattened icon
@@ -824,6 +823,9 @@ The _flatIcons list is a cache for generated icon files.
else
return icon(flat, "", SOUTH)
/proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N
var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A.
for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it.
@@ -874,10 +876,13 @@ The _flatIcons list is a cache for generated icon files.
if(4) I.pixel_y++
overlays += I//And finally add the overlay.
/proc/getHologramIcon(icon/A, safety=1)//If safety is on, a new icon is not created.
/proc/getHologramIcon(icon/A, safety=1, no_color = FALSE)//If safety is on, a new icon is not created.
var/icon/flat_icon = safety ? A : new(A)//Has to be a new icon to not constantly change the same icon.
//flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. //VOREStation Removal for AI Vore effects
//flat_icon.ChangeOpacity(0.5)//Make it half transparent. //VOREStation Removal for AI Vore effects
/* VOREStation Removal - For AI Vore effects
if(!no_color)
flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish.
flat_icon.ChangeOpacity(0.5)//Make it half transparent.
*/ //VOREStation Removal End
var/icon/alpha_mask = new('icons/effects/effects.dmi', "scanline")//Scanline effect.
flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect.
return flat_icon

View File

@@ -135,6 +135,6 @@ var/round_start_time = 0
. += CEILING(i*DELTA_CALC, 1)
sleep(i*world.tick_lag*DELTA_CALC)
i *= 2
while (TICK_USAGE > min(TICK_LIMIT_TO_RUN, Master.current_ticklimit))
while (TICK_USAGE > min(TICK_LIMIT_TO_RUN, GLOB.CURRENT_TICKLIMIT))
#undef DELTA_CALC

View File

@@ -1057,62 +1057,21 @@ proc/get_mob_with_client_list()
//Quick type checks for some tools
var/global/list/common_tools = list(
/obj/item/stack/cable_coil,
/obj/item/weapon/wrench,
/obj/item/weapon/tool/wrench,
/obj/item/weapon/weldingtool,
/obj/item/weapon/screwdriver,
/obj/item/weapon/wirecutters,
/obj/item/weapon/tool/screwdriver,
/obj/item/weapon/tool/wirecutters,
/obj/item/device/multitool,
/obj/item/weapon/crowbar)
/obj/item/weapon/tool/crowbar)
/proc/istool(O)
if(O && is_type_in_list(O, common_tools))
return 1
return 0
/proc/iswrench(O)
if(istype(O, /obj/item/weapon/wrench))
return 1
return 0
/proc/iswelder(O)
if(istype(O, /obj/item/weapon/weldingtool))
return 1
return 0
/proc/iscoil(O)
if(istype(O, /obj/item/stack/cable_coil))
return 1
return 0
/proc/iswirecutter(O)
if(istype(O, /obj/item/weapon/wirecutters))
return 1
return 0
/proc/isscrewdriver(O)
if(istype(O, /obj/item/weapon/screwdriver))
return 1
return 0
/proc/ismultitool(O)
if(istype(O, /obj/item/device/multitool))
return 1
return 0
/proc/iscrowbar(O)
if(istype(O, /obj/item/weapon/crowbar))
return 1
return 0
/proc/iswire(O)
if(istype(O, /obj/item/stack/cable_coil))
return 1
return 0
/proc/is_wire_tool(obj/item/I)
if(istype(I, /obj/item/device/multitool))
return TRUE
if(istype(I, /obj/item/weapon/wirecutters))
if(istype(I, /obj/item/device/multitool) || I.is_wirecutter())
return TRUE
if(istype(I, /obj/item/device/assembly/signaler))
return TRUE
@@ -1152,24 +1111,30 @@ proc/is_hot(obj/item/W as obj)
//Whether or not the given item counts as sharp in terms of dealing damage
/proc/is_sharp(obj/O as obj)
if (!O) return 0
if (O.sharp) return 1
if (O.edge) return 1
return 0
if(!O)
return FALSE
if(O.sharp)
return TRUE
if(O.edge)
return TRUE
return FALSE
//Whether or not the given item counts as cutting with an edge in terms of removing limbs
/proc/has_edge(obj/O as obj)
if (!O) return 0
if (O.edge) return 1
return 0
if(!O)
return FALSE
if(O.edge)
return TRUE
return FALSE
//Returns 1 if the given item is capable of popping things like balloons, inflatable barriers, or cutting police tape.
/proc/can_puncture(obj/item/W as obj) // For the record, WHAT THE HELL IS THIS METHOD OF DOING IT?
if(!W) return 0
if(W.sharp) return 1
if(!W)
return FALSE
if(W.sharp)
return TRUE
return ( \
W.sharp || \
istype(W, /obj/item/weapon/screwdriver) || \
W.is_screwdriver() || \
istype(W, /obj/item/weapon/pen) || \
istype(W, /obj/item/weapon/weldingtool) || \
istype(W, /obj/item/weapon/flame/lighter/zippo) || \
@@ -1497,7 +1462,5 @@ var/mob/dview/dview_mob = new
var/datum/D = list_or_datum
D.vars[var_name] = var_value
/proc/pass()
return

View File

@@ -65,9 +65,9 @@
#define CanInteract(user, state) (CanUseTopic(user, state) == STATUS_INTERACTIVE)
#define qdel_null_list(x) if(x) { for(var/y in x) { qdel(y) } ; x = null }
#define QDEL_NULL_LIST(x) if(x) { for(var/y in x) { qdel(y) } ; x = null }
#define qdel_null(x) if(x) { qdel(x) ; x = null }
#define QDEL_NULL(x) if(x) { qdel(x) ; x = null }
#define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") }
@@ -92,3 +92,5 @@
#define LAZYCLEARLIST(L) if(L) L.Cut()
// Reads L or an empty list if L is not a list. Note: Does NOT assign, L may be an expression.
#define SANITIZE_LIST(L) ( islist(L) ? L : list() )
// Turns LAZYINITLIST(L) L[K] = V into ... for associated lists
#define LAZYSET(L, K, V) if(!L) { L = list(); } L[K] = V;

View File

@@ -76,7 +76,7 @@
if(A == loc || (A in loc) || (A in contents))
// No adjacency checks
var/resolved = A.attackby(W,src)
var/resolved = A.attackby(W, src, 1)
if(!resolved && A && W)
W.afterattack(A,src,1,params)
return
@@ -88,7 +88,7 @@
if(isturf(A) || isturf(A.loc))
if(A.Adjacent(src)) // see adjacent.dm
var/resolved = A.attackby(W, src)
var/resolved = A.attackby(W, src, 1)
if(!resolved && A && W)
W.afterattack(A, src, 1, params)
return

View File

@@ -31,7 +31,7 @@
if(owner)
Remove(owner)
target = null
qdel_null(button)
QDEL_NULL(button)
return ..()
/datum/action/proc/Grant(mob/living/T)
@@ -48,7 +48,7 @@
if(button)
if(T.client)
T.client.screen -= button
qdel_null(button)
QDEL_NULL(button)
T.actions.Remove(src)
T.update_action_buttons()
owner = null

View File

@@ -15,7 +15,7 @@ var/list/global_huds = list(
global_hud.meson,
global_hud.science,
global_hud.material,
global_hud.holomap // VOREStation Edit - Holomap
global_hud.holomap
)
/datum/hud/var/obj/screen/grab_intent
@@ -36,7 +36,7 @@ var/list/global_huds = list(
var/obj/screen/meson
var/obj/screen/science
var/obj/screen/material
var/obj/screen/holomap // VOREStation Edit - Holomap
var/obj/screen/holomap
/datum/global_hud/proc/setup_overlay(var/icon_state)
var/obj/screen/screen = new /obj/screen()
@@ -92,7 +92,6 @@ var/list/global_huds = list(
science = setup_overlay("science_hud")
material = setup_overlay("material_hud")
// VOREStation Edit Begin - Holomap
// The holomap screen object is actually totally invisible.
// Station maps work by setting it as an images location before sending to client, not
// actually changing the icon or icon state of the screen object itself!
@@ -104,7 +103,6 @@ var/list/global_huds = list(
holomap.icon = null
holomap.screen_loc = ui_holomap
holomap.mouse_opacity = 0
// VOREStation Edit End
var/obj/screen/O
var/i

View File

@@ -28,26 +28,29 @@ avoid code duplication. This includes items that may sometimes act as a standard
return
//I would prefer to rename this to attack(), but that would involve touching hundreds of files.
/obj/item/proc/resolve_attackby(atom/A, mob/user)
/obj/item/proc/resolve_attackby(atom/A, mob/user, var/attack_modifier = 1)
pre_attack(A, user)
add_fingerprint(user)
return A.attackby(src, user)
return A.attackby(src, user, attack_modifier)
// No comment
/atom/proc/attackby(obj/item/W, mob/user)
/atom/proc/attackby(obj/item/W, mob/user, var/attack_modifier)
return
/atom/movable/attackby(obj/item/W, mob/user)
/atom/movable/attackby(obj/item/W, mob/user, var/attack_modifier)
if(!(W.flags & NOBLUDGEON))
visible_message("<span class='danger'>[src] has been hit by [user] with [W].</span>")
/mob/living/attackby(obj/item/I, mob/user)
/mob/living/attackby(obj/item/I, mob/user, var/attack_modifier)
if(!ismob(user))
return 0
if(can_operate(src) && I.do_surgery(src,user)) //Surgery
if(can_operate(src) && I.do_surgery(src,user))
if(I.can_do_surgery(src,user))
return 1
if(attempt_vr(src,"vore_attackby",args)) return //VOREStation Code
return I.attack(src, user, user.zone_sel.selecting)
else
return 0
if(attempt_vr(src,"vore_attackby",args)) return //VOREStation Add - The vore, of course.
return I.attack(src, user, user.zone_sel.selecting, attack_modifier)
// Used to get how fast a mob should attack, and influences click delay.
// This is just for inheritence.
@@ -71,7 +74,7 @@ avoid code duplication. This includes items that may sometimes act as a standard
return
//I would prefer to rename this attack_as_weapon(), but that would involve touching hundreds of files.
/obj/item/proc/attack(mob/living/M, mob/living/user, var/target_zone)
/obj/item/proc/attack(mob/living/M, mob/living/user, var/target_zone, var/attack_modifier)
if(!force || (flags & NOBLUDGEON))
return 0
if(M == user && user.a_intent != I_HURT)
@@ -90,12 +93,12 @@ avoid code duplication. This includes items that may sometimes act as a standard
var/hit_zone = M.resolve_item_attack(src, user, target_zone)
if(hit_zone)
apply_hit_effect(M, user, hit_zone)
apply_hit_effect(M, user, hit_zone, attack_modifier)
return 1
//Called when a weapon is used to make a successful melee attack on a mob. Returns the blocked result
/obj/item/proc/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
/obj/item/proc/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone, var/attack_modifier)
user.break_cloak()
if(hitsound)
playsound(loc, hitsound, 50, 1, -1)
@@ -104,7 +107,10 @@ avoid code duplication. This includes items that may sometimes act as a standard
for(var/datum/modifier/M in user.modifiers)
if(!isnull(M.outgoing_melee_damage_percent))
power *= M.outgoing_melee_damage_percent
if(HULK in user.mutations)
power *= 2
return target.hit_with_weapon(src, user, power, hit_zone)
power *= attack_modifier
return target.hit_with_weapon(src, user, power, hit_zone)

View File

@@ -154,7 +154,7 @@ var/const/tk_maxrange = 15
O.anchored = 1
O.density = 0
O.layer = FLY_LAYER
O.set_dir(pick(cardinal))
O.set_dir(pick(GLOB.cardinal))
O.icon = 'icons/effects/effects.dmi'
O.icon_state = "nothing"
flick("empdisable",O)

View File

@@ -4,10 +4,10 @@
/datum/controller/process/nanoui/statProcess()
..()
stat(null, "[nanomanager.processing_uis.len] UIs")
stat(null, "[GLOB.nanomanager.processing_uis.len] UIs")
/datum/controller/process/nanoui/doWork()
for(last_object in nanomanager.processing_uis)
for(last_object in GLOB.nanomanager.processing_uis)
var/datum/nanoui/NUI = last_object
if(istype(NUI) && !QDELETED(NUI))
try
@@ -16,4 +16,4 @@
catchException(e, NUI)
else
catchBadType(NUI)
nanomanager.processing_uis -= NUI
GLOB.nanomanager.processing_uis -= NUI

View File

@@ -8,15 +8,22 @@
//Computers are in /code/game/machinery/computer/supply.dm
/datum/supply_order
var/ordernum
var/datum/supply_packs/object = null
var/orderedby = null
var/comment = null
var/ordernum // Unfabricatable index
var/index // Fabricatable index
var/datum/supply_pack/object = null
var/cost // Cost of the supply pack (Fabricatable) (Changes not reflected when purchasing supply packs, this is cosmetic only)
var/name // Name of the supply pack datum (Fabricatable)
var/ordered_by = null // Who requested the order
var/comment = null // What reason was given for the order
var/approved_by = null // Who approved the order
var/ordered_at // Date and time the order was requested at
var/approved_at // Date and time the order was approved at
var/status // [Requested, Accepted, Denied, Shipped]
/datum/exported_crate
var/name
var/value
var/list/contents
var/datum/controller/supply/supply_controller = new()
@@ -25,25 +32,29 @@ var/datum/controller/supply/supply_controller = new()
var/points = 50
var/points_per_process = 1.5
var/points_per_slip = 2
var/points_per_platinum = 5 // 5 points per sheet
var/points_per_phoron = 5
var/points_per_money = 0.02 // 1 point for $50
//control
var/ordernum
var/list/shoppinglist = list()
var/list/requestlist = list()
var/list/supply_packs = list()
var/list/exported_crates = list()
var/list/shoppinglist = list() // Approved orders
var/list/supply_pack = list() // All supply packs
var/list/exported_crates = list() // Crates sent from the station
var/list/order_history = list() // History of orders, showing edits made by users
var/list/adm_order_history = list() // Complete history of all orders, for admin use
var/list/adm_export_history = list() // Complete history of all crates sent back on the shuttle, for admin use
//shuttle movement
var/movetime = 1200
var/datum/shuttle/ferry/supply/shuttle
var/list/material_points_conversion = list( // Any materials not named in this list are worth 0 points
"phoron" = 5,
"platinum" = 5
)
/datum/controller/supply/New()
ordernum = rand(1,9000)
for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs))
var/datum/supply_packs/P = new typepath()
supply_packs[P.name] = P
for(var/typepath in subtypesof(/datum/supply_pack))
var/datum/supply_pack/P = new typepath()
supply_pack[P.name] = P
/datum/controller/process/supply/setup()
name = "supply controller"
@@ -80,23 +91,17 @@ var/datum/controller/supply/supply_controller = new()
callHook("sell_shuttle", list(area_shuttle));
var/phoron_count = 0
var/plat_count = 0
var/money_count = 0
exported_crates = list()
for(var/atom/movable/MA in area_shuttle)
if(MA.anchored)
continue
var/datum/exported_crate/EC = new /datum/exported_crate()
EC.name = "\proper[MA.name]"
EC.value = 0
EC.contents = list()
// Must be in a crate!
if(istype(MA,/obj/structure/closet/crate))
var/oldpoints = points
var/oldphoron = phoron_count
var/oldplatinum = plat_count
var/oldmoney = money_count
var/obj/structure/closet/crate/CR = MA
callHook("sell_crate", list(CR, area_shuttle))
@@ -104,44 +109,63 @@ var/datum/controller/supply/supply_controller = new()
var/find_slip = 1
for(var/atom/A in CR)
EC.contents[++EC.contents.len] = list(
"object" = "\proper[A.name]",
"value" = 0,
"quantity" = 1
)
// Sell manifests
if(find_slip && istype(A,/obj/item/weapon/paper/manifest))
var/obj/item/weapon/paper/manifest/slip = A
if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense
points += points_per_slip
EC.contents[EC.contents.len]["value"] = points_per_slip
find_slip = 0
continue
// Sell phoron and platinum
if(istype(A, /obj/item/stack))
var/obj/item/stack/P = A
switch(P.get_material_name())
if("phoron")
phoron_count += P.get_amount()
if("platinum")
plat_count += P.get_amount()
if(material_points_conversion[P.get_material_name()])
EC.contents[EC.contents.len]["value"] = P.get_amount() * material_points_conversion[P.get_material_name()]
EC.contents[EC.contents.len]["quantity"] = P.get_amount()
EC.value += EC.contents[EC.contents.len]["value"]
//Sell spacebucks
if(istype(A, /obj/item/weapon/spacecash))
var/obj/item/weapon/spacecash/cashmoney = A
money_count += cashmoney.worth
EC.contents[EC.contents.len]["value"] = cashmoney.worth * points_per_money
EC.contents[EC.contents.len]["quantity"] = cashmoney.worth
EC.value += EC.contents[EC.contents.len]["value"]
// Make a log of it, but it wasn't shipped properly, and so isn't worth anything
else
EC.contents = list(
"error" = "Error: Product was improperly packaged. Payment rendered null under terms of agreement."
)
var/datum/exported_crate/EC = new /datum/exported_crate()
EC.name = CR.name
EC.value = points - oldpoints
EC.value += (phoron_count - oldphoron) * points_per_phoron
EC.value += (plat_count - oldplatinum) * points_per_platinum
EC.value += (money_count - oldmoney) * points_per_money
exported_crates += EC
points += EC.value
// Duplicate the receipt for the admin-side log
var/datum/exported_crate/adm = new()
adm.name = EC.name
adm.value = EC.value
adm.contents = deepCopyList(EC.contents)
adm_export_history += adm
qdel(MA)
points += phoron_count * points_per_phoron
points += plat_count * points_per_platinum
points += money_count * points_per_money
//Buying
/datum/controller/supply/proc/buy()
var/list/shoppinglist = list()
for(var/datum/supply_order/SO in order_history)
if(SO.status == SUP_ORDER_APPROVED)
shoppinglist += SO
if(!shoppinglist.len)
return
@@ -165,17 +189,16 @@ var/datum/controller/supply/supply_controller = new()
continue
clear_turfs += T
for(var/S in shoppinglist)
for(var/datum/supply_order/SO in shoppinglist)
if(!clear_turfs.len)
break
var/i = rand(1,clear_turfs.len)
var/turf/pickedloc = clear_turfs[i]
clear_turfs.Cut(i,i+1)
shoppinglist -= S
var/datum/supply_order/SO = S
var/datum/supply_packs/SP = SO.object
SO.status = SUP_ORDER_SHIPPED
var/datum/supply_pack/SP = SO.object
var/obj/A = new SP.containertype(pickedloc)
A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]"
@@ -202,8 +225,8 @@ var/datum/controller/supply/supply_controller = new()
log_debug("<span class='danger'>Supply pack with invalid access restriction [SP.access] encountered!</span>")
var/list/contains
if(istype(SP,/datum/supply_packs/randomised))
var/datum/supply_packs/randomised/SPR = SP
if(istype(SP,/datum/supply_pack/randomised))
var/datum/supply_pack/randomised/SPR = SP
contains = list()
if(SPR.contains.len)
for(var/j=1,j<=SPR.num_contained,j++)
@@ -227,3 +250,141 @@ var/datum/controller/supply/supply_controller = new()
slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS<hr>"
return
// Will attempt to purchase the specified order, returning TRUE on success, FALSE on failure
/datum/controller/supply/proc/approve_order(var/datum/supply_order/O, var/mob/user)
// Not enough points to purchase the crate
if(supply_controller.points <= O.object.cost)
return FALSE
// Based on the current model, there shouldn't be any entries in order_history, requestlist, or shoppinglist, that aren't matched in adm_order_history
var/datum/supply_order/adm_order
for(var/datum/supply_order/temp in adm_order_history)
if(temp.ordernum == O.ordernum)
adm_order = temp
break
var/idname = "*None Provided*"
if(ishuman(user))
var/mob/living/carbon/human/H = user
idname = H.get_authentification_name()
else if(issilicon(user))
idname = user.real_name
// Update order status
O.status = SUP_ORDER_APPROVED
O.approved_by = idname
O.approved_at = stationdate2text() + " - " + stationtime2text()
// Update admin-side mirror
adm_order.status = SUP_ORDER_APPROVED
adm_order.approved_by = idname
adm_order.approved_at = stationdate2text() + " - " + stationtime2text()
// Deduct cost
supply_controller.points -= O.object.cost
return TRUE
// Will deny the specified order. Only useful if the order is currently requested, but available at any status
/datum/controller/supply/proc/deny_order(var/datum/supply_order/O, var/mob/user)
// Based on the current model, there shouldn't be any entries in order_history, requestlist, or shoppinglist, that aren't matched in adm_order_history
var/datum/supply_order/adm_order
for(var/datum/supply_order/temp in adm_order_history)
if(temp.ordernum == O.ordernum)
adm_order = temp
break
var/idname = "*None Provided*"
if(ishuman(user))
var/mob/living/carbon/human/H = user
idname = H.get_authentification_name()
else if(issilicon(user))
idname = user.real_name
// Update order status
O.status = SUP_ORDER_DENIED
O.approved_by = idname
O.approved_at = stationdate2text() + " - " + stationtime2text()
// Update admin-side mirror
adm_order.status = SUP_ORDER_DENIED
adm_order.approved_by = idname
adm_order.approved_at = stationdate2text() + " - " + stationtime2text()
return
// Will deny all requested orders
/datum/controller/supply/proc/deny_all_pending(var/mob/user)
for(var/datum/supply_order/O in order_history)
if(O.status == SUP_ORDER_REQUESTED)
deny_order(O, user)
// Will delete the specified order from the user-side list
/datum/controller/supply/proc/delete_order(var/datum/supply_order/O, var/mob/user)
// Making sure they know what they're doing
if(alert(user, "Are you sure you want to delete this record? If it has been approved, cargo points will NOT be refunded!", "Delete Record","No","Yes") == "Yes")
if(alert(user, "Are you really sure? There is no way to recover the order once deleted.", "Delete Record", "No", "Yes") == "Yes")
log_admin("[key_name(user)] has deleted supply order \ref[O] [O] from the user-side order history.")
supply_controller.order_history -= O
return
// Will generate a new, requested order, for the given supply pack type
/datum/controller/supply/proc/create_order(var/datum/supply_pack/S, var/mob/user, var/reason)
var/datum/supply_order/new_order = new()
var/datum/supply_order/adm_order = new() // Admin-recorded order must be a separate copy in memory, or user-made edits will corrupt it
var/idname = "*None Provided*"
if(ishuman(user))
var/mob/living/carbon/human/H = user
idname = H.get_authentification_name()
else if(issilicon(user))
idname = user.real_name
new_order.ordernum = ++ordernum // Ordernum is used to track the order between the playerside list of orders and the adminside list
new_order.index = new_order.ordernum // Index can be fabricated, or falsified. Ordernum is a permanent marker used to track the order
new_order.object = S
new_order.name = S.name
new_order.cost = S.cost
new_order.ordered_by = idname
new_order.comment = reason
new_order.ordered_at = stationdate2text() + " - " + stationtime2text()
new_order.status = SUP_ORDER_REQUESTED
adm_order.ordernum = new_order.ordernum
adm_order.index = new_order.index
adm_order.object = new_order.object
adm_order.name = new_order.name
adm_order.cost = new_order.cost
adm_order.ordered_by = new_order.ordered_by
adm_order.comment = new_order.comment
adm_order.ordered_at = new_order.ordered_at
adm_order.status = new_order.status
order_history += new_order
adm_order_history += adm_order
// Will delete the specified export receipt from the user-side list
/datum/controller/supply/proc/delete_export(var/datum/exported_crate/E, var/mob/user)
// Making sure they know what they're doing
if(alert(user, "Are you sure you want to delete this record?", "Delete Record","No","Yes") == "Yes")
if(alert(user, "Are you really sure? There is no way to recover the receipt once deleted.", "Delete Record", "No", "Yes") == "Yes")
log_admin("[key_name(user)] has deleted export receipt \ref[E] [E] from the user-side export history.")
supply_controller.exported_crates -= E
return
// Will add an item entry to the specified export receipt on the user-side list
/datum/controller/supply/proc/add_export_item(var/datum/exported_crate/E, var/mob/user)
var/new_name = input(user, "Name", "Please enter the name of the item.") as null|text
if(!new_name)
return
var/new_quantity = input(user, "Name", "Please enter the quantity of the item.") as null|num
if(!new_quantity)
return
var/new_value = input(user, "Name", "Please enter the value of the item.") as null|num
if(!new_value)
return
E.contents[++E.contents.len] = list(
"object" = new_name,
"quantity" = new_quantity,
"value" = new_value
)

View File

@@ -14,14 +14,13 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars)
var/datum/controller/exclude_these = new
gvars_datum_in_built_vars = exclude_these.vars + list("gvars_datum_protected_varlist", "gvars_datum_in_built_vars", "gvars_datum_init_order")
qdel(exclude_these)
log_world("[vars.len - gvars_datum_in_built_vars.len] global variables")
Initialize()
Initialize(exclude_these)
/datum/controller/global_vars/Destroy(force)
stack_trace("Some fucker qdel'd the global holder!")
crash_with("There was an attempt to qdel the global vars holder!")
if(!force)
return QDEL_HINT_LETMELIVE
@@ -39,31 +38,22 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars)
stat("Globals:", statclick.update("Edit"))
/datum/controller/global_vars/can_vv_get(var_name)
if(gvars_datum_protected_varlist[var_name])
return FALSE
return ..()
/datum/controller/global_vars/VV_hidden()
return ..() + gvars_datum_protected_varlist
/datum/controller/global_vars/vv_edit_var(var_name, var_value)
if(gvars_datum_protected_varlist[var_name])
return FALSE
return ..()
/datum/controller/global_vars/Initialize()
/datum/controller/global_vars/Initialize(var/exclude_these)
gvars_datum_init_order = list()
gvars_datum_protected_varlist = list("gvars_datum_protected_varlist" = TRUE)
var/list/global_procs = typesof(/datum/controller/global_vars/proc)
var/expected_len = vars.len - gvars_datum_in_built_vars.len
if(global_procs.len != expected_len)
warning("Unable to detect all global initialization procs! Expected [expected_len] got [global_procs.len]!")
if(global_procs.len)
var/list/expected_global_procs = vars - gvars_datum_in_built_vars
for(var/I in global_procs)
expected_global_procs -= replacetext("[I]", "InitGlobal", "")
//log_world("Missing procs: [expected_global_procs.Join(", ")]")
for(var/I in global_procs)
gvars_datum_protected_varlist = list("gvars_datum_protected_varlist")
//See https://github.com/tgstation/tgstation/issues/26954
for(var/I in typesof(/datum/controller/global_vars/proc))
var/CLEANBOT_RETURNS = "[I]"
pass(CLEANBOT_RETURNS)
for(var/I in (vars - gvars_datum_in_built_vars))
var/start_tick = world.time
call(src, I)()
call(src, "InitGlobal[I]")()
var/end_tick = world.time
if(end_tick - start_tick)
warning("Global [replacetext("[I]", "InitGlobal", "")] slept during initialization!")
warning("Global [I] slept during initialization!")
QDEL_NULL(exclude_these)

View File

@@ -6,7 +6,21 @@
* Odds are, there is a reason
*
**/
var/datum/controller/master/Master = new()
//This is the ABSOLUTE ONLY THING that should init globally like this
GLOBAL_REAL(Master, /datum/controller/master) = new
//THIS IS THE INIT ORDER
//Master -> SSPreInit -> GLOB -> world -> config -> SSInit -> Failsafe
//GOT IT MEMORIZED?
GLOBAL_VAR_INIT(MC_restart_clear, 0)
GLOBAL_VAR_INIT(MC_restart_timeout, 0)
GLOBAL_VAR_INIT(MC_restart_count, 0)
//current tick limit, assigned by the queue controller before running a subsystem.
//used by check_tick as well so that the procs subsystems call can obey that SS's tick limits
GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING)
/datum/controller/master
name = "Master"
@@ -48,10 +62,6 @@ var/datum/controller/master/Master = new()
var/static/restart_timeout = 0
var/static/restart_count = 0
//current tick limit, assigned before running a subsystem.
//used by CHECK_TICK as well so that the procs subsystems call can obey that SS's tick limits
var/static/current_ticklimit = TICK_LIMIT_RUNNING
/datum/controller/master/New()
// Highlander-style: there can only be one! Kill off the old and replace it with the new.
var/list/_subsystems = list()
@@ -67,6 +77,9 @@ var/datum/controller/master/Master = new()
_subsystems += new I
Master = src
if(!GLOB)
new /datum/controller/global_vars
/datum/controller/master/Destroy()
..()
// Tell qdel() to Del() this object.
@@ -85,14 +98,14 @@ var/datum/controller/master/Master = new()
// -1 if we encountered a runtime trying to recreate it
/proc/Recreate_MC()
. = -1 //so if we runtime, things know we failed
if (world.time < Master.restart_timeout)
if (world.time < GLOB.MC_restart_timeout)
return 0
if (world.time < Master.restart_clear)
Master.restart_count *= 0.5
if (world.time < GLOB.MC_restart_clear)
GLOB.MC_restart_count *= 0.5
var/delay = 50 * ++Master.restart_count
Master.restart_timeout = world.time + delay
Master.restart_clear = world.time + (delay * 2)
var/delay = 50 * ++GLOB.MC_restart_count
GLOB.MC_restart_timeout = world.time + delay
GLOB.MC_restart_clear = world.time + (delay * 2)
Master.processing = FALSE //stop ticking this one
try
new/datum/controller/master()
@@ -136,6 +149,7 @@ var/datum/controller/master/Master = new()
if (istype(Master.subsystems))
if(FireHim)
Master.subsystems += new BadBoy.type //NEW_SS_GLOBAL will remove the old one
subsystems = Master.subsystems
current_runlevel = Master.current_runlevel
StartProcessing(10)
@@ -162,13 +176,13 @@ var/datum/controller/master/Master = new()
var/start_timeofday = REALTIMEOFDAY
// Initialize subsystems.
current_ticklimit = config.tick_limit_mc_init
GLOB.CURRENT_TICKLIMIT = config.tick_limit_mc_init
for (var/datum/controller/subsystem/SS in subsystems)
if (SS.flags & SS_NO_INIT)
continue
SS.Initialize(REALTIMEOFDAY)
CHECK_TICK
current_ticklimit = TICK_LIMIT_RUNNING
GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
var/time = (REALTIMEOFDAY - start_timeofday) / 10
var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!"
@@ -279,7 +293,7 @@ var/datum/controller/master/Master = new()
tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, (((REALTIMEOFDAY - init_timeofday) - (world.time - init_time)) / world.tick_lag)))
var/starting_tick_usage = TICK_USAGE
if (processing <= 0)
current_ticklimit = TICK_LIMIT_RUNNING
GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
sleep(10)
continue
@@ -288,7 +302,7 @@ var/datum/controller/master/Master = new()
// (because sleeps are processed in the order received, longer sleeps are more likely to run first)
if (starting_tick_usage > TICK_LIMIT_MC) //if there isn't enough time to bother doing anything this tick, sleep a bit.
sleep_delta *= 2
current_ticklimit = TICK_LIMIT_RUNNING * 0.5
GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING * 0.5
sleep(world.tick_lag * (processing * sleep_delta))
continue
@@ -334,7 +348,7 @@ var/datum/controller/master/Master = new()
if (!error_level)
iteration++
error_level++
current_ticklimit = TICK_LIMIT_RUNNING
GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
sleep(10)
continue
@@ -346,7 +360,7 @@ var/datum/controller/master/Master = new()
if (!error_level)
iteration++
error_level++
current_ticklimit = TICK_LIMIT_RUNNING
GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
sleep(10)
continue
error_level--
@@ -357,9 +371,9 @@ var/datum/controller/master/Master = new()
iteration++
last_run = world.time
src.sleep_delta = MC_AVERAGE_FAST(src.sleep_delta, sleep_delta)
current_ticklimit = TICK_LIMIT_RUNNING
GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
if (processing * sleep_delta <= world.tick_lag)
current_ticklimit -= (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc if we plan on running next tick
GLOB.CURRENT_TICKLIMIT -= (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc if we plan on running next tick
sleep(world.tick_lag * (processing * sleep_delta))
@@ -451,7 +465,7 @@ var/datum/controller/master/Master = new()
// Reduce tick allocation for subsystems that overran on their last tick.
tick_precentage = max(tick_precentage*0.5, tick_precentage-queue_node.tick_overrun)
current_ticklimit = round(TICK_USAGE + tick_precentage)
GLOB.CURRENT_TICKLIMIT = round(TICK_USAGE + tick_precentage)
if (!(queue_node_flags & SS_TICKER))
ran_non_ticker = TRUE

View File

@@ -0,0 +1,96 @@
//
// This is for custom circuits, mostly the initialization of global properties about them.
// Might make this also process them in the future if its better to do that than using the obj ticker.
//
SUBSYSTEM_DEF(circuit)
name = "Circuit"
init_order = INIT_ORDER_CIRCUIT
flags = SS_NO_FIRE
var/list/all_components = list() // Associative list of [component_name]:[component_path] pairs
var/list/cached_components = list() // Associative list of [component_path]:[component] pairs
var/list/all_assemblies = list() // Associative list of [assembly_name]:[assembly_path] pairs
var/list/cached_assemblies = list() // Associative list of [assembly_path]:[assembly] pairs
var/list/all_circuits = list() // Associative list of [circuit_name]:[circuit_path] pairs
var/list/circuit_fabricator_recipe_list = list() // Associative list of [category_name]:[list_of_circuit_paths] pairs
// var/cost_multiplier = MINERAL_MATERIAL_AMOUNT / 10 // Each circuit cost unit is 200cm3
/datum/controller/subsystem/circuit/Recover()
flags |= SS_NO_INIT // Make extra sure we don't initialize twice.
/datum/controller/subsystem/circuit/Initialize(timeofday)
circuits_init()
return ..()
/datum/controller/subsystem/circuit/proc/circuits_init()
//Cached lists for free performance
for(var/path in typesof(/obj/item/integrated_circuit))
var/obj/item/integrated_circuit/IC = path
var/name = initial(IC.name)
all_components[name] = path // Populating the component lists
cached_components[IC] = new path
if(!(initial(IC.spawn_flags) & (IC_SPAWN_DEFAULT | IC_SPAWN_RESEARCH)))
continue
var/category = initial(IC.category_text)
if(!circuit_fabricator_recipe_list[category])
circuit_fabricator_recipe_list[category] = list()
var/list/category_list = circuit_fabricator_recipe_list[category]
category_list += IC // Populating the fabricator categories
for(var/path in typesof(/obj/item/device/electronic_assembly))
var/obj/item/device/electronic_assembly/A = path
var/name = initial(A.name)
all_assemblies[name] = path
cached_assemblies[A] = new path
circuit_fabricator_recipe_list["Assemblies"] = list(
/obj/item/device/electronic_assembly/default,
/obj/item/device/electronic_assembly/calc,
/obj/item/device/electronic_assembly/clam,
/obj/item/device/electronic_assembly/simple,
/obj/item/device/electronic_assembly/hook,
/obj/item/device/electronic_assembly/pda,
/obj/item/device/electronic_assembly/tiny/default,
/obj/item/device/electronic_assembly/tiny/cylinder,
/obj/item/device/electronic_assembly/tiny/scanner,
/obj/item/device/electronic_assembly/tiny/hook,
/obj/item/device/electronic_assembly/tiny/box,
/obj/item/device/electronic_assembly/medium/default,
/obj/item/device/electronic_assembly/medium/box,
/obj/item/device/electronic_assembly/medium/clam,
/obj/item/device/electronic_assembly/medium/medical,
/obj/item/device/electronic_assembly/medium/gun,
/obj/item/device/electronic_assembly/medium/radio,
/obj/item/device/electronic_assembly/large/default,
/obj/item/device/electronic_assembly/large/scope,
/obj/item/device/electronic_assembly/large/terminal,
/obj/item/device/electronic_assembly/large/arm,
/obj/item/device/electronic_assembly/large/tall,
/obj/item/device/electronic_assembly/large/industrial,
/obj/item/device/electronic_assembly/drone/default,
/obj/item/device/electronic_assembly/drone/arms,
/obj/item/device/electronic_assembly/drone/secbot,
/obj/item/device/electronic_assembly/drone/medbot,
/obj/item/device/electronic_assembly/drone/genbot,
/obj/item/device/electronic_assembly/drone/android,
/obj/item/device/electronic_assembly/wallmount/tiny,
/obj/item/device/electronic_assembly/wallmount/light,
/obj/item/device/electronic_assembly/wallmount,
/obj/item/device/electronic_assembly/wallmount/heavy,
/obj/item/weapon/implant/integrated_circuit,
/obj/item/clothing/under/circuitry,
/obj/item/clothing/gloves/circuitry,
/obj/item/clothing/glasses/circuitry,
/obj/item/clothing/shoes/circuitry,
/obj/item/clothing/head/circuitry,
/obj/item/clothing/ears/circuitry,
/obj/item/clothing/suit/circuitry
)
circuit_fabricator_recipe_list["Tools"] = list(
/obj/item/device/integrated_electronics/wirer,
/obj/item/device/integrated_electronics/debugger,
/obj/item/device/integrated_electronics/detailer
)

View File

@@ -57,6 +57,7 @@ SUBSYSTEM_DEF(planets)
else
P.planet_walls -= T
T.vis_contents -= P.weather_holder.visuals
T.vis_contents -= P.weather_holder.special_visuals
/datum/controller/subsystem/planets/proc/allocateTurfs(var/initial = FALSE)
var/list/currentlist = new_outdoor_turfs
@@ -67,6 +68,7 @@ SUBSYSTEM_DEF(planets)
var/datum/planet/P = z_to_planet[OT.z]
P.planet_floors |= OT
OT.vis_contents |= P.weather_holder.visuals
OT.vis_contents |= P.weather_holder.special_visuals
if(!initial && MC_TICK_CHECK)
return
@@ -85,6 +87,7 @@ SUBSYSTEM_DEF(planets)
var/datum/planet/P = z_to_planet[T.z]
P.planet_floors -= T
T.vis_contents -= P.weather_holder.visuals
T.vis_contents -= P.weather_holder.special_visuals
/datum/controller/subsystem/planets/fire(resumed = 0)

View File

@@ -125,7 +125,7 @@
debug_variables(alarm_manager)
feedback_add_details("admin_verb", "DAlarm")
if("Nano")
debug_variables(nanomanager)
debug_variables(GLOB.nanomanager)
feedback_add_details("admin_verb", "DNano")
if("Chemistry")
debug_variables(chemistryProcess)

View File

@@ -1,6 +1,6 @@
/datum/category_item/autolathe/tools/crowbar
name = "crowbar"
path =/obj/item/weapon/crowbar
path =/obj/item/weapon/tool/crowbar
/datum/category_item/autolathe/tools/multitool
name = "multitool"
@@ -21,15 +21,15 @@
/datum/category_item/autolathe/tools/screwdriver
name = "screwdriver"
path =/obj/item/weapon/screwdriver
path =/obj/item/weapon/tool/screwdriver
/datum/category_item/autolathe/tools/wirecutters
name = "wirecutters"
path =/obj/item/weapon/wirecutters
path =/obj/item/weapon/tool/wirecutters
/datum/category_item/autolathe/tools/wrench
name = "wrench"
path =/obj/item/weapon/wrench
path =/obj/item/weapon/tool/wrench
/datum/category_item/autolathe/tools/hatchet
name = "hatchet"

View File

@@ -20,5 +20,5 @@
/datum/proc/Destroy(force=FALSE)
weakref = null // Clear this reference to ensure it's kept for as brief duration as possible.
tag = null
nanomanager.close_uis(src)
GLOB.nanomanager.close_uis(src)
return QDEL_HINT_QUEUE

View File

@@ -1,13 +1,15 @@
#define FORWARD -1
#define BACKWARD 1
// As of August 4th, 2018, these datums are only used in Mech construction.
/datum/construction
var/list/steps
var/atom/holder
var/result
var/list/steps_desc
New(atom)
/datum/construction/New(atom)
..()
holder = atom
if(!holder) //don't want this without a holder
@@ -16,7 +18,7 @@
set_desc(steps.len)
return
proc/next_step()
/datum/construction/proc/next_step()
steps.len--
if(!steps.len)
spawn_result()
@@ -24,31 +26,45 @@
set_desc(steps.len)
return
proc/action(atom/used_atom,mob/user as mob)
/datum/construction/proc/action(var/obj/item/I,mob/user as mob)
return
proc/check_step(atom/used_atom,mob/user as mob) //check last step only
var/valid_step = is_right_key(used_atom)
/datum/construction/proc/check_step(var/obj/item/I,mob/user as mob) //check last step only
var/valid_step = is_right_key(I)
if(valid_step)
if(custom_action(valid_step, used_atom, user))
if(custom_action(valid_step, I, user))
next_step()
return 1
return 0
proc/is_right_key(atom/used_atom) // returns current step num if used_atom is of the right type.
/datum/construction/proc/is_right_key(var/obj/item/I) // returns current step num if I is of the right type.
var/list/L = steps[steps.len]
if(istype(used_atom, L["key"]))
switch(L["key"])
if(IS_SCREWDRIVER)
if(I.is_screwdriver())
return steps.len
if(IS_CROWBAR)
if(I.is_crowbar())
return steps.len
if(IS_WIRECUTTER)
if(I.is_wirecutter())
return steps.len
if(IS_WRENCH)
if(I.is_wrench())
return steps.len
if(istype(I, L["key"]))
return steps.len
return 0
proc/custom_action(step, used_atom, user)
/datum/construction/proc/custom_action(step, I, user)
return 1
proc/check_all_steps(atom/used_atom,mob/user as mob) //check all steps, remove matching one.
/datum/construction/proc/check_all_steps(var/obj/item/I,mob/user as mob) //check all steps, remove matching one.
for(var/i=1;i<=steps.len;i++)
var/list/L = steps[i];
if(istype(used_atom, L["key"]))
if(custom_action(i, used_atom, user))
if(istype(I, L["key"]))
if(custom_action(i, I, user))
steps[i]=null;//stupid byond list from list removal...
listclearnulls(steps);
if(!steps.len)
@@ -57,27 +73,29 @@
return 0
proc/spawn_result()
/datum/construction/proc/spawn_result()
if(result)
new result(get_turf(holder))
spawn()
qdel(holder)
return
proc/set_desc(index as num)
/datum/construction/proc/set_desc(index as num)
var/list/step = steps[index]
holder.desc = step["desc"]
return
// Reversible
/datum/construction/reversible
var/index
New(atom)
/datum/construction/reversible/New(atom)
..()
index = steps.len
return
proc/update_index(diff as num)
/datum/construction/reversible/proc/update_index(diff as num)
index+=diff
if(index==0)
spawn_result()
@@ -85,21 +103,50 @@
set_desc(index)
return
is_right_key(atom/used_atom) // returns index step
/datum/construction/reversible/is_right_key(var/obj/item/I) // returns index step
var/list/L = steps[index]
if(istype(used_atom, L["key"]))
switch(L["key"])
if(IS_SCREWDRIVER)
if(I.is_screwdriver())
return FORWARD
if(IS_CROWBAR)
if(I.is_crowbar())
return FORWARD
if(IS_WIRECUTTER)
if(I.is_wirecutter())
return FORWARD
if(IS_WRENCH)
if(I.is_wrench())
return FORWARD
switch(L["backkey"])
if(IS_SCREWDRIVER)
if(I.is_screwdriver())
return BACKWARD
if(IS_CROWBAR)
if(I.is_crowbar())
return BACKWARD
if(IS_WIRECUTTER)
if(I.is_wirecutter())
return BACKWARD
if(IS_WRENCH)
if(I.is_wrench())
return BACKWARD
if(istype(I, L["key"]))
return FORWARD //to the first step -> forward
else if(L["backkey"] && istype(used_atom, L["backkey"]))
else if(L["backkey"] && istype(I, L["backkey"]))
return BACKWARD //to the last step -> backwards
return 0
check_step(atom/used_atom,mob/user as mob)
var/diff = is_right_key(used_atom)
/datum/construction/reversible/check_step(var/obj/item/I,mob/user as mob)
var/diff = is_right_key(I)
if(diff)
if(custom_action(index, diff, used_atom, user))
if(custom_action(index, diff, I, user))
update_index(diff)
return 1
return 0
custom_action(index, diff, used_atom, user)
/datum/construction/reversible/custom_action(index, diff, I, user)
return 1

View File

@@ -85,7 +85,7 @@
current.verbs -= /datum/changeling/proc/EvolutionMenu
current.mind = null
nanomanager.user_transferred(current, new_character) // transfer active NanoUI instances to new user
GLOB.nanomanager.user_transferred(current, new_character) // transfer active NanoUI instances to new user
if(new_character.mind) //remove any mind currently in our new body's mind variable
new_character.mind.current = null

View File

@@ -8,7 +8,7 @@
// /old_dir: The dir before the change.
// /new_dir: The dir after the change.
var/decl/observ/dir_set/dir_set_event = new()
GLOBAL_DATUM_INIT(dir_set_event, /decl/observ/dir_set, new)
/decl/observ/dir_set
name = "Direction Set"
@@ -27,9 +27,9 @@ var/decl/observ/dir_set/dir_set_event = new()
/atom/movable/Entered(var/atom/movable/am, atom/old_loc)
. = ..()
if(. != CANCEL_MOVE_EVENT && dir_set_event.has_listeners(am))
dir_set_event.register(src, am, /atom/proc/recursive_dir_set)
if(. != CANCEL_MOVE_EVENT && GLOB.dir_set_event.has_listeners(am))
GLOB.dir_set_event.register(src, am, /atom/proc/recursive_dir_set)
/atom/movable/Exited(var/atom/movable/am, atom/old_loc)
. = ..()
dir_set_event.unregister(src, am, /atom/proc/recursive_dir_set)
GLOB.dir_set_event.unregister(src, am, /atom/proc/recursive_dir_set)

View File

@@ -7,7 +7,7 @@
// /mob/equipper: The mob that equipped the item.
// /obj/item/item: The equipped item.
// slot: The slot equipped to.
var/decl/observ/mob_equipped/mob_equipped_event = new()
GLOBAL_DATUM_INIT(mob_equipped_event, /decl/observ/mob_equipped, new)
/decl/observ/mob_equipped
name = "Mob Equipped"
@@ -22,7 +22,7 @@ var/decl/observ/mob_equipped/mob_equipped_event = new()
// /obj/item/item: The equipped item.
// /mob/equipper: The mob that equipped the item.
// slot: The slot equipped to.
var/decl/observ/item_equipped/item_equipped_event = new()
GLOBAL_DATUM_INIT(item_equipped_event, /decl/observ/item_equipped, new)
/decl/observ/item_equipped
name = "Item Equipped"
@@ -34,5 +34,5 @@ var/decl/observ/item_equipped/item_equipped_event = new()
/obj/item/equipped(var/mob/user, var/slot)
. = ..()
mob_equipped_event.raise_event(user, src, slot)
item_equipped_event.raise_event(src, user, slot)
GLOB.mob_equipped_event.raise_event(user, src, slot)
GLOB.item_equipped_event.raise_event(src, user, slot)

View File

@@ -1,5 +1,5 @@
/atom/movable/proc/recursive_move(var/atom/movable/am, var/old_loc, var/new_loc)
moved_event.raise_event(src, old_loc, new_loc)
GLOB.moved_event.raise_event(src, old_loc, new_loc)
/atom/movable/proc/move_to_destination(var/atom/movable/am, var/old_loc, var/new_loc)
var/turf/T = get_turf(new_loc)
@@ -10,9 +10,9 @@
set_dir(new_dir)
/proc/register_all_movement(var/event_source, var/listener)
moved_event.register(event_source, listener, /atom/movable/proc/recursive_move)
dir_set_event.register(event_source, listener, /atom/proc/recursive_dir_set)
GLOB.moved_event.register(event_source, listener, /atom/movable/proc/recursive_move)
GLOB.dir_set_event.register(event_source, listener, /atom/proc/recursive_dir_set)
/proc/unregister_all_movement(var/event_source, var/listener)
moved_event.unregister(event_source, listener, /atom/movable/proc/recursive_move)
dir_set_event.unregister(event_source, listener, /atom/proc/recursive_dir_set)
GLOB.moved_event.unregister(event_source, listener, /atom/movable/proc/recursive_move)
GLOB.dir_set_event.unregister(event_source, listener, /atom/proc/recursive_dir_set)

View File

@@ -6,7 +6,7 @@
// Arguments that the called proc should expect:
// /mob/joiner: The mob that has logged in
var/decl/observ/logged_in/logged_in_event = new()
GLOBAL_DATUM_INIT(logged_in_event, /decl/observ/logged_in, new)
/decl/observ/logged_in
name = "Logged In"
@@ -18,4 +18,4 @@ var/decl/observ/logged_in/logged_in_event = new()
/mob/Login()
..()
logged_in_event.raise_event(src)
GLOB.logged_in_event.raise_event(src)

View File

@@ -8,7 +8,8 @@
// /atom/old_loc: The loc before the move.
// /atom/new_loc: The loc after the move.
var/decl/observ/moved/moved_event = new()
GLOBAL_DATUM_INIT(moved_event, /decl/observ/moved, new)
/decl/observ/moved
name = "Moved"
@@ -27,26 +28,26 @@ var/decl/observ/moved/moved_event = new()
/atom/Entered(var/atom/movable/am, var/atom/old_loc)
. = ..()
moved_event.raise_event(am, old_loc, am.loc)
GLOB.moved_event.raise_event(am, old_loc, am.loc)
/atom/movable/Entered(var/atom/movable/am, atom/old_loc)
. = ..()
if(moved_event.has_listeners(am))
moved_event.register(src, am, /atom/movable/proc/recursive_move)
if(GLOB.moved_event.has_listeners(am))
GLOB.moved_event.register(src, am, /atom/movable/proc/recursive_move)
/atom/movable/Exited(var/atom/movable/am, atom/old_loc)
. = ..()
moved_event.unregister(src, am, /atom/movable/proc/recursive_move)
GLOB.moved_event.unregister(src, am, /atom/movable/proc/recursive_move)
// Entered() typically lifts the moved event, but in the case of null-space we'll have to handle it.
/atom/movable/Move()
var/old_loc = loc
. = ..()
if(. && !loc)
moved_event.raise_event(src, old_loc, null)
GLOB.moved_event.raise_event(src, old_loc, null)
/atom/movable/forceMove(atom/destination)
var/old_loc = loc
. = ..()
if(. && !loc)
moved_event.raise_event(src, old_loc, null)
GLOB.moved_event.raise_event(src, old_loc, null)

View File

@@ -7,7 +7,7 @@
// /mob/equipped: The mob that unequipped/dropped the item.
// /obj/item/item: The unequipped item.
var/decl/observ/mob_unequipped/mob_unequipped_event = new()
GLOBAL_DATUM_INIT(mob_unequipped_event, /decl/observ/mob_unequipped, new)
/decl/observ/mob_unequipped
name = "Mob Unequipped"
@@ -22,7 +22,7 @@ var/decl/observ/mob_unequipped/mob_unequipped_event = new()
// /obj/item/item: The unequipped item.
// /mob/equipped: The mob that unequipped/dropped the item.
var/decl/observ/item_unequipped/item_unequipped_event = new()
GLOBAL_DATUM_INIT(item_unequipped_event, /decl/observ/item_unequipped, new)
/decl/observ/item_unequipped
name = "Item Unequipped"
@@ -34,5 +34,5 @@ var/decl/observ/item_unequipped/item_unequipped_event = new()
/obj/item/dropped(var/mob/user)
..()
mob_unequipped_event.raise_event(user, src)
item_unequipped_event.raise_event(src, user)
GLOB.mob_unequipped_event.raise_event(user, src)
GLOB.item_unequipped_event.raise_event(src, user)

View File

@@ -25,5 +25,5 @@
satchel_one = /obj/item/weapon/storage/backpack/satchel/eng
id_type = /obj/item/weapon/card/id/cargo/mining
pda_type = /obj/item/device/pda/shaftminer
backpack_contents = list(/obj/item/weapon/crowbar = 1, /obj/item/weapon/storage/bag/ore = 1)
backpack_contents = list(/obj/item/weapon/tool/crowbar = 1, /obj/item/weapon/storage/bag/ore = 1)
flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL

View File

@@ -22,7 +22,7 @@
/datum/progressbar/Destroy()
if (client)
client.images -= bar
qdel_null(bar)
QDEL_NULL(bar)
user = null
client = null
return ..()

View File

@@ -32,7 +32,7 @@
/datum/recipe
var/list/reagents // example: = list("berryjuice" = 5) // do not list same reagent twice
var/list/items // example: = list(/obj/item/weapon/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo
var/list/items // example: = list(/obj/item/weapon/tool/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo
var/list/fruit // example: = list("fruit" = 3)
var/result // example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal
var/time = 100 // 1/10 part of second

View File

@@ -0,0 +1,18 @@
var/global/datum/repository/ammomaterial/ammo_repository = new()
/datum/repository/ammomaterial
var/list/ammotypes
/datum/repository/ammomaterial/New()
ammotypes = list()
..()
/datum/repository/ammomaterial/proc/get_materials_from_object(obj/item/ammo_casing/I)
if(!(I in ammotypes))
ammotypes += I
var/obj/item/ammo_casing/temp = new I
ammotypes[I] = temp.matter
qdel(temp)
return ammotypes[I]

View File

@@ -122,7 +122,7 @@ var/global/repository/radiation/radiation_repository = new()
/turf/simulated/wall/calc_rad_resistance()
radiation_repository.resistance_cache[src] = (length(contents) + 1)
cached_rad_resistance = (density ? material.weight : 0)
cached_rad_resistance = (density ? material.weight + material.radiation_resistance : 0)
/obj
var/rad_resistance = 0 // Allow overriding rad resistance

View File

@@ -4,45 +4,45 @@
*/
/datum/supply_packs/atmos
/datum/supply_pack/atmos
group = "Atmospherics"
/datum/supply_packs/atmos/inflatable
/datum/supply_pack/atmos/inflatable
name = "Inflatable barriers"
contains = list(/obj/item/weapon/storage/briefcase/inflatable = 3)
cost = 20
containertype = /obj/structure/closet/crate/engineering
containername = "Inflatable Barrier Crate"
/datum/supply_packs/atmos/canister_empty
/datum/supply_pack/atmos/canister_empty
name = "Empty gas canister"
cost = 7
containername = "Empty gas canister crate"
containertype = /obj/structure/largecrate
contains = list(/obj/machinery/portable_atmospherics/canister)
/datum/supply_packs/atmos/canister_air
/datum/supply_pack/atmos/canister_air
name = "Air canister"
cost = 10
containername = "Air canister crate"
containertype = /obj/structure/largecrate
contains = list(/obj/machinery/portable_atmospherics/canister/air)
/datum/supply_packs/atmos/canister_oxygen
/datum/supply_pack/atmos/canister_oxygen
name = "Oxygen canister"
cost = 15
containername = "Oxygen canister crate"
containertype = /obj/structure/largecrate
contains = list(/obj/machinery/portable_atmospherics/canister/oxygen)
/datum/supply_packs/atmos/canister_nitrogen
/datum/supply_pack/atmos/canister_nitrogen
name = "Nitrogen canister"
cost = 10
containername = "Nitrogen canister crate"
containertype = /obj/structure/largecrate
contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen)
/datum/supply_packs/atmos/canister_phoron
/datum/supply_pack/atmos/canister_phoron
name = "Phoron gas canister"
cost = 60
containername = "Phoron gas canister crate"
@@ -50,7 +50,7 @@
access = access_atmospherics
contains = list(/obj/machinery/portable_atmospherics/canister/phoron)
/datum/supply_packs/atmos/canister_sleeping_agent
/datum/supply_pack/atmos/canister_sleeping_agent
name = "N2O gas canister"
cost = 15
containername = "N2O gas canister crate"
@@ -58,7 +58,7 @@
access = access_atmospherics
contains = list(/obj/machinery/portable_atmospherics/canister/sleeping_agent)
/datum/supply_packs/atmos/canister_carbon_dioxide
/datum/supply_pack/atmos/canister_carbon_dioxide
name = "Carbon dioxide gas canister"
cost = 15
containername = "CO2 canister crate"
@@ -66,7 +66,7 @@
access = access_atmospherics
contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide)
/datum/supply_packs/atmos/air_dispenser
/datum/supply_pack/atmos/air_dispenser
contains = list(/obj/machinery/pipedispenser/orderable)
name = "Pipe Dispenser"
cost = 25
@@ -74,7 +74,7 @@
containername = "Pipe Dispenser Crate"
access = access_atmospherics
/datum/supply_packs/atmos/disposals_dispenser
/datum/supply_pack/atmos/disposals_dispenser
contains = list(/obj/machinery/pipedispenser/disposal/orderable)
name = "Disposals Pipe Dispenser"
cost = 25
@@ -82,7 +82,7 @@
containername = "Disposal Dispenser Crate"
access = access_atmospherics
/datum/supply_packs/atmos/internals
/datum/supply_pack/atmos/internals
name = "Internals crate"
contains = list(
/obj/item/clothing/mask/gas = 3,
@@ -92,7 +92,7 @@
containertype = /obj/structure/closet/crate/internals
containername = "Internals crate"
/datum/supply_packs/atmos/evacuation
/datum/supply_pack/atmos/evacuation
name = "Emergency equipment"
contains = list(
/obj/item/weapon/storage/toolbox/emergency = 2,

View File

@@ -4,7 +4,7 @@
*/
/datum/supply_packs/randomised/contraband
/datum/supply_pack/randomised/contraband
num_contained = 5
contains = list(
/obj/item/seeds/bloodtomatoseed,
@@ -20,7 +20,7 @@
contraband = 1
group = "Supplies"
/datum/supply_packs/security/specialops
/datum/supply_pack/security/specialops
name = "Special Ops supplies"
contains = list(
/obj/item/weapon/storage/box/emps,
@@ -32,7 +32,7 @@
containername = "Special Ops crate"
contraband = 1
/datum/supply_packs/supply/moghes
/datum/supply_pack/supply/moghes
name = "Moghes imports"
contains = list(
/obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew = 2,
@@ -43,7 +43,7 @@
containername = "Moghes imports crate"
contraband = 1
/datum/supply_packs/munitions/bolt_rifles_militia
/datum/supply_pack/munitions/bolt_rifles_militia
name = "Weapon - Surplus militia rifles"
contains = list(
/obj/item/weapon/gun/projectile/shotgun/pump/rifle = 3,

View File

@@ -1,4 +1,4 @@
/datum/supply_packs/supply/stolen
/datum/supply_pack/supply/stolen
name = "Stolen supply crate"
contains = list(/obj/item/stolenpackage = 1)
cost = 1000
@@ -6,14 +6,14 @@
containername = "Stolen crate"
contraband = 1
/datum/supply_packs/supply/wolfgirl
/datum/supply_pack/supply/wolfgirl
name = "Wolfgirl Crate"
cost = 200 //I mean, it's a whole wolfgirl
containertype = /obj/structure/largecrate/animal/wolfgirl
containername = "Wolfgirl crate"
contraband = 1
/datum/supply_packs/supply/catgirl
/datum/supply_pack/supply/catgirl
name = "Catgirl Crate"
cost = 200 //I mean, it's a whole catgirl
containertype = /obj/structure/largecrate/animal/catgirl

View File

@@ -4,13 +4,13 @@
*/
/datum/supply_packs/costumes
/datum/supply_pack/costumes
group = "Costumes"
/datum/supply_packs/randomised/costumes
/datum/supply_pack/randomised/costumes
group = "Costumes"
/datum/supply_packs/costumes/wizard
/datum/supply_pack/costumes/wizard
name = "Wizard costume"
contains = list(
/obj/item/weapon/staff,
@@ -22,7 +22,7 @@
containertype = /obj/structure/closet/crate
containername = "Wizard costume crate"
/datum/supply_packs/randomised/costumes/hats
/datum/supply_pack/randomised/costumes/hats
num_contained = 4
contains = list(
/obj/item/clothing/head/collectable/chef,
@@ -51,7 +51,7 @@
containertype = /obj/structure/closet/crate
containername = "Collectable hats crate! Brought to you by Bass.inc!"
/datum/supply_packs/randomised/costumes/costume
/datum/supply_pack/randomised/costumes/costume
num_contained = 3
contains = list(
/obj/item/clothing/suit/pirate,
@@ -87,7 +87,7 @@
containertype = /obj/structure/closet/crate
containername = "Actor Costumes"
/datum/supply_packs/costumes/formal_wear
/datum/supply_pack/costumes/formal_wear
contains = list(
/obj/item/clothing/head/bowler,
/obj/item/clothing/head/that,
@@ -109,7 +109,7 @@
containertype = /obj/structure/closet
containername = "Formalwear for the best occasions."
datum/supply_packs/costumes/witch
datum/supply_pack/costumes/witch
name = "Witch costume"
containername = "Witch costume"
containertype = /obj/structure/closet
@@ -121,7 +121,7 @@ datum/supply_packs/costumes/witch
/obj/item/weapon/staff/broom
)
/datum/supply_packs/randomised/costumes/costume_hats
/datum/supply_pack/randomised/costumes/costume_hats
name = "Costume hats"
containername = "Actor hats crate"
containertype = /obj/structure/closet/crate
@@ -146,7 +146,7 @@ datum/supply_packs/costumes/witch
/obj/item/clothing/head/ushanka
)
/datum/supply_packs/randomised/costumes/dresses
/datum/supply_pack/randomised/costumes/dresses
name = "Womens formal dress locker"
containername = "Pretty dress locker"
containertype = /obj/structure/closet

View File

@@ -1,4 +1,4 @@
/datum/supply_packs/costumes/xenowear_vr
/datum/supply_pack/costumes/xenowear_vr
name = "Xenowear crate"
contains = list(
/obj/item/clothing/shoes/footwraps,
@@ -19,7 +19,7 @@
containertype = /obj/structure/closet/crate
containername = "Xenowear crate"
/datum/supply_packs/costumes/tesh_smocks_vr
/datum/supply_pack/costumes/tesh_smocks_vr
name = "Teshari smocks"
contains = list(
/obj/item/clothing/under/seromi/smock,
@@ -32,93 +32,93 @@
containertype = /obj/structure/closet/crate
containername = "Teshari smocks crate"
/datum/supply_packs/randomised/costumes/tesh_coats_vr
/datum/supply_pack/randomised/costumes/tesh_coats_vr
name = "Teshari undercoats"
num_contained = 4
contains = list(
/obj/item/clothing/under/seromi/undercoat/blue_grey,
/obj/item/clothing/under/seromi/undercoat/brown_grey,
/obj/item/clothing/under/seromi/undercoat/green_grey,
/obj/item/clothing/under/seromi/undercoat/lightgrey_grey,
/obj/item/clothing/under/seromi/undercoat/orange,
/obj/item/clothing/under/seromi/undercoat/orange_grey,
/obj/item/clothing/under/seromi/undercoat/pink_grey,
/obj/item/clothing/under/seromi/undercoat/purple_grey,
/obj/item/clothing/under/seromi/undercoat/rainbow,
/obj/item/clothing/under/seromi/undercoat/red_grey,
/obj/item/clothing/under/seromi/undercoat/white_grey,
/obj/item/clothing/under/seromi/undercoat/yellow_grey
/obj/item/clothing/under/seromi/undercoat/standard/blue_grey,
/obj/item/clothing/under/seromi/undercoat/standard/brown_grey,
/obj/item/clothing/under/seromi/undercoat/standard/green_grey,
/obj/item/clothing/under/seromi/undercoat/standard/lightgrey_grey,
/obj/item/clothing/under/seromi/undercoat/standard/orange,
/obj/item/clothing/under/seromi/undercoat/standard/orange_grey,
/obj/item/clothing/under/seromi/undercoat/standard/pink_grey,
/obj/item/clothing/under/seromi/undercoat/standard/purple_grey,
/obj/item/clothing/under/seromi/undercoat/standard/rainbow,
/obj/item/clothing/under/seromi/undercoat/standard/red_grey,
/obj/item/clothing/under/seromi/undercoat/standard/white_grey,
/obj/item/clothing/under/seromi/undercoat/standard/yellow_grey
)
cost = 20
containertype = /obj/structure/closet/crate
containername = "Teshari undercoats crate"
/datum/supply_packs/randomised/costumes/tesh_coats_b_vr
/datum/supply_pack/randomised/costumes/tesh_coats_b_vr
name = "Teshari undercoats (black)"
num_contained = 4
contains = list(
/obj/item/clothing/under/seromi/undercoat/black,
/obj/item/clothing/under/seromi/undercoat/black_blue,
/obj/item/clothing/under/seromi/undercoat/black_brown,
/obj/item/clothing/under/seromi/undercoat/black_green,
/obj/item/clothing/under/seromi/undercoat/black_grey,
/obj/item/clothing/under/seromi/undercoat/black_lightgrey,
/obj/item/clothing/under/seromi/undercoat/black_midgrey,
/obj/item/clothing/under/seromi/undercoat/black_orange,
/obj/item/clothing/under/seromi/undercoat/black_pink,
/obj/item/clothing/under/seromi/undercoat/black_purple,
/obj/item/clothing/under/seromi/undercoat/black_red,
/obj/item/clothing/under/seromi/undercoat/black_white,
/obj/item/clothing/under/seromi/undercoat/black_yellow
/obj/item/clothing/under/seromi/undercoat/standard/black,
/obj/item/clothing/under/seromi/undercoat/standard/black_blue,
/obj/item/clothing/under/seromi/undercoat/standard/black_brown,
/obj/item/clothing/under/seromi/undercoat/standard/black_green,
/obj/item/clothing/under/seromi/undercoat/standard/black_grey,
/obj/item/clothing/under/seromi/undercoat/standard/black_lightgrey,
/obj/item/clothing/under/seromi/undercoat/standard/black_midgrey,
/obj/item/clothing/under/seromi/undercoat/standard/black_orange,
/obj/item/clothing/under/seromi/undercoat/standard/black_pink,
/obj/item/clothing/under/seromi/undercoat/standard/black_purple,
/obj/item/clothing/under/seromi/undercoat/standard/black_red,
/obj/item/clothing/under/seromi/undercoat/standard/black_white,
/obj/item/clothing/under/seromi/undercoat/standard/black_yellow
)
cost = 20
containertype = /obj/structure/closet/crate
containername = "Teshari undercoats crate"
/datum/supply_packs/randomised/costumes/tesh_cloaks_vr
/datum/supply_pack/randomised/costumes/tesh_cloaks_vr
name = "Teshari cloaks"
num_contained = 4
contains = list(
/obj/item/clothing/suit/storage/seromi/cloak/blue_grey,
/obj/item/clothing/suit/storage/seromi/cloak/brown_grey,
/obj/item/clothing/suit/storage/seromi/cloak/green_grey,
/obj/item/clothing/suit/storage/seromi/cloak/lightgrey_grey,
/obj/item/clothing/suit/storage/seromi/cloak/orange,
/obj/item/clothing/suit/storage/seromi/cloak/orange_grey,
/obj/item/clothing/suit/storage/seromi/cloak/pink_grey,
/obj/item/clothing/suit/storage/seromi/cloak/purple_grey,
/obj/item/clothing/suit/storage/seromi/cloak/rainbow,
/obj/item/clothing/suit/storage/seromi/cloak/red_grey,
/obj/item/clothing/suit/storage/seromi/cloak/white_grey,
/obj/item/clothing/suit/storage/seromi/cloak/yellow_grey
/obj/item/clothing/suit/storage/seromi/cloak/standard/blue_grey,
/obj/item/clothing/suit/storage/seromi/cloak/standard/brown_grey,
/obj/item/clothing/suit/storage/seromi/cloak/standard/green_grey,
/obj/item/clothing/suit/storage/seromi/cloak/standard/lightgrey_grey,
/obj/item/clothing/suit/storage/seromi/cloak/standard/orange,
/obj/item/clothing/suit/storage/seromi/cloak/standard/orange_grey,
/obj/item/clothing/suit/storage/seromi/cloak/standard/pink_grey,
/obj/item/clothing/suit/storage/seromi/cloak/standard/purple_grey,
/obj/item/clothing/suit/storage/seromi/cloak/standard/rainbow,
/obj/item/clothing/suit/storage/seromi/cloak/standard/red_grey,
/obj/item/clothing/suit/storage/seromi/cloak/standard/white_grey,
/obj/item/clothing/suit/storage/seromi/cloak/standard/yellow_grey
)
cost = 40
containertype = /obj/structure/closet/crate
containername = "Teshari cloaks crate"
/datum/supply_packs/randomised/costumes/tesh_cloaks_b_vr
/datum/supply_pack/randomised/costumes/tesh_cloaks_b_vr
name = "Teshari cloaks (black)"
num_contained = 4
contains = list(
/obj/item/clothing/suit/storage/seromi/cloak/black,
/obj/item/clothing/suit/storage/seromi/cloak/black_blue,
/obj/item/clothing/suit/storage/seromi/cloak/black_brown,
/obj/item/clothing/suit/storage/seromi/cloak/black_green,
/obj/item/clothing/suit/storage/seromi/cloak/black_grey,
/obj/item/clothing/suit/storage/seromi/cloak/black_lightgrey,
/obj/item/clothing/suit/storage/seromi/cloak/black_midgrey,
/obj/item/clothing/suit/storage/seromi/cloak/black_orange,
/obj/item/clothing/suit/storage/seromi/cloak/black_pink,
/obj/item/clothing/suit/storage/seromi/cloak/black_purple,
/obj/item/clothing/suit/storage/seromi/cloak/black_red,
/obj/item/clothing/suit/storage/seromi/cloak/black_white,
/obj/item/clothing/suit/storage/seromi/cloak/black_yellow
/obj/item/clothing/suit/storage/seromi/cloak/standard/black,
/obj/item/clothing/suit/storage/seromi/cloak/standard/black_blue,
/obj/item/clothing/suit/storage/seromi/cloak/standard/black_brown,
/obj/item/clothing/suit/storage/seromi/cloak/standard/black_green,
/obj/item/clothing/suit/storage/seromi/cloak/standard/black_grey,
/obj/item/clothing/suit/storage/seromi/cloak/standard/black_lightgrey,
/obj/item/clothing/suit/storage/seromi/cloak/standard/black_midgrey,
/obj/item/clothing/suit/storage/seromi/cloak/standard/black_orange,
/obj/item/clothing/suit/storage/seromi/cloak/standard/black_pink,
/obj/item/clothing/suit/storage/seromi/cloak/standard/black_purple,
/obj/item/clothing/suit/storage/seromi/cloak/standard/black_red,
/obj/item/clothing/suit/storage/seromi/cloak/standard/black_white,
/obj/item/clothing/suit/storage/seromi/cloak/standard/black_yellow
)
cost = 40
containertype = /obj/structure/closet/crate
containername = "Teshari cloaks crate"
/datum/supply_packs/costumes/utility_vr
/datum/supply_pack/costumes/utility_vr
name = "Utility uniforms"
contains = list(
/obj/item/clothing/under/utility,
@@ -129,7 +129,7 @@
containertype = /obj/structure/closet/crate
containername = "Utility uniforms crate"
/datum/supply_packs/costumes/skirts_vr
/datum/supply_pack/costumes/skirts_vr
name = "Skirts crate"
contains = list(
/obj/item/clothing/under/skirt,
@@ -147,7 +147,7 @@
containertype = /obj/structure/closet/crate
containername = "Skirts crate"
/datum/supply_packs/costumes/varsity_vr
/datum/supply_pack/costumes/varsity_vr
name = "Varsity jackets"
contains = list(
/obj/item/clothing/suit/varsity,
@@ -161,7 +161,7 @@
containertype = /obj/structure/closet/crate
containername = "Varsity jackets crate"
/datum/supply_packs/randomised/costumes/leathergear_vr
/datum/supply_pack/randomised/costumes/leathergear_vr
name = "Leather gear"
num_contained = 5
contains = list(
@@ -192,7 +192,7 @@
containertype = /obj/structure/closet/crate
containername = "Leather gear crate"
/datum/supply_packs/costumes/eyewear_vr
/datum/supply_pack/costumes/eyewear_vr
name = "Eyewear crate"
contains = list(
/obj/item/clothing/glasses/eyepatch,
@@ -211,7 +211,7 @@
containertype = /obj/structure/closet/crate
containername = "Eyewear crate"
/datum/supply_packs/randomised/costumes/gloves_vr
/datum/supply_pack/randomised/costumes/gloves_vr
name = "Gloves crate"
num_contained = 4
contains = list(
@@ -235,7 +235,7 @@
containertype = /obj/structure/closet/crate
containername = "Gloves crate"
/datum/supply_packs/randomised/costumes/boots_vr
/datum/supply_pack/randomised/costumes/boots_vr
name = "Boots crate"
num_contained = 3
contains = list(
@@ -252,7 +252,7 @@
containertype = /obj/structure/closet/crate
containername = "Boots crate"
/datum/supply_packs/costumes/taurbags
/datum/supply_pack/costumes/taurbags
name = "Saddlebags crate"
contains = list(
/obj/item/weapon/storage/backpack/saddlebag_common,

View File

@@ -4,66 +4,66 @@
*/
/datum/supply_packs/eng
/datum/supply_pack/eng
group = "Engineering"
/datum/supply_packs/eng/lightbulbs
/datum/supply_pack/eng/lightbulbs
name = "Replacement lights"
contains = list(/obj/item/weapon/storage/box/lights/mixed = 3)
cost = 10
containertype = /obj/structure/closet/crate
containername = "Replacement lights"
/datum/supply_packs/eng/smescoil
/datum/supply_pack/eng/smescoil
name = "Superconducting Magnetic Coil"
contains = list(/obj/item/weapon/smes_coil)
cost = 75
containertype = /obj/structure/closet/crate/engineering
containername = "Superconducting Magnetic Coil crate"
/datum/supply_packs/eng/shield_capacitor
/datum/supply_pack/eng/shield_capacitor
name = "Shield Capacitor"
contains = list(/obj/machinery/shield_capacitor)
cost = 20
containertype = /obj/structure/closet/crate/engineering
containername = "shield capacitor crate"
/datum/supply_packs/eng/shield_capacitor/advanced
/datum/supply_pack/eng/shield_capacitor/advanced
name = "Advanced Shield Capacitor"
contains = list(/obj/machinery/shield_capacitor/advanced)
cost = 30
containertype = /obj/structure/closet/crate/engineering
containername = "advanced shield capacitor crate"
/datum/supply_packs/eng/bubble_shield
/datum/supply_pack/eng/bubble_shield
name = "Bubble Shield Generator"
contains = list(/obj/machinery/shield_gen)
cost = 40
containertype = /obj/structure/closet/crate/engineering
containername = "shield bubble generator crate"
/datum/supply_packs/eng/bubble_shield/advanced
/datum/supply_pack/eng/bubble_shield/advanced
name = "Advanced Bubble Shield Generator"
contains = list(/obj/machinery/shield_gen/advanced)
cost = 60
containertype = /obj/structure/closet/crate/engineering
containername = "advanced bubble shield generator crate"
/datum/supply_packs/eng/hull_shield
/datum/supply_pack/eng/hull_shield
name = "Hull Shield Generator"
contains = list(/obj/machinery/shield_gen/external)
cost = 80
containertype = /obj/structure/closet/crate/engineering
containername = "shield hull generator crate"
/datum/supply_packs/eng/hull_shield/advanced
/datum/supply_pack/eng/hull_shield/advanced
name = "Advanced Hull Shield Generator"
contains = list(/obj/machinery/shield_gen/external/advanced)
cost = 120
containertype = /obj/structure/closet/crate/engineering
containername = "advanced hull shield generator crate"
/datum/supply_packs/eng/electrical
/datum/supply_pack/eng/electrical
name = "Electrical maintenance crate"
contains = list(
/obj/item/weapon/storage/toolbox/electrical = 2,
@@ -75,7 +75,7 @@
containertype = /obj/structure/closet/crate/engineering/electrical
containername = "Electrical maintenance crate"
/datum/supply_packs/eng/e_welders
/datum/supply_pack/eng/e_welders
name = "Electric welder crate"
contains = list(
/obj/item/weapon/weldingtool/electric = 3
@@ -84,7 +84,7 @@
containertype = /obj/structure/closet/crate/engineering/electrical
containername = "Electric welder crate"
/datum/supply_packs/eng/mechanical
/datum/supply_pack/eng/mechanical
name = "Mechanical maintenance crate"
contains = list(
/obj/item/weapon/storage/belt/utility/full = 3,
@@ -96,14 +96,14 @@
containertype = /obj/structure/closet/crate/engineering
containername = "Mechanical maintenance crate"
/datum/supply_packs/eng/fueltank
/datum/supply_pack/eng/fueltank
name = "Fuel tank crate"
contains = list(/obj/structure/reagent_dispensers/fueltank)
cost = 10
containertype = /obj/structure/largecrate
containername = "fuel tank crate"
/datum/supply_packs/eng/solar
/datum/supply_pack/eng/solar
name = "Solar Pack crate"
contains = list(
/obj/item/solar_assembly = 21,
@@ -115,7 +115,7 @@
containertype = /obj/structure/closet/crate/engineering
containername = "Solar pack crate"
/datum/supply_packs/eng/engine
/datum/supply_pack/eng/engine
name = "Emitter crate"
contains = list(/obj/machinery/power/emitter = 2)
cost = 10
@@ -123,27 +123,27 @@
containername = "Emitter crate"
access = access_ce
/datum/supply_packs/eng/engine/field_gen
/datum/supply_pack/eng/engine/field_gen
name = "Field Generator crate"
contains = list(/obj/machinery/field_generator = 2)
containertype = /obj/structure/closet/crate/secure/engineering
containername = "Field Generator crate"
access = access_ce
/datum/supply_packs/eng/engine/sing_gen
/datum/supply_pack/eng/engine/sing_gen
name = "Singularity Generator crate"
contains = list(/obj/machinery/the_singularitygen)
containertype = /obj/structure/closet/crate/secure/engineering
containername = "Singularity Generator crate"
access = access_ce
/datum/supply_packs/eng/engine/collector
/datum/supply_pack/eng/engine/collector
name = "Collector crate"
contains = list(/obj/machinery/power/rad_collector = 3)
containertype = /obj/structure/closet/crate/secure/engineering
containername = "Collector crate"
/datum/supply_packs/eng/engine/PA
/datum/supply_pack/eng/engine/PA
name = "Particle Accelerator crate"
cost = 40
contains = list(
@@ -159,7 +159,7 @@
containername = "Particle Accelerator crate"
access = access_ce
/datum/supply_packs/eng/shield_gen
/datum/supply_pack/eng/shield_gen
contains = list(/obj/item/weapon/circuitboard/shield_gen)
name = "Bubble shield generator circuitry"
cost = 30
@@ -167,7 +167,7 @@
containername = "bubble shield generator circuitry crate"
access = access_ce
/datum/supply_packs/eng/shield_gen_ex
/datum/supply_pack/eng/shield_gen_ex
contains = list(/obj/item/weapon/circuitboard/shield_gen_ex)
name = "Hull shield generator circuitry"
cost = 30
@@ -175,7 +175,7 @@
containername = "hull shield generator circuitry crate"
access = access_ce
/datum/supply_packs/eng/shield_cap
/datum/supply_pack/eng/shield_cap
contains = list(/obj/item/weapon/circuitboard/shield_cap)
name = "Bubble shield capacitor circuitry"
cost = 30
@@ -183,7 +183,7 @@
containername = "shield capacitor circuitry crate"
access = access_ce
/datum/supply_packs/eng/smbig
/datum/supply_pack/eng/smbig
name = "Supermatter Core"
contains = list(/obj/machinery/power/supermatter)
cost = 150
@@ -191,7 +191,7 @@
containername = "Supermatter crate (CAUTION)"
access = access_ce
/datum/supply_packs/eng/teg
/datum/supply_pack/eng/teg
contains = list(/obj/machinery/power/generator)
name = "Mark I Thermoelectric Generator"
cost = 40
@@ -199,7 +199,7 @@
containername = "Mk1 TEG crate"
access = access_engine
/datum/supply_packs/eng/circulator
/datum/supply_pack/eng/circulator
contains = list(/obj/machinery/atmospherics/binary/circulator)
name = "Binary atmospheric circulator"
cost = 20
@@ -207,7 +207,7 @@
containername = "Atmospheric circulator crate"
access = access_engine
/datum/supply_packs/eng/radsuit
/datum/supply_pack/eng/radsuit
contains = list(
/obj/item/clothing/suit/radiation = 3,
/obj/item/clothing/head/radiation = 3
@@ -217,7 +217,7 @@
containertype = /obj/structure/closet/radiation
containername = "Radiation suit locker"
/datum/supply_packs/eng/pacman_parts
/datum/supply_pack/eng/pacman_parts
name = "P.A.C.M.A.N. portable generator parts"
cost = 25
containername = "P.A.C.M.A.N. Portable Generator Construction Kit"
@@ -230,7 +230,7 @@
/obj/item/weapon/circuitboard/pacman
)
/datum/supply_packs/eng/super_pacman_parts
/datum/supply_pack/eng/super_pacman_parts
name = "Super P.A.C.M.A.N. portable generator parts"
cost = 35
containername = "Super P.A.C.M.A.N. portable generator construction kit"
@@ -243,7 +243,7 @@
/obj/item/weapon/circuitboard/pacman/super
)
/datum/supply_packs/eng/fusion_core
/datum/supply_pack/eng/fusion_core
name = "R-UST Mk. 8 Tokamak fusion core crate"
cost = 50
containername = "R-UST Mk. 8 Tokamak Fusion Core crate"
@@ -255,7 +255,7 @@
/obj/item/weapon/circuitboard/fusion_core
)
/datum/supply_packs/eng/fusion_fuel_injector
/datum/supply_pack/eng/fusion_fuel_injector
name = "R-UST Mk. 8 fuel injector crate"
cost = 30
containername = "R-UST Mk. 8 fuel injector crate"
@@ -267,7 +267,7 @@
/obj/item/weapon/circuitboard/fusion_injector
)
/datum/supply_packs/eng/gyrotron
/datum/supply_pack/eng/gyrotron
name = "Gyrotron crate"
cost = 15
containername = "Gyrotron Crate"
@@ -278,14 +278,14 @@
/obj/item/weapon/circuitboard/gyrotron
)
/datum/supply_packs/eng/fusion_fuel_compressor
/datum/supply_pack/eng/fusion_fuel_compressor
name = "Fusion Fuel Compressor circuitry crate"
cost = 10
containername = "Fusion Fuel Compressor circuitry crate"
containertype = /obj/structure/closet/crate/engineering
contains = list(/obj/item/weapon/circuitboard/fusion_fuel_compressor)
/datum/supply_packs/eng/tritium
/datum/supply_pack/eng/tritium
name = "Tritium crate"
cost = 75
containername = "Tritium crate"

View File

@@ -1,24 +1,24 @@
/datum/supply_packs/eng/thermoregulator
/datum/supply_pack/eng/thermoregulator
contains = list(/obj/machinery/power/thermoregulator)
name = "Thermal Regulator"
cost = 30
containertype = /obj/structure/closet/crate/large
containername = "thermal regulator crate"
/datum/supply_packs/eng/radsuit
/datum/supply_pack/eng/radsuit
contains = list(
/obj/item/clothing/suit/radiation = 3,
/obj/item/clothing/head/radiation = 3
)
/datum/supply_packs/eng/algae
/datum/supply_pack/eng/algae
contains = list(/obj/item/stack/material/algae/ten)
name = "Algae Sheets (10)"
cost = 20
containertype = /obj/structure/closet/crate
containername = "algae sheets crate"
/datum/supply_packs/eng/engine/tesla_gen
/datum/supply_pack/eng/engine/tesla_gen
name = "Tesla Generator crate"
contains = list(/obj/machinery/the_singularitygen/tesla)
containertype = /obj/structure/closet/crate/secure/engineering

View File

@@ -4,10 +4,10 @@
*/
/datum/supply_packs/hospitality
/datum/supply_pack/hospitality
group = "Hospitality"
/datum/supply_packs/hospitality/party
/datum/supply_pack/hospitality/party
name = "Party equipment"
contains = list(
/obj/item/weapon/storage/box/mixedglasses = 2,
@@ -26,7 +26,7 @@
containertype = /obj/structure/closet/crate
containername = "Party equipment"
/datum/supply_packs/hospitality/barsupplies
/datum/supply_pack/hospitality/barsupplies
name = "Bar supplies"
contains = list(
/obj/item/weapon/storage/box/glasses/cocktail,
@@ -46,10 +46,10 @@
containertype = /obj/structure/closet/crate
containername = "crate of bar supplies"
/datum/supply_packs/randomised/hospitality/
/datum/supply_pack/randomised/hospitality/
group = "Hospitality"
/datum/supply_packs/randomised/hospitality/pizza
/datum/supply_pack/randomised/hospitality/pizza
num_contained = 5
contains = list(
/obj/item/pizzabox/margherita,
@@ -62,7 +62,7 @@
containertype = /obj/structure/closet/crate/freezer
containername = "Pizza crate"
/datum/supply_packs/hospitality/gifts
/datum/supply_pack/hospitality/gifts
name = "Gift crate"
contains = list(
/obj/item/toy/bouquet = 3,

View File

@@ -1,4 +1,4 @@
/datum/supply_packs/randomised/hospitality/burgers_vr
/datum/supply_pack/randomised/hospitality/burgers_vr
num_contained = 5
contains = list(
/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger,
@@ -12,7 +12,7 @@
containertype = /obj/structure/closet/crate/freezer
containername = "Burger crate"
/*
/datum/supply_packs/randomised/hospitality/bakery_vr
/datum/supply_pack/randomised/hospitality/bakery_vr
num_contained = 5
contains = list(
/obj/item/weapon/reagent_containers/food/snacks/baguette,
@@ -38,7 +38,7 @@
containertype = /obj/structure/closet/crate/freezer
containername = "Bakery products crate"
/datum/supply_packs/randomised/hospitality/cakes_vr
/datum/supply_pack/randomised/hospitality/cakes_vr
num_contained = 2
contains = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake,
@@ -56,7 +56,7 @@
containertype = /obj/structure/closet/crate/freezer
containername = "Cake crate"
/datum/supply_packs/randomised/hospitality/mexican_vr
/datum/supply_pack/randomised/hospitality/mexican_vr
num_contained = 5
contains = list(
/obj/item/weapon/reagent_containers/food/snacks/cheeseburrito,
@@ -69,7 +69,7 @@
containertype = /obj/structure/closet/crate/freezer
containername = "Mexican takeout crate"
*/
/datum/supply_packs/randomised/hospitality/asian_vr
/datum/supply_pack/randomised/hospitality/asian_vr
num_contained = 5
contains = list(
/obj/item/weapon/reagent_containers/food/snacks/generalschicken,
@@ -80,5 +80,5 @@
containertype = /obj/structure/closet/crate/freezer
containername = "Chinese takeout crate"
/datum/supply_packs/randomised/hospitality/pizza
/datum/supply_pack/randomised/hospitality/pizza
cost = 50

View File

@@ -4,45 +4,45 @@
*/
/datum/supply_packs/hydro
/datum/supply_pack/hydro
group = "Hydroponics"
/datum/supply_packs/hydro/monkey
/datum/supply_pack/hydro/monkey
name = "Monkey crate"
contains = list (/obj/item/weapon/storage/box/monkeycubes)
cost = 20
containertype = /obj/structure/closet/crate/freezer
containername = "Monkey crate"
/datum/supply_packs/hydro/farwa
/datum/supply_pack/hydro/farwa
name = "Farwa crate"
contains = list (/obj/item/weapon/storage/box/monkeycubes/farwacubes)
cost = 20
containertype = /obj/structure/closet/crate/freezer
containername = "Farwa crate"
/datum/supply_packs/hydro/neara
/datum/supply_pack/hydro/neara
name = "Neaera crate"
contains = list (/obj/item/weapon/storage/box/monkeycubes/neaeracubes)
cost = 20
containertype = /obj/structure/closet/crate/freezer
containername = "Neaera crate"
/datum/supply_packs/hydro/stok
/datum/supply_pack/hydro/stok
name = "Stok crate"
contains = list (/obj/item/weapon/storage/box/monkeycubes/stokcubes)
cost = 20
containertype = /obj/structure/closet/crate/freezer
containername = "Stok crate"
/datum/supply_packs/hydro/lisa
/datum/supply_pack/hydro/lisa
name = "Corgi Crate"
contains = list()
cost = 50
containertype = /obj/structure/largecrate/animal/corgi
containername = "Corgi Crate"
/datum/supply_packs/hydro/hydroponics
/datum/supply_pack/hydro/hydroponics
name = "Hydroponics Supply Crate"
contains = list(
/obj/item/weapon/reagent_containers/spray/plantbgone = 4,
@@ -60,28 +60,28 @@
containername = "Hydroponics crate"
access = access_hydroponics
/datum/supply_packs/hydro/cow
/datum/supply_pack/hydro/cow
name = "Cow crate"
cost = 25
containertype = /obj/structure/largecrate/animal/cow
containername = "Cow crate"
access = access_hydroponics
/datum/supply_packs/hydro/goat
/datum/supply_pack/hydro/goat
name = "Goat crate"
cost = 25
containertype = /obj/structure/largecrate/animal/goat
containername = "Goat crate"
access = access_hydroponics
/datum/supply_packs/hydro/chicken
/datum/supply_pack/hydro/chicken
name = "Chicken crate"
cost = 25
containertype = /obj/structure/largecrate/animal/chick
containername = "Chicken crate"
access = access_hydroponics
/datum/supply_packs/hydro/seeds
/datum/supply_pack/hydro/seeds
name = "Seeds crate"
contains = list(
/obj/item/seeds/chiliseed,
@@ -107,7 +107,7 @@
containername = "Seeds crate"
access = access_hydroponics
/datum/supply_packs/hydro/weedcontrol
/datum/supply_pack/hydro/weedcontrol
name = "Weed control crate"
contains = list(
/obj/item/weapon/material/knife/machete/hatchet = 2,
@@ -121,14 +121,14 @@
containername = "Weed control crate"
access = access_hydroponics
/datum/supply_packs/hydro/watertank
/datum/supply_pack/hydro/watertank
name = "Water tank crate"
contains = list(/obj/structure/reagent_dispensers/watertank)
cost = 10
containertype = /obj/structure/largecrate
containername = "water tank crate"
/datum/supply_packs/hydro/bee_keeper
/datum/supply_pack/hydro/bee_keeper
name = "Beekeeping crate"
contains = list(
/obj/item/beehive_assembly,
@@ -141,7 +141,7 @@
containername = "Beekeeping crate"
access = access_hydroponics
/datum/supply_packs/hydro/tray
/datum/supply_pack/hydro/tray
name = "Empty hydroponics trays"
cost = 50
containertype = /obj/structure/closet/crate/hydroponics

View File

@@ -1,39 +1,39 @@
/datum/supply_packs/hydro/birds
/datum/supply_pack/hydro/birds
name = "Birds Crate"
cost = 200 //You're getting 22 birds. Of course it's going to be a lot!
containertype = /obj/structure/largecrate/birds
containername = "Bird crate"
access = access_hydroponics
/datum/supply_packs/hydro/sobaka
/datum/supply_pack/hydro/sobaka
name = "Sobaka crate"
contains = list (/obj/item/weapon/storage/box/monkeycubes/sobakacubes)
cost = 20
containertype = /obj/structure/closet/crate/freezer
containername = "Sobaka crate"
/datum/supply_packs/hydro/saru
/datum/supply_pack/hydro/saru
name = "Saru crate"
contains = list (/obj/item/weapon/storage/box/monkeycubes/sarucubes)
cost = 20
containertype = /obj/structure/closet/crate/freezer
containername = "Saru crate"
/datum/supply_packs/hydro/sparra
/datum/supply_pack/hydro/sparra
name = "Sparra crate"
contains = list (/obj/item/weapon/storage/box/monkeycubes/sparracubes)
cost = 20
containertype = /obj/structure/closet/crate/freezer
containername = "Sparra crate"
/datum/supply_packs/hydro/wolpin
/datum/supply_pack/hydro/wolpin
name = "Wolpin crate"
contains = list (/obj/item/weapon/storage/box/monkeycubes/wolpincubes)
cost = 20
containertype = /obj/structure/closet/crate/freezer
containername = "Wolpin crate"
/datum/supply_packs/hydro/fennec
/datum/supply_pack/hydro/fennec
name = "Fennec crate"
cost = 60 //considering a corgi crate is 50, and you get two fennecs
containertype = /obj/structure/largecrate/animal/fennec

View File

@@ -4,45 +4,45 @@
*/
/datum/supply_packs/materials
/datum/supply_pack/materials
group = "Materials"
/datum/supply_packs/materials/metal50
/datum/supply_pack/materials/metal50
name = "50 metal sheets"
contains = list(/obj/fiftyspawner/steel)
cost = 10
containertype = /obj/structure/closet/crate
containername = "Metal sheets crate"
/datum/supply_packs/materials/glass50
/datum/supply_pack/materials/glass50
name = "50 glass sheets"
contains = list(/obj/fiftyspawner/glass)
cost = 10
containertype = /obj/structure/closet/crate
containername = "Glass sheets crate"
/datum/supply_packs/materials/wood50
/datum/supply_pack/materials/wood50
name = "50 wooden planks"
contains = list(/obj/fiftyspawner/wood)
cost = 10
containertype = /obj/structure/closet/crate
containername = "Wooden planks crate"
/datum/supply_packs/materials/plastic50
/datum/supply_pack/materials/plastic50
name = "50 plastic sheets"
contains = list(/obj/fiftyspawner/plastic)
cost = 10
containertype = /obj/structure/closet/crate
containername = "Plastic sheets crate"
/datum/supply_packs/materials/cardboard_sheets
/datum/supply_pack/materials/cardboard_sheets
contains = list(/obj/fiftyspawner/cardboard)
name = "50 cardboard sheets"
cost = 10
containertype = /obj/structure/closet/crate
containername = "Cardboard sheets crate"
/datum/supply_packs/materials/carpet
/datum/supply_pack/materials/carpet
name = "Imported carpet"
containertype = /obj/structure/closet/crate
containername = "Imported carpet crate"
@@ -53,7 +53,7 @@
)
/datum/supply_packs/misc/linoleum
/datum/supply_pack/misc/linoleum
name = "Linoleum"
containertype = /obj/structure/closet/crate
containername = "Linoleum crate"

View File

@@ -4,10 +4,10 @@
*/
/datum/supply_packs/med
/datum/supply_pack/med
group = "Medical"
/datum/supply_packs/med/medical
/datum/supply_pack/med/medical
name = "Medical crate"
contains = list(
/obj/item/weapon/storage/firstaid/regular,
@@ -25,28 +25,28 @@
containertype = /obj/structure/closet/crate/medical
containername = "Medical crate"
/datum/supply_packs/med/bloodpack
/datum/supply_pack/med/bloodpack
name = "BloodPack crate"
contains = list(/obj/item/weapon/storage/box/bloodpacks = 3)
cost = 10
containertype = /obj/structure/closet/crate/medical
containername = "BloodPack crate"
/datum/supply_packs/med/bodybag
/datum/supply_pack/med/bodybag
name = "Body bag crate"
contains = list(/obj/item/weapon/storage/box/bodybags = 3)
cost = 10
containertype = /obj/structure/closet/crate/medical
containername = "Body bag crate"
/datum/supply_packs/med/cryobag
/datum/supply_pack/med/cryobag
name = "Stasis bag crate"
contains = list(/obj/item/bodybag/cryobag = 3)
cost = 40
containertype = /obj/structure/closet/crate/medical
containername = "Stasis bag crate"
/datum/supply_packs/med/surgery
/datum/supply_pack/med/surgery
name = "Surgery crate"
contains = list(
/obj/item/weapon/surgical/cautery,
@@ -66,7 +66,7 @@
containername = "Surgery crate"
access = access_medical
/datum/supply_packs/med/deathalarm
/datum/supply_pack/med/deathalarm
name = "Death Alarm crate"
contains = list(
/obj/item/weapon/storage/box/cdeathalarm_kit,
@@ -77,7 +77,7 @@
containername = "Death Alarm crate"
access = access_medical
/datum/supply_packs/med/clotting
/datum/supply_pack/med/clotting
name = "Clotting Medicine crate"
contains = list(
/obj/item/weapon/storage/firstaid/clotting
@@ -87,7 +87,7 @@
containername = "Clotting Medicine crate"
access = access_medical
/datum/supply_packs/med/sterile
/datum/supply_pack/med/sterile
name = "Sterile equipment crate"
contains = list(
/obj/item/clothing/under/rank/medical/scrubs/green = 2,
@@ -100,7 +100,7 @@
containertype = "/obj/structure/closet/crate"
containername = "Sterile equipment crate"
/datum/supply_packs/med/extragear
/datum/supply_pack/med/extragear
name = "Medical surplus equipment"
contains = list(
/obj/item/weapon/storage/belt/medical = 3,
@@ -113,7 +113,7 @@
containername = "Medical surplus equipment"
access = access_medical
/datum/supply_packs/med/cmogear
/datum/supply_pack/med/cmogear
name = "Chief medical officer equipment"
contains = list(
/obj/item/weapon/storage/belt/medical,
@@ -137,7 +137,7 @@
containername = "Chief medical officer equipment"
access = access_cmo
/datum/supply_packs/med/doctorgear
/datum/supply_pack/med/doctorgear
name = "Medical Doctor equipment"
contains = list(
/obj/item/weapon/storage/belt/medical,
@@ -160,7 +160,7 @@
containername = "Medical Doctor equipment"
access = access_medical_equip
/datum/supply_packs/med/chemistgear
/datum/supply_pack/med/chemistgear
name = "Chemist equipment"
contains = list(
/obj/item/weapon/storage/box/beakers,
@@ -183,7 +183,7 @@
containername = "Chemist equipment"
access = access_chemistry
/datum/supply_packs/med/paramedicgear
/datum/supply_pack/med/paramedicgear
name = "Paramedic equipment"
contains = list(
/obj/item/weapon/storage/belt/medical/emt,
@@ -211,7 +211,7 @@
containername = "Paramedic equipment"
access = access_medical_equip
/datum/supply_packs/med/psychiatristgear
/datum/supply_pack/med/psychiatristgear
name = "Psychiatrist equipment"
contains = list(
/obj/item/clothing/under/rank/psych,
@@ -230,7 +230,7 @@
containername = "Psychiatrist equipment"
access = access_psychiatrist
/datum/supply_packs/med/medicalscrubs
/datum/supply_pack/med/medicalscrubs
name = "Medical scrubs"
contains = list(
/obj/item/clothing/shoes/white = 3,,
@@ -251,7 +251,7 @@
containername = "Medical scrubs crate"
access = access_medical_equip
/datum/supply_packs/med/autopsy
/datum/supply_pack/med/autopsy
name = "Autopsy equipment"
contains = list(
/obj/item/weapon/folder/white,
@@ -268,7 +268,7 @@
containername = "Autopsy equipment crate"
access = access_morgue
/datum/supply_packs/med/medicaluniforms
/datum/supply_pack/med/medicaluniforms
name = "Medical uniforms"
contains = list(
/obj/item/clothing/shoes/white = 3,
@@ -295,7 +295,7 @@
containername = "Medical uniform crate"
access = access_medical_equip
/datum/supply_packs/med/medicalbiosuits
/datum/supply_pack/med/medicalbiosuits
name = "Medical biohazard gear"
contains = list(
/obj/item/clothing/head/bio_hood = 3,
@@ -313,7 +313,7 @@
containername = "Medical biohazard equipment"
access = access_medical_equip
/datum/supply_packs/med/portablefreezers
/datum/supply_pack/med/portablefreezers
name = "Portable freezers crate"
contains = list(/obj/item/weapon/storage/box/freezer = 7)
cost = 25
@@ -321,7 +321,7 @@
containername = "Portable freezers"
access = access_medical_equip
/datum/supply_packs/med/virus
/datum/supply_pack/med/virus
name = "Virus sample crate"
contains = list(/obj/item/weapon/virusdish/random = 4)
cost = 25
@@ -329,7 +329,7 @@
containername = "Virus sample crate"
access = access_cmo
/datum/supply_packs/med/defib
/datum/supply_pack/med/defib
name = "Defibrillator crate"
contains = list(/obj/item/device/defib_kit = 2)
cost = 30

View File

@@ -1,4 +1,4 @@
/datum/supply_packs/med/medicalbiosuits
/datum/supply_pack/med/medicalbiosuits
contains = list(
/obj/item/clothing/head/bio_hood/scientist = 3,
/obj/item/clothing/suit/bio_suit/scientist = 3,
@@ -14,7 +14,7 @@
)
cost = 40
/datum/supply_packs/med/virologybiosuits
/datum/supply_pack/med/virologybiosuits
name = "Virology biohazard gear"
contains = list(
/obj/item/clothing/suit/bio_suit/virology = 3,

View File

@@ -4,14 +4,14 @@
*/
/datum/supply_packs/misc
/datum/supply_pack/misc
group = "Miscellaneous"
/datum/supply_packs/randomised/misc
/datum/supply_pack/randomised/misc
group = "Miscellaneous"
/datum/supply_packs/randomised/misc/card_packs
/datum/supply_pack/randomised/misc/card_packs
num_contained = 5
contains = list(
/obj/item/weapon/pack/cardemon,
@@ -23,14 +23,14 @@
containertype = /obj/structure/closet/crate
containername = "cards crate"
/datum/supply_packs/misc/eftpos
/datum/supply_pack/misc/eftpos
contains = list(/obj/item/device/eftpos)
name = "EFTPOS scanner"
cost = 10
containertype = /obj/structure/closet/crate
containername = "EFTPOS crate"
/datum/supply_packs/misc/chaplaingear
/datum/supply_pack/misc/chaplaingear
name = "Chaplain equipment"
contains = list(
/obj/item/clothing/under/rank/chaplain,
@@ -48,14 +48,14 @@
containertype = "/obj/structure/closet/crate"
containername = "Chaplain equipment crate"
/datum/supply_packs/misc/hoverpod
/datum/supply_pack/misc/hoverpod
name = "Hoverpod Shipment"
contains = list()
cost = 80
containertype = /obj/structure/largecrate/hoverpod
containername = "Hoverpod Crate"
/datum/supply_packs/randomised/misc/webbing
/datum/supply_pack/randomised/misc/webbing
name = "Webbing crate"
num_contained = 4
contains = list(
@@ -71,7 +71,7 @@
containertype = "/obj/structure/closet/crate"
containername = "Webbing crate"
/datum/supply_packs/misc/holoplant
/datum/supply_pack/misc/holoplant
name = "Holoplant Pot"
contains = list(/obj/machinery/holoplant/shipped)
cost = 15

View File

@@ -1,5 +1,5 @@
/datum/supply_packs/misc/beltminer
/datum/supply_pack/misc/beltminer
name = "Belt-miner gear crate"
contains = list(
/obj/item/weapon/gun/energy/particle = 2,
@@ -13,7 +13,7 @@
containername = "Belt-miner gear crate"
access = access_mining
/datum/supply_packs/misc/eva_rig
/datum/supply_pack/misc/eva_rig
name = "eva hardsuit (empty)"
contains = list(
/obj/item/weapon/rig/eva = 1
@@ -23,7 +23,7 @@
containername = "eva hardsuit crate"
access = access_mining
/datum/supply_packs/misc/mining_rig
/datum/supply_pack/misc/mining_rig
name = "industrial hardsuit (empty)"
contains = list(
/obj/item/weapon/rig/industrial = 1

View File

@@ -3,13 +3,13 @@
* related to weapons live.
*/
/datum/supply_packs/munitions
/datum/supply_pack/munitions
group = "Munitions"
/datum/supply_packs/randomised/munitions
/datum/supply_pack/randomised/munitions
group = "Munitions"
/* VOREStation Removal - What? This crate costs 40... the crate with just two eguns costs 50... what??? This crate is also like "the armory" and has OFFICER access?
/datum/supply_packs/munitions/weapons
/datum/supply_pack/munitions/weapons
name = "Weapons - Security basic equipment"
contains = list(
/obj/item/device/flash = 2,
@@ -24,7 +24,7 @@
containername = "Security equipment crate"
access = access_security*/
/datum/supply_packs/munitions/egunpistol
/datum/supply_pack/munitions/egunpistol
name = "Weapons - Energy sidearms"
contains = list(/obj/item/weapon/gun/energy/gun = 2)
cost = 50
@@ -32,7 +32,7 @@
containername = "Energy sidearms crate"
access = access_armory //VOREStation Edit - Guns are for the armory.
/datum/supply_packs/munitions/flareguns
/datum/supply_pack/munitions/flareguns
name = "Weapons - Flare guns"
contains = list(
/obj/item/weapon/gun/projectile/sec/flash,
@@ -45,7 +45,7 @@
containername = "Flare gun crate"
access = access_armory //VOREStation Edit - Guns are for the armory.
/datum/supply_packs/munitions/eweapons
/datum/supply_pack/munitions/eweapons
name = "Weapons - Experimental weapons crate"
contains = list(
/obj/item/weapon/gun/energy/xray = 2,
@@ -55,7 +55,7 @@
containername = "Experimental weapons crate"
access = access_armory
/datum/supply_packs/munitions/energyweapons
/datum/supply_pack/munitions/energyweapons
name = "Weapons - Laser rifle crate"
contains = list(/obj/item/weapon/gun/energy/laser = 2) //VOREStation Edit - Made to be consistent with the energy guns crate.
cost = 50
@@ -63,7 +63,7 @@
containername = "Energy weapons crate"
access = access_armory
/datum/supply_packs/munitions/shotgun
/datum/supply_pack/munitions/shotgun
name = "Weapons - Shotgun crate"
contains = list(
/obj/item/weapon/storage/box/shotgunammo,
@@ -75,7 +75,7 @@
containername = "Shotgun crate"
access = access_armory
/* VOREStation edit -- This is a bad idea. -- So is this.
/datum/supply_packs/munitions/erifle
/datum/supply_pack/munitions/erifle
name = "Weapons - Energy marksman"
contains = list(/obj/item/weapon/gun/energy/sniperrifle = 2)
cost = 100
@@ -83,7 +83,7 @@
containername = "Energy marksman crate"
access = access_armory
/datum/supply_packs/munitions/burstlaser
/datum/supply_pack/munitions/burstlaser
name = "Weapons - Burst laser"
contains = list(/obj/item/weapon/gun/energy/gun/burst = 2)
cost = 50
@@ -91,7 +91,7 @@
containername = "Burst laser crate"
access = access_armory
*/
/datum/supply_packs/munitions/ionweapons
/datum/supply_pack/munitions/ionweapons
name = "Weapons - Electromagnetic Rifles"
contains = list(
/obj/item/weapon/gun/energy/ionrifle = 2,
@@ -102,7 +102,7 @@
containername = "Electromagnetic weapons crate"
access = access_armory
/datum/supply_packs/munitions/ionpistols
/datum/supply_pack/munitions/ionpistols
name = "Weapons - Electromagnetic pistols"
contains = list(
/obj/item/weapon/gun/energy/ionrifle/pistol = 2,
@@ -113,7 +113,7 @@
containername = "Electromagnetic weapons crate"
access = access_armory
/datum/supply_packs/munitions/bsmg
/datum/supply_pack/munitions/bsmg
name = "Weapons - Ballistic SMGs"
contains = list(/obj/item/weapon/gun/projectile/automatic/wt550 = 2)
cost = 50
@@ -121,7 +121,7 @@
containername = "Ballistic weapon crate"
access = access_armory
/datum/supply_packs/munitions/brifle
/datum/supply_pack/munitions/brifle
name = "Weapons - Ballistic Rifles"
contains = list(/obj/item/weapon/gun/projectile/automatic/z8 = 2)
cost = 80
@@ -129,7 +129,7 @@
containername = "Ballistic weapon crate"
access = access_armory
/datum/supply_packs/munitions/bolt_rifles_competitive
/datum/supply_pack/munitions/bolt_rifles_competitive
name = "Weapons - Competitive shooting rifles"
contains = list(
/obj/item/device/assembly/timer,
@@ -144,7 +144,7 @@
containername = "Ballistic Weapons crate"
access = access_armory //VOREStation Edit - Guns are for the armory.
/datum/supply_packs/munitions/shotgunammo
/datum/supply_pack/munitions/shotgunammo
name = "Ammunition - Shotgun shells"
contains = list(
/obj/item/weapon/storage/box/shotgunammo = 2,
@@ -155,7 +155,7 @@
containername = "Ballistic ammunition crate"
access = access_armory
/datum/supply_packs/munitions/beanbagammo
/datum/supply_pack/munitions/beanbagammo
name = "Ammunition - Beanbag shells"
contains = list(/obj/item/weapon/storage/box/beanbags = 3)
cost = 25
@@ -163,7 +163,7 @@
containername = "Ballistic ammunition crate"
access = access_armory //VOREStation Edit - Guns are for the armory.
/datum/supply_packs/munitions/bsmgammo
/datum/supply_pack/munitions/bsmgammo
name = "Ammunition - 9mm top mounted lethal"
contains = list(/obj/item/ammo_magazine/m9mmt = 6)
cost = 25
@@ -171,7 +171,7 @@
containername = "Ballistic ammunition crate"
access = access_armory
/datum/supply_packs/munitions/bsmgammorubber
/datum/supply_pack/munitions/bsmgammorubber
name = "Ammunition - 9mm top mounted rubber"
contains = list(/obj/item/ammo_magazine/m9mmt/rubber = 6)
cost = 25
@@ -179,7 +179,7 @@
containername = "Ballistic ammunition crate"
access = access_security
/datum/supply_packs/munitions/brifleammo
/datum/supply_pack/munitions/brifleammo
name = "Ammunition - 7.62mm lethal"
contains = list(/obj/item/ammo_magazine/m762 = 6)
cost = 25
@@ -187,7 +187,7 @@
containername = "Ballistic ammunition crate"
access = access_armory
/datum/supply_packs/munitions/pcellammo
/datum/supply_pack/munitions/pcellammo
name = "Ammunition - Power cell"
contains = list(/obj/item/weapon/cell/device/weapon = 3)
cost = 50

View File

@@ -1,4 +1,4 @@
/datum/supply_packs/munitions/expeditionguns
/datum/supply_pack/munitions/expeditionguns
name = "Frontier phaser (station-locked) crate"
contains = list(
/obj/item/weapon/gun/energy/frontier/locked = 2,

View File

@@ -4,14 +4,14 @@
*/
/datum/supply_packs/recreation
/datum/supply_pack/recreation
group = "Recreation"
/datum/supply_packs/randomised/recreation
/datum/supply_pack/randomised/recreation
group = "Recreation"
access = access_security
/datum/supply_packs/recreation/foam_weapons
/datum/supply_pack/recreation/foam_weapons
name = "Foam Weapon Crate"
contains = list(
/obj/item/weapon/material/sword/foam = 2,
@@ -23,7 +23,7 @@
containertype = /obj/structure/closet/crate
containername = "foam weapon crate"
/datum/supply_packs/recreation/lasertag
/datum/supply_pack/recreation/lasertag
name = "Lasertag equipment"
contains = list(
/obj/item/weapon/gun/energy/lasertag/red,
@@ -35,7 +35,7 @@
containername = "Lasertag Closet"
cost = 10
/datum/supply_packs/recreation/artscrafts
/datum/supply_pack/recreation/artscrafts
name = "Arts and Crafts supplies"
contains = list(
/obj/item/weapon/storage/fancy/crayons,
@@ -58,7 +58,7 @@
containertype = "/obj/structure/closet/crate"
containername = "Arts and Crafts crate"
/datum/supply_packs/recreation/painters
/datum/supply_pack/recreation/painters
name = "Station Painting Supplies"
cost = 10
containername = "station painting supplies crate"

View File

@@ -1,5 +1,5 @@
/*
/datum/supply_packs/recreation/rover
/datum/supply_pack/recreation/rover
name = "NT Humvee"
contains = list(
/obj/vehicle/train/rover/engine
@@ -8,7 +8,7 @@
containername = "NT Humvee Crate"
cost = 100
*/
/datum/supply_packs/recreation/restraints
/datum/supply_pack/recreation/restraints
name = "Recreational Restraints"
contains = list(
/obj/item/clothing/mask/muzzle,
@@ -27,7 +27,7 @@
containername = "Restraints crate"
cost = 30
/datum/supply_packs/recreation/wolfgirl_cosplay_crate
/datum/supply_pack/recreation/wolfgirl_cosplay_crate
name = "Wolfgirl Cosplay Crate"
contains = list(
/obj/item/clothing/head/fluff/awoo = 1,
@@ -40,7 +40,7 @@
containertype = /obj/structure/closet/crate
containername = "wolfgirl cosplay crate"
/datum/supply_packs/randomised/recreation/figures_vr
/datum/supply_pack/randomised/recreation/figures_vr
name = "Action figures crate"
num_contained = 5
contains = list(
@@ -50,7 +50,7 @@
containertype = /obj/structure/closet/crate
containername = "Action figures crate"
/datum/supply_packs/recreation/characters_vr
/datum/supply_pack/recreation/characters_vr
name = "Tabletop miniatures"
contains = list(
/obj/item/weapon/storage/box/characters
@@ -59,7 +59,7 @@
containername = "Tabletop miniatures crate"
cost = 50
/datum/supply_packs/randomised/recreation/plushies_vr
/datum/supply_pack/randomised/recreation/plushies_vr
name = "Plushies crate"
num_contained = 3
contains = list(

View File

@@ -4,14 +4,14 @@
*/
/datum/supply_packs/robotics
/datum/supply_pack/robotics
group = "Robotics"
/datum/supply_packs/randomised/robotics
/datum/supply_pack/randomised/robotics
group = "Robotics"
access = access_robotics
/datum/supply_packs/robotics/robotics_assembly
/datum/supply_pack/robotics/robotics_assembly
name = "Robotics assembly crate"
contains = list(
/obj/item/device/assembly/prox_sensor = 3,
@@ -24,7 +24,7 @@
containername = "Robotics assembly"
access = access_robotics
/*/datum/supply_packs/robotics/robolimbs_basic
/*/datum/supply_pack/robotics/robolimbs_basic
name = "Basic robolimb blueprints"
contains = list(
/obj/item/weapon/disk/limb/morpheus,
@@ -35,7 +35,7 @@
containername = "Robolimb blueprints (basic)"
access = access_robotics
/datum/supply_packs/robotics/robolimbs_adv
/datum/supply_pack/robotics/robolimbs_adv
name = "All robolimb blueprints"
contains = list(
/obj/item/weapon/disk/limb/bishop,
@@ -52,7 +52,7 @@
access = access_robotics
*/
/datum/supply_packs/robotics/robolimbs/morpheus
/datum/supply_pack/robotics/robolimbs/morpheus
name = "Morpheus robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/morpheus)
cost = 20
@@ -60,7 +60,7 @@
containername = "Robolimb blueprints (Morpheus)"
access = access_robotics
/datum/supply_packs/robotics/robolimbs/cybersolutions
/datum/supply_pack/robotics/robolimbs/cybersolutions
name = "Cyber Solutions robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/cybersolutions)
cost = 20
@@ -68,7 +68,7 @@
containername = "Robolimb blueprints (Cyber Solutions)"
access = access_robotics
/datum/supply_packs/robotics/robolimbs/xion
/datum/supply_pack/robotics/robolimbs/xion
name = "Xion robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/xion)
cost = 20
@@ -76,7 +76,7 @@
containername = "Robolimb blueprints (Xion)"
access = access_robotics
/datum/supply_packs/robotics/robolimbs/grayson
/datum/supply_pack/robotics/robolimbs/grayson
name = "Grayson robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/grayson)
cost = 30
@@ -84,7 +84,7 @@
containername = "Robolimb blueprints (Grayson)"
access = access_robotics
/datum/supply_packs/robotics/robolimbs/hephaestus
/datum/supply_pack/robotics/robolimbs/hephaestus
name = "Hephaestus robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/hephaestus)
cost = 35
@@ -92,7 +92,7 @@
containername = "Robolimb blueprints (Hephaestus)"
access = access_robotics
/datum/supply_packs/robotics/robolimbs/wardtakahashi
/datum/supply_pack/robotics/robolimbs/wardtakahashi
name = "Ward-Takahashi robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/wardtakahashi)
cost = 35
@@ -100,7 +100,7 @@
containername = "Robolimb blueprints (Ward-Takahashi)"
access = access_robotics
/datum/supply_packs/robotics/robolimbs/zenghu
/datum/supply_pack/robotics/robolimbs/zenghu
name = "Zeng Hu robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/zenghu)
cost = 35
@@ -108,7 +108,7 @@
containername = "Robolimb blueprints (Zeng Hu)"
access = access_robotics
/datum/supply_packs/robotics/robolimbs/bishop
/datum/supply_pack/robotics/robolimbs/bishop
name = "Bishop robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/bishop)
cost = 70
@@ -116,7 +116,7 @@
containername = "Robolimb blueprints (Bishop)"
access = access_robotics
/datum/supply_packs/robotics/mecha_ripley
/datum/supply_pack/robotics/mecha_ripley
name = "Circuit Crate (\"Ripley\" APLU)"
contains = list(
/obj/item/weapon/book/manual/ripley_build_and_repair,
@@ -128,7 +128,7 @@
containername = "APLU \"Ripley\" Circuit Crate"
access = access_robotics
/datum/supply_packs/robotics/mecha_odysseus
/datum/supply_pack/robotics/mecha_odysseus
name = "Circuit Crate (\"Odysseus\")"
contains = list(
/obj/item/weapon/circuitboard/mecha/odysseus/peripherals,
@@ -139,7 +139,7 @@
containername = "\"Odysseus\" Circuit Crate"
access = access_robotics
/datum/supply_packs/randomised/robotics/exosuit_mod
/datum/supply_pack/randomised/robotics/exosuit_mod
num_contained = 1
contains = list(
/obj/item/device/kit/paint/ripley,
@@ -152,7 +152,7 @@
containertype = /obj/structure/closet/crate/science
containername = "heavy crate"
/datum/supply_packs/randomised/robotics/exosuit_mod/durand
/datum/supply_pack/randomised/robotics/exosuit_mod/durand
contains = list(
/obj/item/device/kit/paint/durand,
/obj/item/device/kit/paint/durand/seraph,
@@ -160,7 +160,7 @@
)
name = "Random Durand exosuit modkit"
/datum/supply_packs/randomised/robotics/exosuit_mod/gygax
/datum/supply_pack/randomised/robotics/exosuit_mod/gygax
contains = list(
/obj/item/device/kit/paint/gygax,
/obj/item/device/kit/paint/gygax/darkgygax,
@@ -168,7 +168,7 @@
)
name = "Random Gygax exosuit modkit"
/datum/supply_packs/robotics/jumper_cables
/datum/supply_pack/robotics/jumper_cables
name = "Jumper kit crate"
contains = list(
/obj/item/device/defib_kit/jumper_kit = 2
@@ -177,3 +177,24 @@
containertype = /obj/structure/closet/crate/secure/science
containername = "Jumper kit crate"
access = access_robotics
/datum/supply_pack/robotics/bike
name = "Spacebike Crate"
contains = list()
cost = 350
containertype = /obj/structure/largecrate/vehicle/bike
containername = "Spacebike Crate"
/datum/supply_pack/robotics/quadbike
name = "ATV Crate"
contains = list()
cost = 300
containertype = /obj/structure/largecrate/vehicle/quadbike
containername = "ATV Crate"
/datum/supply_pack/robotics/quadtrailer
name = "ATV Trailer Crate"
contains = list()
cost = 250
containertype = /obj/structure/largecrate/vehicle/quadtrailer
containername = "ATV Trailer Crate"

View File

@@ -1,4 +1,4 @@
/datum/supply_packs/robotics/mecha_gopher
/datum/supply_pack/robotics/mecha_gopher
name = "Circuit Crate (\"Gopher\" APLU)"
contains = list(
/obj/item/weapon/circuitboard/mecha/gopher/main,
@@ -9,7 +9,7 @@
containername = "APLU \"Gopher\" Circuit Crate"
access = access_robotics
/datum/supply_packs/robotics/mecha_polecat
/datum/supply_pack/robotics/mecha_polecat
name = "Circuit Crate (\"Polecat\" APLU)"
contains = list(
/obj/item/weapon/circuitboard/mecha/polecat/main,
@@ -21,7 +21,7 @@
containername = "APLU \"Polecat\" Circuit Crate"
access = access_robotics
/datum/supply_packs/robotics/mecha_weasel
/datum/supply_pack/robotics/mecha_weasel
name = "Circuit Crate (\"Weasel\" APLU)"
contains = list(
/obj/item/weapon/circuitboard/mecha/weasel/main,
@@ -33,7 +33,7 @@
containername = "APLU \"Weasel\" Circuit Crate"
access = access_robotics
/datum/supply_packs/robotics/some_robolimbs
/datum/supply_pack/robotics/some_robolimbs
name = "Basic Robolimb Blueprints"
contains = list(
/obj/item/weapon/disk/limb/morpheus,
@@ -45,7 +45,7 @@
containername = "Basic Robolimb Blueprint Crate"
access = access_robotics
/datum/supply_packs/robotics/all_robolimbs
/datum/supply_pack/robotics/all_robolimbs
name = "Advanced Robolimb Blueprints"
contains = list(
/obj/item/weapon/disk/limb/bishop,

View File

@@ -2,25 +2,17 @@
* Here is where any supply packs
* related to security tasks live
*/
/datum/supply_packs/sci
/datum/supply_pack/sci
group = "Science"
/datum/supply_packs/sci/virus
name = "Virus sample crate"
contains = list(/obj/item/weapon/virusdish/random = 4)
cost = 25
containertype = "/obj/structure/closet/crate/secure"
containername = "Virus sample crate"
access = access_cmo
/datum/supply_packs/sci/coolanttank
/datum/supply_pack/sci/coolanttank
name = "Coolant tank crate"
contains = list(/obj/structure/reagent_dispensers/coolanttank)
cost = 15
containertype = /obj/structure/largecrate
containername = "coolant tank crate"
/datum/supply_packs/sci/phoron
/datum/supply_pack/sci/phoron
name = "Phoron research crate"
contains = list(
/obj/item/weapon/tank/phoron = 3,
@@ -36,7 +28,7 @@
containername = "Phoron assembly crate"
access = access_tox_storage
/datum/supply_packs/sci/exoticseeds
/datum/supply_pack/sci/exoticseeds
name = "Exotic seeds crate"
contains = list(
/obj/item/seeds/replicapod = 2,
@@ -51,14 +43,14 @@
containername = "Exotic Seeds crate"
access = access_hydroponics
/datum/supply_packs/sci/integrated_circuit_printer
/datum/supply_pack/sci/integrated_circuit_printer
name = "Integrated circuit printer"
contains = list(/obj/item/device/integrated_circuit_printer = 2)
cost = 15
containertype = /obj/structure/closet/crate
containername = "Integrated circuit crate"
/datum/supply_packs/sci/integrated_circuit_printer_upgrade
/datum/supply_pack/sci/integrated_circuit_printer_upgrade
name = "Integrated circuit printer upgrade - advanced designs"
contains = list(/obj/item/weapon/disk/integrated_circuit/upgrade/advanced)
cost = 30

View File

@@ -1,5 +1,5 @@
/*
/datum/supply_packs/sci/dune_buggy
/datum/supply_pack/sci/dune_buggy
name = "Exploration Dune Buggy"
contains = list(
/obj/vehicle/train/rover/engine/dunebuggy
@@ -8,14 +8,14 @@
containertype = /obj/structure/largecrate
containername = "Exploration Dune Buggy Crate"
*/
/datum/supply_packs/sci/pred
/datum/supply_pack/sci/pred
name = "Dangerous Predator crate"
cost = 40
containertype = /obj/structure/largecrate/animal/pred
containername = "Dangerous Predator crate"
access = access_xenobiology
/datum/supply_packs/sci/pred_doom
/datum/supply_pack/sci/pred_doom
name = "EXTREMELY Dangerous Predator crate"
cost = 200
containertype = /obj/structure/largecrate/animal/dangerous
@@ -23,14 +23,14 @@
access = access_xenobiology
contraband = 1
/datum/supply_packs/sci/otie
/datum/supply_pack/sci/otie
name = "VARMAcorp adoptable reject (Dangerous!)"
cost = 100
containertype = /obj/structure/largecrate/animal/otie
containername = "VARMAcorp adoptable reject (Dangerous!)"
access = access_xenobiology
/datum/supply_packs/sci/phoronotie
/datum/supply_pack/sci/phoronotie
name = "VARMAcorp adaptive beta subject (Experimental)"
cost = 200
containertype = /obj/structure/largecrate/animal/otie/phoron

View File

@@ -4,15 +4,15 @@
*/
/datum/supply_packs/security
/datum/supply_pack/security
group = "Security"
access = access_security
/datum/supply_packs/randomised/security
/datum/supply_pack/randomised/security
group = "Security"
access = access_security
/datum/supply_packs/randomised/security/armor
/datum/supply_pack/randomised/security/armor
name = "Armor - Security armor"
num_contained = 5
contains = list(
@@ -33,7 +33,7 @@
containername = "Armor crate"
access_armory //VOREStation Add - Armor is for the armory.
/datum/supply_packs/security/riot_gear
/datum/supply_pack/security/riot_gear
name = "Gear - Riot"
contains = list(
/obj/item/weapon/melee/baton = 3,
@@ -48,7 +48,7 @@
containername = "Riot gear crate"
access = access_armory
/datum/supply_packs/security/riot_armor
/datum/supply_pack/security/riot_armor
name = "Armor - Riot"
contains = list(
/obj/item/clothing/head/helmet/riot,
@@ -61,7 +61,7 @@
containername = "Riot armor crate"
access = access_armory
/datum/supply_packs/security/ablative_armor
/datum/supply_pack/security/ablative_armor
name = "Armor - Ablative"
contains = list(
/obj/item/clothing/head/helmet/laserproof,
@@ -74,7 +74,7 @@
containername = "Ablative armor crate"
access = access_armory
/datum/supply_packs/security/bullet_resistant_armor
/datum/supply_pack/security/bullet_resistant_armor
name = "Armor - Ballistic"
contains = list(
/obj/item/clothing/head/helmet/bulletproof,
@@ -87,7 +87,7 @@
containername = "Ballistic armor crate"
access = access_armory
/* VOREStation Removal - Howabout no ERT armor being orderable?
/datum/supply_packs/security/combat_armor
/datum/supply_pack/security/combat_armor
name = "Armor - Combat"
contains = list(
/obj/item/clothing/head/helmet/combat,
@@ -100,7 +100,7 @@
containername = "Combat armor crate"
access = access_armory
/datum/supply_packs/security/tactical
/datum/supply_pack/security/tactical
name = "Armor - Tactical"
containertype = /obj/structure/closet/crate/secure/gear
containername = "Tactical armor crate"
@@ -125,7 +125,7 @@
/obj/item/clothing/gloves/black
)
*/
/datum/supply_packs/security/securitybarriers
/datum/supply_pack/security/securitybarriers
name = "Misc - Security Barriers"
contains = list(/obj/machinery/deployable/barrier = 4)
cost = 20
@@ -133,7 +133,7 @@
containername = "Security barrier crate"
access = null
/datum/supply_packs/security/securityshieldgen
/datum/supply_pack/security/securityshieldgen
name = "Misc - Wall shield generators"
contains = list(/obj/machinery/shieldwallgen = 4)
cost = 20
@@ -141,7 +141,7 @@
containername = "Wall shield generators crate"
access = access_teleporter
/datum/supply_packs/randomised/security/holster
/datum/supply_pack/randomised/security/holster
name = "Gear - Holsters"
num_contained = 4
contains = list(
@@ -154,7 +154,7 @@
containertype = /obj/structure/closet/crate
containername = "Holster crate"
/datum/supply_packs/security/extragear
/datum/supply_pack/security/extragear
name = "Gear - Security surplus equipment"
contains = list(
/obj/item/weapon/storage/belt/security = 3,
@@ -166,7 +166,7 @@
containertype = /obj/structure/closet/crate
containername = "Security surplus equipment"
/datum/supply_packs/security/detectivegear
/datum/supply_pack/security/detectivegear
name = "Forensic - Investigation equipment"
contains = list(
/obj/item/weapon/storage/box/evidence = 2,
@@ -193,7 +193,7 @@
containername = "Forensic equipment"
access = access_forensics_lockers
/datum/supply_packs/security/detectiveclothes
/datum/supply_pack/security/detectiveclothes
name = "Forensic - Investigation apparel"
contains = list(
/obj/item/clothing/under/det/black = 2,
@@ -215,7 +215,7 @@
containername = "Investigation clothing"
access = access_forensics_lockers
/datum/supply_packs/security/officergear
/datum/supply_pack/security/officergear
name = "Gear - Officer equipment"
contains = list(
/obj/item/clothing/suit/storage/vest/officer,
@@ -245,7 +245,7 @@
containername = "Officer equipment"
access = access_brig
/datum/supply_packs/security/wardengear
/datum/supply_pack/security/wardengear
name = "Gear - Warden equipment"
contains = list(
/obj/item/clothing/suit/storage/vest/warden,
@@ -273,7 +273,7 @@
containername = "Warden equipment"
access = access_armory
/datum/supply_packs/security/headofsecgear
/datum/supply_pack/security/headofsecgear
name = "Gear - Head of security equipment"
contains = list(
/obj/item/clothing/head/helmet/HoS,
@@ -299,7 +299,7 @@
containername = "Head of security equipment"
access = access_hos
/datum/supply_packs/security/securityclothing
/datum/supply_pack/security/securityclothing
name = "Misc - Security uniform red"
contains = list(
/obj/item/weapon/storage/backpack/satchel/sec = 2,
@@ -317,7 +317,7 @@
containertype = /obj/structure/closet/crate/secure
containername = "Security uniform crate"
/datum/supply_packs/security/navybluesecurityclothing
/datum/supply_pack/security/navybluesecurityclothing
name = "Misc - Security uniform navy blue"
contains = list(
/obj/item/weapon/storage/backpack/satchel/sec = 2,
@@ -338,7 +338,7 @@
containertype = /obj/structure/closet/crate/secure
containername = "Navy blue security uniform crate"
/datum/supply_packs/security/corporatesecurityclothing
/datum/supply_pack/security/corporatesecurityclothing
name = "Misc - Security uniform corporate"
contains = list(
/obj/item/weapon/storage/backpack/satchel/sec = 2,
@@ -358,7 +358,7 @@
containertype = /obj/structure/closet/crate/secure
containername = "Corporate security uniform crate"
/datum/supply_packs/security/biosuit
/datum/supply_pack/security/biosuit
name = "Gear - Security biohazard gear"
contains = list(
/obj/item/clothing/head/bio_hood/security = 3,

View File

@@ -1,4 +1,4 @@
/datum/supply_packs/security/guardbeast
/datum/supply_pack/security/guardbeast
name = "VARMAcorp autoNOMous security solution"
cost = 150
containertype = /obj/structure/largecrate/animal/guardbeast
@@ -7,7 +7,7 @@
access_security,
access_xenobiology)
/datum/supply_packs/security/guardmutant
/datum/supply_pack/security/guardmutant
name = "VARMAcorp autoNOMous security solution for hostile environments"
cost = 250
containertype = /obj/structure/largecrate/animal/guardmutant
@@ -16,7 +16,7 @@
access_security,
access_xenobiology)
/datum/supply_packs/security/biosuit
/datum/supply_pack/security/biosuit
contains = list(
/obj/item/clothing/head/bio_hood/security = 3,
/obj/item/clothing/under/rank/security = 3,

View File

@@ -3,10 +3,10 @@
* related to civilian tasks live
*/
/datum/supply_packs/supply
/datum/supply_pack/supply
group = "Supplies"
/datum/supply_packs/supply/food
/datum/supply_pack/supply/food
name = "Kitchen supply crate"
contains = list(
/obj/item/weapon/reagent_containers/food/condiment/flour = 6,
@@ -20,14 +20,14 @@
containertype = /obj/structure/closet/crate/freezer
containername = "Food crate"
/datum/supply_packs/supply/toner
/datum/supply_pack/supply/toner
name = "Toner cartridges"
contains = list(/obj/item/device/toner = 6)
cost = 10
containertype = /obj/structure/closet/crate
containername = "Toner cartridges"
/datum/supply_packs/supply/janitor
/datum/supply_pack/supply/janitor
name = "Janitorial supplies"
contains = list(
/obj/item/weapon/reagent_containers/glass/bucket,
@@ -50,7 +50,7 @@
containertype = /obj/structure/closet/crate
containername = "Janitorial supplies"
/datum/supply_packs/supply/shipping
/datum/supply_pack/supply/shipping
name = "Shipping supplies"
contains = list(
/obj/fiftyspawner/cardboard,
@@ -58,13 +58,13 @@
/obj/item/weapon/wrapping_paper = 2,
/obj/item/device/destTagger,
/obj/item/weapon/hand_labeler,
/obj/item/weapon/wirecutters,
/obj/item/weapon/tool/wirecutters,
/obj/item/weapon/tape_roll = 2)
cost = 10
containertype = "/obj/structure/closet/crate"
containername = "Shipping supplies crate"
/datum/supply_packs/supply/bureaucracy
/datum/supply_pack/supply/bureaucracy
contains = list(
/obj/item/weapon/clipboard = 2,
/obj/item/weapon/pen/red,
@@ -84,14 +84,14 @@
containertype = /obj/structure/closet/crate
containername = "Office supplies crate"
/datum/supply_packs/supply/spare_pda
/datum/supply_pack/supply/spare_pda
name = "Spare PDAs"
cost = 10
containertype = /obj/structure/closet/crate
containername = "Spare PDA crate"
contains = list(/obj/item/device/pda = 3)
/datum/supply_packs/supply/minergear
/datum/supply_pack/supply/minergear
name = "Shaft miner equipment"
contains = list(
/obj/item/weapon/storage/backpack/industrial,
@@ -114,24 +114,24 @@
containertype = "/obj/structure/closet/crate/secure"
containername = "Shaft miner equipment"
access = access_mining
/* //VOREStation Edit
/datum/supply_packs/supply/mule
/* //VOREStation Edit - Pointless on Tether.
/datum/supply_pack/supply/mule
name = "Mulebot Crate"
contains = list()
cost = 20
containertype = /obj/structure/largecrate/animal/mulebot
containername = "Mulebot Crate"
*/ //VOREStation Edit
/datum/supply_packs/supply/cargotrain
/datum/supply_pack/supply/cargotrain
name = "Cargo Train Tug"
contains = list(/obj/vehicle/train/cargo/engine)
contains = list(/obj/vehicle/train/engine)
cost = 35
containertype = /obj/structure/largecrate
containername = "Cargo Train Tug Crate"
/datum/supply_packs/supply/cargotrailer
/datum/supply_pack/supply/cargotrailer
name = "Cargo Train Trolley"
contains = list(/obj/vehicle/train/cargo/trolley)
contains = list(/obj/vehicle/train/trolley)
cost = 15
containertype = /obj/structure/largecrate
containername = "Cargo Train Trolley Crate"

View File

@@ -4,6 +4,7 @@
//ANOTER NOTE: Contraband is obtainable through modified supplycomp circuitboards.
//BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle.
//NEW NOTE: Do NOT set the price of any crates below 7 points. Doing so allows infinite points.
//NOTE NOTE: Hidden var is now deprecated, whoever removed support for it should've removed the var altogether
//var/list/all_supply_groups = list("Operations","Security","Hospitality","Engineering","Atmospherics","Medical","Reagents","Reagent Cartridges","Science","Hydroponics", "Supply", "Miscellaneous")
var/list/all_supply_groups = list("Atmospherics",
@@ -24,30 +25,35 @@ var/list/all_supply_groups = list("Atmospherics",
"Supplies",
"Voidsuits")
/datum/supply_packs
/datum/supply_pack
var/name = null
var/list/contains = list()
var/manifest = ""
var/list/contains = list() // Typepaths, used to actually spawn the contents
var/list/manifest = list() // Object names, used to compile manifests
var/cost = null
var/containertype = null
var/containername = null
var/access = null
var/hidden = 0
var/contraband = 0
var/num_contained = 0 //number of items picked to be contained in a /randomised crate
var/group = "Miscellaneous"
/datum/supply_packs/New()
manifest += "<ul>"
/datum/supply_pack/New()
for(var/path in contains)
if(!path || !ispath(path, /atom))
continue
var/atom/O = path
manifest += "<li>[initial(O.name)]</li>"
manifest += "</ul>"
manifest += "\proper[initial(O.name)]"
/datum/supply_packs/randomised
var/num_contained //number of items picked to be contained in a randomised crate
/datum/supply_pack/proc/get_html_manifest()
var/dat = ""
if(num_contained)
dat +="Contains any [num_contained] of:"
dat += "<ul>"
for(var/O in manifest)
dat += "<li>[O]</li>"
dat += "</ul>"
return dat
/datum/supply_packs/randomised/New()
manifest += "Contains any [num_contained] of:"
..()
// Keeping this subtype here for posterity, so it's more apparent that this is the subtype to use if making new randomised packs
/datum/supply_pack/randomised
num_contained = 1

View File

@@ -4,10 +4,10 @@
*/
/datum/supply_packs/voidsuits
/datum/supply_pack/voidsuits
group = "Voidsuits"
/datum/supply_packs/voidsuits/atmos
/datum/supply_pack/voidsuits/atmos
name = "Atmospheric voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/atmos = 2,
@@ -21,7 +21,7 @@
containername = "Atmospheric voidsuit crate"
access = access_atmospherics
/datum/supply_packs/voidsuits/atmos/alt
/datum/supply_pack/voidsuits/atmos/alt
name = "Heavy Duty Atmospheric voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/atmos/alt = 2,
@@ -35,7 +35,7 @@
containername = "Heavy Duty Atmospheric voidsuit crate"
access = access_atmospherics
/datum/supply_packs/voidsuits/engineering
/datum/supply_pack/voidsuits/engineering
name = "Engineering voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/engineering = 2,
@@ -49,7 +49,7 @@
containername = "Engineering voidsuit crate"
access = access_engine_equip
/datum/supply_packs/voidsuits/engineering/construction
/datum/supply_pack/voidsuits/engineering/construction
name = "Engineering Construction voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/engineering/construction = 2,
@@ -63,7 +63,7 @@
containername = "Engineering Construction voidsuit crate"
access = access_engine_equip
/datum/supply_packs/voidsuits/engineering/hazmat
/datum/supply_pack/voidsuits/engineering/hazmat
name = "Engineering Hazmat voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/engineering/hazmat = 2,
@@ -77,7 +77,7 @@
containername = "Engineering Hazmat voidsuit crate"
access = access_engine_equip
/datum/supply_packs/voidsuits/engineering/alt
/datum/supply_pack/voidsuits/engineering/alt
name = "Reinforced Engineering voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/engineering/alt = 2,
@@ -91,7 +91,7 @@
containername = "Reinforced Engineering voidsuit crate"
access = access_engine_equip
/datum/supply_packs/voidsuits/medical
/datum/supply_pack/voidsuits/medical
name = "Medical voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/medical = 2,
@@ -105,7 +105,7 @@
containername = "Medical voidsuit crate"
access = access_medical_equip
/datum/supply_packs/voidsuits/medical/emt
/datum/supply_pack/voidsuits/medical/emt
name = "Medical EMT voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/medical/emt = 2,
@@ -119,7 +119,7 @@
containername = "Medical EMT voidsuit crate"
access = access_medical_equip
/datum/supply_packs/voidsuits/medical/bio
/datum/supply_pack/voidsuits/medical/bio
name = "Medical Biohazard voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/medical/bio = 2,
@@ -133,7 +133,7 @@
containername = "Medical Biohazard voidsuit crate"
access = access_medical_equip
/datum/supply_packs/voidsuits/medical/alt
/datum/supply_pack/voidsuits/medical/alt
name = "Vey-Med Medical voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/medical/alt = 2,
@@ -147,7 +147,7 @@
containername = "Vey-Med Medical voidsuit crate"
access = access_medical_equip
/datum/supply_packs/voidsuits/security
/datum/supply_pack/voidsuits/security
name = "Security voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/security = 2,
@@ -160,7 +160,7 @@
containertype = "/obj/structure/closet/crate/secure"
containername = "Security voidsuit crate"
/datum/supply_packs/voidsuits/security/crowd
/datum/supply_pack/voidsuits/security/crowd
name = "Security Crowd Control voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/security/riot = 2,
@@ -174,7 +174,7 @@
containername = "Security Crowd Control voidsuit crate"
access = access_armory
/datum/supply_packs/voidsuits/security/alt
/datum/supply_pack/voidsuits/security/alt
name = "Security EVA Riot voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/security/alt = 2,
@@ -188,7 +188,7 @@
containername = "Security EVA Riot voidsuit crate"
access = access_armory
/datum/supply_packs/voidsuits/supply
/datum/supply_pack/voidsuits/supply
name = "Mining voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/mining = 2,
@@ -201,7 +201,7 @@
containername = "Mining voidsuit crate"
access = access_mining
/datum/supply_packs/voidsuits/supply/alt
/datum/supply_pack/voidsuits/supply/alt
name = "Frontier Mining voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/mining/alt = 2,

Some files were not shown because too many files have changed in this diff Show More