mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-15 20:52:41 +00:00
@@ -50,6 +50,7 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called
|
||||
#define NETWORK_SECURITY "Security"
|
||||
#define NETWORK_TELECOM "Tcomsat"
|
||||
#define NETWORK_THUNDER "Thunderdome"
|
||||
#define NETWORK_COMMUNICATORS "Communicators"
|
||||
|
||||
// Those networks can only be accessed by pre-existing terminals. AIs and new terminals can't use them.
|
||||
var/list/restricted_camera_networks = list(NETWORK_ERT,NETWORK_MERCENARY,"Secret")
|
||||
|
||||
@@ -248,8 +248,11 @@
|
||||
. |= M // Since we're already looping through mobs, why bother using |= ? This only slows things down.
|
||||
return .
|
||||
|
||||
/proc/get_mobs_and_objs_in_view_fast(var/turf/T, var/range, var/checkghosts = 1)
|
||||
|
||||
//Uses dview to quickly return mobs and objects in view,
|
||||
// then adds additional mobs or objects if they are in range 'smartly',
|
||||
// based on their presence in lists of players or registered objects
|
||||
// Type: 1-audio, 2-visual, 0-neither
|
||||
/proc/get_mobs_and_objs_in_view_fast(var/turf/T, var/range, var/type = 1)
|
||||
var/list/mobs = list()
|
||||
var/list/objs = list()
|
||||
|
||||
@@ -261,21 +264,30 @@
|
||||
mobs += AM
|
||||
hearturfs += AM.locs[1]
|
||||
else if(isobj(AM))
|
||||
objs += AM
|
||||
objs += AM
|
||||
hearturfs += AM.locs[1]
|
||||
|
||||
|
||||
//A list of every mob with a client
|
||||
for(var/mob/M in player_list)
|
||||
if(checkghosts && M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
|
||||
mobs |= M
|
||||
continue
|
||||
if(M.loc && M.locs[1] in hearturfs)
|
||||
mobs |= M
|
||||
|
||||
else if(M.stat == DEAD)
|
||||
switch(type)
|
||||
if(1) //Audio messages use ghost_ears
|
||||
if(M.is_preference_enabled(/datum/client_preference/ghost_ears))
|
||||
mobs |= M
|
||||
if(2) //Visual messages use ghost_sight
|
||||
if(M.is_preference_enabled(/datum/client_preference/ghost_sight))
|
||||
mobs |= M
|
||||
|
||||
//For objects below the top level who still want to hear
|
||||
for(var/obj/O in listening_objects)
|
||||
if(O.loc && O.locs[1] in hearturfs)
|
||||
objs |= O
|
||||
|
||||
return list("mobs" = mobs, "objs" = objs)
|
||||
|
||||
|
||||
|
||||
#define SIGN(X) ((X<0)?-1:1)
|
||||
|
||||
proc
|
||||
|
||||
@@ -11,6 +11,7 @@ var/global/list/human_mob_list = list() //List of all human mobs and sub-type
|
||||
var/global/list/silicon_mob_list = list() //List of all silicon mobs, including clientless
|
||||
var/global/list/living_mob_list = list() //List of all alive mobs, including clientless. Excludes /mob/new_player
|
||||
var/global/list/dead_mob_list = list() //List of all dead mobs, including clientless. Excludes /mob/new_player
|
||||
var/global/list/listening_objects = list() //List of all objects which care about receiving messages (communicators, radios, etc)
|
||||
|
||||
var/global/list/cable_list = list() //Index for all cables, so that powernets don't have to look through the entire world all the time
|
||||
var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions
|
||||
|
||||
@@ -1257,7 +1257,7 @@ var/list/WALLITEMS = list(
|
||||
arglist = list2params(arglist)
|
||||
return "<a href='?src=\ref[D];[arglist]'>[content]</a>"
|
||||
|
||||
/proc/get_random_colour(var/simple, var/lower, var/upper)
|
||||
/proc/get_random_colour(var/simple, var/lower=0, var/upper=255)
|
||||
var/colour
|
||||
if(simple)
|
||||
colour = pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))
|
||||
|
||||
@@ -6,12 +6,14 @@ var/datum/global_hud/global_hud = new()
|
||||
var/list/global_huds = list(
|
||||
global_hud.druggy,
|
||||
global_hud.blurry,
|
||||
global_hud.whitense,
|
||||
global_hud.vimpaired,
|
||||
global_hud.darkMask,
|
||||
global_hud.nvg,
|
||||
global_hud.thermal,
|
||||
global_hud.meson,
|
||||
global_hud.science)
|
||||
global_hud.science
|
||||
)
|
||||
|
||||
/datum/hud/var/obj/screen/grab_intent
|
||||
/datum/hud/var/obj/screen/hurt_intent
|
||||
@@ -21,6 +23,7 @@ var/list/global_huds = list(
|
||||
/datum/global_hud
|
||||
var/obj/screen/druggy
|
||||
var/obj/screen/blurry
|
||||
var/obj/screen/whitense
|
||||
var/list/vimpaired
|
||||
var/list/darkMask
|
||||
var/obj/screen/nvg
|
||||
@@ -53,6 +56,14 @@ var/list/global_huds = list(
|
||||
blurry.layer = 17
|
||||
blurry.mouse_opacity = 0
|
||||
|
||||
//static overlay effect for cameras and the like
|
||||
whitense = new /obj/screen()
|
||||
whitense.screen_loc = ui_entire_screen
|
||||
whitense.icon = 'icons/effects/static.dmi'
|
||||
whitense.icon_state = "1 light"
|
||||
whitense.layer = 17
|
||||
whitense.mouse_opacity = 0
|
||||
|
||||
nvg = setup_overlay("nvg_hud")
|
||||
thermal = setup_overlay("thermal_hud")
|
||||
meson = setup_overlay("meson_hud")
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
104
code/datums/supplypacks/atmospherics.dm
Normal file
104
code/datums/supplypacks/atmospherics.dm
Normal file
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Here is where any supply packs related
|
||||
* to being atmospherics tasks live.
|
||||
*/
|
||||
/datum/supply_packs/atmos
|
||||
group = "Atmospherics"
|
||||
|
||||
/datum/supply_packs/atmos/internals
|
||||
name = "Internals crate"
|
||||
contains = list(
|
||||
/obj/item/clothing/mask/gas = 3,
|
||||
/obj/item/weapon/tank/air = 3
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/internals
|
||||
containername = "Internals crate"
|
||||
|
||||
/datum/supply_packs/atmos/evacuation
|
||||
name = "Emergency equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/toolbox/emergency = 2,
|
||||
/obj/item/clothing/suit/storage/hazardvest = 2,
|
||||
/obj/item/clothing/suit/storage/vest = 2,
|
||||
/obj/item/weapon/tank/emergency_oxygen/engi = 4,
|
||||
/obj/item/clothing/suit/space/emergency = 4,
|
||||
/obj/item/clothing/head/helmet/space/emergency = 4,
|
||||
/obj/item/clothing/mask/gas = 4
|
||||
)
|
||||
cost = 45
|
||||
containertype = /obj/structure/closet/crate/internals
|
||||
containername = "Emergency crate"
|
||||
|
||||
/datum/supply_packs/atmos/inflatable
|
||||
name = "Inflatable barriers"
|
||||
contains = list(/obj/item/weapon/storage/briefcase/inflatable = 3)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Inflatable Barrier Crate"
|
||||
|
||||
/datum/supply_packs/atmos/canister_empty
|
||||
name = "Empty gas canister"
|
||||
cost = 7
|
||||
containername = "Empty gas canister crate"
|
||||
containertype = /obj/structure/largecrate
|
||||
contains = list(/obj/machinery/portable_atmospherics/canister)
|
||||
|
||||
/datum/supply_packs/atmos/canister_air
|
||||
name = "Air canister"
|
||||
cost = 10
|
||||
containername = "Air canister crate"
|
||||
containertype = /obj/structure/largecrate
|
||||
contains = list(/obj/machinery/portable_atmospherics/canister/air)
|
||||
|
||||
/datum/supply_packs/atmos/canister_oxygen
|
||||
name = "Oxygen canister"
|
||||
cost = 15
|
||||
containername = "Oxygen canister crate"
|
||||
containertype = /obj/structure/largecrate
|
||||
contains = list(/obj/machinery/portable_atmospherics/canister/oxygen)
|
||||
|
||||
/datum/supply_packs/atmos/canister_nitrogen
|
||||
name = "Nitrogen canister"
|
||||
cost = 10
|
||||
containername = "Nitrogen canister crate"
|
||||
containertype = /obj/structure/largecrate
|
||||
contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen)
|
||||
|
||||
/datum/supply_packs/atmos/canister_phoron
|
||||
name = "Phoron gas canister"
|
||||
cost = 60
|
||||
containername = "Phoron gas canister crate"
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
access = access_atmospherics
|
||||
contains = list(/obj/machinery/portable_atmospherics/canister/phoron)
|
||||
|
||||
/datum/supply_packs/atmos/canister_sleeping_agent
|
||||
name = "N2O gas canister"
|
||||
cost = 40
|
||||
containername = "N2O gas canister crate"
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
access = access_atmospherics
|
||||
contains = list(/obj/machinery/portable_atmospherics/canister/sleeping_agent)
|
||||
|
||||
/datum/supply_packs/atmos/canister_carbon_dioxide
|
||||
name = "Carbon dioxide gas canister"
|
||||
cost = 40
|
||||
containername = "CO2 canister crate"
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
access = access_atmospherics
|
||||
contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide)
|
||||
|
||||
/datum/supply_packs/atmos/voidsuits
|
||||
name = "Atmospheric voidsuits"
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/atmos = 2,
|
||||
/obj/item/clothing/head/helmet/space/void/atmos = 2,
|
||||
/obj/item/clothing/mask/breath = 2,
|
||||
/obj/item/clothing/shoes/magboots = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2,
|
||||
)
|
||||
cost = 45
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Atmospheric voidsuit crate"
|
||||
access = access_atmospherics
|
||||
44
code/datums/supplypacks/contraband.dm
Normal file
44
code/datums/supplypacks/contraband.dm
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Here is where any supply packs that may or may not be legal
|
||||
* and require modification of the supply controller live.
|
||||
*/
|
||||
|
||||
/datum/supply_packs/randomised/contraband
|
||||
num_contained = 5
|
||||
contains = list(
|
||||
/obj/item/seeds/bloodtomatoseed,
|
||||
/obj/item/weapon/storage/pill_bottle/zoom,
|
||||
/obj/item/weapon/storage/pill_bottle/happy,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine
|
||||
)
|
||||
|
||||
name = "Contraband crate"
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Unlabeled crate"
|
||||
contraband = 1
|
||||
group = "Operations"
|
||||
|
||||
/datum/supply_packs/security/specialops
|
||||
name = "Special Ops supplies"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/box/emps,
|
||||
/obj/item/weapon/grenade/smokebomb = 3,
|
||||
/obj/item/weapon/pen/reagent/paralysis,
|
||||
/obj/item/weapon/grenade/chem_grenade/incendiary
|
||||
)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Special Ops crate"
|
||||
hidden = 1
|
||||
|
||||
/datum/supply_packs/security/bolt_rifles_mosin
|
||||
name = "Surplus militia rifles"
|
||||
contains = list(
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin = 3,
|
||||
/obj/item/ammo_magazine/clip/a762 = 6
|
||||
)
|
||||
cost = 50
|
||||
hidden = 1
|
||||
containertype = /obj/structure/closet/crate/secure/weapon
|
||||
containername = "Weapons crate"
|
||||
303
code/datums/supplypacks/engineering.dm
Normal file
303
code/datums/supplypacks/engineering.dm
Normal file
@@ -0,0 +1,303 @@
|
||||
/*
|
||||
* Here is where any supply packs
|
||||
* related to engineering tasks live.
|
||||
*/
|
||||
/datum/supply_packs/eng
|
||||
group = "Engineering"
|
||||
|
||||
/datum/supply_packs/eng/lightbulbs
|
||||
name = "Replacement lights"
|
||||
contains = list(/obj/item/weapon/storage/box/lights/mixed = 3)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Replacement lights"
|
||||
|
||||
/datum/supply_packs/eng/metal50
|
||||
name = "50 metal sheets"
|
||||
contains = list(/obj/item/stack/material/steel)
|
||||
amount = 50
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Metal sheets crate"
|
||||
|
||||
/datum/supply_packs/eng/glass50
|
||||
name = "50 glass sheets"
|
||||
contains = list(/obj/item/stack/material/glass)
|
||||
amount = 50
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Glass sheets crate"
|
||||
|
||||
/datum/supply_packs/eng/wood50
|
||||
name = "50 wooden planks"
|
||||
contains = list(/obj/item/stack/material/wood)
|
||||
amount = 50
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Wooden planks crate"
|
||||
|
||||
/datum/supply_packs/eng/plastic50
|
||||
name = "50 plastic sheets"
|
||||
contains = list(/obj/item/stack/material/plastic)
|
||||
amount = 50
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Plastic sheets crate"
|
||||
|
||||
/datum/supply_packs/eng/smescoil
|
||||
name = "Superconducting Magnetic Coil"
|
||||
contains = list(/obj/item/weapon/smes_coil)
|
||||
cost = 75
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Superconducting Magnetic Coil crate"
|
||||
|
||||
/datum/supply_packs/eng/electrical
|
||||
name = "Electrical maintenance crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/toolbox/electrical = 2,
|
||||
/obj/item/clothing/gloves/yellow = 2,
|
||||
/obj/item/weapon/cell = 2,
|
||||
/obj/item/weapon/cell/high = 2
|
||||
)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Electrical maintenance crate"
|
||||
|
||||
/datum/supply_packs/eng/mechanical
|
||||
name = "Mechanical maintenance crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/belt/utility/full = 3,
|
||||
/obj/item/clothing/suit/storage/hazardvest = 3,
|
||||
/obj/item/clothing/head/welding = 2,
|
||||
/obj/item/clothing/head/hardhat
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Mechanical maintenance crate"
|
||||
|
||||
/datum/supply_packs/eng/fueltank
|
||||
name = "Fuel tank crate"
|
||||
contains = list(/obj/structure/reagent_dispensers/fueltank)
|
||||
cost = 8
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "fuel tank crate"
|
||||
|
||||
/datum/supply_packs/eng/solar
|
||||
name = "Solar Pack crate"
|
||||
contains = list(
|
||||
/obj/item/solar_assembly = 21,
|
||||
/obj/item/weapon/circuitboard/solar_control,
|
||||
/obj/item/weapon/tracker_electronics,
|
||||
/obj/item/weapon/paper/solar
|
||||
)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Solar pack crate"
|
||||
|
||||
/datum/supply_packs/eng/engine
|
||||
name = "Emitter crate"
|
||||
contains = list(/obj/machinery/power/emitter = 2)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Emitter crate"
|
||||
access = access_ce
|
||||
|
||||
/datum/supply_packs/engine/eng/field_gen
|
||||
name = "Field Generator crate"
|
||||
contains = list(/obj/machinery/field_generator = 2)
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Field Generator crate"
|
||||
access = access_ce
|
||||
|
||||
/datum/supply_packs/eng/engine/sing_gen
|
||||
name = "Singularity Generator crate"
|
||||
contains = list(/obj/machinery/the_singularitygen)
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Singularity Generator crate"
|
||||
access = access_ce
|
||||
|
||||
/datum/supply_packs/eng/engine/collector
|
||||
name = "Collector crate"
|
||||
contains = list(/obj/machinery/power/rad_collector = 3)
|
||||
containername = "Collector crate"
|
||||
|
||||
/datum/supply_packs/eng/engine/PA
|
||||
name = "Particle Accelerator crate"
|
||||
cost = 40
|
||||
contains = list(
|
||||
/obj/structure/particle_accelerator/fuel_chamber,
|
||||
/obj/machinery/particle_accelerator/control_box,
|
||||
/obj/structure/particle_accelerator/particle_emitter/center,
|
||||
/obj/structure/particle_accelerator/particle_emitter/left,
|
||||
/obj/structure/particle_accelerator/particle_emitter/right,
|
||||
/obj/structure/particle_accelerator/power_box,
|
||||
/obj/structure/particle_accelerator/end_cap
|
||||
)
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Particle Accelerator crate"
|
||||
access = access_ce
|
||||
|
||||
/datum/supply_packs/eng/robotics
|
||||
name = "Robotics assembly crate"
|
||||
contains = list(
|
||||
/obj/item/device/assembly/prox_sensor = 3,
|
||||
/obj/item/weapon/storage/toolbox/electrical,
|
||||
/obj/item/device/flash = 4,
|
||||
/obj/item/weapon/cell/high = 2
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/secure/gear
|
||||
containername = "Robotics assembly"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_packs/eng/robolimbs_basic
|
||||
name = "Basic robolimb blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/xion
|
||||
)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate/secure/gear
|
||||
containername = "Robolimb blueprints (basic)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_packs/eng/robolimbs_adv
|
||||
name = "All robolimb blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/bishop,
|
||||
/obj/item/weapon/disk/limb/hesphiastos,
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/veymed,
|
||||
/obj/item/weapon/disk/limb/wardtakahashi,
|
||||
/obj/item/weapon/disk/limb/xion,
|
||||
/obj/item/weapon/disk/limb/zenghu,
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure/gear
|
||||
containername = "Robolimb blueprints (adv)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_packs/eng/shield_gen
|
||||
contains = list(/obj/item/weapon/circuitboard/shield_gen)
|
||||
name = "Bubble shield generator circuitry"
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "bubble shield generator circuitry crate"
|
||||
access = access_ce
|
||||
|
||||
/datum/supply_packs/eng/shield_gen_ex
|
||||
contains = list(/obj/item/weapon/circuitboard/shield_gen_ex)
|
||||
name = "Hull shield generator circuitry"
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "hull shield generator circuitry crate"
|
||||
access = access_ce
|
||||
|
||||
/datum/supply_packs/eng/shield_cap
|
||||
contains = list(/obj/item/weapon/circuitboard/shield_cap)
|
||||
name = "Bubble shield capacitor circuitry"
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "shield capacitor circuitry crate"
|
||||
access = access_ce
|
||||
|
||||
/datum/supply_packs/eng/smbig
|
||||
name = "Supermatter Core"
|
||||
contains = list(/obj/machinery/power/supermatter)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure/phoron
|
||||
containername = "Supermatter crate (CAUTION)"
|
||||
access = access_ce
|
||||
|
||||
/datum/supply_packs/eng/teg
|
||||
contains = list(/obj/machinery/power/generator)
|
||||
name = "Mark I Thermoelectric Generator"
|
||||
cost = 75
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
containername = "Mk1 TEG crate"
|
||||
access = access_engine
|
||||
|
||||
/datum/supply_packs/eng/circulator
|
||||
contains = list(/obj/machinery/atmospherics/binary/circulator)
|
||||
name = "Binary atmospheric circulator"
|
||||
cost = 60
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
containername = "Atmospheric circulator crate"
|
||||
access = access_engine
|
||||
|
||||
/datum/supply_packs/eng/air_dispenser
|
||||
contains = list(/obj/machinery/pipedispenser/orderable)
|
||||
name = "Pipe Dispenser"
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
containername = "Pipe Dispenser Crate"
|
||||
access = access_atmospherics
|
||||
|
||||
/datum/supply_packs/eng/disposals_dispenser
|
||||
contains = list(/obj/machinery/pipedispenser/disposal/orderable)
|
||||
name = "Disposals Pipe Dispenser"
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
containername = "Disposal Dispenser Crate"
|
||||
access = access_atmospherics
|
||||
|
||||
/datum/supply_packs/eng/radsuit
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/radiation = 3,
|
||||
/obj/item/clothing/head/radiation = 3
|
||||
)
|
||||
name = "Radiation suits package"
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/radiation
|
||||
containername = "Radiation suit locker"
|
||||
|
||||
/datum/supply_packs/eng/pacman_parts
|
||||
name = "P.A.C.M.A.N. portable generator parts"
|
||||
cost = 45
|
||||
containername = "P.A.C.M.A.N. Portable Generator Construction Kit"
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
access = access_tech_storage
|
||||
contains = list(
|
||||
/obj/item/weapon/stock_parts/micro_laser,
|
||||
/obj/item/weapon/stock_parts/capacitor,
|
||||
/obj/item/weapon/stock_parts/matter_bin,
|
||||
/obj/item/weapon/circuitboard/pacman
|
||||
)
|
||||
|
||||
/datum/supply_packs/eng/super_pacman_parts
|
||||
name = "Super P.A.C.M.A.N. portable generator parts"
|
||||
cost = 55
|
||||
containername = "Super P.A.C.M.A.N. portable generator construction kit"
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
access = access_tech_storage
|
||||
contains = list(
|
||||
/obj/item/weapon/stock_parts/micro_laser,
|
||||
/obj/item/weapon/stock_parts/capacitor,
|
||||
/obj/item/weapon/stock_parts/matter_bin,
|
||||
/obj/item/weapon/circuitboard/pacman/super
|
||||
)
|
||||
|
||||
/datum/supply_packs/eng/painters
|
||||
name = "Station Painting Supplies"
|
||||
cost = 10
|
||||
containername = "station painting supplies crate"
|
||||
containertype = /obj/structure/closet/crate
|
||||
contains = list(
|
||||
/obj/item/device/pipe_painter = 2,
|
||||
/obj/item/device/floor_painter = 2,
|
||||
/obj/item/device/closet_painter = 2
|
||||
)
|
||||
|
||||
/datum/supply_packs/eng/voidsuits
|
||||
name = "Engineering voidsuits"
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/engineering = 2,
|
||||
/obj/item/clothing/head/helmet/space/void/engineering = 2,
|
||||
/obj/item/clothing/mask/breath = 2,
|
||||
/obj/item/clothing/shoes/magboots = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2
|
||||
)
|
||||
cost = 40
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Engineering voidsuit crate"
|
||||
access = access_engine_equip
|
||||
72
code/datums/supplypacks/hospitality.dm
Normal file
72
code/datums/supplypacks/hospitality.dm
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Here is where any supply packs related
|
||||
* to being hospitable tasks live
|
||||
*/
|
||||
/datum/supply_packs/hospitality
|
||||
group = "Hospitality"
|
||||
|
||||
/datum/supply_packs/hospitality/party
|
||||
name = "Party equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/box/mixedglasses = 2,
|
||||
/obj/item/weapon/storage/box/glasses/square,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/shaker,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,
|
||||
/obj/item/weapon/lipstick/random,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 2,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 4,
|
||||
)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Party equipment"
|
||||
|
||||
/datum/supply_packs/hospitality/barsupplies
|
||||
name = "Bar supplies"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/box/glasses/cocktail,
|
||||
/obj/item/weapon/storage/box/glasses/rocks,
|
||||
/obj/item/weapon/storage/box/glasses/square,
|
||||
/obj/item/weapon/storage/box/glasses/pint,
|
||||
/obj/item/weapon/storage/box/glasses/wine,
|
||||
/obj/item/weapon/storage/box/glasses/shake,
|
||||
/obj/item/weapon/storage/box/glasses/shot,
|
||||
/obj/item/weapon/storage/box/glasses/mug,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/shaker,
|
||||
/obj/item/weapon/storage/box/glass_extras/straws,
|
||||
/obj/item/weapon/storage/box/glass_extras/sticks
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "crate of bar supplies"
|
||||
|
||||
/datum/supply_packs/hospitality/lasertag
|
||||
name = "Lasertag equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/gun/energy/lasertag/red,
|
||||
/obj/item/clothing/suit/redtag,
|
||||
/obj/item/weapon/gun/energy/lasertag/blue,
|
||||
/obj/item/clothing/suit/bluetag
|
||||
)
|
||||
containertype = /obj/structure/closet
|
||||
containername = "Lasertag Closet"
|
||||
cost = 20
|
||||
|
||||
/datum/supply_packs/randomised/hospitality/
|
||||
group = "Hospitality"
|
||||
|
||||
/datum/supply_packs/randomised/hospitality/pizza
|
||||
num_contained = 5
|
||||
contains = list(
|
||||
/obj/item/pizzabox/margherita,
|
||||
/obj/item/pizzabox/mushroom,
|
||||
/obj/item/pizzabox/meat,
|
||||
/obj/item/pizzabox/vegetable
|
||||
)
|
||||
name = "Surprise pack of five pizzas"
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate/freezer
|
||||
containername = "Pizza crate"
|
||||
161
code/datums/supplypacks/hydroponics.dm
Normal file
161
code/datums/supplypacks/hydroponics.dm
Normal file
@@ -0,0 +1,161 @@
|
||||
/*
|
||||
* Here is where any supply packs
|
||||
* related to hydroponics tasks live.
|
||||
*/
|
||||
/datum/supply_packs/hydro
|
||||
group = "Hydroponics"
|
||||
|
||||
/datum/supply_packs/hydro/monkey
|
||||
name = "Monkey crate"
|
||||
contains = list (/obj/item/weapon/storage/box/monkeycubes)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/freezer
|
||||
containername = "Monkey crate"
|
||||
|
||||
/datum/supply_packs/hydro/farwa
|
||||
name = "Farwa crate"
|
||||
contains = list (/obj/item/weapon/storage/box/monkeycubes/farwacubes)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/freezer
|
||||
containername = "Farwa crate"
|
||||
|
||||
/datum/supply_packs/hydro/neara
|
||||
name = "Neaera crate"
|
||||
contains = list (/obj/item/weapon/storage/box/monkeycubes/neaeracubes)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/freezer
|
||||
containername = "Neaera crate"
|
||||
|
||||
/datum/supply_packs/hydro/stok
|
||||
name = "Stok crate"
|
||||
contains = list (/obj/item/weapon/storage/box/monkeycubes/stokcubes)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/freezer
|
||||
containername = "Stok crate"
|
||||
|
||||
/datum/supply_packs/hydro/lisa
|
||||
name = "Corgi Crate"
|
||||
contains = list()
|
||||
cost = 50
|
||||
containertype = /obj/structure/largecrate/animal/corgi
|
||||
containername = "Corgi Crate"
|
||||
|
||||
/datum/supply_packs/hydro/hydroponics
|
||||
name = "Hydroponics Supply Crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone = 4,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 2,
|
||||
/obj/item/weapon/material/hatchet,
|
||||
/obj/item/weapon/material/minihoe,
|
||||
/obj/item/device/analyzer/plant_analyzer,
|
||||
/obj/item/clothing/gloves/botanic_leather,
|
||||
/obj/item/clothing/suit/apron,
|
||||
/obj/item/weapon/material/minihoe,
|
||||
/obj/item/weapon/storage/box/botanydisk
|
||||
)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "Hydroponics crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_packs/hydro/cow
|
||||
name = "Cow crate"
|
||||
cost = 30
|
||||
containertype = /obj/structure/largecrate/animal/cow
|
||||
containername = "Cow crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_packs/hydro/goat
|
||||
name = "Goat crate"
|
||||
cost = 25
|
||||
containertype = /obj/structure/largecrate/animal/goat
|
||||
containername = "Goat crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_packs/hydro/chicken
|
||||
name = "Chicken crate"
|
||||
cost = 20
|
||||
containertype = /obj/structure/largecrate/animal/chick
|
||||
containername = "Chicken crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_packs/hydro/seeds
|
||||
name = "Seeds crate"
|
||||
contains = list(
|
||||
/obj/item/seeds/chiliseed,
|
||||
/obj/item/seeds/berryseed,
|
||||
/obj/item/seeds/cornseed,
|
||||
/obj/item/seeds/eggplantseed,
|
||||
/obj/item/seeds/tomatoseed,
|
||||
/obj/item/seeds/appleseed,
|
||||
/obj/item/seeds/soyaseed,
|
||||
/obj/item/seeds/wheatseed,
|
||||
/obj/item/seeds/carrotseed,
|
||||
/obj/item/seeds/harebell,
|
||||
/obj/item/seeds/lemonseed,
|
||||
/obj/item/seeds/orangeseed,
|
||||
/obj/item/seeds/grassseed,
|
||||
/obj/item/seeds/sunflowerseed,
|
||||
/obj/item/seeds/chantermycelium,
|
||||
/obj/item/seeds/potatoseed,
|
||||
/obj/item/seeds/sugarcaneseed
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "Seeds crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_packs/hydro/weedcontrol
|
||||
name = "Weed control crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/material/hatchet = 2,
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone = 4,
|
||||
/obj/item/clothing/mask/gas = 2,
|
||||
/obj/item/weapon/grenade/chem_grenade/antiweed = 2
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "Weed control crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_packs/hydro/exoticseeds
|
||||
name = "Exotic seeds crate"
|
||||
contains = list(
|
||||
/obj/item/seeds/replicapod = 2,
|
||||
/obj/item/seeds/libertymycelium,
|
||||
/obj/item/seeds/reishimycelium,
|
||||
/obj/item/seeds/random = 6,
|
||||
/obj/item/seeds/kudzuseed
|
||||
)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "Exotic Seeds crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_packs/hydro/watertank
|
||||
name = "Water tank crate"
|
||||
contains = list(/obj/structure/reagent_dispensers/watertank)
|
||||
cost = 8
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "water tank crate"
|
||||
|
||||
/datum/supply_packs/hydro/bee_keeper
|
||||
name = "Beekeeping crate"
|
||||
contains = list(
|
||||
/obj/item/beehive_assembly,
|
||||
/obj/item/bee_smoker,
|
||||
/obj/item/honey_frame = 5,
|
||||
/obj/item/bee_pack
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "Beekeeping crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_packs/hydro/tray
|
||||
name = "Empty hydroponics tray"
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "Hydroponics tray crate"
|
||||
contains = list(/obj/machinery/portable_atmospherics/hydroponics{anchored = 0})
|
||||
access = access_hydroponics
|
||||
313
code/datums/supplypacks/medical.dm
Normal file
313
code/datums/supplypacks/medical.dm
Normal file
@@ -0,0 +1,313 @@
|
||||
/*
|
||||
* Here is where any supply packs
|
||||
* related to medical tasks live.
|
||||
*/
|
||||
/datum/supply_packs/med
|
||||
group = "Medical"
|
||||
|
||||
/datum/supply_packs/med/medical
|
||||
name = "Medical crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/firstaid/regular,
|
||||
/obj/item/weapon/storage/firstaid/fire,
|
||||
/obj/item/weapon/storage/firstaid/toxin,
|
||||
/obj/item/weapon/storage/firstaid/o2,
|
||||
/obj/item/weapon/storage/firstaid/adv,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/stoxin,
|
||||
/obj/item/weapon/storage/box/syringes,
|
||||
/obj/item/weapon/storage/box/autoinjectors
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/medical
|
||||
containername = "Medical crate"
|
||||
|
||||
/datum/supply_packs/med/bloodpack
|
||||
name = "BloodPack crate"
|
||||
contains = list(/obj/item/weapon/storage/box/bloodpacks = 3)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/medical
|
||||
containername = "BloodPack crate"
|
||||
|
||||
/datum/supply_packs/med/bodybag
|
||||
name = "Body bag crate"
|
||||
contains = list(/obj/item/weapon/storage/box/bodybags = 3)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/medical
|
||||
containername = "Body bag crate"
|
||||
|
||||
/datum/supply_packs/med/cryobag
|
||||
name = "Stasis bag crate"
|
||||
contains = list(/obj/item/bodybag/cryobag = 3)
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/medical
|
||||
containername = "Stasis bag crate"
|
||||
|
||||
/datum/supply_packs/med/surgery
|
||||
name = "Surgery crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/cautery,
|
||||
/obj/item/weapon/surgicaldrill,
|
||||
/obj/item/clothing/mask/breath/medical,
|
||||
/obj/item/weapon/tank/anesthetic,
|
||||
/obj/item/weapon/FixOVein,
|
||||
/obj/item/weapon/hemostat,
|
||||
/obj/item/weapon/scalpel,
|
||||
/obj/item/weapon/bonegel,
|
||||
/obj/item/weapon/retractor,
|
||||
/obj/item/weapon/bonesetter,
|
||||
/obj/item/weapon/circular_saw
|
||||
)
|
||||
cost = 25
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Surgery crate"
|
||||
access = access_medical
|
||||
|
||||
/datum/supply_packs/med/sterile
|
||||
name = "Sterile equipment crate"
|
||||
contains = list(
|
||||
/obj/item/clothing/under/rank/medical/green = 2,
|
||||
/obj/item/clothing/head/surgery/green = 2,
|
||||
/obj/item/weapon/storage/box/masks,
|
||||
/obj/item/weapon/storage/box/gloves,
|
||||
/obj/item/weapon/storage/belt/medical = 3
|
||||
)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate"
|
||||
containername = "Sterile equipment crate"
|
||||
|
||||
/datum/supply_packs/med/voidsuits
|
||||
name = "Medical voidsuits"
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/medical = 2,
|
||||
/obj/item/clothing/head/helmet/space/void/medical = 2,
|
||||
/obj/item/clothing/mask/breath = 2,
|
||||
/obj/item/clothing/shoes/magboots = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2
|
||||
)
|
||||
cost = 40
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical voidsuit crate"
|
||||
access = access_medical_equip
|
||||
|
||||
/datum/supply_packs/med/extragear
|
||||
name = "Medical surplus equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/belt/medical = 3,
|
||||
/obj/item/clothing/glasses/hud/health = 3,
|
||||
/obj/item/device/radio/headset/headset_med/alt = 3,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical = 3
|
||||
)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical surplus equipment"
|
||||
access = access_medical
|
||||
|
||||
/datum/supply_packs/med/cmogear
|
||||
name = "Chief medical officer equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/belt/medical,
|
||||
/obj/item/device/radio/headset/heads/cmo,
|
||||
/obj/item/clothing/under/rank/chief_medical_officer,
|
||||
/obj/item/weapon/reagent_containers/hypospray,
|
||||
/obj/item/clothing/accessory/stethoscope,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmo,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/weapon/cartridge/cmo,
|
||||
/obj/item/clothing/gloves/latex,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/weapon/reagent_containers/syringe
|
||||
)
|
||||
cost = 60
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Chief medical officer equipment"
|
||||
access = access_cmo
|
||||
|
||||
/datum/supply_packs/med/doctorgear
|
||||
name = "Medical Doctor equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/belt/medical,
|
||||
/obj/item/device/radio/headset/headset_med,
|
||||
/obj/item/clothing/under/rank/medical,
|
||||
/obj/item/clothing/accessory/stethoscope,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/weapon/storage/firstaid/adv,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/weapon/cartridge/medical,
|
||||
/obj/item/clothing/gloves/latex,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/weapon/reagent_containers/syringe
|
||||
)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical Doctor equipment"
|
||||
access = access_medical_equip
|
||||
|
||||
/datum/supply_packs/med/chemistgear
|
||||
name = "Chemist equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/box/beakers,
|
||||
/obj/item/device/radio/headset/headset_med,
|
||||
/obj/item/weapon/storage/box/autoinjectors,
|
||||
/obj/item/clothing/under/rank/chemist,
|
||||
/obj/item/clothing/glasses/science,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/chemist,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/weapon/cartridge/chemistry,
|
||||
/obj/item/clothing/gloves/latex,
|
||||
/obj/item/weapon/reagent_containers/dropper,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/weapon/storage/box/pillbottles,
|
||||
/obj/item/weapon/reagent_containers/syringe
|
||||
)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Chemist equipment"
|
||||
access = access_chemistry
|
||||
|
||||
/datum/supply_packs/med/paramedicgear
|
||||
name = "Paramedic equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/belt/medical/emt,
|
||||
/obj/item/device/radio/headset/headset_med,
|
||||
/obj/item/clothing/under/rank/medical/black,
|
||||
/obj/item/clothing/accessory/armband/medgreen,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/emt,
|
||||
/obj/item/clothing/under/rank/medical/paramedic,
|
||||
/obj/item/clothing/suit/storage/toggle/fr_jacket,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/under/rank/medical/paramedic,
|
||||
/obj/item/clothing/accessory/stethoscope,
|
||||
/obj/item/weapon/storage/firstaid/adv,
|
||||
/obj/item/clothing/shoes/jackboots,
|
||||
/obj/item/clothing/gloves/latex,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/weapon/cartridge/medical,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/weapon/reagent_containers/syringe,
|
||||
/obj/item/clothing/accessory/storage/white_vest
|
||||
)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Paramedic equipment"
|
||||
access = access_medical_equip
|
||||
|
||||
/datum/supply_packs/med/psychiatristgear
|
||||
name = "Psychiatrist equipment"
|
||||
contains = list(
|
||||
/obj/item/clothing/under/rank/psych,
|
||||
/obj/item/device/radio/headset/headset_med,
|
||||
/obj/item/clothing/under/rank/psych/turtleneck,
|
||||
/obj/item/clothing/shoes/laceup,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/weapon/clipboard,
|
||||
/obj/item/weapon/folder/white,
|
||||
/obj/item/weapon/pen,
|
||||
/obj/item/weapon/cartridge/medical
|
||||
)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Psychiatrist equipment"
|
||||
access = access_psychiatrist
|
||||
|
||||
/datum/supply_packs/med/medicalscrubs
|
||||
name = "Medical scrubs"
|
||||
contains = list(
|
||||
/obj/item/clothing/shoes/white = 3,,
|
||||
/obj/item/clothing/under/rank/medical/blue = 3,
|
||||
/obj/item/clothing/under/rank/medical/green = 3,
|
||||
/obj/item/clothing/under/rank/medical/purple = 3,
|
||||
/obj/item/clothing/under/rank/medical/black = 3,
|
||||
/obj/item/clothing/head/surgery = 3,
|
||||
/obj/item/clothing/head/surgery/purple = 3,
|
||||
/obj/item/clothing/head/surgery/blue = 3,
|
||||
/obj/item/clothing/head/surgery/green = 3,
|
||||
/obj/item/clothing/head/surgery/black = 3,
|
||||
/obj/item/weapon/storage/box/masks,
|
||||
/obj/item/weapon/storage/box/gloves
|
||||
)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical scrubs crate"
|
||||
access = access_medical_equip
|
||||
|
||||
/datum/supply_packs/med/autopsy
|
||||
name = "Autopsy equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/folder/white,
|
||||
/obj/item/device/camera,
|
||||
/obj/item/device/camera_film = 2,
|
||||
/obj/item/weapon/autopsy_scanner,
|
||||
/obj/item/weapon/scalpel,
|
||||
/obj/item/weapon/storage/box/masks,
|
||||
/obj/item/weapon/storage/box/gloves,
|
||||
/obj/item/weapon/pen
|
||||
)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Autopsy equipment crate"
|
||||
access = access_morgue
|
||||
|
||||
/datum/supply_packs/med/medicaluniforms
|
||||
name = "Medical uniforms"
|
||||
contains = list(
|
||||
/obj/item/clothing/shoes/white = 3,
|
||||
/obj/item/clothing/under/rank/chief_medical_officer,
|
||||
/obj/item/clothing/under/rank/geneticist,
|
||||
/obj/item/clothing/under/rank/virologist,
|
||||
/obj/item/clothing/under/rank/nursesuit,
|
||||
/obj/item/clothing/under/rank/nurse,
|
||||
/obj/item/clothing/under/rank/orderly,
|
||||
/obj/item/clothing/under/rank/medical = 3,
|
||||
/obj/item/clothing/under/rank/medical/paramedic = 3,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat = 3,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmo,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/emt,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/genetics,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/virologist,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/chemist,
|
||||
/obj/item/weapon/storage/box/masks,
|
||||
/obj/item/weapon/storage/box/gloves
|
||||
)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical uniform crate"
|
||||
access = access_medical_equip
|
||||
|
||||
/datum/supply_packs/med/medicalbiosuits
|
||||
name = "Medical biohazard gear"
|
||||
contains = list(
|
||||
/obj/item/clothing/head/bio_hood = 3,
|
||||
/obj/item/clothing/suit/bio_suit = 3,
|
||||
/obj/item/clothing/head/bio_hood/virology = 2,
|
||||
/obj/item/clothing/suit/bio_suit/cmo,
|
||||
/obj/item/clothing/head/bio_hood/cmo,
|
||||
/obj/item/clothing/mask/gas = 5,
|
||||
/obj/item/weapon/tank/oxygen = 5,
|
||||
/obj/item/weapon/storage/box/masks,
|
||||
/obj/item/weapon/storage/box/gloves
|
||||
)
|
||||
cost = 50
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical biohazard equipment"
|
||||
access = access_medical_equip
|
||||
|
||||
/datum/supply_packs/med/portablefreezers
|
||||
name = "Portable freezers crate"
|
||||
contains = list(/obj/item/weapon/storage/box/freezer = 7)
|
||||
cost = 25
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Portable freezers"
|
||||
access = access_medical_equip
|
||||
268
code/datums/supplypacks/misc.dm
Normal file
268
code/datums/supplypacks/misc.dm
Normal file
@@ -0,0 +1,268 @@
|
||||
/*
|
||||
* Here is where any supply packs
|
||||
* that don't belong elsewhere live.
|
||||
*/
|
||||
/datum/supply_packs/misc
|
||||
group = "Miscellaneous"
|
||||
|
||||
/datum/supply_packs/randomised/misc
|
||||
group = "Miscellaneous"
|
||||
|
||||
/datum/supply_packs/misc/wizard
|
||||
name = "Wizard costume"
|
||||
contains = list(
|
||||
/obj/item/weapon/staff,
|
||||
/obj/item/clothing/suit/wizrobe/fake,
|
||||
/obj/item/clothing/shoes/sandal,
|
||||
/obj/item/clothing/head/wizard/fake
|
||||
)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Wizard costume crate"
|
||||
|
||||
/datum/supply_packs/misc/foam_weapons
|
||||
name = "Foam Weapon Crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/material/sword/foam = 2,
|
||||
/obj/item/weapon/material/twohanded/baseballbat/foam = 2,
|
||||
/obj/item/weapon/material/twohanded/spear/foam = 2,
|
||||
/obj/item/weapon/material/twohanded/fireaxe/foam = 2
|
||||
)
|
||||
cost = 80
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "foam weapon crate"
|
||||
|
||||
/datum/supply_packs/randomised/misc/hats
|
||||
num_contained = 4
|
||||
contains = list(
|
||||
/obj/item/clothing/head/collectable/chef,
|
||||
/obj/item/clothing/head/collectable/paper,
|
||||
/obj/item/clothing/head/collectable/tophat,
|
||||
/obj/item/clothing/head/collectable/captain,
|
||||
/obj/item/clothing/head/collectable/beret,
|
||||
/obj/item/clothing/head/collectable/welding,
|
||||
/obj/item/clothing/head/collectable/flatcap,
|
||||
/obj/item/clothing/head/collectable/pirate,
|
||||
/obj/item/clothing/head/collectable/kitty,
|
||||
/obj/item/clothing/head/collectable/rabbitears,
|
||||
/obj/item/clothing/head/collectable/wizard,
|
||||
/obj/item/clothing/head/collectable/hardhat,
|
||||
/obj/item/clothing/head/collectable/HoS,
|
||||
/obj/item/clothing/head/collectable/thunderdome,
|
||||
/obj/item/clothing/head/collectable/swat,
|
||||
/obj/item/clothing/head/collectable/slime,
|
||||
/obj/item/clothing/head/collectable/police,
|
||||
/obj/item/clothing/head/collectable/slime,
|
||||
/obj/item/clothing/head/collectable/xenom,
|
||||
/obj/item/clothing/head/collectable/petehat
|
||||
)
|
||||
name = "Collectable hat crate!"
|
||||
cost = 200
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Collectable hats crate! Brought to you by Bass.inc!"
|
||||
|
||||
/datum/supply_packs/randomised/misc/costume
|
||||
num_contained = 3
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/pirate,
|
||||
/obj/item/clothing/suit/judgerobe,
|
||||
/obj/item/clothing/suit/wcoat,
|
||||
/obj/item/clothing/suit/hastur,
|
||||
/obj/item/clothing/suit/holidaypriest,
|
||||
/obj/item/clothing/suit/nun,
|
||||
/obj/item/clothing/suit/imperium_monk,
|
||||
/obj/item/clothing/suit/ianshirt,
|
||||
/obj/item/clothing/under/gimmick/rank/captain/suit,
|
||||
/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit,
|
||||
/obj/item/clothing/under/lawyer/purpsuit,
|
||||
/obj/item/clothing/under/rank/mailman,
|
||||
/obj/item/clothing/under/dress/dress_saloon,
|
||||
/obj/item/clothing/suit/suspenders,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/mad,
|
||||
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit,
|
||||
/obj/item/clothing/under/schoolgirl,
|
||||
/obj/item/clothing/under/owl,
|
||||
/obj/item/clothing/under/waiter,
|
||||
/obj/item/clothing/under/gladiator,
|
||||
/obj/item/clothing/under/soviet,
|
||||
/obj/item/clothing/under/scratch,
|
||||
/obj/item/clothing/under/wedding/bride_white,
|
||||
/obj/item/clothing/suit/chef,
|
||||
/obj/item/clothing/suit/apron/overalls,
|
||||
/obj/item/clothing/under/redcoat,
|
||||
/obj/item/clothing/under/kilt
|
||||
)
|
||||
name = "Costumes crate"
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Actor Costumes"
|
||||
|
||||
/datum/supply_packs/misc/formal_wear
|
||||
contains = list(
|
||||
/obj/item/clothing/head/bowler,
|
||||
/obj/item/clothing/head/that,
|
||||
/obj/item/clothing/suit/storage/toggle/internalaffairs,
|
||||
/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket,
|
||||
/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket,
|
||||
/obj/item/clothing/under/suit_jacket,
|
||||
/obj/item/clothing/under/suit_jacket/female,
|
||||
/obj/item/clothing/under/suit_jacket/really_black,
|
||||
/obj/item/clothing/under/suit_jacket/red,
|
||||
/obj/item/clothing/under/lawyer/bluesuit,
|
||||
/obj/item/clothing/under/lawyer/purpsuit,
|
||||
/obj/item/clothing/shoes/black = 2,
|
||||
/obj/item/clothing/shoes/leather,
|
||||
/obj/item/clothing/suit/wcoat
|
||||
)
|
||||
name = "Formalwear closet"
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet
|
||||
containername = "Formalwear for the best occasions."
|
||||
|
||||
/datum/supply_packs/randomised/misc/card_packs
|
||||
num_contained = 5
|
||||
contains = list(
|
||||
/obj/item/weapon/pack/cardemon,
|
||||
/obj/item/weapon/pack/spaceball,
|
||||
/obj/item/weapon/deck/holder
|
||||
)
|
||||
name = "Trading Card Crate"
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "cards crate"
|
||||
|
||||
/datum/supply_packs/misc/eftpos
|
||||
contains = list(/obj/item/device/eftpos)
|
||||
name = "EFTPOS scanner"
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "EFTPOS crate"
|
||||
|
||||
/datum/supply_packs/misc/cardboard_sheets
|
||||
contains = list(/obj/item/stack/material/cardboard)
|
||||
name = "50 cardboard sheets"
|
||||
amount = 50
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Cardboard sheets crate"
|
||||
|
||||
/datum/supply_packs/misc/carpet
|
||||
name = "Imported carpet"
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Imported carpet crate"
|
||||
cost = 15
|
||||
contains = list(
|
||||
/obj/item/stack/tile/carpet,
|
||||
/obj/item/stack/tile/carpet/blue
|
||||
)
|
||||
amount = 50
|
||||
|
||||
/datum/supply_packs/misc/linoleum
|
||||
name = "Linoleum"
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Linoleum crate"
|
||||
cost = 15
|
||||
contains = list(/obj/item/stack/tile/linoleum)
|
||||
amount = 50
|
||||
|
||||
/datum/supply_packs/misc/witch
|
||||
name = "Witch costume"
|
||||
containername = "Witch costume"
|
||||
containertype = /obj/structure/closet
|
||||
cost = 20
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/wizrobe/marisa/fake,
|
||||
/obj/item/clothing/shoes/sandal,
|
||||
/obj/item/clothing/head/wizard/marisa/fake,
|
||||
/obj/item/weapon/staff/broom
|
||||
)
|
||||
|
||||
/datum/supply_packs/randomised/misc/costume_hats
|
||||
name = "Costume hats"
|
||||
containername = "Actor hats crate"
|
||||
containertype = /obj/structure/closet
|
||||
cost = 10
|
||||
num_contained = 3
|
||||
contains = list(
|
||||
/obj/item/clothing/head/redcoat,
|
||||
/obj/item/clothing/head/mailman,
|
||||
/obj/item/clothing/head/plaguedoctorhat,
|
||||
/obj/item/clothing/head/pirate,
|
||||
/obj/item/clothing/head/hasturhood,
|
||||
/obj/item/clothing/head/powdered_wig,
|
||||
/obj/item/clothing/head/hairflower,
|
||||
/obj/item/clothing/head/hairflower/yellow,
|
||||
/obj/item/clothing/head/hairflower/blue,
|
||||
/obj/item/clothing/head/hairflower/pink,
|
||||
/obj/item/clothing/mask/gas/owl_mask,
|
||||
/obj/item/clothing/mask/gas/monkeymask,
|
||||
/obj/item/clothing/head/helmet/gladiator,
|
||||
/obj/item/clothing/head/ushanka
|
||||
)
|
||||
|
||||
/datum/supply_packs/randomised/misc/dresses
|
||||
name = "Womens formal dress locker"
|
||||
containername = "Pretty dress locker"
|
||||
containertype = /obj/structure/closet
|
||||
cost = 15
|
||||
num_contained = 3
|
||||
contains = list(
|
||||
/obj/item/clothing/under/wedding/bride_orange,
|
||||
/obj/item/clothing/under/wedding/bride_purple,
|
||||
/obj/item/clothing/under/wedding/bride_blue,
|
||||
/obj/item/clothing/under/wedding/bride_red,
|
||||
/obj/item/clothing/under/wedding/bride_white,
|
||||
/obj/item/clothing/under/sundress,
|
||||
/obj/item/clothing/under/dress/dress_green,
|
||||
/obj/item/clothing/under/dress/dress_pink,
|
||||
/obj/item/clothing/under/dress/dress_orange,
|
||||
/obj/item/clothing/under/dress/dress_yellow,
|
||||
/obj/item/clothing/under/dress/dress_saloon
|
||||
)
|
||||
|
||||
/datum/supply_packs/randomised/misc/exosuit_mod
|
||||
num_contained = 1
|
||||
contains = list(
|
||||
/obj/item/device/kit/paint/ripley,
|
||||
/obj/item/device/kit/paint/ripley/death,
|
||||
/obj/item/device/kit/paint/ripley/flames_red,
|
||||
/obj/item/device/kit/paint/ripley/flames_blue
|
||||
)
|
||||
name = "Random APLU modkit"
|
||||
cost = 200
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "heavy crate"
|
||||
|
||||
/datum/supply_packs/randomised/misc/exosuit_mod/durand
|
||||
contains = list(
|
||||
/obj/item/device/kit/paint/durand,
|
||||
/obj/item/device/kit/paint/durand/seraph,
|
||||
/obj/item/device/kit/paint/durand/phazon
|
||||
)
|
||||
name = "Random Durand exosuit modkit"
|
||||
|
||||
/datum/supply_packs/randomised/misc/exosuit_mod/gygax
|
||||
contains = list(
|
||||
/obj/item/device/kit/paint/gygax,
|
||||
/obj/item/device/kit/paint/gygax/darkgygax,
|
||||
/obj/item/device/kit/paint/gygax/recitence
|
||||
)
|
||||
name = "Random Gygax exosuit modkit"
|
||||
|
||||
/datum/supply_packs/misc/chaplaingear
|
||||
name = "Chaplain equipment"
|
||||
contains = list(
|
||||
/obj/item/clothing/under/rank/chaplain,
|
||||
/obj/item/clothing/shoes/black,
|
||||
/obj/item/clothing/suit/nun,
|
||||
/obj/item/clothing/head/nun_hood,
|
||||
/obj/item/clothing/suit/chaplain_hoodie,
|
||||
/obj/item/clothing/head/chaplain_hood,
|
||||
/obj/item/clothing/suit/holidaypriest,
|
||||
/obj/item/clothing/under/wedding/bride_white,
|
||||
/obj/item/weapon/storage/backpack/cultpack,
|
||||
/obj/item/weapon/storage/fancy/candle_box = 3
|
||||
)
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate"
|
||||
containername = "Chaplain equipment crate"
|
||||
75
code/datums/supplypacks/operations.dm
Normal file
75
code/datums/supplypacks/operations.dm
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Here is where any supply packs
|
||||
* related to operations live.
|
||||
*/
|
||||
/datum/supply_packs/ops
|
||||
group = "Operations"
|
||||
|
||||
/datum/supply_packs/ops/mule
|
||||
name = "Mulebot Crate"
|
||||
contains = list()
|
||||
cost = 20
|
||||
containertype = /obj/structure/largecrate/animal/mulebot
|
||||
containername = "Mulebot Crate"
|
||||
|
||||
/datum/supply_packs/ops/cargotrain
|
||||
name = "Cargo Train Tug"
|
||||
contains = list(/obj/vehicle/train/cargo/engine)
|
||||
cost = 45
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "Cargo Train Tug Crate"
|
||||
|
||||
/datum/supply_packs/ops/cargotrailer
|
||||
name = "Cargo Train Trolley"
|
||||
contains = list(/obj/vehicle/train/cargo/trolley)
|
||||
cost = 15
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "Cargo Train Trolley Crate"
|
||||
|
||||
/datum/supply_packs/ops/hoverpod
|
||||
name = "Hoverpod Shipment"
|
||||
contains = list()
|
||||
cost = 80
|
||||
containertype = /obj/structure/largecrate/hoverpod
|
||||
containername = "Hoverpod Crate"
|
||||
|
||||
/datum/supply_packs/ops/artscrafts
|
||||
name = "Arts and Crafts supplies"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/fancy/crayons,
|
||||
/obj/item/device/camera,
|
||||
/obj/item/device/camera_film = 2,
|
||||
/obj/item/weapon/storage/photo_album,
|
||||
/obj/item/weapon/packageWrap,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/red,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/green,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/blue,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/yellow,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/purple,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/black,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/white,
|
||||
/obj/item/weapon/contraband/poster,
|
||||
/obj/item/weapon/wrapping_paper = 3
|
||||
)
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate"
|
||||
containername = "Arts and Crafts crate"
|
||||
|
||||
/datum/supply_packs/randomised/ops
|
||||
group = "Operations"
|
||||
|
||||
/datum/supply_packs/randomised/ops/webbing
|
||||
name = "Webbing crate"
|
||||
num_contained = 4
|
||||
contains = list(
|
||||
/obj/item/clothing/accessory/storage/black_vest,
|
||||
/obj/item/clothing/accessory/storage/brown_vest,
|
||||
/obj/item/clothing/accessory/storage/white_vest,
|
||||
/obj/item/clothing/accessory/storage/black_drop_pouches,
|
||||
/obj/item/clothing/accessory/storage/brown_drop_pouches,
|
||||
/obj/item/clothing/accessory/storage/white_drop_pouches,
|
||||
/obj/item/clothing/accessory/storage/webbing
|
||||
)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate"
|
||||
containername = "Webbing crate"
|
||||
57
code/datums/supplypacks/science.dm
Normal file
57
code/datums/supplypacks/science.dm
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Here is where any supply packs
|
||||
* related to security tasks live
|
||||
*/
|
||||
/datum/supply_packs/sci
|
||||
group = "Science"
|
||||
|
||||
/datum/supply_packs/sci/virus
|
||||
name = "Virus sample crate"
|
||||
contains = list(/obj/item/weapon/virusdish/random = 4)
|
||||
cost = 25
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Virus sample crate"
|
||||
access = access_cmo
|
||||
|
||||
/datum/supply_packs/sci/coolanttank
|
||||
name = "Coolant tank crate"
|
||||
contains = list(/obj/structure/reagent_dispensers/coolanttank)
|
||||
cost = 16
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "coolant tank crate"
|
||||
|
||||
/datum/supply_packs/sci/mecha_ripley
|
||||
name = "Circuit Crate (\"Ripley\" APLU)"
|
||||
contains = list(
|
||||
/obj/item/weapon/book/manual/ripley_build_and_repair,
|
||||
/obj/item/weapon/circuitboard/mecha/ripley/main,
|
||||
/obj/item/weapon/circuitboard/mecha/ripley/peripherals
|
||||
)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "APLU \"Ripley\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_packs/sci/mecha_odysseus
|
||||
name = "Circuit Crate (\"Odysseus\")"
|
||||
contains = list(
|
||||
/obj/item/weapon/circuitboard/mecha/odysseus/peripherals,
|
||||
/obj/item/weapon/circuitboard/mecha/odysseus/main
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "\"Odysseus\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_packs/sci/phoron
|
||||
name = "Phoron assembly crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/tank/phoron = 3,
|
||||
/obj/item/device/assembly/igniter = 3,
|
||||
/obj/item/device/assembly/prox_sensor = 3,
|
||||
/obj/item/device/assembly/timer = 3
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/secure/phoron
|
||||
containername = "Phoron assembly crate"
|
||||
access = access_tox_storage
|
||||
28
code/datums/supplypacks/science_vr.dm
Normal file
28
code/datums/supplypacks/science_vr.dm
Normal file
@@ -0,0 +1,28 @@
|
||||
/datum/supply_packs/sci/some_robolimbs
|
||||
name = "Basic Robolimb Blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/xion,
|
||||
/obj/item/weapon/disk/limb/talon
|
||||
)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Basic Robolimb Blueprint Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_packs/sci/all_robolimbs
|
||||
name = "Advanced Robolimb Blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/bishop,
|
||||
/obj/item/weapon/disk/limb/hesphiastos,
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/veymed,
|
||||
/obj/item/weapon/disk/limb/wardtakahashi,
|
||||
/obj/item/weapon/disk/limb/xion,
|
||||
/obj/item/weapon/disk/limb/zenghu,
|
||||
/obj/item/weapon/disk/limb/talon
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Advanced Robolimb Blueprint Crate"
|
||||
access = access_robotics
|
||||
526
code/datums/supplypacks/security.dm
Normal file
526
code/datums/supplypacks/security.dm
Normal file
@@ -0,0 +1,526 @@
|
||||
/*
|
||||
* Here is where any supply packs
|
||||
* related to security tasks live
|
||||
*/
|
||||
/datum/supply_packs/security
|
||||
group = "Security"
|
||||
access = access_security
|
||||
|
||||
/datum/supply_packs/security/beanbagammo
|
||||
name = "Beanbag shells"
|
||||
contains = list(/obj/item/weapon/storage/box/beanbags = 3)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Beanbag shells"
|
||||
access = null
|
||||
|
||||
/datum/supply_packs/security/weapons
|
||||
name = "Weapons crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/melee/baton = 2,
|
||||
/obj/item/weapon/gun/energy/gun = 2,
|
||||
/obj/item/weapon/gun/energy/taser = 2,
|
||||
/obj/item/weapon/gun/projectile/colt/detective = 2,
|
||||
/obj/item/weapon/storage/box/flashbangs = 2
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure/weapon
|
||||
containername = "Weapons crate"
|
||||
|
||||
/datum/supply_packs/security/flareguns
|
||||
name = "Flare guns crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/gun/projectile/sec/flash,
|
||||
/obj/item/ammo_magazine/c45m/flash,
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/flare,
|
||||
/obj/item/weapon/storage/box/flashshells
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/weapon
|
||||
containername = "Flare gun crate"
|
||||
|
||||
/datum/supply_packs/security/eweapons
|
||||
name = "Experimental weapons crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/gun/energy/xray = 2,
|
||||
/obj/item/weapon/shield/energy = 2)
|
||||
cost = 125
|
||||
containertype = /obj/structure/closet/crate/secure/weapon
|
||||
containername = "Experimental weapons crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/randomised/security
|
||||
group = "Security"
|
||||
access = access_security
|
||||
|
||||
/datum/supply_packs/randomised/security/armor
|
||||
num_contained = 5
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/storage/vest,
|
||||
/obj/item/clothing/suit/storage/vest/officer,
|
||||
/obj/item/clothing/suit/storage/vest/warden,
|
||||
/obj/item/clothing/suit/storage/vest/hos,
|
||||
/obj/item/clothing/suit/storage/vest/pcrc,
|
||||
/obj/item/clothing/suit/storage/vest/detective,
|
||||
/obj/item/clothing/suit/storage/vest/heavy,
|
||||
/obj/item/clothing/suit/storage/vest/heavy/officer,
|
||||
/obj/item/clothing/suit/storage/vest/heavy/warden,
|
||||
/obj/item/clothing/suit/storage/vest/heavy/hos,
|
||||
/obj/item/clothing/suit/storage/vest/heavy/pcrc
|
||||
)
|
||||
|
||||
name = "Armor crate"
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Armor crate"
|
||||
|
||||
/datum/supply_packs/security/riot_gear
|
||||
name = "Riot gear crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/melee/baton = 3,
|
||||
/obj/item/weapon/shield/riot = 3,
|
||||
/obj/item/weapon/handcuffs = 3,
|
||||
/obj/item/weapon/storage/box/flashbangs,
|
||||
/obj/item/weapon/storage/box/beanbags,
|
||||
/obj/item/weapon/storage/box/handcuffs
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "riot gear crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/security/riot_armor
|
||||
name = "Riot armor set crate"
|
||||
contains = list(
|
||||
/obj/item/clothing/head/helmet/riot,
|
||||
/obj/item/clothing/suit/armor/riot,
|
||||
/obj/item/clothing/gloves/arm_guard/riot,
|
||||
/obj/item/clothing/shoes/leg_guard/riot
|
||||
)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "riot armor set crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/security/ablative_armor
|
||||
name = "Ablative armor set crate"
|
||||
contains = list(
|
||||
/obj/item/clothing/head/helmet/laserproof,
|
||||
/obj/item/clothing/suit/armor/laserproof,
|
||||
/obj/item/clothing/gloves/arm_guard/laserproof,
|
||||
/obj/item/clothing/shoes/leg_guard/laserproof
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "ablative armor set crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/security/bullet_resistant_armor
|
||||
name = "Bullet resistant armor set crate"
|
||||
contains = list(
|
||||
/obj/item/clothing/head/helmet/bulletproof,
|
||||
/obj/item/clothing/suit/armor/bulletproof,
|
||||
/obj/item/clothing/gloves/arm_guard/bulletproof,
|
||||
/obj/item/clothing/shoes/leg_guard/bulletproof
|
||||
)
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "bullet resistant armor set crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/security/combat_armor
|
||||
name = "Combat armor set crate"
|
||||
contains = list(
|
||||
/obj/item/clothing/head/helmet/combat,
|
||||
/obj/item/clothing/suit/armor/combat,
|
||||
/obj/item/clothing/gloves/arm_guard/combat,
|
||||
/obj/item/clothing/shoes/leg_guard/combat
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "combat armor set crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/security/tactical
|
||||
name = "Tactical suits"
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Tactical Suit Locker"
|
||||
cost = 60
|
||||
access = access_armory
|
||||
contains = list(
|
||||
/obj/item/clothing/under/tactical,
|
||||
/obj/item/clothing/suit/armor/tactical,
|
||||
/obj/item/clothing/head/helmet/tactical,
|
||||
/obj/item/clothing/mask/balaclava/tactical,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/tactical,
|
||||
/obj/item/weapon/storage/belt/security/tactical,
|
||||
/obj/item/clothing/shoes/jackboots,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/under/tactical,
|
||||
/obj/item/clothing/suit/armor/tactical,
|
||||
/obj/item/clothing/head/helmet/tactical,
|
||||
/obj/item/clothing/mask/balaclava/tactical,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/tactical,
|
||||
/obj/item/weapon/storage/belt/security/tactical,
|
||||
/obj/item/clothing/shoes/jackboots,
|
||||
/obj/item/clothing/gloves/black
|
||||
)
|
||||
|
||||
/datum/supply_packs/security/energyweapons
|
||||
name = "Energy weapons crate"
|
||||
contains = list(/obj/item/weapon/gun/energy/laser = 3)
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "energy weapons crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/security/shotgun
|
||||
name = "Shotgun crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/box/shotgunammo,
|
||||
/obj/item/weapon/storage/box/shotgunshells,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/combat = 2
|
||||
)
|
||||
cost = 65
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Shotgun crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/security/erifle
|
||||
name = "Energy marksman crate"
|
||||
contains = list(/obj/item/weapon/gun/energy/sniperrifle = 2)
|
||||
cost = 90
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Energy marksman crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/security/shotgunammo
|
||||
name = "Ballistic ammunition crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/box/shotgunammo = 2,
|
||||
/obj/item/weapon/storage/box/shotgunshells = 2
|
||||
)
|
||||
cost = 60
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "ballistic ammunition crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/security/ionweapons
|
||||
name = "Electromagnetic weapons crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/gun/energy/ionrifle = 2,
|
||||
/obj/item/weapon/storage/box/emps
|
||||
)
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "electromagnetic weapons crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/randomised/security/automatic
|
||||
name = "Automatic weapon crate"
|
||||
num_contained = 2
|
||||
contains = list(
|
||||
/obj/item/weapon/gun/projectile/automatic/wt550,
|
||||
/obj/item/weapon/gun/projectile/automatic/z8
|
||||
)
|
||||
cost = 90
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Automatic weapon crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/randomised/security/autoammo
|
||||
name = "Automatic weapon ammunition crate"
|
||||
num_contained = 6
|
||||
contains = list(
|
||||
/obj/item/ammo_magazine/mc9mmt,
|
||||
/obj/item/ammo_magazine/mc9mmt/rubber,
|
||||
/obj/item/ammo_magazine/a556
|
||||
)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Automatic weapon ammunition crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/security/energy_guns
|
||||
name = "energy guns crate"
|
||||
contains = list(/obj/item/weapon/gun/energy/gun = 2)
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "energy guns crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/security/securitybarriers
|
||||
name = "Security barrier crate"
|
||||
contains = list(/obj/machinery/deployable/barrier = 4)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure/gear
|
||||
containername = "Security barrier crate"
|
||||
access = null
|
||||
|
||||
/datum/supply_packs/security/securityshieldgen
|
||||
name = "Wall shield Generators"
|
||||
contains = list(/obj/machinery/shieldwallgen = 4)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "wall shield generators crate"
|
||||
access = access_teleporter
|
||||
|
||||
/datum/supply_packs/security/voidsuits
|
||||
name = "Security voidsuits"
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/security = 2,
|
||||
/obj/item/clothing/head/helmet/space/void/security = 2,
|
||||
/obj/item/clothing/mask/breath = 2,
|
||||
/obj/item/clothing/shoes/magboots = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2
|
||||
)
|
||||
cost = 55
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Security voidsuit crate"
|
||||
|
||||
/datum/supply_packs/randomised/security/holster
|
||||
name = "Holster crate"
|
||||
num_contained = 4
|
||||
contains = list(
|
||||
/obj/item/clothing/accessory/holster,
|
||||
/obj/item/clothing/accessory/holster/armpit,
|
||||
/obj/item/clothing/accessory/holster/waist,
|
||||
/obj/item/clothing/accessory/holster/hip
|
||||
)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Holster crate"
|
||||
|
||||
/datum/supply_packs/security/extragear
|
||||
name = "Security surplus equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/belt/security = 3,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud = 3,
|
||||
/obj/item/device/radio/headset/headset_sec/alt = 3,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/security = 3
|
||||
)
|
||||
cost = 25
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Security surplus equipment"
|
||||
access = null
|
||||
|
||||
/datum/supply_packs/security/detectivegear
|
||||
name = "Forensic investigation equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/box/evidence = 2,
|
||||
/obj/item/clothing/suit/storage/vest/detective,
|
||||
/obj/item/weapon/cartridge/detective,
|
||||
/obj/item/device/radio/headset/headset_sec,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/clothing/glasses/sunglasses,
|
||||
/obj/item/device/camera,
|
||||
/obj/item/weapon/folder/red,
|
||||
/obj/item/weapon/folder/blue,
|
||||
/obj/item/weapon/storage/belt/detective,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/device/taperecorder,
|
||||
/obj/item/device/mass_spectrometer,
|
||||
/obj/item/device/camera_film = 2,
|
||||
/obj/item/weapon/storage/photo_album,
|
||||
/obj/item/device/reagent_scanner,
|
||||
/obj/item/device/flashlight/maglight,
|
||||
/obj/item/weapon/storage/briefcase/crimekit
|
||||
)
|
||||
cost = 40
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Forensic equipment"
|
||||
access = access_forensics_lockers
|
||||
|
||||
/datum/supply_packs/security/detectiveclothes
|
||||
name = "Investigation apparel"
|
||||
contains = list(
|
||||
/obj/item/clothing/under/det/black = 2,
|
||||
/obj/item/clothing/under/det/grey = 2,
|
||||
/obj/item/clothing/head/det/grey = 2,
|
||||
/obj/item/clothing/under/det = 2,
|
||||
/obj/item/clothing/head/det = 2,
|
||||
/obj/item/clothing/suit/storage/det_trench,
|
||||
/obj/item/clothing/suit/storage/det_trench/grey,
|
||||
/obj/item/clothing/suit/storage/forensics/red,
|
||||
/obj/item/clothing/suit/storage/forensics/blue,
|
||||
/obj/item/clothing/under/det/corporate = 2,
|
||||
/obj/item/clothing/accessory/badge/holo/detective = 2,
|
||||
/obj/item/clothing/gloves/black = 2
|
||||
)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Investigation clothing"
|
||||
access = access_forensics_lockers
|
||||
|
||||
/datum/supply_packs/security/officergear
|
||||
name = "Officer equipment"
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/storage/vest/officer,
|
||||
/obj/item/clothing/head/helmet,
|
||||
/obj/item/weapon/cartridge/security,
|
||||
/obj/item/clothing/accessory/badge/holo,
|
||||
/obj/item/clothing/accessory/badge/holo/cord,
|
||||
/obj/item/device/radio/headset/headset_sec,
|
||||
/obj/item/weapon/storage/belt/security,
|
||||
/obj/item/device/flash,
|
||||
/obj/item/weapon/reagent_containers/spray/pepper,
|
||||
/obj/item/weapon/grenade/flashbang,
|
||||
/obj/item/weapon/melee/baton/loaded,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/device/hailer,
|
||||
/obj/item/device/flashlight/flare,
|
||||
/obj/item/clothing/accessory/storage/black_vest,
|
||||
/obj/item/clothing/head/soft/sec/corp,
|
||||
/obj/item/clothing/under/rank/security/corp,
|
||||
/obj/item/weapon/gun/energy/taser,
|
||||
/obj/item/device/flashlight/maglight
|
||||
)
|
||||
cost = 30
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Officer equipment"
|
||||
access = access_brig
|
||||
|
||||
/datum/supply_packs/security/wardengear
|
||||
name = "Warden equipment"
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/storage/vest/warden,
|
||||
/obj/item/clothing/under/rank/warden,
|
||||
/obj/item/clothing/under/rank/warden/corp,
|
||||
/obj/item/clothing/suit/armor/vest/warden,
|
||||
/obj/item/clothing/suit/armor/vest/warden/alt,
|
||||
/obj/item/clothing/head/helmet/warden,
|
||||
/obj/item/weapon/cartridge/security,
|
||||
/obj/item/device/radio/headset/headset_sec,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/device/hailer,
|
||||
/obj/item/clothing/accessory/badge/holo/warden,
|
||||
/obj/item/weapon/storage/box/flashbangs,
|
||||
/obj/item/weapon/storage/belt/security,
|
||||
/obj/item/weapon/reagent_containers/spray/pepper,
|
||||
/obj/item/weapon/melee/baton/loaded,
|
||||
/obj/item/weapon/storage/box/holobadge,
|
||||
/obj/item/clothing/head/beret/sec/corporate/warden,
|
||||
/obj/item/device/flashlight/maglight
|
||||
)
|
||||
cost = 45
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Warden equipment"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_packs/security/headofsecgear
|
||||
name = "Head of security equipment"
|
||||
contains = list(
|
||||
/obj/item/clothing/head/helmet/HoS,
|
||||
/obj/item/clothing/suit/storage/vest/hos,
|
||||
/obj/item/clothing/under/rank/head_of_security/corp,
|
||||
/obj/item/clothing/suit/armor/hos,
|
||||
/obj/item/clothing/head/helmet/HoS/dermal,
|
||||
/obj/item/weapon/cartridge/hos,
|
||||
/obj/item/device/radio/headset/heads/hos,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/weapon/storage/belt/security,
|
||||
/obj/item/device/flash,
|
||||
/obj/item/device/hailer,
|
||||
/obj/item/clothing/accessory/badge/holo/hos,
|
||||
/obj/item/clothing/accessory/holster/waist,
|
||||
/obj/item/weapon/melee/telebaton,
|
||||
/obj/item/weapon/shield/riot/tele,
|
||||
/obj/item/clothing/head/beret/sec/corporate/hos,
|
||||
/obj/item/device/flashlight/maglight
|
||||
)
|
||||
cost = 65
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Head of security equipment"
|
||||
access = access_hos
|
||||
|
||||
/datum/supply_packs/security/securityclothing
|
||||
name = "Security uniform crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/backpack/satchel/sec = 2,
|
||||
/obj/item/weapon/storage/backpack/security = 2,
|
||||
/obj/item/clothing/accessory/armband = 4,
|
||||
/obj/item/clothing/under/rank/security = 4,
|
||||
/obj/item/clothing/under/rank/security2 = 4,
|
||||
/obj/item/clothing/under/rank/warden,
|
||||
/obj/item/clothing/under/rank/head_of_security,
|
||||
/obj/item/clothing/suit/armor/hos/jensen,
|
||||
/obj/item/clothing/head/soft/sec = 4,
|
||||
/obj/item/clothing/gloves/black = 4,
|
||||
/obj/item/weapon/storage/box/holobadge
|
||||
)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Security uniform crate"
|
||||
|
||||
/datum/supply_packs/security/navybluesecurityclothing
|
||||
name = "Navy blue security uniform crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/backpack/satchel/sec = 2,
|
||||
/obj/item/weapon/storage/backpack/security = 2,
|
||||
/obj/item/clothing/under/rank/security/navyblue = 4,
|
||||
/obj/item/clothing/suit/security/navyofficer = 4,
|
||||
/obj/item/clothing/under/rank/warden/navyblue,
|
||||
/obj/item/clothing/suit/security/navywarden,
|
||||
/obj/item/clothing/under/rank/head_of_security/navyblue,
|
||||
/obj/item/clothing/suit/security/navyhos,
|
||||
/obj/item/clothing/head/beret/sec/navy/officer = 4,
|
||||
/obj/item/clothing/head/beret/sec/navy/warden,
|
||||
/obj/item/clothing/head/beret/sec/navy/hos,
|
||||
/obj/item/clothing/gloves/black = 4,
|
||||
/obj/item/weapon/storage/box/holobadge
|
||||
)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Navy blue security uniform crate"
|
||||
|
||||
/datum/supply_packs/security/corporatesecurityclothing
|
||||
name = "Corporate security uniform crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/backpack/satchel/sec = 2,
|
||||
/obj/item/weapon/storage/backpack/security = 2,
|
||||
/obj/item/clothing/under/rank/security/corp = 4,
|
||||
/obj/item/clothing/head/soft/sec/corp = 4,
|
||||
/obj/item/clothing/under/rank/warden/corp,
|
||||
/obj/item/clothing/under/rank/head_of_security/corp,
|
||||
/obj/item/clothing/head/beret/sec = 4,
|
||||
/obj/item/clothing/head/beret/sec/corporate/warden,
|
||||
/obj/item/clothing/head/beret/sec/corporate/hos,
|
||||
/obj/item/clothing/under/det/corporate = 2,
|
||||
/obj/item/clothing/gloves/black = 4,
|
||||
/obj/item/weapon/storage/box/holobadge
|
||||
)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Corporate security uniform crate"
|
||||
|
||||
/datum/supply_packs/security/biosuit
|
||||
name = "Security biohazard gear"
|
||||
contains = list(
|
||||
/obj/item/clothing/head/bio_hood/security,
|
||||
/obj/item/clothing/under/rank/security,
|
||||
/obj/item/clothing/suit/bio_suit/security,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/weapon/tank/oxygen,
|
||||
/obj/item/clothing/gloves/latex
|
||||
)
|
||||
cost = 35
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Security biohazard gear"
|
||||
|
||||
/datum/supply_packs/security/bolt_rifles_competitive
|
||||
name = "Competitive shooting crate"
|
||||
contains = list(
|
||||
/obj/item/device/assembly/timer,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice = 2,
|
||||
/obj/item/ammo_magazine/clip/a762/practice = 4,
|
||||
/obj/item/target = 2,
|
||||
/obj/item/target/alien = 2,
|
||||
/obj/item/target/syndicate = 2
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure/weapon
|
||||
containername = "Weapons crate"
|
||||
123
code/datums/supplypacks/supply.dm
Normal file
123
code/datums/supplypacks/supply.dm
Normal file
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
* Here is where any supply packs
|
||||
* related to civilian tasks live
|
||||
*/
|
||||
/datum/supply_packs/supply
|
||||
group = "Supply"
|
||||
|
||||
|
||||
/datum/supply_packs/supply/food
|
||||
name = "Kitchen supply crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/reagent_containers/food/condiment/flour = 6,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk = 3,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/soymilk = 2,
|
||||
/obj/item/weapon/storage/fancy/egg_box = 2,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tofu = 4,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat = 4
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/freezer
|
||||
containername = "Food crate"
|
||||
|
||||
/datum/supply_packs/supply/toner
|
||||
name = "Toner cartridges"
|
||||
contains = list(/obj/item/device/toner = 6)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Toner cartridges"
|
||||
|
||||
/datum/supply_packs/supply/janitor
|
||||
name = "Janitorial supplies"
|
||||
contains = list(
|
||||
/obj/item/weapon/reagent_containers/glass/bucket,
|
||||
/obj/item/weapon/mop,
|
||||
/obj/item/clothing/under/rank/janitor,
|
||||
/obj/item/weapon/cartridge/janitor,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/head/soft/purple,
|
||||
/obj/item/weapon/storage/belt/janitor,
|
||||
/obj/item/clothing/shoes/galoshes,
|
||||
/obj/item/weapon/caution = 4,
|
||||
/obj/item/weapon/storage/bag/trash,
|
||||
/obj/item/device/lightreplacer,
|
||||
/obj/item/weapon/reagent_containers/spray/cleaner,
|
||||
/obj/item/weapon/reagent_containers/glass/rag,
|
||||
/obj/item/weapon/grenade/chem_grenade/cleaner = 3,
|
||||
/obj/structure/mopbucket
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Janitorial supplies"
|
||||
|
||||
/datum/supply_packs/supply/boxes
|
||||
name = "Empty boxes"
|
||||
contains = list(/obj/item/weapon/storage/box = 10)
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate"
|
||||
containername = "Empty box crate"
|
||||
|
||||
/datum/supply_packs/supply/bureaucracy
|
||||
contains = list(
|
||||
/obj/item/weapon/clipboard = 2,
|
||||
/obj/item/weapon/pen/red,
|
||||
/obj/item/weapon/pen/blue,
|
||||
/obj/item/weapon/pen/blue,
|
||||
/obj/item/device/camera_film,
|
||||
/obj/item/weapon/folder/blue,
|
||||
/obj/item/weapon/folder/red,
|
||||
/obj/item/weapon/folder/yellow,
|
||||
/obj/item/weapon/hand_labeler,
|
||||
/obj/item/weapon/tape_roll,
|
||||
/obj/structure/filingcabinet/chestdrawer{anchored = 0},
|
||||
/obj/item/weapon/paper_bin
|
||||
)
|
||||
name = "Office supplies"
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Office supplies crate"
|
||||
|
||||
|
||||
/datum/supply_packs/supply/spare_pda
|
||||
name = "Spare PDAs"
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Spare PDA crate"
|
||||
contains = list(/obj/item/device/pda = 3)
|
||||
|
||||
/datum/supply_packs/supply/voidsuits
|
||||
name = "Mining voidsuits"
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/mining = 2,
|
||||
/obj/item/clothing/head/helmet/space/void/mining = 2,
|
||||
/obj/item/clothing/mask/breath = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2
|
||||
)
|
||||
cost = 35
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Mining voidsuit crate"
|
||||
access = access_mining
|
||||
|
||||
/datum/supply_packs/supply/minergear
|
||||
name = "Shaft miner equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/backpack/industrial,
|
||||
/obj/item/weapon/storage/backpack/satchel/eng,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/miner,
|
||||
/obj/item/device/radio/headset/headset_cargo,
|
||||
/obj/item/clothing/under/rank/miner,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/shoes/black,
|
||||
/obj/item/device/analyzer,
|
||||
/obj/item/weapon/storage/bag/ore,
|
||||
/obj/item/device/flashlight/lantern,
|
||||
/obj/item/weapon/shovel,
|
||||
/obj/item/weapon/pickaxe,
|
||||
/obj/item/weapon/mining_scanner,
|
||||
/obj/item/clothing/glasses/material,
|
||||
/obj/item/clothing/glasses/meson
|
||||
)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Shaft miner equipment"
|
||||
access = access_mining
|
||||
37
code/datums/supplypacks/supplypacks.dm
Normal file
37
code/datums/supplypacks/supplypacks.dm
Normal file
@@ -0,0 +1,37 @@
|
||||
//SUPPLY PACKS
|
||||
//NOTE: only secure crate types use the access var (and are lockable)
|
||||
//NOTE: hidden packs only show up when the computer has been hacked.
|
||||
//ANOTER NOTE: Contraband is obtainable through modified supplycomp circuitboards.
|
||||
//BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle.
|
||||
//NEW NOTE: Do NOT set the price of any crates below 7 points. Doing so allows infinite points.
|
||||
|
||||
var/list/all_supply_groups = list("Operations","Security","Hospitality","Engineering","Atmospherics","Medical","Reagents","Reagent Cartridges","Science","Hydroponics", "Supply", "Miscellaneous")
|
||||
|
||||
/datum/supply_packs
|
||||
var/name = null
|
||||
var/list/contains = list()
|
||||
var/manifest = ""
|
||||
var/amount = null
|
||||
var/cost = null
|
||||
var/containertype = null
|
||||
var/containername = null
|
||||
var/access = null
|
||||
var/hidden = 0
|
||||
var/contraband = 0
|
||||
var/group = "Operations"
|
||||
|
||||
/datum/supply_packs/New()
|
||||
manifest += "<ul>"
|
||||
for(var/path in contains)
|
||||
if(!path || !ispath(path, /atom))
|
||||
continue
|
||||
var/atom/O = path
|
||||
manifest += "<li>[initial(O.name)]</li>"
|
||||
manifest += "</ul>"
|
||||
|
||||
/datum/supply_packs/randomised
|
||||
var/num_contained //number of items picked to be contained in a randomised crate
|
||||
|
||||
/datum/supply_packs/randomised/New()
|
||||
manifest += "Contains any [num_contained] of:"
|
||||
..()
|
||||
@@ -1,20 +0,0 @@
|
||||
/datum/supply_packs/robolimbs_basic
|
||||
name = "Basic robolimb blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/xion,
|
||||
/obj/item/weapon/disk/limb/talon
|
||||
)
|
||||
|
||||
/datum/supply_packs/robolimbs_adv
|
||||
name = "All robolimb blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/bishop,
|
||||
/obj/item/weapon/disk/limb/hesphiastos,
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/veymed,
|
||||
/obj/item/weapon/disk/limb/wardtakahashi,
|
||||
/obj/item/weapon/disk/limb/xion,
|
||||
/obj/item/weapon/disk/limb/zenghu,
|
||||
/obj/item/weapon/disk/limb/talon
|
||||
)
|
||||
@@ -53,4 +53,8 @@
|
||||
/datum/category_item/underwear/bottom/thong
|
||||
name = "Thong"
|
||||
icon_state = "thong"
|
||||
has_color = TRUE
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/bottom/fishnet_lower
|
||||
name = "Fishnets"
|
||||
icon_state = "fishnet_lower"
|
||||
@@ -40,4 +40,16 @@
|
||||
/datum/category_item/underwear/top/halterneck_bra
|
||||
name = "Halterneck bra"
|
||||
icon_state = "halterneck_bra"
|
||||
has_color = TRUE
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/top/fishnet_base
|
||||
name = "Fishnet top"
|
||||
icon_state = "fishnet_body"
|
||||
|
||||
/datum/category_item/underwear/top/fishnet_sleeves
|
||||
name = "Fishnet with sleeves"
|
||||
icon_state = "fishnet_sleeves"
|
||||
|
||||
/datum/category_item/underwear/top/fishnet_gloves
|
||||
name = "Fishnet with gloves"
|
||||
icon_state = "fishnet_gloves"
|
||||
58
code/datums/vending/stored_item.dm
Normal file
58
code/datums/vending/stored_item.dm
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Datum that holds the instances and information about the items stored. Currently used in SmartFridges and Vending Machines.
|
||||
*/
|
||||
/datum/stored_item
|
||||
var/item_name = "name" //Name of the item(s) displayed
|
||||
var/item_path = null
|
||||
var/amount = 0
|
||||
var/list/instances //What items are actually stored
|
||||
var/stored //The thing holding it is
|
||||
|
||||
/datum/stored_item/New(var/stored, var/path, var/name = null, var/amount = 0)
|
||||
src.item_path = path
|
||||
|
||||
if(!name)
|
||||
var/atom/tmp = path
|
||||
src.item_name = initial(tmp.name)
|
||||
else
|
||||
src.item_name = name
|
||||
|
||||
src.amount = amount
|
||||
src.stored = stored
|
||||
|
||||
..()
|
||||
|
||||
/datum/stored_item/Destroy()
|
||||
stored = null
|
||||
if(instances)
|
||||
for(var/product in instances)
|
||||
qdel(product)
|
||||
instances.Cut()
|
||||
. = ..()
|
||||
|
||||
/datum/stored_item/proc/get_amount()
|
||||
return instances ? instances.len : amount
|
||||
|
||||
/datum/stored_item/proc/get_product(var/product_location)
|
||||
if(!get_amount() || !product_location)
|
||||
return
|
||||
init_products()
|
||||
|
||||
var/atom/movable/product = instances[instances.len] // Remove the last added product
|
||||
instances -= product
|
||||
product.forceMove(product_location)
|
||||
|
||||
/datum/stored_item/proc/add_product(var/atom/movable/product)
|
||||
if(product.type != item_path)
|
||||
return 0
|
||||
init_products()
|
||||
product.forceMove(stored)
|
||||
instances += product
|
||||
|
||||
/datum/stored_item/proc/init_products()
|
||||
if(instances)
|
||||
return
|
||||
instances = list()
|
||||
for(var/i = 1 to amount)
|
||||
var/new_product = new item_path(stored)
|
||||
instances += new_product
|
||||
13
code/datums/vending/vending.dm
Normal file
13
code/datums/vending/vending.dm
Normal file
@@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Datum used to hold further information about a product in a vending machine
|
||||
*/
|
||||
/datum/stored_item/vending_product
|
||||
var/price = 0 // Price to buy one
|
||||
var/display_color = null // Display color for vending machine listing
|
||||
var/category = CAT_NORMAL // CAT_HIDDEN for contraband, CAT_COIN for premium
|
||||
|
||||
/datum/stored_item/vending_product/New(var/stored, var/path, var/name = null, var/amount = 1, var/price = 0, var/color = null, var/category = CAT_NORMAL)
|
||||
..(stored, path, name, amount)
|
||||
src.price = price
|
||||
src.display_color = color
|
||||
src.category = category
|
||||
@@ -9,6 +9,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#515151"
|
||||
idtype = /obj/item/weapon/card/id/civilian
|
||||
access = list(access_hydroponics, access_bar, access_kitchen)
|
||||
minimal_access = list(access_bar)
|
||||
alt_titles = list("Barista")
|
||||
@@ -38,6 +39,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#515151"
|
||||
idtype = /obj/item/weapon/card/id/civilian
|
||||
access = list(access_hydroponics, access_bar, access_kitchen)
|
||||
minimal_access = list(access_kitchen)
|
||||
alt_titles = list("Cook")
|
||||
@@ -65,6 +67,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#515151"
|
||||
idtype = /obj/item/weapon/card/id/civilian
|
||||
access = list(access_hydroponics, access_bar, access_kitchen)
|
||||
minimal_access = list(access_hydroponics)
|
||||
alt_titles = list("Hydroponicist")
|
||||
@@ -98,6 +101,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#515151"
|
||||
idtype = /obj/item/weapon/card/id/cargo/head
|
||||
economic_modifier = 5
|
||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
|
||||
minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
|
||||
@@ -128,6 +132,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the quartermaster and the head of personnel"
|
||||
selection_color = "#515151"
|
||||
idtype = /obj/item/weapon/card/id/cargo
|
||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
|
||||
minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
|
||||
|
||||
@@ -153,6 +158,7 @@
|
||||
spawn_positions = 3
|
||||
supervisors = "the quartermaster and the head of personnel"
|
||||
selection_color = "#515151"
|
||||
idtype = /obj/item/weapon/card/id/cargo
|
||||
economic_modifier = 5
|
||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
|
||||
minimal_access = list(access_mining, access_mining_station, access_mailsorting)
|
||||
@@ -192,6 +198,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#515151"
|
||||
idtype = /obj/item/weapon/card/id/civilian
|
||||
access = list(access_janitor, access_maint_tunnels)
|
||||
minimal_access = list(access_janitor, access_maint_tunnels)
|
||||
alt_titles = list("Custodian")
|
||||
@@ -218,6 +225,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#515151"
|
||||
idtype = /obj/item/weapon/card/id/civilian
|
||||
access = list(access_library, access_maint_tunnels)
|
||||
minimal_access = list(access_library)
|
||||
alt_titles = list("Journalist")
|
||||
@@ -244,6 +252,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "company officials and Corporate Regulations"
|
||||
selection_color = "#515151"
|
||||
idtype = /obj/item/weapon/card/id/civilian
|
||||
economic_modifier = 7
|
||||
access = list(access_lawyer, access_sec_doors, access_maint_tunnels, access_heads)
|
||||
minimal_access = list(access_lawyer, access_sec_doors, access_heads)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#515151"
|
||||
idtype = /obj/item/weapon/card/id/civilian
|
||||
access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels)
|
||||
minimal_access = list(access_morgue, access_chapel_office, access_crematorium)
|
||||
alt_titles = list("Counselor")
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#7F6E2C"
|
||||
idtype = /obj/item/weapon/card/id/silver
|
||||
idtype = /obj/item/weapon/card/id/engineering/head
|
||||
req_admin_notify = 1
|
||||
economic_modifier = 10
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
spawn_positions = 5
|
||||
supervisors = "the chief engineer"
|
||||
selection_color = "#5B4D20"
|
||||
idtype = /obj/item/weapon/card/id/engineering
|
||||
economic_modifier = 5
|
||||
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics)
|
||||
minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
|
||||
@@ -96,6 +97,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the chief engineer"
|
||||
selection_color = "#5B4D20"
|
||||
idtype = /obj/item/weapon/card/id/engineering
|
||||
economic_modifier = 5
|
||||
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_external_airlocks)
|
||||
minimal_access = list(access_eva, access_engine, access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_external_airlocks)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#026865"
|
||||
idtype = /obj/item/weapon/card/id/silver
|
||||
idtype = /obj/item/weapon/card/id/medical/head
|
||||
req_admin_notify = 1
|
||||
economic_modifier = 10
|
||||
access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads,
|
||||
@@ -48,6 +48,7 @@
|
||||
spawn_positions = 3
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#013D3B"
|
||||
idtype = /obj/item/weapon/card/id/medical
|
||||
economic_modifier = 7
|
||||
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_eva)
|
||||
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology, access_eva)
|
||||
@@ -109,6 +110,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#013D3B"
|
||||
idtype = /obj/item/weapon/card/id/medical
|
||||
economic_modifier = 5
|
||||
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
|
||||
minimal_access = list(access_medical, access_medical_equip, access_chemistry)
|
||||
@@ -170,6 +172,7 @@
|
||||
economic_modifier = 5
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#013D3B"
|
||||
idtype = /obj/item/weapon/card/id/medical
|
||||
access = list(access_medical, access_medical_equip, access_morgue, access_psychiatrist)
|
||||
minimal_access = list(access_medical, access_medical_equip, access_psychiatrist)
|
||||
alt_titles = list("Psychologist")
|
||||
@@ -202,6 +205,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#013D3B"
|
||||
idtype = /obj/item/weapon/card/id/medical
|
||||
economic_modifier = 4
|
||||
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist)
|
||||
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_eva, access_maint_tunnels, access_external_airlocks)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#AD6BAD"
|
||||
idtype = /obj/item/weapon/card/id/silver
|
||||
idtype = /obj/item/weapon/card/id/science/head
|
||||
req_admin_notify = 1
|
||||
economic_modifier = 15
|
||||
access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
|
||||
@@ -51,6 +51,7 @@
|
||||
spawn_positions = 3
|
||||
supervisors = "the research director"
|
||||
selection_color = "#633D63"
|
||||
idtype = /obj/item/weapon/card/id/science
|
||||
economic_modifier = 7
|
||||
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch)
|
||||
minimal_access = list(access_tox, access_tox_storage, access_research, access_xenoarch)
|
||||
@@ -81,6 +82,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the research director"
|
||||
selection_color = "#633D63"
|
||||
idtype = /obj/item/weapon/card/id/science
|
||||
economic_modifier = 7
|
||||
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_hydroponics)
|
||||
minimal_access = list(access_research, access_xenobiology, access_hydroponics, access_tox_storage)
|
||||
@@ -111,6 +113,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "research director"
|
||||
selection_color = "#633D63"
|
||||
idtype = /obj/item/weapon/card/id/science
|
||||
economic_modifier = 5
|
||||
access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
|
||||
minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#8E2929"
|
||||
idtype = /obj/item/weapon/card/id/silver
|
||||
idtype = /obj/item/weapon/card/id/security/head
|
||||
req_admin_notify = 1
|
||||
economic_modifier = 10
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory,
|
||||
@@ -56,6 +56,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of security"
|
||||
selection_color = "#601C1C"
|
||||
idtype = /obj/item/weapon/card/id/security
|
||||
economic_modifier = 5
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks)
|
||||
@@ -93,6 +94,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the head of security"
|
||||
selection_color = "#601C1C"
|
||||
idtype = /obj/item/weapon/card/id/security
|
||||
alt_titles = list("Forensic Technician","Investigator")
|
||||
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks)
|
||||
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks)
|
||||
@@ -135,6 +137,7 @@
|
||||
spawn_positions = 4
|
||||
supervisors = "the head of security"
|
||||
selection_color = "#601C1C"
|
||||
idtype = /obj/item/weapon/card/id/security
|
||||
alt_titles = list("Junior Officer")
|
||||
economic_modifier = 4
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks)
|
||||
|
||||
@@ -38,13 +38,33 @@
|
||||
|
||||
/datum/autolathe/recipe/drinkingglass
|
||||
name = "drinking glass"
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/drinkingglass
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/glass2/square
|
||||
category = "General"
|
||||
New()
|
||||
..()
|
||||
var/obj/O = path
|
||||
name = initial(O.name) // generic recipes yay
|
||||
|
||||
/datum/autolathe/recipe/shotglass/
|
||||
name = "shot glass"
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass
|
||||
category = "General"
|
||||
/datum/autolathe/recipe/drinkingglass/rocks
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/glass2/rocks
|
||||
|
||||
/datum/autolathe/recipe/drinkingglass/shake
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/glass2/shake
|
||||
|
||||
/datum/autolathe/recipe/drinkingglass/cocktail
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail
|
||||
|
||||
/datum/autolathe/recipe/drinkingglass/shot
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/glass2/shot
|
||||
|
||||
/datum/autolathe/recipe/drinkingglass/pint
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/glass2/pint
|
||||
|
||||
/datum/autolathe/recipe/drinkingglass/mug
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/glass2/mug
|
||||
|
||||
/datum/autolathe/recipe/drinkingglass/wine
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/glass2/wine
|
||||
|
||||
/datum/autolathe/recipe/flashlight
|
||||
name = "flashlight"
|
||||
|
||||
@@ -35,10 +35,13 @@
|
||||
|
||||
var/affected_by_emp_until = 0
|
||||
|
||||
var/client_huds = list()
|
||||
|
||||
/obj/machinery/camera/New()
|
||||
wires = new(src)
|
||||
assembly = new(src)
|
||||
assembly.state = 4
|
||||
client_huds |= global_hud.whitense
|
||||
|
||||
/* // Use this to look for cameras that have the same c_tag.
|
||||
for(var/obj/machinery/camera/C in cameranet.cameras)
|
||||
|
||||
@@ -17,7 +17,8 @@ var/global/list/station_networks = list(
|
||||
NETWORK_RESEARCH_OUTPOST,
|
||||
NETWORK_ROBOTS,
|
||||
NETWORK_PRISON,
|
||||
NETWORK_SECURITY
|
||||
NETWORK_SECURITY,
|
||||
NETWORK_COMMUNICATORS
|
||||
)
|
||||
var/global/list/engineering_networks = list(
|
||||
NETWORK_ENGINE,
|
||||
|
||||
@@ -87,6 +87,7 @@
|
||||
name = "External Airlock"
|
||||
icon = 'icons/obj/doors/Doorext.dmi'
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_ext
|
||||
opacity = 0
|
||||
|
||||
/obj/machinery/door/airlock/glass
|
||||
name = "Glass Airlock"
|
||||
|
||||
@@ -1,63 +1,3 @@
|
||||
/*
|
||||
* Datum that holds the instances and information about the items in the smartfridge.
|
||||
*/
|
||||
/datum/data/stored_item
|
||||
var/item_name = "name" //Name of the item(s) displayed
|
||||
var/item_path = null
|
||||
var/amount = 0
|
||||
var/list/instances //What items are actually stored
|
||||
var/fridge //The attatched fridge
|
||||
|
||||
/datum/data/stored_item/New(var/fridge, var/path, var/name = null, var/amount = 0)
|
||||
..()
|
||||
|
||||
src.item_path = path
|
||||
|
||||
if(!name)
|
||||
var/atom/tmp = path
|
||||
src.item_name = initial(tmp.name)
|
||||
else
|
||||
src.item_name = name
|
||||
|
||||
src.amount = amount
|
||||
src.fridge = fridge
|
||||
|
||||
/datum/data/stored_item/Destroy()
|
||||
fridge = null
|
||||
if(instances)
|
||||
for(var/product in instances)
|
||||
qdel(product)
|
||||
instances.Cut()
|
||||
. = ..()
|
||||
|
||||
/datum/data/stored_item/proc/get_amount()
|
||||
return instances ? instances.len : amount
|
||||
|
||||
/datum/data/stored_item/proc/get_product(var/product_location)
|
||||
if(!get_amount() || !product_location)
|
||||
return
|
||||
init_products()
|
||||
|
||||
var/atom/movable/product = instances[instances.len] // Remove the last added product
|
||||
instances -= product
|
||||
product.forceMove(product_location)
|
||||
|
||||
/datum/data/stored_item/proc/add_product(var/atom/movable/product)
|
||||
if(product.type != item_path)
|
||||
return 0
|
||||
init_products()
|
||||
product.forceMove(fridge)
|
||||
instances += product
|
||||
|
||||
/datum/data/stored_item/proc/init_products()
|
||||
if(instances)
|
||||
return
|
||||
instances = list()
|
||||
for(var/i = 1 to amount)
|
||||
var/new_product = new item_path(fridge)
|
||||
instances += new_product
|
||||
|
||||
|
||||
/* SmartFridge. Much todo
|
||||
*/
|
||||
/obj/machinery/smartfridge
|
||||
@@ -76,7 +16,7 @@
|
||||
var/icon_off = "smartfridge-off"
|
||||
var/icon_panel = "smartfridge-panel"
|
||||
var/list/item_records = list()
|
||||
var/datum/data/stored_item/currently_vending = null //What we're putting out of the machine.
|
||||
var/datum/stored_item/currently_vending = null //What we're putting out of the machine.
|
||||
var/seconds_electrified = 0;
|
||||
var/shoot_inventory = 0
|
||||
var/locked = 0
|
||||
@@ -96,6 +36,8 @@
|
||||
|
||||
/obj/machinery/smartfridge/Destroy()
|
||||
qdel(wires)
|
||||
for(var/A in item_records) //Get rid of item records.
|
||||
qdel(A)
|
||||
wires = null
|
||||
return ..()
|
||||
|
||||
@@ -129,7 +71,7 @@
|
||||
|
||||
/obj/machinery/smartfridge/secure/extract/New()
|
||||
..()
|
||||
var/datum/data/stored_item/I = new(src, /obj/item/xenoproduct/slime/core)
|
||||
var/datum/stored_item/I = new(src, /obj/item/xenoproduct/slime/core)
|
||||
item_records.Add(I)
|
||||
for(var/i=1 to 5)
|
||||
var/obj/item/xenoproduct/slime/core/C = new(src)
|
||||
@@ -220,23 +162,29 @@
|
||||
icon_state = icon_off
|
||||
else
|
||||
icon_state = icon_on
|
||||
if(contents.len)
|
||||
var/hasItems
|
||||
for(var/datum/stored_item/I in item_records)
|
||||
if(I.get_amount())
|
||||
hasItems = 1
|
||||
break
|
||||
if(hasItems)
|
||||
overlays += "drying_rack_filled"
|
||||
if(!not_working)
|
||||
overlays += "drying_rack_drying"
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/proc/dry()
|
||||
for(var/datum/data/stored_item/I in item_records)
|
||||
for(var/datum/stored_item/I in item_records)
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/S in I.instances)
|
||||
if(S.dry) continue
|
||||
if(S.dried_type == S.type)
|
||||
S.dry = 1
|
||||
S.name = "dried [S.name]"
|
||||
S.color = "#AAAAAA"
|
||||
I.get_product(loc)
|
||||
I.instances -= S
|
||||
S.forceMove(get_turf(src))
|
||||
else
|
||||
var/D = S.dried_type
|
||||
new D(loc)
|
||||
new D(get_turf(src))
|
||||
qdel(S)
|
||||
return
|
||||
return
|
||||
@@ -286,46 +234,22 @@
|
||||
|
||||
if(accept_check(O))
|
||||
user.remove_from_mob(O)
|
||||
var/hasRecord = FALSE //Check to see if this passes or not.
|
||||
for(var/datum/data/stored_item/I in item_records)
|
||||
if(istype(O, I.item_path))
|
||||
stock(O, I)
|
||||
qdel(O)
|
||||
return
|
||||
if(!hasRecord)
|
||||
var/datum/data/stored_item/item = new/datum/data/stored_item(src, O.type)
|
||||
stock(O, item)
|
||||
item_records.Add(item)
|
||||
|
||||
stock(O)
|
||||
user.visible_message("<span class='notice'>[user] has added \the [O] to \the [src].</span>", "<span class='notice'>You add \the [O] to \the [src].</span>")
|
||||
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
else if(istype(O, /obj/item/weapon/storage/bag))
|
||||
var/obj/item/weapon/storage/bag/P = O
|
||||
var/plants_loaded = 0
|
||||
for(var/obj/G in P.contents)
|
||||
if(accept_check(G))
|
||||
plants_loaded++
|
||||
var/hasRecord = FALSE //Check to see if this passes or not.
|
||||
for(var/datum/data/stored_item/I in item_records)
|
||||
if(istype(G, I.item_path))
|
||||
if(G.name == I.item_name)
|
||||
stock(G, I)
|
||||
hasRecord = TRUE
|
||||
if(!hasRecord)
|
||||
var/datum/data/stored_item/item = new/datum/data/stored_item(src, G.type, G.name)
|
||||
stock(G, item)
|
||||
item_records.Add(item)
|
||||
|
||||
stock(G)
|
||||
plants_loaded = 1
|
||||
if(plants_loaded)
|
||||
|
||||
user.visible_message("<span class='notice'>[user] loads \the [src] with \the [P].</span>", "<span class='notice'>You load \the [src] with \the [P].</span>")
|
||||
if(P.contents.len > 0)
|
||||
user << "<span class='notice'>Some items are refused.</span>"
|
||||
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
else
|
||||
user << "<span class='notice'>\The [src] smartly refuses [O].</span>"
|
||||
return 1
|
||||
@@ -337,11 +261,20 @@
|
||||
user << "You short out the product lock on [src]."
|
||||
return 1
|
||||
|
||||
/obj/machinery/smartfridge/proc/stock(obj/item/O, var/datum/data/stored_item/I)
|
||||
I.add_product(O)
|
||||
/obj/machinery/smartfridge/proc/stock(obj/item/O)
|
||||
var/hasRecord = FALSE //Check to see if this passes or not.
|
||||
for(var/datum/stored_item/I in item_records)
|
||||
if((O.type == I.item_path) && (O.name == I.item_name))
|
||||
I.add_product(O)
|
||||
hasRecord = TRUE
|
||||
break
|
||||
if(!hasRecord)
|
||||
var/datum/stored_item/item = new/datum/stored_item(src, O.type, O.name)
|
||||
item.add_product(O)
|
||||
item_records.Add(item)
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
/obj/machinery/smartfridge/proc/vend(datum/data/stored_item/I)
|
||||
/obj/machinery/smartfridge/proc/vend(datum/stored_item/I)
|
||||
I.get_product(get_turf(src))
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
@@ -370,7 +303,7 @@
|
||||
|
||||
var/list/items[0]
|
||||
for (var/i=1 to length(item_records))
|
||||
var/datum/data/stored_item/I = item_records[i]
|
||||
var/datum/stored_item/I = item_records[i]
|
||||
var/count = I.get_amount()
|
||||
if(count > 0)
|
||||
items.Add(list(list("display_name" = html_encode(capitalize(I.item_name)), "vend" = i, "quantity" = count)))
|
||||
@@ -400,7 +333,7 @@
|
||||
if(href_list["vend"])
|
||||
var/index = text2num(href_list["vend"])
|
||||
var/amount = text2num(href_list["amount"])
|
||||
var/datum/data/stored_item/I = item_records[index]
|
||||
var/datum/stored_item/I = item_records[index]
|
||||
var/count = I.get_amount()
|
||||
|
||||
// Sanity check, there are probably ways to press the button when it shouldn't be possible.
|
||||
@@ -419,8 +352,8 @@
|
||||
if(!target)
|
||||
return 0
|
||||
|
||||
for(var/datum/data/stored_item/I in src.item_records)
|
||||
throw_item = I.get_product(loc)
|
||||
for(var/datum/stored_item/I in item_records)
|
||||
throw_item = I.get_product(get_turf(src))
|
||||
if (!throw_item)
|
||||
continue
|
||||
break
|
||||
|
||||
@@ -1,69 +1,3 @@
|
||||
/**
|
||||
* Datum used to hold information about a product in a vending machine
|
||||
*/
|
||||
/datum/data/vending_product
|
||||
var/product_name = "generic" // Display name for the product
|
||||
var/product_path = null
|
||||
var/amount = 0 // The original amount held in the vending machine
|
||||
var/list/instances
|
||||
var/price = 0 // Price to buy one
|
||||
var/display_color = null // Display color for vending machine listing
|
||||
var/category = CAT_NORMAL // CAT_HIDDEN for contraband, CAT_COIN for premium
|
||||
var/vending_machine // The vending machine we belong to
|
||||
|
||||
/datum/data/vending_product/New(var/vending_machine, var/path, var/name = null, var/amount = 1, var/price = 0, var/color = null, var/category = CAT_NORMAL)
|
||||
..()
|
||||
|
||||
src.product_path = path
|
||||
|
||||
if(!name)
|
||||
var/atom/tmp = path
|
||||
src.product_name = initial(tmp.name)
|
||||
else
|
||||
src.product_name = name
|
||||
|
||||
src.amount = amount
|
||||
src.price = price
|
||||
src.display_color = color
|
||||
src.category = category
|
||||
src.vending_machine = vending_machine
|
||||
|
||||
/datum/data/vending_product/Destroy()
|
||||
vending_machine = null
|
||||
if(instances)
|
||||
for(var/product in instances)
|
||||
qdel(product)
|
||||
instances.Cut()
|
||||
. = ..()
|
||||
|
||||
/datum/data/vending_product/proc/get_amount()
|
||||
return instances ? instances.len : amount
|
||||
|
||||
/datum/data/vending_product/proc/add_product(var/atom/movable/product)
|
||||
if(product.type != product_path)
|
||||
return 0
|
||||
init_products()
|
||||
product.forceMove(vending_machine)
|
||||
instances += product
|
||||
|
||||
/datum/data/vending_product/proc/get_product(var/product_location)
|
||||
if(!get_amount() || !product_location)
|
||||
return
|
||||
init_products()
|
||||
|
||||
var/atom/movable/product = instances[instances.len] // Remove the last added product
|
||||
instances -= product
|
||||
product.forceMove(product_location)
|
||||
return product
|
||||
|
||||
/datum/data/vending_product/proc/init_products()
|
||||
if(instances)
|
||||
return
|
||||
instances = list()
|
||||
for(var/i = 1 to amount)
|
||||
var/new_product = new product_path(vending_machine)
|
||||
instances += new_product
|
||||
|
||||
/**
|
||||
* A vending machine
|
||||
*/
|
||||
@@ -89,7 +23,7 @@
|
||||
var/vend_ready = 1 //Are we ready to vend?? Is it time??
|
||||
var/vend_delay = 10 //How long does it take to vend?
|
||||
var/categories = CAT_NORMAL // Bitmask of cats we're currently showing
|
||||
var/datum/data/vending_product/currently_vending = null // What we're requesting payment for right now
|
||||
var/datum/stored_item/vending_product/currently_vending = null // What we're requesting payment for right now
|
||||
var/status_message = "" // Status screen messages like "insufficient funds", displayed in NanoUI
|
||||
var/status_error = 0 // Set to 1 if status_message is an error
|
||||
|
||||
@@ -169,7 +103,7 @@
|
||||
var/category = current_list[2]
|
||||
|
||||
for(var/entry in current_list[1])
|
||||
var/datum/data/vending_product/product = new/datum/data/vending_product(src, entry)
|
||||
var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry)
|
||||
|
||||
product.price = (entry in src.prices) ? src.prices[entry] : 0
|
||||
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
|
||||
@@ -182,7 +116,7 @@
|
||||
wires = null
|
||||
qdel(coin)
|
||||
coin = null
|
||||
for(var/datum/data/vending_product/R in product_records)
|
||||
for(var/datum/stored_item/vending_product/R in product_records)
|
||||
qdel(R)
|
||||
product_records = null
|
||||
return ..()
|
||||
@@ -276,10 +210,9 @@
|
||||
return
|
||||
else
|
||||
|
||||
for(var/datum/data/vending_product/R in product_records)
|
||||
if(istype(W, R.product_path))
|
||||
for(var/datum/stored_item/vending_product/R in product_records)
|
||||
if(istype(W, R.item_path) && (W.name == R.item_name))
|
||||
stock(W, R, user)
|
||||
qdel(W)
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -374,7 +307,7 @@
|
||||
// create entry in the purchaser's account log
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = "[vendor_account.owner_name] (via [src.name])"
|
||||
T.purpose = "Purchase of [currently_vending.product_name]"
|
||||
T.purpose = "Purchase of [currently_vending.item_name]"
|
||||
if(currently_vending.price > 0)
|
||||
T.amount = "([currently_vending.price])"
|
||||
else
|
||||
@@ -400,7 +333,7 @@
|
||||
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = target
|
||||
T.purpose = "Purchase of [currently_vending.product_name]"
|
||||
T.purpose = "Purchase of [currently_vending.item_name]"
|
||||
T.amount = "[currently_vending.price]"
|
||||
T.source_terminal = src.name
|
||||
T.date = current_date_string
|
||||
@@ -432,7 +365,7 @@
|
||||
var/list/data = list()
|
||||
if(currently_vending)
|
||||
data["mode"] = 1
|
||||
data["product"] = currently_vending.product_name
|
||||
data["product"] = currently_vending.item_name
|
||||
data["price"] = currently_vending.price
|
||||
data["message_err"] = 0
|
||||
data["message"] = src.status_message
|
||||
@@ -442,14 +375,14 @@
|
||||
var/list/listed_products = list()
|
||||
|
||||
for(var/key = 1 to src.product_records.len)
|
||||
var/datum/data/vending_product/I = src.product_records[key]
|
||||
var/datum/stored_item/vending_product/I = src.product_records[key]
|
||||
|
||||
if(!(I.category & src.categories))
|
||||
continue
|
||||
|
||||
listed_products.Add(list(list(
|
||||
"key" = key,
|
||||
"name" = I.product_name,
|
||||
"name" = I.item_name,
|
||||
"price" = I.price,
|
||||
"color" = I.display_color,
|
||||
"amount" = I.get_amount())))
|
||||
@@ -497,7 +430,7 @@
|
||||
return
|
||||
|
||||
var/key = text2num(href_list["vend"])
|
||||
var/datum/data/vending_product/R = product_records[key]
|
||||
var/datum/stored_item/vending_product/R = product_records[key]
|
||||
|
||||
// This should not happen unless the request from NanoUI was bad
|
||||
if(!(R.category & src.categories))
|
||||
@@ -526,7 +459,7 @@
|
||||
src.add_fingerprint(usr)
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
/obj/machinery/vending/proc/vend(datum/data/vending_product/R, mob/user)
|
||||
/obj/machinery/vending/proc/vend(datum/stored_item/vending_product/R, mob/user)
|
||||
if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH
|
||||
usr << "<span class='warning'>Access denied.</span>" //Unless emagged of course
|
||||
flick(src.icon_deny,src)
|
||||
@@ -581,7 +514,7 @@
|
||||
* Checks if item is vendable in this machine should be performed before
|
||||
* calling. W is the item being inserted, R is the associated vending_product entry.
|
||||
*/
|
||||
/obj/machinery/vending/proc/stock(obj/item/weapon/W, var/datum/data/vending_product/R, var/mob/user)
|
||||
/obj/machinery/vending/proc/stock(obj/item/weapon/W, var/datum/stored_item/vending_product/R, var/mob/user)
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
|
||||
@@ -635,7 +568,7 @@
|
||||
|
||||
//Oh no we're malfunctioning! Dump out some product and break.
|
||||
/obj/machinery/vending/proc/malfunction()
|
||||
for(var/datum/data/vending_product/R in src.product_records)
|
||||
for(var/datum/stored_item/vending_product/R in src.product_records)
|
||||
while(R.get_amount()>0)
|
||||
R.get_product(loc)
|
||||
break
|
||||
@@ -651,7 +584,7 @@
|
||||
if(!target)
|
||||
return 0
|
||||
|
||||
for(var/datum/data/vending_product/R in src.product_records)
|
||||
for(var/datum/stored_item/vending_product/R in src.product_records)
|
||||
throw_item = R.get_product(loc)
|
||||
if (!throw_item)
|
||||
continue
|
||||
@@ -697,37 +630,45 @@
|
||||
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
|
||||
icon_state = "boozeomat"
|
||||
icon_deny = "boozeomat-deny"
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5,
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/glass2/square = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/shot = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/pint = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/mug = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/wine = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/tonic = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/tonic = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 30,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass = 30,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/ice = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/tea = 15)
|
||||
/obj/item/weapon/reagent_containers/food/drinks/tea = 15,
|
||||
/obj/item/weapon/glass_extra/stick = 30,
|
||||
/obj/item/weapon/glass_extra/straw = 30)
|
||||
contraband = list()
|
||||
vend_delay = 15
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
@@ -790,6 +731,30 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 1,/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 1)
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
|
||||
/obj/machinery/vending/fitness
|
||||
name = "SweatMAX"
|
||||
desc = "Fueled by your inner inadequacy!"
|
||||
icon_state = "fitness"
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton = 8,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate = 8,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 8,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask = 8,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 8,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 8,
|
||||
/obj/item/weapon/reagent_containers/pill/diet = 8,
|
||||
/obj/item/weapon/towel/random = 8)
|
||||
|
||||
prices = list(/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton = 3,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate = 3,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 20,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask = 5,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 5,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 5,
|
||||
/obj/item/weapon/reagent_containers/pill/diet = 25,
|
||||
/obj/item/weapon/towel/random = 40)
|
||||
|
||||
contraband = list(/obj/item/weapon/reagent_containers/syringe/steroid = 4)
|
||||
|
||||
//This one's from bay12
|
||||
/obj/machinery/vending/cart
|
||||
name = "PTech"
|
||||
@@ -930,7 +895,7 @@
|
||||
for(var/entry in current_list[1])
|
||||
var/obj/item/seeds/S = new entry(src)
|
||||
var/name = S.name
|
||||
var/datum/data/vending_product/product = new/datum/data/vending_product(src, entry, name)
|
||||
var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry, name)
|
||||
|
||||
product.price = (entry in src.prices) ? src.prices[entry] : 0
|
||||
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
|
||||
@@ -959,7 +924,11 @@
|
||||
/obj/item/weapon/material/kitchen/utensil/knife = 6,
|
||||
/obj/item/weapon/material/kitchen/utensil/spoon = 6,
|
||||
/obj/item/weapon/material/knife = 3,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 8,
|
||||
/obj/item/weapon/material/kitchen/rollingpin = 2,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/square = 8,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 8,
|
||||
/obj/item/weapon/glass_extra/stick = 15,
|
||||
/obj/item/weapon/glass_extra/straw = 15,
|
||||
/obj/item/clothing/suit/chef/classic = 2,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/heart = 3,
|
||||
@@ -971,16 +940,15 @@
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/syndicate = 3)
|
||||
|
||||
|
||||
contraband = list(/obj/item/weapon/material/kitchen/rollingpin = 2,
|
||||
/obj/item/weapon/material/knife/butch = 2)
|
||||
contraband = list(/obj/item/weapon/material/knife/butch = 2)
|
||||
|
||||
/obj/machinery/vending/sovietsoda
|
||||
name = "BODA"
|
||||
desc = "An old sweet water vending machine,how did this end up here?"
|
||||
icon_state = "sovietsoda"
|
||||
product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem."
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/soda = 30)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola = 20)
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 30) // TODO Russian soda can
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 20) // TODO Russian cola can
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
|
||||
/obj/machinery/vending/tool
|
||||
@@ -1046,25 +1014,3 @@
|
||||
/obj/item/weapon/scalpel = 2,/obj/item/weapon/circular_saw = 2,/obj/item/weapon/tank/anesthetic = 2,/obj/item/clothing/mask/breath/medical = 5,
|
||||
/obj/item/weapon/screwdriver = 5,/obj/item/weapon/crowbar = 5)
|
||||
//everything after the power cell had no amounts, I improvised. -Sayu
|
||||
|
||||
/obj/machinery/vending/fitness
|
||||
name = "SweatMAX"
|
||||
desc = "Fueled by your inner inadequacy!"
|
||||
icon_state = "fitness"
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton = 8,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate = 8,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake = 8,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask = 8,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 8,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 8,
|
||||
/obj/item/weapon/reagent_containers/pill/diet = 8)
|
||||
|
||||
prices = list(/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton = 3,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate = 3,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake = 20,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask = 5,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 5,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 5,
|
||||
/obj/item/weapon/reagent_containers/pill/diet = 25)
|
||||
|
||||
contraband = list(/obj/item/weapon/reagent_containers/syringe/steroid = 4)
|
||||
|
||||
@@ -183,9 +183,9 @@
|
||||
if(materials[S.material.name] + amnt <= res_max_amount)
|
||||
if(S && S.amount >= 1)
|
||||
var/count = 0
|
||||
overlays += "pros-load-metal"
|
||||
overlays += "fab-load-metal"
|
||||
spawn(10)
|
||||
overlays -= "pros-load-metal"
|
||||
overlays -= "fab-load-metal"
|
||||
while(materials[S.material.name] + amnt <= res_max_amount && S.amount >= 1)
|
||||
materials[S.material.name] += amnt
|
||||
S.use(1)
|
||||
|
||||
@@ -17,6 +17,10 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
origin_tech = list(TECH_ENGINEERING = 2, TECH_MAGNET = 2, TECH_BLUESPACE = 2, TECH_DATA = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
|
||||
|
||||
var/video_range = 4
|
||||
var/obj/machinery/camera/communicator/video_source // Their camera
|
||||
var/obj/machinery/camera/communicator/camera // Our camera
|
||||
|
||||
var/list/voice_mobs = list()
|
||||
var/list/voice_requests = list()
|
||||
var/list/voice_invites = list()
|
||||
@@ -61,6 +65,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
all_communicators = sortAtom(all_communicators)
|
||||
node = get_exonet_node()
|
||||
processing_objects |= src
|
||||
camera = new(src)
|
||||
camera.name = "[src] #[rand(100,999)]"
|
||||
camera.c_tag = camera.name
|
||||
//This is a pretty terrible way of doing this.
|
||||
spawn(5 SECONDS) //Wait for our mob to finish spawning.
|
||||
if(ismob(loc))
|
||||
@@ -72,6 +79,14 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
register_device(S.loc)
|
||||
initialize_exonet(S.loc)
|
||||
|
||||
// Proc: examine()
|
||||
// Parameters: user - the user doing the examining
|
||||
// Description: Allows the user to click a link when examining to look at video if one is going.
|
||||
/obj/item/device/communicator/examine(mob/user)
|
||||
. = ..(user, 1)
|
||||
if(. && video_source)
|
||||
user << "<span class='notice'>It looks like it's on a video call: <a href='?src=\ref[src];watchvideo=1'>\[view\]</a></span>"
|
||||
|
||||
// Proc: initialize_exonet()
|
||||
// Parameters: 1 (user - the person the communicator belongs to)
|
||||
// Description: Sets up the exonet datum, gives the device an address, and then gets a node reference. Afterwards, populates the device
|
||||
@@ -255,27 +270,27 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
//Now for ghosts who we pretend have communicators.
|
||||
for(var/mob/observer/dead/O in known_devices)
|
||||
if(O.client && O.client.prefs.communicator_visibility == 1 && O.exonet)
|
||||
communicators[++communicators.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address)
|
||||
communicators[++communicators.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address, "ref" = "\ref[O]")
|
||||
|
||||
//Lists all the other communicators that we invited.
|
||||
for(var/obj/item/device/communicator/comm in voice_invites)
|
||||
if(comm.exonet)
|
||||
invites[++invites.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address)
|
||||
invites[++invites.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address, "ref" = "\ref[comm]")
|
||||
|
||||
//Ghosts we invited.
|
||||
for(var/mob/observer/dead/O in voice_invites)
|
||||
if(O.exonet && O.client)
|
||||
invites[++invites.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address)
|
||||
invites[++invites.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address, "ref" = "\ref[O]")
|
||||
|
||||
//Communicators that want to talk to us.
|
||||
for(var/obj/item/device/communicator/comm in voice_requests)
|
||||
if(comm.exonet)
|
||||
requests[++requests.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address)
|
||||
requests[++requests.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address, "ref" = "\ref[comm]")
|
||||
|
||||
//Ghosts that want to talk to us.
|
||||
for(var/mob/observer/dead/O in voice_requests)
|
||||
if(O.exonet && O.client)
|
||||
requests[++requests.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address)
|
||||
requests[++requests.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address, "ref" = "\ref[O]")
|
||||
|
||||
//Now for all the voice mobs inside the communicator.
|
||||
for(var/mob/living/voice/voice in contents)
|
||||
@@ -283,12 +298,12 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
|
||||
//Finally, all the communicators linked to this one.
|
||||
for(var/obj/item/device/communicator/comm in communicating)
|
||||
connected_communicators[++connected_communicators.len] = list("name" = sanitize(comm.name), "true_name" = sanitize(comm.name))
|
||||
connected_communicators[++connected_communicators.len] = list("name" = sanitize(comm.name), "true_name" = sanitize(comm.name), "ref" = "\ref[comm]")
|
||||
|
||||
//Devices that have been messaged or recieved messages from.
|
||||
for(var/obj/item/device/communicator/comm in im_contacts)
|
||||
if(comm.exonet)
|
||||
im_contacts_ui[++im_contacts_ui.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address)
|
||||
im_contacts_ui[++im_contacts_ui.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address, "ref" = "\ref[comm]")
|
||||
|
||||
//Actual messages.
|
||||
for(var/I in im_list)
|
||||
@@ -311,6 +326,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
data["requestsReceived"] = requests
|
||||
data["voice_mobs"] = voices
|
||||
data["communicating"] = connected_communicators
|
||||
data["video_comm"] = video_source ? "\ref[video_source.loc]" : null
|
||||
data["imContacts"] = im_contacts_ui
|
||||
data["imList"] = im_list_ui
|
||||
data["time"] = worldtime2text()
|
||||
@@ -323,7 +339,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
if(!ui)
|
||||
// the ui does not exist, so we'll create a new() one
|
||||
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
|
||||
ui = new(user, src, ui_key, "communicator.tmpl", "Communicator", 450, 700)
|
||||
ui = new(user, src, ui_key, "communicator.tmpl", "Communicator", 475, 700)
|
||||
// when the ui is first opened this is the data it will use
|
||||
ui.set_initial_data(data)
|
||||
// open the new ui window
|
||||
@@ -342,9 +358,20 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
if(new_name)
|
||||
owner = new_name
|
||||
name = "[owner]'s [initial(name)]"
|
||||
if(camera)
|
||||
camera.name = name
|
||||
camera.c_tag = name
|
||||
|
||||
if(href_list["toggle_visibility"])
|
||||
network_visibility = !network_visibility
|
||||
switch(network_visibility)
|
||||
if(1) //Visible, becoming invisbile
|
||||
network_visibility = 0
|
||||
if(camera)
|
||||
camera.remove_network(NETWORK_COMMUNICATORS)
|
||||
if(0) //Invisible, becoming visible
|
||||
network_visibility = 1
|
||||
if(camera)
|
||||
camera.add_network(NETWORK_COMMUNICATORS)
|
||||
|
||||
if(href_list["toggle_ringer"])
|
||||
ringer = !ringer
|
||||
@@ -369,6 +396,12 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
var/their_address = href_list["dial"]
|
||||
exonet.send_message(their_address, "voice")
|
||||
|
||||
if(href_list["decline"])
|
||||
var/ref_to_remove = href_list["decline"]
|
||||
var/atom/decline = locate(ref_to_remove)
|
||||
if(decline)
|
||||
del_request(decline)
|
||||
|
||||
if(href_list["message"])
|
||||
if(!get_connection_to_tcomms())
|
||||
usr << "<span class='danger'>Error: Cannot connect to Exonet node.</span>"
|
||||
@@ -383,10 +416,24 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
var/name_to_disconnect = href_list["disconnect"]
|
||||
for(var/mob/living/voice/V in contents)
|
||||
if(name_to_disconnect == V.name)
|
||||
close_connection(usr, V, "[usr] hung up.")
|
||||
close_connection(usr, V, "[usr] hung up")
|
||||
for(var/obj/item/device/communicator/comm in communicating)
|
||||
if(name_to_disconnect == comm.name)
|
||||
close_connection(usr, comm, "[usr] hung up.")
|
||||
close_connection(usr, comm, "[usr] hung up")
|
||||
|
||||
if(href_list["startvideo"])
|
||||
var/ref_to_video = href_list["startvideo"]
|
||||
var/obj/item/device/communicator/comm = locate(ref_to_video)
|
||||
if(comm)
|
||||
connect_video(usr, comm)
|
||||
|
||||
if(href_list["endvideo"])
|
||||
if(video_source)
|
||||
end_video()
|
||||
|
||||
if(href_list["watchvideo"])
|
||||
if(video_source)
|
||||
watch_video(usr,video_source.loc)
|
||||
|
||||
if(href_list["copy"])
|
||||
target_address = href_list["copy"]
|
||||
@@ -396,9 +443,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
|
||||
if(href_list["hang_up"])
|
||||
for(var/mob/living/voice/V in contents)
|
||||
close_connection(usr, V, "[usr] hung up.")
|
||||
close_connection(usr, V, "[usr] hung up")
|
||||
for(var/obj/item/device/communicator/comm in communicating)
|
||||
close_connection(usr, comm, "[usr] hung up.")
|
||||
close_connection(usr, comm, "[usr] hung up")
|
||||
|
||||
if(href_list["switch_tab"])
|
||||
selected_tab = href_list["switch_tab"]
|
||||
@@ -473,6 +520,28 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
owner = user.name
|
||||
|
||||
name = "[owner]'s [initial(name)]"
|
||||
if(camera)
|
||||
camera.name = name
|
||||
camera.c_tag = name
|
||||
|
||||
// Proc: add_communicating()
|
||||
// Parameters: 1 (comm - the communicator to add to communicating)
|
||||
// Description: Used when this communicator gets a new communicator to relay say/me messages to
|
||||
/obj/item/device/communicator/proc/add_communicating(obj/item/device/communicator/comm)
|
||||
if(!comm || !istype(comm)) return
|
||||
|
||||
communicating |= comm
|
||||
listening_objects |= src
|
||||
update_icon()
|
||||
|
||||
// Proc: del_communicating()
|
||||
// Parameters: 1 (comm - the communicator to remove from communicating)
|
||||
// Description: Used when this communicator is being asked to stop relaying say/me messages to another
|
||||
/obj/item/device/communicator/proc/del_communicating(obj/item/device/communicator/comm)
|
||||
if(!comm || !istype(comm)) return
|
||||
|
||||
communicating.Remove(comm)
|
||||
update_icon()
|
||||
|
||||
// Proc: open_connection()
|
||||
// Parameters: 2 (user - the person who initiated the connecting being opened, candidate - the communicator or observer that will connect to the device)
|
||||
@@ -507,8 +576,8 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
comm.visible_message("<span class='notice'>\icon[src] Connection to [src] at [exonet.address] established.</span>")
|
||||
sleep(20)
|
||||
|
||||
communicating |= comm
|
||||
comm.communicating |= src
|
||||
src.add_communicating(comm)
|
||||
comm.add_communicating(src)
|
||||
|
||||
// Proc: open_connection_to_ghost()
|
||||
// Parameters: 2 (user - the person who initiated this, candidate - the ghost that will be turned into a voice mob)
|
||||
@@ -530,6 +599,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
new_voice.mind = candidate.mind //Transfer the mind, if any.
|
||||
new_voice.ckey = candidate.ckey //Finally, bring the client over.
|
||||
voice_mobs.Add(new_voice)
|
||||
listening_objects |= src
|
||||
|
||||
var/obj/screen/blackness = new() //Makes a black screen, so the candidate can't see what's going on before actually 'connecting' to the communicator.
|
||||
blackness.screen_loc = ui_entire_screen
|
||||
@@ -580,15 +650,22 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
visible_message("<span class='danger'>\icon[src] [reason].</span>")
|
||||
voice_mobs.Remove(voice)
|
||||
qdel(voice)
|
||||
update_icon()
|
||||
|
||||
for(var/obj/item/device/communicator/comm in communicating) //Now we handle real communicators.
|
||||
if(target && comm != target)
|
||||
continue
|
||||
src.del_communicating(comm)
|
||||
comm.del_communicating(src)
|
||||
comm.visible_message("<span class='danger'>\icon[src] [reason].</span>")
|
||||
visible_message("<span class='danger'>\icon[src] [reason].</span>")
|
||||
comm.communicating.Remove(src)
|
||||
communicating.Remove(comm)
|
||||
update_icon()
|
||||
if(comm.camera && video_source == comm.camera) //We hung up on the person on video
|
||||
end_video()
|
||||
if(camera && comm.video_source == camera) //We hung up on them while they were watching us
|
||||
comm.end_video()
|
||||
|
||||
if(voice_mobs.len == 0 && communicating.len == 0)
|
||||
listening_objects.Remove(src)
|
||||
|
||||
// Proc: request()
|
||||
// Parameters: 1 (candidate - the ghost or communicator wanting to call the device)
|
||||
@@ -625,6 +702,29 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
if(L)
|
||||
L << "<span class='notice'>\icon[src] Communications request from [who].</span>"
|
||||
|
||||
// Proc: del_request()
|
||||
// Parameters: 1 (candidate - the ghost or communicator to be declined)
|
||||
// Description: Declines a request and cleans up both ends
|
||||
/obj/item/device/communicator/proc/del_request(var/atom/candidate)
|
||||
if(!(candidate in voice_requests))
|
||||
return
|
||||
|
||||
if(isobserver(candidate))
|
||||
candidate << "<span class='warning'>Your communicator call request was declined.</span>"
|
||||
else if(istype(candidate, /obj/item/device/communicator))
|
||||
var/obj/item/device/communicator/comm = candidate
|
||||
comm.voice_invites -= src
|
||||
|
||||
voice_requests -= candidate
|
||||
|
||||
//Search for holder of our device.
|
||||
var/mob/living/us = null
|
||||
if(loc && isliving(loc))
|
||||
us = loc
|
||||
|
||||
if(us)
|
||||
us << "<span class='notice'>\icon[src] Declined request.</span>"
|
||||
|
||||
// Proc: request_im()
|
||||
// Parameters: 3 (candidate - the communicator wanting to message the device, origin_address - the address of the sender, text - the message)
|
||||
// Description: Response to a communicator trying to message the device.
|
||||
@@ -675,6 +775,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
voice_invites.Cut()
|
||||
all_communicators -= src
|
||||
processing_objects -= src
|
||||
listening_objects.Remove(src)
|
||||
qdel(camera)
|
||||
camera = null
|
||||
if(exonet)
|
||||
exonet.remove_address()
|
||||
exonet = null
|
||||
@@ -684,7 +787,11 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
// Parameters: None
|
||||
// Description: Self explanatory
|
||||
/obj/item/device/communicator/update_icon()
|
||||
if(voice_mobs.len > 0)
|
||||
if(video_source)
|
||||
icon_state = "communicator-video"
|
||||
return
|
||||
|
||||
if(voice_mobs.len || communicating.len)
|
||||
icon_state = "communicator-active"
|
||||
return
|
||||
|
||||
@@ -700,10 +807,18 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
/obj/item/device/communicator/see_emote(mob/living/M, text)
|
||||
var/rendered = "\icon[src] <span class='message'>[text]</span>"
|
||||
for(var/obj/item/device/communicator/comm in communicating)
|
||||
for(var/mob/mob in viewers(get_turf(comm))) //We can't use visible_message(), or else we will get an infinite loop if two communicators hear each other.
|
||||
mob.show_message(rendered)
|
||||
for(var/mob/living/voice/V in comm.contents)
|
||||
V.show_message(rendered)
|
||||
var/turf/T = get_turf(comm)
|
||||
if(!T) return
|
||||
var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) //Range of 3 since it's a tiny video display
|
||||
var/list/mobs_to_relay = in_range["mobs"]
|
||||
|
||||
for(var/mob/mob in mobs_to_relay) //We can't use visible_message(), or else we will get an infinite loop if two communicators hear each other.
|
||||
var/dst = get_dist(get_turf(mob),get_turf(comm))
|
||||
if(dst <= video_range)
|
||||
mob.show_message(rendered)
|
||||
else
|
||||
mob << "You can barely see some movement on \the [src]'s display."
|
||||
|
||||
..()
|
||||
|
||||
// Proc: hear_talk()
|
||||
@@ -712,9 +827,12 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
// Description: Relays the speech to all linked communicators.
|
||||
/obj/item/device/communicator/hear_talk(mob/living/M, text, verb, datum/language/speaking)
|
||||
for(var/obj/item/device/communicator/comm in communicating)
|
||||
var/list/mobs_to_relay = list()
|
||||
mobs_to_relay |= viewers(get_turf(comm))
|
||||
mobs_to_relay |= comm.contents //Needed so ghost-callers can see speech.
|
||||
|
||||
var/turf/T = get_turf(comm)
|
||||
if(!T) return
|
||||
var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0)
|
||||
var/list/mobs_to_relay = in_range["mobs"]
|
||||
|
||||
for(var/mob/mob in mobs_to_relay)
|
||||
//Can whoever is hearing us understand?
|
||||
if(!mob.say_understands(M, speaking))
|
||||
@@ -736,7 +854,12 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
/obj/item/device/communicator/show_message(msg, type, alt, alt_type)
|
||||
var/rendered = "\icon[src] <span class='message'>[msg]</span>"
|
||||
for(var/obj/item/device/communicator/comm in communicating)
|
||||
for(var/mob/mob in hearers(get_turf(comm))) //Ditto for audible messages.
|
||||
var/turf/T = get_turf(comm)
|
||||
if(!T) return
|
||||
var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0)
|
||||
var/list/mobs_to_relay = in_range["mobs"]
|
||||
|
||||
for(var/mob/mob in mobs_to_relay)
|
||||
mob.show_message(rendered)
|
||||
..()
|
||||
|
||||
@@ -792,7 +915,71 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
|
||||
src << "A communications request has been sent to [chosen_communicator]. Now you need to wait until someone answers."
|
||||
|
||||
/obj/item/device/communicator/integrated //For synths who have no hands.
|
||||
// Proc: connect_video()
|
||||
// Parameters: user - the mob doing the viewing of video, comm - the communicator at the far end
|
||||
// Description: Sets up a videocall and puts the first view into it using watch_video, and updates the icon
|
||||
/obj/item/device/communicator/proc/connect_video(mob/user,obj/item/device/communicator/comm)
|
||||
if((!user) || (!comm) || user.stat) return //KO or dead, or already in a video
|
||||
|
||||
if(video_source) //Already in a video
|
||||
user << "<span class='danger'>You are already connected to a video call!</span>"
|
||||
|
||||
if(user.blinded) //User is blinded
|
||||
user << "<span class='danger'>You cannot see well enough to do that!</span>"
|
||||
|
||||
if(!(src in comm.communicating) || !comm.camera) //You called someone with a broken communicator or one that's fake or yourself or something
|
||||
user << "<span class='danger'>\icon[src]ERROR: Video failed. Either bandwidth is too low, or the other communicator is malfunctioning.</span>"
|
||||
|
||||
user << "<span class='notice'>\icon[src] Attempting to start video over existing call.</span>"
|
||||
sleep(30)
|
||||
user << "<span class='notice'>\icon[src] Please wait...</span>"
|
||||
|
||||
video_source = comm.camera
|
||||
comm.visible_message("<span class='danger'>\icon[src] New video connection from [comm].</span>")
|
||||
watch_video(user)
|
||||
update_icon()
|
||||
|
||||
// Proc: watch_video()
|
||||
// Parameters: user - the mob doing the viewing of video
|
||||
// Description: Moves a mob's eye to the far end for the duration of viewing the far end
|
||||
/obj/item/device/communicator/proc/watch_video(mob/user)
|
||||
if(!Adjacent(user) || !video_source) return
|
||||
user.set_machine(video_source)
|
||||
user.reset_view(video_source)
|
||||
user << "<span class='notice'>Now viewing video session. To leave camera view: OOC -> Cancel Camera View</span>"
|
||||
spawn(0)
|
||||
while(user.machine == video_source && Adjacent(user))
|
||||
var/turf/T = get_turf(video_source)
|
||||
if(!T || !is_on_same_plane_or_station(T.z, user.z) || !video_source.can_use())
|
||||
user << "<span class='warning'>The screen bursts into static, then goes black.</span>"
|
||||
video_cleanup(user)
|
||||
return
|
||||
sleep(10)
|
||||
|
||||
video_cleanup(user)
|
||||
|
||||
// Proc: video_cleanup()
|
||||
// Parameters: user - the mob who doesn't want to see video anymore
|
||||
// Description: Cleans up mob's client when they stop watching a video
|
||||
/obj/item/device/communicator/proc/video_cleanup(mob/user)
|
||||
if(!user) return
|
||||
|
||||
user.reset_view(null)
|
||||
user.unset_machine()
|
||||
|
||||
// Proc: end_video()
|
||||
// Parameters: reason - the text reason to print for why it ended
|
||||
// Description: Ends the video call by clearing video_source
|
||||
/obj/item/device/communicator/proc/end_video(var/reason)
|
||||
video_source = null
|
||||
|
||||
. = "<span class='danger'>\icon[src] [reason ? reason : "Video session ended"].</span>"
|
||||
|
||||
visible_message(.)
|
||||
update_icon()
|
||||
|
||||
//For synths who have no hands.
|
||||
/obj/item/device/communicator/integrated
|
||||
name = "integrated communicator"
|
||||
desc = "A circuit used for long-range communications, able to be integrated into a system."
|
||||
|
||||
@@ -822,4 +1009,13 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
usr << "You can't do that because you are dead!"
|
||||
return
|
||||
|
||||
src.attack_self(usr)
|
||||
src.attack_self(usr)
|
||||
|
||||
// A camera preset for spawning in the communicator
|
||||
/obj/machinery/camera/communicator
|
||||
network = list(NETWORK_COMMUNICATORS)
|
||||
|
||||
/obj/machinery/camera/communicator/New()
|
||||
..()
|
||||
client_huds |= global_hud.whitense
|
||||
client_huds |= global_hud.darkMask
|
||||
@@ -66,7 +66,7 @@
|
||||
if (ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(istype(H.loc, /obj/mecha))
|
||||
var/obj/mecha/M = loc
|
||||
var/obj/mecha/M = H.loc
|
||||
return M.return_temperature()
|
||||
else if(istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell))
|
||||
return H.loc:air_contents.temperature
|
||||
|
||||
@@ -82,7 +82,7 @@ RSF
|
||||
product = new /obj/item/clothing/mask/smokable/cigarette()
|
||||
used_energy = 10
|
||||
if(2)
|
||||
product = new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass()
|
||||
product = new /obj/item/weapon/reagent_containers/food/drinks/glass2()
|
||||
used_energy = 50
|
||||
if(3)
|
||||
product = new /obj/item/weapon/paper()
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
name = "card"
|
||||
desc = "Does card things."
|
||||
icon = 'icons/obj/card.dmi'
|
||||
w_class = 1.0
|
||||
w_class = 1
|
||||
slot_flags = SLOT_EARS
|
||||
var/associated_account_number = 0
|
||||
|
||||
var/list/files = list( )
|
||||
@@ -117,6 +118,9 @@
|
||||
var/icon/front
|
||||
var/icon/side
|
||||
|
||||
var/primary_color = rgb(0,0,0) // Obtained by eyedroppering the stripe in the middle of the card
|
||||
var/secondary_color = rgb(0,0,0) // Likewise for the oval in the top-left corner
|
||||
|
||||
//alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system
|
||||
var/assignment = null //can be alt title or the actual job
|
||||
var/rank = null //actual job
|
||||
@@ -262,3 +266,88 @@
|
||||
/obj/item/weapon/card/id/centcom/ERT/New()
|
||||
..()
|
||||
access |= get_all_station_access()
|
||||
|
||||
// Department-flavor IDs
|
||||
/obj/item/weapon/card/id/medical
|
||||
name = "identification card"
|
||||
desc = "A card issued to station medical staff."
|
||||
icon_state = "med"
|
||||
primary_color = rgb(189,237,237)
|
||||
secondary_color = rgb(223,255,255)
|
||||
|
||||
/obj/item/weapon/card/id/medical/head
|
||||
name = "identification card"
|
||||
desc = "A card which represents care and compassion."
|
||||
icon_state = "medGold"
|
||||
primary_color = rgb(189,237,237)
|
||||
secondary_color = rgb(255,223,127)
|
||||
|
||||
/obj/item/weapon/card/id/security
|
||||
name = "identification card"
|
||||
desc = "A card issued to station security staff."
|
||||
icon_state = "sec"
|
||||
primary_color = rgb(189,47,0)
|
||||
secondary_color = rgb(223,127,95)
|
||||
|
||||
/obj/item/weapon/card/id/security/head
|
||||
name = "identification card"
|
||||
desc = "A card which represents honor and protection."
|
||||
icon_state = "secGold"
|
||||
primary_color = rgb(189,47,0)
|
||||
secondary_color = rgb(255,223,127)
|
||||
|
||||
/obj/item/weapon/card/id/engineering
|
||||
name = "identification card"
|
||||
desc = "A card issued to station engineering staff."
|
||||
icon_state = "eng"
|
||||
primary_color = rgb(189,94,0)
|
||||
secondary_color = rgb(223,159,95)
|
||||
|
||||
/obj/item/weapon/card/id/engineering/head
|
||||
name = "identification card"
|
||||
desc = "A card which represents creativity and ingenuity."
|
||||
icon_state = "engGold"
|
||||
primary_color = rgb(189,94,0)
|
||||
secondary_color = rgb(255,223,127)
|
||||
|
||||
/obj/item/weapon/card/id/science
|
||||
name = "identification card"
|
||||
desc = "A card issued to station science staff."
|
||||
icon_state = "sci"
|
||||
primary_color = rgb(142,47,142)
|
||||
secondary_color = rgb(191,127,191)
|
||||
|
||||
/obj/item/weapon/card/id/science/head
|
||||
name = "identification card"
|
||||
desc = "A card which represents knowledge and reasoning."
|
||||
icon_state = "sciGold"
|
||||
primary_color = rgb(142,47,142)
|
||||
secondary_color = rgb(255,223,127)
|
||||
|
||||
/obj/item/weapon/card/id/cargo
|
||||
name = "identification card"
|
||||
desc = "A card issued to station cargo staff."
|
||||
icon_state = "cargo"
|
||||
primary_color = rgb(142,94,0)
|
||||
secondary_color = rgb(191,159,95)
|
||||
|
||||
/obj/item/weapon/card/id/cargo/head
|
||||
name = "identification card"
|
||||
desc = "A card which represents service and planning."
|
||||
icon_state = "cargoGold"
|
||||
primary_color = rgb(142,94,0)
|
||||
secondary_color = rgb(255,223,127)
|
||||
|
||||
/obj/item/weapon/card/id/civilian
|
||||
name = "identification card"
|
||||
desc = "A card issued to station civilian staff."
|
||||
icon_state = "civ"
|
||||
primary_color = rgb(0,94,142)
|
||||
secondary_color = rgb(95,159,191)
|
||||
|
||||
/obj/item/weapon/card/id/civilian/head //This is not the HoP. There's no position that uses this right now.
|
||||
name = "identification card"
|
||||
desc = "A card which represents common sense and responsibility."
|
||||
icon_state = "civGold"
|
||||
primary_color = rgb(0,94,142)
|
||||
secondary_color = rgb(255,223,127)
|
||||
@@ -312,15 +312,6 @@
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/clothing/glasses/regular(src)
|
||||
|
||||
/obj/item/weapon/storage/box/drinkingglasses
|
||||
name = "box of drinking glasses"
|
||||
desc = "It has a picture of drinking glasses on it."
|
||||
|
||||
/obj/item/weapon/storage/box/drinkingglasses/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
|
||||
|
||||
/obj/item/weapon/storage/box/cdeathalarm_kit
|
||||
name = "death alarm kit"
|
||||
desc = "Box of stuff used to implant death alarms."
|
||||
@@ -570,4 +561,4 @@
|
||||
/obj/item/weapon/storage/box/ambrosiadeus/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/seeds/ambrosiadeusseed(src)
|
||||
new /obj/item/seeds/ambrosiadeusseed(src)
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
name = "wallet"
|
||||
desc = "It can hold a few small and personal things."
|
||||
storage_slots = 10
|
||||
icon_state = "wallet"
|
||||
icon = 'icons/obj/wallet.dmi'
|
||||
icon_state = "wallet-orange"
|
||||
w_class = 2
|
||||
can_hold = list(
|
||||
/obj/item/weapon/spacecash,
|
||||
@@ -27,7 +28,6 @@
|
||||
|
||||
var/obj/item/weapon/card/id/front_id = null
|
||||
|
||||
|
||||
/obj/item/weapon/storage/wallet/remove_from_storage(obj/item/W as obj, atom/new_location)
|
||||
. = ..(W, new_location)
|
||||
if(.)
|
||||
@@ -45,23 +45,14 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/storage/wallet/update_icon()
|
||||
|
||||
overlays.Cut()
|
||||
if(front_id)
|
||||
switch(front_id.icon_state)
|
||||
if("id")
|
||||
icon_state = "walletid"
|
||||
return
|
||||
if("silver")
|
||||
icon_state = "walletid_silver"
|
||||
return
|
||||
if("gold")
|
||||
icon_state = "walletid_gold"
|
||||
return
|
||||
if("centcom")
|
||||
icon_state = "walletid_centcom"
|
||||
return
|
||||
icon_state = "wallet"
|
||||
|
||||
var/tiny_state = "id-generic"
|
||||
if("id-"+front_id.icon_state in icon_states(icon))
|
||||
tiny_state = "id-"+front_id.icon_state
|
||||
var/image/tiny_image = new/image(icon, icon_state = tiny_state)
|
||||
tiny_image.appearance_flags = RESET_COLOR
|
||||
overlays += tiny_image
|
||||
|
||||
/obj/item/weapon/storage/wallet/GetID()
|
||||
return front_id
|
||||
@@ -73,7 +64,6 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/storage/wallet/random/New()
|
||||
..()
|
||||
var/amount = rand(50, 100) + rand(50, 100) // Triangular distribution from 100 to 200
|
||||
@@ -85,4 +75,40 @@
|
||||
while(amount >= i)
|
||||
amount -= i
|
||||
SC.adjust_worth(i, 0)
|
||||
SC.update_icon()
|
||||
SC.update_icon()
|
||||
|
||||
/obj/item/weapon/storage/wallet/poly
|
||||
name = "polychromic wallet"
|
||||
desc = "You can recolor it! Fancy! The future is NOW!"
|
||||
icon_state = "wallet-white"
|
||||
|
||||
/obj/item/weapon/storage/wallet/poly/New()
|
||||
..()
|
||||
verbs |= /obj/item/weapon/storage/wallet/poly/proc/change_color
|
||||
color = "#"+get_random_colour()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/storage/wallet/poly/proc/change_color()
|
||||
set name = "Change Wallet Color"
|
||||
set category = "Object"
|
||||
set desc = "Change the color of the wallet."
|
||||
set src in usr
|
||||
|
||||
if(usr.stat || usr.restrained() || usr.incapacitated())
|
||||
return
|
||||
|
||||
var/new_color = input(usr, "Pick a new color", "Wallet Color", color) as color|null
|
||||
|
||||
if(new_color && (new_color != color))
|
||||
color = new_color
|
||||
|
||||
/obj/item/weapon/storage/wallet/poly/emp_act()
|
||||
var/original_state = icon_state
|
||||
icon_state = "wallet-emp"
|
||||
update_icon()
|
||||
|
||||
spawn(200)
|
||||
if(src)
|
||||
icon_state = original_state
|
||||
update_icon()
|
||||
|
||||
@@ -12,3 +12,7 @@
|
||||
/obj/item/weapon/towel/attack_self(mob/living/user as mob)
|
||||
user.visible_message(text("<span class='notice'>[] uses [] to towel themselves off.</span>", user, src))
|
||||
playsound(user, 'sound/weapons/towelwipe.ogg', 25, 1)
|
||||
|
||||
/obj/item/weapon/towel/random/New()
|
||||
..()
|
||||
color = "#"+get_random_colour()
|
||||
@@ -109,7 +109,13 @@
|
||||
log_ooc("(LOCAL) [mob.name]/[key] : [msg]")
|
||||
|
||||
var/mob/source = mob.get_looc_source()
|
||||
var/list/heard = get_mobs_or_objects_in_view(7, get_turf(source), 1, 0)
|
||||
var/turf/T = get_turf(source)
|
||||
if(!T) return
|
||||
var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0)
|
||||
var/list/m_viewers = in_range["mobs"]
|
||||
|
||||
var/list/receivers = list() // Clients, not mobs.
|
||||
var/list/r_receivers = list()
|
||||
|
||||
var/display_name = key
|
||||
if(holder && holder.fakekey)
|
||||
@@ -117,34 +123,33 @@
|
||||
if(mob.stat != DEAD)
|
||||
display_name = mob.name
|
||||
|
||||
for(var/client/target in clients)
|
||||
if(target.is_preference_enabled(/datum/client_preference/show_looc))
|
||||
var/prefix = ""
|
||||
var/admin_stuff = ""
|
||||
var/send = 0
|
||||
// Everyone in normal viewing range of the LOOC
|
||||
for(var/mob/viewer in m_viewers)
|
||||
if(viewer.client && viewer.client.is_preference_enabled(/datum/client_preference/show_looc))
|
||||
receivers |= viewer.client
|
||||
else if(istype(viewer,/mob/observer/eye)) // For AI eyes and the like
|
||||
var/mob/observer/eye/E = viewer
|
||||
if(E.owner && E.owner.client)
|
||||
receivers |= E.owner.client
|
||||
|
||||
if(target in admins)
|
||||
admin_stuff += "/([key])"
|
||||
if(target != src)
|
||||
admin_stuff += "([admin_jump_link(mob, target.holder)])"
|
||||
// Admins with RLOOC displayed who weren't already in
|
||||
for(var/client/admin in admins)
|
||||
if(!(admin in receivers) && admin.is_preference_enabled(/datum/client_preference/holder/show_rlooc))
|
||||
r_receivers |= admin
|
||||
|
||||
if(target.mob in heard)
|
||||
send = 1
|
||||
if(isAI(target.mob))
|
||||
prefix = "(Core) "
|
||||
// Send a message
|
||||
for(var/client/target in receivers)
|
||||
var/admin_stuff = ""
|
||||
|
||||
if(target in admins)
|
||||
admin_stuff += "/([key])"
|
||||
|
||||
else if(isAI(target.mob)) // Special case
|
||||
var/mob/living/silicon/ai/A = target.mob
|
||||
if(A.eyeobj in hearers(7, source))
|
||||
send = 1
|
||||
prefix = "(Eye) "
|
||||
target << "<span class='ooc'><span class='looc'>" + create_text_tag("looc", "LOOC:", target) + " <EM>[display_name][admin_stuff]:</EM> <span class='message'>[msg]</span></span></span>"
|
||||
|
||||
if(!send && (target in admins) && target.is_preference_enabled(/datum/client_preference/holder/show_rlooc))
|
||||
send = 1
|
||||
prefix = "(R)"
|
||||
|
||||
if(send)
|
||||
target << "<span class='ooc'><span class='looc'>" + create_text_tag("looc", "LOOC:", target) + " <span class='prefix'>[prefix]</span><EM>[display_name][admin_stuff]:</EM> <span class='message'>[msg]</span></span></span>"
|
||||
for(var/client/target in r_receivers)
|
||||
var/admin_stuff = "/([key])([admin_jump_link(mob, target.holder)])"
|
||||
|
||||
target << "<span class='ooc'><span class='looc'>" + create_text_tag("looc", "LOOC:", target) + " <span class='prefix'>(R)</span><EM>[display_name][admin_stuff]:</EM> <span class='message'>[msg]</span></span></span>"
|
||||
|
||||
/mob/proc/get_looc_source()
|
||||
return src
|
||||
|
||||
@@ -15,6 +15,10 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None")
|
||||
/datum/category_item/player_setup_item/antagonism/basic/sanitize_character()
|
||||
pref.uplinklocation = sanitize_inlist(pref.uplinklocation, uplink_locations, initial(pref.uplinklocation))
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/antagonism/basic/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.exploit_record = pref.exploit_record
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user)
|
||||
. +="<b>Uplink Type : <a href='?src=\ref[src];antagtask=1'>[pref.uplinklocation]</a></b>"
|
||||
. +="<br>"
|
||||
|
||||
@@ -40,6 +40,25 @@ datum/preferences/proc/set_biological_gender(var/gender)
|
||||
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, spawntypes, initial(pref.spawnpoint))
|
||||
pref.be_random_name = sanitize_integer(pref.be_random_name, 0, 1, initial(pref.be_random_name))
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/basic/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
if(config.humans_need_surnames)
|
||||
var/firstspace = findtext(pref.real_name, " ")
|
||||
var/name_length = length(pref.real_name)
|
||||
if(!firstspace) //we need a surname
|
||||
pref.real_name += " [pick(last_names)]"
|
||||
else if(firstspace == name_length)
|
||||
pref.real_name += "[pick(last_names)]"
|
||||
|
||||
character.real_name = pref.real_name
|
||||
character.name = character.real_name
|
||||
if(character.dna)
|
||||
character.dna.real_name = character.real_name
|
||||
|
||||
character.gender = pref.biological_gender
|
||||
character.identifying_gender = pref.identifying_gender
|
||||
character.age = pref.age
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/content()
|
||||
. = list()
|
||||
. += "<b>Name:</b> "
|
||||
|
||||
@@ -76,6 +76,53 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if(!pref.organ_data) pref.organ_data = list()
|
||||
if(!pref.rlimb_data) pref.rlimb_data = list()
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/body/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
// Copy basic values
|
||||
character.r_eyes = pref.r_eyes
|
||||
character.g_eyes = pref.g_eyes
|
||||
character.b_eyes = pref.b_eyes
|
||||
character.h_style = pref.h_style
|
||||
character.r_hair = pref.r_hair
|
||||
character.g_hair = pref.g_hair
|
||||
character.b_hair = pref.b_hair
|
||||
character.f_style = pref.f_style
|
||||
character.r_facial = pref.r_facial
|
||||
character.g_facial = pref.g_facial
|
||||
character.b_facial = pref.b_facial
|
||||
character.r_skin = pref.r_skin
|
||||
character.g_skin = pref.g_skin
|
||||
character.b_skin = pref.b_skin
|
||||
character.s_tone = pref.s_tone
|
||||
character.h_style = pref.h_style
|
||||
character.f_style = pref.f_style
|
||||
character.b_type = pref.b_type
|
||||
|
||||
// Destroy/cyborgize organs and limbs.
|
||||
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
|
||||
var/status = pref.organ_data[name]
|
||||
var/obj/item/organ/external/O = character.organs_by_name[name]
|
||||
if(O)
|
||||
if(status == "amputated")
|
||||
O.remove_rejuv()
|
||||
else if(status == "cyborg")
|
||||
if(pref.rlimb_data[name])
|
||||
O.robotize(pref.rlimb_data[name])
|
||||
else
|
||||
O.robotize()
|
||||
|
||||
for(var/name in list(O_HEART,O_EYES,O_BRAIN))
|
||||
var/status = pref.organ_data[name]
|
||||
if(!status)
|
||||
continue
|
||||
var/obj/item/organ/I = character.internal_organs_by_name[name]
|
||||
if(I)
|
||||
if(status == "assisted")
|
||||
I.mechassist()
|
||||
else if(status == "mechanical")
|
||||
I.robotize()
|
||||
return
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/content(var/mob/user)
|
||||
. = list()
|
||||
if(!pref.preview_icon)
|
||||
|
||||
@@ -18,6 +18,30 @@
|
||||
S["backbag"] << pref.backbag
|
||||
S["pdachoice"] << pref.pdachoice
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/equipment/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.all_underwear.Cut()
|
||||
character.all_underwear_metadata.Cut()
|
||||
|
||||
for(var/underwear_category_name in pref.all_underwear)
|
||||
var/datum/category_group/underwear/underwear_category = global_underwear.categories_by_name[underwear_category_name]
|
||||
if(underwear_category)
|
||||
var/underwear_item_name = pref.all_underwear[underwear_category_name]
|
||||
character.all_underwear[underwear_category_name] = underwear_category.items_by_name[underwear_item_name]
|
||||
if(pref.all_underwear_metadata[underwear_category_name])
|
||||
character.all_underwear_metadata[underwear_category_name] = pref.all_underwear_metadata[underwear_category_name]
|
||||
else
|
||||
pref.all_underwear -= underwear_category_name
|
||||
|
||||
// TODO - Looks like this is duplicating the work of sanitize_character() if so, remove
|
||||
if(pref.backbag > 4 || pref.backbag < 1)
|
||||
pref.backbag = 1 //Same as above
|
||||
character.backbag = pref.backbag
|
||||
|
||||
if(pref.pdachoice > 3 || pref.pdachoice < 1)
|
||||
pref.pdachoice = 1
|
||||
character.pdachoice = pref.pdachoice
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/sanitize_character()
|
||||
if(!islist(pref.gear)) pref.gear = list()
|
||||
|
||||
|
||||
@@ -30,6 +30,16 @@
|
||||
|
||||
pref.nanotrasen_relation = sanitize_inlist(pref.nanotrasen_relation, COMPANY_ALIGNMENTS, initial(pref.nanotrasen_relation))
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/background/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.med_record = pref.med_record
|
||||
character.sec_record = pref.sec_record
|
||||
character.gen_record = pref.gen_record
|
||||
character.home_system = pref.home_system
|
||||
character.citizenship = pref.citizenship
|
||||
character.personal_faction = pref.faction
|
||||
character.religion = pref.religion
|
||||
|
||||
/datum/category_item/player_setup_item/general/background/content(var/mob/user)
|
||||
. += "<b>Background Information</b><br>"
|
||||
. += "[company_name] Relation: <a href='?src=\ref[src];nt_relation=1'>[pref.nanotrasen_relation]</a><br/>"
|
||||
|
||||
@@ -36,6 +36,18 @@
|
||||
/datum/category_item/player_setup_item/general/flavor/sanitize_character()
|
||||
return
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/flavor/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.flavor_texts["general"] = pref.flavor_texts["general"]
|
||||
character.flavor_texts["head"] = pref.flavor_texts["head"]
|
||||
character.flavor_texts["face"] = pref.flavor_texts["face"]
|
||||
character.flavor_texts["eyes"] = pref.flavor_texts["eyes"]
|
||||
character.flavor_texts["torso"] = pref.flavor_texts["torso"]
|
||||
character.flavor_texts["arms"] = pref.flavor_texts["arms"]
|
||||
character.flavor_texts["hands"] = pref.flavor_texts["hands"]
|
||||
character.flavor_texts["legs"] = pref.flavor_texts["legs"]
|
||||
character.flavor_texts["feet"] = pref.flavor_texts["feet"]
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/content(var/mob/user)
|
||||
. += "<b>Flavor:</b><br>"
|
||||
. += "<a href='?src=\ref[src];flavor_text=open'>Set Flavor Text</a><br/>"
|
||||
|
||||
@@ -29,9 +29,13 @@
|
||||
path = /obj/item/clothing/accessory/armband/science
|
||||
|
||||
/datum/gear/accessory/wallet
|
||||
display_name = "wallet"
|
||||
display_name = "wallet, orange"
|
||||
path = /obj/item/weapon/storage/wallet/random
|
||||
|
||||
/datum/gear/accessory/wallet_poly
|
||||
display_name = "wallet, polychromic"
|
||||
path = /obj/item/weapon/storage/wallet/poly
|
||||
|
||||
/datum/gear/accessory/holster
|
||||
display_name = "holster, armpit"
|
||||
path = /obj/item/clothing/accessory/holster/armpit
|
||||
@@ -172,32 +176,32 @@
|
||||
/datum/gear/accessory/brown_vest
|
||||
display_name = "webbing, engineering"
|
||||
path = /obj/item/clothing/accessory/storage/brown_vest
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/accessory/black_vest
|
||||
display_name = "webbing, security"
|
||||
path = /obj/item/clothing/accessory/storage/black_vest
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/accessory/white_vest
|
||||
display_name = "webbing, medical"
|
||||
path = /obj/item/clothing/accessory/storage/white_vest
|
||||
allowed_roles = list("Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/accessory/brown_drop_pouches
|
||||
display_name = "drop pouches, engineering"
|
||||
path = /obj/item/clothing/accessory/storage/brown_drop_pouches
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/accessory/black_drop_pouches
|
||||
display_name = "drop pouches, security"
|
||||
path = /obj/item/clothing/accessory/storage/black_drop_pouches
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/accessory/white_drop_pouches
|
||||
display_name = "drop pouches, medical"
|
||||
path = /obj/item/clothing/accessory/storage/white_drop_pouches
|
||||
allowed_roles = list("Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/accessory/webbing
|
||||
display_name = "webbing, simple"
|
||||
|
||||
@@ -17,3 +17,19 @@
|
||||
/datum/gear/ashtray
|
||||
display_name = "ashtray, plastic"
|
||||
path = /obj/item/weapon/material/ashtray/plastic
|
||||
|
||||
/datum/gear/cigar
|
||||
display_name = "cigar"
|
||||
path = /obj/item/clothing/mask/smokable/cigarette/cigar
|
||||
|
||||
/datum/gear/cigarettes
|
||||
display_name = "cigarette selection"
|
||||
path = /obj/item/weapon/storage/fancy/cigarettes
|
||||
|
||||
/datum/gear/cigarettes/New()
|
||||
..()
|
||||
var/list/cigarettes = list()
|
||||
for(var/cigarette in (typesof(/obj/item/weapon/storage/fancy/cigarettes) - typesof(/obj/item/weapon/storage/fancy/cigarettes/killthroat)))
|
||||
var/obj/item/weapon/storage/fancy/cigarettes/cigarette_brand = cigarette
|
||||
cigarettes[initial(cigarette_brand.name)] = cigarette_brand
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cigarettes))
|
||||
@@ -72,6 +72,10 @@
|
||||
for(var/datum/category_group/player_setup_category/PS in categories)
|
||||
PS.save_preferences(S)
|
||||
|
||||
/datum/category_collection/player_setup_collection/proc/copy_to_mob(var/mob/living/carbon/human/C)
|
||||
for(var/datum/category_group/player_setup_category/PS in categories)
|
||||
PS.copy_to_mob(C)
|
||||
|
||||
/datum/category_collection/player_setup_collection/proc/header()
|
||||
var/dat = ""
|
||||
for(var/datum/category_group/player_setup_category/PS in categories)
|
||||
@@ -143,6 +147,10 @@
|
||||
for(var/datum/category_item/player_setup_item/PI in items)
|
||||
PI.save_preferences(S)
|
||||
|
||||
/datum/category_group/player_setup_category/proc/copy_to_mob(var/mob/living/carbon/human/C)
|
||||
for(var/datum/category_item/player_setup_item/PI in items)
|
||||
PI.copy_to_mob(C)
|
||||
|
||||
/datum/category_group/player_setup_category/proc/content(var/mob/user)
|
||||
. = "<table style='width:100%'><tr style='vertical-align:top'><td style='width:50%'>"
|
||||
var/current = 0
|
||||
@@ -201,6 +209,12 @@
|
||||
/datum/category_item/player_setup_item/proc/save_preferences(var/savefile/S)
|
||||
return
|
||||
|
||||
/*
|
||||
* Called when the item is asked to apply its per character settings to a new mob.
|
||||
*/
|
||||
/datum/category_item/player_setup_item/proc/copy_to_mob(var/mob/living/carbon/human/C)
|
||||
return
|
||||
|
||||
/datum/category_item/player_setup_item/proc/content()
|
||||
return
|
||||
|
||||
|
||||
@@ -18,6 +18,11 @@
|
||||
if(!pref.skills.len) pref.ZeroSkills()
|
||||
if(pref.used_skillpoints < 0) pref.used_skillpoints = 0
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/skills/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.skills = pref.skills
|
||||
character.used_skillpoints = pref.used_skillpoints
|
||||
|
||||
/datum/category_item/player_setup_item/skills/content()
|
||||
. = list()
|
||||
. += "<b>Select your Skills</b><br>"
|
||||
|
||||
@@ -1,15 +1,3 @@
|
||||
// Super Global Stuff
|
||||
/datum/category_collection/player_setup_collection/proc/copy_to_mob(var/mob/living/carbon/human/C)
|
||||
for(var/datum/category_group/player_setup_category/PS in categories)
|
||||
PS.copy_to_mob(C)
|
||||
|
||||
/datum/category_group/player_setup_category/proc/copy_to_mob(var/mob/living/carbon/human/C)
|
||||
for(var/datum/category_item/player_setup_item/PI in items)
|
||||
PI.copy_to_mob(C)
|
||||
|
||||
/datum/category_item/player_setup_item/proc/copy_to_mob(var/mob/living/carbon/human/C)
|
||||
return
|
||||
|
||||
// Global stuff that will put us on the map
|
||||
/datum/category_group/player_setup_category/vore
|
||||
name = "VORE"
|
||||
|
||||
@@ -254,123 +254,14 @@ datum/preferences
|
||||
// Sanitizing rather than saving as someone might still be editing when copy_to occurs.
|
||||
player_setup.sanitize_setup()
|
||||
|
||||
// VOREStation Edit - Start
|
||||
player_setup.copy_to_mob(character)
|
||||
// VOREStation Edit - End
|
||||
|
||||
// This needs to happen before anything else becuase it sets some variables.
|
||||
character.set_species(species)
|
||||
|
||||
// Special Case: This references variables owned by two different datums, so do it here.
|
||||
if(be_random_name)
|
||||
real_name = random_name(identifying_gender,species)
|
||||
|
||||
if(config.humans_need_surnames)
|
||||
var/firstspace = findtext(real_name, " ")
|
||||
var/name_length = length(real_name)
|
||||
if(!firstspace) //we need a surname
|
||||
real_name += " [pick(last_names)]"
|
||||
else if(firstspace == name_length)
|
||||
real_name += "[pick(last_names)]"
|
||||
|
||||
character.real_name = real_name
|
||||
character.name = character.real_name
|
||||
if(character.dna)
|
||||
character.dna.real_name = character.real_name
|
||||
|
||||
character.flavor_texts["general"] = flavor_texts["general"]
|
||||
character.flavor_texts["head"] = flavor_texts["head"]
|
||||
character.flavor_texts["face"] = flavor_texts["face"]
|
||||
character.flavor_texts["eyes"] = flavor_texts["eyes"]
|
||||
character.flavor_texts["torso"] = flavor_texts["torso"]
|
||||
character.flavor_texts["arms"] = flavor_texts["arms"]
|
||||
character.flavor_texts["hands"] = flavor_texts["hands"]
|
||||
character.flavor_texts["legs"] = flavor_texts["legs"]
|
||||
character.flavor_texts["feet"] = flavor_texts["feet"]
|
||||
|
||||
character.med_record = med_record
|
||||
character.sec_record = sec_record
|
||||
character.gen_record = gen_record
|
||||
character.exploit_record = exploit_record
|
||||
|
||||
character.gender = biological_gender
|
||||
character.identifying_gender = identifying_gender
|
||||
character.age = age
|
||||
character.b_type = b_type
|
||||
|
||||
character.r_eyes = r_eyes
|
||||
character.g_eyes = g_eyes
|
||||
character.b_eyes = b_eyes
|
||||
|
||||
character.h_style = h_style
|
||||
character.r_hair = r_hair
|
||||
character.g_hair = g_hair
|
||||
character.b_hair = b_hair
|
||||
|
||||
character.f_style = f_style
|
||||
character.r_facial = r_facial
|
||||
character.g_facial = g_facial
|
||||
character.b_facial = b_facial
|
||||
|
||||
character.r_skin = r_skin
|
||||
character.g_skin = g_skin
|
||||
character.b_skin = b_skin
|
||||
|
||||
character.s_tone = s_tone
|
||||
|
||||
character.h_style = h_style
|
||||
character.f_style = f_style
|
||||
|
||||
character.home_system = home_system
|
||||
character.citizenship = citizenship
|
||||
character.personal_faction = faction
|
||||
character.religion = religion
|
||||
|
||||
character.skills = skills
|
||||
character.used_skillpoints = used_skillpoints
|
||||
|
||||
// Destroy/cyborgize organs and limbs.
|
||||
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
|
||||
var/status = organ_data[name]
|
||||
var/obj/item/organ/external/O = character.organs_by_name[name]
|
||||
if(O)
|
||||
if(status == "amputated")
|
||||
O.remove_rejuv()
|
||||
else if(status == "cyborg")
|
||||
if(rlimb_data[name])
|
||||
O.robotize(rlimb_data[name])
|
||||
else
|
||||
O.robotize()
|
||||
|
||||
for(var/name in list(O_HEART,O_EYES,O_BRAIN))
|
||||
var/status = organ_data[name]
|
||||
if(!status)
|
||||
continue
|
||||
var/obj/item/organ/I = character.internal_organs_by_name[name]
|
||||
if(I)
|
||||
if(status == "assisted")
|
||||
I.mechassist()
|
||||
else if(status == "mechanical")
|
||||
I.robotize()
|
||||
|
||||
character.all_underwear.Cut()
|
||||
character.all_underwear_metadata.Cut()
|
||||
|
||||
for(var/underwear_category_name in all_underwear)
|
||||
var/datum/category_group/underwear/underwear_category = global_underwear.categories_by_name[underwear_category_name]
|
||||
if(underwear_category)
|
||||
var/underwear_item_name = all_underwear[underwear_category_name]
|
||||
character.all_underwear[underwear_category_name] = underwear_category.items_by_name[underwear_item_name]
|
||||
if(all_underwear_metadata[underwear_category_name])
|
||||
character.all_underwear_metadata[underwear_category_name] = all_underwear_metadata[underwear_category_name]
|
||||
else
|
||||
all_underwear -= underwear_category_name
|
||||
|
||||
if(backbag > 4 || backbag < 1)
|
||||
backbag = 1 //Same as above
|
||||
character.backbag = backbag
|
||||
|
||||
if(pdachoice > 3 || pdachoice < 1)
|
||||
pdachoice = 1
|
||||
character.pdachoice = pdachoice
|
||||
// Ask the preferences datums to apply their own settings to the new mob
|
||||
player_setup.copy_to_mob(character)
|
||||
|
||||
if(icon_updates)
|
||||
character.force_update_limbs()
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#define LOC_VAULT 5
|
||||
#define LOC_CONSTR 6
|
||||
#define LOC_TECH 7
|
||||
#define LOC_TACTICAL 8
|
||||
#define LOC_GARDEN 8
|
||||
|
||||
#define VERM_MICE 0
|
||||
#define VERM_LIZARDS 1
|
||||
@@ -50,9 +50,9 @@
|
||||
if(LOC_TECH)
|
||||
spawn_area_type = /area/storage/tech
|
||||
locstring = "technical storage"
|
||||
if(LOC_TACTICAL)
|
||||
spawn_area_type = /area/security/tactical
|
||||
locstring = "tactical equipment storage"
|
||||
if(LOC_GARDEN)
|
||||
spawn_area_type = /area/hydroponics/garden
|
||||
locstring = "the public garden"
|
||||
|
||||
for(var/areapath in typesof(spawn_area_type))
|
||||
var/area/A = locate(areapath)
|
||||
@@ -102,7 +102,7 @@
|
||||
#undef LOC_HYDRO
|
||||
#undef LOC_VAULT
|
||||
#undef LOC_TECH
|
||||
#undef LOC_TACTICAL
|
||||
#undef LOC_GARDEN
|
||||
|
||||
#undef VERM_MICE
|
||||
#undef VERM_LIZARDS
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// All mobs should have custom emote, really..
|
||||
//m_type == 1 --> visual.
|
||||
//m_type == 2 --> audible
|
||||
/mob/proc/custom_emote(var/m_type=1,var/message = null)
|
||||
/mob/proc/custom_emote(var/m_type=1,var/message = null,var/range=world.view)
|
||||
if(stat || !use_me && usr == src)
|
||||
src << "You are unable to emote."
|
||||
return
|
||||
@@ -23,42 +23,23 @@
|
||||
if (message)
|
||||
log_emote("[name]/[key] : [message]")
|
||||
|
||||
//Hearing gasp and such every five seconds is not good emotes were not global for a reason.
|
||||
// Hearing gasp and such every five seconds is not good emotes were not global for a reason.
|
||||
// Maybe some people are okay with that.
|
||||
|
||||
for(var/mob/M in player_list)
|
||||
if (!M.client)
|
||||
continue //skip monkeys and leavers
|
||||
if (istype(M, /mob/new_player))
|
||||
continue
|
||||
if(findtext(message," snores.")) //Because we have so many sleeping people.
|
||||
break
|
||||
if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_sight) && !(M in viewers(src,null)))
|
||||
M.show_message(message, m_type)
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T) return
|
||||
var/list/in_range = get_mobs_and_objs_in_view_fast(T,range,2)
|
||||
var/list/m_viewers = in_range["mobs"]
|
||||
var/list/o_viewers = in_range["objs"]
|
||||
|
||||
if (m_type & 1)
|
||||
var/list/see = get_mobs_or_objects_in_view(world.view,src) | viewers(get_turf(src), null)
|
||||
for(var/I in see)
|
||||
if(isobj(I))
|
||||
spawn(0)
|
||||
if(I) //It's possible that it could be deleted in the meantime.
|
||||
var/obj/O = I
|
||||
O.see_emote(src, message, 1)
|
||||
else if(ismob(I))
|
||||
var/mob/M = I
|
||||
M.show_message(message, 1)
|
||||
|
||||
else if (m_type & 2)
|
||||
var/list/hear = get_mobs_or_objects_in_view(world.view,src)
|
||||
for(var/I in hear)
|
||||
if(isobj(I))
|
||||
spawn(0)
|
||||
if(I) //It's possible that it could be deleted in the meantime.
|
||||
var/obj/O = I
|
||||
O.see_emote(src, message, 2)
|
||||
else if(ismob(I))
|
||||
var/mob/M = I
|
||||
M.show_message(message, 2)
|
||||
for(var/mob/M in m_viewers)
|
||||
spawn(0) // It's possible that it could be deleted in the meantime, or that it runtimes.
|
||||
if(M)
|
||||
M.show_message(message, m_type)
|
||||
for(var/obj/O in o_viewers)
|
||||
spawn(0)
|
||||
if(O)
|
||||
O.see_emote(src, message, m_type)
|
||||
|
||||
/mob/proc/emote_dead(var/message)
|
||||
|
||||
|
||||
@@ -1050,7 +1050,11 @@
|
||||
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
|
||||
client.images.Remove(hud)
|
||||
|
||||
client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask, global_hud.nvg, global_hud.thermal, global_hud.meson, global_hud.science)
|
||||
client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask, global_hud.nvg, global_hud.thermal, global_hud.meson, global_hud.science, global_hud.whitense)
|
||||
|
||||
if(istype(client.eye,/obj/machinery/camera))
|
||||
var/obj/machinery/camera/cam = client.eye
|
||||
client.screen |= cam.client_huds
|
||||
|
||||
if(damageoverlay.overlays)
|
||||
damageoverlay.overlays = list()
|
||||
|
||||
@@ -5,11 +5,4 @@
|
||||
destroy_surroundings = 1
|
||||
a_intent = I_HURT
|
||||
hostile = 1
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/Life()
|
||||
|
||||
. = ..()
|
||||
if(!.)
|
||||
walk(src, 0)
|
||||
return 0
|
||||
|
||||
@@ -118,6 +118,8 @@
|
||||
living_mob_list += src
|
||||
stat = CONSCIOUS
|
||||
density = 1
|
||||
else
|
||||
walk(src, 0)
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
@@ -42,12 +42,9 @@
|
||||
// Parameters: None
|
||||
// Description: Adds a static overlay to the client's screen.
|
||||
/mob/living/voice/Login()
|
||||
var/obj/screen/static_effect = new() //Since what the player sees is essentially a video feed, from a vast distance away, the view isn't going to be perfect.
|
||||
static_effect.screen_loc = ui_entire_screen
|
||||
static_effect.icon = 'icons/effects/static.dmi'
|
||||
static_effect.icon_state = "1 light"
|
||||
static_effect.mouse_opacity = 0 //So the static doesn't get in the way of clicking.
|
||||
client.screen.Add(static_effect)
|
||||
..()
|
||||
client.screen |= global_hud.whitense
|
||||
client.screen |= global_hud.darkMask
|
||||
|
||||
// Proc: Destroy()
|
||||
// Parameters: None
|
||||
@@ -110,7 +107,7 @@
|
||||
// Proc: say()
|
||||
// Parameters: 4 (generic say() arguments)
|
||||
// Description: Adds a speech bubble to the communicator device, then calls ..() to do the real work.
|
||||
/mob/living/voice/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="")
|
||||
/mob/living/voice/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering=0)
|
||||
//Speech bubbles.
|
||||
if(comm)
|
||||
var/speech_bubble_test = say_test(message)
|
||||
@@ -122,4 +119,8 @@
|
||||
M << speech_bubble
|
||||
src << speech_bubble
|
||||
|
||||
..(message, speaking, verb, alt_name) //mob/living/say() can do the actual talking.
|
||||
..(message, speaking, verb, alt_name, whispering) //mob/living/say() can do the actual talking.
|
||||
|
||||
/mob/living/voice/custom_emote(var/m_type=1,var/message = null,var/range=world.view)
|
||||
if(!comm) return
|
||||
..(m_type,message,comm.video_range)
|
||||
|
||||
@@ -508,9 +508,14 @@
|
||||
/mob/new_player/is_ready()
|
||||
return ready && ..()
|
||||
|
||||
// Prevents lobby players from seeing say, even with ghostears
|
||||
/mob/new_player/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null)
|
||||
return
|
||||
|
||||
// Prevents lobby players from seeing emotes, even with ghosteyes
|
||||
/mob/new_player/show_message(msg, type, alt, alt_type)
|
||||
return
|
||||
|
||||
/mob/new_player/hear_radio()
|
||||
return
|
||||
|
||||
|
||||
@@ -1105,7 +1105,6 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
W.loc = owner
|
||||
|
||||
/obj/item/organ/external/removed(var/mob/living/user, var/ignore_children = 0)
|
||||
|
||||
if(!owner)
|
||||
return
|
||||
var/is_robotic = robotic >= ORGAN_ROBOT
|
||||
@@ -1161,6 +1160,8 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
qdel(spark_system)
|
||||
qdel(src)
|
||||
|
||||
victim.update_body()
|
||||
|
||||
/obj/item/organ/external/proc/disfigure(var/type = "brute")
|
||||
if (disfigured)
|
||||
return
|
||||
@@ -1246,216 +1247,3 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
if(6 to INFINITY)
|
||||
flavor_text += "a ton of [wound]\s"
|
||||
return english_list(flavor_text)
|
||||
|
||||
/****************************************************
|
||||
ORGAN DEFINES
|
||||
****************************************************/
|
||||
|
||||
/obj/item/organ/external/chest
|
||||
name = "upper body"
|
||||
organ_tag = BP_TORSO
|
||||
icon_name = "torso"
|
||||
max_damage = 100
|
||||
min_broken_damage = 35
|
||||
w_class = 5
|
||||
body_part = UPPER_TORSO
|
||||
vital = 1
|
||||
amputation_point = "spine"
|
||||
joint = "neck"
|
||||
dislocated = -1
|
||||
gendered_icon = 1
|
||||
cannot_amputate = 1
|
||||
parent_organ = null
|
||||
encased = "ribcage"
|
||||
organ_rel_size = 70
|
||||
base_miss_chance = 10
|
||||
|
||||
/obj/item/organ/external/chest/robotize()
|
||||
if(..())
|
||||
// Give them a new cell.
|
||||
owner.internal_organs_by_name["cell"] = new /obj/item/organ/internal/cell(owner,1)
|
||||
|
||||
/obj/item/organ/external/groin
|
||||
name = "lower body"
|
||||
organ_tag = BP_GROIN
|
||||
icon_name = "groin"
|
||||
max_damage = 100
|
||||
min_broken_damage = 35
|
||||
w_class = 5
|
||||
body_part = LOWER_TORSO
|
||||
vital = 1
|
||||
parent_organ = BP_TORSO
|
||||
amputation_point = "lumbar"
|
||||
joint = "hip"
|
||||
dislocated = -1
|
||||
gendered_icon = 1
|
||||
organ_rel_size = 30
|
||||
|
||||
/obj/item/organ/external/arm
|
||||
organ_tag = "l_arm"
|
||||
name = "left arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 50
|
||||
min_broken_damage = 30
|
||||
w_class = 3
|
||||
body_part = ARM_LEFT
|
||||
parent_organ = BP_TORSO
|
||||
joint = "left elbow"
|
||||
amputation_point = "left shoulder"
|
||||
can_grasp = 1
|
||||
|
||||
/obj/item/organ/external/arm/right
|
||||
organ_tag = "r_arm"
|
||||
name = "right arm"
|
||||
icon_name = "r_arm"
|
||||
body_part = ARM_RIGHT
|
||||
joint = "right elbow"
|
||||
amputation_point = "right shoulder"
|
||||
|
||||
/obj/item/organ/external/leg
|
||||
organ_tag = "l_leg"
|
||||
name = "left leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 50
|
||||
min_broken_damage = 30
|
||||
w_class = 3
|
||||
body_part = LEG_LEFT
|
||||
icon_position = LEFT
|
||||
parent_organ = BP_GROIN
|
||||
joint = "left knee"
|
||||
amputation_point = "left hip"
|
||||
can_stand = 1
|
||||
|
||||
/obj/item/organ/external/leg/right
|
||||
organ_tag = "r_leg"
|
||||
name = "right leg"
|
||||
icon_name = "r_leg"
|
||||
body_part = LEG_RIGHT
|
||||
icon_position = RIGHT
|
||||
joint = "right knee"
|
||||
amputation_point = "right hip"
|
||||
|
||||
/obj/item/organ/external/foot
|
||||
organ_tag = "l_foot"
|
||||
name = "left foot"
|
||||
icon_name = "l_foot"
|
||||
min_broken_damage = 15
|
||||
w_class = 2
|
||||
body_part = FOOT_LEFT
|
||||
icon_position = LEFT
|
||||
parent_organ = "l_leg"
|
||||
joint = "left ankle"
|
||||
amputation_point = "left ankle"
|
||||
can_stand = 1
|
||||
organ_rel_size = 10
|
||||
base_miss_chance = 50
|
||||
|
||||
/obj/item/organ/external/foot/removed()
|
||||
if(owner) owner.u_equip(owner.shoes)
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/foot/right
|
||||
organ_tag = "r_foot"
|
||||
name = "right foot"
|
||||
icon_name = "r_foot"
|
||||
body_part = FOOT_RIGHT
|
||||
icon_position = RIGHT
|
||||
parent_organ = "r_leg"
|
||||
joint = "right ankle"
|
||||
amputation_point = "right ankle"
|
||||
|
||||
/obj/item/organ/external/hand
|
||||
organ_tag = "l_hand"
|
||||
name = "left hand"
|
||||
icon_name = "l_hand"
|
||||
min_broken_damage = 15
|
||||
w_class = 2
|
||||
body_part = HAND_LEFT
|
||||
parent_organ = "l_arm"
|
||||
joint = "left wrist"
|
||||
amputation_point = "left wrist"
|
||||
can_grasp = 1
|
||||
organ_rel_size = 10
|
||||
base_miss_chance = 50
|
||||
|
||||
/obj/item/organ/external/hand/removed()
|
||||
owner.u_equip(owner.gloves)
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/hand/right
|
||||
organ_tag = "r_hand"
|
||||
name = "right hand"
|
||||
icon_name = "r_hand"
|
||||
body_part = HAND_RIGHT
|
||||
parent_organ = "r_arm"
|
||||
joint = "right wrist"
|
||||
amputation_point = "right wrist"
|
||||
|
||||
/obj/item/organ/external/head
|
||||
organ_tag = BP_HEAD
|
||||
icon_name = "head"
|
||||
name = "head"
|
||||
max_damage = 75
|
||||
min_broken_damage = 35
|
||||
w_class = 3
|
||||
body_part = HEAD
|
||||
vital = 1
|
||||
parent_organ = BP_TORSO
|
||||
joint = "jaw"
|
||||
amputation_point = "neck"
|
||||
gendered_icon = 1
|
||||
encased = "skull"
|
||||
base_miss_chance = 40
|
||||
|
||||
var/eye_icon = "eyes_s"
|
||||
|
||||
// These organs are important for robotizing at chargen.
|
||||
/obj/item/organ/external/head/robotize(var/company, var/skip_prosthetics, var/keep_organs)
|
||||
return ..(company, skip_prosthetics, 1)
|
||||
|
||||
/obj/item/organ/external/head/removed()
|
||||
if(owner)
|
||||
name = "[owner.real_name]'s head"
|
||||
owner.u_equip(owner.glasses)
|
||||
owner.u_equip(owner.head)
|
||||
owner.u_equip(owner.l_ear)
|
||||
owner.u_equip(owner.r_ear)
|
||||
owner.u_equip(owner.wear_mask)
|
||||
spawn(1)
|
||||
owner.update_hair()
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
|
||||
..(brute, burn, sharp, edge, used_weapon, forbidden_limbs)
|
||||
if (!disfigured)
|
||||
if (brute_dam > 40)
|
||||
if (prob(50))
|
||||
disfigure("brute")
|
||||
if (burn_dam > 40)
|
||||
disfigure("burn")
|
||||
|
||||
/obj/item/organ/external/head/skrell
|
||||
eye_icon = "skrell_eyes_s"
|
||||
|
||||
/obj/item/organ/external/head/seromi
|
||||
eye_icon = "eyes_seromi"
|
||||
|
||||
/obj/item/organ/external/head/no_eyes
|
||||
eye_icon = "blank_eyes"
|
||||
|
||||
/obj/item/organ/external/head/no_eyes/diona
|
||||
max_damage = 50
|
||||
min_broken_damage = 25
|
||||
cannot_break = 1
|
||||
amputation_point = "branch"
|
||||
joint = "structural ligament"
|
||||
dislocated = -1
|
||||
vital = 0
|
||||
|
||||
/obj/item/organ/external/head/no_eyes/diona/removed()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
..()
|
||||
if(!istype(H) || !H.organs || !H.organs.len)
|
||||
H.death()
|
||||
if(prob(50) && spawn_diona_nymph(get_turf(src)))
|
||||
qdel(src)
|
||||
@@ -43,10 +43,6 @@ var/global/list/limb_icon_cache = list()
|
||||
var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[O_EYES]
|
||||
if(eyes) eyes.update_colour()
|
||||
|
||||
/obj/item/organ/external/head/removed()
|
||||
get_icon()
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/head/get_icon()
|
||||
|
||||
..()
|
||||
|
||||
@@ -198,3 +198,12 @@
|
||||
|
||||
/obj/item/organ/internal/diona/node/removed()
|
||||
return
|
||||
|
||||
/obj/item/organ/external/head/no_eyes/diona
|
||||
max_damage = 50
|
||||
min_broken_damage = 25
|
||||
cannot_break = 1
|
||||
amputation_point = "branch"
|
||||
joint = "structural ligament"
|
||||
dislocated = -1
|
||||
vital = 0
|
||||
@@ -18,6 +18,13 @@
|
||||
cannot_amputate = 1
|
||||
parent_organ = null
|
||||
encased = "ribcage"
|
||||
organ_rel_size = 70
|
||||
base_miss_chance = 10
|
||||
|
||||
/obj/item/organ/external/chest/robotize()
|
||||
if(..())
|
||||
// Give them a new cell.
|
||||
owner.internal_organs_by_name["cell"] = new /obj/item/organ/internal/cell(owner,1)
|
||||
|
||||
/obj/item/organ/external/groin
|
||||
name = "lower body"
|
||||
@@ -33,6 +40,7 @@
|
||||
joint = "hip"
|
||||
dislocated = -1
|
||||
gendered_icon = 1
|
||||
organ_rel_size = 30
|
||||
|
||||
/obj/item/organ/external/arm
|
||||
organ_tag = "l_arm"
|
||||
@@ -93,7 +101,8 @@
|
||||
can_stand = 1
|
||||
|
||||
/obj/item/organ/external/foot/removed()
|
||||
if(owner) owner.u_equip(owner.shoes)
|
||||
if(owner)
|
||||
owner.drop_from_inventory(owner.shoes)
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/foot/right
|
||||
@@ -118,9 +127,12 @@
|
||||
joint = "left wrist"
|
||||
amputation_point = "left wrist"
|
||||
can_grasp = 1
|
||||
organ_rel_size = 10
|
||||
base_miss_chance = 50
|
||||
|
||||
/obj/item/organ/external/hand/removed()
|
||||
owner.u_equip(owner.gloves)
|
||||
if(owner)
|
||||
owner.drop_from_inventory(owner.gloves)
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/hand/right
|
||||
@@ -147,18 +159,24 @@
|
||||
gendered_icon = 1
|
||||
cannot_gib = 1
|
||||
encased = "skull"
|
||||
base_miss_chance = 40
|
||||
var/can_intake_reagents = 1
|
||||
var/eye_icon = "eyes_s"
|
||||
|
||||
/obj/item/organ/external/head/robotize(var/company, var/skip_prosthetics, var/keep_organs)
|
||||
return ..(company, skip_prosthetics, 1)
|
||||
|
||||
/obj/item/organ/external/head/removed()
|
||||
if(owner)
|
||||
name = "[owner.real_name]'s head"
|
||||
owner.u_equip(owner.glasses)
|
||||
owner.u_equip(owner.head)
|
||||
owner.u_equip(owner.l_ear)
|
||||
owner.u_equip(owner.r_ear)
|
||||
owner.u_equip(owner.wear_mask)
|
||||
owner.drop_from_inventory(owner.glasses)
|
||||
owner.drop_from_inventory(owner.head)
|
||||
owner.drop_from_inventory(owner.l_ear)
|
||||
owner.drop_from_inventory(owner.r_ear)
|
||||
owner.drop_from_inventory(owner.wear_mask)
|
||||
spawn(1)
|
||||
owner.update_hair()
|
||||
get_icon()
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
|
||||
@@ -169,3 +187,12 @@
|
||||
disfigure("brute")
|
||||
if (burn_dam > 40)
|
||||
disfigure("burn")
|
||||
|
||||
/obj/item/organ/external/head/skrell
|
||||
eye_icon = "skrell_eyes_s"
|
||||
|
||||
/obj/item/organ/external/head/seromi
|
||||
eye_icon = "eyes_seromi"
|
||||
|
||||
/obj/item/organ/external/head/no_eyes
|
||||
eye_icon = "blank_eyes"
|
||||
|
||||
@@ -606,7 +606,6 @@ obj/structure/cable/proc/cableColor(var/colorC)
|
||||
|
||||
/obj/item/stack/cable_coil/transfer_to(obj/item/stack/cable_coil/S)
|
||||
if(!istype(S))
|
||||
world << 1
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -124,6 +124,13 @@
|
||||
magazine_type = /obj/item/ammo_magazine/a50
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/a50)
|
||||
|
||||
/obj/item/weapon/gun/projectile/deagle/update_icon()
|
||||
..()
|
||||
if(ammo_magazine)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]-e"
|
||||
|
||||
/obj/item/weapon/gun/projectile/deagle/gold
|
||||
desc = "A gold plated gun folded over a million times by superior martian gunsmiths. Uses .50 AE rounds."
|
||||
icon_state = "deagleg"
|
||||
|
||||
@@ -349,7 +349,7 @@
|
||||
return
|
||||
|
||||
if (istype(O,/obj/item/weapon/reagent_containers/glass) || \
|
||||
istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \
|
||||
istype(O,/obj/item/weapon/reagent_containers/food/drinks/glass2) || \
|
||||
istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker))
|
||||
|
||||
if (beaker)
|
||||
|
||||
@@ -26,17 +26,19 @@
|
||||
var/overdose = 0
|
||||
var/scannable = 0 // Shows up on health analyzers.
|
||||
var/affects_dead = 0
|
||||
var/glass_icon_state = null
|
||||
var/glass_name = null
|
||||
var/glass_desc = null
|
||||
var/glass_center_of_mass = null
|
||||
var/cup_icon_state = null
|
||||
var/cup_name = null
|
||||
var/cup_desc = null
|
||||
var/cup_center_of_mass = null
|
||||
|
||||
var/color = "#000000"
|
||||
var/color_weight = 1
|
||||
|
||||
var/glass_icon = DRINK_ICON_DEFAULT
|
||||
var/glass_name = "something"
|
||||
var/glass_desc = "It's a glass of... what, exactly?"
|
||||
var/list/glass_special = null // null equivalent to list()
|
||||
|
||||
/datum/reagent/proc/remove_self(var/amount) // Shortcut
|
||||
holder.remove_reagent(id, amount)
|
||||
|
||||
|
||||
@@ -6,8 +6,7 @@
|
||||
metabolism = REM * 5
|
||||
color = "#C80000"
|
||||
|
||||
glass_icon_state = "glass_red"
|
||||
glass_name = "glass of tomato juice"
|
||||
glass_name = "tomato juice"
|
||||
glass_desc = "Are you sure this is tomato juice?"
|
||||
|
||||
/datum/reagent/blood/initialize_data(var/newdata)
|
||||
@@ -91,8 +90,7 @@
|
||||
color = "#0064C877"
|
||||
metabolism = REM * 10
|
||||
|
||||
glass_icon_state = "glass_clear"
|
||||
glass_name = "glass of water"
|
||||
glass_name = "water"
|
||||
glass_desc = "The father of all refreshments."
|
||||
|
||||
/datum/reagent/water/touch_turf(var/turf/simulated/T)
|
||||
@@ -154,8 +152,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#660000"
|
||||
|
||||
glass_icon_state = "dr_gibb_glass"
|
||||
glass_name = "glass of welder fuel"
|
||||
glass_name = "welder fuel"
|
||||
glass_desc = "Unless you are an industrial tool, this is probably not safe for consumption."
|
||||
|
||||
/datum/reagent/fuel/touch_turf(var/turf/T)
|
||||
|
||||
@@ -66,8 +66,7 @@
|
||||
var/targ_temp = 310
|
||||
var/halluci = 0
|
||||
|
||||
glass_icon_state = "glass_clear"
|
||||
glass_name = "glass of ethanol"
|
||||
glass_name = "ethanol"
|
||||
glass_desc = "A well-known alcohol with a variety of applications."
|
||||
|
||||
/datum/reagent/ethanol/touch_mob(var/mob/living/L, var/amount)
|
||||
@@ -368,9 +367,10 @@
|
||||
description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
|
||||
reagent_state = SOLID
|
||||
color = "#FFFFFF"
|
||||
glass_icon_state = "iceglass"
|
||||
glass_name = "glass of sugar"
|
||||
|
||||
glass_name = "sugar"
|
||||
glass_desc = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
|
||||
glass_icon = DRINK_ICON_NOISY
|
||||
|
||||
/datum/reagent/sugar/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
M.nutrition += removed * 3
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -112,8 +112,7 @@
|
||||
color = "#C8A5DC"
|
||||
affects_dead = 1 //This can even heal dead people.
|
||||
|
||||
glass_icon_state = "golden_cup"
|
||||
glass_name = "golden cup"
|
||||
glass_name = "liquid gold"
|
||||
glass_desc = "It's magic. We don't have to explain it."
|
||||
|
||||
/datum/reagent/adminordrazine/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
@@ -197,8 +196,7 @@
|
||||
description = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality."
|
||||
color = "#E0E8EF"
|
||||
|
||||
glass_icon_state = "glass_clear"
|
||||
glass_name = "glass of holy water"
|
||||
glass_name = "holy water"
|
||||
glass_desc = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality."
|
||||
|
||||
/datum/reagent/water/holywater/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
|
||||
@@ -331,13 +331,10 @@
|
||||
id = "beer2"
|
||||
description = "An alcoholic beverage made from malted grains, hops, yeast, and water. The fermentation appears to be incomplete." //If the players manage to analyze this, they deserve to know something is wrong.
|
||||
reagent_state = LIQUID
|
||||
color = "#664300"
|
||||
color = "#FFD300"
|
||||
|
||||
glass_icon_state = "beerglass"
|
||||
glass_name = "glass of beer"
|
||||
glass_name = "beer"
|
||||
glass_desc = "A freezing pint of beer"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/* Drugs */
|
||||
|
||||
/datum/reagent/space_drugs
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
#define DRINK_ICON_FILE 'icons/pdrink.dmi'
|
||||
|
||||
/var/const/DRINK_FIZZ = "fizz"
|
||||
/var/const/DRINK_ICE = "ice"
|
||||
/var/const/DRINK_ICON_DEFAULT = ""
|
||||
/var/const/DRINK_ICON_NOISY = "_noise"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2
|
||||
name = "glass" // Name when empty
|
||||
var/base_name = "glass" // Name to put in front of drinks, i.e. "[base_name] of [contents]"
|
||||
desc = "A generic drinking glass." // Description when empty
|
||||
icon = DRINK_ICON_FILE
|
||||
var/base_icon = "square" // Base icon name
|
||||
volume = 30
|
||||
|
||||
var/list/filling_states // List of percentages full that have icons
|
||||
|
||||
var/list/extras = list() // List of extras. Two extras maximum
|
||||
|
||||
var/rim_pos
|
||||
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
|
||||
amount_per_transfer_from_this = 5
|
||||
possible_transfer_amounts = list(5,10,15,30)
|
||||
flags = OPENCONTAINER
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/examine(mob/M as mob)
|
||||
..()
|
||||
|
||||
for(var/I in extras)
|
||||
if(istype(I, /obj/item/weapon/glass_extra))
|
||||
M << "There is \a [I] in \the [src]."
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/fruit_slice))
|
||||
M << "There is \a [I] on the rim."
|
||||
else
|
||||
M << "There is \a [I] somewhere on the glass. Somehow."
|
||||
|
||||
if(has_ice())
|
||||
M << "There is some ice floating in the drink."
|
||||
|
||||
if(has_fizz())
|
||||
M << "It is fizzing slightly."
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/proc/has_ice()
|
||||
if(reagents.reagent_list.len > 0)
|
||||
var/datum/reagent/R = reagents.get_master_reagent()
|
||||
if(!((R.id == "ice") || ("ice" in R.glass_special))) // if it's not a cup of ice, and it's not already supposed to have ice in, see if the bartender's put ice in it
|
||||
if(reagents.has_reagent("ice", reagents.total_volume / 10)) // 10% ice by volume
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/proc/has_fizz()
|
||||
if(reagents.reagent_list.len > 0)
|
||||
var/datum/reagent/R = reagents.get_master_reagent()
|
||||
if(!("fizz" in R.glass_special))
|
||||
var/totalfizzy = 0
|
||||
for(var/datum/reagent/re in reagents.reagent_list)
|
||||
if("fizz" in re.glass_special)
|
||||
totalfizzy += re.volume
|
||||
if(totalfizzy >= reagents.total_volume / 5) // 20% fizzy by volume
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/New()
|
||||
..()
|
||||
icon_state = base_icon
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/on_reagent_change()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/proc/can_add_extra(obj/item/weapon/glass_extra/GE)
|
||||
if(!("[base_icon]_[GE.glass_addition]left" in icon_states(DRINK_ICON_FILE)))
|
||||
return 0
|
||||
if(!("[base_icon]_[GE.glass_addition]right" in icon_states(DRINK_ICON_FILE)))
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/update_icon()
|
||||
underlays.Cut()
|
||||
|
||||
if (reagents.reagent_list.len > 0)
|
||||
var/datum/reagent/R = reagents.get_master_reagent()
|
||||
name = "[base_name] of [R.glass_name ? R.glass_name : "something"]"
|
||||
desc = R.glass_desc ? R.glass_desc : initial(desc)
|
||||
|
||||
var/list/under_liquid = list()
|
||||
var/list/over_liquid = list()
|
||||
|
||||
var/amnt = 100
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
for(var/k in filling_states)
|
||||
if(percent <= k)
|
||||
amnt = k
|
||||
break
|
||||
|
||||
if(has_ice())
|
||||
over_liquid |= "[base_icon][amnt]_ice"
|
||||
|
||||
if(has_fizz())
|
||||
over_liquid |= "[base_icon][amnt]_fizz"
|
||||
|
||||
for(var/S in R.glass_special)
|
||||
if("[base_icon]_[S]" in icon_states(DRINK_ICON_FILE))
|
||||
under_liquid |= "[base_icon]_[S]"
|
||||
else if("[base_icon][amnt]_[S]" in icon_states(DRINK_ICON_FILE))
|
||||
over_liquid |= "[base_icon][amnt]_[S]"
|
||||
|
||||
for(var/k in under_liquid)
|
||||
underlays += image(DRINK_ICON_FILE, src, k, -3)
|
||||
|
||||
var/image/filling = image(DRINK_ICON_FILE, src, "[base_icon][amnt][R.glass_icon]", -2)
|
||||
filling.color = reagents.get_color()
|
||||
underlays += filling
|
||||
|
||||
for(var/k in over_liquid)
|
||||
underlays += image(DRINK_ICON_FILE, src, k, -1)
|
||||
else
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
|
||||
var/side = "left"
|
||||
for(var/item in extras)
|
||||
if(istype(item, /obj/item/weapon/glass_extra))
|
||||
var/obj/item/weapon/glass_extra/GE = item
|
||||
var/image/I = image(DRINK_ICON_FILE, src, "[base_icon]_[GE.glass_addition][side]")
|
||||
if(GE.glass_color)
|
||||
I.color = GE.glass_color
|
||||
underlays += I
|
||||
else if(istype(item, /obj/item/weapon/reagent_containers/food/snacks/fruit_slice))
|
||||
var/obj/FS = item
|
||||
var/image/I = image(FS)
|
||||
|
||||
var/fsy = rim_pos[1] - 20
|
||||
var/fsx = rim_pos[side == "left" ? 2 : 3] - 16
|
||||
|
||||
var/matrix/M = matrix()
|
||||
M.Scale(0.5)
|
||||
M.Translate(fsx, fsy)
|
||||
I.transform = M
|
||||
underlays += I
|
||||
else continue
|
||||
side = "right"
|
||||
@@ -0,0 +1,72 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(extras.len >= 2) return ..() // max 2 extras, one on each side of the drink
|
||||
|
||||
if(istype(I, /obj/item/weapon/glass_extra))
|
||||
var/obj/item/weapon/glass_extra/GE = I
|
||||
if(can_add_extra(GE))
|
||||
extras += GE
|
||||
user.remove_from_mob(GE)
|
||||
GE.loc = src
|
||||
user << "<span class=notice>You add \the [GE] to \the [src].</span>"
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class=warning>There's no space to put \the [GE] on \the [src]!</span>"
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/fruit_slice))
|
||||
if(!rim_pos)
|
||||
user << "<span class=warning>There's no space to put \the [I] on \the [src]!</span>"
|
||||
return
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/FS = I
|
||||
extras += FS
|
||||
user.remove_from_mob(FS)
|
||||
FS.pixel_x = 0 // Reset its pixel offsets so the icons work!
|
||||
FS.pixel_y = 0
|
||||
FS.loc = src
|
||||
user << "<span class=notice>You add \the [FS] to \the [src].</span>"
|
||||
update_icon()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/attack_hand(mob/user as mob)
|
||||
if(src != user.get_inactive_hand())
|
||||
return ..()
|
||||
|
||||
if(!extras.len)
|
||||
user << "<span class=warning>There's nothing on the glass to remove!</span>"
|
||||
return
|
||||
|
||||
var/choice = input(user, "What would you like to remove from the glass?") as null|anything in extras
|
||||
if(!choice || !(choice in extras))
|
||||
return
|
||||
|
||||
if(user.put_in_active_hand(choice))
|
||||
user << "<span class=notice>You remove \the [choice] from \the [src].</span>"
|
||||
extras -= choice
|
||||
else
|
||||
user << "<span class=warning>Something went wrong, please try again.</span>"
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/glass_extra
|
||||
name = "generic glass addition"
|
||||
desc = "This goes on a glass."
|
||||
var/glass_addition
|
||||
var/glass_desc
|
||||
var/glass_color
|
||||
w_class = 1
|
||||
icon = DRINK_ICON_FILE
|
||||
|
||||
/obj/item/weapon/glass_extra/stick
|
||||
name = "stick"
|
||||
desc = "This goes in a glass."
|
||||
glass_addition = "stick"
|
||||
glass_desc = "There is a stick in the glass."
|
||||
icon_state = "stick"
|
||||
|
||||
/obj/item/weapon/glass_extra/straw
|
||||
name = "straw"
|
||||
desc = "This goes in a glass."
|
||||
glass_addition = "straw"
|
||||
glass_desc = "There is a straw in the glass."
|
||||
icon_state = "straw"
|
||||
|
||||
#undef DRINK_ICON_FILE
|
||||
@@ -0,0 +1,75 @@
|
||||
/obj/item/weapon/storage/box/mixedglasses
|
||||
name = "glassware box"
|
||||
desc = "A box of assorted glassware"
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/drinks/glass2)
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/glass2/square(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/glass2/rocks(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/glass2/shake(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/glass2/shot(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/glass2/pint(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/glass2/mug(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/glass2/wine(src)
|
||||
|
||||
/obj/item/weapon/storage/box/glasses
|
||||
name = "box of glasses"
|
||||
var/glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/drinks/glass2)
|
||||
New()
|
||||
..()
|
||||
|
||||
for(var/i = 1 to 7)
|
||||
new glass_type(src)
|
||||
|
||||
/obj/item/weapon/storage/box/glasses/square
|
||||
name = "box of half-pint glasses"
|
||||
glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/square
|
||||
|
||||
/obj/item/weapon/storage/box/glasses/rocks
|
||||
name = "box of rocks glasses"
|
||||
glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/rocks
|
||||
|
||||
/obj/item/weapon/storage/box/glasses/shake
|
||||
name = "box of milkshake glasses"
|
||||
glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/shake
|
||||
|
||||
/obj/item/weapon/storage/box/glasses/cocktail
|
||||
name = "box of cocktail glasses"
|
||||
glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail
|
||||
|
||||
/obj/item/weapon/storage/box/glasses/shot
|
||||
name = "box of shot glasses"
|
||||
glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/shot
|
||||
|
||||
/obj/item/weapon/storage/box/glasses/pint
|
||||
name = "box of pint glasses"
|
||||
glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/pint
|
||||
|
||||
/obj/item/weapon/storage/box/glasses/mug
|
||||
name = "box of glass mugs"
|
||||
glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/mug
|
||||
|
||||
/obj/item/weapon/storage/box/glasses/wine
|
||||
name = "box of wine glasses"
|
||||
glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/wine
|
||||
|
||||
/obj/item/weapon/storage/box/glass_extras
|
||||
name = "box of cocktail garnishings"
|
||||
var/extra_type = /obj/item/weapon/glass_extra
|
||||
can_hold = list(/obj/item/weapon/glass_extra)
|
||||
storage_slots = 14
|
||||
New()
|
||||
..()
|
||||
|
||||
for(var/i = 1 to 14)
|
||||
new extra_type(src)
|
||||
|
||||
/obj/item/weapon/storage/box/glass_extras/straws
|
||||
name = "box of straws"
|
||||
extra_type = /obj/item/weapon/glass_extra/straw
|
||||
|
||||
/obj/item/weapon/storage/box/glass_extras/sticks
|
||||
name = "box of drink sticks"
|
||||
extra_type = /obj/item/weapon/glass_extra/stick
|
||||
@@ -0,0 +1,72 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/square
|
||||
name = "half-pint glass"
|
||||
base_name = "glass"
|
||||
base_icon = "square"
|
||||
desc = "Your standard drinking glass."
|
||||
filling_states = list(20, 40, 60, 80, 100)
|
||||
volume = 30
|
||||
possible_transfer_amounts = list(5,10,15,30)
|
||||
rim_pos = list(23,13,20) // y, x0, x1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks
|
||||
name = "rocks glass"
|
||||
base_name = "glass"
|
||||
base_icon = "rocks"
|
||||
filling_states = list(25, 50, 75, 100)
|
||||
volume = 20
|
||||
possible_transfer_amounts = list(5,10,20)
|
||||
rim_pos = list(21, 10, 23)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/shake
|
||||
name = "milkshake glass"
|
||||
base_name = "glass"
|
||||
base_icon = "shake"
|
||||
filling_states = list(25, 50, 75, 100)
|
||||
volume = 30
|
||||
possible_transfer_amounts = list(5,10,15,30)
|
||||
rim_pos = list(25, 13, 21)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail
|
||||
name = "cocktail glass"
|
||||
base_name = "glass"
|
||||
base_icon = "cocktail"
|
||||
filling_states = list(33, 66, 100)
|
||||
volume = 15
|
||||
possible_transfer_amounts = list(5,10,15)
|
||||
rim_pos = list(22, 13, 21)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/shot
|
||||
name = "shot glass"
|
||||
base_name = "shot"
|
||||
base_icon = "shot"
|
||||
filling_states = list(33, 66, 100)
|
||||
volume = 5
|
||||
possible_transfer_amounts = list(1,2,5)
|
||||
rim_pos = list(17, 13, 21)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/pint
|
||||
name = "pint glass"
|
||||
base_name = "pint"
|
||||
base_icon = "pint"
|
||||
filling_states = list(16, 33, 50, 66, 83, 100)
|
||||
volume = 60
|
||||
possible_transfer_amounts = list(5,10,15,30,60)
|
||||
rim_pos = list(25, 12, 21)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/mug
|
||||
name = "glass mug"
|
||||
base_name = "mug"
|
||||
base_icon = "mug"
|
||||
filling_states = list(25, 50, 75, 100)
|
||||
volume = 40
|
||||
possible_transfer_amounts = list(5,10,20,40)
|
||||
rim_pos = list(22, 12, 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/wine
|
||||
name = "wine glass"
|
||||
base_name = "glass"
|
||||
base_icon = "wine"
|
||||
filling_states = list(20, 40, 60, 80, 100)
|
||||
volume = 25
|
||||
possible_transfer_amounts = list(5, 10, 15, 25)
|
||||
rim_pos = list(25, 12, 21)
|
||||
@@ -0,0 +1,31 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask
|
||||
name = "fitness shaker"
|
||||
base_name = "shaker"
|
||||
desc = "Big enough to contain enough protein to get perfectly swole. Don't mind the bits."
|
||||
icon_state = "fitness-cup_black"
|
||||
base_icon = "fitness-cup"
|
||||
volume = 100
|
||||
matter = list("plastic" = 2000)
|
||||
filling_states = list(10,20,30,40,50,60,70,80,90,100)
|
||||
possible_transfer_amounts = list(5, 10, 15, 25)
|
||||
rim_pos = null // no fruit slices
|
||||
var/lid_color = "black"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/New()
|
||||
..()
|
||||
lid_color = pick("black", "red", "blue")
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/update_icon()
|
||||
..()
|
||||
icon_state = "[base_icon]_[lid_color]"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake
|
||||
name = "protein shake"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake/New()
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 30)
|
||||
reagents.add_reagent("iron", 10)
|
||||
reagents.add_reagent("protein", 35)
|
||||
reagents.add_reagent("water", 25)
|
||||
@@ -11,7 +11,13 @@
|
||||
volume = 50
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/on_reagent_change()
|
||||
return
|
||||
if (reagents.reagent_list.len > 0)
|
||||
var/datum/reagent/R = reagents.get_master_reagent()
|
||||
if(R.price_tag)
|
||||
price_tag = R.price_tag
|
||||
else
|
||||
price_tag = null
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob)
|
||||
if(!is_open_container())
|
||||
@@ -96,13 +102,16 @@
|
||||
volume = 150
|
||||
flags = CONDUCT | OPENCONTAINER
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/golden_cup/on_reagent_change()
|
||||
..()
|
||||
|
||||
///////////////////////////////////////////////Drinks
|
||||
//Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly
|
||||
// rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50.
|
||||
// Formatting is the same as food.
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk
|
||||
name = "Space Milk"
|
||||
name = "milk carton"
|
||||
desc = "It's milk. White and nutritious goodness!"
|
||||
icon_state = "milk"
|
||||
item_state = "carton"
|
||||
@@ -113,7 +122,7 @@
|
||||
reagents.add_reagent("milk", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/soymilk
|
||||
name = "SoyMilk"
|
||||
name = "soymilk carton"
|
||||
desc = "It's soy milk. White and nutritious goodness!"
|
||||
icon_state = "soymilk"
|
||||
item_state = "carton"
|
||||
@@ -123,7 +132,7 @@
|
||||
reagents.add_reagent("soymilk", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton
|
||||
name = "Small Carton of Milk"
|
||||
name = "small milk carton"
|
||||
volume = 30
|
||||
icon_state = "mini-milk"
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/New()
|
||||
@@ -131,16 +140,16 @@
|
||||
reagents.add_reagent("milk", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate
|
||||
name = "Small Carton of Chocolate Milk"
|
||||
name = "small chocolate milk carton"
|
||||
desc = "It's milk! This one is in delicious chocolate flavour."
|
||||
|
||||
icon_state = "mini-milk_choco"
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate/New()
|
||||
..()
|
||||
reagents.add_reagent("chocolate_milk", 30)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/coffee
|
||||
name = "Robust Coffee"
|
||||
name = "\improper Robust Coffee"
|
||||
desc = "Careful, the beverage you're about to enjoy is extremely hot."
|
||||
icon_state = "coffee"
|
||||
center_of_mass = list("x"=15, "y"=10)
|
||||
@@ -149,7 +158,7 @@
|
||||
reagents.add_reagent("coffee", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/tea
|
||||
name = "Duke Purple Tea"
|
||||
name = "cup of Duke Purple Tea"
|
||||
desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
|
||||
icon_state = "teacup"
|
||||
item_state = "coffee"
|
||||
@@ -160,7 +169,7 @@
|
||||
reagents.add_reagent("tea", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/ice
|
||||
name = "Ice Cup"
|
||||
name = "cup of ice"
|
||||
desc = "Careful, cold ice, do not chew."
|
||||
icon_state = "coffee"
|
||||
center_of_mass = list("x"=15, "y"=10)
|
||||
@@ -169,7 +178,7 @@
|
||||
reagents.add_reagent("ice", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate
|
||||
name = "Dutch Hot Coco"
|
||||
name = "cup of Dutch hot coco"
|
||||
desc = "Made in Space South America."
|
||||
icon_state = "hot_coco"
|
||||
item_state = "coffee"
|
||||
@@ -189,7 +198,7 @@
|
||||
reagents.add_reagent("dry_ramen", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/sillycup
|
||||
name = "Paper Cup"
|
||||
name = "paper cup"
|
||||
desc = "A paper water cup."
|
||||
icon_state = "water_cup_e"
|
||||
possible_transfer_amounts = null
|
||||
@@ -199,6 +208,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/sillycup/on_reagent_change()
|
||||
..()
|
||||
if(reagents.total_volume)
|
||||
icon_state = "water_cup"
|
||||
else
|
||||
@@ -211,13 +221,16 @@
|
||||
// icon states.
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/shaker
|
||||
name = "Shaker"
|
||||
name = "shaker"
|
||||
desc = "A metal shaker to mix drinks in."
|
||||
icon_state = "shaker"
|
||||
amount_per_transfer_from_this = 10
|
||||
volume = 120
|
||||
center_of_mass = list("x"=17, "y"=10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/shaker/on_reagent_change()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/teapot
|
||||
name = "teapot"
|
||||
desc = "An elegant teapot. It simply oozes class."
|
||||
@@ -227,13 +240,19 @@
|
||||
volume = 120
|
||||
center_of_mass = list("x"=17, "y"=7)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/teapot/on_reagent_change()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask
|
||||
name = "Captain's Flask"
|
||||
name = "\improper Captain's flask"
|
||||
desc = "A metal flask belonging to the captain"
|
||||
icon_state = "flask"
|
||||
volume = 60
|
||||
center_of_mass = list("x"=17, "y"=7)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/on_reagent_change()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/shiny
|
||||
name = "shiny flask"
|
||||
desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it."
|
||||
@@ -245,7 +264,7 @@
|
||||
icon_state = "lithiumflask"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/detflask
|
||||
name = "Detective's Flask"
|
||||
name = "\improper Detective's flask"
|
||||
desc = "A metal flask with a leather band and golden badge belonging to the detective."
|
||||
icon_state = "detflask"
|
||||
volume = 60
|
||||
@@ -271,3 +290,7 @@
|
||||
icon_state = "britcup"
|
||||
volume = 30
|
||||
center_of_mass = list("x"=15, "y"=13)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/britcup/on_reagent_change()
|
||||
..()
|
||||
|
||||
|
||||
39
code/modules/reagents/reagent_containers/food/drinks/cup.dm
Normal file
39
code/modules/reagents/reagent_containers/food/drinks/cup.dm
Normal file
@@ -0,0 +1,39 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cup
|
||||
name = "coffee cup"
|
||||
desc = "The container of oriental luxuries."
|
||||
icon_state = "cup_empty"
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 30
|
||||
center_of_mass = list("x"=16, "y"=16)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cup/on_reagent_change()
|
||||
..()
|
||||
if (reagents.reagent_list.len > 0)
|
||||
var/datum/reagent/R = reagents.get_master_reagent()
|
||||
|
||||
if(R.cup_icon_state)
|
||||
icon_state = R.cup_icon_state
|
||||
else
|
||||
icon_state = "cup_brown"
|
||||
|
||||
if(R.cup_name)
|
||||
name = R.cup_name
|
||||
else
|
||||
name = "Cup of.. what?"
|
||||
|
||||
if(R.cup_desc)
|
||||
desc = R.cup_desc
|
||||
else
|
||||
desc = "You can't really tell what this is."
|
||||
|
||||
if(R.cup_center_of_mass)
|
||||
center_of_mass = R.cup_center_of_mass
|
||||
else
|
||||
center_of_mass = list("x"=16, "y"=16)
|
||||
|
||||
else
|
||||
icon_state = "cup_empty"
|
||||
name = "coffee cup"
|
||||
desc = "The container of oriental luxuries."
|
||||
center_of_mass = list("x"=16, "y"=16)
|
||||
return
|
||||
@@ -11,7 +11,7 @@
|
||||
id = "ripley_chassis"
|
||||
build_path = /obj/item/mecha_parts/chassis/ripley
|
||||
time = 10
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 20000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000)
|
||||
|
||||
/datum/design/item/mechfab/ripley/chassis/firefighter
|
||||
name = "Firefigher chassis"
|
||||
@@ -23,35 +23,35 @@
|
||||
id = "ripley_torso"
|
||||
build_path = /obj/item/mecha_parts/part/ripley_torso
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 40000, "glass" = 15000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 30000, "glass" = 11250)
|
||||
|
||||
/datum/design/item/mechfab/ripley/left_arm
|
||||
name = "Ripley left arm"
|
||||
id = "ripley_left_arm"
|
||||
build_path = /obj/item/mecha_parts/part/ripley_left_arm
|
||||
time = 15
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 25000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 18750)
|
||||
|
||||
/datum/design/item/mechfab/ripley/right_arm
|
||||
name = "Ripley right arm"
|
||||
id = "ripley_right_arm"
|
||||
build_path = /obj/item/mecha_parts/part/ripley_right_arm
|
||||
time = 15
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 25000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 18750)
|
||||
|
||||
/datum/design/item/mechfab/ripley/left_leg
|
||||
name = "Ripley left leg"
|
||||
id = "ripley_left_leg"
|
||||
build_path = /obj/item/mecha_parts/part/ripley_left_leg
|
||||
time = 15
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 30000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 22500)
|
||||
|
||||
/datum/design/item/mechfab/ripley/right_leg
|
||||
name = "Ripley right leg"
|
||||
id = "ripley_right_leg"
|
||||
build_path = /obj/item/mecha_parts/part/ripley_right_leg
|
||||
time = 15
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 30000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 22500)
|
||||
|
||||
/datum/design/item/mechfab/odysseus
|
||||
category = "Odysseus"
|
||||
@@ -61,49 +61,49 @@
|
||||
id = "odysseus_chassis"
|
||||
build_path = /obj/item/mecha_parts/chassis/odysseus
|
||||
time = 10
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 20000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000)
|
||||
|
||||
/datum/design/item/mechfab/odysseus/torso
|
||||
name = "Odysseus torso"
|
||||
id = "odysseus_torso"
|
||||
build_path = /obj/item/mecha_parts/part/odysseus_torso
|
||||
time = 18
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 25000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 18750)
|
||||
|
||||
/datum/design/item/mechfab/odysseus/head
|
||||
name = "Odysseus head"
|
||||
id = "odysseus_head"
|
||||
build_path = /obj/item/mecha_parts/part/odysseus_head
|
||||
time = 10
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 7500)
|
||||
|
||||
/datum/design/item/mechfab/odysseus/left_arm
|
||||
name = "Odysseus left arm"
|
||||
id = "odysseus_left_arm"
|
||||
build_path = /obj/item/mecha_parts/part/odysseus_left_arm
|
||||
time = 12
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500)
|
||||
|
||||
/datum/design/item/mechfab/odysseus/right_arm
|
||||
name = "Odysseus right arm"
|
||||
id = "odysseus_right_arm"
|
||||
build_path = /obj/item/mecha_parts/part/odysseus_right_arm
|
||||
time = 12
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500)
|
||||
|
||||
/datum/design/item/mechfab/odysseus/left_leg
|
||||
name = "Odysseus left leg"
|
||||
id = "odysseus_left_leg"
|
||||
build_path = /obj/item/mecha_parts/part/odysseus_left_leg
|
||||
time = 13
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 11250)
|
||||
|
||||
/datum/design/item/mechfab/odysseus/right_leg
|
||||
name = "Odysseus right leg"
|
||||
id = "odysseus_right_leg"
|
||||
build_path = /obj/item/mecha_parts/part/odysseus_right_leg
|
||||
time = 13
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 11250)
|
||||
|
||||
/datum/design/item/mechfab/gygax
|
||||
category = "Gygax"
|
||||
@@ -113,56 +113,56 @@
|
||||
id = "gygax_chassis"
|
||||
build_path = /obj/item/mecha_parts/chassis/gygax
|
||||
time = 10
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 25000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 18750)
|
||||
|
||||
/datum/design/item/mechfab/gygax/torso
|
||||
name = "Gygax torso"
|
||||
id = "gygax_torso"
|
||||
build_path = /obj/item/mecha_parts/part/gygax_torso
|
||||
time = 30
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 50000, "glass" = 20000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 37500, "glass" = 15000)
|
||||
|
||||
/datum/design/item/mechfab/gygax/head
|
||||
name = "Gygax head"
|
||||
id = "gygax_head"
|
||||
build_path = /obj/item/mecha_parts/part/gygax_head
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 20000, "glass" = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000, "glass" = 7500)
|
||||
|
||||
/datum/design/item/mechfab/gygax/left_arm
|
||||
name = "Gygax left arm"
|
||||
id = "gygax_left_arm"
|
||||
build_path = /obj/item/mecha_parts/part/gygax_left_arm
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 30000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 22500)
|
||||
|
||||
/datum/design/item/mechfab/gygax/right_arm
|
||||
name = "Gygax right arm"
|
||||
id = "gygax_right_arm"
|
||||
build_path = /obj/item/mecha_parts/part/gygax_right_arm
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 30000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 22500)
|
||||
|
||||
/datum/design/item/mechfab/gygax/left_leg
|
||||
name = "Gygax left leg"
|
||||
id = "gygax_left_leg"
|
||||
build_path = /obj/item/mecha_parts/part/gygax_left_leg
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 35000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 26250)
|
||||
|
||||
/datum/design/item/mechfab/gygax/right_leg
|
||||
name = "Gygax right leg"
|
||||
id = "gygax_right_leg"
|
||||
build_path = /obj/item/mecha_parts/part/gygax_right_leg
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 35000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 26250)
|
||||
|
||||
/datum/design/item/mechfab/gygax/armour
|
||||
name = "Gygax armour plates"
|
||||
id = "gygax_armour"
|
||||
build_path = /obj/item/mecha_parts/part/gygax_armour
|
||||
time = 60
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 50000, "diamond" = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 37500, "diamond" = 7500)
|
||||
|
||||
/datum/design/item/mechfab/durand
|
||||
category = "Durand"
|
||||
@@ -172,75 +172,74 @@
|
||||
id = "durand_chassis"
|
||||
build_path = /obj/item/mecha_parts/chassis/durand
|
||||
time = 10
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 25000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 18750)
|
||||
|
||||
/datum/design/item/mechfab/durand/torso
|
||||
name = "Durand torso"
|
||||
id = "durand_torso"
|
||||
build_path = /obj/item/mecha_parts/part/durand_torso
|
||||
time = 30
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 55000, "glass" = 20000, "silver" = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 41250, "glass" = 15000, "silver" = 7500)
|
||||
|
||||
/datum/design/item/mechfab/durand/head
|
||||
name = "Durand head"
|
||||
id = "durand_head"
|
||||
build_path = /obj/item/mecha_parts/part/durand_head
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 10000, "silver" = 3000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 18750, "glass" = 7500, "silver" = 2250)
|
||||
|
||||
/datum/design/item/mechfab/durand/left_arm
|
||||
name = "Durand left arm"
|
||||
id = "durand_left_arm"
|
||||
build_path = /obj/item/mecha_parts/part/durand_left_arm
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 35000, "silver" = 3000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 26250, "silver" = 2250)
|
||||
|
||||
/datum/design/item/mechfab/durand/right_arm
|
||||
name = "Durand right arm"
|
||||
id = "durand_right_arm"
|
||||
build_path = /obj/item/mecha_parts/part/durand_right_arm
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 35000, "silver" = 3000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 26250, "silver" = 2250)
|
||||
|
||||
/datum/design/item/mechfab/durand/left_leg
|
||||
name = "Durand left leg"
|
||||
id = "durand_left_leg"
|
||||
build_path = /obj/item/mecha_parts/part/durand_left_leg
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 40000, "silver" = 3000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 30000, "silver" = 2250)
|
||||
|
||||
/datum/design/item/mechfab/durand/right_leg
|
||||
name = "Durand right leg"
|
||||
id = "durand_right_leg"
|
||||
build_path = /obj/item/mecha_parts/part/durand_right_leg
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 40000, "silver" = 3000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 30000, "silver" = 2250)
|
||||
|
||||
/datum/design/item/mechfab/durand/armour
|
||||
name = "Durand armour plates"
|
||||
id = "durand_armour"
|
||||
build_path = /obj/item/mecha_parts/part/durand_armour
|
||||
time = 60
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 50000, "uranium" = 10000)
|
||||
|
||||
/datum/design/item/mecha_tracking
|
||||
name = "Exosuit tracking beacon"
|
||||
build_type = MECHFAB
|
||||
time = 5
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 500)
|
||||
build_path = /obj/item/mecha_parts/mecha_tracking
|
||||
category = "Misc"
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 37500, "uranium" = 7500)
|
||||
|
||||
/datum/design/item/mecha
|
||||
build_type = MECHFAB
|
||||
category = "Exosuit Equipment"
|
||||
time = 10
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500)
|
||||
|
||||
/datum/design/item/mecha/AssembleDesignDesc()
|
||||
if(!desc)
|
||||
desc = "Allows for the construction of \a '[item_name]' exosuit module."
|
||||
|
||||
/datum/design/item/mecha/tracking
|
||||
name = "Exosuit tracking beacon"
|
||||
id = "mech_tracker"
|
||||
time = 5
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 375)
|
||||
build_path = /obj/item/mecha_parts/mecha_tracking
|
||||
|
||||
/datum/design/item/mecha/hydraulic_clamp
|
||||
name = "Hydraulic clamp"
|
||||
id = "hydraulic_clamp"
|
||||
@@ -265,20 +264,20 @@
|
||||
name = "Flare launcher"
|
||||
id = "mecha_flare_gun"
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 12500)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 9375)
|
||||
|
||||
/datum/design/item/mecha/sleeper
|
||||
name = "Sleeper"
|
||||
id = "mech_sleeper"
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/tool/sleeper
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 3750, "glass" = 7500)
|
||||
|
||||
/datum/design/item/mecha/syringe_gun
|
||||
name = "Syringe gun"
|
||||
id = "mech_syringe_gun"
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 2000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 2250, "glass" = 1500)
|
||||
|
||||
/*
|
||||
/datum/design/item/mecha/syringe_gun
|
||||
@@ -292,7 +291,7 @@
|
||||
name = "Passenger compartment"
|
||||
id = "mech_passenger"
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/tool/passenger
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 3750, "glass" = 3750)
|
||||
|
||||
//obj/item/mecha_parts/mecha_equipment/repair_droid,
|
||||
//obj/item/mecha_parts/mecha_equipment/jetpack, //TODO MECHA JETPACK SPRITE MISSING
|
||||
@@ -352,7 +351,7 @@
|
||||
desc = "A weapon that violates the Geneva Convention at 6 rounds per minute."
|
||||
id = "clusterbang_launcher"
|
||||
req_tech = list(TECH_COMBAT= 5, TECH_MATERIAL = 5, TECH_ILLEGAL = 3)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 20000, "gold" = 6000, "uranium" = 6000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000, "gold" = 4500, "uranium" = 4500)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited
|
||||
|
||||
// *** Nonweapon modules
|
||||
@@ -375,7 +374,7 @@
|
||||
desc = "An exosuit-mounted rapid construction device."
|
||||
id = "mech_rcd"
|
||||
time = 120
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 30000, "phoron" = 25000, "silver" = 20000, "gold" = 20000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 22500, "phoron" = 18750, "silver" = 15000, "gold" = 15000)
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_POWER = 4, TECH_ENGINEERING = 4)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd
|
||||
|
||||
@@ -391,7 +390,7 @@
|
||||
desc = "Automated repair droid, exosuits' best companion. BEEP BOOP"
|
||||
id = "mech_repair_droid"
|
||||
req_tech = list(TECH_MAGNET = 3, TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold" = 1000, "silver" = 2000, "glass" = 5000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500, "gold" = 750, "silver" = 1500, "glass" = 3750)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid
|
||||
|
||||
/datum/design/item/mecha/phoron_generator
|
||||
@@ -399,13 +398,13 @@
|
||||
id = "mech_phoron_generator"
|
||||
req_tech = list(TECH_PHORON = 2, TECH_POWER= 2, TECH_ENGINEERING = 2)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/generator
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000, "silver" = 500, "glass" = 1000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500, "silver" = 375, "glass" = 750)
|
||||
|
||||
/datum/design/item/mecha/energy_relay
|
||||
name = "Energy relay"
|
||||
id = "mech_energy_relay"
|
||||
req_tech = list(TECH_MAGNET = 4, TECH_POWER = 3)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold" = 2000, "silver" = 3000, "glass" = 2000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500, "gold" = 1500, "silver" = 2250, "glass" = 1500)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
|
||||
|
||||
/datum/design/item/mecha/ccw_armor
|
||||
@@ -413,14 +412,14 @@
|
||||
desc = "Exosuit close-combat armor booster."
|
||||
id = "mech_ccw_armor"
|
||||
req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 20000, "silver" = 5000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 11250, "silver" = 3750)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster
|
||||
|
||||
/datum/design/item/mecha/proj_armor
|
||||
desc = "Exosuit projectile armor booster."
|
||||
id = "mech_proj_armor"
|
||||
req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_ENGINEERING = 3)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 20000, "gold" = 5000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000, "gold" = 3750)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
|
||||
|
||||
/datum/design/item/mecha/diamond_drill
|
||||
@@ -428,7 +427,7 @@
|
||||
desc = "A diamond version of the exosuit drill. It's harder, better, faster, stronger."
|
||||
id = "mech_diamond_drill"
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000, "diamond" = 6500)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500, "diamond" = 4875)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
|
||||
|
||||
/datum/design/item/mecha/generator_nuclear
|
||||
@@ -436,7 +435,7 @@
|
||||
desc = "Exosuit-held nuclear reactor. Converts uranium and everyone's health to energy."
|
||||
id = "mech_generator_nuclear"
|
||||
req_tech = list(TECH_POWER= 3, TECH_ENGINEERING = 3, TECH_MATERIAL = 3)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000, "silver" = 500, "glass" = 1000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500, "silver" = 375, "glass" = 750)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear
|
||||
|
||||
/datum/design/item/synthetic_flash
|
||||
@@ -444,6 +443,6 @@
|
||||
id = "sflash"
|
||||
req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2)
|
||||
build_type = MECHFAB
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 750, "glass" = 750)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 562, "glass" = 562)
|
||||
build_path = /obj/item/device/flash/synthetic
|
||||
category = "Misc"
|
||||
@@ -49,7 +49,7 @@
|
||||
//////////////////// Prosthetics ////////////////////
|
||||
/datum/design/item/prosfab/pros/torso
|
||||
time = 35
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 60000, "glass" = 10000, "plasteel" = 2000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 45000, "glass" = 7500, "plasteel" = 1500)
|
||||
// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 3, TECH_DATA = 3) //Saving the values just in case
|
||||
var/gender = MALE
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
id = "pros_head"
|
||||
build_path = /obj/item/organ/external/head
|
||||
time = 30
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 5000, "plasteel" = 1000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 18750, "glass" = 3750, "plasteel" = 750)
|
||||
// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 3, TECH_DATA = 3) //Saving the values just in case
|
||||
|
||||
/datum/design/item/prosfab/pros/l_arm
|
||||
@@ -80,63 +80,63 @@
|
||||
id = "pros_l_arm"
|
||||
build_path = /obj/item/organ/external/arm
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 18000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 13500)
|
||||
|
||||
/datum/design/item/prosfab/pros/l_hand
|
||||
name = "Prosthetic left hand"
|
||||
id = "pros_l_hand"
|
||||
build_path = /obj/item/organ/external/hand
|
||||
time = 15
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500)
|
||||
|
||||
/datum/design/item/prosfab/pros/l_leg
|
||||
name = "Prosthetic left leg"
|
||||
id = "pros_l_leg"
|
||||
build_path = /obj/item/organ/external/leg
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 11250)
|
||||
|
||||
/datum/design/item/prosfab/pros/l_foot
|
||||
name = "Prosthetic left foot"
|
||||
id = "pros_l_foot"
|
||||
build_path = /obj/item/organ/external/foot
|
||||
time = 15
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500)
|
||||
|
||||
/datum/design/item/prosfab/pros/r_arm
|
||||
name = "Prosthetic right arm"
|
||||
id = "pros_r_arm"
|
||||
build_path = /obj/item/organ/external/arm/right
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 18000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 13500)
|
||||
|
||||
/datum/design/item/prosfab/pros/r_hand
|
||||
name = "Prosthetic right hand"
|
||||
id = "pros_r_hand"
|
||||
build_path = /obj/item/organ/external/hand/right
|
||||
time = 15
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500)
|
||||
|
||||
/datum/design/item/prosfab/pros/r_leg
|
||||
name = "Prosthetic right leg"
|
||||
id = "pros_r_leg"
|
||||
build_path = /obj/item/organ/external/leg/right
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 11250)
|
||||
|
||||
/datum/design/item/prosfab/pros/r_foot
|
||||
name = "Prosthetic right foot"
|
||||
id = "pros_r_foot"
|
||||
build_path = /obj/item/organ/external/foot/right
|
||||
time = 15
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500)
|
||||
|
||||
/datum/design/item/prosfab/pros/cell
|
||||
name = "Prosthetic powercell"
|
||||
id = "pros_cell"
|
||||
build_path = /obj/item/organ/internal/cell
|
||||
time = 15
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 4000, "plasteel" = 2000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500, "glass" = 3000, "plasteel" = 1500)
|
||||
// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
|
||||
|
||||
/datum/design/item/prosfab/pros/eyes
|
||||
@@ -144,63 +144,63 @@
|
||||
id = "pros_eyes"
|
||||
build_path = /obj/item/organ/internal/eyes/robot
|
||||
time = 15
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500, "glass" = 7500)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 5625)
|
||||
// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
|
||||
|
||||
//////////////////// Cyborg Parts ////////////////////
|
||||
/datum/design/item/prosfab/cyborg
|
||||
category = "Cyborg Parts"
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 5000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 3750)
|
||||
|
||||
/datum/design/item/prosfab/cyborg/exoskeleton
|
||||
name = "Robot exoskeleton"
|
||||
id = "robot_exoskeleton"
|
||||
build_path = /obj/item/robot_parts/robot_suit
|
||||
time = 50
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 50000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 37500)
|
||||
|
||||
/datum/design/item/prosfab/cyborg/torso
|
||||
name = "Robot torso"
|
||||
id = "robot_torso"
|
||||
build_path = /obj/item/robot_parts/chest
|
||||
time = 35
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 40000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 30000)
|
||||
|
||||
/datum/design/item/prosfab/cyborg/head
|
||||
name = "Robot head"
|
||||
id = "robot_head"
|
||||
build_path = /obj/item/robot_parts/head
|
||||
time = 35
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 25000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 18750)
|
||||
|
||||
/datum/design/item/prosfab/cyborg/l_arm
|
||||
name = "Robot left arm"
|
||||
id = "robot_l_arm"
|
||||
build_path = /obj/item/robot_parts/l_arm
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 18000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 13500)
|
||||
|
||||
/datum/design/item/prosfab/cyborg/r_arm
|
||||
name = "Robot right arm"
|
||||
id = "robot_r_arm"
|
||||
build_path = /obj/item/robot_parts/r_arm
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 18000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 13500)
|
||||
|
||||
/datum/design/item/prosfab/cyborg/l_leg
|
||||
name = "Robot left leg"
|
||||
id = "robot_l_leg"
|
||||
build_path = /obj/item/robot_parts/l_leg
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 11250)
|
||||
|
||||
/datum/design/item/prosfab/cyborg/r_leg
|
||||
name = "Robot right leg"
|
||||
id = "robot_r_leg"
|
||||
build_path = /obj/item/robot_parts/r_leg
|
||||
time = 20
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 11250)
|
||||
|
||||
|
||||
//////////////////// Cyborg Internals ////////////////////
|
||||
@@ -208,7 +208,7 @@
|
||||
category = "Cyborg Internals"
|
||||
build_type = PROSFAB
|
||||
time = 12
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500)
|
||||
|
||||
/datum/design/item/prosfab/cyborg/component/binary_communication_device
|
||||
name = "Binary communication device"
|
||||
@@ -246,7 +246,7 @@
|
||||
category = "Cyborg Modules"
|
||||
build_type = PROSFAB
|
||||
time = 12
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500)
|
||||
|
||||
/datum/design/item/prosfab/robot_upgrade/rename
|
||||
name = "Rename module"
|
||||
@@ -264,28 +264,28 @@
|
||||
name = "Emergency restart module"
|
||||
desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online."
|
||||
id = "borg_restart_module"
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 60000, "glass" = 5000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 45000, "glass" = 3750)
|
||||
build_path = /obj/item/borg/upgrade/restart
|
||||
|
||||
/datum/design/item/prosfab/robot_upgrade/vtec
|
||||
name = "VTEC module"
|
||||
desc = "Used to kick in a robot's VTEC systems, increasing their speed."
|
||||
id = "borg_vtec_module"
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 80000, "glass" = 6000, "gold" = 5000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 60000, "glass" = 4500, "gold" = 3750)
|
||||
build_path = /obj/item/borg/upgrade/vtec
|
||||
|
||||
/datum/design/item/prosfab/robot_upgrade/tasercooler
|
||||
name = "Rapid taser cooling module"
|
||||
desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate."
|
||||
id = "borg_taser_module"
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 80000, "glass" = 6000, "gold" = 2000, "diamond" = 500)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 60000, "glass" = 4500, "gold" = 1500, "diamond" = 375)
|
||||
build_path = /obj/item/borg/upgrade/tasercooler
|
||||
|
||||
/datum/design/item/prosfab/robot_upgrade/jetpack
|
||||
name = "Jetpack module"
|
||||
desc = "A carbon dioxide jetpack suitable for low-gravity mining operations."
|
||||
id = "borg_jetpack_module"
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000, "phoron" = 15000, "uranium" = 20000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500, "phoron" = 11250, "uranium" = 15000)
|
||||
build_path = /obj/item/borg/upgrade/jetpack
|
||||
|
||||
/datum/design/item/prosfab/robot_upgrade/syndicate
|
||||
@@ -293,5 +293,5 @@
|
||||
desc = "Allows for the construction of lethal upgrades for cyborgs."
|
||||
id = "borg_syndicate_module"
|
||||
req_tech = list(TECH_COMBAT = 4, TECH_ILLEGAL = 3)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 15000, "diamond" = 10000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500, "glass" = 11250, "diamond" = 7500)
|
||||
build_path = /obj/item/borg/upgrade/syndicate
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = tool
|
||||
user.visible_message("<span class='notice'>[user] has attached [target]'s [E.name] to the [E.amputation_point].</span>>", \
|
||||
user.visible_message("<span class='notice'>[user] has attached [target]'s [E.name] to the [E.amputation_point].</span>", \
|
||||
"<span class='notice'>You have attached [target]'s [E.name] to the [E.amputation_point].</span>")
|
||||
user.drop_from_inventory(E)
|
||||
E.replaced(target)
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
spawn(30)
|
||||
icon_state = "scanner_0old"
|
||||
qdel(occupant)
|
||||
occupant = null //If qdel's being slow or acting up, let's make sure we can't make more cores from this one.
|
||||
inuse = 0
|
||||
eject_contents()
|
||||
update_light_color()
|
||||
|
||||
@@ -99,6 +99,7 @@
|
||||
|
||||
/obj/machinery/xenobio/proc/finished_task()
|
||||
active = 0
|
||||
in_use = 0
|
||||
if(failed_task)
|
||||
failed_task = 0
|
||||
visible_message("\icon[src] [src] pings unhappily, flashing a red warning light.")
|
||||
@@ -332,7 +333,7 @@
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "xenobio_editor.tmpl", "Biological Genetic Bombarder UI", 470, 450)
|
||||
ui = new(user, src, ui_key, "xenobio_editor.tmpl", "biological genetic bombarder UI", 470, 450)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
@@ -375,21 +376,21 @@
|
||||
/obj/machinery/xenobio/editor/proc/move_into_editor(var/mob/user,var/mob/living/victim)
|
||||
|
||||
if(src.occupant)
|
||||
user << "<span class='danger'>The biological genetic bombarder is full, empty it first!</span>"
|
||||
user << "<span class='danger'>The [src] is full, empty it first!</span>"
|
||||
return
|
||||
|
||||
if(in_use)
|
||||
user << "<span class='danger'>The biological genetic bombarder is locked and running, wait for it to finish.</span>"
|
||||
user << "<span class='danger'>The [src] is locked and running, wait for it to finish.</span>"
|
||||
return
|
||||
|
||||
if(!(istype(victim, /mob/living/simple_animal/xeno/slime)) )
|
||||
user << "<span class='danger'>This is not a suitable subject for the biological genetic bombarder!</span>"
|
||||
user << "<span class='danger'>This is not a suitable subject for the [src]!</span>"
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>[user] starts to put [victim] into the biological genetic bombarder!</span>")
|
||||
user.visible_message("<span class='danger'>[user] starts to put [victim] into the [src]!</span>")
|
||||
src.add_fingerprint(user)
|
||||
if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
|
||||
user.visible_message("<span class='danger'>[user] stuffs [victim] into the biological genetic bombarder!</span>")
|
||||
user.visible_message("<span class='danger'>[user] stuffs [victim] into the [src]!</span>")
|
||||
if(victim.client)
|
||||
victim.client.perspective = EYE_PERSPECTIVE
|
||||
victim.client.eye = src
|
||||
|
||||
@@ -67,19 +67,20 @@
|
||||
src.occupant = victim
|
||||
|
||||
/obj/machinery/xenobio2/manualinjector/proc/eject_contents()
|
||||
for(var/obj/thing in (contents - component_parts - circuit - beaker))
|
||||
thing.forceMove(loc)
|
||||
eject_xeno()
|
||||
eject_beaker()
|
||||
return
|
||||
|
||||
/obj/machinery/xenobio2/manualinjector/proc/eject_xeno()
|
||||
if(occupant)
|
||||
occupant.forceMove(loc)
|
||||
occupant = null
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/xenobio2/manualinjector/proc/eject_beaker()
|
||||
if(beaker)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B = beaker
|
||||
B.loc = loc
|
||||
beaker = null
|
||||
return
|
||||
|
||||
/obj/machinery/xenobio2/manualinjector/proc/inject_reagents()
|
||||
if(!occupant)
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
injector.inject_reagents()
|
||||
active = 0
|
||||
if(href_list["eject_occupant"])
|
||||
injector.eject_contents()
|
||||
injector.eject_xeno()
|
||||
|
||||
if(href_list["eject_beaker"])
|
||||
injector.eject_beaker()
|
||||
|
||||
@@ -73,12 +73,14 @@
|
||||
icon_state = "restruct_1"
|
||||
spawn(30)
|
||||
var/mob/living/simple_animal/xeno/slime/S = new(src)
|
||||
S.traitdat = core.traits
|
||||
S.traitdat = new() //New instance, so that if the core is deleted, the slime retains a trait datum.
|
||||
S.nameVar = core.nameVar
|
||||
S.name = "[S.nameVar] baby slime"
|
||||
core.traits.copy_traits(S.traitdat)
|
||||
S.ProcessTraits()
|
||||
qdel(core)
|
||||
spawn(30)
|
||||
qdel(core)
|
||||
core = null //If qdel's being a bit slow or acting up, let's just make sure we can't clone the core.
|
||||
inuse = 0
|
||||
eject_slime()
|
||||
icon_state = "restruct_0"
|
||||
|
||||
@@ -24,7 +24,23 @@ Slime specific procs go here.
|
||||
traitdat.traits[TRAIT_XENO_CANLEARN] = prob(68)
|
||||
traitdat.traits[TRAIT_XENO_SPEED] = round(rand(-10,10))
|
||||
|
||||
|
||||
/mob/living/simple_animal/xeno/slime/RandomChemicals()
|
||||
..()
|
||||
if(prob(40))
|
||||
var/hasMutToxin
|
||||
for(var/R in traitdat.chems)
|
||||
if(R == "mutationtoxin")
|
||||
hasMutToxin = 1
|
||||
var/chemamount
|
||||
if(hasMutToxin)
|
||||
var/list/chemchoices = (xenoChemList - traitdat.chems)
|
||||
|
||||
var/chemtype = pick(chemchoices)
|
||||
chemamount = rand(1,5)
|
||||
traitdat.chems[chemtype] = chemamount
|
||||
else
|
||||
chemamount = rand(1,5)
|
||||
traitdat.chems["mutationtoxin"] = chemamount
|
||||
|
||||
/mob/living/simple_animal/xeno/slime/proc/GrowUp()
|
||||
GenerateAdult()
|
||||
|
||||
@@ -4,6 +4,7 @@ Slime definitions, Life and New live here.
|
||||
/mob/living/simple_animal/xeno/slime //Adult values are found here
|
||||
nameVar = "grey" //When mutated, nameVar might change.
|
||||
desc = "A shifting, mass of goo."
|
||||
faction = "slime"
|
||||
speak_emote = list("garbles", "chirps", "blurbles")
|
||||
colored = 1
|
||||
color = "#CACACA"
|
||||
@@ -68,6 +69,7 @@ Slime definitions, Life and New live here.
|
||||
"toxin" = list("toxic" = 0.5),
|
||||
"carpotoxin" = list("toxic" = 1, "mut" = 1.5),
|
||||
"phoron" = list("toxic" = 1.5, "mut" = 0.03),
|
||||
"virusfood" = list("nutr" = 1.5, "mut" = 0.32),
|
||||
"cyanide" = list("toxic" = 3.5),
|
||||
"slimejelly" = list("nutr" = 0.5),
|
||||
"amutationtoxin" = list("toxic" = 0.1, "heal" = 1.5, "mut" = 3),
|
||||
|
||||
@@ -8,6 +8,7 @@ Also includes Life and New
|
||||
/mob/living/simple_animal/xeno
|
||||
name = "Xeno"
|
||||
real_name = "Xeno"
|
||||
faction = "xeno" //Needs to be set.
|
||||
desc = "Something's broken, yell at someone."
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
@@ -46,33 +47,32 @@ Also includes Life and New
|
||||
|
||||
//Life additions
|
||||
/mob/living/simple_animal/xeno/Life()
|
||||
if(src.stat == DEAD)
|
||||
return 0
|
||||
|
||||
if(stasis)
|
||||
stasis--
|
||||
if(stasis < 0)
|
||||
stasis = 0
|
||||
return 0
|
||||
|
||||
..()
|
||||
handle_reagents()
|
||||
if((mut_level >= mut_max) && !(mutable & NOMUT))
|
||||
Mutate()
|
||||
mut_level -= mut_max
|
||||
if(!(stat == DEAD))
|
||||
handle_reagents()
|
||||
if((mut_level >= mut_max) && !(mutable & NOMUT))
|
||||
Mutate()
|
||||
mut_level -= mut_max
|
||||
|
||||
ProcessSpeechBuffer()
|
||||
ProcessSpeechBuffer()
|
||||
|
||||
//Have to feed the xenos somehow.
|
||||
if(nutrition < 0)
|
||||
nutrition = 0
|
||||
if((nutrition > 0 ) && traitdat.traits[TRAIT_XENO_EATS])
|
||||
if(nutrition >= 300)
|
||||
nutrition -= hunger_factor
|
||||
else
|
||||
if(traitdat.traits[TRAIT_XENO_EATS])
|
||||
health = starve_damage
|
||||
//Have to feed the xenos somehow.
|
||||
if(nutrition < 0)
|
||||
nutrition = 0
|
||||
if((nutrition > 0 ) && traitdat.traits[TRAIT_XENO_EATS])
|
||||
if(nutrition >= 300)
|
||||
nutrition -= hunger_factor
|
||||
else
|
||||
if(traitdat.traits[TRAIT_XENO_EATS])
|
||||
health = starve_damage
|
||||
|
||||
return 1 //Everything worked okay.
|
||||
return 1 //Everything worked okay.
|
||||
|
||||
/mob/living/simple_animal/xeno/New()
|
||||
|
||||
@@ -94,4 +94,8 @@ Also includes Life and New
|
||||
|
||||
if(!health)
|
||||
stat = DEAD
|
||||
|
||||
|
||||
/mob/living/simple_animal/xeno/Destroy()
|
||||
traitdat.Destroy() //Let's clean up after ourselves.
|
||||
traitdat = null
|
||||
..()
|
||||
@@ -10,4 +10,9 @@ Xenobiological product lives here as a basic type.
|
||||
var/source = "Unknown"
|
||||
var/product = "mess"
|
||||
var/nameVar = "blah"
|
||||
|
||||
/obj/item/xenoproduct/Destroy()
|
||||
traits.Destroy() //Let's not leave any traits hanging around.
|
||||
traits = null
|
||||
..()
|
||||
|
||||
Reference in New Issue
Block a user