Merge branch 'master' of https://github.com/Yawn-Wider/YWPolarisVore into August2020UpstreamPull

August2020UpstreamPull
This commit is contained in:
Razgriz
2020-08-09 02:58:18 -07:00
915 changed files with 253357 additions and 90809 deletions
+6
View File
@@ -12,6 +12,12 @@
materials = list(DEFAULT_WALL_MATERIAL = 1337)
hidden = 1
/datum/design/item/autolathe/arms/shotgun_drum_empty
name = "shotgun 12g drum magazine (Empty)"
id = "shotgun_empty_drum_magazine"
build_path = /obj/item/ammo_magazine/m12gdrumjack/empty
materials = list(DEFAULT_WALL_MATERIAL = 1625) //Why these cost so much ? the normal ones have 13000 matter so i just multiplied by 1.25(default) don't know why it costs so much
//printable boxes of shotgun ammo, by KK
//the prices are rounded up to the cost of nine shells, but compared to printing a bunch of speedloaders you get a small discount. honestly the speedloaders are overpriced (the metal frame is somehow more expensive than a third shell!) but take it up with polaris.
/datum/design/item/autolathe/arms/ammobox/shotgun_box_beanbag
+2 -2
View File
@@ -90,13 +90,13 @@
id = "papershredder_electronics"
build_path = /obj/item/weapon/circuitboard/papershredder
materials = list(DEFAULT_WALL_MATERIAL = 62, "glass" = 62)
/* Commented out for build errors
/datum/design/item/autolathe/engineering/microwave
name = "microwave electronics"
id = "microwave_electronics"
build_path = /obj/item/weapon/circuitboard/microwave
materials = list(DEFAULT_WALL_MATERIAL = 62, "glass" = 62)
*/
/datum/design/item/autolathe/engineering/washing
name = "washing machine electronics"
id = "washingmachine_electronics"
+4
View File
@@ -54,6 +54,10 @@
name = "jar"
path =/obj/item/glass_jar
/datum/category_item/autolathe/general/fishtank
name = "fish tank"
path =/obj/item/glass_jar
/datum/category_item/autolathe/general/radio_headset
name = "radio headset"
path =/obj/item/device/radio/headset
+2
View File
@@ -445,6 +445,8 @@ var/global/list/PDA_Manifest = list()
G.fields["religion"] = "Unknown"
G.fields["photo_front"] = front
G.fields["photo_side"] = side
G.fields["photo-south"] = "'data:image/png;base64,[icon2base64(front)]'"
G.fields["photo-west"] = "'data:image/png;base64,[icon2base64(side)]'"
G.fields["notes"] = "No notes found."
if(hidden)
hidden_general += G
+3 -1
View File
@@ -202,7 +202,9 @@
var/obj/belly/destination_belly = destination.loc
var/mob/living/telenommer = destination_belly.owner
if(istype(telenommer))
if(!isliving(teleatom))
if(istype(teleatom, /obj/machinery) || istype(teleatom, /obj/structure))
return 0
else if(!isliving(teleatom))
return 1
else
var/mob/living/telemob = teleatom
+1 -1
View File
@@ -6,7 +6,7 @@
glasses = /obj/item/clothing/glasses/thermal/plain/eyepatch
mask = /obj/item/clothing/mask/smokable/cigarette/cigar/havana
head = /obj/item/clothing/head/beret //deathsquad
belt = /obj/item/weapon/gun/energy/pulse_rifle/M1911
belt = /obj/item/weapon/gun/energy/pulse_rifle/compact/admin
back = /obj/item/weapon/storage/backpack/satchel
shoes = /obj/item/clothing/shoes/boots/combat
gloves = /obj/item/clothing/gloves/combat
-49
View File
@@ -1,49 +0,0 @@
var/global/datum/repository/cameras/camera_repository = new()
/proc/invalidateCameraCache()
camera_repository.networks.Cut()
camera_repository.invalidated = 1
camera_repository.camera_cache_id = (++camera_repository.camera_cache_id % 999999)
/datum/repository/cameras
var/list/networks
var/invalidated = 1
var/camera_cache_id = 1
/datum/repository/cameras/New()
networks = list()
..()
/datum/repository/cameras/proc/cameras_in_network(var/network, var/list/zlevels)
setup_cache()
var/list/network_list = networks[network]
if(LAZYLEN(zlevels))
var/list/filtered_cameras = list()
for(var/list/C in network_list)
//Camera is marked as always-visible
if(C["omni"])
filtered_cameras[++filtered_cameras.len] = C
continue
//Camera might be in an adjacent zlevel
var/camz = C["z"]
if(!camz) //It's inside something (helmet, communicator, etc) or nullspace or who knows
camz = get_z(locate(C["camera"]) in cameranet.cameras)
if(camz in zlevels)
filtered_cameras[++filtered_cameras.len] = C //Can't add lists to lists with +=
return filtered_cameras
else
return network_list
/datum/repository/cameras/proc/setup_cache()
if(!invalidated)
return
invalidated = 0
cameranet.process_sort()
for(var/obj/machinery/camera/C in cameranet.cameras)
var/cam = C.nano_structure()
for(var/network in C.network)
if(!networks[network])
networks[network] = list()
var/list/netlist = networks[network]
netlist[++netlist.len] = cam
+1
View File
@@ -51,6 +51,7 @@ var/global/datum/repository/crew/crew_repository = new()
crewmemberData["area"] = sanitize(A.get_name())
crewmemberData["x"] = pos.x
crewmemberData["y"] = pos.y
crewmemberData["realZ"] = pos.z
crewmemberData["z"] = using_map.get_zlevel_name(pos.z)
crewmembers[++crewmembers.len] = crewmemberData
+12 -12
View File
@@ -11,42 +11,42 @@
name = "Inflatable barriers"
contains = list(/obj/item/weapon/storage/briefcase/inflatable = 3)
cost = 20
containertype = /obj/structure/closet/crate/engineering
containertype = /obj/structure/closet/crate/aether
containername = "Inflatable Barrier Crate"
/datum/supply_pack/atmos/canister_empty
name = "Empty gas canister"
cost = 7
containername = "Empty gas canister crate"
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/aether
contains = list(/obj/machinery/portable_atmospherics/canister)
/datum/supply_pack/atmos/canister_air
name = "Air canister"
cost = 10
containername = "Air canister crate"
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/aether
contains = list(/obj/machinery/portable_atmospherics/canister/air)
/datum/supply_pack/atmos/canister_oxygen
name = "Oxygen canister"
cost = 15
containername = "Oxygen canister crate"
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/aether
contains = list(/obj/machinery/portable_atmospherics/canister/oxygen)
/datum/supply_pack/atmos/canister_nitrogen
name = "Nitrogen canister"
cost = 10
containername = "Nitrogen canister crate"
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/aether
contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen)
/datum/supply_pack/atmos/canister_phoron
name = "Phoron gas canister"
cost = 60
containername = "Phoron gas canister crate"
containertype = /obj/structure/closet/crate/secure/large
containertype = /obj/structure/closet/crate/secure/large/aether
access = access_atmospherics
contains = list(/obj/machinery/portable_atmospherics/canister/phoron)
@@ -54,7 +54,7 @@
name = "N2O gas canister"
cost = 15
containername = "N2O gas canister crate"
containertype = /obj/structure/closet/crate/secure/large
containertype = /obj/structure/closet/crate/secure/large/aether
access = access_atmospherics
contains = list(/obj/machinery/portable_atmospherics/canister/sleeping_agent)
@@ -62,7 +62,7 @@
name = "Carbon dioxide gas canister"
cost = 15
containername = "CO2 canister crate"
containertype = /obj/structure/closet/crate/secure/large
containertype = /obj/structure/closet/crate/secure/large/aether
access = access_atmospherics
contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide)
@@ -70,7 +70,7 @@
contains = list(/obj/machinery/pipedispenser/orderable)
name = "Pipe Dispenser"
cost = 25
containertype = /obj/structure/closet/crate/secure/large
containertype = /obj/structure/closet/crate/secure/large/aether
containername = "Pipe Dispenser Crate"
access = access_atmospherics
@@ -78,7 +78,7 @@
contains = list(/obj/machinery/pipedispenser/disposal/orderable)
name = "Disposals Pipe Dispenser"
cost = 25
containertype = /obj/structure/closet/crate/secure/large
containertype = /obj/structure/closet/crate/secure/large/aether
containername = "Disposal Dispenser Crate"
access = access_atmospherics
@@ -89,7 +89,7 @@
/obj/item/weapon/tank/air = 3
)
cost = 10
containertype = /obj/structure/closet/crate/internals
containertype = /obj/structure/closet/crate/aether
containername = "Internals crate"
/datum/supply_pack/atmos/evacuation
@@ -104,5 +104,5 @@
/obj/item/clothing/mask/gas = 4
)
cost = 35
containertype = /obj/structure/closet/crate/internals
containertype = /obj/structure/closet/crate/aether
containername = "Emergency crate"
+6 -6
View File
@@ -14,7 +14,7 @@
)
name = "Contraband crate"
cost = 500
cost = 25
containertype = /obj/structure/closet/crate
containername = "Unlabeled crate"
contraband = 1
@@ -27,8 +27,8 @@
/obj/item/weapon/grenade/smokebomb = 4,
/obj/item/weapon/grenade/chem_grenade/incendiary
)
cost = 500
containertype = /obj/structure/closet/crate
cost = 25
containertype = /obj/structure/closet/crate/weapon
containername = "Special Ops crate"
contraband = 1
@@ -39,7 +39,7 @@
/obj/item/weapon/reagent_containers/food/snacks/unajerky = 4
)
cost = 25
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/unathi
containername = "Moghes imports crate"
contraband = 1
@@ -51,7 +51,7 @@
)
cost = 1000
contraband = 1
containertype = /obj/structure/closet/crate/secure/weapon
containertype = /obj/structure/closet/crate/hedberg
containername = "Ballistic weapons crate"
/datum/supply_pack/randomised/misc/telecrate
@@ -95,5 +95,5 @@
)
cost = 400 //price,
contraband = 1
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large
containername = "Suspicious crate"
+13 -13
View File
@@ -1,6 +1,6 @@
/*
* Here is where any supply packs
* related to weapons live.
* related to costumes live.
*/
@@ -19,7 +19,7 @@
/obj/item/clothing/head/wizard/fake
)
cost = 20
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/nanothreads
containername = "Wizard costume crate"
/datum/supply_pack/randomised/costumes/hats
@@ -48,8 +48,8 @@
)
name = "Collectable hat crate!"
cost = 200
containertype = /obj/structure/closet/crate
containername = "Collectable hats crate! Brought to you by Bass.inc!"
containertype = /obj/structure/closet/crate/nanothreads
containername = "Collectable hats crate"
/datum/supply_pack/randomised/costumes/costume
num_contained = 3
@@ -84,7 +84,7 @@
)
name = "Costumes crate"
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/nanothreads
containername = "Actor Costumes"
/datum/supply_pack/costumes/formal_wear
@@ -104,15 +104,15 @@
/obj/item/clothing/shoes/leather,
/obj/item/clothing/accessory/wcoat
)
name = "Formalwear closet"
name = "Formalwear (Suits)"
cost = 30
containertype = /obj/structure/closet
containername = "Formalwear for the best occasions."
containertype = /obj/structure/closet/crate/gilthari
containername = "Formal suit crate"
datum/supply_pack/costumes/witch
name = "Witch costume"
containername = "Witch costume"
containertype = /obj/structure/closet
containertype = /obj/structure/closet/crate/nanothreads
cost = 20
contains = list(
/obj/item/clothing/suit/wizrobe/marisa/fake,
@@ -124,7 +124,7 @@ datum/supply_pack/costumes/witch
/datum/supply_pack/randomised/costumes/costume_hats
name = "Costume hats"
containername = "Actor hats crate"
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/nanothreads
cost = 10
num_contained = 3
contains = list(
@@ -147,9 +147,9 @@ datum/supply_pack/costumes/witch
)
/datum/supply_pack/randomised/costumes/dresses
name = "Womens formal dress locker"
containername = "Pretty dress locker"
containertype = /obj/structure/closet
name = "Formalwear (Dresses)"
containername = "Formal dress crate"
containertype = /obj/structure/closet/crate/gilthari
cost = 15
num_contained = 3
contains = list(
+88 -36
View File
@@ -11,30 +11,72 @@
name = "Replacement lights"
contains = list(/obj/item/weapon/storage/box/lights/mixed = 3)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/galaksi
containername = "Replacement lights"
/datum/supply_pack/eng/smescoil
name = "Superconducting Magnetic Coil"
contains = list(/obj/item/weapon/smes_coil)
cost = 75
containertype = /obj/structure/closet/crate/engineering
containertype = /obj/structure/closet/crate/focalpoint
containername = "Superconducting Magnetic Coil crate"
/datum/supply_pack/eng/smescoil/super_capacity
name = "Superconducting Capacitance Coil"
contains = list(/obj/item/weapon/smes_coil/super_capacity)
cost = 90
containertype = /obj/structure/closet/crate/engineering
containertype = /obj/structure/closet/crate/focalpoint
containername = "Superconducting Capacitance Coil crate"
/datum/supply_pack/eng/smescoil/super_io
name = "Superconducting Transmission Coil"
contains = list(/obj/item/weapon/smes_coil/super_io)
cost = 90
containertype = /obj/structure/closet/crate/engineering
containertype = /obj/structure/closet/crate/focalpoint
containername = "Superconducting Transmission Coil crate"
/datum/supply_pack/eng/shield_capacitor
name = "Shield Capacitor"
contains = list(/obj/machinery/shield_capacitor)
cost = 20
containertype = /obj/structure/closet/crate/focalpoint
containername = "shield capacitor crate"
/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/focalpoint
containername = "advanced shield capacitor crate"
/datum/supply_pack/eng/bubble_shield
name = "Bubble Shield Generator"
contains = list(/obj/machinery/shield_gen)
cost = 40
containertype =/obj/structure/closet/crate/focalpoint
containername = "shield bubble generator crate"
/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/focalpoint
containername = "advanced bubble shield generator crate"
/datum/supply_pack/eng/hull_shield
name = "Hull Shield Generator"
contains = list(/obj/machinery/shield_gen/external)
cost = 80
containertype = /obj/structure/closet/crate/focalpoint
containername = "shield hull generator crate"
/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/focalpoint
containername = "advanced hull shield generator crate"
/datum/supply_pack/eng/electrical
name = "Electrical maintenance crate"
contains = list(
@@ -44,7 +86,7 @@
/obj/item/weapon/cell/high = 2
)
cost = 10
containertype = /obj/structure/closet/crate/engineering/electrical
containertype = /obj/structure/closet/crate/ward
containername = "Electrical maintenance crate"
/datum/supply_pack/eng/e_welders
@@ -53,7 +95,7 @@
/obj/item/weapon/weldingtool/electric = 3
)
cost = 15
containertype = /obj/structure/closet/crate/engineering/electrical
containertype = /obj/structure/closet/crate/ward
containername = "Electric welder crate"
/datum/supply_pack/eng/mechanical
@@ -65,14 +107,14 @@
/obj/item/clothing/head/hardhat
)
cost = 10
containertype = /obj/structure/closet/crate/engineering
containertype = /obj/structure/closet/crate/xion
containername = "Mechanical maintenance crate"
/datum/supply_pack/eng/fueltank
name = "Fuel tank crate"
contains = list(/obj/structure/reagent_dispensers/fueltank)
cost = 10
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/nanotrasen
containername = "fuel tank crate"
/datum/supply_pack/eng/solar
@@ -84,35 +126,35 @@
/obj/item/weapon/paper/solar
)
cost = 20
containertype = /obj/structure/closet/crate/engineering
containertype = /obj/structure/closet/crate/einstein
containername = "Solar pack crate"
/datum/supply_pack/eng/engine
name = "Emitter crate"
contains = list(/obj/machinery/power/emitter = 2)
cost = 10
containertype = /obj/structure/closet/crate/secure/engineering
containertype = /obj/structure/closet/crate/secure/einstein
containername = "Emitter crate"
access = access_ce
/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
containertype = /obj/structure/closet/crate/secure/xion
containername = "Field Generator crate"
access = access_ce
/datum/supply_pack/eng/engine/sing_gen
name = "Singularity Generator crate"
contains = list(/obj/machinery/the_singularitygen)
containertype = /obj/structure/closet/crate/secure/engineering
containertype = /obj/structure/closet/crate/secure/einstein
containername = "Singularity Generator crate"
access = access_ce
/datum/supply_pack/eng/engine/collector
name = "Collector crate"
contains = list(/obj/machinery/power/rad_collector = 3)
containertype = /obj/structure/closet/crate/secure/engineering
containertype = /obj/structure/closet/crate/secure/einstein
containername = "Collector crate"
/datum/supply_pack/eng/engine/PA
@@ -127,23 +169,33 @@
/obj/structure/particle_accelerator/power_box,
/obj/structure/particle_accelerator/end_cap
)
containertype = /obj/structure/closet/crate/secure/engineering
containertype = /obj/structure/closet/crate/secure/einstein
containername = "Particle Accelerator crate"
access = access_ce
/datum/supply_pack/eng/shield_generator
name = "Shield Generator Construction Kit"
contains = list(
/obj/item/weapon/circuitboard/shield_generator,
/obj/item/weapon/stock_parts/capacitor,
/obj/item/weapon/stock_parts/micro_laser,
/obj/item/weapon/smes_coil,
/obj/item/weapon/stock_parts/console_screen,
/obj/item/weapon/stock_parts/subspace/amplifier
)
cost = 80
containertype = /obj/structure/closet/crate/engineering
containername = "shield generator construction kit crate"
/datum/supply_pack/eng/shield_gen
contains = list(/obj/item/weapon/circuitboard/shield_gen)
name = "Bubble shield generator circuitry"
cost = 30
containertype = /obj/structure/closet/crate/secure/focalpoint
containername = "bubble shield generator circuitry crate"
access = access_ce
/datum/supply_pack/eng/shield_gen_ex
contains = list(/obj/item/weapon/circuitboard/shield_gen_ex)
name = "Hull shield generator circuitry"
cost = 30
containertype = /obj/structure/closet/crate/secure/focalpoint
containername = "hull shield generator circuitry crate"
access = access_ce
/datum/supply_pack/eng/shield_cap
contains = list(/obj/item/weapon/circuitboard/shield_cap)
name = "Bubble shield capacitor circuitry"
cost = 30
containertype = /obj/structure/closet/crate/secure/focalpoint
containername = "shield capacitor circuitry crate"
access = access_ce
/datum/supply_pack/eng/smbig
name = "Supermatter Core"
@@ -157,7 +209,7 @@
contains = list(/obj/machinery/power/generator)
name = "Mark I Thermoelectric Generator"
cost = 40
containertype = /obj/structure/closet/crate/secure/large
containertype = /obj/structure/closet/crate/secure/large/einstein
containername = "Mk1 TEG crate"
access = access_engine
@@ -165,7 +217,7 @@
contains = list(/obj/machinery/atmospherics/binary/circulator)
name = "Binary atmospheric circulator"
cost = 20
containertype = /obj/structure/closet/crate/secure/large
containertype = /obj/structure/closet/crate/secure/large/einstein
containername = "Atmospheric circulator crate"
access = access_engine
@@ -183,7 +235,7 @@
name = "P.A.C.M.A.N. portable generator parts"
cost = 25
containername = "P.A.C.M.A.N. Portable Generator Construction Kit"
containertype = /obj/structure/closet/crate/secure/engineering
containertype = /obj/structure/closet/crate/secure/focalpoint
access = access_tech_storage
contains = list(
/obj/item/weapon/stock_parts/micro_laser,
@@ -196,7 +248,7 @@
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"
containertype = /obj/structure/closet/crate/secure/engineering
containertype = /obj/structure/closet/crate/secure/focalpoint
access = access_tech_storage
contains = list(
/obj/item/weapon/stock_parts/micro_laser,
@@ -209,7 +261,7 @@
name = "R-UST Mk. 8 Tokamak fusion core crate"
cost = 50
containername = "R-UST Mk. 8 Tokamak Fusion Core crate"
containertype = /obj/structure/closet/crate/secure/engineering
containertype = /obj/structure/closet/crate/secure/einstein
access = access_engine
contains = list(
/obj/item/weapon/book/manual/rust_engine,
@@ -221,7 +273,7 @@
name = "R-UST Mk. 8 fuel injector crate"
cost = 30
containername = "R-UST Mk. 8 fuel injector crate"
containertype = /obj/structure/closet/crate/secure/engineering
containertype = /obj/structure/closet/crate/secure/einstein
access = access_engine
contains = list(
/obj/machinery/fusion_fuel_injector,
@@ -233,7 +285,7 @@
name = "Gyrotron crate"
cost = 15
containername = "Gyrotron Crate"
containertype = /obj/structure/closet/crate/secure/engineering
containertype = /obj/structure/closet/crate/secure/einstein
access = access_engine
contains = list(
/obj/machinery/power/emitter/gyrotron,
@@ -244,12 +296,12 @@
name = "Fusion Fuel Compressor circuitry crate"
cost = 10
containername = "Fusion Fuel Compressor circuitry crate"
containertype = /obj/structure/closet/crate/engineering
containertype = /obj/structure/closet/crate/einstein
contains = list(/obj/item/weapon/circuitboard/fusion_fuel_compressor)
/datum/supply_pack/eng/tritium
name = "Tritium crate"
cost = 75
containername = "Tritium crate"
containertype = /obj/structure/closet/crate/engineering
containertype = /obj/structure/closet/crate/einstein
contains = list(/obj/fiftyspawner/tritium)
+14
View File
@@ -1,3 +1,17 @@
/datum/supply_pack/eng/modern_shield
name = "Modern Shield Construction Kit"
contains = list(
/obj/item/weapon/circuitboard/shield_generator,
/obj/item/weapon/stock_parts/capacitor,
/obj/item/weapon/stock_parts/micro_laser,
/obj/item/weapon/smes_coil,
/obj/item/weapon/stock_parts/console_screen,
/obj/item/weapon/stock_parts/subspace/amplifier
)
cost = 80
containertype = /obj/structure/closet/crate/focalpoint
containername = "shield generator construction kit crate"
/datum/supply_pack/eng/thermoregulator
contains = list(/obj/machinery/power/thermoregulator)
name = "Thermal Regulator"
+4 -4
View File
@@ -23,7 +23,7 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 4,
)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/gilthari
containername = "Party equipment"
/datum/supply_pack/hospitality/barsupplies
@@ -43,7 +43,7 @@
/obj/item/weapon/storage/box/glass_extras/sticks
)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/gilthari
containername = "crate of bar supplies"
/datum/supply_pack/hospitality/cookingoil
@@ -67,7 +67,7 @@
)
name = "Surprise pack of five pizzas"
cost = 15
containertype = /obj/structure/closet/crate/freezer
containertype = /obj/structure/closet/crate/freezer/centauri
containername = "Pizza crate"
/datum/supply_pack/hospitality/gifts
@@ -81,5 +81,5 @@
/obj/item/weapon/paper/card/flower
)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/allico
containername = "crate of gifts"
+6 -6
View File
@@ -11,7 +11,7 @@
name = "Monkey crate"
contains = list (/obj/item/weapon/storage/box/monkeycubes)
cost = 20
containertype = /obj/structure/closet/crate/freezer
containertype = /obj/structure/closet/crate/freezer/nanotrasen
containername = "Monkey crate"
/datum/supply_pack/hydro/farwa
@@ -110,7 +110,7 @@
/obj/item/seeds/sugarcaneseed
)
cost = 10
containertype = /obj/structure/closet/crate/hydroponics
containertype = /obj/structure/closet/crate/carp
containername = "Seeds crate"
access = access_hydroponics
@@ -124,7 +124,7 @@
/obj/item/weapon/material/twohanded/fireaxe/scythe
)
cost = 45
containertype = /obj/structure/closet/crate/hydroponics
containertype = /obj/structure/closet/crate/grayson
containername = "Weed control crate"
access = access_hydroponics
@@ -132,7 +132,7 @@
name = "Water tank crate"
contains = list(/obj/structure/reagent_dispensers/watertank)
cost = 10
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/aether
containername = "water tank crate"
/datum/supply_pack/hydro/bee_keeper
@@ -144,14 +144,14 @@
/obj/item/bee_pack
)
cost = 40
containertype = /obj/structure/closet/crate/hydroponics
containertype = /obj/structure/closet/crate/carp
containername = "Beekeeping crate"
access = access_hydroponics
/datum/supply_pack/hydro/tray
name = "Empty hydroponics trays"
cost = 50
containertype = /obj/structure/closet/crate/hydroponics
containertype = /obj/structure/closet/crate/aether
containername = "Hydroponics tray crate"
contains = list(/obj/machinery/portable_atmospherics/hydroponics{anchored = 0} = 3)
access = access_hydroponics
+7 -7
View File
@@ -11,40 +11,40 @@
name = "50 metal sheets"
contains = list(/obj/fiftyspawner/steel)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/grayson
containername = "Metal sheets crate"
/datum/supply_pack/materials/glass50
name = "50 glass sheets"
contains = list(/obj/fiftyspawner/glass)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/grayson
containername = "Glass sheets crate"
/datum/supply_pack/materials/wood50
name = "50 wooden planks"
contains = list(/obj/fiftyspawner/wood)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/grayson
containername = "Wooden planks crate"
/datum/supply_pack/materials/plastic50
name = "50 plastic sheets"
contains = list(/obj/fiftyspawner/plastic)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/grayson
containername = "Plastic sheets crate"
/datum/supply_pack/materials/cardboard_sheets
contains = list(/obj/fiftyspawner/cardboard)
name = "50 cardboard sheets"
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/grayson
containername = "Cardboard sheets crate"
/datum/supply_pack/materials/carpet
name = "Imported carpet"
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/grayson
containername = "Imported carpet crate"
cost = 15
contains = list(
@@ -55,7 +55,7 @@
/datum/supply_pack/misc/linoleum
name = "Linoleum"
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/grayson
containername = "Linoleum crate"
cost = 15
contains = list(/obj/fiftyspawner/linoleum)
+27 -27
View File
@@ -22,28 +22,28 @@
/obj/item/weapon/storage/box/autoinjectors
)
cost = 10
containertype = /obj/structure/closet/crate/medical
containertype = /obj/structure/closet/crate/zenghu
containername = "Medical crate"
/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
containertype = /obj/structure/closet/crate/nanocare
containername = "BloodPack crate"
/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
containertype = /obj/structure/closet/crate/nanocare
containername = "Body bag crate"
/datum/supply_pack/med/cryobag
name = "Stasis bag crate"
contains = list(/obj/item/bodybag/cryobag = 3)
cost = 40
containertype = /obj/structure/closet/crate/medical
containertype = /obj/structure/closet/crate/nanocare
containername = "Stasis bag crate"
/datum/supply_pack/med/surgery
@@ -62,7 +62,7 @@
/obj/item/weapon/surgical/circular_saw
)
cost = 25
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/veymed
containername = "Surgery crate"
access = access_medical
@@ -73,7 +73,7 @@
/obj/item/weapon/storage/box/cdeathalarm_kit
)
cost = 40
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/ward
containername = "Death Alarm crate"
access = access_medical
@@ -83,7 +83,7 @@
/obj/item/weapon/storage/firstaid/clotting
)
cost = 100
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/zenghu
containername = "Clotting Medicine crate"
access = access_medical
@@ -97,7 +97,7 @@
/obj/item/weapon/storage/belt/medical = 3
)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/veymed
containername = "Sterile equipment crate"
/datum/supply_pack/med/extragear
@@ -109,7 +109,7 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/medical = 3
)
cost = 10
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanocare
containername = "Medical surplus equipment"
access = access_medical
@@ -133,7 +133,7 @@
/obj/item/weapon/reagent_containers/syringe
)
cost = 50
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanocare
containername = "Chief medical officer equipment"
access = access_cmo
@@ -156,7 +156,7 @@
/obj/item/weapon/reagent_containers/syringe
)
cost = 20
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanocare
containername = "Medical Doctor equipment"
access = access_medical_equip
@@ -179,7 +179,7 @@
/obj/item/weapon/reagent_containers/syringe
)
cost = 20
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanocare
containername = "Chemist equipment"
access = access_chemistry
@@ -207,7 +207,7 @@
/obj/item/clothing/accessory/storage/white_vest
)
cost = 20
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanocare
containername = "Paramedic equipment"
access = access_medical_equip
@@ -226,7 +226,7 @@
/obj/item/weapon/cartridge/medical
)
cost = 20
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanocare
containername = "Psychiatrist equipment"
access = access_psychiatrist
@@ -247,7 +247,7 @@
/obj/item/weapon/storage/box/gloves
)
cost = 10
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanocare
containername = "Medical scrubs crate"
access = access_medical_equip
@@ -264,7 +264,7 @@
/obj/item/weapon/pen
)
cost = 20
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/veymed
containername = "Autopsy equipment crate"
access = access_morgue
@@ -291,7 +291,7 @@
/obj/item/weapon/storage/box/gloves
)
cost = 10
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanocare
containername = "Medical uniform crate"
access = access_medical_equip
@@ -309,7 +309,7 @@
/obj/item/weapon/storage/box/gloves
)
cost = 50
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanocare
containername = "Medical biohazard equipment"
access = access_medical_equip
@@ -317,7 +317,7 @@
name = "Portable freezers crate"
contains = list(/obj/item/weapon/storage/box/freezer = 7)
cost = 25
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/veymed
containername = "Portable freezers"
access = access_medical_equip
@@ -325,7 +325,7 @@
name = "Virus sample crate"
contains = list(/obj/item/weapon/virusdish/random = 4)
cost = 25
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/zenghu
containername = "Virus sample crate"
access = access_cmo
@@ -333,40 +333,40 @@
name = "Defibrillator crate"
contains = list(/obj/item/device/defib_kit = 2)
cost = 30
containertype = /obj/structure/closet/crate/medical
containertype = /obj/structure/closet/crate/veymed
containername = "Defibrillator crate"
/datum/supply_pack/med/distillery
name = "Chemical distiller crate"
contains = list(/obj/machinery/portable_atmospherics/powered/reagent_distillery = 1)
cost = 50
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/nanotrasen
containername = "Chemical distiller crate"
/datum/supply_pack/med/advdistillery
name = "Industrial Chemical distiller crate"
contains = list(/obj/machinery/portable_atmospherics/powered/reagent_distillery/industrial = 1)
cost = 150
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/xion
containername = "Industrial Chemical distiller crate"
/datum/supply_pack/med/oxypump
name = "Oxygen pump crate"
contains = list(/obj/machinery/oxygen_pump/mobile = 1)
cost = 125
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/xion
containername = "Oxygen pump crate"
/datum/supply_pack/med/anestheticpump
name = "Anesthetic pump crate"
contains = list(/obj/machinery/oxygen_pump/mobile/anesthetic = 1)
cost = 130
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/nanotrasen
containername = "Anesthetic pump crate"
/datum/supply_pack/med/stablepump
name = "Portable stabilizer crate"
contains = list(/obj/machinery/oxygen_pump/mobile/stabilizer = 1)
cost = 175
containertype = /obj/structure/largecrate
containername = "Portable stabilizer crate"
containertype = /obj/structure/closet/crate/large/nanotrasen
containername = "Portable stabilizer crate"
+11 -11
View File
@@ -20,7 +20,7 @@
)
name = "Trading Card Crate"
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/oculum
containername = "cards crate"
/datum/supply_pack/randomised/misc/dnd
@@ -36,7 +36,7 @@
)
name = "Miniatures Crate"
cost = 200
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/oculum
containername = "Miniature Crate"
/datum/supply_pack/randomised/misc/plushies
@@ -88,14 +88,14 @@
//VOREStation Add End
name = "Plushies Crate"
cost = 15
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/allico
containername = "Plushies Crate"
/datum/supply_pack/misc/eftpos
contains = list(/obj/item/device/eftpos)
name = "EFTPOS scanner"
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/nanotrasen
containername = "EFTPOS crate"
/datum/supply_pack/misc/chaplaingear
@@ -113,7 +113,7 @@
/obj/item/weapon/storage/fancy/candle_box = 3
)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/gilthari
containername = "Chaplain equipment crate"
/datum/supply_pack/misc/hoverpod
@@ -136,14 +136,14 @@
/obj/item/clothing/accessory/storage/webbing
)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/nanothreads
containername = "Webbing crate"
/datum/supply_pack/misc/holoplant
name = "Holoplant Pot"
contains = list(/obj/machinery/holoplant/shipped)
cost = 15
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/thinktronic
containername = "Holoplant crate"
/datum/supply_pack/misc/glucose_hypos
@@ -152,7 +152,7 @@
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5
)
cost = 25
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/zenghu
containername = "Glucose Hypo Crate"
/datum/supply_pack/misc/mre_rations
@@ -169,7 +169,7 @@
/obj/item/weapon/storage/mre/menu9,
/obj/item/weapon/storage/mre/menu10)
cost = 50
containertype = /obj/structure/closet/crate/freezer
containertype = /obj/structure/closet/crate/centauri
containername = "ready to eat rations"
/datum/supply_pack/misc/paste_rations
@@ -178,7 +178,7 @@
/obj/item/weapon/storage/mre/menu11 = 2
)
cost = 25
containertype = /obj/structure/closet/crate/freezer
containertype = /obj/structure/closet/crate/freezer/centauri
containername = "emergency rations"
/datum/supply_pack/misc/medical_rations
@@ -187,5 +187,5 @@
/obj/item/weapon/storage/mre/menu13 = 2
)
cost = 40
containertype = /obj/structure/closet/crate/freezer
containertype = /obj/structure/closet/crate/zenghu
containername = "emergency rations"
+11 -2
View File
@@ -12,7 +12,7 @@
cost = 80
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Blueshield equipment"
access = access_blueshield
access = access_blueshield_exclusive
/datum/supply_pack/misc/blueshieldweapons
name = "Blueshield Weapon Kits"
@@ -23,4 +23,13 @@
cost = 100
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Blueshield armaments"
access = access_blueshield
access = access_blueshield_exclusive
/datum/supply_pack/misc/bluespaceradioyw
name = "Bluespace Radio Packs"
contains = list(
/obj/item/device/bluespaceradio/cryogaia_prelinked = 2
)
cost = 75
containertype = /obj/structure/closet/crate
containername = "Bluespace Radio Packs"
+28 -17
View File
@@ -20,15 +20,15 @@
/obj/item/weapon/storage/box/flashbangs = 2
)
cost = 40
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Security equipment crate"
access = access_security*/
/datum/supply_pack/munitions/egunpistol
name = "Weapons - Energy sidearms"
contains = list(/obj/item/weapon/gun/energy/gun = 2)
cost = 50
containertype = /obj/structure/closet/crate/secure/weapon
cost = 40
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Energy sidearms crate"
access = access_armory //VOREStation Edit - Guns are for the armory.
@@ -59,7 +59,7 @@
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
containertype = /obj/structure/closet/crate/secure/weapon
containertype = /obj/structure/closet/crate/secure/heph
containername = "Energy weapons crate"
access = access_armory
@@ -79,7 +79,7 @@
name = "Weapons - Energy marksman"
contains = list(/obj/item/weapon/gun/energy/sniperrifle = 2)
cost = 100
containertype = /obj/structure/closet/crate/secure/weapon
containertype = /obj/structure/closet/crate/secure/heph
containername = "Energy marksman crate"
access = access_armory
@@ -87,7 +87,7 @@
name = "Weapons - Burst laser"
contains = list(/obj/item/weapon/gun/energy/gun/burst = 2)
cost = 50
containertype = /obj/structure/closet/crate/secure/weapon
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Burst laser crate"
access = access_armory
*/
@@ -98,7 +98,7 @@
/obj/item/weapon/storage/box/empslite
)
cost = 50
containertype = /obj/structure/closet/crate/secure/weapon
containertype = /obj/structure/closet/crate/secure/ward
containername = "Electromagnetic weapons crate"
access = access_armory
@@ -109,7 +109,7 @@
/obj/item/weapon/storage/box/empslite
)
cost = 30
containertype = /obj/structure/closet/crate/secure/weapon
containertype = /obj/structure/closet/crate/secure/ward
containername = "Electromagnetic weapons crate"
access = access_armory
@@ -117,7 +117,7 @@
name = "Weapons - Ballistic SMGs"
contains = list(/obj/item/weapon/gun/projectile/automatic/wt550 = 2)
cost = 50
containertype = /obj/structure/closet/crate/secure/weapon
containertype = /obj/structure/closet/crate/secure/ward
containername = "Ballistic weapon crate"
access = access_armory
@@ -144,11 +144,22 @@
containername = "Ballistic Weapons crate"
access = access_armory //VOREStation Edit - Guns are for the armory.
/datum/supply_pack/munitions/caseless
name = "Weapons - Prototype Caseless Rifle"
contains = list(
/obj/item/weapon/gun/projectile/caseless/prototype,
/obj/item/ammo_magazine/m5mmcaseless = 3
)
cost = 60
containertype = /obj/structure/closet/crate/secure/gilthari
containername = "Caseless rifle crate"
access = access_security
/datum/supply_pack/munitions/mrifle
name = "Weapons - Magnetic Rifles"
contains = list(/obj/item/weapon/gun/magnetic/railgun/heater = 2)
cost = 120
containertype = /obj/structure/closet/crate/secure/weapon
containertype = /obj/structure/closet/crate/secure/heph
containername = "Magnetic weapon crate"
access = access_armory
@@ -156,7 +167,7 @@
name = "Weapons - Magnetic Pistols"
contains = list(/obj/item/weapon/gun/magnetic/railgun/heater/pistol = 2)
cost = 200
containertype = /obj/structure/closet/crate/secure/weapon
containertype = /obj/structure/closet/crate/secure/heph
containername = "Magnetic weapon crate"
access = access_armory
@@ -164,7 +175,7 @@
name = "Weapons - Magnetic Carbines"
contains = list(/obj/item/weapon/gun/magnetic/railgun/flechette/sif = 2)
cost = 130
containertype = /obj/structure/closet/crate/secure/weapon
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Magnetic weapon crate"
access = access_security
@@ -183,7 +194,7 @@
/obj/item/weapon/storage/box/shotgunshells = 2
)
cost = 25
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Ballistic ammunition crate"
access = access_armory
@@ -199,7 +210,7 @@
name = "Ammunition - 9mm top mounted lethal"
contains = list(/obj/item/ammo_magazine/m9mmt = 6)
cost = 25
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Ballistic ammunition crate"
access = access_armory
@@ -207,7 +218,7 @@
name = "Ammunition - 9mm top mounted rubber"
contains = list(/obj/item/ammo_magazine/m9mmt/rubber = 6)
cost = 25
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Ballistic ammunition crate"
access = access_security
@@ -215,7 +226,7 @@
name = "Ammunition - 7.62mm lethal"
contains = list(/obj/item/ammo_magazine/m762 = 6)
cost = 25
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Ballistic ammunition crate"
access = access_armory
@@ -223,7 +234,7 @@
name = "Ammunition - Power cell"
contains = list(/obj/item/weapon/cell/device/weapon = 3)
cost = 50
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Energy ammunition crate"
access = access_security
containertype = /obj/structure/closet/crate
+7 -7
View File
@@ -20,7 +20,7 @@
/obj/item/weapon/material/twohanded/fireaxe/foam = 2
)
cost = 50
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/allico
containername = "foam weapon crate"
/datum/supply_pack/recreation/lasertag
@@ -31,8 +31,8 @@
/obj/item/weapon/gun/energy/lasertag/blue,
/obj/item/clothing/suit/bluetag
)
containertype = /obj/structure/closet
containername = "Lasertag Closet"
containertype = /obj/structure/closet/crate/ward
containername = "Lasertag Supplies"
cost = 10
/datum/supply_pack/recreation/artscrafts
@@ -55,14 +55,14 @@
/obj/item/weapon/wrapping_paper = 3
)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/allico
containername = "Arts and Crafts crate"
/datum/supply_pack/recreation/painters
name = "Station Painting Supplies"
cost = 10
containername = "station painting supplies crate"
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/grayson
contains = list(
/obj/item/device/pipe_painter = 2,
/obj/item/device/floor_painter = 2,
@@ -82,7 +82,7 @@
name = "Deluxe Fishing Bait"
cost = 40
containername = "deluxe bait crate"
containertype = /obj/structure/closet/crate/freezer
containertype = /obj/structure/closet/crate/carp
num_contained = 8
contains = list(
/obj/item/weapon/storage/box/wormcan,
@@ -93,7 +93,7 @@
name = "Laser Tag Turrets"
cost = 40
containername = "laser tag turret crate"
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/ward
contains = list(
/obj/machinery/porta_turret/lasertag/blue,
/obj/machinery/porta_turret/lasertag/red
+15 -13
View File
@@ -20,7 +20,7 @@
/obj/item/weapon/cell/high = 2
)
cost = 10
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/nanotrasen
containername = "Robotics assembly"
access = access_robotics
@@ -56,7 +56,7 @@
name = "Morpheus robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/morpheus)
cost = 20
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/morpheus
containername = "Robolimb blueprints (Morpheus)"
access = access_robotics
@@ -64,7 +64,7 @@
name = "Cyber Solutions robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/cybersolutions)
cost = 20
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/cybersolutions
containername = "Robolimb blueprints (Cyber Solutions)"
access = access_robotics
@@ -72,7 +72,7 @@
name = "Xion robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/xion)
cost = 20
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/xion
containername = "Robolimb blueprints (Xion)"
access = access_robotics
@@ -80,7 +80,7 @@
name = "Grayson robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/grayson)
cost = 30
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/grayson
containername = "Robolimb blueprints (Grayson)"
access = access_robotics
@@ -88,7 +88,7 @@
name = "Hephaestus robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/hephaestus)
cost = 35
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/heph
containername = "Robolimb blueprints (Hephaestus)"
access = access_robotics
@@ -96,7 +96,7 @@
name = "Ward-Takahashi robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/wardtakahashi)
cost = 35
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/ward
containername = "Robolimb blueprints (Ward-Takahashi)"
access = access_robotics
@@ -104,7 +104,7 @@
name = "Zeng Hu robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/zenghu)
cost = 35
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/zenghu
containername = "Robolimb blueprints (Zeng Hu)"
access = access_robotics
@@ -112,7 +112,7 @@
name = "Bishop robolimb blueprints"
contains = list(/obj/item/weapon/disk/limb/bishop)
cost = 70
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/bishop
containername = "Robolimb blueprints (Bishop)"
access = access_robotics
@@ -133,7 +133,7 @@
/obj/item/weapon/circuitboard/mecha/ripley/peripherals
)
cost = 25
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/xion
containername = "APLU \"Ripley\" Circuit Crate"
access = access_robotics
@@ -144,7 +144,7 @@
/obj/item/weapon/circuitboard/mecha/odysseus/main
)
cost = 25
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/veymed
containername = "\"Odysseus\" Circuit Crate"
access = access_robotics
@@ -158,7 +158,7 @@
)
name = "Random APLU modkit"
cost = 200
containertype = /obj/structure/closet/crate/science
containertype = /obj/structure/closet/crate/xion
containername = "heavy crate"
/datum/supply_pack/randomised/robotics/exosuit_mod/durand
@@ -168,6 +168,7 @@
/obj/item/device/kit/paint/durand/phazon
)
name = "Random Durand exosuit modkit"
containertype = /obj/structure/closet/crate/heph
/datum/supply_pack/randomised/robotics/exosuit_mod/gygax
contains = list(
@@ -176,6 +177,7 @@
/obj/item/device/kit/paint/gygax/recitence
)
name = "Random Gygax exosuit modkit"
containertype = /obj/structure/closet/crate/heph
/datum/supply_pack/robotics/jumper_cables
name = "Jumper kit crate"
@@ -183,7 +185,7 @@
/obj/item/device/defib_kit/jumper_kit = 2
)
cost = 30
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/einstein
containername = "Jumper kit crate"
access = access_robotics
+5 -5
View File
@@ -9,7 +9,7 @@
name = "Coolant tank crate"
contains = list(/obj/structure/reagent_dispensers/coolanttank)
cost = 15
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/aether
containername = "coolant tank crate"
/datum/supply_pack/sci/phoron
@@ -39,7 +39,7 @@
/obj/item/seeds/kudzuseed
)
cost = 15
containertype = /obj/structure/closet/crate/hydroponics
containertype = /obj/structure/closet/crate/carp
containername = "Exotic Seeds crate"
access = access_hydroponics
@@ -47,14 +47,14 @@
name = "Integrated circuit printer"
contains = list(/obj/item/device/integrated_circuit_printer = 2)
cost = 15
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/ward
containername = "Integrated circuit crate"
/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
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/ward
containername = "Integrated circuit crate"
/datum/supply_pack/sci/xenoarch
@@ -75,6 +75,6 @@
/obj/item/weapon/storage/bag/fossils,
/obj/item/weapon/hand_labeler)
cost = 100
containertype = /obj/structure/closet/crate/secure/science
containertype = /obj/structure/closet/crate/secure/xion
containername = "Xenoarchaeology Tech crate"
access = access_research
+41 -42
View File
@@ -53,11 +53,11 @@
/obj/item/clothing/accessory/storage/pouches/blue,
)
cost = 30
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/heph
containername = "Plate Carrier crate"
/datum/supply_pack/security/carriersgreen
name = "Armor - Blue modular armor"
name = "Armor - Green modular armor"
contains = list(
/obj/item/clothing/suit/armor/pcarrier/green,
/obj/item/clothing/accessory/armor/armguards/green,
@@ -65,7 +65,7 @@
/obj/item/clothing/accessory/storage/pouches/green,
)
cost = 30
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/heph
containername = "Plate Carrier crate"
/datum/supply_pack/security/carriersnavy
@@ -77,7 +77,7 @@
/obj/item/clothing/accessory/storage/pouches/navy,
)
cost = 30
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/heph
containername = "Plate Carrier crate"
/datum/supply_pack/security/carrierstan
@@ -89,7 +89,7 @@
/obj/item/clothing/accessory/storage/pouches/tan,
)
cost = 30
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/heph
containername = "Plate Carrier crate"
/datum/supply_pack/security/armorplate
@@ -98,7 +98,7 @@
/obj/item/clothing/accessory/armor/armorplate,
)
cost = 5
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Armor plate crate"
/datum/supply_pack/security/armorplatestab
@@ -107,7 +107,7 @@
/obj/item/clothing/accessory/armor/armorplate/stab,
)
cost = 10
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Armor plate crate"
/datum/supply_pack/security/armorplatemedium
@@ -116,7 +116,7 @@
/obj/item/clothing/accessory/armor/armorplate/medium,
)
cost = 10
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Armor plate crate"
/datum/supply_pack/security/armorplatetac
@@ -125,7 +125,7 @@
/obj/item/clothing/accessory/armor/armorplate/tactical,
)
cost = 15
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/heph
containername = "Armor plate crate"
/datum/supply_pack/randomised/security/carriers
@@ -140,7 +140,7 @@
/obj/item/clothing/suit/armor/pcarrier/press
)
cost = 10
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/scg
containername = "Plate Carrier crate"
/datum/supply_pack/security/carriertags
@@ -158,7 +158,7 @@
/obj/item/clothing/accessory/armor/tag/abneg
)
cost = 20
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/scg
containername = "Plate Carrier crate"
/datum/supply_pack/security/helmcovers
@@ -174,7 +174,7 @@
/obj/item/clothing/accessory/armor/helmcover/tan
)
cost = 20
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/scg
containername = "Helmet Covers crate"
/datum/supply_pack/randomised/security/armorplates
@@ -193,7 +193,7 @@
/obj/item/clothing/accessory/armor/armorplate/bulletproof
)
cost = 40
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/scg
containername = "Armor plate crate"
/datum/supply_pack/randomised/security/carrierarms
@@ -210,7 +210,7 @@
/obj/item/clothing/accessory/armor/armguards/bulletproof
)
cost = 40
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/scg
containername = "Armor plate crate"
/datum/supply_pack/randomised/security/carrierlegs
@@ -227,7 +227,7 @@
/obj/item/clothing/accessory/armor/legguards/bulletproof
)
cost = 40
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/scg
containername = "Armor plate crate"
/datum/supply_pack/randomised/security/carrierbags
@@ -246,7 +246,7 @@
/obj/item/clothing/accessory/storage/pouches/large/tan
)
cost = 50
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/scg
containername = "Armor plate crate"
/datum/supply_pack/security/riot_gear
@@ -260,7 +260,7 @@
/obj/item/weapon/storage/box/handcuffs
)
cost = 40
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Riot gear crate"
access = access_armory
@@ -273,7 +273,7 @@
/obj/item/clothing/shoes/leg_guard/riot
)
cost = 30
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Riot armor crate"
access = access_armory
@@ -287,7 +287,7 @@
/obj/item/clothing/accessory/armor/legguards/riot
)
cost = 40
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Riot armor crate"
access = access_armory
@@ -300,7 +300,7 @@
/obj/item/clothing/shoes/leg_guard/laserproof
)
cost = 40
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Ablative armor crate"
access = access_armory
@@ -314,7 +314,7 @@
/obj/item/clothing/accessory/armor/legguards/laserproof
)
cost = 50
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Ablative armor crate"
access = access_armory
@@ -327,7 +327,7 @@
/obj/item/clothing/shoes/leg_guard/bulletproof
)
cost = 40
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/heph
containername = "Ballistic armor crate"
access = access_armory
/* VOREStation Removal - Howabout no ERT armor being orderable?
@@ -342,7 +342,7 @@
/obj/item/clothing/accessory/armor/legguards/bulletproof
)
cost = 50
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/heph
containername = "Ballistic armor crate"
access = access_armory
@@ -355,13 +355,13 @@
/obj/item/clothing/shoes/leg_guard/combat
)
cost = 40
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/saare
containername = "Combat armor crate"
access = access_armory
/datum/supply_pack/security/tactical
name = "Armor - Tactical"
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/saare
containername = "Tactical armor crate"
cost = 40
access = access_armory
@@ -387,7 +387,7 @@
/datum/supply_pack/security/flexitac
name = "Armor - Tactical Light"
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/closet/crate/secure/saare
containername = "Tactical Light armor crate"
cost = 75
access = access_armory
@@ -412,15 +412,14 @@
name = "Misc - Security Barriers"
contains = list(/obj/machinery/deployable/barrier = 4)
cost = 20
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/secure/heph
containername = "Security barrier crate"
access = null
/datum/supply_pack/security/securityshieldgen
name = "Misc - Wall shield generators"
contains = list(/obj/machinery/shieldwallgen = 4)
cost = 20
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/heph
containername = "Wall shield generators crate"
access = access_teleporter
@@ -434,7 +433,7 @@
/obj/item/clothing/accessory/holster/hip
)
cost = 15
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/hedberg
containername = "Holster crate"
/datum/supply_pack/security/extragear
@@ -446,7 +445,7 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/security = 3
)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/nanothreads
containername = "Security surplus equipment"
/datum/supply_pack/security/detectivegear
@@ -473,7 +472,7 @@
/obj/item/weapon/storage/bag/detective
)
cost = 20
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanotrasen
containername = "Forensic equipment"
access = access_forensics_lockers
@@ -486,7 +485,7 @@
/obj/item/device/detective_scanner
)
cost = 60
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/ward
containername = "Forensic equipment"
access = access_forensics_lockers
@@ -508,7 +507,7 @@
/obj/item/clothing/gloves/black = 2
)
cost = 10
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanotrasen
containername = "Investigation clothing"
access = access_forensics_lockers
@@ -538,7 +537,7 @@
/obj/item/device/flashlight/maglight
)
cost = 20
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanotrasen
containername = "Officer equipment"
access = access_brig
@@ -567,7 +566,7 @@
/obj/item/device/flashlight/maglight
)
cost = 20
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanotrasen
containername = "Warden equipment"
access = access_armory
@@ -594,7 +593,7 @@
/obj/item/device/flashlight/maglight
)
cost = 50
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanotrasen
containername = "Head of security equipment"
access = access_hos
@@ -613,7 +612,7 @@
/obj/item/weapon/storage/box/holobadge
)
cost = 10
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanotrasen
containername = "Security uniform crate"
/datum/supply_pack/security/navybluesecurityclothing
@@ -634,7 +633,7 @@
/obj/item/weapon/storage/box/holobadge
)
cost = 10
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanotrasen
containername = "Navy blue security uniform crate"
/datum/supply_pack/security/corporatesecurityclothing
@@ -654,7 +653,7 @@
/obj/item/weapon/storage/box/holobadge
)
cost = 10
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanotrasen
containername = "Corporate security uniform crate"
/datum/supply_pack/security/biosuit
@@ -670,7 +669,7 @@
/obj/item/weapon/storage/box/gloves
)
cost = 25
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanotrasen
containername = "Security biohazard gear"
access = access_security
@@ -680,6 +679,6 @@
/obj/item/weapon/contraband/poster/nanotrasen = 6
)
cost = 20
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanotrasen
containername = "Morale Posters"
access = access_maint_tunnels
+15 -9
View File
@@ -18,14 +18,14 @@
/obj/item/weapon/reagent_containers/food/condiment/yeast = 3
)
cost = 10
containertype = /obj/structure/closet/crate/freezer
containertype = /obj/structure/closet/crate/freezer/centauri
containername = "Food crate"
/datum/supply_pack/supply/toner
name = "Toner cartridges"
contains = list(/obj/item/device/toner = 6)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/ummarcar
containername = "Toner cartridges"
/datum/supply_pack/supply/janitor
@@ -48,7 +48,7 @@
/obj/structure/mopbucket
)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/galaksi
containername = "Janitorial supplies"
/datum/supply_pack/supply/shipping
@@ -62,7 +62,7 @@
/obj/item/weapon/tool/wirecutters,
/obj/item/weapon/tape_roll = 2)
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/ummarcar
containername = "Shipping supplies crate"
/datum/supply_pack/supply/bureaucracy
@@ -82,13 +82,19 @@
)
name = "Office supplies"
cost = 15
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/ummarcar
containername = "Office supplies crate"
/datum/supply_pack/supply/sticky_notes
name = "Stationery - sticky notes (50)"
contains = list(/obj/item/sticky_pad/random)
cost = 10
containername = "\improper Sticky notes crate"
/datum/supply_pack/supply/spare_pda
name = "Spare PDAs"
cost = 10
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/thinktronic
containername = "Spare PDA crate"
contains = list(/obj/item/device/pda = 3)
@@ -112,7 +118,7 @@
/obj/item/clothing/glasses/meson
)
cost = 10
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/xion
containername = "Shaft miner equipment"
access = access_mining
/* //VOREStation Edit - Pointless on Tether.
@@ -127,12 +133,12 @@
name = "Cargo Train Tug"
contains = list(/obj/vehicle/train/engine)
cost = 35
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/xion
containername = "Cargo Train Tug Crate"
/datum/supply_pack/supply/cargotrailer
name = "Cargo Train Trolley"
contains = list(/obj/vehicle/train/trolley)
cost = 15
containertype = /obj/structure/largecrate
containertype = /obj/structure/closet/crate/large/xion
containername = "Cargo Train Trolley Crate"
+29 -18
View File
@@ -17,7 +17,7 @@
/obj/item/weapon/tank/oxygen = 2,
)
cost = 40
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/aether
containername = "Atmospheric voidsuit crate"
access = access_atmospherics
@@ -31,7 +31,7 @@
/obj/item/weapon/tank/oxygen = 2,
)
cost = 50
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/aether
containername = "Heavy Duty Atmospheric voidsuit crate"
access = access_atmospherics
@@ -45,7 +45,7 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 40
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/xion
containername = "Engineering voidsuit crate"
access = access_engine_equip
@@ -59,7 +59,7 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 40
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/xion
containername = "Engineering Construction voidsuit crate"
access = access_engine_equip
@@ -73,7 +73,7 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 45
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/xion
containername = "Engineering Hazmat voidsuit crate"
access = access_engine_equip
@@ -87,7 +87,7 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 50
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/xion
containername = "Reinforced Engineering voidsuit crate"
access = access_engine_equip
@@ -101,7 +101,7 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 40
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/veymed
containername = "Medical voidsuit crate"
access = access_medical_equip
@@ -115,7 +115,7 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 40
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/veymed
containername = "Medical EMT voidsuit crate"
access = access_medical_equip
@@ -129,12 +129,12 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 45
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/nanocare
containername = "Medical Biohazard voidsuit crate"
access = access_medical_equip
/datum/supply_pack/voidsuits/medical/alt
name = "Vey-Med Medical voidsuits"
name = "Vey-Med Autoadaptive voidsuits (humanoid)"
contains = list(
/obj/item/clothing/suit/space/void/medical/alt = 2,
/obj/item/clothing/head/helmet/space/void/medical/alt = 2,
@@ -143,10 +143,21 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 60
containertype = /obj/structure/closet/crate/secure
containername = "Vey-Med Medical voidsuit crate"
containertype = /obj/structure/closet/crate/secure/veymed
containername = "Vey-Med Autoadaptive voidsuit (humanoid) crate"
access = access_medical_equip
/datum/supply_pack/voidsuits/medical/alt/tesh
name = "Vey-Med Autoadaptive voidsuits (teshari)"
contains = list(
/obj/item/clothing/suit/space/void/medical/alt/tesh = 2,
/obj/item/clothing/head/helmet/space/void/medical/alt/tesh = 2,
/obj/item/clothing/mask/breath = 2,
/obj/item/clothing/shoes/magboots = 2,
/obj/item/weapon/tank/oxygen = 2
)
containername = "Vey-Med Autoadaptive voidsuit (teshari) crate"
/datum/supply_pack/voidsuits/security
name = "Security voidsuits"
contains = list(
@@ -157,7 +168,7 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 40
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/heph
containername = "Security voidsuit crate"
/datum/supply_pack/voidsuits/security/crowd
@@ -170,7 +181,7 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 60
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/heph
containername = "Security Crowd Control voidsuit crate"
access = access_armory
@@ -184,7 +195,7 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 60
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/heph
containername = "Security EVA voidsuit crate"
access = access_armory
@@ -197,7 +208,7 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 40
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/xion
containername = "Mining voidsuit crate"
access = access_mining
@@ -210,7 +221,7 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 50
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/grayson
containername = "Frontier Mining voidsuit crate"
access = access_mining
@@ -221,7 +232,7 @@
/obj/item/clothing/mask/gas/zaddat = 1
)
cost = 30
containertype = /obj/structure/closet/crate
containertype = /obj/structure/closet/crate/nanotrasen
containername = "Zaddat Shroud crate"
access = access_mining
+3 -3
View File
@@ -90,7 +90,7 @@
path = /obj/item/weapon/gun/projectile/p92x/large
/datum/uplink_item/item/visible_weapons/lemat
name = "LeMat"
name = "Mako Revolver"
item_cost = 60
path = /obj/item/weapon/gun/projectile/revolver/lemat
@@ -145,9 +145,9 @@
path = /obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever
/datum/uplink_item/item/visible_weapons/egun
name = "Energy Gun"
name = "Compact Energy Gun"
item_cost = 30
path = /obj/item/weapon/gun/energy/gun
path = /obj/item/weapon/gun/energy/gun/compact
/datum/uplink_item/item/visible_weapons/lasercannon
name = "Laser Cannon"
+64 -71
View File
@@ -1,61 +1,53 @@
// Wires for airlocks
/datum/wires/airlock/secure
random = 1
randomize = 1
wire_count = 14
window_y = 680
/datum/wires/airlock
holder_type = /obj/machinery/door/airlock
wire_count = 12
window_y = 570
proper_name = "Airlock"
var/const/AIRLOCK_WIRE_IDSCAN = 1
var/const/AIRLOCK_WIRE_MAIN_POWER1 = 2
var/const/AIRLOCK_WIRE_MAIN_POWER2 = 4
var/const/AIRLOCK_WIRE_DOOR_BOLTS = 8
var/const/AIRLOCK_WIRE_BACKUP_POWER1 = 16
var/const/AIRLOCK_WIRE_BACKUP_POWER2 = 32
var/const/AIRLOCK_WIRE_OPEN_DOOR = 64
var/const/AIRLOCK_WIRE_AI_CONTROL = 128
var/const/AIRLOCK_WIRE_ELECTRIFY = 256
var/const/AIRLOCK_WIRE_SAFETY = 512
var/const/AIRLOCK_WIRE_SPEED = 1024
var/const/AIRLOCK_WIRE_LIGHT = 2048
/datum/wires/airlock/CanUse(var/mob/living/L)
/datum/wires/airlock/interactable(mob/user)
var/obj/machinery/door/airlock/A = holder
if(!istype(L, /mob/living/silicon))
if(!issilicon(user))
if(A.isElectrified())
if(A.shock(L, 100))
return 0
if(A.shock(user, 100))
return FALSE
if(A.p_open)
return 1
return 0
return TRUE
return FALSE
/datum/wires/airlock/GetInteractWindow()
/datum/wires/airlock/New(atom/_holder)
wires = list(
WIRE_IDSCAN, WIRE_MAIN_POWER1, WIRE_MAIN_POWER2, WIRE_DOOR_BOLTS,
WIRE_BACKUP_POWER1, WIRE_BACKUP_POWER2, WIRE_OPEN_DOOR, WIRE_AI_CONTROL,
WIRE_ELECTRIFY, WIRE_SAFETY, WIRE_SPEED, WIRE_BOLT_LIGHT
)
return ..()
/datum/wires/airlock/get_status()
. = ..()
var/obj/machinery/door/airlock/A = holder
var/haspower = A.arePowerSystemsOn() //If there's no power, then no lights will be on.
. += ..()
. += show_hint(0x01, A.locked, "The door bolts have fallen!", "The door bolts look up.")
. += show_hint(0x02, A.lights && haspower, "The door bolt lights are on.", "The door bolt lights are off!")
. += show_hint(0x04, haspower, "The test light is on.", "The test light is off!")
. += show_hint(0x08, A.backup_power_lost_until, "The backup power light is off!", "The backup power light is on.")
. += show_hint(0x10, A.aiControlDisabled == 0 && !A.emagged && haspower, "The 'AI control allowed' light is on.", "The 'AI control allowed' light is off.")
. += show_hint(0x20, A.safe == 0 && haspower, "The 'Check Wiring' light is on.", "The 'Check Wiring' light is off.")
. += show_hint(0x40, A.normalspeed == 0 && haspower, "The 'Check Timing Mechanism' light is on.", "The 'Check Timing Mechanism' light is off.")
. += show_hint(0x80, A.aiDisabledIdScanner == 0 && haspower, "The IDScan light is on.", "The IDScan light is off.")
/datum/wires/airlock/UpdateCut(var/index, var/mended)
. += "The door bolts [A.locked ? "have fallen!" : "look up."]"
. += "The door bolt lights are [(A.lights && haspower) ? "on." : "off!"]"
. += "The test light is [haspower ? "on." : "off!"]"
. += "The backup power light is [A.backup_power_lost_until ? "off!" : "on."]"
. += "The 'AI control allowed' light is [(A.aiControlDisabled == 0 && !A.emagged && haspower) ? "on" : "off"]."
. += "The 'Check Wiring' light is [(A.safe == 0 && haspower) ? "on" : "off"]."
. += "The 'Check Timing Mechanism' light is [(A.normalspeed == 0 && haspower) ? "on" : "off"]."
. += "The IDScan light is [(A.aiDisabledIdScanner == 0 && haspower) ? "on" : "off."]"
/datum/wires/airlock/on_cut(wire, mend)
var/obj/machinery/door/airlock/A = holder
switch(index)
if(AIRLOCK_WIRE_IDSCAN)
A.aiDisabledIdScanner = !mended
if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
if(!mended)
switch(wire)
if(WIRE_IDSCAN)
A.aiDisabledIdScanner = !mend
if(WIRE_MAIN_POWER1, WIRE_MAIN_POWER2)
if(!mend)
//Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be crowbarred open, but bolts-raising will not work. Cutting these wires may electocute the user.
A.loseMainPower()
A.shock(usr, 50)
@@ -63,9 +55,8 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
A.regainMainPower()
A.shock(usr, 50)
if(AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
if(!mended)
if(WIRE_BACKUP_POWER1, WIRE_BACKUP_POWER2)
if(!mend)
//Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user.
A.loseBackupPower()
A.shock(usr, 50)
@@ -73,16 +64,14 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
A.regainBackupPower()
A.shock(usr, 50)
if(AIRLOCK_WIRE_DOOR_BOLTS)
if(!mended)
if(WIRE_DOOR_BOLTS)
if(!mend)
//Cutting this wire also drops the door bolts, and mending it does not raise them. (This is what happens now, except there are a lot more wires going to door bolts at present)
A.lock(1)
A.update_icon()
if(AIRLOCK_WIRE_AI_CONTROL)
if(!mended)
if(WIRE_AI_CONTROL)
if(!mend)
//one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
//aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
if(A.aiControlDisabled == 0)
@@ -95,40 +84,41 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
else if(A.aiControlDisabled == 2)
A.aiControlDisabled = -1
if(AIRLOCK_WIRE_ELECTRIFY)
if(!mended)
if(WIRE_ELECTRIFY)
if(!mend)
//Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted.
A.electrify(-1)
else
A.electrify(0)
return // Don't update the dialog.
if (AIRLOCK_WIRE_SAFETY)
A.safe = mended
if (WIRE_SAFETY)
A.safe = mend
if(AIRLOCK_WIRE_SPEED)
A.autoclose = mended
if(mended)
if(WIRE_SPEED)
A.autoclose = mend
if(mend)
if(!A.density)
A.close()
if(AIRLOCK_WIRE_LIGHT)
A.lights = mended
if(WIRE_BOLT_LIGHT)
A.lights = mend
A.update_icon()
/datum/wires/airlock/UpdatePulsed(var/index)
/datum/wires/airlock/on_pulse(wire)
var/obj/machinery/door/airlock/A = holder
switch(index)
if(AIRLOCK_WIRE_IDSCAN)
switch(wire)
if(WIRE_IDSCAN)
//Sending a pulse through flashes the red light on the door (if the door has power).
if(A.arePowerSystemsOn() && A.density)
A.do_animate("deny")
if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
if(WIRE_MAIN_POWER1, WIRE_MAIN_POWER2)
//Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter).
A.loseMainPower()
if(AIRLOCK_WIRE_DOOR_BOLTS)
if(WIRE_DOOR_BOLTS)
//one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
//raises them if they are down (only if power's on)
if(!A.locked)
@@ -136,10 +126,11 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
else
A.unlock()
if(AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
if(WIRE_BACKUP_POWER1, WIRE_BACKUP_POWER2)
//two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter).
A.loseBackupPower()
if(AIRLOCK_WIRE_AI_CONTROL)
if(WIRE_AI_CONTROL)
if(A.aiControlDisabled == 0)
A.aiControlDisabled = 1
else if(A.aiControlDisabled == -1)
@@ -152,24 +143,26 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
else if(A.aiControlDisabled == 2)
A.aiControlDisabled = -1
if(AIRLOCK_WIRE_ELECTRIFY)
if(WIRE_ELECTRIFY)
//one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds.
A.electrify(30)
if(AIRLOCK_WIRE_OPEN_DOOR)
if(WIRE_OPEN_DOOR)
//tries to open the door without ID
//will succeed only if the ID wire is cut or the door requires no access and it's not emagged
if(A.emagged) return
if(!A.requiresID() || A.check_access(null))
if(A.density) A.open()
else A.close()
if(AIRLOCK_WIRE_SAFETY)
if(WIRE_SAFETY)
A.safe = !A.safe
if(!A.density)
A.close()
if(AIRLOCK_WIRE_SPEED)
if(WIRE_SPEED)
A.normalspeed = !A.normalspeed
if(AIRLOCK_WIRE_LIGHT)
if(WIRE_BOLT_LIGHT)
A.lights = !A.lights
A.update_icon()
+49 -57
View File
@@ -1,94 +1,86 @@
/datum/wires/alarm
holder_type = /obj/machinery/alarm
wire_count = 5
proper_name = "Air alarm"
var/const/AALARM_WIRE_IDSCAN = 1
var/const/AALARM_WIRE_POWER = 2
var/const/AALARM_WIRE_SYPHON = 4
var/const/AALARM_WIRE_AI_CONTROL = 8
var/const/AALARM_WIRE_AALARM = 16
/datum/wires/alarm/New(atom/_holder)
wires = list(
WIRE_IDSCAN, WIRE_MAIN_POWER1, WIRE_SYPHON,
WIRE_AI_CONTROL, WIRE_AALARM
)
return ..()
/datum/wires/alarm/CanUse(var/mob/living/L)
/datum/wires/alarm/interactable(mob/user)
var/obj/machinery/alarm/A = holder
if(A.panel_open)
return 1
return 0
return TRUE
return FALSE
/datum/wires/alarm/GetInteractWindow()
/datum/wires/alarm/get_status()
var/obj/machinery/alarm/A = holder
. += ..()
. += show_hint(0x1, A.locked, "The Air Alarm is locked.", "The Air Alarm is unlocked.")
. += show_hint(0x2, A.shorted || (A.stat & (NOPOWER|BROKEN)), "The Air Alarm is offline.", "The Air Alarm is working properly!")
. += show_hint(0x4, A.aidisabled, "The 'AI control allowed' light is off.", "The 'AI control allowed' light is on.")
. = ..()
. += "The Air Alarm is [A.locked ? "locked." : "unlocked."]"
. += "The Air Alarm is [(A.shorted || (A.stat & (NOPOWER|BROKEN))) ? "offline." : "working properly!"]"
. += "The 'AI control allowed' light is [A.aidisabled ? "off" : "on"]."
/datum/wires/alarm/UpdateCut(var/index, var/mended)
/datum/wires/alarm/on_cut(wire, mend)
var/obj/machinery/alarm/A = holder
switch(index)
if(AALARM_WIRE_IDSCAN)
if(!mended)
A.locked = 1
//to_world("Idscan wire cut")
switch(wire)
if(WIRE_IDSCAN)
if(!mend)
A.locked = TRUE
if(AALARM_WIRE_POWER)
if(WIRE_MAIN_POWER1)
A.shock(usr, 50)
A.shorted = !mended
A.shorted = !mend
A.update_icon()
//to_world("Power wire cut")
if (AALARM_WIRE_AI_CONTROL)
if (A.aidisabled == !mended)
A.aidisabled = mended
//to_world("AI Control Wire Cut")
if(WIRE_AI_CONTROL)
A.aidisabled = !mend
if(AALARM_WIRE_SYPHON)
if(!mended)
A.mode = 3 // AALARM_MODE_PANIC
if(WIRE_SYPHON)
if(!mend)
A.mode = 3 // MODE_PANIC
A.apply_mode()
//to_world("Syphon Wire Cut")
if(AALARM_WIRE_AALARM)
if (A.alarm_area.atmosalert(2, A))
if(WIRE_AALARM)
if(A.alarm_area.atmosalert(2, A))
A.post_alert(2)
A.update_icon()
..()
/datum/wires/alarm/UpdatePulsed(var/index)
/datum/wires/alarm/on_pulse(wire)
var/obj/machinery/alarm/A = holder
switch(index)
if(AALARM_WIRE_IDSCAN)
switch(wire)
if(WIRE_IDSCAN)
A.locked = !A.locked
// to_world("Idscan wire pulsed")
if (AALARM_WIRE_POWER)
// to_world("Power wire pulsed")
if(A.shorted == 0)
A.shorted = 1
if(WIRE_MAIN_POWER1)
if(!A.shorted)
A.shorted = TRUE
A.update_icon()
spawn(12000)
if(A.shorted == 1)
A.shorted = 0
if(A.shorted)
A.shorted = FALSE
A.update_icon()
if (AALARM_WIRE_AI_CONTROL)
// to_world("AI Control wire pulsed")
if (A.aidisabled == 0)
A.aidisabled = 1
if(WIRE_AI_CONTROL)
if(!A.aidisabled)
A.aidisabled = TRUE
A.updateDialog()
spawn(100)
if (A.aidisabled == 1)
A.aidisabled = 0
if(A.aidisabled)
A.aidisabled = FALSE
if(AALARM_WIRE_SYPHON)
// to_world("Syphon wire pulsed")
if(A.mode == 1) // AALARM_MODE_SCRUB
A.mode = 3 // AALARM_MODE_PANIC
if(WIRE_SYPHON)
if(A.mode == 1) // MODE_SCRUB
A.mode = 3 // MODE_PANIC
else
A.mode = 1 // AALARM_MODE_SCRUB
A.mode = 1 // MODE_SCRUB
A.apply_mode()
if(AALARM_WIRE_AALARM)
// to_world("Aalarm wire pulsed")
if (A.alarm_area.atmosalert(0, A))
if(WIRE_AALARM)
if(A.alarm_area.atmosalert(0, A))
A.post_alert(0)
A.update_icon()
+36 -46
View File
@@ -1,76 +1,66 @@
/datum/wires/apc
holder_type = /obj/machinery/power/apc
wire_count = 4
proper_name = "APC"
#define APC_WIRE_IDSCAN 1
#define APC_WIRE_MAIN_POWER1 2
#define APC_WIRE_MAIN_POWER2 4
#define APC_WIRE_AI_CONTROL 8
/datum/wires/apc/New(atom/_holder)
wires = list(WIRE_IDSCAN, WIRE_MAIN_POWER1, WIRE_MAIN_POWER2, WIRE_AI_CONTROL)
return ..()
/datum/wires/apc/GetInteractWindow()
/datum/wires/apc/get_status()
. = ..()
var/obj/machinery/power/apc/A = holder
. += ..()
. += show_hint(0x1, A.locked, "The APC is locked.", "The APC is unlocked.")
. += show_hint(0x2, A.shorted, "The APCs power has been shorted.", "The APC is working properly!")
. += show_hint(0x4, A.aidisabled, "The 'AI control allowed' light is off.", "The 'AI control allowed' light is on.")
. += "The APC is [A.locked ? "" : "un"]locked."
. += A.shorted ? "The APCs power has been shorted." : "The APC is working properly!"
. += "The 'AI control allowed' light is [A.aidisabled ? "off" : "on"]."
/datum/wires/apc/CanUse(var/mob/living/L)
/datum/wires/apc/interactable(mob/user)
var/obj/machinery/power/apc/A = holder
if(A.wiresexposed)
return 1
return 0
/datum/wires/apc/UpdatePulsed(var/index)
/datum/wires/apc/on_pulse(wire)
var/obj/machinery/power/apc/A = holder
switch(index)
if(APC_WIRE_IDSCAN)
A.locked = 0
switch(wire)
if(WIRE_IDSCAN)
A.locked = FALSE
spawn(300)
if(A)
A.locked = 1
A.locked = TRUE
if (APC_WIRE_MAIN_POWER1, APC_WIRE_MAIN_POWER2)
if(A.shorted == 0)
A.shorted = 1
if(WIRE_MAIN_POWER1, WIRE_MAIN_POWER2)
if(!A.shorted)
A.shorted = TRUE
spawn(1200)
if(A && !IsIndexCut(APC_WIRE_MAIN_POWER1) && !IsIndexCut(APC_WIRE_MAIN_POWER2))
A.shorted = 0
if(A && !is_cut(WIRE_MAIN_POWER1) && !is_cut(WIRE_MAIN_POWER2))
A.shorted = FALSE
if (APC_WIRE_AI_CONTROL)
if (A.aidisabled == 0)
A.aidisabled = 1
if(WIRE_AI_CONTROL)
if(!A.aidisabled)
A.aidisabled = TRUE
spawn(10)
if(A && !IsIndexCut(APC_WIRE_AI_CONTROL))
A.aidisabled = 0
if(A && !is_cut(WIRE_AI_CONTROL))
A.aidisabled = FALSE
/datum/wires/apc/UpdateCut(var/index, var/mended)
/datum/wires/apc/on_cut(wire, mend)
var/obj/machinery/power/apc/A = holder
switch(index)
if(APC_WIRE_MAIN_POWER1, APC_WIRE_MAIN_POWER2)
if(!mended)
if(istype(usr, /mob/living))
switch(wire)
if(WIRE_MAIN_POWER1, WIRE_MAIN_POWER2)
if(!mend)
if(isliving(usr))
A.shock(usr, 50)
A.shorted = 1
A.shorted = TRUE
else if(!IsIndexCut(APC_WIRE_MAIN_POWER1) && !IsIndexCut(APC_WIRE_MAIN_POWER2))
A.shorted = 0
if(istype(usr, /mob/living))
else if(!is_cut(WIRE_MAIN_POWER1) && !is_cut(WIRE_MAIN_POWER2))
A.shorted = FALSE
if(isliving(usr))
A.shock(usr, 50)
if(APC_WIRE_AI_CONTROL)
if(!mended)
if (A.aidisabled == 0)
A.aidisabled = 1
else
if (A.aidisabled == 1)
A.aidisabled = 0
if(WIRE_AI_CONTROL)
A.aidisabled = !mend
+31 -38
View File
@@ -1,61 +1,54 @@
/datum/wires/autolathe
holder_type = /obj/machinery/autolathe
wire_count = 6
proper_name = "Autolathe"
var/const/AUTOLATHE_HACK_WIRE = 1
var/const/AUTOLATHE_SHOCK_WIRE = 2
var/const/AUTOLATHE_DISABLE_WIRE = 4
/datum/wires/autolathe/New(atom/_holder)
wires = list(WIRE_AUTOLATHE_HACK, WIRE_ELECTRIFY, WIRE_AUTOLATHE_DISABLE)
return ..()
/datum/wires/autolathe/GetInteractWindow()
/datum/wires/autolathe/get_status()
. = ..()
var/obj/machinery/autolathe/A = holder
. += ..()
. += show_hint(0x1, A.disabled, "The red light is off.", "The red light is on.")
. += show_hint(0x2, A.shocked, "The green light is off.", "The green light is on.")
. += show_hint(0x4, A.hacked, "The blue light is off.", "The blue light is on.")
. += "The red light is [A.disabled ? "off" : "on"]."
. += "The green light is [A.shocked ? "off" : "on"]."
. += "The blue light is [A.hacked ? "off" : "on"]."
/datum/wires/autolathe/CanUse()
/datum/wires/autolathe/interactable(mob/user)
var/obj/machinery/autolathe/A = holder
if(A.panel_open)
return 1
return 0
return TRUE
return FALSE
/datum/wires/autolathe/proc/update_autolathe_ui(mob/living/user)
if(CanUse(user))
var/obj/machinery/autolathe/A = holder
A.interact(user)
/datum/wires/autolathe/UpdateCut(index, mended)
/datum/wires/autolathe/on_cut(wire, mend)
var/obj/machinery/autolathe/A = holder
switch(index)
if(AUTOLATHE_HACK_WIRE)
A.hacked = !mended
if(AUTOLATHE_SHOCK_WIRE)
A.shocked = !mended
if(AUTOLATHE_DISABLE_WIRE)
A.disabled = !mended
update_autolathe_ui(usr)
switch(wire)
if(WIRE_AUTOLATHE_HACK)
A.hacked = !mend
if(WIRE_ELECTRIFY)
A.shocked = !mend
if(WIRE_AUTOLATHE_DISABLE)
A.disabled = !mend
..()
/datum/wires/autolathe/UpdatePulsed(index)
if(IsIndexCut(index))
/datum/wires/autolathe/on_pulse(wire)
if(is_cut(wire))
return
var/obj/machinery/autolathe/A = holder
switch(index)
if(AUTOLATHE_HACK_WIRE)
switch(wire)
if(WIRE_AUTOLATHE_HACK)
A.hacked = !A.hacked
spawn(50)
if(A && !IsIndexCut(index))
if(A && !is_cut(wire))
A.hacked = 0
update_autolathe_ui(usr)
if(AUTOLATHE_SHOCK_WIRE)
if(WIRE_ELECTRIFY)
A.shocked = !A.shocked
spawn(50)
if(A && !IsIndexCut(index))
if(A && !is_cut(wire))
A.shocked = 0
if(AUTOLATHE_DISABLE_WIRE)
if(WIRE_AUTOLATHE_DISABLE)
A.disabled = !A.disabled
spawn(50)
if(A && !IsIndexCut(index))
if(A && !is_cut(wire))
A.disabled = 0
update_autolathe_ui(usr)
update_autolathe_ui(usr)
..()
+31 -37
View File
@@ -1,70 +1,64 @@
// Wires for cameras.
/datum/wires/camera
random = 1
randomize = TRUE
holder_type = /obj/machinery/camera
wire_count = 6
proper_name = "Camera"
/datum/wires/camera/GetInteractWindow()
/datum/wires/camera/New(atom/_holder)
wires = list(WIRE_FOCUS, WIRE_MAIN_POWER1, WIRE_CAM_LIGHT, WIRE_CAM_ALARM)
return ..()
/datum/wires/camera/get_status()
. = ..()
var/obj/machinery/camera/C = holder
. += show_hint(0x1, C.view_range == initial(C.view_range), "The focus light is on.", "The focus light is off.")
. += show_hint(0x2, C.can_use(), "The power link light is on.", "The power link light is off.")
. += show_hint(0x4, C.light_disabled, "The camera light is off.", "The camera light is on.")
. += show_hint(0x8, C.alarm_on, "The alarm light is on.", "The alarm light is off.")
return .
. += "The focus light is [(C.view_range == initial(C.view_range)) ? "on" : "off"]."
. += "The power link light is [C.can_use() ? "on" : "off"]."
. += "The camera light is [C.light_disabled ? "off" : "on"]."
. += "The alarm light is [C.alarm_on ? "on" : "off"]."
/datum/wires/camera/CanUse(var/mob/living/L)
/datum/wires/camera/interactable(mob/user)
var/obj/machinery/camera/C = holder
return C.panel_open
var/const/CAMERA_WIRE_FOCUS = 1
var/const/CAMERA_WIRE_POWER = 2
var/const/CAMERA_WIRE_LIGHT = 4
var/const/CAMERA_WIRE_ALARM = 8
var/const/CAMERA_WIRE_NOTHING1 = 16
var/const/CAMERA_WIRE_NOTHING2 = 32
/datum/wires/camera/UpdateCut(var/index, var/mended)
/datum/wires/camera/on_cut(wire, mend)
var/obj/machinery/camera/C = holder
switch(index)
if(CAMERA_WIRE_FOCUS)
var/range = (mended ? initial(C.view_range) : C.short_range)
switch(wire)
if(WIRE_FOCUS)
var/range = (mend ? initial(C.view_range) : C.short_range)
C.setViewRange(range)
if(CAMERA_WIRE_POWER)
if(C.status && !mended || !C.status && mended)
if(WIRE_MAIN_POWER1)
if(C.status && !mend || !C.status && mend)
C.deactivate(usr, 1)
if(CAMERA_WIRE_LIGHT)
C.light_disabled = !mended
if(WIRE_CAM_LIGHT)
C.light_disabled = !mend
if(CAMERA_WIRE_ALARM)
if(!mended)
if(WIRE_CAM_ALARM)
if(!mend)
C.triggerCameraAlarm()
else
C.cancelCameraAlarm()
return
..()
/datum/wires/camera/UpdatePulsed(var/index)
/datum/wires/camera/on_pulse(wire)
var/obj/machinery/camera/C = holder
if(IsIndexCut(index))
if(is_cut(wire))
return
switch(index)
if(CAMERA_WIRE_FOCUS)
switch(wire)
if(WIRE_FOCUS)
var/new_range = (C.view_range == initial(C.view_range) ? C.short_range : initial(C.view_range))
C.setViewRange(new_range)
if(CAMERA_WIRE_LIGHT)
if(WIRE_CAM_LIGHT)
C.light_disabled = !C.light_disabled
if(CAMERA_WIRE_ALARM)
if(WIRE_CAM_ALARM)
C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*")
return
..()
/datum/wires/camera/proc/CanDeconstruct()
if(IsIndexCut(CAMERA_WIRE_POWER) && IsIndexCut(CAMERA_WIRE_FOCUS) && IsIndexCut(CAMERA_WIRE_LIGHT) && IsIndexCut(CAMERA_WIRE_NOTHING1) && IsIndexCut(CAMERA_WIRE_NOTHING2))
return 1
else
return 0
return is_all_cut()
+12 -9
View File
@@ -1,30 +1,33 @@
/datum/wires/explosive
wire_count = 1
proper_name = "Explosive wires"
var/const/WIRE_EXPLODE = 1
/datum/wires/explosive/New(atom/_holder)
wires = list(WIRE_EXPLODE)
return ..()
/datum/wires/explosive/proc/explode()
return
/datum/wires/explosive/UpdatePulsed(var/index)
switch(index)
/datum/wires/explosive/on_pulse(wire)
switch(wire)
if(WIRE_EXPLODE)
explode()
/datum/wires/explosive/UpdateCut(var/index, var/mended)
switch(index)
/datum/wires/explosive/on_cut(wire, mend)
switch(wire)
if(WIRE_EXPLODE)
if(!mended)
if(!mend)
explode()
/datum/wires/explosive/c4
holder_type = /obj/item/weapon/plastique
/datum/wires/explosive/c4/CanUse(var/mob/living/L)
/datum/wires/explosive/c4/interactable(mob/user)
var/obj/item/weapon/plastique/P = holder
if(P.open_panel)
return 1
return 0
return TRUE
return FALSE
/datum/wires/explosive/c4/explode()
var/obj/item/weapon/plastique/P = holder
+34 -36
View File
@@ -1,66 +1,64 @@
/datum/wires/grid_checker
holder_type = /obj/machinery/power/grid_checker
wire_count = 8
proper_name = "Grid Checker"
var/const/GRID_CHECKER_WIRE_REBOOT = 1 // This wire causes the grid-check to end, if pulsed.
var/const/GRID_CHECKER_WIRE_LOCKOUT = 2 // If cut or pulsed, locks the user out for half a minute.
var/const/GRID_CHECKER_WIRE_ALLOW_MANUAL_1 = 4 // Needs to be cut for REBOOT to be possible.
var/const/GRID_CHECKER_WIRE_ALLOW_MANUAL_2 = 8 // Needs to be cut for REBOOT to be possible.
var/const/GRID_CHECKER_WIRE_ALLOW_MANUAL_3 = 16 // Needs to be cut for REBOOT to be possible.
var/const/GRID_CHECKER_WIRE_SHOCK = 32 // Shocks the user if not wearing gloves.
var/const/GRID_CHECKER_WIRE_NOTHING_1 = 64 // Does nothing, but makes it a bit harder.
var/const/GRID_CHECKER_WIRE_NOTHING_2 = 128 // Does nothing, but makes it a bit harder.
/datum/wires/grid_checker/New(atom/_holder)
wires = list(
WIRE_REBOOT, WIRE_LOCKOUT, WIRE_ALLOW_MANUAL1,
WIRE_ALLOW_MANUAL2, WIRE_ALLOW_MANUAL3, WIRE_ELECTRIFY
)
return ..()
/datum/wires/grid_checker/CanUse(var/mob/living/L)
/datum/wires/grid_checker/interactable(mob/user)
var/obj/machinery/power/grid_checker/G = holder
if(G.opened)
return TRUE
return FALSE
/datum/wires/grid_checker/GetInteractWindow()
/datum/wires/grid_checker/get_status()
var/obj/machinery/power/grid_checker/G = holder
. += ..()
. += show_hint(0x1, G.power_failing, "The green light is off.", "The green light is on.")
. += show_hint(0x2, G.wire_locked_out, "The red light is on.", "The red light is off.")
. += show_hint(0x4, G.wire_allow_manual_1 && G.wire_allow_manual_2 && G.wire_allow_manual_3, "The blue light is on.", "The blue light is off.")
. = ..()
. += "The green light is [G.power_failing ? "off." : "on."]"
. += "The red light is [G.wire_locked_out ? "on." : "off."]"
. += "The blue light is [(G.wire_allow_manual_1 && G.wire_allow_manual_2 && G.wire_allow_manual_3) ? "on." : "off."]"
/datum/wires/grid_checker/UpdateCut(var/index, var/mended)
/datum/wires/grid_checker/on_cut(wire, mend)
var/obj/machinery/power/grid_checker/G = holder
switch(index)
if(GRID_CHECKER_WIRE_LOCKOUT)
G.wire_locked_out = !mended
if(GRID_CHECKER_WIRE_ALLOW_MANUAL_1)
G.wire_allow_manual_1 = !mended
if(GRID_CHECKER_WIRE_ALLOW_MANUAL_2)
G.wire_allow_manual_2 = !mended
if(GRID_CHECKER_WIRE_ALLOW_MANUAL_3)
G.wire_allow_manual_3 = !mended
if(GRID_CHECKER_WIRE_SHOCK)
switch(wire)
if(WIRE_LOCKOUT)
G.wire_locked_out = !mend
if(WIRE_ALLOW_MANUAL1)
G.wire_allow_manual_1 = !mend
if(WIRE_ALLOW_MANUAL2)
G.wire_allow_manual_2 = !mend
if(WIRE_ALLOW_MANUAL3)
G.wire_allow_manual_3 = !mend
if(WIRE_ELECTRIFY)
if(G.wire_locked_out)
return
G.shock(usr, 70)
..()
/datum/wires/grid_checker/UpdatePulsed(var/index)
/datum/wires/grid_checker/on_pulse(wire)
var/obj/machinery/power/grid_checker/G = holder
switch(index)
if(GRID_CHECKER_WIRE_REBOOT)
switch(wire)
if(WIRE_REBOOT)
if(G.wire_locked_out)
return
if(G.power_failing && G.wire_allow_manual_1 && G.wire_allow_manual_2 && G.wire_allow_manual_3)
G.end_power_failure(TRUE)
if(GRID_CHECKER_WIRE_LOCKOUT)
if(WIRE_LOCKOUT)
if(G.wire_locked_out)
return
G.wire_locked_out = TRUE
spawn(30 SECONDS)
G.wire_locked_out = FALSE
if(GRID_CHECKER_WIRE_SHOCK)
if(WIRE_ELECTRIFY)
if(G.wire_locked_out)
return
G.shock(usr, 70)
G.shock(usr, 70)
..()
+29 -35
View File
@@ -1,42 +1,39 @@
/datum/wires/jukebox
random = 1
randomize = TRUE
holder_type = /obj/machinery/media/jukebox
wire_count = 11
proper_name = "Jukebox"
var/const/WIRE_POWER = 1
var/const/WIRE_HACK = 2
var/const/WIRE_SPEEDUP = 4
var/const/WIRE_SPEEDDOWN = 8
var/const/WIRE_REVERSE = 16
var/const/WIRE_NOTHING1 = 32
var/const/WIRE_NOTHING2 = 64
var/const/WIRE_START = 128
var/const/WIRE_STOP = 256
var/const/WIRE_PREV = 512
var/const/WIRE_NEXT = 1024
/datum/wires/jukebox/New(atom/_holder)
wires = list(
WIRE_MAIN_POWER1, WIRE_JUKEBOX_HACK,
WIRE_SPEEDUP, WIRE_SPEEDDOWN, WIRE_REVERSE,
WIRE_START, WIRE_STOP, WIRE_PREV, WIRE_NEXT
)
return ..()
/datum/wires/jukebox/CanUse(var/mob/living/L)
/datum/wires/jukebox/interactable(mob/user)
var/obj/machinery/media/jukebox/A = holder
if(A.panel_open)
return 1
return 0
return TRUE
return FALSE
// Show the status of lights as a hint to the current state
/datum/wires/jukebox/GetInteractWindow()
/datum/wires/jukebox/get_status()
var/obj/machinery/media/jukebox/A = holder
. += ..()
. += show_hint(0x1, A.stat & (BROKEN|NOPOWER), "The power light is off.", "The power light is on.")
. += show_hint(0x2, A.hacked, "The parental guidance light is off.", "The parental guidance light is on.")
. += show_hint(0x4, IsIndexCut(WIRE_REVERSE), "The data light is hauntingly dark.", "The data light is glowing softly.")
. = ..()
. += "The power light is [A.stat & (BROKEN|NOPOWER) ? "off." : "on."]"
. += "The parental guidance light is [A.hacked ? "off." : "on."]"
. += "The data light is [is_cut(WIRE_REVERSE) ? "hauntingly dark." : "glowing softly."]"
// Give a hint as to what each wire does
/datum/wires/jukebox/UpdatePulsed(var/index)
/datum/wires/jukebox/on_pulse(wire)
var/obj/machinery/media/jukebox/A = holder
switch(index)
if(WIRE_POWER)
switch(wire)
if(WIRE_MAIN_POWER1)
holder.visible_message("<span class='notice'>[bicon(holder)] The power light flickers.</span>")
A.shock(usr, 90)
if(WIRE_HACK)
if(WIRE_JUKEBOX_HACK)
holder.visible_message("<span class='notice'>[bicon(holder)] The parental guidance light flickers.</span>")
if(WIRE_REVERSE)
holder.visible_message("<span class='notice'>[bicon(holder)] The data light blinks ominously.</span>")
@@ -55,24 +52,21 @@ var/const/WIRE_NEXT = 1024
else
A.shock(usr, 10) // The nothing wires give a chance to shock just for fun
/datum/wires/jukebox/UpdateCut(var/index, var/mended)
/datum/wires/jukebox/on_cut(wire, mend)
var/obj/machinery/media/jukebox/A = holder
switch(index)
if(WIRE_POWER)
switch(wire)
if(WIRE_MAIN_POWER1)
// TODO - Actually make machine electrified or something.
A.shock(usr, 90)
if(WIRE_HACK)
if(mended)
A.set_hacked(0)
else
A.set_hacked(1)
if(WIRE_JUKEBOX_HACK)
A.set_hacked(!mend)
if(WIRE_SPEEDUP, WIRE_SPEEDDOWN, WIRE_REVERSE)
var/newfreq = IsIndexCut(WIRE_REVERSE) ? -1 : 1;
if (IsIndexCut(WIRE_SPEEDUP))
var/newfreq = is_cut(WIRE_REVERSE) ? -1 : 1;
if(is_cut(WIRE_SPEEDUP))
newfreq *= 2
if (IsIndexCut(WIRE_SPEEDDOWN))
if(is_cut(WIRE_SPEEDDOWN))
newfreq *= 0.5
A.freq = newfreq
+19 -36
View File
@@ -1,32 +1,29 @@
/datum/wires/mines
wire_count = 6
random = 1
randomize = TRUE
holder_type = /obj/effect/mine
proper_name = "Explosive Wires"
#define WIRE_DETONATE 1
#define WIRE_TIMED_DET 2
#define WIRE_DISARM 4
#define WIRE_DUMMY_1 8
#define WIRE_DUMMY_2 16
#define WIRE_BADDISARM 32
/datum/wires/mines/New(atom/_holder)
wires = list(WIRE_EXPLODE, WIRE_EXPLODE_DELAY, WIRE_DISARM, WIRE_BADDISARM)
return ..()
/datum/wires/mines/GetInteractWindow()
/datum/wires/mines/get_status()
. = ..()
. += "<br>\n["Warning: detonation may occur even with proper equipment."]"
return .
. += "\[Warning: detonation may occur even with proper equipment.]"
/datum/wires/mines/proc/explode()
return
/datum/wires/mines/UpdateCut(var/index, var/mended)
/datum/wires/mines/on_cut(wire, mend)
var/obj/effect/mine/C = holder
switch(index)
if(WIRE_DETONATE)
switch(wire)
if(WIRE_EXPLODE)
C.visible_message("[bicon(C)] *BEEE-*", "[bicon(C)] *BEEE-*")
C.explode()
if(WIRE_TIMED_DET)
if(WIRE_EXPLODE_DELAY)
C.visible_message("[bicon(C)] *BEEE-*", "[bicon(C)] *BEEE-*")
C.explode()
@@ -35,30 +32,22 @@
new C.mineitemtype(get_turf(C))
spawn(0)
qdel(C)
return
if(WIRE_DUMMY_1)
return
if(WIRE_DUMMY_2)
return
if(WIRE_BADDISARM)
C.visible_message("[bicon(C)] *BEEPBEEPBEEP*", "[bicon(C)] *BEEPBEEPBEEP*")
spawn(20)
C.explode()
return
..()
/datum/wires/mines/UpdatePulsed(var/index)
/datum/wires/mines/on_pulse(wire)
var/obj/effect/mine/C = holder
if(IsIndexCut(index))
if(is_cut(wire))
return
switch(index)
if(WIRE_DETONATE)
switch(wire)
if(WIRE_EXPLODE)
C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*")
if(WIRE_TIMED_DET)
if(WIRE_EXPLODE_DELAY)
C.visible_message("[bicon(C)] *BEEPBEEPBEEP*", "[bicon(C)] *BEEPBEEPBEEP*")
spawn(20)
C.explode()
@@ -66,16 +55,10 @@
if(WIRE_DISARM)
C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*")
if(WIRE_DUMMY_1)
C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*")
if(WIRE_DUMMY_2)
C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*")
if(WIRE_BADDISARM)
C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*")
return
..()
/datum/wires/mines/CanUse(var/mob/living/L)
/datum/wires/mines/interactable(mob/user)
var/obj/effect/mine/M = holder
return M.panel_open
+22 -26
View File
@@ -1,52 +1,48 @@
/datum/wires/particle_acc/control_box
wire_count = 5
holder_type = /obj/machinery/particle_accelerator/control_box
proper_name = "Particle accelerator control"
var/const/PARTICLE_TOGGLE_WIRE = 1 // Toggles whether the PA is on or not.
var/const/PARTICLE_STRENGTH_WIRE = 2 // Determines the strength of the PA.
var/const/PARTICLE_INTERFACE_WIRE = 4 // Determines the interface showing up.
var/const/PARTICLE_LIMIT_POWER_WIRE = 8 // Determines how strong the PA can be.
//var/const/PARTICLE_NOTHING_WIRE = 16 // Blank wire
/datum/wires/particle_acc/control_box/New(atom/_holder)
wires = list(WIRE_PARTICLE_POWER, WIRE_PARTICLE_STRENGTH, WIRE_PARTICLE_INTERFACE, WIRE_PARTICLE_POWER_LIMIT)
return ..()
/datum/wires/particle_acc/control_box/CanUse(var/mob/living/L)
/datum/wires/particle_acc/control_box/interactable(mob/user)
var/obj/machinery/particle_accelerator/control_box/C = holder
if(C.construction_state == 2)
return 1
return 0
return TRUE
return FALSE
/datum/wires/particle_acc/control_box/UpdatePulsed(var/index)
/datum/wires/particle_acc/control_box/on_pulse(wire)
var/obj/machinery/particle_accelerator/control_box/C = holder
switch(index)
if(PARTICLE_TOGGLE_WIRE)
switch(wire)
if(WIRE_PARTICLE_POWER)
C.toggle_power()
if(PARTICLE_STRENGTH_WIRE)
if(WIRE_PARTICLE_STRENGTH)
C.add_strength()
if(PARTICLE_INTERFACE_WIRE)
if(WIRE_PARTICLE_INTERFACE)
C.interface_control = !C.interface_control
if(PARTICLE_LIMIT_POWER_WIRE)
if(WIRE_PARTICLE_POWER_LIMIT)
C.visible_message("[bicon(C)]<b>[C]</b> makes a large whirring noise.")
/datum/wires/particle_acc/control_box/UpdateCut(var/index, var/mended)
/datum/wires/particle_acc/control_box/on_cut(wire, mend)
var/obj/machinery/particle_accelerator/control_box/C = holder
switch(index)
if(PARTICLE_TOGGLE_WIRE)
if(C.active == !mended)
switch(wire)
if(WIRE_PARTICLE_POWER)
if(C.active == !mend)
C.toggle_power()
if(PARTICLE_STRENGTH_WIRE)
if(WIRE_PARTICLE_STRENGTH)
for(var/i = 1; i < 3; i++)
C.remove_strength()
if(PARTICLE_INTERFACE_WIRE)
C.interface_control = mended
if(WIRE_PARTICLE_INTERFACE)
C.interface_control = mend
if(PARTICLE_LIMIT_POWER_WIRE)
C.strength_upper_limit = (mended ? 2 : 3)
if(WIRE_PARTICLE_POWER_LIMIT)
C.strength_upper_limit = (mend ? 2 : 3)
if(C.strength_upper_limit < C.strength)
C.remove_strength()
+27 -26
View File
@@ -1,41 +1,42 @@
/datum/wires/radio
holder_type = /obj/item/device/radio
wire_count = 3
proper_name = "Radio"
var/const/WIRE_SIGNAL = 1
var/const/WIRE_RECEIVE = 2
var/const/WIRE_TRANSMIT = 4
/datum/wires/radio/New(atom/_holder)
wires = list(WIRE_RADIO_SIGNAL, WIRE_RADIO_RECEIVER, WIRE_RADIO_TRANSMIT)
return ..()
/datum/wires/radio/CanUse(var/mob/living/L)
/datum/wires/radio/interactable(mob/user)
var/obj/item/device/radio/R = holder
if(R.b_stat)
return 1
return 0
return TRUE
return FALSE
/datum/wires/radio/UpdatePulsed(var/index)
/datum/wires/radio/on_pulse(wire)
var/obj/item/device/radio/R = holder
switch(index)
if(WIRE_SIGNAL)
R.listening = !R.listening && !IsIndexCut(WIRE_RECEIVE)
R.broadcasting = R.listening && !IsIndexCut(WIRE_TRANSMIT)
switch(wire)
if(WIRE_RADIO_SIGNAL)
R.listening = !R.listening && !is_cut(WIRE_RADIO_RECEIVER)
R.broadcasting = R.listening && !is_cut(WIRE_RADIO_TRANSMIT)
if(WIRE_RECEIVE)
R.listening = !R.listening && !IsIndexCut(WIRE_SIGNAL)
if(WIRE_RADIO_RECEIVER)
R.listening = !R.listening && !is_cut(WIRE_RADIO_SIGNAL)
if(WIRE_TRANSMIT)
R.broadcasting = !R.broadcasting && !IsIndexCut(WIRE_SIGNAL)
SSnanoui.update_uis(holder)
if(WIRE_RADIO_TRANSMIT)
R.broadcasting = !R.broadcasting && !is_cut(WIRE_RADIO_SIGNAL)
..()
/datum/wires/radio/UpdateCut(var/index, var/mended)
/datum/wires/radio/on_cut(wire, mend)
var/obj/item/device/radio/R = holder
switch(index)
if(WIRE_SIGNAL)
R.listening = mended && !IsIndexCut(WIRE_RECEIVE)
R.broadcasting = mended && !IsIndexCut(WIRE_TRANSMIT)
switch(wire)
if(WIRE_RADIO_SIGNAL)
R.listening = mend && !is_cut(WIRE_RADIO_RECEIVER)
R.broadcasting = mend && !is_cut(WIRE_RADIO_TRANSMIT)
if(WIRE_RECEIVE)
R.listening = mended && !IsIndexCut(WIRE_SIGNAL)
if(WIRE_RADIO_RECEIVER)
R.listening = mend && !is_cut(WIRE_RADIO_SIGNAL)
if(WIRE_TRANSMIT)
R.broadcasting = mended && !IsIndexCut(WIRE_SIGNAL)
SSnanoui.update_uis(holder)
if(WIRE_RADIO_TRANSMIT)
R.broadcasting = mend && !is_cut(WIRE_RADIO_SIGNAL)
..()
+34 -47
View File
@@ -1,76 +1,63 @@
/datum/wires/robot
random = 1
randomize = TRUE
holder_type = /mob/living/silicon/robot
wire_count = 5
proper_name = "Cyborg"
var/const/BORG_WIRE_LAWCHECK = 1
var/const/BORG_WIRE_MAIN_POWER = 2 // The power wires do nothing whyyyyyyyyyyyyy
var/const/BORG_WIRE_LOCKED_DOWN = 4
var/const/BORG_WIRE_AI_CONTROL = 8
var/const/BORG_WIRE_CAMERA = 16
/datum/wires/robot/New(atom/_holder)
wires = list(WIRE_AI_CONTROL, WIRE_BORG_CAMERA, WIRE_BORG_LAWCHECK, WIRE_BORG_LOCKED)
return ..()
/datum/wires/robot/GetInteractWindow()
/datum/wires/robot/get_status()
. = ..()
var/mob/living/silicon/robot/R = holder
. += show_hint(0x1, R.lawupdate, "The LawSync light is on.", "The LawSync light is off.")
. += show_hint(0x2, R.connected_ai, "The AI link light is on.", "The AI link light is off.")
. += show_hint(0x4, (!isnull(R.camera) && R.camera.status == 1), "The camera light is on.", "The camera light is off.")
. += show_hint(0x8, R.lockdown, "The lockdown light is on.", "The lockdown light is off.")
return .
/datum/wires/robot/UpdateCut(var/index, var/mended)
. += "The LawSync light is [R.lawupdate ? "on" : "off"]."
. += "The AI link light is [R.connected_ai ? "on" : "off"]."
. += "The Camera light is [(R.camera && R.camera.status == 1) ? "on" : "off"]."
. += "The lockdown light is [R.lockcharge ? "on" : "off"]."
/datum/wires/robot/on_cut(wire, mend)
var/mob/living/silicon/robot/R = holder
switch(index)
if(BORG_WIRE_LAWCHECK) //Cut the law wire, and the borg will no longer receive law updates from its AI
if(!mended)
if (R.lawupdate == 1)
switch(wire)
if(WIRE_BORG_LAWCHECK) //Cut the law wire, and the borg will no longer receive law updates from its AI
if(!mend)
if(R.lawupdate)
to_chat(R, "LawSync protocol engaged.")
R.lawsync()
R.show_laws()
else
if (R.lawupdate == 0 && !R.emagged)
R.lawupdate = 1
if(!R.lawupdate && !R.emagged)
R.lawupdate = TRUE
if (BORG_WIRE_AI_CONTROL) //Cut the AI wire to reset AI control
if(!mended)
if(WIRE_AI_CONTROL) //Cut the AI wire to reset AI control
if(!mend)
R.disconnect_from_ai()
if (BORG_WIRE_CAMERA)
if(WIRE_BORG_CAMERA)
if(!isnull(R.camera) && !R.scrambledcodes)
R.camera.status = mended
R.camera.status = mend
if(BORG_WIRE_LAWCHECK) //Forces a law update if the borg is set to receive them. Since an update would happen when the borg checks its laws anyway, not much use, but eh
if (R.lawupdate)
R.lawsync()
if(WIRE_BORG_LOCKED)
R.SetLockdown(!mend)
..()
if(BORG_WIRE_LOCKED_DOWN)
R.SetLockdown(!mended)
/datum/wires/robot/UpdatePulsed(var/index)
/datum/wires/robot/on_pulse(wire)
var/mob/living/silicon/robot/R = holder
switch(index)
if (BORG_WIRE_AI_CONTROL) //pulse the AI wire to make the borg reselect an AI
switch(wire)
if(WIRE_AI_CONTROL) //pulse the AI wire to make the borg reselect an AI
if(!R.emagged)
var/mob/living/silicon/ai/new_ai = select_active_ai(R)
R.connect_to_ai(new_ai)
R.connect_to_ai(select_active_ai(R))
if (BORG_WIRE_CAMERA)
if(WIRE_BORG_CAMERA)
if(!isnull(R.camera) && R.camera.can_use() && !R.scrambledcodes)
R.visible_message("[R]'s camera lense focuses loudly.")
to_chat(R, "Your camera lense focuses loudly.")
if(BORG_WIRE_LOCKED_DOWN)
if(WIRE_BORG_LOCKED)
R.SetLockdown(!R.lockdown) // Toggle
/datum/wires/robot/CanUse(var/mob/living/L)
/datum/wires/robot/interactable(mob/user)
var/mob/living/silicon/robot/R = holder
if(R.wiresexposed)
return 1
return 0
/datum/wires/robot/proc/IsCameraCut()
return wires_status & BORG_WIRE_CAMERA
/datum/wires/robot/proc/LockedCut()
return wires_status & BORG_WIRE_LOCKED_DOWN
return TRUE
return FALSE
+34 -32
View File
@@ -1,56 +1,58 @@
#define SEED_WIRE_SMART 1
#define SEED_WIRE_CONTRABAND 2
#define SEED_WIRE_ELECTRIFY 4
#define SEED_WIRE_LOCKDOWN 8
/datum/wires/seedstorage
holder_type = /obj/machinery/seed_storage
wire_count = 4
random = 1
randomize = TRUE
proper_name = "Seed Storage"
/datum/wires/seedstorage/CanUse(var/mob/living/L)
/datum/wires/seedstorage/New(atom/_holder)
wires = list(WIRE_SEED_SMART, WIRE_CONTRABAND, WIRE_ELECTRIFY, WIRE_SEED_LOCKDOWN)
return ..()
/datum/wires/seedstorage/interactable(mob/user)
var/obj/machinery/seed_storage/V = holder
if(V.panel_open)
return 1
return 0
return TRUE
return FALSE
/datum/wires/seedstorage/GetInteractWindow()
/datum/wires/seedstorage/get_status()
var/obj/machinery/seed_storage/V = holder
. += ..()
. += show_hint(0x1, V.seconds_electrified, "The orange light is off.", "The orange light is on.")
. += show_hint(0x2, V.smart, "The red light is off.", "The red light is blinking.")
. += show_hint(0x4, V.hacked || V.emagged, "The green light is on.", "The green light is off.")
. += show_hint(0x8, V.lockdown, "The keypad lock is deployed.", "The keypad lock is retracted.")
. = ..()
. += "The orange light is [V.seconds_electrified ? "off." : "on."]"
. += "The red light is [V.smart ? "off." : "blinking."]"
. += "The green light is [(V.hacked || V.emagged) ? "on." : "off."]"
. += "The keypad lock light is [V.lockdown ? "deployed." : "retracted."]"
/datum/wires/seedstorage/UpdatePulsed(var/index)
/datum/wires/seedstorage/on_pulse(wire)
var/obj/machinery/seed_storage/V = holder
switch(index)
if(SEED_WIRE_SMART)
switch(wire)
if(WIRE_SEED_SMART)
V.smart = !V.smart
if(SEED_WIRE_CONTRABAND)
if(WIRE_CONTRABAND)
V.hacked = !V.hacked
if(SEED_WIRE_ELECTRIFY)
if(WIRE_ELECTRIFY)
V.seconds_electrified = 30
if(SEED_WIRE_LOCKDOWN)
if(WIRE_SEED_LOCKDOWN)
V.lockdown = !V.lockdown
..()
/datum/wires/seedstorage/UpdateCut(var/index, var/mended)
/datum/wires/seedstorage/on_cut(wire, mend)
var/obj/machinery/seed_storage/V = holder
switch(index)
if(SEED_WIRE_SMART)
V.smart = 0
if(SEED_WIRE_CONTRABAND)
V.hacked = !mended
if(SEED_WIRE_ELECTRIFY)
if(mended)
switch(wire)
if(WIRE_SEED_SMART)
V.smart = FALSE
if(WIRE_CONTRABAND)
V.hacked = !mend
if(WIRE_ELECTRIFY)
if(mend)
V.seconds_electrified = 0
else
V.seconds_electrified = -1
if(SEED_WIRE_LOCKDOWN)
if(mended)
V.lockdown = 1
if(WIRE_SEED_LOCKDOWN)
if(mend)
V.lockdown = TRUE
V.req_access = list()
V.req_one_access = list()
else
V.req_access = initial(V.req_access)
V.req_one_access = initial(V.req_one_access)
..()
+30 -29
View File
@@ -1,46 +1,47 @@
/datum/wires/shield_generator
holder_type = /obj/machinery/power/shield_generator
wire_count = 5
proper_name = "Shield Generator"
var/const/SHIELDGEN_WIRE_POWER = 1 // Cut to disable power input into the generator. Pulse does nothing. Mend to restore.
var/const/SHIELDGEN_WIRE_HACK = 2 // Pulse to hack the generator, enabling hacked modes. Cut to unhack. Mend does nothing.
var/const/SHIELDGEN_WIRE_CONTROL = 4 // Cut to lock most shield controls. Mend to unlock them. Pulse does nothing.
var/const/SHIELDGEN_WIRE_AICONTROL = 8 // Cut to disable AI control. Mend to restore.
var/const/SHIELDGEN_WIRE_NOTHING = 16 // A blank wire that doesn't have any specific function
/datum/wires/shield_generator/New(atom/_holder)
wires = list(WIRE_MAIN_POWER1, WIRE_CONTRABAND, WIRE_AI_CONTROL, WIRE_SHIELD_CONTROL)
return ..()
/datum/wires/shield_generator/CanUse(var/mob/living/L)
/datum/wires/shield_generator/interactable(mob/user)
var/obj/machinery/power/shield_generator/S = holder
if(S.panel_open)
return 1
return 0
return TRUE
return FALSE
/datum/wires/shield_generator/GetInteractWindow()
/datum/wires/shield_generator/get_status()
var/obj/machinery/power/shield_generator/S = holder
. += ..()
. += show_hint(0x1, S.mode_changes_locked, "The orange light is on.", "The orange light is off.")
. += show_hint(0x2, S.ai_control_disabled, "The blue light is off.", "The blue light is blinking.")
. += show_hint(0x4, S.hacked, "The violet light is pulsing.", "The violet light is steady.")
. += show_hint(0x8, S.input_cut, "The red light is off.", "The red light is on.")
. = ..()
. += "The orange light is [S.mode_changes_locked ? "on." : "off."]"
. += "The blue light is [S.ai_control_disabled ? "off." : "blinking."]"
. += "The violet light is [S.hacked ? "pulsing." : "steady."]"
. += "The red light is [S.input_cut ? "off." : "on."]"
/datum/wires/shield_generator/UpdateCut(index, mended)
/datum/wires/shield_generator/on_cut(wire, mend)
var/obj/machinery/power/shield_generator/S = holder
switch(index)
if(SHIELDGEN_WIRE_POWER)
S.input_cut = !mended
if(SHIELDGEN_WIRE_HACK)
if(!mended)
S.hacked = 0
switch(wire)
if(WIRE_MAIN_POWER1)
S.input_cut = !mend
if(WIRE_CONTRABAND)
if(!mend)
S.hacked = FALSE
if(S.check_flag(MODEFLAG_BYPASS))
S.toggle_flag(MODEFLAG_BYPASS)
if(S.check_flag(MODEFLAG_OVERCHARGE))
S.toggle_flag(MODEFLAG_OVERCHARGE)
if(SHIELDGEN_WIRE_CONTROL)
S.mode_changes_locked = !mended
if(SHIELDGEN_WIRE_AICONTROL)
S.ai_control_disabled = !mended
if(WIRE_SHIELD_CONTROL)
S.mode_changes_locked = !mend
if(WIRE_AI_CONTROL)
S.ai_control_disabled = !mend
..()
/datum/wires/shield_generator/UpdatePulsed(var/index)
/datum/wires/shield_generator/on_pulse(wire)
var/obj/machinery/power/shield_generator/S = holder
switch(index)
if(SHIELDGEN_WIRE_HACK)
S.hacked = 1
switch(wire)
if(WIRE_CONTRABAND)
S.hacked = TRUE
..()
+32 -27
View File
@@ -1,47 +1,52 @@
/datum/wires/smartfridge
holder_type = /obj/machinery/smartfridge
wire_count = 3
proper_name = "Smartfridge"
/datum/wires/smartfridge/New(atom/_holder)
wires = list(WIRE_ELECTRIFY, WIRE_IDSCAN, WIRE_THROW_ITEM)
return ..()
/datum/wires/smartfridge/secure
random = 1
wire_count = 4
randomize = TRUE
wire_count = 4 // 3 actual, 1 dud.
var/const/SMARTFRIDGE_WIRE_ELECTRIFY = 1
var/const/SMARTFRIDGE_WIRE_THROW = 2
var/const/SMARTFRIDGE_WIRE_IDSCAN = 4
/datum/wires/smartfridge/CanUse(var/mob/living/L)
/datum/wires/smartfridge/interactable(mob/user)
var/obj/machinery/smartfridge/S = holder
if(iscarbon(user) && S.Adjacent(user) && S.seconds_electrified && S.shock(user, 100))
return FALSE
if(S.panel_open)
return 1
return 0
return TRUE
return FALSE
/datum/wires/smartfridge/GetInteractWindow()
/datum/wires/smartfridge/get_status()
. = ..()
var/obj/machinery/smartfridge/S = holder
. += ..()
. += show_hint(0x1, S.seconds_electrified, "The orange light is off.", "The orange light is on.")
. += show_hint(0x2, S.shoot_inventory, "The red light is off.", "The red light is blinking.")
. += show_hint(0x4, S.scan_id, "A purple light is on.", "A yellow light is on.")
. += "The orange light is [S.seconds_electrified ? "off" : "on"]."
. += "The red light is [S.shoot_inventory ? "off" : "blinking"]."
. += "A [S.scan_id ? "purple" : "yellow"] light is on."
/datum/wires/smartfridge/UpdatePulsed(var/index)
/datum/wires/smartfridge/on_pulse(wire)
var/obj/machinery/smartfridge/S = holder
switch(index)
if(SMARTFRIDGE_WIRE_THROW)
switch(wire)
if(WIRE_THROW_ITEM)
S.shoot_inventory = !S.shoot_inventory
if(SMARTFRIDGE_WIRE_ELECTRIFY)
if(WIRE_ELECTRIFY)
S.seconds_electrified = 30
if(SMARTFRIDGE_WIRE_IDSCAN)
if(WIRE_IDSCAN)
S.scan_id = !S.scan_id
..()
/datum/wires/smartfridge/UpdateCut(var/index, var/mended)
/datum/wires/smartfridge/on_cut(wire, mend)
var/obj/machinery/smartfridge/S = holder
switch(index)
if(SMARTFRIDGE_WIRE_THROW)
S.shoot_inventory = !mended
if(SMARTFRIDGE_WIRE_ELECTRIFY)
if(mended)
switch(wire)
if(WIRE_THROW_ITEM)
S.shoot_inventory = !mend
if(WIRE_ELECTRIFY)
if(mend)
S.seconds_electrified = 0
else
S.seconds_electrified = -1
if(SMARTFRIDGE_WIRE_IDSCAN)
S.scan_id = 1
if(WIRE_IDSCAN)
S.scan_id = TRUE
..()
+34 -36
View File
@@ -1,59 +1,57 @@
/datum/wires/smes
holder_type = /obj/machinery/power/smes/buildable
wire_count = 5
proper_name = "SMES"
var/const/SMES_WIRE_RCON = 1 // Remote control (AI and consoles), cut to disable
var/const/SMES_WIRE_INPUT = 2 // Input wire, cut to disable input, pulse to disable for 60s
var/const/SMES_WIRE_OUTPUT = 4 // Output wire, cut to disable output, pulse to disable for 60s
var/const/SMES_WIRE_GROUNDING = 8 // Cut to quickly discharge causing sparks, pulse to only create few sparks
var/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to reenable
/datum/wires/smes/New(atom/_holder)
wires = list(WIRE_SMES_RCON, WIRE_SMES_INPUT, WIRE_SMES_OUTPUT, WIRE_SMES_GROUNDING, WIRE_SMES_FAILSAFES)
return ..()
/datum/wires/smes/CanUse(var/mob/living/L)
/datum/wires/smes/interactable(mob/user)
var/obj/machinery/power/smes/buildable/S = holder
if(S.panel_open)
return 1
return 0
return TRUE
return FALSE
/datum/wires/smes/GetInteractWindow()
/datum/wires/smes/get_status()
var/obj/machinery/power/smes/buildable/S = holder
. += ..()
. += show_hint(0x1, S.input_cut || S.input_pulsed || S.output_cut || S.output_pulsed, "The green light is off.", "The green light is on.")
. += show_hint(0x2, S.safeties_enabled || S.grounding, "The red light is off.", "The red light is blinking.")
. += show_hint(0x4, S.RCon, "The blue light is on.", "The blue light is off.")
. = ..()
. += "The green light is [(S.input_cut || S.input_pulsed || S.output_cut || S.output_pulsed) ? "off" : "on"]."
. += "The red light is [(S.safeties_enabled || S.grounding) ? "off" : "blinking"]."
. += "The blue light is [S.RCon ? "on" : "off"]."
/datum/wires/smes/UpdateCut(var/index, var/mended)
/datum/wires/smes/on_cut(wire, mend)
var/obj/machinery/power/smes/buildable/S = holder
switch(index)
if(SMES_WIRE_RCON)
S.RCon = mended
if(SMES_WIRE_INPUT)
S.input_cut = !mended
if(SMES_WIRE_OUTPUT)
S.output_cut = !mended
if(SMES_WIRE_GROUNDING)
S.grounding = mended
if(SMES_WIRE_FAILSAFES)
S.safeties_enabled = mended
switch(wire)
if(WIRE_SMES_RCON)
S.RCon = mend
if(WIRE_SMES_INPUT)
S.input_cut = !mend
if(WIRE_SMES_OUTPUT)
S.output_cut = !mend
if(WIRE_SMES_GROUNDING)
S.grounding = mend
if(WIRE_SMES_FAILSAFES)
S.safeties_enabled = mend
..()
/datum/wires/smes/UpdatePulsed(var/index)
/datum/wires/smes/on_pulse(wire)
var/obj/machinery/power/smes/buildable/S = holder
switch(index)
if(SMES_WIRE_RCON)
switch(wire)
if(WIRE_SMES_RCON)
if(S.RCon)
S.RCon = 0
spawn(10)
S.RCon = 1
if(SMES_WIRE_INPUT)
if(WIRE_SMES_INPUT)
S.toggle_input()
if(SMES_WIRE_OUTPUT)
if(WIRE_SMES_OUTPUT)
S.toggle_output()
if(SMES_WIRE_GROUNDING)
if(WIRE_SMES_GROUNDING)
S.grounding = 0
if(SMES_WIRE_FAILSAFES)
if(WIRE_SMES_FAILSAFES)
if(S.safeties_enabled)
S.safeties_enabled = 0
spawn(10)
S.safeties_enabled = 1
S.safeties_enabled = 1
..()
+28 -29
View File
@@ -1,47 +1,46 @@
/datum/wires/suit_storage_unit
holder_type = /obj/machinery/suit_cycler
wire_count = 3
proper_name = "Suit storage unit"
var/const/SUIT_STORAGE_WIRE_ELECTRIFY = 1
var/const/SUIT_STORAGE_WIRE_SAFETY = 2
var/const/SUIT_STORAGE_WIRE_LOCKED = 4
/datum/wires/suit_storage_unit/New(atom/_holder)
wires = list(WIRE_IDSCAN, WIRE_ELECTRIFY, WIRE_SAFETY)
return ..()
/datum/wires/suit_storage_unit/CanUse(var/mob/living/L)
/datum/wires/suit_storage_unit/interactable(mob/user)
var/obj/machinery/suit_cycler/S = holder
if(!istype(L, /mob/living/silicon))
if(S.electrified)
if(S.shock(L, 100))
return 0
if(iscarbon(user) && S.Adjacent(user) && S.electrified)
return !S.shock(user, 100)
if(S.panel_open)
return 1
return 0
return TRUE
return FALSE
/datum/wires/suit_storage_unit/GetInteractWindow()
var/obj/machinery/suit_cycler/S = holder
. += ..()
. += show_hint(0x1, S.electrified, "The orange light is off.", "The orange light is on.")
. += show_hint(0x2, S.safeties, "The red light is off.", "The red light is blinking.")
. += show_hint(0x4, S.locked, "The yellow light is on.", "The yellow light is off.")
/datum/wires/suit_storage_unit/get_status()
. = ..()
var/obj/machinery/suit_cycler/A = holder
. += "The orange light is [A.electrified ? "off" : "on"]."
. += "The red light is [A.safeties ? "off" : "blinking"]."
. += "The yellow light is [A.locked ? "on" : "off"]."
/datum/wires/suit_storage_unit/UpdatePulsed(var/index)
/datum/wires/suit_storage_unit/on_pulse(wire)
var/obj/machinery/suit_cycler/S = holder
switch(index)
if(SUIT_STORAGE_WIRE_SAFETY)
switch(wire)
if(WIRE_SAFETY)
S.safeties = !S.safeties
if(SUIT_STORAGE_WIRE_ELECTRIFY)
if(WIRE_ELECTRIFY)
S.electrified = 30
if(SUIT_STORAGE_WIRE_LOCKED)
if(WIRE_IDSCAN)
S.locked = !S.locked
/datum/wires/suit_storage_unit/UpdateCut(var/index, var/mended)
/datum/wires/suit_storage_unit/on_cut(wire, mend)
var/obj/machinery/suit_cycler/S = holder
switch(index)
if(SUIT_STORAGE_WIRE_SAFETY)
S.safeties = mended
if(SUIT_STORAGE_WIRE_LOCKED)
S.locked = mended
if(SUIT_STORAGE_WIRE_ELECTRIFY)
if(mended)
switch(wire)
if(WIRE_SAFETY)
S.safeties = mend
if(WIRE_IDSCAN)
S.locked = mend
if(WIRE_ELECTRIFY)
if(mend)
S.electrified = 0
else
S.electrified = -1
+10 -7
View File
@@ -1,18 +1,21 @@
/datum/wires/tesla_coil
wire_count = 1
holder_type = /obj/machinery/power/tesla_coil
proper_name = "Tesla coil"
var/const/WIRE_ZAP = 1
/datum/wires/tesla_coil/New(atom/_holder)
wires = list(WIRE_TESLACOIL_ZAP)
return ..()
/datum/wires/tesla_coil/CanUse(mob/living/L)
/datum/wires/tesla_coil/interactable(mob/user)
var/obj/machinery/power/tesla_coil/T = holder
if(T && T.panel_open)
return 1
return 0
return TRUE
return FALSE
/datum/wires/tesla_coil/UpdatePulsed(index)
/datum/wires/tesla_coil/on_pulse(wire)
var/obj/machinery/power/tesla_coil/T = holder
switch(index)
if(WIRE_ZAP)
switch(wire)
if(WIRE_TESLACOIL_ZAP)
T.zap()
..()
+31 -27
View File
@@ -1,49 +1,53 @@
/datum/wires/vending
holder_type = /obj/machinery/vending
wire_count = 4
proper_name = "Vending machine"
var/const/VENDING_WIRE_THROW = 1
var/const/VENDING_WIRE_CONTRABAND = 2
var/const/VENDING_WIRE_ELECTRIFY = 4
var/const/VENDING_WIRE_IDSCAN = 8
/datum/wires/vending/New(atom/_holder)
wires = list(WIRE_THROW_ITEM, WIRE_IDSCAN, WIRE_ELECTRIFY, WIRE_CONTRABAND)
return ..()
/datum/wires/vending/CanUse(var/mob/living/L)
/datum/wires/vending/interactable(mob/user)
var/obj/machinery/vending/V = holder
if(iscarbon(user) && V.seconds_electrified && V.shock(user, 100))
return FALSE
if(V.panel_open)
return 1
return 0
return TRUE
return FALSE
/datum/wires/vending/GetInteractWindow()
/datum/wires/vending/get_status()
var/obj/machinery/vending/V = holder
. += ..()
. += show_hint(0x1, V.seconds_electrified, "The orange light is off.", "The orange light is on.")
. += show_hint(0x2, V.shoot_inventory, "The red light is off.", "The red light is blinking.")
. += show_hint(0x4, V.categories & CAT_HIDDEN, "A green light is on.", "A green light is off.")
. += show_hint(0x8, V.scan_id, "A purple light is on.", "A yellow light is on.")
. = ..()
. += "The orange light is [V.seconds_electrified ? "on" : "off"]."
. += "The red light is [V.shoot_inventory ? "off" : "blinking"]."
. += "The green light is [(V.categories & CAT_HIDDEN) ? "on" : "off"]."
. += "A [V.scan_id ? "purple" : "yellow"] light is on."
/datum/wires/vending/UpdatePulsed(var/index)
/datum/wires/vending/on_pulse(wire)
var/obj/machinery/vending/V = holder
switch(index)
if(VENDING_WIRE_THROW)
switch(wire)
if(WIRE_THROW_ITEM)
V.shoot_inventory = !V.shoot_inventory
if(VENDING_WIRE_CONTRABAND)
if(WIRE_CONTRABAND)
V.categories ^= CAT_HIDDEN
if(VENDING_WIRE_ELECTRIFY)
if(WIRE_ELECTRIFY)
V.seconds_electrified = 30
if(VENDING_WIRE_IDSCAN)
if(WIRE_IDSCAN)
V.scan_id = !V.scan_id
..()
/datum/wires/vending/UpdateCut(var/index, var/mended)
/datum/wires/vending/on_cut(wire, mend)
var/obj/machinery/vending/V = holder
switch(index)
if(VENDING_WIRE_THROW)
V.shoot_inventory = !mended
if(VENDING_WIRE_CONTRABAND)
switch(wire)
if(WIRE_THROW_ITEM)
V.shoot_inventory = !mend
if(WIRE_CONTRABAND)
V.categories &= ~CAT_HIDDEN
if(VENDING_WIRE_ELECTRIFY)
if(mended)
if(WIRE_ELECTRIFY)
if(mend)
V.seconds_electrified = 0
else
V.seconds_electrified = -1
if(VENDING_WIRE_IDSCAN)
if(WIRE_IDSCAN)
V.scan_id = 1
..()
+428 -308
View File
@@ -1,340 +1,460 @@
// Wire datums. Created by Giacomand.
// Was created to replace a horrible case of copy and pasted code with no care for maintability.
// Goodbye Door wires, Cyborg wires, Vending Machine wires, Autolathe wires
// Protolathe wires, APC wires and Camera wires!
#define MAX_FLAG 65535
var/list/same_wires = list()
// 14 colours, if you're adding more than 14 wires then add more colours here
var/list/wireColours = list("red", "blue", "green", "darkred", "orange", "brown", "gold", "gray", "cyan", "navy", "purple", "pink", "black", "yellow")
/datum/wires
/// TRUE if the wires will be different every time a new wire datum is created.
var/randomize = FALSE
/// The atom the wires belong too. For example: an airlock.
var/atom/holder
/// The holder type; used to make sure that the holder is the correct type.
var/holder_type
/// The display name for the TGUI window. For example, given the var is "APC"...
/// When the TGUI window is opened, "wires" will be appended to it's title, and it would become "APC wires".
var/proper_name = "Unknown"
/// The total number of wires that our holder atom has.
var/wire_count = NONE
/// A list of all wires. For a list of valid wires defines that can go here, see `code/__DEFINES/wires.dm`
var/list/wires
/// A list of all cut wires. The same values that can go into `wires` will get added and removed from this list.
var/list/cut_wires
/// An associative list with the wire color as the key, and the wire define as the value.
var/list/colors
/// An associative list of signalers attached to the wires. The wire color is the key, and the signaler object reference is the value.
var/list/assemblies
var/random = 0 // Will the wires be different for every single instance.
var/atom/holder = null // The holder
var/holder_type = null // The holder type; used to make sure that the holder is the correct type.
var/wire_count = 0 // Max is 16
var/wires_status = 0 // BITFLAG OF WIRES
var/hint_states = 0 // BITFLAG OF HINT STATES (For tracking if they changed for bolding in UI)
var/hint_states_initialized = FALSE // False until first time window is rendered.
var/list/wires = list()
var/list/signallers = list()
var/table_options = " align='center'"
var/row_options1 = " width='80px'"
var/row_options2 = " width='260px'"
var/window_x = 370
var/window_y = 470
// Note: Its assumed states are boolean. If you ever have a multi-state hint, you must implement that yourself.
/datum/wires/proc/show_hint(flag, current_state, true_text, false_text)
var/state_changed = FALSE
if(hint_states_initialized)
if(!(hint_states & flag) != !current_state) // NOT-ing to convert to boolean
state_changed = TRUE
if(current_state)
hint_states |= flag
return state_changed ? "<br><b>[true_text]</b>" : "<br>[true_text]"
else
hint_states &= ~flag
return state_changed ? "<br><b>[false_text]</b>" : "<br>[false_text]"
/datum/wires/New(var/atom/holder)
/datum/wires/New(atom/_holder)
..()
src.holder = holder
if(!istype(holder, holder_type))
if(!istype(_holder, holder_type))
CRASH("Our holder is null/the wrong type!")
holder = _holder
cut_wires = list()
colors = list()
assemblies = list()
// Add in the appropriate amount of dud wires.
var/wire_len = length(wires)
if(wire_len < wire_count) // If the amount of "real" wires is less than the total we're suppose to have...
add_duds(wire_count - wire_len) // Add in the appropriate amount of duds to reach `wire_count`.
// If the randomize is true, we need to generate a new set of wires and ignore any wire color directories.
if(randomize)
randomize()
return
// Generate new wires
if(random)
GenerateWires()
// Get the same wires
if(!GLOB.wire_color_directory[holder_type])
randomize()
GLOB.wire_color_directory[holder_type] = colors
else
// We don't have any wires to copy yet, generate some and then copy it.
if(!same_wires[holder_type])
GenerateWires()
same_wires[holder_type] = src.wires.Copy()
else
var/list/wires = same_wires[holder_type]
src.wires = wires // Reference the wires list.
colors = GLOB.wire_color_directory[holder_type]
/datum/wires/Destroy()
holder = null
signallers.Cut()
for(var/color in colors)
detach_assembly(color)
return ..()
/datum/wires/proc/GenerateWires()
var/list/colours_to_pick = wireColours.Copy() // Get a copy, not a reference.
var/list/indexes_to_pick = list()
//Generate our indexes
for(var/i = 1; i < MAX_FLAG && i < (1 << wire_count); i += i)
indexes_to_pick += i
colours_to_pick.len = wire_count // Downsize it to our specifications.
/**
* Randomly generates a new set of wires. and corresponding colors from the given pool. Assigns the information as an associative list, to `colors`.
*
* In the `colors` list, the name of the color is the key, and the wire is the value.
* For example: `colors["red"] = WIRE_ELECTRIFY`. This will look like `list("red" = WIRE_ELECTRIFY)` internally.
*/
/datum/wires/proc/randomize()
var/static/list/possible_colors = list("red", "blue", "green", "darkmagenta", "orange", "brown", "gold", "grey", "cyan", "white", "purple", "pink", "darkslategrey", "yellow")
var/list/my_possible_colors = possible_colors.Copy()
while(colours_to_pick.len && indexes_to_pick.len)
// Pick and remove a colour
var/colour = pick_n_take(colours_to_pick)
for(var/wire in shuffle(wires))
colors[pick_n_take(my_possible_colors)] = wire
// Pick and remove an index
var/index = pick_n_take(indexes_to_pick)
/**
* Proc called when the user attempts to interact with wires UI.
*
* Checks if the user exists, is a mob, the wires are attached to something (`holder`) and makes sure `interactable(user)` returns TRUE.
* If all the checks succeed, open the TGUI interface for the user.
*
* Arugments:
* * user - the mob trying to interact with the wires.
*/
/datum/wires/proc/Interact(mob/user)
if(user && istype(user) && holder && interactable(user))
tgui_interact(user)
src.wires[colour] = index
//wires = shuffle(wires)
/**
* Base proc, intended to be overriden. Wire datum specific checks you want to run before the TGUI is shown to the user should go here.
*/
/datum/wires/proc/interactable(mob/user)
return TRUE
/// Users will be interacting with our holder object and not the wire datum directly, therefore we need to return the holder.
/datum/wires/tgui_host()
return holder
/datum/wires/proc/Interact(var/mob/living/user)
/datum/wires/tgui_interact(mob/user, datum/tgui/ui = null)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "Wires", "[proper_name] wires")
ui.open()
var/html = null
if(holder && CanUse(user))
html = GetInteractWindow()
hint_states_initialized = TRUE
if(html)
user.set_machine(holder)
else
user.unset_machine()
// No content means no window.
user << browse(null, "window=wires")
/datum/wires/tgui_state(mob/user)
return GLOB.tgui_physical_state
/datum/wires/tgui_data(mob/user)
var/list/data = list()
var/list/replace_colors
if(isliving(user))
var/mob/living/L = user
for(var/datum/modifier/M in L.modifiers)
if(!isnull(M.wire_colors_replace))
replace_colors = M.wire_colors_replace
break
var/list/wires_list = list()
for(var/color in colors)
var/replaced_color = color
var/color_name = color
if(color in replace_colors) // If this color is one that needs to be replaced using the colorblindness list.
replaced_color = replace_colors[color]
if(replaced_color in LIST_COLOR_RENAME) // If its an ugly written color name like "darkolivegreen", rename it to something like "dark green".
color_name = LIST_COLOR_RENAME[replaced_color]
else
color_name = replaced_color // Else just keep the normal color name
if(color in LIST_COLOR_RENAME)
color_name = LIST_COLOR_RENAME[color]
wires_list += list(list(
"seen_color" = replaced_color, // The color of the wire that the mob will see. This will be the same as `color` if the user is NOT colorblind.
"color_name" = color_name, // The wire's name. This will be the same as `color` if the user is NOT colorblind.
"color" = color, // The "real" color of the wire. No replacements.
"wire" = can_see_wire_info(user) && !is_dud_color(color) ? get_wire(color) : null, // Wire define information like "Contraband" or "Door Bolts".
"cut" = is_color_cut(color), // Whether the wire is cut or not. Used to display "cut" or "mend".
"attached" = is_attached(color) // Whether or not a signaler is attached to this wire.
))
data["wires"] = wires_list
// Get the information shown at the bottom of wire TGUI window, such as "The red light is blinking", etc.
// If the user is colorblind, we need to replace these colors as well.
var/list/status = get_status()
if(replace_colors)
var/i
for(i in 1 to length(status))
for(var/color in replace_colors)
var/new_color = replace_colors[color]
if(new_color in LIST_COLOR_RENAME)
new_color = LIST_COLOR_RENAME[new_color]
if(findtext(status[i], color))
status[i] = replacetext(status[i], color, new_color)
break
data["status"] = status
return data
/datum/wires/tgui_act(action, list/params)
if(..())
return
var/datum/browser/popup = new(user, "wires", holder.name, window_x, window_y)
popup.set_content(html)
popup.set_title_image(user.browse_rsc_icon(holder.icon, holder.icon_state))
popup.open()
/datum/wires/proc/GetInteractWindow()
var/html = "<div class='block'>"
html += "<h3>Exposed Wires</h3>"
html += "<table[table_options]>"
for(var/colour in wires)
html += "<tr>"
html += "<td[row_options1]><font color='[colour]'>[capitalize(colour)]</font></td>"
html += "<td[row_options2]>"
html += "<A href='?src=\ref[src];action=1;cut=[colour]'>[IsColourCut(colour) ? "Mend" : "Cut"]</A>"
html += " <A href='?src=\ref[src];action=1;pulse=[colour]'>Pulse</A>"
html += " <A href='?src=\ref[src];action=1;attach=[colour]'>[IsAttached(colour) ? "Detach" : "Attach"] Signaller</A></td></tr>"
html += "</table>"
html += "</div>"
if (random)
html += "<i>\The [holder] appears to have tamper-resistant electronics installed.</i><br><br>" //maybe this could be more generic?
return html
/datum/wires/Topic(href, href_list)
..()
if(in_range(holder, usr) && isliving(usr))
var/mob/living/L = usr
if(CanUse(L) && href_list["action"])
holder.add_hiddenprint(L)
var/list/items = L.get_all_held_items()
var/success = FALSE
if(href_list["cut"]) // Toggles the cut/mend status
for(var/obj/item/I in items) // Paranoid about someone somehow grabbing a non-/obj/item, lets play it safe.
if(I.is_wirecutter())
var/colour = href_list["cut"]
CutWireColour(colour)
playsound(holder, I.usesound, 20, 1)
success = TRUE
break
if(!success)
to_chat(L, span("warning", "You need wirecutters!"))
else if(href_list["pulse"])
for(var/obj/item/I in items)
if(I.is_multitool())
var/colour = href_list["pulse"]
PulseColour(colour)
playsound(holder, 'sound/weapons/empty.ogg', 20, 1)
success = TRUE
break
if(!success)
to_chat(L, span("warning", "You need a multitool!"))
else if(href_list["attach"])
var/colour = href_list["attach"]
// Detach
if(IsAttached(colour))
var/obj/item/O = Detach(colour)
if(O)
L.put_in_hands(O)
// Attach
else
var/obj/item/device/assembly/signaler/S = L.is_holding_item_of_type(/obj/item/device/assembly/signaler)
if(istype(S))
L.drop_from_inventory(S)
Attach(colour, S)
else
to_chat(L, span("warning", "You need a remote signaller!"))
// Update Window
Interact(usr)
if(href_list["close"])
usr << browse(null, "window=wires")
usr.unset_machine(holder)
//
// Overridable Procs
//
// Called when wires cut/mended.
/datum/wires/proc/UpdateCut(var/index, var/mended)
return
// Called when wire pulsed. Add code here.
/datum/wires/proc/UpdatePulsed(var/index)
return
/datum/wires/proc/CanUse(var/mob/living/L)
return 1
// Example of use:
/*
var/const/BOLTED= 1
var/const/SHOCKED = 2
var/const/SAFETY = 4
var/const/POWER = 8
/datum/wires/door/UpdateCut(var/index, var/mended)
var/obj/machinery/door/airlock/A = holder
switch(index)
if(BOLTED)
if(!mended)
A.bolt()
if(SHOCKED)
A.shock()
if(SAFETY )
A.safety()
*/
//
// Helper Procs
//
/datum/wires/proc/PulseColour(var/colour)
PulseIndex(GetIndex(colour))
/datum/wires/proc/PulseIndex(var/index)
if(IsIndexCut(index))
var/mob/user = usr
if(!interactable(user))
return
UpdatePulsed(index)
/datum/wires/proc/GetIndex(var/colour)
if(wires[colour])
var/index = wires[colour]
return index
var/obj/item/I = user.get_active_hand()
var/color = lowertext(params["wire"])
holder.add_hiddenprint(user)
switch(action)
// Toggles the cut/mend status.
if("cut")
// if(!I.is_wirecutter() && !user.can_admin_interact())
if(!istype(I) || !I.is_wirecutter())
to_chat(user, "<span class='error'>You need wirecutters!</span>")
return
playsound(holder, I.usesound, 20, 1)
cut_color(color)
return TRUE
// Pulse a wire.
if("pulse")
// if(!I.is_multitool() && !user.can_admin_interact())
if(!istype(I) || !I.is_multitool())
to_chat(user, "<span class='error'>You need a multitool!</span>")
return
playsound(holder, 'sound/weapons/empty.ogg', 20, 1)
pulse_color(color)
// If they pulse the electrify wire, call interactable() and try to shock them.
if(get_wire(color) == WIRE_ELECTRIFY)
interactable(user)
return TRUE
// Attach a signaler to a wire.
if("attach")
if(is_attached(color))
var/obj/item/O = detach_assembly(color)
if(O)
user.put_in_hands(O)
return TRUE
if(!istype(I, /obj/item/device/assembly/signaler))
to_chat(user, "<span class='error'>You need a remote signaller!</span>")
return
if(user.unEquip(I))
attach_assembly(color, I)
return TRUE
else
to_chat(user, "<span class='warning'>[I] is stuck to your hand!</span>")
/**
* Proc called to determine if the user can see wire define information, such as "Contraband", "Door Bolts", etc.
*
* If the user is an admin, or has a multitool which reveals wire information in their active hand, the proc returns TRUE.
*
* Arguments:
* * user - the mob who is interacting with the wires.
*/
/datum/wires/proc/can_see_wire_info(mob/user)
// TODO: Reimplement this if we ever get Advanced Admin Interaction.
// if(user.can_admin_interact())
// return TRUE
var/obj/item/I = user.get_active_hand()
if(istype(I, /obj/item/device/multitool/alien))
return TRUE
return FALSE
/**
* Base proc, intended to be overwritten. Put wire information you'll see at the botton of the TGUI window here, such as "The red light is blinking".
*/
/datum/wires/proc/get_status()
return list()
/**
* Clears the `colors` list, and randomizes it to a new set of color-to-wire relations.
*/
/datum/wires/proc/shuffle_wires()
colors.Cut()
randomize()
/**
* Repairs all cut wires.
*/
/datum/wires/proc/repair()
cut_wires.Cut()
/**
* Adds in dud wires, which do nothing when cut/pulsed.
*
* Arguments:
* * duds - the amount of dud wires to generate.
*/
/datum/wires/proc/add_duds(duds)
while(duds)
var/dud = WIRE_DUD_PREFIX + "[--duds]"
if(dud in wires)
continue
wires += dud
/**
* Determines if the passed in wire is a dud or not. Returns TRUE if the wire is a dud, FALSE otherwise.
*
* Arugments:
* * wire - a wire define, NOT a color. For example `WIRE_ELECTRIFY`.
*/
/datum/wires/proc/is_dud(wire)
return findtext(wire, WIRE_DUD_PREFIX, 1, length(WIRE_DUD_PREFIX) + 1)
/**
* Returns TRUE if the wire that corresponds to the passed in color is a dud. FALSE otherwise.
*
* Arugments:
* * color - a wire color.
*/
/datum/wires/proc/is_dud_color(color)
return is_dud(get_wire(color))
/**
* Gets the wire associated with the color passed in.
*
* Arugments:
* * color - a wire color.
*/
/datum/wires/proc/get_wire(color)
return colors[color]
/**
* Determines if the passed in wire is cut or not. Returns TRUE if it's cut, FALSE otherwise.
*
* Arugments:
* * wire - a wire define, NOT a color. For example `WIRE_ELECTRIFY`.
*/
/datum/wires/proc/is_cut(wire)
return (wire in cut_wires)
/**
* Determines if the wire associated with the passed in color, is cut or not. Returns TRUE if it's cut, FALSE otherwise.
*
* Arugments:
* * wire - a wire color.
*/
/datum/wires/proc/is_color_cut(color)
return is_cut(get_wire(color))
/**
* Determines if all of the wires are cut. Returns TRUE they're all cut, FALSE otherwise.
*/
/datum/wires/proc/is_all_cut()
return (length(cut_wires) == length(wires))
/**
* Cut or mend a wire. Calls `on_cut()`.
*
* Arugments:
* * wire - a wire define, NOT a color. For example `WIRE_ELECTRIFY`.
*/
/datum/wires/proc/cut(wire)
if(is_cut(wire))
cut_wires -= wire
on_cut(wire, mend = TRUE)
else
CRASH("[colour] is not a key in wires.")
cut_wires += wire
on_cut(wire, mend = FALSE)
//
// Is Index/Colour Cut procs
//
/**
* Cut the wire which corresponds with the passed in color.
*
* Arugments:
* * color - a wire color.
*/
/datum/wires/proc/cut_color(color)
cut(get_wire(color))
/datum/wires/proc/IsColourCut(var/colour)
var/index = GetIndex(colour)
return IsIndexCut(index)
/**
* Cuts a random wire.
*/
/datum/wires/proc/cut_random()
cut(wires[rand(1, length(wires))])
/datum/wires/proc/IsIndexCut(var/index)
return (index & wires_status)
/**
* Cuts all wires.
*/
/datum/wires/proc/cut_all()
for(var/wire in wires)
cut(wire)
//
// Signaller Procs
//
/**
* Proc called when any wire is cut.
*
* Base proc, intended to be overriden.
* Place an behavior you want to happen when certain wires are cut, into this proc.
*
* Arugments:
* * wire - a wire define, NOT color. For example 'WIRE_ELECTRIFY'.
* * mend - TRUE if we're mending the wire. FALSE if we're cutting.
*/
/datum/wires/proc/on_cut(wire, mend = FALSE)
return
/datum/wires/proc/IsAttached(var/colour)
if(signallers[colour])
return 1
return 0
/**
* Pulses the given wire. Calls `on_pulse()`.
*
* Arugments:
* * wire - a wire define, NOT a color. For example `WIRE_ELECTRIFY`.
*/
/datum/wires/proc/pulse(wire)
if(is_cut(wire))
return
on_pulse(wire)
/datum/wires/proc/GetAttached(var/colour)
if(signallers[colour])
return signallers[colour]
/**
* Pulses the wire associated with the given color.
*
* Arugments:
* * wire - a wire color.
*/
/datum/wires/proc/pulse_color(color)
pulse(get_wire(color))
/**
* Proc called when any wire is pulsed.
*
* Base proc, intended to be overriden.
* Place behavior you want to happen when certain wires are pulsed, into this proc.
*
* Arugments:
* * wire - a wire define, NOT color. For example 'WIRE_ELECTRIFY'.
*/
/datum/wires/proc/on_pulse(wire)
return
/**
* Proc called when an attached signaler receives a signal.
*
* Searches through the `assemblies` list for the wire that the signaler is attached to. Pulses the wire when it's found.
*
* Arugments:
* * S - the attached signaler receiving the signal.
*/
/datum/wires/proc/pulse_assembly(obj/item/device/assembly/signaler/S)
for(var/color in assemblies)
if(S == assemblies[color])
pulse_color(color)
return TRUE
/**
* Proc called when a mob tries to attach a signaler to a wire.
*
* Makes sure that `S` is actually a signaler and that something is not already attached to the wire.
* Adds the signaler to the `assemblies` list as a value, with the `color` as a the key.
*
* Arguments:
* * color - the wire color.
* * S - the signaler that a mob is trying to attach.
*/
/datum/wires/proc/attach_assembly(color, obj/item/device/assembly/signaler/S)
if(S && istype(S) && !is_attached(color))
assemblies[color] = S
S.forceMove(holder)
S.connected = src
return S
/**
* Proc called when a mob tries to detach a signaler from a wire.
*
* First checks if there is a signaler on the wire. If so, removes the signaler, and clears it from `assemblies` list.
*
* Arguments:
* * color - the wire color.
*/
/datum/wires/proc/detach_assembly(color)
var/obj/item/device/assembly/signaler/S = get_attached(color)
if(S && istype(S))
assemblies -= color
S.connected = null
S.forceMove(holder.drop_location())
return S
/**
* Gets the signaler attached to the given wire color, if there is one.
*
* Arguments:
* * color - the wire color.
*/
/datum/wires/proc/get_attached(color)
if(assemblies[color])
return assemblies[color]
return null
/datum/wires/proc/Attach(var/colour, var/obj/item/device/assembly/signaler/S)
if(colour && S)
if(!IsAttached(colour))
signallers[colour] = S
S.loc = holder
S.connected = src
return S
/datum/wires/proc/Detach(var/colour)
if(colour)
var/obj/item/device/assembly/signaler/S = GetAttached(colour)
if(S)
signallers -= colour
S.connected = null
S.loc = holder.loc
return S
/datum/wires/proc/Pulse(var/obj/item/device/assembly/signaler/S)
for(var/colour in signallers)
if(S == signallers[colour])
PulseColour(colour)
break
//
// Cut Wire Colour/Index procs
//
/datum/wires/proc/CutWireColour(var/colour)
var/index = GetIndex(colour)
CutWireIndex(index)
/datum/wires/proc/CutWireIndex(var/index)
if(IsIndexCut(index))
wires_status &= ~index
UpdateCut(index, 1)
else
wires_status |= index
UpdateCut(index, 0)
/datum/wires/proc/RandomCut()
var/r = rand(1, wires.len)
CutWireIndex(r)
/datum/wires/proc/RandomCutAll(var/probability = 10)
for(var/i = 1; i < MAX_FLAG && i < (1 << wire_count); i += i)
if(prob(probability))
CutWireIndex(i)
/datum/wires/proc/CutAll()
for(var/i = 1; i < MAX_FLAG && i < (1 << wire_count); i += i)
CutWireIndex(i)
/datum/wires/proc/IsAllCut()
if(wires_status == (1 << wire_count) - 1)
return 1
return 0
/datum/wires/proc/MendAll()
for(var/i = 1; i < MAX_FLAG && i < (1 << wire_count); i += i)
if(IsIndexCut(i))
CutWireIndex(i)
//
//Shuffle and Mend
//
/datum/wires/proc/Shuffle()
wires_status = 0
GenerateWires()
/**
* Checks if the given wire has a signaler on it.
*
* Arguments:
* * color - the wire color.
*/
/datum/wires/proc/is_attached(color)
if(assemblies[color])
return TRUE